From 0797434f510d3597fed93ddc7c5cb0d5c5d6a41d Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Tue, 8 May 2018 15:36:19 +0200 Subject: [PATCH 01/42] Fix typos in comments and in the README Make the decoding context optional --- README.md | 25 +++++------------------- src/mapcodes.adb | 3 ++- src/mapcodes.ads | 50 +++++++++++++++++++++++++++--------------------- 3 files changed, 35 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 01da23c..f2ab40c 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ Examples: -> "AR" Get_Territory_Alpha_Code (365, Shortest) - -> "US-AR" // Because AS is ambiguous (IN-AR) + -> "US-AR" // Because AR is ambiguous (IN-AR) Get_Territory_Alpha_Code (391, Shortest) -> "CA" // US-CA, not ambiguous @@ -197,14 +197,14 @@ With no limitation to a territory (and `Shortest` set), returns at least a world With a precision of 2, returns high precision mapcodes. - Encode ( (52.376514000, 4.908543375 40.786245000), Pecision -> 2) + Encode ( (52.376514000, 4.908543375 40.786245000), Precision -> 2) -> 49.4V-K3 NLD 'NLD 49.4V-K3' 112 -> VHXGB.1J9J-RD AAA VHXGB.1J9J-RD 532 ## Converting a Mapcode into a Coordinate There is only one operation, `decode`, which gives the coordinate of a mapcode. -It accepts an optional argument to define the territoy context of the mapcode. +It accepts an optional argument to define the territory context of the mapcode. The operation returns the coordinate (latitude and longitude in degrees), or raises the exception Decode_Error if the mapcode is not valid or ambiguous (in the context). @@ -264,7 +264,7 @@ territory number, followed by three possible mapcodes (Local, International and -> USA => 410: USA/USA/USA/USA -> Has subdivisions -Encode a coordinate with a context and a precision, put inforamtion of the shortest mapcode. +Encode a coordinate with a context and a precision, put information of the shortest mapcode. Information is the mapcode, the territory context of the mapcode, the full mapcode (territory and mapcode separated by a space and enclosed by quotes, except for international mapcodes) and territory number. @@ -303,28 +303,13 @@ Decode a mapcode with context. # Version History -### 1.0.4 +### 1.0.0 -* A little bit more strict check when precision is above 0 -* Add MMR in test scenario * Update years of copyright - -### 1.0.3 - * Fix and improve accuracy - -### 1.0.2 - -* More strict check of context * Add automatic tests of territory, encoding and decoding, including expected failures. Fix defects. - -### 1.0.1 - * Align max nr of mapcode results to C value, and check overflow * Get rid of global variable (Disambiguate) - -### 1.0.0 - * Initial version for public domain release. diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 1592a07..9d5911a 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -2464,7 +2464,8 @@ package body Mapcodes is Extra_Digits => Precision); end Encode; - function Decode (Mapcode, Context : String) return Coordinate is + function Decode (Mapcode : String; + Context : String := "") return Coordinate is Contextterritorynumber : Integer; Space1, Space2 : Natural; Part1, Part2 : As_U.Asu_Us; diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 19c5884..4eeeff6 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -20,7 +20,7 @@ package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.0.4/Data" + Mapcode_Ada_Version : constant String := "1.4/Data" & Mapcode_Data_Version; -- Real type @@ -29,14 +29,14 @@ package Mapcodes is ----------------- -- TERRITORIES -- ----------------- - -- Get_Territory_Number may raise if Territory or Context is not known + -- Get_Territory_Number may raise, if Territory or Context is not known: Unknown_Territory : exception; -- Valid territory number subtype Territory_Range is Natural range 0 .. 532; -- Given an alphacode (such as US-AL), return the territory number - -- or Error. + -- or raise Unknown_Territory -- A context territory helps to interpret ambiguous (abbreviated) -- alphacodes, such as "AL" function Get_Territory_Number (Territory : String; @@ -45,35 +45,38 @@ package Mapcodes is -- Return the alphacode (usually an ISO 3166 code) of a territory -- Format: Local (often ambiguous), International (full and unambiguous, - -- DEFAULT), or Shortest + -- DEFAULT), or Shortest (non ambiguous) type Territory_Formats is (Local, International, Shortest); function Get_Territory_Alpha_Code ( Territory_Number : Territory_Range; Format : Territory_Formats := International) return String; - -- Return full name of territory + -- Return full name of a territory function Get_Territory_Fullname (Territory_Number : Territory_Range) return String; - -- Return parent country of subdivision - -- Raise if Territory is not a subdivision + -- Return parent country of a rterritory that is a subdivision + -- May raise, if the territory is not a subdivision: Not_A_Subdivision : exception; -- subdivision) function Get_Parent_Of (Territory_Number : Territory_Range) return Territory_Range; - -- Return True if Territory is a state + -- Return True if a territory is a state function Is_Subdivision (Territory_Number : Territory_Range) return Boolean; - -- Return True if Territory is a country that has states + -- Return True if a territory is a country that has states function Has_Subdivision (Territory_Number : Territory_Range) return Boolean; + ------------------------------------ + -- ENCODING and DECODING MAPCODES -- + ------------------------------------ -- Coordinate in fraction of degrees type Coordinate is record Lat, Lon : Real; end record; - -- Encoding to Mapcodes + -- Array of mapcode information returned as the result of encoding type Mapcode_Info is record Mapcode : As_U.Asu_Us; Full_Mapcode : As_U.Asu_Us; @@ -82,14 +85,14 @@ package Mapcodes is end record; type Mapcode_Infos is array (Positive range <>) of Mapcode_Info; - -- Encode variants. - -- Return an array of mapcodes, each representing the specified coordinate. - -- If a territory is specified, only mapcodes (if any) within + -- Encode a coordinate into mapcodes + -- Returns an array of mapcodes, each representing the specified coordinate. + -- If a territory is specified, then only mapcodes (if any) within -- that territory are returned. if Earth is provided as territory then -- the 9-letter "international" mapcode is returned - -- The Shortest variants return at most one mapcode (the "default" and - -- "shortest possible" mapcode) in any territory. - -- The WithPrecision variants produce mapcodes extended with high-precision + -- The Shortest option make it return at most one mapcode (the "default" and + -- "shortest possible" mapcode) in any territory + -- The Precision option produces mapcodes extended with high-precision -- letters (the parameter specifies how many letters: 0, 1, or 2 subtype Precisions is Natural range 0 .. 2; Earth : constant String := "Earth"; @@ -97,13 +100,16 @@ package Mapcodes is Territory : String := ""; Shortest : Boolean := False; Precision : Precisions := 0) return Mapcode_Infos; - -- Decoding Mapcode + + -- Decode may raise, if the mapcode is not valid (in the context): Decode_Error : exception; - -- Decode a string (which may contain a full mapcode, including a territory) - -- the optional contextTerritoryNumber is used in case the mapcode - -- specifies no (unambiguous) territory. - -- Returns coordinate, or raises Decode_Error - function Decode (Mapcode, Context : String) return Coordinate; + -- Decode a mapcode + -- The optional context territory must be set when the mapcode denotes a local + -- (ambiguous) mapcode + -- Returns the coordinate of the mapcode, or raises Decode_Error if the + -- mapcode is not valid (or not valid in the privided context) + function Decode (Mapcode : String; + Context : String := "") return Coordinate; end Mapcodes; From c01ab2e57fa048ac2416ac61cd0c5787105ee79c Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Wed, 30 May 2018 21:16:56 +0200 Subject: [PATCH 02/42] Reorg and comment the fields of Encode Fix detection of invalid character In arguments and output of t_mapcode, the opt territory is now BEFORE Remove Ctrynams_Short --- README.md | 151 ++++++----- src/ctrynams_short.ads | 558 ----------------------------------------- src/mapcodes.adb | 9 +- src/mapcodes.ads | 66 ++--- src/t_mapcode.adb | 25 +- test/Scenario.txt | 136 +++++----- test/fulltest | 67 ++--- 7 files changed, 245 insertions(+), 767 deletions(-) delete mode 100644 src/ctrynams_short.ads diff --git a/README.md b/README.md index f2ab40c..111e584 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,8 @@ https://github.com/malaise/ada/tree/master/usr/mapcode # Ada Files for Mapcode Support -The following files, in directory `src`, provide utilities for mapcode processing: +The following files, in directory `src`, provide utilities for mapcode +processing: as_u.ads as_u.adb - Unbounded strings bits.ads bits.adb - Bit operations @@ -41,28 +42,32 @@ The following files provide the Ada interface for mapcodes: mapcode.ads mapcode.adb - Key operations for mapcode support ndata.ads - Data table for mapcode support - ctrynams.ads ctrynams_short.ads - Names of territories (in English) + ctrynams.ads - Names of territories (in English) The following file contains the main procedure for testing the interfaces: t_mapcode.adb - Command line tool to test Ada mapcodes -In directory `test`, the command `fulltest` launches a complete test of the library. +In directory `test`, the command `fulltest` launches a complete test of the +library. # Using the Library ## Operations related to territories -A territory is identified by a code (an ISO 3166 code such as “NLD” or "US-DC"), with some -possible aliases (example "US" = "USA"), and a unique number, from 0 for "VAT" (Vatican), -to 532 for "AAA" (International), defined as `Territory_Range`. +A territory is identified by a code (an ISO 3166 code such as “NLD” or "US-DC"), +with some possible aliases (example "US" = "USA"), and a unique number, from 0 +for "VAT" (Vatican), to 532 for "AAA" (International), defined as +`Territory_Range`. -Large territories (MX, IN, AU, BR, US, CA, RU and CN) are decomposed into subdivisions. +Large territories (MX, IN, AU, BR, US, CA, RU and CN) are decomposed into +subdivisions. -*`Get_Territory_Number` returns the territory number of a territory code. An optional context helps to interpret -ambiguous (abbreviated) alphacodes of subdivisions, such as "AL". If several subdivisions match the specification -(no context provided) it returns the lowest number that matches. +`Get_Territory_Number` returns the territory number of a territory code. An +optional context helps to interpret ambiguous (abbreviated) alphacodes of +subdivisions, such as "AL". If several subdivisions match the specification (no +context provided) it returns the lowest number that matches. Attribute | Description --- | --- @@ -110,7 +115,7 @@ Examples: Get_Territory_Alpha_Code (391, Shortest) -> "CA" // US-CA, not ambiguous -**Get_Territory_Fullname** returns the full common name of a territory +`Get_Territory_Fullname` returns the full common name of a territory Attribute | Description --- | --- @@ -128,32 +133,34 @@ Attribute | Description --- | --- `Territory_Number` | `Territory_Range` return value | `Territory_Range`, parent territory number -exceptions | Not_A_Subdivision, if the Territory_Number has no parent (i.e. is not a subdivision) +exceptions | `Not_A_Subdivision`, if the `Territory_Number` has no parent (i.e. is not a subdivision) -**Is_Subdivision** returns True if the provided territory is a subdivision. +`Is_Subdivision` returns True if the provided territory is a subdivision. attribute | description --- | --- -Territory_Number | Territory_Range -return value | boolean, True if and only if the Territory_Number is a subdivision +`Territory_Number` | `Territory_Range` +return value | boolean, True if and only if the `Territory_Number` is a subdivision -**Has_Subdivision** returns True if the provided territory has subdivisions. +`Has_Subdivision` returns True if the provided territory has subdivisions. attribute | description --- | --- -Territory_Number | Territory_Range -return value | boolean, True if and only if the Territory_Number has some subdivisions +`Territory_Number` | `Territory_Range` +return value | boolean, True if and only if the `Territory_Number` has some subdivisions ## Converting a Coordinate into Mapcodes -In the mapcode system, territories are limited by rectangles, not by actual or political borders. -This means that a coordinate will often yield mapcode possibilities in more than one territory. -Each possibility correctly represents the coordinate, but which one is *politically* correct is a -choice that must be made (in advance or afterwards) by the caller or user of the routines. +In the mapcode system, territories are limited by rectangles, not by actual or +political borders. This means that a coordinate will often yield mapcode +possibilities in more than one territory. Each possibility correctly represents +the coordinate, but which one is *politically* correct is a choice that must be +made (in advance or afterwards) by the caller or user of the routines. -There is only one operation, `encode`, which generates the possible mapcodes for a coordinate. -At least it takes as input a latitude in degrees (all values allowed, maximized by routine to 90.0 and minimized -to -90.0) and a longitude in degrees (all values allowed, wrapped to -180.0 and +180.0). +There is only one operation, `Encode`, which generates the possible mapcodes +for a coordinate. At least it takes as input a latitude in degrees (all values +allowed, maximized by routine to 90.0 and minimized to -90.0) and a longitude +in degrees (all values allowed, wrapped to -180.0 and +180.0). The other arguments are options to be adapted to the situation. @@ -161,53 +168,57 @@ The operation returns an array (possibly with only one element) of mapcodes. attribute | description --- | --- -Coord | coordinate (latitude and longitude in degrees, reals) to encode as mapcodes -Territory | optional string, (an ISO code such as “NLD”) territory for the scope of the mapcodes -Shortest | boolean, default True, to return only the shortest possible mapcode for the territory or each possible territory -Precision | 0, 1 or 2, default 0, precision of the mapcode to generate -return value | array of mapcode informations (mapcode, territory ISO code and territory number) +`Coord` | coordinate (latitude and longitude in degrees, reals) to encode as mapcodes +`Territory` | optional string, (an ISO code such as “NLD”) territory for the scope of the mapcodes +`Shortest` | boolean, default True, to return only the shortest possible mapcode for the territory or each possible territory +`Precision` | 0, 1 or 2, default 0, precision of the mapcode to generate +return value | array of mapcode informations (territory ISO code, mapcode, full mapcode, and territory number) -This function will return at least one result: the shortest mapcode (if any) that exists -for that coordinate within the specified territory. Such a mapcode is also -sometimes called the “default mapcode” for a particular territory. +This function will return at least one result: the shortest mapcode (if any) +that exists for that coordinate within the specified territory. Such a mapcode +is also sometimes called the “default mapcode” for a particular territory. Examples: -With a territory specified, and `Shortest` set, returns the default mapcode for this territory. +With a `Territory` specified, and `Shortest` set, returns the default mapcode for this +territory. Encode ( (52.376514000, 4.908543375 40.786245000), "NLD") - -> 49.4V NLD 'NLD 49.4V' 112 + -> NLD 49.4V 'NLD 49.4V' 112 -With a territory specified, and `Shortest` set to `False`, returns all the possible mapcodes +With a `Territory` specified, and `Shortest` set to False, returns all the possible mapcodes for this territory. - Encode ( (52.376514000, 4.908543375 40.786245000), "NLD", False) - -> 49.4V NLD 'NLD 49.4V' 112 - -> G9.VWG NLD 'NLD G9.VWG' 112 - -> DL6.H9L NLD 'NLD DL6.H9L' 112 - -> P25Z.N3Z NLD 'NLD P25Z.N3Z' 112 + Encode ( (52.376514000, 4.908543375 40.786245000), "NLD", Shortest => False) + -> NLD 49.4V 'NLD 49.4V' 112 + -> NLD G9.VWG 'NLD G9.VWG' 112 + -> NLD DL6.H9L 'NLD DL6.H9L' 112 + -> NLD P25Z.N3Z 'NLD P25Z.N3Z' 112 -With no limitation to a territory (and `Shortest` set), returns at least a worldwide mapcode -(territory AAA, code 532), and possibly some mapcodes in territories. +With no limitation to a territory (and `Shortest` set), returns at least a +worldwide mapcode (territory AAA, code 532), and possibly some mapcodes in +territories. Encode ( (52.376514000, 4.908543375 40.786245000) ) - -> 49.4V NLD 'NLD 49.4V' 112 - -> VHXGB.1J9J AAA VHXGB.1J9J 532 + -> NLD 49.4V 'NLD 49.4V' 112 + -> AAA VHXGB.1J9J 'VHXGB.1J9J' 532 -With a precision of 2, returns high precision mapcodes. +With a `Precision` of 2, returns high precision mapcodes. - Encode ( (52.376514000, 4.908543375 40.786245000), Precision -> 2) - -> 49.4V-K3 NLD 'NLD 49.4V-K3' 112 - -> VHXGB.1J9J-RD AAA VHXGB.1J9J-RD 532 + Encode ( (52.376514000, 4.908543375 40.786245000), Precision => 2) + -> NLD 49.4V-K3 'NLD 49.4V-K3' 112 + -> AAA VHXGB.1J9J-RD 'VHXGB.1J9J-RD' 532 ## Converting a Mapcode into a Coordinate -There is only one operation, `decode`, which gives the coordinate of a mapcode. -It accepts an optional argument to define the territory context of the mapcode. +There is only one operation, `Decode`, which gives the coordinate of a +mapcode. It accepts an optional argument to define the territory context of +the mapcode. -The operation returns the coordinate (latitude and longitude in degrees), or raises the -exception Decode_Error if the mapcode is not valid or ambiguous (in the context). +The operation returns the coordinate (latitude and longitude in degrees), or +raises the exception `Decode_Error` if the mapcode is not valid or ambiguous +(in the context). Attribute | Description --- | --- @@ -218,20 +229,22 @@ exceptions | `Decode_Error`, if the mapcode is invalid or ambiguous in the Conte Examples: -Without any context, only accept a worldwide mapcode. +Without any `Context`, only accept a worldwide mapcode. Decode ("49.4V") Raises Decode_Error // Ambiguous - - Decode ("49.4V", NLD) - -> (52.376514000, 4.908543375) - Decode (VHXGB.1J9J) + Decode ("VHXGB.1J9J") -> (52.376504000, 4.908535500) +With a `Context` set, decode a short mapcode. + + Decode ("49.4V", "NLD") + -> (52.376514000, 4.908543375) + # Using the testing program -The command line testing tool `t_mapcode** can perform 3 actions: +The command line testing tool `t_mapcode` can perform 3 actions: * Display information on a territory number or territory ISO 3166 code @@ -244,7 +257,7 @@ Usage: t_mapcode -h // This help -t // Territory info - -d [ ] // Decode + -d [ ] // Decode -c [ ] // Encode ::= [ ] [ ] [ ] @@ -270,14 +283,14 @@ and mapcode separated by a space and enclosed by quotes, except for internationa t_mapcode -c 52.376482500 4.908511796 NLD 2 -> 52.376482500 4.908511796 - -> => 49.4V-V2 NLD 'NLD 49.4V-V2' 112 + -> => NLD 49.4V-V2 'NLD 49.4V-V2' 112 Put all shorters mapcodes of a coordinate (no context). t_mapcode -c 52.376482500 4.908511796 -> 52.376482500 4.908511796 - -> => 49.4V NLD 'NLD 49.4V' 112 - -> => VHXGB.1J9J AAA VHXGB.1J9J 532 + -> => NLD 49.4V 'NLD 49.4V' 112 + -> => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 Put all mapcodes of a coordinate with a context. @@ -291,18 +304,28 @@ Put all mapcodes of a coordinate with a context. Decode a mapcode, no context. t_mapcode -d 49.4V + -> 49.4V -> raised MAPCODES.DECODE_ERROR t_mapcode -d VHXGB.1J9J + -> VHXGB.1J9J -> => 52.376504000 4.908535500 Decode a mapcode with context. - t_mapcode 49.4V NLD + t_mapcode -d NLD 49.4V + -> NLD 49.4V -> => 52.376514000 4.908543375 # Version History +### 1.0.4 + +* Fix detection of invalid character in mapcode extension +* Improve comments +* In t_mapcode arguments and inputs, move the optional context before the mapcode +* Remove useless ctrynams_short.ads + ### 1.0.0 * Update years of copyright diff --git a/src/ctrynams_short.ads b/src/ctrynams_short.ads deleted file mode 100644 index d4c74a7..0000000 --- a/src/ctrynams_short.ads +++ /dev/null @@ -1,558 +0,0 @@ --- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) --- --- Licensed under the Apache License, Version 2.0 (the "License"); --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- ----------------------------------------------------------------------------- - -with As_U; -package Ctrynams_Short is - -Isofullname : constant array (Positive range <>) of As_U.Asu_Us := ( -As_U.Tus ("Vatican (Holy See)"), -As_U.Tus ("Monaco"), -As_U.Tus ("Gibraltar"), -As_U.Tus ("Tokelau"), -As_U.Tus ("Cocos Islands (Keeling Islands)"), -As_U.Tus ("Saint-Barthelemy"), -As_U.Tus ("Nauru"), -As_U.Tus ("Tuvalu"), -As_U.Tus ("Macau (Aomen)"), -As_U.Tus ("Sint Maarten"), -As_U.Tus ("Saint Martin"), -As_U.Tus ("Norfolk and Philip Island (Philip Island) (Norfolk Island)"), -As_U.Tus ("Pitcairn Islands (Pitcairn, Henderson, Ducie and Oeno Islands)"), -As_U.Tus ("Bouvet Island"), -As_U.Tus ("Bermuda (Somers Isles)"), -As_U.Tus ("British Indian Ocean Territory"), -As_U.Tus ("San Marino"), -As_U.Tus ("Guernsey"), -As_U.Tus ("Anguilla"), -As_U.Tus ("Montserrat"), -As_U.Tus ("Jersey"), -As_U.Tus ("Christmas Island"), -As_U.Tus ("Wallis and Futuna (Futuna) (Wallis)"), -As_U.Tus ("British Virgin Islands (Virgin Islands, British)"), -As_U.Tus ("Liechtenstein"), -As_U.Tus ("Aruba"), -As_U.Tus ("Marshall Islands"), -As_U.Tus ("American Samoa (Samoa, American)"), -As_U.Tus ("Cook Islands"), -As_U.Tus ("Saint Pierre and Miquelon (Miquelon) (Saint Pierre)"), -As_U.Tus ("Niue"), -As_U.Tus ("Saint Kitts and Nevis (Nevis) (Saint Kitts)"), -As_U.Tus ("Cayman islands"), -As_U.Tus ("Bonaire, St Eustasuis and Saba (Bonaire) (Saba) (St Eustasius)"), -As_U.Tus ("Maldives"), -As_U.Tus ("Saint Helena, Ascension and Tristan da Cunha (Saint Helena) (Ascension) (Tristan da Cunha)"), -As_U.Tus ("Malta"), -As_U.Tus ("Grenada"), -As_U.Tus ("Virgin Islands of the United States (US Virgin Islands) (American Virgin Islands)"), -As_U.Tus ("Mayotte (Maore)"), -As_U.Tus ("Svalbard and Jan Mayen (Svalbard) (Jan Mayen) (Spitsbergen)"), -As_U.Tus ("Saint Vincent and the Grenadines (Saint Vincent) (Grenadines)"), -As_U.Tus ("Heard Island and McDonald Islands (Heard Island) (McDonald Islands)"), -As_U.Tus ("Barbados"), -As_U.Tus ("Antigua and Barbuda (Antigua) (Barbuda)"), -As_U.Tus ("Curacao"), -As_U.Tus ("Seychelles"), -As_U.Tus ("Palau"), -As_U.Tus ("Northern Mariana Islands"), -As_U.Tus ("Andorra"), -As_U.Tus ("Guam"), -As_U.Tus ("Isle of Mann (Mann)"), -As_U.Tus ("Saint Lucia"), -As_U.Tus ("Micronesia (Federated States of Micronesia)"), -As_U.Tus ("Singapore"), -As_U.Tus ("Tonga"), -As_U.Tus ("Dominica"), -As_U.Tus ("Bahrain"), -As_U.Tus ("Kiribati"), -As_U.Tus ("Turks and Caicos Islands (Turks Islands) (Caicos Islands)"), -As_U.Tus ("Sao Tome and Principe (Sao Tome) (Principe)"), -As_U.Tus ("Hong Kong (Xianggang)"), -As_U.Tus ("Martinique"), -As_U.Tus ("Faroe Islands"), -As_U.Tus ("Guadeloupe"), -As_U.Tus ("Comoros"), -As_U.Tus ("Mauritius"), -As_U.Tus ("Reunion"), -As_U.Tus ("Luxembourg"), -As_U.Tus ("Samoa"), -As_U.Tus ("South Georgia and the South Sandwich Islands (South Georgia) (South Sandwich Islands)"), -As_U.Tus ("French Polynesia"), -As_U.Tus ("Cape Verde (Cabo Verde) (Republic of Cabo Verde)"), -As_U.Tus ("Trinidad and Tobago (Trinidad) (Tobago)"), -As_U.Tus ("Brunei"), -As_U.Tus ("French Southern and Antarctic Lands"), -As_U.Tus ("Puerto Rico"), -As_U.Tus ("Cyprus"), -As_U.Tus ("Lebanon (Lebanese Republic)"), -As_U.Tus ("Jamaica"), -As_U.Tus ("Gambia (The Gambia)"), -As_U.Tus ("Qatar"), -As_U.Tus ("Falkland Islands (The Falklands)"), -As_U.Tus ("Vanuatu"), -As_U.Tus ("Montenegro"), -As_U.Tus ("Bahamas"), -As_U.Tus ("Timor-Leste (East Timor)"), -As_U.Tus ("Swaziland"), -As_U.Tus ("Kuwait"), -As_U.Tus ("Fiji"), -As_U.Tus ("New Caledonia"), -As_U.Tus ("Slovenia"), -As_U.Tus ("Israel"), -As_U.Tus ("Palestinian territories (State of Palestine)"), -As_U.Tus ("El Salvador"), -As_U.Tus ("Belize"), -As_U.Tus ("Djibouti"), -As_U.Tus ("Macedonia (FYROM) (Former Yugoslav Republic of Macedonia)"), -As_U.Tus ("Rwanda"), -As_U.Tus ("Haiti"), -As_U.Tus ("Burundi"), -As_U.Tus ("Equatorial Guinea"), -As_U.Tus ("Albania"), -As_U.Tus ("Solomon Islands"), -As_U.Tus ("Armenia"), -As_U.Tus ("Lesotho"), -As_U.Tus ("Belgium"), -As_U.Tus ("Moldova"), -As_U.Tus ("Guinea-Bissau"), -As_U.Tus ("Taiwan (Republic of China)"), -As_U.Tus ("Bhutan"), -As_U.Tus ("Switzerland (Swiss Confederation)"), -As_U.Tus ("Netherlands (The Netherlands)"), -As_U.Tus ("Denmark"), -As_U.Tus ("Estonia"), -As_U.Tus ("Dominican Republic"), -As_U.Tus ("Slovakia (Slovak Republic)"), -As_U.Tus ("Costa Rica"), -As_U.Tus ("Bosnia and Herzegovina"), -As_U.Tus ("Croatia"), -As_U.Tus ("Togo (Togolese Republic)"), -As_U.Tus ("Latvia"), -As_U.Tus ("Lithuania"), -As_U.Tus ("Sri Lanka"), -As_U.Tus ("Georgia"), -As_U.Tus ("Ireland"), -As_U.Tus ("Sierra Leone"), -As_U.Tus ("Panama"), -As_U.Tus ("Czech Republic"), -As_U.Tus ("French Guiana (Guiana)"), -As_U.Tus ("United Arab Emirates (Emirates)"), -As_U.Tus ("Austria"), -As_U.Tus ("Azerbaijan"), -As_U.Tus ("Serbia"), -As_U.Tus ("Jordan"), -As_U.Tus ("Portugal (Portuguese Republic)"), -As_U.Tus ("Hungary"), -As_U.Tus ("South Korea (Republic of Korea) (Korea, South)"), -As_U.Tus ("Iceland"), -As_U.Tus ("Guatemala"), -As_U.Tus ("Cuba"), -As_U.Tus ("Bulgaria"), -As_U.Tus ("Liberia"), -As_U.Tus ("Honduras"), -As_U.Tus ("Benin"), -As_U.Tus ("Eritrea"), -As_U.Tus ("Malawi"), -As_U.Tus ("North Korea (Democratic People's Republic of Korea) (Korea, North)"), -As_U.Tus ("Nicaragua"), -As_U.Tus ("Greece (Hellenic Republic) (Hellas)"), -As_U.Tus ("Tajikistan"), -As_U.Tus ("Bangladesh"), -As_U.Tus ("Nepal"), -As_U.Tus ("Tunisia (Tunisian Republic)"), -As_U.Tus ("Suriname"), -As_U.Tus ("Uruguay"), -As_U.Tus ("Cambodia"), -As_U.Tus ("Syria (Syrian Arab Republic)"), -As_U.Tus ("Senegal"), -As_U.Tus ("Kyrgyzstan (Kyrgyz Republic)"), -As_U.Tus ("Belarus"), -As_U.Tus ("Guyana"), -As_U.Tus ("Laos (Lao People's Democratic Republic)"), -As_U.Tus ("Romania"), -As_U.Tus ("Ghana"), -As_U.Tus ("Uganda"), -As_U.Tus ("United Kingdom (Scotland) (Great Britain) (England) " - & "(Northern Ireland) (Ireland, Northern) (Britain) " - & "(United Kingdom of Great Britain and Northern Ireland)"), -As_U.Tus ("Guinea (Guinea-Conakry)"), -As_U.Tus ("Ecuador"), -As_U.Tus ("Western Sahara (Sahrawi Arab Democratic Republic)"), -As_U.Tus ("Gabon (Gabonese Republic)"), -As_U.Tus ("New Zealand"), -As_U.Tus ("Burkina Faso"), -As_U.Tus ("Philippines"), -As_U.Tus ("Italy (Italian Republic)"), -As_U.Tus ("Oman"), -As_U.Tus ("Poland"), -As_U.Tus ("Ivory Coast (Cote d'Ivoire) (Republic of Cote d'Ivoire)"), -As_U.Tus ("Norway"), -As_U.Tus ("Malaysia"), -As_U.Tus ("Vietnam"), -As_U.Tus ("Finland"), -As_U.Tus ("Congo-Brazzaville (West Congo) (Republic of the Congo)"), -As_U.Tus ("Germany"), -As_U.Tus ("Japan"), -As_U.Tus ("Zimbabwe"), -As_U.Tus ("Paraguay"), -As_U.Tus ("Iraq"), -As_U.Tus ("Morocco"), -As_U.Tus ("Uzbekistan"), -As_U.Tus ("Sweden"), -As_U.Tus ("Papua New Guinea"), -As_U.Tus ("Cameroon"), -As_U.Tus ("Turkmenistan"), -As_U.Tus ("Spain"), -As_U.Tus ("Thailand"), -As_U.Tus ("Yemen"), -As_U.Tus ("France (French Republic)"), -As_U.Tus ("Aaland Islands"), -As_U.Tus ("Kenya"), -As_U.Tus ("Botswana"), -As_U.Tus ("Madagascar"), -As_U.Tus ("Ukraine"), -As_U.Tus ("South Sudan"), -As_U.Tus ("Central African Republic"), -As_U.Tus ("Somalia"), -As_U.Tus ("Afghanistan"), -As_U.Tus ("Myanmar (Burma)"), -As_U.Tus ("Zambia"), -As_U.Tus ("Chile"), -As_U.Tus ("Turkey"), -As_U.Tus ("Pakistan"), -As_U.Tus ("Mozambique"), -As_U.Tus ("Namibia"), -As_U.Tus ("Venezuela"), -As_U.Tus ("Nigeria"), -As_U.Tus ("Tanzania"), -As_U.Tus ("Egypt"), -As_U.Tus ("Mauritania"), -As_U.Tus ("Bolivia"), -As_U.Tus ("Ethiopia"), -As_U.Tus ("Colombia"), -As_U.Tus ("South Africa"), -As_U.Tus ("Mali"), -As_U.Tus ("Angola"), -As_U.Tus ("Niger"), -As_U.Tus ("Chad"), -As_U.Tus ("Peru"), -As_U.Tus ("Mongolia"), -As_U.Tus ("Iran (Persia)"), -As_U.Tus ("Libya"), -As_U.Tus ("Sudan"), -As_U.Tus ("Indonesia"), -As_U.Tus ("Federal District"), -As_U.Tus ("Tlaxcala"), -As_U.Tus ("Morelos"), -As_U.Tus ("Aguascalientes"), -As_U.Tus ("Colima"), -As_U.Tus ("Queretaro"), -As_U.Tus ("Hidalgo"), -As_U.Tus ("Mexico State"), -As_U.Tus ("Tabasco"), -As_U.Tus ("Nayarit"), -As_U.Tus ("Guanajuato"), -As_U.Tus ("Puebla"), -As_U.Tus ("Yucatan"), -As_U.Tus ("Quintana Roo"), -As_U.Tus ("Sinaloa"), -As_U.Tus ("Campeche"), -As_U.Tus ("Michoacan"), -As_U.Tus ("San Luis Potosi"), -As_U.Tus ("Guerrero"), -As_U.Tus ("Nuevo Leon (New Leon)"), -As_U.Tus ("Baja California"), -As_U.Tus ("Veracruz"), -As_U.Tus ("Chiapas"), -As_U.Tus ("Baja California Sur"), -As_U.Tus ("Zacatecas"), -As_U.Tus ("Jalisco"), -As_U.Tus ("Tamaulipas"), -As_U.Tus ("Oaxaca"), -As_U.Tus ("Durango"), -As_U.Tus ("Coahuila"), -As_U.Tus ("Sonora"), -As_U.Tus ("Chihuahua"), -As_U.Tus ("Greenland"), -As_U.Tus ("Saudi Arabia"), -As_U.Tus ("Congo-Kinshasa (Democratic Republic of the Congo) (East Congo)"), -As_U.Tus ("Algeria"), -As_U.Tus ("Kazakhstan"), -As_U.Tus ("Argentina (Argentine Republic)"), -As_U.Tus ("Daman and Diu"), -As_U.Tus ("Dadra and Nagar Haveli (Dadra) (Nagar Haveli)"), -As_U.Tus ("Chandigarh"), -As_U.Tus ("Andaman and Nicobar (Andaman) (Nicobar)"), -As_U.Tus ("Lakshadweep"), -As_U.Tus ("Delhi"), -As_U.Tus ("Meghalaya"), -As_U.Tus ("Nagaland"), -As_U.Tus ("Manipur"), -As_U.Tus ("Tripura"), -As_U.Tus ("Mizoram"), -As_U.Tus ("Sikkim"), -As_U.Tus ("Punjab"), -As_U.Tus ("Haryana"), -As_U.Tus ("Arunachal Pradesh"), -As_U.Tus ("Assam"), -As_U.Tus ("Bihar"), -As_U.Tus ("Uttarakhand"), -As_U.Tus ("Goa"), -As_U.Tus ("Kerala"), -As_U.Tus ("Tamil Nadu"), -As_U.Tus ("Himachal Pradesh"), -As_U.Tus ("Jammu and Kashmir (Jammu) (Kashmir)"), -As_U.Tus ("Chhattisgarh"), -As_U.Tus ("Jharkhand"), -As_U.Tus ("Karnataka"), -As_U.Tus ("Rajasthan"), -As_U.Tus ("Odisha (Orissa)"), -As_U.Tus ("Gujarat"), -As_U.Tus ("West Bengal"), -As_U.Tus ("Madhya Pradesh"), -As_U.Tus ("Telangana"), -As_U.Tus ("Andhra Pradesh"), -As_U.Tus ("Maharashtra"), -As_U.Tus ("Uttar Pradesh"), -As_U.Tus ("Puducherry"), -As_U.Tus ("New South Wales"), -As_U.Tus ("Australian Capital Territory"), -As_U.Tus ("Jervis Bay Territory"), -As_U.Tus ("Northern Territory"), -As_U.Tus ("South Australia"), -As_U.Tus ("Tasmania"), -As_U.Tus ("Victoria"), -As_U.Tus ("Western Australia"), -As_U.Tus ("Queensland"), -As_U.Tus ("Distrito Federal"), -As_U.Tus ("Sergipe"), -As_U.Tus ("Alagoas"), -As_U.Tus ("Rio de Janeiro"), -As_U.Tus ("Espirito Santo"), -As_U.Tus ("Rio Grande do Norte"), -As_U.Tus ("Paraiba"), -As_U.Tus ("Santa Catarina"), -As_U.Tus ("Pernambuco"), -As_U.Tus ("Amapa"), -As_U.Tus ("Ceara"), -As_U.Tus ("Acre"), -As_U.Tus ("Parana"), -As_U.Tus ("Roraima"), -As_U.Tus ("Rondonia"), -As_U.Tus ("Sao Paulo"), -As_U.Tus ("Piaui"), -As_U.Tus ("Tocantins"), -As_U.Tus ("Rio Grande do Sul"), -As_U.Tus ("Maranhao"), -As_U.Tus ("Goias"), -As_U.Tus ("Mato Grosso do Sul"), -As_U.Tus ("Bahia"), -As_U.Tus ("Minas Gerais"), -As_U.Tus ("Mato Grosso"), -As_U.Tus ("Para"), -As_U.Tus ("Amazonas"), -As_U.Tus ("District of Columbia (Washington, D.C.)"), -As_U.Tus ("Rhode Island"), -As_U.Tus ("Delaware"), -As_U.Tus ("Connecticut"), -As_U.Tus ("New Jersey"), -As_U.Tus ("New Hampshire"), -As_U.Tus ("Vermont"), -As_U.Tus ("Massachusetts"), -As_U.Tus ("Hawaii"), -As_U.Tus ("Maryland"), -As_U.Tus ("West Virginia"), -As_U.Tus ("South Carolina"), -As_U.Tus ("Maine"), -As_U.Tus ("Indiana"), -As_U.Tus ("Kentucky"), -As_U.Tus ("Tennessee"), -As_U.Tus ("Virginia"), -As_U.Tus ("Ohio"), -As_U.Tus ("Pennsylvania"), -As_U.Tus ("Mississippi"), -As_U.Tus ("Louisiana"), -As_U.Tus ("Alabama"), -As_U.Tus ("Arkansas"), -As_U.Tus ("North Carolina"), -As_U.Tus ("New York"), -As_U.Tus ("Iowa"), -As_U.Tus ("Illinois"), -As_U.Tus ("Georgia"), -As_U.Tus ("Wisconsin"), -As_U.Tus ("Florida"), -As_U.Tus ("Missouri"), -As_U.Tus ("Oklahoma"), -As_U.Tus ("North Dakota"), -As_U.Tus ("Washington"), -As_U.Tus ("South Dakota"), -As_U.Tus ("Nebraska"), -As_U.Tus ("Kansas"), -As_U.Tus ("Idaho"), -As_U.Tus ("Utah"), -As_U.Tus ("Minnesota"), -As_U.Tus ("Michigan"), -As_U.Tus ("Wyoming"), -As_U.Tus ("Oregon"), -As_U.Tus ("Colorado"), -As_U.Tus ("Nevada"), -As_U.Tus ("Arizona"), -As_U.Tus ("New Mexico"), -As_U.Tus ("Montana"), -As_U.Tus ("California"), -As_U.Tus ("Texas"), -As_U.Tus ("Alaska"), -As_U.Tus ("British Columbia"), -As_U.Tus ("Alberta"), -As_U.Tus ("Ontario"), -As_U.Tus ("Quebec"), -As_U.Tus ("Saskatchewan"), -As_U.Tus ("Manitoba"), -As_U.Tus ("Newfoundland and Labrador (Newfoundland) (Labrador)"), -As_U.Tus ("New Brunswick"), -As_U.Tus ("Nova Scotia"), -As_U.Tus ("Prince Edward Island"), -As_U.Tus ("Yukon"), -As_U.Tus ("Northwest Territories"), -As_U.Tus ("Nunavut"), -As_U.Tus ("India"), -As_U.Tus ("Australia"), -As_U.Tus ("Brazil"), -As_U.Tus ("USA (United States of America) (America)"), -As_U.Tus ("Mexico (United Mexican States)"), -As_U.Tus ("Moscow"), -As_U.Tus ("Saint Petersburg"), -As_U.Tus ("Kaliningrad Oblast"), -As_U.Tus ("Ingushetia"), -As_U.Tus ("Adygea Republic"), -As_U.Tus ("North Ossetia-Alania Republic"), -As_U.Tus ("Kabardino-Balkar Republic"), -As_U.Tus ("Karachay-Cherkess Republic"), -As_U.Tus ("Chechen Republic (Chechnya) (Ichkeria)"), -As_U.Tus ("Chuvash Republic"), -As_U.Tus ("Ivanovo Oblast"), -As_U.Tus ("Lipetsk Oblast"), -As_U.Tus ("Oryol Oblast"), -As_U.Tus ("Tula Oblast"), -As_U.Tus ("Belgorod Oblast"), -As_U.Tus ("Vladimir Oblast"), -As_U.Tus ("Kursk Oblast"), -As_U.Tus ("Kaluga Oblast"), -As_U.Tus ("Tambov Oblast"), -As_U.Tus ("Bryansk Oblast"), -As_U.Tus ("Yaroslavl Oblast"), -As_U.Tus ("Ryazan Oblast"), -As_U.Tus ("Astrakhan Oblast"), -As_U.Tus ("Moscow Oblast"), -As_U.Tus ("Smolensk Oblast"), -As_U.Tus ("Dagestan Republic"), -As_U.Tus ("Voronezh Oblast"), -As_U.Tus ("Novgorod Oblast"), -As_U.Tus ("Pskov Oblast"), -As_U.Tus ("Kostroma Oblast"), -As_U.Tus ("Stavropol Krai"), -As_U.Tus ("Krasnodar Krai"), -As_U.Tus ("Kalmykia Republic"), -As_U.Tus ("Tver Oblast"), -As_U.Tus ("Leningrad Oblast"), -As_U.Tus ("Rostov Oblast"), -As_U.Tus ("Volgograd Oblast"), -As_U.Tus ("Vologda Oblast"), -As_U.Tus ("Murmansk Oblast"), -As_U.Tus ("Karelia Republic"), -As_U.Tus ("Nenets Autonomous Okrug"), -As_U.Tus ("Komi Republic"), -As_U.Tus ("Arkhangelsk Oblast"), -As_U.Tus ("Mordovia Republic"), -As_U.Tus ("Nizhny Novgorod Oblast"), -As_U.Tus ("Penza Oblast"), -As_U.Tus ("Kirov Oblast"), -As_U.Tus ("Mari El Republic"), -As_U.Tus ("Orenburg Oblast"), -As_U.Tus ("Ulyanovsk Oblast"), -As_U.Tus ("Perm Krai"), -As_U.Tus ("Bashkortostan Republic"), -As_U.Tus ("Udmurt Republic"), -As_U.Tus ("Tatarstan Republic"), -As_U.Tus ("Samara Oblast"), -As_U.Tus ("Saratov Oblast"), -As_U.Tus ("Yamalo-Nenets"), -As_U.Tus ("Khanty-Mansi"), -As_U.Tus ("Sverdlovsk Oblast"), -As_U.Tus ("Tyumen Oblast"), -As_U.Tus ("Kurgan Oblast"), -As_U.Tus ("Chelyabinsk Oblast"), -As_U.Tus ("Buryatia Republic"), -As_U.Tus ("Zabaykalsky Krai"), -As_U.Tus ("Irkutsk Oblast"), -As_U.Tus ("Novosibirsk Oblast"), -As_U.Tus ("Tomsk Oblast"), -As_U.Tus ("Omsk Oblast"), -As_U.Tus ("Khakassia Republic"), -As_U.Tus ("Kemerovo Oblast"), -As_U.Tus ("Altai Republic"), -As_U.Tus ("Altai Krai"), -As_U.Tus ("Tuva Republic"), -As_U.Tus ("Krasnoyarsk Krai"), -As_U.Tus ("Magadan Oblast"), -As_U.Tus ("Chukotka Okrug"), -As_U.Tus ("Kamchatka Krai"), -As_U.Tus ("Sakhalin Oblast"), -As_U.Tus ("Primorsky Krai"), -As_U.Tus ("Jewish Autonomous Oblast"), -As_U.Tus ("Khabarovsk Krai"), -As_U.Tus ("Amur Oblast"), -As_U.Tus ("Sakha Republic (Yakutia Republic)"), -As_U.Tus ("Canada"), -As_U.Tus ("Russia (Russian Federation)"), -As_U.Tus ("Shanghai"), -As_U.Tus ("Tianjin"), -As_U.Tus ("Beijing"), -As_U.Tus ("Hainan"), -As_U.Tus ("Ningxia Hui"), -As_U.Tus ("Chongqing"), -As_U.Tus ("Zhejiang"), -As_U.Tus ("Jiangsu"), -As_U.Tus ("Fujian"), -As_U.Tus ("Anhui"), -As_U.Tus ("Liaoning"), -As_U.Tus ("Shandong"), -As_U.Tus ("Shanxi"), -As_U.Tus ("Jiangxi"), -As_U.Tus ("Henan"), -As_U.Tus ("Guizhou"), -As_U.Tus ("Guangdong"), -As_U.Tus ("Hubei"), -As_U.Tus ("Jilin"), -As_U.Tus ("Hebei (Yanzhao)"), -As_U.Tus ("Shaanxi"), -As_U.Tus ("Nei Mongol (Inner Mongolia)"), -As_U.Tus ("Heilongjiang"), -As_U.Tus ("Hunan"), -As_U.Tus ("Guangxi Zhuang"), -As_U.Tus ("Sichuan"), -As_U.Tus ("Yunnan"), -As_U.Tus ("Xizang (Tibet)"), -As_U.Tus ("Gansu"), -As_U.Tus ("Qinghai (Tsinghai)"), -As_U.Tus ("Xinjiang Uyghur"), -As_U.Tus ("China"), -As_U.Tus ("United States Minor Outlying Islands"), -As_U.Tus ("Clipperton Island"), -As_U.Tus ("Antarctica"), -As_U.Tus ("International (Worldwide) (Earth)"), -As_U.Tus ("?")); -end Ctrynams_Short; - diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 9d5911a..4f57728 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -1452,7 +1452,7 @@ package body Mapcodes is Idx : Positive; Column1, Row1, Column2, Row2 : Lint; C1, C2 : Character; - N1, N2 : Natural; + N1, N2 : Integer; Ldivx4, Ldivy : Lint; Lon4, Lat1: Lint; Mapcode_Zone : Mapcode_Zone_Rec; @@ -1466,7 +1466,7 @@ package body Mapcodes is C1 := Extension_Chars(Idx); N1 := Decode_Char(Character'Pos(C1) + 1); Idx := Idx + 1; - if N1 = 30 then + if N1 < 0 or else N1 = 30 then return Mz_Empty; end if; Row1 := Lint (N1 / 5); @@ -1475,7 +1475,7 @@ package body Mapcodes is C2 := Extension_Chars(Idx); N2 := Decode_Char(Character'Pos(C2) + 1); Idx := Idx + 1; - if N2 = 30 then + if N2 < 0 or else N2 = 30 then return Mz_Empty; end if; Row2 := Lint (N2 / 6); @@ -2464,8 +2464,7 @@ package body Mapcodes is Extra_Digits => Precision); end Encode; - function Decode (Mapcode : String; - Context : String := "") return Coordinate is + function Decode (Mapcode, Context : String) return Coordinate is Contextterritorynumber : Integer; Space1, Space2 : Natural; Part1, Part2 : As_U.Asu_Us; diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 4eeeff6..e17b719 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -20,79 +20,83 @@ package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.4/Data" + Mapcode_Ada_Version : constant String := "1.0.4/Data" & Mapcode_Data_Version; - -- Real type + -- Real type (for latitude and longitude) type Real is digits 15 range -1.79E308 .. 1.79E308; ----------------- -- TERRITORIES -- ----------------- - -- Get_Territory_Number may raise, if Territory or Context is not known: - Unknown_Territory : exception; -- Valid territory number subtype Territory_Range is Natural range 0 .. 532; -- Given an alphacode (such as US-AL), return the territory number -- or raise Unknown_Territory - -- A context territory helps to interpret ambiguous (abbreviated) + -- A Context territory helps to interpret ambiguous (abbreviated) -- alphacodes, such as "AL" + -- Raise, if Territory or Context is not known: + Unknown_Territory : exception; function Get_Territory_Number (Territory : String; Context : String := "") return Territory_Range; -- Return the alphacode (usually an ISO 3166 code) of a territory -- Format: Local (often ambiguous), International (full and unambiguous, - -- DEFAULT), or Shortest (non ambiguous) + -- DEFAULT), or Shortest type Territory_Formats is (Local, International, Shortest); function Get_Territory_Alpha_Code ( Territory_Number : Territory_Range; Format : Territory_Formats := International) return String; - -- Return full name of a territory + -- Return the full name of a territory function Get_Territory_Fullname (Territory_Number : Territory_Range) return String; - -- Return parent country of a rterritory that is a subdivision - -- May raise, if the territory is not a subdivision: + -- Return the parent country of a subdivision + -- Raise, if Territory is not a subdivision: Not_A_Subdivision : exception; - -- subdivision) function Get_Parent_Of (Territory_Number : Territory_Range) return Territory_Range; - -- Return True if a territory is a state + -- Return True if Territory is a state function Is_Subdivision (Territory_Number : Territory_Range) return Boolean; - -- Return True if a territory is a country that has states + -- Return True if Territory is a country that has states function Has_Subdivision (Territory_Number : Territory_Range) return Boolean; - ------------------------------------ - -- ENCODING and DECODING MAPCODES -- - ------------------------------------ + -------------------------- + -- Encoding to mapcodes -- + -------------------------- -- Coordinate in fraction of degrees type Coordinate is record Lat, Lon : Real; end record; - -- Array of mapcode information returned as the result of encoding + -- One mapcode-related information bloc type Mapcode_Info is record + -- Territory code (AAA for Earth) + Territory_Alpha_Code : As_U.Asu_Us; + -- Simple mapcode Mapcode : As_U.Asu_Us; + -- Territory, then a space and the mapcode, + -- or simple mapcode if it is valid on Earth Full_Mapcode : As_U.Asu_Us; - Territory_Alpha_Code : As_U.Asu_Us; + -- Territory number Territory_Number : Territory_Range; end record; type Mapcode_Infos is array (Positive range <>) of Mapcode_Info; - -- Encode a coordinate into mapcodes - -- Returns an array of mapcodes, each representing the specified coordinate. - -- If a territory is specified, then only mapcodes (if any) within + -- Encode a coordinate + -- Return an array of mapcodes, each representing the specified coordinate. + -- If a Territory is specified, then only mapcodes (if any) within -- that territory are returned. if Earth is provided as territory then -- the 9-letter "international" mapcode is returned - -- The Shortest option make it return at most one mapcode (the "default" and - -- "shortest possible" mapcode) in any territory - -- The Precision option produces mapcodes extended with high-precision + -- If Shortest is set, then at most one mapcode (the "default" and + -- "shortest possible" mapcode) in any territory are returned + -- The Precision option leads to produce mapcodes extended with high-precision -- letters (the parameter specifies how many letters: 0, 1, or 2 subtype Precisions is Natural range 0 .. 2; Earth : constant String := "Earth"; @@ -101,15 +105,15 @@ package Mapcodes is Shortest : Boolean := False; Precision : Precisions := 0) return Mapcode_Infos; - -- Decode may raise, if the mapcode is not valid (in the context): + ------------------------ + -- Decoding a mapcode -- + ------------------------ + -- Decode a string (which may contain a full mapcode, including a territory) + -- The optional Context territory shall be set if the mapcode is ambiguous + -- (not "international') + -- Return a coordinate, or, if the mapcode is incorrect or ambiguous, raise: Decode_Error : exception; - -- Decode a mapcode - -- The optional context territory must be set when the mapcode denotes a local - -- (ambiguous) mapcode - -- Returns the coordinate of the mapcode, or raises Decode_Error if the - -- mapcode is not valid (or not valid in the privided context) - function Decode (Mapcode : String; - Context : String := "") return Coordinate; + function Decode (Mapcode, Context : String) return Coordinate; end Mapcodes; diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 304e0d3..a88d1b4 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -16,7 +16,7 @@ -- Mapcode test main program with Ada.Command_Line, Ada.Text_Io; -with As_U, Str_Tools, Mapcodes; +with As_U, Mapcodes; procedure T_Mapcode is use Mapcodes; @@ -29,7 +29,7 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( " -t // Territory info"); Ada.Text_Io.Put_Line ( - " -d [ ] // Decode"); + " -d [ ] // Decode"); Ada.Text_Io.Put_Line ( " -c [ ] // Encode"); Ada.Text_Io.Put_Line ( @@ -87,7 +87,7 @@ procedure T_Mapcode is end Image; function Quote (Str : String) return String is - ( (if Str_Tools.Locate (Str, " ") = 0 then Str else ''' & Str & ''') ); + (''' & Str & '''); function Get (Str : String) return Mapcodes.Real is begin @@ -95,7 +95,7 @@ procedure T_Mapcode is end Get; I : Positive; - Command, Arg1, Arg2 : As_U.Asu_Us; + Command, Arg1, Arg2, Tmp : As_U.Asu_Us; Coord : Mapcodes.Coordinate; Territory : As_U.Asu_Us; @@ -156,29 +156,30 @@ begin begin for J in Codes'Range loop Ada.Text_Io.Put_Line ("=> " - & Codes(J).Mapcode.Image - & " " & Codes(J).Territory_Alpha_Code.Image + & Codes(J).Territory_Alpha_Code.Image + & " " & Codes(J).Mapcode.Image & " " & Quote (Codes(J).Full_Mapcode.Image) & " " & Integer_Image (Codes(J).Territory_Number)); end loop; end; Ada.Text_Io.New_Line; elsif Command.Image = "-d" then - -- Decode next argument, optionally with context + -- Decode next argument, optionally preceeded by a context I := I + 1; Arg1 := As_U.Tus (Ada.Command_Line.Argument (I)); Arg2.Set_Null; if I < Ada.Command_Line.Argument_Count then - Arg2 := As_U.Tus (Ada.Command_Line.Argument (I + 1)); - if Is_Command (Arg2.Image) then - Arg2.Set_Null; - else + Tmp := As_U.Tus (Ada.Command_Line.Argument (I + 1)); + if not Is_Command (Tmp.Image) then + Arg2 := Arg1; + Arg1 := Tmp; I := I + 1; end if; end if; + Ada.Text_Io.Put_Line (Arg1.Image & " " & Arg2.Image); Coord := Decode (Arg1.Image, Arg2.Image); Ada.Text_Io.Put_Line ("=> " & Image (Coord.Lat) - & " " & Image (Coord.Lon)); + & " " & Image (Coord.Lon)); end if; I := I + 1; end loop; diff --git a/test/Scenario.txt b/test/Scenario.txt index 28fb58c..c04ac99 100644 --- a/test/Scenario.txt +++ b/test/Scenario.txt @@ -43,120 +43,120 @@ -t NLD => 112: NLD/NLD/NLD/Netherlands # NLD, with high precision --d 49.4V NLD => 52.376514000 4.908543375 --c 52.376514000 4.908543375 NLD => 49.4V NLD 'NLD 49.4V' 112 --d 49.4V-V NLD => 52.376476500 4.908514225 --c 52.376476500 4.908514225 NLD 1 => 49.4V-V NLD 'NLD 49.4V-V' 112 --d 49.4V-V2 NLD => 52.376482500 4.908511796 --c 52.376482500 4.908511796 NLD 2 => 49.4V-V2 NLD 'NLD 49.4V-V2' 112 +-d NLD 49.4V => 52.376514000 4.908543375 +-c 52.376514000 4.908543375 NLD => NLD 49.4V 'NLD 49.4V' 112 +-d NLD 49.4V-V => 52.376476500 4.908514225 +-c 52.376476500 4.908514225 NLD 1 => NLD 49.4V-V 'NLD 49.4V-V' 112 +-d NLD 49.4V-V2 => 52.376482500 4.908511796 +-c 52.376482500 4.908511796 NLD 2 => NLD 49.4V-V2 'NLD 49.4V-V2' 112 -d VHXGB.1J9J => 52.376504000 4.908535500 --c 52.3765140000 4.908543375 AAA => VHXGB.1J9J AAA VHXGB.1J9J 532 +-c 52.3765140000 4.908543375 AAA => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 # FRA --d FTGC.R3T FRA => 43.531827500 1.235419000 --c 43.531827500 1.235419000 FRA => FTGC.R3T FRA 'FRA FTGC.R3T' 197 +-d FRA FTGC.R3T => 43.531827500 1.235419000 +-c 43.531827500 1.235419000 FRA => FRA FTGC.R3T 'FRA FTGC.R3T' 197 -d THM1V.2TLY => 43.531829000 1.235394500 --c 43.531827500 1.235419000 AAA => THM1V.2TLY AAA THM1V.2TLY 532 +-c 43.531827500 1.235419000 AAA => AAA THM1V.2TLY 'THM1V.2TLY' 532 # ITA --d FM.2SP ITA => 41.977344000 12.413180000 --c 41.977344000 12.413180000 ITA => FM.2SP ITA 'ITA FM.2SP' 174 +-d ITA FM.2SP => 41.977344000 12.413180000 +-c 41.977344000 12.413180000 ITA => ITA FM.2SP 'ITA FM.2SP' 174 -d TJKL8.1X93 => 41.977361000 12.413196500 --c 41.977361000 12.413196500 AAA => TJKL8.1X93 AAA TJKL8.1X93 532 +-c 41.977361000 12.413196500 AAA => AAA TJKL8.1X93 'TJKL8.1X93' 532 # NY (NJ, USA) --d J9.BX NY => 40.786245000 -73.961414625 --c 40.786261000 -73.961463000 NY => J9.BX US-NY 'US-NY J9.BX' 367 --d Y0.YBC NJ => 40.786203500 -73.961364500 --c 40.786261000 -73.961463000 US-NJ => Y0.Y91 US-NJ 'US-NJ Y0.Y91' 347 --d XNBJ.1DM2 USA => 40.786296500 -73.961471000 --c 40.786296500 -73.961471000 USA => XNBJ.1DM2 USA 'USA XNBJ.1DM2' 410 +-d NY J9.BX => 40.786245000 -73.961414625 +-c 40.786261000 -73.961463000 NY => US-NY J9.BX 'US-NY J9.BX' 367 +-d NJ Y0.YBC => 40.786203500 -73.961364500 +-c 40.786261000 -73.961463000 US-NJ => US-NJ Y0.Y91 'US-NJ Y0.Y91' 347 +-d USA XNBJ.1DM2 => 40.786296500 -73.961471000 +-c 40.786296500 -73.961471000 USA => USA XNBJ.1DM2 'USA XNBJ.1DM2' 410 -d S93HM.RVB8 => 40.786251000 -73.961418000 --c 40.786251000 -73.961418000 AAA => S93HM.RVB8 AAA S93HM.RVB8 532 +-c 40.786251000 -73.961418000 AAA => AAA S93HM.RVB8 'S93HM.RVB8' 532 # VIC (AU) --d KJ.HX5 VIC => -37.827455000 145.045353500 --c -37.827455000 145.045353500 VIC => KJ.HX5 AU-VIC 'AU-VIC KJ.HX5' 313 --d PMJG.HQJF AUS => -37.827432000 145.045375500 --c -37.827432000 145.045375500 AUS => PMJG.HQJF AUS 'AUS PMJG.HQJF' 408 +-d VIC KJ.HX5 => -37.827455000 145.045353500 +-c -37.827455000 145.045353500 VIC => AU-VIC KJ.HX5 'AU-VIC KJ.HX5' 313 +-d AUS PMJG.HQJF => -37.827432000 145.045375500 +-c -37.827432000 145.045375500 AUS => AUS PMJG.HQJF 'AUS PMJG.HQJF' 408 -d 6WZ4X.CSCJ => -37.827437000 145.045370000 --c -37.827437000 145.045370000 AAA => 6WZ4X.CSCJ AAA 6WZ4X.CSCJ 532 +-c -37.827437000 145.045370000 AAA => AAA 6WZ4X.CSCJ '6WZ4X.CSCJ' 532 # MDG --d 1F.X9 MDG => -18.914981000 47.517872500 --c -18.914981000 47.517872500 MDG => 1F.X9 MDG 'MDG 1F.X9' 201 +-d MDG 1F.X9 => -18.914981000 47.517872500 +-c -18.914981000 47.517872500 MDG => MDG 1F.X9 'MDG 1F.X9' 201 -d BMLBF.MF3G => -18.914964000 47.517864000 --c -18.914964000 47.517864000 AAA => BMLBF.MF3G AAA BMLBF.MF3G 532 +-c -18.914964000 47.517864000 AAA => AAA BMLBF.MF3G 'BMLBF.MF3G' 532 # REU --d 7F.S1 REU => -20.899607500 55.456368500 --c -20.8996075 55.4563685 REU => 7F.S1 REU 'REU 7F.S1' 67 +-d REU 7F.S1 => -20.899607500 55.456368500 +-c -20.8996075 55.4563685 REU => REU 7F.S1 'REU 7F.S1' 67 -d BN8C7.X9YW => -20.899602000 55.456374000 --c -20.8996075 55.4563685 AAA => BN8C7.X9YW AAA BN8C7.X9YW 532 +-c -20.8996075 55.4563685 AAA => AAA BN8C7.X9YW 'BN8C7.X9YW' 532 # MUS - Rodrigues --d BLX.43 MUS => -19.754036000 63.358374000 --c -19.754036000 63.358374000 MUS => BLX.43 MUS 'MUS BLX.43' 66 +-d MUS BLX.43 => -19.754036000 63.358374000 +-c -19.754036000 63.358374000 MUS => MUS BLX.43 'MUS BLX.43' 66 -d BNYK8.DJ06 => -19.754040000 63.358364000 --c -19.754040000 63.35836400 AAA => BNYK8.DJ06 AAA BNYK8.DJ06 532 +-c -19.754040000 63.35836400 AAA => AAA BNYK8.DJ06 'BNYK8.DJ06' 532 # MOZ - Bassas da India --d SRWQ.DPF MOZ => -21.516543000 38.659899500 --c -21.516543000 38.659899500 MOZ => SRWQ.DPF MOZ 'MOZ SRWQ.DPF' 212 +-d MOZ SRWQ.DPF => -21.516543000 38.659899500 +-c -21.516543000 38.659899500 MOZ => MOZ SRWQ.DPF 'MOZ SRWQ.DPF' 212 -d BLTPL.7TYC => -21.516552000 38.659908000 --c -21.516552000 38.659908000 AAA => BLTPL.7TYC AAA BLTPL.7TYC 532 +-c -21.516552000 38.659908000 AAA => AAA BLTPL.7TYC 'BLTPL.7TYC' 532 # ATA - Mont Erebus --d YWPX.HSPQ ATA => -77.522557500 167.157277500 --c -77.522557500 167.157277500 ATA => YWPX.HSPQ ATA 'ATA YWPX.HSPQ' 531 +-d ATA YWPX.HSPQ => -77.522557500 167.157277500 +-c -77.522557500 167.157277500 ATA => ATA YWPX.HSPQ 'ATA YWPX.HSPQ' 531 -d 0Y0WT.QG62 => -77.522562000 167.157375000 --c -77.522562000 167.15737500 AAA => 0Y0WT.QG62 AAA 0Y0WT.QG62 532 +-c -77.522562000 167.15737500 AAA => AAA 0Y0WT.QG62 '0Y0WT.QG62' 532 # AAA - Atlantic -d QD3CL.PX8J => 29.802516000 -39.364007500 --c 29.802516000 -39.364007500 => QD3CL.PX8J AAA QD3CL.PX8J 532 +-c 29.802516000 -39.364007500 => AAA QD3CL.PX8J 'QD3CL.PX8J' 532 # Anchorage (US-AK) --d 27.L1H AK => 61.173945000 -149.981249250 --c 61.173945000 -149.981249250 AK => 27.L1H US-AK 'US-AK 27.L1H' 393 --d 9F24.FXKQ USA => 61.173985500 -149.981291000 --c 61.173985500 -149.981291000 USA => 9F24.FXKQ USA 'USA 9F24.FXKQ' 410 +-d AK 27.L1H => 61.173945000 -149.981249250 +-c 61.173945000 -149.981249250 AK => US-AK 27.L1H 'US-AK 27.L1H' 393 +-d USA 9F24.FXKQ => 61.173985500 -149.981291000 +-c 61.173985500 -149.981291000 USA => USA 9F24.FXKQ 'USA 9F24.FXKQ' 410 -d X2LG4.TDJR => 61.173934000 -149.981216000 --c 61.173934000 -149.981216000 AAA => X2LG4.TDJR AAA X2LG4.TDJR 532 +-c 61.173934000 -149.981216000 AAA => AAA X2LG4.TDJR 'X2LG4.TDJR' 532 # RU-SVE --d NF.V67 SVE => 56.862345000 60.710372500 --c 56.862345000 60.710372500 SVE => NF.V67 RU-SVE 'RU-SVE NF.V67' 470 --d RW9L.9XG8 RUS => 56.862349500 60.710352000 --c 56.862349500 60.710352000 RUS => RW9L.9XG8 RUS 'RUS RW9L.9XG8' 496 +-d SVE NF.V67 => 56.862345000 60.710372500 +-c 56.862345000 60.710372500 SVE => RU-SVE NF.V67 'RU-SVE NF.V67' 470 +-d RUS RW9L.9XG8 => 56.862349500 60.710352000 +-c 56.862349500 60.710352000 RUS => RUS RW9L.9XG8 'RUS RW9L.9XG8' 496 -d WNQMZ.JSX3 => 56.862363000 60.710366000 --c 56.862363000 60.710366000 AAA => WNQMZ.JSX3 AAA WNQMZ.JSX3 532 +-c 56.862363000 60.710366000 AAA => AAA WNQMZ.JSX3 'WNQMZ.JSX3' 532 # ARG - Acuncagua --d WL0.TDT CHL => -32.653214500 -70.010874000 --c -32.653214500 -70.010874000 CHL => WL0.TDT CHL 'CHL WL0.TDT' 209 --d M61.HQJF ARG => -32.653250000 -70.010842000 --c -32.653250000 -70.010842000 ARG => M61.HQJF ARG 'ARG M61.HQJF' 270 --d 2ZZ3.9ZGV BRA => -32.653228500 -70.010875000 --c -32.653228500 -70.010875000 BRA => 2ZZ3.9ZGV BRA 'BRA 2ZZ3.9ZGV' 409 +-d CHL WL0.TDT => -32.653214500 -70.010874000 +-c -32.653214500 -70.010874000 CHL => CHL WL0.TDT 'CHL WL0.TDT' 209 +-d ARG M61.HQJF => -32.653250000 -70.010842000 +-c -32.653250000 -70.010842000 ARG => ARG M61.HQJF 'ARG M61.HQJF' 270 +-d BRA 2ZZ3.9ZGV => -32.653228500 -70.010875000 +-c -32.653228500 -70.010875000 BRA => BRA 2ZZ3.9ZGV 'BRA 2ZZ3.9ZGV' 409 -d 79GMS.VQDX => -32.653233000 -70.010853500 --c -32.653233000 -70.010853500 AAA => 79GMS.VQDX AAA 79GMS.VQDX 532 +-c -32.653233000 -70.010853500 AAA => AAA 79GMS.VQDX '79GMS.VQDX' 532 # MMR --d 9Z3R.YKP MMR => 26.904910500 95.138544000 --c 26.904910500 95.138544000 MMR => 9Z3R.YKP MMR 'MMR 9Z3R.YKP' 207 +-d MMR 9Z3R.YKP => 26.904910500 95.138544000 +-c 26.904910500 95.138544000 MMR => MMR 9Z3R.YKP 'MMR 9Z3R.YKP' 207 # Extremes -d HHHHC.X0KG => -0.000002000 0.000003000 --c 0.000000000 0.000000000 => HHHHC.X0KG AAA HHHHC.X0KG 532 --d L384.7K5 KIR => 0.000032000 -179.999971000 --c 0.000000000 180.000000000 KIR => L384.7K5 KIR 'KIR L384.7K5' 58 +-c 0.000000000 0.000000000 => AAA HHHHC.X0KG 'HHHHC.X0KG' 532 +-d KIR L384.7K5 => 0.000032000 -179.999971000 +-c 0.000000000 180.000000000 KIR => KIR L384.7K5 'KIR L384.7K5' 58 -d H009W.000G => -0.000002000 -179.999979000 --c 0.000000000 180.000000000 AAA => H009W.000G AAA H009W.000G 532 +-c 0.000000000 180.000000000 AAA => AAA H009W.000G 'H009W.000G' 532 -d ZH0H0.H1HG => 90.000000000 0.000195000 --c 90.000000000 0.000000000 => ZH0H0.H1HG AAA ZH0H0.H1HG 532 --d ZZ.ZZ ATA => -89.999994500 0.000000500 --c -90.000000000 0.000000000 ATA => => ZZ.ZZ ATA 'ATA ZZ.ZZ' 531 +-c 90.000000000 0.000000000 => AAA ZH0H0.H1HG 'ZH0H0.H1HG' 532 +-d ATA ZZ.ZZ => -89.999994500 0.000000500 +-c -90.000000000 0.000000000 ATA => => ATA ZZ.ZZ 'ATA ZZ.ZZ' 531 -d 0HZHZ.HZHZ => -89.999993000 0.000195000 --c -90.000000000 0.000000000 AAA => 0HZHZ.HZHZ AAA 0HZHZ.HZHZ 532 +-c -90.000000000 0.000000000 AAA => AAA 0HZHZ.HZHZ '0HZHZ.HZHZ' 532 diff --git a/test/fulltest b/test/fulltest index f676f2a..7f9ae02 100755 --- a/test/fulltest +++ b/test/fulltest @@ -26,7 +26,7 @@ export DEBUG="" export PRECISION=2 function usage { - echo "Usage: `basename $0` [ -p | --precision ] [ -d | --debug ]" + echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ]" echo " or `basename $0` [ -h | --help ]" echo " Default precision: $PRECISION" } @@ -46,16 +46,20 @@ while [ -n "$1" ] ; do ("-d"|"--debug") export DEBUG="-d" ;; - ("-p"|"--precision") + ("-p") export PRECISION=$2 shift ;; + (--precision=*) + export PRECISION=${1#*=} + ;; (*) error "Invalid arguments" ;; esac shift done +echo Precision $PRECISION # Read field $3 of line $2 of file $1 function readarg { @@ -81,6 +85,7 @@ echo "$res" # Check that $2 = $3 # if $1 is -d then compare floats modulo EPS ($4) (1.0E-4, 1.0E-5, 1.0E-6) +# Echo 0 if OK and 1 otherwise function check { if [ "$1" = "-d" ] ; then echo $2 | awk -v EXPECT="$3" -v EPS=${EPSILON[$4]} ' @@ -105,11 +110,11 @@ function check { print "0" } ' - return else if [ "$2" = "$3" ] ; then echo 0 - return + else + echo 1 fi fi } @@ -220,6 +225,8 @@ function decode_failure { fi } decode_failure "" +decode_failure "QD3CL.PX8J-K3'" +decode_failure "QD3CL.P'X8J-K3" # For each line let L=1 while true ; do @@ -232,7 +239,7 @@ while true ; do cod=$ctx ctx="" fi - decode_failure $cod $ctx + decode_failure $ctx $cod let L=$L+1 done echo OK. @@ -254,14 +261,14 @@ while true ; do error "t_mapcode -t $lat $lon $PRECISION has failed" fi # Parse result: - # lat lon => Short Code, then either 'Code Short' or Long, then num + # lat lon => Short Code, then either 'Code Short' or 'Long', then num result=`echo $result | awk ' - (substr($6, 1, 1) == "'\''") { - print substr($6,2) " " substr($7, 1, length($7)-1) + (substr($6, 1, 1) == "'\''") && (substr($6, length($6), 1) == "'\''") { + print substr($6, 2, length($6)-2) exit } { - print $6 + print substr($6, 2) " " substr($7, 1, length($7)-1) } '` ctx=`echo $result | awk '{print $1}'` @@ -271,17 +278,18 @@ while true ; do ctx="" fi # Decode - decoded=`t_mapcode -d $cod $ctx | cut -d ' ' -f 2-` + dec=`t_mapcode -d $ctx $cod` if [ $? -ne 0 ] ; then error "t_mapcode -d $cod $ctx has failed" fi - res=`check "-d" "$decoded" "$lat $lon" $PRECISION` + dec=`echo $dec | cut -d ">" -f 2 | cut -d " " -f 2-` # Check decoded lat lon versus origin + res=`check "-d" "$dec" "$lat $lon" $PRECISION` if [ "$res" != "0" ] ; then - error "$lat $lon $PRECISION => $result => $decoded" + error "$lat $lon $PRECISION => $result => $dec" else if [ -n "$DEBUG" ] ; then - echo "$lat $lon => $result => $decoded" + echo "$lat $lon => $result => $dec" fi fi @@ -299,25 +307,26 @@ function count { ' } -# Decoding mapcode $1 in context $2 shall lead to lat lon $3 and $4 -# Ecoding lat lon $3 and $4 in context $2 shall lead to $5 mapcodes -# Ecoding lat lon $3 and $4 without context $2 shall lead to $6 mapcodes -# Encoding lat lon $3 and $4 in context $é with $PRECISION then decoding +# Decoding in context $1 the mapcode $2 shall lead to lat lon $3 and $4 +# Ecoding lat lon $3 and $4 in context $1 shall lead to $5 mapcodes +# Ecoding lat lon $3 and $4 without context $1 shall lead to $6 mapcodes +# Encoding lat lon $3 and $4 in context $1 with $PRECISION then decoding # shall lead to $3 and $4 function decode { if [ -n "$DEBUG" ] ; then echo -d "$1" "$2" fi - result=`t_mapcode -d "$1" $2` + result=`t_mapcode -d $1 $2` + result=`echo $result | cut -d ">" -f 2 | cut -d " " -f 2-` res=`check "-d" "$3 $4" "$result" 0` - if [ $res -ne 1 ] ; then + if [ "$res" != "0" ] ; then error "t_mapcode -d $1 $2 => $result instead of $3 $4" fi # Count number of all local codes - res=`t_mapcode -c $3 $4 $2 False` + res=`t_mapcode -c $3 $4 $1 False` let nloc=0+`count $res` if [ $nloc -ne $5 ] ; then - error "t_mapcode -c $3 $4 $2 False => $nloc results instead of $5" + error "t_mapcode -c $3 $4 $1 False => $nloc results instead of $5" fi # Count number of all global codes res=`t_mapcode -c $3 $4 False` @@ -326,22 +335,22 @@ function decode { error "t_mapcode -c $3 $4 False => $nloc results instead of $6" exit 1 fi - enc=`t_mapcode -c $3 $4 $2 $PRECISION` + # Check decoded lat lon versus provided + enc=`t_mapcode -c $3 $4 $1 $PRECISION` enc=`echo $enc | cut -d ">" -f 2 | cut -d " " -f 2-3` dec=`t_mapcode -d $enc $2` - # Check decoded lat lon versus provided dec=`echo $dec | cut -d ">" -f 2` res=`check "-d" "$dec" "$3 $4" $PRECISION` if [ "$res" != "0" ] ; then - error "$3 $4 $2 $PRECISION => $enc => $dec" + error "$3 $4 $1 $PRECISION => $enc => $dec" fi } # Theses one have no context -decode "ZH0H0.H1HG" "" "90" "0" 1 1 -decode "ZZ0X0.B16G-4K" "" "90" "179" 1 1 -decode "Z0000.010G" "" "90" "-179.999999" 1 1 -decode "ZZ0Z0.Z1YG" "" "90.000000000000" "179.999999999999" 1 1 +decode "" "ZH0H0.H1HG" "90" "0" 1 1 +decode "" "ZZ0X0.B16G-4K" "90" "179" 1 1 +decode "" "Z0000.010G" "90" "-179.999999" 1 1 +decode "" "ZZ0Z0.Z1YG" "90.000000000000" "179.999999999999" 1 1 # Play scenario # For each line @@ -351,7 +360,7 @@ while read -r ctx cod lat lon loc glo || [[ -n "$ctx" ]]; do if [ \( -z "$ctx" \) -o \( "$ctx" = "#" \) ] ; then continue fi - decode $cod $ctx $lat $lon $loc $glo + decode $ctx $cod $lat $lon $loc $glo R=$((L % 100)) if [ $R -eq 0 ] ; then From 710c114458826ed4418f7fe0dd2e1b143a4c901b Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 15 Jun 2018 19:53:26 +0200 Subject: [PATCH 03/42] Add an option to sort the returned list of mapcodes Add to t_mapcode a "local/all" option and support for : --- README.md | 79 +++++++++++++++++++++++++++++++++++++++++------ src/mapcodes.adb | 40 +++++++++++++++++++++--- src/mapcodes.ads | 31 +++++++++++++------ src/t_mapcode.adb | 60 +++++++++++++++++++++++++---------- test/fulltest | 8 ++--- 5 files changed, 174 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 111e584..9c2729f 100644 --- a/README.md +++ b/README.md @@ -172,22 +172,36 @@ attribute | description `Territory` | optional string, (an ISO code such as “NLD”) territory for the scope of the mapcodes `Shortest` | boolean, default True, to return only the shortest possible mapcode for the territory or each possible territory `Precision` | 0, 1 or 2, default 0, precision of the mapcode to generate +`Sort` | sort the territories so that the shortest mapcode appears first return value | array of mapcode informations (territory ISO code, mapcode, full mapcode, and territory number) This function will return at least one result: the shortest mapcode (if any) that exists for that coordinate within the specified territory. Such a mapcode -is also sometimes called the “default mapcode” for a particular territory. +is also sometimes called the “default mapcode” for a particular territory. +The resulting array is always organized by territories: all the mapcodes +of a territory follow each other and in order of increasing length. +If Sort is set, then the returned array contains first the shortest +mapcode, then possibly the other mapcodes for the same territory, +then possibly mapcodes for other territories, then possibly the +international (Earth) mapcode, otherwise the territories appear in the crescent +order of Territory_Range (see package Ctrynams). +As a consequence, if it appears, the international mapcode is always the last. Examples: -With a `Territory` specified, and `Shortest` set, returns the default mapcode for this +With a`Territory` specified, and `Shortest` set, returns the default mapcode for this territory. Encode ( (52.376514000, 4.908543375 40.786245000), "NLD") -> NLD 49.4V 'NLD 49.4V' 112 +With a Territory set to Earth ("AAA"), returns the international mapcode, +(whatever Shortest) -With a `Territory` specified, and `Shortest` set to False, returns all the possible mapcodes + Encode ( (52.376514000, 4.908543375 40.786245000), "AAA") + -> AAA VHXGB.1J9J 'VHXGB.1J9J' 532 + +With a `Territory` specified, and `Shortest`set to False, returns all the possible mapcodes for this territory. Encode ( (52.376514000, 4.908543375 40.786245000), "NLD", Shortest => False) @@ -204,12 +218,31 @@ territories. -> NLD 49.4V 'NLD 49.4V' 112 -> AAA VHXGB.1J9J 'VHXGB.1J9J' 532 -With a `Precision` of 2, returns high precision mapcodes. +With Sort set, return the territory with shortest mapcode first. + + Encode ( (39.730409000, -79.954163500), "", Sortest => False, Sort => False) + -> US-WV W2W2.Q41V 'US-WV W2W2.Q41V' 353 + -> US-PA BYLP.73 'US-PA BYLP.73' 361 + -> US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 + -> US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 + -> USA W2W2.Q41V 'USA W2W2.Q41V' 410 + -> AAA S8LY1.RD84 'S8LY1.RD84' 532 + + Encode ( (39.730409000, -79.954163500), "", Sortest => False, Sort => True) + -> US-PA BYLP.73 'US-PA BYLP.73' 361 + -> US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 + -> US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 + -> US-WV W2W2.Q41V 'US-WV W2W2.Q41V' 353 + -> USA W2W2.Q41V 'USA W2W2.Q41V' 410 + -> AAA S8LY1.RD84 'S8LY1.RD84' 532 + +With a`Precision` of 2, returns high precision mapcodes. Encode ( (52.376514000, 4.908543375 40.786245000), Precision => 2) -> NLD 49.4V-K3 'NLD 49.4V-K3' 112 -> AAA VHXGB.1J9J-RD 'VHXGB.1J9J-RD' 532 + ## Converting a Mapcode into a Coordinate There is only one operation, `Decode`, which gives the coordinate of a @@ -255,11 +288,17 @@ The command line testing tool `t_mapcode` can perform 3 actions: Usage: t_mapcode - -h // This help - -t // Territory info - -d [ ] // Decode - -c [ ] // Encode - ::= [ ] [ ] [ ] + -h // This help + -t // Territory info + -d [ ] // Decode + -d : // Decode + -c [ ] // Encode + ::= [ ] [ ] [ ] + ::= [ all | local ] // Default shortest + +Default selection leads to encode with Shortest => True, while `all` leads to +encode with Shortest => False, and 'local' leads to encode with Shortest => True +and Shortest => True and to display the first entry of the returnd array. Examples: @@ -301,6 +340,23 @@ Put all mapcodes of a coordinate with a context. -> => DL6.H9L NLD 'NLD DL6.H9L' 112 -> => P25Z.N3Z NLD 'NLD P25Z.N3Z' 112 +Put all mapcodes of a coordinate. + + t_mapcode -c 39.730409000 -79.954163500 all + -> 39.730409000 -79.954163500 + -> => US-WV W2W2.Q41V 'US-WV W2W2.Q41V' 353 + -> => US-PA BYLP.73 'US-PA BYLP.73' 361 + -> => US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 + -> => US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 + -> => USA W2W2.Q41V 'USA W2W2.Q41V' 410 + -> => AAA S8LY1.RD84 'S8LY1.RD84' 532 + +Put the local mapcode of a coordinate. + + t_mapcode -c 39.730409000 -79.954163500 local + -> 39.730409000 -79.954163500 + -> => US-PA BYLP.73 'US-PA BYLP.73' 361 + Decode a mapcode, no context. t_mapcode -d 49.4V @@ -319,6 +375,11 @@ Decode a mapcode with context. # Version History +### 1.0.6 + +* Add an option to sort the returned list of mapcodes +* Add to t_mapcode a "local/all" option and support for "\:\" + ### 1.0.4 * Fix detection of invalid character in mapcode extension diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 4f57728..c23d38e 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -2452,16 +2452,46 @@ package body Mapcodes is function Encode (Coord : Coordinate; Territory : String := ""; Shortest : Boolean := False; - Precision : Precisions := 0) return Mapcode_Infos is - begin - return Mapcoder_Engine ( + Precision : Precisions := 0; + Sort : Boolean := False) return Mapcode_Infos is + Result : Mapcode_Infos := Mapcoder_Engine ( Enc => Get_Encode_Rec (Coord.Lat, Coord.Lon), - Tn => (if Str_Tools.Mixed_Str (Territory) = Earth then Ccode_Earth - elsif Territory = "" then Error + Tn => (if Territory = "" then Error else Get_Territory_Number (Territory)), Get_Shortest => Shortest, State_Override => -1, Extra_Digits => Precision); + -- First and last index of the mapcodes, of the same territory, + -- producing the shortest mapcode + First, Last : Natural := 0; + Len : Positive := Positive'Last; + use type As_U.Asu_Us; + begin + if not Sort then + return Result; + end if; + -- Search shosrtest mapcode (First) and the Last mapcode for the + -- same territoy + for I in Result'Range loop + if Result(I).Mapcode.Length < Len then + First := I; + Len := Result(I).Mapcode.Length; + end if; + if Result(I).Territory_Alpha_Code + = Result(First).Territory_Alpha_Code then + Last := I; + end if; + end loop; + -- Move First .. Last at beginning of list + if First /= Result'First then + declare + Slice : constant Mapcode_Infos := Result(First .. Last); + begin + Result(Last-First+2 .. Last) := Result(Result'First .. First-1); + Result(Result'First .. Result'First+Last-First) := Slice; + end; + end if; + return Result; end Encode; function Decode (Mapcode, Context : String) return Coordinate is diff --git a/src/mapcodes.ads b/src/mapcodes.ads index e17b719..325575b 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -20,7 +20,7 @@ package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.0.4/Data" + Mapcode_Ada_Version : constant String := "1.0.6/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) @@ -91,27 +91,38 @@ package Mapcodes is -- Encode a coordinate -- Return an array of mapcodes, each representing the specified coordinate. - -- If a Territory is specified, then only mapcodes (if any) within - -- that territory are returned. if Earth is provided as territory then - -- the 9-letter "international" mapcode is returned + -- If a Territory alphacode is specified, then only mapcodes (if any) within + -- that territory are returned. If Earth is provided as territory then + -- only the 9-letter "international" mapcode is returned -- If Shortest is set, then at most one mapcode (the "default" and -- "shortest possible" mapcode) in any territory are returned -- The Precision option leads to produce mapcodes extended with high-precision -- letters (the parameter specifies how many letters: 0, 1, or 2 + -- The resulting array is always organized by territories: all the mapcodes + -- of a territory follow each other and in order of increasing length. + -- If Sort is set, then the returned array contains first the shortest + -- mapcode, then possibly the other mapcodes for the same territory, + -- then possibly mapcodes for other territories, then possibly the + -- international (Earth) mapcode + -- Otherwise the territories appear in the crescent order of Territory_Range + -- (see package Ctrynams) + -- As a consequence, if it appears the international mapcode is always the + -- last subtype Precisions is Natural range 0 .. 2; - Earth : constant String := "Earth"; + Earth : constant String := "AAA"; function Encode (Coord : Coordinate; Territory : String := ""; Shortest : Boolean := False; - Precision : Precisions := 0) return Mapcode_Infos; + Precision : Precisions := 0; + Sort : Boolean := False) return Mapcode_Infos; ------------------------ -- Decoding a mapcode -- ------------------------ - -- Decode a string (which may contain a full mapcode, including a territory) - -- The optional Context territory shall be set if the mapcode is ambiguous - -- (not "international') - -- Return a coordinate, or, if the mapcode is incorrect or ambiguous, raise: + -- Decode a string containing a mapcode + -- The optional Context territory alphacode shall be set if the mapcode is + -- ambiguous (not "international") + -- Return a coordinate or, if the mapcode is incorrect or ambiguous, raise: Decode_Error : exception; function Decode (Mapcode, Context : String) return Coordinate; diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index a88d1b4..078e0be 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -25,15 +25,19 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( "Usage: " & Ada.Command_Line.Command_Name & " "); Ada.Text_Io.Put_Line ( - " -h // This help"); + " -h // This help"); Ada.Text_Io.Put_Line ( - " -t // Territory info"); + " -t // Territory info"); Ada.Text_Io.Put_Line ( - " -d [ ] // Decode"); + " -d [ ] // Decode"); Ada.Text_Io.Put_Line ( - " -c [ ] // Encode"); + " -d : // Decode"); Ada.Text_Io.Put_Line ( - " ::= [ ] [ ] [ ]"); + " -c [ ] // Encode"); + Ada.Text_Io.Put_Line ( + " ::= [ ] [ ] [ ]"); + Ada.Text_Io.Put_Line ( + " ::= [ all | local ] // Default short"); end Usage; function Integer_Image (I : Integer) return String is @@ -100,6 +104,7 @@ procedure T_Mapcode is Coord : Mapcodes.Coordinate; Territory : As_U.Asu_Us; Shortest : Boolean; + Local : Boolean; Precision : Precisions; begin if Ada.Command_Line.Argument_Count = 0 then @@ -132,14 +137,18 @@ begin Coord.Lon := Get (Arg2.Image); Territory := As_U.Asu_Null; Shortest := True; + Local := False; Precision := 0; for J in I + 1 .. Ada.Command_Line.Argument_Count loop Arg1 := As_U.Tus (Ada.Command_Line.Argument (J)); exit when Is_Command (Arg1.Image); I := J; - if Lower_Str (Arg1.Image) = "true" - or else Lower_Str (Arg1.Image) = "false" then - Shortest := Boolean'Value (Arg1.Image); + if Lower_Str (Arg1.Image) = "all" then + Shortest := False; + Local := False; + elsif Lower_Str (Arg1.Image) = "local" then + Shortest := True; + Local := True; elsif Arg1.Length = 1 and then Arg1.Element (1) >= '0' and then Arg1.Element (1) <= '2' then @@ -151,16 +160,28 @@ begin Ada.Text_Io.Put_Line (Image (Coord.Lat) & " " & Image (Coord.Lon)); declare + procedure Put_Code (Code : Mapcodes.Mapcode_Info) is + begin + Ada.Text_Io.Put_Line ("=> " + & Code.Territory_Alpha_Code.Image + & " " & Code.Mapcode.Image + & " " & Quote (Code.Full_Mapcode.Image) + & " " & Integer_Image (Code.Territory_Number)); + end Put_Code; + -- Sort if Local Codes : constant Mapcodes.Mapcode_Infos - := Encode (Coord, Territory.Image, Shortest, Precision); + := Encode (Coord, Territory.Image, Shortest, Precision, Local); begin - for J in Codes'Range loop - Ada.Text_Io.Put_Line ("=> " - & Codes(J).Territory_Alpha_Code.Image - & " " & Codes(J).Mapcode.Image - & " " & Quote (Codes(J).Full_Mapcode.Image) - & " " & Integer_Image (Codes(J).Territory_Number)); - end loop; + if Local then + -- First mapcodes are the shortest and others of same territory + if Codes'Length /= 0 then + Put_Code (Codes(Codes'First)); + end if; + else + for Code of Codes loop + Put_Code (Code); + end loop; + end if; end; Ada.Text_Io.New_Line; elsif Command.Image = "-d" then @@ -177,6 +198,13 @@ begin end if; end if; Ada.Text_Io.Put_Line (Arg1.Image & " " & Arg2.Image); + -- Split : + if Arg2.Is_Null and then Arg1.Locate (":") /= 0 then + I := Arg1.Locate (":"); + Arg2 := Arg1.Head (I - 1); + Arg1.Delete (1, I); + end if; + -- Decode Coord := Decode (Arg1.Image, Arg2.Image); Ada.Text_Io.Put_Line ("=> " & Image (Coord.Lat) & " " & Image (Coord.Lon)); diff --git a/test/fulltest b/test/fulltest index 7f9ae02..a4d2a12 100755 --- a/test/fulltest +++ b/test/fulltest @@ -323,16 +323,16 @@ function decode { error "t_mapcode -d $1 $2 => $result instead of $3 $4" fi # Count number of all local codes - res=`t_mapcode -c $3 $4 $1 False` + res=`t_mapcode -c $3 $4 $1 all` let nloc=0+`count $res` if [ $nloc -ne $5 ] ; then - error "t_mapcode -c $3 $4 $1 False => $nloc results instead of $5" + error "t_mapcode -c $3 $4 $1 all => $nloc results instead of $5" fi # Count number of all global codes - res=`t_mapcode -c $3 $4 False` + res=`t_mapcode -c $3 $4 all` let nloc=0+`count $res` if [ $nloc -ne $6 ] ; then - error "t_mapcode -c $3 $4 False => $nloc results instead of $6" + error "t_mapcode -c $3 $4 all => $nloc results instead of $6" exit 1 fi # Check decoded lat lon versus provided From ce73ef5d4b86fd1dca121609cadd60f18f347ab1 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Tue, 19 Jun 2018 19:54:51 +0200 Subject: [PATCH 04/42] Size Territory_Range from Ctrynams.Isofullname length --- README.md | 4 ++++ src/mapcodes.adb | 2 +- src/mapcodes.ads | 5 +++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9c2729f..f107883 100644 --- a/README.md +++ b/README.md @@ -375,6 +375,10 @@ Decode a mapcode with context. # Version History +### 1.0.7 + +* Size Territory_Range from Ctrynams.Isofullname length + ### 1.0.6 * Add an option to sort the returned list of mapcodes diff --git a/src/mapcodes.adb b/src/mapcodes.adb index c23d38e..b005ebc 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -15,7 +15,7 @@ -- ----------------------------------------------------------------------------- with Str_Tools, Bits; -with Ndata, Ctrynams; +with Ndata; package body Mapcodes is subtype Lint is Long_Long_Integer; diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 325575b..e6571a3 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -16,11 +16,12 @@ -- Mapcode management with As_U; +with Ctrynams; package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.0.6/Data" + Mapcode_Ada_Version : constant String := "1.0.7/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) @@ -31,7 +32,7 @@ package Mapcodes is ----------------- -- Valid territory number - subtype Territory_Range is Natural range 0 .. 532; + subtype Territory_Range is Natural range 0 .. Ctrynams.Isofullname'Last - 1; -- Given an alphacode (such as US-AL), return the territory number -- or raise Unknown_Territory From 9762d40795a824f9d6c4ef6233b797a07d81e44a Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Wed, 11 Jul 2018 21:43:01 +0200 Subject: [PATCH 05/42] Add option -a to list alternative mapcodes More strict and homogeneous parsing or arguments Add new points to the test Add option to play only the scenario --- README.md | 27 +++++++--- src/t_mapcode.adb | 125 ++++++++++++++++++++++++++++++---------------- test/Scenario.txt | 32 +++++++++++- test/fulltest | 12 ++++- 4 files changed, 142 insertions(+), 54 deletions(-) diff --git a/README.md b/README.md index f107883..ffc74f0 100644 --- a/README.md +++ b/README.md @@ -288,13 +288,16 @@ The command line testing tool `t_mapcode` can perform 3 actions: Usage: t_mapcode - -h // This help - -t // Territory info - -d [ ] // Decode - -d : // Decode - -c [ ] // Encode - ::= [ ] [ ] [ ] - ::= [ all | local ] // Default shortest + -h // This help + -t // Territory info + -d // Decode + -c [ ] // Encode + -a [ ] // Alternative mapcodes + ::= : | [ territory] + ::= [ ] [ ] [ ] + ::= P0 | P1 | P2 + ::= [ all | local ] // Default short + Default selection leads to encode with Shortest => True, while `all` leads to encode with Shortest => False, and 'local' leads to encode with Shortest => True @@ -373,10 +376,20 @@ Decode a mapcode with context. -> NLD 49.4V -> => 52.376514000 4.908543375 +Put alternative mapcodes for a mapcode (shortests). + + t_mapcode -a NLD 49.4V + -> 49.4V NLD + -> => NLD 49.4V 'NLD 49.4V' 112 + -> => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 + # Version History ### 1.0.7 +* Add option -a of t_mapcode to list alternative mapcodes and improve parsing of arguments +* Add new points to the test +* Add option of fulltest to play only the scenario * Size Territory_Range from Ctrynams.Isofullname length ### 1.0.6 diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 078e0be..294b120 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -20,24 +20,30 @@ with As_U, Mapcodes; procedure T_Mapcode is use Mapcodes; + Argument_Error : exception; + procedure Usage is begin Ada.Text_Io.Put_Line ( "Usage: " & Ada.Command_Line.Command_Name & " "); Ada.Text_Io.Put_Line ( - " -h // This help"); + " -h // This help"); + Ada.Text_Io.Put_Line ( + " -t // Territory info"); Ada.Text_Io.Put_Line ( - " -t // Territory info"); + " -d // Decode"); Ada.Text_Io.Put_Line ( - " -d [ ] // Decode"); + " -c [ ] // Encode"); Ada.Text_Io.Put_Line ( - " -d : // Decode"); + " -a [ ] // Alternative mapcodes"); Ada.Text_Io.Put_Line ( - " -c [ ] // Encode"); + " ::= | [ territory] "); Ada.Text_Io.Put_Line ( - " ::= [ ] [ ] [ ]"); + " ::= [ ] [ ] [ ]"); Ada.Text_Io.Put_Line ( - " ::= [ all | local ] // Default short"); + " ::= P0 | P1 | P2"); + Ada.Text_Io.Put_Line ( + " ::= [ all | local ] // Default short"); end Usage; function Integer_Image (I : Integer) return String is @@ -83,7 +89,8 @@ procedure T_Mapcode is end Put_Territory; function Is_Command (Arg : in String) return Boolean is - (Arg = "-h" or else Arg = "-t" or else Arg = "-c" or else Arg = "-d"); + (Arg = "-h" or else Arg = "-t" or else Arg = "-c" or else Arg = "-d" + or else Arg = "-a"); function Image (F : Mapcodes.Real) return String is begin @@ -106,6 +113,36 @@ procedure T_Mapcode is Shortest : Boolean; Local : Boolean; Precision : Precisions; + + -- If Arg2 is a mapcde then parse Arg1=Ctx and Arg2=Map + -- otherwise parse Arg1=[Ctx:]Map + procedure Parse_Mapcode is + Index : Natural; + begin + I := I + 1; + Arg1 := As_U.Tus (Ada.Command_Line.Argument (I)); + Arg2.Set_Null; + Tmp.Set_Null; + if I < Ada.Command_Line.Argument_Count then + Tmp := As_U.Tus (Ada.Command_Line.Argument (I + 1)); + end if; + if Tmp.Locate (".") /= 0 then + -- Arg2 is a mapcode + Arg2 := Arg1; + Arg1 := Tmp; + I := I + 1; + end if; + -- Split : in Arg1 + if Arg2.Is_Null then + Index := Arg1.Locate (":"); + if Index > 1 then + Arg2 := Arg1.Head (Index - 1); + Arg1.Delete (1, Index); + end if; + end if; + Ada.Text_Io.Put_Line (Arg1.Image & " " & Arg2.Image); + end Parse_Mapcode; + begin if Ada.Command_Line.Argument_Count = 0 then Usage; @@ -116,7 +153,7 @@ begin if Command.Image = "-h" then Usage; elsif Command.Image = "-t" then - -- Display territory info of next argument + -- Display territory info of next argument(s) I := I + 1; Arg1 := As_U.Tus (Ada.Command_Line.Argument (I)); if I < Ada.Command_Line.Argument_Count then @@ -128,13 +165,25 @@ begin end if; end if; Put_Territory (Arg1.Image, Arg2.Image); - elsif Command.Image = "-c" then - I := I + 1; - Arg1 := As_U.Tus (Ada.Command_Line.Argument (I)); - Coord.Lat := Get (Arg1.Image); - I := I + 1; - Arg2 := As_U.Tus (Ada.Command_Line.Argument (I)); - Coord.Lon := Get (Arg2.Image); + elsif Command.Image = "-c" + or else Command.Image = "-a" then + if Command.Image = "-c" then + -- Encode a lat lon + -- Get coord lat and lon + I := I + 1; + Arg1 := As_U.Tus (Ada.Command_Line.Argument (I)); + Coord.Lat := Get (Arg1.Image); + I := I + 1; + Arg2 := As_U.Tus (Ada.Command_Line.Argument (I)); + Coord.Lon := Get (Arg2.Image); + Ada.Text_Io.Put_Line (Image (Coord.Lat) + & " " & Image (Coord.Lon)); + else + -- Alternative mapcodes + Parse_Mapcode; + Coord := Decode (Arg1.Image, Arg2.Image); + end if; + -- Parse options: Territory, selection and precsion Territory := As_U.Asu_Null; Shortest := True; Local := False; @@ -149,16 +198,16 @@ begin elsif Lower_Str (Arg1.Image) = "local" then Shortest := True; Local := True; - elsif Arg1.Length = 1 - and then Arg1.Element (1) >= '0' - and then Arg1.Element (1) <= '2' then - Precision := Precisions'Value (Arg1.Image); + elsif Arg1.Length = 2 + and then Arg1.Element (1) = 'P' + and then Arg1.Element (2) >= '0' + and then Arg1.Element (2) <= '2' then + Precision := Precisions'Value (Arg1.Slice (2, 2)); else Territory := Arg1; end if; end loop; - Ada.Text_Io.Put_Line (Image (Coord.Lat) - & " " & Image (Coord.Lon)); + -- Put mapcodes declare procedure Put_Code (Code : Mapcodes.Mapcode_Info) is begin @@ -185,40 +234,30 @@ begin end; Ada.Text_Io.New_Line; elsif Command.Image = "-d" then - -- Decode next argument, optionally preceeded by a context - I := I + 1; - Arg1 := As_U.Tus (Ada.Command_Line.Argument (I)); - Arg2.Set_Null; - if I < Ada.Command_Line.Argument_Count then - Tmp := As_U.Tus (Ada.Command_Line.Argument (I + 1)); - if not Is_Command (Tmp.Image) then - Arg2 := Arg1; - Arg1 := Tmp; - I := I + 1; - end if; - end if; - Ada.Text_Io.Put_Line (Arg1.Image & " " & Arg2.Image); - -- Split : - if Arg2.Is_Null and then Arg1.Locate (":") /= 0 then - I := Arg1.Locate (":"); - Arg2 := Arg1.Head (I - 1); - Arg1.Delete (1, I); - end if; + -- Decode: next argument is mapcode, optionally preceeded by a context + Parse_Mapcode; -- Decode Coord := Decode (Arg1.Image, Arg2.Image); Ada.Text_Io.Put_Line ("=> " & Image (Coord.Lat) & " " & Image (Coord.Lon)); + else + raise Argument_Error; + return; end if; I := I + 1; end loop; Ada.Command_Line.Set_Exit_Status (0); exception when Mapcodes.Unknown_Territory => - Ada.Text_Io.Put_Line ("Raised Unknown_Territory"); + Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, + "Raised Unknown_Territory"); Ada.Command_Line.Set_Exit_Status (1); when Mapcodes.Decode_Error => - Ada.Text_Io.Put_Line ("Raised Decode_Error"); + Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Raised Decode_Error"); Ada.Command_Line.Set_Exit_Status (1); + when Argument_Error => + Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Invalid Argument"); + Ada.Command_Line.Set_Exit_Status (2); when others => Ada.Command_Line.Set_Exit_Status (2); raise; diff --git a/test/Scenario.txt b/test/Scenario.txt index c04ac99..64016e0 100644 --- a/test/Scenario.txt +++ b/test/Scenario.txt @@ -46,9 +46,9 @@ -d NLD 49.4V => 52.376514000 4.908543375 -c 52.376514000 4.908543375 NLD => NLD 49.4V 'NLD 49.4V' 112 -d NLD 49.4V-V => 52.376476500 4.908514225 --c 52.376476500 4.908514225 NLD 1 => NLD 49.4V-V 'NLD 49.4V-V' 112 +-c 52.376476500 4.908514225 NLD P1 => NLD 49.4V-V 'NLD 49.4V-V' 112 -d NLD 49.4V-V2 => 52.376482500 4.908511796 --c 52.376482500 4.908511796 NLD 2 => NLD 49.4V-V2 'NLD 49.4V-V2' 112 +-c 52.376482500 4.908511796 NLD P2 => NLD 49.4V-V2 'NLD 49.4V-V2' 112 -d VHXGB.1J9J => 52.376504000 4.908535500 -c 52.3765140000 4.908543375 AAA => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 @@ -160,3 +160,31 @@ -d 0HZHZ.HZHZ => -89.999993000 0.000195000 -c -90.000000000 0.000000000 AAA => AAA 0HZHZ.HZHZ '0HZHZ.HZHZ' 532 +# Places +# Poitiers Les Grandes Dunes +-d FRA Z9Q.SL-M1 => 46.590932500 0.349860500 +# Isle Les Courrières +-d FRA ND.JJDZ-M9 => 45.813199500 1.206365417 +# Isle Rue Georges Brassens +-d FRA SLP.BD-X8 => 45.806409500 1.232507229 +# ENSAM Talence +-d FRA BDX.N5-BB => 44.802684500 -0.602354063 +# Paris 12 Rue Monge +-d FRA KM.TF-5M => 48.849000500 2.349730800 +# Antananarivo Les Charmilles +-d MDG KD.7S4-HT => -18.868751500 47.537236700 +# Paris 53 Rue Monge +-d FRA LN.FX-PT => 48.844908500 2.352342000 +# Boulogne Rue du Dôme +-d FRA CK.35B-F8 => 48.833574500 2.252516250 +# Melbourne Fletcher Street +-d VIC KJ.HY8-XJ => -37.827417500 145.045494750 +# Paris Avenue d'Ivry +-d FRA PX.6B-HF => 48.824187500 2.364010800 +# Paris Avenue de Choisy +-d FRA PY.39-L0 => 48.821481500 2.363679867 +# Blagnac Rue André Gide +-d FRA 3G0.95-8Y => 43.643670500 1.393579133 +# Fonsorbes Impasse des Lauriers +-d FRA FTGC.R3T-K3 => 43.531828717 1.235420533 + diff --git a/test/fulltest b/test/fulltest index a4d2a12..491b4e1 100755 --- a/test/fulltest +++ b/test/fulltest @@ -24,9 +24,10 @@ EPSILON[2]="7.5E-6" # Defaults export DEBUG="" export PRECISION=2 +export SCENARIO=0 function usage { - echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ]" + echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ] [ -s | --scenario]" echo " or `basename $0` [ -h | --help ]" echo " Default precision: $PRECISION" } @@ -53,6 +54,9 @@ while [ -n "$1" ] ; do (--precision=*) export PRECISION=${1#*=} ;; + ("-s"|"--scenario") + export SCENARIO=1 + ;; (*) error "Invalid arguments" ;; @@ -60,6 +64,7 @@ while [ -n "$1" ] ; do shift done echo Precision $PRECISION +PRECISION=P${PRECISION} # Read field $3 of line $2 of file $1 function readarg { @@ -174,6 +179,9 @@ while true ; do let L=$L+1 done echo OK. +if [ "$SCENARIO" = "1" ] ; then + exit 0 +fi # Check Territory failures echo Failure on territory: @@ -338,7 +346,7 @@ function decode { # Check decoded lat lon versus provided enc=`t_mapcode -c $3 $4 $1 $PRECISION` enc=`echo $enc | cut -d ">" -f 2 | cut -d " " -f 2-3` - dec=`t_mapcode -d $enc $2` + dec=`t_mapcode -d $enc` dec=`echo $dec | cut -d ">" -f 2` res=`check "-d" "$dec" "$3 $4" $PRECISION` if [ "$res" != "0" ] ; then From 3afa36bb898287bd1caf2547e44bc46886cdd85f Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 1 Sep 2018 18:00:33 +0200 Subject: [PATCH 06/42] Fix warnings of AdaControl --- src/mapcodes.adb | 198 +++++++++++++++++++++++++--------------------- src/t_mapcode.adb | 1 - 2 files changed, 107 insertions(+), 92 deletions(-) diff --git a/src/mapcodes.adb b/src/mapcodes.adb index b005ebc..288d9ad 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -19,7 +19,6 @@ with Ndata; package body Mapcodes is subtype Lint is Long_Long_Integer; - use type Lint; -- All functions returning a Integer return a natural or Error Error : constant Integer := -1; @@ -2211,6 +2210,7 @@ package body Mapcodes is Dividery, 0, Decodemaxy, Decodemaxx); end Decode_Grid; + -- Mapcoder engine Max_Nr_Of_Mapcode_Results : constant := 22; function Mapcoder_Engine (Enc : Frac_Rec; Tn : in Integer; Get_Shortest : Boolean; State_Override : Integer; @@ -2221,11 +2221,81 @@ package body Mapcodes is Upto_Territory : Integer := Ccode_Earth; Original_Length : Natural; From, Upto : Integer; - Mm : Min_Max_Rec; - R : As_U.Asu_Us; Store_Code : Integer; Mc_Info : Mapcode_Info; - use type As_U.Asu_Us; + Go_On : Boolean; + + -- Scan a range of territories + procedure Scan (Territory_Number : Integer) is + Mm : Min_Max_Rec; + R : As_U.Asu_Us; + use type As_U.Asu_Us; + begin + for I in From .. Upto loop + -- Exlude 54 and 55 + if Co_Dex(I) < 54 then + Mm := Min_Max_Setup (I); + if Fits_Inside (Enc.Coord32, Mm) then + if Is_Nameless (I) then + R := As_U.Tus (Encode_Nameless (Enc, I, From, Extra_Digits)); + elsif Rec_Type(I) > 1 then + R := As_U.Tus (Encode_Auto_Header (Enc, I, Extra_Digits)); + elsif I = Upto and then Get_Parent (Territory_Number) >= 0 then + declare + More_Results : constant Mapcode_Infos + := Mapcoder_Engine (Enc, + Get_Parent (Territory_Number), + Get_Shortest, + Territory_Number, + Extra_Digits); + T : constant Natural := Nb_Results; + N : constant Natural := More_Results'Length; + begin + if N > 0 then + Nb_Results := Nb_Results + N; + if Nb_Results > Max_Nr_Of_Mapcode_Results then + Nb_Results := Max_Nr_Of_Mapcode_Results; + end if; + Results (T + 1 .. Nb_Results) := More_Results; + end if; + R.Set_Null; + end; + else + if Is_Restricted (I) + and then Nb_Results = Original_Length then + -- Restricted, and no shorter mapcodes exist: + -- do not generate mapcodes + R.Set_Null; + else + R := As_U.Tus (Encode_Grid (Enc, I, Mm, + Header_Letter(I), Extra_Digits)); + end if; + end if; + + if R.Length > 4 then + R := As_U.Tus (Aeu_Pack (R, False)); + Store_Code := Territory_Number; + if State_Override >= 0 then + Store_Code := State_Override; + end if; + + Mc_Info.Mapcode := R; + Mc_Info.Territory_Alpha_Code := + As_U.Tus (Get_Territory_Alpha_Code (Store_Code)); + Mc_Info.Full_Mapcode := + (if Store_Code = Ccode_Earth then As_U.Asu_Null + else Mc_Info.Territory_Alpha_Code & " ") & R; + Mc_Info.Territory_Number := Store_Code; + Nb_Results := Nb_Results + 1; + Results (Nb_Results) := Mc_Info; + + exit when Get_Shortest; + end if; + end if; + end if; + end loop; + end Scan; + begin if Tn in From_Territory .. Upto_Territory then From_Territory := Tn; @@ -2233,82 +2303,22 @@ package body Mapcodes is end if; for Territory_Number in From_Territory .. Upto_Territory loop + Go_On := True; Original_Length := Nb_Results; From := Data_First_Record (Territory_Number); if Ndata.Data_Flags(From + 1) = 0 then - goto Continue; - end if; - Upto := Data_Last_Record (Territory_Number); - if Territory_Number /= Ccode_Earth - and then not Fits_Inside (Enc.Coord32, Min_Max_Setup (Upto)) then - goto Continue; + Go_On := False; end if; - - for I in From .. Upto loop - -- Exlude 54 and 55 - if Co_Dex(I) < 54 then - Mm := Min_Max_Setup (I); - if Fits_Inside (Enc.Coord32, Mm) then - if Is_Nameless (I) then - R := As_U.Tus (Encode_Nameless (Enc, I, From, Extra_Digits)); - elsif Rec_Type(I) > 1 then - R := As_U.Tus (Encode_Auto_Header (Enc, I, Extra_Digits)); - elsif I = Upto and then Get_Parent (Territory_Number) >= 0 then - declare - More_Results : constant Mapcode_Infos - := Mapcoder_Engine (Enc, - Get_Parent (Territory_Number), - Get_Shortest, - Territory_Number, - Extra_Digits); - T : constant Natural := Nb_Results; - N : constant Natural := More_Results'Length; - begin - if N > 0 then - Nb_Results := Nb_Results + N; - if Nb_Results > Max_Nr_Of_Mapcode_Results then - Nb_Results := Max_Nr_Of_Mapcode_Results; - end if; - Results (T + 1 .. Nb_Results) := More_Results; - end if; - R.Set_Null; - end; - else - if Is_Restricted (I) - and then Nb_Results = Original_Length then - -- Restricted, and no shorter mapcodes exist: - -- do not generate mapcodes - R.Set_Null; - else - R := As_U.Tus (Encode_Grid (Enc, I, Mm, - Header_Letter(I), Extra_Digits)); - end if; - end if; - - if R.Length > 4 then - R := As_U.Tus (Aeu_Pack (R, False)); - Store_Code := Territory_Number; - if State_Override >= 0 then - Store_Code := State_Override; - end if; - - Mc_Info.Mapcode := R; - Mc_Info.Territory_Alpha_Code := - As_U.Tus (Get_Territory_Alpha_Code (Store_Code)); - Mc_Info.Full_Mapcode := - (if Store_Code = Ccode_Earth then As_U.Asu_Null - else Mc_Info.Territory_Alpha_Code & " ") & R; - Mc_Info.Territory_Number := Store_Code; - Nb_Results := Nb_Results + 1; - Results (Nb_Results) := Mc_Info; - - exit when Get_Shortest; - end if; - end if; + if Go_On then + Upto := Data_Last_Record (Territory_Number); + if Territory_Number /= Ccode_Earth + and then not Fits_Inside (Enc.Coord32, Min_Max_Setup (Upto)) then + Go_On := False; end if; - end loop; - - <> + end if; + if Go_On then + Scan (Territory_Number); + end if; end loop; return Results (1 .. Nb_Results); @@ -2329,6 +2339,27 @@ package body Mapcodes is Nr_Zone_Overlaps : Natural; Coord32 : Coord_Rec; Zfound, Z : Mapcode_Zone_Rec; + + procedure Try_Smaller (M : in Integer) is + begin + for J in From .. M - 1 loop + -- Try all smaller rectangles j + if not Is_Restricted (J) then + Z := Mz_Restrict_Zone_To (Zone, Min_Max_Setup (J)); + if not Mz_Is_Empty (Z) then + Nr_Zone_Overlaps := Nr_Zone_Overlaps + 1; + if Nr_Zone_Overlaps = 1 then + -- First fit! remember... + Zfound := Z; + else + -- More than one hit, give up + exit; + end if; + end if; + end if; + end loop; + end Try_Smaller; + begin if Minpos > 1 then Extensionchars := Map_Code.Uslice (Minpos + 1, Map_Code.Length); @@ -2392,22 +2423,7 @@ package body Mapcodes is if Nr_Zone_Overlaps = 0 then -- See if mapcode zone OVERLAPS any sub-area... - for J in From .. M - 1 loop - -- Try all smaller rectangles j - if not Is_Restricted (J) then - Z := Mz_Restrict_Zone_To (Zone, Min_Max_Setup (J)); - if not Mz_Is_Empty (Z) then - Nr_Zone_Overlaps := Nr_Zone_Overlaps + 1; - if Nr_Zone_Overlaps = 1 then - -- First fit! remember... - Zfound := Z; - else - -- More than one hit, give up - exit; - end if; - end if; - end if; - end loop; + Try_Smaller (M); if Nr_Zone_Overlaps = 1 then -- Intersected exactly ONE sub-area? diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 294b120..52959b3 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -242,7 +242,6 @@ begin & " " & Image (Coord.Lon)); else raise Argument_Error; - return; end if; I := I + 1; end loop; From 2c2f714a83c8f0c399c5530ffc616bd81b5beaeb Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 1 Sep 2018 18:00:50 +0200 Subject: [PATCH 07/42] Improve help --- test/Scenario.txt | 2 + test/fulltest | 179 ++++++++++++++++++++++++++-------------------- 2 files changed, 104 insertions(+), 77 deletions(-) diff --git a/test/Scenario.txt b/test/Scenario.txt index 64016e0..48abf2e 100644 --- a/test/Scenario.txt +++ b/test/Scenario.txt @@ -161,6 +161,8 @@ -c -90.000000000 0.000000000 AAA => AAA 0HZHZ.HZHZ '0HZHZ.HZHZ' 532 # Places +# la Rochelle clinique Aurore +-d FRA WH.J4CN => 46.160145000 -1.175072000 # Poitiers Les Grandes Dunes -d FRA Z9Q.SL-M1 => 46.590932500 0.349860500 # Isle Les Courrières diff --git a/test/fulltest b/test/fulltest index 491b4e1..7936189 100755 --- a/test/fulltest +++ b/test/fulltest @@ -16,7 +16,7 @@ #!/bin/bash -# Precision, in fraction of dregree, depending of encoding precision +# Precision, in fraction of degree, depending of encoding precision EPSILON[0]="2.5E-4" EPSILON[1]="5.0E-5" EPSILON[2]="7.5E-6" @@ -24,16 +24,25 @@ EPSILON[2]="7.5E-6" # Defaults export DEBUG="" export PRECISION=2 -export SCENARIO=0 +export SCENARIO_ONLY=0 +export TEST=0 + +# DEBUG mode logs each operation +# PRECISION is 0, 1 or 2 +# SCENARIO_ONLY play only the scenario +# TEST mode plays the scenario, tests the encoding_ok and 1% of the decoding_ok function usage { - echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ] [ -s | --scenario]" + echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ] [ -s | --scenario_only ] [ -t | --test ]" echo " or `basename $0` [ -h | --help ]" - echo " Default precision: $PRECISION" + echo " Precision is from 0 to 2, default: $PRECISION" + echo " Debug logs each incdividual test" + echo " Scenario_only play only the scenario" + echo " Test mode plays the scenario, tests the encoding_ok and 1% of the decoding_ok" } function error { - echo "ERROR: $1" 1>&2 + echo "ERROR: $1." 1>&2 exit 1 } @@ -54,8 +63,11 @@ while [ -n "$1" ] ; do (--precision=*) export PRECISION=${1#*=} ;; - ("-s"|"--scenario") - export SCENARIO=1 + ("-s"|"--scenario_only") + export SCENARIO_ONLY=1 + ;; + ("-t"|"--test") + export TEST=1 ;; (*) error "Invalid arguments" @@ -63,6 +75,12 @@ while [ -n "$1" ] ; do esac shift done +if [ \( $SCENARIO_ONLY -eq 1 \) -a \( $TEST -eq 1 \) ] ; then + error "Options \"scenario_only\" and \"test\" are mutually exclusive" +fi +if [ \( $PRECISION != "1" \) -a \( $PRECISION != "2" \) -a \( $PRECISION != "3" \) ] ; then + error "Invalid precision $PRECISION." +fi echo Precision $PRECISION PRECISION=P${PRECISION} @@ -179,78 +197,82 @@ while true ; do let L=$L+1 done echo OK. -if [ "$SCENARIO" = "1" ] ; then +if [ "$SCENARIO_ONLY" = "1" ] ; then exit 0 fi -# Check Territory failures -echo Failure on territory: -# Info on $1 in context $2 shall lead to error (exit 1) -function territory_failure { - if [ -n "$DEBUG" ] ; then - echo -t "$1" "$2" - fi - t_mapcode -t "$1" "$2" > /dev/null 2>&1 - res=$? - if [ $res -ne 1 ] ; then - error "t_mapcode -t \"$1\" "$2" has exited with code $res i.o. 1" - fi -} -territory_failure "" -territory_failure " " -territory_failure USA " " -territory_failure " " "US " -territory_failure "Toto" -territory_failure AL Toto -# For each line -let L=1 -while true ; do - ctx=`readarg TerritoryFailures.txt $L 1` - if [ -z "$ctx" ] ; then - break; - fi - ter=`readarg TerritoryFailures.txt $L 2` - if [ -z "$ter" ] ; then - ter=$ctx - ctx="" - fi - territory_failure $ter $ctx - let L=$L+1 -done -echo OK. +if [ $TEST -eq 0 ] ; then + # Check Territory failures + echo Failure on territory: + # Info on $1 in context $2 shall lead to error (exit 1) + function territory_failure { + if [ -n "$DEBUG" ] ; then + echo -t "$1" "$2" + fi + t_mapcode -t "$1" "$2" > /dev/null 2>&1 + res=$? + if [ $res -ne 1 ] ; then + error "t_mapcode -t \"$1\" "$2" has exited with code $res i.o. 1" + fi + } + territory_failure "" + territory_failure " " + territory_failure USA " " + territory_failure " " "US " + territory_failure "Toto" + territory_failure AL Toto + # For each line + let L=1 + while true ; do + ctx=`readarg TerritoryFailures.txt $L 1` + if [ -z "$ctx" ] ; then + break; + fi + ter=`readarg TerritoryFailures.txt $L 2` + if [ -z "$ter" ] ; then + ter=$ctx + ctx="" + fi + territory_failure $ter $ctx + let L=$L+1 + done + echo OK. +fi -# Check decoding failures -echo Failure to decode: -# Decoding $1 in context $2 shall lead to error (exit 1) -function decode_failure { - if [ -n "$DEBUG" ] ; then - echo -d "$1" "$2" - fi - t_mapcode -d "$1" $2 > /dev/null 2>&1 - res=$? - if [ $res -ne 1 ] ; then - error "t_mapcode -d \"$1\" $2 has exited with code $res i.o. 1" - fi -} -decode_failure "" -decode_failure "QD3CL.PX8J-K3'" -decode_failure "QD3CL.P'X8J-K3" -# For each line -let L=1 -while true ; do - ctx=`readarg DecodeFailures.txt $L 1` - if [ -z "$ctx" ] ; then - break; - fi - cod=`readarg DecodeFailures.txt $L 2` - if [ -z "$cod" ] ; then - cod=$ctx - ctx="" - fi - decode_failure $ctx $cod - let L=$L+1 -done -echo OK. +if [ $TEST -eq 0 ] ; then + # Check decoding failures + echo Failure to decode: + # Decoding $1 in context $2 shall lead to error (exit 1) + function decode_failure { + if [ -n "$DEBUG" ] ; then + echo -d "$1" "$2" + fi + t_mapcode -d "$1" $2 > /dev/null 2>&1 + res=$? + if [ $res -ne 1 ] ; then + error "t_mapcode -d \"$1\" $2 has exited with code $res i.o. 1" + fi + } + decode_failure "" + decode_failure "QD3CL.PX8J-K3'" + decode_failure "QD3CL.P'X8J-K3" + # For each line + let L=1 + while true ; do + ctx=`readarg DecodeFailures.txt $L 1` + if [ -z "$ctx" ] ; then + break; + fi + cod=`readarg DecodeFailures.txt $L 2` + if [ -z "$cod" ] ; then + cod=$ctx + ctx="" + fi + decode_failure $ctx $cod + let L=$L+1 + done + echo OK. +fi # Encode echo Encode @@ -364,14 +386,17 @@ decode "" "ZZ0Z0.Z1YG" "90.000000000000" "179.999999999999" 1 1 # For each line # Read ctx cod lat lon loc glo let L=0 +let R=0 while read -r ctx cod lat lon loc glo || [[ -n "$ctx" ]]; do if [ \( -z "$ctx" \) -o \( "$ctx" = "#" \) ] ; then continue fi - decode $ctx $cod $lat $lon $loc $glo + if [ \( $TEST -eq 0 \) -o \( $R -eq 0 \) ] ; then + decode $ctx $cod $lat $lon $loc $glo + fi R=$((L % 100)) - if [ $R -eq 0 ] ; then + if [ \( $R -eq 0 \) -a \( -z "$DEBUG" \) ] ; then echo -n "." fi let L=$L+1 From c52d7d0b8d6728c5fedbe326d336af8270eb5400 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 19 Jan 2019 10:54:33 +0100 Subject: [PATCH 08/42] Improve test and help --- README.md | 2 +- src/t_mapcode.adb | 16 ++++++++-------- test/Scenario.txt | 5 +++++ test/fulltest | 5 +++-- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index ffc74f0..df431e8 100644 --- a/README.md +++ b/README.md @@ -295,8 +295,8 @@ Usage: -a [ ] // Alternative mapcodes ::= : | [ territory] ::= [ ] [ ] [ ] + ::= [ all | local ] // Default short ::= P0 | P1 | P2 - ::= [ all | local ] // Default short Default selection leads to encode with Shortest => True, while `all` leads to diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 52959b3..ebdb2e3 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -27,23 +27,23 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( "Usage: " & Ada.Command_Line.Command_Name & " "); Ada.Text_Io.Put_Line ( - " -h // This help"); + " -h // This help"); Ada.Text_Io.Put_Line ( - " -t // Territory info"); + " -t // Territory info"); Ada.Text_Io.Put_Line ( - " -d // Decode"); + " -d // Decode"); Ada.Text_Io.Put_Line ( - " -c [ ] // Encode"); + " -c [ ] // Encode"); Ada.Text_Io.Put_Line ( - " -a [ ] // Alternative mapcodes"); + " -a [ ] // Alternative mapcodes"); Ada.Text_Io.Put_Line ( - " ::= | [ territory] "); + " ::= : | [ ] "); Ada.Text_Io.Put_Line ( " ::= [ ] [ ] [ ]"); Ada.Text_Io.Put_Line ( - " ::= P0 | P1 | P2"); + " ::= [ all | local ] // Default short"); Ada.Text_Io.Put_Line ( - " ::= [ all | local ] // Default short"); + " ::= P0 | P1 | P2"); end Usage; function Integer_Image (I : Integer) return String is diff --git a/test/Scenario.txt b/test/Scenario.txt index 48abf2e..acf0204 100644 --- a/test/Scenario.txt +++ b/test/Scenario.txt @@ -93,6 +93,11 @@ -c -20.8996075 55.4563685 REU => REU 7F.S1 'REU 7F.S1' 67 -d BN8C7.X9YW => -20.899602000 55.456374000 -c -20.8996075 55.4563685 AAA => AAA BN8C7.X9YW 'BN8C7.X9YW' 532 +-d REU 0C.JKV => -21.050171000 55.222207500 +-c -21.050171000 55.222207500 REU => REU 0C.JKV 'REU 0C.JKV' 67 +-d REU 7XC.4PP => -21.050162500 55.222211000 +-c -21.050162500 55.222211000 REU all => REU 7XC.4PP 'REU 7XC.4PP' 67 + # MUS - Rodrigues -d MUS BLX.43 => -19.754036000 63.358374000 diff --git a/test/fulltest b/test/fulltest index 7936189..fa4be10 100755 --- a/test/fulltest +++ b/test/fulltest @@ -78,7 +78,7 @@ done if [ \( $SCENARIO_ONLY -eq 1 \) -a \( $TEST -eq 1 \) ] ; then error "Options \"scenario_only\" and \"test\" are mutually exclusive" fi -if [ \( $PRECISION != "1" \) -a \( $PRECISION != "2" \) -a \( $PRECISION != "3" \) ] ; then +if [ \( $PRECISION != "0" \) -a \( $PRECISION != "1" \) -a \( $PRECISION != "2" \) ] ; then error "Invalid precision $PRECISION." fi echo Precision $PRECISION @@ -183,8 +183,9 @@ while true ; do error "mapcode has exited with code $code" exit 1 fi + # Get last (line of) result # Skip up to "=> " included and append a space (cause OUTPUT has one) - result=`echo $result | cut -d ">" -f 2 | cut -d " " -f 2-`" " + result=`echo $result | awk -F "=> " '{print $NF}'`" " # Check that result is expected res=`check "$CMD" "$result" "$OUTPUT" 0` if [ "$res" = "0" ] ; then From 23df0343b672b02c2f4616a55ca6761231235518 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 13 Jul 2019 10:43:20 +0200 Subject: [PATCH 09/42] Add Nepal --- test/Scenario.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/Scenario.txt b/test/Scenario.txt index acf0204..417bb56 100644 --- a/test/Scenario.txt +++ b/test/Scenario.txt @@ -165,6 +165,20 @@ -d 0HZHZ.HZHZ => -89.999993000 0.000195000 -c -90.000000000 0.000000000 AAA => AAA 0HZHZ.HZHZ '0HZHZ.HZHZ' 532 +# Nepal +# Tengboche monastery helipad +-d NPL LC3.HP9-XT => 27.835399517 86.765701350 +-c 27.8354 86.7657 NPL P2 => NPL LC3.HP9-XT 'NPL LC3.HP9-XT' 152 +# Namche Bazar helipad +-d NPL KHW.H60-J9 => 27.803876950 86.714467350 +-c 27.803878 86.714468 NPL P2 => NPL KHW.H60-J9 'NPL KHW.H60-J9' 152 +# Lukla helico parking +-d NPL KHW.H60-J9 => 27.803878000 86.714468000 +-c 27.803878 86.714468 NPL P2 => NPL KHW.H60-J9 'NPL KHW.H60-J9' 152 +# Everest south base camp +-d NPL M4P.FL4-TJ => 28.007220583 86.859440850 +-c 28.00722 86.85944 NPL P2 => NPL M4P.FL4-TJ 'NPL M4P.FL4-TJ' 152 + # Places # la Rochelle clinique Aurore -d FRA WH.J4CN => 46.160145000 -1.175072000 From 242d5d4833ccdff8545a1c5d1453466ca332e6a4 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 13 Jul 2019 10:43:31 +0200 Subject: [PATCH 10/42] Fix comment --- src/mapcodes.adb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 288d9ad..f8ac2fd 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -2486,8 +2486,8 @@ package body Mapcodes is if not Sort then return Result; end if; - -- Search shosrtest mapcode (First) and the Last mapcode for the - -- same territoy + -- Search shortest mapcode (First) and the last mapcode for the + -- same territory as First for I in Result'Range loop if Result(I).Mapcode.Length < Len then First := I; From 8e34aa82cd613496ecab8f7e3c662bacb74f7bee Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 13 Jul 2019 10:45:31 +0200 Subject: [PATCH 11/42] Improve test program --- README.md | 20 +++++++++------ src/t_mapcode.adb | 64 +++++++++++++++++++++++++++++++++++------------ 2 files changed, 60 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index df431e8..ae3c6a3 100644 --- a/README.md +++ b/README.md @@ -288,15 +288,19 @@ The command line testing tool `t_mapcode` can perform 3 actions: Usage: t_mapcode - -h // This help - -t // Territory info - -d // Decode - -c [ ] // Encode - -a [ ] // Alternative mapcodes - ::= : | [ territory] + -h // This help + -t // Territory info + -s // Search territory + -d // Decode + -c [ ] // Encode + -a [ ] // Alternative mapcodes + ::= : | [ ] ::= [ ] [ ] [ ] - ::= [ all | local ] // Default short - ::= P0 | P1 | P2 + ::= [ all | local | short] // Default short + // Default: one mapcode (the shortest) of each territory + // all: all the mapcodes of all territories + // local: the shortest among all the mapcodes + ::= P0 | P1 | P2 // Default P0 Default selection leads to encode with Shortest => True, while `all` leads to diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index ebdb2e3..f90f315 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -16,7 +16,7 @@ -- Mapcode test main program with Ada.Command_Line, Ada.Text_Io; -with As_U, Mapcodes; +with As_U, Str_Tools, Mapcodes, Ctrynams; procedure T_Mapcode is use Mapcodes; @@ -27,23 +27,31 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( "Usage: " & Ada.Command_Line.Command_Name & " "); Ada.Text_Io.Put_Line ( - " -h // This help"); + " -h // This help"); Ada.Text_Io.Put_Line ( - " -t // Territory info"); + " -t // Territory info"); Ada.Text_Io.Put_Line ( - " -d // Decode"); + " -s // Search territory"); Ada.Text_Io.Put_Line ( - " -c [ ] // Encode"); + " -d // Decode"); Ada.Text_Io.Put_Line ( - " -a [ ] // Alternative mapcodes"); + " -c [ ] // Encode"); + Ada.Text_Io.Put_Line ( + " -a [ ] // Alternative mapcodes"); Ada.Text_Io.Put_Line ( " ::= : | [ ] "); Ada.Text_Io.Put_Line ( " ::= [ ] [ ] [ ]"); Ada.Text_Io.Put_Line ( - " ::= [ all | local ] // Default short"); + " ::= [ all | local | short] // Default short"); + Ada.Text_Io.Put_Line ( + " // Default: one mapcode (the shortest) of each territory"); + Ada.Text_Io.Put_Line ( + " // all: all the mapcodes of all territories"); Ada.Text_Io.Put_Line ( - " ::= P0 | P1 | P2"); + " // local: the shortest among all the mapcodes"); + Ada.Text_Io.Put_Line ( + " ::= P0 | P1 | P2 // Default P0"); end Usage; function Integer_Image (I : Integer) return String is @@ -97,6 +105,12 @@ procedure T_Mapcode is return F'Img; end Image; + function Image (I : Natural) return String is + Str : constant String := I'Img; + begin + return Str(Natural'Succ(Str'First) .. Str'Last); + end Image; + function Quote (Str : String) return String is (''' & Str & '''); @@ -111,7 +125,7 @@ procedure T_Mapcode is Coord : Mapcodes.Coordinate; Territory : As_U.Asu_Us; Shortest : Boolean; - Local : Boolean; + Sorted : Boolean; Precision : Precisions; -- If Arg2 is a mapcde then parse Arg1=Ctx and Arg2=Map @@ -165,6 +179,17 @@ begin end if; end if; Put_Territory (Arg1.Image, Arg2.Image); + elsif Command.Image = "-s" then + -- Search contry names + I := I + 1; + Territory.Set (Str_Tools.Upper_Str (Ada.Command_Line.Argument (I))); + for J in Ctrynams.Isofullname'Range loop + if Str_Tools.Locate (Str_Tools.Upper_Str + (Ctrynams.Isofullname(J).Image), + Territory.Image) /= 0 then + Put_Territory (Image (J-1), ""); + end if; + end loop; elsif Command.Image = "-c" or else Command.Image = "-a" then if Command.Image = "-c" then @@ -185,19 +210,24 @@ begin end if; -- Parse options: Territory, selection and precsion Territory := As_U.Asu_Null; + -- Default selection: One (shortest) mapcode for each territory, + -- not sorted Shortest := True; - Local := False; + Sorted := False; Precision := 0; for J in I + 1 .. Ada.Command_Line.Argument_Count loop Arg1 := As_U.Tus (Ada.Command_Line.Argument (J)); exit when Is_Command (Arg1.Image); I := J; if Lower_Str (Arg1.Image) = "all" then + -- All mapcodes for each territory, not sorted Shortest := False; - Local := False; elsif Lower_Str (Arg1.Image) = "local" then - Shortest := True; - Local := True; + -- One (shortest) mapcode for each territory, + -- sorted i.o. to put the first one + Sorted := True; + elsif Lower_Str (Arg1.Image) = "short" then + null; elsif Arg1.Length = 2 and then Arg1.Element (1) = 'P' and then Arg1.Element (2) >= '0' @@ -219,10 +249,12 @@ begin end Put_Code; -- Sort if Local Codes : constant Mapcodes.Mapcode_Infos - := Encode (Coord, Territory.Image, Shortest, Precision, Local); + := Encode (Coord, Territory.Image, Shortest, Precision, Sorted); begin - if Local then - -- First mapcodes are the shortest and others of same territory + if Sorted then + -- Local <=> Sorted, put the first one + -- First mapcode is the shortest, and then others of the same + -- territory and then others... if Codes'Length /= 0 then Put_Code (Codes(Codes'First)); end if; From 70c527fa003953a1a53c8767590da78c7948e100 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 13 Jul 2019 10:45:58 +0200 Subject: [PATCH 12/42] Update copyright (2019) --- src/as_u.adb | 2 +- src/as_u.ads | 2 +- src/bits.adb | 2 +- src/bits.ads | 2 +- src/ctrynams.ads | 2 +- src/mapcodes.adb | 2 +- src/mapcodes.ads | 2 +- src/ndata.ads | 2 +- src/str_tools.adb | 2 +- src/str_tools.ads | 2 +- src/t_mapcode.adb | 2 +- test/DecodeFailures.txt | 2 +- test/DecodeOk.txt | 2 +- test/EncodeOk.txt | 2 +- test/Scenario.txt | 2 +- test/TerritoryFailures.txt | 2 +- test/fulltest | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/as_u.adb b/src/as_u.adb index 0b1e395..295f382 100644 --- a/src/as_u.adb +++ b/src/as_u.adb @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/as_u.ads b/src/as_u.ads index 64d257e..04ad4d2 100644 --- a/src/as_u.ads +++ b/src/as_u.ads @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/bits.adb b/src/bits.adb index 790f526..ec07a5f 100644 --- a/src/bits.adb +++ b/src/bits.adb @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/bits.ads b/src/bits.ads index 280a9c5..ca476c3 100644 --- a/src/bits.ads +++ b/src/bits.ads @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/ctrynams.ads b/src/ctrynams.ads index bc2704f..1f9efc2 100644 --- a/src/ctrynams.ads +++ b/src/ctrynams.ads @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/mapcodes.adb b/src/mapcodes.adb index f8ac2fd..77f5b18 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/mapcodes.ads b/src/mapcodes.ads index e6571a3..6216f3d 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/ndata.ads b/src/ndata.ads index 892d4e0..61cde94 100644 --- a/src/ndata.ads +++ b/src/ndata.ads @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/str_tools.adb b/src/str_tools.adb index aa8946e..13c7a36 100644 --- a/src/str_tools.adb +++ b/src/str_tools.adb @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/str_tools.ads b/src/str_tools.ads index cb9e4b2..2df4e60 100644 --- a/src/str_tools.ads +++ b/src/str_tools.ads @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index f90f315..2b50001 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -1,5 +1,5 @@ -- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/test/DecodeFailures.txt b/test/DecodeFailures.txt index 917b17a..21c169a 100644 --- a/test/DecodeFailures.txt +++ b/test/DecodeFailures.txt @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +# Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/DecodeOk.txt b/test/DecodeOk.txt index d071111..1446454 100644 --- a/test/DecodeOk.txt +++ b/test/DecodeOk.txt @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +# Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/EncodeOk.txt b/test/EncodeOk.txt index 832569a..95aff7e 100644 --- a/test/EncodeOk.txt +++ b/test/EncodeOk.txt @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +# Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/Scenario.txt b/test/Scenario.txt index 417bb56..c9c3752 100644 --- a/test/Scenario.txt +++ b/test/Scenario.txt @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +# Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/TerritoryFailures.txt b/test/TerritoryFailures.txt index ad24210..9b9b335 100644 --- a/test/TerritoryFailures.txt +++ b/test/TerritoryFailures.txt @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +# Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/test/fulltest b/test/fulltest index fa4be10..27f6d30 100755 --- a/test/fulltest +++ b/test/fulltest @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# Copyright (C) 2003-2018 Stichting Mapcode Foundation (http://www.mapcode.com) +# Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From 1c25cf9e1eb33cb01ae5bc536a0be0a08b0b9b02 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Thu, 26 Sep 2019 19:09:29 +0200 Subject: [PATCH 13/42] Move test data in a subdir --- src/t_mapcode.adb | 23 +++++++++++++++++- test/{DecodeFailures.txt => DecodeFailures} | 0 test/{DecodeOk.txt => DecodeOk} | 0 test/{EncodeOk.txt => EncodeOk} | 0 test/{Scenario.txt => Scenario} | 0 ...erritoryFailures.txt => TerritoryFailures} | 0 test/fulltest | 24 ++++++++++++------- 7 files changed, 37 insertions(+), 10 deletions(-) rename test/{DecodeFailures.txt => DecodeFailures} (100%) rename test/{DecodeOk.txt => DecodeOk} (100%) rename test/{EncodeOk.txt => EncodeOk} (100%) rename test/{Scenario.txt => Scenario} (100%) rename test/{TerritoryFailures.txt => TerritoryFailures} (100%) diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 2b50001..7fc158b 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -127,6 +127,7 @@ procedure T_Mapcode is Shortest : Boolean; Sorted : Boolean; Precision : Precisions; + Opt_Set, Pre_Set : Boolean; -- If Arg2 is a mapcde then parse Arg1=Ctx and Arg2=Map -- otherwise parse Arg1=[Ctx:]Map @@ -210,6 +211,8 @@ begin end if; -- Parse options: Territory, selection and precsion Territory := As_U.Asu_Null; + Opt_Set := False; + Pre_Set := False; -- Default selection: One (shortest) mapcode for each territory, -- not sorted Shortest := True; @@ -220,20 +223,38 @@ begin exit when Is_Command (Arg1.Image); I := J; if Lower_Str (Arg1.Image) = "all" then + if Opt_Set then + raise Argument_Error; + end if; -- All mapcodes for each territory, not sorted Shortest := False; + Opt_Set := True; elsif Lower_Str (Arg1.Image) = "local" then + if Opt_Set then + raise Argument_Error; + end if; -- One (shortest) mapcode for each territory, -- sorted i.o. to put the first one Sorted := True; + Opt_Set := True; elsif Lower_Str (Arg1.Image) = "short" then - null; + if Opt_Set then + raise Argument_Error; + end if; + Opt_Set := True; elsif Arg1.Length = 2 and then Arg1.Element (1) = 'P' and then Arg1.Element (2) >= '0' and then Arg1.Element (2) <= '2' then + if Pre_Set then + raise Argument_Error; + end if; Precision := Precisions'Value (Arg1.Slice (2, 2)); + Pre_Set := True; else + if not Territory.Is_Null then + raise Argument_Error; + end if; Territory := Arg1; end if; end loop; diff --git a/test/DecodeFailures.txt b/test/DecodeFailures similarity index 100% rename from test/DecodeFailures.txt rename to test/DecodeFailures diff --git a/test/DecodeOk.txt b/test/DecodeOk similarity index 100% rename from test/DecodeOk.txt rename to test/DecodeOk diff --git a/test/EncodeOk.txt b/test/EncodeOk similarity index 100% rename from test/EncodeOk.txt rename to test/EncodeOk diff --git a/test/Scenario.txt b/test/Scenario similarity index 100% rename from test/Scenario.txt rename to test/Scenario diff --git a/test/TerritoryFailures.txt b/test/TerritoryFailures similarity index 100% rename from test/TerritoryFailures.txt rename to test/TerritoryFailures diff --git a/test/fulltest b/test/fulltest index 27f6d30..c99118d 100755 --- a/test/fulltest +++ b/test/fulltest @@ -16,6 +16,12 @@ #!/bin/bash +# Test dir +export TDIR=test +if [ ! -d $TDIR ] ; then + TDIR=. +fi + # Precision, in fraction of degree, depending of encoding precision EPSILON[0]="2.5E-4" EPSILON[1]="5.0E-5" @@ -142,7 +148,7 @@ function check { fi } -# Play Scenario.txt +# Play Scenario echo Scenario: # For each line let L=1 @@ -154,7 +160,7 @@ while true ; do let ININ=1 CMD="" while true ; do - arg=`readarg Scenario.txt $L $I` + arg=`readarg $TDIR/Scenario $L $I` if [ "$arg" = "" ] ; then # End of line break @@ -225,11 +231,11 @@ if [ $TEST -eq 0 ] ; then # For each line let L=1 while true ; do - ctx=`readarg TerritoryFailures.txt $L 1` + ctx=`readarg $TDIR/TerritoryFailures $L 1` if [ -z "$ctx" ] ; then break; fi - ter=`readarg TerritoryFailures.txt $L 2` + ter=`readarg $TDIR/TerritoryFailures $L 2` if [ -z "$ter" ] ; then ter=$ctx ctx="" @@ -260,11 +266,11 @@ if [ $TEST -eq 0 ] ; then # For each line let L=1 while true ; do - ctx=`readarg DecodeFailures.txt $L 1` + ctx=`readarg $TDIR/DecodeFailures $L 1` if [ -z "$ctx" ] ; then break; fi - cod=`readarg DecodeFailures.txt $L 2` + cod=`readarg $TDIR/DecodeFailures $L 2` if [ -z "$cod" ] ; then cod=$ctx ctx="" @@ -281,11 +287,11 @@ echo Encode let L=1 while true ; do # Read lat and lon - lat=`readarg EncodeOk.txt $L 1` + lat=`readarg $TDIR/EncodeOk $L 1` if [ -z "$lat" ] ; then break; fi - lon=`readarg EncodeOk.txt $L 2` + lon=`readarg $TDIR/EncodeOk $L 2` # Encode result=`t_mapcode -c $lat $lon $PRECISION` if [ $? -ne 0 ] ; then @@ -401,6 +407,6 @@ while read -r ctx cod lat lon loc glo || [[ -n "$ctx" ]]; do echo -n "." fi let L=$L+1 -done < DecodeOk.txt +done < $TDIR/DecodeOk echo echo OK. From c1aa79f95a9733b0c04b6f211aa9d0c08a028d99 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 27 Sep 2019 19:55:42 +0200 Subject: [PATCH 14/42] Move utilites as sub-packages --- README.md | 1 + src/ctrynams.ads | 3 ++- src/{as_u.adb => mapcode_utils-as_u.adb} | 4 ++-- src/{as_u.ads => mapcode_utils-as_u.ads} | 4 ++-- src/{bits.adb => mapcode_utils-bits.adb} | 4 ++-- src/{bits.ads => mapcode_utils-bits.ads} | 4 ++-- ..._tools.adb => mapcode_utils-str_tools.adb} | 4 ++-- ..._tools.ads => mapcode_utils-str_tools.ads} | 4 ++-- src/mapcode_utils.ads | 19 +++++++++++++++++++ src/mapcodes.adb | 3 ++- src/mapcodes.ads | 8 ++++---- src/t_mapcode.adb | 4 +++- 12 files changed, 43 insertions(+), 19 deletions(-) rename src/{as_u.adb => mapcode_utils-as_u.adb} (99%) rename src/{as_u.ads => mapcode_utils-as_u.ads} (99%) rename src/{bits.adb => mapcode_utils-bits.adb} (98%) rename src/{bits.ads => mapcode_utils-bits.ads} (97%) rename src/{str_tools.adb => mapcode_utils-str_tools.adb} (98%) rename src/{str_tools.ads => mapcode_utils-str_tools.ads} (96%) create mode 100644 src/mapcode_utils.ads diff --git a/README.md b/README.md index ae3c6a3..9f2010b 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ https://github.com/malaise/ada/tree/master/usr/mapcode The following files, in directory `src`, provide utilities for mapcode processing: + mapcode-utils.ads - Root package of the utilities: as_u.ads as_u.adb - Unbounded strings bits.ads bits.adb - Bit operations str_tools.ads str_tools.adb - String utilities diff --git a/src/ctrynams.ads b/src/ctrynams.ads index 1f9efc2..f5ec48a 100644 --- a/src/ctrynams.ads +++ b/src/ctrynams.ads @@ -14,7 +14,8 @@ -- limitations under the License. -- ----------------------------------------------------------------------------- -with As_U; +with Mapcode_Utils.As_U; +use Mapcode_Utils; package Ctrynams is Isofullname : constant array (Positive range <>) of As_U.Asu_Us := ( diff --git a/src/as_u.adb b/src/mapcode_utils-as_u.adb similarity index 99% rename from src/as_u.adb rename to src/mapcode_utils-as_u.adb index 295f382..ca49d78 100644 --- a/src/as_u.adb +++ b/src/mapcode_utils-as_u.adb @@ -15,7 +15,7 @@ -- ----------------------------------------------------------------------------- with Ada.Unchecked_Deallocation; -package body As_U is +package body Mapcode_Utils.As_U is -- Each time a re-allocation is needed, increment Length by -- Nb_To_Add + Growth_Offset + Curr_Length / Growth_Factor @@ -609,5 +609,5 @@ package body As_U is Object.Last := 0; end Finalize; -end As_U; +end Mapcode_Utils.As_U; diff --git a/src/as_u.ads b/src/mapcode_utils-as_u.ads similarity index 99% rename from src/as_u.ads rename to src/mapcode_utils-as_u.ads index 04ad4d2..32c0832 100644 --- a/src/as_u.ads +++ b/src/mapcode_utils-as_u.ads @@ -17,7 +17,7 @@ -- Similar to Ada.Strings.Unbounded, but with a tagged type, more operations -- and more powerfull operations private with Ada.Finalization; -package As_U is +package Mapcode_Utils.As_U is -- Common definitions for bounded and unbounded strings Space : Character := ' '; @@ -191,5 +191,5 @@ private Asu_Null : constant Asu_Us := (Ada.Finalization.Controlled with others => <>); -end As_U; +end Mapcode_Utils.As_U; diff --git a/src/bits.adb b/src/mapcode_utils-bits.adb similarity index 98% rename from src/bits.adb rename to src/mapcode_utils-bits.adb index ec07a5f..2fc215f 100644 --- a/src/bits.adb +++ b/src/mapcode_utils-bits.adb @@ -24,7 +24,7 @@ pragma Warnings (On, "* is an internal GNAT unit"); with Interfaces; -package body Bits is +package body Mapcode_Utils.Bits is function To_Unsigned_32 is new Ada.Unchecked_Conversion @@ -120,5 +120,5 @@ package body Bits is function Shr (Val : Ll_Integer; Bits : Integer) return Ll_Integer is (To_Ll_Integer(Interfaces.Shift_Right (To_Unsigned_64(Val), Bits))); -end Bits; +end Mapcode_Utils.Bits; diff --git a/src/bits.ads b/src/mapcode_utils-bits.ads similarity index 97% rename from src/bits.ads rename to src/mapcode_utils-bits.ads index ca476c3..7ccfde6 100644 --- a/src/bits.ads +++ b/src/mapcode_utils-bits.ads @@ -15,7 +15,7 @@ -- ----------------------------------------------------------------------------- -- Bit operations -package Bits is +package Mapcode_Utils.Bits is -- Bit and, bit or, bit neg, shift left and shift right @@ -44,5 +44,5 @@ package Bits is function Shr (Val : Ll_Integer; Bits : Integer) return Ll_Integer with Inline => True; -end Bits; +end Mapcode_Utils.Bits; diff --git a/src/str_tools.adb b/src/mapcode_utils-str_tools.adb similarity index 98% rename from src/str_tools.adb rename to src/mapcode_utils-str_tools.adb index 13c7a36..8cf28c7 100644 --- a/src/str_tools.adb +++ b/src/mapcode_utils-str_tools.adb @@ -15,7 +15,7 @@ -- ----------------------------------------------------------------------------- -- Various utilities on strings -package body Str_Tools is +package body Mapcode_Utils.Str_Tools is -- Locate the Nth occurence of a fragment within a string, -- between a given index (first/last if 0) and the end/beginning of the @@ -119,5 +119,5 @@ package body Str_Tools is return Result; end Mixed_Str; -end Str_Tools; +end Mapcode_Utils.Str_Tools; diff --git a/src/str_tools.ads b/src/mapcode_utils-str_tools.ads similarity index 96% rename from src/str_tools.ads rename to src/mapcode_utils-str_tools.ads index 2df4e60..0d1a2e9 100644 --- a/src/str_tools.ads +++ b/src/mapcode_utils-str_tools.ads @@ -15,7 +15,7 @@ -- ----------------------------------------------------------------------------- -- Various utilities on strings -package Str_Tools is +package Mapcode_Utils.Str_Tools is -- Convert the characters of Str into upper char function Upper_Str (Str : String) return String; @@ -43,5 +43,5 @@ package Str_Tools is Occurence : Positive := 1) return Natural; -end Str_Tools; +end Mapcode_Utils.Str_Tools; diff --git a/src/mapcode_utils.ads b/src/mapcode_utils.ads new file mode 100644 index 0000000..d397c1d --- /dev/null +++ b/src/mapcode_utils.ads @@ -0,0 +1,19 @@ +-- ----------------------------------------------------------------------------- +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- ----------------------------------------------------------------------------- + +package Mapcode_Utils is +end Mapcode_Utils; + diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 77f5b18..61a7ab1 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -14,7 +14,8 @@ -- limitations under the License. -- ----------------------------------------------------------------------------- -with Str_Tools, Bits; +with Mapcode_Utils.Str_Tools, Mapcode_Utils.Bits; +use Mapcode_Utils; with Ndata; package body Mapcodes is diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 6216f3d..bb59aa2 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -15,7 +15,7 @@ -- ----------------------------------------------------------------------------- -- Mapcode management -with As_U; +with Mapcode_Utils.As_U; with Ctrynams; package Mapcodes is @@ -79,12 +79,12 @@ package Mapcodes is -- One mapcode-related information bloc type Mapcode_Info is record -- Territory code (AAA for Earth) - Territory_Alpha_Code : As_U.Asu_Us; + Territory_Alpha_Code : Mapcode_Utils.As_U.Asu_Us; -- Simple mapcode - Mapcode : As_U.Asu_Us; + Mapcode : Mapcode_Utils.As_U.Asu_Us; -- Territory, then a space and the mapcode, -- or simple mapcode if it is valid on Earth - Full_Mapcode : As_U.Asu_Us; + Full_Mapcode : Mapcode_Utils.As_U.Asu_Us; -- Territory number Territory_Number : Territory_Range; end record; diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 7fc158b..f99bbe2 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -16,7 +16,9 @@ -- Mapcode test main program with Ada.Command_Line, Ada.Text_Io; -with As_U, Str_Tools, Mapcodes, Ctrynams; +with Mapcode_Utils.As_U, Mapcode_Utils.Str_Tools; +use Mapcode_Utils; +with Mapcodes, Ctrynams; procedure T_Mapcode is use Mapcodes; From 3a4060b6bdb463d934f63d29c3a56f9b341baebd Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 28 Sep 2019 09:02:25 +0200 Subject: [PATCH 15/42] Fix a typo ans indentation --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 9f2010b..d7d255c 100644 --- a/README.md +++ b/README.md @@ -221,7 +221,7 @@ territories. With Sort set, return the territory with shortest mapcode first. - Encode ( (39.730409000, -79.954163500), "", Sortest => False, Sort => False) + Encode ( (39.730409000, -79.954163500), "", Shortest => False, Sort => False) -> US-WV W2W2.Q41V 'US-WV W2W2.Q41V' 353 -> US-PA BYLP.73 'US-PA BYLP.73' 361 -> US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 @@ -229,7 +229,7 @@ With Sort set, return the territory with shortest mapcode first. -> USA W2W2.Q41V 'USA W2W2.Q41V' 410 -> AAA S8LY1.RD84 'S8LY1.RD84' 532 - Encode ( (39.730409000, -79.954163500), "", Sortest => False, Sort => True) + Encode ( (39.730409000, -79.954163500), "", Shortest => False, Sort => True) -> US-PA BYLP.73 'US-PA BYLP.73' 361 -> US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 -> US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 @@ -289,19 +289,19 @@ The command line testing tool `t_mapcode` can perform 3 actions: Usage: t_mapcode - -h // This help - -t // Territory info - -s // Search territory - -d // Decode - -c [ ] // Encode - -a [ ] // Alternative mapcodes - ::= : | [ ] - ::= [ ] [ ] [ ] - ::= [ all | local | short] // Default short - // Default: one mapcode (the shortest) of each territory - // all: all the mapcodes of all territories - // local: the shortest among all the mapcodes - ::= P0 | P1 | P2 // Default P0 + -h // This help + -t // Territory info + -s // Search territory + -d // Decode + -c [ ] // Encode + -a [ ] // Alternative mapcodes + ::= : | [ ] + ::= [ ] [ ] [ ] + ::= [ all | local | short] // Default short + // Default: one mapcode (the shortest) of each territory + // all: all the mapcodes of all territories + // local: the shortest among all the mapcodes + ::= P0 | P1 | P2 // Default P0 Default selection leads to encode with Shortest => True, while `all` leads to From 190f809a405a259effd8e1986fdc75b1dc616420 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Mon, 19 Oct 2020 14:26:02 +0200 Subject: [PATCH 16/42] Remove parsing of partial context in the mapcode to decode --- src/mapcodes.adb | 57 ++++++++++++++++------------------------------- src/mapcodes.ads | 8 ++++--- src/t_mapcode.adb | 20 +++++++++++++---- test/EncodeOk | 4 ++-- test/fulltest | 8 ++++--- 5 files changed, 47 insertions(+), 50 deletions(-) diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 61a7ab1..5758755 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -702,7 +702,7 @@ package body Mapcodes is return Error; end if; P := Parent_Letter (Context); - if Context /= "" and then P = Error then + if Context /= "" and then Context /= "AAA" and then P = Error then return Error; end if; @@ -829,11 +829,6 @@ package body Mapcodes is end if; return Num; end Get_Territory_Number; - function Get_Territory_Number (Territory : String; - Context : in Integer) return Territory_Range is - (Get_Territory_Number ( - Territory, - (if Context = Error then "" else Iso3166Alpha(Context).Image))); -- Return full name of territory or Undefined function Get_Territory_Fullname (Territory_Number: in Territory_Range) @@ -1106,10 +1101,25 @@ package body Mapcodes is return Res; end Wrap; + function Round (Val, Max : Real) return Real is + Epsilon : constant Real := 0.0000005; + begin + if Val < 0.0 then + if Val < -Max and then Val >= -Max - Epsilon then + return -Max; + end if; + else + if Val > Max and then Val <= Max + Epsilon then + return Max; + end if; + end if; + return Val; + end Round; + function Convert_Fractions_To_Degrees (P : Coord_Rec) return Coordinate is begin - return (Lat => Real (P.Y) / 810000.0 / 1000000.0, - Lon => Real (P.X) / 3240000.0 / 1000000.0); + return (Lat => Round (Real (P.Y) / 810000.0 / 1000000.0, 90.0), + Lon => Round (Real (P.X) / 3240000.0 / 1000000.0, 180.0) ); end Convert_Fractions_To_Degrees; function Mz_Restrict_Zone_To (Zone : Mapcode_Zone_Rec; Mm : Min_Max_Rec) @@ -2513,42 +2523,13 @@ package body Mapcodes is function Decode (Mapcode, Context : String) return Coordinate is Contextterritorynumber : Integer; - Space1, Space2 : Natural; - Part1, Part2 : As_U.Asu_Us; - Territorynumber : Integer; - - function Spaces (I1, I2 : Natural) return String is - Res : constant String (I1 .. I2) := (others => ' '); - begin - return Res; - end Spaces; - F : constant Positive := Mapcode'First; begin if Context = Undefined then Contextterritorynumber := Ccode_Earth; else Contextterritorynumber := Get_Territory_Number(Context); end if; - - Space1 := Str_Tools.Locate (Mapcode, " "); - Space2 := Str_Tools.Locate (Mapcode, " ", Forward => False); - if Space1 = 0 then - return Master_Decode(Mapcode, Contextterritorynumber); - end if; - if Mapcode (Space1 .. Space2) = Spaces (Space1, Space2) then - Part1 := As_U.Tus (Mapcode (F .. Space1 - 1)); - Part2 := As_U.Tus (Mapcode (Space2 + F .. Mapcode'Last)); - if Is_Subdivision (Contextterritorynumber) then - Contextterritorynumber := Get_Parent (Contextterritorynumber); - end if; - Territorynumber := Get_Territory_Number(Part1.Image, - Contextterritorynumber); - if Territorynumber >= 0 then - return Master_Decode (Part2.Image, Territorynumber); - end if; - end if; - raise Decode_Error; - + return Master_Decode (Mapcode, Contextterritorynumber); end Decode; end Mapcodes; diff --git a/src/mapcodes.ads b/src/mapcodes.ads index bb59aa2..9ea61a8 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -21,7 +21,7 @@ package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.0.7/Data" + Mapcode_Ada_Version : constant String := "1.0.8/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) @@ -30,7 +30,6 @@ package Mapcodes is ----------------- -- TERRITORIES -- ----------------- - -- Valid territory number subtype Territory_Range is Natural range 0 .. Ctrynams.Isofullname'Last - 1; @@ -72,8 +71,11 @@ package Mapcodes is -- Encoding to mapcodes -- -------------------------- -- Coordinate in fraction of degrees + subtype Lat_Range is Real range -90.0 .. 90.0; + subtype Lon_Range is Real range -180.0 .. 180.0; type Coordinate is record - Lat, Lon : Real; + Lat : Lat_Range; + Lon : Lon_Range; end record; -- One mapcode-related information bloc diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index f99bbe2..8e1943b 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -53,7 +53,7 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( " // local: the shortest among all the mapcodes"); Ada.Text_Io.Put_Line ( - " ::= P0 | P1 | P2 // Default P0"); + " ::= P0 | P1 | P2 // Default P0 or from input"); end Usage; function Integer_Image (I : Integer) return String is @@ -131,8 +131,9 @@ procedure T_Mapcode is Precision : Precisions; Opt_Set, Pre_Set : Boolean; - -- If Arg2 is a mapcde then parse Arg1=Ctx and Arg2=Map + -- If Arg2 is a mapcode then parse Arg1=Ctx and Arg2=Map -- otherwise parse Arg1=[Ctx:]Map + -- Locate "-" in Map to set Precision procedure Parse_Mapcode is Index : Natural; begin @@ -157,6 +158,14 @@ procedure T_Mapcode is Arg1.Delete (1, Index); end if; end if; + -- Get precision from input + Index := Str_Tools.Locate (Arg1.Image, "-"); + if Index > 0 then + if Index = Arg1.Length or else Index < Arg1.Length - 2 then + raise Decode_Error; + end if; + Precision := Arg1.Length - Index; + end if; Ada.Text_Io.Put_Line (Arg1.Image & " " & Arg2.Image); end Parse_Mapcode; @@ -183,7 +192,7 @@ begin end if; Put_Territory (Arg1.Image, Arg2.Image); elsif Command.Image = "-s" then - -- Search contry names + -- Search country names I := I + 1; Territory.Set (Str_Tools.Upper_Str (Ada.Command_Line.Argument (I))); for J in Ctrynams.Isofullname'Range loop @@ -195,6 +204,10 @@ begin end loop; elsif Command.Image = "-c" or else Command.Image = "-a" then + -- Default precision for coding + -- default precision for alternate mode will be deduced from input + -- In any way it can be superseeded by argument + Precision := 0; if Command.Image = "-c" then -- Encode a lat lon -- Get coord lat and lon @@ -219,7 +232,6 @@ begin -- not sorted Shortest := True; Sorted := False; - Precision := 0; for J in I + 1 .. Ada.Command_Line.Argument_Count loop Arg1 := As_U.Tus (Ada.Command_Line.Argument (J)); exit when Is_Command (Arg1.Image); diff --git a/test/EncodeOk b/test/EncodeOk index 95aff7e..751c315 100644 --- a/test/EncodeOk +++ b/test/EncodeOk @@ -54,7 +54,7 @@ 60.87671494425309 116.61176872907407 -15.893144 179.989955 -15.893143466159259 179.98779899186974 --15.893144 180.0000001 --15.893144 180.00000001 +-15.893144 180.0 +-15.893144 180.0000000 29.802516000 -39.364007500 diff --git a/test/fulltest b/test/fulltest index c99118d..b86078f 100755 --- a/test/fulltest +++ b/test/fulltest @@ -85,7 +85,7 @@ if [ \( $SCENARIO_ONLY -eq 1 \) -a \( $TEST -eq 1 \) ] ; then error "Options \"scenario_only\" and \"test\" are mutually exclusive" fi if [ \( $PRECISION != "0" \) -a \( $PRECISION != "1" \) -a \( $PRECISION != "2" \) ] ; then - error "Invalid precision $PRECISION." + error "Invalid precision $PRECISION" fi echo Precision $PRECISION PRECISION=P${PRECISION} @@ -281,7 +281,7 @@ if [ $TEST -eq 0 ] ; then echo OK. fi -# Encode +# EncodeOk echo Encode # For each line let L=1 @@ -389,7 +389,7 @@ decode "" "ZZ0X0.B16G-4K" "90" "179" 1 1 decode "" "Z0000.010G" "90" "-179.999999" 1 1 decode "" "ZZ0Z0.Z1YG" "90.000000000000" "179.999999999999" 1 1 -# Play scenario +# Play Decode scenario # For each line # Read ctx cod lat lon loc glo let L=0 @@ -398,6 +398,7 @@ while read -r ctx cod lat lon loc glo || [[ -n "$ctx" ]]; do if [ \( -z "$ctx" \) -o \( "$ctx" = "#" \) ] ; then continue fi + # Process each line, or 1% in test mode if [ \( $TEST -eq 0 \) -o \( $R -eq 0 \) ] ; then decode $ctx $cod $lat $lon $loc $glo fi @@ -410,3 +411,4 @@ while read -r ctx cod lat lon loc glo || [[ -n "$ctx" ]]; do done < $TDIR/DecodeOk echo echo OK. + From b855fd67ededc5da98dcecfe19a6d544ddd38014 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Wed, 21 Oct 2020 17:30:14 +0200 Subject: [PATCH 17/42] Add a function that lists subdivisions with same suffix --- README.md | 31 +++++++++++++-- src/mapcodes.adb | 97 ++++++++++++++++++++++++++++++++++++++--------- src/mapcodes.ads | 22 ++++++++--- src/t_mapcode.adb | 38 +++++++++++++++---- test/Scenario | 2 + 5 files changed, 154 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index d7d255c..558a7fd 100644 --- a/README.md +++ b/README.md @@ -150,6 +150,13 @@ attribute | description `Territory_Number` | `Territory_Range` return value | boolean, True if and only if the `Territory_Number` has some subdivisions +`Get_Subdivisions_With` returns the array of territories with the same suffix as provided. + +attribute | description +--- | --- +`Territory_Number` | `Territory_Range` +return value | array of `Territory_Range` that have the same subdivision name as the one of `Territory_Number` + ## Converting a Coordinate into Mapcodes In the mapcode system, territories are limited by rectangles, not by actual or @@ -292,6 +299,7 @@ Usage: -h // This help -t // Territory info -s // Search territory + -S // Subdirectories -d // Decode -c [ ] // Encode -a [ ] // Alternative mapcodes @@ -310,20 +318,35 @@ and Shortest => True and to display the first entry of the returnd array. Examples: -Put information on a territory (providing ISO code or number). The information consists in the -territory number, followed by three possible mapcodes (Local, International and Shortest), followed by the territory full name. +Put information on a territory (providing ISO code or number). The information consists in the territory number, followed by three possible mapcodes (Local, International and Shortest), followed by the territory full name. t_mapcode -t KIR -> KIR => 58: KIR/KIR/KIR/Kiribati t_mapcode -t CA -> CA => 391: CA/US-CA/CA/California - -> Parent: USA + -> Parent: USA t_mapcode -t 410 -> USA => 410: USA/USA/USA/USA - -> Has subdivisions + -> Has subdivisions + +Search a territory by name. + + t_mapcode -s alabama + -> 364 => 364: AL/US-AL/US-AL/Alabama + -> Parent: USA + +List all subdivisions named "xx-AL". + t_mapcode -S AL + -> US-AL => 364: AL/US-AL/US-AL/Alabama + -> Parent: USA + -> BR-AL => 318: AL/BR-AL/BR-AL/Alagoas + -> Parent: BRA + -> RU-AL => 482: AL/RU-AL/RU-AL/Altai Republic + -> Parent: RUS + Encode a coordinate with a context and a precision, put information of the shortest mapcode. Information is the mapcode, the territory context of the mapcode, the full mapcode (territory and mapcode separated by a space and enclosed by quotes, except for international mapcodes) and territory number. diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 5758755..657f108 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -611,24 +611,38 @@ package body Mapcodes is Ccode_Rus : constant := 496; Ccode_Earth : constant := 532; - Parents3 : constant String := "USA,IND,CAN,AUS,MEX,BRA,RUS,CHN,"; - Parents2 : constant String := "US,IN,CA,AU,MX,BR,RU,CN,"; + -- Parent territories + Parent_Length : constant := 8; + subtype String3 is String (1 .. 3); + Parents3 : constant array (1 .. Parent_Length) of String3 + := ("USA", "IND", "CAN", "AUS", "MEX", "BRA", "RUS", "CHN"); + subtype String2 is String (1 .. 2); + Parents2 : constant array (1 .. Parent_Length) of String2 + := ("US", "IN", "CA", "AU", "MX", "BR", "RU", "CN"); -- Returns 2-letter parent country abbreviation (disam in range 1..8) function Parent_Name2 (Disam : Positive) return String is - (Parents2 (Disam * 3 - 2 .. Disam * 3 - 1)); + (Parents2 (Disam)); -- Given a parent country abbreviation, return disam (in range 1-8) or -- Error function Parent_Letter (Territory_Alpha_Code : String) return Integer is - Srch : constant String := Str_Tools.Upper_Str (Territory_Alpha_Code & ","); - Len : constant Natural := Srch'Length; - P : Natural; + Srch : constant String := Str_Tools.Upper_Str (Territory_Alpha_Code); begin - P := Str_Tools.Locate ( - (if Len = 3 then Parents2 elsif Len = 4 then Parents3 else Undefined), - Srch); - return (if P /= 0 then P / Len + 1 else Error); + if Srch'Length = 2 then + for I in Parents2'Range loop + if Srch = Parents2(I) then + return I; + end if; + end loop; + elsif Srch'Length = 3 then + for I in Parents3'Range loop + if Srch = Parents3(I) then + return I; + end if; + end loop; + end if; + return Error; end Parent_Letter; function Image (I : Integer) return String is @@ -680,7 +694,8 @@ package body Mapcodes is -- Given ISO code, return territoryNumber or Error function Iso2Ccode (Territory_Alpha_Code : String; - Context : in String) return Integer is + Context : in String; + Any_Context : in Boolean) return Integer is function Is_Digits (Str : String) return Boolean is begin for I in Str'Range loop @@ -718,6 +733,7 @@ package body Mapcodes is -- Name Sep := Str_Tools.Locate (Alpha_Code.Image, "-"); if Sep /= 0 then + -- Territory and subdivision declare Prefix : constant String := Alpha_Code.Slice (1, Sep - 1); @@ -754,7 +770,6 @@ package body Mapcodes is end if; -- No prefix. - if P /= Error then -- First rewrite alias in context if Alpha_Code.Length = 2 then @@ -785,8 +800,12 @@ package body Mapcodes is end if; end if; + if not Any_Context then + return Error; + end if; + if Alpha_Code.Length >= 2 then - -- Find in ANY context + -- Find first occurence in ANY context Hyphenated := Tus ("-") & Alpha_Code; for I in Iso3166Alpha'Range loop Index := Str_Tools.Locate (Iso3166Alpha(I).Image, Hyphenated.Image); @@ -808,7 +827,7 @@ package body Mapcodes is else Alpha_Code := Isoa; end if; - return Iso2Ccode (Alpha_Code.Image, Context); + return Iso2Ccode (Alpha_Code.Image, Context, True); end if; return Error; @@ -823,7 +842,7 @@ package body Mapcodes is return Territory_Range is Num : Integer; begin - Num := Iso2Ccode (Territory, Context); + Num := Iso2Ccode (Territory, Context, True); if Num = Error then raise Unknown_Territory; end if; @@ -847,7 +866,7 @@ package body Mapcodes is -- Return the AlphaCode (usually an ISO 3166 code) of a territory -- Format: Local (often ambiguous), International (full and unambiguous, - -- DEFAULT), or Shortest ( + -- DEFAULT), or Shortest function Get_Territory_Alpha_Code ( Territory_Number : Territory_Range; Format : Territory_Formats := International) return String is @@ -912,6 +931,7 @@ package body Mapcodes is return Code; end if; end Get_Parent_Of; + -- Return True if Territory is a state function Is_Subdivision (Territory_Number : Territory_Range) return Boolean is @@ -920,8 +940,49 @@ package body Mapcodes is -- Return True if Territory is a country that has states function Has_Subdivision (Territory_Number : Territory_Range) return Boolean is - (Str_Tools.Locate (Parents3, Get_Territory_Alpha_Code (Territory_Number)) - /= 0); + Territory : constant String := Get_Territory_Alpha_Code (Territory_Number); + begin + for Parent of Parents3 loop + if Territory = Parent then + return True; + end if; + end loop; + return False; + end Has_Subdivision; + + -- Given a subdivision, return the array of subdivisions with same name + -- with various parents, or raise Not_A_Subdivision + function Get_Subdivisions_With (Territory_Number : Territory_Range) + return Territory_Array is + Territory : constant String := Get_Territory_Alpha_Code (Territory_Number); + Index : Natural; + Ccodes : array (1 .. Parent_Length) of Integer; + Nb_Ok : Natural := 0; + begin + -- Get subdivision part (after '-') + Index := Str_Tools.Locate (Territory, "-"); + if Index = 0 then + raise Not_A_Subdivision; + end if; + -- Count and store valid combinations of a Parent and this subdivision + for I in Parents2'Range loop + Ccodes(I) := Iso2Ccode (Territory (Index + 1 .. Territory'Last), + Parents2(I), False); + if Ccodes(I) /= Error then + Nb_Ok := Nb_Ok + 1; + end if; + end loop; + -- Return array of valid combinations + return Result : Territory_Array (1 .. Nb_Ok) do + Nb_Ok := 0; + for Ccode of Ccodes loop + if Ccode /= Error then + Nb_Ok := Nb_Ok + 1; + Result(Nb_Ok) := Ccode; + end if; + end loop; + end return; + end Get_Subdivisions_With; -- Low-level routines for data access type Min_Max_Rec is record diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 9ea61a8..929d56b 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -33,17 +33,19 @@ package Mapcodes is -- Valid territory number subtype Territory_Range is Natural range 0 .. Ctrynams.Isofullname'Last - 1; - -- Given an alphacode (such as US-AL), return the territory number - -- or raise Unknown_Territory + -- Given an ISO 3166 alphacode (such as "US-AL" or "FRA"), return the + -- corresponding territory number or raise Unknown_Territory -- A Context territory helps to interpret ambiguous (abbreviated) - -- alphacodes, such as "AL" + -- alphacodes, such as "BR" or "US" for the subdivision "AL" + -- If Territory is ambiguous and no Context is provided, then the first + -- (in the alphanumeric order of territories) valid territory is used -- Raise, if Territory or Context is not known: Unknown_Territory : exception; function Get_Territory_Number (Territory : String; Context : String := "") return Territory_Range; - -- Return the alphacode (usually an ISO 3166 code) of a territory + -- Return the alphacode (usually an ISO 3166 code) of a territory number -- Format: Local (often ambiguous), International (full and unambiguous, -- DEFAULT), or Shortest type Territory_Formats is (Local, International, Shortest); @@ -51,11 +53,11 @@ package Mapcodes is Territory_Number : Territory_Range; Format : Territory_Formats := International) return String; - -- Return the full name of a territory + -- Return the full readable name of a territory (e.g. "France") function Get_Territory_Fullname (Territory_Number : Territory_Range) return String; - -- Return the parent country of a subdivision + -- Return the parent country of a subdivision (e.g. "US" for "US-AL" -- Raise, if Territory is not a subdivision: Not_A_Subdivision : exception; function Get_Parent_Of (Territory_Number : Territory_Range) @@ -67,6 +69,14 @@ package Mapcodes is -- Return True if Territory is a country that has states function Has_Subdivision (Territory_Number : Territory_Range) return Boolean; + -- Given a subdivision, return the array of subdivisions with same name + -- with various parents, or raise Not_A_Subdivision + -- Ex: given 318 (BR-AL) or 482 (RU-AL) returns the array + -- (318 (BR-AL), 482 (RU-AL), 364 (US-AL)) + type Territory_Array is array (Positive range <>) of Territory_Range; + function Get_Subdivisions_With (Territory_Number : Territory_Range) + return Territory_Array; + -------------------------- -- Encoding to mapcodes -- -------------------------- diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 8e1943b..b64d9c7 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -34,6 +34,8 @@ procedure T_Mapcode is " -t // Territory info"); Ada.Text_Io.Put_Line ( " -s // Search territory"); + Ada.Text_Io.Put_Line ( + " -S // Subdirectories"); Ada.Text_Io.Put_Line ( " -d // Decode"); Ada.Text_Io.Put_Line ( @@ -77,7 +79,8 @@ procedure T_Mapcode is return Result; end Lower_Str; - procedure Put_Territory (Territory, Context : in String) is + procedure Put_Territory (Territory, Context : in String; + Show_Subdivision : in Boolean) is Index : Mapcodes.Territory_Range; begin Ada.Text_Io.Put (Territory @@ -90,17 +93,17 @@ procedure T_Mapcode is & "/" & Get_Territory_Alpha_Code (Index, Mapcodes.Shortest) & "/" & Get_Territory_Fullname (Index) ); if Is_Subdivision (Index) then - Ada.Text_Io.Put_Line ("Parent: " + Ada.Text_Io.Put_Line (" Parent: " & Get_Territory_Alpha_Code (Get_Parent_Of (Index))); end if; - if Has_Subdivision (Index) then - Ada.Text_Io.Put_Line ( "Has subdivisions"); + if Show_Subdivision and then Has_Subdivision (Index) then + Ada.Text_Io.Put_Line ( " Has subdivisions"); end if; end Put_Territory; function Is_Command (Arg : in String) return Boolean is - (Arg = "-h" or else Arg = "-t" or else Arg = "-c" or else Arg = "-d" - or else Arg = "-a"); + (Arg = "-h" or else Arg = "-t" or else Arg = "-s" or else Arg = "-S" + or else Arg = "-d" or else Arg = "-c" or else Arg = "-a"); function Image (F : Mapcodes.Real) return String is begin @@ -119,6 +122,9 @@ procedure T_Mapcode is function Get (Str : String) return Mapcodes.Real is begin return Mapcodes.Real'Value (Str); + exception + when Constraint_Error => + raise Argument_Error; end Get; I : Positive; @@ -190,7 +196,7 @@ begin I := I + 1; end if; end if; - Put_Territory (Arg1.Image, Arg2.Image); + Put_Territory (Arg1.Image, Arg2.Image, True); elsif Command.Image = "-s" then -- Search country names I := I + 1; @@ -199,9 +205,22 @@ begin if Str_Tools.Locate (Str_Tools.Upper_Str (Ctrynams.Isofullname(J).Image), Territory.Image) /= 0 then - Put_Territory (Image (J-1), ""); + Put_Territory (Image (J-1), "", True); end if; end loop; + elsif Command.Image = "-S" then + I := I + 1; + -- Subdirectories with same suffix + declare + Brothers : constant Mapcodes.Territory_Array + := Mapcodes.Get_Subdivisions_With ( + Get_Territory_Number (Ada.Command_Line.Argument (I))); + begin + for Brother of Brothers loop + Put_Territory (Mapcodes.Get_Territory_Alpha_Code (Brother), "", + False); + end loop; + end; elsif Command.Image = "-c" or else Command.Image = "-a" then -- Default precision for coding @@ -318,6 +337,9 @@ exception Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Raised Unknown_Territory"); Ada.Command_Line.Set_Exit_Status (1); + when Mapcodes.Not_A_Subdivision => + Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, + "Raised Not_A_Subdivision"); when Mapcodes.Decode_Error => Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Raised Decode_Error"); Ada.Command_Line.Set_Exit_Status (1); diff --git a/test/Scenario b/test/Scenario index c9c3752..e4add64 100644 --- a/test/Scenario +++ b/test/Scenario @@ -41,6 +41,8 @@ -t IN-MN => 279: MN/IN-MN/IN-MN/Manipur Parent: IND -t US-IN => 356: IN/US-IN/US-IN/Indiana Parent: USA -t NLD => 112: NLD/NLD/NLD/Netherlands +-s altai => 483: ALT/RU-ALT/ALT/Altai Krai Parent: RUS +-S AL => 482: AL/RU-AL/RU-AL/Altai Republic Parent: RUS # NLD, with high precision -d NLD 49.4V => 52.376514000 4.908543375 From 126f05d1a1a8a30f96c7b52ee83665fb73da86c5 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Wed, 21 Oct 2020 17:52:10 +0200 Subject: [PATCH 18/42] Fix help and version --- README.md | 4 ++-- src/mapcodes.ads | 4 ++-- src/t_mapcode.adb | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 558a7fd..90b28d5 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ attribute | description `Territory_Number` | `Territory_Range` return value | boolean, True if and only if the `Territory_Number` has some subdivisions -`Get_Subdivisions_With` returns the array of territories with the same suffix as provided. +`Get_Subdivisions_With` returns the array of territories with the same subdivision name (suffix) as the one provided. attribute | description --- | --- @@ -299,7 +299,7 @@ Usage: -h // This help -t // Territory info -s // Search territory - -S // Subdirectories + -S // Same subdivisions -d // Decode -c [ ] // Encode -a [ ] // Alternative mapcodes diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 929d56b..5cba901 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -21,7 +21,7 @@ package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.0.8/Data" + Mapcode_Ada_Version : constant String := "1.0.9/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) @@ -71,7 +71,7 @@ package Mapcodes is -- Given a subdivision, return the array of subdivisions with same name -- with various parents, or raise Not_A_Subdivision - -- Ex: given 318 (BR-AL) or 482 (RU-AL) returns the array + -- Ex: given 318 (BR-AL) or 482 (RU-AL) return the array -- (318 (BR-AL), 482 (RU-AL), 364 (US-AL)) type Territory_Array is array (Positive range <>) of Territory_Range; function Get_Subdivisions_With (Territory_Number : Territory_Range) diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index b64d9c7..316257f 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -35,7 +35,7 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( " -s // Search territory"); Ada.Text_Io.Put_Line ( - " -S // Subdirectories"); + " -S // Same subdivisions"); Ada.Text_Io.Put_Line ( " -d // Decode"); Ada.Text_Io.Put_Line ( From 0a20ecfef30c09c1bcb8b14f78dfd487de1a4aaf Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 23 Oct 2020 10:48:13 +0200 Subject: [PATCH 19/42] Resolve subdivision without territory only if unambiguous Reject subdivision with wrong territory Get_Subdivisions_With takes a subdivision simple code --- README.md | 4 +- src/mapcodes.adb | 170 +++++++++++++++++++++++------------------ src/mapcodes.ads | 12 ++- src/t_mapcode.adb | 32 ++++---- test/Scenario | 2 +- test/TerritoryFailures | 1 + 6 files changed, 119 insertions(+), 102 deletions(-) diff --git a/README.md b/README.md index 90b28d5..fbccda9 100644 --- a/README.md +++ b/README.md @@ -154,8 +154,8 @@ return value | boolean, True if and only if the `Territory_Number` has some subd attribute | description --- | --- -`Territory_Number` | `Territory_Range` -return value | array of `Territory_Range` that have the same subdivision name as the one of `Territory_Number` +`Subdivision` | String +return value | array of `Territory_Range` that have the same subdivision name as `Subdivision` ## Converting a Coordinate into Mapcodes diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 657f108..7a433f1 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -694,8 +694,7 @@ package body Mapcodes is -- Given ISO code, return territoryNumber or Error function Iso2Ccode (Territory_Alpha_Code : String; - Context : in String; - Any_Context : in Boolean) return Integer is + Context : in String) return Integer is function Is_Digits (Str : String) return Boolean is begin for I in Str'Range loop @@ -707,7 +706,7 @@ package body Mapcodes is end Is_Digits; N, Sep : Natural; P : Integer; - Index : Integer; + Result, Index : Integer; Isoa : As_U.Asu_Us; Alpha_Code : As_U.Asu_Us; Hyphenated : As_U.Asu_Us; @@ -720,101 +719,127 @@ package body Mapcodes is if Context /= "" and then Context /= "AAA" and then P = Error then return Error; end if; - - Alpha_Code := Tus (Str_Tools.Upper_Str (Territory_Alpha_Code)); - -- Direct code - if Is_Digits (Alpha_Code.Image) then - N := Natural'Value (Alpha_Code.Image); - if N <= Ccode_Earth then - return N; - end if; + if COntext = "AAA" then + P := Error; end if; - -- Name + Alpha_Code := Tus (Str_Tools.Upper_Str (Territory_Alpha_Code)); Sep := Str_Tools.Locate (Alpha_Code.Image, "-"); - if Sep /= 0 then - -- Territory and subdivision - declare - Prefix : constant String - := Alpha_Code.Slice (1, Sep - 1); - Proper_Map_Code : As_U.Asu_Us - := Alpha_Code.Uslice (Sep + 1, Alpha_Code.Length); - begin - P := Parent_Letter (Prefix); - if P = Error or else Proper_Map_Code.Length < 2 then - return Error; - end if; - Index := Find_Iso (Parent_Name2 (P) & "-" & Proper_Map_Code.Image); - if Index >= 0 then - return Index; + + if P = Error then + -- No context provided + + -- Direct code + if Is_Digits (Alpha_Code.Image) then + N := Natural'Value (Alpha_Code.Image); + if N <= Ccode_Earth then + return N; end if; - -- Recognise alias - if Proper_Map_Code.Length = 3 then - Isoa := Tus (Alias2Iso(Proper_Map_Code.Image)); - else - Isoa := Tus (Alias2Iso (Image (P) & Proper_Map_Code.Image)); + end if; + + -- Name + if Sep = 0 then + -- Check if a normal territory + if Alpha_Code.Length = 3 then + Index := Find_Iso (Alpha_Code.Image); + if Index >= 0 then + return Index; + end if; end if; - if not Isoa.Is_Null then - if Isoa.Slice (1, 1) = Image (P) then - Proper_Map_Code := Isoa.Uslice (2, Isoa.Length); + else + -- Territory and subdivision + declare + Prefix : constant String + := Alpha_Code.Slice (1, Sep - 1); + Proper_Map_Code : As_U.Asu_Us + := Alpha_Code.Uslice (Sep + 1, Alpha_Code.Length); + begin + P := Parent_Letter (Prefix); + if P = Error or else Proper_Map_Code.Length < 2 then + return Error; + end if; + Index := Find_Iso (Parent_Name2 (P) & "-" & Proper_Map_Code.Image); + if Index >= 0 then + return Index; + end if; + -- Recognise alias + if Proper_Map_Code.Length = 3 then + Isoa := Tus (Alias2Iso(Proper_Map_Code.Image)); else - Proper_Map_Code := Isoa; - Index := Find_Iso (Proper_Map_Code.Image); - if Index >= 0 then - return Index; + Isoa := Tus (Alias2Iso (Image (P) & Proper_Map_Code.Image)); + end if; + if not Isoa.Is_Null then + if Isoa.Slice (1, 1) = Image (P) then + Proper_Map_Code := Isoa.Uslice (2, Isoa.Length); + else + Proper_Map_Code := Isoa; + Index := Find_Iso (Proper_Map_Code.Image); + if Index >= 0 then + return Index; + end if; end if; end if; - end if; - return Find_Iso (Parent_Name2 (P) & "-" & Proper_Map_Code.Image); - end; - end if; + return Find_Iso (Parent_Name2 (P) & "-" & Proper_Map_Code.Image); + end; + end if; + + else + + -- A context has been provided + if Sep /= 0 then + -- Cannot provide a context together with territory-subdivision + return Error; + end if; - -- No prefix. - if P /= Error then -- First rewrite alias in context if Alpha_Code.Length = 2 then Isoa := Tus (Alias2Iso (Image (P) & Alpha_Code.Image)); if not Isoa.Is_Null then if Isoa.Slice (1, 1) = Image (P) then + -- Aliased as another subdivision (same territory) Alpha_Code := Isoa.Uslice(2, Isoa.Length); + Index := Find_Iso (Parent_Name2 (P) & "-" & Alpha_Code.Image); else + -- Aliased as a territory Alpha_Code := Isoa; + Index := Find_Iso (Alpha_Code.Image); end if; + else + -- No alias + Index := Find_Iso (Parent_Name2 (P) & "-" & Alpha_Code.Image); end if; + else + Index := Find_Iso (Parent_Name2 (P) & "-" & Alpha_Code.Image); end if; - end if; - - -- Check if a normal territory - if Alpha_Code.Length = 3 then - Index := Find_Iso (Alpha_Code.Image); - if Index >= 0 then - return Index; - end if; - end if; - -- Check in context - if P /= Error then - Index := Find_Iso (Parent_Name2 (P) & "-" & Alpha_Code.Image); + -- Check subdivision in provided context if Index >= 0 then return Index; + else + return Error; end if; end if; - if not Any_Context then - return Error; - end if; - if Alpha_Code.Length >= 2 then - -- Find first occurence in ANY context + -- Find unique occurence in ANY context Hyphenated := Tus ("-") & Alpha_Code; + Result := Error; for I in Iso3166Alpha'Range loop Index := Str_Tools.Locate (Iso3166Alpha(I).Image, Hyphenated.Image); if Index > 0 and then Index = Iso3166Alpha(I).Length - Hyphenated.Length + 1 then -- iso3166alpha ends by Hyphenated - return I - 1; + if Result /= Error then + -- Not unique + return Error; + else + Result := I - 1; + end if; end if; end loop; + if Result /= Error then + return Result; + end if; end if; -- All else failed, try non-disambiguated alphacode @@ -827,7 +852,7 @@ package body Mapcodes is else Alpha_Code := Isoa; end if; - return Iso2Ccode (Alpha_Code.Image, Context, True); + return Iso2Ccode (Alpha_Code.Image, Context); end if; return Error; @@ -842,7 +867,7 @@ package body Mapcodes is return Territory_Range is Num : Integer; begin - Num := Iso2Ccode (Territory, Context, True); + Num := Iso2Ccode (Territory, Context); if Num = Error then raise Unknown_Territory; end if; @@ -951,23 +976,16 @@ package body Mapcodes is end Has_Subdivision; -- Given a subdivision, return the array of subdivisions with same name - -- with various parents, or raise Not_A_Subdivision - function Get_Subdivisions_With (Territory_Number : Territory_Range) + -- with various parents + function Get_Subdivisions_With (Subdivision : String) return Territory_Array is - Territory : constant String := Get_Territory_Alpha_Code (Territory_Number); - Index : Natural; + Upper_Subd : constant String := Str_Tools.Upper_Str (Subdivision); Ccodes : array (1 .. Parent_Length) of Integer; Nb_Ok : Natural := 0; begin - -- Get subdivision part (after '-') - Index := Str_Tools.Locate (Territory, "-"); - if Index = 0 then - raise Not_A_Subdivision; - end if; -- Count and store valid combinations of a Parent and this subdivision for I in Parents2'Range loop - Ccodes(I) := Iso2Ccode (Territory (Index + 1 .. Territory'Last), - Parents2(I), False); + Ccodes(I) := Iso2Ccode (Upper_Subd, Parents2(I)); if Ccodes(I) /= Error then Nb_Ok := Nb_Ok + 1; end if; diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 5cba901..f7e2f32 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -21,7 +21,7 @@ package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.0.9/Data" + Mapcode_Ada_Version : constant String := "1.0.10/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) @@ -69,13 +69,11 @@ package Mapcodes is -- Return True if Territory is a country that has states function Has_Subdivision (Territory_Number : Territory_Range) return Boolean; - -- Given a subdivision, return the array of subdivisions with same name - -- with various parents, or raise Not_A_Subdivision - -- Ex: given 318 (BR-AL) or 482 (RU-AL) return the array - -- (318 (BR-AL), 482 (RU-AL), 364 (US-AL)) + -- Given a subdivision name, return the array (possibly empty) of territory + -- subdivisions with same name, or raise Not_A_Subdivision + -- Ex: given "AL" return the array (318 (BR-AL), 482 (RU-AL), 364 (US-AL)) type Territory_Array is array (Positive range <>) of Territory_Range; - function Get_Subdivisions_With (Territory_Number : Territory_Range) - return Territory_Array; + function Get_Subdivisions_With (Subdivision : String) return Territory_Array; -------------------------- -- Encoding to mapcodes -- diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 316257f..7847eb3 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -31,11 +31,11 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( " -h // This help"); Ada.Text_Io.Put_Line ( - " -t // Territory info"); + " -t [ ] // Territory info"); Ada.Text_Io.Put_Line ( - " -s // Search territory"); + " -S // Same subdivisions"); Ada.Text_Io.Put_Line ( - " -S // Same subdivisions"); + " -s // Search territory"); Ada.Text_Io.Put_Line ( " -d // Decode"); Ada.Text_Io.Put_Line ( @@ -197,30 +197,30 @@ begin end if; end if; Put_Territory (Arg1.Image, Arg2.Image, True); - elsif Command.Image = "-s" then - -- Search country names - I := I + 1; - Territory.Set (Str_Tools.Upper_Str (Ada.Command_Line.Argument (I))); - for J in Ctrynams.Isofullname'Range loop - if Str_Tools.Locate (Str_Tools.Upper_Str - (Ctrynams.Isofullname(J).Image), - Territory.Image) /= 0 then - Put_Territory (Image (J-1), "", True); - end if; - end loop; elsif Command.Image = "-S" then - I := I + 1; -- Subdirectories with same suffix + I := I + 1; declare Brothers : constant Mapcodes.Territory_Array := Mapcodes.Get_Subdivisions_With ( - Get_Territory_Number (Ada.Command_Line.Argument (I))); + Ada.Command_Line.Argument (I)); begin for Brother of Brothers loop Put_Territory (Mapcodes.Get_Territory_Alpha_Code (Brother), "", False); end loop; end; + elsif Command.Image = "-s" then + -- Search country names + I := I + 1; + Territory.Set (Str_Tools.Upper_Str (Ada.Command_Line.Argument (I))); + for J in Ctrynams.Isofullname'Range loop + if Str_Tools.Locate (Str_Tools.Upper_Str + (Ctrynams.Isofullname(J).Image), + Territory.Image) /= 0 then + Put_Territory (Image (J-1), "", True); + end if; + end loop; elsif Command.Image = "-c" or else Command.Image = "-a" then -- Default precision for coding diff --git a/test/Scenario b/test/Scenario index e4add64..ce27817 100644 --- a/test/Scenario +++ b/test/Scenario @@ -31,7 +31,7 @@ -t US-CA => 391: CA/US-CA/CA/California Parent: USA -t USA-CA => 391: CA/US-CA/CA/California Parent: USA -t RUS-TAM => 430: TT/RU-TT/TT/Tambov Oblast Parent: RUS --t AL => 318: AL/BR-AL/BR-AL/Alagoas Parent: BRA +-t AL BR => 318: AL/BR-AL/BR-AL/Alagoas Parent: BRA -t AL US => 364: AL/US-AL/US-AL/Alabama Parent: USA -t RU-AL => 482: AL/RU-AL/RU-AL/Altai Republic Parent: RUS -t AL RU => 482: AL/RU-AL/RU-AL/Altai Republic Parent: RUS diff --git a/test/TerritoryFailures b/test/TerritoryFailures index 9b9b335..31320e7 100644 --- a/test/TerritoryFailures +++ b/test/TerritoryFailures @@ -30,3 +30,4 @@ RUS-TAM TEXT ru-tam AL RU-TAM AL US-CA AL +AL From 3187e997a339f7b9106b8edee786d7fc007d08c9 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 23 Oct 2020 11:01:14 +0200 Subject: [PATCH 20/42] Rewrite Iso2Ccode --- src/mapcodes.adb | 189 +++++++++++++++++++++++------------------------ src/mapcodes.ads | 2 +- 2 files changed, 95 insertions(+), 96 deletions(-) diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 7a433f1..ebf3c8c 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -654,6 +654,7 @@ package body Mapcodes is -- Returns alias of ISO abbreviation (if any), or empty function Alias2Iso (Territory_Alpha_Code : String) return String is + -- Look for "DigitCrit=" function Match (Crit, Within : String) return Natural is Occ : Positive := 1; I : Natural; @@ -693,136 +694,134 @@ package body Mapcodes is end Find_Iso; -- Given ISO code, return territoryNumber or Error - function Iso2Ccode (Territory_Alpha_Code : String; + function Iso2Ccode (Alpha_Code : String; Context : in String) return Integer is + + function Is_Digit (Char : Character) return Boolean is + (Char >= '0' and then Char <= '9'); function Is_Digits (Str : String) return Boolean is begin for I in Str'Range loop - if Str(I) < '0' or else Str(I) > '9' then + if not Is_Digit (Str(I)) then return False; end if; end loop; return Str /= ""; end Is_Digits; + N, Sep : Natural; - P : Integer; + P, Tmpp : Integer; Result, Index : Integer; Isoa : As_U.Asu_Us; - Alpha_Code : As_U.Asu_Us; + Code2Search, Context2Search : As_U.Asu_Us; Hyphenated : As_U.Asu_Us; use all type As_U.Asu_Us; begin - if Territory_Alpha_Code = Undefined then + if Alpha_Code = Undefined then return Error; end if; P := Parent_Letter (Context); - if Context /= "" and then Context /= "AAA" and then P = Error then + if P = Error and then Context /= "" and then Context /= "AAA" then return Error; end if; - if COntext = "AAA" then - P := Error; - end if; - Alpha_Code := Tus (Str_Tools.Upper_Str (Territory_Alpha_Code)); - Sep := Str_Tools.Locate (Alpha_Code.Image, "-"); + Sep := Str_Tools.Locate (Alpha_Code, "-"); + Code2Search := Tus (Str_Tools.Upper_Str (Alpha_Code)); - if P = Error then - -- No context provided + if P /= Error and then Sep /= 0 then + -- Cannot provide a context together with territory-subdivision + return Error; + end if; - -- Direct code - if Is_Digits (Alpha_Code.Image) then - N := Natural'Value (Alpha_Code.Image); + -- Optims: direct number or code + if P = Error and then Sep = 0 then + if Is_Digits (Code2Search.Image) then + -- Direct territory number + N := Natural'Value (Code2Search.Image); if N <= Ccode_Earth then return N; end if; end if; - - -- Name - if Sep = 0 then - -- Check if a normal territory - if Alpha_Code.Length = 3 then - Index := Find_Iso (Alpha_Code.Image); - if Index >= 0 then - return Index; - end if; + if Code2Search.Length = 3 then + -- Check if a simple territory + Index := Find_Iso (Code2Search.Image); + if Index /= Error then + return Index; end if; - else - -- Territory and subdivision - declare - Prefix : constant String - := Alpha_Code.Slice (1, Sep - 1); - Proper_Map_Code : As_U.Asu_Us - := Alpha_Code.Uslice (Sep + 1, Alpha_Code.Length); - begin - P := Parent_Letter (Prefix); - if P = Error or else Proper_Map_Code.Length < 2 then - return Error; - end if; - Index := Find_Iso (Parent_Name2 (P) & "-" & Proper_Map_Code.Image); - if Index >= 0 then - return Index; - end if; - -- Recognise alias - if Proper_Map_Code.Length = 3 then - Isoa := Tus (Alias2Iso(Proper_Map_Code.Image)); - else - Isoa := Tus (Alias2Iso (Image (P) & Proper_Map_Code.Image)); - end if; - if not Isoa.Is_Null then - if Isoa.Slice (1, 1) = Image (P) then - Proper_Map_Code := Isoa.Uslice (2, Isoa.Length); - else - Proper_Map_Code := Isoa; - Index := Find_Iso (Proper_Map_Code.Image); - if Index >= 0 then - return Index; - end if; - end if; - end if; - return Find_Iso (Parent_Name2 (P) & "-" & Proper_Map_Code.Image); - end; end if; + end if; - else - - -- A context has been provided - if Sep /= 0 then - -- Cannot provide a context together with territory-subdivision + -- Set Context and Code for search + if Context /= "" then + -- Context provided + Context2Search.Set (Context); + elsif Sep /= 0 then + -- Code contains a prefix + Context2Search := Code2Search.Uslice (1, Sep - 1); + Code2Search.Delete (1, Sep); + P := Parent_Letter (Context2Search.Image); + if P = Error and then Context2Search.Image /= "AAA" then return Error; end if; + end if; + -- Sanity check + if Code2Search.Length /= 2 and then Code2Search.Length /= 3 then + return Error; + end if; - -- First rewrite alias in context - if Alpha_Code.Length = 2 then - Isoa := Tus (Alias2Iso (Image (P) & Alpha_Code.Image)); - if not Isoa.Is_Null then - if Isoa.Slice (1, 1) = Image (P) then - -- Aliased as another subdivision (same territory) - Alpha_Code := Isoa.Uslice(2, Isoa.Length); - Index := Find_Iso (Parent_Name2 (P) & "-" & Alpha_Code.Image); - else - -- Aliased as a territory - Alpha_Code := Isoa; - Index := Find_Iso (Alpha_Code.Image); - end if; - else - -- No alias - Index := Find_Iso (Parent_Name2 (P) & "-" & Alpha_Code.Image); - end if; - else - Index := Find_Iso (Parent_Name2 (P) & "-" & Alpha_Code.Image); + -- Optim: prefix and code + if P /= Error then + Index := Find_Iso (Parent_Name2 (P) & "-" & Code2Search.Image); + if Index /= Error then + return Index; end if; + end if; - -- Check subdivision in provided context - if Index >= 0 then - return Index; + -- Resolve alias + if P /= Error then + -- Alias for a subdivision with context + Isoa := Tus (Alias2Iso (Image (P) & Code2Search.Image)); + end if; + if Isoa.Is_Null and then Code2Search.Length = 3 then + -- Alias for a territory or subdivision without context + Isoa := Tus (Alias2Iso (Code2Search.Image)); + end if; + if Isoa.Is_Null then + Index := Error; + else + if Is_Digit (Isoa.Element (1)) then + -- Alias is a subdivision + Code2Search := Isoa.Uslice (2, Isoa.Length); + Tmpp := Integer'Value (Isoa.Slice (1, 1)); + if P /= Error and then Tmpp /= P then + -- Cannot change territpry through aliasing + return Error; + end if; + P := Tmpp; + Index := Find_Iso (Parent_Name2 (P) & "-" & Code2Search.Image); else - return Error; + -- Alias is a subdivision or territory + Code2Search := Isoa; + -- Search for a territory + Index := Find_Iso (Code2Search.Image); + if Index = Error and then P /= Error then + -- Search for a subdivision + Index := Find_Iso (Parent_Name2 (P) & "-" & Code2Search.Image); + end if; end if; end if; - if Alpha_Code.Length >= 2 then + -- Return valid result + if Index /= Error then + return Index; + end if; + if P /= Error then + return Error; + end if; + + if Code2Search.Length >= 2 then -- Find unique occurence in ANY context - Hyphenated := Tus ("-") & Alpha_Code; + Hyphenated := Tus ("-") & Code2Search; Result := Error; for I in Iso3166Alpha'Range loop Index := Str_Tools.Locate (Iso3166Alpha(I).Image, Hyphenated.Image); @@ -843,16 +842,16 @@ package body Mapcodes is end if; -- All else failed, try non-disambiguated alphacode - Isoa := Tus (Alias2Iso (Alpha_Code.Image)); + Isoa := Tus (Alias2Iso (Code2Search.Image)); if not Isoa.Is_Null then - if Isoa.Element (1) <= '9' then + if Is_Digit (Isoa.Element (1)) then -- Starts with digit - Alpha_Code := Tus (Parent_Name2 (Natural'Value (Isoa.Slice (1, 1))) + Code2Search := Tus (Parent_Name2 (Natural'Value (Isoa.Slice (1, 1))) & "-" & Isoa.Slice (2, Isoa.Length)); else - Alpha_Code := Isoa; + Code2Search := Isoa; end if; - return Iso2Ccode (Alpha_Code.Image, Context); + return Iso2Ccode (Code2Search.Image, Context); end if; return Error; diff --git a/src/mapcodes.ads b/src/mapcodes.ads index f7e2f32..6fe57ae 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -21,7 +21,7 @@ package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.0.10/Data" + Mapcode_Ada_Version : constant String := "1.0.11/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) From cf65457efe2abd50f0d149fbcf457b6f075d5706 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 23 Oct 2020 11:53:49 +0200 Subject: [PATCH 21/42] Fix description of Get_Subdivisions_With --- README.md | 14 ++++++++++++-- src/mapcodes.ads | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fbccda9..43acbc5 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ Attribute | Description `Territory_Number` | `Territory_Range` return value | string, territory name -Examples: +Example: Get_Territory_Fullname (391) -> California @@ -150,13 +150,23 @@ attribute | description `Territory_Number` | `Territory_Range` return value | boolean, True if and only if the `Territory_Number` has some subdivisions -`Get_Subdivisions_With` returns the array of territories with the same subdivision name (suffix) as the one provided. +`Get_Subdivisions_With` returns the array (possibly empty) of territories with the same subdivision name (suffix) as the one provided. attribute | description --- | --- `Subdivision` | String return value | array of `Territory_Range` that have the same subdivision name as `Subdivision` +Example: + + Get_Subdivisions_With ("AL") + -> US-AL => 364: AL/US-AL/US-AL/Alabama + Parent: USA + BR-AL => 318: AL/BR-AL/BR-AL/Alagoas + Parent: BRA + RU-AL => 482: AL/RU-AL/RU-AL/Altai Republic + Parent: RUS + ## Converting a Coordinate into Mapcodes In the mapcode system, territories are limited by rectangles, not by actual or diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 6fe57ae..b7e0d9c 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -70,7 +70,7 @@ package Mapcodes is function Has_Subdivision (Territory_Number : Territory_Range) return Boolean; -- Given a subdivision name, return the array (possibly empty) of territory - -- subdivisions with same name, or raise Not_A_Subdivision + -- subdivisions with same name -- Ex: given "AL" return the array (318 (BR-AL), 482 (RU-AL), 364 (US-AL)) type Territory_Array is array (Positive range <>) of Territory_Range; function Get_Subdivisions_With (Subdivision : String) return Territory_Array; From 413ec851a576c1d422ab0cabff48a7b6ed0ccc2b Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 23 Oct 2020 14:30:05 +0200 Subject: [PATCH 22/42] Fix examples and update history --- README.md | 104 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 57 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 43acbc5..b1e33b4 100644 --- a/README.md +++ b/README.md @@ -224,9 +224,9 @@ for this territory. Encode ( (52.376514000, 4.908543375 40.786245000), "NLD", Shortest => False) -> NLD 49.4V 'NLD 49.4V' 112 - -> NLD G9.VWG 'NLD G9.VWG' 112 - -> NLD DL6.H9L 'NLD DL6.H9L' 112 - -> NLD P25Z.N3Z 'NLD P25Z.N3Z' 112 + NLD G9.VWG 'NLD G9.VWG' 112 + NLD DL6.H9L 'NLD DL6.H9L' 112 + NLD P25Z.N3Z 'NLD P25Z.N3Z' 112 With no limitation to a territory (and `Shortest` set), returns at least a worldwide mapcode (territory AAA, code 532), and possibly some mapcodes in @@ -234,31 +234,31 @@ territories. Encode ( (52.376514000, 4.908543375 40.786245000) ) -> NLD 49.4V 'NLD 49.4V' 112 - -> AAA VHXGB.1J9J 'VHXGB.1J9J' 532 + AAA VHXGB.1J9J 'VHXGB.1J9J' 532 With Sort set, return the territory with shortest mapcode first. Encode ( (39.730409000, -79.954163500), "", Shortest => False, Sort => False) -> US-WV W2W2.Q41V 'US-WV W2W2.Q41V' 353 - -> US-PA BYLP.73 'US-PA BYLP.73' 361 - -> US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 - -> US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 - -> USA W2W2.Q41V 'USA W2W2.Q41V' 410 - -> AAA S8LY1.RD84 'S8LY1.RD84' 532 + US-PA BYLP.73 'US-PA BYLP.73' 361 + US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 + US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 + USA W2W2.Q41V 'USA W2W2.Q41V' 410 + AAA S8LY1.RD84 'S8LY1.RD84' 532 Encode ( (39.730409000, -79.954163500), "", Shortest => False, Sort => True) -> US-PA BYLP.73 'US-PA BYLP.73' 361 - -> US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 - -> US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 - -> US-WV W2W2.Q41V 'US-WV W2W2.Q41V' 353 - -> USA W2W2.Q41V 'USA W2W2.Q41V' 410 - -> AAA S8LY1.RD84 'S8LY1.RD84' 532 + US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 + US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 + US-WV W2W2.Q41V 'US-WV W2W2.Q41V' 353 + USA W2W2.Q41V 'USA W2W2.Q41V' 410 + AAA S8LY1.RD84 'S8LY1.RD84' 532 With a`Precision` of 2, returns high precision mapcodes. Encode ( (52.376514000, 4.908543375 40.786245000), Precision => 2) -> NLD 49.4V-K3 'NLD 49.4V-K3' 112 - -> AAA VHXGB.1J9J-RD 'VHXGB.1J9J-RD' 532 + AAA VHXGB.1J9J-RD 'VHXGB.1J9J-RD' 532 ## Converting a Mapcode into a Coordinate @@ -335,27 +335,27 @@ Put information on a territory (providing ISO code or number). The information c t_mapcode -t CA -> CA => 391: CA/US-CA/CA/California - -> Parent: USA + Parent: USA t_mapcode -t 410 -> USA => 410: USA/USA/USA/USA - -> Has subdivisions + Has subdivisions Search a territory by name. t_mapcode -s alabama -> 364 => 364: AL/US-AL/US-AL/Alabama - -> Parent: USA + Parent: USA List all subdivisions named "xx-AL". t_mapcode -S AL -> US-AL => 364: AL/US-AL/US-AL/Alabama - -> Parent: USA - -> BR-AL => 318: AL/BR-AL/BR-AL/Alagoas - -> Parent: BRA - -> RU-AL => 482: AL/RU-AL/RU-AL/Altai Republic - -> Parent: RUS + Parent: USA + BR-AL => 318: AL/BR-AL/BR-AL/Alagoas + Parent: BRA + RU-AL => 482: AL/RU-AL/RU-AL/Altai Republic + Parent: RUS Encode a coordinate with a context and a precision, put information of the shortest mapcode. Information is the mapcode, the territory context of the mapcode, the full mapcode (territory @@ -363,87 +363,97 @@ and mapcode separated by a space and enclosed by quotes, except for internationa t_mapcode -c 52.376482500 4.908511796 NLD 2 -> 52.376482500 4.908511796 - -> => NLD 49.4V-V2 'NLD 49.4V-V2' 112 + => NLD 49.4V-V2 'NLD 49.4V-V2' 112 Put all shorters mapcodes of a coordinate (no context). t_mapcode -c 52.376482500 4.908511796 -> 52.376482500 4.908511796 - -> => NLD 49.4V 'NLD 49.4V' 112 - -> => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 + => NLD 49.4V 'NLD 49.4V' 112 + => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 Put all mapcodes of a coordinate with a context. t_mapcode -c 52.376482500 4.908511796 NLD false - -> 52.376482500 4.908511796 - -> => 49.4V NLD 'NLD 49.4V' 112 - -> => G9.VWG NLD 'NLD G9.VWG' 112 - -> => DL6.H9L NLD 'NLD DL6.H9L' 112 - -> => P25Z.N3Z NLD 'NLD P25Z.N3Z' 112 + -> 52.376482500 4.908511796 + => 49.4V NLD 'NLD 49.4V' 112 + => G9.VWG NLD 'NLD G9.VWG' 112 + => DL6.H9L NLD 'NLD DL6.H9L' 112 + => P25Z.N3Z NLD 'NLD P25Z.N3Z' 112 Put all mapcodes of a coordinate. t_mapcode -c 39.730409000 -79.954163500 all -> 39.730409000 -79.954163500 - -> => US-WV W2W2.Q41V 'US-WV W2W2.Q41V' 353 - -> => US-PA BYLP.73 'US-PA BYLP.73' 361 - -> => US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 - -> => US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 - -> => USA W2W2.Q41V 'USA W2W2.Q41V' 410 - -> => AAA S8LY1.RD84 'S8LY1.RD84' 532 + => US-WV W2W2.Q41V 'US-WV W2W2.Q41V' 353 + => US-PA BYLP.73 'US-PA BYLP.73' 361 + => US-PA HDWQ.NZN 'US-PA HDWQ.NZN' 361 + => US-PA W2W2.Q41V 'US-PA W2W2.Q41V' 361 + => USA W2W2.Q41V 'USA W2W2.Q41V' 410 + => AAA S8LY1.RD84 'S8LY1.RD84' 532 Put the local mapcode of a coordinate. t_mapcode -c 39.730409000 -79.954163500 local -> 39.730409000 -79.954163500 - -> => US-PA BYLP.73 'US-PA BYLP.73' 361 + => US-PA BYLP.73 'US-PA BYLP.73' 361 Decode a mapcode, no context. t_mapcode -d 49.4V -> 49.4V - -> raised MAPCODES.DECODE_ERROR + raised MAPCODES.DECODE_ERROR t_mapcode -d VHXGB.1J9J -> VHXGB.1J9J - -> => 52.376504000 4.908535500 + => 52.376504000 4.908535500 Decode a mapcode with context. t_mapcode -d NLD 49.4V -> NLD 49.4V - -> => 52.376514000 4.908543375 + => 52.376514000 4.908543375 Put alternative mapcodes for a mapcode (shortests). t_mapcode -a NLD 49.4V -> 49.4V NLD - -> => NLD 49.4V 'NLD 49.4V' 112 - -> => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 + => NLD 49.4V 'NLD 49.4V' 112 + => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 # Version History -### 1.0.7 +### 1.0.11 +* Rewrite Iso2Ccode + +### 1.0.10 +* Resolve subdivision without territory only if unambiguous +* Reject subdivision with wrong territory +* Get_Subdivisions_With takes a subdivision simple code + +### 1.0.9 +* Add function Get_Subdivisions_With that lists subdivisions with same suffix + +### 1.0.8 +* Remove parsing of partial context in the mapcode to decode +### 1.0.7 * Add option -a of t_mapcode to list alternative mapcodes and improve parsing of arguments * Add new points to the test * Add option of fulltest to play only the scenario * Size Territory_Range from Ctrynams.Isofullname length ### 1.0.6 - * Add an option to sort the returned list of mapcodes * Add to t_mapcode a "local/all" option and support for "\:\" ### 1.0.4 - * Fix detection of invalid character in mapcode extension * Improve comments * In t_mapcode arguments and inputs, move the optional context before the mapcode * Remove useless ctrynams_short.ads ### 1.0.0 - * Update years of copyright * Fix and improve accuracy * Add automatic tests of territory, encoding and decoding, including expected From 2a936e3ff6525f7b75d4679202540511da9ea7f1 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Tue, 27 Oct 2020 20:15:12 +0100 Subject: [PATCH 23/42] Support precision up to 8 --- README.md | 15 +++++++++------ src/mapcodes.ads | 4 ++-- src/t_mapcode.adb | 9 ++++++--- test/fulltest | 5 +++-- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index b1e33b4..ffc0958 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ subdivisions. `Get_Territory_Number` returns the territory number of a territory code. An optional context helps to interpret ambiguous (abbreviated) alphacodes of subdivisions, such as "AL". If several subdivisions match the specification (no -context provided) it returns the lowest number that matches. +context provided) it raises the exception `Unknown_Territory`. Attribute | Description --- | --- @@ -79,10 +79,10 @@ exceptions | `Unknown_Territory` if the territory code is not known Examples: -First territory matching an ambiguous code. +Search a territory with an ambiguous code. Get_Territory_Number ("AR") - -> 365 // US-AR/Arkansas + -> Unknown_Territory Non ambiguous code. @@ -189,7 +189,7 @@ attribute | description `Coord` | coordinate (latitude and longitude in degrees, reals) to encode as mapcodes `Territory` | optional string, (an ISO code such as “NLD”) territory for the scope of the mapcodes `Shortest` | boolean, default True, to return only the shortest possible mapcode for the territory or each possible territory -`Precision` | 0, 1 or 2, default 0, precision of the mapcode to generate +`Precision` | 0 to 8, default 0, precision of the mapcode to generate `Sort` | sort the territories so that the shortest mapcode appears first return value | array of mapcode informations (territory ISO code, mapcode, full mapcode, and territory number) @@ -319,7 +319,7 @@ Usage: // Default: one mapcode (the shortest) of each territory // all: all the mapcodes of all territories // local: the shortest among all the mapcodes - ::= P0 | P1 | P2 // Default P0 + ::= P0 to P8 // Default P0 Default selection leads to encode with Shortest => True, while `all` leads to @@ -361,7 +361,7 @@ Encode a coordinate with a context and a precision, put information of the short Information is the mapcode, the territory context of the mapcode, the full mapcode (territory and mapcode separated by a space and enclosed by quotes, except for international mapcodes) and territory number. - t_mapcode -c 52.376482500 4.908511796 NLD 2 + t_mapcode -c 52.376482500 4.908511796 NLD P2 -> 52.376482500 4.908511796 => NLD 49.4V-V2 'NLD 49.4V-V2' 112 @@ -423,6 +423,9 @@ Put alternative mapcodes for a mapcode (shortests). # Version History +### 1.0.12 +* Support encoding precision up to 8 + ### 1.0.11 * Rewrite Iso2Ccode diff --git a/src/mapcodes.ads b/src/mapcodes.ads index b7e0d9c..0f1c787 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -21,7 +21,7 @@ package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.0.11/Data" + Mapcode_Ada_Version : constant String := "1.0.12/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) @@ -119,7 +119,7 @@ package Mapcodes is -- (see package Ctrynams) -- As a consequence, if it appears the international mapcode is always the -- last - subtype Precisions is Natural range 0 .. 2; + subtype Precisions is Natural range 0 .. 8; Earth : constant String := "AAA"; function Encode (Coord : Coordinate; Territory : String := ""; diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 7847eb3..7884744 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -24,6 +24,8 @@ procedure T_Mapcode is Argument_Error : exception; + Max_Precision : constant Mapcodes.Precisions := Mapcodes.Precisions'Last; + procedure Usage is begin Ada.Text_Io.Put_Line ( @@ -55,7 +57,7 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( " // local: the shortest among all the mapcodes"); Ada.Text_Io.Put_Line ( - " ::= P0 | P1 | P2 // Default P0 or from input"); + " ::= P0 .. P8 // Default P0 or from input"); end Usage; function Integer_Image (I : Integer) return String is @@ -167,7 +169,7 @@ procedure T_Mapcode is -- Get precision from input Index := Str_Tools.Locate (Arg1.Image, "-"); if Index > 0 then - if Index = Arg1.Length or else Index < Arg1.Length - 2 then + if Index = Arg1.Length or else Index < Arg1.Length - Max_Precision then raise Decode_Error; end if; Precision := Arg1.Length - Index; @@ -278,7 +280,8 @@ begin elsif Arg1.Length = 2 and then Arg1.Element (1) = 'P' and then Arg1.Element (2) >= '0' - and then Arg1.Element (2) <= '2' then + and then Arg1.Element (2) <= Character'Val (Character'Pos ('0') + + Max_Precision) then if Pre_Set then raise Argument_Error; end if; diff --git a/test/fulltest b/test/fulltest index b86078f..24c196f 100755 --- a/test/fulltest +++ b/test/fulltest @@ -84,7 +84,8 @@ done if [ \( $SCENARIO_ONLY -eq 1 \) -a \( $TEST -eq 1 \) ] ; then error "Options \"scenario_only\" and \"test\" are mutually exclusive" fi -if [ \( $PRECISION != "0" \) -a \( $PRECISION != "1" \) -a \( $PRECISION != "2" \) ] ; then +let P=0+$PRECISION +if [ \( $P -lt 0 \) -a \( $P -gt 8 \) ] ; then error "Invalid precision $PRECISION" fi echo Precision $PRECISION @@ -295,7 +296,7 @@ while true ; do # Encode result=`t_mapcode -c $lat $lon $PRECISION` if [ $? -ne 0 ] ; then - error "t_mapcode -t $lat $lon $PRECISION has failed" + error "t_mapcode -c $lat $lon $PRECISION has failed" fi # Parse result: # lat lon => Short Code, then either 'Code Short' or 'Long', then num From 7cd205425e2384b02d1661418e09ffd0de1fe222 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Wed, 28 Oct 2020 18:25:38 +0100 Subject: [PATCH 24/42] Make Territory_Number a private type and rename it Align length of country names and codes Swap options S and s Improve resolution to 12 digits Test with any precision (0 to 8) Add the function Image of a territory --- README.md | 77 ++++++++++++++++++++++++++++------------------- src/ctrynams.ads | 3 +- src/mapcodes.adb | 75 +++++++++++++++++++++++---------------------- src/mapcodes.ads | 51 ++++++++++++++++--------------- src/t_mapcode.adb | 29 ++++++------------ test/Scenario | 8 +++-- test/fulltest | 8 ++++- 7 files changed, 136 insertions(+), 115 deletions(-) diff --git a/README.md b/README.md index ffc0958..0525eee 100644 --- a/README.md +++ b/README.md @@ -58,47 +58,54 @@ library. ## Operations related to territories A territory is identified by a code (an ISO 3166 code such as “NLD” or "US-DC"), -with some possible aliases (example "US" = "USA"), and a unique number, from 0 -for "VAT" (Vatican), to 532 for "AAA" (International), defined as -`Territory_Range`. +with some possible aliases (example "US" = "USA"), or by a unique territory identifier of (a private) type `Territories`. Large territories (MX, IN, AU, BR, US, CA, RU and CN) are decomposed into subdivisions. -`Get_Territory_Number` returns the territory number of a territory code. An +`Image` of a territory returns the string image of a territory, from "0" +for "VAT" (Vatican), to "532" for "AAA" (International). + +Attribute | Description +--- | --- +`Territory` | `Territories`, the identifier of the territory to put the image of +return value | string image of `Territory` + +`Get_Territory` returns the territory identifier of a territory code. An optional context helps to interpret ambiguous (abbreviated) alphacodes of -subdivisions, such as "AL". If several subdivisions match the specification (no -context provided) it raises the exception `Unknown_Territory`. +subdivisions, such as "AL". If the territory code is not known or if several +subdivisions match the specification (no context provided) it raises the exception `Unknown_Territory`. Attribute | Description --- | --- -`Territory` | string, mapcode to decode +`Territory_Code` | string, the ISO code such as “USA”, or identifier image such +as "232", to search for `Context` | optional string, (an ISO code such as “US”) territory for a subdivision -return value | `Territory_Range`, territory number -exceptions | `Unknown_Territory` if the territory code is not known +return value | `Territories`, territory identifier +exceptions | `Unknown_Territory` if the territory code is not known or ambiguous Examples: Search a territory with an ambiguous code. - Get_Territory_Number ("AR") + Get_Territory ("AR") -> Unknown_Territory Non ambiguous code. - Get_Territory_Number ("IN-AR") + Get_Territory ("IN-AR") -> 285 // IN-AR/Arunachal Pradesh Ambiguous code and context. - Get_Territory_Number ("IN", "AR") + Get_Territory ("IN", "AR") -> 285 // IN-AR/Arunachal Pradesh `Get_Territory_Alpha_Code` returns the territory ISO 3166 code of a territory. Attribute | Description --- | --- -`Territory_Number` | `Territory_Range` +`Territory` | `Territories` `Format` | `Local` (often ambiguous), `International` (full and unambiguous, default), or `Shortest` return value | string, territory ISO code @@ -120,7 +127,7 @@ Examples: Attribute | Description --- | --- -`Territory_Number` | `Territory_Range` +`Territory` | `Territories` return value | string, territory name Example: @@ -128,34 +135,34 @@ Example: Get_Territory_Fullname (391) -> California -`Get_Parent_Of` returns the parent territory number of a subdivision. +`Get_Parent_Of` returns the parent territory of a subdivision. Attribute | Description --- | --- -`Territory_Number` | `Territory_Range` -return value | `Territory_Range`, parent territory number -exceptions | `Not_A_Subdivision`, if the `Territory_Number` has no parent (i.e. is not a subdivision) +`Territory` | `Territories` +return value | `Territories`, parent territory identifier +exceptions | `Not_A_Subdivision`, if the `Territory` has no parent (i.e. is not a subdivision) `Is_Subdivision` returns True if the provided territory is a subdivision. attribute | description --- | --- -`Territory_Number` | `Territory_Range` -return value | boolean, True if and only if the `Territory_Number` is a subdivision +`Territory` | `Territories` +return value | boolean, True if and only if the `Territory` is a subdivision `Has_Subdivision` returns True if the provided territory has subdivisions. attribute | description --- | --- -`Territory_Number` | `Territory_Range` -return value | boolean, True if and only if the `Territory_Number` has some subdivisions +`Territory` | `Territories` +return value | boolean, True if and only if the `Territory` has some subdivisions `Get_Subdivisions_With` returns the array (possibly empty) of territories with the same subdivision name (suffix) as the one provided. attribute | description --- | --- `Subdivision` | String -return value | array of `Territory_Range` that have the same subdivision name as `Subdivision` +return value | array of `Territories` that have the same subdivision name as `Subdivision` Example: @@ -187,7 +194,7 @@ The operation returns an array (possibly with only one element) of mapcodes. attribute | description --- | --- `Coord` | coordinate (latitude and longitude in degrees, reals) to encode as mapcodes -`Territory` | optional string, (an ISO code such as “NLD”) territory for the scope of the mapcodes +`Territory` | optional string, (an ISO code such as “NLD” or territory image such as "112") territory for the scope of the mapcodes `Shortest` | boolean, default True, to return only the shortest possible mapcode for the territory or each possible territory `Precision` | 0 to 8, default 0, precision of the mapcode to generate `Sort` | sort the territories so that the shortest mapcode appears first @@ -202,7 +209,7 @@ If Sort is set, then the returned array contains first the shortest mapcode, then possibly the other mapcodes for the same territory, then possibly mapcodes for other territories, then possibly the international (Earth) mapcode, otherwise the territories appear in the crescent -order of Territory_Range (see package Ctrynams). +order of Territories (see package Ctrynams). As a consequence, if it appears, the international mapcode is always the last. Examples: @@ -286,12 +293,12 @@ Without any `Context`, only accept a worldwide mapcode. Raises Decode_Error // Ambiguous Decode ("VHXGB.1J9J") - -> (52.376504000, 4.908535500) + -> (52.376504000000, 4.908535500000) With a `Context` set, decode a short mapcode. Decode ("49.4V", "NLD") - -> (52.376514000, 4.908543375) + -> (52.376514000001, 4.908543375000) # Using the testing program @@ -308,8 +315,8 @@ Usage: t_mapcode -h // This help -t // Territory info - -s // Search territory - -S // Same subdivisions + -s // Same subdivisions + -S // Search territory -d // Decode -c [ ] // Encode -a [ ] // Alternative mapcodes @@ -406,13 +413,13 @@ Decode a mapcode, no context. t_mapcode -d VHXGB.1J9J -> VHXGB.1J9J - => 52.376504000 4.908535500 + => 52.376504000000 4.908535500000 Decode a mapcode with context. t_mapcode -d NLD 49.4V -> NLD 49.4V - => 52.376514000 4.908543375 + => 52.376514000001 4.908543375000 Put alternative mapcodes for a mapcode (shortests). @@ -423,6 +430,14 @@ Put alternative mapcodes for a mapcode (shortests). # Version History +### 1.1.2 +* Make Territory_Number a private type and rename it +* Add the function Image of a territory +* Test with any precision (0 to 8) +* Swap options S and s +* Improve resolution to 12 digits +* Align length of country names and codes + ### 1.0.12 * Support encoding precision up to 8 diff --git a/src/ctrynams.ads b/src/ctrynams.ads index f5ec48a..0cf8194 100644 --- a/src/ctrynams.ads +++ b/src/ctrynams.ads @@ -553,7 +553,6 @@ As_U.Tus ("China (People's Republic of _)"), As_U.Tus ("United States Minor Outlying Islands"), As_U.Tus ("Clipperton Island"), As_U.Tus ("Antarctica"), -As_U.Tus ("International (Worldwide) (Earth)"), -As_U.Tus ("?")); +As_U.Tus ("International (Worldwide) (Earth)")); end Ctrynams; diff --git a/src/mapcodes.adb b/src/mapcodes.adb index ebf3c8c..373739c 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -857,29 +857,32 @@ package body Mapcodes is return Error; end Iso2Ccode; + -- Image of a territory (index starting at 0 for VAT) + function Image (Territory : Territories) return String is + (Image (Integer (Territory))); + -- Given an alphacode (such As_US-AL), returns the territory number -- or Error. -- A context_Territory number helps to interpret ambiguous (abbreviated) -- AlphaCodes, such as "AL" - function Get_Territory_Number (Territory : String; - Context : in String := "") - return Territory_Range is + function Get_Territory (Territory_Code : String; + Context : in String := "") return Territories is Num : Integer; begin - Num := Iso2Ccode (Territory, Context); + Num := Iso2Ccode (Territory_Code, Context); if Num = Error then raise Unknown_Territory; end if; - return Num; - end Get_Territory_Number; + return Territories (Num); + end Get_Territory; - -- Return full name of territory or Undefined - function Get_Territory_Fullname (Territory_Number: in Territory_Range) + -- Return full name of territory + function Get_Territory_Fullname (Territory: in Territories) return String is Name : As_U.Asu_Us; Index : Natural; begin - Name := Ctrynams.Isofullname(Territory_Number + 1); + Name := Ctrynams.Isofullname(Positive (Territory + 1)); Index := Str_Tools.Locate (Name.Image, " ("); if Index > 0 then return Name.Slice (1, Index - 1); @@ -892,9 +895,9 @@ package body Mapcodes is -- Format: Local (often ambiguous), International (full and unambiguous, -- DEFAULT), or Shortest function Get_Territory_Alpha_Code ( - Territory_Number : Territory_Range; + Territory : Territories; Format : Territory_Formats := International) return String is - Full : constant String := Iso3166Alpha_Of (Territory_Number); + Full : constant String := Iso3166Alpha_Of (Natural (Territory)); Iso : As_U.Asu_Us; Hyphen, Index : Natural; Short : As_U.Asu_Us; @@ -911,7 +914,7 @@ package body Mapcodes is return Short.Image; end if; -- Shortest possible - -- Keep parent if it has aliases or if territoy occurs multiple times + -- Keep parent if it has aliases or if territory occurs multiple times Count := 0; if Str_Tools.Locate (Aliases, Short.Image & "=") > 0 then Count := 2; @@ -930,10 +933,10 @@ package body Mapcodes is -- Return parent country of subdivision or error (if territory is not a -- subdivision) - function Get_Parent (Territory_Number : Territory_Range) + function Get_Parent (Territory : Territories) return Integer is begin - return (case Territory_Number is + return (case Territory is when Usa_From .. Usa_Upto => Ccode_Usa, when Ind_From .. Ind_Upto => Ccode_Ind, when Can_From .. Can_Upto => Ccode_Can, @@ -945,29 +948,28 @@ package body Mapcodes is when others => Error); end Get_Parent; - function Get_Parent_Of (Territory_Number : Territory_Range) - return Territory_Range is - Code : constant Integer := Get_Parent (Territory_Number); + function Get_Parent_Of (Territory : Territories) return Territories is + Code : constant Integer := Get_Parent (Territory); begin if Code = Error then raise Not_A_Subdivision; else - return Code; + return Territories (Code); end if; end Get_Parent_Of; -- Return True if Territory is a state - function Is_Subdivision (Territory_Number : Territory_Range) + function Is_Subdivision (Territory : Territories) return Boolean is - (Get_Parent (Territory_Number) /= Error); + (Get_Parent (Territory) /= Error); -- Return True if Territory is a country that has states - function Has_Subdivision (Territory_Number : Territory_Range) + function Has_Subdivision (Territory : Territories) return Boolean is - Territory : constant String := Get_Territory_Alpha_Code (Territory_Number); + Code : constant String := Get_Territory_Alpha_Code (Territory); begin for Parent of Parents3 loop - if Territory = Parent then + if Code = Parent then return True; end if; end loop; @@ -977,7 +979,7 @@ package body Mapcodes is -- Given a subdivision, return the array of subdivisions with same name -- with various parents function Get_Subdivisions_With (Subdivision : String) - return Territory_Array is + return Territories_Array is Upper_Subd : constant String := Str_Tools.Upper_Str (Subdivision); Ccodes : array (1 .. Parent_Length) of Integer; Nb_Ok : Natural := 0; @@ -990,12 +992,12 @@ package body Mapcodes is end if; end loop; -- Return array of valid combinations - return Result : Territory_Array (1 .. Nb_Ok) do + return Result : Territories_Array (1 .. Nb_Ok) do Nb_Ok := 0; for Ccode of Ccodes loop if Ccode /= Error then Nb_Ok := Nb_Ok + 1; - Result(Nb_Ok) := Ccode; + Result(Nb_Ok) := Territories (Ccode); end if; end loop; end return; @@ -2306,7 +2308,7 @@ package body Mapcodes is Extra_Digits : Integer) return Mapcode_Infos is Results : Mapcode_Infos (1 .. Max_Nr_Of_Mapcode_Results); Nb_Results : Natural := 0; - From_Territory : Natural := 0; + From_Territory : Integer := 0; Upto_Territory : Integer := Ccode_Earth; Original_Length : Natural; From, Upto : Integer; @@ -2329,11 +2331,12 @@ package body Mapcodes is R := As_U.Tus (Encode_Nameless (Enc, I, From, Extra_Digits)); elsif Rec_Type(I) > 1 then R := As_U.Tus (Encode_Auto_Header (Enc, I, Extra_Digits)); - elsif I = Upto and then Get_Parent (Territory_Number) >= 0 then + elsif I = Upto + and then Get_Parent (Territories (Territory_Number)) >= 0 then declare More_Results : constant Mapcode_Infos := Mapcoder_Engine (Enc, - Get_Parent (Territory_Number), + Get_Parent (Territories (Territory_Number)), Get_Shortest, Territory_Number, Extra_Digits); @@ -2370,11 +2373,11 @@ package body Mapcodes is Mc_Info.Mapcode := R; Mc_Info.Territory_Alpha_Code := - As_U.Tus (Get_Territory_Alpha_Code (Store_Code)); + As_U.Tus (Get_Territory_Alpha_Code (Territories (Store_Code))); Mc_Info.Full_Mapcode := (if Store_Code = Ccode_Earth then As_U.Asu_Null else Mc_Info.Territory_Alpha_Code & " ") & R; - Mc_Info.Territory_Number := Store_Code; + Mc_Info.Territory := Territories (Store_Code); Nb_Results := Nb_Results + 1; Results (Nb_Results) := Mc_Info; @@ -2467,7 +2470,7 @@ package body Mapcodes is end if; -- Long codes in states are handled by the country - Parent := Get_Parent (Number); + Parent := Get_Parent (Territories (Number)); if Parent >= 0 then if Mclen >= 9 or else (Mclen >= 8 and then @@ -2555,14 +2558,14 @@ package body Mapcodes is -- Legacy interface function Encode (Coord : Coordinate; - Territory : String := ""; + Territory_Code : String := ""; Shortest : Boolean := False; Precision : Precisions := 0; Sort : Boolean := False) return Mapcode_Infos is Result : Mapcode_Infos := Mapcoder_Engine ( Enc => Get_Encode_Rec (Coord.Lat, Coord.Lon), - Tn => (if Territory = "" then Error - else Get_Territory_Number (Territory)), + Tn => (if Territory_Code = "" then Error + else Integer (Get_Territory (Territory_Code))), Get_Shortest => Shortest, State_Override => -1, Extra_Digits => Precision); @@ -2605,7 +2608,7 @@ package body Mapcodes is if Context = Undefined then Contextterritorynumber := Ccode_Earth; else - Contextterritorynumber := Get_Territory_Number(Context); + Contextterritorynumber := Integer (Get_Territory (Context)); end if; return Master_Decode (Mapcode, Contextterritorynumber); end Decode; diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 0f1c787..b731793 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -16,12 +16,12 @@ -- Mapcode management with Mapcode_Utils.As_U; -with Ctrynams; +private with Ctrynams; package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.0.12/Data" + Mapcode_Ada_Version : constant String := "1.1.3/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) @@ -30,50 +30,51 @@ package Mapcodes is ----------------- -- TERRITORIES -- ----------------- - -- Valid territory number - subtype Territory_Range is Natural range 0 .. Ctrynams.Isofullname'Last - 1; + -- Valid territory identifier + type Territories is private; + + -- Image of a territory ("0" for Vatican to "532" for International) + function Image (Territory : Territories) return String; -- Given an ISO 3166 alphacode (such as "US-AL" or "FRA"), return the - -- corresponding territory number or raise Unknown_Territory + -- corresponding territory identifier or raise Unknown_Territory -- A Context territory helps to interpret ambiguous (abbreviated) -- alphacodes, such as "BR" or "US" for the subdivision "AL" - -- If Territory is ambiguous and no Context is provided, then the first - -- (in the alphanumeric order of territories) valid territory is used - -- Raise, if Territory or Context is not known: + -- Territory_Code can also be the image of the territory (ex "364" for US-AL) + -- Raise, if Territory or Context is not known, or if Territory is ambiguous + -- and no contextex is provided: Unknown_Territory : exception; - function Get_Territory_Number (Territory : String; - Context : String := "") - return Territory_Range; + function Get_Territory (Territory_Code : String; + Context : String := "") return Territories; -- Return the alphacode (usually an ISO 3166 code) of a territory number -- Format: Local (often ambiguous), International (full and unambiguous, -- DEFAULT), or Shortest type Territory_Formats is (Local, International, Shortest); function Get_Territory_Alpha_Code ( - Territory_Number : Territory_Range; + Territory : Territories; Format : Territory_Formats := International) return String; -- Return the full readable name of a territory (e.g. "France") - function Get_Territory_Fullname (Territory_Number : Territory_Range) - return String; + function Get_Territory_Fullname (Territory : Territories) return String; - -- Return the parent country of a subdivision (e.g. "US" for "US-AL" + -- Return the parent country of a subdivision (e.g. "US" for "US-AL") -- Raise, if Territory is not a subdivision: Not_A_Subdivision : exception; - function Get_Parent_Of (Territory_Number : Territory_Range) - return Territory_Range; + function Get_Parent_Of (Territory : Territories) return Territories; -- Return True if Territory is a state - function Is_Subdivision (Territory_Number : Territory_Range) return Boolean; + function Is_Subdivision (Territory : Territories) return Boolean; -- Return True if Territory is a country that has states - function Has_Subdivision (Territory_Number : Territory_Range) return Boolean; + function Has_Subdivision (Territory : Territories) return Boolean; -- Given a subdivision name, return the array (possibly empty) of territory -- subdivisions with same name -- Ex: given "AL" return the array (318 (BR-AL), 482 (RU-AL), 364 (US-AL)) - type Territory_Array is array (Positive range <>) of Territory_Range; - function Get_Subdivisions_With (Subdivision : String) return Territory_Array; + type Territories_Array is array (Positive range <>) of Territories; + function Get_Subdivisions_With (Subdivision : String) + return Territories_Array; -------------------------- -- Encoding to mapcodes -- @@ -95,8 +96,8 @@ package Mapcodes is -- Territory, then a space and the mapcode, -- or simple mapcode if it is valid on Earth Full_Mapcode : Mapcode_Utils.As_U.Asu_Us; - -- Territory number - Territory_Number : Territory_Range; + -- Territory + Territory : Territories; end record; type Mapcode_Infos is array (Positive range <>) of Mapcode_Info; @@ -122,7 +123,7 @@ package Mapcodes is subtype Precisions is Natural range 0 .. 8; Earth : constant String := "AAA"; function Encode (Coord : Coordinate; - Territory : String := ""; + Territory_Code : String := ""; Shortest : Boolean := False; Precision : Precisions := 0; Sort : Boolean := False) return Mapcode_Infos; @@ -137,5 +138,7 @@ package Mapcodes is Decode_Error : exception; function Decode (Mapcode, Context : String) return Coordinate; +private + type Territories is new Natural range 0 .. Ctrynams.Isofullname'Last - 1; end Mapcodes; diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 7884744..89283df 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -35,9 +35,9 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( " -t [ ] // Territory info"); Ada.Text_Io.Put_Line ( - " -S // Same subdivisions"); + " -s // Same subdivisions"); Ada.Text_Io.Put_Line ( - " -s // Search territory"); + " -S // Search territory"); Ada.Text_Io.Put_Line ( " -d // Decode"); Ada.Text_Io.Put_Line ( @@ -60,16 +60,6 @@ procedure T_Mapcode is " ::= P0 .. P8 // Default P0 or from input"); end Usage; - function Integer_Image (I : Integer) return String is - Str : constant String := I'Img; - begin - if Str(Str'First) /= ' ' then - return Str; - else - return Str (Integer'Succ (Str'First) .. Str'Last); - end if; - end Integer_Image; - function Lower_Str (Str : String) return String is Offset : constant Integer := Character'Pos('A') - Character'Pos('a'); Result : String := Str; @@ -83,13 +73,13 @@ procedure T_Mapcode is procedure Put_Territory (Territory, Context : in String; Show_Subdivision : in Boolean) is - Index : Mapcodes.Territory_Range; + Index : Territories; begin Ada.Text_Io.Put (Territory & (if Context /= "" then " " else "") & Context & " "); - Index := Get_Territory_Number (Territory, Context); - Ada.Text_Io.Put_Line ("=> " & Integer_Image (Index) + Index := Get_Territory (Territory, Context); + Ada.Text_Io.Put_Line ("=> " & Image (Index) & ": " & Get_Territory_Alpha_Code (Index, Mapcodes.Local) & "/" & Get_Territory_Alpha_Code (Index, Mapcodes.International) & "/" & Get_Territory_Alpha_Code (Index, Mapcodes.Shortest) @@ -199,11 +189,11 @@ begin end if; end if; Put_Territory (Arg1.Image, Arg2.Image, True); - elsif Command.Image = "-S" then + elsif Command.Image = "-s" then -- Subdirectories with same suffix I := I + 1; declare - Brothers : constant Mapcodes.Territory_Array + Brothers : constant Mapcodes.Territories_Array := Mapcodes.Get_Subdivisions_With ( Ada.Command_Line.Argument (I)); begin @@ -212,7 +202,7 @@ begin False); end loop; end; - elsif Command.Image = "-s" then + elsif Command.Image = "-S" then -- Search country names I := I + 1; Territory.Set (Str_Tools.Upper_Str (Ada.Command_Line.Argument (I))); @@ -220,6 +210,7 @@ begin if Str_Tools.Locate (Str_Tools.Upper_Str (Ctrynams.Isofullname(J).Image), Territory.Image) /= 0 then + -- Territory number is Index - 1 Put_Territory (Image (J-1), "", True); end if; end loop; @@ -302,7 +293,7 @@ begin & Code.Territory_Alpha_Code.Image & " " & Code.Mapcode.Image & " " & Quote (Code.Full_Mapcode.Image) - & " " & Integer_Image (Code.Territory_Number)); + & " " & Image (Code.Territory)); end Put_Code; -- Sort if Local Codes : constant Mapcodes.Mapcode_Infos diff --git a/test/Scenario b/test/Scenario index ce27817..465c6c8 100644 --- a/test/Scenario +++ b/test/Scenario @@ -41,8 +41,8 @@ -t IN-MN => 279: MN/IN-MN/IN-MN/Manipur Parent: IND -t US-IN => 356: IN/US-IN/US-IN/Indiana Parent: USA -t NLD => 112: NLD/NLD/NLD/Netherlands --s altai => 483: ALT/RU-ALT/ALT/Altai Krai Parent: RUS --S AL => 482: AL/RU-AL/RU-AL/Altai Republic Parent: RUS +-s AL => 482: AL/RU-AL/RU-AL/Altai Republic Parent: RUS +-S altai => 483: ALT/RU-ALT/ALT/Altai Krai Parent: RUS # NLD, with high precision -d NLD 49.4V => 52.376514000 4.908543375 @@ -51,6 +51,10 @@ -c 52.376476500 4.908514225 NLD P1 => NLD 49.4V-V 'NLD 49.4V-V' 112 -d NLD 49.4V-V2 => 52.376482500 4.908511796 -c 52.376482500 4.908511796 NLD P2 => NLD 49.4V-V2 'NLD 49.4V-V2' 112 +-d NLD 49.4V-DWTSTSTS => 52.376514000057 4.908543375090 +-c 52.376514000057 4.908543375090 NLD P8 => NLD 49.4V-DWTSTSTS 'NLD 49.4V-DWTSTSTS' 112 + +# NLD in world -d VHXGB.1J9J => 52.376504000 4.908535500 -c 52.3765140000 4.908543375 AAA => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 diff --git a/test/fulltest b/test/fulltest index 24c196f..bb8fbcd 100755 --- a/test/fulltest +++ b/test/fulltest @@ -25,7 +25,13 @@ fi # Precision, in fraction of degree, depending of encoding precision EPSILON[0]="2.5E-4" EPSILON[1]="5.0E-5" -EPSILON[2]="7.5E-6" +EPSILON[2]="8.0E-6" +EPSILON[3]="2.0E-6" +EPSILON[4]="3.5E-7" +EPSILON[5]="6.5E-8" +EPSILON[6]="9.5E-9" +EPSILON[7]="2.0E-9" +EPSILON[8]="3.5E-10" # Defaults export DEBUG="" From cfd6ca9e805cdb5d794dc28ce55e08d5acec4299 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Thu, 29 Oct 2020 17:45:57 +0100 Subject: [PATCH 25/42] Rename Get_Territory_Number Move apart the public characteristics of territories Rename Image into Get_Territory_Number --- README.md | 63 +-- src/countries.ads | 1130 +++++++++++++++++++++++++++++++++++++++++++++ src/ctrynams.ads | 558 ---------------------- src/mapcodes.adb | 558 +--------------------- src/mapcodes.ads | 33 +- src/t_mapcode.adb | 18 +- 6 files changed, 1203 insertions(+), 1157 deletions(-) create mode 100644 src/countries.ads delete mode 100644 src/ctrynams.ads diff --git a/README.md b/README.md index 0525eee..8b6abc7 100644 --- a/README.md +++ b/README.md @@ -31,19 +31,20 @@ https://github.com/malaise/ada/tree/master/usr/mapcode # Ada Files for Mapcode Support -The following files, in directory `src`, provide utilities for mapcode +The following files, in directory `src`, provide utilities and data for mapcode processing: - mapcode-utils.ads - Root package of the utilities: - as_u.ads as_u.adb - Unbounded strings - bits.ads bits.adb - Bit operations - str_tools.ads str_tools.adb - String utilities + mapcode-utils.ads - Root package of the utilities: + as_u.ads as_u.adb - Unbounded strings + bits.ads bits.adb - Bit operations + str_tools.ads str_tools.adb - String utilities + ndata.ads - Private data table for mapcode support The following files provide the Ada interface for mapcodes: - mapcode.ads mapcode.adb - Key operations for mapcode support - ndata.ads - Data table for mapcode support - ctrynams.ads - Names of territories (in English) + mapcode.ads mapcode.adb - Key operations for mapcode support + countries.ads - Nums, Codes and Names of territories + The following file contains the main procedure for testing the interfaces: @@ -57,20 +58,14 @@ library. ## Operations related to territories -A territory is identified by a code (an ISO 3166 code such as “NLD” or "US-DC"), -with some possible aliases (example "US" = "USA"), or by a unique territory identifier of (a private) type `Territories`. +A territory is identified either by a number (a string of 1 to 3 digits such as "42"), or by a code (an ISO 3166 code such as “NLD” or "US-DC") +with some possible aliases (example "US" = "USA"). + +A territory is designated by a unique territory identifier of (a private) type `Territories`. Large territories (MX, IN, AU, BR, US, CA, RU and CN) are decomposed into subdivisions. -`Image` of a territory returns the string image of a territory, from "0" -for "VAT" (Vatican), to "532" for "AAA" (International). - -Attribute | Description ---- | --- -`Territory` | `Territories`, the identifier of the territory to put the image of -return value | string image of `Territory` - `Get_Territory` returns the territory identifier of a territory code. An optional context helps to interpret ambiguous (abbreviated) alphacodes of subdivisions, such as "AL". If the territory code is not known or if several @@ -78,8 +73,7 @@ subdivisions match the specification (no context provided) it raises the excepti Attribute | Description --- | --- -`Territory_Code` | string, the ISO code such as “USA”, or identifier image such -as "232", to search for +`Territory_Code` | string, the ISO code such as “USA”, or identifier image such as "232", to search for `Context` | optional string, (an ISO code such as “US”) territory for a subdivision return value | `Territories`, territory identifier exceptions | `Unknown_Territory` if the territory code is not known or ambiguous @@ -101,6 +95,14 @@ Ambiguous code and context. Get_Territory ("IN", "AR") -> 285 // IN-AR/Arunachal Pradesh +`Get_Territory_Number` of a territory returns the string image of a territory, from "0" for "VAT" (Vatican), to "532" for "AAA" (International). + +Attribute | Description +--- | --- +`Territory` | `Territories`, the identifier of the territory to get the number of +return value | string image of the number of `Territory` + + `Get_Territory_Alpha_Code` returns the territory ISO 3166 code of a territory. Attribute | Description @@ -167,12 +169,10 @@ return value | array of `Territories` that have the same subdivision name as `Su Example: Get_Subdivisions_With ("AL") - -> US-AL => 364: AL/US-AL/US-AL/Alabama - Parent: USA - BR-AL => 318: AL/BR-AL/BR-AL/Alagoas - Parent: BRA - RU-AL => 482: AL/RU-AL/RU-AL/Altai Republic - Parent: RUS + -> 364 // US-AL + 318 // BR-AL + 482 // RU-AL + ## Converting a Coordinate into Mapcodes @@ -194,7 +194,7 @@ The operation returns an array (possibly with only one element) of mapcodes. attribute | description --- | --- `Coord` | coordinate (latitude and longitude in degrees, reals) to encode as mapcodes -`Territory` | optional string, (an ISO code such as “NLD” or territory image such as "112") territory for the scope of the mapcodes +`Territory` | optional string, (an ISO code such as “NLD” or territory number such as "112") territory for the scope of the mapcodes `Shortest` | boolean, default True, to return only the shortest possible mapcode for the territory or each possible territory `Precision` | 0 to 8, default 0, precision of the mapcode to generate `Sort` | sort the territories so that the shortest mapcode appears first @@ -281,7 +281,7 @@ raises the exception `Decode_Error` if the mapcode is not valid or ambiguous Attribute | Description --- | --- `Mapcode` | string, mapcode to decode -`Context` | optional string, (an ISO code such as “NLD”) territory for the scope of the mapcode +`Context` | optional string, (an ISO code such as “NLD” or territory number such as "112") territory for the scope of the mapcode return value | coordinate (latitude and longitude in degrees), reals exceptions | `Decode_Error`, if the mapcode is invalid or ambiguous in the Context @@ -430,6 +430,13 @@ Put alternative mapcodes for a mapcode (shortests). # Version History +### 1.1.4 +* Move apart the public characteristics of territories +* Rename Image into Get_Territory_Number + +### 1.1.3 +* Rename Get_Territory_Number into Get_Territory + ### 1.1.2 * Make Territory_Number a private type and rename it * Add the function Image of a territory diff --git a/src/countries.ads b/src/countries.ads new file mode 100644 index 0000000..d1a273b --- /dev/null +++ b/src/countries.ads @@ -0,0 +1,1130 @@ +-- ----------------------------------------------------------------------------- +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- ----------------------------------------------------------------------------- + +with Mapcode_Utils.As_U; +use Mapcode_Utils; +package Countries is + + -- The public part of the definition of a territory + type Territory_Def is record + -- The number, most efficient way to denote the territory + Num : String (1 .. 3); + -- The ISO 3166 Alpha code + Code : As_U.Asu_Us; + -- The full name + Name : As_U.Asu_Us; + end record; + + -- All the territories supported by Madpcodes + Territories_Def : constant array (Positive range <>) of Territory_Def := ( + ("000", As_U.Tus ("VAT"), + As_U.Tus ("Vatican (Holy See) (_ City State)")), + ("001", As_U.Tus ("MCO"), + As_U.Tus ("Monaco (Principality of _)")), + ("002", As_U.Tus ("GIB"), + As_U.Tus ("Gibraltar")), + ("003", As_U.Tus ("TKL"), + As_U.Tus ("Tokelau")), + ("004", As_U.Tus ("CCK"), + As_U.Tus ("Cocos Islands (Keeling Islands)")), + ("005", As_U.Tus ("BLM"), + As_U.Tus ("Saint-Barthelemy (Collectivity of _)")), + ("006", As_U.Tus ("NRU"), + As_U.Tus ("Nauru (Republic of _)")), + ("007", As_U.Tus ("TUV"), + As_U.Tus ("Tuvalu")), + ("008", As_U.Tus ("MAC"), + As_U.Tus ("Macau (Aomen)")), + ("009", As_U.Tus ("SXM"), + As_U.Tus ("Sint Maarten")), + ("010", As_U.Tus ("MAF"), + As_U.Tus ("Saint Martin (Collectivity of _)")), + ("011", As_U.Tus ("NFK"), + As_U.Tus ("Norfolk and Philip Island" + & " (Philip Island) (Norfolk Island)")), + ("012", As_U.Tus ("PCN"), + As_U.Tus ("Pitcairn Islands" + & " (Pitcairn, Henderson, Ducie and Oeno Islands)")), + ("013", As_U.Tus ("BVT"), + As_U.Tus ("Bouvet Island")), + ("014", As_U.Tus ("BMU"), + As_U.Tus ("Bermuda (Somers Isles)")), + ("015", As_U.Tus ("IOT"), + As_U.Tus ("British Indian Ocean Territory")), + ("016", As_U.Tus ("SMR"), + As_U.Tus ("San Marino (Republic of _)")), + ("017", As_U.Tus ("GGY"), + As_U.Tus ("Guernsey (Bailiwick of _)")), + ("018", As_U.Tus ("AIA"), + As_U.Tus ("Anguilla")), + ("019", As_U.Tus ("MSR"), + As_U.Tus ("Montserrat")), + ("020", As_U.Tus ("JEY"), + As_U.Tus ("Jersey (Bailiwick of _)")), + ("021", As_U.Tus ("CXR"), + As_U.Tus ("Christmas Island")), + ("022", As_U.Tus ("WLF"), + As_U.Tus ("Wallis and Futuna" + & " (Futuna) (Wallis) (Collectivity of the _ Islands)")), + ("023", As_U.Tus ("VGB"), + As_U.Tus ("British Virgin Islands (Virgin Islands, British)")), + ("024", As_U.Tus ("LIE"), + As_U.Tus ("Liechtenstein (Principality of _)")), + ("025", As_U.Tus ("ABW"), + As_U.Tus ("Aruba")), + ("026", As_U.Tus ("MHL"), + As_U.Tus ("Marshall Islands (Republic of the _)")), + ("027", As_U.Tus ("ASM"), + As_U.Tus ("American Samoa (Samoa, American)")), + ("028", As_U.Tus ("COK"), + As_U.Tus ("Cook Islands")), + ("029", As_U.Tus ("SPM"), + As_U.Tus ("Saint Pierre and Miquelon" + & " (Miquelon) (Saint Pierre) (Collectivity of _)")), + ("030", As_U.Tus ("NIU"), + As_U.Tus ("Niue")), + ("031", As_U.Tus ("KNA"), + As_U.Tus ("Saint Kitts and Nevis" + & " (Nevis) (Saint Kitts) (Federation of _)")), + ("032", As_U.Tus ("CYM"), + As_U.Tus ("Cayman islands")), + ("033", As_U.Tus ("BES"), + As_U.Tus ("Bonaire, St Eustasuis and Saba" + & " (Bonaire) (Saba) (St Eustasius)")), + ("034", As_U.Tus ("MDV"), + As_U.Tus ("Maldives (Republic of _)")), + ("035", As_U.Tus ("SHN"), + As_U.Tus ("Saint Helena, Ascension and Tristan da Cunha" + & " (Saint Helena) (Ascension) (Tristan da Cunha)")), + ("036", As_U.Tus ("MLT"), + As_U.Tus ("Malta (Republic of _)")), + ("037", As_U.Tus ("GRD"), + As_U.Tus ("Grenada")), + ("038", As_U.Tus ("VIR"), + As_U.Tus ("Virgin Islands of the United States" + & " (US Virgin Islands) (American Virgin Islands)")), + ("039", As_U.Tus ("MYT"), + As_U.Tus ("Mayotte (Maore)")), + ("040", As_U.Tus ("SJM"), + As_U.Tus ("Svalbard and Jan Mayen" + & " (Svalbard) (Jan Mayen) (Spitsbergen)")), + ("041", As_U.Tus ("VCT"), + As_U.Tus ("Saint Vincent and the Grenadines" + & " (Saint Vincent) (Grenadines)")), + ("042", As_U.Tus ("HMD"), + As_U.Tus ("Heard Island and McDonald Islands" + & " (Heard Island) (McDonald Islands)")), + ("043", As_U.Tus ("BRB"), + As_U.Tus ("Barbados")), + ("044", As_U.Tus ("ATG"), + As_U.Tus ("Antigua and Barbuda (Antigua) (Barbuda)")), + ("045", As_U.Tus ("CUW"), + As_U.Tus ("Curacao")), + ("046", As_U.Tus ("SYC"), + As_U.Tus ("Seychelles (Republic of _)")), + ("047", As_U.Tus ("PLW"), + As_U.Tus ("Palau (Republic of _)")), + ("048", As_U.Tus ("MNP"), + As_U.Tus ("Northern Mariana Islands (Commonwealth of the _)")), + ("049", As_U.Tus ("AND"), + As_U.Tus ("Andorra" + & " (Principality of _)" + & " (Principality of the Valleys of _)")), + ("050", As_U.Tus ("GUM"), + As_U.Tus ("Guam")), + ("051", As_U.Tus ("IMN"), + As_U.Tus ("Isle of Mann (Mann)")), + ("052", As_U.Tus ("LCA"), + As_U.Tus ("Saint Lucia")), + ("053", As_U.Tus ("FSM"), + As_U.Tus ("Micronesia (Federated States of Micronesia)")), + ("054", As_U.Tus ("SGP"), + As_U.Tus ("Singapore (Republic of _)")), + ("055", As_U.Tus ("TON"), + As_U.Tus ("Tonga (Kingdom of _)")), + ("056", As_U.Tus ("DMA"), + As_U.Tus ("Dominica (Commonwealth of _)")), + ("057", As_U.Tus ("BHR"), + As_U.Tus ("Bahrain (Kingdom of _)")), + ("058", As_U.Tus ("KIR"), + As_U.Tus ("Kiribati (Republic of _)")), + ("059", As_U.Tus ("TCA"), + As_U.Tus ("Turks and Caicos Islands" + & " (Turks Islands) (Caicos Islands)")), + ("060", As_U.Tus ("STP"), + As_U.Tus ("Sao Tome and Principe" + & " (Sao Tome) (Principe) (Democratic Republic of _)")), + ("061", As_U.Tus ("HKG"), + As_U.Tus ("Hong Kong (Xianggang)")), + ("062", As_U.Tus ("MTQ"), + As_U.Tus ("Martinique")), + ("063", As_U.Tus ("FRO"), + As_U.Tus ("Faroe Islands")), + ("064", As_U.Tus ("GLP"), + As_U.Tus ("Guadeloupe")), + ("065", As_U.Tus ("COM"), + As_U.Tus ("Comoros (Union of the _)")), + ("066", As_U.Tus ("MUS"), + As_U.Tus ("Mauritius (Republic of _)")), + ("067", As_U.Tus ("REU"), + As_U.Tus ("Reunion")), + ("068", As_U.Tus ("LUX"), + As_U.Tus ("Luxembourg (Grand Duchy of _)")), + ("069", As_U.Tus ("WSM"), + As_U.Tus ("Samoa (Independent State of _)")), + ("070", As_U.Tus ("SGS"), + As_U.Tus ("South Georgia and the South Sandwich Islands" + & " (South Georgia) (South Sandwich Islands)")), + ("071", As_U.Tus ("PYF"), + As_U.Tus ("French Polynesia (Collectivity of _)")), + ("072", As_U.Tus ("CPV"), + As_U.Tus ("Cape Verde (Cabo Verde) (Republic of Cabo Verde)")), + ("073", As_U.Tus ("TTO"), + As_U.Tus ("Trinidad and Tobago" + & " (Republic of _) (Trinidad) (Tobago)")), + ("074", As_U.Tus ("BRN"), + As_U.Tus ("Brunei (Nation of _, the Abode of Peace)")), + ("075", As_U.Tus ("ATF"), + As_U.Tus ("French Southern and Antarctic Lands")), + ("076", As_U.Tus ("PRI"), + As_U.Tus ("Puerto Rico (Commonwealth of _)")), + ("077", As_U.Tus ("CYP"), + As_U.Tus ("Cyprus (Republic of _)")), + ("078", As_U.Tus ("LBN"), + As_U.Tus ("Lebanon (Lebanese Republic)")), + ("079", As_U.Tus ("JAM"), + As_U.Tus ("Jamaica")), + ("080", As_U.Tus ("GMB"), + As_U.Tus ("Gambia (The Gambia) (Republic of the _)")), + ("081", As_U.Tus ("QAT"), + As_U.Tus ("Qatar (State of _)")), + ("082", As_U.Tus ("FLK"), + As_U.Tus ("Falkland Islands (The Falklands)")), + ("083", As_U.Tus ("VUT"), + As_U.Tus ("Vanuatu (Republic of _)")), + ("084", As_U.Tus ("MNE"), + As_U.Tus ("Montenegro")), + ("085", As_U.Tus ("BHS"), + As_U.Tus ("Bahamas (Commonwealth of the _)")), + ("086", As_U.Tus ("TLS"), + As_U.Tus ("Timor-Leste (Democratic Republic of _) (East Timor)")), + ("087", As_U.Tus ("SWZ"), + As_U.Tus ("Swaziland (Kingdom of _)")), + ("088", As_U.Tus ("KWT"), + As_U.Tus ("Kuwait (State of _)")), + ("089", As_U.Tus ("FJI"), + As_U.Tus ("Fiji (Republic of _)")), + ("090", As_U.Tus ("NCL"), + As_U.Tus ("New Caledonia")), + ("091", As_U.Tus ("SVN"), + As_U.Tus ("Slovenia (Republic of _)")), + ("092", As_U.Tus ("ISR"), + As_U.Tus ("Israel (State of _)")), + ("093", As_U.Tus ("PSE"), + As_U.Tus ("Palestinian territories (State of Palestine)")), + ("094", As_U.Tus ("SLV"), + As_U.Tus ("El Salvador (Republic of _)")), + ("095", As_U.Tus ("BLZ"), + As_U.Tus ("Belize")), + ("096", As_U.Tus ("DJI"), + As_U.Tus ("Djibouti (Republic of _)")), + ("097", As_U.Tus ("MKD"), + As_U.Tus ("Macedonia" + & " (Republic of _) (FYROM)" + & " (Former Yugoslav Republic of Macedonia)")), + ("098", As_U.Tus ("RWA"), + As_U.Tus ("Rwanda (Republic of _)")), + ("099", As_U.Tus ("HTI"), + As_U.Tus ("Haiti (Republic of _)")), + ("100", As_U.Tus ("BDI"), + As_U.Tus ("Burundi (Republic of _)")), + ("101", As_U.Tus ("GNQ"), + As_U.Tus ("Equatorial Guinea (Republic of _)")), + ("102", As_U.Tus ("ALB"), + As_U.Tus ("Albania (Republic of _)")), + ("103", As_U.Tus ("SLB"), + As_U.Tus ("Solomon Islands")), + ("104", As_U.Tus ("ARM"), + As_U.Tus ("Armenia (Republic of _)")), + ("105", As_U.Tus ("LSO"), + As_U.Tus ("Lesotho (Kingdom of _)")), + ("106", As_U.Tus ("BEL"), + As_U.Tus ("Belgium (Kingdom of _)")), + ("107", As_U.Tus ("MDA"), + As_U.Tus ("Moldova (Republic of _)")), + ("108", As_U.Tus ("GNB"), + As_U.Tus ("Guinea-Bissau (Republic of _)")), + ("109", As_U.Tus ("TWN"), + As_U.Tus ("Taiwan (Republic of China)")), + ("110", As_U.Tus ("BTN"), + As_U.Tus ("Bhutan (Kingdom of _)")), + ("111", As_U.Tus ("CHE"), + As_U.Tus ("Switzerland (Swiss Confederation)")), + ("112", As_U.Tus ("NLD"), + As_U.Tus ("Netherlands (The Netherlands) (Kingdom of the _)")), + ("113", As_U.Tus ("DNK"), + As_U.Tus ("Denmark (Kingdom of _)")), + ("114", As_U.Tus ("EST"), + As_U.Tus ("Estonia (Republic of _)")), + ("115", As_U.Tus ("DOM"), + As_U.Tus ("Dominican Republic")), + ("116", As_U.Tus ("SVK"), + As_U.Tus ("Slovakia (Slovak Republic)")), + ("117", As_U.Tus ("CRI"), + As_U.Tus ("Costa Rica (Republic of _)")), + ("118", As_U.Tus ("BIH"), + As_U.Tus ("Bosnia and Herzegovina")), + ("119", As_U.Tus ("HRV"), + As_U.Tus ("Croatia (Republic of _)")), + ("120", As_U.Tus ("TGO"), + As_U.Tus ("Togo (Togolese Republic)")), + ("121", As_U.Tus ("LVA"), + As_U.Tus ("Latvia (Republic of _)")), + ("122", As_U.Tus ("LTU"), + As_U.Tus ("Lithuania (Republic of _)")), + ("123", As_U.Tus ("LKA"), + As_U.Tus ("Sri Lanka (Democratic Socialist Republic of _)")), + ("124", As_U.Tus ("GEO"), + As_U.Tus ("Georgia")), + ("125", As_U.Tus ("IRL"), + As_U.Tus ("Ireland (Republic of _)")), + ("126", As_U.Tus ("SLE"), + As_U.Tus ("Sierra Leone (Republic of _)")), + ("127", As_U.Tus ("PAN"), + As_U.Tus ("Panama (Republic of _)")), + ("128", As_U.Tus ("CZE"), + As_U.Tus ("Czech Republic")), + ("129", As_U.Tus ("GUF"), + As_U.Tus ("French Guiana (Guiana)")), + ("130", As_U.Tus ("ARE"), + As_U.Tus ("United Arab Emirates (Emirates)")), + ("131", As_U.Tus ("AUT"), + As_U.Tus ("Austria (Republic of _)")), + ("132", As_U.Tus ("AZE"), + As_U.Tus ("Azerbaijan (Republic of _)")), + ("133", As_U.Tus ("SRB"), + As_U.Tus ("Serbia (Republic of _)")), + ("134", As_U.Tus ("JOR"), + As_U.Tus ("Jordan (Hashemite Kingdom of _) (Kingdom of _)")), + ("135", As_U.Tus ("PRT"), + As_U.Tus ("Portugal (Portuguese Republic)")), + ("136", As_U.Tus ("HUN"), + As_U.Tus ("Hungary (Republic of _)")), + ("137", As_U.Tus ("KOR"), + As_U.Tus ("South Korea (Republic of Korea) (Korea, South)")), + ("138", As_U.Tus ("ISL"), + As_U.Tus ("Iceland")), + ("139", As_U.Tus ("GTM"), + As_U.Tus ("Guatemala (Republic of _)")), + ("140", As_U.Tus ("CUB"), + As_U.Tus ("Cuba (Republic of _)")), + ("141", As_U.Tus ("BGR"), + As_U.Tus ("Bulgaria (Republic of _)")), + ("142", As_U.Tus ("LBR"), + As_U.Tus ("Liberia (Republic of _)")), + ("143", As_U.Tus ("HND"), + As_U.Tus ("Honduras (Republic of _)")), + ("144", As_U.Tus ("BEN"), + As_U.Tus ("Benin (Republic of _)")), + ("145", As_U.Tus ("ERI"), + As_U.Tus ("Eritrea (State of _)")), + ("146", As_U.Tus ("MWI"), + As_U.Tus ("Malawi (Republic of _)")), + ("147", As_U.Tus ("PRK"), + As_U.Tus ("North Korea" + & " (Democratic People's Republic of Korea)" + & " (Korea, North)")), + ("148", As_U.Tus ("NIC"), + As_U.Tus ("Nicaragua (Republic of _)")), + ("149", As_U.Tus ("GRC"), + As_U.Tus ("Greece (Hellenic Republic) (Hellas)")), + ("150", As_U.Tus ("TJK"), + As_U.Tus ("Tajikistan (Republic of _)")), + ("151", As_U.Tus ("BGD"), + As_U.Tus ("Bangladesh (People's Republic of _)")), + ("152", As_U.Tus ("NPL"), + As_U.Tus ("Nepal (Federal Democratic Republic of _)")), + ("153", As_U.Tus ("TUN"), + As_U.Tus ("Tunisia (Tunisian Republic) (Republic of _)")), + ("154", As_U.Tus ("SUR"), + As_U.Tus ("Suriname (Republic of _)")), + ("155", As_U.Tus ("URY"), + As_U.Tus ("Uruguay (Eastern Republic of _)")), + ("156", As_U.Tus ("KHM"), + As_U.Tus ("Cambodia (Kingdom of _)")), + ("157", As_U.Tus ("SYR"), + As_U.Tus ("Syria (Syrian Arab Republic)")), + ("158", As_U.Tus ("SEN"), + As_U.Tus ("Senegal (Republic of _)")), + ("159", As_U.Tus ("KGZ"), + As_U.Tus ("Kyrgyzstan (Kyrgyz Republic)")), + ("160", As_U.Tus ("BLR"), + As_U.Tus ("Belarus (Republic of _)")), + ("161", As_U.Tus ("GUY"), + As_U.Tus ("Guyana (Co-operative Republic of _)")), + ("162", As_U.Tus ("LAO"), + As_U.Tus ("Laos (Lao People's Democratic Republic)")), + ("163", As_U.Tus ("ROU"), + As_U.Tus ("Romania")), + ("164", As_U.Tus ("GHA"), + As_U.Tus ("Ghana (Republic of _)")), + ("165", As_U.Tus ("UGA"), + As_U.Tus ("Uganda (Republic of _)")), + ("166", As_U.Tus ("GBR"), + As_U.Tus ("United Kingdom" + & " (Scotland) (Great Britain) (England)" + & " (Northern Ireland) (Ireland, Northern) (Britain)" + & " (United Kingdom of Great Britain and Northern" + & " Ireland)")), + ("167", As_U.Tus ("GIN"), + As_U.Tus ("Guinea (Republic of _) (Guinea-Conakry)")), + ("168", As_U.Tus ("ECU"), + As_U.Tus ("Ecuador (Republic of _)")), + ("169", As_U.Tus ("ESH"), + As_U.Tus ("Western Sahara (Sahrawi Arab Democratic Republic)")), + ("170", As_U.Tus ("GAB"), + As_U.Tus ("Gabon (Gabonese Republic)")), + ("171", As_U.Tus ("NZL"), + As_U.Tus ("New Zealand")), + ("172", As_U.Tus ("BFA"), + As_U.Tus ("Burkina Faso")), + ("173", As_U.Tus ("PHL"), + As_U.Tus ("Philippines (Republic of the _)")), + ("174", As_U.Tus ("ITA"), + As_U.Tus ("Italy (Italian Republic)")), + ("175", As_U.Tus ("OMN"), + As_U.Tus ("Oman (Sultanate of _)")), + ("176", As_U.Tus ("POL"), + As_U.Tus ("Poland (Republic of _)")), + ("177", As_U.Tus ("CIV"), + As_U.Tus ("Ivory Coast" + & " (Cote d'Ivoire) (Republic of Cote d'Ivoire)")), + ("178", As_U.Tus ("NOR"), + As_U.Tus ("Norway (Kingdom of _)")), + ("179", As_U.Tus ("MYS"), + As_U.Tus ("Malaysia")), + ("180", As_U.Tus ("VNM"), + As_U.Tus ("Vietnam (Socialist Republic of _)")), + ("181", As_U.Tus ("FIN"), + As_U.Tus ("Finland (Republic of _)")), + ("182", As_U.Tus ("COG"), + As_U.Tus ("Congo-Brazzaville" + & " (West Congo) (Republic of the Congo)")), + ("183", As_U.Tus ("DEU"), + As_U.Tus ("Germany (Federal Republic of _)")), + ("184", As_U.Tus ("JPN"), + As_U.Tus ("Japan")), + ("185", As_U.Tus ("ZWE"), + As_U.Tus ("Zimbabwe (Republic of _)")), + ("186", As_U.Tus ("PRY"), + As_U.Tus ("Paraguay (Republic of _)")), + ("187", As_U.Tus ("IRQ"), + As_U.Tus ("Iraq (Republic of _)")), + ("188", As_U.Tus ("MAR"), + As_U.Tus ("Morocco (Kingdom of _)")), + ("189", As_U.Tus ("UZB"), + As_U.Tus ("Uzbekistan (Republic of _)")), + ("190", As_U.Tus ("SWE"), + As_U.Tus ("Sweden (Kingdom of _)")), + ("191", As_U.Tus ("PNG"), + As_U.Tus ("Papua New Guinea (Independent State of _)")), + ("192", As_U.Tus ("CMR"), + As_U.Tus ("Cameroon (Republic of _)")), + ("193", As_U.Tus ("TKM"), + As_U.Tus ("Turkmenistan")), + ("194", As_U.Tus ("ESP"), + As_U.Tus ("Spain (Kingdom of _)")), + ("195", As_U.Tus ("THA"), + As_U.Tus ("Thailand (Kingdom of _)")), + ("196", As_U.Tus ("YEM"), + As_U.Tus ("Yemen (Republic of _)")), + ("197", As_U.Tus ("FRA"), + As_U.Tus ("France (French Republic)")), + ("198", As_U.Tus ("ALA"), + As_U.Tus ("Aaland Islands")), + ("199", As_U.Tus ("KEN"), + As_U.Tus ("Kenya (Republic of _)")), + ("200", As_U.Tus ("BWA"), + As_U.Tus ("Botswana (Republic of _)")), + ("201", As_U.Tus ("MDG"), + As_U.Tus ("Madagascar (Republic of _)")), + ("202", As_U.Tus ("UKR"), + As_U.Tus ("Ukraine")), + ("203", As_U.Tus ("SSD"), + As_U.Tus ("South Sudan (Republic of _)")), + ("204", As_U.Tus ("CAF"), + As_U.Tus ("Central African Republic")), + ("205", As_U.Tus ("SOM"), + As_U.Tus ("Somalia (Federal Republic of _)")), + ("206", As_U.Tus ("AFG"), + As_U.Tus ("Afghanistan (Islamic Republic of _)")), + ("207", As_U.Tus ("MMR"), + As_U.Tus ("Myanmar (Republic of the Union of _) (Burma)")), + ("208", As_U.Tus ("ZMB"), + As_U.Tus ("Zambia (Republic of _)")), + ("209", As_U.Tus ("CHL"), + As_U.Tus ("Chile (Republic of _)")), + ("210", As_U.Tus ("TUR"), + As_U.Tus ("Turkey (Republic of _)")), + ("211", As_U.Tus ("PAK"), + As_U.Tus ("Pakistan (Islamic Republic of _)")), + ("212", As_U.Tus ("MOZ"), + As_U.Tus ("Mozambique (Republic of _)")), + ("213", As_U.Tus ("NAM"), + As_U.Tus ("Namibia (Republic of _)")), + ("214", As_U.Tus ("VEN"), + As_U.Tus ("Venezuela (Bolivarian Republic of _)")), + ("215", As_U.Tus ("NGA"), + As_U.Tus ("Nigeria (Federal Republic of _)")), + ("216", As_U.Tus ("TZA"), + As_U.Tus ("Tanzania (United Republic of _)")), + ("217", As_U.Tus ("EGY"), + As_U.Tus ("Egypt (Arab Republic of _)")), + ("218", As_U.Tus ("MRT"), + As_U.Tus ("Mauritania (Islamic Republic of _)")), + ("219", As_U.Tus ("BOL"), + As_U.Tus ("Bolivia (Plurinational State of _)")), + ("220", As_U.Tus ("ETH"), + As_U.Tus ("Ethiopia (Federal Democratic Republic of _)")), + ("221", As_U.Tus ("COL"), + As_U.Tus ("Colombia (Republic of _)")), + ("222", As_U.Tus ("ZAF"), + As_U.Tus ("South Africa (Republic of _)")), + ("223", As_U.Tus ("MLI"), + As_U.Tus ("Mali (Republic of _)")), + ("224", As_U.Tus ("AGO"), + As_U.Tus ("Angola (Republic of _)")), + ("225", As_U.Tus ("NER"), + As_U.Tus ("Niger (Republic of _)")), + ("226", As_U.Tus ("TCD"), + As_U.Tus ("Chad (Republic of _)")), + ("227", As_U.Tus ("PER"), + As_U.Tus ("Peru (Republic of _)")), + ("228", As_U.Tus ("MNG"), + As_U.Tus ("Mongolia")), + ("229", As_U.Tus ("IRN"), + As_U.Tus ("Iran (Persia) (Islamic Republic of _)")), + ("230", As_U.Tus ("LBY"), + As_U.Tus ("Libya")), + ("231", As_U.Tus ("SDN"), + As_U.Tus ("Sudan (Republic of the _)")), + ("232", As_U.Tus ("IDN"), + As_U.Tus ("Indonesia (Republic of _)")), + ("233", As_U.Tus ("MX-DIF"), + As_U.Tus ("Federal District")), + ("234", As_U.Tus ("MX-TLA"), + As_U.Tus ("Tlaxcala")), + ("235", As_U.Tus ("MX-MOR"), + As_U.Tus ("Morelos")), + ("236", As_U.Tus ("MX-AGU"), + As_U.Tus ("Aguascalientes")), + ("237", As_U.Tus ("MX-CL"), + As_U.Tus ("Colima")), + ("238", As_U.Tus ("MX-QUE"), + As_U.Tus ("Queretaro")), + ("239", As_U.Tus ("MX-HID"), + As_U.Tus ("Hidalgo")), + ("240", As_U.Tus ("MX-MX"), + As_U.Tus ("Mexico State")), + ("241", As_U.Tus ("MX-TAB"), + As_U.Tus ("Tabasco")), + ("242", As_U.Tus ("MX-NAY"), + As_U.Tus ("Nayarit")), + ("243", As_U.Tus ("MX-GUA"), + As_U.Tus ("Guanajuato")), + ("244", As_U.Tus ("MX-PUE"), + As_U.Tus ("Puebla")), + ("245", As_U.Tus ("MX-YUC"), + As_U.Tus ("Yucatan")), + ("246", As_U.Tus ("MX-ROO"), + As_U.Tus ("Quintana Roo")), + ("247", As_U.Tus ("MX-SIN"), + As_U.Tus ("Sinaloa")), + ("248", As_U.Tus ("MX-CAM"), + As_U.Tus ("Campeche")), + ("249", As_U.Tus ("MX-MIC"), + As_U.Tus ("Michoacan")), + ("250", As_U.Tus ("MX-SLP"), + As_U.Tus ("San Luis Potosi")), + ("251", As_U.Tus ("MX-GRO"), + As_U.Tus ("Guerrero")), + ("252", As_U.Tus ("MX-NLE"), + As_U.Tus ("Nuevo Leon (New Leon)")), + ("253", As_U.Tus ("MX-BCN"), + As_U.Tus ("Baja California")), + ("254", As_U.Tus ("MX-VER"), + As_U.Tus ("Veracruz")), + ("255", As_U.Tus ("MX-CHP"), + As_U.Tus ("Chiapas")), + ("256", As_U.Tus ("MX-BCS"), + As_U.Tus ("Baja California Sur")), + ("257", As_U.Tus ("MX-ZAC"), + As_U.Tus ("Zacatecas")), + ("258", As_U.Tus ("MX-JAL"), + As_U.Tus ("Jalisco")), + ("259", As_U.Tus ("MX-TAM"), + As_U.Tus ("Tamaulipas")), + ("260", As_U.Tus ("MX-OAX"), + As_U.Tus ("Oaxaca")), + ("261", As_U.Tus ("MX-DUR"), + As_U.Tus ("Durango")), + ("262", As_U.Tus ("MX-COA"), + As_U.Tus ("Coahuila")), + ("263", As_U.Tus ("MX-SON"), + As_U.Tus ("Sonora")), + ("264", As_U.Tus ("MX-CHH"), + As_U.Tus ("Chihuahua")), + ("265", As_U.Tus ("GRL"), + As_U.Tus ("Greenland")), + ("266", As_U.Tus ("SAU"), + As_U.Tus ("Saudi Arabia (Kingdom of _)")), + ("267", As_U.Tus ("COD"), + As_U.Tus ("Congo-Kinshasa" + & " (Democratic Republic of the Congo) (East Congo)")), + ("268", As_U.Tus ("DZA"), + As_U.Tus ("Algeria (People's Democratic Republic of _)")), + ("269", As_U.Tus ("KAZ"), + As_U.Tus ("Kazakhstan (Republic of _)")), + ("270", As_U.Tus ("ARG"), + As_U.Tus ("Argentina (Argentine Republic)")), + ("271", As_U.Tus ("IN-DD"), + As_U.Tus ("Daman and Diu")), + ("272", As_U.Tus ("IN-DN"), + As_U.Tus ("Dadra and Nagar Haveli (Dadra) (Nagar Haveli)")), + ("273", As_U.Tus ("IN-CH"), + As_U.Tus ("Chandigarh")), + ("274", As_U.Tus ("IN-AN"), + As_U.Tus ("Andaman and Nicobar (Andaman) (Nicobar)")), + ("275", As_U.Tus ("IN-LD"), + As_U.Tus ("Lakshadweep")), + ("276", As_U.Tus ("IN-DL"), + As_U.Tus ("Delhi (National Capital Territory of _)")), + ("277", As_U.Tus ("IN-ML"), + As_U.Tus ("Meghalaya")), + ("278", As_U.Tus ("IN-NL"), + As_U.Tus ("Nagaland")), + ("279", As_U.Tus ("IN-MN"), + As_U.Tus ("Manipur")), + ("280", As_U.Tus ("IN-TR"), + As_U.Tus ("Tripura")), + ("281", As_U.Tus ("IN-MZ"), + As_U.Tus ("Mizoram")), + ("282", As_U.Tus ("IN-SK"), + As_U.Tus ("Sikkim")), + ("283", As_U.Tus ("IN-PB"), + As_U.Tus ("Punjab")), + ("284", As_U.Tus ("IN-HR"), + As_U.Tus ("Haryana")), + ("285", As_U.Tus ("IN-AR"), + As_U.Tus ("Arunachal Pradesh")), + ("286", As_U.Tus ("IN-AS"), + As_U.Tus ("Assam")), + ("287", As_U.Tus ("IN-BR"), + As_U.Tus ("Bihar")), + ("288", As_U.Tus ("IN-UT"), + As_U.Tus ("Uttarakhand")), + ("289", As_U.Tus ("IN-GA"), + As_U.Tus ("Goa")), + ("290", As_U.Tus ("IN-KL"), + As_U.Tus ("Kerala")), + ("291", As_U.Tus ("IN-TN"), + As_U.Tus ("Tamil Nadu")), + ("292", As_U.Tus ("IN-HP"), + As_U.Tus ("Himachal Pradesh")), + ("293", As_U.Tus ("IN-JK"), + As_U.Tus ("Jammu and Kashmir (Jammu) (Kashmir)")), + ("294", As_U.Tus ("IN-CT"), + As_U.Tus ("Chhattisgarh")), + ("295", As_U.Tus ("IN-JH"), + As_U.Tus ("Jharkhand")), + ("296", As_U.Tus ("IN-KA"), + As_U.Tus ("Karnataka")), + ("297", As_U.Tus ("IN-RJ"), + As_U.Tus ("Rajasthan")), + ("298", As_U.Tus ("IN-OR"), + As_U.Tus ("Odisha (Orissa)")), + ("299", As_U.Tus ("IN-GJ"), + As_U.Tus ("Gujarat")), + ("300", As_U.Tus ("IN-WB"), + As_U.Tus ("West Bengal")), + ("301", As_U.Tus ("IN-MP"), + As_U.Tus ("Madhya Pradesh")), + ("302", As_U.Tus ("IN-TG"), + As_U.Tus ("Telangana")), + ("303", As_U.Tus ("IN-AP"), + As_U.Tus ("Andhra Pradesh")), + ("304", As_U.Tus ("IN-MH"), + As_U.Tus ("Maharashtra")), + ("305", As_U.Tus ("IN-UP"), + As_U.Tus ("Uttar Pradesh")), + ("306", As_U.Tus ("IN-PY"), + As_U.Tus ("Puducherry")), + ("307", As_U.Tus ("AU-NSW"), + As_U.Tus ("New South Wales")), + ("308", As_U.Tus ("AU-ACT"), + As_U.Tus ("Australian Capital Territory")), + ("309", As_U.Tus ("AU-JBT"), + As_U.Tus ("Jervis Bay Territory")), + ("310", As_U.Tus ("AU-NT"), + As_U.Tus ("Northern Territory")), + ("311", As_U.Tus ("AU-SA"), + As_U.Tus ("South Australia")), + ("312", As_U.Tus ("AU-TAS"), + As_U.Tus ("Tasmania")), + ("313", As_U.Tus ("AU-VIC"), + As_U.Tus ("Victoria")), + ("314", As_U.Tus ("AU-WA"), + As_U.Tus ("Western Australia")), + ("315", As_U.Tus ("AU-QLD"), + As_U.Tus ("Queensland")), + ("316", As_U.Tus ("BR-DF"), + As_U.Tus ("Distrito Federal")), + ("317", As_U.Tus ("BR-SE"), + As_U.Tus ("Sergipe")), + ("318", As_U.Tus ("BR-AL"), + As_U.Tus ("Alagoas")), + ("319", As_U.Tus ("BR-RJ"), + As_U.Tus ("Rio de Janeiro")), + ("320", As_U.Tus ("BR-ES"), + As_U.Tus ("Espirito Santo")), + ("321", As_U.Tus ("BR-RN"), + As_U.Tus ("Rio Grande do Norte")), + ("322", As_U.Tus ("BR-PB"), + As_U.Tus ("Paraiba")), + ("323", As_U.Tus ("BR-SC"), + As_U.Tus ("Santa Catarina")), + ("324", As_U.Tus ("BR-PE"), + As_U.Tus ("Pernambuco")), + ("325", As_U.Tus ("BR-AP"), + As_U.Tus ("Amapa")), + ("326", As_U.Tus ("BR-CE"), + As_U.Tus ("Ceara")), + ("327", As_U.Tus ("BR-AC"), + As_U.Tus ("Acre")), + ("328", As_U.Tus ("BR-PR"), + As_U.Tus ("Parana")), + ("329", As_U.Tus ("BR-RR"), + As_U.Tus ("Roraima")), + ("330", As_U.Tus ("BR-RO"), + As_U.Tus ("Rondonia")), + ("331", As_U.Tus ("BR-SP"), + As_U.Tus ("Sao Paulo")), + ("332", As_U.Tus ("BR-PI"), + As_U.Tus ("Piaui")), + ("333", As_U.Tus ("BR-TO"), + As_U.Tus ("Tocantins")), + ("334", As_U.Tus ("BR-RS"), + As_U.Tus ("Rio Grande do Sul")), + ("335", As_U.Tus ("BR-MA"), + As_U.Tus ("Maranhao")), + ("336", As_U.Tus ("BR-GO"), + As_U.Tus ("Goias")), + ("337", As_U.Tus ("BR-MS"), + As_U.Tus ("Mato Grosso do Sul")), + ("338", As_U.Tus ("BR-BA"), + As_U.Tus ("Bahia")), + ("339", As_U.Tus ("BR-MG"), + As_U.Tus ("Minas Gerais")), + ("340", As_U.Tus ("BR-MT"), + As_U.Tus ("Mato Grosso")), + ("341", As_U.Tus ("BR-PA"), + As_U.Tus ("Para")), + ("342", As_U.Tus ("BR-AM"), + As_U.Tus ("Amazonas")), + ("343", As_U.Tus ("US-DC"), + As_U.Tus ("District of Columbia (Washington, D.C.)")), + ("344", As_U.Tus ("US-RI"), + As_U.Tus ("Rhode Island")), + ("345", As_U.Tus ("US-DE"), + As_U.Tus ("Delaware")), + ("346", As_U.Tus ("US-CT"), + As_U.Tus ("Connecticut")), + ("347", As_U.Tus ("US-NJ"), + As_U.Tus ("New Jersey")), + ("348", As_U.Tus ("US-NH"), + As_U.Tus ("New Hampshire")), + ("349", As_U.Tus ("US-VT"), + As_U.Tus ("Vermont")), + ("350", As_U.Tus ("US-MA"), + As_U.Tus ("Massachusetts (Commonwealth of _)")), + ("351", As_U.Tus ("US-HI"), + As_U.Tus ("Hawaii")), + ("352", As_U.Tus ("US-MD"), + As_U.Tus ("Maryland")), + ("353", As_U.Tus ("US-WV"), + As_U.Tus ("West Virginia")), + ("354", As_U.Tus ("US-SC"), + As_U.Tus ("South Carolina")), + ("355", As_U.Tus ("US-ME"), + As_U.Tus ("Maine")), + ("356", As_U.Tus ("US-IN"), + As_U.Tus ("Indiana")), + ("357", As_U.Tus ("US-KY"), + As_U.Tus ("Kentucky (Commonwealth of _)")), + ("358", As_U.Tus ("US-TN"), + As_U.Tus ("Tennessee")), + ("359", As_U.Tus ("US-VA"), + As_U.Tus ("Virginia (Commonwealth of _)")), + ("360", As_U.Tus ("US-OH"), + As_U.Tus ("Ohio")), + ("361", As_U.Tus ("US-PA"), + As_U.Tus ("Pennsylvania (Commonwealth of _)")), + ("362", As_U.Tus ("US-MS"), + As_U.Tus ("Mississippi")), + ("363", As_U.Tus ("US-LA"), + As_U.Tus ("Louisiana")), + ("364", As_U.Tus ("US-AL"), + As_U.Tus ("Alabama")), + ("365", As_U.Tus ("US-AR"), + As_U.Tus ("Arkansas")), + ("366", As_U.Tus ("US-NC"), + As_U.Tus ("North Carolina")), + ("367", As_U.Tus ("US-NY"), + As_U.Tus ("New York")), + ("368", As_U.Tus ("US-IA"), + As_U.Tus ("Iowa")), + ("369", As_U.Tus ("US-IL"), + As_U.Tus ("Illinois")), + ("370", As_U.Tus ("US-GA"), + As_U.Tus ("Georgia")), + ("371", As_U.Tus ("US-WI"), + As_U.Tus ("Wisconsin")), + ("372", As_U.Tus ("US-FL"), + As_U.Tus ("Florida")), + ("373", As_U.Tus ("US-MO"), + As_U.Tus ("Missouri")), + ("374", As_U.Tus ("US-OK"), + As_U.Tus ("Oklahoma")), + ("375", As_U.Tus ("US-ND"), + As_U.Tus ("North Dakota")), + ("376", As_U.Tus ("US-WA"), + As_U.Tus ("Washington")), + ("377", As_U.Tus ("US-SD"), + As_U.Tus ("South Dakota")), + ("378", As_U.Tus ("US-NE"), + As_U.Tus ("Nebraska")), + ("379", As_U.Tus ("US-KS"), + As_U.Tus ("Kansas")), + ("380", As_U.Tus ("US-ID"), + As_U.Tus ("Idaho")), + ("381", As_U.Tus ("US-UT"), + As_U.Tus ("Utah")), + ("382", As_U.Tus ("US-MN"), + As_U.Tus ("Minnesota")), + ("383", As_U.Tus ("US-MI"), + As_U.Tus ("Michigan")), + ("384", As_U.Tus ("US-WY"), + As_U.Tus ("Wyoming")), + ("385", As_U.Tus ("US-OR"), + As_U.Tus ("Oregon")), + ("386", As_U.Tus ("US-CO"), + As_U.Tus ("Colorado")), + ("387", As_U.Tus ("US-NV"), + As_U.Tus ("Nevada")), + ("388", As_U.Tus ("US-AZ"), + As_U.Tus ("Arizona")), + ("389", As_U.Tus ("US-NM"), + As_U.Tus ("New Mexico")), + ("390", As_U.Tus ("US-MT"), + As_U.Tus ("Montana")), + ("391", As_U.Tus ("US-CA"), + As_U.Tus ("California")), + ("392", As_U.Tus ("US-TX"), + As_U.Tus ("Texas")), + ("393", As_U.Tus ("US-AK"), + As_U.Tus ("Alaska")), + ("394", As_U.Tus ("CA-BC"), + As_U.Tus ("British Columbia")), + ("395", As_U.Tus ("CA-AB"), + As_U.Tus ("Alberta")), + ("396", As_U.Tus ("CA-ON"), + As_U.Tus ("Ontario")), + ("397", As_U.Tus ("CA-QC"), + As_U.Tus ("Quebec")), + ("398", As_U.Tus ("CA-SK"), + As_U.Tus ("Saskatchewan")), + ("399", As_U.Tus ("CA-MB"), + As_U.Tus ("Manitoba")), + ("400", As_U.Tus ("CA-NL"), + As_U.Tus ("Newfoundland and Labrador (Newfoundland) (Labrador)")), + ("401", As_U.Tus ("CA-NB"), + As_U.Tus ("New Brunswick")), + ("402", As_U.Tus ("CA-NS"), + As_U.Tus ("Nova Scotia")), + ("403", As_U.Tus ("CA-PE"), + As_U.Tus ("Prince Edward Island")), + ("404", As_U.Tus ("CA-YT"), + As_U.Tus ("Yukon")), + ("405", As_U.Tus ("CA-NT"), + As_U.Tus ("Northwest Territories")), + ("406", As_U.Tus ("CA-NU"), + As_U.Tus ("Nunavut")), + ("407", As_U.Tus ("IND"), + As_U.Tus ("India (Republic of _)")), + ("408", As_U.Tus ("AUS"), + As_U.Tus ("Australia (Commonwealth of _)")), + ("409", As_U.Tus ("BRA"), + As_U.Tus ("Brazil (Federative Republic of _)")), + ("410", As_U.Tus ("USA"), + As_U.Tus ("USA (United States of America) (America)")), + ("411", As_U.Tus ("MEX"), + As_U.Tus ("Mexico (United Mexican States)")), + ("412", As_U.Tus ("RU-MOW"), + As_U.Tus ("Moscow")), + ("413", As_U.Tus ("RU-SPE"), + As_U.Tus ("Saint Petersburg")), + ("414", As_U.Tus ("RU-KGD"), + As_U.Tus ("Kaliningrad Oblast")), + ("415", As_U.Tus ("RU-IN"), + As_U.Tus ("Ingushetia")), + ("416", As_U.Tus ("RU-AD"), + As_U.Tus ("Adygea Republic")), + ("417", As_U.Tus ("RU-SE"), + As_U.Tus ("North Ossetia-Alania Republic")), + ("418", As_U.Tus ("RU-KB"), + As_U.Tus ("Kabardino-Balkar Republic")), + ("419", As_U.Tus ("RU-KC"), + As_U.Tus ("Karachay-Cherkess Republic")), + ("420", As_U.Tus ("RU-CE"), + As_U.Tus ("Chechen Republic (Chechnya) (Ichkeria)")), + ("421", As_U.Tus ("RU-CU"), + As_U.Tus ("Chuvash Republic")), + ("422", As_U.Tus ("RU-IVA"), + As_U.Tus ("Ivanovo Oblast")), + ("423", As_U.Tus ("RU-LIP"), + As_U.Tus ("Lipetsk Oblast")), + ("424", As_U.Tus ("RU-ORL"), + As_U.Tus ("Oryol Oblast")), + ("425", As_U.Tus ("RU-TUL"), + As_U.Tus ("Tula Oblast")), + ("426", As_U.Tus ("RU-BE"), + As_U.Tus ("Belgorod Oblast")), + ("427", As_U.Tus ("RU-VLA"), + As_U.Tus ("Vladimir Oblast")), + ("428", As_U.Tus ("RU-KRS"), + As_U.Tus ("Kursk Oblast")), + ("429", As_U.Tus ("RU-KLU"), + As_U.Tus ("Kaluga Oblast")), + ("430", As_U.Tus ("RU-TT"), + As_U.Tus ("Tambov Oblast")), + ("431", As_U.Tus ("RU-BRY"), + As_U.Tus ("Bryansk Oblast")), + ("432", As_U.Tus ("RU-YAR"), + As_U.Tus ("Yaroslavl Oblast")), + ("433", As_U.Tus ("RU-RYA"), + As_U.Tus ("Ryazan Oblast")), + ("434", As_U.Tus ("RU-AST"), + As_U.Tus ("Astrakhan Oblast")), + ("435", As_U.Tus ("RU-MOS"), + As_U.Tus ("Moscow Oblast")), + ("436", As_U.Tus ("RU-SMO"), + As_U.Tus ("Smolensk Oblast")), + ("437", As_U.Tus ("RU-DA"), + As_U.Tus ("Dagestan Republic")), + ("438", As_U.Tus ("RU-VOR"), + As_U.Tus ("Voronezh Oblast")), + ("439", As_U.Tus ("RU-NGR"), + As_U.Tus ("Novgorod Oblast")), + ("440", As_U.Tus ("RU-PSK"), + As_U.Tus ("Pskov Oblast")), + ("441", As_U.Tus ("RU-KOS"), + As_U.Tus ("Kostroma Oblast")), + ("442", As_U.Tus ("RU-STA"), + As_U.Tus ("Stavropol Krai")), + ("443", As_U.Tus ("RU-KDA"), + As_U.Tus ("Krasnodar Krai")), + ("444", As_U.Tus ("RU-KL"), + As_U.Tus ("Kalmykia Republic")), + ("445", As_U.Tus ("RU-TVE"), + As_U.Tus ("Tver Oblast")), + ("446", As_U.Tus ("RU-LEN"), + As_U.Tus ("Leningrad Oblast")), + ("447", As_U.Tus ("RU-ROS"), + As_U.Tus ("Rostov Oblast")), + ("448", As_U.Tus ("RU-VGG"), + As_U.Tus ("Volgograd Oblast")), + ("449", As_U.Tus ("RU-VLG"), + As_U.Tus ("Vologda Oblast")), + ("450", As_U.Tus ("RU-MUR"), + As_U.Tus ("Murmansk Oblast")), + ("451", As_U.Tus ("RU-KR"), + As_U.Tus ("Karelia Republic")), + ("452", As_U.Tus ("RU-NEN"), + As_U.Tus ("Nenets Autonomous Okrug")), + ("453", As_U.Tus ("RU-KO"), + As_U.Tus ("Komi Republic")), + ("454", As_U.Tus ("RU-ARK"), + As_U.Tus ("Arkhangelsk Oblast")), + ("455", As_U.Tus ("RU-MO"), + As_U.Tus ("Mordovia Republic")), + ("456", As_U.Tus ("RU-NIZ"), + As_U.Tus ("Nizhny Novgorod Oblast")), + ("457", As_U.Tus ("RU-PNZ"), + As_U.Tus ("Penza Oblast")), + ("458", As_U.Tus ("RU-KI"), + As_U.Tus ("Kirov Oblast")), + ("459", As_U.Tus ("RU-ME"), + As_U.Tus ("Mari El Republic")), + ("460", As_U.Tus ("RU-ORE"), + As_U.Tus ("Orenburg Oblast")), + ("461", As_U.Tus ("RU-ULY"), + As_U.Tus ("Ulyanovsk Oblast")), + ("462", As_U.Tus ("RU-PM"), + As_U.Tus ("Perm Krai")), + ("463", As_U.Tus ("RU-BA"), + As_U.Tus ("Bashkortostan Republic")), + ("464", As_U.Tus ("RU-UD"), + As_U.Tus ("Udmurt Republic")), + ("465", As_U.Tus ("RU-TA"), + As_U.Tus ("Tatarstan Republic")), + ("466", As_U.Tus ("RU-SAM"), + As_U.Tus ("Samara Oblast")), + ("467", As_U.Tus ("RU-SAR"), + As_U.Tus ("Saratov Oblast")), + ("468", As_U.Tus ("RU-YAN"), + As_U.Tus ("Yamalo-Nenets")), + ("469", As_U.Tus ("RU-KM"), + As_U.Tus ("Khanty-Mansi")), + ("470", As_U.Tus ("RU-SVE"), + As_U.Tus ("Sverdlovsk Oblast")), + ("471", As_U.Tus ("RU-TYU"), + As_U.Tus ("Tyumen Oblast")), + ("472", As_U.Tus ("RU-KGN"), + As_U.Tus ("Kurgan Oblast")), + ("473", As_U.Tus ("RU-CH"), + As_U.Tus ("Chelyabinsk Oblast")), + ("474", As_U.Tus ("RU-BU"), + As_U.Tus ("Buryatia Republic")), + ("475", As_U.Tus ("RU-ZAB"), + As_U.Tus ("Zabaykalsky Krai")), + ("476", As_U.Tus ("RU-IRK"), + As_U.Tus ("Irkutsk Oblast")), + ("477", As_U.Tus ("RU-NVS"), + As_U.Tus ("Novosibirsk Oblast")), + ("478", As_U.Tus ("RU-TOM"), + As_U.Tus ("Tomsk Oblast")), + ("479", As_U.Tus ("RU-OMS"), + As_U.Tus ("Omsk Oblast")), + ("480", As_U.Tus ("RU-KK"), + As_U.Tus ("Khakassia Republic")), + ("481", As_U.Tus ("RU-KEM"), + As_U.Tus ("Kemerovo Oblast")), + ("482", As_U.Tus ("RU-AL"), + As_U.Tus ("Altai Republic")), + ("483", As_U.Tus ("RU-ALT"), + As_U.Tus ("Altai Krai")), + ("484", As_U.Tus ("RU-TY"), + As_U.Tus ("Tuva Republic")), + ("485", As_U.Tus ("RU-KYA"), + As_U.Tus ("Krasnoyarsk Krai")), + ("486", As_U.Tus ("RU-MAG"), + As_U.Tus ("Magadan Oblast")), + ("487", As_U.Tus ("RU-CHU"), + As_U.Tus ("Chukotka Okrug")), + ("488", As_U.Tus ("RU-KAM"), + As_U.Tus ("Kamchatka Krai")), + ("489", As_U.Tus ("RU-SAK"), + As_U.Tus ("Sakhalin Oblast")), + ("490", As_U.Tus ("RU-PO"), + As_U.Tus ("Primorsky Krai")), + ("491", As_U.Tus ("RU-YEV"), + As_U.Tus ("Jewish Autonomous Oblast")), + ("492", As_U.Tus ("RU-KHA"), + As_U.Tus ("Khabarovsk Krai")), + ("493", As_U.Tus ("RU-AMU"), + As_U.Tus ("Amur Oblast")), + ("494", As_U.Tus ("RU-SA"), + As_U.Tus ("Sakha Republic (Yakutia Republic)")), + ("495", As_U.Tus ("CAN"), + As_U.Tus ("Canada")), + ("496", As_U.Tus ("RUS"), + As_U.Tus ("Russia (Russian Federation)")), + ("497", As_U.Tus ("CN-SH"), + As_U.Tus ("Shanghai Municipality")), + ("498", As_U.Tus ("CN-TJ"), + As_U.Tus ("Tianjin Municipality")), + ("499", As_U.Tus ("CN-BJ"), + As_U.Tus ("Beijing Municipality")), + ("500", As_U.Tus ("CN-HI"), + As_U.Tus ("Hainan Province")), + ("501", As_U.Tus ("CN-NX"), + As_U.Tus ("Ningxia Hui Autonomous Region")), + ("502", As_U.Tus ("CN-CQ"), + As_U.Tus ("Chongqing Municipality")), + ("503", As_U.Tus ("CN-ZJ"), + As_U.Tus ("Zhejiang Province")), + ("504", As_U.Tus ("CN-JS"), + As_U.Tus ("Jiangsu Province")), + ("505", As_U.Tus ("CN-FJ"), + As_U.Tus ("Fujian Province")), + ("506", As_U.Tus ("CN-AH"), + As_U.Tus ("Anhui Province")), + ("507", As_U.Tus ("CN-LN"), + As_U.Tus ("Liaoning Province")), + ("508", As_U.Tus ("CN-SD"), + As_U.Tus ("Shandong Province")), + ("509", As_U.Tus ("CN-SX"), + As_U.Tus ("Shanxi Province")), + ("510", As_U.Tus ("CN-JX"), + As_U.Tus ("Jiangxi Province")), + ("511", As_U.Tus ("CN-HA"), + As_U.Tus ("Henan Province")), + ("512", As_U.Tus ("CN-GZ"), + As_U.Tus ("Guizhou Province")), + ("513", As_U.Tus ("CN-GD"), + As_U.Tus ("Guangdong Province")), + ("514", As_U.Tus ("CN-HB"), + As_U.Tus ("Hubei Province")), + ("515", As_U.Tus ("CN-JL"), + As_U.Tus ("Jilin Province")), + ("516", As_U.Tus ("CN-HE"), + As_U.Tus ("Hebei Province (Yanzhao Province)")), + ("517", As_U.Tus ("CN-SN"), + As_U.Tus ("Shaanxi Province")), + ("518", As_U.Tus ("CN-NM"), + As_U.Tus ("Nei Mongol Autonomous Region (Inner Mongolia)")), + ("519", As_U.Tus ("CN-HL"), + As_U.Tus ("Heilongjiang Province")), + ("520", As_U.Tus ("CN-HN"), + As_U.Tus ("Hunan Province")), + ("521", As_U.Tus ("CN-GX"), + As_U.Tus ("Guangxi Zhuang Autonomous Region")), + ("522", As_U.Tus ("CN-SC"), + As_U.Tus ("Sichuan Province")), + ("523", As_U.Tus ("CN-YN"), + As_U.Tus ("Yunnan Province")), + ("524", As_U.Tus ("CN-XZ"), + As_U.Tus ("Xizang Autonomous Region (Tibet)")), + ("525", As_U.Tus ("CN-GS"), + As_U.Tus ("Gansu Province")), + ("526", As_U.Tus ("CN-QH"), + As_U.Tus ("Qinghai Province (Tsinghai Province)")), + ("527", As_U.Tus ("CN-XJ"), + As_U.Tus ("Xinjiang Uyghur Autonomous Region")), + ("528", As_U.Tus ("CHN"), + As_U.Tus ("China (People's Republic of _)")), + ("529", As_U.Tus ("UMI"), + As_U.Tus ("United States Minor Outlying Islands")), + ("530", As_U.Tus ("CPT"), + As_U.Tus ("Clipperton Island")), + ("531", As_U.Tus ("ATA"), + As_U.Tus ("Antarctica")), + ("532", As_U.Tus ("AAA"), + As_U.Tus ("International (Worldwide) (Earth)")) + ); + +end Countries; + diff --git a/src/ctrynams.ads b/src/ctrynams.ads deleted file mode 100644 index 0cf8194..0000000 --- a/src/ctrynams.ads +++ /dev/null @@ -1,558 +0,0 @@ --- ----------------------------------------------------------------------------- --- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) --- --- Licensed under the Apache License, Version 2.0 (the "License"); --- you may not use this file except in compliance with the License. --- You may obtain a copy of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, --- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --- See the License for the specific language governing permissions and --- limitations under the License. --- ----------------------------------------------------------------------------- - -with Mapcode_Utils.As_U; -use Mapcode_Utils; -package Ctrynams is - -Isofullname : constant array (Positive range <>) of As_U.Asu_Us := ( -As_U.Tus ("Vatican (Holy See) (_ City State)"), -As_U.Tus ("Monaco (Principality of _)"), -As_U.Tus ("Gibraltar"), -As_U.Tus ("Tokelau"), -As_U.Tus ("Cocos Islands (Keeling Islands)"), -As_U.Tus ("Saint-Barthelemy (Collectivity of _)"), -As_U.Tus ("Nauru (Republic of _)"), -As_U.Tus ("Tuvalu"), -As_U.Tus ("Macau (Aomen)"), -As_U.Tus ("Sint Maarten"), -As_U.Tus ("Saint Martin (Collectivity of _)"), -As_U.Tus ("Norfolk and Philip Island (Philip Island) (Norfolk Island)"), -As_U.Tus ("Pitcairn Islands (Pitcairn, Henderson, Ducie and Oeno Islands)"), -As_U.Tus ("Bouvet Island"), -As_U.Tus ("Bermuda (Somers Isles)"), -As_U.Tus ("British Indian Ocean Territory"), -As_U.Tus ("San Marino (Republic of _)"), -As_U.Tus ("Guernsey (Bailiwick of _)"), -As_U.Tus ("Anguilla"), -As_U.Tus ("Montserrat"), -As_U.Tus ("Jersey (Bailiwick of _)"), -As_U.Tus ("Christmas Island"), -As_U.Tus ("Wallis and Futuna (Futuna) (Wallis) (Collectivity of the _ Islands)"), -As_U.Tus ("British Virgin Islands (Virgin Islands, British)"), -As_U.Tus ("Liechtenstein (Principality of _)"), -As_U.Tus ("Aruba"), -As_U.Tus ("Marshall Islands (Republic of the _)"), -As_U.Tus ("American Samoa (Samoa, American)"), -As_U.Tus ("Cook Islands"), -As_U.Tus ("Saint Pierre and Miquelon (Miquelon) (Saint Pierre) (Collectivity of _)"), -As_U.Tus ("Niue"), -As_U.Tus ("Saint Kitts and Nevis (Nevis) (Saint Kitts) (Federation of _)"), -As_U.Tus ("Cayman islands"), -As_U.Tus ("Bonaire, St Eustasuis and Saba (Bonaire) (Saba) (St Eustasius)"), -As_U.Tus ("Maldives (Republic of _)"), -As_U.Tus ("Saint Helena, Ascension and Tristan da Cunha (Saint Helena) (Ascension) (Tristan da Cunha)"), -As_U.Tus ("Malta (Republic of _)"), -As_U.Tus ("Grenada"), -As_U.Tus ("Virgin Islands of the United States (US Virgin Islands) (American Virgin Islands)"), -As_U.Tus ("Mayotte (Maore)"), -As_U.Tus ("Svalbard and Jan Mayen (Svalbard) (Jan Mayen) (Spitsbergen)"), -As_U.Tus ("Saint Vincent and the Grenadines (Saint Vincent) (Grenadines)"), -As_U.Tus ("Heard Island and McDonald Islands (Heard Island) (McDonald Islands)"), -As_U.Tus ("Barbados"), -As_U.Tus ("Antigua and Barbuda (Antigua) (Barbuda)"), -As_U.Tus ("Curacao"), -As_U.Tus ("Seychelles (Republic of _)"), -As_U.Tus ("Palau (Republic of _)"), -As_U.Tus ("Northern Mariana Islands (Commonwealth of the _)"), -As_U.Tus ("Andorra (Principality of _) (Principality of the Valleys of _)"), -As_U.Tus ("Guam"), -As_U.Tus ("Isle of Mann (Mann)"), -As_U.Tus ("Saint Lucia"), -As_U.Tus ("Micronesia (Federated States of Micronesia)"), -As_U.Tus ("Singapore (Republic of _)"), -As_U.Tus ("Tonga (Kingdom of _)"), -As_U.Tus ("Dominica (Commonwealth of _)"), -As_U.Tus ("Bahrain (Kingdom of _)"), -As_U.Tus ("Kiribati (Republic of _)"), -As_U.Tus ("Turks and Caicos Islands (Turks Islands) (Caicos Islands)"), -As_U.Tus ("Sao Tome and Principe (Sao Tome) (Principe) (Democratic Republic of _)"), -As_U.Tus ("Hong Kong (Xianggang)"), -As_U.Tus ("Martinique"), -As_U.Tus ("Faroe Islands"), -As_U.Tus ("Guadeloupe"), -As_U.Tus ("Comoros (Union of the _)"), -As_U.Tus ("Mauritius (Republic of _)"), -As_U.Tus ("Reunion"), -As_U.Tus ("Luxembourg (Grand Duchy of _)"), -As_U.Tus ("Samoa (Independent State of _)"), -As_U.Tus ("South Georgia and the South Sandwich Islands (South Georgia) (South Sandwich Islands)"), -As_U.Tus ("French Polynesia (Collectivity of _)"), -As_U.Tus ("Cape Verde (Cabo Verde) (Republic of Cabo Verde)"), -As_U.Tus ("Trinidad and Tobago (Republic of _) (Trinidad) (Tobago)"), -As_U.Tus ("Brunei (Nation of _, the Abode of Peace)"), -As_U.Tus ("French Southern and Antarctic Lands"), -As_U.Tus ("Puerto Rico (Commonwealth of _)"), -As_U.Tus ("Cyprus (Republic of _)"), -As_U.Tus ("Lebanon (Lebanese Republic)"), -As_U.Tus ("Jamaica"), -As_U.Tus ("Gambia (The Gambia) (Republic of the _)"), -As_U.Tus ("Qatar (State of _)"), -As_U.Tus ("Falkland Islands (The Falklands)"), -As_U.Tus ("Vanuatu (Republic of _)"), -As_U.Tus ("Montenegro"), -As_U.Tus ("Bahamas (Commonwealth of the _)"), -As_U.Tus ("Timor-Leste (Democratic Republic of _) (East Timor)"), -As_U.Tus ("Swaziland (Kingdom of _)"), -As_U.Tus ("Kuwait (State of _)"), -As_U.Tus ("Fiji (Republic of _)"), -As_U.Tus ("New Caledonia"), -As_U.Tus ("Slovenia (Republic of _)"), -As_U.Tus ("Israel (State of _)"), -As_U.Tus ("Palestinian territories (State of Palestine)"), -As_U.Tus ("El Salvador (Republic of _)"), -As_U.Tus ("Belize"), -As_U.Tus ("Djibouti (Republic of _)"), -As_U.Tus ("Macedonia (Republic of _) (FYROM) (Former Yugoslav Republic of Macedonia)"), -As_U.Tus ("Rwanda (Republic of _)"), -As_U.Tus ("Haiti (Republic of _)"), -As_U.Tus ("Burundi (Republic of _)"), -As_U.Tus ("Equatorial Guinea (Republic of _)"), -As_U.Tus ("Albania (Republic of _)"), -As_U.Tus ("Solomon Islands"), -As_U.Tus ("Armenia (Republic of _)"), -As_U.Tus ("Lesotho (Kingdom of _)"), -As_U.Tus ("Belgium (Kingdom of _)"), -As_U.Tus ("Moldova (Republic of _)"), -As_U.Tus ("Guinea-Bissau (Republic of _)"), -As_U.Tus ("Taiwan (Republic of China)"), -As_U.Tus ("Bhutan (Kingdom of _)"), -As_U.Tus ("Switzerland (Swiss Confederation)"), -As_U.Tus ("Netherlands (The Netherlands) (Kingdom of the _)"), -As_U.Tus ("Denmark (Kingdom of _)"), -As_U.Tus ("Estonia (Republic of _)"), -As_U.Tus ("Dominican Republic"), -As_U.Tus ("Slovakia (Slovak Republic)"), -As_U.Tus ("Costa Rica (Republic of _)"), -As_U.Tus ("Bosnia and Herzegovina"), -As_U.Tus ("Croatia (Republic of _)"), -As_U.Tus ("Togo (Togolese Republic)"), -As_U.Tus ("Latvia (Republic of _)"), -As_U.Tus ("Lithuania (Republic of _)"), -As_U.Tus ("Sri Lanka (Democratic Socialist Republic of _)"), -As_U.Tus ("Georgia"), -As_U.Tus ("Ireland (Republic of _)"), -As_U.Tus ("Sierra Leone (Republic of _)"), -As_U.Tus ("Panama (Republic of _)"), -As_U.Tus ("Czech Republic"), -As_U.Tus ("French Guiana (Guiana)"), -As_U.Tus ("United Arab Emirates (Emirates)"), -As_U.Tus ("Austria (Republic of _)"), -As_U.Tus ("Azerbaijan (Republic of _)"), -As_U.Tus ("Serbia (Republic of _)"), -As_U.Tus ("Jordan (Hashemite Kingdom of _) (Kingdom of _)"), -As_U.Tus ("Portugal (Portuguese Republic)"), -As_U.Tus ("Hungary (Republic of _)"), -As_U.Tus ("South Korea (Republic of Korea) (Korea, South)"), -As_U.Tus ("Iceland"), -As_U.Tus ("Guatemala (Republic of _)"), -As_U.Tus ("Cuba (Republic of _)"), -As_U.Tus ("Bulgaria (Republic of _)"), -As_U.Tus ("Liberia (Republic of _)"), -As_U.Tus ("Honduras (Republic of _)"), -As_U.Tus ("Benin (Republic of _)"), -As_U.Tus ("Eritrea (State of _)"), -As_U.Tus ("Malawi (Republic of _)"), -As_U.Tus ("North Korea (Democratic People's Republic of Korea) (Korea, North)"), -As_U.Tus ("Nicaragua (Republic of _)"), -As_U.Tus ("Greece (Hellenic Republic) (Hellas)"), -As_U.Tus ("Tajikistan (Republic of _)"), -As_U.Tus ("Bangladesh (People's Republic of _)"), -As_U.Tus ("Nepal (Federal Democratic Republic of _)"), -As_U.Tus ("Tunisia (Tunisian Republic) (Republic of _)"), -As_U.Tus ("Suriname (Republic of _)"), -As_U.Tus ("Uruguay (Eastern Republic of _)"), -As_U.Tus ("Cambodia (Kingdom of _)"), -As_U.Tus ("Syria (Syrian Arab Republic)"), -As_U.Tus ("Senegal (Republic of _)"), -As_U.Tus ("Kyrgyzstan (Kyrgyz Republic)"), -As_U.Tus ("Belarus (Republic of _)"), -As_U.Tus ("Guyana (Co-operative Republic of _)"), -As_U.Tus ("Laos (Lao People's Democratic Republic)"), -As_U.Tus ("Romania"), -As_U.Tus ("Ghana (Republic of _)"), -As_U.Tus ("Uganda (Republic of _)"), -As_U.Tus ("United Kingdom (Scotland) (Great Britain) (England) " - & "(Northern Ireland) (Ireland, Northern) (Britain) " - & "(United Kingdom of Great Britain and Northern Ireland)"), -As_U.Tus ("Guinea (Republic of _) (Guinea-Conakry)"), -As_U.Tus ("Ecuador (Republic of _)"), -As_U.Tus ("Western Sahara (Sahrawi Arab Democratic Republic)"), -As_U.Tus ("Gabon (Gabonese Republic)"), -As_U.Tus ("New Zealand"), -As_U.Tus ("Burkina Faso"), -As_U.Tus ("Philippines (Republic of the _)"), -As_U.Tus ("Italy (Italian Republic)"), -As_U.Tus ("Oman (Sultanate of _)"), -As_U.Tus ("Poland (Republic of _)"), -As_U.Tus ("Ivory Coast (Cote d'Ivoire) (Republic of Cote d'Ivoire)"), -As_U.Tus ("Norway (Kingdom of _)"), -As_U.Tus ("Malaysia"), -As_U.Tus ("Vietnam (Socialist Republic of _)"), -As_U.Tus ("Finland (Republic of _)"), -As_U.Tus ("Congo-Brazzaville (West Congo) (Republic of the Congo)"), -As_U.Tus ("Germany (Federal Republic of _)"), -As_U.Tus ("Japan"), -As_U.Tus ("Zimbabwe (Republic of _)"), -As_U.Tus ("Paraguay (Republic of _)"), -As_U.Tus ("Iraq (Republic of _)"), -As_U.Tus ("Morocco (Kingdom of _)"), -As_U.Tus ("Uzbekistan (Republic of _)"), -As_U.Tus ("Sweden (Kingdom of _)"), -As_U.Tus ("Papua New Guinea (Independent State of _)"), -As_U.Tus ("Cameroon (Republic of _)"), -As_U.Tus ("Turkmenistan"), -As_U.Tus ("Spain (Kingdom of _)"), -As_U.Tus ("Thailand (Kingdom of _)"), -As_U.Tus ("Yemen (Republic of _)"), -As_U.Tus ("France (French Republic)"), -As_U.Tus ("Aaland Islands"), -As_U.Tus ("Kenya (Republic of _)"), -As_U.Tus ("Botswana (Republic of _)"), -As_U.Tus ("Madagascar (Republic of _)"), -As_U.Tus ("Ukraine"), -As_U.Tus ("South Sudan (Republic of _)"), -As_U.Tus ("Central African Republic"), -As_U.Tus ("Somalia (Federal Republic of _)"), -As_U.Tus ("Afghanistan (Islamic Republic of _)"), -As_U.Tus ("Myanmar (Republic of the Union of _) (Burma)"), -As_U.Tus ("Zambia (Republic of _)"), -As_U.Tus ("Chile (Republic of _)"), -As_U.Tus ("Turkey (Republic of _)"), -As_U.Tus ("Pakistan (Islamic Republic of _)"), -As_U.Tus ("Mozambique (Republic of _)"), -As_U.Tus ("Namibia (Republic of _)"), -As_U.Tus ("Venezuela (Bolivarian Republic of _)"), -As_U.Tus ("Nigeria (Federal Republic of _)"), -As_U.Tus ("Tanzania (United Republic of _)"), -As_U.Tus ("Egypt (Arab Republic of _)"), -As_U.Tus ("Mauritania (Islamic Republic of _)"), -As_U.Tus ("Bolivia (Plurinational State of _)"), -As_U.Tus ("Ethiopia (Federal Democratic Republic of _)"), -As_U.Tus ("Colombia (Republic of _)"), -As_U.Tus ("South Africa (Republic of _)"), -As_U.Tus ("Mali (Republic of _)"), -As_U.Tus ("Angola (Republic of _)"), -As_U.Tus ("Niger (Republic of _)"), -As_U.Tus ("Chad (Republic of _)"), -As_U.Tus ("Peru (Republic of _)"), -As_U.Tus ("Mongolia"), -As_U.Tus ("Iran (Persia) (Islamic Republic of _)"), -As_U.Tus ("Libya"), -As_U.Tus ("Sudan (Republic of the _)"), -As_U.Tus ("Indonesia (Republic of _)"), -As_U.Tus ("Federal District"), -As_U.Tus ("Tlaxcala"), -As_U.Tus ("Morelos"), -As_U.Tus ("Aguascalientes"), -As_U.Tus ("Colima"), -As_U.Tus ("Queretaro"), -As_U.Tus ("Hidalgo"), -As_U.Tus ("Mexico State"), -As_U.Tus ("Tabasco"), -As_U.Tus ("Nayarit"), -As_U.Tus ("Guanajuato"), -As_U.Tus ("Puebla"), -As_U.Tus ("Yucatan"), -As_U.Tus ("Quintana Roo"), -As_U.Tus ("Sinaloa"), -As_U.Tus ("Campeche"), -As_U.Tus ("Michoacan"), -As_U.Tus ("San Luis Potosi"), -As_U.Tus ("Guerrero"), -As_U.Tus ("Nuevo Leon (New Leon)"), -As_U.Tus ("Baja California"), -As_U.Tus ("Veracruz"), -As_U.Tus ("Chiapas"), -As_U.Tus ("Baja California Sur"), -As_U.Tus ("Zacatecas"), -As_U.Tus ("Jalisco"), -As_U.Tus ("Tamaulipas"), -As_U.Tus ("Oaxaca"), -As_U.Tus ("Durango"), -As_U.Tus ("Coahuila"), -As_U.Tus ("Sonora"), -As_U.Tus ("Chihuahua"), -As_U.Tus ("Greenland"), -As_U.Tus ("Saudi Arabia (Kingdom of _)"), -As_U.Tus ("Congo-Kinshasa (Democratic Republic of the Congo) (East Congo)"), -As_U.Tus ("Algeria (People's Democratic Republic of _)"), -As_U.Tus ("Kazakhstan (Republic of _)"), -As_U.Tus ("Argentina (Argentine Republic)"), -As_U.Tus ("Daman and Diu"), -As_U.Tus ("Dadra and Nagar Haveli (Dadra) (Nagar Haveli)"), -As_U.Tus ("Chandigarh"), -As_U.Tus ("Andaman and Nicobar (Andaman) (Nicobar)"), -As_U.Tus ("Lakshadweep"), -As_U.Tus ("Delhi (National Capital Territory of _)"), -As_U.Tus ("Meghalaya"), -As_U.Tus ("Nagaland"), -As_U.Tus ("Manipur"), -As_U.Tus ("Tripura"), -As_U.Tus ("Mizoram"), -As_U.Tus ("Sikkim"), -As_U.Tus ("Punjab"), -As_U.Tus ("Haryana"), -As_U.Tus ("Arunachal Pradesh"), -As_U.Tus ("Assam"), -As_U.Tus ("Bihar"), -As_U.Tus ("Uttarakhand"), -As_U.Tus ("Goa"), -As_U.Tus ("Kerala"), -As_U.Tus ("Tamil Nadu"), -As_U.Tus ("Himachal Pradesh"), -As_U.Tus ("Jammu and Kashmir (Jammu) (Kashmir)"), -As_U.Tus ("Chhattisgarh"), -As_U.Tus ("Jharkhand"), -As_U.Tus ("Karnataka"), -As_U.Tus ("Rajasthan"), -As_U.Tus ("Odisha (Orissa)"), -As_U.Tus ("Gujarat"), -As_U.Tus ("West Bengal"), -As_U.Tus ("Madhya Pradesh"), -As_U.Tus ("Telangana"), -As_U.Tus ("Andhra Pradesh"), -As_U.Tus ("Maharashtra"), -As_U.Tus ("Uttar Pradesh"), -As_U.Tus ("Puducherry"), -As_U.Tus ("New South Wales"), -As_U.Tus ("Australian Capital Territory"), -As_U.Tus ("Jervis Bay Territory"), -As_U.Tus ("Northern Territory"), -As_U.Tus ("South Australia"), -As_U.Tus ("Tasmania"), -As_U.Tus ("Victoria"), -As_U.Tus ("Western Australia"), -As_U.Tus ("Queensland"), -As_U.Tus ("Distrito Federal"), -As_U.Tus ("Sergipe"), -As_U.Tus ("Alagoas"), -As_U.Tus ("Rio de Janeiro"), -As_U.Tus ("Espirito Santo"), -As_U.Tus ("Rio Grande do Norte"), -As_U.Tus ("Paraiba"), -As_U.Tus ("Santa Catarina"), -As_U.Tus ("Pernambuco"), -As_U.Tus ("Amapa"), -As_U.Tus ("Ceara"), -As_U.Tus ("Acre"), -As_U.Tus ("Parana"), -As_U.Tus ("Roraima"), -As_U.Tus ("Rondonia"), -As_U.Tus ("Sao Paulo"), -As_U.Tus ("Piaui"), -As_U.Tus ("Tocantins"), -As_U.Tus ("Rio Grande do Sul"), -As_U.Tus ("Maranhao"), -As_U.Tus ("Goias"), -As_U.Tus ("Mato Grosso do Sul"), -As_U.Tus ("Bahia"), -As_U.Tus ("Minas Gerais"), -As_U.Tus ("Mato Grosso"), -As_U.Tus ("Para"), -As_U.Tus ("Amazonas"), -As_U.Tus ("District of Columbia (Washington, D.C.)"), -As_U.Tus ("Rhode Island"), -As_U.Tus ("Delaware"), -As_U.Tus ("Connecticut"), -As_U.Tus ("New Jersey"), -As_U.Tus ("New Hampshire"), -As_U.Tus ("Vermont"), -As_U.Tus ("Massachusetts (Commonwealth of _)"), -As_U.Tus ("Hawaii"), -As_U.Tus ("Maryland"), -As_U.Tus ("West Virginia"), -As_U.Tus ("South Carolina"), -As_U.Tus ("Maine"), -As_U.Tus ("Indiana"), -As_U.Tus ("Kentucky (Commonwealth of _)"), -As_U.Tus ("Tennessee"), -As_U.Tus ("Virginia (Commonwealth of _)"), -As_U.Tus ("Ohio"), -As_U.Tus ("Pennsylvania (Commonwealth of _)"), -As_U.Tus ("Mississippi"), -As_U.Tus ("Louisiana"), -As_U.Tus ("Alabama"), -As_U.Tus ("Arkansas"), -As_U.Tus ("North Carolina"), -As_U.Tus ("New York"), -As_U.Tus ("Iowa"), -As_U.Tus ("Illinois"), -As_U.Tus ("Georgia"), -As_U.Tus ("Wisconsin"), -As_U.Tus ("Florida"), -As_U.Tus ("Missouri"), -As_U.Tus ("Oklahoma"), -As_U.Tus ("North Dakota"), -As_U.Tus ("Washington"), -As_U.Tus ("South Dakota"), -As_U.Tus ("Nebraska"), -As_U.Tus ("Kansas"), -As_U.Tus ("Idaho"), -As_U.Tus ("Utah"), -As_U.Tus ("Minnesota"), -As_U.Tus ("Michigan"), -As_U.Tus ("Wyoming"), -As_U.Tus ("Oregon"), -As_U.Tus ("Colorado"), -As_U.Tus ("Nevada"), -As_U.Tus ("Arizona"), -As_U.Tus ("New Mexico"), -As_U.Tus ("Montana"), -As_U.Tus ("California"), -As_U.Tus ("Texas"), -As_U.Tus ("Alaska"), -As_U.Tus ("British Columbia"), -As_U.Tus ("Alberta"), -As_U.Tus ("Ontario"), -As_U.Tus ("Quebec"), -As_U.Tus ("Saskatchewan"), -As_U.Tus ("Manitoba"), -As_U.Tus ("Newfoundland and Labrador (Newfoundland) (Labrador)"), -As_U.Tus ("New Brunswick"), -As_U.Tus ("Nova Scotia"), -As_U.Tus ("Prince Edward Island"), -As_U.Tus ("Yukon"), -As_U.Tus ("Northwest Territories"), -As_U.Tus ("Nunavut"), -As_U.Tus ("India (Republic of _)"), -As_U.Tus ("Australia (Commonwealth of _)"), -As_U.Tus ("Brazil (Federative Republic of _)"), -As_U.Tus ("USA (United States of America) (America)"), -As_U.Tus ("Mexico (United Mexican States)"), -As_U.Tus ("Moscow"), -As_U.Tus ("Saint Petersburg"), -As_U.Tus ("Kaliningrad Oblast"), -As_U.Tus ("Ingushetia"), -As_U.Tus ("Adygea Republic"), -As_U.Tus ("North Ossetia-Alania Republic"), -As_U.Tus ("Kabardino-Balkar Republic"), -As_U.Tus ("Karachay-Cherkess Republic"), -As_U.Tus ("Chechen Republic (Chechnya) (Ichkeria)"), -As_U.Tus ("Chuvash Republic"), -As_U.Tus ("Ivanovo Oblast"), -As_U.Tus ("Lipetsk Oblast"), -As_U.Tus ("Oryol Oblast"), -As_U.Tus ("Tula Oblast"), -As_U.Tus ("Belgorod Oblast"), -As_U.Tus ("Vladimir Oblast"), -As_U.Tus ("Kursk Oblast"), -As_U.Tus ("Kaluga Oblast"), -As_U.Tus ("Tambov Oblast"), -As_U.Tus ("Bryansk Oblast"), -As_U.Tus ("Yaroslavl Oblast"), -As_U.Tus ("Ryazan Oblast"), -As_U.Tus ("Astrakhan Oblast"), -As_U.Tus ("Moscow Oblast"), -As_U.Tus ("Smolensk Oblast"), -As_U.Tus ("Dagestan Republic"), -As_U.Tus ("Voronezh Oblast"), -As_U.Tus ("Novgorod Oblast"), -As_U.Tus ("Pskov Oblast"), -As_U.Tus ("Kostroma Oblast"), -As_U.Tus ("Stavropol Krai"), -As_U.Tus ("Krasnodar Krai"), -As_U.Tus ("Kalmykia Republic"), -As_U.Tus ("Tver Oblast"), -As_U.Tus ("Leningrad Oblast"), -As_U.Tus ("Rostov Oblast"), -As_U.Tus ("Volgograd Oblast"), -As_U.Tus ("Vologda Oblast"), -As_U.Tus ("Murmansk Oblast"), -As_U.Tus ("Karelia Republic"), -As_U.Tus ("Nenets Autonomous Okrug"), -As_U.Tus ("Komi Republic"), -As_U.Tus ("Arkhangelsk Oblast"), -As_U.Tus ("Mordovia Republic"), -As_U.Tus ("Nizhny Novgorod Oblast"), -As_U.Tus ("Penza Oblast"), -As_U.Tus ("Kirov Oblast"), -As_U.Tus ("Mari El Republic"), -As_U.Tus ("Orenburg Oblast"), -As_U.Tus ("Ulyanovsk Oblast"), -As_U.Tus ("Perm Krai"), -As_U.Tus ("Bashkortostan Republic"), -As_U.Tus ("Udmurt Republic"), -As_U.Tus ("Tatarstan Republic"), -As_U.Tus ("Samara Oblast"), -As_U.Tus ("Saratov Oblast"), -As_U.Tus ("Yamalo-Nenets"), -As_U.Tus ("Khanty-Mansi"), -As_U.Tus ("Sverdlovsk Oblast"), -As_U.Tus ("Tyumen Oblast"), -As_U.Tus ("Kurgan Oblast"), -As_U.Tus ("Chelyabinsk Oblast"), -As_U.Tus ("Buryatia Republic"), -As_U.Tus ("Zabaykalsky Krai"), -As_U.Tus ("Irkutsk Oblast"), -As_U.Tus ("Novosibirsk Oblast"), -As_U.Tus ("Tomsk Oblast"), -As_U.Tus ("Omsk Oblast"), -As_U.Tus ("Khakassia Republic"), -As_U.Tus ("Kemerovo Oblast"), -As_U.Tus ("Altai Republic"), -As_U.Tus ("Altai Krai"), -As_U.Tus ("Tuva Republic"), -As_U.Tus ("Krasnoyarsk Krai"), -As_U.Tus ("Magadan Oblast"), -As_U.Tus ("Chukotka Okrug"), -As_U.Tus ("Kamchatka Krai"), -As_U.Tus ("Sakhalin Oblast"), -As_U.Tus ("Primorsky Krai"), -As_U.Tus ("Jewish Autonomous Oblast"), -As_U.Tus ("Khabarovsk Krai"), -As_U.Tus ("Amur Oblast"), -As_U.Tus ("Sakha Republic (Yakutia Republic)"), -As_U.Tus ("Canada"), -As_U.Tus ("Russia (Russian Federation)"), -As_U.Tus ("Shanghai Municipality"), -As_U.Tus ("Tianjin Municipality"), -As_U.Tus ("Beijing Municipality"), -As_U.Tus ("Hainan Province"), -As_U.Tus ("Ningxia Hui Autonomous Region"), -As_U.Tus ("Chongqing Municipality"), -As_U.Tus ("Zhejiang Province"), -As_U.Tus ("Jiangsu Province"), -As_U.Tus ("Fujian Province"), -As_U.Tus ("Anhui Province"), -As_U.Tus ("Liaoning Province"), -As_U.Tus ("Shandong Province"), -As_U.Tus ("Shanxi Province"), -As_U.Tus ("Jiangxi Province"), -As_U.Tus ("Henan Province"), -As_U.Tus ("Guizhou Province"), -As_U.Tus ("Guangdong Province"), -As_U.Tus ("Hubei Province"), -As_U.Tus ("Jilin Province"), -As_U.Tus ("Hebei Province (Yanzhao Province)"), -As_U.Tus ("Shaanxi Province"), -As_U.Tus ("Nei Mongol Autonomous Region (Inner Mongolia)"), -As_U.Tus ("Heilongjiang Province"), -As_U.Tus ("Hunan Province"), -As_U.Tus ("Guangxi Zhuang Autonomous Region"), -As_U.Tus ("Sichuan Province"), -As_U.Tus ("Yunnan Province"), -As_U.Tus ("Xizang Autonomous Region (Tibet)"), -As_U.Tus ("Gansu Province"), -As_U.Tus ("Qinghai Province (Tsinghai Province)"), -As_U.Tus ("Xinjiang Uyghur Autonomous Region"), -As_U.Tus ("China (People's Republic of _)"), -As_U.Tus ("United States Minor Outlying Islands"), -As_U.Tus ("Clipperton Island"), -As_U.Tus ("Antarctica"), -As_U.Tus ("International (Worldwide) (Earth)")); -end Ctrynams; - diff --git a/src/mapcodes.adb b/src/mapcodes.adb index 373739c..b10b515 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -27,545 +27,11 @@ package body Mapcodes is -- All functions returning a string may return Undefined, on error Undefined : constant String := ""; - Iso3166Alpha : constant array (Positive range <>) of As_U.Asu_Us := ( - As_U.Tus ("VAT"), - As_U.Tus ("MCO"), - As_U.Tus ("GIB"), - As_U.Tus ("TKL"), - As_U.Tus ("CCK"), - As_U.Tus ("BLM"), - As_U.Tus ("NRU"), - As_U.Tus ("TUV"), - As_U.Tus ("MAC"), - As_U.Tus ("SXM"), - As_U.Tus ("MAF"), - As_U.Tus ("NFK"), - As_U.Tus ("PCN"), - As_U.Tus ("BVT"), - As_U.Tus ("BMU"), - As_U.Tus ("IOT"), - As_U.Tus ("SMR"), - As_U.Tus ("GGY"), - As_U.Tus ("AIA"), - As_U.Tus ("MSR"), - As_U.Tus ("JEY"), - As_U.Tus ("CXR"), - As_U.Tus ("WLF"), - As_U.Tus ("VGB"), - As_U.Tus ("LIE"), - As_U.Tus ("ABW"), - As_U.Tus ("MHL"), - As_U.Tus ("ASM"), - As_U.Tus ("COK"), - As_U.Tus ("SPM"), - As_U.Tus ("NIU"), - As_U.Tus ("KNA"), - As_U.Tus ("CYM"), - As_U.Tus ("BES"), - As_U.Tus ("MDV"), - As_U.Tus ("SHN"), - As_U.Tus ("MLT"), - As_U.Tus ("GRD"), - As_U.Tus ("VIR"), - As_U.Tus ("MYT"), - As_U.Tus ("SJM"), - As_U.Tus ("VCT"), - As_U.Tus ("HMD"), - As_U.Tus ("BRB"), - As_U.Tus ("ATG"), - As_U.Tus ("CUW"), - As_U.Tus ("SYC"), - As_U.Tus ("PLW"), - As_U.Tus ("MNP"), - As_U.Tus ("AND"), - As_U.Tus ("GUM"), - As_U.Tus ("IMN"), - As_U.Tus ("LCA"), - As_U.Tus ("FSM"), - As_U.Tus ("SGP"), - As_U.Tus ("TON"), - As_U.Tus ("DMA"), - As_U.Tus ("BHR"), - As_U.Tus ("KIR"), - As_U.Tus ("TCA"), - As_U.Tus ("STP"), - As_U.Tus ("HKG"), - As_U.Tus ("MTQ"), - As_U.Tus ("FRO"), - As_U.Tus ("GLP"), - As_U.Tus ("COM"), - As_U.Tus ("MUS"), - As_U.Tus ("REU"), - As_U.Tus ("LUX"), - As_U.Tus ("WSM"), - As_U.Tus ("SGS"), - As_U.Tus ("PYF"), - As_U.Tus ("CPV"), - As_U.Tus ("TTO"), - As_U.Tus ("BRN"), - As_U.Tus ("ATF"), - As_U.Tus ("PRI"), - As_U.Tus ("CYP"), - As_U.Tus ("LBN"), - As_U.Tus ("JAM"), - As_U.Tus ("GMB"), - As_U.Tus ("QAT"), - As_U.Tus ("FLK"), - As_U.Tus ("VUT"), - As_U.Tus ("MNE"), - As_U.Tus ("BHS"), - As_U.Tus ("TLS"), - As_U.Tus ("SWZ"), - As_U.Tus ("KWT"), - As_U.Tus ("FJI"), - As_U.Tus ("NCL"), - As_U.Tus ("SVN"), - As_U.Tus ("ISR"), - As_U.Tus ("PSE"), - As_U.Tus ("SLV"), - As_U.Tus ("BLZ"), - As_U.Tus ("DJI"), - As_U.Tus ("MKD"), - As_U.Tus ("RWA"), - As_U.Tus ("HTI"), - As_U.Tus ("BDI"), - As_U.Tus ("GNQ"), - As_U.Tus ("ALB"), - As_U.Tus ("SLB"), - As_U.Tus ("ARM"), - As_U.Tus ("LSO"), - As_U.Tus ("BEL"), - As_U.Tus ("MDA"), - As_U.Tus ("GNB"), - As_U.Tus ("TWN"), - As_U.Tus ("BTN"), - As_U.Tus ("CHE"), - As_U.Tus ("NLD"), - As_U.Tus ("DNK"), - As_U.Tus ("EST"), - As_U.Tus ("DOM"), - As_U.Tus ("SVK"), - As_U.Tus ("CRI"), - As_U.Tus ("BIH"), - As_U.Tus ("HRV"), - As_U.Tus ("TGO"), - As_U.Tus ("LVA"), - As_U.Tus ("LTU"), - As_U.Tus ("LKA"), - As_U.Tus ("GEO"), - As_U.Tus ("IRL"), - As_U.Tus ("SLE"), - As_U.Tus ("PAN"), - As_U.Tus ("CZE"), - As_U.Tus ("GUF"), - As_U.Tus ("ARE"), - As_U.Tus ("AUT"), - As_U.Tus ("AZE"), - As_U.Tus ("SRB"), - As_U.Tus ("JOR"), - As_U.Tus ("PRT"), - As_U.Tus ("HUN"), - As_U.Tus ("KOR"), - As_U.Tus ("ISL"), - As_U.Tus ("GTM"), - As_U.Tus ("CUB"), - As_U.Tus ("BGR"), - As_U.Tus ("LBR"), - As_U.Tus ("HND"), - As_U.Tus ("BEN"), - As_U.Tus ("ERI"), - As_U.Tus ("MWI"), - As_U.Tus ("PRK"), - As_U.Tus ("NIC"), - As_U.Tus ("GRC"), - As_U.Tus ("TJK"), - As_U.Tus ("BGD"), - As_U.Tus ("NPL"), - As_U.Tus ("TUN"), - As_U.Tus ("SUR"), - As_U.Tus ("URY"), - As_U.Tus ("KHM"), - As_U.Tus ("SYR"), - As_U.Tus ("SEN"), - As_U.Tus ("KGZ"), - As_U.Tus ("BLR"), - As_U.Tus ("GUY"), - As_U.Tus ("LAO"), - As_U.Tus ("ROU"), - As_U.Tus ("GHA"), - As_U.Tus ("UGA"), - As_U.Tus ("GBR"), - As_U.Tus ("GIN"), - As_U.Tus ("ECU"), - As_U.Tus ("ESH"), - As_U.Tus ("GAB"), - As_U.Tus ("NZL"), - As_U.Tus ("BFA"), - As_U.Tus ("PHL"), - As_U.Tus ("ITA"), - As_U.Tus ("OMN"), - As_U.Tus ("POL"), - As_U.Tus ("CIV"), - As_U.Tus ("NOR"), - As_U.Tus ("MYS"), - As_U.Tus ("VNM"), - As_U.Tus ("FIN"), - As_U.Tus ("COG"), - As_U.Tus ("DEU"), - As_U.Tus ("JPN"), - As_U.Tus ("ZWE"), - As_U.Tus ("PRY"), - As_U.Tus ("IRQ"), - As_U.Tus ("MAR"), - As_U.Tus ("UZB"), - As_U.Tus ("SWE"), - As_U.Tus ("PNG"), - As_U.Tus ("CMR"), - As_U.Tus ("TKM"), - As_U.Tus ("ESP"), - As_U.Tus ("THA"), - As_U.Tus ("YEM"), - As_U.Tus ("FRA"), - As_U.Tus ("ALA"), - As_U.Tus ("KEN"), - As_U.Tus ("BWA"), - As_U.Tus ("MDG"), - As_U.Tus ("UKR"), - As_U.Tus ("SSD"), - As_U.Tus ("CAF"), - As_U.Tus ("SOM"), - As_U.Tus ("AFG"), - As_U.Tus ("MMR"), - As_U.Tus ("ZMB"), - As_U.Tus ("CHL"), - As_U.Tus ("TUR"), - As_U.Tus ("PAK"), - As_U.Tus ("MOZ"), - As_U.Tus ("NAM"), - As_U.Tus ("VEN"), - As_U.Tus ("NGA"), - As_U.Tus ("TZA"), - As_U.Tus ("EGY"), - As_U.Tus ("MRT"), - As_U.Tus ("BOL"), - As_U.Tus ("ETH"), - As_U.Tus ("COL"), - As_U.Tus ("ZAF"), - As_U.Tus ("MLI"), - As_U.Tus ("AGO"), - As_U.Tus ("NER"), - As_U.Tus ("TCD"), - As_U.Tus ("PER"), - As_U.Tus ("MNG"), - As_U.Tus ("IRN"), - As_U.Tus ("LBY"), - As_U.Tus ("SDN"), - As_U.Tus ("IDN"), - As_U.Tus ("MX-DIF"), - As_U.Tus ("MX-TLA"), - As_U.Tus ("MX-MOR"), - As_U.Tus ("MX-AGU"), - As_U.Tus ("MX-CL"), - As_U.Tus ("MX-QUE"), - As_U.Tus ("MX-HID"), - As_U.Tus ("MX-MX"), - As_U.Tus ("MX-TAB"), - As_U.Tus ("MX-NAY"), - As_U.Tus ("MX-GUA"), - As_U.Tus ("MX-PUE"), - As_U.Tus ("MX-YUC"), - As_U.Tus ("MX-ROO"), - As_U.Tus ("MX-SIN"), - As_U.Tus ("MX-CAM"), - As_U.Tus ("MX-MIC"), - As_U.Tus ("MX-SLP"), - As_U.Tus ("MX-GRO"), - As_U.Tus ("MX-NLE"), - As_U.Tus ("MX-BCN"), - As_U.Tus ("MX-VER"), - As_U.Tus ("MX-CHP"), - As_U.Tus ("MX-BCS"), - As_U.Tus ("MX-ZAC"), - As_U.Tus ("MX-JAL"), - As_U.Tus ("MX-TAM"), - As_U.Tus ("MX-OAX"), - As_U.Tus ("MX-DUR"), - As_U.Tus ("MX-COA"), - As_U.Tus ("MX-SON"), - As_U.Tus ("MX-CHH"), - As_U.Tus ("GRL"), - As_U.Tus ("SAU"), - As_U.Tus ("COD"), - As_U.Tus ("DZA"), - As_U.Tus ("KAZ"), - As_U.Tus ("ARG"), - As_U.Tus ("IN-DD"), - As_U.Tus ("IN-DN"), - As_U.Tus ("IN-CH"), - As_U.Tus ("IN-AN"), - As_U.Tus ("IN-LD"), - As_U.Tus ("IN-DL"), - As_U.Tus ("IN-ML"), - As_U.Tus ("IN-NL"), - As_U.Tus ("IN-MN"), - As_U.Tus ("IN-TR"), - As_U.Tus ("IN-MZ"), - As_U.Tus ("IN-SK"), - As_U.Tus ("IN-PB"), - As_U.Tus ("IN-HR"), - As_U.Tus ("IN-AR"), - As_U.Tus ("IN-AS"), - As_U.Tus ("IN-BR"), - As_U.Tus ("IN-UT"), - As_U.Tus ("IN-GA"), - As_U.Tus ("IN-KL"), - As_U.Tus ("IN-TN"), - As_U.Tus ("IN-HP"), - As_U.Tus ("IN-JK"), - As_U.Tus ("IN-CT"), - As_U.Tus ("IN-JH"), - As_U.Tus ("IN-KA"), - As_U.Tus ("IN-RJ"), - As_U.Tus ("IN-OR"), - As_U.Tus ("IN-GJ"), - As_U.Tus ("IN-WB"), - As_U.Tus ("IN-MP"), - As_U.Tus ("IN-TG"), - As_U.Tus ("IN-AP"), - As_U.Tus ("IN-MH"), - As_U.Tus ("IN-UP"), - As_U.Tus ("IN-PY"), - As_U.Tus ("AU-NSW"), - As_U.Tus ("AU-ACT"), - As_U.Tus ("AU-JBT"), - As_U.Tus ("AU-NT"), - As_U.Tus ("AU-SA"), - As_U.Tus ("AU-TAS"), - As_U.Tus ("AU-VIC"), - As_U.Tus ("AU-WA"), - As_U.Tus ("AU-QLD"), - As_U.Tus ("BR-DF"), - As_U.Tus ("BR-SE"), - As_U.Tus ("BR-AL"), - As_U.Tus ("BR-RJ"), - As_U.Tus ("BR-ES"), - As_U.Tus ("BR-RN"), - As_U.Tus ("BR-PB"), - As_U.Tus ("BR-SC"), - As_U.Tus ("BR-PE"), - As_U.Tus ("BR-AP"), - As_U.Tus ("BR-CE"), - As_U.Tus ("BR-AC"), - As_U.Tus ("BR-PR"), - As_U.Tus ("BR-RR"), - As_U.Tus ("BR-RO"), - As_U.Tus ("BR-SP"), - As_U.Tus ("BR-PI"), - As_U.Tus ("BR-TO"), - As_U.Tus ("BR-RS"), - As_U.Tus ("BR-MA"), - As_U.Tus ("BR-GO"), - As_U.Tus ("BR-MS"), - As_U.Tus ("BR-BA"), - As_U.Tus ("BR-MG"), - As_U.Tus ("BR-MT"), - As_U.Tus ("BR-PA"), - As_U.Tus ("BR-AM"), - As_U.Tus ("US-DC"), - As_U.Tus ("US-RI"), - As_U.Tus ("US-DE"), - As_U.Tus ("US-CT"), - As_U.Tus ("US-NJ"), - As_U.Tus ("US-NH"), - As_U.Tus ("US-VT"), - As_U.Tus ("US-MA"), - As_U.Tus ("US-HI"), - As_U.Tus ("US-MD"), - As_U.Tus ("US-WV"), - As_U.Tus ("US-SC"), - As_U.Tus ("US-ME"), - As_U.Tus ("US-IN"), - As_U.Tus ("US-KY"), - As_U.Tus ("US-TN"), - As_U.Tus ("US-VA"), - As_U.Tus ("US-OH"), - As_U.Tus ("US-PA"), - As_U.Tus ("US-MS"), - As_U.Tus ("US-LA"), - As_U.Tus ("US-AL"), - As_U.Tus ("US-AR"), - As_U.Tus ("US-NC"), - As_U.Tus ("US-NY"), - As_U.Tus ("US-IA"), - As_U.Tus ("US-IL"), - As_U.Tus ("US-GA"), - As_U.Tus ("US-WI"), - As_U.Tus ("US-FL"), - As_U.Tus ("US-MO"), - As_U.Tus ("US-OK"), - As_U.Tus ("US-ND"), - As_U.Tus ("US-WA"), - As_U.Tus ("US-SD"), - As_U.Tus ("US-NE"), - As_U.Tus ("US-KS"), - As_U.Tus ("US-ID"), - As_U.Tus ("US-UT"), - As_U.Tus ("US-MN"), - As_U.Tus ("US-MI"), - As_U.Tus ("US-WY"), - As_U.Tus ("US-OR"), - As_U.Tus ("US-CO"), - As_U.Tus ("US-NV"), - As_U.Tus ("US-AZ"), - As_U.Tus ("US-NM"), - As_U.Tus ("US-MT"), - As_U.Tus ("US-CA"), - As_U.Tus ("US-TX"), - As_U.Tus ("US-AK"), - As_U.Tus ("CA-BC"), - As_U.Tus ("CA-AB"), - As_U.Tus ("CA-ON"), - As_U.Tus ("CA-QC"), - As_U.Tus ("CA-SK"), - As_U.Tus ("CA-MB"), - As_U.Tus ("CA-NL"), - As_U.Tus ("CA-NB"), - As_U.Tus ("CA-NS"), - As_U.Tus ("CA-PE"), - As_U.Tus ("CA-YT"), - As_U.Tus ("CA-NT"), - As_U.Tus ("CA-NU"), - As_U.Tus ("IND"), - As_U.Tus ("AUS"), - As_U.Tus ("BRA"), - As_U.Tus ("USA"), - As_U.Tus ("MEX"), - As_U.Tus ("RU-MOW"), - As_U.Tus ("RU-SPE"), - As_U.Tus ("RU-KGD"), - As_U.Tus ("RU-IN"), - As_U.Tus ("RU-AD"), - As_U.Tus ("RU-SE"), - As_U.Tus ("RU-KB"), - As_U.Tus ("RU-KC"), - As_U.Tus ("RU-CE"), - As_U.Tus ("RU-CU"), - As_U.Tus ("RU-IVA"), - As_U.Tus ("RU-LIP"), - As_U.Tus ("RU-ORL"), - As_U.Tus ("RU-TUL"), - As_U.Tus ("RU-BE"), - As_U.Tus ("RU-VLA"), - As_U.Tus ("RU-KRS"), - As_U.Tus ("RU-KLU"), - As_U.Tus ("RU-TT"), - As_U.Tus ("RU-BRY"), - As_U.Tus ("RU-YAR"), - As_U.Tus ("RU-RYA"), - As_U.Tus ("RU-AST"), - As_U.Tus ("RU-MOS"), - As_U.Tus ("RU-SMO"), - As_U.Tus ("RU-DA"), - As_U.Tus ("RU-VOR"), - As_U.Tus ("RU-NGR"), - As_U.Tus ("RU-PSK"), - As_U.Tus ("RU-KOS"), - As_U.Tus ("RU-STA"), - As_U.Tus ("RU-KDA"), - As_U.Tus ("RU-KL"), - As_U.Tus ("RU-TVE"), - As_U.Tus ("RU-LEN"), - As_U.Tus ("RU-ROS"), - As_U.Tus ("RU-VGG"), - As_U.Tus ("RU-VLG"), - As_U.Tus ("RU-MUR"), - As_U.Tus ("RU-KR"), - As_U.Tus ("RU-NEN"), - As_U.Tus ("RU-KO"), - As_U.Tus ("RU-ARK"), - As_U.Tus ("RU-MO"), - As_U.Tus ("RU-NIZ"), - As_U.Tus ("RU-PNZ"), - As_U.Tus ("RU-KI"), - As_U.Tus ("RU-ME"), - As_U.Tus ("RU-ORE"), - As_U.Tus ("RU-ULY"), - As_U.Tus ("RU-PM"), - As_U.Tus ("RU-BA"), - As_U.Tus ("RU-UD"), - As_U.Tus ("RU-TA"), - As_U.Tus ("RU-SAM"), - As_U.Tus ("RU-SAR"), - As_U.Tus ("RU-YAN"), - As_U.Tus ("RU-KM"), - As_U.Tus ("RU-SVE"), - As_U.Tus ("RU-TYU"), - As_U.Tus ("RU-KGN"), - As_U.Tus ("RU-CH"), - As_U.Tus ("RU-BU"), - As_U.Tus ("RU-ZAB"), - As_U.Tus ("RU-IRK"), - As_U.Tus ("RU-NVS"), - As_U.Tus ("RU-TOM"), - As_U.Tus ("RU-OMS"), - As_U.Tus ("RU-KK"), - As_U.Tus ("RU-KEM"), - As_U.Tus ("RU-AL"), - As_U.Tus ("RU-ALT"), - As_U.Tus ("RU-TY"), - As_U.Tus ("RU-KYA"), - As_U.Tus ("RU-MAG"), - As_U.Tus ("RU-CHU"), - As_U.Tus ("RU-KAM"), - As_U.Tus ("RU-SAK"), - As_U.Tus ("RU-PO"), - As_U.Tus ("RU-YEV"), - As_U.Tus ("RU-KHA"), - As_U.Tus ("RU-AMU"), - As_U.Tus ("RU-SA"), - As_U.Tus ("CAN"), - As_U.Tus ("RUS"), - As_U.Tus ("CN-SH"), - As_U.Tus ("CN-TJ"), - As_U.Tus ("CN-BJ"), - As_U.Tus ("CN-HI"), - As_U.Tus ("CN-NX"), - As_U.Tus ("CN-CQ"), - As_U.Tus ("CN-ZJ"), - As_U.Tus ("CN-JS"), - As_U.Tus ("CN-FJ"), - As_U.Tus ("CN-AH"), - As_U.Tus ("CN-LN"), - As_U.Tus ("CN-SD"), - As_U.Tus ("CN-SX"), - As_U.Tus ("CN-JX"), - As_U.Tus ("CN-HA"), - As_U.Tus ("CN-GZ"), - As_U.Tus ("CN-GD"), - As_U.Tus ("CN-HB"), - As_U.Tus ("CN-JL"), - As_U.Tus ("CN-HE"), - As_U.Tus ("CN-SN"), - As_U.Tus ("CN-NM"), - As_U.Tus ("CN-HL"), - As_U.Tus ("CN-HN"), - As_U.Tus ("CN-GX"), - As_U.Tus ("CN-SC"), - As_U.Tus ("CN-YN"), - As_U.Tus ("CN-XZ"), - As_U.Tus ("CN-GS"), - As_U.Tus ("CN-QH"), - As_U.Tus ("CN-XJ"), - As_U.Tus ("CHN"), - As_U.Tus ("UMI"), - As_U.Tus ("CPT"), - As_U.Tus ("ATA"), - As_U.Tus ("AAA") ); - + subtype Country_Range is Positive range Countries.Territories_Def'Range; function Iso3166Alpha_Of (Index : Natural) return String is begin - if Index + 1 <= Iso3166Alpha'Last then - return Iso3166Alpha(Index + 1).Image; + if Index + 1 <= Country_Range'Last then + return Countries.Territories_Def(Index + 1).Code.Image; else return Undefined; end if; @@ -685,8 +151,8 @@ package body Mapcodes is -- Given ISO code, return Territory_Number or Error function Find_Iso (Territory_Alpha_Code : String) return Integer is begin - for I in Iso3166Alpha'Range loop - if Iso3166Alpha(I).Image = Territory_Alpha_Code then + for I in Country_Range loop + if Countries.Territories_Def(I).Code.Image = Territory_Alpha_Code then return I - 1; end if; end loop; @@ -823,10 +289,12 @@ package body Mapcodes is -- Find unique occurence in ANY context Hyphenated := Tus ("-") & Code2Search; Result := Error; - for I in Iso3166Alpha'Range loop - Index := Str_Tools.Locate (Iso3166Alpha(I).Image, Hyphenated.Image); + for I in Country_Range loop + Index := Str_Tools.Locate (Countries.Territories_Def(I).Code.Image, + Hyphenated.Image); if Index > 0 - and then Index = Iso3166Alpha(I).Length - Hyphenated.Length + 1 then + and then Index = Countries.Territories_Def(I).Code.Length + - Hyphenated.Length + 1 then -- iso3166alpha ends by Hyphenated if Result /= Error then -- Not unique @@ -858,7 +326,7 @@ package body Mapcodes is end Iso2Ccode; -- Image of a territory (index starting at 0 for VAT) - function Image (Territory : Territories) return String is + function Get_Territory_Number (Territory : Territories) return String is (Image (Integer (Territory))); -- Given an alphacode (such As_US-AL), returns the territory number @@ -882,7 +350,7 @@ package body Mapcodes is Name : As_U.Asu_Us; Index : Natural; begin - Name := Ctrynams.Isofullname(Positive (Territory + 1)); + Name := Countries.Territories_Def(Positive (Territory) + 1).Name; Index := Str_Tools.Locate (Name.Image, " ("); if Index > 0 then return Name.Slice (1, Index - 1); @@ -919,7 +387,7 @@ package body Mapcodes is if Str_Tools.Locate (Aliases, Short.Image & "=") > 0 then Count := 2; else - for I in Iso3166Alpha'Range loop + for I in Country_Range loop Iso := As_U.Tus (Iso3166Alpha_Of (I)); Index := Str_Tools.Locate (Iso.Image, "-" & Short.Image); if Index > 0 and then Index + Short.Length = Iso.Length then diff --git a/src/mapcodes.ads b/src/mapcodes.ads index b731793..d4e0eda 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -16,12 +16,12 @@ -- Mapcode management with Mapcode_Utils.As_U; -private with Ctrynams; +private with Countries; package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.1.3/Data" + Mapcode_Ada_Version : constant String := "1.1.4/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) @@ -33,21 +33,24 @@ package Mapcodes is -- Valid territory identifier type Territories is private; - -- Image of a territory ("0" for Vatican to "532" for International) - function Image (Territory : Territories) return String; -- Given an ISO 3166 alphacode (such as "US-AL" or "FRA"), return the -- corresponding territory identifier or raise Unknown_Territory -- A Context territory helps to interpret ambiguous (abbreviated) -- alphacodes, such as "BR" or "US" for the subdivision "AL" - -- Territory_Code can also be the image of the territory (ex "364" for US-AL) + -- Territory_Code can also be the number of the territory (ex "364" for US-AL) -- Raise, if Territory or Context is not known, or if Territory is ambiguous -- and no contextex is provided: Unknown_Territory : exception; function Get_Territory (Territory_Code : String; Context : String := "") return Territories; - -- Return the alphacode (usually an ISO 3166 code) of a territory number + -- Return the number of a territory ("0" for Vatican to "532" for + -- International) + -- See package Countries, field Num of the territory definition + function Get_Territory_Number (Territory : Territories) return String; + + -- Return the alphacode (usually an ISO 3166 code) of a territory -- Format: Local (often ambiguous), International (full and unambiguous, -- DEFAULT), or Shortest type Territory_Formats is (Local, International, Shortest); @@ -56,6 +59,8 @@ package Mapcodes is Format : Territory_Formats := International) return String; -- Return the full readable name of a territory (e.g. "France") + -- This is the first part of the Name (see package Countries), before the + -- first " (" if any function Get_Territory_Fullname (Territory : Territories) return String; -- Return the parent country of a subdivision (e.g. "US" for "US-AL") @@ -63,14 +68,14 @@ package Mapcodes is Not_A_Subdivision : exception; function Get_Parent_Of (Territory : Territories) return Territories; - -- Return True if Territory is a state + -- Return True if Territory is a subdivision (state) function Is_Subdivision (Territory : Territories) return Boolean; -- Return True if Territory is a country that has states function Has_Subdivision (Territory : Territories) return Boolean; -- Given a subdivision name, return the array (possibly empty) of territory - -- subdivisions with same name + -- subdivisions with the same name -- Ex: given "AL" return the array (318 (BR-AL), 482 (RU-AL), 364 (US-AL)) type Territories_Array is array (Positive range <>) of Territories; function Get_Subdivisions_With (Subdivision : String) @@ -103,13 +108,13 @@ package Mapcodes is -- Encode a coordinate -- Return an array of mapcodes, each representing the specified coordinate. - -- If a Territory alphacode is specified, then only mapcodes (if any) within - -- that territory are returned. If Earth is provided as territory then - -- only the 9-letter "international" mapcode is returned + -- If a Territory alphacode or num is specified, then only mapcodes (if any) + -- within that territory are returned. If Earth is provided as territory, + -- then only the 9-letter "international" mapcode is returned -- If Shortest is set, then at most one mapcode (the "default" and -- "shortest possible" mapcode) in any territory are returned -- The Precision option leads to produce mapcodes extended with high-precision - -- letters (the parameter specifies how many letters: 0, 1, or 2 + -- letters (the parameter specifies how many letters: 0 to 8 -- The resulting array is always organized by territories: all the mapcodes -- of a territory follow each other and in order of increasing length. -- If Sort is set, then the returned array contains first the shortest @@ -117,7 +122,7 @@ package Mapcodes is -- then possibly mapcodes for other territories, then possibly the -- international (Earth) mapcode -- Otherwise the territories appear in the crescent order of Territory_Range - -- (see package Ctrynams) + -- (see package Countries) -- As a consequence, if it appears the international mapcode is always the -- last subtype Precisions is Natural range 0 .. 8; @@ -139,6 +144,6 @@ package Mapcodes is function Decode (Mapcode, Context : String) return Coordinate; private - type Territories is new Natural range 0 .. Ctrynams.Isofullname'Last - 1; + type Territories is new Natural range 0 .. Countries.Territories_Def'Last - 1; end Mapcodes; diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 89283df..731323e 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -18,7 +18,7 @@ with Ada.Command_Line, Ada.Text_Io; with Mapcode_Utils.As_U, Mapcode_Utils.Str_Tools; use Mapcode_Utils; -with Mapcodes, Ctrynams; +with Mapcodes, Countries; procedure T_Mapcode is use Mapcodes; @@ -79,7 +79,7 @@ procedure T_Mapcode is & (if Context /= "" then " " else "") & Context & " "); Index := Get_Territory (Territory, Context); - Ada.Text_Io.Put_Line ("=> " & Image (Index) + Ada.Text_Io.Put_Line ("=> " & Get_Territory_Number (Index) & ": " & Get_Territory_Alpha_Code (Index, Mapcodes.Local) & "/" & Get_Territory_Alpha_Code (Index, Mapcodes.International) & "/" & Get_Territory_Alpha_Code (Index, Mapcodes.Shortest) @@ -102,12 +102,6 @@ procedure T_Mapcode is return F'Img; end Image; - function Image (I : Natural) return String is - Str : constant String := I'Img; - begin - return Str(Natural'Succ(Str'First) .. Str'Last); - end Image; - function Quote (Str : String) return String is (''' & Str & '''); @@ -206,12 +200,12 @@ begin -- Search country names I := I + 1; Territory.Set (Str_Tools.Upper_Str (Ada.Command_Line.Argument (I))); - for J in Ctrynams.Isofullname'Range loop + for J in Countries.Territories_Def'Range loop if Str_Tools.Locate (Str_Tools.Upper_Str - (Ctrynams.Isofullname(J).Image), + (Countries.Territories_Def(J).Name.Image), Territory.Image) /= 0 then -- Territory number is Index - 1 - Put_Territory (Image (J-1), "", True); + Put_Territory (Countries.Territories_Def(J).Code.Image, "", True); end if; end loop; elsif Command.Image = "-c" @@ -293,7 +287,7 @@ begin & Code.Territory_Alpha_Code.Image & " " & Code.Mapcode.Image & " " & Quote (Code.Full_Mapcode.Image) - & " " & Image (Code.Territory)); + & " " & Get_Territory_Number (Code.Territory)); end Put_Code; -- Sort if Local Codes : constant Mapcodes.Mapcode_Infos From 1448d8fc5e360e40978d48a08d2330d1564db1ff Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 31 Oct 2020 07:23:19 +0100 Subject: [PATCH 26/42] Update the documentation --- README.md | 62 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 8b6abc7..8b5796e 100644 --- a/README.md +++ b/README.md @@ -61,11 +61,11 @@ library. A territory is identified either by a number (a string of 1 to 3 digits such as "42"), or by a code (an ISO 3166 code such as “NLD” or "US-DC") with some possible aliases (example "US" = "USA"). -A territory is designated by a unique territory identifier of (a private) type `Territories`. - Large territories (MX, IN, AU, BR, US, CA, RU and CN) are decomposed into subdivisions. +A territory is designated by a unique territory identifier of (a private) type `Territories`. + `Get_Territory` returns the territory identifier of a territory code. An optional context helps to interpret ambiguous (abbreviated) alphacodes of subdivisions, such as "AL". If the territory code is not known or if several @@ -73,8 +73,8 @@ subdivisions match the specification (no context provided) it raises the excepti Attribute | Description --- | --- -`Territory_Code` | string, the ISO code such as “USA”, or identifier image such as "232", to search for -`Context` | optional string, (an ISO code such as “US”) territory for a subdivision +`Territory_Code` | string, the ISO code such as “USA”, or number image such as "232" of the territory to search +`Context` | optional string, an ISO code such as “US” (but territory numbers are not accepted) indicating the territory when `Territory_Code` is a subdivision return value | `Territories`, territory identifier exceptions | `Unknown_Territory` if the territory code is not known or ambiguous @@ -108,7 +108,7 @@ return value | string image of the number of `Territory` Attribute | Description --- | --- `Territory` | `Territories` -`Format` | `Local` (often ambiguous), `International` (full and unambiguous, default), or `Shortest` +`Format` | either `Local` (often ambiguous), `International` (full and unambiguous, default), or `Shortest` return value | string, territory ISO code Examples: @@ -125,7 +125,7 @@ Examples: Get_Territory_Alpha_Code (391, Shortest) -> "CA" // US-CA, not ambiguous -`Get_Territory_Fullname` returns the full common name of a territory +`Get_Territory_Fullname` returns the full common name of a territory. From the names defined in package Countries, this is the string up to the first ' (' if any. Attribute | Description --- | --- @@ -194,7 +194,7 @@ The operation returns an array (possibly with only one element) of mapcodes. attribute | description --- | --- `Coord` | coordinate (latitude and longitude in degrees, reals) to encode as mapcodes -`Territory` | optional string, (an ISO code such as “NLD” or territory number such as "112") territory for the scope of the mapcodes +`Territory` | optional string, an ISO code (such as “NLD”) or territory number (such as "112") to restrict the territory scope of the mapcodes `Shortest` | boolean, default True, to return only the shortest possible mapcode for the territory or each possible territory `Precision` | 0 to 8, default 0, precision of the mapcode to generate `Sort` | sort the territories so that the shortest mapcode appears first @@ -209,27 +209,27 @@ If Sort is set, then the returned array contains first the shortest mapcode, then possibly the other mapcodes for the same territory, then possibly mapcodes for other territories, then possibly the international (Earth) mapcode, otherwise the territories appear in the crescent -order of Territories (see package Ctrynams). +order of Territories (see package Countries). As a consequence, if it appears, the international mapcode is always the last. Examples: -With a`Territory` specified, and `Shortest` set, returns the default mapcode for this +With a `Territory` specified, and `Shortest` set, returns the default mapcode for this territory. - Encode ( (52.376514000, 4.908543375 40.786245000), "NLD") + Encode ( (52.376514000001, 4.908543375000), "NLD") -> NLD 49.4V 'NLD 49.4V' 112 With a Territory set to Earth ("AAA"), returns the international mapcode, (whatever Shortest) - Encode ( (52.376514000, 4.908543375 40.786245000), "AAA") + Encode ( (52.376514000001, 4.908543375000), "AAA") -> AAA VHXGB.1J9J 'VHXGB.1J9J' 532 With a `Territory` specified, and `Shortest`set to False, returns all the possible mapcodes for this territory. - Encode ( (52.376514000, 4.908543375 40.786245000), "NLD", Shortest => False) + Encode ( (52.376514000001, 4.908543375000), "NLD", Shortest => False) -> NLD 49.4V 'NLD 49.4V' 112 NLD G9.VWG 'NLD G9.VWG' 112 NLD DL6.H9L 'NLD DL6.H9L' 112 @@ -239,7 +239,7 @@ With no limitation to a territory (and `Shortest` set), returns at least a worldwide mapcode (territory AAA, code 532), and possibly some mapcodes in territories. - Encode ( (52.376514000, 4.908543375 40.786245000) ) + Encode ( (52.376514000001, 4.908543375000) ) -> NLD 49.4V 'NLD 49.4V' 112 AAA VHXGB.1J9J 'VHXGB.1J9J' 532 @@ -261,9 +261,9 @@ With Sort set, return the territory with shortest mapcode first. USA W2W2.Q41V 'USA W2W2.Q41V' 410 AAA S8LY1.RD84 'S8LY1.RD84' 532 -With a`Precision` of 2, returns high precision mapcodes. +With a `Precision` of 2, returns higher precision mapcodes. - Encode ( (52.376514000, 4.908543375 40.786245000), Precision => 2) + Encode ( (52.376514000001, 4.908543375000), Precision => 2) -> NLD 49.4V-K3 'NLD 49.4V-K3' 112 AAA VHXGB.1J9J-RD 'VHXGB.1J9J-RD' 532 @@ -281,7 +281,7 @@ raises the exception `Decode_Error` if the mapcode is not valid or ambiguous Attribute | Description --- | --- `Mapcode` | string, mapcode to decode -`Context` | optional string, (an ISO code such as “NLD” or territory number such as "112") territory for the scope of the mapcode +`Context` | optional string, an ISO code (such as “NLD”) or territory number (such as "112") to indicate territory for the scope of the mapcode return value | coordinate (latitude and longitude in degrees), reals exceptions | `Decode_Error`, if the mapcode is invalid or ambiguous in the Context @@ -302,9 +302,9 @@ With a `Context` set, decode a short mapcode. # Using the testing program -The command line testing tool `t_mapcode` can perform 3 actions: +The command line testing tool `t_mapcode` can perform mainly three actions: -* Display information on a territory number or territory ISO 3166 code +* Display information on a territory * Decode a mapcode (with an optional context) into a coordinate @@ -317,9 +317,9 @@ Usage: -t // Territory info -s // Same subdivisions -S // Search territory - -d // Decode + -d // Decode -c [ ] // Encode - -a [ ] // Alternative mapcodes + -a [ ] // Alternative mapcodes ::= : | [ ] ::= [ ] [ ] [ ] ::= [ all | local | short] // Default short @@ -331,7 +331,7 @@ Usage: Default selection leads to encode with Shortest => True, while `all` leads to encode with Shortest => False, and 'local' leads to encode with Shortest => True -and Shortest => True and to display the first entry of the returnd array. +and Shortest => True and to display the first entry of the returned array. Examples: @@ -348,25 +348,25 @@ Put information on a territory (providing ISO code or number). The information c -> USA => 410: USA/USA/USA/USA Has subdivisions -Search a territory by name. - - t_mapcode -s alabama - -> 364 => 364: AL/US-AL/US-AL/Alabama - Parent: USA - List all subdivisions named "xx-AL". - t_mapcode -S AL + t_mapcode -s AL -> US-AL => 364: AL/US-AL/US-AL/Alabama Parent: USA BR-AL => 318: AL/BR-AL/BR-AL/Alagoas Parent: BRA RU-AL => 482: AL/RU-AL/RU-AL/Altai Republic Parent: RUS - + Search a territory by name. + +Search a territory by name containing "alabama" (case insensitive) + + t_mapcode -S alabama + -> 364 => 364: AL/US-AL/US-AL/Alabama + Parent: USA + Encode a coordinate with a context and a precision, put information of the shortest mapcode. -Information is the mapcode, the territory context of the mapcode, the full mapcode (territory -and mapcode separated by a space and enclosed by quotes, except for international mapcodes) and territory number. +Information is the territory context of the mapcode, then the mapcode, then the full mapcode (territory and mapcode separated by a space and enclosed by quotes, except for international mapcodes where there is no territory), and then the territory number. t_mapcode -c 52.376482500 4.908511796 NLD P2 -> 52.376482500 4.908511796 From 93c2ebb2b1eac410286409427bf46fb467b6bc48 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Tue, 3 Nov 2020 12:59:08 +0100 Subject: [PATCH 27/42] Find non ambiguous subdivision before alias --- README.md | 7 +++++- src/mapcodes.adb | 58 +++++++++++++++++++++++++----------------------- src/mapcodes.ads | 7 +++++- test/Scenario | 6 ++++- test/fulltest | 2 +- 5 files changed, 48 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 8b5796e..c01fd32 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,9 @@ A territory is designated by a unique territory identifier of (a private) type `Get_Territory` returns the territory identifier of a territory code. An optional context helps to interpret ambiguous (abbreviated) alphacodes of subdivisions, such as "AL". If the territory code is not known or if several -subdivisions match the specification (no context provided) it raises the exception `Unknown_Territory`. +subdivisions match the specification (no context provided) it raises the exception `Unknown_Territory`. + +Note: The check for ambiguity is strict among subdivisions but does not apply to aliases. As a consequence, "TAM" corresponds to "MX-TAM" without error despite "RU-TAM is also an alias for "RU-TT". (Aliases are not ambiguous among them, but would it be the case then Get_Territory would return one of them without error). Attribute | Description --- | --- @@ -430,6 +432,9 @@ Put alternative mapcodes for a mapcode (shortests). # Version History +### 1.1.4 +* Find non ambiguous subdivision before alias + ### 1.1.4 * Move apart the public characteristics of territories * Rename Image into Get_Territory_Number diff --git a/src/mapcodes.adb b/src/mapcodes.adb index b10b515..daaa2ba 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -201,20 +201,45 @@ package body Mapcodes is -- Optims: direct number or code if P = Error and then Sep = 0 then + -- Direct territory number if Is_Digits (Code2Search.Image) then - -- Direct territory number N := Natural'Value (Code2Search.Image); if N <= Ccode_Earth then return N; end if; end if; + + -- Check if a simple territory if Code2Search.Length = 3 then - -- Check if a simple territory Index := Find_Iso (Code2Search.Image); if Index /= Error then return Index; end if; end if; + + -- Find unique occurence of subdivision in ANY context + if Code2Search.Length >= 2 then + Hyphenated := Tus ("-") & Code2Search; + Result := Error; + for I in Country_Range loop + Index := Str_Tools.Locate (Countries.Territories_Def(I).Code.Image, + Hyphenated.Image); + if Index > 0 + and then Index = Countries.Territories_Def(I).Code.Length + - Hyphenated.Length + 1 then + -- iso3166alpha ends by Hyphenated + if Result /= Error then + -- Not unique + return Error; + else + Result := I - 1; + end if; + end if; + end loop; + if Result /= Error then + return Result; + end if; + end if; end if; -- Set Context and Code for search @@ -235,7 +260,7 @@ package body Mapcodes is return Error; end if; - -- Optim: prefix and code + -- Optim: search this prefix and code if P /= Error then Index := Find_Iso (Parent_Name2 (P) & "-" & Code2Search.Image); if Index /= Error then @@ -260,7 +285,7 @@ package body Mapcodes is Code2Search := Isoa.Uslice (2, Isoa.Length); Tmpp := Integer'Value (Isoa.Slice (1, 1)); if P /= Error and then Tmpp /= P then - -- Cannot change territpry through aliasing + -- Cannot change territory through aliasing return Error; end if; P := Tmpp; @@ -282,33 +307,10 @@ package body Mapcodes is return Index; end if; if P /= Error then + -- With a context, the search shall have succeded return Error; end if; - if Code2Search.Length >= 2 then - -- Find unique occurence in ANY context - Hyphenated := Tus ("-") & Code2Search; - Result := Error; - for I in Country_Range loop - Index := Str_Tools.Locate (Countries.Territories_Def(I).Code.Image, - Hyphenated.Image); - if Index > 0 - and then Index = Countries.Territories_Def(I).Code.Length - - Hyphenated.Length + 1 then - -- iso3166alpha ends by Hyphenated - if Result /= Error then - -- Not unique - return Error; - else - Result := I - 1; - end if; - end if; - end loop; - if Result /= Error then - return Result; - end if; - end if; - -- All else failed, try non-disambiguated alphacode Isoa := Tus (Alias2Iso (Code2Search.Image)); if not Isoa.Is_Null then diff --git a/src/mapcodes.ads b/src/mapcodes.ads index d4e0eda..880ac9b 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -21,7 +21,7 @@ package Mapcodes is Mapcode_C_Version : constant String := "2.0.2"; Mapcode_Data_Version : constant String := "2.3.0"; - Mapcode_Ada_Version : constant String := "1.1.4/Data" + Mapcode_Ada_Version : constant String := "1.1.5/Data" & Mapcode_Data_Version; -- Real type (for latitude and longitude) @@ -44,6 +44,11 @@ package Mapcodes is Unknown_Territory : exception; function Get_Territory (Territory_Code : String; Context : String := "") return Territories; + -- Note about aliases and ambiguity: The check for ambiguity is strict among + -- subdivisions but does not apply to aliases. As a consequence, "TAM" + -- corresponds to "MX-TAM" without error despite "RU-TAM is also an alias + -- for "RU-TT". (Aliases are not ambiguous among them, but would it be + -- the case then Get_Territory would return one of them without error). -- Return the number of a territory ("0" for Vatican to "532" for -- International) diff --git a/test/Scenario b/test/Scenario index 465c6c8..5b38e6b 100644 --- a/test/Scenario +++ b/test/Scenario @@ -27,7 +27,7 @@ -t USA => 410: USA/USA/USA/USA Has subdivisions -t usa => 410: USA/USA/USA/USA Has subdivisions -t 410 => 410: USA/USA/USA/USA Has subdivisions --t CA => 391: CA/US-CA/CA/California Parent: USA +-t CA => 391: CA/US-CA/CA/California Parent: USA -t US-CA => 391: CA/US-CA/CA/California Parent: USA -t USA-CA => 391: CA/US-CA/CA/California Parent: USA -t RUS-TAM => 430: TT/RU-TT/TT/Tambov Oblast Parent: RUS @@ -41,6 +41,10 @@ -t IN-MN => 279: MN/IN-MN/IN-MN/Manipur Parent: IND -t US-IN => 356: IN/US-IN/US-IN/Indiana Parent: USA -t NLD => 112: NLD/NLD/NLD/Netherlands +-t TT => 430: TT/RU-TT/TT/Tambov Oblast Parent: RUS +-t TAM => 259: TAM/MX-TAM/MX-TAM/Tamaulipas Parent: MEX +-t RU-TAM => 430: TT/RU-TT/TT/Tambov Oblast Parent: RUS +-s TAM => 430: TT/RU-TT/TT/Tambov Oblast Parent: RUS -s AL => 482: AL/RU-AL/RU-AL/Altai Republic Parent: RUS -S altai => 483: ALT/RU-ALT/ALT/Altai Krai Parent: RUS diff --git a/test/fulltest b/test/fulltest index bb8fbcd..ad3072c 100755 --- a/test/fulltest +++ b/test/fulltest @@ -47,7 +47,7 @@ export TEST=0 function usage { echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ] [ -s | --scenario_only ] [ -t | --test ]" echo " or `basename $0` [ -h | --help ]" - echo " Precision is from 0 to 2, default: $PRECISION" + echo " Precision is from 0 to 8, default: $PRECISION" echo " Debug logs each incdividual test" echo " Scenario_only play only the scenario" echo " Test mode plays the scenario, tests the encoding_ok and 1% of the decoding_ok" From f153ee403a6a2867884f9a763fb7b44fca3ca8a2 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Mon, 9 Nov 2020 17:53:13 +0100 Subject: [PATCH 28/42] Fix help --- src/t_mapcode.adb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 731323e..e91047f 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -51,7 +51,7 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( " ::= [ all | local | short] // Default short"); Ada.Text_Io.Put_Line ( - " // Default: one mapcode (the shortest) of each territory"); + " // short: one mapcode (the shortest) of each territory"); Ada.Text_Io.Put_Line ( " // all: all the mapcodes of all territories"); Ada.Text_Io.Put_Line ( From ef06d1cd65a17fbc6a82ecb34eae4c61192d7116 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Wed, 8 Jun 2022 18:36:30 +0200 Subject: [PATCH 29/42] Add language support --- README.md | 91 +- src/language_defs.ads | 91 + src/language_utils.adb | 64 + src/language_utils.ads | 54 + src/mapcodes-languages.adb | 430 ++++ src/mapcodes-languages.ads | 52 + src/mapcodes.adb | 32 +- src/mapcodes.ads | 14 +- src/t_mapcode.adb | 63 +- test/Alphabets | 4805 ++++++++++++++++++++++++++++++++++++ test/fulltest | 83 +- 11 files changed, 5757 insertions(+), 22 deletions(-) create mode 100644 src/language_defs.ads create mode 100644 src/language_utils.adb create mode 100644 src/language_utils.ads create mode 100644 src/mapcodes-languages.adb create mode 100644 src/mapcodes-languages.ads create mode 100644 test/Alphabets diff --git a/README.md b/README.md index c01fd32..8cd4ed4 100644 --- a/README.md +++ b/README.md @@ -34,21 +34,24 @@ https://github.com/malaise/ada/tree/master/usr/mapcode The following files, in directory `src`, provide utilities and data for mapcode processing: - mapcode-utils.ads - Root package of the utilities: - as_u.ads as_u.adb - Unbounded strings - bits.ads bits.adb - Bit operations - str_tools.ads str_tools.adb - String utilities - ndata.ads - Private data table for mapcode support + mapcode-utils.ads - Root package of the utilities: + as_u.ads as_u.adb - Unbounded strings + bits.ads bits.adb - Bit operations + str_tools.ads and .adb - String utilities + ndata.ads - Private data table for mapcode support + language_defs.ads - Private definition of language sets + language_utils.adb and .adb - Private utilites for languages The following files provide the Ada interface for mapcodes: - mapcode.ads mapcode.adb - Key operations for mapcode support - countries.ads - Nums, Codes and Names of territories + mapcode.ads mapcode.adb - Key operations for mapcode support + countries.ads - Nums, Codes and Names of territories + mapcodes-languages.ads and .adb - Key operations for language conversion The following file contains the main procedure for testing the interfaces: - t_mapcode.adb - Command line tool to test Ada mapcodes + t_mapcode.adb - Command line tool to test Ada mapcodes In directory `test`, the command `fulltest` launches a complete test of the @@ -302,6 +305,57 @@ With a `Context` set, decode a short mapcode. Decode ("49.4V", "NLD") -> (52.376514000001, 4.908543375000) +## Converting a Mapcode into a language + +The reference language is Roman, used by the operations above. The child package +Mapcodes.Language provides two operations to support conversion of a Mapcode in +a Wide_String, to or from the languages: +Roman, Greek, Cyrillic, Hebrew, Devanagari, Malayalam, Georgian, Katakana, Thai, +Lao, Armenian, Bengali, Gurmukhi, Tibetan, Arabic, Korean, Burmese, Khmer, +Sinhalese, Thaana, Chinese, Tifinagh, Tamil, Amharic, Telugu, Odia, Kannada and +Gujarati. + +`Get_Language` identifies a language name expressed in its own language as a +unicode sequence. + +attribute | description +--- | --- +`Name` | Unicode_Sequence of a language name +return value | the language +exceptions | `Unknown_Language`, if the `Name` does not denote a supported language + + +`Get_Language` detects the language, checks that all the characters are compatibl +and returns the language of the Input. + +attribute | description +--- | --- +`Input` | Wide_String of a mapcode +return value | the language used to encode the Input +exceptions | `Invalid_Text`, if the `Input` is not correct + +Example: + + Get_Language ("VHXGB.1J9J-RD") + -> Roman + + +`Convert` detects the language of the Input and converts it into the requested +anguage. + +attribute | description +--- | --- +`Input` | Wide_String of a mapcode +`Output_Language` | One of the supported languages +return value | The `Input` converted into the `Output_Language` +exceptions | `Invalid_Text`, if the `Input` is not correct + +Example: + + Convert ("89.EU", Greek) + -> "Α9.Ω3" + + # Using the testing program The command line testing tool `t_mapcode` can perform mainly three actions: @@ -329,6 +383,8 @@ Usage: // all: all the mapcodes of all territories // local: the shortest among all the mapcodes ::= P0 to P8 // Default P0 + ::= language name (any casing) or num (0 for Roman) + // Input language is guessed, default output is Romaic Default selection leads to encode with Shortest => True, while `all` leads to @@ -352,14 +408,16 @@ Put information on a territory (providing ISO code or number). The information c List all subdivisions named "xx-AL". - t_mapcode -s AL - -> US-AL => 364: AL/US-AL/US-AL/Alabama + t_mapcode -s AL + -> US-AL => 364: AL/US-AL/US-AL/Alabama Parent: USA BR-AL => 318: AL/BR-AL/BR-AL/Alagoas Parent: BRA RU-AL => 482: AL/RU-AL/RU-AL/Altai Republic Parent: RUS - Search a territory by name. + + +Search a territory by name. Search a territory by name containing "alabama" (case insensitive) @@ -430,8 +488,19 @@ Put alternative mapcodes for a mapcode (shortests). => NLD 49.4V 'NLD 49.4V' 112 => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 +Convert a mapcode into Greek + t_mapcode -l VHXGB.1J9J 1 + -> ΦΗ9ΓΒ.21Π39 + +Convert a mapcode into Roman + t_mapcode -l ΦΗ9ΓΒ.21Π39 Roman + -> VHXGB.1J9J + # Version History +### 1.1.5 +* Add language support + ### 1.1.4 * Find non ambiguous subdivision before alias diff --git a/src/language_defs.ads b/src/language_defs.ads new file mode 100644 index 0000000..cb89b74 --- /dev/null +++ b/src/language_defs.ads @@ -0,0 +1,91 @@ +-- ----------------------------------------------------------------------------- +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- ----------------------------------------------------------------------------- + +-- Table of languages for mapcodes +with Language_Utils; use Language_Utils; +package Language_Defs is + + -- The supported languages + -- The language names in Roman are the Mixed_Str images of these enums + type Language_List is ( + Roman, Greek, Cyrillic, Hebrew, Devanagari, Malayalam, Georgian, Katakana, + Thai, Lao, Armenian, Bengali, Gurmukhi, Tibetan, Arabic, Korean, Burmese, + Khmer, Sinhalese, Thaana, Chinese, Tifinagh, Tamil, Amharic, Telugu, Odia, + Kannada, Gujarati); + + -- The table of the languages + Langs : constant array (Language_List) of Language_Desc + := ( + -- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 + Roman => Build_Desc (To_Unicode ("Roman"), + (16#0041#, 16#0042#, 16#0043#, 16#0044#, 16#0045#, 16#0046#, 16#0047#, 16#0048#, 16#0049#, 16#004A#, 16#004B#, 16#004C#, 16#004D#, 16#004E#, 16#004F#, 16#0050#, 16#0051#, 16#0052#, 16#0053#, 16#0054#, 16#0055#, 16#0056#, 16#0057#, 16#0058#, 16#0059#, 16#005A#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Greek => Build_Desc ( (16#0949#, 16#0955#, 16#0955#, 16#0951#, 16#0957#, 16#0953#, 16#0954#, 16#0940#), + (16#0391#, 16#0392#, 16#039E#, 16#0394#, 16#0388#, 16#0395#, 16#0393#, 16#0397#, 16#0399#, 16#03A0#, 16#039A#, 16#039B#, 16#039C#, 16#039D#, 16#039F#, 16#03A1#, 16#0398#, 16#03A8#, 16#03A3#, 16#03A4#, 16#0389#, 16#03A6#, 16#03A9#, 16#03A7#, 16#03A5#, 16#0396#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Cyrillic => Build_Desc ( (16#1082#, 16#1080#, 16#1088#, 16#1080#, 16#1083#, 16#1083#, 16#1080#, 16#1094#, 16#1072#), + (16#0410#, 16#0412#, 16#0421#, 16#0414#, 16#0415#, 16#0416#, 16#0413#, 16#041D#, 16#0049#, 16#041F#, 16#041A#, 16#041B#, 16#041C#, 16#0417#, 16#041E#, 16#0420#, 16#0424#, 16#042F#, 16#0426#, 16#0422#, 16#042D#, 16#0427#, 16#0428#, 16#0425#, 16#0423#, 16#0411#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Hebrew => Build_Desc ( (16#1506#, 16#1460#, 16#1489#, 16#1456#, 16#1512#, 16#1460#, 16#1497#, 16#1514#), + (16#05D0#, 16#05D1#, 16#05D2#, 16#05D3#, 16#05E3#, 16#05D4#, 16#05D6#, 16#05D7#, 16#05D5#, 16#05D8#, 16#05D9#, 16#05DA#, 16#05DB#, 16#05DC#, 16#05E1#, 16#05DD#, 16#05DE#, 16#05E0#, 16#05E2#, 16#05E4#, 16#05E5#, 16#05E6#, 16#05E7#, 16#05E8#, 16#05E9#, 16#05EA#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Devanagari => Build_Desc ( (16#2342#, 16#2375#, 16#2357#, 16#2344#, 16#2366#, 16#2327#, 16#2352#, 16#2368#), + (16#0905#, 16#0915#, 16#0917#, 16#0918#, 16#090F#, 16#091A#, 16#091C#, 16#091F#, 16#0049#, 16#0920#, 16#0923#, 16#0924#, 16#0926#, 16#0927#, 16#004F#, 16#0928#, 16#092A#, 16#092D#, 16#092E#, 16#0930#, 16#092B#, 16#0932#, 16#0935#, 16#0938#, 16#0939#, 16#092C#, 16#0966#, 16#0967#, 16#0968#, 16#0969#, 16#096A#, 16#096B#, 16#096C#, 16#096D#, 16#096E#, 16#096F#) ), + Malayalam => Build_Desc ( (16#3374#, 16#3378#, 16#3375#, 16#3390#, 16#3379#, 16#3330#), + (16#0D12#, 16#0D15#, 16#0D16#, 16#0D17#, 16#0D0B#, 16#0D1A#, 16#0D1C#, 16#0D1F#, 16#0049#, 16#0D21#, 16#0D24#, 16#0D25#, 16#0D26#, 16#0D27#, 16#0D20#, 16#0D28#, 16#0D2E#, 16#0D30#, 16#0D31#, 16#0D32#, 16#0D09#, 16#0D34#, 16#0D35#, 16#0D36#, 16#0D38#, 16#0D39#, 16#0D66#, 16#0D67#, 16#0D68#, 16#0D69#, 16#0D6A#, 16#0D6B#, 16#0D6C#, 16#0D6D#, 16#0D6E#, 16#0D6F#) ), + Georgian => Build_Desc ( (16#4325#, 16#4304#, 16#4320#, 16#4311#, 16#4323#, 16#4314#, 16#4312#), + (16#10A0#, 16#10A1#, 16#10A3#, 16#10A6#, 16#10A4#, 16#10A9#, 16#10AB#, 16#10AC#, 16#0049#, 16#10AE#, 16#10B0#, 16#10B1#, 16#10B2#, 16#10B4#, 16#10AD#, 16#10B5#, 16#10B6#, 16#10B7#, 16#10B8#, 16#10B9#, 16#10A8#, 16#10BA#, 16#10BB#, 16#10BD#, 16#10BE#, 16#10BF#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Katakana => Build_Desc ( (16#12459#, 16#12479#, 16#12459#, 16#12490#), + (16#30A2#, 16#30AB#, 16#30AD#, 16#30AF#, 16#30AA#, 16#30B1#, 16#30B3#, 16#30B5#, 16#0049#, 16#30B9#, 16#30C1#, 16#30C8#, 16#30CA#, 16#30CC#, 16#004F#, 16#30D2#, 16#30D5#, 16#30D8#, 16#30DB#, 16#30E1#, 16#30A8#, 16#30E2#, 16#30E8#, 16#30E9#, 16#30ED#, 16#30F2#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Thai => Build_Desc ( (16#3616#, 16#3634#, 16#3625#, 16#3634#, 16#3652#, 16#3607#, 16#3618#), + (16#0E30#, 16#0E01#, 16#0E02#, 16#0E04#, 16#0E32#, 16#0E07#, 16#0E08#, 16#0E09#, 16#0049#, 16#0E0A#, 16#0E11#, 16#0E14#, 16#0E16#, 16#0E17#, 16#004F#, 16#0E18#, 16#0E1A#, 16#0E1C#, 16#0E21#, 16#0E23#, 16#0E2C#, 16#0E25#, 16#0E27#, 16#0E2D#, 16#0E2E#, 16#0E2F#, 16#0E50#, 16#0E51#, 16#0E52#, 16#0E53#, 16#0E54#, 16#0E55#, 16#0E56#, 16#0E57#, 16#0E58#, 16#0E59#) ), + Lao => Build_Desc ( (16#3742#, 16#3762#, 16#3754#, 16#3762#, 16#3749#, 16#3762#, 16#3751#), + (16#0EB0#, 16#0E81#, 16#0E82#, 16#0E84#, 16#0EC3#, 16#0E87#, 16#0E88#, 16#0E8A#, 16#0EC4#, 16#0E8D#, 16#0E94#, 16#0E97#, 16#0E99#, 16#0E9A#, 16#004F#, 16#0E9C#, 16#0E9E#, 16#0EA1#, 16#0EA2#, 16#0EA3#, 16#0EBD#, 16#0EA7#, 16#0EAA#, 16#0EAB#, 16#0EAD#, 16#0EAF#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Armenian => Build_Desc ( (16#1392#, 16#1377#, 16#1397#, 16#1381#, 16#1408#, 16#1381#, 16#1398#), + (16#0556#, 16#0532#, 16#0533#, 16#0534#, 16#0535#, 16#0538#, 16#0539#, 16#053A#, 16#053B#, 16#053D#, 16#053F#, 16#0540#, 16#0541#, 16#0543#, 16#0555#, 16#0547#, 16#0548#, 16#054A#, 16#054D#, 16#054E#, 16#0545#, 16#054F#, 16#0550#, 16#0551#, 16#0552#, 16#0553#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Bengali => Build_Desc ( (16#2476#, 16#2494#, 16#2434#, 16#2482#, 16#2494#), + (16#099C#, 16#0998#, 16#0995#, 16#0996#, 16#09AE#, 16#0997#, 16#0999#, 16#099A#, 16#0049#, 16#099D#, 16#09A0#, 16#09A1#, 16#09A2#, 16#09A3#, 16#004F#, 16#09A4#, 16#09A5#, 16#09A6#, 16#09A8#, 16#09AA#, 16#099F#, 16#09AC#, 16#09AD#, 16#09AF#, 16#09B2#, 16#09B9#, 16#09E6#, 16#09E7#, 16#09E8#, 16#09E9#, 16#09EA#, 16#09EB#, 16#09EC#, 16#09ED#, 16#09EE#, 16#09EF#) ), + Gurmukhi => Build_Desc ( (16#2583#, 16#2625#, 16#2608#, 16#2606#, 16#2625#, 16#2582#, 16#2624#), + (16#0A05#, 16#0A15#, 16#0A17#, 16#0A18#, 16#0A0F#, 16#0A1A#, 16#0A1C#, 16#0A1F#, 16#0049#, 16#0A20#, 16#0A23#, 16#0A24#, 16#0A26#, 16#0A27#, 16#004F#, 16#0A28#, 16#0A2A#, 16#0A2D#, 16#0A2E#, 16#0A30#, 16#0A2B#, 16#0A32#, 16#0A35#, 16#0A38#, 16#0A39#, 16#0A21#, 16#0A66#, 16#0A67#, 16#0A68#, 16#0A69#, 16#0A6A#, 16#0A6B#, 16#0A6C#, 16#0A6D#, 16#0A6E#, 16#0A6F#) ), + Tibetan => Build_Desc ( (16#3921#, 16#3926#, 16#3956#, 16#3851#, 16#3909#, 16#3923#, 16#3851#), + (16#0F58#, 16#0F40#, 16#0F41#, 16#0F42#, 16#0F64#, 16#0F44#, 16#0F45#, 16#0F46#, 16#0049#, 16#0F47#, 16#0F49#, 16#0F55#, 16#0F50#, 16#0F4F#, 16#004F#, 16#0F51#, 16#0F53#, 16#0F54#, 16#0F56#, 16#0F5E#, 16#0F60#, 16#0F5F#, 16#0F61#, 16#0F62#, 16#0F63#, 16#0F66#, 16#0F20#, 16#0F21#, 16#0F22#, 16#0F23#, 16#0F24#, 16#0F25#, 16#0F26#, 16#0F27#, 16#0F28#, 16#0F29#) ), + Arabic => Build_Desc ( (16#1575#, 16#1604#, 16#1593#, 16#1614#, 16#1585#, 16#1614#, 16#1576#, 16#1616#, 16#1610#, 16#1614#, 16#1617#, 16#1577#), + (16#0628#, 16#062A#, 16#062D#, 16#062E#, 16#062B#, 16#062F#, 16#0630#, 16#0631#, 16#0627#, 16#0632#, 16#0633#, 16#0634#, 16#0635#, 16#0636#, 16#0647#, 16#0637#, 16#0638#, 16#0639#, 16#063A#, 16#0641#, 16#0642#, 16#062C#, 16#0644#, 16#0645#, 16#0646#, 16#0648#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Korean => Build_Desc ( (16#51312#, 16#49440#, 16#44544#, 16#54620#, 16#44544#), + (16#1112#, 16#1100#, 16#1102#, 16#1103#, 16#1166#, 16#1105#, 16#1107#, 16#1109#, 16#1175#, 16#1110#, 16#1111#, 16#1161#, 16#1162#, 16#1163#, 16#110B#, 16#1164#, 16#1165#, 16#1167#, 16#1169#, 16#1172#, 16#1174#, 16#110C#, 16#110E#, 16#110F#, 16#116D#, 16#116E#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Burmese => Build_Desc ( (16#4121#, 16#4156#, 16#4116#, 16#4154#, 16#4121#, 16#4140#, 16#4129#, 16#4096#, 16#4153#, 16#4097#, 16#4123#, 16#4140#), + (16#1005#, 16#1000#, 16#1001#, 16#1002#, 16#1013#, 16#1003#, 16#1004#, 16#101A#, 16#0049#, 16#1007#, 16#100C#, 16#100D#, 16#100E#, 16#1010#, 16#101D#, 16#1011#, 16#1012#, 16#101E#, 16#1014#, 16#1015#, 16#1016#, 16#101F#, 16#1017#, 16#1018#, 16#100F#, 16#101C#, 16#1040#, 16#1041#, 16#1042#, 16#1043#, 16#1044#, 16#1045#, 16#1046#, 16#1047#, 16#1048#, 16#1049#) ), + Khmer => Build_Desc ( (16#6050#, 16#6016#, 16#6098#, 16#6047#, 16#6042#, 16#6017#, 16#6098#, 16#6040#, 16#6082#, 16#6042#), + (16#1789#, 16#1780#, 16#1781#, 16#1782#, 16#1785#, 16#1783#, 16#1784#, 16#1787#, 16#179A#, 16#1788#, 16#178A#, 16#178C#, 16#178D#, 16#178E#, 16#004F#, 16#1791#, 16#1792#, 16#1793#, 16#1794#, 16#1795#, 16#179F#, 16#1796#, 16#1798#, 16#179B#, 16#17A0#, 16#17A2#, 16#17E0#, 16#17E1#, 16#17E2#, 16#17E3#, 16#17E4#, 16#17E5#, 16#17E6#, 16#17E7#, 16#17E8#, 16#17E9#) ), + Sinhalese => Build_Desc ( (16#3523#, 16#3538#, 16#3458#, 16#3524#, 16#3517#, 16#3461#, 16#3482#, 16#3530#, 16#3522#, 16#3515#, 16#3512#, 16#3535#, 16#3517#, 16#3535#, 16#3520#), + (16#0D85#, 16#0D9A#, 16#0D9C#, 16#0D9F#, 16#0D89#, 16#0DA2#, 16#0DA7#, 16#0DA9#, 16#0049#, 16#0DAC#, 16#0DAD#, 16#0DAF#, 16#0DB1#, 16#0DB3#, 16#004F#, 16#0DB4#, 16#0DB6#, 16#0DB8#, 16#0DB9#, 16#0DBA#, 16#0D8B#, 16#0DBB#, 16#0DBD#, 16#0DC0#, 16#0DC3#, 16#0DC4#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Thaana => Build_Desc ( (16#1932#, 16#1959#, 16#1922#, 16#1958#), + (16#0794#, 16#0780#, 16#0781#, 16#0782#, 16#0797#, 16#0783#, 16#0784#, 16#0785#, 16#0049#, 16#0786#, 16#0787#, 16#0788#, 16#0789#, 16#078A#, 16#004F#, 16#078B#, 16#078C#, 16#078D#, 16#078E#, 16#078F#, 16#079C#, 16#0790#, 16#0791#, 16#0792#, 16#0793#, 16#07B1#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Chinese => Build_Desc ( (16#12549#, 16#12550#, 16#12551#, 16#12552#), + (16#3123#, 16#3105#, 16#3108#, 16#3106#, 16#3114#, 16#3107#, 16#3109#, 16#310A#, 16#0049#, 16#310B#, 16#310C#, 16#310D#, 16#310E#, 16#310F#, 16#004F#, 16#3115#, 16#3116#, 16#3110#, 16#3111#, 16#3112#, 16#3113#, 16#3129#, 16#3117#, 16#3128#, 16#3118#, 16#3119#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Tifinagh => Build_Desc ( (16#11612#, 16#11593#, 16#11580#, 16#11593#, 16#11599#, 16#11568#, 16#11606#), + (16#2D49#, 16#2D31#, 16#2D33#, 16#2D37#, 16#2D53#, 16#2D3C#, 16#2D3D#, 16#2D40#, 16#2D4F#, 16#2D43#, 16#2D44#, 16#2D45#, 16#2D47#, 16#2D4D#, 16#2D54#, 16#2D4E#, 16#2D55#, 16#2D56#, 16#2D59#, 16#2D5A#, 16#2D62#, 16#2D5B#, 16#2D5C#, 16#2D5F#, 16#2D61#, 16#2D63#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Tamil => Build_Desc ( (16#2980#, 16#2990#, 16#3007#, 16#2996#, 16#3021#), + (16#0B99#, 16#0B95#, 16#0B9A#, 16#0B9F#, 16#0B86#, 16#0BA4#, 16#0BA8#, 16#0BAA#, 16#0049#, 16#0BAE#, 16#0BAF#, 16#0BB0#, 16#0BB2#, 16#0BB5#, 16#004F#, 16#0BB4#, 16#0BB3#, 16#0BB1#, 16#0B85#, 16#0B88#, 16#0B93#, 16#0B89#, 16#0B8E#, 16#0B8F#, 16#0B90#, 16#0B92#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Amharic => Build_Desc ( (16#4771#, 16#4635#, 16#4653#, 16#4763#), + (16#121B#, 16#1260#, 16#1264#, 16#12F0#, 16#121E#, 16#134A#, 16#1308#, 16#1200#, 16#0049#, 16#12E8#, 16#12AC#, 16#1208#, 16#1293#, 16#1350#, 16#12D0#, 16#1354#, 16#1240#, 16#1244#, 16#122C#, 16#1220#, 16#12C8#, 16#1226#, 16#1270#, 16#1276#, 16#1338#, 16#12DC#, 16#1372#, 16#1369#, 16#136A#, 16#136B#, 16#136C#, 16#136D#, 16#136E#, 16#136F#, 16#1370#, 16#1371#) ), + Telugu => Build_Desc ( (16#3108#, 16#3142#, 16#3122#, 16#3137#, 16#3095#, 16#3137#), + (16#0C1E#, 16#0C15#, 16#0C17#, 16#0C19#, 16#0C2B#, 16#0C1A#, 16#0C1C#, 16#0C1F#, 16#0049#, 16#0C20#, 16#0C21#, 16#0C23#, 16#0C24#, 16#0C25#, 16#004F#, 16#0C26#, 16#0C27#, 16#0C28#, 16#0C2A#, 16#0C2C#, 16#0C2D#, 16#0C2E#, 16#0C30#, 16#0C32#, 16#0C33#, 16#0C35#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Odia => Build_Desc ( (16#2835#, 16#2849#, 16#2876#, 16#2879#, 16#2822#), + (16#0B1D#, 16#0B15#, 16#0B16#, 16#0B17#, 16#0B23#, 16#0B18#, 16#0B1A#, 16#0B1C#, 16#0049#, 16#0B1F#, 16#0B21#, 16#0B22#, 16#0B24#, 16#0B25#, 16#0B20#, 16#0B26#, 16#0B27#, 16#0B28#, 16#0B2A#, 16#0B2C#, 16#0B39#, 16#0B2E#, 16#0B2F#, 16#0B30#, 16#0B33#, 16#0B38#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Kannada => Build_Desc ( (16#3221#, 16#3240#, 16#3277#, 16#3240#, 16#3233#), + (16#0C92#, 16#0C95#, 16#0C96#, 16#0C97#, 16#0C8E#, 16#0C99#, 16#0C9A#, 16#0C9B#, 16#0049#, 16#0C9C#, 16#0CA0#, 16#0CA1#, 16#0CA3#, 16#0CA4#, 16#004F#, 16#0CA6#, 16#0CA7#, 16#0CA8#, 16#0CAA#, 16#0CAB#, 16#0C87#, 16#0CAC#, 16#0CAD#, 16#0CB0#, 16#0CB2#, 16#0CB5#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), + Gujarati => Build_Desc ( (16#2711#, 16#2753#, 16#2716#, 16#2736#, 16#2750#, 16#2724#, 16#2752#), + (16#0AB3#, 16#0A97#, 16#0A9C#, 16#0AA1#, 16#0A87#, 16#0AA6#, 16#0AAC#, 16#0A95#, 16#0049#, 16#0A9A#, 16#0A9F#, 16#0AA4#, 16#0AAA#, 16#0AA0#, 16#004F#, 16#0AB0#, 16#0AB5#, 16#0A9E#, 16#0AAE#, 16#0AAB#, 16#0A89#, 16#0AB7#, 16#0AA8#, 16#0A9D#, 16#0AA2#, 16#0AAD#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ) ); + +end Language_Defs; + diff --git a/src/language_utils.adb b/src/language_utils.adb new file mode 100644 index 0000000..47a8879 --- /dev/null +++ b/src/language_utils.adb @@ -0,0 +1,64 @@ +-- ----------------------------------------------------------------------------- +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- ----------------------------------------------------------------------------- + +package body Language_Utils is + + -- Make Unicode_Sequence + function To_Unicode (Str : String) return Unicode_Sequence is + Res : Unicode_Sequence (1 .. Str'Length); + begin + for I in Str'Range loop + Res(I - Str'First + 1) := Character'Pos (Str(I)); + end loop; + return Res; + end To_Unicode; + + -- Make character set + function To_Set (Code : Char_Code) return Char_Set is + Res : Char_Set; + begin + for I in Code'Range loop + Res (I - Code'First + 1) := Wide_Character'Val (Code(I)); + end loop; + return Res; + end To_Set; + + -- Make descriptor + function Build_Desc (Name : Unicode_Sequence; + Code : Char_Code) return Language_Desc is + Res : Language_Desc (Name'Length); + begin + Res.Name.Txt := Name; + Res.Set := To_Set (Code); + -- Store first and last character of the set + Res.First := Wide_Character'Last; + Res.Last := Wide_Character'First; + for C of Res.Set loop + if C > '9' and then C /= 'I' and then C /= 'O' then + -- Discard characterers that are shared + if C < Res.First then + Res.First := C; + end if; + if C > '9' and then C > Res.Last then + Res.Last := C; + end if; + end if; + end loop; + return Res; + end Build_Desc; + +end Language_Utils; + diff --git a/src/language_utils.ads b/src/language_utils.ads new file mode 100644 index 0000000..017ca18 --- /dev/null +++ b/src/language_utils.ads @@ -0,0 +1,54 @@ +-- ----------------------------------------------------------------------------- +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- ----------------------------------------------------------------------------- + +-- Utilities for handling languages +package Language_Utils is + + -- The unicode sequence to provide a language name in its language + -- A Unicode number + subtype Unicode_Number is Natural range 0 .. 16#10FFFF#; + type Unicode_Sequence is array (Positive range <>) of Unicode_Number; + function To_Unicode (Str : String) return Unicode_Sequence; + + -- A variable unicode sequence stored + Text_Max_Length : constant := 15; + subtype Text_Len is Natural range 0 .. Text_Max_Length; + type Text (Len : Text_Len := 0) is record + Txt : Unicode_Sequence (1 .. Len); + end record; + + -- The descriptor of a language + -- Char set of a language + -- Array (A..Z, 0..9) of wide characters + subtype Char_Set is Wide_String (1 .. 36); + -- Array of codes for a language and construction of char set + subtype Char_Code_Range is Natural + range 0 .. Wide_Character'Pos (Wide_Character'Last); + type Char_Code is array (Char_Set'Range) of Char_Code_Range; + -- The descriptor + type Language_Desc (Len : Text_Len := 0) is record + -- The name of the language in it own language + Name : Text (Len); + -- The conversion characters in the language for A .. Z, 0 .. 9 + Set : Char_Set; + -- First and last character of the set + First, Last : Wide_Character; + end record; + function Build_Desc (Name : Unicode_Sequence; + Code : Char_Code) return Language_Desc; + +end Language_Utils; + diff --git a/src/mapcodes-languages.adb b/src/mapcodes-languages.adb new file mode 100644 index 0000000..e18d210 --- /dev/null +++ b/src/mapcodes-languages.adb @@ -0,0 +1,430 @@ +-- ----------------------------------------------------------------------------- +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- ----------------------------------------------------------------------------- + +with Ada.Characters.Handling; +package body Mapcodes.Languages is + use Mapcode_Utils; + + -- Get the Language from its name in its language + -- Raises, if the output language is not known: + -- Unknown_Language : exception; + function Get_Language (Name : Unicode_Sequence) return Language_List is + use type Language_Utils.Unicode_Sequence; + begin + for L in Language_Defs.Langs'Range loop + if Language_Defs.Langs(L).Name.Txt = Name then + -- Name is the name of language L + return Language_List (L); + end if; + end loop; + return Default_Language; + end Get_Language; + + -- Get the language of a text (territory name or mapcode) + -- All the characters must be of the same language, otherwise raises + -- Invalid_Text : exception; + function Get_Language (Input : Wide_String) return Language_List is + First : Natural; + Found : Boolean; + Lang : Language_Defs.Language_List; + function Is_Shared (C : Wide_Character) return Boolean is + (C <= '9' or else C = 'I' or else C = 'O'); + begin + -- Discard empty string + if Input'Length = 0 then + raise Invalid_Text; + end if; + -- Find first non shared character + First := 0; + for I in Input'Range loop + if not Is_Shared (Input(I)) then + First := I; + exit; + end if; + end loop; + if First = 0 then + -- All characters are shared => Roman + Lang := Language_Defs.Language_List (Default_Language); + else + -- Find language of first character + Found := False; + for L in Language_Defs.Langs'Range loop + if not Is_Shared (Input(First)) + and then Input(First) >= Language_Defs.Langs(L).First + and then Input(First) <= Language_Defs.Langs(L).Last then + Found := True; + Lang := L; + exit; + end if; + end loop; + if not Found then + raise Invalid_Text; + end if; + end if; + -- Check that all characters belong to this language + for W of Input loop + if W /= '.' + and then W /= '-' + and then not Is_Shared (W) + and then (W < Language_Defs.Langs(Lang).First + or else W > Language_Defs.Langs(Lang).Last) then + raise Invalid_Text; + end if; + end loop; + return Language_List (Lang); + end Get_Language; + + -- Does a language use Abjad conversion + function Is_Abjad (Language : Language_List) return Boolean is + begin + return Language = Greek + or else Language = Hebrew + or else Language = Arabic + or else Language = Korean; + end Is_Abjad; + + -- Convert From Abjad + procedure Convert_From_Abjad (Str : in out As_U.Asu_Us) is + Lstr, Tail : As_U.Asu_Us; + Index, Form : Natural; + Code : Integer; + use type As_U.Asu_Us; + + -- Character code at a given index ( '4' -> 4) + function Str_At (P : Positive) return Natural is + (Character'Pos (Lstr.Element (P)) - Character'Pos ('0')); + begin + -- Save precision tail, including '-' + Lstr := Str; + Index := Lstr.Locate ("-"); + if Index /= 0 then + Tail := Lstr.Uslice (Index, Lstr.Length); + Lstr.Delete (Index, Lstr.Length); + end if; + + Lstr := As_U.Tus (Aeu_Unpack (Lstr.Image)); + Index := Lstr.Locate ("."); + if Index < 3 or else Index > 6 then + return; + end if; + + Form := 10 * (Index - 1) + (Lstr.Length - Index); + if Form = 23 then + Code := Str_At (4) * 8 + Str_At (5) - 18; + Lstr := Lstr.Uslice (1, 2) + & '.' & Encode_A_Char (Code) & Lstr.Element (6); + elsif Form = 24 then + Code := Str_At (4) * 8 + Str_At (5) - 18; + if Code >= 32 then + Lstr := Lstr.Uslice (1, 2) & Encode_A_Char (Code - 32) + & '.' & Lstr.Element (6) & Lstr.Element (7); + else + Lstr := Lstr.Uslice (1, 2) + & '.' & Encode_A_Char (Code) & Lstr.Element (6) & Lstr.Element (7); + end if; + elsif Form = 34 then + Code := Str_At (3) * 10 + Str_At (6) - 7; + if Code < 31 then + Lstr := Lstr.Uslice (1, 2) + & '.' & Encode_A_Char (Code) & Lstr.Element (5) & Lstr.Element (7) + & Lstr.Element (8); + elsif Code < 62 then + Lstr := Lstr.Uslice (1, 2) & Encode_A_Char (Code - 31) + & '.' & Lstr.Element (5) & Lstr.Element (7) & Lstr.Element (8); + + else + Lstr := Lstr.Uslice (1, 2) & Encode_A_Char (Code - 62) & Lstr.Element (5) + & '.' & Lstr.Element (7) & Lstr.Element (8); + end if; + elsif Form = 35 then + Code := Str_At (3) * 8 + Str_At (7) - 18; + if Code >= 32 then + Lstr := Lstr.Uslice (1, 2) & Encode_A_Char (Code - 32) & Lstr.Element (5) + & '.' & Lstr.Element (6) & Lstr.Element (8) + & Lstr.Element (9); + else + Lstr := Lstr.Uslice (1, 2) & Encode_A_Char (Code) + & '.' & Lstr.Element (5) & Lstr.Element (6) & Lstr.Element (8) + & Lstr.Element (9); + end if; + elsif Form = 45 then + Code := Str_At (3) * 100 + Str_At (6) * 10 + Str_At (9) - 39; + Lstr := Lstr.Uslice (1, 2) & Encode_A_Char (Code / 31) & Lstr.Element (4) + & '.' & Lstr.Element (7) & Lstr.Element (8) & Lstr.Element (10) + & Encode_A_Char (Code rem 31); + elsif Form = 55 then + Code := Str_At (3) * 100 + Str_At (7) * 10 + Str_At (10) - 39; + Lstr := Lstr.Uslice (1, 2) & Encode_A_Char (Code / 31) & Lstr.Element (4) + & Lstr.Element (5) + & '.' & Lstr.Element (8) & Lstr.Element (9) & Lstr.Element (11) + & Encode_A_Char (Code rem 31); + else + return; + end if; + + Str := As_U.Tus (Aeu_Pack (Lstr, False)) & Tail; + + end Convert_From_Abjad; + + -- Convert into Abjad + procedure Convert_Into_Abjad (Str : in out As_U.Asu_Us) is + Lstr, Tail : As_U.Asu_Us; + Index, Form : Natural; + Code : Integer; + C1, C2, C3 : Integer := 0; + use type As_U.Asu_Us; + + -- Character pos at a given index + function Str_At (P : Positive) return Natural is + (Character'Pos (Lstr.Element (P))); + function Char_Of (P : Natural) return Character is + (Character'Val (P + Character'Pos('0'))); + begin + -- Save precision tail, including '-' + Lstr := Str; + Index := Str.Locate ("-"); + if Index /= 0 then + Tail := Lstr.Uslice (Index, Str.Length); + Lstr.Delete (Index, Lstr.Length); + end if; + + Lstr := As_U.Tus (Aeu_Unpack (Lstr.Image)); + Index := Lstr.Locate ("."); + if Index < 3 or else Index > 6 then + return; + end if; + Form := 10 * (Index - 1) + (Lstr.Length - Index); + -- See if more than 2 non-digits in a row + Index := 0; + for I in 1 .. Lstr.Length loop + Code := Str_At (I); + -- Skip the dot + if Code /= 46 then + Index := Index + 1; + if Decode_A_Char (Code) <= 9 then + -- A digit + Index := 0; + elsif Index > 2 then + exit; + end if; + end if; + end loop; + + -- No need to convert + if Index < 3 and then + (Form = 22 or else + Form = 32 or else Form = 33 or else + Form = 42 or else Form = 43 or else Form = 44 or else + Form = 54) then + return; + end if; + Code := Decode_A_Char (Str_At (3)); + if Code < 0 then + Code := Decode_A_Char (Str_At (4)); + if Code < 0 then + return; + end if; + end if; + + -- Convert + if Form >= 44 then + Code := Code * 31 + Decode_A_Char (Str_At (Lstr.Length)) + 39; + if Code < 39 or else Code > 999 then + return; + end if; + C1 := Code / 100; + C2 := (Code rem 100) / 10; + C3 := Code rem 10; + elsif Lstr.Length = 7 then + if Form = 24 then + Code := Code + 7; + elsif Form = 33 then + Code := Code + 38; + elsif Form = 42 then + Code := Code + 69; + end if; + C1 := Code / 10; + C2 := Code rem 10; + else + C1 := 2 + Code / 8; + C2 := 2 + Code rem 8; + end if; + + if Form = 22 then + Lstr := Lstr.Uslice (1, 2) + & '.' & Char_Of (C1) & Char_Of (C2) & Lstr.Element (5); + elsif Form = 23 then + Lstr := Lstr.Uslice (1, 2) + & '.' & Char_Of (C1) & Char_Of (C2) + & Lstr.Element (5) & Lstr.Element (6); + elsif Form = 32 then + Lstr := Lstr.Uslice (1, 2) + & '.' & Char_Of (C1 + 4) & Char_Of (C2) + & Lstr.Element (5) & Lstr.Element (6); + elsif Form = 24 or else Form = 33 then + Lstr := Lstr.Uslice (1, 2) & Char_Of (C1) + & '.' & Lstr.Element (5) & Char_Of (C2) + & Lstr.Element (6) & Lstr.Element (7); + elsif Form = 42 then + Lstr := Lstr.Uslice (1, 2) & Char_Of (C1) + & '.' & Lstr.Element (4) & Char_Of (C2) + & Lstr.Element (6) & Lstr.Element (7); + elsif Form = 43 then + Lstr := Lstr.Uslice (1, 2) & Char_Of (C1 + 4) + & '.' & Lstr.Element (4) & Lstr.Element (6) + & Char_Of (C2) & Lstr.Element (7) & Lstr.Element (8); + elsif Form = 34 then + Lstr := Lstr.Uslice (1, 2) & Char_Of (C1) + & '.' & Lstr.Element (5) & Lstr.Element (6) + & Char_Of (C2) & Lstr.Element (7) & Lstr.Element (8); + elsif Form = 44 then + Lstr := Lstr.Uslice (1, 2) & Char_Of (C1) & Lstr.Element (4) + & '.' & Char_Of (C2) & Lstr.Element (6) & Lstr.Element (7) + & Char_Of (C3) & Lstr.Element (8); + elsif Form = 54 then + Lstr := Lstr.Uslice (1, 2) & Char_Of (C1) & Lstr.Element (4) + & Lstr.Element (5) + & '.' & Char_Of (C2) & Lstr.Element (7) & Lstr.Element (8) + & Char_Of (C3) & Lstr.Element (9); + else + return; + end if; + + Str := As_U.Tus (Aeu_Pack (Lstr, False)) & Tail; + end Convert_Into_Abjad; + + --Conversion of a text (territory name or mapcode) into a given language + -- The language of the input is detected automatically + -- Raises Invalid_Text if the input is not valid + function Convert (Input : Wide_String; + Output_Language : Language_List := Default_Language) + return Wide_String is + Input_Language : constant Language_List := Get_Language (Input); + Def_Input : constant Language_Defs.Language_List + := Language_Defs.Language_List (Input_Language); + Def_Output : constant Language_Defs.Language_List + := Language_Defs.Language_List (Output_Language); + Tmp_Wide : Wide_String (1 .. Input'Length); + Found : Boolean; + Tmp_Str, Tail : As_U.Asu_Us; + Index : Natural; + Code : Positive; + use type As_U.Asu_Us; + begin + -- Optim: nothing to do + if Output_Language = Input_Language then + return Input; + end if; + + -- Convert Input into Roman + --------------------------- + if Input_Language = Roman then + Tmp_Str := As_U.Tus (Ada.Characters.Handling.To_String (Input)); + else + Index := 0; + -- Replace each wide char + for W of Input loop + Index := Index + 1; + if W = '-' or else W = '.' then + Tmp_Wide(Index) := W; + else + Found := False; + for J in Language_Defs.Langs(Def_Input).Set'Range loop + if W = Language_Defs.Langs(Def_Input).Set(J) then + -- Found W in Set of Input_Language + -- => Replace by corresponding Romain + Found := True; + Tmp_Wide(Index) := + Language_Defs.Langs(Language_Defs.Roman).Set(J); + exit; + end if; + end loop; + if not Found then + raise Invalid_Text; + end if; + end if; + end loop; + + -- Roman string + Tmp_Str := As_U.Tus (Ada.Characters.Handling.To_String (Tmp_Wide)); + + -- Repack + if Tmp_Str.Element (1) = 'A' then + Index := Tmp_Str.Locate ("-"); + if Index /= 0 then + -- Save precision tail, including '-' + Tail := Tmp_Str.Uslice (Index, Tmp_Str.Length); + Tmp_Str.Delete (Index, Tmp_Str.Length); + end if; + Tmp_Str := Mapcodes.Aeu_Pack ( + As_U.Tus (Aeu_Unpack (Tmp_Str.Image)), + False) + & Tail; + end if; + + -- Abjad conversion + if Is_Abjad (Input_Language) then + Convert_From_Abjad (Tmp_Str); + end if; + end if; + + if Output_Language = Roman then + return Ada.Characters.Handling.To_Wide_String (Tmp_Str.Image); + end if; + + -- Convert Roman into output language + ------------------------------------- + if Is_Abjad (Output_Language) then + -- Abjad conversion + Convert_Into_Abjad (Tmp_Str); + end if; + + -- Unpack for languages that do not support E and U + if Output_Language = Greek then + Index := Tmp_Str.Locate ("-"); + Tail.Set_Null; + if Index /= 0 then + -- Save precision tail, including '-' + Tail := Tmp_Str.Uslice (Index, Tmp_Str.Length); + Tmp_Str.Delete (Index, Tmp_Str.Length); + end if; + if Tmp_Str.Locate ("E") /= 0 or else Tmp_Str.Locate ("U") /= 0 then + Tmp_Str := As_U.Tus + (Aeu_Pack (As_U.Tus (Aeu_Unpack (Tmp_Str.Image)), True)); + end if; + Tmp_Str := Tmp_Str & Tail; + end if; + + -- Substitute + declare + Result : Wide_String (1 .. Tmp_Str.Length); + begin + for I in 1 .. Tmp_Str.Length loop + Code := Character'Pos (Tmp_Str.Element (I)); + if Code >= 65 and then Code <= 90 then + Result(I) := Language_Defs.Langs(Def_Output).Set(Code - 64); + elsif Code >= 48 and then Code <= 57 then + Result(I) := Language_Defs.Langs(Def_Output).Set(Code + 26 - 47); + else + Result(I) := Wide_Character'Val (Code); + end if; + end loop; + return Result; + end; + end Convert; + +end Mapcodes.Languages; + diff --git a/src/mapcodes-languages.ads b/src/mapcodes-languages.ads new file mode 100644 index 0000000..4339559 --- /dev/null +++ b/src/mapcodes-languages.ads @@ -0,0 +1,52 @@ +-- ----------------------------------------------------------------------------- +-- Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- ----------------------------------------------------------------------------- + +with Language_Defs, Language_Utils; +package Mapcodes.Languages is + + -- The supported languages + -- The language names in Roman are the Mixed_Str images of these enums + type Language_List is new Language_Defs.Language_List; + -- Roman, Greek, Cyrillic, Hebrew, Devanagari, Malayalam, Georgian, Katakana, + -- Thai, Lao, Armenian, Bengali, Gurmukhi, Tibetan, Arabic, Korean, Burmese, + -- Khmer, Sinhalese, Thaana, Chinese, Tifinagh, Tamil, Amharic, Telugu, Odia, + -- Kannada, Gujarati + + -- The unicode sequence to provide a language name in its language + subtype Unicode_Sequence is Language_Utils.Unicode_Sequence; + + -- Get the Language from its name in its language + -- Raises, if the output language is not known: + Unknown_Language : exception; + function Get_Language (Name : Unicode_Sequence) return Language_List; + + -- Get the language of a text (territory name or mapcode) + -- All the characters must be of the same language, otherwise raises + Invalid_Text : exception; + function Get_Language (Input : Wide_String) return Language_List; + + -- The default language + Default_Language : constant Language_List := Roman; + + -- Conversion of a text (territory name or mapcode) into a given language + -- The language of the input is detected automatically + -- Raises Invalid_Text if the input is not valid + function Convert (Input : Wide_String; + Output_Language : Language_List := Default_Language) + return Wide_String; + +end Mapcodes.Languages; + diff --git a/src/mapcodes.adb b/src/mapcodes.adb index daaa2ba..e9c3340 100644 --- a/src/mapcodes.adb +++ b/src/mapcodes.adb @@ -14,8 +14,10 @@ -- limitations under the License. -- ----------------------------------------------------------------------------- +with Ada.Characters.Handling; with Mapcode_Utils.Str_Tools, Mapcode_Utils.Bits; use Mapcode_Utils; +with Mapcodes.Languages; with Ndata; package body Mapcodes is @@ -562,6 +564,9 @@ package body Mapcodes is 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z', 'A', 'E', 'U'); + function Decode_A_Char (C : Natural) return Integer is (Decode_Char(C + 1)); + function Encode_A_Char (C : Natural) return Character is (Encode_Char(C + 1)); + -- Given a minimum and maximum latitude, returns a relative stretch factor -- (in 360th) for the longitud function Xdivider4 (Miny, Maxy : Lint) return Natural is @@ -1087,7 +1092,7 @@ package body Mapcodes is end Decode_Extension; -- Add vowels to prevent a mapcode r from being all-digit - function Aeu_Pack(R : As_U.Asu_Us; Short : Boolean) return String is + function Aeu_Pack (R : As_U.Asu_Us; Short : Boolean) return String is Dotpos : Natural := 0; Result : As_U.Asu_Us := R; Rlen : Natural := Result.Length; @@ -1163,7 +1168,7 @@ package body Mapcodes is V2 := 31; end if; S := Image (1000 + V1 + 32 * V2); - Result := S(2) & Result.Uslice(2, Lastpos - 1) & S(3 .. 4); + Result := S(2) & Result.Uslice(2, Lastpos - 2) & S(3 .. 4); Voweled := True; elsif Result.Element(1) = 'U' then Result.Delete (1, 1); @@ -2075,11 +2080,34 @@ package body Mapcodes is function Decode (Mapcode, Context : String) return Coordinate is Contextterritorynumber : Integer; begin + -- Raise Decode error if Mapcode or Context is not in Roman + declare + Lm, Lc : Mapcodes.Languages.Language_List; + use type Mapcodes.Languages.Language_List; + begin + Lm := Mapcodes.Languages.Get_Language ( + Ada.Characters.Handling.To_Wide_String (Mapcode)); + if Context /= "" then + Lc := Mapcodes.Languages.Get_Language ( + Ada.Characters.Handling.To_Wide_String (Context)); + else + Lc := Mapcodes.Languages.Default_Language; + end if; + if Lm /= Mapcodes.Languages.Default_Language + or else Lc /= Mapcodes.Languages.Default_Language then + raise Decode_Error; + end if; + exception + when Mapcodes.Languages.Invalid_Text => + raise Decode_Error; + end; + -- Set context number if Context = Undefined then Contextterritorynumber := Ccode_Earth; else Contextterritorynumber := Integer (Get_Territory (Context)); end if; + -- Decode return Master_Decode (Mapcode, Contextterritorynumber); end Decode; diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 880ac9b..82aab8d 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -119,7 +119,7 @@ package Mapcodes is -- If Shortest is set, then at most one mapcode (the "default" and -- "shortest possible" mapcode) in any territory are returned -- The Precision option leads to produce mapcodes extended with high-precision - -- letters (the parameter specifies how many letters: 0 to 8 + -- letters (the parameter specifies how many letters, 0 to 8, after a '-') -- The resulting array is always organized by territories: all the mapcodes -- of a territory follow each other and in order of increasing length. -- If Sort is set, then the returned array contains first the shortest @@ -128,8 +128,8 @@ package Mapcodes is -- international (Earth) mapcode -- Otherwise the territories appear in the crescent order of Territory_Range -- (see package Countries) - -- As a consequence, if it appears the international mapcode is always the - -- last + -- As a consequence, if it appears then the international mapcode is always + -- the last subtype Precisions is Natural range 0 .. 8; Earth : constant String := "AAA"; function Encode (Coord : Coordinate; @@ -150,5 +150,13 @@ package Mapcodes is private type Territories is new Natural range 0 .. Countries.Territories_Def'Last - 1; + -- Operation exported to child package Languages + -- Packing and unpacking to avoid full digits mapcodes + function Aeu_Pack (R : Mapcode_Utils.As_U.Asu_Us; + Short : Boolean) return String; + function Aeu_Unpack (Str : String) return String; + -- Decode and encode a char + function Decode_A_Char (C : Natural) return Integer; + function Encode_A_Char (C : Natural) return Character; end Mapcodes; diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index e91047f..ec19787 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -15,10 +15,10 @@ -- ----------------------------------------------------------------------------- -- Mapcode test main program -with Ada.Command_Line, Ada.Text_Io; +with Ada.Command_Line, Ada.Text_Io, Ada.Strings.Utf_Encoding.Wide_Strings; with Mapcode_Utils.As_U, Mapcode_Utils.Str_Tools; use Mapcode_Utils; -with Mapcodes, Countries; +with Countries, Mapcodes.Languages; procedure T_Mapcode is use Mapcodes; @@ -44,6 +44,8 @@ procedure T_Mapcode is " -c [ ] // Encode"); Ada.Text_Io.Put_Line ( " -a [ ] // Alternative mapcodes"); + Ada.Text_Io.Put_Line ( + " -l [ ] // Convert into a language"); Ada.Text_Io.Put_Line ( " ::= : | [ ] "); Ada.Text_Io.Put_Line ( @@ -58,6 +60,10 @@ procedure T_Mapcode is " // local: the shortest among all the mapcodes"); Ada.Text_Io.Put_Line ( " ::= P0 .. P8 // Default P0 or from input"); + Ada.Text_Io.Put_Line ( + " ::= language name (any casing) or num (0 for Roman)"); + Ada.Text_Io.Put_Line ( + " // Input language is guessed, default output is Romaic"); end Usage; function Lower_Str (Str : String) return String is @@ -89,7 +95,7 @@ procedure T_Mapcode is & Get_Territory_Alpha_Code (Get_Parent_Of (Index))); end if; if Show_Subdivision and then Has_Subdivision (Index) then - Ada.Text_Io.Put_Line ( " Has subdivisions"); + Ada.Text_Io.Put_Line (" Has subdivisions"); end if; end Put_Territory; @@ -314,6 +320,51 @@ begin Coord := Decode (Arg1.Image, Arg2.Image); Ada.Text_Io.Put_Line ("=> " & Image (Coord.Lat) & " " & Image (Coord.Lon)); + elsif Command.Image = "-l" then + if I + 1 <= Ada.Command_Line.Argument_Count then + I := I + 1; + Arg1 := As_U.Tus (Ada.Command_Line.Argument (I)); + else + raise Argument_Error; + end if; + Arg2.Set_Null; + if I + 1 <= Ada.Command_Line.Argument_Count then + -- Optional output language + Arg2 := As_U.Tus (Ada.Command_Line.Argument (I + 1)); + if Arg2.Length = 0 and then Arg2.Element (1) = '-' then + Arg2.Set_Null; + else + I := I + 1; + end if; + end if; + -- Set output language + declare + Language : Mapcodes.Languages.Language_List + := Mapcodes.Languages.Roman; + begin + if not Arg2.Is_Null + and then Arg2.Element (1) >= '0' and then Arg2.Element (1) <= '9' then + -- Argument is language num + Language := Mapcodes.Languages.Language_List'Val ( + Natural'Value (Arg2.Image)); + elsif not Arg2.Is_Null then + -- Argument is language name + Language := Mapcodes.Languages.Language_List'Value ( + Mapcode_Utils.Str_Tools.Upper_Str (Arg2.Image)); + end if; + Ada.Text_Io.Put_Line ( + Ada.Strings.Utf_Encoding.Wide_Strings.Encode ( + Mapcodes.Languages.Convert ( + Ada.Strings.Utf_Encoding.Wide_Strings.Decode (Arg1.Image), + Language))); + exception + when Mapcodes.Decode_Error + | Mapcodes.Languages.Invalid_Text + | Mapcodes.Languages.Unknown_Language => + raise; + when others => + raise Argument_Error; + end; else raise Argument_Error; end if; @@ -331,6 +382,12 @@ exception when Mapcodes.Decode_Error => Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Raised Decode_Error"); Ada.Command_Line.Set_Exit_Status (1); + when Mapcodes.Languages.Invalid_Text => + Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Raised Invalid_Text"); + Ada.Command_Line.Set_Exit_Status (1); + when Mapcodes.Languages.Unknown_Language => + Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Raised Unknown_Language"); + Ada.Command_Line.Set_Exit_Status (1); when Argument_Error => Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Invalid Argument"); Ada.Command_Line.Set_Exit_Status (2); diff --git a/test/Alphabets b/test/Alphabets new file mode 100644 index 0000000..1c084ce --- /dev/null +++ b/test/Alphabets @@ -0,0 +1,4805 @@ +# ----------------------------------------------------------------------------- +# Copyright (C) 2003-2019 Stichting Mapcode Foundation (http://www.mapcode.com) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ----------------------------------------------------------------------------- + +#AlphabetNr MapcodeInRoman MapcodeInAlphabet BackInRoman +0 89.EU 89.EU 89.EU +0 00.0A 00.0A 00.0A +0 BCDF.GHJK BCDF.GHJK BCDF.GHJK +0 LMNP.QRST LMNP.QRST LMNP.QRST +0 VWXY.Z123 VWXY.Z123 VWXY.Z123 +0 4567.890B 4567.890B 4567.890B +0 PQ.XY PQ.XY PQ.XY +0 PQ.XYZ PQ.XYZ PQ.XYZ +0 PQX.YZ PQX.YZ PQX.YZ +0 PQ.RXYZ PQ.RXYZ PQ.RXYZ +0 PQR.XYZ PQR.XYZ PQR.XYZ +0 PQRX.YZ PQRX.YZ PQRX.YZ +0 PQR.SXYZ PQR.SXYZ PQR.SXYZ +0 PQRS.XYZ PQRS.XYZ PQRS.XYZ +0 PQRS.TXYZ PQRS.TXYZ PQRS.TXYZ +0 PQRST.VXYZ PQRST.VXYZ PQRST.VXYZ +0 P1.XY P1.XY P1.XY +0 PQ.2Y PQ.2Y PQ.2Y +0 3Q.X4 3Q.X4 3Q.X4 +0 5Q.6Y 5Q.6Y 5Q.6Y +0 PQ.1YZ PQ.1YZ PQ.1YZ +0 PQ1.YZ PQ1.YZ PQ1.YZ +0 P2.X3Z P2.X3Z P2.X3Z +0 P2X.3Z P2X.3Z P2X.3Z +0 PQ.1XY2 PQ.1XY2 PQ.1XY2 +0 PQ1.XY2 PQ1.XY2 PQ1.XY2 +0 PQ1X.Y2 PQ1X.Y2 PQ1X.Y2 +0 P3.RX4Z P3.RX4Z P3.RX4Z +0 P3R.X4Z P3R.X4Z P3R.X4Z +0 P3RX.4Z P3RX.4Z P3RX.4Z +0 5Q.R6Y7 5Q.R6Y7 5Q.R6Y7 +0 5QR.6Y7 5QR.6Y7 5QR.6Y7 +0 5QR6.Y7 5QR6.Y7 5QR6.Y7 +0 PQ1.SX2Z PQ1.SX2Z PQ1.SX2Z +0 PQ1S.X2Z PQ1S.X2Z PQ1S.X2Z +0 P3R.S4YZ P3R.S4YZ P3R.S4YZ +0 P3RS.4YZ P3RS.4YZ P3RS.4YZ +0 5QR.6XY7 5QR.6XY7 5QR.6XY7 +0 5QR6.XY7 5QR6.XY7 5QR6.XY7 +0 8Q9.SX0Z 8Q9.SX0Z 8Q9.SX0Z +0 8Q9S.X0Z 8Q9S.X0Z 8Q9S.X0Z +0 1QR2.TX3Z 1QR2.TX3Z 1QR2.TX3Z +0 P4RS.5XY6 P4RS.5XY6 P4RS.5XY6 +0 P7R8.T9Y0 P7R8.T9Y0 P7R8.T9Y0 +0 PQ1ST.2XY3 PQ1ST.2XY3 PQ1ST.2XY3 +0 P4RS5.VX6Z P4RS5.VX6Z P4RS5.VX6Z +0 7QR8T.V9YZ 7QR8T.V9YZ 7QR8T.V9YZ +0 P1R2T.3X4Z P1R2T.3X4Z P1R2T.3X4Z +0 5Q6S7.V8Y9 5Q6S7.V8Y9 5Q6S7.V8Y9 +0 ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ +0 ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ +0 OI.XX OI.XX OI.XX +0 OI.XX OI.XX OI.XX +0 OI.XX-OOOOOOOO OI.XX-OOOOOOOO OI.XX-OOOOOOOO +0 OI.XX-IIIIIIII OI.XX-IIIIIIII OI.XX-IIIIIIII +0 PQ.RS-01234567 PQ.RS-01234567 PQ.RS-01234567 +0 PQ.RS-890 PQ.RS-890 PQ.RS-890 +0 89.EU-BC 89.EU-BC 89.EU-BC +0 00.0A-BC 00.0A-BC 00.0A-BC +0 BCDF.GHJK-BC BCDF.GHJK-BC BCDF.GHJK-BC +0 LMNP.QRST-BC LMNP.QRST-BC LMNP.QRST-BC +0 VWXY.Z123-BC VWXY.Z123-BC VWXY.Z123-BC +0 4567.890B-BC 4567.890B-BC 4567.890B-BC +0 PQ.XY-BC PQ.XY-BC PQ.XY-BC +0 PQ.XYZ-BC PQ.XYZ-BC PQ.XYZ-BC +0 PQX.YZ-BC PQX.YZ-BC PQX.YZ-BC +0 PQ.RXYZ-BC PQ.RXYZ-BC PQ.RXYZ-BC +0 PQR.XYZ-BC PQR.XYZ-BC PQR.XYZ-BC +0 PQRX.YZ-BC PQRX.YZ-BC PQRX.YZ-BC +0 PQR.SXYZ-BC PQR.SXYZ-BC PQR.SXYZ-BC +0 PQRS.XYZ-BC PQRS.XYZ-BC PQRS.XYZ-BC +0 PQRS.TXYZ-BC PQRS.TXYZ-BC PQRS.TXYZ-BC +0 PQRST.VXYZ-BC PQRST.VXYZ-BC PQRST.VXYZ-BC +0 P1.XY-BC P1.XY-BC P1.XY-BC +0 PQ.2Y-BC PQ.2Y-BC PQ.2Y-BC +0 3Q.X4-BC 3Q.X4-BC 3Q.X4-BC +0 5Q.6Y-BC 5Q.6Y-BC 5Q.6Y-BC +0 PQ.1YZ-BC PQ.1YZ-BC PQ.1YZ-BC +0 PQ1.YZ-BC PQ1.YZ-BC PQ1.YZ-BC +0 P2.X3Z-BC P2.X3Z-BC P2.X3Z-BC +0 P2X.3Z-BC P2X.3Z-BC P2X.3Z-BC +0 PQ.1XY2-BC PQ.1XY2-BC PQ.1XY2-BC +0 PQ1.XY2-BC PQ1.XY2-BC PQ1.XY2-BC +0 PQ1X.Y2-BC PQ1X.Y2-BC PQ1X.Y2-BC +0 P3.RX4Z-BC P3.RX4Z-BC P3.RX4Z-BC +0 P3R.X4Z-BC P3R.X4Z-BC P3R.X4Z-BC +0 P3RX.4Z-BC P3RX.4Z-BC P3RX.4Z-BC +0 5Q.R6Y7-BC 5Q.R6Y7-BC 5Q.R6Y7-BC +0 5QR.6Y7-BC 5QR.6Y7-BC 5QR.6Y7-BC +0 5QR6.Y7-BC 5QR6.Y7-BC 5QR6.Y7-BC +0 PQ1.SX2Z-BC PQ1.SX2Z-BC PQ1.SX2Z-BC +0 PQ1S.X2Z-BC PQ1S.X2Z-BC PQ1S.X2Z-BC +0 P3R.S4YZ-BC P3R.S4YZ-BC P3R.S4YZ-BC +0 P3RS.4YZ-BC P3RS.4YZ-BC P3RS.4YZ-BC +0 5QR.6XY7-BC 5QR.6XY7-BC 5QR.6XY7-BC +0 5QR6.XY7-BC 5QR6.XY7-BC 5QR6.XY7-BC +0 8Q9.SX0Z-BC 8Q9.SX0Z-BC 8Q9.SX0Z-BC +0 8Q9S.X0Z-BC 8Q9S.X0Z-BC 8Q9S.X0Z-BC +0 1QR2.TX3Z-BC 1QR2.TX3Z-BC 1QR2.TX3Z-BC +0 P4RS.5XY6-BC P4RS.5XY6-BC P4RS.5XY6-BC +0 P7R8.T9Y0-BC P7R8.T9Y0-BC P7R8.T9Y0-BC +0 PQ1ST.2XY3-BC PQ1ST.2XY3-BC PQ1ST.2XY3-BC +0 P4RS5.VX6Z-BC P4RS5.VX6Z-BC P4RS5.VX6Z-BC +0 7QR8T.V9YZ-BC 7QR8T.V9YZ-BC 7QR8T.V9YZ-BC +0 P1R2T.3X4Z-BC P1R2T.3X4Z-BC P1R2T.3X4Z-BC +0 5Q6S7.V8Y9-BC 5Q6S7.V8Y9-BC 5Q6S7.V8Y9-BC +0 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +0 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +0 OI.XX-BC OI.XX-BC OI.XX-BC +0 OI.XX-BC OI.XX-BC OI.XX-BC +0 OI.XX-OOOOOOOO-BC OI.XX-OOOOOOOO-BC OI.XX-OOOOOOOO-BC +0 OI.XX-IIIIIIII-BC OI.XX-IIIIIIII-BC OI.XX-IIIIIIII-BC +0 PQ.RS-01234567-BC PQ.RS-01234567-BC PQ.RS-01234567-BC +0 PQ.RS-890-BC PQ.RS-890-BC PQ.RS-890-BC +0 89.EU-DFGHJKLM 89.EU-DFGHJKLM 89.EU-DFGHJKLM +0 00.0A-DFGHJKLM 00.0A-DFGHJKLM 00.0A-DFGHJKLM +0 BCDF.GHJK-DFGHJKLM BCDF.GHJK-DFGHJKLM BCDF.GHJK-DFGHJKLM +0 LMNP.QRST-DFGHJKLM LMNP.QRST-DFGHJKLM LMNP.QRST-DFGHJKLM +0 VWXY.Z123-DFGHJKLM VWXY.Z123-DFGHJKLM VWXY.Z123-DFGHJKLM +0 4567.890B-DFGHJKLM 4567.890B-DFGHJKLM 4567.890B-DFGHJKLM +0 PQ.XY-DFGHJKLM PQ.XY-DFGHJKLM PQ.XY-DFGHJKLM +0 PQ.XYZ-DFGHJKLM PQ.XYZ-DFGHJKLM PQ.XYZ-DFGHJKLM +0 PQX.YZ-DFGHJKLM PQX.YZ-DFGHJKLM PQX.YZ-DFGHJKLM +0 PQ.RXYZ-DFGHJKLM PQ.RXYZ-DFGHJKLM PQ.RXYZ-DFGHJKLM +0 PQR.XYZ-DFGHJKLM PQR.XYZ-DFGHJKLM PQR.XYZ-DFGHJKLM +0 PQRX.YZ-DFGHJKLM PQRX.YZ-DFGHJKLM PQRX.YZ-DFGHJKLM +0 PQR.SXYZ-DFGHJKLM PQR.SXYZ-DFGHJKLM PQR.SXYZ-DFGHJKLM +0 PQRS.XYZ-DFGHJKLM PQRS.XYZ-DFGHJKLM PQRS.XYZ-DFGHJKLM +0 PQRS.TXYZ-DFGHJKLM PQRS.TXYZ-DFGHJKLM PQRS.TXYZ-DFGHJKLM +0 PQRST.VXYZ-DFGHJKLM PQRST.VXYZ-DFGHJKLM PQRST.VXYZ-DFGHJKLM +0 P1.XY-DFGHJKLM P1.XY-DFGHJKLM P1.XY-DFGHJKLM +0 PQ.2Y-DFGHJKLM PQ.2Y-DFGHJKLM PQ.2Y-DFGHJKLM +0 3Q.X4-DFGHJKLM 3Q.X4-DFGHJKLM 3Q.X4-DFGHJKLM +0 5Q.6Y-DFGHJKLM 5Q.6Y-DFGHJKLM 5Q.6Y-DFGHJKLM +0 PQ.1YZ-DFGHJKLM PQ.1YZ-DFGHJKLM PQ.1YZ-DFGHJKLM +0 PQ1.YZ-DFGHJKLM PQ1.YZ-DFGHJKLM PQ1.YZ-DFGHJKLM +0 P2.X3Z-DFGHJKLM P2.X3Z-DFGHJKLM P2.X3Z-DFGHJKLM +0 P2X.3Z-DFGHJKLM P2X.3Z-DFGHJKLM P2X.3Z-DFGHJKLM +0 PQ.1XY2-DFGHJKLM PQ.1XY2-DFGHJKLM PQ.1XY2-DFGHJKLM +0 PQ1.XY2-DFGHJKLM PQ1.XY2-DFGHJKLM PQ1.XY2-DFGHJKLM +0 PQ1X.Y2-DFGHJKLM PQ1X.Y2-DFGHJKLM PQ1X.Y2-DFGHJKLM +0 P3.RX4Z-DFGHJKLM P3.RX4Z-DFGHJKLM P3.RX4Z-DFGHJKLM +0 P3R.X4Z-DFGHJKLM P3R.X4Z-DFGHJKLM P3R.X4Z-DFGHJKLM +0 P3RX.4Z-DFGHJKLM P3RX.4Z-DFGHJKLM P3RX.4Z-DFGHJKLM +0 5Q.R6Y7-DFGHJKLM 5Q.R6Y7-DFGHJKLM 5Q.R6Y7-DFGHJKLM +0 5QR.6Y7-DFGHJKLM 5QR.6Y7-DFGHJKLM 5QR.6Y7-DFGHJKLM +0 5QR6.Y7-DFGHJKLM 5QR6.Y7-DFGHJKLM 5QR6.Y7-DFGHJKLM +0 PQ1.SX2Z-DFGHJKLM PQ1.SX2Z-DFGHJKLM PQ1.SX2Z-DFGHJKLM +0 PQ1S.X2Z-DFGHJKLM PQ1S.X2Z-DFGHJKLM PQ1S.X2Z-DFGHJKLM +0 P3R.S4YZ-DFGHJKLM P3R.S4YZ-DFGHJKLM P3R.S4YZ-DFGHJKLM +0 P3RS.4YZ-DFGHJKLM P3RS.4YZ-DFGHJKLM P3RS.4YZ-DFGHJKLM +0 5QR.6XY7-DFGHJKLM 5QR.6XY7-DFGHJKLM 5QR.6XY7-DFGHJKLM +0 5QR6.XY7-DFGHJKLM 5QR6.XY7-DFGHJKLM 5QR6.XY7-DFGHJKLM +0 8Q9.SX0Z-DFGHJKLM 8Q9.SX0Z-DFGHJKLM 8Q9.SX0Z-DFGHJKLM +0 8Q9S.X0Z-DFGHJKLM 8Q9S.X0Z-DFGHJKLM 8Q9S.X0Z-DFGHJKLM +0 1QR2.TX3Z-DFGHJKLM 1QR2.TX3Z-DFGHJKLM 1QR2.TX3Z-DFGHJKLM +0 P4RS.5XY6-DFGHJKLM P4RS.5XY6-DFGHJKLM P4RS.5XY6-DFGHJKLM +0 P7R8.T9Y0-DFGHJKLM P7R8.T9Y0-DFGHJKLM P7R8.T9Y0-DFGHJKLM +0 PQ1ST.2XY3-DFGHJKLM PQ1ST.2XY3-DFGHJKLM PQ1ST.2XY3-DFGHJKLM +0 P4RS5.VX6Z-DFGHJKLM P4RS5.VX6Z-DFGHJKLM P4RS5.VX6Z-DFGHJKLM +0 7QR8T.V9YZ-DFGHJKLM 7QR8T.V9YZ-DFGHJKLM 7QR8T.V9YZ-DFGHJKLM +0 P1R2T.3X4Z-DFGHJKLM P1R2T.3X4Z-DFGHJKLM P1R2T.3X4Z-DFGHJKLM +0 5Q6S7.V8Y9-DFGHJKLM 5Q6S7.V8Y9-DFGHJKLM 5Q6S7.V8Y9-DFGHJKLM +0 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +0 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +0 OI.XX-DFGHJKLM OI.XX-DFGHJKLM OI.XX-DFGHJKLM +0 OI.XX-DFGHJKLM OI.XX-DFGHJKLM OI.XX-DFGHJKLM +0 OI.XX-OOOOOOOO-DFGHJKLM OI.XX-OOOOOOOO-DFGHJKLM OI.XX-OOOOOOOO-DFGHJKLM +0 OI.XX-IIIIIIII-DFGHJKLM OI.XX-IIIIIIII-DFGHJKLM OI.XX-IIIIIIII-DFGHJKLM +0 PQ.RS-01234567-DFGHJKLM PQ.RS-01234567-DFGHJKLM PQ.RS-01234567-DFGHJKLM +0 PQ.RS-890-DFGHJKLM PQ.RS-890-DFGHJKLM PQ.RS-890-DFGHJKLM +1 89.EU Α9.Ω3 89.EU +1 00.0A 00.0Α 00.0A +1 BCDF.GHJK ΒΞ4Ε.2ΓΗ8Π BCDF.GHJK +1 LMNP.QRST ΛΜ6Ρ.8ΘΨ4Σ LMNP.QRST +1 VWXY.Z123 ΦΩ9Υ.1Ζ102 VWXY.Z123 +1 4567.890B 4567.890Β 4567.890B +1 PQ.XY ΡΘ.56Υ PQ.XY +1 PQ.XYZ ΡΘ.56ΥΖ PQ.XYZ +1 PQX.YZ ΡΘ.96ΥΖ PQX.YZ +1 PQ.RXYZ ΡΘ3.Χ0ΥΖ PQ.RXYZ +1 PQR.XYZ ΡΘ6.Χ1ΥΖ PQR.XYZ +1 PQRX.YZ ΡΘ9.Χ2ΥΖ PQRX.YZ +1 PQR.SXYZ ΡΘ4.ΣΧ9ΥΖ PQR.SXYZ +1 PQRS.XYZ ΡΘ8.ΣΧ9ΥΖ PQRS.XYZ +1 PQRS.TXYZ ΡΘ7Σ.8ΤΧ2Υ PQRS.TXYZ +1 PQRST.VXYZ ΡΘ7ΣΤ.8ΦΧ2Υ PQRST.VXYZ +1 P1.XY Ρ1.ΧΥ P1.XY +1 PQ.2Y ΡΘ.2Υ PQ.2Y +1 3Q.X4 3Θ.Χ4 3Q.X4 +1 5Q.6Y 5Θ.6Υ 5Q.6Y +1 PQ.1YZ ΡΘ.23ΥΖ PQ.1YZ +1 PQ1.YZ ΡΘ1.ΥΖ PQ1.YZ +1 P2.X3Z Ρ2.563Ζ P2.X3Z +1 P2X.3Z Ρ2Χ.3Ζ P2X.3Z +1 PQ.1XY2 ΡΘ0.Χ8Υ2 PQ.1XY2 +1 PQ1.XY2 ΡΘ1.ΧΥ2 PQ1.XY2 +1 PQ1X.Y2 ΡΘ1Χ.Υ2 PQ1X.Y2 +1 P3.RX4Z Ρ33.Χ04Ζ P3.RX4Z +1 P3R.X4Z Ρ3Ψ.Χ4Ζ P3R.X4Z +1 P3RX.4Z Ρ3ΨΧ.4Ζ P3RX.4Z +1 5Q.R6Y7 5Θ3.60Υ7 5Q.R6Y7 +1 5QR.6Y7 5ΘΨ.6Υ7 5QR.6Y7 +1 5QR6.Y7 5ΘΨ6.Υ7 5QR6.Y7 +1 PQ1.SX2Z ΡΘ2.ΣΧ32Ζ PQ1.SX2Z +1 PQ1S.X2Z ΡΘ1Σ.Χ2Ζ PQ1S.X2Z +1 P3R.S4YZ Ρ34.Σ49ΥΖ P3R.S4YZ +1 P3RS.4YZ Ρ3ΨΣ.4ΥΖ P3RS.4YZ +1 5QR.6XY7 5Θ4.6Χ9Υ7 5QR.6XY7 +1 5QR6.XY7 5ΘΨ6.ΧΥ7 5QR6.XY7 +1 8Q9.SX0Z 8Θ3.ΣΧ30Ζ 8Q9.SX0Z +1 8Q9S.X0Z 8Θ9Σ.Χ0Ζ 8Q9S.X0Z +1 1QR2.TX3Z 1ΘΨ2.ΤΧ3Ζ 1QR2.TX3Z +1 P4RS.5XY6 Ρ4ΨΣ.5ΧΥ6 P4RS.5XY6 +1 P7R8.T9Y0 Ρ7Ψ8.Τ9Υ0 P7R8.T9Y0 +1 PQ1ST.2XY3 ΡΘ1ΣΤ.2ΧΥ3 PQ1ST.2XY3 +1 P4RS5.VX6Z Ρ4ΨΣ5.ΦΧ6Ζ P4RS5.VX6Z +1 7QR8T.V9YZ 7ΘΨ8Τ.Φ9ΥΖ 7QR8T.V9YZ +1 P1R2T.3X4Z Ρ1Ψ2Τ.3Χ4Ζ P1R2T.3X4Z +1 5Q6S7.V8Y9 5Θ6Σ7.Φ8Υ9 5Q6S7.V8Y9 +1 ABCDEFGHIJKLMNOPQRSTUVWXYZ ΑΒΞΔΈΕΓΗΙΠΚΛΜΝΟΡΘΨΣΤΉΦΩΧΥΖ ABCDEFGHIJKLMNOPQRSTUVWXYZ +1 ABCDEFGHIJKLMNOPQRSTUVWXYZ ΑΒΞΔΈΕΓΗΙΠΚΛΜΝΟΡΘΨΣΤΉΦΩΧΥΖ ABCDEFGHIJKLMNOPQRSTUVWXYZ +1 OI.XX ΟΙ.ΧΧ OI.XX +1 OI.XX ΟΙ.ΧΧ OI.XX +1 OI.XX-OOOOOOOO ΟΙ.ΧΧ-ΟΟΟΟΟΟΟΟ OI.XX-OOOOOOOO +1 OI.XX-IIIIIIII ΟΙ.ΧΧ-ΙΙΙΙΙΙΙΙ OI.XX-IIIIIIII +1 PQ.RS-01234567 ΡΘ.49Σ-01234567 PQ.RS-01234567 +1 PQ.RS-890 ΡΘ.49Σ-890 PQ.RS-890 +1 89.EU-BC Α9.Ω3-ΒΞ 89.EU-BC +1 00.0A-BC 00.0Α-ΒΞ 00.0A-BC +1 BCDF.GHJK-BC ΒΞ4Ε.2ΓΗ8Π-ΒΞ BCDF.GHJK-BC +1 LMNP.QRST-BC ΛΜ6Ρ.8ΘΨ4Σ-ΒΞ LMNP.QRST-BC +1 VWXY.Z123-BC ΦΩ9Υ.1Ζ102-ΒΞ VWXY.Z123-BC +1 4567.890B-BC 4567.890Β-ΒΞ 4567.890B-BC +1 PQ.XY-BC ΡΘ.56Υ-ΒΞ PQ.XY-BC +1 PQ.XYZ-BC ΡΘ.56ΥΖ-ΒΞ PQ.XYZ-BC +1 PQX.YZ-BC ΡΘ.96ΥΖ-ΒΞ PQX.YZ-BC +1 PQ.RXYZ-BC ΡΘ3.Χ0ΥΖ-ΒΞ PQ.RXYZ-BC +1 PQR.XYZ-BC ΡΘ6.Χ1ΥΖ-ΒΞ PQR.XYZ-BC +1 PQRX.YZ-BC ΡΘ9.Χ2ΥΖ-ΒΞ PQRX.YZ-BC +1 PQR.SXYZ-BC ΡΘ4.ΣΧ9ΥΖ-ΒΞ PQR.SXYZ-BC +1 PQRS.XYZ-BC ΡΘ8.ΣΧ9ΥΖ-ΒΞ PQRS.XYZ-BC +1 PQRS.TXYZ-BC ΡΘ7Σ.8ΤΧ2Υ-ΒΞ PQRS.TXYZ-BC +1 PQRST.VXYZ-BC ΡΘ7ΣΤ.8ΦΧ2Υ-ΒΞ PQRST.VXYZ-BC +1 P1.XY-BC Ρ1.ΧΥ-ΒΞ P1.XY-BC +1 PQ.2Y-BC ΡΘ.2Υ-ΒΞ PQ.2Y-BC +1 3Q.X4-BC 3Θ.Χ4-ΒΞ 3Q.X4-BC +1 5Q.6Y-BC 5Θ.6Υ-ΒΞ 5Q.6Y-BC +1 PQ.1YZ-BC ΡΘ.23ΥΖ-ΒΞ PQ.1YZ-BC +1 PQ1.YZ-BC ΡΘ1.ΥΖ-ΒΞ PQ1.YZ-BC +1 P2.X3Z-BC Ρ2.563Ζ-ΒΞ P2.X3Z-BC +1 P2X.3Z-BC Ρ2Χ.3Ζ-ΒΞ P2X.3Z-BC +1 PQ.1XY2-BC ΡΘ0.Χ8Υ2-ΒΞ PQ.1XY2-BC +1 PQ1.XY2-BC ΡΘ1.ΧΥ2-ΒΞ PQ1.XY2-BC +1 PQ1X.Y2-BC ΡΘ1Χ.Υ2-ΒΞ PQ1X.Y2-BC +1 P3.RX4Z-BC Ρ33.Χ04Ζ-ΒΞ P3.RX4Z-BC +1 P3R.X4Z-BC Ρ3Ψ.Χ4Ζ-ΒΞ P3R.X4Z-BC +1 P3RX.4Z-BC Ρ3ΨΧ.4Ζ-ΒΞ P3RX.4Z-BC +1 5Q.R6Y7-BC 5Θ3.60Υ7-ΒΞ 5Q.R6Y7-BC +1 5QR.6Y7-BC 5ΘΨ.6Υ7-ΒΞ 5QR.6Y7-BC +1 5QR6.Y7-BC 5ΘΨ6.Υ7-ΒΞ 5QR6.Y7-BC +1 PQ1.SX2Z-BC ΡΘ2.ΣΧ32Ζ-ΒΞ PQ1.SX2Z-BC +1 PQ1S.X2Z-BC ΡΘ1Σ.Χ2Ζ-ΒΞ PQ1S.X2Z-BC +1 P3R.S4YZ-BC Ρ34.Σ49ΥΖ-ΒΞ P3R.S4YZ-BC +1 P3RS.4YZ-BC Ρ3ΨΣ.4ΥΖ-ΒΞ P3RS.4YZ-BC +1 5QR.6XY7-BC 5Θ4.6Χ9Υ7-ΒΞ 5QR.6XY7-BC +1 5QR6.XY7-BC 5ΘΨ6.ΧΥ7-ΒΞ 5QR6.XY7-BC +1 8Q9.SX0Z-BC 8Θ3.ΣΧ30Ζ-ΒΞ 8Q9.SX0Z-BC +1 8Q9S.X0Z-BC 8Θ9Σ.Χ0Ζ-ΒΞ 8Q9S.X0Z-BC +1 1QR2.TX3Z-BC 1ΘΨ2.ΤΧ3Ζ-ΒΞ 1QR2.TX3Z-BC +1 P4RS.5XY6-BC Ρ4ΨΣ.5ΧΥ6-ΒΞ P4RS.5XY6-BC +1 P7R8.T9Y0-BC Ρ7Ψ8.Τ9Υ0-ΒΞ P7R8.T9Y0-BC +1 PQ1ST.2XY3-BC ΡΘ1ΣΤ.2ΧΥ3-ΒΞ PQ1ST.2XY3-BC +1 P4RS5.VX6Z-BC Ρ4ΨΣ5.ΦΧ6Ζ-ΒΞ P4RS5.VX6Z-BC +1 7QR8T.V9YZ-BC 7ΘΨ8Τ.Φ9ΥΖ-ΒΞ 7QR8T.V9YZ-BC +1 P1R2T.3X4Z-BC Ρ1Ψ2Τ.3Χ4Ζ-ΒΞ P1R2T.3X4Z-BC +1 5Q6S7.V8Y9-BC 5Θ6Σ7.Φ8Υ9-ΒΞ 5Q6S7.V8Y9-BC +1 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ΑΒΞΔΈΕΓΗΙΠΚΛΜΝΟΡΘΨΣΤΉΦΩΧΥΖ-ΒΞ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +1 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ΑΒΞΔΈΕΓΗΙΠΚΛΜΝΟΡΘΨΣΤΉΦΩΧΥΖ-ΒΞ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +1 OI.XX-BC ΟΙ.ΧΧ-ΒΞ OI.XX-BC +1 OI.XX-BC ΟΙ.ΧΧ-ΒΞ OI.XX-BC +1 OI.XX-OOOOOOOO-BC ΟΙ.ΧΧ-ΟΟΟΟΟΟΟΟ-ΒΞ OI.XX-OOOOOOOO-BC +1 OI.XX-IIIIIIII-BC ΟΙ.ΧΧ-ΙΙΙΙΙΙΙΙ-ΒΞ OI.XX-IIIIIIII-BC +1 PQ.RS-01234567-BC ΡΘ.49Σ-01234567-ΒΞ PQ.RS-01234567-BC +1 PQ.RS-890-BC ΡΘ.49Σ-890-ΒΞ PQ.RS-890-BC +1 89.EU-DFGHJKLM Α9.Ω3-ΔΕΓΗΠΚΛΜ 89.EU-DFGHJKLM +1 00.0A-DFGHJKLM 00.0Α-ΔΕΓΗΠΚΛΜ 00.0A-DFGHJKLM +1 BCDF.GHJK-DFGHJKLM ΒΞ4Ε.2ΓΗ8Π-ΔΕΓΗΠΚΛΜ BCDF.GHJK-DFGHJKLM +1 LMNP.QRST-DFGHJKLM ΛΜ6Ρ.8ΘΨ4Σ-ΔΕΓΗΠΚΛΜ LMNP.QRST-DFGHJKLM +1 VWXY.Z123-DFGHJKLM ΦΩ9Υ.1Ζ102-ΔΕΓΗΠΚΛΜ VWXY.Z123-DFGHJKLM +1 4567.890B-DFGHJKLM 4567.890Β-ΔΕΓΗΠΚΛΜ 4567.890B-DFGHJKLM +1 PQ.XY-DFGHJKLM ΡΘ.56Υ-ΔΕΓΗΠΚΛΜ PQ.XY-DFGHJKLM +1 PQ.XYZ-DFGHJKLM ΡΘ.56ΥΖ-ΔΕΓΗΠΚΛΜ PQ.XYZ-DFGHJKLM +1 PQX.YZ-DFGHJKLM ΡΘ.96ΥΖ-ΔΕΓΗΠΚΛΜ PQX.YZ-DFGHJKLM +1 PQ.RXYZ-DFGHJKLM ΡΘ3.Χ0ΥΖ-ΔΕΓΗΠΚΛΜ PQ.RXYZ-DFGHJKLM +1 PQR.XYZ-DFGHJKLM ΡΘ6.Χ1ΥΖ-ΔΕΓΗΠΚΛΜ PQR.XYZ-DFGHJKLM +1 PQRX.YZ-DFGHJKLM ΡΘ9.Χ2ΥΖ-ΔΕΓΗΠΚΛΜ PQRX.YZ-DFGHJKLM +1 PQR.SXYZ-DFGHJKLM ΡΘ4.ΣΧ9ΥΖ-ΔΕΓΗΠΚΛΜ PQR.SXYZ-DFGHJKLM +1 PQRS.XYZ-DFGHJKLM ΡΘ8.ΣΧ9ΥΖ-ΔΕΓΗΠΚΛΜ PQRS.XYZ-DFGHJKLM +1 PQRS.TXYZ-DFGHJKLM ΡΘ7Σ.8ΤΧ2Υ-ΔΕΓΗΠΚΛΜ PQRS.TXYZ-DFGHJKLM +1 PQRST.VXYZ-DFGHJKLM ΡΘ7ΣΤ.8ΦΧ2Υ-ΔΕΓΗΠΚΛΜ PQRST.VXYZ-DFGHJKLM +1 P1.XY-DFGHJKLM Ρ1.ΧΥ-ΔΕΓΗΠΚΛΜ P1.XY-DFGHJKLM +1 PQ.2Y-DFGHJKLM ΡΘ.2Υ-ΔΕΓΗΠΚΛΜ PQ.2Y-DFGHJKLM +1 3Q.X4-DFGHJKLM 3Θ.Χ4-ΔΕΓΗΠΚΛΜ 3Q.X4-DFGHJKLM +1 5Q.6Y-DFGHJKLM 5Θ.6Υ-ΔΕΓΗΠΚΛΜ 5Q.6Y-DFGHJKLM +1 PQ.1YZ-DFGHJKLM ΡΘ.23ΥΖ-ΔΕΓΗΠΚΛΜ PQ.1YZ-DFGHJKLM +1 PQ1.YZ-DFGHJKLM ΡΘ1.ΥΖ-ΔΕΓΗΠΚΛΜ PQ1.YZ-DFGHJKLM +1 P2.X3Z-DFGHJKLM Ρ2.563Ζ-ΔΕΓΗΠΚΛΜ P2.X3Z-DFGHJKLM +1 P2X.3Z-DFGHJKLM Ρ2Χ.3Ζ-ΔΕΓΗΠΚΛΜ P2X.3Z-DFGHJKLM +1 PQ.1XY2-DFGHJKLM ΡΘ0.Χ8Υ2-ΔΕΓΗΠΚΛΜ PQ.1XY2-DFGHJKLM +1 PQ1.XY2-DFGHJKLM ΡΘ1.ΧΥ2-ΔΕΓΗΠΚΛΜ PQ1.XY2-DFGHJKLM +1 PQ1X.Y2-DFGHJKLM ΡΘ1Χ.Υ2-ΔΕΓΗΠΚΛΜ PQ1X.Y2-DFGHJKLM +1 P3.RX4Z-DFGHJKLM Ρ33.Χ04Ζ-ΔΕΓΗΠΚΛΜ P3.RX4Z-DFGHJKLM +1 P3R.X4Z-DFGHJKLM Ρ3Ψ.Χ4Ζ-ΔΕΓΗΠΚΛΜ P3R.X4Z-DFGHJKLM +1 P3RX.4Z-DFGHJKLM Ρ3ΨΧ.4Ζ-ΔΕΓΗΠΚΛΜ P3RX.4Z-DFGHJKLM +1 5Q.R6Y7-DFGHJKLM 5Θ3.60Υ7-ΔΕΓΗΠΚΛΜ 5Q.R6Y7-DFGHJKLM +1 5QR.6Y7-DFGHJKLM 5ΘΨ.6Υ7-ΔΕΓΗΠΚΛΜ 5QR.6Y7-DFGHJKLM +1 5QR6.Y7-DFGHJKLM 5ΘΨ6.Υ7-ΔΕΓΗΠΚΛΜ 5QR6.Y7-DFGHJKLM +1 PQ1.SX2Z-DFGHJKLM ΡΘ2.ΣΧ32Ζ-ΔΕΓΗΠΚΛΜ PQ1.SX2Z-DFGHJKLM +1 PQ1S.X2Z-DFGHJKLM ΡΘ1Σ.Χ2Ζ-ΔΕΓΗΠΚΛΜ PQ1S.X2Z-DFGHJKLM +1 P3R.S4YZ-DFGHJKLM Ρ34.Σ49ΥΖ-ΔΕΓΗΠΚΛΜ P3R.S4YZ-DFGHJKLM +1 P3RS.4YZ-DFGHJKLM Ρ3ΨΣ.4ΥΖ-ΔΕΓΗΠΚΛΜ P3RS.4YZ-DFGHJKLM +1 5QR.6XY7-DFGHJKLM 5Θ4.6Χ9Υ7-ΔΕΓΗΠΚΛΜ 5QR.6XY7-DFGHJKLM +1 5QR6.XY7-DFGHJKLM 5ΘΨ6.ΧΥ7-ΔΕΓΗΠΚΛΜ 5QR6.XY7-DFGHJKLM +1 8Q9.SX0Z-DFGHJKLM 8Θ3.ΣΧ30Ζ-ΔΕΓΗΠΚΛΜ 8Q9.SX0Z-DFGHJKLM +1 8Q9S.X0Z-DFGHJKLM 8Θ9Σ.Χ0Ζ-ΔΕΓΗΠΚΛΜ 8Q9S.X0Z-DFGHJKLM +1 1QR2.TX3Z-DFGHJKLM 1ΘΨ2.ΤΧ3Ζ-ΔΕΓΗΠΚΛΜ 1QR2.TX3Z-DFGHJKLM +1 P4RS.5XY6-DFGHJKLM Ρ4ΨΣ.5ΧΥ6-ΔΕΓΗΠΚΛΜ P4RS.5XY6-DFGHJKLM +1 P7R8.T9Y0-DFGHJKLM Ρ7Ψ8.Τ9Υ0-ΔΕΓΗΠΚΛΜ P7R8.T9Y0-DFGHJKLM +1 PQ1ST.2XY3-DFGHJKLM ΡΘ1ΣΤ.2ΧΥ3-ΔΕΓΗΠΚΛΜ PQ1ST.2XY3-DFGHJKLM +1 P4RS5.VX6Z-DFGHJKLM Ρ4ΨΣ5.ΦΧ6Ζ-ΔΕΓΗΠΚΛΜ P4RS5.VX6Z-DFGHJKLM +1 7QR8T.V9YZ-DFGHJKLM 7ΘΨ8Τ.Φ9ΥΖ-ΔΕΓΗΠΚΛΜ 7QR8T.V9YZ-DFGHJKLM +1 P1R2T.3X4Z-DFGHJKLM Ρ1Ψ2Τ.3Χ4Ζ-ΔΕΓΗΠΚΛΜ P1R2T.3X4Z-DFGHJKLM +1 5Q6S7.V8Y9-DFGHJKLM 5Θ6Σ7.Φ8Υ9-ΔΕΓΗΠΚΛΜ 5Q6S7.V8Y9-DFGHJKLM +1 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ΑΒΞΔΈΕΓΗΙΠΚΛΜΝΟΡΘΨΣΤΉΦΩΧΥΖ-ΔΕΓΗΠΚΛΜ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +1 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ΑΒΞΔΈΕΓΗΙΠΚΛΜΝΟΡΘΨΣΤΉΦΩΧΥΖ-ΔΕΓΗΠΚΛΜ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +1 OI.XX-DFGHJKLM ΟΙ.ΧΧ-ΔΕΓΗΠΚΛΜ OI.XX-DFGHJKLM +1 OI.XX-DFGHJKLM ΟΙ.ΧΧ-ΔΕΓΗΠΚΛΜ OI.XX-DFGHJKLM +1 OI.XX-OOOOOOOO-DFGHJKLM ΟΙ.ΧΧ-ΟΟΟΟΟΟΟΟ-ΔΕΓΗΠΚΛΜ OI.XX-OOOOOOOO-DFGHJKLM +1 OI.XX-IIIIIIII-DFGHJKLM ΟΙ.ΧΧ-ΙΙΙΙΙΙΙΙ-ΔΕΓΗΠΚΛΜ OI.XX-IIIIIIII-DFGHJKLM +1 PQ.RS-01234567-DFGHJKLM ΡΘ.49Σ-01234567-ΔΕΓΗΠΚΛΜ PQ.RS-01234567-DFGHJKLM +1 PQ.RS-890-DFGHJKLM ΡΘ.49Σ-890-ΔΕΓΗΠΚΛΜ PQ.RS-890-DFGHJKLM +2 89.EU 89.ЕЭ 89.EU +2 00.0A 00.0А 00.0A +2 BCDF.GHJK ВСДЖ.ГНПК BCDF.GHJK +2 LMNP.QRST ЛМЗР.ФЯЦТ LMNP.QRST +2 VWXY.Z123 ЧШХУ.Б123 VWXY.Z123 +2 4567.890B 4567.890В 4567.890B +2 PQ.XY РФ.ХУ PQ.XY +2 PQ.XYZ РФ.ХУБ PQ.XYZ +2 PQX.YZ РФХ.УБ PQX.YZ +2 PQ.RXYZ РФ.ЯХУБ PQ.RXYZ +2 PQR.XYZ РФЯ.ХУБ PQR.XYZ +2 PQRX.YZ РФЯХ.УБ PQRX.YZ +2 PQR.SXYZ РФЯ.ЦХУБ PQR.SXYZ +2 PQRS.XYZ РФЯЦ.ХУБ PQRS.XYZ +2 PQRS.TXYZ РФЯЦ.ТХУБ PQRS.TXYZ +2 PQRST.VXYZ РФЯЦТ.ЧХУБ PQRST.VXYZ +2 P1.XY Р1.ХУ P1.XY +2 PQ.2Y РФ.2У PQ.2Y +2 3Q.X4 3Ф.Х4 3Q.X4 +2 5Q.6Y 5Ф.6У 5Q.6Y +2 PQ.1YZ РФ.1УБ PQ.1YZ +2 PQ1.YZ РФ1.УБ PQ1.YZ +2 P2.X3Z Р2.Х3Б P2.X3Z +2 P2X.3Z Р2Х.3Б P2X.3Z +2 PQ.1XY2 РФ.1ХУ2 PQ.1XY2 +2 PQ1.XY2 РФ1.ХУ2 PQ1.XY2 +2 PQ1X.Y2 РФ1Х.У2 PQ1X.Y2 +2 P3.RX4Z Р3.ЯХ4Б P3.RX4Z +2 P3R.X4Z Р3Я.Х4Б P3R.X4Z +2 P3RX.4Z Р3ЯХ.4Б P3RX.4Z +2 5Q.R6Y7 5Ф.Я6У7 5Q.R6Y7 +2 5QR.6Y7 5ФЯ.6У7 5QR.6Y7 +2 5QR6.Y7 5ФЯ6.У7 5QR6.Y7 +2 PQ1.SX2Z РФ1.ЦХ2Б PQ1.SX2Z +2 PQ1S.X2Z РФ1Ц.Х2Б PQ1S.X2Z +2 P3R.S4YZ Р3Я.Ц4УБ P3R.S4YZ +2 P3RS.4YZ Р3ЯЦ.4УБ P3RS.4YZ +2 5QR.6XY7 5ФЯ.6ХУ7 5QR.6XY7 +2 5QR6.XY7 5ФЯ6.ХУ7 5QR6.XY7 +2 8Q9.SX0Z 8Ф9.ЦХ0Б 8Q9.SX0Z +2 8Q9S.X0Z 8Ф9Ц.Х0Б 8Q9S.X0Z +2 1QR2.TX3Z 1ФЯ2.ТХ3Б 1QR2.TX3Z +2 P4RS.5XY6 Р4ЯЦ.5ХУ6 P4RS.5XY6 +2 P7R8.T9Y0 Р7Я8.Т9У0 P7R8.T9Y0 +2 PQ1ST.2XY3 РФ1ЦТ.2ХУ3 PQ1ST.2XY3 +2 P4RS5.VX6Z Р4ЯЦ5.ЧХ6Б P4RS5.VX6Z +2 7QR8T.V9YZ 7ФЯ8Т.Ч9УБ 7QR8T.V9YZ +2 P1R2T.3X4Z Р1Я2Т.3Х4Б P1R2T.3X4Z +2 5Q6S7.V8Y9 5Ф6Ц7.Ч8У9 5Q6S7.V8Y9 +2 ABCDEFGHIJKLMNOPQRSTUVWXYZ АВСДЕЖГНIПКЛМЗОРФЯЦТЭЧШХУБ ABCDEFGHIJKLMNOPQRSTUVWXYZ +2 ABCDEFGHIJKLMNOPQRSTUVWXYZ АВСДЕЖГНIПКЛМЗОРФЯЦТЭЧШХУБ ABCDEFGHIJKLMNOPQRSTUVWXYZ +2 OI.XX ОI.ХХ OI.XX +2 OI.XX ОI.ХХ OI.XX +2 OI.XX-OOOOOOOO ОI.ХХ-ОООООООО OI.XX-OOOOOOOO +2 OI.XX-IIIIIIII ОI.ХХ-IIIIIIII OI.XX-IIIIIIII +2 PQ.RS-01234567 РФ.ЯЦ-01234567 PQ.RS-01234567 +2 PQ.RS-890 РФ.ЯЦ-890 PQ.RS-890 +2 89.EU-BC 89.ЕЭ-ВС 89.EU-BC +2 00.0A-BC 00.0А-ВС 00.0A-BC +2 BCDF.GHJK-BC ВСДЖ.ГНПК-ВС BCDF.GHJK-BC +2 LMNP.QRST-BC ЛМЗР.ФЯЦТ-ВС LMNP.QRST-BC +2 VWXY.Z123-BC ЧШХУ.Б123-ВС VWXY.Z123-BC +2 4567.890B-BC 4567.890В-ВС 4567.890B-BC +2 PQ.XY-BC РФ.ХУ-ВС PQ.XY-BC +2 PQ.XYZ-BC РФ.ХУБ-ВС PQ.XYZ-BC +2 PQX.YZ-BC РФХ.УБ-ВС PQX.YZ-BC +2 PQ.RXYZ-BC РФ.ЯХУБ-ВС PQ.RXYZ-BC +2 PQR.XYZ-BC РФЯ.ХУБ-ВС PQR.XYZ-BC +2 PQRX.YZ-BC РФЯХ.УБ-ВС PQRX.YZ-BC +2 PQR.SXYZ-BC РФЯ.ЦХУБ-ВС PQR.SXYZ-BC +2 PQRS.XYZ-BC РФЯЦ.ХУБ-ВС PQRS.XYZ-BC +2 PQRS.TXYZ-BC РФЯЦ.ТХУБ-ВС PQRS.TXYZ-BC +2 PQRST.VXYZ-BC РФЯЦТ.ЧХУБ-ВС PQRST.VXYZ-BC +2 P1.XY-BC Р1.ХУ-ВС P1.XY-BC +2 PQ.2Y-BC РФ.2У-ВС PQ.2Y-BC +2 3Q.X4-BC 3Ф.Х4-ВС 3Q.X4-BC +2 5Q.6Y-BC 5Ф.6У-ВС 5Q.6Y-BC +2 PQ.1YZ-BC РФ.1УБ-ВС PQ.1YZ-BC +2 PQ1.YZ-BC РФ1.УБ-ВС PQ1.YZ-BC +2 P2.X3Z-BC Р2.Х3Б-ВС P2.X3Z-BC +2 P2X.3Z-BC Р2Х.3Б-ВС P2X.3Z-BC +2 PQ.1XY2-BC РФ.1ХУ2-ВС PQ.1XY2-BC +2 PQ1.XY2-BC РФ1.ХУ2-ВС PQ1.XY2-BC +2 PQ1X.Y2-BC РФ1Х.У2-ВС PQ1X.Y2-BC +2 P3.RX4Z-BC Р3.ЯХ4Б-ВС P3.RX4Z-BC +2 P3R.X4Z-BC Р3Я.Х4Б-ВС P3R.X4Z-BC +2 P3RX.4Z-BC Р3ЯХ.4Б-ВС P3RX.4Z-BC +2 5Q.R6Y7-BC 5Ф.Я6У7-ВС 5Q.R6Y7-BC +2 5QR.6Y7-BC 5ФЯ.6У7-ВС 5QR.6Y7-BC +2 5QR6.Y7-BC 5ФЯ6.У7-ВС 5QR6.Y7-BC +2 PQ1.SX2Z-BC РФ1.ЦХ2Б-ВС PQ1.SX2Z-BC +2 PQ1S.X2Z-BC РФ1Ц.Х2Б-ВС PQ1S.X2Z-BC +2 P3R.S4YZ-BC Р3Я.Ц4УБ-ВС P3R.S4YZ-BC +2 P3RS.4YZ-BC Р3ЯЦ.4УБ-ВС P3RS.4YZ-BC +2 5QR.6XY7-BC 5ФЯ.6ХУ7-ВС 5QR.6XY7-BC +2 5QR6.XY7-BC 5ФЯ6.ХУ7-ВС 5QR6.XY7-BC +2 8Q9.SX0Z-BC 8Ф9.ЦХ0Б-ВС 8Q9.SX0Z-BC +2 8Q9S.X0Z-BC 8Ф9Ц.Х0Б-ВС 8Q9S.X0Z-BC +2 1QR2.TX3Z-BC 1ФЯ2.ТХ3Б-ВС 1QR2.TX3Z-BC +2 P4RS.5XY6-BC Р4ЯЦ.5ХУ6-ВС P4RS.5XY6-BC +2 P7R8.T9Y0-BC Р7Я8.Т9У0-ВС P7R8.T9Y0-BC +2 PQ1ST.2XY3-BC РФ1ЦТ.2ХУ3-ВС PQ1ST.2XY3-BC +2 P4RS5.VX6Z-BC Р4ЯЦ5.ЧХ6Б-ВС P4RS5.VX6Z-BC +2 7QR8T.V9YZ-BC 7ФЯ8Т.Ч9УБ-ВС 7QR8T.V9YZ-BC +2 P1R2T.3X4Z-BC Р1Я2Т.3Х4Б-ВС P1R2T.3X4Z-BC +2 5Q6S7.V8Y9-BC 5Ф6Ц7.Ч8У9-ВС 5Q6S7.V8Y9-BC +2 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC АВСДЕЖГНIПКЛМЗОРФЯЦТЭЧШХУБ-ВС ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +2 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC АВСДЕЖГНIПКЛМЗОРФЯЦТЭЧШХУБ-ВС ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +2 OI.XX-BC ОI.ХХ-ВС OI.XX-BC +2 OI.XX-BC ОI.ХХ-ВС OI.XX-BC +2 OI.XX-OOOOOOOO-BC ОI.ХХ-ОООООООО-ВС OI.XX-OOOOOOOO-BC +2 OI.XX-IIIIIIII-BC ОI.ХХ-IIIIIIII-ВС OI.XX-IIIIIIII-BC +2 PQ.RS-01234567-BC РФ.ЯЦ-01234567-ВС PQ.RS-01234567-BC +2 PQ.RS-890-BC РФ.ЯЦ-890-ВС PQ.RS-890-BC +2 89.EU-DFGHJKLM 89.ЕЭ-ДЖГНПКЛМ 89.EU-DFGHJKLM +2 00.0A-DFGHJKLM 00.0А-ДЖГНПКЛМ 00.0A-DFGHJKLM +2 BCDF.GHJK-DFGHJKLM ВСДЖ.ГНПК-ДЖГНПКЛМ BCDF.GHJK-DFGHJKLM +2 LMNP.QRST-DFGHJKLM ЛМЗР.ФЯЦТ-ДЖГНПКЛМ LMNP.QRST-DFGHJKLM +2 VWXY.Z123-DFGHJKLM ЧШХУ.Б123-ДЖГНПКЛМ VWXY.Z123-DFGHJKLM +2 4567.890B-DFGHJKLM 4567.890В-ДЖГНПКЛМ 4567.890B-DFGHJKLM +2 PQ.XY-DFGHJKLM РФ.ХУ-ДЖГНПКЛМ PQ.XY-DFGHJKLM +2 PQ.XYZ-DFGHJKLM РФ.ХУБ-ДЖГНПКЛМ PQ.XYZ-DFGHJKLM +2 PQX.YZ-DFGHJKLM РФХ.УБ-ДЖГНПКЛМ PQX.YZ-DFGHJKLM +2 PQ.RXYZ-DFGHJKLM РФ.ЯХУБ-ДЖГНПКЛМ PQ.RXYZ-DFGHJKLM +2 PQR.XYZ-DFGHJKLM РФЯ.ХУБ-ДЖГНПКЛМ PQR.XYZ-DFGHJKLM +2 PQRX.YZ-DFGHJKLM РФЯХ.УБ-ДЖГНПКЛМ PQRX.YZ-DFGHJKLM +2 PQR.SXYZ-DFGHJKLM РФЯ.ЦХУБ-ДЖГНПКЛМ PQR.SXYZ-DFGHJKLM +2 PQRS.XYZ-DFGHJKLM РФЯЦ.ХУБ-ДЖГНПКЛМ PQRS.XYZ-DFGHJKLM +2 PQRS.TXYZ-DFGHJKLM РФЯЦ.ТХУБ-ДЖГНПКЛМ PQRS.TXYZ-DFGHJKLM +2 PQRST.VXYZ-DFGHJKLM РФЯЦТ.ЧХУБ-ДЖГНПКЛМ PQRST.VXYZ-DFGHJKLM +2 P1.XY-DFGHJKLM Р1.ХУ-ДЖГНПКЛМ P1.XY-DFGHJKLM +2 PQ.2Y-DFGHJKLM РФ.2У-ДЖГНПКЛМ PQ.2Y-DFGHJKLM +2 3Q.X4-DFGHJKLM 3Ф.Х4-ДЖГНПКЛМ 3Q.X4-DFGHJKLM +2 5Q.6Y-DFGHJKLM 5Ф.6У-ДЖГНПКЛМ 5Q.6Y-DFGHJKLM +2 PQ.1YZ-DFGHJKLM РФ.1УБ-ДЖГНПКЛМ PQ.1YZ-DFGHJKLM +2 PQ1.YZ-DFGHJKLM РФ1.УБ-ДЖГНПКЛМ PQ1.YZ-DFGHJKLM +2 P2.X3Z-DFGHJKLM Р2.Х3Б-ДЖГНПКЛМ P2.X3Z-DFGHJKLM +2 P2X.3Z-DFGHJKLM Р2Х.3Б-ДЖГНПКЛМ P2X.3Z-DFGHJKLM +2 PQ.1XY2-DFGHJKLM РФ.1ХУ2-ДЖГНПКЛМ PQ.1XY2-DFGHJKLM +2 PQ1.XY2-DFGHJKLM РФ1.ХУ2-ДЖГНПКЛМ PQ1.XY2-DFGHJKLM +2 PQ1X.Y2-DFGHJKLM РФ1Х.У2-ДЖГНПКЛМ PQ1X.Y2-DFGHJKLM +2 P3.RX4Z-DFGHJKLM Р3.ЯХ4Б-ДЖГНПКЛМ P3.RX4Z-DFGHJKLM +2 P3R.X4Z-DFGHJKLM Р3Я.Х4Б-ДЖГНПКЛМ P3R.X4Z-DFGHJKLM +2 P3RX.4Z-DFGHJKLM Р3ЯХ.4Б-ДЖГНПКЛМ P3RX.4Z-DFGHJKLM +2 5Q.R6Y7-DFGHJKLM 5Ф.Я6У7-ДЖГНПКЛМ 5Q.R6Y7-DFGHJKLM +2 5QR.6Y7-DFGHJKLM 5ФЯ.6У7-ДЖГНПКЛМ 5QR.6Y7-DFGHJKLM +2 5QR6.Y7-DFGHJKLM 5ФЯ6.У7-ДЖГНПКЛМ 5QR6.Y7-DFGHJKLM +2 PQ1.SX2Z-DFGHJKLM РФ1.ЦХ2Б-ДЖГНПКЛМ PQ1.SX2Z-DFGHJKLM +2 PQ1S.X2Z-DFGHJKLM РФ1Ц.Х2Б-ДЖГНПКЛМ PQ1S.X2Z-DFGHJKLM +2 P3R.S4YZ-DFGHJKLM Р3Я.Ц4УБ-ДЖГНПКЛМ P3R.S4YZ-DFGHJKLM +2 P3RS.4YZ-DFGHJKLM Р3ЯЦ.4УБ-ДЖГНПКЛМ P3RS.4YZ-DFGHJKLM +2 5QR.6XY7-DFGHJKLM 5ФЯ.6ХУ7-ДЖГНПКЛМ 5QR.6XY7-DFGHJKLM +2 5QR6.XY7-DFGHJKLM 5ФЯ6.ХУ7-ДЖГНПКЛМ 5QR6.XY7-DFGHJKLM +2 8Q9.SX0Z-DFGHJKLM 8Ф9.ЦХ0Б-ДЖГНПКЛМ 8Q9.SX0Z-DFGHJKLM +2 8Q9S.X0Z-DFGHJKLM 8Ф9Ц.Х0Б-ДЖГНПКЛМ 8Q9S.X0Z-DFGHJKLM +2 1QR2.TX3Z-DFGHJKLM 1ФЯ2.ТХ3Б-ДЖГНПКЛМ 1QR2.TX3Z-DFGHJKLM +2 P4RS.5XY6-DFGHJKLM Р4ЯЦ.5ХУ6-ДЖГНПКЛМ P4RS.5XY6-DFGHJKLM +2 P7R8.T9Y0-DFGHJKLM Р7Я8.Т9У0-ДЖГНПКЛМ P7R8.T9Y0-DFGHJKLM +2 PQ1ST.2XY3-DFGHJKLM РФ1ЦТ.2ХУ3-ДЖГНПКЛМ PQ1ST.2XY3-DFGHJKLM +2 P4RS5.VX6Z-DFGHJKLM Р4ЯЦ5.ЧХ6Б-ДЖГНПКЛМ P4RS5.VX6Z-DFGHJKLM +2 7QR8T.V9YZ-DFGHJKLM 7ФЯ8Т.Ч9УБ-ДЖГНПКЛМ 7QR8T.V9YZ-DFGHJKLM +2 P1R2T.3X4Z-DFGHJKLM Р1Я2Т.3Х4Б-ДЖГНПКЛМ P1R2T.3X4Z-DFGHJKLM +2 5Q6S7.V8Y9-DFGHJKLM 5Ф6Ц7.Ч8У9-ДЖГНПКЛМ 5Q6S7.V8Y9-DFGHJKLM +2 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM АВСДЕЖГНIПКЛМЗОРФЯЦТЭЧШХУБ-ДЖГНПКЛМ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +2 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM АВСДЕЖГНIПКЛМЗОРФЯЦТЭЧШХУБ-ДЖГНПКЛМ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +2 OI.XX-DFGHJKLM ОI.ХХ-ДЖГНПКЛМ OI.XX-DFGHJKLM +2 OI.XX-DFGHJKLM ОI.ХХ-ДЖГНПКЛМ OI.XX-DFGHJKLM +2 OI.XX-OOOOOOOO-DFGHJKLM ОI.ХХ-ОООООООО-ДЖГНПКЛМ OI.XX-OOOOOOOO-DFGHJKLM +2 OI.XX-IIIIIIII-DFGHJKLM ОI.ХХ-IIIIIIII-ДЖГНПКЛМ OI.XX-IIIIIIII-DFGHJKLM +2 PQ.RS-01234567-DFGHJKLM РФ.ЯЦ-01234567-ДЖГНПКЛМ PQ.RS-01234567-DFGHJKLM +2 PQ.RS-890-DFGHJKLM РФ.ЯЦ-890-ДЖГНПКЛМ PQ.RS-890-DFGHJKLM +3 89.EU 89.ףץ 89.EU +3 00.0A 00.0א 00.0A +3 BCDF.GHJK בג4ה.2זח8ט BCDF.GHJK +3 LMNP.QRST ךכ6ם.8מנ4ע LMNP.QRST +3 VWXY.Z123 צק9ש.1ת102 VWXY.Z123 +3 4567.890B 4567.890ב 4567.890B +3 PQ.XY םמ.56ש PQ.XY +3 PQ.XYZ םמ.56שת PQ.XYZ +3 PQX.YZ םמ.96שת PQX.YZ +3 PQ.RXYZ םמ3.ר0שת PQ.RXYZ +3 PQR.XYZ םמ6.ר1שת PQR.XYZ +3 PQRX.YZ םמ9.ר2שת PQRX.YZ +3 PQR.SXYZ םמ4.ער9שת PQR.SXYZ +3 PQRS.XYZ םמ8.ער9שת PQRS.XYZ +3 PQRS.TXYZ םמ7ע.8פר2ש PQRS.TXYZ +3 PQRST.VXYZ םמ7עפ.8צר2ש PQRST.VXYZ +3 P1.XY ם1.רש P1.XY +3 PQ.2Y םמ.2ש PQ.2Y +3 3Q.X4 3מ.ר4 3Q.X4 +3 5Q.6Y 5מ.6ש 5Q.6Y +3 PQ.1YZ םמ.23שת PQ.1YZ +3 PQ1.YZ םמ1.שת PQ1.YZ +3 P2.X3Z ם2.563ת P2.X3Z +3 P2X.3Z ם2ר.3ת P2X.3Z +3 PQ.1XY2 םמ0.ר8ש2 PQ.1XY2 +3 PQ1.XY2 םמ1.רש2 PQ1.XY2 +3 PQ1X.Y2 םמ1ר.ש2 PQ1X.Y2 +3 P3.RX4Z ם33.ר04ת P3.RX4Z +3 P3R.X4Z ם3נ.ר4ת P3R.X4Z +3 P3RX.4Z ם3נר.4ת P3RX.4Z +3 5Q.R6Y7 5מ3.60ש7 5Q.R6Y7 +3 5QR.6Y7 5מנ.6ש7 5QR.6Y7 +3 5QR6.Y7 5מנ6.ש7 5QR6.Y7 +3 PQ1.SX2Z םמ2.ער32ת PQ1.SX2Z +3 PQ1S.X2Z םמ1ע.ר2ת PQ1S.X2Z +3 P3R.S4YZ ם34.ע49שת P3R.S4YZ +3 P3RS.4YZ ם3נע.4שת P3RS.4YZ +3 5QR.6XY7 5מ4.6ר9ש7 5QR.6XY7 +3 5QR6.XY7 5מנ6.רש7 5QR6.XY7 +3 8Q9.SX0Z 8מ3.ער30ת 8Q9.SX0Z +3 8Q9S.X0Z 8מ9ע.ר0ת 8Q9S.X0Z +3 1QR2.TX3Z 1מנ2.פר3ת 1QR2.TX3Z +3 P4RS.5XY6 ם4נע.5רש6 P4RS.5XY6 +3 P7R8.T9Y0 ם7נ8.פ9ש0 P7R8.T9Y0 +3 PQ1ST.2XY3 םמ1עפ.2רש3 PQ1ST.2XY3 +3 P4RS5.VX6Z ם4נע5.צר6ת P4RS5.VX6Z +3 7QR8T.V9YZ 7מנ8פ.צ9שת 7QR8T.V9YZ +3 P1R2T.3X4Z ם1נ2פ.3ר4ת P1R2T.3X4Z +3 5Q6S7.V8Y9 5מ6ע7.צ8ש9 5Q6S7.V8Y9 +3 ABCDEFGHIJKLMNOPQRSTUVWXYZ אבגדףהזחוטיךכלסםמנעפץצקרשת ABCDEFGHIJKLMNOPQRSTUVWXYZ +3 ABCDEFGHIJKLMNOPQRSTUVWXYZ אבגדףהזחוטיךכלסםמנעפץצקרשת ABCDEFGHIJKLMNOPQRSTUVWXYZ +3 OI.XX סו.רר OI.XX +3 OI.XX סו.רר OI.XX +3 OI.XX-OOOOOOOO סו.רר-סססססססס OI.XX-OOOOOOOO +3 OI.XX-IIIIIIII סו.רר-וווווווו OI.XX-IIIIIIII +3 PQ.RS-01234567 םמ.49ע-01234567 PQ.RS-01234567 +3 PQ.RS-890 םמ.49ע-890 PQ.RS-890 +3 89.EU-BC 89.ףץ-בג 89.EU-BC +3 00.0A-BC 00.0א-בג 00.0A-BC +3 BCDF.GHJK-BC בג4ה.2זח8ט-בג BCDF.GHJK-BC +3 LMNP.QRST-BC ךכ6ם.8מנ4ע-בג LMNP.QRST-BC +3 VWXY.Z123-BC צק9ש.1ת102-בג VWXY.Z123-BC +3 4567.890B-BC 4567.890ב-בג 4567.890B-BC +3 PQ.XY-BC םמ.56ש-בג PQ.XY-BC +3 PQ.XYZ-BC םמ.56שת-בג PQ.XYZ-BC +3 PQX.YZ-BC םמ.96שת-בג PQX.YZ-BC +3 PQ.RXYZ-BC םמ3.ר0שת-בג PQ.RXYZ-BC +3 PQR.XYZ-BC םמ6.ר1שת-בג PQR.XYZ-BC +3 PQRX.YZ-BC םמ9.ר2שת-בג PQRX.YZ-BC +3 PQR.SXYZ-BC םמ4.ער9שת-בג PQR.SXYZ-BC +3 PQRS.XYZ-BC םמ8.ער9שת-בג PQRS.XYZ-BC +3 PQRS.TXYZ-BC םמ7ע.8פר2ש-בג PQRS.TXYZ-BC +3 PQRST.VXYZ-BC םמ7עפ.8צר2ש-בג PQRST.VXYZ-BC +3 P1.XY-BC ם1.רש-בג P1.XY-BC +3 PQ.2Y-BC םמ.2ש-בג PQ.2Y-BC +3 3Q.X4-BC 3מ.ר4-בג 3Q.X4-BC +3 5Q.6Y-BC 5מ.6ש-בג 5Q.6Y-BC +3 PQ.1YZ-BC םמ.23שת-בג PQ.1YZ-BC +3 PQ1.YZ-BC םמ1.שת-בג PQ1.YZ-BC +3 P2.X3Z-BC ם2.563ת-בג P2.X3Z-BC +3 P2X.3Z-BC ם2ר.3ת-בג P2X.3Z-BC +3 PQ.1XY2-BC םמ0.ר8ש2-בג PQ.1XY2-BC +3 PQ1.XY2-BC םמ1.רש2-בג PQ1.XY2-BC +3 PQ1X.Y2-BC םמ1ר.ש2-בג PQ1X.Y2-BC +3 P3.RX4Z-BC ם33.ר04ת-בג P3.RX4Z-BC +3 P3R.X4Z-BC ם3נ.ר4ת-בג P3R.X4Z-BC +3 P3RX.4Z-BC ם3נר.4ת-בג P3RX.4Z-BC +3 5Q.R6Y7-BC 5מ3.60ש7-בג 5Q.R6Y7-BC +3 5QR.6Y7-BC 5מנ.6ש7-בג 5QR.6Y7-BC +3 5QR6.Y7-BC 5מנ6.ש7-בג 5QR6.Y7-BC +3 PQ1.SX2Z-BC םמ2.ער32ת-בג PQ1.SX2Z-BC +3 PQ1S.X2Z-BC םמ1ע.ר2ת-בג PQ1S.X2Z-BC +3 P3R.S4YZ-BC ם34.ע49שת-בג P3R.S4YZ-BC +3 P3RS.4YZ-BC ם3נע.4שת-בג P3RS.4YZ-BC +3 5QR.6XY7-BC 5מ4.6ר9ש7-בג 5QR.6XY7-BC +3 5QR6.XY7-BC 5מנ6.רש7-בג 5QR6.XY7-BC +3 8Q9.SX0Z-BC 8מ3.ער30ת-בג 8Q9.SX0Z-BC +3 8Q9S.X0Z-BC 8מ9ע.ר0ת-בג 8Q9S.X0Z-BC +3 1QR2.TX3Z-BC 1מנ2.פר3ת-בג 1QR2.TX3Z-BC +3 P4RS.5XY6-BC ם4נע.5רש6-בג P4RS.5XY6-BC +3 P7R8.T9Y0-BC ם7נ8.פ9ש0-בג P7R8.T9Y0-BC +3 PQ1ST.2XY3-BC םמ1עפ.2רש3-בג PQ1ST.2XY3-BC +3 P4RS5.VX6Z-BC ם4נע5.צר6ת-בג P4RS5.VX6Z-BC +3 7QR8T.V9YZ-BC 7מנ8פ.צ9שת-בג 7QR8T.V9YZ-BC +3 P1R2T.3X4Z-BC ם1נ2פ.3ר4ת-בג P1R2T.3X4Z-BC +3 5Q6S7.V8Y9-BC 5מ6ע7.צ8ש9-בג 5Q6S7.V8Y9-BC +3 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC אבגדףהזחוטיךכלסםמנעפץצקרשת-בג ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +3 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC אבגדףהזחוטיךכלסםמנעפץצקרשת-בג ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +3 OI.XX-BC סו.רר-בג OI.XX-BC +3 OI.XX-BC סו.רר-בג OI.XX-BC +3 OI.XX-OOOOOOOO-BC סו.רר-סססססססס-בג OI.XX-OOOOOOOO-BC +3 OI.XX-IIIIIIII-BC סו.רר-וווווווו-בג OI.XX-IIIIIIII-BC +3 PQ.RS-01234567-BC םמ.49ע-01234567-בג PQ.RS-01234567-BC +3 PQ.RS-890-BC םמ.49ע-890-בג PQ.RS-890-BC +3 89.EU-DFGHJKLM 89.ףץ-דהזחטיךכ 89.EU-DFGHJKLM +3 00.0A-DFGHJKLM 00.0א-דהזחטיךכ 00.0A-DFGHJKLM +3 BCDF.GHJK-DFGHJKLM בג4ה.2זח8ט-דהזחטיךכ BCDF.GHJK-DFGHJKLM +3 LMNP.QRST-DFGHJKLM ךכ6ם.8מנ4ע-דהזחטיךכ LMNP.QRST-DFGHJKLM +3 VWXY.Z123-DFGHJKLM צק9ש.1ת102-דהזחטיךכ VWXY.Z123-DFGHJKLM +3 4567.890B-DFGHJKLM 4567.890ב-דהזחטיךכ 4567.890B-DFGHJKLM +3 PQ.XY-DFGHJKLM םמ.56ש-דהזחטיךכ PQ.XY-DFGHJKLM +3 PQ.XYZ-DFGHJKLM םמ.56שת-דהזחטיךכ PQ.XYZ-DFGHJKLM +3 PQX.YZ-DFGHJKLM םמ.96שת-דהזחטיךכ PQX.YZ-DFGHJKLM +3 PQ.RXYZ-DFGHJKLM םמ3.ר0שת-דהזחטיךכ PQ.RXYZ-DFGHJKLM +3 PQR.XYZ-DFGHJKLM םמ6.ר1שת-דהזחטיךכ PQR.XYZ-DFGHJKLM +3 PQRX.YZ-DFGHJKLM םמ9.ר2שת-דהזחטיךכ PQRX.YZ-DFGHJKLM +3 PQR.SXYZ-DFGHJKLM םמ4.ער9שת-דהזחטיךכ PQR.SXYZ-DFGHJKLM +3 PQRS.XYZ-DFGHJKLM םמ8.ער9שת-דהזחטיךכ PQRS.XYZ-DFGHJKLM +3 PQRS.TXYZ-DFGHJKLM םמ7ע.8פר2ש-דהזחטיךכ PQRS.TXYZ-DFGHJKLM +3 PQRST.VXYZ-DFGHJKLM םמ7עפ.8צר2ש-דהזחטיךכ PQRST.VXYZ-DFGHJKLM +3 P1.XY-DFGHJKLM ם1.רש-דהזחטיךכ P1.XY-DFGHJKLM +3 PQ.2Y-DFGHJKLM םמ.2ש-דהזחטיךכ PQ.2Y-DFGHJKLM +3 3Q.X4-DFGHJKLM 3מ.ר4-דהזחטיךכ 3Q.X4-DFGHJKLM +3 5Q.6Y-DFGHJKLM 5מ.6ש-דהזחטיךכ 5Q.6Y-DFGHJKLM +3 PQ.1YZ-DFGHJKLM םמ.23שת-דהזחטיךכ PQ.1YZ-DFGHJKLM +3 PQ1.YZ-DFGHJKLM םמ1.שת-דהזחטיךכ PQ1.YZ-DFGHJKLM +3 P2.X3Z-DFGHJKLM ם2.563ת-דהזחטיךכ P2.X3Z-DFGHJKLM +3 P2X.3Z-DFGHJKLM ם2ר.3ת-דהזחטיךכ P2X.3Z-DFGHJKLM +3 PQ.1XY2-DFGHJKLM םמ0.ר8ש2-דהזחטיךכ PQ.1XY2-DFGHJKLM +3 PQ1.XY2-DFGHJKLM םמ1.רש2-דהזחטיךכ PQ1.XY2-DFGHJKLM +3 PQ1X.Y2-DFGHJKLM םמ1ר.ש2-דהזחטיךכ PQ1X.Y2-DFGHJKLM +3 P3.RX4Z-DFGHJKLM ם33.ר04ת-דהזחטיךכ P3.RX4Z-DFGHJKLM +3 P3R.X4Z-DFGHJKLM ם3נ.ר4ת-דהזחטיךכ P3R.X4Z-DFGHJKLM +3 P3RX.4Z-DFGHJKLM ם3נר.4ת-דהזחטיךכ P3RX.4Z-DFGHJKLM +3 5Q.R6Y7-DFGHJKLM 5מ3.60ש7-דהזחטיךכ 5Q.R6Y7-DFGHJKLM +3 5QR.6Y7-DFGHJKLM 5מנ.6ש7-דהזחטיךכ 5QR.6Y7-DFGHJKLM +3 5QR6.Y7-DFGHJKLM 5מנ6.ש7-דהזחטיךכ 5QR6.Y7-DFGHJKLM +3 PQ1.SX2Z-DFGHJKLM םמ2.ער32ת-דהזחטיךכ PQ1.SX2Z-DFGHJKLM +3 PQ1S.X2Z-DFGHJKLM םמ1ע.ר2ת-דהזחטיךכ PQ1S.X2Z-DFGHJKLM +3 P3R.S4YZ-DFGHJKLM ם34.ע49שת-דהזחטיךכ P3R.S4YZ-DFGHJKLM +3 P3RS.4YZ-DFGHJKLM ם3נע.4שת-דהזחטיךכ P3RS.4YZ-DFGHJKLM +3 5QR.6XY7-DFGHJKLM 5מ4.6ר9ש7-דהזחטיךכ 5QR.6XY7-DFGHJKLM +3 5QR6.XY7-DFGHJKLM 5מנ6.רש7-דהזחטיךכ 5QR6.XY7-DFGHJKLM +3 8Q9.SX0Z-DFGHJKLM 8מ3.ער30ת-דהזחטיךכ 8Q9.SX0Z-DFGHJKLM +3 8Q9S.X0Z-DFGHJKLM 8מ9ע.ר0ת-דהזחטיךכ 8Q9S.X0Z-DFGHJKLM +3 1QR2.TX3Z-DFGHJKLM 1מנ2.פר3ת-דהזחטיךכ 1QR2.TX3Z-DFGHJKLM +3 P4RS.5XY6-DFGHJKLM ם4נע.5רש6-דהזחטיךכ P4RS.5XY6-DFGHJKLM +3 P7R8.T9Y0-DFGHJKLM ם7נ8.פ9ש0-דהזחטיךכ P7R8.T9Y0-DFGHJKLM +3 PQ1ST.2XY3-DFGHJKLM םמ1עפ.2רש3-דהזחטיךכ PQ1ST.2XY3-DFGHJKLM +3 P4RS5.VX6Z-DFGHJKLM ם4נע5.צר6ת-דהזחטיךכ P4RS5.VX6Z-DFGHJKLM +3 7QR8T.V9YZ-DFGHJKLM 7מנ8פ.צ9שת-דהזחטיךכ 7QR8T.V9YZ-DFGHJKLM +3 P1R2T.3X4Z-DFGHJKLM ם1נ2פ.3ר4ת-דהזחטיךכ P1R2T.3X4Z-DFGHJKLM +3 5Q6S7.V8Y9-DFGHJKLM 5מ6ע7.צ8ש9-דהזחטיךכ 5Q6S7.V8Y9-DFGHJKLM +3 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM אבגדףהזחוטיךכלסםמנעפץצקרשת-דהזחטיךכ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +3 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM אבגדףהזחוטיךכלסםמנעפץצקרשת-דהזחטיךכ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +3 OI.XX-DFGHJKLM סו.רר-דהזחטיךכ OI.XX-DFGHJKLM +3 OI.XX-DFGHJKLM סו.רר-דהזחטיךכ OI.XX-DFGHJKLM +3 OI.XX-OOOOOOOO-DFGHJKLM סו.רר-סססססססס-דהזחטיךכ OI.XX-OOOOOOOO-DFGHJKLM +3 OI.XX-IIIIIIII-DFGHJKLM סו.רר-וווווווו-דהזחטיךכ OI.XX-IIIIIIII-DFGHJKLM +3 PQ.RS-01234567-DFGHJKLM םמ.49ע-01234567-דהזחטיךכ PQ.RS-01234567-DFGHJKLM +3 PQ.RS-890-DFGHJKLM םמ.49ע-890-דהזחטיךכ PQ.RS-890-DFGHJKLM +4 89.EU ८९.एफ 89.EU +4 00.0A ००.०अ 00.0A +4 BCDF.GHJK कगघच.जटठण BCDF.GHJK +4 LMNP.QRST तदधन.पभमर LMNP.QRST +4 VWXY.Z123 लवसह.ब१२३ VWXY.Z123 +4 4567.890B ४५६७.८९०क 4567.890B +4 PQ.XY नप.सह PQ.XY +4 PQ.XYZ नप.सहब PQ.XYZ +4 PQX.YZ नपस.हब PQX.YZ +4 PQ.RXYZ नप.भसहब PQ.RXYZ +4 PQR.XYZ नपभ.सहब PQR.XYZ +4 PQRX.YZ नपभस.हब PQRX.YZ +4 PQR.SXYZ नपभ.मसहब PQR.SXYZ +4 PQRS.XYZ नपभम.सहब PQRS.XYZ +4 PQRS.TXYZ नपभम.रसहब PQRS.TXYZ +4 PQRST.VXYZ नपभमर.लसहब PQRST.VXYZ +4 P1.XY न१.सह P1.XY +4 PQ.2Y नप.२ह PQ.2Y +4 3Q.X4 ३प.स४ 3Q.X4 +4 5Q.6Y ५प.६ह 5Q.6Y +4 PQ.1YZ नप.१हब PQ.1YZ +4 PQ1.YZ नप१.हब PQ1.YZ +4 P2.X3Z न२.स३ब P2.X3Z +4 P2X.3Z न२स.३ब P2X.3Z +4 PQ.1XY2 नप.१सह२ PQ.1XY2 +4 PQ1.XY2 नप१.सह२ PQ1.XY2 +4 PQ1X.Y2 नप१स.ह२ PQ1X.Y2 +4 P3.RX4Z न३.भस४ब P3.RX4Z +4 P3R.X4Z न३भ.स४ब P3R.X4Z +4 P3RX.4Z न३भस.४ब P3RX.4Z +4 5Q.R6Y7 ५प.भ६ह७ 5Q.R6Y7 +4 5QR.6Y7 ५पभ.६ह७ 5QR.6Y7 +4 5QR6.Y7 ५पभ६.ह७ 5QR6.Y7 +4 PQ1.SX2Z नप१.मस२ब PQ1.SX2Z +4 PQ1S.X2Z नप१म.स२ब PQ1S.X2Z +4 P3R.S4YZ न३भ.म४हब P3R.S4YZ +4 P3RS.4YZ न३भम.४हब P3RS.4YZ +4 5QR.6XY7 ५पभ.६सह७ 5QR.6XY7 +4 5QR6.XY7 ५पभ६.सह७ 5QR6.XY7 +4 8Q9.SX0Z ८प९.मस०ब 8Q9.SX0Z +4 8Q9S.X0Z ८प९म.स०ब 8Q9S.X0Z +4 1QR2.TX3Z १पभ२.रस३ब 1QR2.TX3Z +4 P4RS.5XY6 न४भम.५सह६ P4RS.5XY6 +4 P7R8.T9Y0 न७भ८.र९ह० P7R8.T9Y0 +4 PQ1ST.2XY3 नप१मर.२सह३ PQ1ST.2XY3 +4 P4RS5.VX6Z न४भम५.लस६ब P4RS5.VX6Z +4 7QR8T.V9YZ ७पभ८र.ल९हब 7QR8T.V9YZ +4 P1R2T.3X4Z न१भ२र.३स४ब P1R2T.3X4Z +4 5Q6S7.V8Y9 ५प६म७.ल८ह९ 5Q6S7.V8Y9 +4 ABCDEFGHIJKLMNOPQRSTUVWXYZ अकगघएचजटIठणतदधOनपभमरफलवसहब ABCDEFGHIJKLMNOPQRSTUVWXYZ +4 ABCDEFGHIJKLMNOPQRSTUVWXYZ अकगघएचजटIठणतदधOनपभमरफलवसहब ABCDEFGHIJKLMNOPQRSTUVWXYZ +4 OI.XX OI.सस OI.XX +4 OI.XX OI.सस OI.XX +4 OI.XX-OOOOOOOO OI.सस-OOOOOOOO OI.XX-OOOOOOOO +4 OI.XX-IIIIIIII OI.सस-IIIIIIII OI.XX-IIIIIIII +4 PQ.RS-01234567 नप.भम-०१२३४५६७ PQ.RS-01234567 +4 PQ.RS-890 नप.भम-८९० PQ.RS-890 +4 89.EU-BC ८९.एफ-कग 89.EU-BC +4 00.0A-BC ००.०अ-कग 00.0A-BC +4 BCDF.GHJK-BC कगघच.जटठण-कग BCDF.GHJK-BC +4 LMNP.QRST-BC तदधन.पभमर-कग LMNP.QRST-BC +4 VWXY.Z123-BC लवसह.ब१२३-कग VWXY.Z123-BC +4 4567.890B-BC ४५६७.८९०क-कग 4567.890B-BC +4 PQ.XY-BC नप.सह-कग PQ.XY-BC +4 PQ.XYZ-BC नप.सहब-कग PQ.XYZ-BC +4 PQX.YZ-BC नपस.हब-कग PQX.YZ-BC +4 PQ.RXYZ-BC नप.भसहब-कग PQ.RXYZ-BC +4 PQR.XYZ-BC नपभ.सहब-कग PQR.XYZ-BC +4 PQRX.YZ-BC नपभस.हब-कग PQRX.YZ-BC +4 PQR.SXYZ-BC नपभ.मसहब-कग PQR.SXYZ-BC +4 PQRS.XYZ-BC नपभम.सहब-कग PQRS.XYZ-BC +4 PQRS.TXYZ-BC नपभम.रसहब-कग PQRS.TXYZ-BC +4 PQRST.VXYZ-BC नपभमर.लसहब-कग PQRST.VXYZ-BC +4 P1.XY-BC न१.सह-कग P1.XY-BC +4 PQ.2Y-BC नप.२ह-कग PQ.2Y-BC +4 3Q.X4-BC ३प.स४-कग 3Q.X4-BC +4 5Q.6Y-BC ५प.६ह-कग 5Q.6Y-BC +4 PQ.1YZ-BC नप.१हब-कग PQ.1YZ-BC +4 PQ1.YZ-BC नप१.हब-कग PQ1.YZ-BC +4 P2.X3Z-BC न२.स३ब-कग P2.X3Z-BC +4 P2X.3Z-BC न२स.३ब-कग P2X.3Z-BC +4 PQ.1XY2-BC नप.१सह२-कग PQ.1XY2-BC +4 PQ1.XY2-BC नप१.सह२-कग PQ1.XY2-BC +4 PQ1X.Y2-BC नप१स.ह२-कग PQ1X.Y2-BC +4 P3.RX4Z-BC न३.भस४ब-कग P3.RX4Z-BC +4 P3R.X4Z-BC न३भ.स४ब-कग P3R.X4Z-BC +4 P3RX.4Z-BC न३भस.४ब-कग P3RX.4Z-BC +4 5Q.R6Y7-BC ५प.भ६ह७-कग 5Q.R6Y7-BC +4 5QR.6Y7-BC ५पभ.६ह७-कग 5QR.6Y7-BC +4 5QR6.Y7-BC ५पभ६.ह७-कग 5QR6.Y7-BC +4 PQ1.SX2Z-BC नप१.मस२ब-कग PQ1.SX2Z-BC +4 PQ1S.X2Z-BC नप१म.स२ब-कग PQ1S.X2Z-BC +4 P3R.S4YZ-BC न३भ.म४हब-कग P3R.S4YZ-BC +4 P3RS.4YZ-BC न३भम.४हब-कग P3RS.4YZ-BC +4 5QR.6XY7-BC ५पभ.६सह७-कग 5QR.6XY7-BC +4 5QR6.XY7-BC ५पभ६.सह७-कग 5QR6.XY7-BC +4 8Q9.SX0Z-BC ८प९.मस०ब-कग 8Q9.SX0Z-BC +4 8Q9S.X0Z-BC ८प९म.स०ब-कग 8Q9S.X0Z-BC +4 1QR2.TX3Z-BC १पभ२.रस३ब-कग 1QR2.TX3Z-BC +4 P4RS.5XY6-BC न४भम.५सह६-कग P4RS.5XY6-BC +4 P7R8.T9Y0-BC न७भ८.र९ह०-कग P7R8.T9Y0-BC +4 PQ1ST.2XY3-BC नप१मर.२सह३-कग PQ1ST.2XY3-BC +4 P4RS5.VX6Z-BC न४भम५.लस६ब-कग P4RS5.VX6Z-BC +4 7QR8T.V9YZ-BC ७पभ८र.ल९हब-कग 7QR8T.V9YZ-BC +4 P1R2T.3X4Z-BC न१भ२र.३स४ब-कग P1R2T.3X4Z-BC +4 5Q6S7.V8Y9-BC ५प६म७.ल८ह९-कग 5Q6S7.V8Y9-BC +4 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC अकगघएचजटIठणतदधOनपभमरफलवसहब-कग ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +4 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC अकगघएचजटIठणतदधOनपभमरफलवसहब-कग ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +4 OI.XX-BC OI.सस-कग OI.XX-BC +4 OI.XX-BC OI.सस-कग OI.XX-BC +4 OI.XX-OOOOOOOO-BC OI.सस-OOOOOOOO-कग OI.XX-OOOOOOOO-BC +4 OI.XX-IIIIIIII-BC OI.सस-IIIIIIII-कग OI.XX-IIIIIIII-BC +4 PQ.RS-01234567-BC नप.भम-०१२३४५६७-कग PQ.RS-01234567-BC +4 PQ.RS-890-BC नप.भम-८९०-कग PQ.RS-890-BC +4 89.EU-DFGHJKLM ८९.एफ-घचजटठणतद 89.EU-DFGHJKLM +4 00.0A-DFGHJKLM ००.०अ-घचजटठणतद 00.0A-DFGHJKLM +4 BCDF.GHJK-DFGHJKLM कगघच.जटठण-घचजटठणतद BCDF.GHJK-DFGHJKLM +4 LMNP.QRST-DFGHJKLM तदधन.पभमर-घचजटठणतद LMNP.QRST-DFGHJKLM +4 VWXY.Z123-DFGHJKLM लवसह.ब१२३-घचजटठणतद VWXY.Z123-DFGHJKLM +4 4567.890B-DFGHJKLM ४५६७.८९०क-घचजटठणतद 4567.890B-DFGHJKLM +4 PQ.XY-DFGHJKLM नप.सह-घचजटठणतद PQ.XY-DFGHJKLM +4 PQ.XYZ-DFGHJKLM नप.सहब-घचजटठणतद PQ.XYZ-DFGHJKLM +4 PQX.YZ-DFGHJKLM नपस.हब-घचजटठणतद PQX.YZ-DFGHJKLM +4 PQ.RXYZ-DFGHJKLM नप.भसहब-घचजटठणतद PQ.RXYZ-DFGHJKLM +4 PQR.XYZ-DFGHJKLM नपभ.सहब-घचजटठणतद PQR.XYZ-DFGHJKLM +4 PQRX.YZ-DFGHJKLM नपभस.हब-घचजटठणतद PQRX.YZ-DFGHJKLM +4 PQR.SXYZ-DFGHJKLM नपभ.मसहब-घचजटठणतद PQR.SXYZ-DFGHJKLM +4 PQRS.XYZ-DFGHJKLM नपभम.सहब-घचजटठणतद PQRS.XYZ-DFGHJKLM +4 PQRS.TXYZ-DFGHJKLM नपभम.रसहब-घचजटठणतद PQRS.TXYZ-DFGHJKLM +4 PQRST.VXYZ-DFGHJKLM नपभमर.लसहब-घचजटठणतद PQRST.VXYZ-DFGHJKLM +4 P1.XY-DFGHJKLM न१.सह-घचजटठणतद P1.XY-DFGHJKLM +4 PQ.2Y-DFGHJKLM नप.२ह-घचजटठणतद PQ.2Y-DFGHJKLM +4 3Q.X4-DFGHJKLM ३प.स४-घचजटठणतद 3Q.X4-DFGHJKLM +4 5Q.6Y-DFGHJKLM ५प.६ह-घचजटठणतद 5Q.6Y-DFGHJKLM +4 PQ.1YZ-DFGHJKLM नप.१हब-घचजटठणतद PQ.1YZ-DFGHJKLM +4 PQ1.YZ-DFGHJKLM नप१.हब-घचजटठणतद PQ1.YZ-DFGHJKLM +4 P2.X3Z-DFGHJKLM न२.स३ब-घचजटठणतद P2.X3Z-DFGHJKLM +4 P2X.3Z-DFGHJKLM न२स.३ब-घचजटठणतद P2X.3Z-DFGHJKLM +4 PQ.1XY2-DFGHJKLM नप.१सह२-घचजटठणतद PQ.1XY2-DFGHJKLM +4 PQ1.XY2-DFGHJKLM नप१.सह२-घचजटठणतद PQ1.XY2-DFGHJKLM +4 PQ1X.Y2-DFGHJKLM नप१स.ह२-घचजटठणतद PQ1X.Y2-DFGHJKLM +4 P3.RX4Z-DFGHJKLM न३.भस४ब-घचजटठणतद P3.RX4Z-DFGHJKLM +4 P3R.X4Z-DFGHJKLM न३भ.स४ब-घचजटठणतद P3R.X4Z-DFGHJKLM +4 P3RX.4Z-DFGHJKLM न३भस.४ब-घचजटठणतद P3RX.4Z-DFGHJKLM +4 5Q.R6Y7-DFGHJKLM ५प.भ६ह७-घचजटठणतद 5Q.R6Y7-DFGHJKLM +4 5QR.6Y7-DFGHJKLM ५पभ.६ह७-घचजटठणतद 5QR.6Y7-DFGHJKLM +4 5QR6.Y7-DFGHJKLM ५पभ६.ह७-घचजटठणतद 5QR6.Y7-DFGHJKLM +4 PQ1.SX2Z-DFGHJKLM नप१.मस२ब-घचजटठणतद PQ1.SX2Z-DFGHJKLM +4 PQ1S.X2Z-DFGHJKLM नप१म.स२ब-घचजटठणतद PQ1S.X2Z-DFGHJKLM +4 P3R.S4YZ-DFGHJKLM न३भ.म४हब-घचजटठणतद P3R.S4YZ-DFGHJKLM +4 P3RS.4YZ-DFGHJKLM न३भम.४हब-घचजटठणतद P3RS.4YZ-DFGHJKLM +4 5QR.6XY7-DFGHJKLM ५पभ.६सह७-घचजटठणतद 5QR.6XY7-DFGHJKLM +4 5QR6.XY7-DFGHJKLM ५पभ६.सह७-घचजटठणतद 5QR6.XY7-DFGHJKLM +4 8Q9.SX0Z-DFGHJKLM ८प९.मस०ब-घचजटठणतद 8Q9.SX0Z-DFGHJKLM +4 8Q9S.X0Z-DFGHJKLM ८प९म.स०ब-घचजटठणतद 8Q9S.X0Z-DFGHJKLM +4 1QR2.TX3Z-DFGHJKLM १पभ२.रस३ब-घचजटठणतद 1QR2.TX3Z-DFGHJKLM +4 P4RS.5XY6-DFGHJKLM न४भम.५सह६-घचजटठणतद P4RS.5XY6-DFGHJKLM +4 P7R8.T9Y0-DFGHJKLM न७भ८.र९ह०-घचजटठणतद P7R8.T9Y0-DFGHJKLM +4 PQ1ST.2XY3-DFGHJKLM नप१मर.२सह३-घचजटठणतद PQ1ST.2XY3-DFGHJKLM +4 P4RS5.VX6Z-DFGHJKLM न४भम५.लस६ब-घचजटठणतद P4RS5.VX6Z-DFGHJKLM +4 7QR8T.V9YZ-DFGHJKLM ७पभ८र.ल९हब-घचजटठणतद 7QR8T.V9YZ-DFGHJKLM +4 P1R2T.3X4Z-DFGHJKLM न१भ२र.३स४ब-घचजटठणतद P1R2T.3X4Z-DFGHJKLM +4 5Q6S7.V8Y9-DFGHJKLM ५प६म७.ल८ह९-घचजटठणतद 5Q6S7.V8Y9-DFGHJKLM +4 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM अकगघएचजटIठणतदधOनपभमरफलवसहब-घचजटठणतद ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +4 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM अकगघएचजटIठणतदधOनपभमरफलवसहब-घचजटठणतद ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +4 OI.XX-DFGHJKLM OI.सस-घचजटठणतद OI.XX-DFGHJKLM +4 OI.XX-DFGHJKLM OI.सस-घचजटठणतद OI.XX-DFGHJKLM +4 OI.XX-OOOOOOOO-DFGHJKLM OI.सस-OOOOOOOO-घचजटठणतद OI.XX-OOOOOOOO-DFGHJKLM +4 OI.XX-IIIIIIII-DFGHJKLM OI.सस-IIIIIIII-घचजटठणतद OI.XX-IIIIIIII-DFGHJKLM +4 PQ.RS-01234567-DFGHJKLM नप.भम-०१२३४५६७-घचजटठणतद PQ.RS-01234567-DFGHJKLM +4 PQ.RS-890-DFGHJKLM नप.भम-८९०-घचजटठणतद PQ.RS-890-DFGHJKLM +5 89.EU ൮൯.ഋഉ 89.EU +5 00.0A ൦൦.൦ഒ 00.0A +5 BCDF.GHJK കഖഗച.ജടഡത BCDF.GHJK +5 LMNP.QRST ഥദധന.മരറല LMNP.QRST +5 VWXY.Z123 ഴവശസ.ഹ൧൨൩ VWXY.Z123 +5 4567.890B ൪൫൬൭.൮൯൦ക 4567.890B +5 PQ.XY നമ.ശസ PQ.XY +5 PQ.XYZ നമ.ശസഹ PQ.XYZ +5 PQX.YZ നമശ.സഹ PQX.YZ +5 PQ.RXYZ നമ.രശസഹ PQ.RXYZ +5 PQR.XYZ നമര.ശസഹ PQR.XYZ +5 PQRX.YZ നമരശ.സഹ PQRX.YZ +5 PQR.SXYZ നമര.റശസഹ PQR.SXYZ +5 PQRS.XYZ നമരറ.ശസഹ PQRS.XYZ +5 PQRS.TXYZ നമരറ.ലശസഹ PQRS.TXYZ +5 PQRST.VXYZ നമരറല.ഴശസഹ PQRST.VXYZ +5 P1.XY ന൧.ശസ P1.XY +5 PQ.2Y നമ.൨സ PQ.2Y +5 3Q.X4 ൩മ.ശ൪ 3Q.X4 +5 5Q.6Y ൫മ.൬സ 5Q.6Y +5 PQ.1YZ നമ.൧സഹ PQ.1YZ +5 PQ1.YZ നമ൧.സഹ PQ1.YZ +5 P2.X3Z ന൨.ശ൩ഹ P2.X3Z +5 P2X.3Z ന൨ശ.൩ഹ P2X.3Z +5 PQ.1XY2 നമ.൧ശസ൨ PQ.1XY2 +5 PQ1.XY2 നമ൧.ശസ൨ PQ1.XY2 +5 PQ1X.Y2 നമ൧ശ.സ൨ PQ1X.Y2 +5 P3.RX4Z ന൩.രശ൪ഹ P3.RX4Z +5 P3R.X4Z ന൩ര.ശ൪ഹ P3R.X4Z +5 P3RX.4Z ന൩രശ.൪ഹ P3RX.4Z +5 5Q.R6Y7 ൫മ.ര൬സ൭ 5Q.R6Y7 +5 5QR.6Y7 ൫മര.൬സ൭ 5QR.6Y7 +5 5QR6.Y7 ൫മര൬.സ൭ 5QR6.Y7 +5 PQ1.SX2Z നമ൧.റശ൨ഹ PQ1.SX2Z +5 PQ1S.X2Z നമ൧റ.ശ൨ഹ PQ1S.X2Z +5 P3R.S4YZ ന൩ര.റ൪സഹ P3R.S4YZ +5 P3RS.4YZ ന൩രറ.൪സഹ P3RS.4YZ +5 5QR.6XY7 ൫മര.൬ശസ൭ 5QR.6XY7 +5 5QR6.XY7 ൫മര൬.ശസ൭ 5QR6.XY7 +5 8Q9.SX0Z ൮മ൯.റശ൦ഹ 8Q9.SX0Z +5 8Q9S.X0Z ൮മ൯റ.ശ൦ഹ 8Q9S.X0Z +5 1QR2.TX3Z ൧മര൨.ലശ൩ഹ 1QR2.TX3Z +5 P4RS.5XY6 ന൪രറ.൫ശസ൬ P4RS.5XY6 +5 P7R8.T9Y0 ന൭ര൮.ല൯സ൦ P7R8.T9Y0 +5 PQ1ST.2XY3 നമ൧റല.൨ശസ൩ PQ1ST.2XY3 +5 P4RS5.VX6Z ന൪രറ൫.ഴശ൬ഹ P4RS5.VX6Z +5 7QR8T.V9YZ ൭മര൮ല.ഴ൯സഹ 7QR8T.V9YZ +5 P1R2T.3X4Z ന൧ര൨ല.൩ശ൪ഹ P1R2T.3X4Z +5 5Q6S7.V8Y9 ൫മ൬റ൭.ഴ൮സ൯ 5Q6S7.V8Y9 +5 ABCDEFGHIJKLMNOPQRSTUVWXYZ ഒകഖഗഋചജടIഡതഥദധഠനമരറലഉഴവശസഹ ABCDEFGHIJKLMNOPQRSTUVWXYZ +5 ABCDEFGHIJKLMNOPQRSTUVWXYZ ഒകഖഗഋചജടIഡതഥദധഠനമരറലഉഴവശസഹ ABCDEFGHIJKLMNOPQRSTUVWXYZ +5 OI.XX ഠI.ശശ OI.XX +5 OI.XX ഠI.ശശ OI.XX +5 OI.XX-OOOOOOOO ഠI.ശശ-ഠഠഠഠഠഠഠഠ OI.XX-OOOOOOOO +5 OI.XX-IIIIIIII ഠI.ശശ-IIIIIIII OI.XX-IIIIIIII +5 PQ.RS-01234567 നമ.രറ-൦൧൨൩൪൫൬൭ PQ.RS-01234567 +5 PQ.RS-890 നമ.രറ-൮൯൦ PQ.RS-890 +5 89.EU-BC ൮൯.ഋഉ-കഖ 89.EU-BC +5 00.0A-BC ൦൦.൦ഒ-കഖ 00.0A-BC +5 BCDF.GHJK-BC കഖഗച.ജടഡത-കഖ BCDF.GHJK-BC +5 LMNP.QRST-BC ഥദധന.മരറല-കഖ LMNP.QRST-BC +5 VWXY.Z123-BC ഴവശസ.ഹ൧൨൩-കഖ VWXY.Z123-BC +5 4567.890B-BC ൪൫൬൭.൮൯൦ക-കഖ 4567.890B-BC +5 PQ.XY-BC നമ.ശസ-കഖ PQ.XY-BC +5 PQ.XYZ-BC നമ.ശസഹ-കഖ PQ.XYZ-BC +5 PQX.YZ-BC നമശ.സഹ-കഖ PQX.YZ-BC +5 PQ.RXYZ-BC നമ.രശസഹ-കഖ PQ.RXYZ-BC +5 PQR.XYZ-BC നമര.ശസഹ-കഖ PQR.XYZ-BC +5 PQRX.YZ-BC നമരശ.സഹ-കഖ PQRX.YZ-BC +5 PQR.SXYZ-BC നമര.റശസഹ-കഖ PQR.SXYZ-BC +5 PQRS.XYZ-BC നമരറ.ശസഹ-കഖ PQRS.XYZ-BC +5 PQRS.TXYZ-BC നമരറ.ലശസഹ-കഖ PQRS.TXYZ-BC +5 PQRST.VXYZ-BC നമരറല.ഴശസഹ-കഖ PQRST.VXYZ-BC +5 P1.XY-BC ന൧.ശസ-കഖ P1.XY-BC +5 PQ.2Y-BC നമ.൨സ-കഖ PQ.2Y-BC +5 3Q.X4-BC ൩മ.ശ൪-കഖ 3Q.X4-BC +5 5Q.6Y-BC ൫മ.൬സ-കഖ 5Q.6Y-BC +5 PQ.1YZ-BC നമ.൧സഹ-കഖ PQ.1YZ-BC +5 PQ1.YZ-BC നമ൧.സഹ-കഖ PQ1.YZ-BC +5 P2.X3Z-BC ന൨.ശ൩ഹ-കഖ P2.X3Z-BC +5 P2X.3Z-BC ന൨ശ.൩ഹ-കഖ P2X.3Z-BC +5 PQ.1XY2-BC നമ.൧ശസ൨-കഖ PQ.1XY2-BC +5 PQ1.XY2-BC നമ൧.ശസ൨-കഖ PQ1.XY2-BC +5 PQ1X.Y2-BC നമ൧ശ.സ൨-കഖ PQ1X.Y2-BC +5 P3.RX4Z-BC ന൩.രശ൪ഹ-കഖ P3.RX4Z-BC +5 P3R.X4Z-BC ന൩ര.ശ൪ഹ-കഖ P3R.X4Z-BC +5 P3RX.4Z-BC ന൩രശ.൪ഹ-കഖ P3RX.4Z-BC +5 5Q.R6Y7-BC ൫മ.ര൬സ൭-കഖ 5Q.R6Y7-BC +5 5QR.6Y7-BC ൫മര.൬സ൭-കഖ 5QR.6Y7-BC +5 5QR6.Y7-BC ൫മര൬.സ൭-കഖ 5QR6.Y7-BC +5 PQ1.SX2Z-BC നമ൧.റശ൨ഹ-കഖ PQ1.SX2Z-BC +5 PQ1S.X2Z-BC നമ൧റ.ശ൨ഹ-കഖ PQ1S.X2Z-BC +5 P3R.S4YZ-BC ന൩ര.റ൪സഹ-കഖ P3R.S4YZ-BC +5 P3RS.4YZ-BC ന൩രറ.൪സഹ-കഖ P3RS.4YZ-BC +5 5QR.6XY7-BC ൫മര.൬ശസ൭-കഖ 5QR.6XY7-BC +5 5QR6.XY7-BC ൫മര൬.ശസ൭-കഖ 5QR6.XY7-BC +5 8Q9.SX0Z-BC ൮മ൯.റശ൦ഹ-കഖ 8Q9.SX0Z-BC +5 8Q9S.X0Z-BC ൮മ൯റ.ശ൦ഹ-കഖ 8Q9S.X0Z-BC +5 1QR2.TX3Z-BC ൧മര൨.ലശ൩ഹ-കഖ 1QR2.TX3Z-BC +5 P4RS.5XY6-BC ന൪രറ.൫ശസ൬-കഖ P4RS.5XY6-BC +5 P7R8.T9Y0-BC ന൭ര൮.ല൯സ൦-കഖ P7R8.T9Y0-BC +5 PQ1ST.2XY3-BC നമ൧റല.൨ശസ൩-കഖ PQ1ST.2XY3-BC +5 P4RS5.VX6Z-BC ന൪രറ൫.ഴശ൬ഹ-കഖ P4RS5.VX6Z-BC +5 7QR8T.V9YZ-BC ൭മര൮ല.ഴ൯സഹ-കഖ 7QR8T.V9YZ-BC +5 P1R2T.3X4Z-BC ന൧ര൨ല.൩ശ൪ഹ-കഖ P1R2T.3X4Z-BC +5 5Q6S7.V8Y9-BC ൫മ൬റ൭.ഴ൮സ൯-കഖ 5Q6S7.V8Y9-BC +5 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ഒകഖഗഋചജടIഡതഥദധഠനമരറലഉഴവശസഹ-കഖ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +5 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ഒകഖഗഋചജടIഡതഥദധഠനമരറലഉഴവശസഹ-കഖ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +5 OI.XX-BC ഠI.ശശ-കഖ OI.XX-BC +5 OI.XX-BC ഠI.ശശ-കഖ OI.XX-BC +5 OI.XX-OOOOOOOO-BC ഠI.ശശ-ഠഠഠഠഠഠഠഠ-കഖ OI.XX-OOOOOOOO-BC +5 OI.XX-IIIIIIII-BC ഠI.ശശ-IIIIIIII-കഖ OI.XX-IIIIIIII-BC +5 PQ.RS-01234567-BC നമ.രറ-൦൧൨൩൪൫൬൭-കഖ PQ.RS-01234567-BC +5 PQ.RS-890-BC നമ.രറ-൮൯൦-കഖ PQ.RS-890-BC +5 89.EU-DFGHJKLM ൮൯.ഋഉ-ഗചജടഡതഥദ 89.EU-DFGHJKLM +5 00.0A-DFGHJKLM ൦൦.൦ഒ-ഗചജടഡതഥദ 00.0A-DFGHJKLM +5 BCDF.GHJK-DFGHJKLM കഖഗച.ജടഡത-ഗചജടഡതഥദ BCDF.GHJK-DFGHJKLM +5 LMNP.QRST-DFGHJKLM ഥദധന.മരറല-ഗചജടഡതഥദ LMNP.QRST-DFGHJKLM +5 VWXY.Z123-DFGHJKLM ഴവശസ.ഹ൧൨൩-ഗചജടഡതഥദ VWXY.Z123-DFGHJKLM +5 4567.890B-DFGHJKLM ൪൫൬൭.൮൯൦ക-ഗചജടഡതഥദ 4567.890B-DFGHJKLM +5 PQ.XY-DFGHJKLM നമ.ശസ-ഗചജടഡതഥദ PQ.XY-DFGHJKLM +5 PQ.XYZ-DFGHJKLM നമ.ശസഹ-ഗചജടഡതഥദ PQ.XYZ-DFGHJKLM +5 PQX.YZ-DFGHJKLM നമശ.സഹ-ഗചജടഡതഥദ PQX.YZ-DFGHJKLM +5 PQ.RXYZ-DFGHJKLM നമ.രശസഹ-ഗചജടഡതഥദ PQ.RXYZ-DFGHJKLM +5 PQR.XYZ-DFGHJKLM നമര.ശസഹ-ഗചജടഡതഥദ PQR.XYZ-DFGHJKLM +5 PQRX.YZ-DFGHJKLM നമരശ.സഹ-ഗചജടഡതഥദ PQRX.YZ-DFGHJKLM +5 PQR.SXYZ-DFGHJKLM നമര.റശസഹ-ഗചജടഡതഥദ PQR.SXYZ-DFGHJKLM +5 PQRS.XYZ-DFGHJKLM നമരറ.ശസഹ-ഗചജടഡതഥദ PQRS.XYZ-DFGHJKLM +5 PQRS.TXYZ-DFGHJKLM നമരറ.ലശസഹ-ഗചജടഡതഥദ PQRS.TXYZ-DFGHJKLM +5 PQRST.VXYZ-DFGHJKLM നമരറല.ഴശസഹ-ഗചജടഡതഥദ PQRST.VXYZ-DFGHJKLM +5 P1.XY-DFGHJKLM ന൧.ശസ-ഗചജടഡതഥദ P1.XY-DFGHJKLM +5 PQ.2Y-DFGHJKLM നമ.൨സ-ഗചജടഡതഥദ PQ.2Y-DFGHJKLM +5 3Q.X4-DFGHJKLM ൩മ.ശ൪-ഗചജടഡതഥദ 3Q.X4-DFGHJKLM +5 5Q.6Y-DFGHJKLM ൫മ.൬സ-ഗചജടഡതഥദ 5Q.6Y-DFGHJKLM +5 PQ.1YZ-DFGHJKLM നമ.൧സഹ-ഗചജടഡതഥദ PQ.1YZ-DFGHJKLM +5 PQ1.YZ-DFGHJKLM നമ൧.സഹ-ഗചജടഡതഥദ PQ1.YZ-DFGHJKLM +5 P2.X3Z-DFGHJKLM ന൨.ശ൩ഹ-ഗചജടഡതഥദ P2.X3Z-DFGHJKLM +5 P2X.3Z-DFGHJKLM ന൨ശ.൩ഹ-ഗചജടഡതഥദ P2X.3Z-DFGHJKLM +5 PQ.1XY2-DFGHJKLM നമ.൧ശസ൨-ഗചജടഡതഥദ PQ.1XY2-DFGHJKLM +5 PQ1.XY2-DFGHJKLM നമ൧.ശസ൨-ഗചജടഡതഥദ PQ1.XY2-DFGHJKLM +5 PQ1X.Y2-DFGHJKLM നമ൧ശ.സ൨-ഗചജടഡതഥദ PQ1X.Y2-DFGHJKLM +5 P3.RX4Z-DFGHJKLM ന൩.രശ൪ഹ-ഗചജടഡതഥദ P3.RX4Z-DFGHJKLM +5 P3R.X4Z-DFGHJKLM ന൩ര.ശ൪ഹ-ഗചജടഡതഥദ P3R.X4Z-DFGHJKLM +5 P3RX.4Z-DFGHJKLM ന൩രശ.൪ഹ-ഗചജടഡതഥദ P3RX.4Z-DFGHJKLM +5 5Q.R6Y7-DFGHJKLM ൫മ.ര൬സ൭-ഗചജടഡതഥദ 5Q.R6Y7-DFGHJKLM +5 5QR.6Y7-DFGHJKLM ൫മര.൬സ൭-ഗചജടഡതഥദ 5QR.6Y7-DFGHJKLM +5 5QR6.Y7-DFGHJKLM ൫മര൬.സ൭-ഗചജടഡതഥദ 5QR6.Y7-DFGHJKLM +5 PQ1.SX2Z-DFGHJKLM നമ൧.റശ൨ഹ-ഗചജടഡതഥദ PQ1.SX2Z-DFGHJKLM +5 PQ1S.X2Z-DFGHJKLM നമ൧റ.ശ൨ഹ-ഗചജടഡതഥദ PQ1S.X2Z-DFGHJKLM +5 P3R.S4YZ-DFGHJKLM ന൩ര.റ൪സഹ-ഗചജടഡതഥദ P3R.S4YZ-DFGHJKLM +5 P3RS.4YZ-DFGHJKLM ന൩രറ.൪സഹ-ഗചജടഡതഥദ P3RS.4YZ-DFGHJKLM +5 5QR.6XY7-DFGHJKLM ൫മര.൬ശസ൭-ഗചജടഡതഥദ 5QR.6XY7-DFGHJKLM +5 5QR6.XY7-DFGHJKLM ൫മര൬.ശസ൭-ഗചജടഡതഥദ 5QR6.XY7-DFGHJKLM +5 8Q9.SX0Z-DFGHJKLM ൮മ൯.റശ൦ഹ-ഗചജടഡതഥദ 8Q9.SX0Z-DFGHJKLM +5 8Q9S.X0Z-DFGHJKLM ൮മ൯റ.ശ൦ഹ-ഗചജടഡതഥദ 8Q9S.X0Z-DFGHJKLM +5 1QR2.TX3Z-DFGHJKLM ൧മര൨.ലശ൩ഹ-ഗചജടഡതഥദ 1QR2.TX3Z-DFGHJKLM +5 P4RS.5XY6-DFGHJKLM ന൪രറ.൫ശസ൬-ഗചജടഡതഥദ P4RS.5XY6-DFGHJKLM +5 P7R8.T9Y0-DFGHJKLM ന൭ര൮.ല൯സ൦-ഗചജടഡതഥദ P7R8.T9Y0-DFGHJKLM +5 PQ1ST.2XY3-DFGHJKLM നമ൧റല.൨ശസ൩-ഗചജടഡതഥദ PQ1ST.2XY3-DFGHJKLM +5 P4RS5.VX6Z-DFGHJKLM ന൪രറ൫.ഴശ൬ഹ-ഗചജടഡതഥദ P4RS5.VX6Z-DFGHJKLM +5 7QR8T.V9YZ-DFGHJKLM ൭മര൮ല.ഴ൯സഹ-ഗചജടഡതഥദ 7QR8T.V9YZ-DFGHJKLM +5 P1R2T.3X4Z-DFGHJKLM ന൧ര൨ല.൩ശ൪ഹ-ഗചജടഡതഥദ P1R2T.3X4Z-DFGHJKLM +5 5Q6S7.V8Y9-DFGHJKLM ൫മ൬റ൭.ഴ൮സ൯-ഗചജടഡതഥദ 5Q6S7.V8Y9-DFGHJKLM +5 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ഒകഖഗഋചജടIഡതഥദധഠനമരറലഉഴവശസഹ-ഗചജടഡതഥദ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +5 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ഒകഖഗഋചജടIഡതഥദധഠനമരറലഉഴവശസഹ-ഗചജടഡതഥദ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +5 OI.XX-DFGHJKLM ഠI.ശശ-ഗചജടഡതഥദ OI.XX-DFGHJKLM +5 OI.XX-DFGHJKLM ഠI.ശശ-ഗചജടഡതഥദ OI.XX-DFGHJKLM +5 OI.XX-OOOOOOOO-DFGHJKLM ഠI.ശശ-ഠഠഠഠഠഠഠഠ-ഗചജടഡതഥദ OI.XX-OOOOOOOO-DFGHJKLM +5 OI.XX-IIIIIIII-DFGHJKLM ഠI.ശശ-IIIIIIII-ഗചജടഡതഥദ OI.XX-IIIIIIII-DFGHJKLM +5 PQ.RS-01234567-DFGHJKLM നമ.രറ-൦൧൨൩൪൫൬൭-ഗചജടഡതഥദ PQ.RS-01234567-DFGHJKLM +5 PQ.RS-890-DFGHJKLM നമ.രറ-൮൯൦-ഗചജടഡതഥദ PQ.RS-890-DFGHJKLM +6 89.EU 89.ႤႨ 89.EU +6 00.0A 00.0Ⴀ 00.0A +6 BCDF.GHJK ႡႣႦႩ.ႫႬႮႰ BCDF.GHJK +6 LMNP.QRST ႱႲႴႵ.ႶႷႸႹ LMNP.QRST +6 VWXY.Z123 ႺႻႽႾ.Ⴟ123 VWXY.Z123 +6 4567.890B 4567.890Ⴁ 4567.890B +6 PQ.XY ႵႶ.ႽႾ PQ.XY +6 PQ.XYZ ႵႶ.ႽႾႿ PQ.XYZ +6 PQX.YZ ႵႶႽ.ႾႿ PQX.YZ +6 PQ.RXYZ ႵႶ.ႷႽႾႿ PQ.RXYZ +6 PQR.XYZ ႵႶႷ.ႽႾႿ PQR.XYZ +6 PQRX.YZ ႵႶႷႽ.ႾႿ PQRX.YZ +6 PQR.SXYZ ႵႶႷ.ႸႽႾႿ PQR.SXYZ +6 PQRS.XYZ ႵႶႷႸ.ႽႾႿ PQRS.XYZ +6 PQRS.TXYZ ႵႶႷႸ.ႹႽႾႿ PQRS.TXYZ +6 PQRST.VXYZ ႵႶႷႸႹ.ႺႽႾႿ PQRST.VXYZ +6 P1.XY Ⴕ1.ႽႾ P1.XY +6 PQ.2Y ႵႶ.2Ⴞ PQ.2Y +6 3Q.X4 3Ⴖ.Ⴝ4 3Q.X4 +6 5Q.6Y 5Ⴖ.6Ⴞ 5Q.6Y +6 PQ.1YZ ႵႶ.1ႾႿ PQ.1YZ +6 PQ1.YZ ႵႶ1.ႾႿ PQ1.YZ +6 P2.X3Z Ⴕ2.Ⴝ3Ⴟ P2.X3Z +6 P2X.3Z Ⴕ2Ⴝ.3Ⴟ P2X.3Z +6 PQ.1XY2 ႵႶ.1ႽႾ2 PQ.1XY2 +6 PQ1.XY2 ႵႶ1.ႽႾ2 PQ1.XY2 +6 PQ1X.Y2 ႵႶ1Ⴝ.Ⴞ2 PQ1X.Y2 +6 P3.RX4Z Ⴕ3.ႷႽ4Ⴟ P3.RX4Z +6 P3R.X4Z Ⴕ3Ⴗ.Ⴝ4Ⴟ P3R.X4Z +6 P3RX.4Z Ⴕ3ႷႽ.4Ⴟ P3RX.4Z +6 5Q.R6Y7 5Ⴖ.Ⴗ6Ⴞ7 5Q.R6Y7 +6 5QR.6Y7 5ႶႷ.6Ⴞ7 5QR.6Y7 +6 5QR6.Y7 5ႶႷ6.Ⴞ7 5QR6.Y7 +6 PQ1.SX2Z ႵႶ1.ႸႽ2Ⴟ PQ1.SX2Z +6 PQ1S.X2Z ႵႶ1Ⴘ.Ⴝ2Ⴟ PQ1S.X2Z +6 P3R.S4YZ Ⴕ3Ⴗ.Ⴘ4ႾႿ P3R.S4YZ +6 P3RS.4YZ Ⴕ3ႷႸ.4ႾႿ P3RS.4YZ +6 5QR.6XY7 5ႶႷ.6ႽႾ7 5QR.6XY7 +6 5QR6.XY7 5ႶႷ6.ႽႾ7 5QR6.XY7 +6 8Q9.SX0Z 8Ⴖ9.ႸႽ0Ⴟ 8Q9.SX0Z +6 8Q9S.X0Z 8Ⴖ9Ⴘ.Ⴝ0Ⴟ 8Q9S.X0Z +6 1QR2.TX3Z 1ႶႷ2.ႹႽ3Ⴟ 1QR2.TX3Z +6 P4RS.5XY6 Ⴕ4ႷႸ.5ႽႾ6 P4RS.5XY6 +6 P7R8.T9Y0 Ⴕ7Ⴗ8.Ⴙ9Ⴞ0 P7R8.T9Y0 +6 PQ1ST.2XY3 ႵႶ1ႸႹ.2ႽႾ3 PQ1ST.2XY3 +6 P4RS5.VX6Z Ⴕ4ႷႸ5.ႺႽ6Ⴟ P4RS5.VX6Z +6 7QR8T.V9YZ 7ႶႷ8Ⴙ.Ⴚ9ႾႿ 7QR8T.V9YZ +6 P1R2T.3X4Z Ⴕ1Ⴗ2Ⴙ.3Ⴝ4Ⴟ P1R2T.3X4Z +6 5Q6S7.V8Y9 5Ⴖ6Ⴘ7.Ⴚ8Ⴞ9 5Q6S7.V8Y9 +6 ABCDEFGHIJKLMNOPQRSTUVWXYZ ႠႡႣႦႤႩႫႬIႮႰႱႲႴႭႵႶႷႸႹႨႺႻႽႾႿ ABCDEFGHIJKLMNOPQRSTUVWXYZ +6 ABCDEFGHIJKLMNOPQRSTUVWXYZ ႠႡႣႦႤႩႫႬIႮႰႱႲႴႭႵႶႷႸႹႨႺႻႽႾႿ ABCDEFGHIJKLMNOPQRSTUVWXYZ +6 OI.XX ႭI.ႽႽ OI.XX +6 OI.XX ႭI.ႽႽ OI.XX +6 OI.XX-OOOOOOOO ႭI.ႽႽ-ႭႭႭႭႭႭႭႭ OI.XX-OOOOOOOO +6 OI.XX-IIIIIIII ႭI.ႽႽ-IIIIIIII OI.XX-IIIIIIII +6 PQ.RS-01234567 ႵႶ.ႷႸ-01234567 PQ.RS-01234567 +6 PQ.RS-890 ႵႶ.ႷႸ-890 PQ.RS-890 +6 89.EU-BC 89.ႤႨ-ႡႣ 89.EU-BC +6 00.0A-BC 00.0Ⴀ-ႡႣ 00.0A-BC +6 BCDF.GHJK-BC ႡႣႦႩ.ႫႬႮႰ-ႡႣ BCDF.GHJK-BC +6 LMNP.QRST-BC ႱႲႴႵ.ႶႷႸႹ-ႡႣ LMNP.QRST-BC +6 VWXY.Z123-BC ႺႻႽႾ.Ⴟ123-ႡႣ VWXY.Z123-BC +6 4567.890B-BC 4567.890Ⴁ-ႡႣ 4567.890B-BC +6 PQ.XY-BC ႵႶ.ႽႾ-ႡႣ PQ.XY-BC +6 PQ.XYZ-BC ႵႶ.ႽႾႿ-ႡႣ PQ.XYZ-BC +6 PQX.YZ-BC ႵႶႽ.ႾႿ-ႡႣ PQX.YZ-BC +6 PQ.RXYZ-BC ႵႶ.ႷႽႾႿ-ႡႣ PQ.RXYZ-BC +6 PQR.XYZ-BC ႵႶႷ.ႽႾႿ-ႡႣ PQR.XYZ-BC +6 PQRX.YZ-BC ႵႶႷႽ.ႾႿ-ႡႣ PQRX.YZ-BC +6 PQR.SXYZ-BC ႵႶႷ.ႸႽႾႿ-ႡႣ PQR.SXYZ-BC +6 PQRS.XYZ-BC ႵႶႷႸ.ႽႾႿ-ႡႣ PQRS.XYZ-BC +6 PQRS.TXYZ-BC ႵႶႷႸ.ႹႽႾႿ-ႡႣ PQRS.TXYZ-BC +6 PQRST.VXYZ-BC ႵႶႷႸႹ.ႺႽႾႿ-ႡႣ PQRST.VXYZ-BC +6 P1.XY-BC Ⴕ1.ႽႾ-ႡႣ P1.XY-BC +6 PQ.2Y-BC ႵႶ.2Ⴞ-ႡႣ PQ.2Y-BC +6 3Q.X4-BC 3Ⴖ.Ⴝ4-ႡႣ 3Q.X4-BC +6 5Q.6Y-BC 5Ⴖ.6Ⴞ-ႡႣ 5Q.6Y-BC +6 PQ.1YZ-BC ႵႶ.1ႾႿ-ႡႣ PQ.1YZ-BC +6 PQ1.YZ-BC ႵႶ1.ႾႿ-ႡႣ PQ1.YZ-BC +6 P2.X3Z-BC Ⴕ2.Ⴝ3Ⴟ-ႡႣ P2.X3Z-BC +6 P2X.3Z-BC Ⴕ2Ⴝ.3Ⴟ-ႡႣ P2X.3Z-BC +6 PQ.1XY2-BC ႵႶ.1ႽႾ2-ႡႣ PQ.1XY2-BC +6 PQ1.XY2-BC ႵႶ1.ႽႾ2-ႡႣ PQ1.XY2-BC +6 PQ1X.Y2-BC ႵႶ1Ⴝ.Ⴞ2-ႡႣ PQ1X.Y2-BC +6 P3.RX4Z-BC Ⴕ3.ႷႽ4Ⴟ-ႡႣ P3.RX4Z-BC +6 P3R.X4Z-BC Ⴕ3Ⴗ.Ⴝ4Ⴟ-ႡႣ P3R.X4Z-BC +6 P3RX.4Z-BC Ⴕ3ႷႽ.4Ⴟ-ႡႣ P3RX.4Z-BC +6 5Q.R6Y7-BC 5Ⴖ.Ⴗ6Ⴞ7-ႡႣ 5Q.R6Y7-BC +6 5QR.6Y7-BC 5ႶႷ.6Ⴞ7-ႡႣ 5QR.6Y7-BC +6 5QR6.Y7-BC 5ႶႷ6.Ⴞ7-ႡႣ 5QR6.Y7-BC +6 PQ1.SX2Z-BC ႵႶ1.ႸႽ2Ⴟ-ႡႣ PQ1.SX2Z-BC +6 PQ1S.X2Z-BC ႵႶ1Ⴘ.Ⴝ2Ⴟ-ႡႣ PQ1S.X2Z-BC +6 P3R.S4YZ-BC Ⴕ3Ⴗ.Ⴘ4ႾႿ-ႡႣ P3R.S4YZ-BC +6 P3RS.4YZ-BC Ⴕ3ႷႸ.4ႾႿ-ႡႣ P3RS.4YZ-BC +6 5QR.6XY7-BC 5ႶႷ.6ႽႾ7-ႡႣ 5QR.6XY7-BC +6 5QR6.XY7-BC 5ႶႷ6.ႽႾ7-ႡႣ 5QR6.XY7-BC +6 8Q9.SX0Z-BC 8Ⴖ9.ႸႽ0Ⴟ-ႡႣ 8Q9.SX0Z-BC +6 8Q9S.X0Z-BC 8Ⴖ9Ⴘ.Ⴝ0Ⴟ-ႡႣ 8Q9S.X0Z-BC +6 1QR2.TX3Z-BC 1ႶႷ2.ႹႽ3Ⴟ-ႡႣ 1QR2.TX3Z-BC +6 P4RS.5XY6-BC Ⴕ4ႷႸ.5ႽႾ6-ႡႣ P4RS.5XY6-BC +6 P7R8.T9Y0-BC Ⴕ7Ⴗ8.Ⴙ9Ⴞ0-ႡႣ P7R8.T9Y0-BC +6 PQ1ST.2XY3-BC ႵႶ1ႸႹ.2ႽႾ3-ႡႣ PQ1ST.2XY3-BC +6 P4RS5.VX6Z-BC Ⴕ4ႷႸ5.ႺႽ6Ⴟ-ႡႣ P4RS5.VX6Z-BC +6 7QR8T.V9YZ-BC 7ႶႷ8Ⴙ.Ⴚ9ႾႿ-ႡႣ 7QR8T.V9YZ-BC +6 P1R2T.3X4Z-BC Ⴕ1Ⴗ2Ⴙ.3Ⴝ4Ⴟ-ႡႣ P1R2T.3X4Z-BC +6 5Q6S7.V8Y9-BC 5Ⴖ6Ⴘ7.Ⴚ8Ⴞ9-ႡႣ 5Q6S7.V8Y9-BC +6 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ႠႡႣႦႤႩႫႬIႮႰႱႲႴႭႵႶႷႸႹႨႺႻႽႾႿ-ႡႣ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +6 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ႠႡႣႦႤႩႫႬIႮႰႱႲႴႭႵႶႷႸႹႨႺႻႽႾႿ-ႡႣ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +6 OI.XX-BC ႭI.ႽႽ-ႡႣ OI.XX-BC +6 OI.XX-BC ႭI.ႽႽ-ႡႣ OI.XX-BC +6 OI.XX-OOOOOOOO-BC ႭI.ႽႽ-ႭႭႭႭႭႭႭႭ-ႡႣ OI.XX-OOOOOOOO-BC +6 OI.XX-IIIIIIII-BC ႭI.ႽႽ-IIIIIIII-ႡႣ OI.XX-IIIIIIII-BC +6 PQ.RS-01234567-BC ႵႶ.ႷႸ-01234567-ႡႣ PQ.RS-01234567-BC +6 PQ.RS-890-BC ႵႶ.ႷႸ-890-ႡႣ PQ.RS-890-BC +6 89.EU-DFGHJKLM 89.ႤႨ-ႦႩႫႬႮႰႱႲ 89.EU-DFGHJKLM +6 00.0A-DFGHJKLM 00.0Ⴀ-ႦႩႫႬႮႰႱႲ 00.0A-DFGHJKLM +6 BCDF.GHJK-DFGHJKLM ႡႣႦႩ.ႫႬႮႰ-ႦႩႫႬႮႰႱႲ BCDF.GHJK-DFGHJKLM +6 LMNP.QRST-DFGHJKLM ႱႲႴႵ.ႶႷႸႹ-ႦႩႫႬႮႰႱႲ LMNP.QRST-DFGHJKLM +6 VWXY.Z123-DFGHJKLM ႺႻႽႾ.Ⴟ123-ႦႩႫႬႮႰႱႲ VWXY.Z123-DFGHJKLM +6 4567.890B-DFGHJKLM 4567.890Ⴁ-ႦႩႫႬႮႰႱႲ 4567.890B-DFGHJKLM +6 PQ.XY-DFGHJKLM ႵႶ.ႽႾ-ႦႩႫႬႮႰႱႲ PQ.XY-DFGHJKLM +6 PQ.XYZ-DFGHJKLM ႵႶ.ႽႾႿ-ႦႩႫႬႮႰႱႲ PQ.XYZ-DFGHJKLM +6 PQX.YZ-DFGHJKLM ႵႶႽ.ႾႿ-ႦႩႫႬႮႰႱႲ PQX.YZ-DFGHJKLM +6 PQ.RXYZ-DFGHJKLM ႵႶ.ႷႽႾႿ-ႦႩႫႬႮႰႱႲ PQ.RXYZ-DFGHJKLM +6 PQR.XYZ-DFGHJKLM ႵႶႷ.ႽႾႿ-ႦႩႫႬႮႰႱႲ PQR.XYZ-DFGHJKLM +6 PQRX.YZ-DFGHJKLM ႵႶႷႽ.ႾႿ-ႦႩႫႬႮႰႱႲ PQRX.YZ-DFGHJKLM +6 PQR.SXYZ-DFGHJKLM ႵႶႷ.ႸႽႾႿ-ႦႩႫႬႮႰႱႲ PQR.SXYZ-DFGHJKLM +6 PQRS.XYZ-DFGHJKLM ႵႶႷႸ.ႽႾႿ-ႦႩႫႬႮႰႱႲ PQRS.XYZ-DFGHJKLM +6 PQRS.TXYZ-DFGHJKLM ႵႶႷႸ.ႹႽႾႿ-ႦႩႫႬႮႰႱႲ PQRS.TXYZ-DFGHJKLM +6 PQRST.VXYZ-DFGHJKLM ႵႶႷႸႹ.ႺႽႾႿ-ႦႩႫႬႮႰႱႲ PQRST.VXYZ-DFGHJKLM +6 P1.XY-DFGHJKLM Ⴕ1.ႽႾ-ႦႩႫႬႮႰႱႲ P1.XY-DFGHJKLM +6 PQ.2Y-DFGHJKLM ႵႶ.2Ⴞ-ႦႩႫႬႮႰႱႲ PQ.2Y-DFGHJKLM +6 3Q.X4-DFGHJKLM 3Ⴖ.Ⴝ4-ႦႩႫႬႮႰႱႲ 3Q.X4-DFGHJKLM +6 5Q.6Y-DFGHJKLM 5Ⴖ.6Ⴞ-ႦႩႫႬႮႰႱႲ 5Q.6Y-DFGHJKLM +6 PQ.1YZ-DFGHJKLM ႵႶ.1ႾႿ-ႦႩႫႬႮႰႱႲ PQ.1YZ-DFGHJKLM +6 PQ1.YZ-DFGHJKLM ႵႶ1.ႾႿ-ႦႩႫႬႮႰႱႲ PQ1.YZ-DFGHJKLM +6 P2.X3Z-DFGHJKLM Ⴕ2.Ⴝ3Ⴟ-ႦႩႫႬႮႰႱႲ P2.X3Z-DFGHJKLM +6 P2X.3Z-DFGHJKLM Ⴕ2Ⴝ.3Ⴟ-ႦႩႫႬႮႰႱႲ P2X.3Z-DFGHJKLM +6 PQ.1XY2-DFGHJKLM ႵႶ.1ႽႾ2-ႦႩႫႬႮႰႱႲ PQ.1XY2-DFGHJKLM +6 PQ1.XY2-DFGHJKLM ႵႶ1.ႽႾ2-ႦႩႫႬႮႰႱႲ PQ1.XY2-DFGHJKLM +6 PQ1X.Y2-DFGHJKLM ႵႶ1Ⴝ.Ⴞ2-ႦႩႫႬႮႰႱႲ PQ1X.Y2-DFGHJKLM +6 P3.RX4Z-DFGHJKLM Ⴕ3.ႷႽ4Ⴟ-ႦႩႫႬႮႰႱႲ P3.RX4Z-DFGHJKLM +6 P3R.X4Z-DFGHJKLM Ⴕ3Ⴗ.Ⴝ4Ⴟ-ႦႩႫႬႮႰႱႲ P3R.X4Z-DFGHJKLM +6 P3RX.4Z-DFGHJKLM Ⴕ3ႷႽ.4Ⴟ-ႦႩႫႬႮႰႱႲ P3RX.4Z-DFGHJKLM +6 5Q.R6Y7-DFGHJKLM 5Ⴖ.Ⴗ6Ⴞ7-ႦႩႫႬႮႰႱႲ 5Q.R6Y7-DFGHJKLM +6 5QR.6Y7-DFGHJKLM 5ႶႷ.6Ⴞ7-ႦႩႫႬႮႰႱႲ 5QR.6Y7-DFGHJKLM +6 5QR6.Y7-DFGHJKLM 5ႶႷ6.Ⴞ7-ႦႩႫႬႮႰႱႲ 5QR6.Y7-DFGHJKLM +6 PQ1.SX2Z-DFGHJKLM ႵႶ1.ႸႽ2Ⴟ-ႦႩႫႬႮႰႱႲ PQ1.SX2Z-DFGHJKLM +6 PQ1S.X2Z-DFGHJKLM ႵႶ1Ⴘ.Ⴝ2Ⴟ-ႦႩႫႬႮႰႱႲ PQ1S.X2Z-DFGHJKLM +6 P3R.S4YZ-DFGHJKLM Ⴕ3Ⴗ.Ⴘ4ႾႿ-ႦႩႫႬႮႰႱႲ P3R.S4YZ-DFGHJKLM +6 P3RS.4YZ-DFGHJKLM Ⴕ3ႷႸ.4ႾႿ-ႦႩႫႬႮႰႱႲ P3RS.4YZ-DFGHJKLM +6 5QR.6XY7-DFGHJKLM 5ႶႷ.6ႽႾ7-ႦႩႫႬႮႰႱႲ 5QR.6XY7-DFGHJKLM +6 5QR6.XY7-DFGHJKLM 5ႶႷ6.ႽႾ7-ႦႩႫႬႮႰႱႲ 5QR6.XY7-DFGHJKLM +6 8Q9.SX0Z-DFGHJKLM 8Ⴖ9.ႸႽ0Ⴟ-ႦႩႫႬႮႰႱႲ 8Q9.SX0Z-DFGHJKLM +6 8Q9S.X0Z-DFGHJKLM 8Ⴖ9Ⴘ.Ⴝ0Ⴟ-ႦႩႫႬႮႰႱႲ 8Q9S.X0Z-DFGHJKLM +6 1QR2.TX3Z-DFGHJKLM 1ႶႷ2.ႹႽ3Ⴟ-ႦႩႫႬႮႰႱႲ 1QR2.TX3Z-DFGHJKLM +6 P4RS.5XY6-DFGHJKLM Ⴕ4ႷႸ.5ႽႾ6-ႦႩႫႬႮႰႱႲ P4RS.5XY6-DFGHJKLM +6 P7R8.T9Y0-DFGHJKLM Ⴕ7Ⴗ8.Ⴙ9Ⴞ0-ႦႩႫႬႮႰႱႲ P7R8.T9Y0-DFGHJKLM +6 PQ1ST.2XY3-DFGHJKLM ႵႶ1ႸႹ.2ႽႾ3-ႦႩႫႬႮႰႱႲ PQ1ST.2XY3-DFGHJKLM +6 P4RS5.VX6Z-DFGHJKLM Ⴕ4ႷႸ5.ႺႽ6Ⴟ-ႦႩႫႬႮႰႱႲ P4RS5.VX6Z-DFGHJKLM +6 7QR8T.V9YZ-DFGHJKLM 7ႶႷ8Ⴙ.Ⴚ9ႾႿ-ႦႩႫႬႮႰႱႲ 7QR8T.V9YZ-DFGHJKLM +6 P1R2T.3X4Z-DFGHJKLM Ⴕ1Ⴗ2Ⴙ.3Ⴝ4Ⴟ-ႦႩႫႬႮႰႱႲ P1R2T.3X4Z-DFGHJKLM +6 5Q6S7.V8Y9-DFGHJKLM 5Ⴖ6Ⴘ7.Ⴚ8Ⴞ9-ႦႩႫႬႮႰႱႲ 5Q6S7.V8Y9-DFGHJKLM +6 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ႠႡႣႦႤႩႫႬIႮႰႱႲႴႭႵႶႷႸႹႨႺႻႽႾႿ-ႦႩႫႬႮႰႱႲ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +6 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ႠႡႣႦႤႩႫႬIႮႰႱႲႴႭႵႶႷႸႹႨႺႻႽႾႿ-ႦႩႫႬႮႰႱႲ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +6 OI.XX-DFGHJKLM ႭI.ႽႽ-ႦႩႫႬႮႰႱႲ OI.XX-DFGHJKLM +6 OI.XX-DFGHJKLM ႭI.ႽႽ-ႦႩႫႬႮႰႱႲ OI.XX-DFGHJKLM +6 OI.XX-OOOOOOOO-DFGHJKLM ႭI.ႽႽ-ႭႭႭႭႭႭႭႭ-ႦႩႫႬႮႰႱႲ OI.XX-OOOOOOOO-DFGHJKLM +6 OI.XX-IIIIIIII-DFGHJKLM ႭI.ႽႽ-IIIIIIII-ႦႩႫႬႮႰႱႲ OI.XX-IIIIIIII-DFGHJKLM +6 PQ.RS-01234567-DFGHJKLM ႵႶ.ႷႸ-01234567-ႦႩႫႬႮႰႱႲ PQ.RS-01234567-DFGHJKLM +6 PQ.RS-890-DFGHJKLM ႵႶ.ႷႸ-890-ႦႩႫႬႮႰႱႲ PQ.RS-890-DFGHJKLM +7 89.EU 89.オエ 89.EU +7 00.0A 00.0ア 00.0A +7 BCDF.GHJK カキクケ.コサスチ BCDF.GHJK +7 LMNP.QRST トナヌヒ.フヘホメ LMNP.QRST +7 VWXY.Z123 モヨラロ.ヲ123 VWXY.Z123 +7 4567.890B 4567.890カ 4567.890B +7 PQ.XY ヒフ.ラロ PQ.XY +7 PQ.XYZ ヒフ.ラロヲ PQ.XYZ +7 PQX.YZ ヒフラ.ロヲ PQX.YZ +7 PQ.RXYZ ヒフ.ヘラロヲ PQ.RXYZ +7 PQR.XYZ ヒフヘ.ラロヲ PQR.XYZ +7 PQRX.YZ ヒフヘラ.ロヲ PQRX.YZ +7 PQR.SXYZ ヒフヘ.ホラロヲ PQR.SXYZ +7 PQRS.XYZ ヒフヘホ.ラロヲ PQRS.XYZ +7 PQRS.TXYZ ヒフヘホ.メラロヲ PQRS.TXYZ +7 PQRST.VXYZ ヒフヘホメ.モラロヲ PQRST.VXYZ +7 P1.XY ヒ1.ラロ P1.XY +7 PQ.2Y ヒフ.2ロ PQ.2Y +7 3Q.X4 3フ.ラ4 3Q.X4 +7 5Q.6Y 5フ.6ロ 5Q.6Y +7 PQ.1YZ ヒフ.1ロヲ PQ.1YZ +7 PQ1.YZ ヒフ1.ロヲ PQ1.YZ +7 P2.X3Z ヒ2.ラ3ヲ P2.X3Z +7 P2X.3Z ヒ2ラ.3ヲ P2X.3Z +7 PQ.1XY2 ヒフ.1ラロ2 PQ.1XY2 +7 PQ1.XY2 ヒフ1.ラロ2 PQ1.XY2 +7 PQ1X.Y2 ヒフ1ラ.ロ2 PQ1X.Y2 +7 P3.RX4Z ヒ3.ヘラ4ヲ P3.RX4Z +7 P3R.X4Z ヒ3ヘ.ラ4ヲ P3R.X4Z +7 P3RX.4Z ヒ3ヘラ.4ヲ P3RX.4Z +7 5Q.R6Y7 5フ.ヘ6ロ7 5Q.R6Y7 +7 5QR.6Y7 5フヘ.6ロ7 5QR.6Y7 +7 5QR6.Y7 5フヘ6.ロ7 5QR6.Y7 +7 PQ1.SX2Z ヒフ1.ホラ2ヲ PQ1.SX2Z +7 PQ1S.X2Z ヒフ1ホ.ラ2ヲ PQ1S.X2Z +7 P3R.S4YZ ヒ3ヘ.ホ4ロヲ P3R.S4YZ +7 P3RS.4YZ ヒ3ヘホ.4ロヲ P3RS.4YZ +7 5QR.6XY7 5フヘ.6ラロ7 5QR.6XY7 +7 5QR6.XY7 5フヘ6.ラロ7 5QR6.XY7 +7 8Q9.SX0Z 8フ9.ホラ0ヲ 8Q9.SX0Z +7 8Q9S.X0Z 8フ9ホ.ラ0ヲ 8Q9S.X0Z +7 1QR2.TX3Z 1フヘ2.メラ3ヲ 1QR2.TX3Z +7 P4RS.5XY6 ヒ4ヘホ.5ラロ6 P4RS.5XY6 +7 P7R8.T9Y0 ヒ7ヘ8.メ9ロ0 P7R8.T9Y0 +7 PQ1ST.2XY3 ヒフ1ホメ.2ラロ3 PQ1ST.2XY3 +7 P4RS5.VX6Z ヒ4ヘホ5.モラ6ヲ P4RS5.VX6Z +7 7QR8T.V9YZ 7フヘ8メ.モ9ロヲ 7QR8T.V9YZ +7 P1R2T.3X4Z ヒ1ヘ2メ.3ラ4ヲ P1R2T.3X4Z +7 5Q6S7.V8Y9 5フ6ホ7.モ8ロ9 5Q6S7.V8Y9 +7 ABCDEFGHIJKLMNOPQRSTUVWXYZ アカキクオケコサIスチトナヌOヒフヘホメエモヨラロヲ ABCDEFGHIJKLMNOPQRSTUVWXYZ +7 ABCDEFGHIJKLMNOPQRSTUVWXYZ アカキクオケコサIスチトナヌOヒフヘホメエモヨラロヲ ABCDEFGHIJKLMNOPQRSTUVWXYZ +7 OI.XX OI.ララ OI.XX +7 OI.XX OI.ララ OI.XX +7 OI.XX-OOOOOOOO OI.ララ-OOOOOOOO OI.XX-OOOOOOOO +7 OI.XX-IIIIIIII OI.ララ-IIIIIIII OI.XX-IIIIIIII +7 PQ.RS-01234567 ヒフ.ヘホ-01234567 PQ.RS-01234567 +7 PQ.RS-890 ヒフ.ヘホ-890 PQ.RS-890 +7 89.EU-BC 89.オエ-カキ 89.EU-BC +7 00.0A-BC 00.0ア-カキ 00.0A-BC +7 BCDF.GHJK-BC カキクケ.コサスチ-カキ BCDF.GHJK-BC +7 LMNP.QRST-BC トナヌヒ.フヘホメ-カキ LMNP.QRST-BC +7 VWXY.Z123-BC モヨラロ.ヲ123-カキ VWXY.Z123-BC +7 4567.890B-BC 4567.890カ-カキ 4567.890B-BC +7 PQ.XY-BC ヒフ.ラロ-カキ PQ.XY-BC +7 PQ.XYZ-BC ヒフ.ラロヲ-カキ PQ.XYZ-BC +7 PQX.YZ-BC ヒフラ.ロヲ-カキ PQX.YZ-BC +7 PQ.RXYZ-BC ヒフ.ヘラロヲ-カキ PQ.RXYZ-BC +7 PQR.XYZ-BC ヒフヘ.ラロヲ-カキ PQR.XYZ-BC +7 PQRX.YZ-BC ヒフヘラ.ロヲ-カキ PQRX.YZ-BC +7 PQR.SXYZ-BC ヒフヘ.ホラロヲ-カキ PQR.SXYZ-BC +7 PQRS.XYZ-BC ヒフヘホ.ラロヲ-カキ PQRS.XYZ-BC +7 PQRS.TXYZ-BC ヒフヘホ.メラロヲ-カキ PQRS.TXYZ-BC +7 PQRST.VXYZ-BC ヒフヘホメ.モラロヲ-カキ PQRST.VXYZ-BC +7 P1.XY-BC ヒ1.ラロ-カキ P1.XY-BC +7 PQ.2Y-BC ヒフ.2ロ-カキ PQ.2Y-BC +7 3Q.X4-BC 3フ.ラ4-カキ 3Q.X4-BC +7 5Q.6Y-BC 5フ.6ロ-カキ 5Q.6Y-BC +7 PQ.1YZ-BC ヒフ.1ロヲ-カキ PQ.1YZ-BC +7 PQ1.YZ-BC ヒフ1.ロヲ-カキ PQ1.YZ-BC +7 P2.X3Z-BC ヒ2.ラ3ヲ-カキ P2.X3Z-BC +7 P2X.3Z-BC ヒ2ラ.3ヲ-カキ P2X.3Z-BC +7 PQ.1XY2-BC ヒフ.1ラロ2-カキ PQ.1XY2-BC +7 PQ1.XY2-BC ヒフ1.ラロ2-カキ PQ1.XY2-BC +7 PQ1X.Y2-BC ヒフ1ラ.ロ2-カキ PQ1X.Y2-BC +7 P3.RX4Z-BC ヒ3.ヘラ4ヲ-カキ P3.RX4Z-BC +7 P3R.X4Z-BC ヒ3ヘ.ラ4ヲ-カキ P3R.X4Z-BC +7 P3RX.4Z-BC ヒ3ヘラ.4ヲ-カキ P3RX.4Z-BC +7 5Q.R6Y7-BC 5フ.ヘ6ロ7-カキ 5Q.R6Y7-BC +7 5QR.6Y7-BC 5フヘ.6ロ7-カキ 5QR.6Y7-BC +7 5QR6.Y7-BC 5フヘ6.ロ7-カキ 5QR6.Y7-BC +7 PQ1.SX2Z-BC ヒフ1.ホラ2ヲ-カキ PQ1.SX2Z-BC +7 PQ1S.X2Z-BC ヒフ1ホ.ラ2ヲ-カキ PQ1S.X2Z-BC +7 P3R.S4YZ-BC ヒ3ヘ.ホ4ロヲ-カキ P3R.S4YZ-BC +7 P3RS.4YZ-BC ヒ3ヘホ.4ロヲ-カキ P3RS.4YZ-BC +7 5QR.6XY7-BC 5フヘ.6ラロ7-カキ 5QR.6XY7-BC +7 5QR6.XY7-BC 5フヘ6.ラロ7-カキ 5QR6.XY7-BC +7 8Q9.SX0Z-BC 8フ9.ホラ0ヲ-カキ 8Q9.SX0Z-BC +7 8Q9S.X0Z-BC 8フ9ホ.ラ0ヲ-カキ 8Q9S.X0Z-BC +7 1QR2.TX3Z-BC 1フヘ2.メラ3ヲ-カキ 1QR2.TX3Z-BC +7 P4RS.5XY6-BC ヒ4ヘホ.5ラロ6-カキ P4RS.5XY6-BC +7 P7R8.T9Y0-BC ヒ7ヘ8.メ9ロ0-カキ P7R8.T9Y0-BC +7 PQ1ST.2XY3-BC ヒフ1ホメ.2ラロ3-カキ PQ1ST.2XY3-BC +7 P4RS5.VX6Z-BC ヒ4ヘホ5.モラ6ヲ-カキ P4RS5.VX6Z-BC +7 7QR8T.V9YZ-BC 7フヘ8メ.モ9ロヲ-カキ 7QR8T.V9YZ-BC +7 P1R2T.3X4Z-BC ヒ1ヘ2メ.3ラ4ヲ-カキ P1R2T.3X4Z-BC +7 5Q6S7.V8Y9-BC 5フ6ホ7.モ8ロ9-カキ 5Q6S7.V8Y9-BC +7 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC アカキクオケコサIスチトナヌOヒフヘホメエモヨラロヲ-カキ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +7 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC アカキクオケコサIスチトナヌOヒフヘホメエモヨラロヲ-カキ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +7 OI.XX-BC OI.ララ-カキ OI.XX-BC +7 OI.XX-BC OI.ララ-カキ OI.XX-BC +7 OI.XX-OOOOOOOO-BC OI.ララ-OOOOOOOO-カキ OI.XX-OOOOOOOO-BC +7 OI.XX-IIIIIIII-BC OI.ララ-IIIIIIII-カキ OI.XX-IIIIIIII-BC +7 PQ.RS-01234567-BC ヒフ.ヘホ-01234567-カキ PQ.RS-01234567-BC +7 PQ.RS-890-BC ヒフ.ヘホ-890-カキ PQ.RS-890-BC +7 89.EU-DFGHJKLM 89.オエ-クケコサスチトナ 89.EU-DFGHJKLM +7 00.0A-DFGHJKLM 00.0ア-クケコサスチトナ 00.0A-DFGHJKLM +7 BCDF.GHJK-DFGHJKLM カキクケ.コサスチ-クケコサスチトナ BCDF.GHJK-DFGHJKLM +7 LMNP.QRST-DFGHJKLM トナヌヒ.フヘホメ-クケコサスチトナ LMNP.QRST-DFGHJKLM +7 VWXY.Z123-DFGHJKLM モヨラロ.ヲ123-クケコサスチトナ VWXY.Z123-DFGHJKLM +7 4567.890B-DFGHJKLM 4567.890カ-クケコサスチトナ 4567.890B-DFGHJKLM +7 PQ.XY-DFGHJKLM ヒフ.ラロ-クケコサスチトナ PQ.XY-DFGHJKLM +7 PQ.XYZ-DFGHJKLM ヒフ.ラロヲ-クケコサスチトナ PQ.XYZ-DFGHJKLM +7 PQX.YZ-DFGHJKLM ヒフラ.ロヲ-クケコサスチトナ PQX.YZ-DFGHJKLM +7 PQ.RXYZ-DFGHJKLM ヒフ.ヘラロヲ-クケコサスチトナ PQ.RXYZ-DFGHJKLM +7 PQR.XYZ-DFGHJKLM ヒフヘ.ラロヲ-クケコサスチトナ PQR.XYZ-DFGHJKLM +7 PQRX.YZ-DFGHJKLM ヒフヘラ.ロヲ-クケコサスチトナ PQRX.YZ-DFGHJKLM +7 PQR.SXYZ-DFGHJKLM ヒフヘ.ホラロヲ-クケコサスチトナ PQR.SXYZ-DFGHJKLM +7 PQRS.XYZ-DFGHJKLM ヒフヘホ.ラロヲ-クケコサスチトナ PQRS.XYZ-DFGHJKLM +7 PQRS.TXYZ-DFGHJKLM ヒフヘホ.メラロヲ-クケコサスチトナ PQRS.TXYZ-DFGHJKLM +7 PQRST.VXYZ-DFGHJKLM ヒフヘホメ.モラロヲ-クケコサスチトナ PQRST.VXYZ-DFGHJKLM +7 P1.XY-DFGHJKLM ヒ1.ラロ-クケコサスチトナ P1.XY-DFGHJKLM +7 PQ.2Y-DFGHJKLM ヒフ.2ロ-クケコサスチトナ PQ.2Y-DFGHJKLM +7 3Q.X4-DFGHJKLM 3フ.ラ4-クケコサスチトナ 3Q.X4-DFGHJKLM +7 5Q.6Y-DFGHJKLM 5フ.6ロ-クケコサスチトナ 5Q.6Y-DFGHJKLM +7 PQ.1YZ-DFGHJKLM ヒフ.1ロヲ-クケコサスチトナ PQ.1YZ-DFGHJKLM +7 PQ1.YZ-DFGHJKLM ヒフ1.ロヲ-クケコサスチトナ PQ1.YZ-DFGHJKLM +7 P2.X3Z-DFGHJKLM ヒ2.ラ3ヲ-クケコサスチトナ P2.X3Z-DFGHJKLM +7 P2X.3Z-DFGHJKLM ヒ2ラ.3ヲ-クケコサスチトナ P2X.3Z-DFGHJKLM +7 PQ.1XY2-DFGHJKLM ヒフ.1ラロ2-クケコサスチトナ PQ.1XY2-DFGHJKLM +7 PQ1.XY2-DFGHJKLM ヒフ1.ラロ2-クケコサスチトナ PQ1.XY2-DFGHJKLM +7 PQ1X.Y2-DFGHJKLM ヒフ1ラ.ロ2-クケコサスチトナ PQ1X.Y2-DFGHJKLM +7 P3.RX4Z-DFGHJKLM ヒ3.ヘラ4ヲ-クケコサスチトナ P3.RX4Z-DFGHJKLM +7 P3R.X4Z-DFGHJKLM ヒ3ヘ.ラ4ヲ-クケコサスチトナ P3R.X4Z-DFGHJKLM +7 P3RX.4Z-DFGHJKLM ヒ3ヘラ.4ヲ-クケコサスチトナ P3RX.4Z-DFGHJKLM +7 5Q.R6Y7-DFGHJKLM 5フ.ヘ6ロ7-クケコサスチトナ 5Q.R6Y7-DFGHJKLM +7 5QR.6Y7-DFGHJKLM 5フヘ.6ロ7-クケコサスチトナ 5QR.6Y7-DFGHJKLM +7 5QR6.Y7-DFGHJKLM 5フヘ6.ロ7-クケコサスチトナ 5QR6.Y7-DFGHJKLM +7 PQ1.SX2Z-DFGHJKLM ヒフ1.ホラ2ヲ-クケコサスチトナ PQ1.SX2Z-DFGHJKLM +7 PQ1S.X2Z-DFGHJKLM ヒフ1ホ.ラ2ヲ-クケコサスチトナ PQ1S.X2Z-DFGHJKLM +7 P3R.S4YZ-DFGHJKLM ヒ3ヘ.ホ4ロヲ-クケコサスチトナ P3R.S4YZ-DFGHJKLM +7 P3RS.4YZ-DFGHJKLM ヒ3ヘホ.4ロヲ-クケコサスチトナ P3RS.4YZ-DFGHJKLM +7 5QR.6XY7-DFGHJKLM 5フヘ.6ラロ7-クケコサスチトナ 5QR.6XY7-DFGHJKLM +7 5QR6.XY7-DFGHJKLM 5フヘ6.ラロ7-クケコサスチトナ 5QR6.XY7-DFGHJKLM +7 8Q9.SX0Z-DFGHJKLM 8フ9.ホラ0ヲ-クケコサスチトナ 8Q9.SX0Z-DFGHJKLM +7 8Q9S.X0Z-DFGHJKLM 8フ9ホ.ラ0ヲ-クケコサスチトナ 8Q9S.X0Z-DFGHJKLM +7 1QR2.TX3Z-DFGHJKLM 1フヘ2.メラ3ヲ-クケコサスチトナ 1QR2.TX3Z-DFGHJKLM +7 P4RS.5XY6-DFGHJKLM ヒ4ヘホ.5ラロ6-クケコサスチトナ P4RS.5XY6-DFGHJKLM +7 P7R8.T9Y0-DFGHJKLM ヒ7ヘ8.メ9ロ0-クケコサスチトナ P7R8.T9Y0-DFGHJKLM +7 PQ1ST.2XY3-DFGHJKLM ヒフ1ホメ.2ラロ3-クケコサスチトナ PQ1ST.2XY3-DFGHJKLM +7 P4RS5.VX6Z-DFGHJKLM ヒ4ヘホ5.モラ6ヲ-クケコサスチトナ P4RS5.VX6Z-DFGHJKLM +7 7QR8T.V9YZ-DFGHJKLM 7フヘ8メ.モ9ロヲ-クケコサスチトナ 7QR8T.V9YZ-DFGHJKLM +7 P1R2T.3X4Z-DFGHJKLM ヒ1ヘ2メ.3ラ4ヲ-クケコサスチトナ P1R2T.3X4Z-DFGHJKLM +7 5Q6S7.V8Y9-DFGHJKLM 5フ6ホ7.モ8ロ9-クケコサスチトナ 5Q6S7.V8Y9-DFGHJKLM +7 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM アカキクオケコサIスチトナヌOヒフヘホメエモヨラロヲ-クケコサスチトナ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +7 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM アカキクオケコサIスチトナヌOヒフヘホメエモヨラロヲ-クケコサスチトナ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +7 OI.XX-DFGHJKLM OI.ララ-クケコサスチトナ OI.XX-DFGHJKLM +7 OI.XX-DFGHJKLM OI.ララ-クケコサスチトナ OI.XX-DFGHJKLM +7 OI.XX-OOOOOOOO-DFGHJKLM OI.ララ-OOOOOOOO-クケコサスチトナ OI.XX-OOOOOOOO-DFGHJKLM +7 OI.XX-IIIIIIII-DFGHJKLM OI.ララ-IIIIIIII-クケコサスチトナ OI.XX-IIIIIIII-DFGHJKLM +7 PQ.RS-01234567-DFGHJKLM ヒフ.ヘホ-01234567-クケコサスチトナ PQ.RS-01234567-DFGHJKLM +7 PQ.RS-890-DFGHJKLM ヒフ.ヘホ-890-クケコサスチトナ PQ.RS-890-DFGHJKLM +8 89.EU ๘๙.าฬ 89.EU +8 00.0A ๐๐.๐ะ 00.0A +8 BCDF.GHJK กขคง.จฉชฑ BCDF.GHJK +8 LMNP.QRST ดถทธ.บผมร LMNP.QRST +8 VWXY.Z123 ลวอฮ.ฯ๑๒๓ VWXY.Z123 +8 4567.890B ๔๕๖๗.๘๙๐ก 4567.890B +8 PQ.XY ธบ.อฮ PQ.XY +8 PQ.XYZ ธบ.อฮฯ PQ.XYZ +8 PQX.YZ ธบอ.ฮฯ PQX.YZ +8 PQ.RXYZ ธบ.ผอฮฯ PQ.RXYZ +8 PQR.XYZ ธบผ.อฮฯ PQR.XYZ +8 PQRX.YZ ธบผอ.ฮฯ PQRX.YZ +8 PQR.SXYZ ธบผ.มอฮฯ PQR.SXYZ +8 PQRS.XYZ ธบผม.อฮฯ PQRS.XYZ +8 PQRS.TXYZ ธบผม.รอฮฯ PQRS.TXYZ +8 PQRST.VXYZ ธบผมร.ลอฮฯ PQRST.VXYZ +8 P1.XY ธ๑.อฮ P1.XY +8 PQ.2Y ธบ.๒ฮ PQ.2Y +8 3Q.X4 ๓บ.อ๔ 3Q.X4 +8 5Q.6Y ๕บ.๖ฮ 5Q.6Y +8 PQ.1YZ ธบ.๑ฮฯ PQ.1YZ +8 PQ1.YZ ธบ๑.ฮฯ PQ1.YZ +8 P2.X3Z ธ๒.อ๓ฯ P2.X3Z +8 P2X.3Z ธ๒อ.๓ฯ P2X.3Z +8 PQ.1XY2 ธบ.๑อฮ๒ PQ.1XY2 +8 PQ1.XY2 ธบ๑.อฮ๒ PQ1.XY2 +8 PQ1X.Y2 ธบ๑อ.ฮ๒ PQ1X.Y2 +8 P3.RX4Z ธ๓.ผอ๔ฯ P3.RX4Z +8 P3R.X4Z ธ๓ผ.อ๔ฯ P3R.X4Z +8 P3RX.4Z ธ๓ผอ.๔ฯ P3RX.4Z +8 5Q.R6Y7 ๕บ.ผ๖ฮ๗ 5Q.R6Y7 +8 5QR.6Y7 ๕บผ.๖ฮ๗ 5QR.6Y7 +8 5QR6.Y7 ๕บผ๖.ฮ๗ 5QR6.Y7 +8 PQ1.SX2Z ธบ๑.มอ๒ฯ PQ1.SX2Z +8 PQ1S.X2Z ธบ๑ม.อ๒ฯ PQ1S.X2Z +8 P3R.S4YZ ธ๓ผ.ม๔ฮฯ P3R.S4YZ +8 P3RS.4YZ ธ๓ผม.๔ฮฯ P3RS.4YZ +8 5QR.6XY7 ๕บผ.๖อฮ๗ 5QR.6XY7 +8 5QR6.XY7 ๕บผ๖.อฮ๗ 5QR6.XY7 +8 8Q9.SX0Z ๘บ๙.มอ๐ฯ 8Q9.SX0Z +8 8Q9S.X0Z ๘บ๙ม.อ๐ฯ 8Q9S.X0Z +8 1QR2.TX3Z ๑บผ๒.รอ๓ฯ 1QR2.TX3Z +8 P4RS.5XY6 ธ๔ผม.๕อฮ๖ P4RS.5XY6 +8 P7R8.T9Y0 ธ๗ผ๘.ร๙ฮ๐ P7R8.T9Y0 +8 PQ1ST.2XY3 ธบ๑มร.๒อฮ๓ PQ1ST.2XY3 +8 P4RS5.VX6Z ธ๔ผม๕.ลอ๖ฯ P4RS5.VX6Z +8 7QR8T.V9YZ ๗บผ๘ร.ล๙ฮฯ 7QR8T.V9YZ +8 P1R2T.3X4Z ธ๑ผ๒ร.๓อ๔ฯ P1R2T.3X4Z +8 5Q6S7.V8Y9 ๕บ๖ม๗.ล๘ฮ๙ 5Q6S7.V8Y9 +8 ABCDEFGHIJKLMNOPQRSTUVWXYZ ะกขคางจฉIชฑดถทOธบผมรฬลวอฮฯ ABCDEFGHIJKLMNOPQRSTUVWXYZ +8 ABCDEFGHIJKLMNOPQRSTUVWXYZ ะกขคางจฉIชฑดถทOธบผมรฬลวอฮฯ ABCDEFGHIJKLMNOPQRSTUVWXYZ +8 OI.XX OI.ออ OI.XX +8 OI.XX OI.ออ OI.XX +8 OI.XX-OOOOOOOO OI.ออ-OOOOOOOO OI.XX-OOOOOOOO +8 OI.XX-IIIIIIII OI.ออ-IIIIIIII OI.XX-IIIIIIII +8 PQ.RS-01234567 ธบ.ผม-๐๑๒๓๔๕๖๗ PQ.RS-01234567 +8 PQ.RS-890 ธบ.ผม-๘๙๐ PQ.RS-890 +8 89.EU-BC ๘๙.าฬ-กข 89.EU-BC +8 00.0A-BC ๐๐.๐ะ-กข 00.0A-BC +8 BCDF.GHJK-BC กขคง.จฉชฑ-กข BCDF.GHJK-BC +8 LMNP.QRST-BC ดถทธ.บผมร-กข LMNP.QRST-BC +8 VWXY.Z123-BC ลวอฮ.ฯ๑๒๓-กข VWXY.Z123-BC +8 4567.890B-BC ๔๕๖๗.๘๙๐ก-กข 4567.890B-BC +8 PQ.XY-BC ธบ.อฮ-กข PQ.XY-BC +8 PQ.XYZ-BC ธบ.อฮฯ-กข PQ.XYZ-BC +8 PQX.YZ-BC ธบอ.ฮฯ-กข PQX.YZ-BC +8 PQ.RXYZ-BC ธบ.ผอฮฯ-กข PQ.RXYZ-BC +8 PQR.XYZ-BC ธบผ.อฮฯ-กข PQR.XYZ-BC +8 PQRX.YZ-BC ธบผอ.ฮฯ-กข PQRX.YZ-BC +8 PQR.SXYZ-BC ธบผ.มอฮฯ-กข PQR.SXYZ-BC +8 PQRS.XYZ-BC ธบผม.อฮฯ-กข PQRS.XYZ-BC +8 PQRS.TXYZ-BC ธบผม.รอฮฯ-กข PQRS.TXYZ-BC +8 PQRST.VXYZ-BC ธบผมร.ลอฮฯ-กข PQRST.VXYZ-BC +8 P1.XY-BC ธ๑.อฮ-กข P1.XY-BC +8 PQ.2Y-BC ธบ.๒ฮ-กข PQ.2Y-BC +8 3Q.X4-BC ๓บ.อ๔-กข 3Q.X4-BC +8 5Q.6Y-BC ๕บ.๖ฮ-กข 5Q.6Y-BC +8 PQ.1YZ-BC ธบ.๑ฮฯ-กข PQ.1YZ-BC +8 PQ1.YZ-BC ธบ๑.ฮฯ-กข PQ1.YZ-BC +8 P2.X3Z-BC ธ๒.อ๓ฯ-กข P2.X3Z-BC +8 P2X.3Z-BC ธ๒อ.๓ฯ-กข P2X.3Z-BC +8 PQ.1XY2-BC ธบ.๑อฮ๒-กข PQ.1XY2-BC +8 PQ1.XY2-BC ธบ๑.อฮ๒-กข PQ1.XY2-BC +8 PQ1X.Y2-BC ธบ๑อ.ฮ๒-กข PQ1X.Y2-BC +8 P3.RX4Z-BC ธ๓.ผอ๔ฯ-กข P3.RX4Z-BC +8 P3R.X4Z-BC ธ๓ผ.อ๔ฯ-กข P3R.X4Z-BC +8 P3RX.4Z-BC ธ๓ผอ.๔ฯ-กข P3RX.4Z-BC +8 5Q.R6Y7-BC ๕บ.ผ๖ฮ๗-กข 5Q.R6Y7-BC +8 5QR.6Y7-BC ๕บผ.๖ฮ๗-กข 5QR.6Y7-BC +8 5QR6.Y7-BC ๕บผ๖.ฮ๗-กข 5QR6.Y7-BC +8 PQ1.SX2Z-BC ธบ๑.มอ๒ฯ-กข PQ1.SX2Z-BC +8 PQ1S.X2Z-BC ธบ๑ม.อ๒ฯ-กข PQ1S.X2Z-BC +8 P3R.S4YZ-BC ธ๓ผ.ม๔ฮฯ-กข P3R.S4YZ-BC +8 P3RS.4YZ-BC ธ๓ผม.๔ฮฯ-กข P3RS.4YZ-BC +8 5QR.6XY7-BC ๕บผ.๖อฮ๗-กข 5QR.6XY7-BC +8 5QR6.XY7-BC ๕บผ๖.อฮ๗-กข 5QR6.XY7-BC +8 8Q9.SX0Z-BC ๘บ๙.มอ๐ฯ-กข 8Q9.SX0Z-BC +8 8Q9S.X0Z-BC ๘บ๙ม.อ๐ฯ-กข 8Q9S.X0Z-BC +8 1QR2.TX3Z-BC ๑บผ๒.รอ๓ฯ-กข 1QR2.TX3Z-BC +8 P4RS.5XY6-BC ธ๔ผม.๕อฮ๖-กข P4RS.5XY6-BC +8 P7R8.T9Y0-BC ธ๗ผ๘.ร๙ฮ๐-กข P7R8.T9Y0-BC +8 PQ1ST.2XY3-BC ธบ๑มร.๒อฮ๓-กข PQ1ST.2XY3-BC +8 P4RS5.VX6Z-BC ธ๔ผม๕.ลอ๖ฯ-กข P4RS5.VX6Z-BC +8 7QR8T.V9YZ-BC ๗บผ๘ร.ล๙ฮฯ-กข 7QR8T.V9YZ-BC +8 P1R2T.3X4Z-BC ธ๑ผ๒ร.๓อ๔ฯ-กข P1R2T.3X4Z-BC +8 5Q6S7.V8Y9-BC ๕บ๖ม๗.ล๘ฮ๙-กข 5Q6S7.V8Y9-BC +8 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ะกขคางจฉIชฑดถทOธบผมรฬลวอฮฯ-กข ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +8 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ะกขคางจฉIชฑดถทOธบผมรฬลวอฮฯ-กข ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +8 OI.XX-BC OI.ออ-กข OI.XX-BC +8 OI.XX-BC OI.ออ-กข OI.XX-BC +8 OI.XX-OOOOOOOO-BC OI.ออ-OOOOOOOO-กข OI.XX-OOOOOOOO-BC +8 OI.XX-IIIIIIII-BC OI.ออ-IIIIIIII-กข OI.XX-IIIIIIII-BC +8 PQ.RS-01234567-BC ธบ.ผม-๐๑๒๓๔๕๖๗-กข PQ.RS-01234567-BC +8 PQ.RS-890-BC ธบ.ผม-๘๙๐-กข PQ.RS-890-BC +8 89.EU-DFGHJKLM ๘๙.าฬ-คงจฉชฑดถ 89.EU-DFGHJKLM +8 00.0A-DFGHJKLM ๐๐.๐ะ-คงจฉชฑดถ 00.0A-DFGHJKLM +8 BCDF.GHJK-DFGHJKLM กขคง.จฉชฑ-คงจฉชฑดถ BCDF.GHJK-DFGHJKLM +8 LMNP.QRST-DFGHJKLM ดถทธ.บผมร-คงจฉชฑดถ LMNP.QRST-DFGHJKLM +8 VWXY.Z123-DFGHJKLM ลวอฮ.ฯ๑๒๓-คงจฉชฑดถ VWXY.Z123-DFGHJKLM +8 4567.890B-DFGHJKLM ๔๕๖๗.๘๙๐ก-คงจฉชฑดถ 4567.890B-DFGHJKLM +8 PQ.XY-DFGHJKLM ธบ.อฮ-คงจฉชฑดถ PQ.XY-DFGHJKLM +8 PQ.XYZ-DFGHJKLM ธบ.อฮฯ-คงจฉชฑดถ PQ.XYZ-DFGHJKLM +8 PQX.YZ-DFGHJKLM ธบอ.ฮฯ-คงจฉชฑดถ PQX.YZ-DFGHJKLM +8 PQ.RXYZ-DFGHJKLM ธบ.ผอฮฯ-คงจฉชฑดถ PQ.RXYZ-DFGHJKLM +8 PQR.XYZ-DFGHJKLM ธบผ.อฮฯ-คงจฉชฑดถ PQR.XYZ-DFGHJKLM +8 PQRX.YZ-DFGHJKLM ธบผอ.ฮฯ-คงจฉชฑดถ PQRX.YZ-DFGHJKLM +8 PQR.SXYZ-DFGHJKLM ธบผ.มอฮฯ-คงจฉชฑดถ PQR.SXYZ-DFGHJKLM +8 PQRS.XYZ-DFGHJKLM ธบผม.อฮฯ-คงจฉชฑดถ PQRS.XYZ-DFGHJKLM +8 PQRS.TXYZ-DFGHJKLM ธบผม.รอฮฯ-คงจฉชฑดถ PQRS.TXYZ-DFGHJKLM +8 PQRST.VXYZ-DFGHJKLM ธบผมร.ลอฮฯ-คงจฉชฑดถ PQRST.VXYZ-DFGHJKLM +8 P1.XY-DFGHJKLM ธ๑.อฮ-คงจฉชฑดถ P1.XY-DFGHJKLM +8 PQ.2Y-DFGHJKLM ธบ.๒ฮ-คงจฉชฑดถ PQ.2Y-DFGHJKLM +8 3Q.X4-DFGHJKLM ๓บ.อ๔-คงจฉชฑดถ 3Q.X4-DFGHJKLM +8 5Q.6Y-DFGHJKLM ๕บ.๖ฮ-คงจฉชฑดถ 5Q.6Y-DFGHJKLM +8 PQ.1YZ-DFGHJKLM ธบ.๑ฮฯ-คงจฉชฑดถ PQ.1YZ-DFGHJKLM +8 PQ1.YZ-DFGHJKLM ธบ๑.ฮฯ-คงจฉชฑดถ PQ1.YZ-DFGHJKLM +8 P2.X3Z-DFGHJKLM ธ๒.อ๓ฯ-คงจฉชฑดถ P2.X3Z-DFGHJKLM +8 P2X.3Z-DFGHJKLM ธ๒อ.๓ฯ-คงจฉชฑดถ P2X.3Z-DFGHJKLM +8 PQ.1XY2-DFGHJKLM ธบ.๑อฮ๒-คงจฉชฑดถ PQ.1XY2-DFGHJKLM +8 PQ1.XY2-DFGHJKLM ธบ๑.อฮ๒-คงจฉชฑดถ PQ1.XY2-DFGHJKLM +8 PQ1X.Y2-DFGHJKLM ธบ๑อ.ฮ๒-คงจฉชฑดถ PQ1X.Y2-DFGHJKLM +8 P3.RX4Z-DFGHJKLM ธ๓.ผอ๔ฯ-คงจฉชฑดถ P3.RX4Z-DFGHJKLM +8 P3R.X4Z-DFGHJKLM ธ๓ผ.อ๔ฯ-คงจฉชฑดถ P3R.X4Z-DFGHJKLM +8 P3RX.4Z-DFGHJKLM ธ๓ผอ.๔ฯ-คงจฉชฑดถ P3RX.4Z-DFGHJKLM +8 5Q.R6Y7-DFGHJKLM ๕บ.ผ๖ฮ๗-คงจฉชฑดถ 5Q.R6Y7-DFGHJKLM +8 5QR.6Y7-DFGHJKLM ๕บผ.๖ฮ๗-คงจฉชฑดถ 5QR.6Y7-DFGHJKLM +8 5QR6.Y7-DFGHJKLM ๕บผ๖.ฮ๗-คงจฉชฑดถ 5QR6.Y7-DFGHJKLM +8 PQ1.SX2Z-DFGHJKLM ธบ๑.มอ๒ฯ-คงจฉชฑดถ PQ1.SX2Z-DFGHJKLM +8 PQ1S.X2Z-DFGHJKLM ธบ๑ม.อ๒ฯ-คงจฉชฑดถ PQ1S.X2Z-DFGHJKLM +8 P3R.S4YZ-DFGHJKLM ธ๓ผ.ม๔ฮฯ-คงจฉชฑดถ P3R.S4YZ-DFGHJKLM +8 P3RS.4YZ-DFGHJKLM ธ๓ผม.๔ฮฯ-คงจฉชฑดถ P3RS.4YZ-DFGHJKLM +8 5QR.6XY7-DFGHJKLM ๕บผ.๖อฮ๗-คงจฉชฑดถ 5QR.6XY7-DFGHJKLM +8 5QR6.XY7-DFGHJKLM ๕บผ๖.อฮ๗-คงจฉชฑดถ 5QR6.XY7-DFGHJKLM +8 8Q9.SX0Z-DFGHJKLM ๘บ๙.มอ๐ฯ-คงจฉชฑดถ 8Q9.SX0Z-DFGHJKLM +8 8Q9S.X0Z-DFGHJKLM ๘บ๙ม.อ๐ฯ-คงจฉชฑดถ 8Q9S.X0Z-DFGHJKLM +8 1QR2.TX3Z-DFGHJKLM ๑บผ๒.รอ๓ฯ-คงจฉชฑดถ 1QR2.TX3Z-DFGHJKLM +8 P4RS.5XY6-DFGHJKLM ธ๔ผม.๕อฮ๖-คงจฉชฑดถ P4RS.5XY6-DFGHJKLM +8 P7R8.T9Y0-DFGHJKLM ธ๗ผ๘.ร๙ฮ๐-คงจฉชฑดถ P7R8.T9Y0-DFGHJKLM +8 PQ1ST.2XY3-DFGHJKLM ธบ๑มร.๒อฮ๓-คงจฉชฑดถ PQ1ST.2XY3-DFGHJKLM +8 P4RS5.VX6Z-DFGHJKLM ธ๔ผม๕.ลอ๖ฯ-คงจฉชฑดถ P4RS5.VX6Z-DFGHJKLM +8 7QR8T.V9YZ-DFGHJKLM ๗บผ๘ร.ล๙ฮฯ-คงจฉชฑดถ 7QR8T.V9YZ-DFGHJKLM +8 P1R2T.3X4Z-DFGHJKLM ธ๑ผ๒ร.๓อ๔ฯ-คงจฉชฑดถ P1R2T.3X4Z-DFGHJKLM +8 5Q6S7.V8Y9-DFGHJKLM ๕บ๖ม๗.ล๘ฮ๙-คงจฉชฑดถ 5Q6S7.V8Y9-DFGHJKLM +8 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ะกขคางจฉIชฑดถทOธบผมรฬลวอฮฯ-คงจฉชฑดถ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +8 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ะกขคางจฉIชฑดถทOธบผมรฬลวอฮฯ-คงจฉชฑดถ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +8 OI.XX-DFGHJKLM OI.ออ-คงจฉชฑดถ OI.XX-DFGHJKLM +8 OI.XX-DFGHJKLM OI.ออ-คงจฉชฑดถ OI.XX-DFGHJKLM +8 OI.XX-OOOOOOOO-DFGHJKLM OI.ออ-OOOOOOOO-คงจฉชฑดถ OI.XX-OOOOOOOO-DFGHJKLM +8 OI.XX-IIIIIIII-DFGHJKLM OI.ออ-IIIIIIII-คงจฉชฑดถ OI.XX-IIIIIIII-DFGHJKLM +8 PQ.RS-01234567-DFGHJKLM ธบ.ผม-๐๑๒๓๔๕๖๗-คงจฉชฑดถ PQ.RS-01234567-DFGHJKLM +8 PQ.RS-890-DFGHJKLM ธบ.ผม-๘๙๐-คงจฉชฑดถ PQ.RS-890-DFGHJKLM +9 89.EU 89.ໃຽ 89.EU +9 00.0A 00.0ະ 00.0A +9 BCDF.GHJK ກຂຄງ.ຈຊຍດ BCDF.GHJK +9 LMNP.QRST ທນບຜ.ພມຢຣ LMNP.QRST +9 VWXY.Z123 ວສຫອ.ຯ123 VWXY.Z123 +9 4567.890B 4567.890ກ 4567.890B +9 PQ.XY ຜພ.ຫອ PQ.XY +9 PQ.XYZ ຜພ.ຫອຯ PQ.XYZ +9 PQX.YZ ຜພຫ.ອຯ PQX.YZ +9 PQ.RXYZ ຜພ.ມຫອຯ PQ.RXYZ +9 PQR.XYZ ຜພມ.ຫອຯ PQR.XYZ +9 PQRX.YZ ຜພມຫ.ອຯ PQRX.YZ +9 PQR.SXYZ ຜພມ.ຢຫອຯ PQR.SXYZ +9 PQRS.XYZ ຜພມຢ.ຫອຯ PQRS.XYZ +9 PQRS.TXYZ ຜພມຢ.ຣຫອຯ PQRS.TXYZ +9 PQRST.VXYZ ຜພມຢຣ.ວຫອຯ PQRST.VXYZ +9 P1.XY ຜ1.ຫອ P1.XY +9 PQ.2Y ຜພ.2ອ PQ.2Y +9 3Q.X4 3ພ.ຫ4 3Q.X4 +9 5Q.6Y 5ພ.6ອ 5Q.6Y +9 PQ.1YZ ຜພ.1ອຯ PQ.1YZ +9 PQ1.YZ ຜພ1.ອຯ PQ1.YZ +9 P2.X3Z ຜ2.ຫ3ຯ P2.X3Z +9 P2X.3Z ຜ2ຫ.3ຯ P2X.3Z +9 PQ.1XY2 ຜພ.1ຫອ2 PQ.1XY2 +9 PQ1.XY2 ຜພ1.ຫອ2 PQ1.XY2 +9 PQ1X.Y2 ຜພ1ຫ.ອ2 PQ1X.Y2 +9 P3.RX4Z ຜ3.ມຫ4ຯ P3.RX4Z +9 P3R.X4Z ຜ3ມ.ຫ4ຯ P3R.X4Z +9 P3RX.4Z ຜ3ມຫ.4ຯ P3RX.4Z +9 5Q.R6Y7 5ພ.ມ6ອ7 5Q.R6Y7 +9 5QR.6Y7 5ພມ.6ອ7 5QR.6Y7 +9 5QR6.Y7 5ພມ6.ອ7 5QR6.Y7 +9 PQ1.SX2Z ຜພ1.ຢຫ2ຯ PQ1.SX2Z +9 PQ1S.X2Z ຜພ1ຢ.ຫ2ຯ PQ1S.X2Z +9 P3R.S4YZ ຜ3ມ.ຢ4ອຯ P3R.S4YZ +9 P3RS.4YZ ຜ3ມຢ.4ອຯ P3RS.4YZ +9 5QR.6XY7 5ພມ.6ຫອ7 5QR.6XY7 +9 5QR6.XY7 5ພມ6.ຫອ7 5QR6.XY7 +9 8Q9.SX0Z 8ພ9.ຢຫ0ຯ 8Q9.SX0Z +9 8Q9S.X0Z 8ພ9ຢ.ຫ0ຯ 8Q9S.X0Z +9 1QR2.TX3Z 1ພມ2.ຣຫ3ຯ 1QR2.TX3Z +9 P4RS.5XY6 ຜ4ມຢ.5ຫອ6 P4RS.5XY6 +9 P7R8.T9Y0 ຜ7ມ8.ຣ9ອ0 P7R8.T9Y0 +9 PQ1ST.2XY3 ຜພ1ຢຣ.2ຫອ3 PQ1ST.2XY3 +9 P4RS5.VX6Z ຜ4ມຢ5.ວຫ6ຯ P4RS5.VX6Z +9 7QR8T.V9YZ 7ພມ8ຣ.ວ9ອຯ 7QR8T.V9YZ +9 P1R2T.3X4Z ຜ1ມ2ຣ.3ຫ4ຯ P1R2T.3X4Z +9 5Q6S7.V8Y9 5ພ6ຢ7.ວ8ອ9 5Q6S7.V8Y9 +9 ABCDEFGHIJKLMNOPQRSTUVWXYZ ະກຂຄໃງຈຊໄຍດທນບOຜພມຢຣຽວສຫອຯ ABCDEFGHIJKLMNOPQRSTUVWXYZ +9 ABCDEFGHIJKLMNOPQRSTUVWXYZ ະກຂຄໃງຈຊໄຍດທນບOຜພມຢຣຽວສຫອຯ ABCDEFGHIJKLMNOPQRSTUVWXYZ +9 OI.XX Oໄ.ຫຫ OI.XX +9 OI.XX Oໄ.ຫຫ OI.XX +9 OI.XX-OOOOOOOO Oໄ.ຫຫ-OOOOOOOO OI.XX-OOOOOOOO +9 OI.XX-IIIIIIII Oໄ.ຫຫ-ໄໄໄໄໄໄໄໄ OI.XX-IIIIIIII +9 PQ.RS-01234567 ຜພ.ມຢ-01234567 PQ.RS-01234567 +9 PQ.RS-890 ຜພ.ມຢ-890 PQ.RS-890 +9 89.EU-BC 89.ໃຽ-ກຂ 89.EU-BC +9 00.0A-BC 00.0ະ-ກຂ 00.0A-BC +9 BCDF.GHJK-BC ກຂຄງ.ຈຊຍດ-ກຂ BCDF.GHJK-BC +9 LMNP.QRST-BC ທນບຜ.ພມຢຣ-ກຂ LMNP.QRST-BC +9 VWXY.Z123-BC ວສຫອ.ຯ123-ກຂ VWXY.Z123-BC +9 4567.890B-BC 4567.890ກ-ກຂ 4567.890B-BC +9 PQ.XY-BC ຜພ.ຫອ-ກຂ PQ.XY-BC +9 PQ.XYZ-BC ຜພ.ຫອຯ-ກຂ PQ.XYZ-BC +9 PQX.YZ-BC ຜພຫ.ອຯ-ກຂ PQX.YZ-BC +9 PQ.RXYZ-BC ຜພ.ມຫອຯ-ກຂ PQ.RXYZ-BC +9 PQR.XYZ-BC ຜພມ.ຫອຯ-ກຂ PQR.XYZ-BC +9 PQRX.YZ-BC ຜພມຫ.ອຯ-ກຂ PQRX.YZ-BC +9 PQR.SXYZ-BC ຜພມ.ຢຫອຯ-ກຂ PQR.SXYZ-BC +9 PQRS.XYZ-BC ຜພມຢ.ຫອຯ-ກຂ PQRS.XYZ-BC +9 PQRS.TXYZ-BC ຜພມຢ.ຣຫອຯ-ກຂ PQRS.TXYZ-BC +9 PQRST.VXYZ-BC ຜພມຢຣ.ວຫອຯ-ກຂ PQRST.VXYZ-BC +9 P1.XY-BC ຜ1.ຫອ-ກຂ P1.XY-BC +9 PQ.2Y-BC ຜພ.2ອ-ກຂ PQ.2Y-BC +9 3Q.X4-BC 3ພ.ຫ4-ກຂ 3Q.X4-BC +9 5Q.6Y-BC 5ພ.6ອ-ກຂ 5Q.6Y-BC +9 PQ.1YZ-BC ຜພ.1ອຯ-ກຂ PQ.1YZ-BC +9 PQ1.YZ-BC ຜພ1.ອຯ-ກຂ PQ1.YZ-BC +9 P2.X3Z-BC ຜ2.ຫ3ຯ-ກຂ P2.X3Z-BC +9 P2X.3Z-BC ຜ2ຫ.3ຯ-ກຂ P2X.3Z-BC +9 PQ.1XY2-BC ຜພ.1ຫອ2-ກຂ PQ.1XY2-BC +9 PQ1.XY2-BC ຜພ1.ຫອ2-ກຂ PQ1.XY2-BC +9 PQ1X.Y2-BC ຜພ1ຫ.ອ2-ກຂ PQ1X.Y2-BC +9 P3.RX4Z-BC ຜ3.ມຫ4ຯ-ກຂ P3.RX4Z-BC +9 P3R.X4Z-BC ຜ3ມ.ຫ4ຯ-ກຂ P3R.X4Z-BC +9 P3RX.4Z-BC ຜ3ມຫ.4ຯ-ກຂ P3RX.4Z-BC +9 5Q.R6Y7-BC 5ພ.ມ6ອ7-ກຂ 5Q.R6Y7-BC +9 5QR.6Y7-BC 5ພມ.6ອ7-ກຂ 5QR.6Y7-BC +9 5QR6.Y7-BC 5ພມ6.ອ7-ກຂ 5QR6.Y7-BC +9 PQ1.SX2Z-BC ຜພ1.ຢຫ2ຯ-ກຂ PQ1.SX2Z-BC +9 PQ1S.X2Z-BC ຜພ1ຢ.ຫ2ຯ-ກຂ PQ1S.X2Z-BC +9 P3R.S4YZ-BC ຜ3ມ.ຢ4ອຯ-ກຂ P3R.S4YZ-BC +9 P3RS.4YZ-BC ຜ3ມຢ.4ອຯ-ກຂ P3RS.4YZ-BC +9 5QR.6XY7-BC 5ພມ.6ຫອ7-ກຂ 5QR.6XY7-BC +9 5QR6.XY7-BC 5ພມ6.ຫອ7-ກຂ 5QR6.XY7-BC +9 8Q9.SX0Z-BC 8ພ9.ຢຫ0ຯ-ກຂ 8Q9.SX0Z-BC +9 8Q9S.X0Z-BC 8ພ9ຢ.ຫ0ຯ-ກຂ 8Q9S.X0Z-BC +9 1QR2.TX3Z-BC 1ພມ2.ຣຫ3ຯ-ກຂ 1QR2.TX3Z-BC +9 P4RS.5XY6-BC ຜ4ມຢ.5ຫອ6-ກຂ P4RS.5XY6-BC +9 P7R8.T9Y0-BC ຜ7ມ8.ຣ9ອ0-ກຂ P7R8.T9Y0-BC +9 PQ1ST.2XY3-BC ຜພ1ຢຣ.2ຫອ3-ກຂ PQ1ST.2XY3-BC +9 P4RS5.VX6Z-BC ຜ4ມຢ5.ວຫ6ຯ-ກຂ P4RS5.VX6Z-BC +9 7QR8T.V9YZ-BC 7ພມ8ຣ.ວ9ອຯ-ກຂ 7QR8T.V9YZ-BC +9 P1R2T.3X4Z-BC ຜ1ມ2ຣ.3ຫ4ຯ-ກຂ P1R2T.3X4Z-BC +9 5Q6S7.V8Y9-BC 5ພ6ຢ7.ວ8ອ9-ກຂ 5Q6S7.V8Y9-BC +9 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ະກຂຄໃງຈຊໄຍດທນບOຜພມຢຣຽວສຫອຯ-ກຂ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +9 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ະກຂຄໃງຈຊໄຍດທນບOຜພມຢຣຽວສຫອຯ-ກຂ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +9 OI.XX-BC Oໄ.ຫຫ-ກຂ OI.XX-BC +9 OI.XX-BC Oໄ.ຫຫ-ກຂ OI.XX-BC +9 OI.XX-OOOOOOOO-BC Oໄ.ຫຫ-OOOOOOOO-ກຂ OI.XX-OOOOOOOO-BC +9 OI.XX-IIIIIIII-BC Oໄ.ຫຫ-ໄໄໄໄໄໄໄໄ-ກຂ OI.XX-IIIIIIII-BC +9 PQ.RS-01234567-BC ຜພ.ມຢ-01234567-ກຂ PQ.RS-01234567-BC +9 PQ.RS-890-BC ຜພ.ມຢ-890-ກຂ PQ.RS-890-BC +9 89.EU-DFGHJKLM 89.ໃຽ-ຄງຈຊຍດທນ 89.EU-DFGHJKLM +9 00.0A-DFGHJKLM 00.0ະ-ຄງຈຊຍດທນ 00.0A-DFGHJKLM +9 BCDF.GHJK-DFGHJKLM ກຂຄງ.ຈຊຍດ-ຄງຈຊຍດທນ BCDF.GHJK-DFGHJKLM +9 LMNP.QRST-DFGHJKLM ທນບຜ.ພມຢຣ-ຄງຈຊຍດທນ LMNP.QRST-DFGHJKLM +9 VWXY.Z123-DFGHJKLM ວສຫອ.ຯ123-ຄງຈຊຍດທນ VWXY.Z123-DFGHJKLM +9 4567.890B-DFGHJKLM 4567.890ກ-ຄງຈຊຍດທນ 4567.890B-DFGHJKLM +9 PQ.XY-DFGHJKLM ຜພ.ຫອ-ຄງຈຊຍດທນ PQ.XY-DFGHJKLM +9 PQ.XYZ-DFGHJKLM ຜພ.ຫອຯ-ຄງຈຊຍດທນ PQ.XYZ-DFGHJKLM +9 PQX.YZ-DFGHJKLM ຜພຫ.ອຯ-ຄງຈຊຍດທນ PQX.YZ-DFGHJKLM +9 PQ.RXYZ-DFGHJKLM ຜພ.ມຫອຯ-ຄງຈຊຍດທນ PQ.RXYZ-DFGHJKLM +9 PQR.XYZ-DFGHJKLM ຜພມ.ຫອຯ-ຄງຈຊຍດທນ PQR.XYZ-DFGHJKLM +9 PQRX.YZ-DFGHJKLM ຜພມຫ.ອຯ-ຄງຈຊຍດທນ PQRX.YZ-DFGHJKLM +9 PQR.SXYZ-DFGHJKLM ຜພມ.ຢຫອຯ-ຄງຈຊຍດທນ PQR.SXYZ-DFGHJKLM +9 PQRS.XYZ-DFGHJKLM ຜພມຢ.ຫອຯ-ຄງຈຊຍດທນ PQRS.XYZ-DFGHJKLM +9 PQRS.TXYZ-DFGHJKLM ຜພມຢ.ຣຫອຯ-ຄງຈຊຍດທນ PQRS.TXYZ-DFGHJKLM +9 PQRST.VXYZ-DFGHJKLM ຜພມຢຣ.ວຫອຯ-ຄງຈຊຍດທນ PQRST.VXYZ-DFGHJKLM +9 P1.XY-DFGHJKLM ຜ1.ຫອ-ຄງຈຊຍດທນ P1.XY-DFGHJKLM +9 PQ.2Y-DFGHJKLM ຜພ.2ອ-ຄງຈຊຍດທນ PQ.2Y-DFGHJKLM +9 3Q.X4-DFGHJKLM 3ພ.ຫ4-ຄງຈຊຍດທນ 3Q.X4-DFGHJKLM +9 5Q.6Y-DFGHJKLM 5ພ.6ອ-ຄງຈຊຍດທນ 5Q.6Y-DFGHJKLM +9 PQ.1YZ-DFGHJKLM ຜພ.1ອຯ-ຄງຈຊຍດທນ PQ.1YZ-DFGHJKLM +9 PQ1.YZ-DFGHJKLM ຜພ1.ອຯ-ຄງຈຊຍດທນ PQ1.YZ-DFGHJKLM +9 P2.X3Z-DFGHJKLM ຜ2.ຫ3ຯ-ຄງຈຊຍດທນ P2.X3Z-DFGHJKLM +9 P2X.3Z-DFGHJKLM ຜ2ຫ.3ຯ-ຄງຈຊຍດທນ P2X.3Z-DFGHJKLM +9 PQ.1XY2-DFGHJKLM ຜພ.1ຫອ2-ຄງຈຊຍດທນ PQ.1XY2-DFGHJKLM +9 PQ1.XY2-DFGHJKLM ຜພ1.ຫອ2-ຄງຈຊຍດທນ PQ1.XY2-DFGHJKLM +9 PQ1X.Y2-DFGHJKLM ຜພ1ຫ.ອ2-ຄງຈຊຍດທນ PQ1X.Y2-DFGHJKLM +9 P3.RX4Z-DFGHJKLM ຜ3.ມຫ4ຯ-ຄງຈຊຍດທນ P3.RX4Z-DFGHJKLM +9 P3R.X4Z-DFGHJKLM ຜ3ມ.ຫ4ຯ-ຄງຈຊຍດທນ P3R.X4Z-DFGHJKLM +9 P3RX.4Z-DFGHJKLM ຜ3ມຫ.4ຯ-ຄງຈຊຍດທນ P3RX.4Z-DFGHJKLM +9 5Q.R6Y7-DFGHJKLM 5ພ.ມ6ອ7-ຄງຈຊຍດທນ 5Q.R6Y7-DFGHJKLM +9 5QR.6Y7-DFGHJKLM 5ພມ.6ອ7-ຄງຈຊຍດທນ 5QR.6Y7-DFGHJKLM +9 5QR6.Y7-DFGHJKLM 5ພມ6.ອ7-ຄງຈຊຍດທນ 5QR6.Y7-DFGHJKLM +9 PQ1.SX2Z-DFGHJKLM ຜພ1.ຢຫ2ຯ-ຄງຈຊຍດທນ PQ1.SX2Z-DFGHJKLM +9 PQ1S.X2Z-DFGHJKLM ຜພ1ຢ.ຫ2ຯ-ຄງຈຊຍດທນ PQ1S.X2Z-DFGHJKLM +9 P3R.S4YZ-DFGHJKLM ຜ3ມ.ຢ4ອຯ-ຄງຈຊຍດທນ P3R.S4YZ-DFGHJKLM +9 P3RS.4YZ-DFGHJKLM ຜ3ມຢ.4ອຯ-ຄງຈຊຍດທນ P3RS.4YZ-DFGHJKLM +9 5QR.6XY7-DFGHJKLM 5ພມ.6ຫອ7-ຄງຈຊຍດທນ 5QR.6XY7-DFGHJKLM +9 5QR6.XY7-DFGHJKLM 5ພມ6.ຫອ7-ຄງຈຊຍດທນ 5QR6.XY7-DFGHJKLM +9 8Q9.SX0Z-DFGHJKLM 8ພ9.ຢຫ0ຯ-ຄງຈຊຍດທນ 8Q9.SX0Z-DFGHJKLM +9 8Q9S.X0Z-DFGHJKLM 8ພ9ຢ.ຫ0ຯ-ຄງຈຊຍດທນ 8Q9S.X0Z-DFGHJKLM +9 1QR2.TX3Z-DFGHJKLM 1ພມ2.ຣຫ3ຯ-ຄງຈຊຍດທນ 1QR2.TX3Z-DFGHJKLM +9 P4RS.5XY6-DFGHJKLM ຜ4ມຢ.5ຫອ6-ຄງຈຊຍດທນ P4RS.5XY6-DFGHJKLM +9 P7R8.T9Y0-DFGHJKLM ຜ7ມ8.ຣ9ອ0-ຄງຈຊຍດທນ P7R8.T9Y0-DFGHJKLM +9 PQ1ST.2XY3-DFGHJKLM ຜພ1ຢຣ.2ຫອ3-ຄງຈຊຍດທນ PQ1ST.2XY3-DFGHJKLM +9 P4RS5.VX6Z-DFGHJKLM ຜ4ມຢ5.ວຫ6ຯ-ຄງຈຊຍດທນ P4RS5.VX6Z-DFGHJKLM +9 7QR8T.V9YZ-DFGHJKLM 7ພມ8ຣ.ວ9ອຯ-ຄງຈຊຍດທນ 7QR8T.V9YZ-DFGHJKLM +9 P1R2T.3X4Z-DFGHJKLM ຜ1ມ2ຣ.3ຫ4ຯ-ຄງຈຊຍດທນ P1R2T.3X4Z-DFGHJKLM +9 5Q6S7.V8Y9-DFGHJKLM 5ພ6ຢ7.ວ8ອ9-ຄງຈຊຍດທນ 5Q6S7.V8Y9-DFGHJKLM +9 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ະກຂຄໃງຈຊໄຍດທນບOຜພມຢຣຽວສຫອຯ-ຄງຈຊຍດທນ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +9 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ະກຂຄໃງຈຊໄຍດທນບOຜພມຢຣຽວສຫອຯ-ຄງຈຊຍດທນ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +9 OI.XX-DFGHJKLM Oໄ.ຫຫ-ຄງຈຊຍດທນ OI.XX-DFGHJKLM +9 OI.XX-DFGHJKLM Oໄ.ຫຫ-ຄງຈຊຍດທນ OI.XX-DFGHJKLM +9 OI.XX-OOOOOOOO-DFGHJKLM Oໄ.ຫຫ-OOOOOOOO-ຄງຈຊຍດທນ OI.XX-OOOOOOOO-DFGHJKLM +9 OI.XX-IIIIIIII-DFGHJKLM Oໄ.ຫຫ-ໄໄໄໄໄໄໄໄ-ຄງຈຊຍດທນ OI.XX-IIIIIIII-DFGHJKLM +9 PQ.RS-01234567-DFGHJKLM ຜພ.ມຢ-01234567-ຄງຈຊຍດທນ PQ.RS-01234567-DFGHJKLM +9 PQ.RS-890-DFGHJKLM ຜພ.ມຢ-890-ຄງຈຊຍດທນ PQ.RS-890-DFGHJKLM +10 89.EU 89.ԵՅ 89.EU +10 00.0A 00.0Ֆ 00.0A +10 BCDF.GHJK ԲԳԴԸ.ԹԺԽԿ BCDF.GHJK +10 LMNP.QRST ՀՁՃՇ.ՈՊՍՎ LMNP.QRST +10 VWXY.Z123 ՏՐՑՒ.Փ123 VWXY.Z123 +10 4567.890B 4567.890Բ 4567.890B +10 PQ.XY ՇՈ.ՑՒ PQ.XY +10 PQ.XYZ ՇՈ.ՑՒՓ PQ.XYZ +10 PQX.YZ ՇՈՑ.ՒՓ PQX.YZ +10 PQ.RXYZ ՇՈ.ՊՑՒՓ PQ.RXYZ +10 PQR.XYZ ՇՈՊ.ՑՒՓ PQR.XYZ +10 PQRX.YZ ՇՈՊՑ.ՒՓ PQRX.YZ +10 PQR.SXYZ ՇՈՊ.ՍՑՒՓ PQR.SXYZ +10 PQRS.XYZ ՇՈՊՍ.ՑՒՓ PQRS.XYZ +10 PQRS.TXYZ ՇՈՊՍ.ՎՑՒՓ PQRS.TXYZ +10 PQRST.VXYZ ՇՈՊՍՎ.ՏՑՒՓ PQRST.VXYZ +10 P1.XY Շ1.ՑՒ P1.XY +10 PQ.2Y ՇՈ.2Ւ PQ.2Y +10 3Q.X4 3Ո.Ց4 3Q.X4 +10 5Q.6Y 5Ո.6Ւ 5Q.6Y +10 PQ.1YZ ՇՈ.1ՒՓ PQ.1YZ +10 PQ1.YZ ՇՈ1.ՒՓ PQ1.YZ +10 P2.X3Z Շ2.Ց3Փ P2.X3Z +10 P2X.3Z Շ2Ց.3Փ P2X.3Z +10 PQ.1XY2 ՇՈ.1ՑՒ2 PQ.1XY2 +10 PQ1.XY2 ՇՈ1.ՑՒ2 PQ1.XY2 +10 PQ1X.Y2 ՇՈ1Ց.Ւ2 PQ1X.Y2 +10 P3.RX4Z Շ3.ՊՑ4Փ P3.RX4Z +10 P3R.X4Z Շ3Պ.Ց4Փ P3R.X4Z +10 P3RX.4Z Շ3ՊՑ.4Փ P3RX.4Z +10 5Q.R6Y7 5Ո.Պ6Ւ7 5Q.R6Y7 +10 5QR.6Y7 5ՈՊ.6Ւ7 5QR.6Y7 +10 5QR6.Y7 5ՈՊ6.Ւ7 5QR6.Y7 +10 PQ1.SX2Z ՇՈ1.ՍՑ2Փ PQ1.SX2Z +10 PQ1S.X2Z ՇՈ1Ս.Ց2Փ PQ1S.X2Z +10 P3R.S4YZ Շ3Պ.Ս4ՒՓ P3R.S4YZ +10 P3RS.4YZ Շ3ՊՍ.4ՒՓ P3RS.4YZ +10 5QR.6XY7 5ՈՊ.6ՑՒ7 5QR.6XY7 +10 5QR6.XY7 5ՈՊ6.ՑՒ7 5QR6.XY7 +10 8Q9.SX0Z 8Ո9.ՍՑ0Փ 8Q9.SX0Z +10 8Q9S.X0Z 8Ո9Ս.Ց0Փ 8Q9S.X0Z +10 1QR2.TX3Z 1ՈՊ2.ՎՑ3Փ 1QR2.TX3Z +10 P4RS.5XY6 Շ4ՊՍ.5ՑՒ6 P4RS.5XY6 +10 P7R8.T9Y0 Շ7Պ8.Վ9Ւ0 P7R8.T9Y0 +10 PQ1ST.2XY3 ՇՈ1ՍՎ.2ՑՒ3 PQ1ST.2XY3 +10 P4RS5.VX6Z Շ4ՊՍ5.ՏՑ6Փ P4RS5.VX6Z +10 7QR8T.V9YZ 7ՈՊ8Վ.Տ9ՒՓ 7QR8T.V9YZ +10 P1R2T.3X4Z Շ1Պ2Վ.3Ց4Փ P1R2T.3X4Z +10 5Q6S7.V8Y9 5Ո6Ս7.Տ8Ւ9 5Q6S7.V8Y9 +10 ABCDEFGHIJKLMNOPQRSTUVWXYZ ՖԲԳԴԵԸԹԺԻԽԿՀՁՃՕՇՈՊՍՎՅՏՐՑՒՓ ABCDEFGHIJKLMNOPQRSTUVWXYZ +10 ABCDEFGHIJKLMNOPQRSTUVWXYZ ՖԲԳԴԵԸԹԺԻԽԿՀՁՃՕՇՈՊՍՎՅՏՐՑՒՓ ABCDEFGHIJKLMNOPQRSTUVWXYZ +10 OI.XX ՕԻ.ՑՑ OI.XX +10 OI.XX ՕԻ.ՑՑ OI.XX +10 OI.XX-OOOOOOOO ՕԻ.ՑՑ-ՕՕՕՕՕՕՕՕ OI.XX-OOOOOOOO +10 OI.XX-IIIIIIII ՕԻ.ՑՑ-ԻԻԻԻԻԻԻԻ OI.XX-IIIIIIII +10 PQ.RS-01234567 ՇՈ.ՊՍ-01234567 PQ.RS-01234567 +10 PQ.RS-890 ՇՈ.ՊՍ-890 PQ.RS-890 +10 89.EU-BC 89.ԵՅ-ԲԳ 89.EU-BC +10 00.0A-BC 00.0Ֆ-ԲԳ 00.0A-BC +10 BCDF.GHJK-BC ԲԳԴԸ.ԹԺԽԿ-ԲԳ BCDF.GHJK-BC +10 LMNP.QRST-BC ՀՁՃՇ.ՈՊՍՎ-ԲԳ LMNP.QRST-BC +10 VWXY.Z123-BC ՏՐՑՒ.Փ123-ԲԳ VWXY.Z123-BC +10 4567.890B-BC 4567.890Բ-ԲԳ 4567.890B-BC +10 PQ.XY-BC ՇՈ.ՑՒ-ԲԳ PQ.XY-BC +10 PQ.XYZ-BC ՇՈ.ՑՒՓ-ԲԳ PQ.XYZ-BC +10 PQX.YZ-BC ՇՈՑ.ՒՓ-ԲԳ PQX.YZ-BC +10 PQ.RXYZ-BC ՇՈ.ՊՑՒՓ-ԲԳ PQ.RXYZ-BC +10 PQR.XYZ-BC ՇՈՊ.ՑՒՓ-ԲԳ PQR.XYZ-BC +10 PQRX.YZ-BC ՇՈՊՑ.ՒՓ-ԲԳ PQRX.YZ-BC +10 PQR.SXYZ-BC ՇՈՊ.ՍՑՒՓ-ԲԳ PQR.SXYZ-BC +10 PQRS.XYZ-BC ՇՈՊՍ.ՑՒՓ-ԲԳ PQRS.XYZ-BC +10 PQRS.TXYZ-BC ՇՈՊՍ.ՎՑՒՓ-ԲԳ PQRS.TXYZ-BC +10 PQRST.VXYZ-BC ՇՈՊՍՎ.ՏՑՒՓ-ԲԳ PQRST.VXYZ-BC +10 P1.XY-BC Շ1.ՑՒ-ԲԳ P1.XY-BC +10 PQ.2Y-BC ՇՈ.2Ւ-ԲԳ PQ.2Y-BC +10 3Q.X4-BC 3Ո.Ց4-ԲԳ 3Q.X4-BC +10 5Q.6Y-BC 5Ո.6Ւ-ԲԳ 5Q.6Y-BC +10 PQ.1YZ-BC ՇՈ.1ՒՓ-ԲԳ PQ.1YZ-BC +10 PQ1.YZ-BC ՇՈ1.ՒՓ-ԲԳ PQ1.YZ-BC +10 P2.X3Z-BC Շ2.Ց3Փ-ԲԳ P2.X3Z-BC +10 P2X.3Z-BC Շ2Ց.3Փ-ԲԳ P2X.3Z-BC +10 PQ.1XY2-BC ՇՈ.1ՑՒ2-ԲԳ PQ.1XY2-BC +10 PQ1.XY2-BC ՇՈ1.ՑՒ2-ԲԳ PQ1.XY2-BC +10 PQ1X.Y2-BC ՇՈ1Ց.Ւ2-ԲԳ PQ1X.Y2-BC +10 P3.RX4Z-BC Շ3.ՊՑ4Փ-ԲԳ P3.RX4Z-BC +10 P3R.X4Z-BC Շ3Պ.Ց4Փ-ԲԳ P3R.X4Z-BC +10 P3RX.4Z-BC Շ3ՊՑ.4Փ-ԲԳ P3RX.4Z-BC +10 5Q.R6Y7-BC 5Ո.Պ6Ւ7-ԲԳ 5Q.R6Y7-BC +10 5QR.6Y7-BC 5ՈՊ.6Ւ7-ԲԳ 5QR.6Y7-BC +10 5QR6.Y7-BC 5ՈՊ6.Ւ7-ԲԳ 5QR6.Y7-BC +10 PQ1.SX2Z-BC ՇՈ1.ՍՑ2Փ-ԲԳ PQ1.SX2Z-BC +10 PQ1S.X2Z-BC ՇՈ1Ս.Ց2Փ-ԲԳ PQ1S.X2Z-BC +10 P3R.S4YZ-BC Շ3Պ.Ս4ՒՓ-ԲԳ P3R.S4YZ-BC +10 P3RS.4YZ-BC Շ3ՊՍ.4ՒՓ-ԲԳ P3RS.4YZ-BC +10 5QR.6XY7-BC 5ՈՊ.6ՑՒ7-ԲԳ 5QR.6XY7-BC +10 5QR6.XY7-BC 5ՈՊ6.ՑՒ7-ԲԳ 5QR6.XY7-BC +10 8Q9.SX0Z-BC 8Ո9.ՍՑ0Փ-ԲԳ 8Q9.SX0Z-BC +10 8Q9S.X0Z-BC 8Ո9Ս.Ց0Փ-ԲԳ 8Q9S.X0Z-BC +10 1QR2.TX3Z-BC 1ՈՊ2.ՎՑ3Փ-ԲԳ 1QR2.TX3Z-BC +10 P4RS.5XY6-BC Շ4ՊՍ.5ՑՒ6-ԲԳ P4RS.5XY6-BC +10 P7R8.T9Y0-BC Շ7Պ8.Վ9Ւ0-ԲԳ P7R8.T9Y0-BC +10 PQ1ST.2XY3-BC ՇՈ1ՍՎ.2ՑՒ3-ԲԳ PQ1ST.2XY3-BC +10 P4RS5.VX6Z-BC Շ4ՊՍ5.ՏՑ6Փ-ԲԳ P4RS5.VX6Z-BC +10 7QR8T.V9YZ-BC 7ՈՊ8Վ.Տ9ՒՓ-ԲԳ 7QR8T.V9YZ-BC +10 P1R2T.3X4Z-BC Շ1Պ2Վ.3Ց4Փ-ԲԳ P1R2T.3X4Z-BC +10 5Q6S7.V8Y9-BC 5Ո6Ս7.Տ8Ւ9-ԲԳ 5Q6S7.V8Y9-BC +10 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ՖԲԳԴԵԸԹԺԻԽԿՀՁՃՕՇՈՊՍՎՅՏՐՑՒՓ-ԲԳ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +10 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ՖԲԳԴԵԸԹԺԻԽԿՀՁՃՕՇՈՊՍՎՅՏՐՑՒՓ-ԲԳ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +10 OI.XX-BC ՕԻ.ՑՑ-ԲԳ OI.XX-BC +10 OI.XX-BC ՕԻ.ՑՑ-ԲԳ OI.XX-BC +10 OI.XX-OOOOOOOO-BC ՕԻ.ՑՑ-ՕՕՕՕՕՕՕՕ-ԲԳ OI.XX-OOOOOOOO-BC +10 OI.XX-IIIIIIII-BC ՕԻ.ՑՑ-ԻԻԻԻԻԻԻԻ-ԲԳ OI.XX-IIIIIIII-BC +10 PQ.RS-01234567-BC ՇՈ.ՊՍ-01234567-ԲԳ PQ.RS-01234567-BC +10 PQ.RS-890-BC ՇՈ.ՊՍ-890-ԲԳ PQ.RS-890-BC +10 89.EU-DFGHJKLM 89.ԵՅ-ԴԸԹԺԽԿՀՁ 89.EU-DFGHJKLM +10 00.0A-DFGHJKLM 00.0Ֆ-ԴԸԹԺԽԿՀՁ 00.0A-DFGHJKLM +10 BCDF.GHJK-DFGHJKLM ԲԳԴԸ.ԹԺԽԿ-ԴԸԹԺԽԿՀՁ BCDF.GHJK-DFGHJKLM +10 LMNP.QRST-DFGHJKLM ՀՁՃՇ.ՈՊՍՎ-ԴԸԹԺԽԿՀՁ LMNP.QRST-DFGHJKLM +10 VWXY.Z123-DFGHJKLM ՏՐՑՒ.Փ123-ԴԸԹԺԽԿՀՁ VWXY.Z123-DFGHJKLM +10 4567.890B-DFGHJKLM 4567.890Բ-ԴԸԹԺԽԿՀՁ 4567.890B-DFGHJKLM +10 PQ.XY-DFGHJKLM ՇՈ.ՑՒ-ԴԸԹԺԽԿՀՁ PQ.XY-DFGHJKLM +10 PQ.XYZ-DFGHJKLM ՇՈ.ՑՒՓ-ԴԸԹԺԽԿՀՁ PQ.XYZ-DFGHJKLM +10 PQX.YZ-DFGHJKLM ՇՈՑ.ՒՓ-ԴԸԹԺԽԿՀՁ PQX.YZ-DFGHJKLM +10 PQ.RXYZ-DFGHJKLM ՇՈ.ՊՑՒՓ-ԴԸԹԺԽԿՀՁ PQ.RXYZ-DFGHJKLM +10 PQR.XYZ-DFGHJKLM ՇՈՊ.ՑՒՓ-ԴԸԹԺԽԿՀՁ PQR.XYZ-DFGHJKLM +10 PQRX.YZ-DFGHJKLM ՇՈՊՑ.ՒՓ-ԴԸԹԺԽԿՀՁ PQRX.YZ-DFGHJKLM +10 PQR.SXYZ-DFGHJKLM ՇՈՊ.ՍՑՒՓ-ԴԸԹԺԽԿՀՁ PQR.SXYZ-DFGHJKLM +10 PQRS.XYZ-DFGHJKLM ՇՈՊՍ.ՑՒՓ-ԴԸԹԺԽԿՀՁ PQRS.XYZ-DFGHJKLM +10 PQRS.TXYZ-DFGHJKLM ՇՈՊՍ.ՎՑՒՓ-ԴԸԹԺԽԿՀՁ PQRS.TXYZ-DFGHJKLM +10 PQRST.VXYZ-DFGHJKLM ՇՈՊՍՎ.ՏՑՒՓ-ԴԸԹԺԽԿՀՁ PQRST.VXYZ-DFGHJKLM +10 P1.XY-DFGHJKLM Շ1.ՑՒ-ԴԸԹԺԽԿՀՁ P1.XY-DFGHJKLM +10 PQ.2Y-DFGHJKLM ՇՈ.2Ւ-ԴԸԹԺԽԿՀՁ PQ.2Y-DFGHJKLM +10 3Q.X4-DFGHJKLM 3Ո.Ց4-ԴԸԹԺԽԿՀՁ 3Q.X4-DFGHJKLM +10 5Q.6Y-DFGHJKLM 5Ո.6Ւ-ԴԸԹԺԽԿՀՁ 5Q.6Y-DFGHJKLM +10 PQ.1YZ-DFGHJKLM ՇՈ.1ՒՓ-ԴԸԹԺԽԿՀՁ PQ.1YZ-DFGHJKLM +10 PQ1.YZ-DFGHJKLM ՇՈ1.ՒՓ-ԴԸԹԺԽԿՀՁ PQ1.YZ-DFGHJKLM +10 P2.X3Z-DFGHJKLM Շ2.Ց3Փ-ԴԸԹԺԽԿՀՁ P2.X3Z-DFGHJKLM +10 P2X.3Z-DFGHJKLM Շ2Ց.3Փ-ԴԸԹԺԽԿՀՁ P2X.3Z-DFGHJKLM +10 PQ.1XY2-DFGHJKLM ՇՈ.1ՑՒ2-ԴԸԹԺԽԿՀՁ PQ.1XY2-DFGHJKLM +10 PQ1.XY2-DFGHJKLM ՇՈ1.ՑՒ2-ԴԸԹԺԽԿՀՁ PQ1.XY2-DFGHJKLM +10 PQ1X.Y2-DFGHJKLM ՇՈ1Ց.Ւ2-ԴԸԹԺԽԿՀՁ PQ1X.Y2-DFGHJKLM +10 P3.RX4Z-DFGHJKLM Շ3.ՊՑ4Փ-ԴԸԹԺԽԿՀՁ P3.RX4Z-DFGHJKLM +10 P3R.X4Z-DFGHJKLM Շ3Պ.Ց4Փ-ԴԸԹԺԽԿՀՁ P3R.X4Z-DFGHJKLM +10 P3RX.4Z-DFGHJKLM Շ3ՊՑ.4Փ-ԴԸԹԺԽԿՀՁ P3RX.4Z-DFGHJKLM +10 5Q.R6Y7-DFGHJKLM 5Ո.Պ6Ւ7-ԴԸԹԺԽԿՀՁ 5Q.R6Y7-DFGHJKLM +10 5QR.6Y7-DFGHJKLM 5ՈՊ.6Ւ7-ԴԸԹԺԽԿՀՁ 5QR.6Y7-DFGHJKLM +10 5QR6.Y7-DFGHJKLM 5ՈՊ6.Ւ7-ԴԸԹԺԽԿՀՁ 5QR6.Y7-DFGHJKLM +10 PQ1.SX2Z-DFGHJKLM ՇՈ1.ՍՑ2Փ-ԴԸԹԺԽԿՀՁ PQ1.SX2Z-DFGHJKLM +10 PQ1S.X2Z-DFGHJKLM ՇՈ1Ս.Ց2Փ-ԴԸԹԺԽԿՀՁ PQ1S.X2Z-DFGHJKLM +10 P3R.S4YZ-DFGHJKLM Շ3Պ.Ս4ՒՓ-ԴԸԹԺԽԿՀՁ P3R.S4YZ-DFGHJKLM +10 P3RS.4YZ-DFGHJKLM Շ3ՊՍ.4ՒՓ-ԴԸԹԺԽԿՀՁ P3RS.4YZ-DFGHJKLM +10 5QR.6XY7-DFGHJKLM 5ՈՊ.6ՑՒ7-ԴԸԹԺԽԿՀՁ 5QR.6XY7-DFGHJKLM +10 5QR6.XY7-DFGHJKLM 5ՈՊ6.ՑՒ7-ԴԸԹԺԽԿՀՁ 5QR6.XY7-DFGHJKLM +10 8Q9.SX0Z-DFGHJKLM 8Ո9.ՍՑ0Փ-ԴԸԹԺԽԿՀՁ 8Q9.SX0Z-DFGHJKLM +10 8Q9S.X0Z-DFGHJKLM 8Ո9Ս.Ց0Փ-ԴԸԹԺԽԿՀՁ 8Q9S.X0Z-DFGHJKLM +10 1QR2.TX3Z-DFGHJKLM 1ՈՊ2.ՎՑ3Փ-ԴԸԹԺԽԿՀՁ 1QR2.TX3Z-DFGHJKLM +10 P4RS.5XY6-DFGHJKLM Շ4ՊՍ.5ՑՒ6-ԴԸԹԺԽԿՀՁ P4RS.5XY6-DFGHJKLM +10 P7R8.T9Y0-DFGHJKLM Շ7Պ8.Վ9Ւ0-ԴԸԹԺԽԿՀՁ P7R8.T9Y0-DFGHJKLM +10 PQ1ST.2XY3-DFGHJKLM ՇՈ1ՍՎ.2ՑՒ3-ԴԸԹԺԽԿՀՁ PQ1ST.2XY3-DFGHJKLM +10 P4RS5.VX6Z-DFGHJKLM Շ4ՊՍ5.ՏՑ6Փ-ԴԸԹԺԽԿՀՁ P4RS5.VX6Z-DFGHJKLM +10 7QR8T.V9YZ-DFGHJKLM 7ՈՊ8Վ.Տ9ՒՓ-ԴԸԹԺԽԿՀՁ 7QR8T.V9YZ-DFGHJKLM +10 P1R2T.3X4Z-DFGHJKLM Շ1Պ2Վ.3Ց4Փ-ԴԸԹԺԽԿՀՁ P1R2T.3X4Z-DFGHJKLM +10 5Q6S7.V8Y9-DFGHJKLM 5Ո6Ս7.Տ8Ւ9-ԴԸԹԺԽԿՀՁ 5Q6S7.V8Y9-DFGHJKLM +10 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ՖԲԳԴԵԸԹԺԻԽԿՀՁՃՕՇՈՊՍՎՅՏՐՑՒՓ-ԴԸԹԺԽԿՀՁ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +10 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ՖԲԳԴԵԸԹԺԻԽԿՀՁՃՕՇՈՊՍՎՅՏՐՑՒՓ-ԴԸԹԺԽԿՀՁ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +10 OI.XX-DFGHJKLM ՕԻ.ՑՑ-ԴԸԹԺԽԿՀՁ OI.XX-DFGHJKLM +10 OI.XX-DFGHJKLM ՕԻ.ՑՑ-ԴԸԹԺԽԿՀՁ OI.XX-DFGHJKLM +10 OI.XX-OOOOOOOO-DFGHJKLM ՕԻ.ՑՑ-ՕՕՕՕՕՕՕՕ-ԴԸԹԺԽԿՀՁ OI.XX-OOOOOOOO-DFGHJKLM +10 OI.XX-IIIIIIII-DFGHJKLM ՕԻ.ՑՑ-ԻԻԻԻԻԻԻԻ-ԴԸԹԺԽԿՀՁ OI.XX-IIIIIIII-DFGHJKLM +10 PQ.RS-01234567-DFGHJKLM ՇՈ.ՊՍ-01234567-ԴԸԹԺԽԿՀՁ PQ.RS-01234567-DFGHJKLM +10 PQ.RS-890-DFGHJKLM ՇՈ.ՊՍ-890-ԴԸԹԺԽԿՀՁ PQ.RS-890-DFGHJKLM +11 89.EU ৮৯.মট 89.EU +11 00.0A ০০.০জ 00.0A +11 BCDF.GHJK ঘকখগ.ঙচঝঠ BCDF.GHJK +11 LMNP.QRST ডঢণত.থদনপ LMNP.QRST +11 VWXY.Z123 বভযল.হ১২৩ VWXY.Z123 +11 4567.890B ৪৫৬৭.৮৯০ঘ 4567.890B +11 PQ.XY তথ.যল PQ.XY +11 PQ.XYZ তথ.যলহ PQ.XYZ +11 PQX.YZ তথয.লহ PQX.YZ +11 PQ.RXYZ তথ.দযলহ PQ.RXYZ +11 PQR.XYZ তথদ.যলহ PQR.XYZ +11 PQRX.YZ তথদয.লহ PQRX.YZ +11 PQR.SXYZ তথদ.নযলহ PQR.SXYZ +11 PQRS.XYZ তথদন.যলহ PQRS.XYZ +11 PQRS.TXYZ তথদন.পযলহ PQRS.TXYZ +11 PQRST.VXYZ তথদনপ.বযলহ PQRST.VXYZ +11 P1.XY ত১.যল P1.XY +11 PQ.2Y তথ.২ল PQ.2Y +11 3Q.X4 ৩থ.য৪ 3Q.X4 +11 5Q.6Y ৫থ.৬ল 5Q.6Y +11 PQ.1YZ তথ.১লহ PQ.1YZ +11 PQ1.YZ তথ১.লহ PQ1.YZ +11 P2.X3Z ত২.য৩হ P2.X3Z +11 P2X.3Z ত২য.৩হ P2X.3Z +11 PQ.1XY2 তথ.১যল২ PQ.1XY2 +11 PQ1.XY2 তথ১.যল২ PQ1.XY2 +11 PQ1X.Y2 তথ১য.ল২ PQ1X.Y2 +11 P3.RX4Z ত৩.দয৪হ P3.RX4Z +11 P3R.X4Z ত৩দ.য৪হ P3R.X4Z +11 P3RX.4Z ত৩দয.৪হ P3RX.4Z +11 5Q.R6Y7 ৫থ.দ৬ল৭ 5Q.R6Y7 +11 5QR.6Y7 ৫থদ.৬ল৭ 5QR.6Y7 +11 5QR6.Y7 ৫থদ৬.ল৭ 5QR6.Y7 +11 PQ1.SX2Z তথ১.নয২হ PQ1.SX2Z +11 PQ1S.X2Z তথ১ন.য২হ PQ1S.X2Z +11 P3R.S4YZ ত৩দ.ন৪লহ P3R.S4YZ +11 P3RS.4YZ ত৩দন.৪লহ P3RS.4YZ +11 5QR.6XY7 ৫থদ.৬যল৭ 5QR.6XY7 +11 5QR6.XY7 ৫থদ৬.যল৭ 5QR6.XY7 +11 8Q9.SX0Z ৮থ৯.নয০হ 8Q9.SX0Z +11 8Q9S.X0Z ৮থ৯ন.য০হ 8Q9S.X0Z +11 1QR2.TX3Z ১থদ২.পয৩হ 1QR2.TX3Z +11 P4RS.5XY6 ত৪দন.৫যল৬ P4RS.5XY6 +11 P7R8.T9Y0 ত৭দ৮.প৯ল০ P7R8.T9Y0 +11 PQ1ST.2XY3 তথ১নপ.২যল৩ PQ1ST.2XY3 +11 P4RS5.VX6Z ত৪দন৫.বয৬হ P4RS5.VX6Z +11 7QR8T.V9YZ ৭থদ৮প.ব৯লহ 7QR8T.V9YZ +11 P1R2T.3X4Z ত১দ২প.৩য৪হ P1R2T.3X4Z +11 5Q6S7.V8Y9 ৫থ৬ন৭.ব৮ল৯ 5Q6S7.V8Y9 +11 ABCDEFGHIJKLMNOPQRSTUVWXYZ জঘকখমগঙচIঝঠডঢণOতথদনপটবভযলহ ABCDEFGHIJKLMNOPQRSTUVWXYZ +11 ABCDEFGHIJKLMNOPQRSTUVWXYZ জঘকখমগঙচIঝঠডঢণOতথদনপটবভযলহ ABCDEFGHIJKLMNOPQRSTUVWXYZ +11 OI.XX OI.যয OI.XX +11 OI.XX OI.যয OI.XX +11 OI.XX-OOOOOOOO OI.যয-OOOOOOOO OI.XX-OOOOOOOO +11 OI.XX-IIIIIIII OI.যয-IIIIIIII OI.XX-IIIIIIII +11 PQ.RS-01234567 তথ.দন-০১২৩৪৫৬৭ PQ.RS-01234567 +11 PQ.RS-890 তথ.দন-৮৯০ PQ.RS-890 +11 89.EU-BC ৮৯.মট-ঘক 89.EU-BC +11 00.0A-BC ০০.০জ-ঘক 00.0A-BC +11 BCDF.GHJK-BC ঘকখগ.ঙচঝঠ-ঘক BCDF.GHJK-BC +11 LMNP.QRST-BC ডঢণত.থদনপ-ঘক LMNP.QRST-BC +11 VWXY.Z123-BC বভযল.হ১২৩-ঘক VWXY.Z123-BC +11 4567.890B-BC ৪৫৬৭.৮৯০ঘ-ঘক 4567.890B-BC +11 PQ.XY-BC তথ.যল-ঘক PQ.XY-BC +11 PQ.XYZ-BC তথ.যলহ-ঘক PQ.XYZ-BC +11 PQX.YZ-BC তথয.লহ-ঘক PQX.YZ-BC +11 PQ.RXYZ-BC তথ.দযলহ-ঘক PQ.RXYZ-BC +11 PQR.XYZ-BC তথদ.যলহ-ঘক PQR.XYZ-BC +11 PQRX.YZ-BC তথদয.লহ-ঘক PQRX.YZ-BC +11 PQR.SXYZ-BC তথদ.নযলহ-ঘক PQR.SXYZ-BC +11 PQRS.XYZ-BC তথদন.যলহ-ঘক PQRS.XYZ-BC +11 PQRS.TXYZ-BC তথদন.পযলহ-ঘক PQRS.TXYZ-BC +11 PQRST.VXYZ-BC তথদনপ.বযলহ-ঘক PQRST.VXYZ-BC +11 P1.XY-BC ত১.যল-ঘক P1.XY-BC +11 PQ.2Y-BC তথ.২ল-ঘক PQ.2Y-BC +11 3Q.X4-BC ৩থ.য৪-ঘক 3Q.X4-BC +11 5Q.6Y-BC ৫থ.৬ল-ঘক 5Q.6Y-BC +11 PQ.1YZ-BC তথ.১লহ-ঘক PQ.1YZ-BC +11 PQ1.YZ-BC তথ১.লহ-ঘক PQ1.YZ-BC +11 P2.X3Z-BC ত২.য৩হ-ঘক P2.X3Z-BC +11 P2X.3Z-BC ত২য.৩হ-ঘক P2X.3Z-BC +11 PQ.1XY2-BC তথ.১যল২-ঘক PQ.1XY2-BC +11 PQ1.XY2-BC তথ১.যল২-ঘক PQ1.XY2-BC +11 PQ1X.Y2-BC তথ১য.ল২-ঘক PQ1X.Y2-BC +11 P3.RX4Z-BC ত৩.দয৪হ-ঘক P3.RX4Z-BC +11 P3R.X4Z-BC ত৩দ.য৪হ-ঘক P3R.X4Z-BC +11 P3RX.4Z-BC ত৩দয.৪হ-ঘক P3RX.4Z-BC +11 5Q.R6Y7-BC ৫থ.দ৬ল৭-ঘক 5Q.R6Y7-BC +11 5QR.6Y7-BC ৫থদ.৬ল৭-ঘক 5QR.6Y7-BC +11 5QR6.Y7-BC ৫থদ৬.ল৭-ঘক 5QR6.Y7-BC +11 PQ1.SX2Z-BC তথ১.নয২হ-ঘক PQ1.SX2Z-BC +11 PQ1S.X2Z-BC তথ১ন.য২হ-ঘক PQ1S.X2Z-BC +11 P3R.S4YZ-BC ত৩দ.ন৪লহ-ঘক P3R.S4YZ-BC +11 P3RS.4YZ-BC ত৩দন.৪লহ-ঘক P3RS.4YZ-BC +11 5QR.6XY7-BC ৫থদ.৬যল৭-ঘক 5QR.6XY7-BC +11 5QR6.XY7-BC ৫থদ৬.যল৭-ঘক 5QR6.XY7-BC +11 8Q9.SX0Z-BC ৮থ৯.নয০হ-ঘক 8Q9.SX0Z-BC +11 8Q9S.X0Z-BC ৮থ৯ন.য০হ-ঘক 8Q9S.X0Z-BC +11 1QR2.TX3Z-BC ১থদ২.পয৩হ-ঘক 1QR2.TX3Z-BC +11 P4RS.5XY6-BC ত৪দন.৫যল৬-ঘক P4RS.5XY6-BC +11 P7R8.T9Y0-BC ত৭দ৮.প৯ল০-ঘক P7R8.T9Y0-BC +11 PQ1ST.2XY3-BC তথ১নপ.২যল৩-ঘক PQ1ST.2XY3-BC +11 P4RS5.VX6Z-BC ত৪দন৫.বয৬হ-ঘক P4RS5.VX6Z-BC +11 7QR8T.V9YZ-BC ৭থদ৮প.ব৯লহ-ঘক 7QR8T.V9YZ-BC +11 P1R2T.3X4Z-BC ত১দ২প.৩য৪হ-ঘক P1R2T.3X4Z-BC +11 5Q6S7.V8Y9-BC ৫থ৬ন৭.ব৮ল৯-ঘক 5Q6S7.V8Y9-BC +11 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC জঘকখমগঙচIঝঠডঢণOতথদনপটবভযলহ-ঘক ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +11 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC জঘকখমগঙচIঝঠডঢণOতথদনপটবভযলহ-ঘক ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +11 OI.XX-BC OI.যয-ঘক OI.XX-BC +11 OI.XX-BC OI.যয-ঘক OI.XX-BC +11 OI.XX-OOOOOOOO-BC OI.যয-OOOOOOOO-ঘক OI.XX-OOOOOOOO-BC +11 OI.XX-IIIIIIII-BC OI.যয-IIIIIIII-ঘক OI.XX-IIIIIIII-BC +11 PQ.RS-01234567-BC তথ.দন-০১২৩৪৫৬৭-ঘক PQ.RS-01234567-BC +11 PQ.RS-890-BC তথ.দন-৮৯০-ঘক PQ.RS-890-BC +11 89.EU-DFGHJKLM ৮৯.মট-খগঙচঝঠডঢ 89.EU-DFGHJKLM +11 00.0A-DFGHJKLM ০০.০জ-খগঙচঝঠডঢ 00.0A-DFGHJKLM +11 BCDF.GHJK-DFGHJKLM ঘকখগ.ঙচঝঠ-খগঙচঝঠডঢ BCDF.GHJK-DFGHJKLM +11 LMNP.QRST-DFGHJKLM ডঢণত.থদনপ-খগঙচঝঠডঢ LMNP.QRST-DFGHJKLM +11 VWXY.Z123-DFGHJKLM বভযল.হ১২৩-খগঙচঝঠডঢ VWXY.Z123-DFGHJKLM +11 4567.890B-DFGHJKLM ৪৫৬৭.৮৯০ঘ-খগঙচঝঠডঢ 4567.890B-DFGHJKLM +11 PQ.XY-DFGHJKLM তথ.যল-খগঙচঝঠডঢ PQ.XY-DFGHJKLM +11 PQ.XYZ-DFGHJKLM তথ.যলহ-খগঙচঝঠডঢ PQ.XYZ-DFGHJKLM +11 PQX.YZ-DFGHJKLM তথয.লহ-খগঙচঝঠডঢ PQX.YZ-DFGHJKLM +11 PQ.RXYZ-DFGHJKLM তথ.দযলহ-খগঙচঝঠডঢ PQ.RXYZ-DFGHJKLM +11 PQR.XYZ-DFGHJKLM তথদ.যলহ-খগঙচঝঠডঢ PQR.XYZ-DFGHJKLM +11 PQRX.YZ-DFGHJKLM তথদয.লহ-খগঙচঝঠডঢ PQRX.YZ-DFGHJKLM +11 PQR.SXYZ-DFGHJKLM তথদ.নযলহ-খগঙচঝঠডঢ PQR.SXYZ-DFGHJKLM +11 PQRS.XYZ-DFGHJKLM তথদন.যলহ-খগঙচঝঠডঢ PQRS.XYZ-DFGHJKLM +11 PQRS.TXYZ-DFGHJKLM তথদন.পযলহ-খগঙচঝঠডঢ PQRS.TXYZ-DFGHJKLM +11 PQRST.VXYZ-DFGHJKLM তথদনপ.বযলহ-খগঙচঝঠডঢ PQRST.VXYZ-DFGHJKLM +11 P1.XY-DFGHJKLM ত১.যল-খগঙচঝঠডঢ P1.XY-DFGHJKLM +11 PQ.2Y-DFGHJKLM তথ.২ল-খগঙচঝঠডঢ PQ.2Y-DFGHJKLM +11 3Q.X4-DFGHJKLM ৩থ.য৪-খগঙচঝঠডঢ 3Q.X4-DFGHJKLM +11 5Q.6Y-DFGHJKLM ৫থ.৬ল-খগঙচঝঠডঢ 5Q.6Y-DFGHJKLM +11 PQ.1YZ-DFGHJKLM তথ.১লহ-খগঙচঝঠডঢ PQ.1YZ-DFGHJKLM +11 PQ1.YZ-DFGHJKLM তথ১.লহ-খগঙচঝঠডঢ PQ1.YZ-DFGHJKLM +11 P2.X3Z-DFGHJKLM ত২.য৩হ-খগঙচঝঠডঢ P2.X3Z-DFGHJKLM +11 P2X.3Z-DFGHJKLM ত২য.৩হ-খগঙচঝঠডঢ P2X.3Z-DFGHJKLM +11 PQ.1XY2-DFGHJKLM তথ.১যল২-খগঙচঝঠডঢ PQ.1XY2-DFGHJKLM +11 PQ1.XY2-DFGHJKLM তথ১.যল২-খগঙচঝঠডঢ PQ1.XY2-DFGHJKLM +11 PQ1X.Y2-DFGHJKLM তথ১য.ল২-খগঙচঝঠডঢ PQ1X.Y2-DFGHJKLM +11 P3.RX4Z-DFGHJKLM ত৩.দয৪হ-খগঙচঝঠডঢ P3.RX4Z-DFGHJKLM +11 P3R.X4Z-DFGHJKLM ত৩দ.য৪হ-খগঙচঝঠডঢ P3R.X4Z-DFGHJKLM +11 P3RX.4Z-DFGHJKLM ত৩দয.৪হ-খগঙচঝঠডঢ P3RX.4Z-DFGHJKLM +11 5Q.R6Y7-DFGHJKLM ৫থ.দ৬ল৭-খগঙচঝঠডঢ 5Q.R6Y7-DFGHJKLM +11 5QR.6Y7-DFGHJKLM ৫থদ.৬ল৭-খগঙচঝঠডঢ 5QR.6Y7-DFGHJKLM +11 5QR6.Y7-DFGHJKLM ৫থদ৬.ল৭-খগঙচঝঠডঢ 5QR6.Y7-DFGHJKLM +11 PQ1.SX2Z-DFGHJKLM তথ১.নয২হ-খগঙচঝঠডঢ PQ1.SX2Z-DFGHJKLM +11 PQ1S.X2Z-DFGHJKLM তথ১ন.য২হ-খগঙচঝঠডঢ PQ1S.X2Z-DFGHJKLM +11 P3R.S4YZ-DFGHJKLM ত৩দ.ন৪লহ-খগঙচঝঠডঢ P3R.S4YZ-DFGHJKLM +11 P3RS.4YZ-DFGHJKLM ত৩দন.৪লহ-খগঙচঝঠডঢ P3RS.4YZ-DFGHJKLM +11 5QR.6XY7-DFGHJKLM ৫থদ.৬যল৭-খগঙচঝঠডঢ 5QR.6XY7-DFGHJKLM +11 5QR6.XY7-DFGHJKLM ৫থদ৬.যল৭-খগঙচঝঠডঢ 5QR6.XY7-DFGHJKLM +11 8Q9.SX0Z-DFGHJKLM ৮থ৯.নয০হ-খগঙচঝঠডঢ 8Q9.SX0Z-DFGHJKLM +11 8Q9S.X0Z-DFGHJKLM ৮থ৯ন.য০হ-খগঙচঝঠডঢ 8Q9S.X0Z-DFGHJKLM +11 1QR2.TX3Z-DFGHJKLM ১থদ২.পয৩হ-খগঙচঝঠডঢ 1QR2.TX3Z-DFGHJKLM +11 P4RS.5XY6-DFGHJKLM ত৪দন.৫যল৬-খগঙচঝঠডঢ P4RS.5XY6-DFGHJKLM +11 P7R8.T9Y0-DFGHJKLM ত৭দ৮.প৯ল০-খগঙচঝঠডঢ P7R8.T9Y0-DFGHJKLM +11 PQ1ST.2XY3-DFGHJKLM তথ১নপ.২যল৩-খগঙচঝঠডঢ PQ1ST.2XY3-DFGHJKLM +11 P4RS5.VX6Z-DFGHJKLM ত৪দন৫.বয৬হ-খগঙচঝঠডঢ P4RS5.VX6Z-DFGHJKLM +11 7QR8T.V9YZ-DFGHJKLM ৭থদ৮প.ব৯লহ-খগঙচঝঠডঢ 7QR8T.V9YZ-DFGHJKLM +11 P1R2T.3X4Z-DFGHJKLM ত১দ২প.৩য৪হ-খগঙচঝঠডঢ P1R2T.3X4Z-DFGHJKLM +11 5Q6S7.V8Y9-DFGHJKLM ৫থ৬ন৭.ব৮ল৯-খগঙচঝঠডঢ 5Q6S7.V8Y9-DFGHJKLM +11 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM জঘকখমগঙচIঝঠডঢণOতথদনপটবভযলহ-খগঙচঝঠডঢ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +11 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM জঘকখমগঙচIঝঠডঢণOতথদনপটবভযলহ-খগঙচঝঠডঢ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +11 OI.XX-DFGHJKLM OI.যয-খগঙচঝঠডঢ OI.XX-DFGHJKLM +11 OI.XX-DFGHJKLM OI.যয-খগঙচঝঠডঢ OI.XX-DFGHJKLM +11 OI.XX-OOOOOOOO-DFGHJKLM OI.যয-OOOOOOOO-খগঙচঝঠডঢ OI.XX-OOOOOOOO-DFGHJKLM +11 OI.XX-IIIIIIII-DFGHJKLM OI.যয-IIIIIIII-খগঙচঝঠডঢ OI.XX-IIIIIIII-DFGHJKLM +11 PQ.RS-01234567-DFGHJKLM তথ.দন-০১২৩৪৫৬৭-খগঙচঝঠডঢ PQ.RS-01234567-DFGHJKLM +11 PQ.RS-890-DFGHJKLM তথ.দন-৮৯০-খগঙচঝঠডঢ PQ.RS-890-DFGHJKLM +12 89.EU ੮੯.ਏਫ 89.EU +12 00.0A ੦੦.੦ਅ 00.0A +12 BCDF.GHJK ਕਗਘਚ.ਜਟਠਣ BCDF.GHJK +12 LMNP.QRST ਤਦਧਨ.ਪਭਮਰ LMNP.QRST +12 VWXY.Z123 ਲਵਸਹ.ਡ੧੨੩ VWXY.Z123 +12 4567.890B ੪੫੬੭.੮੯੦ਕ 4567.890B +12 PQ.XY ਨਪ.ਸਹ PQ.XY +12 PQ.XYZ ਨਪ.ਸਹਡ PQ.XYZ +12 PQX.YZ ਨਪਸ.ਹਡ PQX.YZ +12 PQ.RXYZ ਨਪ.ਭਸਹਡ PQ.RXYZ +12 PQR.XYZ ਨਪਭ.ਸਹਡ PQR.XYZ +12 PQRX.YZ ਨਪਭਸ.ਹਡ PQRX.YZ +12 PQR.SXYZ ਨਪਭ.ਮਸਹਡ PQR.SXYZ +12 PQRS.XYZ ਨਪਭਮ.ਸਹਡ PQRS.XYZ +12 PQRS.TXYZ ਨਪਭਮ.ਰਸਹਡ PQRS.TXYZ +12 PQRST.VXYZ ਨਪਭਮਰ.ਲਸਹਡ PQRST.VXYZ +12 P1.XY ਨ੧.ਸਹ P1.XY +12 PQ.2Y ਨਪ.੨ਹ PQ.2Y +12 3Q.X4 ੩ਪ.ਸ੪ 3Q.X4 +12 5Q.6Y ੫ਪ.੬ਹ 5Q.6Y +12 PQ.1YZ ਨਪ.੧ਹਡ PQ.1YZ +12 PQ1.YZ ਨਪ੧.ਹਡ PQ1.YZ +12 P2.X3Z ਨ੨.ਸ੩ਡ P2.X3Z +12 P2X.3Z ਨ੨ਸ.੩ਡ P2X.3Z +12 PQ.1XY2 ਨਪ.੧ਸਹ੨ PQ.1XY2 +12 PQ1.XY2 ਨਪ੧.ਸਹ੨ PQ1.XY2 +12 PQ1X.Y2 ਨਪ੧ਸ.ਹ੨ PQ1X.Y2 +12 P3.RX4Z ਨ੩.ਭਸ੪ਡ P3.RX4Z +12 P3R.X4Z ਨ੩ਭ.ਸ੪ਡ P3R.X4Z +12 P3RX.4Z ਨ੩ਭਸ.੪ਡ P3RX.4Z +12 5Q.R6Y7 ੫ਪ.ਭ੬ਹ੭ 5Q.R6Y7 +12 5QR.6Y7 ੫ਪਭ.੬ਹ੭ 5QR.6Y7 +12 5QR6.Y7 ੫ਪਭ੬.ਹ੭ 5QR6.Y7 +12 PQ1.SX2Z ਨਪ੧.ਮਸ੨ਡ PQ1.SX2Z +12 PQ1S.X2Z ਨਪ੧ਮ.ਸ੨ਡ PQ1S.X2Z +12 P3R.S4YZ ਨ੩ਭ.ਮ੪ਹਡ P3R.S4YZ +12 P3RS.4YZ ਨ੩ਭਮ.੪ਹਡ P3RS.4YZ +12 5QR.6XY7 ੫ਪਭ.੬ਸਹ੭ 5QR.6XY7 +12 5QR6.XY7 ੫ਪਭ੬.ਸਹ੭ 5QR6.XY7 +12 8Q9.SX0Z ੮ਪ੯.ਮਸ੦ਡ 8Q9.SX0Z +12 8Q9S.X0Z ੮ਪ੯ਮ.ਸ੦ਡ 8Q9S.X0Z +12 1QR2.TX3Z ੧ਪਭ੨.ਰਸ੩ਡ 1QR2.TX3Z +12 P4RS.5XY6 ਨ੪ਭਮ.੫ਸਹ੬ P4RS.5XY6 +12 P7R8.T9Y0 ਨ੭ਭ੮.ਰ੯ਹ੦ P7R8.T9Y0 +12 PQ1ST.2XY3 ਨਪ੧ਮਰ.੨ਸਹ੩ PQ1ST.2XY3 +12 P4RS5.VX6Z ਨ੪ਭਮ੫.ਲਸ੬ਡ P4RS5.VX6Z +12 7QR8T.V9YZ ੭ਪਭ੮ਰ.ਲ੯ਹਡ 7QR8T.V9YZ +12 P1R2T.3X4Z ਨ੧ਭ੨ਰ.੩ਸ੪ਡ P1R2T.3X4Z +12 5Q6S7.V8Y9 ੫ਪ੬ਮ੭.ਲ੮ਹ੯ 5Q6S7.V8Y9 +12 ABCDEFGHIJKLMNOPQRSTUVWXYZ ਅਕਗਘਏਚਜਟIਠਣਤਦਧOਨਪਭਮਰਫਲਵਸਹਡ ABCDEFGHIJKLMNOPQRSTUVWXYZ +12 ABCDEFGHIJKLMNOPQRSTUVWXYZ ਅਕਗਘਏਚਜਟIਠਣਤਦਧOਨਪਭਮਰਫਲਵਸਹਡ ABCDEFGHIJKLMNOPQRSTUVWXYZ +12 OI.XX OI.ਸਸ OI.XX +12 OI.XX OI.ਸਸ OI.XX +12 OI.XX-OOOOOOOO OI.ਸਸ-OOOOOOOO OI.XX-OOOOOOOO +12 OI.XX-IIIIIIII OI.ਸਸ-IIIIIIII OI.XX-IIIIIIII +12 PQ.RS-01234567 ਨਪ.ਭਮ-੦੧੨੩੪੫੬੭ PQ.RS-01234567 +12 PQ.RS-890 ਨਪ.ਭਮ-੮੯੦ PQ.RS-890 +12 89.EU-BC ੮੯.ਏਫ-ਕਗ 89.EU-BC +12 00.0A-BC ੦੦.੦ਅ-ਕਗ 00.0A-BC +12 BCDF.GHJK-BC ਕਗਘਚ.ਜਟਠਣ-ਕਗ BCDF.GHJK-BC +12 LMNP.QRST-BC ਤਦਧਨ.ਪਭਮਰ-ਕਗ LMNP.QRST-BC +12 VWXY.Z123-BC ਲਵਸਹ.ਡ੧੨੩-ਕਗ VWXY.Z123-BC +12 4567.890B-BC ੪੫੬੭.੮੯੦ਕ-ਕਗ 4567.890B-BC +12 PQ.XY-BC ਨਪ.ਸਹ-ਕਗ PQ.XY-BC +12 PQ.XYZ-BC ਨਪ.ਸਹਡ-ਕਗ PQ.XYZ-BC +12 PQX.YZ-BC ਨਪਸ.ਹਡ-ਕਗ PQX.YZ-BC +12 PQ.RXYZ-BC ਨਪ.ਭਸਹਡ-ਕਗ PQ.RXYZ-BC +12 PQR.XYZ-BC ਨਪਭ.ਸਹਡ-ਕਗ PQR.XYZ-BC +12 PQRX.YZ-BC ਨਪਭਸ.ਹਡ-ਕਗ PQRX.YZ-BC +12 PQR.SXYZ-BC ਨਪਭ.ਮਸਹਡ-ਕਗ PQR.SXYZ-BC +12 PQRS.XYZ-BC ਨਪਭਮ.ਸਹਡ-ਕਗ PQRS.XYZ-BC +12 PQRS.TXYZ-BC ਨਪਭਮ.ਰਸਹਡ-ਕਗ PQRS.TXYZ-BC +12 PQRST.VXYZ-BC ਨਪਭਮਰ.ਲਸਹਡ-ਕਗ PQRST.VXYZ-BC +12 P1.XY-BC ਨ੧.ਸਹ-ਕਗ P1.XY-BC +12 PQ.2Y-BC ਨਪ.੨ਹ-ਕਗ PQ.2Y-BC +12 3Q.X4-BC ੩ਪ.ਸ੪-ਕਗ 3Q.X4-BC +12 5Q.6Y-BC ੫ਪ.੬ਹ-ਕਗ 5Q.6Y-BC +12 PQ.1YZ-BC ਨਪ.੧ਹਡ-ਕਗ PQ.1YZ-BC +12 PQ1.YZ-BC ਨਪ੧.ਹਡ-ਕਗ PQ1.YZ-BC +12 P2.X3Z-BC ਨ੨.ਸ੩ਡ-ਕਗ P2.X3Z-BC +12 P2X.3Z-BC ਨ੨ਸ.੩ਡ-ਕਗ P2X.3Z-BC +12 PQ.1XY2-BC ਨਪ.੧ਸਹ੨-ਕਗ PQ.1XY2-BC +12 PQ1.XY2-BC ਨਪ੧.ਸਹ੨-ਕਗ PQ1.XY2-BC +12 PQ1X.Y2-BC ਨਪ੧ਸ.ਹ੨-ਕਗ PQ1X.Y2-BC +12 P3.RX4Z-BC ਨ੩.ਭਸ੪ਡ-ਕਗ P3.RX4Z-BC +12 P3R.X4Z-BC ਨ੩ਭ.ਸ੪ਡ-ਕਗ P3R.X4Z-BC +12 P3RX.4Z-BC ਨ੩ਭਸ.੪ਡ-ਕਗ P3RX.4Z-BC +12 5Q.R6Y7-BC ੫ਪ.ਭ੬ਹ੭-ਕਗ 5Q.R6Y7-BC +12 5QR.6Y7-BC ੫ਪਭ.੬ਹ੭-ਕਗ 5QR.6Y7-BC +12 5QR6.Y7-BC ੫ਪਭ੬.ਹ੭-ਕਗ 5QR6.Y7-BC +12 PQ1.SX2Z-BC ਨਪ੧.ਮਸ੨ਡ-ਕਗ PQ1.SX2Z-BC +12 PQ1S.X2Z-BC ਨਪ੧ਮ.ਸ੨ਡ-ਕਗ PQ1S.X2Z-BC +12 P3R.S4YZ-BC ਨ੩ਭ.ਮ੪ਹਡ-ਕਗ P3R.S4YZ-BC +12 P3RS.4YZ-BC ਨ੩ਭਮ.੪ਹਡ-ਕਗ P3RS.4YZ-BC +12 5QR.6XY7-BC ੫ਪਭ.੬ਸਹ੭-ਕਗ 5QR.6XY7-BC +12 5QR6.XY7-BC ੫ਪਭ੬.ਸਹ੭-ਕਗ 5QR6.XY7-BC +12 8Q9.SX0Z-BC ੮ਪ੯.ਮਸ੦ਡ-ਕਗ 8Q9.SX0Z-BC +12 8Q9S.X0Z-BC ੮ਪ੯ਮ.ਸ੦ਡ-ਕਗ 8Q9S.X0Z-BC +12 1QR2.TX3Z-BC ੧ਪਭ੨.ਰਸ੩ਡ-ਕਗ 1QR2.TX3Z-BC +12 P4RS.5XY6-BC ਨ੪ਭਮ.੫ਸਹ੬-ਕਗ P4RS.5XY6-BC +12 P7R8.T9Y0-BC ਨ੭ਭ੮.ਰ੯ਹ੦-ਕਗ P7R8.T9Y0-BC +12 PQ1ST.2XY3-BC ਨਪ੧ਮਰ.੨ਸਹ੩-ਕਗ PQ1ST.2XY3-BC +12 P4RS5.VX6Z-BC ਨ੪ਭਮ੫.ਲਸ੬ਡ-ਕਗ P4RS5.VX6Z-BC +12 7QR8T.V9YZ-BC ੭ਪਭ੮ਰ.ਲ੯ਹਡ-ਕਗ 7QR8T.V9YZ-BC +12 P1R2T.3X4Z-BC ਨ੧ਭ੨ਰ.੩ਸ੪ਡ-ਕਗ P1R2T.3X4Z-BC +12 5Q6S7.V8Y9-BC ੫ਪ੬ਮ੭.ਲ੮ਹ੯-ਕਗ 5Q6S7.V8Y9-BC +12 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ਅਕਗਘਏਚਜਟIਠਣਤਦਧOਨਪਭਮਰਫਲਵਸਹਡ-ਕਗ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +12 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ਅਕਗਘਏਚਜਟIਠਣਤਦਧOਨਪਭਮਰਫਲਵਸਹਡ-ਕਗ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +12 OI.XX-BC OI.ਸਸ-ਕਗ OI.XX-BC +12 OI.XX-BC OI.ਸਸ-ਕਗ OI.XX-BC +12 OI.XX-OOOOOOOO-BC OI.ਸਸ-OOOOOOOO-ਕਗ OI.XX-OOOOOOOO-BC +12 OI.XX-IIIIIIII-BC OI.ਸਸ-IIIIIIII-ਕਗ OI.XX-IIIIIIII-BC +12 PQ.RS-01234567-BC ਨਪ.ਭਮ-੦੧੨੩੪੫੬੭-ਕਗ PQ.RS-01234567-BC +12 PQ.RS-890-BC ਨਪ.ਭਮ-੮੯੦-ਕਗ PQ.RS-890-BC +12 89.EU-DFGHJKLM ੮੯.ਏਫ-ਘਚਜਟਠਣਤਦ 89.EU-DFGHJKLM +12 00.0A-DFGHJKLM ੦੦.੦ਅ-ਘਚਜਟਠਣਤਦ 00.0A-DFGHJKLM +12 BCDF.GHJK-DFGHJKLM ਕਗਘਚ.ਜਟਠਣ-ਘਚਜਟਠਣਤਦ BCDF.GHJK-DFGHJKLM +12 LMNP.QRST-DFGHJKLM ਤਦਧਨ.ਪਭਮਰ-ਘਚਜਟਠਣਤਦ LMNP.QRST-DFGHJKLM +12 VWXY.Z123-DFGHJKLM ਲਵਸਹ.ਡ੧੨੩-ਘਚਜਟਠਣਤਦ VWXY.Z123-DFGHJKLM +12 4567.890B-DFGHJKLM ੪੫੬੭.੮੯੦ਕ-ਘਚਜਟਠਣਤਦ 4567.890B-DFGHJKLM +12 PQ.XY-DFGHJKLM ਨਪ.ਸਹ-ਘਚਜਟਠਣਤਦ PQ.XY-DFGHJKLM +12 PQ.XYZ-DFGHJKLM ਨਪ.ਸਹਡ-ਘਚਜਟਠਣਤਦ PQ.XYZ-DFGHJKLM +12 PQX.YZ-DFGHJKLM ਨਪਸ.ਹਡ-ਘਚਜਟਠਣਤਦ PQX.YZ-DFGHJKLM +12 PQ.RXYZ-DFGHJKLM ਨਪ.ਭਸਹਡ-ਘਚਜਟਠਣਤਦ PQ.RXYZ-DFGHJKLM +12 PQR.XYZ-DFGHJKLM ਨਪਭ.ਸਹਡ-ਘਚਜਟਠਣਤਦ PQR.XYZ-DFGHJKLM +12 PQRX.YZ-DFGHJKLM ਨਪਭਸ.ਹਡ-ਘਚਜਟਠਣਤਦ PQRX.YZ-DFGHJKLM +12 PQR.SXYZ-DFGHJKLM ਨਪਭ.ਮਸਹਡ-ਘਚਜਟਠਣਤਦ PQR.SXYZ-DFGHJKLM +12 PQRS.XYZ-DFGHJKLM ਨਪਭਮ.ਸਹਡ-ਘਚਜਟਠਣਤਦ PQRS.XYZ-DFGHJKLM +12 PQRS.TXYZ-DFGHJKLM ਨਪਭਮ.ਰਸਹਡ-ਘਚਜਟਠਣਤਦ PQRS.TXYZ-DFGHJKLM +12 PQRST.VXYZ-DFGHJKLM ਨਪਭਮਰ.ਲਸਹਡ-ਘਚਜਟਠਣਤਦ PQRST.VXYZ-DFGHJKLM +12 P1.XY-DFGHJKLM ਨ੧.ਸਹ-ਘਚਜਟਠਣਤਦ P1.XY-DFGHJKLM +12 PQ.2Y-DFGHJKLM ਨਪ.੨ਹ-ਘਚਜਟਠਣਤਦ PQ.2Y-DFGHJKLM +12 3Q.X4-DFGHJKLM ੩ਪ.ਸ੪-ਘਚਜਟਠਣਤਦ 3Q.X4-DFGHJKLM +12 5Q.6Y-DFGHJKLM ੫ਪ.੬ਹ-ਘਚਜਟਠਣਤਦ 5Q.6Y-DFGHJKLM +12 PQ.1YZ-DFGHJKLM ਨਪ.੧ਹਡ-ਘਚਜਟਠਣਤਦ PQ.1YZ-DFGHJKLM +12 PQ1.YZ-DFGHJKLM ਨਪ੧.ਹਡ-ਘਚਜਟਠਣਤਦ PQ1.YZ-DFGHJKLM +12 P2.X3Z-DFGHJKLM ਨ੨.ਸ੩ਡ-ਘਚਜਟਠਣਤਦ P2.X3Z-DFGHJKLM +12 P2X.3Z-DFGHJKLM ਨ੨ਸ.੩ਡ-ਘਚਜਟਠਣਤਦ P2X.3Z-DFGHJKLM +12 PQ.1XY2-DFGHJKLM ਨਪ.੧ਸਹ੨-ਘਚਜਟਠਣਤਦ PQ.1XY2-DFGHJKLM +12 PQ1.XY2-DFGHJKLM ਨਪ੧.ਸਹ੨-ਘਚਜਟਠਣਤਦ PQ1.XY2-DFGHJKLM +12 PQ1X.Y2-DFGHJKLM ਨਪ੧ਸ.ਹ੨-ਘਚਜਟਠਣਤਦ PQ1X.Y2-DFGHJKLM +12 P3.RX4Z-DFGHJKLM ਨ੩.ਭਸ੪ਡ-ਘਚਜਟਠਣਤਦ P3.RX4Z-DFGHJKLM +12 P3R.X4Z-DFGHJKLM ਨ੩ਭ.ਸ੪ਡ-ਘਚਜਟਠਣਤਦ P3R.X4Z-DFGHJKLM +12 P3RX.4Z-DFGHJKLM ਨ੩ਭਸ.੪ਡ-ਘਚਜਟਠਣਤਦ P3RX.4Z-DFGHJKLM +12 5Q.R6Y7-DFGHJKLM ੫ਪ.ਭ੬ਹ੭-ਘਚਜਟਠਣਤਦ 5Q.R6Y7-DFGHJKLM +12 5QR.6Y7-DFGHJKLM ੫ਪਭ.੬ਹ੭-ਘਚਜਟਠਣਤਦ 5QR.6Y7-DFGHJKLM +12 5QR6.Y7-DFGHJKLM ੫ਪਭ੬.ਹ੭-ਘਚਜਟਠਣਤਦ 5QR6.Y7-DFGHJKLM +12 PQ1.SX2Z-DFGHJKLM ਨਪ੧.ਮਸ੨ਡ-ਘਚਜਟਠਣਤਦ PQ1.SX2Z-DFGHJKLM +12 PQ1S.X2Z-DFGHJKLM ਨਪ੧ਮ.ਸ੨ਡ-ਘਚਜਟਠਣਤਦ PQ1S.X2Z-DFGHJKLM +12 P3R.S4YZ-DFGHJKLM ਨ੩ਭ.ਮ੪ਹਡ-ਘਚਜਟਠਣਤਦ P3R.S4YZ-DFGHJKLM +12 P3RS.4YZ-DFGHJKLM ਨ੩ਭਮ.੪ਹਡ-ਘਚਜਟਠਣਤਦ P3RS.4YZ-DFGHJKLM +12 5QR.6XY7-DFGHJKLM ੫ਪਭ.੬ਸਹ੭-ਘਚਜਟਠਣਤਦ 5QR.6XY7-DFGHJKLM +12 5QR6.XY7-DFGHJKLM ੫ਪਭ੬.ਸਹ੭-ਘਚਜਟਠਣਤਦ 5QR6.XY7-DFGHJKLM +12 8Q9.SX0Z-DFGHJKLM ੮ਪ੯.ਮਸ੦ਡ-ਘਚਜਟਠਣਤਦ 8Q9.SX0Z-DFGHJKLM +12 8Q9S.X0Z-DFGHJKLM ੮ਪ੯ਮ.ਸ੦ਡ-ਘਚਜਟਠਣਤਦ 8Q9S.X0Z-DFGHJKLM +12 1QR2.TX3Z-DFGHJKLM ੧ਪਭ੨.ਰਸ੩ਡ-ਘਚਜਟਠਣਤਦ 1QR2.TX3Z-DFGHJKLM +12 P4RS.5XY6-DFGHJKLM ਨ੪ਭਮ.੫ਸਹ੬-ਘਚਜਟਠਣਤਦ P4RS.5XY6-DFGHJKLM +12 P7R8.T9Y0-DFGHJKLM ਨ੭ਭ੮.ਰ੯ਹ੦-ਘਚਜਟਠਣਤਦ P7R8.T9Y0-DFGHJKLM +12 PQ1ST.2XY3-DFGHJKLM ਨਪ੧ਮਰ.੨ਸਹ੩-ਘਚਜਟਠਣਤਦ PQ1ST.2XY3-DFGHJKLM +12 P4RS5.VX6Z-DFGHJKLM ਨ੪ਭਮ੫.ਲਸ੬ਡ-ਘਚਜਟਠਣਤਦ P4RS5.VX6Z-DFGHJKLM +12 7QR8T.V9YZ-DFGHJKLM ੭ਪਭ੮ਰ.ਲ੯ਹਡ-ਘਚਜਟਠਣਤਦ 7QR8T.V9YZ-DFGHJKLM +12 P1R2T.3X4Z-DFGHJKLM ਨ੧ਭ੨ਰ.੩ਸ੪ਡ-ਘਚਜਟਠਣਤਦ P1R2T.3X4Z-DFGHJKLM +12 5Q6S7.V8Y9-DFGHJKLM ੫ਪ੬ਮ੭.ਲ੮ਹ੯-ਘਚਜਟਠਣਤਦ 5Q6S7.V8Y9-DFGHJKLM +12 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ਅਕਗਘਏਚਜਟIਠਣਤਦਧOਨਪਭਮਰਫਲਵਸਹਡ-ਘਚਜਟਠਣਤਦ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +12 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ਅਕਗਘਏਚਜਟIਠਣਤਦਧOਨਪਭਮਰਫਲਵਸਹਡ-ਘਚਜਟਠਣਤਦ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +12 OI.XX-DFGHJKLM OI.ਸਸ-ਘਚਜਟਠਣਤਦ OI.XX-DFGHJKLM +12 OI.XX-DFGHJKLM OI.ਸਸ-ਘਚਜਟਠਣਤਦ OI.XX-DFGHJKLM +12 OI.XX-OOOOOOOO-DFGHJKLM OI.ਸਸ-OOOOOOOO-ਘਚਜਟਠਣਤਦ OI.XX-OOOOOOOO-DFGHJKLM +12 OI.XX-IIIIIIII-DFGHJKLM OI.ਸਸ-IIIIIIII-ਘਚਜਟਠਣਤਦ OI.XX-IIIIIIII-DFGHJKLM +12 PQ.RS-01234567-DFGHJKLM ਨਪ.ਭਮ-੦੧੨੩੪੫੬੭-ਘਚਜਟਠਣਤਦ PQ.RS-01234567-DFGHJKLM +12 PQ.RS-890-DFGHJKLM ਨਪ.ਭਮ-੮੯੦-ਘਚਜਟਠਣਤਦ PQ.RS-890-DFGHJKLM +13 89.EU ༨༩.ཤའ 89.EU +13 00.0A ༠༠.༠མ 00.0A +13 BCDF.GHJK ཀཁགང.ཅཆཇཉ BCDF.GHJK +13 LMNP.QRST ཕཐཏད.ནཔབཞ LMNP.QRST +13 VWXY.Z123 ཟཡརལ.ས༡༢༣ VWXY.Z123 +13 4567.890B ༤༥༦༧.༨༩༠ཀ 4567.890B +13 PQ.XY དན.རལ PQ.XY +13 PQ.XYZ དན.རལས PQ.XYZ +13 PQX.YZ དནར.ལས PQX.YZ +13 PQ.RXYZ དན.པརལས PQ.RXYZ +13 PQR.XYZ དནཔ.རལས PQR.XYZ +13 PQRX.YZ དནཔར.ལས PQRX.YZ +13 PQR.SXYZ དནཔ.བརལས PQR.SXYZ +13 PQRS.XYZ དནཔབ.རལས PQRS.XYZ +13 PQRS.TXYZ དནཔབ.ཞརལས PQRS.TXYZ +13 PQRST.VXYZ དནཔབཞ.ཟརལས PQRST.VXYZ +13 P1.XY ད༡.རལ P1.XY +13 PQ.2Y དན.༢ལ PQ.2Y +13 3Q.X4 ༣ན.ར༤ 3Q.X4 +13 5Q.6Y ༥ན.༦ལ 5Q.6Y +13 PQ.1YZ དན.༡ལས PQ.1YZ +13 PQ1.YZ དན༡.ལས PQ1.YZ +13 P2.X3Z ད༢.ར༣ས P2.X3Z +13 P2X.3Z ད༢ར.༣ས P2X.3Z +13 PQ.1XY2 དན.༡རལ༢ PQ.1XY2 +13 PQ1.XY2 དན༡.རལ༢ PQ1.XY2 +13 PQ1X.Y2 དན༡ར.ལ༢ PQ1X.Y2 +13 P3.RX4Z ད༣.པར༤ས P3.RX4Z +13 P3R.X4Z ད༣པ.ར༤ས P3R.X4Z +13 P3RX.4Z ད༣པར.༤ས P3RX.4Z +13 5Q.R6Y7 ༥ན.པ༦ལ༧ 5Q.R6Y7 +13 5QR.6Y7 ༥ནཔ.༦ལ༧ 5QR.6Y7 +13 5QR6.Y7 ༥ནཔ༦.ལ༧ 5QR6.Y7 +13 PQ1.SX2Z དན༡.བར༢ས PQ1.SX2Z +13 PQ1S.X2Z དན༡བ.ར༢ས PQ1S.X2Z +13 P3R.S4YZ ད༣པ.བ༤ལས P3R.S4YZ +13 P3RS.4YZ ད༣པབ.༤ལས P3RS.4YZ +13 5QR.6XY7 ༥ནཔ.༦རལ༧ 5QR.6XY7 +13 5QR6.XY7 ༥ནཔ༦.རལ༧ 5QR6.XY7 +13 8Q9.SX0Z ༨ན༩.བར༠ས 8Q9.SX0Z +13 8Q9S.X0Z ༨ན༩བ.ར༠ས 8Q9S.X0Z +13 1QR2.TX3Z ༡ནཔ༢.ཞར༣ས 1QR2.TX3Z +13 P4RS.5XY6 ད༤པབ.༥རལ༦ P4RS.5XY6 +13 P7R8.T9Y0 ད༧པ༨.ཞ༩ལ༠ P7R8.T9Y0 +13 PQ1ST.2XY3 དན༡བཞ.༢རལ༣ PQ1ST.2XY3 +13 P4RS5.VX6Z ད༤པབ༥.ཟར༦ས P4RS5.VX6Z +13 7QR8T.V9YZ ༧ནཔ༨ཞ.ཟ༩ལས 7QR8T.V9YZ +13 P1R2T.3X4Z ད༡པ༢ཞ.༣ར༤ས P1R2T.3X4Z +13 5Q6S7.V8Y9 ༥ན༦བ༧.ཟ༨ལ༩ 5Q6S7.V8Y9 +13 ABCDEFGHIJKLMNOPQRSTUVWXYZ མཀཁགཤངཅཆIཇཉཕཐཏOདནཔབཞའཟཡརལས ABCDEFGHIJKLMNOPQRSTUVWXYZ +13 ABCDEFGHIJKLMNOPQRSTUVWXYZ མཀཁགཤངཅཆIཇཉཕཐཏOདནཔབཞའཟཡརལས ABCDEFGHIJKLMNOPQRSTUVWXYZ +13 OI.XX OI.རར OI.XX +13 OI.XX OI.རར OI.XX +13 OI.XX-OOOOOOOO OI.རར-OOOOOOOO OI.XX-OOOOOOOO +13 OI.XX-IIIIIIII OI.རར-IIIIIIII OI.XX-IIIIIIII +13 PQ.RS-01234567 དན.པབ-༠༡༢༣༤༥༦༧ PQ.RS-01234567 +13 PQ.RS-890 དན.པབ-༨༩༠ PQ.RS-890 +13 89.EU-BC ༨༩.ཤའ-ཀཁ 89.EU-BC +13 00.0A-BC ༠༠.༠མ-ཀཁ 00.0A-BC +13 BCDF.GHJK-BC ཀཁགང.ཅཆཇཉ-ཀཁ BCDF.GHJK-BC +13 LMNP.QRST-BC ཕཐཏད.ནཔབཞ-ཀཁ LMNP.QRST-BC +13 VWXY.Z123-BC ཟཡརལ.ས༡༢༣-ཀཁ VWXY.Z123-BC +13 4567.890B-BC ༤༥༦༧.༨༩༠ཀ-ཀཁ 4567.890B-BC +13 PQ.XY-BC དན.རལ-ཀཁ PQ.XY-BC +13 PQ.XYZ-BC དན.རལས-ཀཁ PQ.XYZ-BC +13 PQX.YZ-BC དནར.ལས-ཀཁ PQX.YZ-BC +13 PQ.RXYZ-BC དན.པརལས-ཀཁ PQ.RXYZ-BC +13 PQR.XYZ-BC དནཔ.རལས-ཀཁ PQR.XYZ-BC +13 PQRX.YZ-BC དནཔར.ལས-ཀཁ PQRX.YZ-BC +13 PQR.SXYZ-BC དནཔ.བརལས-ཀཁ PQR.SXYZ-BC +13 PQRS.XYZ-BC དནཔབ.རལས-ཀཁ PQRS.XYZ-BC +13 PQRS.TXYZ-BC དནཔབ.ཞརལས-ཀཁ PQRS.TXYZ-BC +13 PQRST.VXYZ-BC དནཔབཞ.ཟརལས-ཀཁ PQRST.VXYZ-BC +13 P1.XY-BC ད༡.རལ-ཀཁ P1.XY-BC +13 PQ.2Y-BC དན.༢ལ-ཀཁ PQ.2Y-BC +13 3Q.X4-BC ༣ན.ར༤-ཀཁ 3Q.X4-BC +13 5Q.6Y-BC ༥ན.༦ལ-ཀཁ 5Q.6Y-BC +13 PQ.1YZ-BC དན.༡ལས-ཀཁ PQ.1YZ-BC +13 PQ1.YZ-BC དན༡.ལས-ཀཁ PQ1.YZ-BC +13 P2.X3Z-BC ད༢.ར༣ས-ཀཁ P2.X3Z-BC +13 P2X.3Z-BC ད༢ར.༣ས-ཀཁ P2X.3Z-BC +13 PQ.1XY2-BC དན.༡རལ༢-ཀཁ PQ.1XY2-BC +13 PQ1.XY2-BC དན༡.རལ༢-ཀཁ PQ1.XY2-BC +13 PQ1X.Y2-BC དན༡ར.ལ༢-ཀཁ PQ1X.Y2-BC +13 P3.RX4Z-BC ད༣.པར༤ས-ཀཁ P3.RX4Z-BC +13 P3R.X4Z-BC ད༣པ.ར༤ས-ཀཁ P3R.X4Z-BC +13 P3RX.4Z-BC ད༣པར.༤ས-ཀཁ P3RX.4Z-BC +13 5Q.R6Y7-BC ༥ན.པ༦ལ༧-ཀཁ 5Q.R6Y7-BC +13 5QR.6Y7-BC ༥ནཔ.༦ལ༧-ཀཁ 5QR.6Y7-BC +13 5QR6.Y7-BC ༥ནཔ༦.ལ༧-ཀཁ 5QR6.Y7-BC +13 PQ1.SX2Z-BC དན༡.བར༢ས-ཀཁ PQ1.SX2Z-BC +13 PQ1S.X2Z-BC དན༡བ.ར༢ས-ཀཁ PQ1S.X2Z-BC +13 P3R.S4YZ-BC ད༣པ.བ༤ལས-ཀཁ P3R.S4YZ-BC +13 P3RS.4YZ-BC ད༣པབ.༤ལས-ཀཁ P3RS.4YZ-BC +13 5QR.6XY7-BC ༥ནཔ.༦རལ༧-ཀཁ 5QR.6XY7-BC +13 5QR6.XY7-BC ༥ནཔ༦.རལ༧-ཀཁ 5QR6.XY7-BC +13 8Q9.SX0Z-BC ༨ན༩.བར༠ས-ཀཁ 8Q9.SX0Z-BC +13 8Q9S.X0Z-BC ༨ན༩བ.ར༠ས-ཀཁ 8Q9S.X0Z-BC +13 1QR2.TX3Z-BC ༡ནཔ༢.ཞར༣ས-ཀཁ 1QR2.TX3Z-BC +13 P4RS.5XY6-BC ད༤པབ.༥རལ༦-ཀཁ P4RS.5XY6-BC +13 P7R8.T9Y0-BC ད༧པ༨.ཞ༩ལ༠-ཀཁ P7R8.T9Y0-BC +13 PQ1ST.2XY3-BC དན༡བཞ.༢རལ༣-ཀཁ PQ1ST.2XY3-BC +13 P4RS5.VX6Z-BC ད༤པབ༥.ཟར༦ས-ཀཁ P4RS5.VX6Z-BC +13 7QR8T.V9YZ-BC ༧ནཔ༨ཞ.ཟ༩ལས-ཀཁ 7QR8T.V9YZ-BC +13 P1R2T.3X4Z-BC ད༡པ༢ཞ.༣ར༤ས-ཀཁ P1R2T.3X4Z-BC +13 5Q6S7.V8Y9-BC ༥ན༦བ༧.ཟ༨ལ༩-ཀཁ 5Q6S7.V8Y9-BC +13 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC མཀཁགཤངཅཆIཇཉཕཐཏOདནཔབཞའཟཡརལས-ཀཁ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +13 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC མཀཁགཤངཅཆIཇཉཕཐཏOདནཔབཞའཟཡརལས-ཀཁ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +13 OI.XX-BC OI.རར-ཀཁ OI.XX-BC +13 OI.XX-BC OI.རར-ཀཁ OI.XX-BC +13 OI.XX-OOOOOOOO-BC OI.རར-OOOOOOOO-ཀཁ OI.XX-OOOOOOOO-BC +13 OI.XX-IIIIIIII-BC OI.རར-IIIIIIII-ཀཁ OI.XX-IIIIIIII-BC +13 PQ.RS-01234567-BC དན.པབ-༠༡༢༣༤༥༦༧-ཀཁ PQ.RS-01234567-BC +13 PQ.RS-890-BC དན.པབ-༨༩༠-ཀཁ PQ.RS-890-BC +13 89.EU-DFGHJKLM ༨༩.ཤའ-གངཅཆཇཉཕཐ 89.EU-DFGHJKLM +13 00.0A-DFGHJKLM ༠༠.༠མ-གངཅཆཇཉཕཐ 00.0A-DFGHJKLM +13 BCDF.GHJK-DFGHJKLM ཀཁགང.ཅཆཇཉ-གངཅཆཇཉཕཐ BCDF.GHJK-DFGHJKLM +13 LMNP.QRST-DFGHJKLM ཕཐཏད.ནཔབཞ-གངཅཆཇཉཕཐ LMNP.QRST-DFGHJKLM +13 VWXY.Z123-DFGHJKLM ཟཡརལ.ས༡༢༣-གངཅཆཇཉཕཐ VWXY.Z123-DFGHJKLM +13 4567.890B-DFGHJKLM ༤༥༦༧.༨༩༠ཀ-གངཅཆཇཉཕཐ 4567.890B-DFGHJKLM +13 PQ.XY-DFGHJKLM དན.རལ-གངཅཆཇཉཕཐ PQ.XY-DFGHJKLM +13 PQ.XYZ-DFGHJKLM དན.རལས-གངཅཆཇཉཕཐ PQ.XYZ-DFGHJKLM +13 PQX.YZ-DFGHJKLM དནར.ལས-གངཅཆཇཉཕཐ PQX.YZ-DFGHJKLM +13 PQ.RXYZ-DFGHJKLM དན.པརལས-གངཅཆཇཉཕཐ PQ.RXYZ-DFGHJKLM +13 PQR.XYZ-DFGHJKLM དནཔ.རལས-གངཅཆཇཉཕཐ PQR.XYZ-DFGHJKLM +13 PQRX.YZ-DFGHJKLM དནཔར.ལས-གངཅཆཇཉཕཐ PQRX.YZ-DFGHJKLM +13 PQR.SXYZ-DFGHJKLM དནཔ.བརལས-གངཅཆཇཉཕཐ PQR.SXYZ-DFGHJKLM +13 PQRS.XYZ-DFGHJKLM དནཔབ.རལས-གངཅཆཇཉཕཐ PQRS.XYZ-DFGHJKLM +13 PQRS.TXYZ-DFGHJKLM དནཔབ.ཞརལས-གངཅཆཇཉཕཐ PQRS.TXYZ-DFGHJKLM +13 PQRST.VXYZ-DFGHJKLM དནཔབཞ.ཟརལས-གངཅཆཇཉཕཐ PQRST.VXYZ-DFGHJKLM +13 P1.XY-DFGHJKLM ད༡.རལ-གངཅཆཇཉཕཐ P1.XY-DFGHJKLM +13 PQ.2Y-DFGHJKLM དན.༢ལ-གངཅཆཇཉཕཐ PQ.2Y-DFGHJKLM +13 3Q.X4-DFGHJKLM ༣ན.ར༤-གངཅཆཇཉཕཐ 3Q.X4-DFGHJKLM +13 5Q.6Y-DFGHJKLM ༥ན.༦ལ-གངཅཆཇཉཕཐ 5Q.6Y-DFGHJKLM +13 PQ.1YZ-DFGHJKLM དན.༡ལས-གངཅཆཇཉཕཐ PQ.1YZ-DFGHJKLM +13 PQ1.YZ-DFGHJKLM དན༡.ལས-གངཅཆཇཉཕཐ PQ1.YZ-DFGHJKLM +13 P2.X3Z-DFGHJKLM ད༢.ར༣ས-གངཅཆཇཉཕཐ P2.X3Z-DFGHJKLM +13 P2X.3Z-DFGHJKLM ད༢ར.༣ས-གངཅཆཇཉཕཐ P2X.3Z-DFGHJKLM +13 PQ.1XY2-DFGHJKLM དན.༡རལ༢-གངཅཆཇཉཕཐ PQ.1XY2-DFGHJKLM +13 PQ1.XY2-DFGHJKLM དན༡.རལ༢-གངཅཆཇཉཕཐ PQ1.XY2-DFGHJKLM +13 PQ1X.Y2-DFGHJKLM དན༡ར.ལ༢-གངཅཆཇཉཕཐ PQ1X.Y2-DFGHJKLM +13 P3.RX4Z-DFGHJKLM ད༣.པར༤ས-གངཅཆཇཉཕཐ P3.RX4Z-DFGHJKLM +13 P3R.X4Z-DFGHJKLM ད༣པ.ར༤ས-གངཅཆཇཉཕཐ P3R.X4Z-DFGHJKLM +13 P3RX.4Z-DFGHJKLM ད༣པར.༤ས-གངཅཆཇཉཕཐ P3RX.4Z-DFGHJKLM +13 5Q.R6Y7-DFGHJKLM ༥ན.པ༦ལ༧-གངཅཆཇཉཕཐ 5Q.R6Y7-DFGHJKLM +13 5QR.6Y7-DFGHJKLM ༥ནཔ.༦ལ༧-གངཅཆཇཉཕཐ 5QR.6Y7-DFGHJKLM +13 5QR6.Y7-DFGHJKLM ༥ནཔ༦.ལ༧-གངཅཆཇཉཕཐ 5QR6.Y7-DFGHJKLM +13 PQ1.SX2Z-DFGHJKLM དན༡.བར༢ས-གངཅཆཇཉཕཐ PQ1.SX2Z-DFGHJKLM +13 PQ1S.X2Z-DFGHJKLM དན༡བ.ར༢ས-གངཅཆཇཉཕཐ PQ1S.X2Z-DFGHJKLM +13 P3R.S4YZ-DFGHJKLM ད༣པ.བ༤ལས-གངཅཆཇཉཕཐ P3R.S4YZ-DFGHJKLM +13 P3RS.4YZ-DFGHJKLM ད༣པབ.༤ལས-གངཅཆཇཉཕཐ P3RS.4YZ-DFGHJKLM +13 5QR.6XY7-DFGHJKLM ༥ནཔ.༦རལ༧-གངཅཆཇཉཕཐ 5QR.6XY7-DFGHJKLM +13 5QR6.XY7-DFGHJKLM ༥ནཔ༦.རལ༧-གངཅཆཇཉཕཐ 5QR6.XY7-DFGHJKLM +13 8Q9.SX0Z-DFGHJKLM ༨ན༩.བར༠ས-གངཅཆཇཉཕཐ 8Q9.SX0Z-DFGHJKLM +13 8Q9S.X0Z-DFGHJKLM ༨ན༩བ.ར༠ས-གངཅཆཇཉཕཐ 8Q9S.X0Z-DFGHJKLM +13 1QR2.TX3Z-DFGHJKLM ༡ནཔ༢.ཞར༣ས-གངཅཆཇཉཕཐ 1QR2.TX3Z-DFGHJKLM +13 P4RS.5XY6-DFGHJKLM ད༤པབ.༥རལ༦-གངཅཆཇཉཕཐ P4RS.5XY6-DFGHJKLM +13 P7R8.T9Y0-DFGHJKLM ད༧པ༨.ཞ༩ལ༠-གངཅཆཇཉཕཐ P7R8.T9Y0-DFGHJKLM +13 PQ1ST.2XY3-DFGHJKLM དན༡བཞ.༢རལ༣-གངཅཆཇཉཕཐ PQ1ST.2XY3-DFGHJKLM +13 P4RS5.VX6Z-DFGHJKLM ད༤པབ༥.ཟར༦ས-གངཅཆཇཉཕཐ P4RS5.VX6Z-DFGHJKLM +13 7QR8T.V9YZ-DFGHJKLM ༧ནཔ༨ཞ.ཟ༩ལས-གངཅཆཇཉཕཐ 7QR8T.V9YZ-DFGHJKLM +13 P1R2T.3X4Z-DFGHJKLM ད༡པ༢ཞ.༣ར༤ས-གངཅཆཇཉཕཐ P1R2T.3X4Z-DFGHJKLM +13 5Q6S7.V8Y9-DFGHJKLM ༥ན༦བ༧.ཟ༨ལ༩-གངཅཆཇཉཕཐ 5Q6S7.V8Y9-DFGHJKLM +13 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM མཀཁགཤངཅཆIཇཉཕཐཏOདནཔབཞའཟཡརལས-གངཅཆཇཉཕཐ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +13 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM མཀཁགཤངཅཆIཇཉཕཐཏOདནཔབཞའཟཡརལས-གངཅཆཇཉཕཐ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +13 OI.XX-DFGHJKLM OI.རར-གངཅཆཇཉཕཐ OI.XX-DFGHJKLM +13 OI.XX-DFGHJKLM OI.རར-གངཅཆཇཉཕཐ OI.XX-DFGHJKLM +13 OI.XX-OOOOOOOO-DFGHJKLM OI.རར-OOOOOOOO-གངཅཆཇཉཕཐ OI.XX-OOOOOOOO-DFGHJKLM +13 OI.XX-IIIIIIII-DFGHJKLM OI.རར-IIIIIIII-གངཅཆཇཉཕཐ OI.XX-IIIIIIII-DFGHJKLM +13 PQ.RS-01234567-DFGHJKLM དན.པབ-༠༡༢༣༤༥༦༧-གངཅཆཇཉཕཐ PQ.RS-01234567-DFGHJKLM +13 PQ.RS-890-DFGHJKLM དན.པབ-༨༩༠-གངཅཆཇཉཕཐ PQ.RS-890-DFGHJKLM +14 89.EU 89.ثق 89.EU +14 00.0A 00.0ب 00.0A +14 BCDF.GHJK تح4د.2ذر8ز BCDF.GHJK +14 LMNP.QRST شص6ط.8ظع4غ LMNP.QRST +14 VWXY.Z123 جل9ن.1و102 VWXY.Z123 +14 4567.890B 4567.890ت 4567.890B +14 PQ.XY طظ.56ن PQ.XY +14 PQ.XYZ طظ.56نو PQ.XYZ +14 PQX.YZ طظ.96نو PQX.YZ +14 PQ.RXYZ طظ3.م0نو PQ.RXYZ +14 PQR.XYZ طظ6.م1نو PQR.XYZ +14 PQRX.YZ طظ9.م2نو PQRX.YZ +14 PQR.SXYZ طظ4.غم9نو PQR.SXYZ +14 PQRS.XYZ طظ8.غم9نو PQRS.XYZ +14 PQRS.TXYZ طظ7غ.8فم2ن PQRS.TXYZ +14 PQRST.VXYZ طظ7غف.8جم2ن PQRST.VXYZ +14 P1.XY ط1.من P1.XY +14 PQ.2Y طظ.2ن PQ.2Y +14 3Q.X4 3ظ.م4 3Q.X4 +14 5Q.6Y 5ظ.6ن 5Q.6Y +14 PQ.1YZ طظ.23نو PQ.1YZ +14 PQ1.YZ طظ1.نو PQ1.YZ +14 P2.X3Z ط2.563و P2.X3Z +14 P2X.3Z ط2م.3و P2X.3Z +14 PQ.1XY2 طظ0.م8ن2 PQ.1XY2 +14 PQ1.XY2 طظ1.من2 PQ1.XY2 +14 PQ1X.Y2 طظ1م.ن2 PQ1X.Y2 +14 P3.RX4Z ط33.م04و P3.RX4Z +14 P3R.X4Z ط3ع.م4و P3R.X4Z +14 P3RX.4Z ط3عم.4و P3RX.4Z +14 5Q.R6Y7 5ظ3.60ن7 5Q.R6Y7 +14 5QR.6Y7 5ظع.6ن7 5QR.6Y7 +14 5QR6.Y7 5ظع6.ن7 5QR6.Y7 +14 PQ1.SX2Z طظ2.غم32و PQ1.SX2Z +14 PQ1S.X2Z طظ1غ.م2و PQ1S.X2Z +14 P3R.S4YZ ط34.غ49نو P3R.S4YZ +14 P3RS.4YZ ط3عغ.4نو P3RS.4YZ +14 5QR.6XY7 5ظ4.6م9ن7 5QR.6XY7 +14 5QR6.XY7 5ظع6.من7 5QR6.XY7 +14 8Q9.SX0Z 8ظ3.غم30و 8Q9.SX0Z +14 8Q9S.X0Z 8ظ9غ.م0و 8Q9S.X0Z +14 1QR2.TX3Z 1ظع2.فم3و 1QR2.TX3Z +14 P4RS.5XY6 ط4عغ.5من6 P4RS.5XY6 +14 P7R8.T9Y0 ط7ع8.ف9ن0 P7R8.T9Y0 +14 PQ1ST.2XY3 طظ1غف.2من3 PQ1ST.2XY3 +14 P4RS5.VX6Z ط4عغ5.جم6و P4RS5.VX6Z +14 7QR8T.V9YZ 7ظع8ف.ج9نو 7QR8T.V9YZ +14 P1R2T.3X4Z ط1ع2ف.3م4و P1R2T.3X4Z +14 5Q6S7.V8Y9 5ظ6غ7.ج8ن9 5Q6S7.V8Y9 +14 ABCDEFGHIJKLMNOPQRSTUVWXYZ بتحخثدذرازسشصضهطظعغفقجلمنو ABCDEFGHIJKLMNOPQRSTUVWXYZ +14 ABCDEFGHIJKLMNOPQRSTUVWXYZ بتحخثدذرازسشصضهطظعغفقجلمنو ABCDEFGHIJKLMNOPQRSTUVWXYZ +14 OI.XX ها.مم OI.XX +14 OI.XX ها.مم OI.XX +14 OI.XX-OOOOOOOO ها.مم-هههههههه OI.XX-OOOOOOOO +14 OI.XX-IIIIIIII ها.مم-اااااااا OI.XX-IIIIIIII +14 PQ.RS-01234567 طظ.49غ-01234567 PQ.RS-01234567 +14 PQ.RS-890 طظ.49غ-890 PQ.RS-890 +14 89.EU-BC 89.ثق-تح 89.EU-BC +14 00.0A-BC 00.0ب-تح 00.0A-BC +14 BCDF.GHJK-BC تح4د.2ذر8ز-تح BCDF.GHJK-BC +14 LMNP.QRST-BC شص6ط.8ظع4غ-تح LMNP.QRST-BC +14 VWXY.Z123-BC جل9ن.1و102-تح VWXY.Z123-BC +14 4567.890B-BC 4567.890ت-تح 4567.890B-BC +14 PQ.XY-BC طظ.56ن-تح PQ.XY-BC +14 PQ.XYZ-BC طظ.56نو-تح PQ.XYZ-BC +14 PQX.YZ-BC طظ.96نو-تح PQX.YZ-BC +14 PQ.RXYZ-BC طظ3.م0نو-تح PQ.RXYZ-BC +14 PQR.XYZ-BC طظ6.م1نو-تح PQR.XYZ-BC +14 PQRX.YZ-BC طظ9.م2نو-تح PQRX.YZ-BC +14 PQR.SXYZ-BC طظ4.غم9نو-تح PQR.SXYZ-BC +14 PQRS.XYZ-BC طظ8.غم9نو-تح PQRS.XYZ-BC +14 PQRS.TXYZ-BC طظ7غ.8فم2ن-تح PQRS.TXYZ-BC +14 PQRST.VXYZ-BC طظ7غف.8جم2ن-تح PQRST.VXYZ-BC +14 P1.XY-BC ط1.من-تح P1.XY-BC +14 PQ.2Y-BC طظ.2ن-تح PQ.2Y-BC +14 3Q.X4-BC 3ظ.م4-تح 3Q.X4-BC +14 5Q.6Y-BC 5ظ.6ن-تح 5Q.6Y-BC +14 PQ.1YZ-BC طظ.23نو-تح PQ.1YZ-BC +14 PQ1.YZ-BC طظ1.نو-تح PQ1.YZ-BC +14 P2.X3Z-BC ط2.563و-تح P2.X3Z-BC +14 P2X.3Z-BC ط2م.3و-تح P2X.3Z-BC +14 PQ.1XY2-BC طظ0.م8ن2-تح PQ.1XY2-BC +14 PQ1.XY2-BC طظ1.من2-تح PQ1.XY2-BC +14 PQ1X.Y2-BC طظ1م.ن2-تح PQ1X.Y2-BC +14 P3.RX4Z-BC ط33.م04و-تح P3.RX4Z-BC +14 P3R.X4Z-BC ط3ع.م4و-تح P3R.X4Z-BC +14 P3RX.4Z-BC ط3عم.4و-تح P3RX.4Z-BC +14 5Q.R6Y7-BC 5ظ3.60ن7-تح 5Q.R6Y7-BC +14 5QR.6Y7-BC 5ظع.6ن7-تح 5QR.6Y7-BC +14 5QR6.Y7-BC 5ظع6.ن7-تح 5QR6.Y7-BC +14 PQ1.SX2Z-BC طظ2.غم32و-تح PQ1.SX2Z-BC +14 PQ1S.X2Z-BC طظ1غ.م2و-تح PQ1S.X2Z-BC +14 P3R.S4YZ-BC ط34.غ49نو-تح P3R.S4YZ-BC +14 P3RS.4YZ-BC ط3عغ.4نو-تح P3RS.4YZ-BC +14 5QR.6XY7-BC 5ظ4.6م9ن7-تح 5QR.6XY7-BC +14 5QR6.XY7-BC 5ظع6.من7-تح 5QR6.XY7-BC +14 8Q9.SX0Z-BC 8ظ3.غم30و-تح 8Q9.SX0Z-BC +14 8Q9S.X0Z-BC 8ظ9غ.م0و-تح 8Q9S.X0Z-BC +14 1QR2.TX3Z-BC 1ظع2.فم3و-تح 1QR2.TX3Z-BC +14 P4RS.5XY6-BC ط4عغ.5من6-تح P4RS.5XY6-BC +14 P7R8.T9Y0-BC ط7ع8.ف9ن0-تح P7R8.T9Y0-BC +14 PQ1ST.2XY3-BC طظ1غف.2من3-تح PQ1ST.2XY3-BC +14 P4RS5.VX6Z-BC ط4عغ5.جم6و-تح P4RS5.VX6Z-BC +14 7QR8T.V9YZ-BC 7ظع8ف.ج9نو-تح 7QR8T.V9YZ-BC +14 P1R2T.3X4Z-BC ط1ع2ف.3م4و-تح P1R2T.3X4Z-BC +14 5Q6S7.V8Y9-BC 5ظ6غ7.ج8ن9-تح 5Q6S7.V8Y9-BC +14 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC بتحخثدذرازسشصضهطظعغفقجلمنو-تح ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +14 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC بتحخثدذرازسشصضهطظعغفقجلمنو-تح ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +14 OI.XX-BC ها.مم-تح OI.XX-BC +14 OI.XX-BC ها.مم-تح OI.XX-BC +14 OI.XX-OOOOOOOO-BC ها.مم-هههههههه-تح OI.XX-OOOOOOOO-BC +14 OI.XX-IIIIIIII-BC ها.مم-اااااااا-تح OI.XX-IIIIIIII-BC +14 PQ.RS-01234567-BC طظ.49غ-01234567-تح PQ.RS-01234567-BC +14 PQ.RS-890-BC طظ.49غ-890-تح PQ.RS-890-BC +14 89.EU-DFGHJKLM 89.ثق-خدذرزسشص 89.EU-DFGHJKLM +14 00.0A-DFGHJKLM 00.0ب-خدذرزسشص 00.0A-DFGHJKLM +14 BCDF.GHJK-DFGHJKLM تح4د.2ذر8ز-خدذرزسشص BCDF.GHJK-DFGHJKLM +14 LMNP.QRST-DFGHJKLM شص6ط.8ظع4غ-خدذرزسشص LMNP.QRST-DFGHJKLM +14 VWXY.Z123-DFGHJKLM جل9ن.1و102-خدذرزسشص VWXY.Z123-DFGHJKLM +14 4567.890B-DFGHJKLM 4567.890ت-خدذرزسشص 4567.890B-DFGHJKLM +14 PQ.XY-DFGHJKLM طظ.56ن-خدذرزسشص PQ.XY-DFGHJKLM +14 PQ.XYZ-DFGHJKLM طظ.56نو-خدذرزسشص PQ.XYZ-DFGHJKLM +14 PQX.YZ-DFGHJKLM طظ.96نو-خدذرزسشص PQX.YZ-DFGHJKLM +14 PQ.RXYZ-DFGHJKLM طظ3.م0نو-خدذرزسشص PQ.RXYZ-DFGHJKLM +14 PQR.XYZ-DFGHJKLM طظ6.م1نو-خدذرزسشص PQR.XYZ-DFGHJKLM +14 PQRX.YZ-DFGHJKLM طظ9.م2نو-خدذرزسشص PQRX.YZ-DFGHJKLM +14 PQR.SXYZ-DFGHJKLM طظ4.غم9نو-خدذرزسشص PQR.SXYZ-DFGHJKLM +14 PQRS.XYZ-DFGHJKLM طظ8.غم9نو-خدذرزسشص PQRS.XYZ-DFGHJKLM +14 PQRS.TXYZ-DFGHJKLM طظ7غ.8فم2ن-خدذرزسشص PQRS.TXYZ-DFGHJKLM +14 PQRST.VXYZ-DFGHJKLM طظ7غف.8جم2ن-خدذرزسشص PQRST.VXYZ-DFGHJKLM +14 P1.XY-DFGHJKLM ط1.من-خدذرزسشص P1.XY-DFGHJKLM +14 PQ.2Y-DFGHJKLM طظ.2ن-خدذرزسشص PQ.2Y-DFGHJKLM +14 3Q.X4-DFGHJKLM 3ظ.م4-خدذرزسشص 3Q.X4-DFGHJKLM +14 5Q.6Y-DFGHJKLM 5ظ.6ن-خدذرزسشص 5Q.6Y-DFGHJKLM +14 PQ.1YZ-DFGHJKLM طظ.23نو-خدذرزسشص PQ.1YZ-DFGHJKLM +14 PQ1.YZ-DFGHJKLM طظ1.نو-خدذرزسشص PQ1.YZ-DFGHJKLM +14 P2.X3Z-DFGHJKLM ط2.563و-خدذرزسشص P2.X3Z-DFGHJKLM +14 P2X.3Z-DFGHJKLM ط2م.3و-خدذرزسشص P2X.3Z-DFGHJKLM +14 PQ.1XY2-DFGHJKLM طظ0.م8ن2-خدذرزسشص PQ.1XY2-DFGHJKLM +14 PQ1.XY2-DFGHJKLM طظ1.من2-خدذرزسشص PQ1.XY2-DFGHJKLM +14 PQ1X.Y2-DFGHJKLM طظ1م.ن2-خدذرزسشص PQ1X.Y2-DFGHJKLM +14 P3.RX4Z-DFGHJKLM ط33.م04و-خدذرزسشص P3.RX4Z-DFGHJKLM +14 P3R.X4Z-DFGHJKLM ط3ع.م4و-خدذرزسشص P3R.X4Z-DFGHJKLM +14 P3RX.4Z-DFGHJKLM ط3عم.4و-خدذرزسشص P3RX.4Z-DFGHJKLM +14 5Q.R6Y7-DFGHJKLM 5ظ3.60ن7-خدذرزسشص 5Q.R6Y7-DFGHJKLM +14 5QR.6Y7-DFGHJKLM 5ظع.6ن7-خدذرزسشص 5QR.6Y7-DFGHJKLM +14 5QR6.Y7-DFGHJKLM 5ظع6.ن7-خدذرزسشص 5QR6.Y7-DFGHJKLM +14 PQ1.SX2Z-DFGHJKLM طظ2.غم32و-خدذرزسشص PQ1.SX2Z-DFGHJKLM +14 PQ1S.X2Z-DFGHJKLM طظ1غ.م2و-خدذرزسشص PQ1S.X2Z-DFGHJKLM +14 P3R.S4YZ-DFGHJKLM ط34.غ49نو-خدذرزسشص P3R.S4YZ-DFGHJKLM +14 P3RS.4YZ-DFGHJKLM ط3عغ.4نو-خدذرزسشص P3RS.4YZ-DFGHJKLM +14 5QR.6XY7-DFGHJKLM 5ظ4.6م9ن7-خدذرزسشص 5QR.6XY7-DFGHJKLM +14 5QR6.XY7-DFGHJKLM 5ظع6.من7-خدذرزسشص 5QR6.XY7-DFGHJKLM +14 8Q9.SX0Z-DFGHJKLM 8ظ3.غم30و-خدذرزسشص 8Q9.SX0Z-DFGHJKLM +14 8Q9S.X0Z-DFGHJKLM 8ظ9غ.م0و-خدذرزسشص 8Q9S.X0Z-DFGHJKLM +14 1QR2.TX3Z-DFGHJKLM 1ظع2.فم3و-خدذرزسشص 1QR2.TX3Z-DFGHJKLM +14 P4RS.5XY6-DFGHJKLM ط4عغ.5من6-خدذرزسشص P4RS.5XY6-DFGHJKLM +14 P7R8.T9Y0-DFGHJKLM ط7ع8.ف9ن0-خدذرزسشص P7R8.T9Y0-DFGHJKLM +14 PQ1ST.2XY3-DFGHJKLM طظ1غف.2من3-خدذرزسشص PQ1ST.2XY3-DFGHJKLM +14 P4RS5.VX6Z-DFGHJKLM ط4عغ5.جم6و-خدذرزسشص P4RS5.VX6Z-DFGHJKLM +14 7QR8T.V9YZ-DFGHJKLM 7ظع8ف.ج9نو-خدذرزسشص 7QR8T.V9YZ-DFGHJKLM +14 P1R2T.3X4Z-DFGHJKLM ط1ع2ف.3م4و-خدذرزسشص P1R2T.3X4Z-DFGHJKLM +14 5Q6S7.V8Y9-DFGHJKLM 5ظ6غ7.ج8ن9-خدذرزسشص 5Q6S7.V8Y9-DFGHJKLM +14 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM بتحخثدذرازسشصضهطظعغفقجلمنو-خدذرزسشص ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +14 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM بتحخثدذرازسشصضهطظعغفقجلمنو-خدذرزسشص ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +14 OI.XX-DFGHJKLM ها.مم-خدذرزسشص OI.XX-DFGHJKLM +14 OI.XX-DFGHJKLM ها.مم-خدذرزسشص OI.XX-DFGHJKLM +14 OI.XX-OOOOOOOO-DFGHJKLM ها.مم-هههههههه-خدذرزسشص OI.XX-OOOOOOOO-DFGHJKLM +14 OI.XX-IIIIIIII-DFGHJKLM ها.مم-اااااااا-خدذرزسشص OI.XX-IIIIIIII-DFGHJKLM +14 PQ.RS-01234567-DFGHJKLM طظ.49غ-01234567-خدذرزسشص PQ.RS-01234567-DFGHJKLM +14 PQ.RS-890-DFGHJKLM طظ.49غ-890-خدذرزسشص PQ.RS-890-DFGHJKLM +15 89.EU 89.ᅦᅴ 89.EU +15 00.0A 00.0ᄒ 00.0A +15 BCDF.GHJK ᄀᄂ4ᄅ.2ᄇᄉ8ᄐ BCDF.GHJK +15 LMNP.QRST ᅡᅢ6ᅤ.8ᅥᅧ4ᅩ LMNP.QRST +15 VWXY.Z123 ᄌᄎ9ᅭ.1ᅮ102 VWXY.Z123 +15 4567.890B 4567.890ᄀ 4567.890B +15 PQ.XY ᅤᅥ.56ᅭ PQ.XY +15 PQ.XYZ ᅤᅥ.56ᅭᅮ PQ.XYZ +15 PQX.YZ ᅤᅥ.96ᅭᅮ PQX.YZ +15 PQ.RXYZ ᅤᅥ3.ᄏ0ᅭᅮ PQ.RXYZ +15 PQR.XYZ ᅤᅥ6.ᄏ1ᅭᅮ PQR.XYZ +15 PQRX.YZ ᅤᅥ9.ᄏ2ᅭᅮ PQRX.YZ +15 PQR.SXYZ ᅤᅥ4.ᅩᄏ9ᅭᅮ PQR.SXYZ +15 PQRS.XYZ ᅤᅥ8.ᅩᄏ9ᅭᅮ PQRS.XYZ +15 PQRS.TXYZ ᅤᅥ7ᅩ.8ᅲᄏ2ᅭ PQRS.TXYZ +15 PQRST.VXYZ ᅤᅥ7ᅩᅲ.8ᄌᄏ2ᅭ PQRST.VXYZ +15 P1.XY ᅤ1.쿄 P1.XY +15 PQ.2Y ᅤᅥ.2ᅭ PQ.2Y +15 3Q.X4 3ᅥ.ᄏ4 3Q.X4 +15 5Q.6Y 5ᅥ.6ᅭ 5Q.6Y +15 PQ.1YZ ᅤᅥ.23ᅭᅮ PQ.1YZ +15 PQ1.YZ ᅤᅥ1.ᅭᅮ PQ1.YZ +15 P2.X3Z ᅤ2.563ᅮ P2.X3Z +15 P2X.3Z ᅤ2ᄏ.3ᅮ P2X.3Z +15 PQ.1XY2 ᅤᅥ0.ᄏ8ᅭ2 PQ.1XY2 +15 PQ1.XY2 ᅤᅥ1.쿄2 PQ1.XY2 +15 PQ1X.Y2 ᅤᅥ1ᄏ.ᅭ2 PQ1X.Y2 +15 P3.RX4Z ᅤ33.ᄏ04ᅮ P3.RX4Z +15 P3R.X4Z ᅤ3ᅧ.ᄏ4ᅮ P3R.X4Z +15 P3RX.4Z ᅤ3ᅧᄏ.4ᅮ P3RX.4Z +15 5Q.R6Y7 5ᅥ3.60ᅭ7 5Q.R6Y7 +15 5QR.6Y7 5ᅥᅧ.6ᅭ7 5QR.6Y7 +15 5QR6.Y7 5ᅥᅧ6.ᅭ7 5QR6.Y7 +15 PQ1.SX2Z ᅤᅥ2.ᅩᄏ32ᅮ PQ1.SX2Z +15 PQ1S.X2Z ᅤᅥ1ᅩ.ᄏ2ᅮ PQ1S.X2Z +15 P3R.S4YZ ᅤ34.ᅩ49ᅭᅮ P3R.S4YZ +15 P3RS.4YZ ᅤ3ᅧᅩ.4ᅭᅮ P3RS.4YZ +15 5QR.6XY7 5ᅥ4.6ᄏ9ᅭ7 5QR.6XY7 +15 5QR6.XY7 5ᅥᅧ6.쿄7 5QR6.XY7 +15 8Q9.SX0Z 8ᅥ3.ᅩᄏ30ᅮ 8Q9.SX0Z +15 8Q9S.X0Z 8ᅥ9ᅩ.ᄏ0ᅮ 8Q9S.X0Z +15 1QR2.TX3Z 1ᅥᅧ2.ᅲᄏ3ᅮ 1QR2.TX3Z +15 P4RS.5XY6 ᅤ4ᅧᅩ.5쿄6 P4RS.5XY6 +15 P7R8.T9Y0 ᅤ7ᅧ8.ᅲ9ᅭ0 P7R8.T9Y0 +15 PQ1ST.2XY3 ᅤᅥ1ᅩᅲ.2쿄3 PQ1ST.2XY3 +15 P4RS5.VX6Z ᅤ4ᅧᅩ5.ᄌᄏ6ᅮ P4RS5.VX6Z +15 7QR8T.V9YZ 7ᅥᅧ8ᅲ.ᄌ9ᅭᅮ 7QR8T.V9YZ +15 P1R2T.3X4Z ᅤ1ᅧ2ᅲ.3ᄏ4ᅮ P1R2T.3X4Z +15 5Q6S7.V8Y9 5ᅥ6ᅩ7.ᄌ8ᅭ9 5Q6S7.V8Y9 +15 ABCDEFGHIJKLMNOPQRSTUVWXYZ ᄒᄀᄂ데ᄅᄇ시ᄐ파ᅢᅣ얘ᅥᅧᅩᅲᅴᄌᄎ쿄ᅮ ABCDEFGHIJKLMNOPQRSTUVWXYZ +15 ABCDEFGHIJKLMNOPQRSTUVWXYZ ᄒᄀᄂ데ᄅᄇ시ᄐ파ᅢᅣ얘ᅥᅧᅩᅲᅴᄌᄎ쿄ᅮ ABCDEFGHIJKLMNOPQRSTUVWXYZ +15 OI.XX 이.ᄏᄏ OI.XX +15 OI.XX 이.ᄏᄏ OI.XX +15 OI.XX-OOOOOOOO 이.ᄏᄏ-ᄋᄋᄋᄋᄋᄋᄋᄋ OI.XX-OOOOOOOO +15 OI.XX-IIIIIIII 이.ᄏᄏ-ᅵᅵᅵᅵᅵᅵᅵᅵ OI.XX-IIIIIIII +15 PQ.RS-01234567 ᅤᅥ.49ᅩ-01234567 PQ.RS-01234567 +15 PQ.RS-890 ᅤᅥ.49ᅩ-890 PQ.RS-890 +15 89.EU-BC 89.ᅦᅴ-ᄀᄂ 89.EU-BC +15 00.0A-BC 00.0ᄒ-ᄀᄂ 00.0A-BC +15 BCDF.GHJK-BC ᄀᄂ4ᄅ.2ᄇᄉ8ᄐ-ᄀᄂ BCDF.GHJK-BC +15 LMNP.QRST-BC ᅡᅢ6ᅤ.8ᅥᅧ4ᅩ-ᄀᄂ LMNP.QRST-BC +15 VWXY.Z123-BC ᄌᄎ9ᅭ.1ᅮ102-ᄀᄂ VWXY.Z123-BC +15 4567.890B-BC 4567.890ᄀ-ᄀᄂ 4567.890B-BC +15 PQ.XY-BC ᅤᅥ.56ᅭ-ᄀᄂ PQ.XY-BC +15 PQ.XYZ-BC ᅤᅥ.56ᅭᅮ-ᄀᄂ PQ.XYZ-BC +15 PQX.YZ-BC ᅤᅥ.96ᅭᅮ-ᄀᄂ PQX.YZ-BC +15 PQ.RXYZ-BC ᅤᅥ3.ᄏ0ᅭᅮ-ᄀᄂ PQ.RXYZ-BC +15 PQR.XYZ-BC ᅤᅥ6.ᄏ1ᅭᅮ-ᄀᄂ PQR.XYZ-BC +15 PQRX.YZ-BC ᅤᅥ9.ᄏ2ᅭᅮ-ᄀᄂ PQRX.YZ-BC +15 PQR.SXYZ-BC ᅤᅥ4.ᅩᄏ9ᅭᅮ-ᄀᄂ PQR.SXYZ-BC +15 PQRS.XYZ-BC ᅤᅥ8.ᅩᄏ9ᅭᅮ-ᄀᄂ PQRS.XYZ-BC +15 PQRS.TXYZ-BC ᅤᅥ7ᅩ.8ᅲᄏ2ᅭ-ᄀᄂ PQRS.TXYZ-BC +15 PQRST.VXYZ-BC ᅤᅥ7ᅩᅲ.8ᄌᄏ2ᅭ-ᄀᄂ PQRST.VXYZ-BC +15 P1.XY-BC ᅤ1.쿄-ᄀᄂ P1.XY-BC +15 PQ.2Y-BC ᅤᅥ.2ᅭ-ᄀᄂ PQ.2Y-BC +15 3Q.X4-BC 3ᅥ.ᄏ4-ᄀᄂ 3Q.X4-BC +15 5Q.6Y-BC 5ᅥ.6ᅭ-ᄀᄂ 5Q.6Y-BC +15 PQ.1YZ-BC ᅤᅥ.23ᅭᅮ-ᄀᄂ PQ.1YZ-BC +15 PQ1.YZ-BC ᅤᅥ1.ᅭᅮ-ᄀᄂ PQ1.YZ-BC +15 P2.X3Z-BC ᅤ2.563ᅮ-ᄀᄂ P2.X3Z-BC +15 P2X.3Z-BC ᅤ2ᄏ.3ᅮ-ᄀᄂ P2X.3Z-BC +15 PQ.1XY2-BC ᅤᅥ0.ᄏ8ᅭ2-ᄀᄂ PQ.1XY2-BC +15 PQ1.XY2-BC ᅤᅥ1.쿄2-ᄀᄂ PQ1.XY2-BC +15 PQ1X.Y2-BC ᅤᅥ1ᄏ.ᅭ2-ᄀᄂ PQ1X.Y2-BC +15 P3.RX4Z-BC ᅤ33.ᄏ04ᅮ-ᄀᄂ P3.RX4Z-BC +15 P3R.X4Z-BC ᅤ3ᅧ.ᄏ4ᅮ-ᄀᄂ P3R.X4Z-BC +15 P3RX.4Z-BC ᅤ3ᅧᄏ.4ᅮ-ᄀᄂ P3RX.4Z-BC +15 5Q.R6Y7-BC 5ᅥ3.60ᅭ7-ᄀᄂ 5Q.R6Y7-BC +15 5QR.6Y7-BC 5ᅥᅧ.6ᅭ7-ᄀᄂ 5QR.6Y7-BC +15 5QR6.Y7-BC 5ᅥᅧ6.ᅭ7-ᄀᄂ 5QR6.Y7-BC +15 PQ1.SX2Z-BC ᅤᅥ2.ᅩᄏ32ᅮ-ᄀᄂ PQ1.SX2Z-BC +15 PQ1S.X2Z-BC ᅤᅥ1ᅩ.ᄏ2ᅮ-ᄀᄂ PQ1S.X2Z-BC +15 P3R.S4YZ-BC ᅤ34.ᅩ49ᅭᅮ-ᄀᄂ P3R.S4YZ-BC +15 P3RS.4YZ-BC ᅤ3ᅧᅩ.4ᅭᅮ-ᄀᄂ P3RS.4YZ-BC +15 5QR.6XY7-BC 5ᅥ4.6ᄏ9ᅭ7-ᄀᄂ 5QR.6XY7-BC +15 5QR6.XY7-BC 5ᅥᅧ6.쿄7-ᄀᄂ 5QR6.XY7-BC +15 8Q9.SX0Z-BC 8ᅥ3.ᅩᄏ30ᅮ-ᄀᄂ 8Q9.SX0Z-BC +15 8Q9S.X0Z-BC 8ᅥ9ᅩ.ᄏ0ᅮ-ᄀᄂ 8Q9S.X0Z-BC +15 1QR2.TX3Z-BC 1ᅥᅧ2.ᅲᄏ3ᅮ-ᄀᄂ 1QR2.TX3Z-BC +15 P4RS.5XY6-BC ᅤ4ᅧᅩ.5쿄6-ᄀᄂ P4RS.5XY6-BC +15 P7R8.T9Y0-BC ᅤ7ᅧ8.ᅲ9ᅭ0-ᄀᄂ P7R8.T9Y0-BC +15 PQ1ST.2XY3-BC ᅤᅥ1ᅩᅲ.2쿄3-ᄀᄂ PQ1ST.2XY3-BC +15 P4RS5.VX6Z-BC ᅤ4ᅧᅩ5.ᄌᄏ6ᅮ-ᄀᄂ P4RS5.VX6Z-BC +15 7QR8T.V9YZ-BC 7ᅥᅧ8ᅲ.ᄌ9ᅭᅮ-ᄀᄂ 7QR8T.V9YZ-BC +15 P1R2T.3X4Z-BC ᅤ1ᅧ2ᅲ.3ᄏ4ᅮ-ᄀᄂ P1R2T.3X4Z-BC +15 5Q6S7.V8Y9-BC 5ᅥ6ᅩ7.ᄌ8ᅭ9-ᄀᄂ 5Q6S7.V8Y9-BC +15 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ᄒᄀᄂ데ᄅᄇ시ᄐ파ᅢᅣ얘ᅥᅧᅩᅲᅴᄌᄎ쿄ᅮ-ᄀᄂ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +15 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ᄒᄀᄂ데ᄅᄇ시ᄐ파ᅢᅣ얘ᅥᅧᅩᅲᅴᄌᄎ쿄ᅮ-ᄀᄂ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +15 OI.XX-BC 이.ᄏᄏ-ᄀᄂ OI.XX-BC +15 OI.XX-BC 이.ᄏᄏ-ᄀᄂ OI.XX-BC +15 OI.XX-OOOOOOOO-BC 이.ᄏᄏ-ᄋᄋᄋᄋᄋᄋᄋᄋ-ᄀᄂ OI.XX-OOOOOOOO-BC +15 OI.XX-IIIIIIII-BC 이.ᄏᄏ-ᅵᅵᅵᅵᅵᅵᅵᅵ-ᄀᄂ OI.XX-IIIIIIII-BC +15 PQ.RS-01234567-BC ᅤᅥ.49ᅩ-01234567-ᄀᄂ PQ.RS-01234567-BC +15 PQ.RS-890-BC ᅤᅥ.49ᅩ-890-ᄀᄂ PQ.RS-890-BC +15 89.EU-DFGHJKLM 89.ᅦᅴ-ᄃᄅᄇᄉᄐ파ᅢ 89.EU-DFGHJKLM +15 00.0A-DFGHJKLM 00.0ᄒ-ᄃᄅᄇᄉᄐ파ᅢ 00.0A-DFGHJKLM +15 BCDF.GHJK-DFGHJKLM ᄀᄂ4ᄅ.2ᄇᄉ8ᄐ-ᄃᄅᄇᄉᄐ파ᅢ BCDF.GHJK-DFGHJKLM +15 LMNP.QRST-DFGHJKLM ᅡᅢ6ᅤ.8ᅥᅧ4ᅩ-ᄃᄅᄇᄉᄐ파ᅢ LMNP.QRST-DFGHJKLM +15 VWXY.Z123-DFGHJKLM ᄌᄎ9ᅭ.1ᅮ102-ᄃᄅᄇᄉᄐ파ᅢ VWXY.Z123-DFGHJKLM +15 4567.890B-DFGHJKLM 4567.890ᄀ-ᄃᄅᄇᄉᄐ파ᅢ 4567.890B-DFGHJKLM +15 PQ.XY-DFGHJKLM ᅤᅥ.56ᅭ-ᄃᄅᄇᄉᄐ파ᅢ PQ.XY-DFGHJKLM +15 PQ.XYZ-DFGHJKLM ᅤᅥ.56ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQ.XYZ-DFGHJKLM +15 PQX.YZ-DFGHJKLM ᅤᅥ.96ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQX.YZ-DFGHJKLM +15 PQ.RXYZ-DFGHJKLM ᅤᅥ3.ᄏ0ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQ.RXYZ-DFGHJKLM +15 PQR.XYZ-DFGHJKLM ᅤᅥ6.ᄏ1ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQR.XYZ-DFGHJKLM +15 PQRX.YZ-DFGHJKLM ᅤᅥ9.ᄏ2ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQRX.YZ-DFGHJKLM +15 PQR.SXYZ-DFGHJKLM ᅤᅥ4.ᅩᄏ9ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQR.SXYZ-DFGHJKLM +15 PQRS.XYZ-DFGHJKLM ᅤᅥ8.ᅩᄏ9ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQRS.XYZ-DFGHJKLM +15 PQRS.TXYZ-DFGHJKLM ᅤᅥ7ᅩ.8ᅲᄏ2ᅭ-ᄃᄅᄇᄉᄐ파ᅢ PQRS.TXYZ-DFGHJKLM +15 PQRST.VXYZ-DFGHJKLM ᅤᅥ7ᅩᅲ.8ᄌᄏ2ᅭ-ᄃᄅᄇᄉᄐ파ᅢ PQRST.VXYZ-DFGHJKLM +15 P1.XY-DFGHJKLM ᅤ1.쿄-ᄃᄅᄇᄉᄐ파ᅢ P1.XY-DFGHJKLM +15 PQ.2Y-DFGHJKLM ᅤᅥ.2ᅭ-ᄃᄅᄇᄉᄐ파ᅢ PQ.2Y-DFGHJKLM +15 3Q.X4-DFGHJKLM 3ᅥ.ᄏ4-ᄃᄅᄇᄉᄐ파ᅢ 3Q.X4-DFGHJKLM +15 5Q.6Y-DFGHJKLM 5ᅥ.6ᅭ-ᄃᄅᄇᄉᄐ파ᅢ 5Q.6Y-DFGHJKLM +15 PQ.1YZ-DFGHJKLM ᅤᅥ.23ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQ.1YZ-DFGHJKLM +15 PQ1.YZ-DFGHJKLM ᅤᅥ1.ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQ1.YZ-DFGHJKLM +15 P2.X3Z-DFGHJKLM ᅤ2.563ᅮ-ᄃᄅᄇᄉᄐ파ᅢ P2.X3Z-DFGHJKLM +15 P2X.3Z-DFGHJKLM ᅤ2ᄏ.3ᅮ-ᄃᄅᄇᄉᄐ파ᅢ P2X.3Z-DFGHJKLM +15 PQ.1XY2-DFGHJKLM ᅤᅥ0.ᄏ8ᅭ2-ᄃᄅᄇᄉᄐ파ᅢ PQ.1XY2-DFGHJKLM +15 PQ1.XY2-DFGHJKLM ᅤᅥ1.쿄2-ᄃᄅᄇᄉᄐ파ᅢ PQ1.XY2-DFGHJKLM +15 PQ1X.Y2-DFGHJKLM ᅤᅥ1ᄏ.ᅭ2-ᄃᄅᄇᄉᄐ파ᅢ PQ1X.Y2-DFGHJKLM +15 P3.RX4Z-DFGHJKLM ᅤ33.ᄏ04ᅮ-ᄃᄅᄇᄉᄐ파ᅢ P3.RX4Z-DFGHJKLM +15 P3R.X4Z-DFGHJKLM ᅤ3ᅧ.ᄏ4ᅮ-ᄃᄅᄇᄉᄐ파ᅢ P3R.X4Z-DFGHJKLM +15 P3RX.4Z-DFGHJKLM ᅤ3ᅧᄏ.4ᅮ-ᄃᄅᄇᄉᄐ파ᅢ P3RX.4Z-DFGHJKLM +15 5Q.R6Y7-DFGHJKLM 5ᅥ3.60ᅭ7-ᄃᄅᄇᄉᄐ파ᅢ 5Q.R6Y7-DFGHJKLM +15 5QR.6Y7-DFGHJKLM 5ᅥᅧ.6ᅭ7-ᄃᄅᄇᄉᄐ파ᅢ 5QR.6Y7-DFGHJKLM +15 5QR6.Y7-DFGHJKLM 5ᅥᅧ6.ᅭ7-ᄃᄅᄇᄉᄐ파ᅢ 5QR6.Y7-DFGHJKLM +15 PQ1.SX2Z-DFGHJKLM ᅤᅥ2.ᅩᄏ32ᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQ1.SX2Z-DFGHJKLM +15 PQ1S.X2Z-DFGHJKLM ᅤᅥ1ᅩ.ᄏ2ᅮ-ᄃᄅᄇᄉᄐ파ᅢ PQ1S.X2Z-DFGHJKLM +15 P3R.S4YZ-DFGHJKLM ᅤ34.ᅩ49ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ P3R.S4YZ-DFGHJKLM +15 P3RS.4YZ-DFGHJKLM ᅤ3ᅧᅩ.4ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ P3RS.4YZ-DFGHJKLM +15 5QR.6XY7-DFGHJKLM 5ᅥ4.6ᄏ9ᅭ7-ᄃᄅᄇᄉᄐ파ᅢ 5QR.6XY7-DFGHJKLM +15 5QR6.XY7-DFGHJKLM 5ᅥᅧ6.쿄7-ᄃᄅᄇᄉᄐ파ᅢ 5QR6.XY7-DFGHJKLM +15 8Q9.SX0Z-DFGHJKLM 8ᅥ3.ᅩᄏ30ᅮ-ᄃᄅᄇᄉᄐ파ᅢ 8Q9.SX0Z-DFGHJKLM +15 8Q9S.X0Z-DFGHJKLM 8ᅥ9ᅩ.ᄏ0ᅮ-ᄃᄅᄇᄉᄐ파ᅢ 8Q9S.X0Z-DFGHJKLM +15 1QR2.TX3Z-DFGHJKLM 1ᅥᅧ2.ᅲᄏ3ᅮ-ᄃᄅᄇᄉᄐ파ᅢ 1QR2.TX3Z-DFGHJKLM +15 P4RS.5XY6-DFGHJKLM ᅤ4ᅧᅩ.5쿄6-ᄃᄅᄇᄉᄐ파ᅢ P4RS.5XY6-DFGHJKLM +15 P7R8.T9Y0-DFGHJKLM ᅤ7ᅧ8.ᅲ9ᅭ0-ᄃᄅᄇᄉᄐ파ᅢ P7R8.T9Y0-DFGHJKLM +15 PQ1ST.2XY3-DFGHJKLM ᅤᅥ1ᅩᅲ.2쿄3-ᄃᄅᄇᄉᄐ파ᅢ PQ1ST.2XY3-DFGHJKLM +15 P4RS5.VX6Z-DFGHJKLM ᅤ4ᅧᅩ5.ᄌᄏ6ᅮ-ᄃᄅᄇᄉᄐ파ᅢ P4RS5.VX6Z-DFGHJKLM +15 7QR8T.V9YZ-DFGHJKLM 7ᅥᅧ8ᅲ.ᄌ9ᅭᅮ-ᄃᄅᄇᄉᄐ파ᅢ 7QR8T.V9YZ-DFGHJKLM +15 P1R2T.3X4Z-DFGHJKLM ᅤ1ᅧ2ᅲ.3ᄏ4ᅮ-ᄃᄅᄇᄉᄐ파ᅢ P1R2T.3X4Z-DFGHJKLM +15 5Q6S7.V8Y9-DFGHJKLM 5ᅥ6ᅩ7.ᄌ8ᅭ9-ᄃᄅᄇᄉᄐ파ᅢ 5Q6S7.V8Y9-DFGHJKLM +15 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ᄒᄀᄂ데ᄅᄇ시ᄐ파ᅢᅣ얘ᅥᅧᅩᅲᅴᄌᄎ쿄ᅮ-ᄃᄅᄇᄉᄐ파ᅢ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +15 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ᄒᄀᄂ데ᄅᄇ시ᄐ파ᅢᅣ얘ᅥᅧᅩᅲᅴᄌᄎ쿄ᅮ-ᄃᄅᄇᄉᄐ파ᅢ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +15 OI.XX-DFGHJKLM 이.ᄏᄏ-ᄃᄅᄇᄉᄐ파ᅢ OI.XX-DFGHJKLM +15 OI.XX-DFGHJKLM 이.ᄏᄏ-ᄃᄅᄇᄉᄐ파ᅢ OI.XX-DFGHJKLM +15 OI.XX-OOOOOOOO-DFGHJKLM 이.ᄏᄏ-ᄋᄋᄋᄋᄋᄋᄋᄋ-ᄃᄅᄇᄉᄐ파ᅢ OI.XX-OOOOOOOO-DFGHJKLM +15 OI.XX-IIIIIIII-DFGHJKLM 이.ᄏᄏ-ᅵᅵᅵᅵᅵᅵᅵᅵ-ᄃᄅᄇᄉᄐ파ᅢ OI.XX-IIIIIIII-DFGHJKLM +15 PQ.RS-01234567-DFGHJKLM ᅤᅥ.49ᅩ-01234567-ᄃᄅᄇᄉᄐ파ᅢ PQ.RS-01234567-DFGHJKLM +15 PQ.RS-890-DFGHJKLM ᅤᅥ.49ᅩ-890-ᄃᄅᄇᄉᄐ파ᅢ PQ.RS-890-DFGHJKLM +16 89.EU ၈၉.ဓဖ 89.EU +16 00.0A ၀၀.၀စ 00.0A +16 BCDF.GHJK ကခဂဃ.ငယဇဌ BCDF.GHJK +16 LMNP.QRST ဍဎတထ.ဒသနပ LMNP.QRST +16 VWXY.Z123 ဟဗဘဏ.လ၁၂၃ VWXY.Z123 +16 4567.890B ၄၅၆၇.၈၉၀က 4567.890B +16 PQ.XY ထဒ.ဘဏ PQ.XY +16 PQ.XYZ ထဒ.ဘဏလ PQ.XYZ +16 PQX.YZ ထဒဘ.ဏလ PQX.YZ +16 PQ.RXYZ ထဒ.သဘဏလ PQ.RXYZ +16 PQR.XYZ ထဒသ.ဘဏလ PQR.XYZ +16 PQRX.YZ ထဒသဘ.ဏလ PQRX.YZ +16 PQR.SXYZ ထဒသ.နဘဏလ PQR.SXYZ +16 PQRS.XYZ ထဒသန.ဘဏလ PQRS.XYZ +16 PQRS.TXYZ ထဒသန.ပဘဏလ PQRS.TXYZ +16 PQRST.VXYZ ထဒသနပ.ဟဘဏလ PQRST.VXYZ +16 P1.XY ထ၁.ဘဏ P1.XY +16 PQ.2Y ထဒ.၂ဏ PQ.2Y +16 3Q.X4 ၃ဒ.ဘ၄ 3Q.X4 +16 5Q.6Y ၅ဒ.၆ဏ 5Q.6Y +16 PQ.1YZ ထဒ.၁ဏလ PQ.1YZ +16 PQ1.YZ ထဒ၁.ဏလ PQ1.YZ +16 P2.X3Z ထ၂.ဘ၃လ P2.X3Z +16 P2X.3Z ထ၂ဘ.၃လ P2X.3Z +16 PQ.1XY2 ထဒ.၁ဘဏ၂ PQ.1XY2 +16 PQ1.XY2 ထဒ၁.ဘဏ၂ PQ1.XY2 +16 PQ1X.Y2 ထဒ၁ဘ.ဏ၂ PQ1X.Y2 +16 P3.RX4Z ထ၃.သဘ၄လ P3.RX4Z +16 P3R.X4Z ထ၃သ.ဘ၄လ P3R.X4Z +16 P3RX.4Z ထ၃သဘ.၄လ P3RX.4Z +16 5Q.R6Y7 ၅ဒ.သ၆ဏ၇ 5Q.R6Y7 +16 5QR.6Y7 ၅ဒသ.၆ဏ၇ 5QR.6Y7 +16 5QR6.Y7 ၅ဒသ၆.ဏ၇ 5QR6.Y7 +16 PQ1.SX2Z ထဒ၁.နဘ၂လ PQ1.SX2Z +16 PQ1S.X2Z ထဒ၁န.ဘ၂လ PQ1S.X2Z +16 P3R.S4YZ ထ၃သ.န၄ဏလ P3R.S4YZ +16 P3RS.4YZ ထ၃သန.၄ဏလ P3RS.4YZ +16 5QR.6XY7 ၅ဒသ.၆ဘဏ၇ 5QR.6XY7 +16 5QR6.XY7 ၅ဒသ၆.ဘဏ၇ 5QR6.XY7 +16 8Q9.SX0Z ၈ဒ၉.နဘ၀လ 8Q9.SX0Z +16 8Q9S.X0Z ၈ဒ၉န.ဘ၀လ 8Q9S.X0Z +16 1QR2.TX3Z ၁ဒသ၂.ပဘ၃လ 1QR2.TX3Z +16 P4RS.5XY6 ထ၄သန.၅ဘဏ၆ P4RS.5XY6 +16 P7R8.T9Y0 ထ၇သ၈.ပ၉ဏ၀ P7R8.T9Y0 +16 PQ1ST.2XY3 ထဒ၁နပ.၂ဘဏ၃ PQ1ST.2XY3 +16 P4RS5.VX6Z ထ၄သန၅.ဟဘ၆လ P4RS5.VX6Z +16 7QR8T.V9YZ ၇ဒသ၈ပ.ဟ၉ဏလ 7QR8T.V9YZ +16 P1R2T.3X4Z ထ၁သ၂ပ.၃ဘ၄လ P1R2T.3X4Z +16 5Q6S7.V8Y9 ၅ဒ၆န၇.ဟ၈ဏ၉ 5Q6S7.V8Y9 +16 ABCDEFGHIJKLMNOPQRSTUVWXYZ စကခဂဓဃငယIဇဌဍဎတဝထဒသနပဖဟဗဘဏလ ABCDEFGHIJKLMNOPQRSTUVWXYZ +16 ABCDEFGHIJKLMNOPQRSTUVWXYZ စကခဂဓဃငယIဇဌဍဎတဝထဒသနပဖဟဗဘဏလ ABCDEFGHIJKLMNOPQRSTUVWXYZ +16 OI.XX ဝI.ဘဘ OI.XX +16 OI.XX ဝI.ဘဘ OI.XX +16 OI.XX-OOOOOOOO ဝI.ဘဘ-ဝဝဝဝဝဝဝဝ OI.XX-OOOOOOOO +16 OI.XX-IIIIIIII ဝI.ဘဘ-IIIIIIII OI.XX-IIIIIIII +16 PQ.RS-01234567 ထဒ.သန-၀၁၂၃၄၅၆၇ PQ.RS-01234567 +16 PQ.RS-890 ထဒ.သန-၈၉၀ PQ.RS-890 +16 89.EU-BC ၈၉.ဓဖ-ကခ 89.EU-BC +16 00.0A-BC ၀၀.၀စ-ကခ 00.0A-BC +16 BCDF.GHJK-BC ကခဂဃ.ငယဇဌ-ကခ BCDF.GHJK-BC +16 LMNP.QRST-BC ဍဎတထ.ဒသနပ-ကခ LMNP.QRST-BC +16 VWXY.Z123-BC ဟဗဘဏ.လ၁၂၃-ကခ VWXY.Z123-BC +16 4567.890B-BC ၄၅၆၇.၈၉၀က-ကခ 4567.890B-BC +16 PQ.XY-BC ထဒ.ဘဏ-ကခ PQ.XY-BC +16 PQ.XYZ-BC ထဒ.ဘဏလ-ကခ PQ.XYZ-BC +16 PQX.YZ-BC ထဒဘ.ဏလ-ကခ PQX.YZ-BC +16 PQ.RXYZ-BC ထဒ.သဘဏလ-ကခ PQ.RXYZ-BC +16 PQR.XYZ-BC ထဒသ.ဘဏလ-ကခ PQR.XYZ-BC +16 PQRX.YZ-BC ထဒသဘ.ဏလ-ကခ PQRX.YZ-BC +16 PQR.SXYZ-BC ထဒသ.နဘဏလ-ကခ PQR.SXYZ-BC +16 PQRS.XYZ-BC ထဒသန.ဘဏလ-ကခ PQRS.XYZ-BC +16 PQRS.TXYZ-BC ထဒသန.ပဘဏလ-ကခ PQRS.TXYZ-BC +16 PQRST.VXYZ-BC ထဒသနပ.ဟဘဏလ-ကခ PQRST.VXYZ-BC +16 P1.XY-BC ထ၁.ဘဏ-ကခ P1.XY-BC +16 PQ.2Y-BC ထဒ.၂ဏ-ကခ PQ.2Y-BC +16 3Q.X4-BC ၃ဒ.ဘ၄-ကခ 3Q.X4-BC +16 5Q.6Y-BC ၅ဒ.၆ဏ-ကခ 5Q.6Y-BC +16 PQ.1YZ-BC ထဒ.၁ဏလ-ကခ PQ.1YZ-BC +16 PQ1.YZ-BC ထဒ၁.ဏလ-ကခ PQ1.YZ-BC +16 P2.X3Z-BC ထ၂.ဘ၃လ-ကခ P2.X3Z-BC +16 P2X.3Z-BC ထ၂ဘ.၃လ-ကခ P2X.3Z-BC +16 PQ.1XY2-BC ထဒ.၁ဘဏ၂-ကခ PQ.1XY2-BC +16 PQ1.XY2-BC ထဒ၁.ဘဏ၂-ကခ PQ1.XY2-BC +16 PQ1X.Y2-BC ထဒ၁ဘ.ဏ၂-ကခ PQ1X.Y2-BC +16 P3.RX4Z-BC ထ၃.သဘ၄လ-ကခ P3.RX4Z-BC +16 P3R.X4Z-BC ထ၃သ.ဘ၄လ-ကခ P3R.X4Z-BC +16 P3RX.4Z-BC ထ၃သဘ.၄လ-ကခ P3RX.4Z-BC +16 5Q.R6Y7-BC ၅ဒ.သ၆ဏ၇-ကခ 5Q.R6Y7-BC +16 5QR.6Y7-BC ၅ဒသ.၆ဏ၇-ကခ 5QR.6Y7-BC +16 5QR6.Y7-BC ၅ဒသ၆.ဏ၇-ကခ 5QR6.Y7-BC +16 PQ1.SX2Z-BC ထဒ၁.နဘ၂လ-ကခ PQ1.SX2Z-BC +16 PQ1S.X2Z-BC ထဒ၁န.ဘ၂လ-ကခ PQ1S.X2Z-BC +16 P3R.S4YZ-BC ထ၃သ.န၄ဏလ-ကခ P3R.S4YZ-BC +16 P3RS.4YZ-BC ထ၃သန.၄ဏလ-ကခ P3RS.4YZ-BC +16 5QR.6XY7-BC ၅ဒသ.၆ဘဏ၇-ကခ 5QR.6XY7-BC +16 5QR6.XY7-BC ၅ဒသ၆.ဘဏ၇-ကခ 5QR6.XY7-BC +16 8Q9.SX0Z-BC ၈ဒ၉.နဘ၀လ-ကခ 8Q9.SX0Z-BC +16 8Q9S.X0Z-BC ၈ဒ၉န.ဘ၀လ-ကခ 8Q9S.X0Z-BC +16 1QR2.TX3Z-BC ၁ဒသ၂.ပဘ၃လ-ကခ 1QR2.TX3Z-BC +16 P4RS.5XY6-BC ထ၄သန.၅ဘဏ၆-ကခ P4RS.5XY6-BC +16 P7R8.T9Y0-BC ထ၇သ၈.ပ၉ဏ၀-ကခ P7R8.T9Y0-BC +16 PQ1ST.2XY3-BC ထဒ၁နပ.၂ဘဏ၃-ကခ PQ1ST.2XY3-BC +16 P4RS5.VX6Z-BC ထ၄သန၅.ဟဘ၆လ-ကခ P4RS5.VX6Z-BC +16 7QR8T.V9YZ-BC ၇ဒသ၈ပ.ဟ၉ဏလ-ကခ 7QR8T.V9YZ-BC +16 P1R2T.3X4Z-BC ထ၁သ၂ပ.၃ဘ၄လ-ကခ P1R2T.3X4Z-BC +16 5Q6S7.V8Y9-BC ၅ဒ၆န၇.ဟ၈ဏ၉-ကခ 5Q6S7.V8Y9-BC +16 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC စကခဂဓဃငယIဇဌဍဎတဝထဒသနပဖဟဗဘဏလ-ကခ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +16 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC စကခဂဓဃငယIဇဌဍဎတဝထဒသနပဖဟဗဘဏလ-ကခ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +16 OI.XX-BC ဝI.ဘဘ-ကခ OI.XX-BC +16 OI.XX-BC ဝI.ဘဘ-ကခ OI.XX-BC +16 OI.XX-OOOOOOOO-BC ဝI.ဘဘ-ဝဝဝဝဝဝဝဝ-ကခ OI.XX-OOOOOOOO-BC +16 OI.XX-IIIIIIII-BC ဝI.ဘဘ-IIIIIIII-ကခ OI.XX-IIIIIIII-BC +16 PQ.RS-01234567-BC ထဒ.သန-၀၁၂၃၄၅၆၇-ကခ PQ.RS-01234567-BC +16 PQ.RS-890-BC ထဒ.သန-၈၉၀-ကခ PQ.RS-890-BC +16 89.EU-DFGHJKLM ၈၉.ဓဖ-ဂဃငယဇဌဍဎ 89.EU-DFGHJKLM +16 00.0A-DFGHJKLM ၀၀.၀စ-ဂဃငယဇဌဍဎ 00.0A-DFGHJKLM +16 BCDF.GHJK-DFGHJKLM ကခဂဃ.ငယဇဌ-ဂဃငယဇဌဍဎ BCDF.GHJK-DFGHJKLM +16 LMNP.QRST-DFGHJKLM ဍဎတထ.ဒသနပ-ဂဃငယဇဌဍဎ LMNP.QRST-DFGHJKLM +16 VWXY.Z123-DFGHJKLM ဟဗဘဏ.လ၁၂၃-ဂဃငယဇဌဍဎ VWXY.Z123-DFGHJKLM +16 4567.890B-DFGHJKLM ၄၅၆၇.၈၉၀က-ဂဃငယဇဌဍဎ 4567.890B-DFGHJKLM +16 PQ.XY-DFGHJKLM ထဒ.ဘဏ-ဂဃငယဇဌဍဎ PQ.XY-DFGHJKLM +16 PQ.XYZ-DFGHJKLM ထဒ.ဘဏလ-ဂဃငယဇဌဍဎ PQ.XYZ-DFGHJKLM +16 PQX.YZ-DFGHJKLM ထဒဘ.ဏလ-ဂဃငယဇဌဍဎ PQX.YZ-DFGHJKLM +16 PQ.RXYZ-DFGHJKLM ထဒ.သဘဏလ-ဂဃငယဇဌဍဎ PQ.RXYZ-DFGHJKLM +16 PQR.XYZ-DFGHJKLM ထဒသ.ဘဏလ-ဂဃငယဇဌဍဎ PQR.XYZ-DFGHJKLM +16 PQRX.YZ-DFGHJKLM ထဒသဘ.ဏလ-ဂဃငယဇဌဍဎ PQRX.YZ-DFGHJKLM +16 PQR.SXYZ-DFGHJKLM ထဒသ.နဘဏလ-ဂဃငယဇဌဍဎ PQR.SXYZ-DFGHJKLM +16 PQRS.XYZ-DFGHJKLM ထဒသန.ဘဏလ-ဂဃငယဇဌဍဎ PQRS.XYZ-DFGHJKLM +16 PQRS.TXYZ-DFGHJKLM ထဒသန.ပဘဏလ-ဂဃငယဇဌဍဎ PQRS.TXYZ-DFGHJKLM +16 PQRST.VXYZ-DFGHJKLM ထဒသနပ.ဟဘဏလ-ဂဃငယဇဌဍဎ PQRST.VXYZ-DFGHJKLM +16 P1.XY-DFGHJKLM ထ၁.ဘဏ-ဂဃငယဇဌဍဎ P1.XY-DFGHJKLM +16 PQ.2Y-DFGHJKLM ထဒ.၂ဏ-ဂဃငယဇဌဍဎ PQ.2Y-DFGHJKLM +16 3Q.X4-DFGHJKLM ၃ဒ.ဘ၄-ဂဃငယဇဌဍဎ 3Q.X4-DFGHJKLM +16 5Q.6Y-DFGHJKLM ၅ဒ.၆ဏ-ဂဃငယဇဌဍဎ 5Q.6Y-DFGHJKLM +16 PQ.1YZ-DFGHJKLM ထဒ.၁ဏလ-ဂဃငယဇဌဍဎ PQ.1YZ-DFGHJKLM +16 PQ1.YZ-DFGHJKLM ထဒ၁.ဏလ-ဂဃငယဇဌဍဎ PQ1.YZ-DFGHJKLM +16 P2.X3Z-DFGHJKLM ထ၂.ဘ၃လ-ဂဃငယဇဌဍဎ P2.X3Z-DFGHJKLM +16 P2X.3Z-DFGHJKLM ထ၂ဘ.၃လ-ဂဃငယဇဌဍဎ P2X.3Z-DFGHJKLM +16 PQ.1XY2-DFGHJKLM ထဒ.၁ဘဏ၂-ဂဃငယဇဌဍဎ PQ.1XY2-DFGHJKLM +16 PQ1.XY2-DFGHJKLM ထဒ၁.ဘဏ၂-ဂဃငယဇဌဍဎ PQ1.XY2-DFGHJKLM +16 PQ1X.Y2-DFGHJKLM ထဒ၁ဘ.ဏ၂-ဂဃငယဇဌဍဎ PQ1X.Y2-DFGHJKLM +16 P3.RX4Z-DFGHJKLM ထ၃.သဘ၄လ-ဂဃငယဇဌဍဎ P3.RX4Z-DFGHJKLM +16 P3R.X4Z-DFGHJKLM ထ၃သ.ဘ၄လ-ဂဃငယဇဌဍဎ P3R.X4Z-DFGHJKLM +16 P3RX.4Z-DFGHJKLM ထ၃သဘ.၄လ-ဂဃငယဇဌဍဎ P3RX.4Z-DFGHJKLM +16 5Q.R6Y7-DFGHJKLM ၅ဒ.သ၆ဏ၇-ဂဃငယဇဌဍဎ 5Q.R6Y7-DFGHJKLM +16 5QR.6Y7-DFGHJKLM ၅ဒသ.၆ဏ၇-ဂဃငယဇဌဍဎ 5QR.6Y7-DFGHJKLM +16 5QR6.Y7-DFGHJKLM ၅ဒသ၆.ဏ၇-ဂဃငယဇဌဍဎ 5QR6.Y7-DFGHJKLM +16 PQ1.SX2Z-DFGHJKLM ထဒ၁.နဘ၂လ-ဂဃငယဇဌဍဎ PQ1.SX2Z-DFGHJKLM +16 PQ1S.X2Z-DFGHJKLM ထဒ၁န.ဘ၂လ-ဂဃငယဇဌဍဎ PQ1S.X2Z-DFGHJKLM +16 P3R.S4YZ-DFGHJKLM ထ၃သ.န၄ဏလ-ဂဃငယဇဌဍဎ P3R.S4YZ-DFGHJKLM +16 P3RS.4YZ-DFGHJKLM ထ၃သန.၄ဏလ-ဂဃငယဇဌဍဎ P3RS.4YZ-DFGHJKLM +16 5QR.6XY7-DFGHJKLM ၅ဒသ.၆ဘဏ၇-ဂဃငယဇဌဍဎ 5QR.6XY7-DFGHJKLM +16 5QR6.XY7-DFGHJKLM ၅ဒသ၆.ဘဏ၇-ဂဃငယဇဌဍဎ 5QR6.XY7-DFGHJKLM +16 8Q9.SX0Z-DFGHJKLM ၈ဒ၉.နဘ၀လ-ဂဃငယဇဌဍဎ 8Q9.SX0Z-DFGHJKLM +16 8Q9S.X0Z-DFGHJKLM ၈ဒ၉န.ဘ၀လ-ဂဃငယဇဌဍဎ 8Q9S.X0Z-DFGHJKLM +16 1QR2.TX3Z-DFGHJKLM ၁ဒသ၂.ပဘ၃လ-ဂဃငယဇဌဍဎ 1QR2.TX3Z-DFGHJKLM +16 P4RS.5XY6-DFGHJKLM ထ၄သန.၅ဘဏ၆-ဂဃငယဇဌဍဎ P4RS.5XY6-DFGHJKLM +16 P7R8.T9Y0-DFGHJKLM ထ၇သ၈.ပ၉ဏ၀-ဂဃငယဇဌဍဎ P7R8.T9Y0-DFGHJKLM +16 PQ1ST.2XY3-DFGHJKLM ထဒ၁နပ.၂ဘဏ၃-ဂဃငယဇဌဍဎ PQ1ST.2XY3-DFGHJKLM +16 P4RS5.VX6Z-DFGHJKLM ထ၄သန၅.ဟဘ၆လ-ဂဃငယဇဌဍဎ P4RS5.VX6Z-DFGHJKLM +16 7QR8T.V9YZ-DFGHJKLM ၇ဒသ၈ပ.ဟ၉ဏလ-ဂဃငယဇဌဍဎ 7QR8T.V9YZ-DFGHJKLM +16 P1R2T.3X4Z-DFGHJKLM ထ၁သ၂ပ.၃ဘ၄လ-ဂဃငယဇဌဍဎ P1R2T.3X4Z-DFGHJKLM +16 5Q6S7.V8Y9-DFGHJKLM ၅ဒ၆န၇.ဟ၈ဏ၉-ဂဃငယဇဌဍဎ 5Q6S7.V8Y9-DFGHJKLM +16 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM စကခဂဓဃငယIဇဌဍဎတဝထဒသနပဖဟဗဘဏလ-ဂဃငယဇဌဍဎ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +16 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM စကခဂဓဃငယIဇဌဍဎတဝထဒသနပဖဟဗဘဏလ-ဂဃငယဇဌဍဎ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +16 OI.XX-DFGHJKLM ဝI.ဘဘ-ဂဃငယဇဌဍဎ OI.XX-DFGHJKLM +16 OI.XX-DFGHJKLM ဝI.ဘဘ-ဂဃငယဇဌဍဎ OI.XX-DFGHJKLM +16 OI.XX-OOOOOOOO-DFGHJKLM ဝI.ဘဘ-ဝဝဝဝဝဝဝဝ-ဂဃငယဇဌဍဎ OI.XX-OOOOOOOO-DFGHJKLM +16 OI.XX-IIIIIIII-DFGHJKLM ဝI.ဘဘ-IIIIIIII-ဂဃငယဇဌဍဎ OI.XX-IIIIIIII-DFGHJKLM +16 PQ.RS-01234567-DFGHJKLM ထဒ.သန-၀၁၂၃၄၅၆၇-ဂဃငယဇဌဍဎ PQ.RS-01234567-DFGHJKLM +16 PQ.RS-890-DFGHJKLM ထဒ.သန-၈၉၀-ဂဃငယဇဌဍဎ PQ.RS-890-DFGHJKLM +17 89.EU ៨៩.ចស 89.EU +17 00.0A ០០.០ញ 00.0A +17 BCDF.GHJK កខគឃ.ងជឈដ BCDF.GHJK +17 LMNP.QRST ឌឍណទ.ធនបផ LMNP.QRST +17 VWXY.Z123 ពមលហ.អ១២៣ VWXY.Z123 +17 4567.890B ៤៥៦៧.៨៩០ក 4567.890B +17 PQ.XY ទធ.លហ PQ.XY +17 PQ.XYZ ទធ.លហអ PQ.XYZ +17 PQX.YZ ទធល.ហអ PQX.YZ +17 PQ.RXYZ ទធ.នលហអ PQ.RXYZ +17 PQR.XYZ ទធន.លហអ PQR.XYZ +17 PQRX.YZ ទធនល.ហអ PQRX.YZ +17 PQR.SXYZ ទធន.បលហអ PQR.SXYZ +17 PQRS.XYZ ទធនប.លហអ PQRS.XYZ +17 PQRS.TXYZ ទធនប.ផលហអ PQRS.TXYZ +17 PQRST.VXYZ ទធនបផ.ពលហអ PQRST.VXYZ +17 P1.XY ទ១.លហ P1.XY +17 PQ.2Y ទធ.២ហ PQ.2Y +17 3Q.X4 ៣ធ.ល៤ 3Q.X4 +17 5Q.6Y ៥ធ.៦ហ 5Q.6Y +17 PQ.1YZ ទធ.១ហអ PQ.1YZ +17 PQ1.YZ ទធ១.ហអ PQ1.YZ +17 P2.X3Z ទ២.ល៣អ P2.X3Z +17 P2X.3Z ទ២ល.៣អ P2X.3Z +17 PQ.1XY2 ទធ.១លហ២ PQ.1XY2 +17 PQ1.XY2 ទធ១.លហ២ PQ1.XY2 +17 PQ1X.Y2 ទធ១ល.ហ២ PQ1X.Y2 +17 P3.RX4Z ទ៣.នល៤អ P3.RX4Z +17 P3R.X4Z ទ៣ន.ល៤អ P3R.X4Z +17 P3RX.4Z ទ៣នល.៤អ P3RX.4Z +17 5Q.R6Y7 ៥ធ.ន៦ហ៧ 5Q.R6Y7 +17 5QR.6Y7 ៥ធន.៦ហ៧ 5QR.6Y7 +17 5QR6.Y7 ៥ធន៦.ហ៧ 5QR6.Y7 +17 PQ1.SX2Z ទធ១.បល២អ PQ1.SX2Z +17 PQ1S.X2Z ទធ១ប.ល២អ PQ1S.X2Z +17 P3R.S4YZ ទ៣ន.ប៤ហអ P3R.S4YZ +17 P3RS.4YZ ទ៣នប.៤ហអ P3RS.4YZ +17 5QR.6XY7 ៥ធន.៦លហ៧ 5QR.6XY7 +17 5QR6.XY7 ៥ធន៦.លហ៧ 5QR6.XY7 +17 8Q9.SX0Z ៨ធ៩.បល០អ 8Q9.SX0Z +17 8Q9S.X0Z ៨ធ៩ប.ល០អ 8Q9S.X0Z +17 1QR2.TX3Z ១ធន២.ផល៣អ 1QR2.TX3Z +17 P4RS.5XY6 ទ៤នប.៥លហ៦ P4RS.5XY6 +17 P7R8.T9Y0 ទ៧ន៨.ផ៩ហ០ P7R8.T9Y0 +17 PQ1ST.2XY3 ទធ១បផ.២លហ៣ PQ1ST.2XY3 +17 P4RS5.VX6Z ទ៤នប៥.ពល៦អ P4RS5.VX6Z +17 7QR8T.V9YZ ៧ធន៨ផ.ព៩ហអ 7QR8T.V9YZ +17 P1R2T.3X4Z ទ១ន២ផ.៣ល៤អ P1R2T.3X4Z +17 5Q6S7.V8Y9 ៥ធ៦ប៧.ព៨ហ៩ 5Q6S7.V8Y9 +17 ABCDEFGHIJKLMNOPQRSTUVWXYZ ញកខគចឃងជរឈដឌឍណOទធនបផសពមលហអ ABCDEFGHIJKLMNOPQRSTUVWXYZ +17 ABCDEFGHIJKLMNOPQRSTUVWXYZ ញកខគចឃងជរឈដឌឍណOទធនបផសពមលហអ ABCDEFGHIJKLMNOPQRSTUVWXYZ +17 OI.XX Oរ.លល OI.XX +17 OI.XX Oរ.លល OI.XX +17 OI.XX-OOOOOOOO Oរ.លល-OOOOOOOO OI.XX-OOOOOOOO +17 OI.XX-IIIIIIII Oរ.លល-ររររររររ OI.XX-IIIIIIII +17 PQ.RS-01234567 ទធ.នប-០១២៣៤៥៦៧ PQ.RS-01234567 +17 PQ.RS-890 ទធ.នប-៨៩០ PQ.RS-890 +17 89.EU-BC ៨៩.ចស-កខ 89.EU-BC +17 00.0A-BC ០០.០ញ-កខ 00.0A-BC +17 BCDF.GHJK-BC កខគឃ.ងជឈដ-កខ BCDF.GHJK-BC +17 LMNP.QRST-BC ឌឍណទ.ធនបផ-កខ LMNP.QRST-BC +17 VWXY.Z123-BC ពមលហ.អ១២៣-កខ VWXY.Z123-BC +17 4567.890B-BC ៤៥៦៧.៨៩០ក-កខ 4567.890B-BC +17 PQ.XY-BC ទធ.លហ-កខ PQ.XY-BC +17 PQ.XYZ-BC ទធ.លហអ-កខ PQ.XYZ-BC +17 PQX.YZ-BC ទធល.ហអ-កខ PQX.YZ-BC +17 PQ.RXYZ-BC ទធ.នលហអ-កខ PQ.RXYZ-BC +17 PQR.XYZ-BC ទធន.លហអ-កខ PQR.XYZ-BC +17 PQRX.YZ-BC ទធនល.ហអ-កខ PQRX.YZ-BC +17 PQR.SXYZ-BC ទធន.បលហអ-កខ PQR.SXYZ-BC +17 PQRS.XYZ-BC ទធនប.លហអ-កខ PQRS.XYZ-BC +17 PQRS.TXYZ-BC ទធនប.ផលហអ-កខ PQRS.TXYZ-BC +17 PQRST.VXYZ-BC ទធនបផ.ពលហអ-កខ PQRST.VXYZ-BC +17 P1.XY-BC ទ១.លហ-កខ P1.XY-BC +17 PQ.2Y-BC ទធ.២ហ-កខ PQ.2Y-BC +17 3Q.X4-BC ៣ធ.ល៤-កខ 3Q.X4-BC +17 5Q.6Y-BC ៥ធ.៦ហ-កខ 5Q.6Y-BC +17 PQ.1YZ-BC ទធ.១ហអ-កខ PQ.1YZ-BC +17 PQ1.YZ-BC ទធ១.ហអ-កខ PQ1.YZ-BC +17 P2.X3Z-BC ទ២.ល៣អ-កខ P2.X3Z-BC +17 P2X.3Z-BC ទ២ល.៣អ-កខ P2X.3Z-BC +17 PQ.1XY2-BC ទធ.១លហ២-កខ PQ.1XY2-BC +17 PQ1.XY2-BC ទធ១.លហ២-កខ PQ1.XY2-BC +17 PQ1X.Y2-BC ទធ១ល.ហ២-កខ PQ1X.Y2-BC +17 P3.RX4Z-BC ទ៣.នល៤អ-កខ P3.RX4Z-BC +17 P3R.X4Z-BC ទ៣ន.ល៤អ-កខ P3R.X4Z-BC +17 P3RX.4Z-BC ទ៣នល.៤អ-កខ P3RX.4Z-BC +17 5Q.R6Y7-BC ៥ធ.ន៦ហ៧-កខ 5Q.R6Y7-BC +17 5QR.6Y7-BC ៥ធន.៦ហ៧-កខ 5QR.6Y7-BC +17 5QR6.Y7-BC ៥ធន៦.ហ៧-កខ 5QR6.Y7-BC +17 PQ1.SX2Z-BC ទធ១.បល២អ-កខ PQ1.SX2Z-BC +17 PQ1S.X2Z-BC ទធ១ប.ល២អ-កខ PQ1S.X2Z-BC +17 P3R.S4YZ-BC ទ៣ន.ប៤ហអ-កខ P3R.S4YZ-BC +17 P3RS.4YZ-BC ទ៣នប.៤ហអ-កខ P3RS.4YZ-BC +17 5QR.6XY7-BC ៥ធន.៦លហ៧-កខ 5QR.6XY7-BC +17 5QR6.XY7-BC ៥ធន៦.លហ៧-កខ 5QR6.XY7-BC +17 8Q9.SX0Z-BC ៨ធ៩.បល០អ-កខ 8Q9.SX0Z-BC +17 8Q9S.X0Z-BC ៨ធ៩ប.ល០អ-កខ 8Q9S.X0Z-BC +17 1QR2.TX3Z-BC ១ធន២.ផល៣អ-កខ 1QR2.TX3Z-BC +17 P4RS.5XY6-BC ទ៤នប.៥លហ៦-កខ P4RS.5XY6-BC +17 P7R8.T9Y0-BC ទ៧ន៨.ផ៩ហ០-កខ P7R8.T9Y0-BC +17 PQ1ST.2XY3-BC ទធ១បផ.២លហ៣-កខ PQ1ST.2XY3-BC +17 P4RS5.VX6Z-BC ទ៤នប៥.ពល៦អ-កខ P4RS5.VX6Z-BC +17 7QR8T.V9YZ-BC ៧ធន៨ផ.ព៩ហអ-កខ 7QR8T.V9YZ-BC +17 P1R2T.3X4Z-BC ទ១ន២ផ.៣ល៤អ-កខ P1R2T.3X4Z-BC +17 5Q6S7.V8Y9-BC ៥ធ៦ប៧.ព៨ហ៩-កខ 5Q6S7.V8Y9-BC +17 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ញកខគចឃងជរឈដឌឍណOទធនបផសពមលហអ-កខ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +17 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ញកខគចឃងជរឈដឌឍណOទធនបផសពមលហអ-កខ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +17 OI.XX-BC Oរ.លល-កខ OI.XX-BC +17 OI.XX-BC Oរ.លល-កខ OI.XX-BC +17 OI.XX-OOOOOOOO-BC Oរ.លល-OOOOOOOO-កខ OI.XX-OOOOOOOO-BC +17 OI.XX-IIIIIIII-BC Oរ.លល-ររររររររ-កខ OI.XX-IIIIIIII-BC +17 PQ.RS-01234567-BC ទធ.នប-០១២៣៤៥៦៧-កខ PQ.RS-01234567-BC +17 PQ.RS-890-BC ទធ.នប-៨៩០-កខ PQ.RS-890-BC +17 89.EU-DFGHJKLM ៨៩.ចស-គឃងជឈដឌឍ 89.EU-DFGHJKLM +17 00.0A-DFGHJKLM ០០.០ញ-គឃងជឈដឌឍ 00.0A-DFGHJKLM +17 BCDF.GHJK-DFGHJKLM កខគឃ.ងជឈដ-គឃងជឈដឌឍ BCDF.GHJK-DFGHJKLM +17 LMNP.QRST-DFGHJKLM ឌឍណទ.ធនបផ-គឃងជឈដឌឍ LMNP.QRST-DFGHJKLM +17 VWXY.Z123-DFGHJKLM ពមលហ.អ១២៣-គឃងជឈដឌឍ VWXY.Z123-DFGHJKLM +17 4567.890B-DFGHJKLM ៤៥៦៧.៨៩០ក-គឃងជឈដឌឍ 4567.890B-DFGHJKLM +17 PQ.XY-DFGHJKLM ទធ.លហ-គឃងជឈដឌឍ PQ.XY-DFGHJKLM +17 PQ.XYZ-DFGHJKLM ទធ.លហអ-គឃងជឈដឌឍ PQ.XYZ-DFGHJKLM +17 PQX.YZ-DFGHJKLM ទធល.ហអ-គឃងជឈដឌឍ PQX.YZ-DFGHJKLM +17 PQ.RXYZ-DFGHJKLM ទធ.នលហអ-គឃងជឈដឌឍ PQ.RXYZ-DFGHJKLM +17 PQR.XYZ-DFGHJKLM ទធន.លហអ-គឃងជឈដឌឍ PQR.XYZ-DFGHJKLM +17 PQRX.YZ-DFGHJKLM ទធនល.ហអ-គឃងជឈដឌឍ PQRX.YZ-DFGHJKLM +17 PQR.SXYZ-DFGHJKLM ទធន.បលហអ-គឃងជឈដឌឍ PQR.SXYZ-DFGHJKLM +17 PQRS.XYZ-DFGHJKLM ទធនប.លហអ-គឃងជឈដឌឍ PQRS.XYZ-DFGHJKLM +17 PQRS.TXYZ-DFGHJKLM ទធនប.ផលហអ-គឃងជឈដឌឍ PQRS.TXYZ-DFGHJKLM +17 PQRST.VXYZ-DFGHJKLM ទធនបផ.ពលហអ-គឃងជឈដឌឍ PQRST.VXYZ-DFGHJKLM +17 P1.XY-DFGHJKLM ទ១.លហ-គឃងជឈដឌឍ P1.XY-DFGHJKLM +17 PQ.2Y-DFGHJKLM ទធ.២ហ-គឃងជឈដឌឍ PQ.2Y-DFGHJKLM +17 3Q.X4-DFGHJKLM ៣ធ.ល៤-គឃងជឈដឌឍ 3Q.X4-DFGHJKLM +17 5Q.6Y-DFGHJKLM ៥ធ.៦ហ-គឃងជឈដឌឍ 5Q.6Y-DFGHJKLM +17 PQ.1YZ-DFGHJKLM ទធ.១ហអ-គឃងជឈដឌឍ PQ.1YZ-DFGHJKLM +17 PQ1.YZ-DFGHJKLM ទធ១.ហអ-គឃងជឈដឌឍ PQ1.YZ-DFGHJKLM +17 P2.X3Z-DFGHJKLM ទ២.ល៣អ-គឃងជឈដឌឍ P2.X3Z-DFGHJKLM +17 P2X.3Z-DFGHJKLM ទ២ល.៣អ-គឃងជឈដឌឍ P2X.3Z-DFGHJKLM +17 PQ.1XY2-DFGHJKLM ទធ.១លហ២-គឃងជឈដឌឍ PQ.1XY2-DFGHJKLM +17 PQ1.XY2-DFGHJKLM ទធ១.លហ២-គឃងជឈដឌឍ PQ1.XY2-DFGHJKLM +17 PQ1X.Y2-DFGHJKLM ទធ១ល.ហ២-គឃងជឈដឌឍ PQ1X.Y2-DFGHJKLM +17 P3.RX4Z-DFGHJKLM ទ៣.នល៤អ-គឃងជឈដឌឍ P3.RX4Z-DFGHJKLM +17 P3R.X4Z-DFGHJKLM ទ៣ន.ល៤អ-គឃងជឈដឌឍ P3R.X4Z-DFGHJKLM +17 P3RX.4Z-DFGHJKLM ទ៣នល.៤អ-គឃងជឈដឌឍ P3RX.4Z-DFGHJKLM +17 5Q.R6Y7-DFGHJKLM ៥ធ.ន៦ហ៧-គឃងជឈដឌឍ 5Q.R6Y7-DFGHJKLM +17 5QR.6Y7-DFGHJKLM ៥ធន.៦ហ៧-គឃងជឈដឌឍ 5QR.6Y7-DFGHJKLM +17 5QR6.Y7-DFGHJKLM ៥ធន៦.ហ៧-គឃងជឈដឌឍ 5QR6.Y7-DFGHJKLM +17 PQ1.SX2Z-DFGHJKLM ទធ១.បល២អ-គឃងជឈដឌឍ PQ1.SX2Z-DFGHJKLM +17 PQ1S.X2Z-DFGHJKLM ទធ១ប.ល២អ-គឃងជឈដឌឍ PQ1S.X2Z-DFGHJKLM +17 P3R.S4YZ-DFGHJKLM ទ៣ន.ប៤ហអ-គឃងជឈដឌឍ P3R.S4YZ-DFGHJKLM +17 P3RS.4YZ-DFGHJKLM ទ៣នប.៤ហអ-គឃងជឈដឌឍ P3RS.4YZ-DFGHJKLM +17 5QR.6XY7-DFGHJKLM ៥ធន.៦លហ៧-គឃងជឈដឌឍ 5QR.6XY7-DFGHJKLM +17 5QR6.XY7-DFGHJKLM ៥ធន៦.លហ៧-គឃងជឈដឌឍ 5QR6.XY7-DFGHJKLM +17 8Q9.SX0Z-DFGHJKLM ៨ធ៩.បល០អ-គឃងជឈដឌឍ 8Q9.SX0Z-DFGHJKLM +17 8Q9S.X0Z-DFGHJKLM ៨ធ៩ប.ល០អ-គឃងជឈដឌឍ 8Q9S.X0Z-DFGHJKLM +17 1QR2.TX3Z-DFGHJKLM ១ធន២.ផល៣អ-គឃងជឈដឌឍ 1QR2.TX3Z-DFGHJKLM +17 P4RS.5XY6-DFGHJKLM ទ៤នប.៥លហ៦-គឃងជឈដឌឍ P4RS.5XY6-DFGHJKLM +17 P7R8.T9Y0-DFGHJKLM ទ៧ន៨.ផ៩ហ០-គឃងជឈដឌឍ P7R8.T9Y0-DFGHJKLM +17 PQ1ST.2XY3-DFGHJKLM ទធ១បផ.២លហ៣-គឃងជឈដឌឍ PQ1ST.2XY3-DFGHJKLM +17 P4RS5.VX6Z-DFGHJKLM ទ៤នប៥.ពល៦អ-គឃងជឈដឌឍ P4RS5.VX6Z-DFGHJKLM +17 7QR8T.V9YZ-DFGHJKLM ៧ធន៨ផ.ព៩ហអ-គឃងជឈដឌឍ 7QR8T.V9YZ-DFGHJKLM +17 P1R2T.3X4Z-DFGHJKLM ទ១ន២ផ.៣ល៤អ-គឃងជឈដឌឍ P1R2T.3X4Z-DFGHJKLM +17 5Q6S7.V8Y9-DFGHJKLM ៥ធ៦ប៧.ព៨ហ៩-គឃងជឈដឌឍ 5Q6S7.V8Y9-DFGHJKLM +17 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ញកខគចឃងជរឈដឌឍណOទធនបផសពមលហអ-គឃងជឈដឌឍ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +17 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ញកខគចឃងជរឈដឌឍណOទធនបផសពមលហអ-គឃងជឈដឌឍ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +17 OI.XX-DFGHJKLM Oរ.លល-គឃងជឈដឌឍ OI.XX-DFGHJKLM +17 OI.XX-DFGHJKLM Oរ.លល-គឃងជឈដឌឍ OI.XX-DFGHJKLM +17 OI.XX-OOOOOOOO-DFGHJKLM Oរ.លល-OOOOOOOO-គឃងជឈដឌឍ OI.XX-OOOOOOOO-DFGHJKLM +17 OI.XX-IIIIIIII-DFGHJKLM Oរ.លល-ររររររររ-គឃងជឈដឌឍ OI.XX-IIIIIIII-DFGHJKLM +17 PQ.RS-01234567-DFGHJKLM ទធ.នប-០១២៣៤៥៦៧-គឃងជឈដឌឍ PQ.RS-01234567-DFGHJKLM +17 PQ.RS-890-DFGHJKLM ទធ.នប-៨៩០-គឃងជឈដឌឍ PQ.RS-890-DFGHJKLM +18 89.EU 89.ඉඋ 89.EU +18 00.0A 00.0අ 00.0A +18 BCDF.GHJK කගඟජ.ටඩඬත BCDF.GHJK +18 LMNP.QRST දනඳප.බමඹය LMNP.QRST +18 VWXY.Z123 රලවස.හ123 VWXY.Z123 +18 4567.890B 4567.890ක 4567.890B +18 PQ.XY පබ.වස PQ.XY +18 PQ.XYZ පබ.වසහ PQ.XYZ +18 PQX.YZ පබව.සහ PQX.YZ +18 PQ.RXYZ පබ.මවසහ PQ.RXYZ +18 PQR.XYZ පබම.වසහ PQR.XYZ +18 PQRX.YZ පබමව.සහ PQRX.YZ +18 PQR.SXYZ පබම.ඹවසහ PQR.SXYZ +18 PQRS.XYZ පබමඹ.වසහ PQRS.XYZ +18 PQRS.TXYZ පබමඹ.යවසහ PQRS.TXYZ +18 PQRST.VXYZ පබමඹය.රවසහ PQRST.VXYZ +18 P1.XY ප1.වස P1.XY +18 PQ.2Y පබ.2ස PQ.2Y +18 3Q.X4 3බ.ව4 3Q.X4 +18 5Q.6Y 5බ.6ස 5Q.6Y +18 PQ.1YZ පබ.1සහ PQ.1YZ +18 PQ1.YZ පබ1.සහ PQ1.YZ +18 P2.X3Z ප2.ව3හ P2.X3Z +18 P2X.3Z ප2ව.3හ P2X.3Z +18 PQ.1XY2 පබ.1වස2 PQ.1XY2 +18 PQ1.XY2 පබ1.වස2 PQ1.XY2 +18 PQ1X.Y2 පබ1ව.ස2 PQ1X.Y2 +18 P3.RX4Z ප3.මව4හ P3.RX4Z +18 P3R.X4Z ප3ම.ව4හ P3R.X4Z +18 P3RX.4Z ප3මව.4හ P3RX.4Z +18 5Q.R6Y7 5බ.ම6ස7 5Q.R6Y7 +18 5QR.6Y7 5බම.6ස7 5QR.6Y7 +18 5QR6.Y7 5බම6.ස7 5QR6.Y7 +18 PQ1.SX2Z පබ1.ඹව2හ PQ1.SX2Z +18 PQ1S.X2Z පබ1ඹ.ව2හ PQ1S.X2Z +18 P3R.S4YZ ප3ම.ඹ4සහ P3R.S4YZ +18 P3RS.4YZ ප3මඹ.4සහ P3RS.4YZ +18 5QR.6XY7 5බම.6වස7 5QR.6XY7 +18 5QR6.XY7 5බම6.වස7 5QR6.XY7 +18 8Q9.SX0Z 8බ9.ඹව0හ 8Q9.SX0Z +18 8Q9S.X0Z 8බ9ඹ.ව0හ 8Q9S.X0Z +18 1QR2.TX3Z 1බම2.යව3හ 1QR2.TX3Z +18 P4RS.5XY6 ප4මඹ.5වස6 P4RS.5XY6 +18 P7R8.T9Y0 ප7ම8.ය9ස0 P7R8.T9Y0 +18 PQ1ST.2XY3 පබ1ඹය.2වස3 PQ1ST.2XY3 +18 P4RS5.VX6Z ප4මඹ5.රව6හ P4RS5.VX6Z +18 7QR8T.V9YZ 7බම8ය.ර9සහ 7QR8T.V9YZ +18 P1R2T.3X4Z ප1ම2ය.3ව4හ P1R2T.3X4Z +18 5Q6S7.V8Y9 5බ6ඹ7.ර8ස9 5Q6S7.V8Y9 +18 ABCDEFGHIJKLMNOPQRSTUVWXYZ අකගඟඉජටඩIඬතදනඳOපබමඹයඋරලවසහ ABCDEFGHIJKLMNOPQRSTUVWXYZ +18 ABCDEFGHIJKLMNOPQRSTUVWXYZ අකගඟඉජටඩIඬතදනඳOපබමඹයඋරලවසහ ABCDEFGHIJKLMNOPQRSTUVWXYZ +18 OI.XX OI.වව OI.XX +18 OI.XX OI.වව OI.XX +18 OI.XX-OOOOOOOO OI.වව-OOOOOOOO OI.XX-OOOOOOOO +18 OI.XX-IIIIIIII OI.වව-IIIIIIII OI.XX-IIIIIIII +18 PQ.RS-01234567 පබ.මඹ-01234567 PQ.RS-01234567 +18 PQ.RS-890 පබ.මඹ-890 PQ.RS-890 +18 89.EU-BC 89.ඉඋ-කග 89.EU-BC +18 00.0A-BC 00.0අ-කග 00.0A-BC +18 BCDF.GHJK-BC කගඟජ.ටඩඬත-කග BCDF.GHJK-BC +18 LMNP.QRST-BC දනඳප.බමඹය-කග LMNP.QRST-BC +18 VWXY.Z123-BC රලවස.හ123-කග VWXY.Z123-BC +18 4567.890B-BC 4567.890ක-කග 4567.890B-BC +18 PQ.XY-BC පබ.වස-කග PQ.XY-BC +18 PQ.XYZ-BC පබ.වසහ-කග PQ.XYZ-BC +18 PQX.YZ-BC පබව.සහ-කග PQX.YZ-BC +18 PQ.RXYZ-BC පබ.මවසහ-කග PQ.RXYZ-BC +18 PQR.XYZ-BC පබම.වසහ-කග PQR.XYZ-BC +18 PQRX.YZ-BC පබමව.සහ-කග PQRX.YZ-BC +18 PQR.SXYZ-BC පබම.ඹවසහ-කග PQR.SXYZ-BC +18 PQRS.XYZ-BC පබමඹ.වසහ-කග PQRS.XYZ-BC +18 PQRS.TXYZ-BC පබමඹ.යවසහ-කග PQRS.TXYZ-BC +18 PQRST.VXYZ-BC පබමඹය.රවසහ-කග PQRST.VXYZ-BC +18 P1.XY-BC ප1.වස-කග P1.XY-BC +18 PQ.2Y-BC පබ.2ස-කග PQ.2Y-BC +18 3Q.X4-BC 3බ.ව4-කග 3Q.X4-BC +18 5Q.6Y-BC 5බ.6ස-කග 5Q.6Y-BC +18 PQ.1YZ-BC පබ.1සහ-කග PQ.1YZ-BC +18 PQ1.YZ-BC පබ1.සහ-කග PQ1.YZ-BC +18 P2.X3Z-BC ප2.ව3හ-කග P2.X3Z-BC +18 P2X.3Z-BC ප2ව.3හ-කග P2X.3Z-BC +18 PQ.1XY2-BC පබ.1වස2-කග PQ.1XY2-BC +18 PQ1.XY2-BC පබ1.වස2-කග PQ1.XY2-BC +18 PQ1X.Y2-BC පබ1ව.ස2-කග PQ1X.Y2-BC +18 P3.RX4Z-BC ප3.මව4හ-කග P3.RX4Z-BC +18 P3R.X4Z-BC ප3ම.ව4හ-කග P3R.X4Z-BC +18 P3RX.4Z-BC ප3මව.4හ-කග P3RX.4Z-BC +18 5Q.R6Y7-BC 5බ.ම6ස7-කග 5Q.R6Y7-BC +18 5QR.6Y7-BC 5බම.6ස7-කග 5QR.6Y7-BC +18 5QR6.Y7-BC 5බම6.ස7-කග 5QR6.Y7-BC +18 PQ1.SX2Z-BC පබ1.ඹව2හ-කග PQ1.SX2Z-BC +18 PQ1S.X2Z-BC පබ1ඹ.ව2හ-කග PQ1S.X2Z-BC +18 P3R.S4YZ-BC ප3ම.ඹ4සහ-කග P3R.S4YZ-BC +18 P3RS.4YZ-BC ප3මඹ.4සහ-කග P3RS.4YZ-BC +18 5QR.6XY7-BC 5බම.6වස7-කග 5QR.6XY7-BC +18 5QR6.XY7-BC 5බම6.වස7-කග 5QR6.XY7-BC +18 8Q9.SX0Z-BC 8බ9.ඹව0හ-කග 8Q9.SX0Z-BC +18 8Q9S.X0Z-BC 8බ9ඹ.ව0හ-කග 8Q9S.X0Z-BC +18 1QR2.TX3Z-BC 1බම2.යව3හ-කග 1QR2.TX3Z-BC +18 P4RS.5XY6-BC ප4මඹ.5වස6-කග P4RS.5XY6-BC +18 P7R8.T9Y0-BC ප7ම8.ය9ස0-කග P7R8.T9Y0-BC +18 PQ1ST.2XY3-BC පබ1ඹය.2වස3-කග PQ1ST.2XY3-BC +18 P4RS5.VX6Z-BC ප4මඹ5.රව6හ-කග P4RS5.VX6Z-BC +18 7QR8T.V9YZ-BC 7බම8ය.ර9සහ-කග 7QR8T.V9YZ-BC +18 P1R2T.3X4Z-BC ප1ම2ය.3ව4හ-කග P1R2T.3X4Z-BC +18 5Q6S7.V8Y9-BC 5බ6ඹ7.ර8ස9-කග 5Q6S7.V8Y9-BC +18 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC අකගඟඉජටඩIඬතදනඳOපබමඹයඋරලවසහ-කග ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +18 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC අකගඟඉජටඩIඬතදනඳOපබමඹයඋරලවසහ-කග ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +18 OI.XX-BC OI.වව-කග OI.XX-BC +18 OI.XX-BC OI.වව-කග OI.XX-BC +18 OI.XX-OOOOOOOO-BC OI.වව-OOOOOOOO-කග OI.XX-OOOOOOOO-BC +18 OI.XX-IIIIIIII-BC OI.වව-IIIIIIII-කග OI.XX-IIIIIIII-BC +18 PQ.RS-01234567-BC පබ.මඹ-01234567-කග PQ.RS-01234567-BC +18 PQ.RS-890-BC පබ.මඹ-890-කග PQ.RS-890-BC +18 89.EU-DFGHJKLM 89.ඉඋ-ඟජටඩඬතදන 89.EU-DFGHJKLM +18 00.0A-DFGHJKLM 00.0අ-ඟජටඩඬතදන 00.0A-DFGHJKLM +18 BCDF.GHJK-DFGHJKLM කගඟජ.ටඩඬත-ඟජටඩඬතදන BCDF.GHJK-DFGHJKLM +18 LMNP.QRST-DFGHJKLM දනඳප.බමඹය-ඟජටඩඬතදන LMNP.QRST-DFGHJKLM +18 VWXY.Z123-DFGHJKLM රලවස.හ123-ඟජටඩඬතදන VWXY.Z123-DFGHJKLM +18 4567.890B-DFGHJKLM 4567.890ක-ඟජටඩඬතදන 4567.890B-DFGHJKLM +18 PQ.XY-DFGHJKLM පබ.වස-ඟජටඩඬතදන PQ.XY-DFGHJKLM +18 PQ.XYZ-DFGHJKLM පබ.වසහ-ඟජටඩඬතදන PQ.XYZ-DFGHJKLM +18 PQX.YZ-DFGHJKLM පබව.සහ-ඟජටඩඬතදන PQX.YZ-DFGHJKLM +18 PQ.RXYZ-DFGHJKLM පබ.මවසහ-ඟජටඩඬතදන PQ.RXYZ-DFGHJKLM +18 PQR.XYZ-DFGHJKLM පබම.වසහ-ඟජටඩඬතදන PQR.XYZ-DFGHJKLM +18 PQRX.YZ-DFGHJKLM පබමව.සහ-ඟජටඩඬතදන PQRX.YZ-DFGHJKLM +18 PQR.SXYZ-DFGHJKLM පබම.ඹවසහ-ඟජටඩඬතදන PQR.SXYZ-DFGHJKLM +18 PQRS.XYZ-DFGHJKLM පබමඹ.වසහ-ඟජටඩඬතදන PQRS.XYZ-DFGHJKLM +18 PQRS.TXYZ-DFGHJKLM පබමඹ.යවසහ-ඟජටඩඬතදන PQRS.TXYZ-DFGHJKLM +18 PQRST.VXYZ-DFGHJKLM පබමඹය.රවසහ-ඟජටඩඬතදන PQRST.VXYZ-DFGHJKLM +18 P1.XY-DFGHJKLM ප1.වස-ඟජටඩඬතදන P1.XY-DFGHJKLM +18 PQ.2Y-DFGHJKLM පබ.2ස-ඟජටඩඬතදන PQ.2Y-DFGHJKLM +18 3Q.X4-DFGHJKLM 3බ.ව4-ඟජටඩඬතදන 3Q.X4-DFGHJKLM +18 5Q.6Y-DFGHJKLM 5බ.6ස-ඟජටඩඬතදන 5Q.6Y-DFGHJKLM +18 PQ.1YZ-DFGHJKLM පබ.1සහ-ඟජටඩඬතදන PQ.1YZ-DFGHJKLM +18 PQ1.YZ-DFGHJKLM පබ1.සහ-ඟජටඩඬතදන PQ1.YZ-DFGHJKLM +18 P2.X3Z-DFGHJKLM ප2.ව3හ-ඟජටඩඬතදන P2.X3Z-DFGHJKLM +18 P2X.3Z-DFGHJKLM ප2ව.3හ-ඟජටඩඬතදන P2X.3Z-DFGHJKLM +18 PQ.1XY2-DFGHJKLM පබ.1වස2-ඟජටඩඬතදන PQ.1XY2-DFGHJKLM +18 PQ1.XY2-DFGHJKLM පබ1.වස2-ඟජටඩඬතදන PQ1.XY2-DFGHJKLM +18 PQ1X.Y2-DFGHJKLM පබ1ව.ස2-ඟජටඩඬතදන PQ1X.Y2-DFGHJKLM +18 P3.RX4Z-DFGHJKLM ප3.මව4හ-ඟජටඩඬතදන P3.RX4Z-DFGHJKLM +18 P3R.X4Z-DFGHJKLM ප3ම.ව4හ-ඟජටඩඬතදන P3R.X4Z-DFGHJKLM +18 P3RX.4Z-DFGHJKLM ප3මව.4හ-ඟජටඩඬතදන P3RX.4Z-DFGHJKLM +18 5Q.R6Y7-DFGHJKLM 5බ.ම6ස7-ඟජටඩඬතදන 5Q.R6Y7-DFGHJKLM +18 5QR.6Y7-DFGHJKLM 5බම.6ස7-ඟජටඩඬතදන 5QR.6Y7-DFGHJKLM +18 5QR6.Y7-DFGHJKLM 5බම6.ස7-ඟජටඩඬතදන 5QR6.Y7-DFGHJKLM +18 PQ1.SX2Z-DFGHJKLM පබ1.ඹව2හ-ඟජටඩඬතදන PQ1.SX2Z-DFGHJKLM +18 PQ1S.X2Z-DFGHJKLM පබ1ඹ.ව2හ-ඟජටඩඬතදන PQ1S.X2Z-DFGHJKLM +18 P3R.S4YZ-DFGHJKLM ප3ම.ඹ4සහ-ඟජටඩඬතදන P3R.S4YZ-DFGHJKLM +18 P3RS.4YZ-DFGHJKLM ප3මඹ.4සහ-ඟජටඩඬතදන P3RS.4YZ-DFGHJKLM +18 5QR.6XY7-DFGHJKLM 5බම.6වස7-ඟජටඩඬතදන 5QR.6XY7-DFGHJKLM +18 5QR6.XY7-DFGHJKLM 5බම6.වස7-ඟජටඩඬතදන 5QR6.XY7-DFGHJKLM +18 8Q9.SX0Z-DFGHJKLM 8බ9.ඹව0හ-ඟජටඩඬතදන 8Q9.SX0Z-DFGHJKLM +18 8Q9S.X0Z-DFGHJKLM 8බ9ඹ.ව0හ-ඟජටඩඬතදන 8Q9S.X0Z-DFGHJKLM +18 1QR2.TX3Z-DFGHJKLM 1බම2.යව3හ-ඟජටඩඬතදන 1QR2.TX3Z-DFGHJKLM +18 P4RS.5XY6-DFGHJKLM ප4මඹ.5වස6-ඟජටඩඬතදන P4RS.5XY6-DFGHJKLM +18 P7R8.T9Y0-DFGHJKLM ප7ම8.ය9ස0-ඟජටඩඬතදන P7R8.T9Y0-DFGHJKLM +18 PQ1ST.2XY3-DFGHJKLM පබ1ඹය.2වස3-ඟජටඩඬතදන PQ1ST.2XY3-DFGHJKLM +18 P4RS5.VX6Z-DFGHJKLM ප4මඹ5.රව6හ-ඟජටඩඬතදන P4RS5.VX6Z-DFGHJKLM +18 7QR8T.V9YZ-DFGHJKLM 7බම8ය.ර9සහ-ඟජටඩඬතදන 7QR8T.V9YZ-DFGHJKLM +18 P1R2T.3X4Z-DFGHJKLM ප1ම2ය.3ව4හ-ඟජටඩඬතදන P1R2T.3X4Z-DFGHJKLM +18 5Q6S7.V8Y9-DFGHJKLM 5බ6ඹ7.ර8ස9-ඟජටඩඬතදන 5Q6S7.V8Y9-DFGHJKLM +18 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM අකගඟඉජටඩIඬතදනඳOපබමඹයඋරලවසහ-ඟජටඩඬතදන ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +18 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM අකගඟඉජටඩIඬතදනඳOපබමඹයඋරලවසහ-ඟජටඩඬතදන ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +18 OI.XX-DFGHJKLM OI.වව-ඟජටඩඬතදන OI.XX-DFGHJKLM +18 OI.XX-DFGHJKLM OI.වව-ඟජටඩඬතදන OI.XX-DFGHJKLM +18 OI.XX-OOOOOOOO-DFGHJKLM OI.වව-OOOOOOOO-ඟජටඩඬතදන OI.XX-OOOOOOOO-DFGHJKLM +18 OI.XX-IIIIIIII-DFGHJKLM OI.වව-IIIIIIII-ඟජටඩඬතදන OI.XX-IIIIIIII-DFGHJKLM +18 PQ.RS-01234567-DFGHJKLM පබ.මඹ-01234567-ඟජටඩඬතදන PQ.RS-01234567-DFGHJKLM +18 PQ.RS-890-DFGHJKLM පබ.මඹ-890-ඟජටඩඬතදන PQ.RS-890-DFGHJKLM +19 89.EU 89.ޗޜ 89.EU +19 00.0A 00.0ޔ 00.0A +19 BCDF.GHJK ހށނރ.ބޅކއ BCDF.GHJK +19 LMNP.QRST ވމފދ.ތލގޏ LMNP.QRST +19 VWXY.Z123 ސޑޒޓ.ޱ123 VWXY.Z123 +19 4567.890B 4567.890ހ 4567.890B +19 PQ.XY ދތ.ޒޓ PQ.XY +19 PQ.XYZ ދތ.ޒޓޱ PQ.XYZ +19 PQX.YZ ދތޒ.ޓޱ PQX.YZ +19 PQ.RXYZ ދތ.ލޒޓޱ PQ.RXYZ +19 PQR.XYZ ދތލ.ޒޓޱ PQR.XYZ +19 PQRX.YZ ދތލޒ.ޓޱ PQRX.YZ +19 PQR.SXYZ ދތލ.ގޒޓޱ PQR.SXYZ +19 PQRS.XYZ ދތލގ.ޒޓޱ PQRS.XYZ +19 PQRS.TXYZ ދތލގ.ޏޒޓޱ PQRS.TXYZ +19 PQRST.VXYZ ދތލގޏ.ސޒޓޱ PQRST.VXYZ +19 P1.XY ދ1.ޒޓ P1.XY +19 PQ.2Y ދތ.2ޓ PQ.2Y +19 3Q.X4 3ތ.ޒ4 3Q.X4 +19 5Q.6Y 5ތ.6ޓ 5Q.6Y +19 PQ.1YZ ދތ.1ޓޱ PQ.1YZ +19 PQ1.YZ ދތ1.ޓޱ PQ1.YZ +19 P2.X3Z ދ2.ޒ3ޱ P2.X3Z +19 P2X.3Z ދ2ޒ.3ޱ P2X.3Z +19 PQ.1XY2 ދތ.1ޒޓ2 PQ.1XY2 +19 PQ1.XY2 ދތ1.ޒޓ2 PQ1.XY2 +19 PQ1X.Y2 ދތ1ޒ.ޓ2 PQ1X.Y2 +19 P3.RX4Z ދ3.ލޒ4ޱ P3.RX4Z +19 P3R.X4Z ދ3ލ.ޒ4ޱ P3R.X4Z +19 P3RX.4Z ދ3ލޒ.4ޱ P3RX.4Z +19 5Q.R6Y7 5ތ.ލ6ޓ7 5Q.R6Y7 +19 5QR.6Y7 5ތލ.6ޓ7 5QR.6Y7 +19 5QR6.Y7 5ތލ6.ޓ7 5QR6.Y7 +19 PQ1.SX2Z ދތ1.ގޒ2ޱ PQ1.SX2Z +19 PQ1S.X2Z ދތ1ގ.ޒ2ޱ PQ1S.X2Z +19 P3R.S4YZ ދ3ލ.ގ4ޓޱ P3R.S4YZ +19 P3RS.4YZ ދ3ލގ.4ޓޱ P3RS.4YZ +19 5QR.6XY7 5ތލ.6ޒޓ7 5QR.6XY7 +19 5QR6.XY7 5ތލ6.ޒޓ7 5QR6.XY7 +19 8Q9.SX0Z 8ތ9.ގޒ0ޱ 8Q9.SX0Z +19 8Q9S.X0Z 8ތ9ގ.ޒ0ޱ 8Q9S.X0Z +19 1QR2.TX3Z 1ތލ2.ޏޒ3ޱ 1QR2.TX3Z +19 P4RS.5XY6 ދ4ލގ.5ޒޓ6 P4RS.5XY6 +19 P7R8.T9Y0 ދ7ލ8.ޏ9ޓ0 P7R8.T9Y0 +19 PQ1ST.2XY3 ދތ1ގޏ.2ޒޓ3 PQ1ST.2XY3 +19 P4RS5.VX6Z ދ4ލގ5.ސޒ6ޱ P4RS5.VX6Z +19 7QR8T.V9YZ 7ތލ8ޏ.ސ9ޓޱ 7QR8T.V9YZ +19 P1R2T.3X4Z ދ1ލ2ޏ.3ޒ4ޱ P1R2T.3X4Z +19 5Q6S7.V8Y9 5ތ6ގ7.ސ8ޓ9 5Q6S7.V8Y9 +19 ABCDEFGHIJKLMNOPQRSTUVWXYZ ޔހށނޗރބޅIކއވމފOދތލގޏޜސޑޒޓޱ ABCDEFGHIJKLMNOPQRSTUVWXYZ +19 ABCDEFGHIJKLMNOPQRSTUVWXYZ ޔހށނޗރބޅIކއވމފOދތލގޏޜސޑޒޓޱ ABCDEFGHIJKLMNOPQRSTUVWXYZ +19 OI.XX OI.ޒޒ OI.XX +19 OI.XX OI.ޒޒ OI.XX +19 OI.XX-OOOOOOOO OI.ޒޒ-OOOOOOOO OI.XX-OOOOOOOO +19 OI.XX-IIIIIIII OI.ޒޒ-IIIIIIII OI.XX-IIIIIIII +19 PQ.RS-01234567 ދތ.ލގ-01234567 PQ.RS-01234567 +19 PQ.RS-890 ދތ.ލގ-890 PQ.RS-890 +19 89.EU-BC 89.ޗޜ-ހށ 89.EU-BC +19 00.0A-BC 00.0ޔ-ހށ 00.0A-BC +19 BCDF.GHJK-BC ހށނރ.ބޅކއ-ހށ BCDF.GHJK-BC +19 LMNP.QRST-BC ވމފދ.ތލގޏ-ހށ LMNP.QRST-BC +19 VWXY.Z123-BC ސޑޒޓ.ޱ123-ހށ VWXY.Z123-BC +19 4567.890B-BC 4567.890ހ-ހށ 4567.890B-BC +19 PQ.XY-BC ދތ.ޒޓ-ހށ PQ.XY-BC +19 PQ.XYZ-BC ދތ.ޒޓޱ-ހށ PQ.XYZ-BC +19 PQX.YZ-BC ދތޒ.ޓޱ-ހށ PQX.YZ-BC +19 PQ.RXYZ-BC ދތ.ލޒޓޱ-ހށ PQ.RXYZ-BC +19 PQR.XYZ-BC ދތލ.ޒޓޱ-ހށ PQR.XYZ-BC +19 PQRX.YZ-BC ދތލޒ.ޓޱ-ހށ PQRX.YZ-BC +19 PQR.SXYZ-BC ދތލ.ގޒޓޱ-ހށ PQR.SXYZ-BC +19 PQRS.XYZ-BC ދތލގ.ޒޓޱ-ހށ PQRS.XYZ-BC +19 PQRS.TXYZ-BC ދތލގ.ޏޒޓޱ-ހށ PQRS.TXYZ-BC +19 PQRST.VXYZ-BC ދތލގޏ.ސޒޓޱ-ހށ PQRST.VXYZ-BC +19 P1.XY-BC ދ1.ޒޓ-ހށ P1.XY-BC +19 PQ.2Y-BC ދތ.2ޓ-ހށ PQ.2Y-BC +19 3Q.X4-BC 3ތ.ޒ4-ހށ 3Q.X4-BC +19 5Q.6Y-BC 5ތ.6ޓ-ހށ 5Q.6Y-BC +19 PQ.1YZ-BC ދތ.1ޓޱ-ހށ PQ.1YZ-BC +19 PQ1.YZ-BC ދތ1.ޓޱ-ހށ PQ1.YZ-BC +19 P2.X3Z-BC ދ2.ޒ3ޱ-ހށ P2.X3Z-BC +19 P2X.3Z-BC ދ2ޒ.3ޱ-ހށ P2X.3Z-BC +19 PQ.1XY2-BC ދތ.1ޒޓ2-ހށ PQ.1XY2-BC +19 PQ1.XY2-BC ދތ1.ޒޓ2-ހށ PQ1.XY2-BC +19 PQ1X.Y2-BC ދތ1ޒ.ޓ2-ހށ PQ1X.Y2-BC +19 P3.RX4Z-BC ދ3.ލޒ4ޱ-ހށ P3.RX4Z-BC +19 P3R.X4Z-BC ދ3ލ.ޒ4ޱ-ހށ P3R.X4Z-BC +19 P3RX.4Z-BC ދ3ލޒ.4ޱ-ހށ P3RX.4Z-BC +19 5Q.R6Y7-BC 5ތ.ލ6ޓ7-ހށ 5Q.R6Y7-BC +19 5QR.6Y7-BC 5ތލ.6ޓ7-ހށ 5QR.6Y7-BC +19 5QR6.Y7-BC 5ތލ6.ޓ7-ހށ 5QR6.Y7-BC +19 PQ1.SX2Z-BC ދތ1.ގޒ2ޱ-ހށ PQ1.SX2Z-BC +19 PQ1S.X2Z-BC ދތ1ގ.ޒ2ޱ-ހށ PQ1S.X2Z-BC +19 P3R.S4YZ-BC ދ3ލ.ގ4ޓޱ-ހށ P3R.S4YZ-BC +19 P3RS.4YZ-BC ދ3ލގ.4ޓޱ-ހށ P3RS.4YZ-BC +19 5QR.6XY7-BC 5ތލ.6ޒޓ7-ހށ 5QR.6XY7-BC +19 5QR6.XY7-BC 5ތލ6.ޒޓ7-ހށ 5QR6.XY7-BC +19 8Q9.SX0Z-BC 8ތ9.ގޒ0ޱ-ހށ 8Q9.SX0Z-BC +19 8Q9S.X0Z-BC 8ތ9ގ.ޒ0ޱ-ހށ 8Q9S.X0Z-BC +19 1QR2.TX3Z-BC 1ތލ2.ޏޒ3ޱ-ހށ 1QR2.TX3Z-BC +19 P4RS.5XY6-BC ދ4ލގ.5ޒޓ6-ހށ P4RS.5XY6-BC +19 P7R8.T9Y0-BC ދ7ލ8.ޏ9ޓ0-ހށ P7R8.T9Y0-BC +19 PQ1ST.2XY3-BC ދތ1ގޏ.2ޒޓ3-ހށ PQ1ST.2XY3-BC +19 P4RS5.VX6Z-BC ދ4ލގ5.ސޒ6ޱ-ހށ P4RS5.VX6Z-BC +19 7QR8T.V9YZ-BC 7ތލ8ޏ.ސ9ޓޱ-ހށ 7QR8T.V9YZ-BC +19 P1R2T.3X4Z-BC ދ1ލ2ޏ.3ޒ4ޱ-ހށ P1R2T.3X4Z-BC +19 5Q6S7.V8Y9-BC 5ތ6ގ7.ސ8ޓ9-ހށ 5Q6S7.V8Y9-BC +19 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ޔހށނޗރބޅIކއވމފOދތލގޏޜސޑޒޓޱ-ހށ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +19 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ޔހށނޗރބޅIކއވމފOދތލގޏޜސޑޒޓޱ-ހށ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +19 OI.XX-BC OI.ޒޒ-ހށ OI.XX-BC +19 OI.XX-BC OI.ޒޒ-ހށ OI.XX-BC +19 OI.XX-OOOOOOOO-BC OI.ޒޒ-OOOOOOOO-ހށ OI.XX-OOOOOOOO-BC +19 OI.XX-IIIIIIII-BC OI.ޒޒ-IIIIIIII-ހށ OI.XX-IIIIIIII-BC +19 PQ.RS-01234567-BC ދތ.ލގ-01234567-ހށ PQ.RS-01234567-BC +19 PQ.RS-890-BC ދތ.ލގ-890-ހށ PQ.RS-890-BC +19 89.EU-DFGHJKLM 89.ޗޜ-ނރބޅކއވމ 89.EU-DFGHJKLM +19 00.0A-DFGHJKLM 00.0ޔ-ނރބޅކއވމ 00.0A-DFGHJKLM +19 BCDF.GHJK-DFGHJKLM ހށނރ.ބޅކއ-ނރބޅކއވމ BCDF.GHJK-DFGHJKLM +19 LMNP.QRST-DFGHJKLM ވމފދ.ތލގޏ-ނރބޅކއވމ LMNP.QRST-DFGHJKLM +19 VWXY.Z123-DFGHJKLM ސޑޒޓ.ޱ123-ނރބޅކއވމ VWXY.Z123-DFGHJKLM +19 4567.890B-DFGHJKLM 4567.890ހ-ނރބޅކއވމ 4567.890B-DFGHJKLM +19 PQ.XY-DFGHJKLM ދތ.ޒޓ-ނރބޅކއވމ PQ.XY-DFGHJKLM +19 PQ.XYZ-DFGHJKLM ދތ.ޒޓޱ-ނރބޅކއވމ PQ.XYZ-DFGHJKLM +19 PQX.YZ-DFGHJKLM ދތޒ.ޓޱ-ނރބޅކއވމ PQX.YZ-DFGHJKLM +19 PQ.RXYZ-DFGHJKLM ދތ.ލޒޓޱ-ނރބޅކއވމ PQ.RXYZ-DFGHJKLM +19 PQR.XYZ-DFGHJKLM ދތލ.ޒޓޱ-ނރބޅކއވމ PQR.XYZ-DFGHJKLM +19 PQRX.YZ-DFGHJKLM ދތލޒ.ޓޱ-ނރބޅކއވމ PQRX.YZ-DFGHJKLM +19 PQR.SXYZ-DFGHJKLM ދތލ.ގޒޓޱ-ނރބޅކއވމ PQR.SXYZ-DFGHJKLM +19 PQRS.XYZ-DFGHJKLM ދތލގ.ޒޓޱ-ނރބޅކއވމ PQRS.XYZ-DFGHJKLM +19 PQRS.TXYZ-DFGHJKLM ދތލގ.ޏޒޓޱ-ނރބޅކއވމ PQRS.TXYZ-DFGHJKLM +19 PQRST.VXYZ-DFGHJKLM ދތލގޏ.ސޒޓޱ-ނރބޅކއވމ PQRST.VXYZ-DFGHJKLM +19 P1.XY-DFGHJKLM ދ1.ޒޓ-ނރބޅކއވމ P1.XY-DFGHJKLM +19 PQ.2Y-DFGHJKLM ދތ.2ޓ-ނރބޅކއވމ PQ.2Y-DFGHJKLM +19 3Q.X4-DFGHJKLM 3ތ.ޒ4-ނރބޅކއވމ 3Q.X4-DFGHJKLM +19 5Q.6Y-DFGHJKLM 5ތ.6ޓ-ނރބޅކއވމ 5Q.6Y-DFGHJKLM +19 PQ.1YZ-DFGHJKLM ދތ.1ޓޱ-ނރބޅކއވމ PQ.1YZ-DFGHJKLM +19 PQ1.YZ-DFGHJKLM ދތ1.ޓޱ-ނރބޅކއވމ PQ1.YZ-DFGHJKLM +19 P2.X3Z-DFGHJKLM ދ2.ޒ3ޱ-ނރބޅކއވމ P2.X3Z-DFGHJKLM +19 P2X.3Z-DFGHJKLM ދ2ޒ.3ޱ-ނރބޅކއވމ P2X.3Z-DFGHJKLM +19 PQ.1XY2-DFGHJKLM ދތ.1ޒޓ2-ނރބޅކއވމ PQ.1XY2-DFGHJKLM +19 PQ1.XY2-DFGHJKLM ދތ1.ޒޓ2-ނރބޅކއވމ PQ1.XY2-DFGHJKLM +19 PQ1X.Y2-DFGHJKLM ދތ1ޒ.ޓ2-ނރބޅކއވމ PQ1X.Y2-DFGHJKLM +19 P3.RX4Z-DFGHJKLM ދ3.ލޒ4ޱ-ނރބޅކއވމ P3.RX4Z-DFGHJKLM +19 P3R.X4Z-DFGHJKLM ދ3ލ.ޒ4ޱ-ނރބޅކއވމ P3R.X4Z-DFGHJKLM +19 P3RX.4Z-DFGHJKLM ދ3ލޒ.4ޱ-ނރބޅކއވމ P3RX.4Z-DFGHJKLM +19 5Q.R6Y7-DFGHJKLM 5ތ.ލ6ޓ7-ނރބޅކއވމ 5Q.R6Y7-DFGHJKLM +19 5QR.6Y7-DFGHJKLM 5ތލ.6ޓ7-ނރބޅކއވމ 5QR.6Y7-DFGHJKLM +19 5QR6.Y7-DFGHJKLM 5ތލ6.ޓ7-ނރބޅކއވމ 5QR6.Y7-DFGHJKLM +19 PQ1.SX2Z-DFGHJKLM ދތ1.ގޒ2ޱ-ނރބޅކއވމ PQ1.SX2Z-DFGHJKLM +19 PQ1S.X2Z-DFGHJKLM ދތ1ގ.ޒ2ޱ-ނރބޅކއވމ PQ1S.X2Z-DFGHJKLM +19 P3R.S4YZ-DFGHJKLM ދ3ލ.ގ4ޓޱ-ނރބޅކއވމ P3R.S4YZ-DFGHJKLM +19 P3RS.4YZ-DFGHJKLM ދ3ލގ.4ޓޱ-ނރބޅކއވމ P3RS.4YZ-DFGHJKLM +19 5QR.6XY7-DFGHJKLM 5ތލ.6ޒޓ7-ނރބޅކއވމ 5QR.6XY7-DFGHJKLM +19 5QR6.XY7-DFGHJKLM 5ތލ6.ޒޓ7-ނރބޅކއވމ 5QR6.XY7-DFGHJKLM +19 8Q9.SX0Z-DFGHJKLM 8ތ9.ގޒ0ޱ-ނރބޅކއވމ 8Q9.SX0Z-DFGHJKLM +19 8Q9S.X0Z-DFGHJKLM 8ތ9ގ.ޒ0ޱ-ނރބޅކއވމ 8Q9S.X0Z-DFGHJKLM +19 1QR2.TX3Z-DFGHJKLM 1ތލ2.ޏޒ3ޱ-ނރބޅކއވމ 1QR2.TX3Z-DFGHJKLM +19 P4RS.5XY6-DFGHJKLM ދ4ލގ.5ޒޓ6-ނރބޅކއވމ P4RS.5XY6-DFGHJKLM +19 P7R8.T9Y0-DFGHJKLM ދ7ލ8.ޏ9ޓ0-ނރބޅކއވމ P7R8.T9Y0-DFGHJKLM +19 PQ1ST.2XY3-DFGHJKLM ދތ1ގޏ.2ޒޓ3-ނރބޅކއވމ PQ1ST.2XY3-DFGHJKLM +19 P4RS5.VX6Z-DFGHJKLM ދ4ލގ5.ސޒ6ޱ-ނރބޅކއވމ P4RS5.VX6Z-DFGHJKLM +19 7QR8T.V9YZ-DFGHJKLM 7ތލ8ޏ.ސ9ޓޱ-ނރބޅކއވމ 7QR8T.V9YZ-DFGHJKLM +19 P1R2T.3X4Z-DFGHJKLM ދ1ލ2ޏ.3ޒ4ޱ-ނރބޅކއވމ P1R2T.3X4Z-DFGHJKLM +19 5Q6S7.V8Y9-DFGHJKLM 5ތ6ގ7.ސ8ޓ9-ނރބޅކއވމ 5Q6S7.V8Y9-DFGHJKLM +19 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ޔހށނޗރބޅIކއވމފOދތލގޏޜސޑޒޓޱ-ނރބޅކއވމ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +19 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ޔހށނޗރބޅIކއވމފOދތލގޏޜސޑޒޓޱ-ނރބޅކއވމ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +19 OI.XX-DFGHJKLM OI.ޒޒ-ނރބޅކއވމ OI.XX-DFGHJKLM +19 OI.XX-DFGHJKLM OI.ޒޒ-ނރބޅކއވމ OI.XX-DFGHJKLM +19 OI.XX-OOOOOOOO-DFGHJKLM OI.ޒޒ-OOOOOOOO-ނރބޅކއވމ OI.XX-OOOOOOOO-DFGHJKLM +19 OI.XX-IIIIIIII-DFGHJKLM OI.ޒޒ-IIIIIIII-ނރބޅކއވމ OI.XX-IIIIIIII-DFGHJKLM +19 PQ.RS-01234567-DFGHJKLM ދތ.ލގ-01234567-ނރބޅކއވމ PQ.RS-01234567-DFGHJKLM +19 PQ.RS-890-DFGHJKLM ދތ.ލގ-890-ނރބޅކއވމ PQ.RS-890-DFGHJKLM +20 89.EU 89.ㄔㄓ 89.EU +20 00.0A 00.0ㄣ 00.0A +20 BCDF.GHJK ㄅㄈㄆㄇ.ㄉㄊㄋㄌ BCDF.GHJK +20 LMNP.QRST ㄍㄎㄏㄕ.ㄖㄐㄑㄒ LMNP.QRST +20 VWXY.Z123 ㄩㄗㄨㄘ.ㄙ123 VWXY.Z123 +20 4567.890B 4567.890ㄅ 4567.890B +20 PQ.XY ㄕㄖ.ㄨㄘ PQ.XY +20 PQ.XYZ ㄕㄖ.ㄨㄘㄙ PQ.XYZ +20 PQX.YZ ㄕㄖㄨ.ㄘㄙ PQX.YZ +20 PQ.RXYZ ㄕㄖ.ㄐㄨㄘㄙ PQ.RXYZ +20 PQR.XYZ ㄕㄖㄐ.ㄨㄘㄙ PQR.XYZ +20 PQRX.YZ ㄕㄖㄐㄨ.ㄘㄙ PQRX.YZ +20 PQR.SXYZ ㄕㄖㄐ.ㄑㄨㄘㄙ PQR.SXYZ +20 PQRS.XYZ ㄕㄖㄐㄑ.ㄨㄘㄙ PQRS.XYZ +20 PQRS.TXYZ ㄕㄖㄐㄑ.ㄒㄨㄘㄙ PQRS.TXYZ +20 PQRST.VXYZ ㄕㄖㄐㄑㄒ.ㄩㄨㄘㄙ PQRST.VXYZ +20 P1.XY ㄕ1.ㄨㄘ P1.XY +20 PQ.2Y ㄕㄖ.2ㄘ PQ.2Y +20 3Q.X4 3ㄖ.ㄨ4 3Q.X4 +20 5Q.6Y 5ㄖ.6ㄘ 5Q.6Y +20 PQ.1YZ ㄕㄖ.1ㄘㄙ PQ.1YZ +20 PQ1.YZ ㄕㄖ1.ㄘㄙ PQ1.YZ +20 P2.X3Z ㄕ2.ㄨ3ㄙ P2.X3Z +20 P2X.3Z ㄕ2ㄨ.3ㄙ P2X.3Z +20 PQ.1XY2 ㄕㄖ.1ㄨㄘ2 PQ.1XY2 +20 PQ1.XY2 ㄕㄖ1.ㄨㄘ2 PQ1.XY2 +20 PQ1X.Y2 ㄕㄖ1ㄨ.ㄘ2 PQ1X.Y2 +20 P3.RX4Z ㄕ3.ㄐㄨ4ㄙ P3.RX4Z +20 P3R.X4Z ㄕ3ㄐ.ㄨ4ㄙ P3R.X4Z +20 P3RX.4Z ㄕ3ㄐㄨ.4ㄙ P3RX.4Z +20 5Q.R6Y7 5ㄖ.ㄐ6ㄘ7 5Q.R6Y7 +20 5QR.6Y7 5ㄖㄐ.6ㄘ7 5QR.6Y7 +20 5QR6.Y7 5ㄖㄐ6.ㄘ7 5QR6.Y7 +20 PQ1.SX2Z ㄕㄖ1.ㄑㄨ2ㄙ PQ1.SX2Z +20 PQ1S.X2Z ㄕㄖ1ㄑ.ㄨ2ㄙ PQ1S.X2Z +20 P3R.S4YZ ㄕ3ㄐ.ㄑ4ㄘㄙ P3R.S4YZ +20 P3RS.4YZ ㄕ3ㄐㄑ.4ㄘㄙ P3RS.4YZ +20 5QR.6XY7 5ㄖㄐ.6ㄨㄘ7 5QR.6XY7 +20 5QR6.XY7 5ㄖㄐ6.ㄨㄘ7 5QR6.XY7 +20 8Q9.SX0Z 8ㄖ9.ㄑㄨ0ㄙ 8Q9.SX0Z +20 8Q9S.X0Z 8ㄖ9ㄑ.ㄨ0ㄙ 8Q9S.X0Z +20 1QR2.TX3Z 1ㄖㄐ2.ㄒㄨ3ㄙ 1QR2.TX3Z +20 P4RS.5XY6 ㄕ4ㄐㄑ.5ㄨㄘ6 P4RS.5XY6 +20 P7R8.T9Y0 ㄕ7ㄐ8.ㄒ9ㄘ0 P7R8.T9Y0 +20 PQ1ST.2XY3 ㄕㄖ1ㄑㄒ.2ㄨㄘ3 PQ1ST.2XY3 +20 P4RS5.VX6Z ㄕ4ㄐㄑ5.ㄩㄨ6ㄙ P4RS5.VX6Z +20 7QR8T.V9YZ 7ㄖㄐ8ㄒ.ㄩ9ㄘㄙ 7QR8T.V9YZ +20 P1R2T.3X4Z ㄕ1ㄐ2ㄒ.3ㄨ4ㄙ P1R2T.3X4Z +20 5Q6S7.V8Y9 5ㄖ6ㄑ7.ㄩ8ㄘ9 5Q6S7.V8Y9 +20 ABCDEFGHIJKLMNOPQRSTUVWXYZ ㄣㄅㄈㄆㄔㄇㄉㄊIㄋㄌㄍㄎㄏOㄕㄖㄐㄑㄒㄓㄩㄗㄨㄘㄙ ABCDEFGHIJKLMNOPQRSTUVWXYZ +20 ABCDEFGHIJKLMNOPQRSTUVWXYZ ㄣㄅㄈㄆㄔㄇㄉㄊIㄋㄌㄍㄎㄏOㄕㄖㄐㄑㄒㄓㄩㄗㄨㄘㄙ ABCDEFGHIJKLMNOPQRSTUVWXYZ +20 OI.XX OI.ㄨㄨ OI.XX +20 OI.XX OI.ㄨㄨ OI.XX +20 OI.XX-OOOOOOOO OI.ㄨㄨ-OOOOOOOO OI.XX-OOOOOOOO +20 OI.XX-IIIIIIII OI.ㄨㄨ-IIIIIIII OI.XX-IIIIIIII +20 PQ.RS-01234567 ㄕㄖ.ㄐㄑ-01234567 PQ.RS-01234567 +20 PQ.RS-890 ㄕㄖ.ㄐㄑ-890 PQ.RS-890 +20 89.EU-BC 89.ㄔㄓ-ㄅㄈ 89.EU-BC +20 00.0A-BC 00.0ㄣ-ㄅㄈ 00.0A-BC +20 BCDF.GHJK-BC ㄅㄈㄆㄇ.ㄉㄊㄋㄌ-ㄅㄈ BCDF.GHJK-BC +20 LMNP.QRST-BC ㄍㄎㄏㄕ.ㄖㄐㄑㄒ-ㄅㄈ LMNP.QRST-BC +20 VWXY.Z123-BC ㄩㄗㄨㄘ.ㄙ123-ㄅㄈ VWXY.Z123-BC +20 4567.890B-BC 4567.890ㄅ-ㄅㄈ 4567.890B-BC +20 PQ.XY-BC ㄕㄖ.ㄨㄘ-ㄅㄈ PQ.XY-BC +20 PQ.XYZ-BC ㄕㄖ.ㄨㄘㄙ-ㄅㄈ PQ.XYZ-BC +20 PQX.YZ-BC ㄕㄖㄨ.ㄘㄙ-ㄅㄈ PQX.YZ-BC +20 PQ.RXYZ-BC ㄕㄖ.ㄐㄨㄘㄙ-ㄅㄈ PQ.RXYZ-BC +20 PQR.XYZ-BC ㄕㄖㄐ.ㄨㄘㄙ-ㄅㄈ PQR.XYZ-BC +20 PQRX.YZ-BC ㄕㄖㄐㄨ.ㄘㄙ-ㄅㄈ PQRX.YZ-BC +20 PQR.SXYZ-BC ㄕㄖㄐ.ㄑㄨㄘㄙ-ㄅㄈ PQR.SXYZ-BC +20 PQRS.XYZ-BC ㄕㄖㄐㄑ.ㄨㄘㄙ-ㄅㄈ PQRS.XYZ-BC +20 PQRS.TXYZ-BC ㄕㄖㄐㄑ.ㄒㄨㄘㄙ-ㄅㄈ PQRS.TXYZ-BC +20 PQRST.VXYZ-BC ㄕㄖㄐㄑㄒ.ㄩㄨㄘㄙ-ㄅㄈ PQRST.VXYZ-BC +20 P1.XY-BC ㄕ1.ㄨㄘ-ㄅㄈ P1.XY-BC +20 PQ.2Y-BC ㄕㄖ.2ㄘ-ㄅㄈ PQ.2Y-BC +20 3Q.X4-BC 3ㄖ.ㄨ4-ㄅㄈ 3Q.X4-BC +20 5Q.6Y-BC 5ㄖ.6ㄘ-ㄅㄈ 5Q.6Y-BC +20 PQ.1YZ-BC ㄕㄖ.1ㄘㄙ-ㄅㄈ PQ.1YZ-BC +20 PQ1.YZ-BC ㄕㄖ1.ㄘㄙ-ㄅㄈ PQ1.YZ-BC +20 P2.X3Z-BC ㄕ2.ㄨ3ㄙ-ㄅㄈ P2.X3Z-BC +20 P2X.3Z-BC ㄕ2ㄨ.3ㄙ-ㄅㄈ P2X.3Z-BC +20 PQ.1XY2-BC ㄕㄖ.1ㄨㄘ2-ㄅㄈ PQ.1XY2-BC +20 PQ1.XY2-BC ㄕㄖ1.ㄨㄘ2-ㄅㄈ PQ1.XY2-BC +20 PQ1X.Y2-BC ㄕㄖ1ㄨ.ㄘ2-ㄅㄈ PQ1X.Y2-BC +20 P3.RX4Z-BC ㄕ3.ㄐㄨ4ㄙ-ㄅㄈ P3.RX4Z-BC +20 P3R.X4Z-BC ㄕ3ㄐ.ㄨ4ㄙ-ㄅㄈ P3R.X4Z-BC +20 P3RX.4Z-BC ㄕ3ㄐㄨ.4ㄙ-ㄅㄈ P3RX.4Z-BC +20 5Q.R6Y7-BC 5ㄖ.ㄐ6ㄘ7-ㄅㄈ 5Q.R6Y7-BC +20 5QR.6Y7-BC 5ㄖㄐ.6ㄘ7-ㄅㄈ 5QR.6Y7-BC +20 5QR6.Y7-BC 5ㄖㄐ6.ㄘ7-ㄅㄈ 5QR6.Y7-BC +20 PQ1.SX2Z-BC ㄕㄖ1.ㄑㄨ2ㄙ-ㄅㄈ PQ1.SX2Z-BC +20 PQ1S.X2Z-BC ㄕㄖ1ㄑ.ㄨ2ㄙ-ㄅㄈ PQ1S.X2Z-BC +20 P3R.S4YZ-BC ㄕ3ㄐ.ㄑ4ㄘㄙ-ㄅㄈ P3R.S4YZ-BC +20 P3RS.4YZ-BC ㄕ3ㄐㄑ.4ㄘㄙ-ㄅㄈ P3RS.4YZ-BC +20 5QR.6XY7-BC 5ㄖㄐ.6ㄨㄘ7-ㄅㄈ 5QR.6XY7-BC +20 5QR6.XY7-BC 5ㄖㄐ6.ㄨㄘ7-ㄅㄈ 5QR6.XY7-BC +20 8Q9.SX0Z-BC 8ㄖ9.ㄑㄨ0ㄙ-ㄅㄈ 8Q9.SX0Z-BC +20 8Q9S.X0Z-BC 8ㄖ9ㄑ.ㄨ0ㄙ-ㄅㄈ 8Q9S.X0Z-BC +20 1QR2.TX3Z-BC 1ㄖㄐ2.ㄒㄨ3ㄙ-ㄅㄈ 1QR2.TX3Z-BC +20 P4RS.5XY6-BC ㄕ4ㄐㄑ.5ㄨㄘ6-ㄅㄈ P4RS.5XY6-BC +20 P7R8.T9Y0-BC ㄕ7ㄐ8.ㄒ9ㄘ0-ㄅㄈ P7R8.T9Y0-BC +20 PQ1ST.2XY3-BC ㄕㄖ1ㄑㄒ.2ㄨㄘ3-ㄅㄈ PQ1ST.2XY3-BC +20 P4RS5.VX6Z-BC ㄕ4ㄐㄑ5.ㄩㄨ6ㄙ-ㄅㄈ P4RS5.VX6Z-BC +20 7QR8T.V9YZ-BC 7ㄖㄐ8ㄒ.ㄩ9ㄘㄙ-ㄅㄈ 7QR8T.V9YZ-BC +20 P1R2T.3X4Z-BC ㄕ1ㄐ2ㄒ.3ㄨ4ㄙ-ㄅㄈ P1R2T.3X4Z-BC +20 5Q6S7.V8Y9-BC 5ㄖ6ㄑ7.ㄩ8ㄘ9-ㄅㄈ 5Q6S7.V8Y9-BC +20 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ㄣㄅㄈㄆㄔㄇㄉㄊIㄋㄌㄍㄎㄏOㄕㄖㄐㄑㄒㄓㄩㄗㄨㄘㄙ-ㄅㄈ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +20 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ㄣㄅㄈㄆㄔㄇㄉㄊIㄋㄌㄍㄎㄏOㄕㄖㄐㄑㄒㄓㄩㄗㄨㄘㄙ-ㄅㄈ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +20 OI.XX-BC OI.ㄨㄨ-ㄅㄈ OI.XX-BC +20 OI.XX-BC OI.ㄨㄨ-ㄅㄈ OI.XX-BC +20 OI.XX-OOOOOOOO-BC OI.ㄨㄨ-OOOOOOOO-ㄅㄈ OI.XX-OOOOOOOO-BC +20 OI.XX-IIIIIIII-BC OI.ㄨㄨ-IIIIIIII-ㄅㄈ OI.XX-IIIIIIII-BC +20 PQ.RS-01234567-BC ㄕㄖ.ㄐㄑ-01234567-ㄅㄈ PQ.RS-01234567-BC +20 PQ.RS-890-BC ㄕㄖ.ㄐㄑ-890-ㄅㄈ PQ.RS-890-BC +20 89.EU-DFGHJKLM 89.ㄔㄓ-ㄆㄇㄉㄊㄋㄌㄍㄎ 89.EU-DFGHJKLM +20 00.0A-DFGHJKLM 00.0ㄣ-ㄆㄇㄉㄊㄋㄌㄍㄎ 00.0A-DFGHJKLM +20 BCDF.GHJK-DFGHJKLM ㄅㄈㄆㄇ.ㄉㄊㄋㄌ-ㄆㄇㄉㄊㄋㄌㄍㄎ BCDF.GHJK-DFGHJKLM +20 LMNP.QRST-DFGHJKLM ㄍㄎㄏㄕ.ㄖㄐㄑㄒ-ㄆㄇㄉㄊㄋㄌㄍㄎ LMNP.QRST-DFGHJKLM +20 VWXY.Z123-DFGHJKLM ㄩㄗㄨㄘ.ㄙ123-ㄆㄇㄉㄊㄋㄌㄍㄎ VWXY.Z123-DFGHJKLM +20 4567.890B-DFGHJKLM 4567.890ㄅ-ㄆㄇㄉㄊㄋㄌㄍㄎ 4567.890B-DFGHJKLM +20 PQ.XY-DFGHJKLM ㄕㄖ.ㄨㄘ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ.XY-DFGHJKLM +20 PQ.XYZ-DFGHJKLM ㄕㄖ.ㄨㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ.XYZ-DFGHJKLM +20 PQX.YZ-DFGHJKLM ㄕㄖㄨ.ㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQX.YZ-DFGHJKLM +20 PQ.RXYZ-DFGHJKLM ㄕㄖ.ㄐㄨㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ.RXYZ-DFGHJKLM +20 PQR.XYZ-DFGHJKLM ㄕㄖㄐ.ㄨㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQR.XYZ-DFGHJKLM +20 PQRX.YZ-DFGHJKLM ㄕㄖㄐㄨ.ㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQRX.YZ-DFGHJKLM +20 PQR.SXYZ-DFGHJKLM ㄕㄖㄐ.ㄑㄨㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQR.SXYZ-DFGHJKLM +20 PQRS.XYZ-DFGHJKLM ㄕㄖㄐㄑ.ㄨㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQRS.XYZ-DFGHJKLM +20 PQRS.TXYZ-DFGHJKLM ㄕㄖㄐㄑ.ㄒㄨㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQRS.TXYZ-DFGHJKLM +20 PQRST.VXYZ-DFGHJKLM ㄕㄖㄐㄑㄒ.ㄩㄨㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQRST.VXYZ-DFGHJKLM +20 P1.XY-DFGHJKLM ㄕ1.ㄨㄘ-ㄆㄇㄉㄊㄋㄌㄍㄎ P1.XY-DFGHJKLM +20 PQ.2Y-DFGHJKLM ㄕㄖ.2ㄘ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ.2Y-DFGHJKLM +20 3Q.X4-DFGHJKLM 3ㄖ.ㄨ4-ㄆㄇㄉㄊㄋㄌㄍㄎ 3Q.X4-DFGHJKLM +20 5Q.6Y-DFGHJKLM 5ㄖ.6ㄘ-ㄆㄇㄉㄊㄋㄌㄍㄎ 5Q.6Y-DFGHJKLM +20 PQ.1YZ-DFGHJKLM ㄕㄖ.1ㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ.1YZ-DFGHJKLM +20 PQ1.YZ-DFGHJKLM ㄕㄖ1.ㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ1.YZ-DFGHJKLM +20 P2.X3Z-DFGHJKLM ㄕ2.ㄨ3ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ P2.X3Z-DFGHJKLM +20 P2X.3Z-DFGHJKLM ㄕ2ㄨ.3ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ P2X.3Z-DFGHJKLM +20 PQ.1XY2-DFGHJKLM ㄕㄖ.1ㄨㄘ2-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ.1XY2-DFGHJKLM +20 PQ1.XY2-DFGHJKLM ㄕㄖ1.ㄨㄘ2-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ1.XY2-DFGHJKLM +20 PQ1X.Y2-DFGHJKLM ㄕㄖ1ㄨ.ㄘ2-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ1X.Y2-DFGHJKLM +20 P3.RX4Z-DFGHJKLM ㄕ3.ㄐㄨ4ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ P3.RX4Z-DFGHJKLM +20 P3R.X4Z-DFGHJKLM ㄕ3ㄐ.ㄨ4ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ P3R.X4Z-DFGHJKLM +20 P3RX.4Z-DFGHJKLM ㄕ3ㄐㄨ.4ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ P3RX.4Z-DFGHJKLM +20 5Q.R6Y7-DFGHJKLM 5ㄖ.ㄐ6ㄘ7-ㄆㄇㄉㄊㄋㄌㄍㄎ 5Q.R6Y7-DFGHJKLM +20 5QR.6Y7-DFGHJKLM 5ㄖㄐ.6ㄘ7-ㄆㄇㄉㄊㄋㄌㄍㄎ 5QR.6Y7-DFGHJKLM +20 5QR6.Y7-DFGHJKLM 5ㄖㄐ6.ㄘ7-ㄆㄇㄉㄊㄋㄌㄍㄎ 5QR6.Y7-DFGHJKLM +20 PQ1.SX2Z-DFGHJKLM ㄕㄖ1.ㄑㄨ2ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ1.SX2Z-DFGHJKLM +20 PQ1S.X2Z-DFGHJKLM ㄕㄖ1ㄑ.ㄨ2ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ1S.X2Z-DFGHJKLM +20 P3R.S4YZ-DFGHJKLM ㄕ3ㄐ.ㄑ4ㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ P3R.S4YZ-DFGHJKLM +20 P3RS.4YZ-DFGHJKLM ㄕ3ㄐㄑ.4ㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ P3RS.4YZ-DFGHJKLM +20 5QR.6XY7-DFGHJKLM 5ㄖㄐ.6ㄨㄘ7-ㄆㄇㄉㄊㄋㄌㄍㄎ 5QR.6XY7-DFGHJKLM +20 5QR6.XY7-DFGHJKLM 5ㄖㄐ6.ㄨㄘ7-ㄆㄇㄉㄊㄋㄌㄍㄎ 5QR6.XY7-DFGHJKLM +20 8Q9.SX0Z-DFGHJKLM 8ㄖ9.ㄑㄨ0ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ 8Q9.SX0Z-DFGHJKLM +20 8Q9S.X0Z-DFGHJKLM 8ㄖ9ㄑ.ㄨ0ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ 8Q9S.X0Z-DFGHJKLM +20 1QR2.TX3Z-DFGHJKLM 1ㄖㄐ2.ㄒㄨ3ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ 1QR2.TX3Z-DFGHJKLM +20 P4RS.5XY6-DFGHJKLM ㄕ4ㄐㄑ.5ㄨㄘ6-ㄆㄇㄉㄊㄋㄌㄍㄎ P4RS.5XY6-DFGHJKLM +20 P7R8.T9Y0-DFGHJKLM ㄕ7ㄐ8.ㄒ9ㄘ0-ㄆㄇㄉㄊㄋㄌㄍㄎ P7R8.T9Y0-DFGHJKLM +20 PQ1ST.2XY3-DFGHJKLM ㄕㄖ1ㄑㄒ.2ㄨㄘ3-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ1ST.2XY3-DFGHJKLM +20 P4RS5.VX6Z-DFGHJKLM ㄕ4ㄐㄑ5.ㄩㄨ6ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ P4RS5.VX6Z-DFGHJKLM +20 7QR8T.V9YZ-DFGHJKLM 7ㄖㄐ8ㄒ.ㄩ9ㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ 7QR8T.V9YZ-DFGHJKLM +20 P1R2T.3X4Z-DFGHJKLM ㄕ1ㄐ2ㄒ.3ㄨ4ㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ P1R2T.3X4Z-DFGHJKLM +20 5Q6S7.V8Y9-DFGHJKLM 5ㄖ6ㄑ7.ㄩ8ㄘ9-ㄆㄇㄉㄊㄋㄌㄍㄎ 5Q6S7.V8Y9-DFGHJKLM +20 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ㄣㄅㄈㄆㄔㄇㄉㄊIㄋㄌㄍㄎㄏOㄕㄖㄐㄑㄒㄓㄩㄗㄨㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +20 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ㄣㄅㄈㄆㄔㄇㄉㄊIㄋㄌㄍㄎㄏOㄕㄖㄐㄑㄒㄓㄩㄗㄨㄘㄙ-ㄆㄇㄉㄊㄋㄌㄍㄎ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +20 OI.XX-DFGHJKLM OI.ㄨㄨ-ㄆㄇㄉㄊㄋㄌㄍㄎ OI.XX-DFGHJKLM +20 OI.XX-DFGHJKLM OI.ㄨㄨ-ㄆㄇㄉㄊㄋㄌㄍㄎ OI.XX-DFGHJKLM +20 OI.XX-OOOOOOOO-DFGHJKLM OI.ㄨㄨ-OOOOOOOO-ㄆㄇㄉㄊㄋㄌㄍㄎ OI.XX-OOOOOOOO-DFGHJKLM +20 OI.XX-IIIIIIII-DFGHJKLM OI.ㄨㄨ-IIIIIIII-ㄆㄇㄉㄊㄋㄌㄍㄎ OI.XX-IIIIIIII-DFGHJKLM +20 PQ.RS-01234567-DFGHJKLM ㄕㄖ.ㄐㄑ-01234567-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ.RS-01234567-DFGHJKLM +20 PQ.RS-890-DFGHJKLM ㄕㄖ.ㄐㄑ-890-ㄆㄇㄉㄊㄋㄌㄍㄎ PQ.RS-890-DFGHJKLM +21 89.EU 89.ⵓⵢ 89.EU +21 00.0A 00.0ⵉ 00.0A +21 BCDF.GHJK ⴱⴳⴷⴼ.ⴽⵀⵃⵄ BCDF.GHJK +21 LMNP.QRST ⵅⵇⵍⵎ.ⵕⵖⵙⵚ LMNP.QRST +21 VWXY.Z123 ⵛⵜⵟⵡ.ⵣ123 VWXY.Z123 +21 4567.890B 4567.890ⴱ 4567.890B +21 PQ.XY ⵎⵕ.ⵟⵡ PQ.XY +21 PQ.XYZ ⵎⵕ.ⵟⵡⵣ PQ.XYZ +21 PQX.YZ ⵎⵕⵟ.ⵡⵣ PQX.YZ +21 PQ.RXYZ ⵎⵕ.ⵖⵟⵡⵣ PQ.RXYZ +21 PQR.XYZ ⵎⵕⵖ.ⵟⵡⵣ PQR.XYZ +21 PQRX.YZ ⵎⵕⵖⵟ.ⵡⵣ PQRX.YZ +21 PQR.SXYZ ⵎⵕⵖ.ⵙⵟⵡⵣ PQR.SXYZ +21 PQRS.XYZ ⵎⵕⵖⵙ.ⵟⵡⵣ PQRS.XYZ +21 PQRS.TXYZ ⵎⵕⵖⵙ.ⵚⵟⵡⵣ PQRS.TXYZ +21 PQRST.VXYZ ⵎⵕⵖⵙⵚ.ⵛⵟⵡⵣ PQRST.VXYZ +21 P1.XY ⵎ1.ⵟⵡ P1.XY +21 PQ.2Y ⵎⵕ.2ⵡ PQ.2Y +21 3Q.X4 3ⵕ.ⵟ4 3Q.X4 +21 5Q.6Y 5ⵕ.6ⵡ 5Q.6Y +21 PQ.1YZ ⵎⵕ.1ⵡⵣ PQ.1YZ +21 PQ1.YZ ⵎⵕ1.ⵡⵣ PQ1.YZ +21 P2.X3Z ⵎ2.ⵟ3ⵣ P2.X3Z +21 P2X.3Z ⵎ2ⵟ.3ⵣ P2X.3Z +21 PQ.1XY2 ⵎⵕ.1ⵟⵡ2 PQ.1XY2 +21 PQ1.XY2 ⵎⵕ1.ⵟⵡ2 PQ1.XY2 +21 PQ1X.Y2 ⵎⵕ1ⵟ.ⵡ2 PQ1X.Y2 +21 P3.RX4Z ⵎ3.ⵖⵟ4ⵣ P3.RX4Z +21 P3R.X4Z ⵎ3ⵖ.ⵟ4ⵣ P3R.X4Z +21 P3RX.4Z ⵎ3ⵖⵟ.4ⵣ P3RX.4Z +21 5Q.R6Y7 5ⵕ.ⵖ6ⵡ7 5Q.R6Y7 +21 5QR.6Y7 5ⵕⵖ.6ⵡ7 5QR.6Y7 +21 5QR6.Y7 5ⵕⵖ6.ⵡ7 5QR6.Y7 +21 PQ1.SX2Z ⵎⵕ1.ⵙⵟ2ⵣ PQ1.SX2Z +21 PQ1S.X2Z ⵎⵕ1ⵙ.ⵟ2ⵣ PQ1S.X2Z +21 P3R.S4YZ ⵎ3ⵖ.ⵙ4ⵡⵣ P3R.S4YZ +21 P3RS.4YZ ⵎ3ⵖⵙ.4ⵡⵣ P3RS.4YZ +21 5QR.6XY7 5ⵕⵖ.6ⵟⵡ7 5QR.6XY7 +21 5QR6.XY7 5ⵕⵖ6.ⵟⵡ7 5QR6.XY7 +21 8Q9.SX0Z 8ⵕ9.ⵙⵟ0ⵣ 8Q9.SX0Z +21 8Q9S.X0Z 8ⵕ9ⵙ.ⵟ0ⵣ 8Q9S.X0Z +21 1QR2.TX3Z 1ⵕⵖ2.ⵚⵟ3ⵣ 1QR2.TX3Z +21 P4RS.5XY6 ⵎ4ⵖⵙ.5ⵟⵡ6 P4RS.5XY6 +21 P7R8.T9Y0 ⵎ7ⵖ8.ⵚ9ⵡ0 P7R8.T9Y0 +21 PQ1ST.2XY3 ⵎⵕ1ⵙⵚ.2ⵟⵡ3 PQ1ST.2XY3 +21 P4RS5.VX6Z ⵎ4ⵖⵙ5.ⵛⵟ6ⵣ P4RS5.VX6Z +21 7QR8T.V9YZ 7ⵕⵖ8ⵚ.ⵛ9ⵡⵣ 7QR8T.V9YZ +21 P1R2T.3X4Z ⵎ1ⵖ2ⵚ.3ⵟ4ⵣ P1R2T.3X4Z +21 5Q6S7.V8Y9 5ⵕ6ⵙ7.ⵛ8ⵡ9 5Q6S7.V8Y9 +21 ABCDEFGHIJKLMNOPQRSTUVWXYZ ⵉⴱⴳⴷⵓⴼⴽⵀⵏⵃⵄⵅⵇⵍⵔⵎⵕⵖⵙⵚⵢⵛⵜⵟⵡⵣ ABCDEFGHIJKLMNOPQRSTUVWXYZ +21 ABCDEFGHIJKLMNOPQRSTUVWXYZ ⵉⴱⴳⴷⵓⴼⴽⵀⵏⵃⵄⵅⵇⵍⵔⵎⵕⵖⵙⵚⵢⵛⵜⵟⵡⵣ ABCDEFGHIJKLMNOPQRSTUVWXYZ +21 OI.XX ⵔⵏ.ⵟⵟ OI.XX +21 OI.XX ⵔⵏ.ⵟⵟ OI.XX +21 OI.XX-OOOOOOOO ⵔⵏ.ⵟⵟ-ⵔⵔⵔⵔⵔⵔⵔⵔ OI.XX-OOOOOOOO +21 OI.XX-IIIIIIII ⵔⵏ.ⵟⵟ-ⵏⵏⵏⵏⵏⵏⵏⵏ OI.XX-IIIIIIII +21 PQ.RS-01234567 ⵎⵕ.ⵖⵙ-01234567 PQ.RS-01234567 +21 PQ.RS-890 ⵎⵕ.ⵖⵙ-890 PQ.RS-890 +21 89.EU-BC 89.ⵓⵢ-ⴱⴳ 89.EU-BC +21 00.0A-BC 00.0ⵉ-ⴱⴳ 00.0A-BC +21 BCDF.GHJK-BC ⴱⴳⴷⴼ.ⴽⵀⵃⵄ-ⴱⴳ BCDF.GHJK-BC +21 LMNP.QRST-BC ⵅⵇⵍⵎ.ⵕⵖⵙⵚ-ⴱⴳ LMNP.QRST-BC +21 VWXY.Z123-BC ⵛⵜⵟⵡ.ⵣ123-ⴱⴳ VWXY.Z123-BC +21 4567.890B-BC 4567.890ⴱ-ⴱⴳ 4567.890B-BC +21 PQ.XY-BC ⵎⵕ.ⵟⵡ-ⴱⴳ PQ.XY-BC +21 PQ.XYZ-BC ⵎⵕ.ⵟⵡⵣ-ⴱⴳ PQ.XYZ-BC +21 PQX.YZ-BC ⵎⵕⵟ.ⵡⵣ-ⴱⴳ PQX.YZ-BC +21 PQ.RXYZ-BC ⵎⵕ.ⵖⵟⵡⵣ-ⴱⴳ PQ.RXYZ-BC +21 PQR.XYZ-BC ⵎⵕⵖ.ⵟⵡⵣ-ⴱⴳ PQR.XYZ-BC +21 PQRX.YZ-BC ⵎⵕⵖⵟ.ⵡⵣ-ⴱⴳ PQRX.YZ-BC +21 PQR.SXYZ-BC ⵎⵕⵖ.ⵙⵟⵡⵣ-ⴱⴳ PQR.SXYZ-BC +21 PQRS.XYZ-BC ⵎⵕⵖⵙ.ⵟⵡⵣ-ⴱⴳ PQRS.XYZ-BC +21 PQRS.TXYZ-BC ⵎⵕⵖⵙ.ⵚⵟⵡⵣ-ⴱⴳ PQRS.TXYZ-BC +21 PQRST.VXYZ-BC ⵎⵕⵖⵙⵚ.ⵛⵟⵡⵣ-ⴱⴳ PQRST.VXYZ-BC +21 P1.XY-BC ⵎ1.ⵟⵡ-ⴱⴳ P1.XY-BC +21 PQ.2Y-BC ⵎⵕ.2ⵡ-ⴱⴳ PQ.2Y-BC +21 3Q.X4-BC 3ⵕ.ⵟ4-ⴱⴳ 3Q.X4-BC +21 5Q.6Y-BC 5ⵕ.6ⵡ-ⴱⴳ 5Q.6Y-BC +21 PQ.1YZ-BC ⵎⵕ.1ⵡⵣ-ⴱⴳ PQ.1YZ-BC +21 PQ1.YZ-BC ⵎⵕ1.ⵡⵣ-ⴱⴳ PQ1.YZ-BC +21 P2.X3Z-BC ⵎ2.ⵟ3ⵣ-ⴱⴳ P2.X3Z-BC +21 P2X.3Z-BC ⵎ2ⵟ.3ⵣ-ⴱⴳ P2X.3Z-BC +21 PQ.1XY2-BC ⵎⵕ.1ⵟⵡ2-ⴱⴳ PQ.1XY2-BC +21 PQ1.XY2-BC ⵎⵕ1.ⵟⵡ2-ⴱⴳ PQ1.XY2-BC +21 PQ1X.Y2-BC ⵎⵕ1ⵟ.ⵡ2-ⴱⴳ PQ1X.Y2-BC +21 P3.RX4Z-BC ⵎ3.ⵖⵟ4ⵣ-ⴱⴳ P3.RX4Z-BC +21 P3R.X4Z-BC ⵎ3ⵖ.ⵟ4ⵣ-ⴱⴳ P3R.X4Z-BC +21 P3RX.4Z-BC ⵎ3ⵖⵟ.4ⵣ-ⴱⴳ P3RX.4Z-BC +21 5Q.R6Y7-BC 5ⵕ.ⵖ6ⵡ7-ⴱⴳ 5Q.R6Y7-BC +21 5QR.6Y7-BC 5ⵕⵖ.6ⵡ7-ⴱⴳ 5QR.6Y7-BC +21 5QR6.Y7-BC 5ⵕⵖ6.ⵡ7-ⴱⴳ 5QR6.Y7-BC +21 PQ1.SX2Z-BC ⵎⵕ1.ⵙⵟ2ⵣ-ⴱⴳ PQ1.SX2Z-BC +21 PQ1S.X2Z-BC ⵎⵕ1ⵙ.ⵟ2ⵣ-ⴱⴳ PQ1S.X2Z-BC +21 P3R.S4YZ-BC ⵎ3ⵖ.ⵙ4ⵡⵣ-ⴱⴳ P3R.S4YZ-BC +21 P3RS.4YZ-BC ⵎ3ⵖⵙ.4ⵡⵣ-ⴱⴳ P3RS.4YZ-BC +21 5QR.6XY7-BC 5ⵕⵖ.6ⵟⵡ7-ⴱⴳ 5QR.6XY7-BC +21 5QR6.XY7-BC 5ⵕⵖ6.ⵟⵡ7-ⴱⴳ 5QR6.XY7-BC +21 8Q9.SX0Z-BC 8ⵕ9.ⵙⵟ0ⵣ-ⴱⴳ 8Q9.SX0Z-BC +21 8Q9S.X0Z-BC 8ⵕ9ⵙ.ⵟ0ⵣ-ⴱⴳ 8Q9S.X0Z-BC +21 1QR2.TX3Z-BC 1ⵕⵖ2.ⵚⵟ3ⵣ-ⴱⴳ 1QR2.TX3Z-BC +21 P4RS.5XY6-BC ⵎ4ⵖⵙ.5ⵟⵡ6-ⴱⴳ P4RS.5XY6-BC +21 P7R8.T9Y0-BC ⵎ7ⵖ8.ⵚ9ⵡ0-ⴱⴳ P7R8.T9Y0-BC +21 PQ1ST.2XY3-BC ⵎⵕ1ⵙⵚ.2ⵟⵡ3-ⴱⴳ PQ1ST.2XY3-BC +21 P4RS5.VX6Z-BC ⵎ4ⵖⵙ5.ⵛⵟ6ⵣ-ⴱⴳ P4RS5.VX6Z-BC +21 7QR8T.V9YZ-BC 7ⵕⵖ8ⵚ.ⵛ9ⵡⵣ-ⴱⴳ 7QR8T.V9YZ-BC +21 P1R2T.3X4Z-BC ⵎ1ⵖ2ⵚ.3ⵟ4ⵣ-ⴱⴳ P1R2T.3X4Z-BC +21 5Q6S7.V8Y9-BC 5ⵕ6ⵙ7.ⵛ8ⵡ9-ⴱⴳ 5Q6S7.V8Y9-BC +21 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ⵉⴱⴳⴷⵓⴼⴽⵀⵏⵃⵄⵅⵇⵍⵔⵎⵕⵖⵙⵚⵢⵛⵜⵟⵡⵣ-ⴱⴳ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +21 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ⵉⴱⴳⴷⵓⴼⴽⵀⵏⵃⵄⵅⵇⵍⵔⵎⵕⵖⵙⵚⵢⵛⵜⵟⵡⵣ-ⴱⴳ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +21 OI.XX-BC ⵔⵏ.ⵟⵟ-ⴱⴳ OI.XX-BC +21 OI.XX-BC ⵔⵏ.ⵟⵟ-ⴱⴳ OI.XX-BC +21 OI.XX-OOOOOOOO-BC ⵔⵏ.ⵟⵟ-ⵔⵔⵔⵔⵔⵔⵔⵔ-ⴱⴳ OI.XX-OOOOOOOO-BC +21 OI.XX-IIIIIIII-BC ⵔⵏ.ⵟⵟ-ⵏⵏⵏⵏⵏⵏⵏⵏ-ⴱⴳ OI.XX-IIIIIIII-BC +21 PQ.RS-01234567-BC ⵎⵕ.ⵖⵙ-01234567-ⴱⴳ PQ.RS-01234567-BC +21 PQ.RS-890-BC ⵎⵕ.ⵖⵙ-890-ⴱⴳ PQ.RS-890-BC +21 89.EU-DFGHJKLM 89.ⵓⵢ-ⴷⴼⴽⵀⵃⵄⵅⵇ 89.EU-DFGHJKLM +21 00.0A-DFGHJKLM 00.0ⵉ-ⴷⴼⴽⵀⵃⵄⵅⵇ 00.0A-DFGHJKLM +21 BCDF.GHJK-DFGHJKLM ⴱⴳⴷⴼ.ⴽⵀⵃⵄ-ⴷⴼⴽⵀⵃⵄⵅⵇ BCDF.GHJK-DFGHJKLM +21 LMNP.QRST-DFGHJKLM ⵅⵇⵍⵎ.ⵕⵖⵙⵚ-ⴷⴼⴽⵀⵃⵄⵅⵇ LMNP.QRST-DFGHJKLM +21 VWXY.Z123-DFGHJKLM ⵛⵜⵟⵡ.ⵣ123-ⴷⴼⴽⵀⵃⵄⵅⵇ VWXY.Z123-DFGHJKLM +21 4567.890B-DFGHJKLM 4567.890ⴱ-ⴷⴼⴽⵀⵃⵄⵅⵇ 4567.890B-DFGHJKLM +21 PQ.XY-DFGHJKLM ⵎⵕ.ⵟⵡ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ.XY-DFGHJKLM +21 PQ.XYZ-DFGHJKLM ⵎⵕ.ⵟⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ.XYZ-DFGHJKLM +21 PQX.YZ-DFGHJKLM ⵎⵕⵟ.ⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQX.YZ-DFGHJKLM +21 PQ.RXYZ-DFGHJKLM ⵎⵕ.ⵖⵟⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ.RXYZ-DFGHJKLM +21 PQR.XYZ-DFGHJKLM ⵎⵕⵖ.ⵟⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQR.XYZ-DFGHJKLM +21 PQRX.YZ-DFGHJKLM ⵎⵕⵖⵟ.ⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQRX.YZ-DFGHJKLM +21 PQR.SXYZ-DFGHJKLM ⵎⵕⵖ.ⵙⵟⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQR.SXYZ-DFGHJKLM +21 PQRS.XYZ-DFGHJKLM ⵎⵕⵖⵙ.ⵟⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQRS.XYZ-DFGHJKLM +21 PQRS.TXYZ-DFGHJKLM ⵎⵕⵖⵙ.ⵚⵟⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQRS.TXYZ-DFGHJKLM +21 PQRST.VXYZ-DFGHJKLM ⵎⵕⵖⵙⵚ.ⵛⵟⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQRST.VXYZ-DFGHJKLM +21 P1.XY-DFGHJKLM ⵎ1.ⵟⵡ-ⴷⴼⴽⵀⵃⵄⵅⵇ P1.XY-DFGHJKLM +21 PQ.2Y-DFGHJKLM ⵎⵕ.2ⵡ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ.2Y-DFGHJKLM +21 3Q.X4-DFGHJKLM 3ⵕ.ⵟ4-ⴷⴼⴽⵀⵃⵄⵅⵇ 3Q.X4-DFGHJKLM +21 5Q.6Y-DFGHJKLM 5ⵕ.6ⵡ-ⴷⴼⴽⵀⵃⵄⵅⵇ 5Q.6Y-DFGHJKLM +21 PQ.1YZ-DFGHJKLM ⵎⵕ.1ⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ.1YZ-DFGHJKLM +21 PQ1.YZ-DFGHJKLM ⵎⵕ1.ⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ1.YZ-DFGHJKLM +21 P2.X3Z-DFGHJKLM ⵎ2.ⵟ3ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ P2.X3Z-DFGHJKLM +21 P2X.3Z-DFGHJKLM ⵎ2ⵟ.3ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ P2X.3Z-DFGHJKLM +21 PQ.1XY2-DFGHJKLM ⵎⵕ.1ⵟⵡ2-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ.1XY2-DFGHJKLM +21 PQ1.XY2-DFGHJKLM ⵎⵕ1.ⵟⵡ2-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ1.XY2-DFGHJKLM +21 PQ1X.Y2-DFGHJKLM ⵎⵕ1ⵟ.ⵡ2-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ1X.Y2-DFGHJKLM +21 P3.RX4Z-DFGHJKLM ⵎ3.ⵖⵟ4ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ P3.RX4Z-DFGHJKLM +21 P3R.X4Z-DFGHJKLM ⵎ3ⵖ.ⵟ4ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ P3R.X4Z-DFGHJKLM +21 P3RX.4Z-DFGHJKLM ⵎ3ⵖⵟ.4ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ P3RX.4Z-DFGHJKLM +21 5Q.R6Y7-DFGHJKLM 5ⵕ.ⵖ6ⵡ7-ⴷⴼⴽⵀⵃⵄⵅⵇ 5Q.R6Y7-DFGHJKLM +21 5QR.6Y7-DFGHJKLM 5ⵕⵖ.6ⵡ7-ⴷⴼⴽⵀⵃⵄⵅⵇ 5QR.6Y7-DFGHJKLM +21 5QR6.Y7-DFGHJKLM 5ⵕⵖ6.ⵡ7-ⴷⴼⴽⵀⵃⵄⵅⵇ 5QR6.Y7-DFGHJKLM +21 PQ1.SX2Z-DFGHJKLM ⵎⵕ1.ⵙⵟ2ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ1.SX2Z-DFGHJKLM +21 PQ1S.X2Z-DFGHJKLM ⵎⵕ1ⵙ.ⵟ2ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ1S.X2Z-DFGHJKLM +21 P3R.S4YZ-DFGHJKLM ⵎ3ⵖ.ⵙ4ⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ P3R.S4YZ-DFGHJKLM +21 P3RS.4YZ-DFGHJKLM ⵎ3ⵖⵙ.4ⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ P3RS.4YZ-DFGHJKLM +21 5QR.6XY7-DFGHJKLM 5ⵕⵖ.6ⵟⵡ7-ⴷⴼⴽⵀⵃⵄⵅⵇ 5QR.6XY7-DFGHJKLM +21 5QR6.XY7-DFGHJKLM 5ⵕⵖ6.ⵟⵡ7-ⴷⴼⴽⵀⵃⵄⵅⵇ 5QR6.XY7-DFGHJKLM +21 8Q9.SX0Z-DFGHJKLM 8ⵕ9.ⵙⵟ0ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ 8Q9.SX0Z-DFGHJKLM +21 8Q9S.X0Z-DFGHJKLM 8ⵕ9ⵙ.ⵟ0ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ 8Q9S.X0Z-DFGHJKLM +21 1QR2.TX3Z-DFGHJKLM 1ⵕⵖ2.ⵚⵟ3ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ 1QR2.TX3Z-DFGHJKLM +21 P4RS.5XY6-DFGHJKLM ⵎ4ⵖⵙ.5ⵟⵡ6-ⴷⴼⴽⵀⵃⵄⵅⵇ P4RS.5XY6-DFGHJKLM +21 P7R8.T9Y0-DFGHJKLM ⵎ7ⵖ8.ⵚ9ⵡ0-ⴷⴼⴽⵀⵃⵄⵅⵇ P7R8.T9Y0-DFGHJKLM +21 PQ1ST.2XY3-DFGHJKLM ⵎⵕ1ⵙⵚ.2ⵟⵡ3-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ1ST.2XY3-DFGHJKLM +21 P4RS5.VX6Z-DFGHJKLM ⵎ4ⵖⵙ5.ⵛⵟ6ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ P4RS5.VX6Z-DFGHJKLM +21 7QR8T.V9YZ-DFGHJKLM 7ⵕⵖ8ⵚ.ⵛ9ⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ 7QR8T.V9YZ-DFGHJKLM +21 P1R2T.3X4Z-DFGHJKLM ⵎ1ⵖ2ⵚ.3ⵟ4ⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ P1R2T.3X4Z-DFGHJKLM +21 5Q6S7.V8Y9-DFGHJKLM 5ⵕ6ⵙ7.ⵛ8ⵡ9-ⴷⴼⴽⵀⵃⵄⵅⵇ 5Q6S7.V8Y9-DFGHJKLM +21 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ⵉⴱⴳⴷⵓⴼⴽⵀⵏⵃⵄⵅⵇⵍⵔⵎⵕⵖⵙⵚⵢⵛⵜⵟⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +21 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ⵉⴱⴳⴷⵓⴼⴽⵀⵏⵃⵄⵅⵇⵍⵔⵎⵕⵖⵙⵚⵢⵛⵜⵟⵡⵣ-ⴷⴼⴽⵀⵃⵄⵅⵇ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +21 OI.XX-DFGHJKLM ⵔⵏ.ⵟⵟ-ⴷⴼⴽⵀⵃⵄⵅⵇ OI.XX-DFGHJKLM +21 OI.XX-DFGHJKLM ⵔⵏ.ⵟⵟ-ⴷⴼⴽⵀⵃⵄⵅⵇ OI.XX-DFGHJKLM +21 OI.XX-OOOOOOOO-DFGHJKLM ⵔⵏ.ⵟⵟ-ⵔⵔⵔⵔⵔⵔⵔⵔ-ⴷⴼⴽⵀⵃⵄⵅⵇ OI.XX-OOOOOOOO-DFGHJKLM +21 OI.XX-IIIIIIII-DFGHJKLM ⵔⵏ.ⵟⵟ-ⵏⵏⵏⵏⵏⵏⵏⵏ-ⴷⴼⴽⵀⵃⵄⵅⵇ OI.XX-IIIIIIII-DFGHJKLM +21 PQ.RS-01234567-DFGHJKLM ⵎⵕ.ⵖⵙ-01234567-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ.RS-01234567-DFGHJKLM +21 PQ.RS-890-DFGHJKLM ⵎⵕ.ⵖⵙ-890-ⴷⴼⴽⵀⵃⵄⵅⵇ PQ.RS-890-DFGHJKLM +22 89.EU 89.ஆஓ 89.EU +22 00.0A 00.0ங 00.0A +22 BCDF.GHJK கசடத.நபமய BCDF.GHJK +22 LMNP.QRST ரலவழ.ளறஅஈ LMNP.QRST +22 VWXY.Z123 உஎஏஐ.ஒ123 VWXY.Z123 +22 4567.890B 4567.890க 4567.890B +22 PQ.XY ழள.ஏஐ PQ.XY +22 PQ.XYZ ழள.ஏஐஒ PQ.XYZ +22 PQX.YZ ழளஏ.ஐஒ PQX.YZ +22 PQ.RXYZ ழள.றஏஐஒ PQ.RXYZ +22 PQR.XYZ ழளற.ஏஐஒ PQR.XYZ +22 PQRX.YZ ழளறஏ.ஐஒ PQRX.YZ +22 PQR.SXYZ ழளற.அஏஐஒ PQR.SXYZ +22 PQRS.XYZ ழளறஅ.ஏஐஒ PQRS.XYZ +22 PQRS.TXYZ ழளறஅ.ஈஏஐஒ PQRS.TXYZ +22 PQRST.VXYZ ழளறஅஈ.உஏஐஒ PQRST.VXYZ +22 P1.XY ழ1.ஏஐ P1.XY +22 PQ.2Y ழள.2ஐ PQ.2Y +22 3Q.X4 3ள.ஏ4 3Q.X4 +22 5Q.6Y 5ள.6ஐ 5Q.6Y +22 PQ.1YZ ழள.1ஐஒ PQ.1YZ +22 PQ1.YZ ழள1.ஐஒ PQ1.YZ +22 P2.X3Z ழ2.ஏ3ஒ P2.X3Z +22 P2X.3Z ழ2ஏ.3ஒ P2X.3Z +22 PQ.1XY2 ழள.1ஏஐ2 PQ.1XY2 +22 PQ1.XY2 ழள1.ஏஐ2 PQ1.XY2 +22 PQ1X.Y2 ழள1ஏ.ஐ2 PQ1X.Y2 +22 P3.RX4Z ழ3.றஏ4ஒ P3.RX4Z +22 P3R.X4Z ழ3ற.ஏ4ஒ P3R.X4Z +22 P3RX.4Z ழ3றஏ.4ஒ P3RX.4Z +22 5Q.R6Y7 5ள.ற6ஐ7 5Q.R6Y7 +22 5QR.6Y7 5ளற.6ஐ7 5QR.6Y7 +22 5QR6.Y7 5ளற6.ஐ7 5QR6.Y7 +22 PQ1.SX2Z ழள1.அஏ2ஒ PQ1.SX2Z +22 PQ1S.X2Z ழள1அ.ஏ2ஒ PQ1S.X2Z +22 P3R.S4YZ ழ3ற.அ4ஐஒ P3R.S4YZ +22 P3RS.4YZ ழ3றஅ.4ஐஒ P3RS.4YZ +22 5QR.6XY7 5ளற.6ஏஐ7 5QR.6XY7 +22 5QR6.XY7 5ளற6.ஏஐ7 5QR6.XY7 +22 8Q9.SX0Z 8ள9.அஏ0ஒ 8Q9.SX0Z +22 8Q9S.X0Z 8ள9அ.ஏ0ஒ 8Q9S.X0Z +22 1QR2.TX3Z 1ளற2.ஈஏ3ஒ 1QR2.TX3Z +22 P4RS.5XY6 ழ4றஅ.5ஏஐ6 P4RS.5XY6 +22 P7R8.T9Y0 ழ7ற8.ஈ9ஐ0 P7R8.T9Y0 +22 PQ1ST.2XY3 ழள1அஈ.2ஏஐ3 PQ1ST.2XY3 +22 P4RS5.VX6Z ழ4றஅ5.உஏ6ஒ P4RS5.VX6Z +22 7QR8T.V9YZ 7ளற8ஈ.உ9ஐஒ 7QR8T.V9YZ +22 P1R2T.3X4Z ழ1ற2ஈ.3ஏ4ஒ P1R2T.3X4Z +22 5Q6S7.V8Y9 5ள6அ7.உ8ஐ9 5Q6S7.V8Y9 +22 ABCDEFGHIJKLMNOPQRSTUVWXYZ ஙகசடஆதநபIமயரலவOழளறஅஈஓஉஎஏஐஒ ABCDEFGHIJKLMNOPQRSTUVWXYZ +22 ABCDEFGHIJKLMNOPQRSTUVWXYZ ஙகசடஆதநபIமயரலவOழளறஅஈஓஉஎஏஐஒ ABCDEFGHIJKLMNOPQRSTUVWXYZ +22 OI.XX OI.ஏஏ OI.XX +22 OI.XX OI.ஏஏ OI.XX +22 OI.XX-OOOOOOOO OI.ஏஏ-OOOOOOOO OI.XX-OOOOOOOO +22 OI.XX-IIIIIIII OI.ஏஏ-IIIIIIII OI.XX-IIIIIIII +22 PQ.RS-01234567 ழள.றஅ-01234567 PQ.RS-01234567 +22 PQ.RS-890 ழள.றஅ-890 PQ.RS-890 +22 89.EU-BC 89.ஆஓ-கச 89.EU-BC +22 00.0A-BC 00.0ங-கச 00.0A-BC +22 BCDF.GHJK-BC கசடத.நபமய-கச BCDF.GHJK-BC +22 LMNP.QRST-BC ரலவழ.ளறஅஈ-கச LMNP.QRST-BC +22 VWXY.Z123-BC உஎஏஐ.ஒ123-கச VWXY.Z123-BC +22 4567.890B-BC 4567.890க-கச 4567.890B-BC +22 PQ.XY-BC ழள.ஏஐ-கச PQ.XY-BC +22 PQ.XYZ-BC ழள.ஏஐஒ-கச PQ.XYZ-BC +22 PQX.YZ-BC ழளஏ.ஐஒ-கச PQX.YZ-BC +22 PQ.RXYZ-BC ழள.றஏஐஒ-கச PQ.RXYZ-BC +22 PQR.XYZ-BC ழளற.ஏஐஒ-கச PQR.XYZ-BC +22 PQRX.YZ-BC ழளறஏ.ஐஒ-கச PQRX.YZ-BC +22 PQR.SXYZ-BC ழளற.அஏஐஒ-கச PQR.SXYZ-BC +22 PQRS.XYZ-BC ழளறஅ.ஏஐஒ-கச PQRS.XYZ-BC +22 PQRS.TXYZ-BC ழளறஅ.ஈஏஐஒ-கச PQRS.TXYZ-BC +22 PQRST.VXYZ-BC ழளறஅஈ.உஏஐஒ-கச PQRST.VXYZ-BC +22 P1.XY-BC ழ1.ஏஐ-கச P1.XY-BC +22 PQ.2Y-BC ழள.2ஐ-கச PQ.2Y-BC +22 3Q.X4-BC 3ள.ஏ4-கச 3Q.X4-BC +22 5Q.6Y-BC 5ள.6ஐ-கச 5Q.6Y-BC +22 PQ.1YZ-BC ழள.1ஐஒ-கச PQ.1YZ-BC +22 PQ1.YZ-BC ழள1.ஐஒ-கச PQ1.YZ-BC +22 P2.X3Z-BC ழ2.ஏ3ஒ-கச P2.X3Z-BC +22 P2X.3Z-BC ழ2ஏ.3ஒ-கச P2X.3Z-BC +22 PQ.1XY2-BC ழள.1ஏஐ2-கச PQ.1XY2-BC +22 PQ1.XY2-BC ழள1.ஏஐ2-கச PQ1.XY2-BC +22 PQ1X.Y2-BC ழள1ஏ.ஐ2-கச PQ1X.Y2-BC +22 P3.RX4Z-BC ழ3.றஏ4ஒ-கச P3.RX4Z-BC +22 P3R.X4Z-BC ழ3ற.ஏ4ஒ-கச P3R.X4Z-BC +22 P3RX.4Z-BC ழ3றஏ.4ஒ-கச P3RX.4Z-BC +22 5Q.R6Y7-BC 5ள.ற6ஐ7-கச 5Q.R6Y7-BC +22 5QR.6Y7-BC 5ளற.6ஐ7-கச 5QR.6Y7-BC +22 5QR6.Y7-BC 5ளற6.ஐ7-கச 5QR6.Y7-BC +22 PQ1.SX2Z-BC ழள1.அஏ2ஒ-கச PQ1.SX2Z-BC +22 PQ1S.X2Z-BC ழள1அ.ஏ2ஒ-கச PQ1S.X2Z-BC +22 P3R.S4YZ-BC ழ3ற.அ4ஐஒ-கச P3R.S4YZ-BC +22 P3RS.4YZ-BC ழ3றஅ.4ஐஒ-கச P3RS.4YZ-BC +22 5QR.6XY7-BC 5ளற.6ஏஐ7-கச 5QR.6XY7-BC +22 5QR6.XY7-BC 5ளற6.ஏஐ7-கச 5QR6.XY7-BC +22 8Q9.SX0Z-BC 8ள9.அஏ0ஒ-கச 8Q9.SX0Z-BC +22 8Q9S.X0Z-BC 8ள9அ.ஏ0ஒ-கச 8Q9S.X0Z-BC +22 1QR2.TX3Z-BC 1ளற2.ஈஏ3ஒ-கச 1QR2.TX3Z-BC +22 P4RS.5XY6-BC ழ4றஅ.5ஏஐ6-கச P4RS.5XY6-BC +22 P7R8.T9Y0-BC ழ7ற8.ஈ9ஐ0-கச P7R8.T9Y0-BC +22 PQ1ST.2XY3-BC ழள1அஈ.2ஏஐ3-கச PQ1ST.2XY3-BC +22 P4RS5.VX6Z-BC ழ4றஅ5.உஏ6ஒ-கச P4RS5.VX6Z-BC +22 7QR8T.V9YZ-BC 7ளற8ஈ.உ9ஐஒ-கச 7QR8T.V9YZ-BC +22 P1R2T.3X4Z-BC ழ1ற2ஈ.3ஏ4ஒ-கச P1R2T.3X4Z-BC +22 5Q6S7.V8Y9-BC 5ள6அ7.உ8ஐ9-கச 5Q6S7.V8Y9-BC +22 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ஙகசடஆதநபIமயரலவOழளறஅஈஓஉஎஏஐஒ-கச ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +22 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ஙகசடஆதநபIமயரலவOழளறஅஈஓஉஎஏஐஒ-கச ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +22 OI.XX-BC OI.ஏஏ-கச OI.XX-BC +22 OI.XX-BC OI.ஏஏ-கச OI.XX-BC +22 OI.XX-OOOOOOOO-BC OI.ஏஏ-OOOOOOOO-கச OI.XX-OOOOOOOO-BC +22 OI.XX-IIIIIIII-BC OI.ஏஏ-IIIIIIII-கச OI.XX-IIIIIIII-BC +22 PQ.RS-01234567-BC ழள.றஅ-01234567-கச PQ.RS-01234567-BC +22 PQ.RS-890-BC ழள.றஅ-890-கச PQ.RS-890-BC +22 89.EU-DFGHJKLM 89.ஆஓ-டதநபமயரல 89.EU-DFGHJKLM +22 00.0A-DFGHJKLM 00.0ங-டதநபமயரல 00.0A-DFGHJKLM +22 BCDF.GHJK-DFGHJKLM கசடத.நபமய-டதநபமயரல BCDF.GHJK-DFGHJKLM +22 LMNP.QRST-DFGHJKLM ரலவழ.ளறஅஈ-டதநபமயரல LMNP.QRST-DFGHJKLM +22 VWXY.Z123-DFGHJKLM உஎஏஐ.ஒ123-டதநபமயரல VWXY.Z123-DFGHJKLM +22 4567.890B-DFGHJKLM 4567.890க-டதநபமயரல 4567.890B-DFGHJKLM +22 PQ.XY-DFGHJKLM ழள.ஏஐ-டதநபமயரல PQ.XY-DFGHJKLM +22 PQ.XYZ-DFGHJKLM ழள.ஏஐஒ-டதநபமயரல PQ.XYZ-DFGHJKLM +22 PQX.YZ-DFGHJKLM ழளஏ.ஐஒ-டதநபமயரல PQX.YZ-DFGHJKLM +22 PQ.RXYZ-DFGHJKLM ழள.றஏஐஒ-டதநபமயரல PQ.RXYZ-DFGHJKLM +22 PQR.XYZ-DFGHJKLM ழளற.ஏஐஒ-டதநபமயரல PQR.XYZ-DFGHJKLM +22 PQRX.YZ-DFGHJKLM ழளறஏ.ஐஒ-டதநபமயரல PQRX.YZ-DFGHJKLM +22 PQR.SXYZ-DFGHJKLM ழளற.அஏஐஒ-டதநபமயரல PQR.SXYZ-DFGHJKLM +22 PQRS.XYZ-DFGHJKLM ழளறஅ.ஏஐஒ-டதநபமயரல PQRS.XYZ-DFGHJKLM +22 PQRS.TXYZ-DFGHJKLM ழளறஅ.ஈஏஐஒ-டதநபமயரல PQRS.TXYZ-DFGHJKLM +22 PQRST.VXYZ-DFGHJKLM ழளறஅஈ.உஏஐஒ-டதநபமயரல PQRST.VXYZ-DFGHJKLM +22 P1.XY-DFGHJKLM ழ1.ஏஐ-டதநபமயரல P1.XY-DFGHJKLM +22 PQ.2Y-DFGHJKLM ழள.2ஐ-டதநபமயரல PQ.2Y-DFGHJKLM +22 3Q.X4-DFGHJKLM 3ள.ஏ4-டதநபமயரல 3Q.X4-DFGHJKLM +22 5Q.6Y-DFGHJKLM 5ள.6ஐ-டதநபமயரல 5Q.6Y-DFGHJKLM +22 PQ.1YZ-DFGHJKLM ழள.1ஐஒ-டதநபமயரல PQ.1YZ-DFGHJKLM +22 PQ1.YZ-DFGHJKLM ழள1.ஐஒ-டதநபமயரல PQ1.YZ-DFGHJKLM +22 P2.X3Z-DFGHJKLM ழ2.ஏ3ஒ-டதநபமயரல P2.X3Z-DFGHJKLM +22 P2X.3Z-DFGHJKLM ழ2ஏ.3ஒ-டதநபமயரல P2X.3Z-DFGHJKLM +22 PQ.1XY2-DFGHJKLM ழள.1ஏஐ2-டதநபமயரல PQ.1XY2-DFGHJKLM +22 PQ1.XY2-DFGHJKLM ழள1.ஏஐ2-டதநபமயரல PQ1.XY2-DFGHJKLM +22 PQ1X.Y2-DFGHJKLM ழள1ஏ.ஐ2-டதநபமயரல PQ1X.Y2-DFGHJKLM +22 P3.RX4Z-DFGHJKLM ழ3.றஏ4ஒ-டதநபமயரல P3.RX4Z-DFGHJKLM +22 P3R.X4Z-DFGHJKLM ழ3ற.ஏ4ஒ-டதநபமயரல P3R.X4Z-DFGHJKLM +22 P3RX.4Z-DFGHJKLM ழ3றஏ.4ஒ-டதநபமயரல P3RX.4Z-DFGHJKLM +22 5Q.R6Y7-DFGHJKLM 5ள.ற6ஐ7-டதநபமயரல 5Q.R6Y7-DFGHJKLM +22 5QR.6Y7-DFGHJKLM 5ளற.6ஐ7-டதநபமயரல 5QR.6Y7-DFGHJKLM +22 5QR6.Y7-DFGHJKLM 5ளற6.ஐ7-டதநபமயரல 5QR6.Y7-DFGHJKLM +22 PQ1.SX2Z-DFGHJKLM ழள1.அஏ2ஒ-டதநபமயரல PQ1.SX2Z-DFGHJKLM +22 PQ1S.X2Z-DFGHJKLM ழள1அ.ஏ2ஒ-டதநபமயரல PQ1S.X2Z-DFGHJKLM +22 P3R.S4YZ-DFGHJKLM ழ3ற.அ4ஐஒ-டதநபமயரல P3R.S4YZ-DFGHJKLM +22 P3RS.4YZ-DFGHJKLM ழ3றஅ.4ஐஒ-டதநபமயரல P3RS.4YZ-DFGHJKLM +22 5QR.6XY7-DFGHJKLM 5ளற.6ஏஐ7-டதநபமயரல 5QR.6XY7-DFGHJKLM +22 5QR6.XY7-DFGHJKLM 5ளற6.ஏஐ7-டதநபமயரல 5QR6.XY7-DFGHJKLM +22 8Q9.SX0Z-DFGHJKLM 8ள9.அஏ0ஒ-டதநபமயரல 8Q9.SX0Z-DFGHJKLM +22 8Q9S.X0Z-DFGHJKLM 8ள9அ.ஏ0ஒ-டதநபமயரல 8Q9S.X0Z-DFGHJKLM +22 1QR2.TX3Z-DFGHJKLM 1ளற2.ஈஏ3ஒ-டதநபமயரல 1QR2.TX3Z-DFGHJKLM +22 P4RS.5XY6-DFGHJKLM ழ4றஅ.5ஏஐ6-டதநபமயரல P4RS.5XY6-DFGHJKLM +22 P7R8.T9Y0-DFGHJKLM ழ7ற8.ஈ9ஐ0-டதநபமயரல P7R8.T9Y0-DFGHJKLM +22 PQ1ST.2XY3-DFGHJKLM ழள1அஈ.2ஏஐ3-டதநபமயரல PQ1ST.2XY3-DFGHJKLM +22 P4RS5.VX6Z-DFGHJKLM ழ4றஅ5.உஏ6ஒ-டதநபமயரல P4RS5.VX6Z-DFGHJKLM +22 7QR8T.V9YZ-DFGHJKLM 7ளற8ஈ.உ9ஐஒ-டதநபமயரல 7QR8T.V9YZ-DFGHJKLM +22 P1R2T.3X4Z-DFGHJKLM ழ1ற2ஈ.3ஏ4ஒ-டதநபமயரல P1R2T.3X4Z-DFGHJKLM +22 5Q6S7.V8Y9-DFGHJKLM 5ள6அ7.உ8ஐ9-டதநபமயரல 5Q6S7.V8Y9-DFGHJKLM +22 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ஙகசடஆதநபIமயரலவOழளறஅஈஓஉஎஏஐஒ-டதநபமயரல ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +22 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ஙகசடஆதநபIமயரலவOழளறஅஈஓஉஎஏஐஒ-டதநபமயரல ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +22 OI.XX-DFGHJKLM OI.ஏஏ-டதநபமயரல OI.XX-DFGHJKLM +22 OI.XX-DFGHJKLM OI.ஏஏ-டதநபமயரல OI.XX-DFGHJKLM +22 OI.XX-OOOOOOOO-DFGHJKLM OI.ஏஏ-OOOOOOOO-டதநபமயரல OI.XX-OOOOOOOO-DFGHJKLM +22 OI.XX-IIIIIIII-DFGHJKLM OI.ஏஏ-IIIIIIII-டதநபமயரல OI.XX-IIIIIIII-DFGHJKLM +22 PQ.RS-01234567-DFGHJKLM ழள.றஅ-01234567-டதநபமயரல PQ.RS-01234567-DFGHJKLM +22 PQ.RS-890-DFGHJKLM ழள.றஅ-890-டதநபமயரல PQ.RS-890-DFGHJKLM +23 89.EU ፰፱.ሞወ 89.EU +23 00.0A ፲፲.፲ማ 00.0A +23 BCDF.GHJK በቤደፊ.ገሀየኬ BCDF.GHJK +23 LMNP.QRST ለናፐፔ.ቀቄሬሠ LMNP.QRST +23 VWXY.Z123 ሦተቶጸ.ዜ፩፪፫ VWXY.Z123 +23 4567.890B ፬፭፮፯.፰፱፲በ 4567.890B +23 PQ.XY ፔቀ.ቶጸ PQ.XY +23 PQ.XYZ ፔቀ.ቶጸዜ PQ.XYZ +23 PQX.YZ ፔቀቶ.ጸዜ PQX.YZ +23 PQ.RXYZ ፔቀ.ቄቶጸዜ PQ.RXYZ +23 PQR.XYZ ፔቀቄ.ቶጸዜ PQR.XYZ +23 PQRX.YZ ፔቀቄቶ.ጸዜ PQRX.YZ +23 PQR.SXYZ ፔቀቄ.ሬቶጸዜ PQR.SXYZ +23 PQRS.XYZ ፔቀቄሬ.ቶጸዜ PQRS.XYZ +23 PQRS.TXYZ ፔቀቄሬ.ሠቶጸዜ PQRS.TXYZ +23 PQRST.VXYZ ፔቀቄሬሠ.ሦቶጸዜ PQRST.VXYZ +23 P1.XY ፔ፩.ቶጸ P1.XY +23 PQ.2Y ፔቀ.፪ጸ PQ.2Y +23 3Q.X4 ፫ቀ.ቶ፬ 3Q.X4 +23 5Q.6Y ፭ቀ.፮ጸ 5Q.6Y +23 PQ.1YZ ፔቀ.፩ጸዜ PQ.1YZ +23 PQ1.YZ ፔቀ፩.ጸዜ PQ1.YZ +23 P2.X3Z ፔ፪.ቶ፫ዜ P2.X3Z +23 P2X.3Z ፔ፪ቶ.፫ዜ P2X.3Z +23 PQ.1XY2 ፔቀ.፩ቶጸ፪ PQ.1XY2 +23 PQ1.XY2 ፔቀ፩.ቶጸ፪ PQ1.XY2 +23 PQ1X.Y2 ፔቀ፩ቶ.ጸ፪ PQ1X.Y2 +23 P3.RX4Z ፔ፫.ቄቶ፬ዜ P3.RX4Z +23 P3R.X4Z ፔ፫ቄ.ቶ፬ዜ P3R.X4Z +23 P3RX.4Z ፔ፫ቄቶ.፬ዜ P3RX.4Z +23 5Q.R6Y7 ፭ቀ.ቄ፮ጸ፯ 5Q.R6Y7 +23 5QR.6Y7 ፭ቀቄ.፮ጸ፯ 5QR.6Y7 +23 5QR6.Y7 ፭ቀቄ፮.ጸ፯ 5QR6.Y7 +23 PQ1.SX2Z ፔቀ፩.ሬቶ፪ዜ PQ1.SX2Z +23 PQ1S.X2Z ፔቀ፩ሬ.ቶ፪ዜ PQ1S.X2Z +23 P3R.S4YZ ፔ፫ቄ.ሬ፬ጸዜ P3R.S4YZ +23 P3RS.4YZ ፔ፫ቄሬ.፬ጸዜ P3RS.4YZ +23 5QR.6XY7 ፭ቀቄ.፮ቶጸ፯ 5QR.6XY7 +23 5QR6.XY7 ፭ቀቄ፮.ቶጸ፯ 5QR6.XY7 +23 8Q9.SX0Z ፰ቀ፱.ሬቶ፲ዜ 8Q9.SX0Z +23 8Q9S.X0Z ፰ቀ፱ሬ.ቶ፲ዜ 8Q9S.X0Z +23 1QR2.TX3Z ፩ቀቄ፪.ሠቶ፫ዜ 1QR2.TX3Z +23 P4RS.5XY6 ፔ፬ቄሬ.፭ቶጸ፮ P4RS.5XY6 +23 P7R8.T9Y0 ፔ፯ቄ፰.ሠ፱ጸ፲ P7R8.T9Y0 +23 PQ1ST.2XY3 ፔቀ፩ሬሠ.፪ቶጸ፫ PQ1ST.2XY3 +23 P4RS5.VX6Z ፔ፬ቄሬ፭.ሦቶ፮ዜ P4RS5.VX6Z +23 7QR8T.V9YZ ፯ቀቄ፰ሠ.ሦ፱ጸዜ 7QR8T.V9YZ +23 P1R2T.3X4Z ፔ፩ቄ፪ሠ.፫ቶ፬ዜ P1R2T.3X4Z +23 5Q6S7.V8Y9 ፭ቀ፮ሬ፯.ሦ፰ጸ፱ 5Q6S7.V8Y9 +23 ABCDEFGHIJKLMNOPQRSTUVWXYZ ማበቤደሞፊገሀIየኬለናፐዐፔቀቄሬሠወሦተቶጸዜ ABCDEFGHIJKLMNOPQRSTUVWXYZ +23 ABCDEFGHIJKLMNOPQRSTUVWXYZ ማበቤደሞፊገሀIየኬለናፐዐፔቀቄሬሠወሦተቶጸዜ ABCDEFGHIJKLMNOPQRSTUVWXYZ +23 OI.XX ዐI.ቶቶ OI.XX +23 OI.XX ዐI.ቶቶ OI.XX +23 OI.XX-OOOOOOOO ዐI.ቶቶ-ዐዐዐዐዐዐዐዐ OI.XX-OOOOOOOO +23 OI.XX-IIIIIIII ዐI.ቶቶ-IIIIIIII OI.XX-IIIIIIII +23 PQ.RS-01234567 ፔቀ.ቄሬ-፲፩፪፫፬፭፮፯ PQ.RS-01234567 +23 PQ.RS-890 ፔቀ.ቄሬ-፰፱፲ PQ.RS-890 +23 89.EU-BC ፰፱.ሞወ-በቤ 89.EU-BC +23 00.0A-BC ፲፲.፲ማ-በቤ 00.0A-BC +23 BCDF.GHJK-BC በቤደፊ.ገሀየኬ-በቤ BCDF.GHJK-BC +23 LMNP.QRST-BC ለናፐፔ.ቀቄሬሠ-በቤ LMNP.QRST-BC +23 VWXY.Z123-BC ሦተቶጸ.ዜ፩፪፫-በቤ VWXY.Z123-BC +23 4567.890B-BC ፬፭፮፯.፰፱፲በ-በቤ 4567.890B-BC +23 PQ.XY-BC ፔቀ.ቶጸ-በቤ PQ.XY-BC +23 PQ.XYZ-BC ፔቀ.ቶጸዜ-በቤ PQ.XYZ-BC +23 PQX.YZ-BC ፔቀቶ.ጸዜ-በቤ PQX.YZ-BC +23 PQ.RXYZ-BC ፔቀ.ቄቶጸዜ-በቤ PQ.RXYZ-BC +23 PQR.XYZ-BC ፔቀቄ.ቶጸዜ-በቤ PQR.XYZ-BC +23 PQRX.YZ-BC ፔቀቄቶ.ጸዜ-በቤ PQRX.YZ-BC +23 PQR.SXYZ-BC ፔቀቄ.ሬቶጸዜ-በቤ PQR.SXYZ-BC +23 PQRS.XYZ-BC ፔቀቄሬ.ቶጸዜ-በቤ PQRS.XYZ-BC +23 PQRS.TXYZ-BC ፔቀቄሬ.ሠቶጸዜ-በቤ PQRS.TXYZ-BC +23 PQRST.VXYZ-BC ፔቀቄሬሠ.ሦቶጸዜ-በቤ PQRST.VXYZ-BC +23 P1.XY-BC ፔ፩.ቶጸ-በቤ P1.XY-BC +23 PQ.2Y-BC ፔቀ.፪ጸ-በቤ PQ.2Y-BC +23 3Q.X4-BC ፫ቀ.ቶ፬-በቤ 3Q.X4-BC +23 5Q.6Y-BC ፭ቀ.፮ጸ-በቤ 5Q.6Y-BC +23 PQ.1YZ-BC ፔቀ.፩ጸዜ-በቤ PQ.1YZ-BC +23 PQ1.YZ-BC ፔቀ፩.ጸዜ-በቤ PQ1.YZ-BC +23 P2.X3Z-BC ፔ፪.ቶ፫ዜ-በቤ P2.X3Z-BC +23 P2X.3Z-BC ፔ፪ቶ.፫ዜ-በቤ P2X.3Z-BC +23 PQ.1XY2-BC ፔቀ.፩ቶጸ፪-በቤ PQ.1XY2-BC +23 PQ1.XY2-BC ፔቀ፩.ቶጸ፪-በቤ PQ1.XY2-BC +23 PQ1X.Y2-BC ፔቀ፩ቶ.ጸ፪-በቤ PQ1X.Y2-BC +23 P3.RX4Z-BC ፔ፫.ቄቶ፬ዜ-በቤ P3.RX4Z-BC +23 P3R.X4Z-BC ፔ፫ቄ.ቶ፬ዜ-በቤ P3R.X4Z-BC +23 P3RX.4Z-BC ፔ፫ቄቶ.፬ዜ-በቤ P3RX.4Z-BC +23 5Q.R6Y7-BC ፭ቀ.ቄ፮ጸ፯-በቤ 5Q.R6Y7-BC +23 5QR.6Y7-BC ፭ቀቄ.፮ጸ፯-በቤ 5QR.6Y7-BC +23 5QR6.Y7-BC ፭ቀቄ፮.ጸ፯-በቤ 5QR6.Y7-BC +23 PQ1.SX2Z-BC ፔቀ፩.ሬቶ፪ዜ-በቤ PQ1.SX2Z-BC +23 PQ1S.X2Z-BC ፔቀ፩ሬ.ቶ፪ዜ-በቤ PQ1S.X2Z-BC +23 P3R.S4YZ-BC ፔ፫ቄ.ሬ፬ጸዜ-በቤ P3R.S4YZ-BC +23 P3RS.4YZ-BC ፔ፫ቄሬ.፬ጸዜ-በቤ P3RS.4YZ-BC +23 5QR.6XY7-BC ፭ቀቄ.፮ቶጸ፯-በቤ 5QR.6XY7-BC +23 5QR6.XY7-BC ፭ቀቄ፮.ቶጸ፯-በቤ 5QR6.XY7-BC +23 8Q9.SX0Z-BC ፰ቀ፱.ሬቶ፲ዜ-በቤ 8Q9.SX0Z-BC +23 8Q9S.X0Z-BC ፰ቀ፱ሬ.ቶ፲ዜ-በቤ 8Q9S.X0Z-BC +23 1QR2.TX3Z-BC ፩ቀቄ፪.ሠቶ፫ዜ-በቤ 1QR2.TX3Z-BC +23 P4RS.5XY6-BC ፔ፬ቄሬ.፭ቶጸ፮-በቤ P4RS.5XY6-BC +23 P7R8.T9Y0-BC ፔ፯ቄ፰.ሠ፱ጸ፲-በቤ P7R8.T9Y0-BC +23 PQ1ST.2XY3-BC ፔቀ፩ሬሠ.፪ቶጸ፫-በቤ PQ1ST.2XY3-BC +23 P4RS5.VX6Z-BC ፔ፬ቄሬ፭.ሦቶ፮ዜ-በቤ P4RS5.VX6Z-BC +23 7QR8T.V9YZ-BC ፯ቀቄ፰ሠ.ሦ፱ጸዜ-በቤ 7QR8T.V9YZ-BC +23 P1R2T.3X4Z-BC ፔ፩ቄ፪ሠ.፫ቶ፬ዜ-በቤ P1R2T.3X4Z-BC +23 5Q6S7.V8Y9-BC ፭ቀ፮ሬ፯.ሦ፰ጸ፱-በቤ 5Q6S7.V8Y9-BC +23 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ማበቤደሞፊገሀIየኬለናፐዐፔቀቄሬሠወሦተቶጸዜ-በቤ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +23 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ማበቤደሞፊገሀIየኬለናፐዐፔቀቄሬሠወሦተቶጸዜ-በቤ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +23 OI.XX-BC ዐI.ቶቶ-በቤ OI.XX-BC +23 OI.XX-BC ዐI.ቶቶ-በቤ OI.XX-BC +23 OI.XX-OOOOOOOO-BC ዐI.ቶቶ-ዐዐዐዐዐዐዐዐ-በቤ OI.XX-OOOOOOOO-BC +23 OI.XX-IIIIIIII-BC ዐI.ቶቶ-IIIIIIII-በቤ OI.XX-IIIIIIII-BC +23 PQ.RS-01234567-BC ፔቀ.ቄሬ-፲፩፪፫፬፭፮፯-በቤ PQ.RS-01234567-BC +23 PQ.RS-890-BC ፔቀ.ቄሬ-፰፱፲-በቤ PQ.RS-890-BC +23 89.EU-DFGHJKLM ፰፱.ሞወ-ደፊገሀየኬለና 89.EU-DFGHJKLM +23 00.0A-DFGHJKLM ፲፲.፲ማ-ደፊገሀየኬለና 00.0A-DFGHJKLM +23 BCDF.GHJK-DFGHJKLM በቤደፊ.ገሀየኬ-ደፊገሀየኬለና BCDF.GHJK-DFGHJKLM +23 LMNP.QRST-DFGHJKLM ለናፐፔ.ቀቄሬሠ-ደፊገሀየኬለና LMNP.QRST-DFGHJKLM +23 VWXY.Z123-DFGHJKLM ሦተቶጸ.ዜ፩፪፫-ደፊገሀየኬለና VWXY.Z123-DFGHJKLM +23 4567.890B-DFGHJKLM ፬፭፮፯.፰፱፲በ-ደፊገሀየኬለና 4567.890B-DFGHJKLM +23 PQ.XY-DFGHJKLM ፔቀ.ቶጸ-ደፊገሀየኬለና PQ.XY-DFGHJKLM +23 PQ.XYZ-DFGHJKLM ፔቀ.ቶጸዜ-ደፊገሀየኬለና PQ.XYZ-DFGHJKLM +23 PQX.YZ-DFGHJKLM ፔቀቶ.ጸዜ-ደፊገሀየኬለና PQX.YZ-DFGHJKLM +23 PQ.RXYZ-DFGHJKLM ፔቀ.ቄቶጸዜ-ደፊገሀየኬለና PQ.RXYZ-DFGHJKLM +23 PQR.XYZ-DFGHJKLM ፔቀቄ.ቶጸዜ-ደፊገሀየኬለና PQR.XYZ-DFGHJKLM +23 PQRX.YZ-DFGHJKLM ፔቀቄቶ.ጸዜ-ደፊገሀየኬለና PQRX.YZ-DFGHJKLM +23 PQR.SXYZ-DFGHJKLM ፔቀቄ.ሬቶጸዜ-ደፊገሀየኬለና PQR.SXYZ-DFGHJKLM +23 PQRS.XYZ-DFGHJKLM ፔቀቄሬ.ቶጸዜ-ደፊገሀየኬለና PQRS.XYZ-DFGHJKLM +23 PQRS.TXYZ-DFGHJKLM ፔቀቄሬ.ሠቶጸዜ-ደፊገሀየኬለና PQRS.TXYZ-DFGHJKLM +23 PQRST.VXYZ-DFGHJKLM ፔቀቄሬሠ.ሦቶጸዜ-ደፊገሀየኬለና PQRST.VXYZ-DFGHJKLM +23 P1.XY-DFGHJKLM ፔ፩.ቶጸ-ደፊገሀየኬለና P1.XY-DFGHJKLM +23 PQ.2Y-DFGHJKLM ፔቀ.፪ጸ-ደፊገሀየኬለና PQ.2Y-DFGHJKLM +23 3Q.X4-DFGHJKLM ፫ቀ.ቶ፬-ደፊገሀየኬለና 3Q.X4-DFGHJKLM +23 5Q.6Y-DFGHJKLM ፭ቀ.፮ጸ-ደፊገሀየኬለና 5Q.6Y-DFGHJKLM +23 PQ.1YZ-DFGHJKLM ፔቀ.፩ጸዜ-ደፊገሀየኬለና PQ.1YZ-DFGHJKLM +23 PQ1.YZ-DFGHJKLM ፔቀ፩.ጸዜ-ደፊገሀየኬለና PQ1.YZ-DFGHJKLM +23 P2.X3Z-DFGHJKLM ፔ፪.ቶ፫ዜ-ደፊገሀየኬለና P2.X3Z-DFGHJKLM +23 P2X.3Z-DFGHJKLM ፔ፪ቶ.፫ዜ-ደፊገሀየኬለና P2X.3Z-DFGHJKLM +23 PQ.1XY2-DFGHJKLM ፔቀ.፩ቶጸ፪-ደፊገሀየኬለና PQ.1XY2-DFGHJKLM +23 PQ1.XY2-DFGHJKLM ፔቀ፩.ቶጸ፪-ደፊገሀየኬለና PQ1.XY2-DFGHJKLM +23 PQ1X.Y2-DFGHJKLM ፔቀ፩ቶ.ጸ፪-ደፊገሀየኬለና PQ1X.Y2-DFGHJKLM +23 P3.RX4Z-DFGHJKLM ፔ፫.ቄቶ፬ዜ-ደፊገሀየኬለና P3.RX4Z-DFGHJKLM +23 P3R.X4Z-DFGHJKLM ፔ፫ቄ.ቶ፬ዜ-ደፊገሀየኬለና P3R.X4Z-DFGHJKLM +23 P3RX.4Z-DFGHJKLM ፔ፫ቄቶ.፬ዜ-ደፊገሀየኬለና P3RX.4Z-DFGHJKLM +23 5Q.R6Y7-DFGHJKLM ፭ቀ.ቄ፮ጸ፯-ደፊገሀየኬለና 5Q.R6Y7-DFGHJKLM +23 5QR.6Y7-DFGHJKLM ፭ቀቄ.፮ጸ፯-ደፊገሀየኬለና 5QR.6Y7-DFGHJKLM +23 5QR6.Y7-DFGHJKLM ፭ቀቄ፮.ጸ፯-ደፊገሀየኬለና 5QR6.Y7-DFGHJKLM +23 PQ1.SX2Z-DFGHJKLM ፔቀ፩.ሬቶ፪ዜ-ደፊገሀየኬለና PQ1.SX2Z-DFGHJKLM +23 PQ1S.X2Z-DFGHJKLM ፔቀ፩ሬ.ቶ፪ዜ-ደፊገሀየኬለና PQ1S.X2Z-DFGHJKLM +23 P3R.S4YZ-DFGHJKLM ፔ፫ቄ.ሬ፬ጸዜ-ደፊገሀየኬለና P3R.S4YZ-DFGHJKLM +23 P3RS.4YZ-DFGHJKLM ፔ፫ቄሬ.፬ጸዜ-ደፊገሀየኬለና P3RS.4YZ-DFGHJKLM +23 5QR.6XY7-DFGHJKLM ፭ቀቄ.፮ቶጸ፯-ደፊገሀየኬለና 5QR.6XY7-DFGHJKLM +23 5QR6.XY7-DFGHJKLM ፭ቀቄ፮.ቶጸ፯-ደፊገሀየኬለና 5QR6.XY7-DFGHJKLM +23 8Q9.SX0Z-DFGHJKLM ፰ቀ፱.ሬቶ፲ዜ-ደፊገሀየኬለና 8Q9.SX0Z-DFGHJKLM +23 8Q9S.X0Z-DFGHJKLM ፰ቀ፱ሬ.ቶ፲ዜ-ደፊገሀየኬለና 8Q9S.X0Z-DFGHJKLM +23 1QR2.TX3Z-DFGHJKLM ፩ቀቄ፪.ሠቶ፫ዜ-ደፊገሀየኬለና 1QR2.TX3Z-DFGHJKLM +23 P4RS.5XY6-DFGHJKLM ፔ፬ቄሬ.፭ቶጸ፮-ደፊገሀየኬለና P4RS.5XY6-DFGHJKLM +23 P7R8.T9Y0-DFGHJKLM ፔ፯ቄ፰.ሠ፱ጸ፲-ደፊገሀየኬለና P7R8.T9Y0-DFGHJKLM +23 PQ1ST.2XY3-DFGHJKLM ፔቀ፩ሬሠ.፪ቶጸ፫-ደፊገሀየኬለና PQ1ST.2XY3-DFGHJKLM +23 P4RS5.VX6Z-DFGHJKLM ፔ፬ቄሬ፭.ሦቶ፮ዜ-ደፊገሀየኬለና P4RS5.VX6Z-DFGHJKLM +23 7QR8T.V9YZ-DFGHJKLM ፯ቀቄ፰ሠ.ሦ፱ጸዜ-ደፊገሀየኬለና 7QR8T.V9YZ-DFGHJKLM +23 P1R2T.3X4Z-DFGHJKLM ፔ፩ቄ፪ሠ.፫ቶ፬ዜ-ደፊገሀየኬለና P1R2T.3X4Z-DFGHJKLM +23 5Q6S7.V8Y9-DFGHJKLM ፭ቀ፮ሬ፯.ሦ፰ጸ፱-ደፊገሀየኬለና 5Q6S7.V8Y9-DFGHJKLM +23 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ማበቤደሞፊገሀIየኬለናፐዐፔቀቄሬሠወሦተቶጸዜ-ደፊገሀየኬለና ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +23 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ማበቤደሞፊገሀIየኬለናፐዐፔቀቄሬሠወሦተቶጸዜ-ደፊገሀየኬለና ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +23 OI.XX-DFGHJKLM ዐI.ቶቶ-ደፊገሀየኬለና OI.XX-DFGHJKLM +23 OI.XX-DFGHJKLM ዐI.ቶቶ-ደፊገሀየኬለና OI.XX-DFGHJKLM +23 OI.XX-OOOOOOOO-DFGHJKLM ዐI.ቶቶ-ዐዐዐዐዐዐዐዐ-ደፊገሀየኬለና OI.XX-OOOOOOOO-DFGHJKLM +23 OI.XX-IIIIIIII-DFGHJKLM ዐI.ቶቶ-IIIIIIII-ደፊገሀየኬለና OI.XX-IIIIIIII-DFGHJKLM +23 PQ.RS-01234567-DFGHJKLM ፔቀ.ቄሬ-፲፩፪፫፬፭፮፯-ደፊገሀየኬለና PQ.RS-01234567-DFGHJKLM +23 PQ.RS-890-DFGHJKLM ፔቀ.ቄሬ-፰፱፲-ደፊገሀየኬለና PQ.RS-890-DFGHJKLM +24 89.EU 89.ఫభ 89.EU +24 00.0A 00.0ఞ 00.0A +24 BCDF.GHJK కగఙచ.జటఠడ BCDF.GHJK +24 LMNP.QRST ణతథద.ధనపబ LMNP.QRST +24 VWXY.Z123 మరలళ.వ123 VWXY.Z123 +24 4567.890B 4567.890క 4567.890B +24 PQ.XY దధ.లళ PQ.XY +24 PQ.XYZ దధ.లళవ PQ.XYZ +24 PQX.YZ దధల.ళవ PQX.YZ +24 PQ.RXYZ దధ.నలళవ PQ.RXYZ +24 PQR.XYZ దధన.లళవ PQR.XYZ +24 PQRX.YZ దధనల.ళవ PQRX.YZ +24 PQR.SXYZ దధన.పలళవ PQR.SXYZ +24 PQRS.XYZ దధనప.లళవ PQRS.XYZ +24 PQRS.TXYZ దధనప.బలళవ PQRS.TXYZ +24 PQRST.VXYZ దధనపబ.మలళవ PQRST.VXYZ +24 P1.XY ద1.లళ P1.XY +24 PQ.2Y దధ.2ళ PQ.2Y +24 3Q.X4 3ధ.ల4 3Q.X4 +24 5Q.6Y 5ధ.6ళ 5Q.6Y +24 PQ.1YZ దధ.1ళవ PQ.1YZ +24 PQ1.YZ దధ1.ళవ PQ1.YZ +24 P2.X3Z ద2.ల3వ P2.X3Z +24 P2X.3Z ద2ల.3వ P2X.3Z +24 PQ.1XY2 దధ.1లళ2 PQ.1XY2 +24 PQ1.XY2 దధ1.లళ2 PQ1.XY2 +24 PQ1X.Y2 దధ1ల.ళ2 PQ1X.Y2 +24 P3.RX4Z ద3.నల4వ P3.RX4Z +24 P3R.X4Z ద3న.ల4వ P3R.X4Z +24 P3RX.4Z ద3నల.4వ P3RX.4Z +24 5Q.R6Y7 5ధ.న6ళ7 5Q.R6Y7 +24 5QR.6Y7 5ధన.6ళ7 5QR.6Y7 +24 5QR6.Y7 5ధన6.ళ7 5QR6.Y7 +24 PQ1.SX2Z దధ1.పల2వ PQ1.SX2Z +24 PQ1S.X2Z దధ1ప.ల2వ PQ1S.X2Z +24 P3R.S4YZ ద3న.ప4ళవ P3R.S4YZ +24 P3RS.4YZ ద3నప.4ళవ P3RS.4YZ +24 5QR.6XY7 5ధన.6లళ7 5QR.6XY7 +24 5QR6.XY7 5ధన6.లళ7 5QR6.XY7 +24 8Q9.SX0Z 8ధ9.పల0వ 8Q9.SX0Z +24 8Q9S.X0Z 8ధ9ప.ల0వ 8Q9S.X0Z +24 1QR2.TX3Z 1ధన2.బల3వ 1QR2.TX3Z +24 P4RS.5XY6 ద4నప.5లళ6 P4RS.5XY6 +24 P7R8.T9Y0 ద7న8.బ9ళ0 P7R8.T9Y0 +24 PQ1ST.2XY3 దధ1పబ.2లళ3 PQ1ST.2XY3 +24 P4RS5.VX6Z ద4నప5.మల6వ P4RS5.VX6Z +24 7QR8T.V9YZ 7ధన8బ.మ9ళవ 7QR8T.V9YZ +24 P1R2T.3X4Z ద1న2బ.3ల4వ P1R2T.3X4Z +24 5Q6S7.V8Y9 5ధ6ప7.మ8ళ9 5Q6S7.V8Y9 +24 ABCDEFGHIJKLMNOPQRSTUVWXYZ ఞకగఙఫచజటIఠడణతథOదధనపబభమరలళవ ABCDEFGHIJKLMNOPQRSTUVWXYZ +24 ABCDEFGHIJKLMNOPQRSTUVWXYZ ఞకగఙఫచజటIఠడణతథOదధనపబభమరలళవ ABCDEFGHIJKLMNOPQRSTUVWXYZ +24 OI.XX OI.లల OI.XX +24 OI.XX OI.లల OI.XX +24 OI.XX-OOOOOOOO OI.లల-OOOOOOOO OI.XX-OOOOOOOO +24 OI.XX-IIIIIIII OI.లల-IIIIIIII OI.XX-IIIIIIII +24 PQ.RS-01234567 దధ.నప-01234567 PQ.RS-01234567 +24 PQ.RS-890 దధ.నప-890 PQ.RS-890 +24 89.EU-BC 89.ఫభ-కగ 89.EU-BC +24 00.0A-BC 00.0ఞ-కగ 00.0A-BC +24 BCDF.GHJK-BC కగఙచ.జటఠడ-కగ BCDF.GHJK-BC +24 LMNP.QRST-BC ణతథద.ధనపబ-కగ LMNP.QRST-BC +24 VWXY.Z123-BC మరలళ.వ123-కగ VWXY.Z123-BC +24 4567.890B-BC 4567.890క-కగ 4567.890B-BC +24 PQ.XY-BC దధ.లళ-కగ PQ.XY-BC +24 PQ.XYZ-BC దధ.లళవ-కగ PQ.XYZ-BC +24 PQX.YZ-BC దధల.ళవ-కగ PQX.YZ-BC +24 PQ.RXYZ-BC దధ.నలళవ-కగ PQ.RXYZ-BC +24 PQR.XYZ-BC దధన.లళవ-కగ PQR.XYZ-BC +24 PQRX.YZ-BC దధనల.ళవ-కగ PQRX.YZ-BC +24 PQR.SXYZ-BC దధన.పలళవ-కగ PQR.SXYZ-BC +24 PQRS.XYZ-BC దధనప.లళవ-కగ PQRS.XYZ-BC +24 PQRS.TXYZ-BC దధనప.బలళవ-కగ PQRS.TXYZ-BC +24 PQRST.VXYZ-BC దధనపబ.మలళవ-కగ PQRST.VXYZ-BC +24 P1.XY-BC ద1.లళ-కగ P1.XY-BC +24 PQ.2Y-BC దధ.2ళ-కగ PQ.2Y-BC +24 3Q.X4-BC 3ధ.ల4-కగ 3Q.X4-BC +24 5Q.6Y-BC 5ధ.6ళ-కగ 5Q.6Y-BC +24 PQ.1YZ-BC దధ.1ళవ-కగ PQ.1YZ-BC +24 PQ1.YZ-BC దధ1.ళవ-కగ PQ1.YZ-BC +24 P2.X3Z-BC ద2.ల3వ-కగ P2.X3Z-BC +24 P2X.3Z-BC ద2ల.3వ-కగ P2X.3Z-BC +24 PQ.1XY2-BC దధ.1లళ2-కగ PQ.1XY2-BC +24 PQ1.XY2-BC దధ1.లళ2-కగ PQ1.XY2-BC +24 PQ1X.Y2-BC దధ1ల.ళ2-కగ PQ1X.Y2-BC +24 P3.RX4Z-BC ద3.నల4వ-కగ P3.RX4Z-BC +24 P3R.X4Z-BC ద3న.ల4వ-కగ P3R.X4Z-BC +24 P3RX.4Z-BC ద3నల.4వ-కగ P3RX.4Z-BC +24 5Q.R6Y7-BC 5ధ.న6ళ7-కగ 5Q.R6Y7-BC +24 5QR.6Y7-BC 5ధన.6ళ7-కగ 5QR.6Y7-BC +24 5QR6.Y7-BC 5ధన6.ళ7-కగ 5QR6.Y7-BC +24 PQ1.SX2Z-BC దధ1.పల2వ-కగ PQ1.SX2Z-BC +24 PQ1S.X2Z-BC దధ1ప.ల2వ-కగ PQ1S.X2Z-BC +24 P3R.S4YZ-BC ద3న.ప4ళవ-కగ P3R.S4YZ-BC +24 P3RS.4YZ-BC ద3నప.4ళవ-కగ P3RS.4YZ-BC +24 5QR.6XY7-BC 5ధన.6లళ7-కగ 5QR.6XY7-BC +24 5QR6.XY7-BC 5ధన6.లళ7-కగ 5QR6.XY7-BC +24 8Q9.SX0Z-BC 8ధ9.పల0వ-కగ 8Q9.SX0Z-BC +24 8Q9S.X0Z-BC 8ధ9ప.ల0వ-కగ 8Q9S.X0Z-BC +24 1QR2.TX3Z-BC 1ధన2.బల3వ-కగ 1QR2.TX3Z-BC +24 P4RS.5XY6-BC ద4నప.5లళ6-కగ P4RS.5XY6-BC +24 P7R8.T9Y0-BC ద7న8.బ9ళ0-కగ P7R8.T9Y0-BC +24 PQ1ST.2XY3-BC దధ1పబ.2లళ3-కగ PQ1ST.2XY3-BC +24 P4RS5.VX6Z-BC ద4నప5.మల6వ-కగ P4RS5.VX6Z-BC +24 7QR8T.V9YZ-BC 7ధన8బ.మ9ళవ-కగ 7QR8T.V9YZ-BC +24 P1R2T.3X4Z-BC ద1న2బ.3ల4వ-కగ P1R2T.3X4Z-BC +24 5Q6S7.V8Y9-BC 5ధ6ప7.మ8ళ9-కగ 5Q6S7.V8Y9-BC +24 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ఞకగఙఫచజటIఠడణతథOదధనపబభమరలళవ-కగ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +24 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ఞకగఙఫచజటIఠడణతథOదధనపబభమరలళవ-కగ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +24 OI.XX-BC OI.లల-కగ OI.XX-BC +24 OI.XX-BC OI.లల-కగ OI.XX-BC +24 OI.XX-OOOOOOOO-BC OI.లల-OOOOOOOO-కగ OI.XX-OOOOOOOO-BC +24 OI.XX-IIIIIIII-BC OI.లల-IIIIIIII-కగ OI.XX-IIIIIIII-BC +24 PQ.RS-01234567-BC దధ.నప-01234567-కగ PQ.RS-01234567-BC +24 PQ.RS-890-BC దధ.నప-890-కగ PQ.RS-890-BC +24 89.EU-DFGHJKLM 89.ఫభ-ఙచజటఠడణత 89.EU-DFGHJKLM +24 00.0A-DFGHJKLM 00.0ఞ-ఙచజటఠడణత 00.0A-DFGHJKLM +24 BCDF.GHJK-DFGHJKLM కగఙచ.జటఠడ-ఙచజటఠడణత BCDF.GHJK-DFGHJKLM +24 LMNP.QRST-DFGHJKLM ణతథద.ధనపబ-ఙచజటఠడణత LMNP.QRST-DFGHJKLM +24 VWXY.Z123-DFGHJKLM మరలళ.వ123-ఙచజటఠడణత VWXY.Z123-DFGHJKLM +24 4567.890B-DFGHJKLM 4567.890క-ఙచజటఠడణత 4567.890B-DFGHJKLM +24 PQ.XY-DFGHJKLM దధ.లళ-ఙచజటఠడణత PQ.XY-DFGHJKLM +24 PQ.XYZ-DFGHJKLM దధ.లళవ-ఙచజటఠడణత PQ.XYZ-DFGHJKLM +24 PQX.YZ-DFGHJKLM దధల.ళవ-ఙచజటఠడణత PQX.YZ-DFGHJKLM +24 PQ.RXYZ-DFGHJKLM దధ.నలళవ-ఙచజటఠడణత PQ.RXYZ-DFGHJKLM +24 PQR.XYZ-DFGHJKLM దధన.లళవ-ఙచజటఠడణత PQR.XYZ-DFGHJKLM +24 PQRX.YZ-DFGHJKLM దధనల.ళవ-ఙచజటఠడణత PQRX.YZ-DFGHJKLM +24 PQR.SXYZ-DFGHJKLM దధన.పలళవ-ఙచజటఠడణత PQR.SXYZ-DFGHJKLM +24 PQRS.XYZ-DFGHJKLM దధనప.లళవ-ఙచజటఠడణత PQRS.XYZ-DFGHJKLM +24 PQRS.TXYZ-DFGHJKLM దధనప.బలళవ-ఙచజటఠడణత PQRS.TXYZ-DFGHJKLM +24 PQRST.VXYZ-DFGHJKLM దధనపబ.మలళవ-ఙచజటఠడణత PQRST.VXYZ-DFGHJKLM +24 P1.XY-DFGHJKLM ద1.లళ-ఙచజటఠడణత P1.XY-DFGHJKLM +24 PQ.2Y-DFGHJKLM దధ.2ళ-ఙచజటఠడణత PQ.2Y-DFGHJKLM +24 3Q.X4-DFGHJKLM 3ధ.ల4-ఙచజటఠడణత 3Q.X4-DFGHJKLM +24 5Q.6Y-DFGHJKLM 5ధ.6ళ-ఙచజటఠడణత 5Q.6Y-DFGHJKLM +24 PQ.1YZ-DFGHJKLM దధ.1ళవ-ఙచజటఠడణత PQ.1YZ-DFGHJKLM +24 PQ1.YZ-DFGHJKLM దధ1.ళవ-ఙచజటఠడణత PQ1.YZ-DFGHJKLM +24 P2.X3Z-DFGHJKLM ద2.ల3వ-ఙచజటఠడణత P2.X3Z-DFGHJKLM +24 P2X.3Z-DFGHJKLM ద2ల.3వ-ఙచజటఠడణత P2X.3Z-DFGHJKLM +24 PQ.1XY2-DFGHJKLM దధ.1లళ2-ఙచజటఠడణత PQ.1XY2-DFGHJKLM +24 PQ1.XY2-DFGHJKLM దధ1.లళ2-ఙచజటఠడణత PQ1.XY2-DFGHJKLM +24 PQ1X.Y2-DFGHJKLM దధ1ల.ళ2-ఙచజటఠడణత PQ1X.Y2-DFGHJKLM +24 P3.RX4Z-DFGHJKLM ద3.నల4వ-ఙచజటఠడణత P3.RX4Z-DFGHJKLM +24 P3R.X4Z-DFGHJKLM ద3న.ల4వ-ఙచజటఠడణత P3R.X4Z-DFGHJKLM +24 P3RX.4Z-DFGHJKLM ద3నల.4వ-ఙచజటఠడణత P3RX.4Z-DFGHJKLM +24 5Q.R6Y7-DFGHJKLM 5ధ.న6ళ7-ఙచజటఠడణత 5Q.R6Y7-DFGHJKLM +24 5QR.6Y7-DFGHJKLM 5ధన.6ళ7-ఙచజటఠడణత 5QR.6Y7-DFGHJKLM +24 5QR6.Y7-DFGHJKLM 5ధన6.ళ7-ఙచజటఠడణత 5QR6.Y7-DFGHJKLM +24 PQ1.SX2Z-DFGHJKLM దధ1.పల2వ-ఙచజటఠడణత PQ1.SX2Z-DFGHJKLM +24 PQ1S.X2Z-DFGHJKLM దధ1ప.ల2వ-ఙచజటఠడణత PQ1S.X2Z-DFGHJKLM +24 P3R.S4YZ-DFGHJKLM ద3న.ప4ళవ-ఙచజటఠడణత P3R.S4YZ-DFGHJKLM +24 P3RS.4YZ-DFGHJKLM ద3నప.4ళవ-ఙచజటఠడణత P3RS.4YZ-DFGHJKLM +24 5QR.6XY7-DFGHJKLM 5ధన.6లళ7-ఙచజటఠడణత 5QR.6XY7-DFGHJKLM +24 5QR6.XY7-DFGHJKLM 5ధన6.లళ7-ఙచజటఠడణత 5QR6.XY7-DFGHJKLM +24 8Q9.SX0Z-DFGHJKLM 8ధ9.పల0వ-ఙచజటఠడణత 8Q9.SX0Z-DFGHJKLM +24 8Q9S.X0Z-DFGHJKLM 8ధ9ప.ల0వ-ఙచజటఠడణత 8Q9S.X0Z-DFGHJKLM +24 1QR2.TX3Z-DFGHJKLM 1ధన2.బల3వ-ఙచజటఠడణత 1QR2.TX3Z-DFGHJKLM +24 P4RS.5XY6-DFGHJKLM ద4నప.5లళ6-ఙచజటఠడణత P4RS.5XY6-DFGHJKLM +24 P7R8.T9Y0-DFGHJKLM ద7న8.బ9ళ0-ఙచజటఠడణత P7R8.T9Y0-DFGHJKLM +24 PQ1ST.2XY3-DFGHJKLM దధ1పబ.2లళ3-ఙచజటఠడణత PQ1ST.2XY3-DFGHJKLM +24 P4RS5.VX6Z-DFGHJKLM ద4నప5.మల6వ-ఙచజటఠడణత P4RS5.VX6Z-DFGHJKLM +24 7QR8T.V9YZ-DFGHJKLM 7ధన8బ.మ9ళవ-ఙచజటఠడణత 7QR8T.V9YZ-DFGHJKLM +24 P1R2T.3X4Z-DFGHJKLM ద1న2బ.3ల4వ-ఙచజటఠడణత P1R2T.3X4Z-DFGHJKLM +24 5Q6S7.V8Y9-DFGHJKLM 5ధ6ప7.మ8ళ9-ఙచజటఠడణత 5Q6S7.V8Y9-DFGHJKLM +24 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ఞకగఙఫచజటIఠడణతథOదధనపబభమరలళవ-ఙచజటఠడణత ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +24 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ఞకగఙఫచజటIఠడణతథOదధనపబభమరలళవ-ఙచజటఠడణత ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +24 OI.XX-DFGHJKLM OI.లల-ఙచజటఠడణత OI.XX-DFGHJKLM +24 OI.XX-DFGHJKLM OI.లల-ఙచజటఠడణత OI.XX-DFGHJKLM +24 OI.XX-OOOOOOOO-DFGHJKLM OI.లల-OOOOOOOO-ఙచజటఠడణత OI.XX-OOOOOOOO-DFGHJKLM +24 OI.XX-IIIIIIII-DFGHJKLM OI.లల-IIIIIIII-ఙచజటఠడణత OI.XX-IIIIIIII-DFGHJKLM +24 PQ.RS-01234567-DFGHJKLM దధ.నప-01234567-ఙచజటఠడణత PQ.RS-01234567-DFGHJKLM +24 PQ.RS-890-DFGHJKLM దధ.నప-890-ఙచజటఠడణత PQ.RS-890-DFGHJKLM +25 89.EU 89.ଣହ 89.EU +25 00.0A 00.0ଝ 00.0A +25 BCDF.GHJK କଖଗଘ.ଚଜଟଡ BCDF.GHJK +25 LMNP.QRST ଢତଥଦ.ଧନପବ LMNP.QRST +25 VWXY.Z123 ମଯରଳ.ସ123 VWXY.Z123 +25 4567.890B 4567.890କ 4567.890B +25 PQ.XY ଦଧ.ରଳ PQ.XY +25 PQ.XYZ ଦଧ.ରଳସ PQ.XYZ +25 PQX.YZ ଦଧର.ଳସ PQX.YZ +25 PQ.RXYZ ଦଧ.ନରଳସ PQ.RXYZ +25 PQR.XYZ ଦଧନ.ରଳସ PQR.XYZ +25 PQRX.YZ ଦଧନର.ଳସ PQRX.YZ +25 PQR.SXYZ ଦଧନ.ପରଳସ PQR.SXYZ +25 PQRS.XYZ ଦଧନପ.ରଳସ PQRS.XYZ +25 PQRS.TXYZ ଦଧନପ.ବରଳସ PQRS.TXYZ +25 PQRST.VXYZ ଦଧନପବ.ମରଳସ PQRST.VXYZ +25 P1.XY ଦ1.ରଳ P1.XY +25 PQ.2Y ଦଧ.2ଳ PQ.2Y +25 3Q.X4 3ଧ.ର4 3Q.X4 +25 5Q.6Y 5ଧ.6ଳ 5Q.6Y +25 PQ.1YZ ଦଧ.1ଳସ PQ.1YZ +25 PQ1.YZ ଦଧ1.ଳସ PQ1.YZ +25 P2.X3Z ଦ2.ର3ସ P2.X3Z +25 P2X.3Z ଦ2ର.3ସ P2X.3Z +25 PQ.1XY2 ଦଧ.1ରଳ2 PQ.1XY2 +25 PQ1.XY2 ଦଧ1.ରଳ2 PQ1.XY2 +25 PQ1X.Y2 ଦଧ1ର.ଳ2 PQ1X.Y2 +25 P3.RX4Z ଦ3.ନର4ସ P3.RX4Z +25 P3R.X4Z ଦ3ନ.ର4ସ P3R.X4Z +25 P3RX.4Z ଦ3ନର.4ସ P3RX.4Z +25 5Q.R6Y7 5ଧ.ନ6ଳ7 5Q.R6Y7 +25 5QR.6Y7 5ଧନ.6ଳ7 5QR.6Y7 +25 5QR6.Y7 5ଧନ6.ଳ7 5QR6.Y7 +25 PQ1.SX2Z ଦଧ1.ପର2ସ PQ1.SX2Z +25 PQ1S.X2Z ଦଧ1ପ.ର2ସ PQ1S.X2Z +25 P3R.S4YZ ଦ3ନ.ପ4ଳସ P3R.S4YZ +25 P3RS.4YZ ଦ3ନପ.4ଳସ P3RS.4YZ +25 5QR.6XY7 5ଧନ.6ରଳ7 5QR.6XY7 +25 5QR6.XY7 5ଧନ6.ରଳ7 5QR6.XY7 +25 8Q9.SX0Z 8ଧ9.ପର0ସ 8Q9.SX0Z +25 8Q9S.X0Z 8ଧ9ପ.ର0ସ 8Q9S.X0Z +25 1QR2.TX3Z 1ଧନ2.ବର3ସ 1QR2.TX3Z +25 P4RS.5XY6 ଦ4ନପ.5ରଳ6 P4RS.5XY6 +25 P7R8.T9Y0 ଦ7ନ8.ବ9ଳ0 P7R8.T9Y0 +25 PQ1ST.2XY3 ଦଧ1ପବ.2ରଳ3 PQ1ST.2XY3 +25 P4RS5.VX6Z ଦ4ନପ5.ମର6ସ P4RS5.VX6Z +25 7QR8T.V9YZ 7ଧନ8ବ.ମ9ଳସ 7QR8T.V9YZ +25 P1R2T.3X4Z ଦ1ନ2ବ.3ର4ସ P1R2T.3X4Z +25 5Q6S7.V8Y9 5ଧ6ପ7.ମ8ଳ9 5Q6S7.V8Y9 +25 ABCDEFGHIJKLMNOPQRSTUVWXYZ ଝକଖଗଣଘଚଜIଟଡଢତଥଠଦଧନପବହମଯରଳସ ABCDEFGHIJKLMNOPQRSTUVWXYZ +25 ABCDEFGHIJKLMNOPQRSTUVWXYZ ଝକଖଗଣଘଚଜIଟଡଢତଥଠଦଧନପବହମଯରଳସ ABCDEFGHIJKLMNOPQRSTUVWXYZ +25 OI.XX ଠI.ରର OI.XX +25 OI.XX ଠI.ରର OI.XX +25 OI.XX-OOOOOOOO ଠI.ରର-ଠଠଠଠଠଠଠଠ OI.XX-OOOOOOOO +25 OI.XX-IIIIIIII ଠI.ରର-IIIIIIII OI.XX-IIIIIIII +25 PQ.RS-01234567 ଦଧ.ନପ-01234567 PQ.RS-01234567 +25 PQ.RS-890 ଦଧ.ନପ-890 PQ.RS-890 +25 89.EU-BC 89.ଣହ-କଖ 89.EU-BC +25 00.0A-BC 00.0ଝ-କଖ 00.0A-BC +25 BCDF.GHJK-BC କଖଗଘ.ଚଜଟଡ-କଖ BCDF.GHJK-BC +25 LMNP.QRST-BC ଢତଥଦ.ଧନପବ-କଖ LMNP.QRST-BC +25 VWXY.Z123-BC ମଯରଳ.ସ123-କଖ VWXY.Z123-BC +25 4567.890B-BC 4567.890କ-କଖ 4567.890B-BC +25 PQ.XY-BC ଦଧ.ରଳ-କଖ PQ.XY-BC +25 PQ.XYZ-BC ଦଧ.ରଳସ-କଖ PQ.XYZ-BC +25 PQX.YZ-BC ଦଧର.ଳସ-କଖ PQX.YZ-BC +25 PQ.RXYZ-BC ଦଧ.ନରଳସ-କଖ PQ.RXYZ-BC +25 PQR.XYZ-BC ଦଧନ.ରଳସ-କଖ PQR.XYZ-BC +25 PQRX.YZ-BC ଦଧନର.ଳସ-କଖ PQRX.YZ-BC +25 PQR.SXYZ-BC ଦଧନ.ପରଳସ-କଖ PQR.SXYZ-BC +25 PQRS.XYZ-BC ଦଧନପ.ରଳସ-କଖ PQRS.XYZ-BC +25 PQRS.TXYZ-BC ଦଧନପ.ବରଳସ-କଖ PQRS.TXYZ-BC +25 PQRST.VXYZ-BC ଦଧନପବ.ମରଳସ-କଖ PQRST.VXYZ-BC +25 P1.XY-BC ଦ1.ରଳ-କଖ P1.XY-BC +25 PQ.2Y-BC ଦଧ.2ଳ-କଖ PQ.2Y-BC +25 3Q.X4-BC 3ଧ.ର4-କଖ 3Q.X4-BC +25 5Q.6Y-BC 5ଧ.6ଳ-କଖ 5Q.6Y-BC +25 PQ.1YZ-BC ଦଧ.1ଳସ-କଖ PQ.1YZ-BC +25 PQ1.YZ-BC ଦଧ1.ଳସ-କଖ PQ1.YZ-BC +25 P2.X3Z-BC ଦ2.ର3ସ-କଖ P2.X3Z-BC +25 P2X.3Z-BC ଦ2ର.3ସ-କଖ P2X.3Z-BC +25 PQ.1XY2-BC ଦଧ.1ରଳ2-କଖ PQ.1XY2-BC +25 PQ1.XY2-BC ଦଧ1.ରଳ2-କଖ PQ1.XY2-BC +25 PQ1X.Y2-BC ଦଧ1ର.ଳ2-କଖ PQ1X.Y2-BC +25 P3.RX4Z-BC ଦ3.ନର4ସ-କଖ P3.RX4Z-BC +25 P3R.X4Z-BC ଦ3ନ.ର4ସ-କଖ P3R.X4Z-BC +25 P3RX.4Z-BC ଦ3ନର.4ସ-କଖ P3RX.4Z-BC +25 5Q.R6Y7-BC 5ଧ.ନ6ଳ7-କଖ 5Q.R6Y7-BC +25 5QR.6Y7-BC 5ଧନ.6ଳ7-କଖ 5QR.6Y7-BC +25 5QR6.Y7-BC 5ଧନ6.ଳ7-କଖ 5QR6.Y7-BC +25 PQ1.SX2Z-BC ଦଧ1.ପର2ସ-କଖ PQ1.SX2Z-BC +25 PQ1S.X2Z-BC ଦଧ1ପ.ର2ସ-କଖ PQ1S.X2Z-BC +25 P3R.S4YZ-BC ଦ3ନ.ପ4ଳସ-କଖ P3R.S4YZ-BC +25 P3RS.4YZ-BC ଦ3ନପ.4ଳସ-କଖ P3RS.4YZ-BC +25 5QR.6XY7-BC 5ଧନ.6ରଳ7-କଖ 5QR.6XY7-BC +25 5QR6.XY7-BC 5ଧନ6.ରଳ7-କଖ 5QR6.XY7-BC +25 8Q9.SX0Z-BC 8ଧ9.ପର0ସ-କଖ 8Q9.SX0Z-BC +25 8Q9S.X0Z-BC 8ଧ9ପ.ର0ସ-କଖ 8Q9S.X0Z-BC +25 1QR2.TX3Z-BC 1ଧନ2.ବର3ସ-କଖ 1QR2.TX3Z-BC +25 P4RS.5XY6-BC ଦ4ନପ.5ରଳ6-କଖ P4RS.5XY6-BC +25 P7R8.T9Y0-BC ଦ7ନ8.ବ9ଳ0-କଖ P7R8.T9Y0-BC +25 PQ1ST.2XY3-BC ଦଧ1ପବ.2ରଳ3-କଖ PQ1ST.2XY3-BC +25 P4RS5.VX6Z-BC ଦ4ନପ5.ମର6ସ-କଖ P4RS5.VX6Z-BC +25 7QR8T.V9YZ-BC 7ଧନ8ବ.ମ9ଳସ-କଖ 7QR8T.V9YZ-BC +25 P1R2T.3X4Z-BC ଦ1ନ2ବ.3ର4ସ-କଖ P1R2T.3X4Z-BC +25 5Q6S7.V8Y9-BC 5ଧ6ପ7.ମ8ଳ9-କଖ 5Q6S7.V8Y9-BC +25 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ଝକଖଗଣଘଚଜIଟଡଢତଥଠଦଧନପବହମଯରଳସ-କଖ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +25 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ଝକଖଗଣଘଚଜIଟଡଢତଥଠଦଧନପବହମଯରଳସ-କଖ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +25 OI.XX-BC ଠI.ରର-କଖ OI.XX-BC +25 OI.XX-BC ଠI.ରର-କଖ OI.XX-BC +25 OI.XX-OOOOOOOO-BC ଠI.ରର-ଠଠଠଠଠଠଠଠ-କଖ OI.XX-OOOOOOOO-BC +25 OI.XX-IIIIIIII-BC ଠI.ରର-IIIIIIII-କଖ OI.XX-IIIIIIII-BC +25 PQ.RS-01234567-BC ଦଧ.ନପ-01234567-କଖ PQ.RS-01234567-BC +25 PQ.RS-890-BC ଦଧ.ନପ-890-କଖ PQ.RS-890-BC +25 89.EU-DFGHJKLM 89.ଣହ-ଗଘଚଜଟଡଢତ 89.EU-DFGHJKLM +25 00.0A-DFGHJKLM 00.0ଝ-ଗଘଚଜଟଡଢତ 00.0A-DFGHJKLM +25 BCDF.GHJK-DFGHJKLM କଖଗଘ.ଚଜଟଡ-ଗଘଚଜଟଡଢତ BCDF.GHJK-DFGHJKLM +25 LMNP.QRST-DFGHJKLM ଢତଥଦ.ଧନପବ-ଗଘଚଜଟଡଢତ LMNP.QRST-DFGHJKLM +25 VWXY.Z123-DFGHJKLM ମଯରଳ.ସ123-ଗଘଚଜଟଡଢତ VWXY.Z123-DFGHJKLM +25 4567.890B-DFGHJKLM 4567.890କ-ଗଘଚଜଟଡଢତ 4567.890B-DFGHJKLM +25 PQ.XY-DFGHJKLM ଦଧ.ରଳ-ଗଘଚଜଟଡଢତ PQ.XY-DFGHJKLM +25 PQ.XYZ-DFGHJKLM ଦଧ.ରଳସ-ଗଘଚଜଟଡଢତ PQ.XYZ-DFGHJKLM +25 PQX.YZ-DFGHJKLM ଦଧର.ଳସ-ଗଘଚଜଟଡଢତ PQX.YZ-DFGHJKLM +25 PQ.RXYZ-DFGHJKLM ଦଧ.ନରଳସ-ଗଘଚଜଟଡଢତ PQ.RXYZ-DFGHJKLM +25 PQR.XYZ-DFGHJKLM ଦଧନ.ରଳସ-ଗଘଚଜଟଡଢତ PQR.XYZ-DFGHJKLM +25 PQRX.YZ-DFGHJKLM ଦଧନର.ଳସ-ଗଘଚଜଟଡଢତ PQRX.YZ-DFGHJKLM +25 PQR.SXYZ-DFGHJKLM ଦଧନ.ପରଳସ-ଗଘଚଜଟଡଢତ PQR.SXYZ-DFGHJKLM +25 PQRS.XYZ-DFGHJKLM ଦଧନପ.ରଳସ-ଗଘଚଜଟଡଢତ PQRS.XYZ-DFGHJKLM +25 PQRS.TXYZ-DFGHJKLM ଦଧନପ.ବରଳସ-ଗଘଚଜଟଡଢତ PQRS.TXYZ-DFGHJKLM +25 PQRST.VXYZ-DFGHJKLM ଦଧନପବ.ମରଳସ-ଗଘଚଜଟଡଢତ PQRST.VXYZ-DFGHJKLM +25 P1.XY-DFGHJKLM ଦ1.ରଳ-ଗଘଚଜଟଡଢତ P1.XY-DFGHJKLM +25 PQ.2Y-DFGHJKLM ଦଧ.2ଳ-ଗଘଚଜଟଡଢତ PQ.2Y-DFGHJKLM +25 3Q.X4-DFGHJKLM 3ଧ.ର4-ଗଘଚଜଟଡଢତ 3Q.X4-DFGHJKLM +25 5Q.6Y-DFGHJKLM 5ଧ.6ଳ-ଗଘଚଜଟଡଢତ 5Q.6Y-DFGHJKLM +25 PQ.1YZ-DFGHJKLM ଦଧ.1ଳସ-ଗଘଚଜଟଡଢତ PQ.1YZ-DFGHJKLM +25 PQ1.YZ-DFGHJKLM ଦଧ1.ଳସ-ଗଘଚଜଟଡଢତ PQ1.YZ-DFGHJKLM +25 P2.X3Z-DFGHJKLM ଦ2.ର3ସ-ଗଘଚଜଟଡଢତ P2.X3Z-DFGHJKLM +25 P2X.3Z-DFGHJKLM ଦ2ର.3ସ-ଗଘଚଜଟଡଢତ P2X.3Z-DFGHJKLM +25 PQ.1XY2-DFGHJKLM ଦଧ.1ରଳ2-ଗଘଚଜଟଡଢତ PQ.1XY2-DFGHJKLM +25 PQ1.XY2-DFGHJKLM ଦଧ1.ରଳ2-ଗଘଚଜଟଡଢତ PQ1.XY2-DFGHJKLM +25 PQ1X.Y2-DFGHJKLM ଦଧ1ର.ଳ2-ଗଘଚଜଟଡଢତ PQ1X.Y2-DFGHJKLM +25 P3.RX4Z-DFGHJKLM ଦ3.ନର4ସ-ଗଘଚଜଟଡଢତ P3.RX4Z-DFGHJKLM +25 P3R.X4Z-DFGHJKLM ଦ3ନ.ର4ସ-ଗଘଚଜଟଡଢତ P3R.X4Z-DFGHJKLM +25 P3RX.4Z-DFGHJKLM ଦ3ନର.4ସ-ଗଘଚଜଟଡଢତ P3RX.4Z-DFGHJKLM +25 5Q.R6Y7-DFGHJKLM 5ଧ.ନ6ଳ7-ଗଘଚଜଟଡଢତ 5Q.R6Y7-DFGHJKLM +25 5QR.6Y7-DFGHJKLM 5ଧନ.6ଳ7-ଗଘଚଜଟଡଢତ 5QR.6Y7-DFGHJKLM +25 5QR6.Y7-DFGHJKLM 5ଧନ6.ଳ7-ଗଘଚଜଟଡଢତ 5QR6.Y7-DFGHJKLM +25 PQ1.SX2Z-DFGHJKLM ଦଧ1.ପର2ସ-ଗଘଚଜଟଡଢତ PQ1.SX2Z-DFGHJKLM +25 PQ1S.X2Z-DFGHJKLM ଦଧ1ପ.ର2ସ-ଗଘଚଜଟଡଢତ PQ1S.X2Z-DFGHJKLM +25 P3R.S4YZ-DFGHJKLM ଦ3ନ.ପ4ଳସ-ଗଘଚଜଟଡଢତ P3R.S4YZ-DFGHJKLM +25 P3RS.4YZ-DFGHJKLM ଦ3ନପ.4ଳସ-ଗଘଚଜଟଡଢତ P3RS.4YZ-DFGHJKLM +25 5QR.6XY7-DFGHJKLM 5ଧନ.6ରଳ7-ଗଘଚଜଟଡଢତ 5QR.6XY7-DFGHJKLM +25 5QR6.XY7-DFGHJKLM 5ଧନ6.ରଳ7-ଗଘଚଜଟଡଢତ 5QR6.XY7-DFGHJKLM +25 8Q9.SX0Z-DFGHJKLM 8ଧ9.ପର0ସ-ଗଘଚଜଟଡଢତ 8Q9.SX0Z-DFGHJKLM +25 8Q9S.X0Z-DFGHJKLM 8ଧ9ପ.ର0ସ-ଗଘଚଜଟଡଢତ 8Q9S.X0Z-DFGHJKLM +25 1QR2.TX3Z-DFGHJKLM 1ଧନ2.ବର3ସ-ଗଘଚଜଟଡଢତ 1QR2.TX3Z-DFGHJKLM +25 P4RS.5XY6-DFGHJKLM ଦ4ନପ.5ରଳ6-ଗଘଚଜଟଡଢତ P4RS.5XY6-DFGHJKLM +25 P7R8.T9Y0-DFGHJKLM ଦ7ନ8.ବ9ଳ0-ଗଘଚଜଟଡଢତ P7R8.T9Y0-DFGHJKLM +25 PQ1ST.2XY3-DFGHJKLM ଦଧ1ପବ.2ରଳ3-ଗଘଚଜଟଡଢତ PQ1ST.2XY3-DFGHJKLM +25 P4RS5.VX6Z-DFGHJKLM ଦ4ନପ5.ମର6ସ-ଗଘଚଜଟଡଢତ P4RS5.VX6Z-DFGHJKLM +25 7QR8T.V9YZ-DFGHJKLM 7ଧନ8ବ.ମ9ଳସ-ଗଘଚଜଟଡଢତ 7QR8T.V9YZ-DFGHJKLM +25 P1R2T.3X4Z-DFGHJKLM ଦ1ନ2ବ.3ର4ସ-ଗଘଚଜଟଡଢତ P1R2T.3X4Z-DFGHJKLM +25 5Q6S7.V8Y9-DFGHJKLM 5ଧ6ପ7.ମ8ଳ9-ଗଘଚଜଟଡଢତ 5Q6S7.V8Y9-DFGHJKLM +25 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ଝକଖଗଣଘଚଜIଟଡଢତଥଠଦଧନପବହମଯରଳସ-ଗଘଚଜଟଡଢତ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +25 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ଝକଖଗଣଘଚଜIଟଡଢତଥଠଦଧନପବହମଯରଳସ-ଗଘଚଜଟଡଢତ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +25 OI.XX-DFGHJKLM ଠI.ରର-ଗଘଚଜଟଡଢତ OI.XX-DFGHJKLM +25 OI.XX-DFGHJKLM ଠI.ରର-ଗଘଚଜଟଡଢତ OI.XX-DFGHJKLM +25 OI.XX-OOOOOOOO-DFGHJKLM ଠI.ରର-ଠଠଠଠଠଠଠଠ-ଗଘଚଜଟଡଢତ OI.XX-OOOOOOOO-DFGHJKLM +25 OI.XX-IIIIIIII-DFGHJKLM ଠI.ରର-IIIIIIII-ଗଘଚଜଟଡଢତ OI.XX-IIIIIIII-DFGHJKLM +25 PQ.RS-01234567-DFGHJKLM ଦଧ.ନପ-01234567-ଗଘଚଜଟଡଢତ PQ.RS-01234567-DFGHJKLM +25 PQ.RS-890-DFGHJKLM ଦଧ.ନପ-890-ଗଘଚଜଟଡଢତ PQ.RS-890-DFGHJKLM +26 89.EU 89.ಎಇ 89.EU +26 00.0A 00.0ಒ 00.0A +26 BCDF.GHJK ಕಖಗಙ.ಚಛಜಠ BCDF.GHJK +26 LMNP.QRST ಡಣತದ.ಧನಪಫ LMNP.QRST +26 VWXY.Z123 ಬಭರಲ.ವ123 VWXY.Z123 +26 4567.890B 4567.890ಕ 4567.890B +26 PQ.XY ದಧ.ರಲ PQ.XY +26 PQ.XYZ ದಧ.ರಲವ PQ.XYZ +26 PQX.YZ ದಧರ.ಲವ PQX.YZ +26 PQ.RXYZ ದಧ.ನರಲವ PQ.RXYZ +26 PQR.XYZ ದಧನ.ರಲವ PQR.XYZ +26 PQRX.YZ ದಧನರ.ಲವ PQRX.YZ +26 PQR.SXYZ ದಧನ.ಪರಲವ PQR.SXYZ +26 PQRS.XYZ ದಧನಪ.ರಲವ PQRS.XYZ +26 PQRS.TXYZ ದಧನಪ.ಫರಲವ PQRS.TXYZ +26 PQRST.VXYZ ದಧನಪಫ.ಬರಲವ PQRST.VXYZ +26 P1.XY ದ1.ರಲ P1.XY +26 PQ.2Y ದಧ.2ಲ PQ.2Y +26 3Q.X4 3ಧ.ರ4 3Q.X4 +26 5Q.6Y 5ಧ.6ಲ 5Q.6Y +26 PQ.1YZ ದಧ.1ಲವ PQ.1YZ +26 PQ1.YZ ದಧ1.ಲವ PQ1.YZ +26 P2.X3Z ದ2.ರ3ವ P2.X3Z +26 P2X.3Z ದ2ರ.3ವ P2X.3Z +26 PQ.1XY2 ದಧ.1ರಲ2 PQ.1XY2 +26 PQ1.XY2 ದಧ1.ರಲ2 PQ1.XY2 +26 PQ1X.Y2 ದಧ1ರ.ಲ2 PQ1X.Y2 +26 P3.RX4Z ದ3.ನರ4ವ P3.RX4Z +26 P3R.X4Z ದ3ನ.ರ4ವ P3R.X4Z +26 P3RX.4Z ದ3ನರ.4ವ P3RX.4Z +26 5Q.R6Y7 5ಧ.ನ6ಲ7 5Q.R6Y7 +26 5QR.6Y7 5ಧನ.6ಲ7 5QR.6Y7 +26 5QR6.Y7 5ಧನ6.ಲ7 5QR6.Y7 +26 PQ1.SX2Z ದಧ1.ಪರ2ವ PQ1.SX2Z +26 PQ1S.X2Z ದಧ1ಪ.ರ2ವ PQ1S.X2Z +26 P3R.S4YZ ದ3ನ.ಪ4ಲವ P3R.S4YZ +26 P3RS.4YZ ದ3ನಪ.4ಲವ P3RS.4YZ +26 5QR.6XY7 5ಧನ.6ರಲ7 5QR.6XY7 +26 5QR6.XY7 5ಧನ6.ರಲ7 5QR6.XY7 +26 8Q9.SX0Z 8ಧ9.ಪರ0ವ 8Q9.SX0Z +26 8Q9S.X0Z 8ಧ9ಪ.ರ0ವ 8Q9S.X0Z +26 1QR2.TX3Z 1ಧನ2.ಫರ3ವ 1QR2.TX3Z +26 P4RS.5XY6 ದ4ನಪ.5ರಲ6 P4RS.5XY6 +26 P7R8.T9Y0 ದ7ನ8.ಫ9ಲ0 P7R8.T9Y0 +26 PQ1ST.2XY3 ದಧ1ಪಫ.2ರಲ3 PQ1ST.2XY3 +26 P4RS5.VX6Z ದ4ನಪ5.ಬರ6ವ P4RS5.VX6Z +26 7QR8T.V9YZ 7ಧನ8ಫ.ಬ9ಲವ 7QR8T.V9YZ +26 P1R2T.3X4Z ದ1ನ2ಫ.3ರ4ವ P1R2T.3X4Z +26 5Q6S7.V8Y9 5ಧ6ಪ7.ಬ8ಲ9 5Q6S7.V8Y9 +26 ABCDEFGHIJKLMNOPQRSTUVWXYZ ಒಕಖಗಎಙಚಛIಜಠಡಣತOದಧನಪಫಇಬಭರಲವ ABCDEFGHIJKLMNOPQRSTUVWXYZ +26 ABCDEFGHIJKLMNOPQRSTUVWXYZ ಒಕಖಗಎಙಚಛIಜಠಡಣತOದಧನಪಫಇಬಭರಲವ ABCDEFGHIJKLMNOPQRSTUVWXYZ +26 OI.XX OI.ರರ OI.XX +26 OI.XX OI.ರರ OI.XX +26 OI.XX-OOOOOOOO OI.ರರ-OOOOOOOO OI.XX-OOOOOOOO +26 OI.XX-IIIIIIII OI.ರರ-IIIIIIII OI.XX-IIIIIIII +26 PQ.RS-01234567 ದಧ.ನಪ-01234567 PQ.RS-01234567 +26 PQ.RS-890 ದಧ.ನಪ-890 PQ.RS-890 +26 89.EU-BC 89.ಎಇ-ಕಖ 89.EU-BC +26 00.0A-BC 00.0ಒ-ಕಖ 00.0A-BC +26 BCDF.GHJK-BC ಕಖಗಙ.ಚಛಜಠ-ಕಖ BCDF.GHJK-BC +26 LMNP.QRST-BC ಡಣತದ.ಧನಪಫ-ಕಖ LMNP.QRST-BC +26 VWXY.Z123-BC ಬಭರಲ.ವ123-ಕಖ VWXY.Z123-BC +26 4567.890B-BC 4567.890ಕ-ಕಖ 4567.890B-BC +26 PQ.XY-BC ದಧ.ರಲ-ಕಖ PQ.XY-BC +26 PQ.XYZ-BC ದಧ.ರಲವ-ಕಖ PQ.XYZ-BC +26 PQX.YZ-BC ದಧರ.ಲವ-ಕಖ PQX.YZ-BC +26 PQ.RXYZ-BC ದಧ.ನರಲವ-ಕಖ PQ.RXYZ-BC +26 PQR.XYZ-BC ದಧನ.ರಲವ-ಕಖ PQR.XYZ-BC +26 PQRX.YZ-BC ದಧನರ.ಲವ-ಕಖ PQRX.YZ-BC +26 PQR.SXYZ-BC ದಧನ.ಪರಲವ-ಕಖ PQR.SXYZ-BC +26 PQRS.XYZ-BC ದಧನಪ.ರಲವ-ಕಖ PQRS.XYZ-BC +26 PQRS.TXYZ-BC ದಧನಪ.ಫರಲವ-ಕಖ PQRS.TXYZ-BC +26 PQRST.VXYZ-BC ದಧನಪಫ.ಬರಲವ-ಕಖ PQRST.VXYZ-BC +26 P1.XY-BC ದ1.ರಲ-ಕಖ P1.XY-BC +26 PQ.2Y-BC ದಧ.2ಲ-ಕಖ PQ.2Y-BC +26 3Q.X4-BC 3ಧ.ರ4-ಕಖ 3Q.X4-BC +26 5Q.6Y-BC 5ಧ.6ಲ-ಕಖ 5Q.6Y-BC +26 PQ.1YZ-BC ದಧ.1ಲವ-ಕಖ PQ.1YZ-BC +26 PQ1.YZ-BC ದಧ1.ಲವ-ಕಖ PQ1.YZ-BC +26 P2.X3Z-BC ದ2.ರ3ವ-ಕಖ P2.X3Z-BC +26 P2X.3Z-BC ದ2ರ.3ವ-ಕಖ P2X.3Z-BC +26 PQ.1XY2-BC ದಧ.1ರಲ2-ಕಖ PQ.1XY2-BC +26 PQ1.XY2-BC ದಧ1.ರಲ2-ಕಖ PQ1.XY2-BC +26 PQ1X.Y2-BC ದಧ1ರ.ಲ2-ಕಖ PQ1X.Y2-BC +26 P3.RX4Z-BC ದ3.ನರ4ವ-ಕಖ P3.RX4Z-BC +26 P3R.X4Z-BC ದ3ನ.ರ4ವ-ಕಖ P3R.X4Z-BC +26 P3RX.4Z-BC ದ3ನರ.4ವ-ಕಖ P3RX.4Z-BC +26 5Q.R6Y7-BC 5ಧ.ನ6ಲ7-ಕಖ 5Q.R6Y7-BC +26 5QR.6Y7-BC 5ಧನ.6ಲ7-ಕಖ 5QR.6Y7-BC +26 5QR6.Y7-BC 5ಧನ6.ಲ7-ಕಖ 5QR6.Y7-BC +26 PQ1.SX2Z-BC ದಧ1.ಪರ2ವ-ಕಖ PQ1.SX2Z-BC +26 PQ1S.X2Z-BC ದಧ1ಪ.ರ2ವ-ಕಖ PQ1S.X2Z-BC +26 P3R.S4YZ-BC ದ3ನ.ಪ4ಲವ-ಕಖ P3R.S4YZ-BC +26 P3RS.4YZ-BC ದ3ನಪ.4ಲವ-ಕಖ P3RS.4YZ-BC +26 5QR.6XY7-BC 5ಧನ.6ರಲ7-ಕಖ 5QR.6XY7-BC +26 5QR6.XY7-BC 5ಧನ6.ರಲ7-ಕಖ 5QR6.XY7-BC +26 8Q9.SX0Z-BC 8ಧ9.ಪರ0ವ-ಕಖ 8Q9.SX0Z-BC +26 8Q9S.X0Z-BC 8ಧ9ಪ.ರ0ವ-ಕಖ 8Q9S.X0Z-BC +26 1QR2.TX3Z-BC 1ಧನ2.ಫರ3ವ-ಕಖ 1QR2.TX3Z-BC +26 P4RS.5XY6-BC ದ4ನಪ.5ರಲ6-ಕಖ P4RS.5XY6-BC +26 P7R8.T9Y0-BC ದ7ನ8.ಫ9ಲ0-ಕಖ P7R8.T9Y0-BC +26 PQ1ST.2XY3-BC ದಧ1ಪಫ.2ರಲ3-ಕಖ PQ1ST.2XY3-BC +26 P4RS5.VX6Z-BC ದ4ನಪ5.ಬರ6ವ-ಕಖ P4RS5.VX6Z-BC +26 7QR8T.V9YZ-BC 7ಧನ8ಫ.ಬ9ಲವ-ಕಖ 7QR8T.V9YZ-BC +26 P1R2T.3X4Z-BC ದ1ನ2ಫ.3ರ4ವ-ಕಖ P1R2T.3X4Z-BC +26 5Q6S7.V8Y9-BC 5ಧ6ಪ7.ಬ8ಲ9-ಕಖ 5Q6S7.V8Y9-BC +26 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ಒಕಖಗಎಙಚಛIಜಠಡಣತOದಧನಪಫಇಬಭರಲವ-ಕಖ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +26 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ಒಕಖಗಎಙಚಛIಜಠಡಣತOದಧನಪಫಇಬಭರಲವ-ಕಖ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +26 OI.XX-BC OI.ರರ-ಕಖ OI.XX-BC +26 OI.XX-BC OI.ರರ-ಕಖ OI.XX-BC +26 OI.XX-OOOOOOOO-BC OI.ರರ-OOOOOOOO-ಕಖ OI.XX-OOOOOOOO-BC +26 OI.XX-IIIIIIII-BC OI.ರರ-IIIIIIII-ಕಖ OI.XX-IIIIIIII-BC +26 PQ.RS-01234567-BC ದಧ.ನಪ-01234567-ಕಖ PQ.RS-01234567-BC +26 PQ.RS-890-BC ದಧ.ನಪ-890-ಕಖ PQ.RS-890-BC +26 89.EU-DFGHJKLM 89.ಎಇ-ಗಙಚಛಜಠಡಣ 89.EU-DFGHJKLM +26 00.0A-DFGHJKLM 00.0ಒ-ಗಙಚಛಜಠಡಣ 00.0A-DFGHJKLM +26 BCDF.GHJK-DFGHJKLM ಕಖಗಙ.ಚಛಜಠ-ಗಙಚಛಜಠಡಣ BCDF.GHJK-DFGHJKLM +26 LMNP.QRST-DFGHJKLM ಡಣತದ.ಧನಪಫ-ಗಙಚಛಜಠಡಣ LMNP.QRST-DFGHJKLM +26 VWXY.Z123-DFGHJKLM ಬಭರಲ.ವ123-ಗಙಚಛಜಠಡಣ VWXY.Z123-DFGHJKLM +26 4567.890B-DFGHJKLM 4567.890ಕ-ಗಙಚಛಜಠಡಣ 4567.890B-DFGHJKLM +26 PQ.XY-DFGHJKLM ದಧ.ರಲ-ಗಙಚಛಜಠಡಣ PQ.XY-DFGHJKLM +26 PQ.XYZ-DFGHJKLM ದಧ.ರಲವ-ಗಙಚಛಜಠಡಣ PQ.XYZ-DFGHJKLM +26 PQX.YZ-DFGHJKLM ದಧರ.ಲವ-ಗಙಚಛಜಠಡಣ PQX.YZ-DFGHJKLM +26 PQ.RXYZ-DFGHJKLM ದಧ.ನರಲವ-ಗಙಚಛಜಠಡಣ PQ.RXYZ-DFGHJKLM +26 PQR.XYZ-DFGHJKLM ದಧನ.ರಲವ-ಗಙಚಛಜಠಡಣ PQR.XYZ-DFGHJKLM +26 PQRX.YZ-DFGHJKLM ದಧನರ.ಲವ-ಗಙಚಛಜಠಡಣ PQRX.YZ-DFGHJKLM +26 PQR.SXYZ-DFGHJKLM ದಧನ.ಪರಲವ-ಗಙಚಛಜಠಡಣ PQR.SXYZ-DFGHJKLM +26 PQRS.XYZ-DFGHJKLM ದಧನಪ.ರಲವ-ಗಙಚಛಜಠಡಣ PQRS.XYZ-DFGHJKLM +26 PQRS.TXYZ-DFGHJKLM ದಧನಪ.ಫರಲವ-ಗಙಚಛಜಠಡಣ PQRS.TXYZ-DFGHJKLM +26 PQRST.VXYZ-DFGHJKLM ದಧನಪಫ.ಬರಲವ-ಗಙಚಛಜಠಡಣ PQRST.VXYZ-DFGHJKLM +26 P1.XY-DFGHJKLM ದ1.ರಲ-ಗಙಚಛಜಠಡಣ P1.XY-DFGHJKLM +26 PQ.2Y-DFGHJKLM ದಧ.2ಲ-ಗಙಚಛಜಠಡಣ PQ.2Y-DFGHJKLM +26 3Q.X4-DFGHJKLM 3ಧ.ರ4-ಗಙಚಛಜಠಡಣ 3Q.X4-DFGHJKLM +26 5Q.6Y-DFGHJKLM 5ಧ.6ಲ-ಗಙಚಛಜಠಡಣ 5Q.6Y-DFGHJKLM +26 PQ.1YZ-DFGHJKLM ದಧ.1ಲವ-ಗಙಚಛಜಠಡಣ PQ.1YZ-DFGHJKLM +26 PQ1.YZ-DFGHJKLM ದಧ1.ಲವ-ಗಙಚಛಜಠಡಣ PQ1.YZ-DFGHJKLM +26 P2.X3Z-DFGHJKLM ದ2.ರ3ವ-ಗಙಚಛಜಠಡಣ P2.X3Z-DFGHJKLM +26 P2X.3Z-DFGHJKLM ದ2ರ.3ವ-ಗಙಚಛಜಠಡಣ P2X.3Z-DFGHJKLM +26 PQ.1XY2-DFGHJKLM ದಧ.1ರಲ2-ಗಙಚಛಜಠಡಣ PQ.1XY2-DFGHJKLM +26 PQ1.XY2-DFGHJKLM ದಧ1.ರಲ2-ಗಙಚಛಜಠಡಣ PQ1.XY2-DFGHJKLM +26 PQ1X.Y2-DFGHJKLM ದಧ1ರ.ಲ2-ಗಙಚಛಜಠಡಣ PQ1X.Y2-DFGHJKLM +26 P3.RX4Z-DFGHJKLM ದ3.ನರ4ವ-ಗಙಚಛಜಠಡಣ P3.RX4Z-DFGHJKLM +26 P3R.X4Z-DFGHJKLM ದ3ನ.ರ4ವ-ಗಙಚಛಜಠಡಣ P3R.X4Z-DFGHJKLM +26 P3RX.4Z-DFGHJKLM ದ3ನರ.4ವ-ಗಙಚಛಜಠಡಣ P3RX.4Z-DFGHJKLM +26 5Q.R6Y7-DFGHJKLM 5ಧ.ನ6ಲ7-ಗಙಚಛಜಠಡಣ 5Q.R6Y7-DFGHJKLM +26 5QR.6Y7-DFGHJKLM 5ಧನ.6ಲ7-ಗಙಚಛಜಠಡಣ 5QR.6Y7-DFGHJKLM +26 5QR6.Y7-DFGHJKLM 5ಧನ6.ಲ7-ಗಙಚಛಜಠಡಣ 5QR6.Y7-DFGHJKLM +26 PQ1.SX2Z-DFGHJKLM ದಧ1.ಪರ2ವ-ಗಙಚಛಜಠಡಣ PQ1.SX2Z-DFGHJKLM +26 PQ1S.X2Z-DFGHJKLM ದಧ1ಪ.ರ2ವ-ಗಙಚಛಜಠಡಣ PQ1S.X2Z-DFGHJKLM +26 P3R.S4YZ-DFGHJKLM ದ3ನ.ಪ4ಲವ-ಗಙಚಛಜಠಡಣ P3R.S4YZ-DFGHJKLM +26 P3RS.4YZ-DFGHJKLM ದ3ನಪ.4ಲವ-ಗಙಚಛಜಠಡಣ P3RS.4YZ-DFGHJKLM +26 5QR.6XY7-DFGHJKLM 5ಧನ.6ರಲ7-ಗಙಚಛಜಠಡಣ 5QR.6XY7-DFGHJKLM +26 5QR6.XY7-DFGHJKLM 5ಧನ6.ರಲ7-ಗಙಚಛಜಠಡಣ 5QR6.XY7-DFGHJKLM +26 8Q9.SX0Z-DFGHJKLM 8ಧ9.ಪರ0ವ-ಗಙಚಛಜಠಡಣ 8Q9.SX0Z-DFGHJKLM +26 8Q9S.X0Z-DFGHJKLM 8ಧ9ಪ.ರ0ವ-ಗಙಚಛಜಠಡಣ 8Q9S.X0Z-DFGHJKLM +26 1QR2.TX3Z-DFGHJKLM 1ಧನ2.ಫರ3ವ-ಗಙಚಛಜಠಡಣ 1QR2.TX3Z-DFGHJKLM +26 P4RS.5XY6-DFGHJKLM ದ4ನಪ.5ರಲ6-ಗಙಚಛಜಠಡಣ P4RS.5XY6-DFGHJKLM +26 P7R8.T9Y0-DFGHJKLM ದ7ನ8.ಫ9ಲ0-ಗಙಚಛಜಠಡಣ P7R8.T9Y0-DFGHJKLM +26 PQ1ST.2XY3-DFGHJKLM ದಧ1ಪಫ.2ರಲ3-ಗಙಚಛಜಠಡಣ PQ1ST.2XY3-DFGHJKLM +26 P4RS5.VX6Z-DFGHJKLM ದ4ನಪ5.ಬರ6ವ-ಗಙಚಛಜಠಡಣ P4RS5.VX6Z-DFGHJKLM +26 7QR8T.V9YZ-DFGHJKLM 7ಧನ8ಫ.ಬ9ಲವ-ಗಙಚಛಜಠಡಣ 7QR8T.V9YZ-DFGHJKLM +26 P1R2T.3X4Z-DFGHJKLM ದ1ನ2ಫ.3ರ4ವ-ಗಙಚಛಜಠಡಣ P1R2T.3X4Z-DFGHJKLM +26 5Q6S7.V8Y9-DFGHJKLM 5ಧ6ಪ7.ಬ8ಲ9-ಗಙಚಛಜಠಡಣ 5Q6S7.V8Y9-DFGHJKLM +26 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ಒಕಖಗಎಙಚಛIಜಠಡಣತOದಧನಪಫಇಬಭರಲವ-ಗಙಚಛಜಠಡಣ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +26 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ಒಕಖಗಎಙಚಛIಜಠಡಣತOದಧನಪಫಇಬಭರಲವ-ಗಙಚಛಜಠಡಣ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +26 OI.XX-DFGHJKLM OI.ರರ-ಗಙಚಛಜಠಡಣ OI.XX-DFGHJKLM +26 OI.XX-DFGHJKLM OI.ರರ-ಗಙಚಛಜಠಡಣ OI.XX-DFGHJKLM +26 OI.XX-OOOOOOOO-DFGHJKLM OI.ರರ-OOOOOOOO-ಗಙಚಛಜಠಡಣ OI.XX-OOOOOOOO-DFGHJKLM +26 OI.XX-IIIIIIII-DFGHJKLM OI.ರರ-IIIIIIII-ಗಙಚಛಜಠಡಣ OI.XX-IIIIIIII-DFGHJKLM +26 PQ.RS-01234567-DFGHJKLM ದಧ.ನಪ-01234567-ಗಙಚಛಜಠಡಣ PQ.RS-01234567-DFGHJKLM +26 PQ.RS-890-DFGHJKLM ದಧ.ನಪ-890-ಗಙಚಛಜಠಡಣ PQ.RS-890-DFGHJKLM +27 89.EU 89.ઇઉ 89.EU +27 00.0A 00.0ળ 00.0A +27 BCDF.GHJK ગજડદ.બકચટ BCDF.GHJK +27 LMNP.QRST તપઠર.વઞમફ LMNP.QRST +27 VWXY.Z123 ષનઝઢ.ભ123 VWXY.Z123 +27 4567.890B 4567.890ગ 4567.890B +27 PQ.XY રવ.ઝઢ PQ.XY +27 PQ.XYZ રવ.ઝઢભ PQ.XYZ +27 PQX.YZ રવઝ.ઢભ PQX.YZ +27 PQ.RXYZ રવ.ઞઝઢભ PQ.RXYZ +27 PQR.XYZ રવઞ.ઝઢભ PQR.XYZ +27 PQRX.YZ રવઞઝ.ઢભ PQRX.YZ +27 PQR.SXYZ રવઞ.મઝઢભ PQR.SXYZ +27 PQRS.XYZ રવઞમ.ઝઢભ PQRS.XYZ +27 PQRS.TXYZ રવઞમ.ફઝઢભ PQRS.TXYZ +27 PQRST.VXYZ રવઞમફ.ષઝઢભ PQRST.VXYZ +27 P1.XY ર1.ઝઢ P1.XY +27 PQ.2Y રવ.2ઢ PQ.2Y +27 3Q.X4 3વ.ઝ4 3Q.X4 +27 5Q.6Y 5વ.6ઢ 5Q.6Y +27 PQ.1YZ રવ.1ઢભ PQ.1YZ +27 PQ1.YZ રવ1.ઢભ PQ1.YZ +27 P2.X3Z ર2.ઝ3ભ P2.X3Z +27 P2X.3Z ર2ઝ.3ભ P2X.3Z +27 PQ.1XY2 રવ.1ઝઢ2 PQ.1XY2 +27 PQ1.XY2 રવ1.ઝઢ2 PQ1.XY2 +27 PQ1X.Y2 રવ1ઝ.ઢ2 PQ1X.Y2 +27 P3.RX4Z ર3.ઞઝ4ભ P3.RX4Z +27 P3R.X4Z ર3ઞ.ઝ4ભ P3R.X4Z +27 P3RX.4Z ર3ઞઝ.4ભ P3RX.4Z +27 5Q.R6Y7 5વ.ઞ6ઢ7 5Q.R6Y7 +27 5QR.6Y7 5વઞ.6ઢ7 5QR.6Y7 +27 5QR6.Y7 5વઞ6.ઢ7 5QR6.Y7 +27 PQ1.SX2Z રવ1.મઝ2ભ PQ1.SX2Z +27 PQ1S.X2Z રવ1મ.ઝ2ભ PQ1S.X2Z +27 P3R.S4YZ ર3ઞ.મ4ઢભ P3R.S4YZ +27 P3RS.4YZ ર3ઞમ.4ઢભ P3RS.4YZ +27 5QR.6XY7 5વઞ.6ઝઢ7 5QR.6XY7 +27 5QR6.XY7 5વઞ6.ઝઢ7 5QR6.XY7 +27 8Q9.SX0Z 8વ9.મઝ0ભ 8Q9.SX0Z +27 8Q9S.X0Z 8વ9મ.ઝ0ભ 8Q9S.X0Z +27 1QR2.TX3Z 1વઞ2.ફઝ3ભ 1QR2.TX3Z +27 P4RS.5XY6 ર4ઞમ.5ઝઢ6 P4RS.5XY6 +27 P7R8.T9Y0 ર7ઞ8.ફ9ઢ0 P7R8.T9Y0 +27 PQ1ST.2XY3 રવ1મફ.2ઝઢ3 PQ1ST.2XY3 +27 P4RS5.VX6Z ર4ઞમ5.ષઝ6ભ P4RS5.VX6Z +27 7QR8T.V9YZ 7વઞ8ફ.ષ9ઢભ 7QR8T.V9YZ +27 P1R2T.3X4Z ર1ઞ2ફ.3ઝ4ભ P1R2T.3X4Z +27 5Q6S7.V8Y9 5વ6મ7.ષ8ઢ9 5Q6S7.V8Y9 +27 ABCDEFGHIJKLMNOPQRSTUVWXYZ ળગજડઇદબકIચટતપઠOરવઞમફઉષનઝઢભ ABCDEFGHIJKLMNOPQRSTUVWXYZ +27 ABCDEFGHIJKLMNOPQRSTUVWXYZ ળગજડઇદબકIચટતપઠOરવઞમફઉષનઝઢભ ABCDEFGHIJKLMNOPQRSTUVWXYZ +27 OI.XX OI.ઝઝ OI.XX +27 OI.XX OI.ઝઝ OI.XX +27 OI.XX-OOOOOOOO OI.ઝઝ-OOOOOOOO OI.XX-OOOOOOOO +27 OI.XX-IIIIIIII OI.ઝઝ-IIIIIIII OI.XX-IIIIIIII +27 PQ.RS-01234567 રવ.ઞમ-01234567 PQ.RS-01234567 +27 PQ.RS-890 રવ.ઞમ-890 PQ.RS-890 +27 89.EU-BC 89.ઇઉ-ગજ 89.EU-BC +27 00.0A-BC 00.0ળ-ગજ 00.0A-BC +27 BCDF.GHJK-BC ગજડદ.બકચટ-ગજ BCDF.GHJK-BC +27 LMNP.QRST-BC તપઠર.વઞમફ-ગજ LMNP.QRST-BC +27 VWXY.Z123-BC ષનઝઢ.ભ123-ગજ VWXY.Z123-BC +27 4567.890B-BC 4567.890ગ-ગજ 4567.890B-BC +27 PQ.XY-BC રવ.ઝઢ-ગજ PQ.XY-BC +27 PQ.XYZ-BC રવ.ઝઢભ-ગજ PQ.XYZ-BC +27 PQX.YZ-BC રવઝ.ઢભ-ગજ PQX.YZ-BC +27 PQ.RXYZ-BC રવ.ઞઝઢભ-ગજ PQ.RXYZ-BC +27 PQR.XYZ-BC રવઞ.ઝઢભ-ગજ PQR.XYZ-BC +27 PQRX.YZ-BC રવઞઝ.ઢભ-ગજ PQRX.YZ-BC +27 PQR.SXYZ-BC રવઞ.મઝઢભ-ગજ PQR.SXYZ-BC +27 PQRS.XYZ-BC રવઞમ.ઝઢભ-ગજ PQRS.XYZ-BC +27 PQRS.TXYZ-BC રવઞમ.ફઝઢભ-ગજ PQRS.TXYZ-BC +27 PQRST.VXYZ-BC રવઞમફ.ષઝઢભ-ગજ PQRST.VXYZ-BC +27 P1.XY-BC ર1.ઝઢ-ગજ P1.XY-BC +27 PQ.2Y-BC રવ.2ઢ-ગજ PQ.2Y-BC +27 3Q.X4-BC 3વ.ઝ4-ગજ 3Q.X4-BC +27 5Q.6Y-BC 5વ.6ઢ-ગજ 5Q.6Y-BC +27 PQ.1YZ-BC રવ.1ઢભ-ગજ PQ.1YZ-BC +27 PQ1.YZ-BC રવ1.ઢભ-ગજ PQ1.YZ-BC +27 P2.X3Z-BC ર2.ઝ3ભ-ગજ P2.X3Z-BC +27 P2X.3Z-BC ર2ઝ.3ભ-ગજ P2X.3Z-BC +27 PQ.1XY2-BC રવ.1ઝઢ2-ગજ PQ.1XY2-BC +27 PQ1.XY2-BC રવ1.ઝઢ2-ગજ PQ1.XY2-BC +27 PQ1X.Y2-BC રવ1ઝ.ઢ2-ગજ PQ1X.Y2-BC +27 P3.RX4Z-BC ર3.ઞઝ4ભ-ગજ P3.RX4Z-BC +27 P3R.X4Z-BC ર3ઞ.ઝ4ભ-ગજ P3R.X4Z-BC +27 P3RX.4Z-BC ર3ઞઝ.4ભ-ગજ P3RX.4Z-BC +27 5Q.R6Y7-BC 5વ.ઞ6ઢ7-ગજ 5Q.R6Y7-BC +27 5QR.6Y7-BC 5વઞ.6ઢ7-ગજ 5QR.6Y7-BC +27 5QR6.Y7-BC 5વઞ6.ઢ7-ગજ 5QR6.Y7-BC +27 PQ1.SX2Z-BC રવ1.મઝ2ભ-ગજ PQ1.SX2Z-BC +27 PQ1S.X2Z-BC રવ1મ.ઝ2ભ-ગજ PQ1S.X2Z-BC +27 P3R.S4YZ-BC ર3ઞ.મ4ઢભ-ગજ P3R.S4YZ-BC +27 P3RS.4YZ-BC ર3ઞમ.4ઢભ-ગજ P3RS.4YZ-BC +27 5QR.6XY7-BC 5વઞ.6ઝઢ7-ગજ 5QR.6XY7-BC +27 5QR6.XY7-BC 5વઞ6.ઝઢ7-ગજ 5QR6.XY7-BC +27 8Q9.SX0Z-BC 8વ9.મઝ0ભ-ગજ 8Q9.SX0Z-BC +27 8Q9S.X0Z-BC 8વ9મ.ઝ0ભ-ગજ 8Q9S.X0Z-BC +27 1QR2.TX3Z-BC 1વઞ2.ફઝ3ભ-ગજ 1QR2.TX3Z-BC +27 P4RS.5XY6-BC ર4ઞમ.5ઝઢ6-ગજ P4RS.5XY6-BC +27 P7R8.T9Y0-BC ર7ઞ8.ફ9ઢ0-ગજ P7R8.T9Y0-BC +27 PQ1ST.2XY3-BC રવ1મફ.2ઝઢ3-ગજ PQ1ST.2XY3-BC +27 P4RS5.VX6Z-BC ર4ઞમ5.ષઝ6ભ-ગજ P4RS5.VX6Z-BC +27 7QR8T.V9YZ-BC 7વઞ8ફ.ષ9ઢભ-ગજ 7QR8T.V9YZ-BC +27 P1R2T.3X4Z-BC ર1ઞ2ફ.3ઝ4ભ-ગજ P1R2T.3X4Z-BC +27 5Q6S7.V8Y9-BC 5વ6મ7.ષ8ઢ9-ગજ 5Q6S7.V8Y9-BC +27 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ળગજડઇદબકIચટતપઠOરવઞમફઉષનઝઢભ-ગજ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +27 ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC ળગજડઇદબકIચટતપઠOરવઞમફઉષનઝઢભ-ગજ ABCDEFGHIJKLMNOPQRSTUVWXYZ-BC +27 OI.XX-BC OI.ઝઝ-ગજ OI.XX-BC +27 OI.XX-BC OI.ઝઝ-ગજ OI.XX-BC +27 OI.XX-OOOOOOOO-BC OI.ઝઝ-OOOOOOOO-ગજ OI.XX-OOOOOOOO-BC +27 OI.XX-IIIIIIII-BC OI.ઝઝ-IIIIIIII-ગજ OI.XX-IIIIIIII-BC +27 PQ.RS-01234567-BC રવ.ઞમ-01234567-ગજ PQ.RS-01234567-BC +27 PQ.RS-890-BC રવ.ઞમ-890-ગજ PQ.RS-890-BC +27 89.EU-DFGHJKLM 89.ઇઉ-ડદબકચટતપ 89.EU-DFGHJKLM +27 00.0A-DFGHJKLM 00.0ળ-ડદબકચટતપ 00.0A-DFGHJKLM +27 BCDF.GHJK-DFGHJKLM ગજડદ.બકચટ-ડદબકચટતપ BCDF.GHJK-DFGHJKLM +27 LMNP.QRST-DFGHJKLM તપઠર.વઞમફ-ડદબકચટતપ LMNP.QRST-DFGHJKLM +27 VWXY.Z123-DFGHJKLM ષનઝઢ.ભ123-ડદબકચટતપ VWXY.Z123-DFGHJKLM +27 4567.890B-DFGHJKLM 4567.890ગ-ડદબકચટતપ 4567.890B-DFGHJKLM +27 PQ.XY-DFGHJKLM રવ.ઝઢ-ડદબકચટતપ PQ.XY-DFGHJKLM +27 PQ.XYZ-DFGHJKLM રવ.ઝઢભ-ડદબકચટતપ PQ.XYZ-DFGHJKLM +27 PQX.YZ-DFGHJKLM રવઝ.ઢભ-ડદબકચટતપ PQX.YZ-DFGHJKLM +27 PQ.RXYZ-DFGHJKLM રવ.ઞઝઢભ-ડદબકચટતપ PQ.RXYZ-DFGHJKLM +27 PQR.XYZ-DFGHJKLM રવઞ.ઝઢભ-ડદબકચટતપ PQR.XYZ-DFGHJKLM +27 PQRX.YZ-DFGHJKLM રવઞઝ.ઢભ-ડદબકચટતપ PQRX.YZ-DFGHJKLM +27 PQR.SXYZ-DFGHJKLM રવઞ.મઝઢભ-ડદબકચટતપ PQR.SXYZ-DFGHJKLM +27 PQRS.XYZ-DFGHJKLM રવઞમ.ઝઢભ-ડદબકચટતપ PQRS.XYZ-DFGHJKLM +27 PQRS.TXYZ-DFGHJKLM રવઞમ.ફઝઢભ-ડદબકચટતપ PQRS.TXYZ-DFGHJKLM +27 PQRST.VXYZ-DFGHJKLM રવઞમફ.ષઝઢભ-ડદબકચટતપ PQRST.VXYZ-DFGHJKLM +27 P1.XY-DFGHJKLM ર1.ઝઢ-ડદબકચટતપ P1.XY-DFGHJKLM +27 PQ.2Y-DFGHJKLM રવ.2ઢ-ડદબકચટતપ PQ.2Y-DFGHJKLM +27 3Q.X4-DFGHJKLM 3વ.ઝ4-ડદબકચટતપ 3Q.X4-DFGHJKLM +27 5Q.6Y-DFGHJKLM 5વ.6ઢ-ડદબકચટતપ 5Q.6Y-DFGHJKLM +27 PQ.1YZ-DFGHJKLM રવ.1ઢભ-ડદબકચટતપ PQ.1YZ-DFGHJKLM +27 PQ1.YZ-DFGHJKLM રવ1.ઢભ-ડદબકચટતપ PQ1.YZ-DFGHJKLM +27 P2.X3Z-DFGHJKLM ર2.ઝ3ભ-ડદબકચટતપ P2.X3Z-DFGHJKLM +27 P2X.3Z-DFGHJKLM ર2ઝ.3ભ-ડદબકચટતપ P2X.3Z-DFGHJKLM +27 PQ.1XY2-DFGHJKLM રવ.1ઝઢ2-ડદબકચટતપ PQ.1XY2-DFGHJKLM +27 PQ1.XY2-DFGHJKLM રવ1.ઝઢ2-ડદબકચટતપ PQ1.XY2-DFGHJKLM +27 PQ1X.Y2-DFGHJKLM રવ1ઝ.ઢ2-ડદબકચટતપ PQ1X.Y2-DFGHJKLM +27 P3.RX4Z-DFGHJKLM ર3.ઞઝ4ભ-ડદબકચટતપ P3.RX4Z-DFGHJKLM +27 P3R.X4Z-DFGHJKLM ર3ઞ.ઝ4ભ-ડદબકચટતપ P3R.X4Z-DFGHJKLM +27 P3RX.4Z-DFGHJKLM ર3ઞઝ.4ભ-ડદબકચટતપ P3RX.4Z-DFGHJKLM +27 5Q.R6Y7-DFGHJKLM 5વ.ઞ6ઢ7-ડદબકચટતપ 5Q.R6Y7-DFGHJKLM +27 5QR.6Y7-DFGHJKLM 5વઞ.6ઢ7-ડદબકચટતપ 5QR.6Y7-DFGHJKLM +27 5QR6.Y7-DFGHJKLM 5વઞ6.ઢ7-ડદબકચટતપ 5QR6.Y7-DFGHJKLM +27 PQ1.SX2Z-DFGHJKLM રવ1.મઝ2ભ-ડદબકચટતપ PQ1.SX2Z-DFGHJKLM +27 PQ1S.X2Z-DFGHJKLM રવ1મ.ઝ2ભ-ડદબકચટતપ PQ1S.X2Z-DFGHJKLM +27 P3R.S4YZ-DFGHJKLM ર3ઞ.મ4ઢભ-ડદબકચટતપ P3R.S4YZ-DFGHJKLM +27 P3RS.4YZ-DFGHJKLM ર3ઞમ.4ઢભ-ડદબકચટતપ P3RS.4YZ-DFGHJKLM +27 5QR.6XY7-DFGHJKLM 5વઞ.6ઝઢ7-ડદબકચટતપ 5QR.6XY7-DFGHJKLM +27 5QR6.XY7-DFGHJKLM 5વઞ6.ઝઢ7-ડદબકચટતપ 5QR6.XY7-DFGHJKLM +27 8Q9.SX0Z-DFGHJKLM 8વ9.મઝ0ભ-ડદબકચટતપ 8Q9.SX0Z-DFGHJKLM +27 8Q9S.X0Z-DFGHJKLM 8વ9મ.ઝ0ભ-ડદબકચટતપ 8Q9S.X0Z-DFGHJKLM +27 1QR2.TX3Z-DFGHJKLM 1વઞ2.ફઝ3ભ-ડદબકચટતપ 1QR2.TX3Z-DFGHJKLM +27 P4RS.5XY6-DFGHJKLM ર4ઞમ.5ઝઢ6-ડદબકચટતપ P4RS.5XY6-DFGHJKLM +27 P7R8.T9Y0-DFGHJKLM ર7ઞ8.ફ9ઢ0-ડદબકચટતપ P7R8.T9Y0-DFGHJKLM +27 PQ1ST.2XY3-DFGHJKLM રવ1મફ.2ઝઢ3-ડદબકચટતપ PQ1ST.2XY3-DFGHJKLM +27 P4RS5.VX6Z-DFGHJKLM ર4ઞમ5.ષઝ6ભ-ડદબકચટતપ P4RS5.VX6Z-DFGHJKLM +27 7QR8T.V9YZ-DFGHJKLM 7વઞ8ફ.ષ9ઢભ-ડદબકચટતપ 7QR8T.V9YZ-DFGHJKLM +27 P1R2T.3X4Z-DFGHJKLM ર1ઞ2ફ.3ઝ4ભ-ડદબકચટતપ P1R2T.3X4Z-DFGHJKLM +27 5Q6S7.V8Y9-DFGHJKLM 5વ6મ7.ષ8ઢ9-ડદબકચટતપ 5Q6S7.V8Y9-DFGHJKLM +27 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ળગજડઇદબકIચટતપઠOરવઞમફઉષનઝઢભ-ડદબકચટતપ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +27 ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM ળગજડઇદબકIચટતપઠOરવઞમફઉષનઝઢભ-ડદબકચટતપ ABCDEFGHIJKLMNOPQRSTUVWXYZ-DFGHJKLM +27 OI.XX-DFGHJKLM OI.ઝઝ-ડદબકચટતપ OI.XX-DFGHJKLM +27 OI.XX-DFGHJKLM OI.ઝઝ-ડદબકચટતપ OI.XX-DFGHJKLM +27 OI.XX-OOOOOOOO-DFGHJKLM OI.ઝઝ-OOOOOOOO-ડદબકચટતપ OI.XX-OOOOOOOO-DFGHJKLM +27 OI.XX-IIIIIIII-DFGHJKLM OI.ઝઝ-IIIIIIII-ડદબકચટતપ OI.XX-IIIIIIII-DFGHJKLM +27 PQ.RS-01234567-DFGHJKLM રવ.ઞમ-01234567-ડદબકચટતપ PQ.RS-01234567-DFGHJKLM +27 PQ.RS-890-DFGHJKLM રવ.ઞમ-890-ડદબકચટતપ PQ.RS-890-DFGHJKLM diff --git a/test/fulltest b/test/fulltest index ad3072c..ced23ef 100755 --- a/test/fulltest +++ b/test/fulltest @@ -39,6 +39,9 @@ export PRECISION=2 export SCENARIO_ONLY=0 export TEST=0 +# Elapsed time +T0=`date "+%s"` + # DEBUG mode logs each operation # PRECISION is 0, 1 or 2 # SCENARIO_ONLY play only the scenario @@ -48,8 +51,8 @@ function usage { echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ] [ -s | --scenario_only ] [ -t | --test ]" echo " or `basename $0` [ -h | --help ]" echo " Precision is from 0 to 8, default: $PRECISION" - echo " Debug logs each incdividual test" - echo " Scenario_only play only the scenario" + echo " Debug logs each individual test" + echo " Scenario_only plays only the scenario" echo " Test mode plays the scenario, tests the encoding_ok and 1% of the decoding_ok" } @@ -215,6 +218,71 @@ if [ "$SCENARIO_ONLY" = "1" ] ; then exit 0 fi +# Languages +echo Languages +if [ $TEST -eq 1 ] ; then + # Some lines in test mode, here are the Numbers of effective lines + export TESTS=(1 174 298 478 561 4788) + let I=0 +else + # All the tests + let I=1 +fi +PrevLang=x +while true ; do + if [ $TEST -eq 1 ] ; then + # Some speicif effective lines + if [ -z "${TESTS[$I]}" ] ; then + break + fi + let L=${TESTS[$I]} + else + # All the lines + let L=$I + fi + # En of file + Lang=`readarg $TDIR/Alphabets $L 1` + if [ -z "$Lang" ] ; then + break; + fi + Input=`readarg $TDIR/Alphabets $L 2` + Output=`readarg $TDIR/Alphabets $L 3` + Back=`readarg $TDIR/Alphabets $L 4` + if [ -n "$DEBUG" ] ; then + echo -l "$Input" "$Lang" + elif [ "$Lang" != "$PrevLang" ] ; then + echo -n $Lang " " + fi + PrevLang=$Lang + # From Input in Roman to Output in Lang + Got_Output=`t_mapcode -l $Input $Lang` + export code=$? + if [ $code -ne 0 ] ; then + error "mapcode has exited with code $code" + exit 1 + fi + res=`check "-t" "$Got_Output" "$Output" 0` + if [ "$res" != "0" ] ; then + error "$Input $Lang => $Got_Output instead of $Output" + fi + # From Output back into Input + Got_Back=`t_mapcode -l $Output` + export code=$? + if [ $code -ne 0 ] ; then + error "mapcode has exited with code $code" + exit 1 + fi + res=`check "-t" "$Got_Back" "$Back" 0` + if [ "$res" != "0" ] ; then + error "$Output => $Got_Back instead of $Back" + fi + let I=$I+1 +done +if [ -z "$DEBUG" ] ; then + echo +fi +echo OK + if [ $TEST -eq 0 ] ; then # Check Territory failures echo Failure on territory: @@ -417,5 +485,14 @@ while read -r ctx cod lat lon loc glo || [[ -n "$ctx" ]]; do let L=$L+1 done < $TDIR/DecodeOk echo -echo OK. +if [ $TEST -eq 0 ] ; then + T1=`date "+%s"` + echo $T0 $T1 | awk ' + {D=$2-$1 + printf "Done in %dmn%ds\n", D/60, D%60 + } + ' +else + echo OK. +fi From 1a0097bca8a0c77444be1271cdd1c6d1278ffc88 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Wed, 8 Jun 2022 18:40:11 +0200 Subject: [PATCH 30/42] Fix README --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8cd4ed4..e357259 100644 --- a/README.md +++ b/README.md @@ -308,8 +308,8 @@ With a `Context` set, decode a short mapcode. ## Converting a Mapcode into a language The reference language is Roman, used by the operations above. The child package -Mapcodes.Language provides two operations to support conversion of a Mapcode in -a Wide_String, to or from the languages: +Mapcodes.Language provides three operations to support conversion of a Mapcode +in a Wide_String, to or from the languages: Roman, Greek, Cyrillic, Hebrew, Devanagari, Malayalam, Georgian, Katakana, Thai, Lao, Armenian, Bengali, Gurmukhi, Tibetan, Arabic, Korean, Burmese, Khmer, Sinhalese, Thaana, Chinese, Tifinagh, Tamil, Amharic, Telugu, Odia, Kannada and @@ -372,10 +372,11 @@ Usage: -h // This help -t // Territory info -s // Same subdivisions - -S // Search territory + -S // Search territory -d // Decode -c [ ] // Encode -a [ ] // Alternative mapcodes + -l [ ] // Convert into a language ::= : | [ ] ::= [ ] [ ] [ ] ::= [ all | local | short] // Default short From b9ad37ab72ed4157f2a9bb44788ad6aea00a33e2 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 11 Jun 2022 13:56:38 +0200 Subject: [PATCH 31/42] Add more tests of language (Greek) --- test/Alphabets | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ test/fulltest | 11 ++++++---- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/test/Alphabets b/test/Alphabets index 1c084ce..c54f6f4 100644 --- a/test/Alphabets +++ b/test/Alphabets @@ -4803,3 +4803,57 @@ 27 OI.XX-IIIIIIII-DFGHJKLM OI.ઝઝ-IIIIIIII-ડદબકચટતપ OI.XX-IIIIIIII-DFGHJKLM 27 PQ.RS-01234567-DFGHJKLM રવ.ઞમ-01234567-ડદબકચટતપ PQ.RS-01234567-DFGHJKLM 27 PQ.RS-890-DFGHJKLM રવ.ઞમ-890-ડદબકચટતપ PQ.RS-890-DFGHJKLM +0 Α0.12 00.E0 00.E0 +0 РФ.ХХ PQ.XX PQ.XX +0 31.E2-B2C 31.E2-B2C 31.E2-B2C +0 רר.56ר XX.XX XX.XX +0 ヒフ.ラヲ PQ.XZ PQ.XZ +0 XX.XX XX.XX XX.XX +4 PQ.XX नप.सस PQ.XX +3 XX.XX רר.56ר XX.XX +1 00.E0 Α0.12 00.E0 +1 26.53UK Α61.328Υ 26.53UK +1 FR.B016 ΕΨ1.0716 FR.B016 +1 000.EU Α00.23 000.EU +1 PQ.YZ ΡΘ.57Ζ PQ.YZ +1 PQ.XYZ ΡΘ.56ΥΖ PQ.XYZ +1 PQR.YZ ΡΘ.89ΥΖ PQR.YZ +1 PQ.RXYZ ΡΘ3.Χ0ΥΖ PQ.RXYZ +1 PQR.XYZ ΡΘ6.Χ1ΥΖ PQR.XYZ +1 PQRX.YZ ΡΘ9.Χ2ΥΖ PQRX.YZ +1 PQR.SXYZ ΡΘ4.ΣΧ9ΥΖ PQR.SXYZ +1 PQRS.XYZ ΡΘ8.ΣΧ9ΥΖ PQRS.XYZ +1 PQRS.WXYZ ΡΘ7Σ.8ΩΧ2Υ PQRS.WXYZ +1 PQRST.WXYZ ΡΘ7ΣΤ.8ΩΧ2Υ PQRST.WXYZ +1 P4.YZ Ρ4.ΥΖ P4.YZ +1 PQ.4Z ΡΘ.4Ζ PQ.4Z +1 PQ.4YZ ΡΘ.26ΥΖ PQ.4YZ +1 PQ4.YZ ΡΘ4.ΥΖ PQ4.YZ +1 PQ.46YZ ΡΘ1.61ΥΖ PQ.46YZ +1 PQ4.6YZ ΡΘ4.6ΥΖ PQ4.6YZ +1 PQ46.YZ ΡΘ46.ΥΖ PQ46.YZ +1 PQ4.S6YZ ΡΘ2.Σ66ΥΖ PQ4.S6YZ +1 PQ4S.6YZ ΡΘ4Σ.6ΥΖ PQ4S.6YZ +1 PQ4S.W6YZ ΡΘ4Σ.Ω6ΥΖ PQ4S.W6YZ +1 PQ4PQ.6YZ9 ΡΘ4ΡΘ.6ΥΖ9 PQ4PQ.6YZ9 +1 PQ.YZ-BCD ΡΘ.57Ζ-ΒΞΔ PQ.YZ-BCD +1 PQ.XYZ-BCD ΡΘ.56ΥΖ-ΒΞΔ PQ.XYZ-BCD +1 PQR.YZ-BCD ΡΘ.89ΥΖ-ΒΞΔ PQR.YZ-BCD +1 PQ.RXYZ-BCD ΡΘ3.Χ0ΥΖ-ΒΞΔ PQ.RXYZ-BCD +1 PQR.XYZ-BCD ΡΘ6.Χ1ΥΖ-ΒΞΔ PQR.XYZ-BCD +1 PQRX.YZ-BCD ΡΘ9.Χ2ΥΖ-ΒΞΔ PQRX.YZ-BCD +1 PQR.SXYZ-BCD ΡΘ4.ΣΧ9ΥΖ-ΒΞΔ PQR.SXYZ-BCD +1 PQRS.XYZ-BCD ΡΘ8.ΣΧ9ΥΖ-ΒΞΔ PQRS.XYZ-BCD +1 PQRS.WXYZ-BCD ΡΘ7Σ.8ΩΧ2Υ-ΒΞΔ PQRS.WXYZ-BCD +1 PQRST.WXYZ-BCD ΡΘ7ΣΤ.8ΩΧ2Υ-ΒΞΔ PQRST.WXYZ-BCD +1 P4.YZ-BCD Ρ4.ΥΖ-ΒΞΔ P4.YZ-BCD +1 PQ.4Z-BCD ΡΘ.4Ζ-ΒΞΔ PQ.4Z-BCD +1 PQ.4YZ-BCD ΡΘ.26ΥΖ-ΒΞΔ PQ.4YZ-BCD +1 PQ4.YZ-BCD ΡΘ4.ΥΖ-ΒΞΔ PQ4.YZ-BCD +1 PQ.46YZ-BCD ΡΘ1.61ΥΖ-ΒΞΔ PQ.46YZ-BCD +1 PQ4.6YZ-BCD ΡΘ4.6ΥΖ-ΒΞΔ PQ4.6YZ-BCD +1 PQ46.YZ-BCD ΡΘ46.ΥΖ-ΒΞΔ PQ46.YZ-BCD +1 PQ4.S6YZ-BCD ΡΘ2.Σ66ΥΖ-ΒΞΔ PQ4.S6YZ-BCD +1 PQ4S.6YZ-BCD ΡΘ4Σ.6ΥΖ-ΒΞΔ PQ4S.6YZ-BCD +1 PQ4S.W6YZ-BCD ΡΘ4Σ.Ω6ΥΖ-ΒΞΔ PQ4S.W6YZ-BCD +1 PQ4PQ.6YZ9-BCD ΡΘ4ΡΘ.6ΥΖ9-ΒΞΔ PQ4PQ.6YZ9-BCD diff --git a/test/fulltest b/test/fulltest index ced23ef..b3f80e1 100755 --- a/test/fulltest +++ b/test/fulltest @@ -222,6 +222,7 @@ fi echo Languages if [ $TEST -eq 1 ] ; then # Some lines in test mode, here are the Numbers of effective lines + # plus all the lines after the last export TESTS=(1 174 298 478 561 4788) let I=0 else @@ -231,11 +232,13 @@ fi PrevLang=x while true ; do if [ $TEST -eq 1 ] ; then - # Some speicif effective lines - if [ -z "${TESTS[$I]}" ] ; then - break + # Some specific effective lines + if [ -n "${TESTS[$I]}" ] ; then + let L=${TESTS[$I]} + else + # Last item of the list has been reached + let L=${L}+1 fi - let L=${TESTS[$I]} else # All the lines let L=$I From 6472841b55c7aeb6cb806a259942ac90651b4454 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Sat, 11 Jun 2022 15:11:30 +0200 Subject: [PATCH 32/42] Update README.md --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e357259..b11ca17 100644 --- a/README.md +++ b/README.md @@ -325,7 +325,7 @@ return value | the language exceptions | `Unknown_Language`, if the `Name` does not denote a supported language -`Get_Language` detects the language, checks that all the characters are compatibl +`Get_Language` detects the language, checks that all the characters are compatible and returns the language of the Input. attribute | description @@ -336,12 +336,12 @@ exceptions | `Invalid_Text`, if the `Input` is not correct Example: - Get_Language ("VHXGB.1J9J-RD") - -> Roman + Get_Language ("VHXGB.1J9J-RD") + -> Roman `Convert` detects the language of the Input and converts it into the requested -anguage. +language. attribute | description --- | --- @@ -352,8 +352,8 @@ exceptions | `Invalid_Text`, if the `Input` is not correct Example: - Convert ("89.EU", Greek) - -> "Α9.Ω3" + Convert ("89.EU", Greek) + -> "Α9.Ω3" # Using the testing program @@ -490,10 +490,12 @@ Put alternative mapcodes for a mapcode (shortests). => AAA VHXGB.1J9J 'VHXGB.1J9J' 532 Convert a mapcode into Greek + t_mapcode -l VHXGB.1J9J 1 -> ΦΗ9ΓΒ.21Π39 Convert a mapcode into Roman + t_mapcode -l ΦΗ9ΓΒ.21Π39 Roman -> VHXGB.1J9J From f7e8479f687b5130c8e46711e124ae5e67df5904 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Wed, 15 Jun 2022 11:53:42 +0200 Subject: [PATCH 33/42] Improve and fix language name in its own language Add tests of languages --- README.md | 4 +- src/language_defs.ads | 54 +++++++++--------- src/mapcodes-languages.adb | 23 +++++++- src/mapcodes-languages.ads | 2 +- src/t_mapcode.adb | 25 +++++++-- test/Alphabets | 112 +++++++++++++++++++++++++++++++++++++ test/Scenario | 10 ++++ 7 files changed, 193 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index b11ca17..6450f5f 100644 --- a/README.md +++ b/README.md @@ -315,8 +315,8 @@ Lao, Armenian, Bengali, Gurmukhi, Tibetan, Arabic, Korean, Burmese, Khmer, Sinhalese, Thaana, Chinese, Tifinagh, Tamil, Amharic, Telugu, Odia, Kannada and Gujarati. -`Get_Language` identifies a language name expressed in its own language as a -unicode sequence. +`Get_Language` identifies a language name expressed (as a unicode sequence) +either in Roman or in its own language. attribute | description --- | --- diff --git a/src/language_defs.ads b/src/language_defs.ads index cb89b74..3ddbda8 100644 --- a/src/language_defs.ads +++ b/src/language_defs.ads @@ -32,59 +32,59 @@ package Language_Defs is -- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 Roman => Build_Desc (To_Unicode ("Roman"), (16#0041#, 16#0042#, 16#0043#, 16#0044#, 16#0045#, 16#0046#, 16#0047#, 16#0048#, 16#0049#, 16#004A#, 16#004B#, 16#004C#, 16#004D#, 16#004E#, 16#004F#, 16#0050#, 16#0051#, 16#0052#, 16#0053#, 16#0054#, 16#0055#, 16#0056#, 16#0057#, 16#0058#, 16#0059#, 16#005A#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Greek => Build_Desc ( (16#0949#, 16#0955#, 16#0955#, 16#0951#, 16#0957#, 16#0953#, 16#0954#, 16#0940#), + Greek => Build_Desc ( (16#03B5#, 16#03BB#, 16#03BB#, 16#03B7#, 16#03BD#, 16#03B9#, 16#03BA#, 16#03AC#), (16#0391#, 16#0392#, 16#039E#, 16#0394#, 16#0388#, 16#0395#, 16#0393#, 16#0397#, 16#0399#, 16#03A0#, 16#039A#, 16#039B#, 16#039C#, 16#039D#, 16#039F#, 16#03A1#, 16#0398#, 16#03A8#, 16#03A3#, 16#03A4#, 16#0389#, 16#03A6#, 16#03A9#, 16#03A7#, 16#03A5#, 16#0396#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Cyrillic => Build_Desc ( (16#1082#, 16#1080#, 16#1088#, 16#1080#, 16#1083#, 16#1083#, 16#1080#, 16#1094#, 16#1072#), + Cyrillic => Build_Desc ( (16#043A#, 16#0438#, 16#0440#, 16#0438#, 16#043B#, 16#043B#, 16#0438#, 16#0446#, 16#0430#), (16#0410#, 16#0412#, 16#0421#, 16#0414#, 16#0415#, 16#0416#, 16#0413#, 16#041D#, 16#0049#, 16#041F#, 16#041A#, 16#041B#, 16#041C#, 16#0417#, 16#041E#, 16#0420#, 16#0424#, 16#042F#, 16#0426#, 16#0422#, 16#042D#, 16#0427#, 16#0428#, 16#0425#, 16#0423#, 16#0411#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Hebrew => Build_Desc ( (16#1506#, 16#1460#, 16#1489#, 16#1456#, 16#1512#, 16#1460#, 16#1497#, 16#1514#), + Hebrew => Build_Desc ( (16#05E2#, 16#05B4#, 16#05D1#, 16#05B0#, 16#05E8#, 16#05B4#, 16#05D9#, 16#05EA#), (16#05D0#, 16#05D1#, 16#05D2#, 16#05D3#, 16#05E3#, 16#05D4#, 16#05D6#, 16#05D7#, 16#05D5#, 16#05D8#, 16#05D9#, 16#05DA#, 16#05DB#, 16#05DC#, 16#05E1#, 16#05DD#, 16#05DE#, 16#05E0#, 16#05E2#, 16#05E4#, 16#05E5#, 16#05E6#, 16#05E7#, 16#05E8#, 16#05E9#, 16#05EA#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Devanagari => Build_Desc ( (16#2342#, 16#2375#, 16#2357#, 16#2344#, 16#2366#, 16#2327#, 16#2352#, 16#2368#), + Devanagari => Build_Desc ( (16#0926#, 16#0947#, 16#0935#, 16#0928#, 16#093E#, 16#0917#, 16#0930#, 16#0940#), (16#0905#, 16#0915#, 16#0917#, 16#0918#, 16#090F#, 16#091A#, 16#091C#, 16#091F#, 16#0049#, 16#0920#, 16#0923#, 16#0924#, 16#0926#, 16#0927#, 16#004F#, 16#0928#, 16#092A#, 16#092D#, 16#092E#, 16#0930#, 16#092B#, 16#0932#, 16#0935#, 16#0938#, 16#0939#, 16#092C#, 16#0966#, 16#0967#, 16#0968#, 16#0969#, 16#096A#, 16#096B#, 16#096C#, 16#096D#, 16#096E#, 16#096F#) ), - Malayalam => Build_Desc ( (16#3374#, 16#3378#, 16#3375#, 16#3390#, 16#3379#, 16#3330#), + Malayalam => Build_Desc ( (16#0D2E#, 16#0D32#, 16#0D2F#, 16#0D3E#, 16#0D33#, 16#0D02#), (16#0D12#, 16#0D15#, 16#0D16#, 16#0D17#, 16#0D0B#, 16#0D1A#, 16#0D1C#, 16#0D1F#, 16#0049#, 16#0D21#, 16#0D24#, 16#0D25#, 16#0D26#, 16#0D27#, 16#0D20#, 16#0D28#, 16#0D2E#, 16#0D30#, 16#0D31#, 16#0D32#, 16#0D09#, 16#0D34#, 16#0D35#, 16#0D36#, 16#0D38#, 16#0D39#, 16#0D66#, 16#0D67#, 16#0D68#, 16#0D69#, 16#0D6A#, 16#0D6B#, 16#0D6C#, 16#0D6D#, 16#0D6E#, 16#0D6F#) ), - Georgian => Build_Desc ( (16#4325#, 16#4304#, 16#4320#, 16#4311#, 16#4323#, 16#4314#, 16#4312#), + Georgian => Build_Desc ( (16#10E5#, 16#10D0#, 16#10E0#, 16#10D7#, 16#10E3#, 16#10DA#, 16#10D8#), (16#10A0#, 16#10A1#, 16#10A3#, 16#10A6#, 16#10A4#, 16#10A9#, 16#10AB#, 16#10AC#, 16#0049#, 16#10AE#, 16#10B0#, 16#10B1#, 16#10B2#, 16#10B4#, 16#10AD#, 16#10B5#, 16#10B6#, 16#10B7#, 16#10B8#, 16#10B9#, 16#10A8#, 16#10BA#, 16#10BB#, 16#10BD#, 16#10BE#, 16#10BF#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Katakana => Build_Desc ( (16#12459#, 16#12479#, 16#12459#, 16#12490#), + Katakana => Build_Desc ( (16#30AB#, 16#30BF#, 16#30AB#, 16#30CA#), (16#30A2#, 16#30AB#, 16#30AD#, 16#30AF#, 16#30AA#, 16#30B1#, 16#30B3#, 16#30B5#, 16#0049#, 16#30B9#, 16#30C1#, 16#30C8#, 16#30CA#, 16#30CC#, 16#004F#, 16#30D2#, 16#30D5#, 16#30D8#, 16#30DB#, 16#30E1#, 16#30A8#, 16#30E2#, 16#30E8#, 16#30E9#, 16#30ED#, 16#30F2#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Thai => Build_Desc ( (16#3616#, 16#3634#, 16#3625#, 16#3634#, 16#3652#, 16#3607#, 16#3618#), + Thai => Build_Desc ( (16#0E20#, 16#0E32#, 16#0E29#, 16#0E32#, 16#0E44#, 16#0E17#, 16#0E22#), (16#0E30#, 16#0E01#, 16#0E02#, 16#0E04#, 16#0E32#, 16#0E07#, 16#0E08#, 16#0E09#, 16#0049#, 16#0E0A#, 16#0E11#, 16#0E14#, 16#0E16#, 16#0E17#, 16#004F#, 16#0E18#, 16#0E1A#, 16#0E1C#, 16#0E21#, 16#0E23#, 16#0E2C#, 16#0E25#, 16#0E27#, 16#0E2D#, 16#0E2E#, 16#0E2F#, 16#0E50#, 16#0E51#, 16#0E52#, 16#0E53#, 16#0E54#, 16#0E55#, 16#0E56#, 16#0E57#, 16#0E58#, 16#0E59#) ), - Lao => Build_Desc ( (16#3742#, 16#3762#, 16#3754#, 16#3762#, 16#3749#, 16#3762#, 16#3751#), + Lao => Build_Desc ( (16#0E9E#, 16#0EB2#, 16#0EAA#, 16#0EB2#, 16#0EA5#, 16#0EB2#, 16#0EA7#), (16#0EB0#, 16#0E81#, 16#0E82#, 16#0E84#, 16#0EC3#, 16#0E87#, 16#0E88#, 16#0E8A#, 16#0EC4#, 16#0E8D#, 16#0E94#, 16#0E97#, 16#0E99#, 16#0E9A#, 16#004F#, 16#0E9C#, 16#0E9E#, 16#0EA1#, 16#0EA2#, 16#0EA3#, 16#0EBD#, 16#0EA7#, 16#0EAA#, 16#0EAB#, 16#0EAD#, 16#0EAF#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Armenian => Build_Desc ( (16#1392#, 16#1377#, 16#1397#, 16#1381#, 16#1408#, 16#1381#, 16#1398#), + Armenian => Build_Desc ( (16#0570#, 16#0561#, 16#0575#, 16#0565#, 16#0580#, 16#0565#, 16#0576#), (16#0556#, 16#0532#, 16#0533#, 16#0534#, 16#0535#, 16#0538#, 16#0539#, 16#053A#, 16#053B#, 16#053D#, 16#053F#, 16#0540#, 16#0541#, 16#0543#, 16#0555#, 16#0547#, 16#0548#, 16#054A#, 16#054D#, 16#054E#, 16#0545#, 16#054F#, 16#0550#, 16#0551#, 16#0552#, 16#0553#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Bengali => Build_Desc ( (16#2476#, 16#2494#, 16#2434#, 16#2482#, 16#2494#), + Bengali => Build_Desc ( (16#09AC#, 16#09BE#, 16#0982#, 16#09B2#, 16#09BE#), (16#099C#, 16#0998#, 16#0995#, 16#0996#, 16#09AE#, 16#0997#, 16#0999#, 16#099A#, 16#0049#, 16#099D#, 16#09A0#, 16#09A1#, 16#09A2#, 16#09A3#, 16#004F#, 16#09A4#, 16#09A5#, 16#09A6#, 16#09A8#, 16#09AA#, 16#099F#, 16#09AC#, 16#09AD#, 16#09AF#, 16#09B2#, 16#09B9#, 16#09E6#, 16#09E7#, 16#09E8#, 16#09E9#, 16#09EA#, 16#09EB#, 16#09EC#, 16#09ED#, 16#09EE#, 16#09EF#) ), - Gurmukhi => Build_Desc ( (16#2583#, 16#2625#, 16#2608#, 16#2606#, 16#2625#, 16#2582#, 16#2624#), + Gurmukhi => Build_Desc ( (16#0A17#, 16#0A41#, 16#0A30#, 16#0A2E#, 16#0A41#, 16#0A16#, 16#0A40#), (16#0A05#, 16#0A15#, 16#0A17#, 16#0A18#, 16#0A0F#, 16#0A1A#, 16#0A1C#, 16#0A1F#, 16#0049#, 16#0A20#, 16#0A23#, 16#0A24#, 16#0A26#, 16#0A27#, 16#004F#, 16#0A28#, 16#0A2A#, 16#0A2D#, 16#0A2E#, 16#0A30#, 16#0A2B#, 16#0A32#, 16#0A35#, 16#0A38#, 16#0A39#, 16#0A21#, 16#0A66#, 16#0A67#, 16#0A68#, 16#0A69#, 16#0A6A#, 16#0A6B#, 16#0A6C#, 16#0A6D#, 16#0A6E#, 16#0A6F#) ), - Tibetan => Build_Desc ( (16#3921#, 16#3926#, 16#3956#, 16#3851#, 16#3909#, 16#3923#, 16#3851#), + Tibetan => Build_Desc ( (16#0F51#, 16#0F56#, 16#0F74#, 16#0F0B#, 16#0F45#, 16#0F53#, 16#0F0B#), (16#0F58#, 16#0F40#, 16#0F41#, 16#0F42#, 16#0F64#, 16#0F44#, 16#0F45#, 16#0F46#, 16#0049#, 16#0F47#, 16#0F49#, 16#0F55#, 16#0F50#, 16#0F4F#, 16#004F#, 16#0F51#, 16#0F53#, 16#0F54#, 16#0F56#, 16#0F5E#, 16#0F60#, 16#0F5F#, 16#0F61#, 16#0F62#, 16#0F63#, 16#0F66#, 16#0F20#, 16#0F21#, 16#0F22#, 16#0F23#, 16#0F24#, 16#0F25#, 16#0F26#, 16#0F27#, 16#0F28#, 16#0F29#) ), - Arabic => Build_Desc ( (16#1575#, 16#1604#, 16#1593#, 16#1614#, 16#1585#, 16#1614#, 16#1576#, 16#1616#, 16#1610#, 16#1614#, 16#1617#, 16#1577#), + Arabic => Build_Desc ( (16#0627#, 16#0644#, 16#0639#, 16#064E#, 16#0631#, 16#064E#, 16#0628#, 16#0650#, 16#064A#, 16#064E#, 16#0651#, 16#0629#), (16#0628#, 16#062A#, 16#062D#, 16#062E#, 16#062B#, 16#062F#, 16#0630#, 16#0631#, 16#0627#, 16#0632#, 16#0633#, 16#0634#, 16#0635#, 16#0636#, 16#0647#, 16#0637#, 16#0638#, 16#0639#, 16#063A#, 16#0641#, 16#0642#, 16#062C#, 16#0644#, 16#0645#, 16#0646#, 16#0648#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Korean => Build_Desc ( (16#51312#, 16#49440#, 16#44544#, 16#54620#, 16#44544#), + Korean => Build_Desc ( (16#C870#, 16#C120#, 16#AE00#, 16#D55C#, 16#AE00#), (16#1112#, 16#1100#, 16#1102#, 16#1103#, 16#1166#, 16#1105#, 16#1107#, 16#1109#, 16#1175#, 16#1110#, 16#1111#, 16#1161#, 16#1162#, 16#1163#, 16#110B#, 16#1164#, 16#1165#, 16#1167#, 16#1169#, 16#1172#, 16#1174#, 16#110C#, 16#110E#, 16#110F#, 16#116D#, 16#116E#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Burmese => Build_Desc ( (16#4121#, 16#4156#, 16#4116#, 16#4154#, 16#4121#, 16#4140#, 16#4129#, 16#4096#, 16#4153#, 16#4097#, 16#4123#, 16#4140#), + Burmese => Build_Desc ( (16#1019#, 16#103C#, 16#1014#, 16#103A#, 16#1019#, 16#102C#, 16#1021#, 16#1000#, 16#1039#, 16#1001#, 16#101B#, 16#102C#), (16#1005#, 16#1000#, 16#1001#, 16#1002#, 16#1013#, 16#1003#, 16#1004#, 16#101A#, 16#0049#, 16#1007#, 16#100C#, 16#100D#, 16#100E#, 16#1010#, 16#101D#, 16#1011#, 16#1012#, 16#101E#, 16#1014#, 16#1015#, 16#1016#, 16#101F#, 16#1017#, 16#1018#, 16#100F#, 16#101C#, 16#1040#, 16#1041#, 16#1042#, 16#1043#, 16#1044#, 16#1045#, 16#1046#, 16#1047#, 16#1048#, 16#1049#) ), - Khmer => Build_Desc ( (16#6050#, 16#6016#, 16#6098#, 16#6047#, 16#6042#, 16#6017#, 16#6098#, 16#6040#, 16#6082#, 16#6042#), + Khmer => Build_Desc ( (16#17A2#, 16#1780#, 16#17D2#, 16#179F#, 16#179A#, 16#1781#, 16#17D2#, 16#1798#, 16#17C2#, 16#179A#), (16#1789#, 16#1780#, 16#1781#, 16#1782#, 16#1785#, 16#1783#, 16#1784#, 16#1787#, 16#179A#, 16#1788#, 16#178A#, 16#178C#, 16#178D#, 16#178E#, 16#004F#, 16#1791#, 16#1792#, 16#1793#, 16#1794#, 16#1795#, 16#179F#, 16#1796#, 16#1798#, 16#179B#, 16#17A0#, 16#17A2#, 16#17E0#, 16#17E1#, 16#17E2#, 16#17E3#, 16#17E4#, 16#17E5#, 16#17E6#, 16#17E7#, 16#17E8#, 16#17E9#) ), - Sinhalese => Build_Desc ( (16#3523#, 16#3538#, 16#3458#, 16#3524#, 16#3517#, 16#3461#, 16#3482#, 16#3530#, 16#3522#, 16#3515#, 16#3512#, 16#3535#, 16#3517#, 16#3535#, 16#3520#), + Sinhalese => Build_Desc ( (16#0DC3#, 16#0DD2#, 16#0D82#, 16#0DC4#, 16#0DBD#, 16#0D85#, 16#0D9A#, 16#0DCA#, 16#0DC2#, 16#0DBB#, 16#0DB8#, 16#0DCF#, 16#0DBD#, 16#0DCF#, 16#0DC0#), (16#0D85#, 16#0D9A#, 16#0D9C#, 16#0D9F#, 16#0D89#, 16#0DA2#, 16#0DA7#, 16#0DA9#, 16#0049#, 16#0DAC#, 16#0DAD#, 16#0DAF#, 16#0DB1#, 16#0DB3#, 16#004F#, 16#0DB4#, 16#0DB6#, 16#0DB8#, 16#0DB9#, 16#0DBA#, 16#0D8B#, 16#0DBB#, 16#0DBD#, 16#0DC0#, 16#0DC3#, 16#0DC4#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Thaana => Build_Desc ( (16#1932#, 16#1959#, 16#1922#, 16#1958#), + Thaana => Build_Desc ( (16#078C#, 16#07A7#, 16#0782#, 16#07A6#), (16#0794#, 16#0780#, 16#0781#, 16#0782#, 16#0797#, 16#0783#, 16#0784#, 16#0785#, 16#0049#, 16#0786#, 16#0787#, 16#0788#, 16#0789#, 16#078A#, 16#004F#, 16#078B#, 16#078C#, 16#078D#, 16#078E#, 16#078F#, 16#079C#, 16#0790#, 16#0791#, 16#0792#, 16#0793#, 16#07B1#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Chinese => Build_Desc ( (16#12549#, 16#12550#, 16#12551#, 16#12552#), + Chinese => Build_Desc ( (16#3105#, 16#3106#, 16#3107#, 16#3108#), (16#3123#, 16#3105#, 16#3108#, 16#3106#, 16#3114#, 16#3107#, 16#3109#, 16#310A#, 16#0049#, 16#310B#, 16#310C#, 16#310D#, 16#310E#, 16#310F#, 16#004F#, 16#3115#, 16#3116#, 16#3110#, 16#3111#, 16#3112#, 16#3113#, 16#3129#, 16#3117#, 16#3128#, 16#3118#, 16#3119#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Tifinagh => Build_Desc ( (16#11612#, 16#11593#, 16#11580#, 16#11593#, 16#11599#, 16#11568#, 16#11606#), + Tifinagh => Build_Desc ( (16#2D5C#, 16#2D49#, 16#2D3C#, 16#2D49#, 16#2D4F#, 16#2D30#, 16#2D56#), (16#2D49#, 16#2D31#, 16#2D33#, 16#2D37#, 16#2D53#, 16#2D3C#, 16#2D3D#, 16#2D40#, 16#2D4F#, 16#2D43#, 16#2D44#, 16#2D45#, 16#2D47#, 16#2D4D#, 16#2D54#, 16#2D4E#, 16#2D55#, 16#2D56#, 16#2D59#, 16#2D5A#, 16#2D62#, 16#2D5B#, 16#2D5C#, 16#2D5F#, 16#2D61#, 16#2D63#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Tamil => Build_Desc ( (16#2980#, 16#2990#, 16#3007#, 16#2996#, 16#3021#), + Tamil => Build_Desc ( (16#0BA4#, 16#0BAE#, 16#0BBF#, 16#0BB4#, 16#0BCD#), (16#0B99#, 16#0B95#, 16#0B9A#, 16#0B9F#, 16#0B86#, 16#0BA4#, 16#0BA8#, 16#0BAA#, 16#0049#, 16#0BAE#, 16#0BAF#, 16#0BB0#, 16#0BB2#, 16#0BB5#, 16#004F#, 16#0BB4#, 16#0BB3#, 16#0BB1#, 16#0B85#, 16#0B88#, 16#0B93#, 16#0B89#, 16#0B8E#, 16#0B8F#, 16#0B90#, 16#0B92#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Amharic => Build_Desc ( (16#4771#, 16#4635#, 16#4653#, 16#4763#), + Amharic => Build_Desc ( (16#12A3#, 16#121B#, 16#122D#, 16#129B#), (16#121B#, 16#1260#, 16#1264#, 16#12F0#, 16#121E#, 16#134A#, 16#1308#, 16#1200#, 16#0049#, 16#12E8#, 16#12AC#, 16#1208#, 16#1293#, 16#1350#, 16#12D0#, 16#1354#, 16#1240#, 16#1244#, 16#122C#, 16#1220#, 16#12C8#, 16#1226#, 16#1270#, 16#1276#, 16#1338#, 16#12DC#, 16#1372#, 16#1369#, 16#136A#, 16#136B#, 16#136C#, 16#136D#, 16#136E#, 16#136F#, 16#1370#, 16#1371#) ), - Telugu => Build_Desc ( (16#3108#, 16#3142#, 16#3122#, 16#3137#, 16#3095#, 16#3137#), + Telugu => Build_Desc ( (16#0C24#, 16#0C46#, 16#0C32#, 16#0C41#, 16#0C17#, 16#0C41#), (16#0C1E#, 16#0C15#, 16#0C17#, 16#0C19#, 16#0C2B#, 16#0C1A#, 16#0C1C#, 16#0C1F#, 16#0049#, 16#0C20#, 16#0C21#, 16#0C23#, 16#0C24#, 16#0C25#, 16#004F#, 16#0C26#, 16#0C27#, 16#0C28#, 16#0C2A#, 16#0C2C#, 16#0C2D#, 16#0C2E#, 16#0C30#, 16#0C32#, 16#0C33#, 16#0C35#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Odia => Build_Desc ( (16#2835#, 16#2849#, 16#2876#, 16#2879#, 16#2822#), + Odia => Build_Desc ( (16#0B13#, 16#0B21#, 16#0B3C#, 16#0B3F#, 16#0B06#), (16#0B1D#, 16#0B15#, 16#0B16#, 16#0B17#, 16#0B23#, 16#0B18#, 16#0B1A#, 16#0B1C#, 16#0049#, 16#0B1F#, 16#0B21#, 16#0B22#, 16#0B24#, 16#0B25#, 16#0B20#, 16#0B26#, 16#0B27#, 16#0B28#, 16#0B2A#, 16#0B2C#, 16#0B39#, 16#0B2E#, 16#0B2F#, 16#0B30#, 16#0B33#, 16#0B38#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Kannada => Build_Desc ( (16#3221#, 16#3240#, 16#3277#, 16#3240#, 16#3233#), + Kannada => Build_Desc ( (16#0C95#, 16#0CA8#, 16#0CCD#, 16#0CA8#, 16#0CA1#), (16#0C92#, 16#0C95#, 16#0C96#, 16#0C97#, 16#0C8E#, 16#0C99#, 16#0C9A#, 16#0C9B#, 16#0049#, 16#0C9C#, 16#0CA0#, 16#0CA1#, 16#0CA3#, 16#0CA4#, 16#004F#, 16#0CA6#, 16#0CA7#, 16#0CA8#, 16#0CAA#, 16#0CAB#, 16#0C87#, 16#0CAC#, 16#0CAD#, 16#0CB0#, 16#0CB2#, 16#0CB5#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ), - Gujarati => Build_Desc ( (16#2711#, 16#2753#, 16#2716#, 16#2736#, 16#2750#, 16#2724#, 16#2752#), + Gujarati => Build_Desc ( (16#0A97#, 16#0AC1#, 16#0A9C#, 16#0AB0#, 16#0ABE#, 16#0AA4#, 16#0AC0#), (16#0AB3#, 16#0A97#, 16#0A9C#, 16#0AA1#, 16#0A87#, 16#0AA6#, 16#0AAC#, 16#0A95#, 16#0049#, 16#0A9A#, 16#0A9F#, 16#0AA4#, 16#0AAA#, 16#0AA0#, 16#004F#, 16#0AB0#, 16#0AB5#, 16#0A9E#, 16#0AAE#, 16#0AAB#, 16#0A89#, 16#0AB7#, 16#0AA8#, 16#0A9D#, 16#0AA2#, 16#0AAD#, 16#0030#, 16#0031#, 16#0032#, 16#0033#, 16#0034#, 16#0035#, 16#0036#, 16#0037#, 16#0038#, 16#0039#) ) ); end Language_Defs; diff --git a/src/mapcodes-languages.adb b/src/mapcodes-languages.adb index e18d210..87567f2 100644 --- a/src/mapcodes-languages.adb +++ b/src/mapcodes-languages.adb @@ -23,14 +23,35 @@ package body Mapcodes.Languages is -- Unknown_Language : exception; function Get_Language (Name : Unicode_Sequence) return Language_List is use type Language_Utils.Unicode_Sequence; + Roman : Boolean := True; + Str : String (Name'Range); begin + -- Try a name in Roman + for I in Name'Range loop + if Name(I) < Character'Pos ('0') + or else Name(I) > Character'Pos ('z') then + Roman := False; + exit; + else + Str(I) := Character'Val(Name(I)); + end if; + end loop; + if Roman then + begin + return Language_List'Value (Str); + exception + when Constraint_Error => + raise Unknown_Language; + end; + end if; + -- Try each language in its alphabet for L in Language_Defs.Langs'Range loop if Language_Defs.Langs(L).Name.Txt = Name then -- Name is the name of language L return Language_List (L); end if; end loop; - return Default_Language; + raise Unknown_Language; end Get_Language; -- Get the language of a text (territory name or mapcode) diff --git a/src/mapcodes-languages.ads b/src/mapcodes-languages.ads index 4339559..e226f33 100644 --- a/src/mapcodes-languages.ads +++ b/src/mapcodes-languages.ads @@ -28,7 +28,7 @@ package Mapcodes.Languages is -- The unicode sequence to provide a language name in its language subtype Unicode_Sequence is Language_Utils.Unicode_Sequence; - -- Get the Language from its name in its language + -- Get the Language from its name, either in Roman or in its own language -- Raises, if the output language is not known: Unknown_Language : exception; function Get_Language (Name : Unicode_Sequence) return Language_List; diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index ec19787..30df1e9 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -15,8 +15,10 @@ -- ----------------------------------------------------------------------------- -- Mapcode test main program -with Ada.Command_Line, Ada.Text_Io, Ada.Strings.Utf_Encoding.Wide_Strings; -with Mapcode_Utils.As_U, Mapcode_Utils.Str_Tools; +with Ada.Command_Line, Ada.Text_Io, + Ada.Strings.Utf_Encoding.Wide_Strings, + Ada.Strings.Utf_Encoding.Wide_Wide_Strings; +with Mapcode_Utils.As_U, Mapcode_Utils.Str_Tools, Language_Utils; use Mapcode_Utils; with Countries, Mapcodes.Languages; procedure T_Mapcode is @@ -120,7 +122,7 @@ procedure T_Mapcode is end Get; I : Positive; - Command, Arg1, Arg2, Tmp : As_U.Asu_Us; + Command, Arg1, Arg2 : As_U.Asu_Us; Coord : Mapcodes.Coordinate; Territory : As_U.Asu_Us; @@ -134,6 +136,7 @@ procedure T_Mapcode is -- Locate "-" in Map to set Precision procedure Parse_Mapcode is Index : Natural; + Tmp : As_U.Asu_Us; begin I := I + 1; Arg1 := As_U.Tus (Ada.Command_Line.Argument (I)); @@ -349,9 +352,19 @@ begin Natural'Value (Arg2.Image)); elsif not Arg2.Is_Null then -- Argument is language name - Language := Mapcodes.Languages.Language_List'Value ( - Mapcode_Utils.Str_Tools.Upper_Str (Arg2.Image)); - end if; + declare + -- Convert to unicodes to get the language + Wws : constant Wide_Wide_String + := Ada.Strings.Utf_Encoding.Wide_Wide_Strings.Decode ( + Mapcode_Utils.Str_Tools.Upper_Str (Arg2.Image)); + Unicodes : Language_Utils.Unicode_Sequence (Wws'Range); + begin + for I in Wws'Range loop + Unicodes(I) := Wide_Wide_Character'Pos(Wws(I)); + end loop; + Language := Mapcodes.Languages.Get_Language (Unicodes); + end; + end if; Ada.Text_Io.Put_Line ( Ada.Strings.Utf_Encoding.Wide_Strings.Encode ( Mapcodes.Languages.Convert ( diff --git a/test/Alphabets b/test/Alphabets index c54f6f4..05a27fe 100644 --- a/test/Alphabets +++ b/test/Alphabets @@ -4857,3 +4857,115 @@ 1 PQ4S.6YZ-BCD ΡΘ4Σ.6ΥΖ-ΒΞΔ PQ4S.6YZ-BCD 1 PQ4S.W6YZ-BCD ΡΘ4Σ.Ω6ΥΖ-ΒΞΔ PQ4S.W6YZ-BCD 1 PQ4PQ.6YZ9-BCD ΡΘ4ΡΘ.6ΥΖ9-ΒΞΔ PQ4PQ.6YZ9-BCD +0 JL0.KP JL0.KP JL0.KP +0 VJ0L6.9PNQ VJ0L6.9PNQ VJ0L6.9PNQ +0 R8RN.07Z R8RN.07Z R8RN.07Z +0 SQB.NR3 SQB.NR3 SQB.NR3 +1 JL0.KP ΠΛ0.ΚΡ JL0.KP +1 VJ0L6.9PNQ ΦΠ0Λ6.69Ρ1Ν VJ0L6.9PNQ +1 R8RN.07Z Ψ8ΨΝ.07Ζ R8RN.07Z +1 SQB.NR3 ΣΘ4.Ν8Ψ3 SQB.NR3 +2 JL0.KP ПЛ0.КР JL0.KP +2 VJ0L6.9PNQ ЧП0Л6.9РЗФ VJ0L6.9PNQ +2 R8RN.07Z Я8ЯЗ.07Б R8RN.07Z +2 SQB.NR3 ЦФВ.ЗЯ3 SQB.NR3 +3 JL0.KP טך0.ים JL0.KP +3 VJ0L6.9PNQ צט0ך6.69ם1ל VJ0L6.9PNQ +3 R8RN.07Z נ8נל.07ת R8RN.07Z +3 SQB.NR3 עמ4.ל8נ3 SQB.NR3 +4 JL0.KP ठत०.णन JL0.KP +4 VJ0L6.9PNQ लठ०त६.९नधप VJ0L6.9PNQ +4 R8RN.07Z भ८भध.०७ब R8RN.07Z +4 SQB.NR3 मपक.धभ३ SQB.NR3 +5 JL0.KP ഡഥ൦.തന JL0.KP +5 VJ0L6.9PNQ ഴഡ൦ഥ൬.൯നധമ VJ0L6.9PNQ +5 R8RN.07Z ര൮രധ.൦൭ഹ R8RN.07Z +5 SQB.NR3 റമക.ധര൩ SQB.NR3 +6 JL0.KP ႮႱ0.ႰႵ JL0.KP +6 VJ0L6.9PNQ ႺႮ0Ⴑ6.9ႵႴႶ VJ0L6.9PNQ +6 R8RN.07Z Ⴗ8ႷႴ.07Ⴟ R8RN.07Z +6 SQB.NR3 ႸႶႡ.ႴႷ3 SQB.NR3 +7 JL0.KP スト0.チヒ JL0.KP +7 VJ0L6.9PNQ モス0ト6.9ヒヌフ VJ0L6.9PNQ +7 R8RN.07Z ヘ8ヘヌ.07ヲ R8RN.07Z +7 SQB.NR3 ホフカ.ヌヘ3 SQB.NR3 +8 JL0.KP ชด๐.ฑธ JL0.KP +8 VJ0L6.9PNQ ลช๐ด๖.๙ธทบ VJ0L6.9PNQ +8 R8RN.07Z ผ๘ผท.๐๗ฯ R8RN.07Z +8 SQB.NR3 มบก.ทผ๓ SQB.NR3 +9 JL0.KP ຍທ0.ດຜ JL0.KP +9 VJ0L6.9PNQ ວຍ0ທ6.9ຜບພ VJ0L6.9PNQ +9 R8RN.07Z ມ8ມບ.07ຯ R8RN.07Z +9 SQB.NR3 ຢພກ.ບມ3 SQB.NR3 +10 JL0.KP ԽՀ0.ԿՇ JL0.KP +10 VJ0L6.9PNQ ՏԽ0Հ6.9ՇՃՈ VJ0L6.9PNQ +10 R8RN.07Z Պ8ՊՃ.07Փ R8RN.07Z +10 SQB.NR3 ՍՈԲ.ՃՊ3 SQB.NR3 +11 JL0.KP ঝড০.ঠত JL0.KP +11 VJ0L6.9PNQ বঝ০ড৬.৯তণথ VJ0L6.9PNQ +11 R8RN.07Z দ৮দণ.০৭হ R8RN.07Z +11 SQB.NR3 নথঘ.ণদ৩ SQB.NR3 +12 JL0.KP ਠਤ੦.ਣਨ JL0.KP +12 VJ0L6.9PNQ ਲਠ੦ਤ੬.੯ਨਧਪ VJ0L6.9PNQ +12 R8RN.07Z ਭ੮ਭਧ.੦੭ਡ R8RN.07Z +12 SQB.NR3 ਮਪਕ.ਧਭ੩ SQB.NR3 +13 JL0.KP ཇཕ༠.ཉད JL0.KP +13 VJ0L6.9PNQ ཟཇ༠ཕ༦.༩དཏན VJ0L6.9PNQ +13 R8RN.07Z པ༨པཏ.༠༧ས R8RN.07Z +13 SQB.NR3 བནཀ.ཏཔ༣ SQB.NR3 +14 JL0.KP زش0.سط JL0.KP +14 VJ0L6.9PNQ جز0ش6.69ط1ض VJ0L6.9PNQ +14 R8RN.07Z ع8عض.07و R8RN.07Z +14 SQB.NR3 غظ4.ض8ع3 SQB.NR3 +15 JL0.KP 타0.퍠 JL0.KP +15 VJ0L6.9PNQ ᄌᄐ0ᅡ6.69ᅤ1ᅣ VJ0L6.9PNQ +15 R8RN.07Z ᅧ8ᅧᅣ.07ᅮ R8RN.07Z +15 SQB.NR3 ᅩᅥ4.ᅣ8ᅧ3 SQB.NR3 +16 JL0.KP ဇဍ၀.ဌထ JL0.KP +16 VJ0L6.9PNQ ဟဇ၀ဍ၆.၉ထတဒ VJ0L6.9PNQ +16 R8RN.07Z သ၈သတ.၀၇လ R8RN.07Z +16 SQB.NR3 နဒက.တသ၃ SQB.NR3 +17 JL0.KP ឈឌ០.ដទ JL0.KP +17 VJ0L6.9PNQ ពឈ០ឌ៦.៩ទណធ VJ0L6.9PNQ +17 R8RN.07Z ន៨នណ.០៧អ R8RN.07Z +17 SQB.NR3 បធក.ណន៣ SQB.NR3 +18 JL0.KP ඬද0.තප JL0.KP +18 VJ0L6.9PNQ රඬ0ද6.9පඳබ VJ0L6.9PNQ +18 R8RN.07Z ම8මඳ.07හ R8RN.07Z +18 SQB.NR3 ඹබක.ඳම3 SQB.NR3 +19 JL0.KP ކވ0.އދ JL0.KP +19 VJ0L6.9PNQ ސކ0ވ6.9ދފތ VJ0L6.9PNQ +19 R8RN.07Z ލ8ލފ.07ޱ R8RN.07Z +19 SQB.NR3 ގތހ.ފލ3 SQB.NR3 +20 JL0.KP ㄋㄍ0.ㄌㄕ JL0.KP +20 VJ0L6.9PNQ ㄩㄋ0ㄍ6.9ㄕㄏㄖ VJ0L6.9PNQ +20 R8RN.07Z ㄐ8ㄐㄏ.07ㄙ R8RN.07Z +20 SQB.NR3 ㄑㄖㄅ.ㄏㄐ3 SQB.NR3 +21 JL0.KP ⵃⵅ0.ⵄⵎ JL0.KP +21 VJ0L6.9PNQ ⵛⵃ0ⵅ6.9ⵎⵍⵕ VJ0L6.9PNQ +21 R8RN.07Z ⵖ8ⵖⵍ.07ⵣ R8RN.07Z +21 SQB.NR3 ⵙⵕⴱ.ⵍⵖ3 SQB.NR3 +22 JL0.KP மர0.யழ JL0.KP +22 VJ0L6.9PNQ உம0ர6.9ழவள VJ0L6.9PNQ +22 R8RN.07Z ற8றவ.07ஒ R8RN.07Z +22 SQB.NR3 அளக.வற3 SQB.NR3 +23 JL0.KP የለ፲.ኬፔ JL0.KP +23 VJ0L6.9PNQ ሦየ፲ለ፮.፱ፔፐቀ VJ0L6.9PNQ +23 R8RN.07Z ቄ፰ቄፐ.፲፯ዜ R8RN.07Z +23 SQB.NR3 ሬቀበ.ፐቄ፫ SQB.NR3 +24 JL0.KP ఠణ0.డద JL0.KP +24 VJ0L6.9PNQ మఠ0ణ6.9దథధ VJ0L6.9PNQ +24 R8RN.07Z న8నథ.07వ R8RN.07Z +24 SQB.NR3 పధక.థన3 SQB.NR3 +25 JL0.KP ଟଢ0.ଡଦ JL0.KP +25 VJ0L6.9PNQ ମଟ0ଢ6.9ଦଥଧ VJ0L6.9PNQ +25 R8RN.07Z ନ8ନଥ.07ସ R8RN.07Z +25 SQB.NR3 ପଧକ.ଥନ3 SQB.NR3 +26 JL0.KP ಜಡ0.ಠದ JL0.KP +26 VJ0L6.9PNQ ಬಜ0ಡ6.9ದತಧ VJ0L6.9PNQ +26 R8RN.07Z ನ8ನತ.07ವ R8RN.07Z +26 SQB.NR3 ಪಧಕ.ತನ3 SQB.NR3 +27 JL0.KP ચત0.ટર JL0.KP +27 VJ0L6.9PNQ ષચ0ત6.9રઠવ VJ0L6.9PNQ +27 R8RN.07Z ઞ8ઞઠ.07ભ R8RN.07Z +27 SQB.NR3 મવગ.ઠઞ3 SQB.NR3 diff --git a/test/Scenario b/test/Scenario index 5b38e6b..2e2ce21 100644 --- a/test/Scenario +++ b/test/Scenario @@ -219,3 +219,13 @@ # Fonsorbes Impasse des Lauriers -d FRA FTGC.R3T-K3 => 43.531828717 1.235420533 +# Languages +-l جز0ش6.69ط1ض => VJ0L6.9PNQ +-l جز0ش6.69ط1ض Thai => ลช๐ด๖.๙ธทบ +-l FTGC.R3T-K3 Gujarati => દફબજ.ઞ3ફ-ટ3 +-l દફબજ.ઞ3ફ-ટ3 Korean => 류7.녀83ᅲ-ᄑ3 +-l દફબજ.ઞ3ફ-ટ3 0 => FTGC.R3T-K3 +-l FTGC.R3T-K3 Greek => ΕΤ7.ΞΨ83Τ-Κ3 +-l FTGC.R3T-K3 1 => ΕΤ7.ΞΨ83Τ-Κ3 +-l FTGC.R3T-K3 ελληνικά => ΕΤ7.ΞΨ83Τ-Κ3 + From be6fe342ff89efe68392184735a96c373f10bd33 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 17 Jun 2022 19:42:25 +0200 Subject: [PATCH 34/42] Add more tests of languages in the Scenario --- test/Scenario | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/test/Scenario b/test/Scenario index 2e2ce21..bc58a73 100644 --- a/test/Scenario +++ b/test/Scenario @@ -228,4 +228,35 @@ -l FTGC.R3T-K3 Greek => ΕΤ7.ΞΨ83Τ-Κ3 -l FTGC.R3T-K3 1 => ΕΤ7.ΞΨ83Τ-Κ3 -l FTGC.R3T-K3 ελληνικά => ΕΤ7.ΞΨ83Τ-Κ3 - +-l FTGC.R3T-K3 Arabic => دف7.حع83ف-س3 +-l FTGC.R3T-K3 14 => دف7.حع83ف-س3 +-l FTGC.R3T-K3 العَرَبِيَّة => دف7.حع83ف-س3 +# All languages +-l FTGC.R3T-K3 Roman => FTGC.R3T-K3 +-l FTGC.R3T-K3 ελληνικά => ΕΤ7.ΞΨ83Τ-Κ3 +-l FTGC.R3T-K3 кириллица => ЖТГС.Я3Т-К3 +-l FTGC.R3T-K3 עִבְרִית => הפ7.גנ83פ-י3 +-l FTGC.R3T-K3 देवनागरी => चरजग.भ३र-ण३ +-l FTGC.R3T-K3 മലയാളം => ചലജഖ.ര൩ല-ത൩ +-l FTGC.R3T-K3 ქართული => ႩႹႫႣ.Ⴗ3Ⴙ-Ⴐ3 +-l FTGC.R3T-K3 カタカナ => ケメコキ.ヘ3メ-チ3 +-l FTGC.R3T-K3 ภาษาไทย => งรจข.ผ๓ร-ฑ๓ +-l FTGC.R3T-K3 ພາສາລາວ => ງຣຈຂ.ມ3ຣ-ດ3 +-l FTGC.R3T-K3 հայերեն => ԸՎԹԳ.Պ3Վ-Կ3 +-l FTGC.R3T-K3 বাংলা => গপঙক.দ৩প-ঠ৩ +-l FTGC.R3T-K3 ਗੁਰਮੁਖੀ => ਚਰਜਗ.ਭ੩ਰ-ਣ੩ +-l FTGC.R3T-K3 དབུ་ཅན་ => ངཞཅཁ.པ༣ཞ-ཉ༣ +-l FTGC.R3T-K3 العَرَبِيَّة => دف7.حع83ف-س3 +-l FTGC.R3T-K3 조선글한글 => 류7.녀83ᅲ-ᄑ3 +-l FTGC.R3T-K3 မြန်မာအက္ခရာ => ဃပငခ.သ၃ပ-ဌ၃ +-l FTGC.R3T-K3 អក្សរខ្មែរ => ឃផងខ.ន៣ផ-ដ៣ +-l FTGC.R3T-K3 සිංහලඅක්ෂරමාලාව => ජයටග.ම3ය-ත3 +-l FTGC.R3T-K3 ތާނަ => ރޏބށ.ލ3ޏ-އ3 +-l FTGC.R3T-K3 ㄅㄆㄇㄈ => ㄇㄒㄉㄈ.ㄐ3ㄒ-ㄌ3 +-l FTGC.R3T-K3 ⵜⵉⴼⵉⵏⴰⵖ => ⴼⵚⴽⴳ.ⵖ3ⵚ-ⵄ3 +-l FTGC.R3T-K3 தமிழ் => தஈநச.ற3ஈ-ய3 +-l FTGC.R3T-K3 ኣማርኛ => ፊሠገቤ.ቄ፫ሠ-ኬ፫ +-l FTGC.R3T-K3 తెలుగు => చబజగ.న3బ-డ3 +-l FTGC.R3T-K3 ଓଡ଼ିଆ => ଘବଚଖ.ନ3ବ-ଡ3 +-l FTGC.R3T-K3 ಕನ್ನಡ => ಙಫಚಖ.ನ3ಫ-ಠ3 +-l FTGC.R3T-K3 ગુજરાતી => દફબજ.ઞ3ફ-ટ3 From 51b8e7741200d478558942dbbe0b7a21adc78302 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 17 Jun 2022 19:42:37 +0200 Subject: [PATCH 35/42] Update help --- test/fulltest | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/fulltest b/test/fulltest index b3f80e1..e14f401 100755 --- a/test/fulltest +++ b/test/fulltest @@ -48,12 +48,14 @@ T0=`date "+%s"` # TEST mode plays the scenario, tests the encoding_ok and 1% of the decoding_ok function usage { - echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ] [ -s | --scenario_only ] [ -t | --test ]" + echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ]" + echo " [ -s | --scenario_only ] [ -t | --test ]" echo " or `basename $0` [ -h | --help ]" echo " Precision is from 0 to 8, default: $PRECISION" echo " Debug logs each individual test" echo " Scenario_only plays only the scenario" - echo " Test mode plays the scenario, tests the encoding_ok and 1% of the decoding_ok" + echo " Test mode plays the scenario, tests some language features, the encoding_ok" + echo " and 1% of the decoding_ok" } function error { From 52f552aee628844497d6adc086e2f0310f9136b9 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Tue, 21 Jun 2022 12:34:05 +0200 Subject: [PATCH 36/42] More tests --- test/Scenario | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Scenario b/test/Scenario index bc58a73..cf7e889 100644 --- a/test/Scenario +++ b/test/Scenario @@ -220,6 +220,8 @@ -d FRA FTGC.R3T-K3 => 43.531828717 1.235420533 # Languages +-l ΓΨΞ => GRC +-l Λ9.47Δ5 => L9.PD5 -l جز0ش6.69ط1ض => VJ0L6.9PNQ -l جز0ش6.69ط1ض Thai => ลช๐ด๖.๙ธทบ -l FTGC.R3T-K3 Gujarati => દફબજ.ઞ3ફ-ટ3 From 815582fbed08a11bb3cb3e2e4afd0b11fe5c50a9 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 1 Jul 2022 20:34:41 +0200 Subject: [PATCH 37/42] Add listing of languages --- README.md | 47 ++++++++-------- src/t_mapcode.adb | 135 +++++++++++++++++++++++++++------------------- 2 files changed, 107 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index 6450f5f..b23ea45 100644 --- a/README.md +++ b/README.md @@ -366,27 +366,24 @@ The command line testing tool `t_mapcode` can perform mainly three actions: * Encode a coordinate into mapcodes, according to options -Usage: - - t_mapcode - -h // This help - -t // Territory info - -s // Same subdivisions - -S // Search territory - -d // Decode - -c [ ] // Encode - -a [ ] // Alternative mapcodes - -l [ ] // Convert into a language - ::= : | [ ] - ::= [ ] [ ] [ ] - ::= [ all | local | short] // Default short - // Default: one mapcode (the shortest) of each territory - // all: all the mapcodes of all territories - // local: the shortest among all the mapcodes - ::= P0 to P8 // Default P0 - ::= language name (any casing) or num (0 for Roman) - // Input language is guessed, default output is Romaic - +Usage: ./t_mapcode + -h // This help + -t [ ] // Territory info + -s // Same subdivisions + -S // Search territory + -d // Decode + -c [ ] // Encode + -a [ ] // Alternative mapcodes + -l [ [ ] ] // List or convert into a language + ::= : | [ ] + ::= [ ] [ ] [ ] + ::= [ all | local | short] // Default short + // short: one mapcode (the shortest) of each territory + // all: all the mapcodes of all territories + // local: the shortest among all the mapcodes + ::= P0 .. P8 // Default P0 or from input + ::= language name (any casing) or num (0 for Roman) + // Input language is guessed, default output is Romaic Default selection leads to encode with Shortest => True, while `all` leads to encode with Shortest => False, and 'local' leads to encode with Shortest => True @@ -499,6 +496,14 @@ Convert a mapcode into Roman t_mapcode -l ΦΗ9ΓΒ.21Π39 Roman -> VHXGB.1J9J +List all languages + + t_mapcode -l + -> 00 Roman + 01 Greek + ... + 27 Gujarati + # Version History ### 1.1.5 diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 30df1e9..5512263 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -18,6 +18,7 @@ with Ada.Command_Line, Ada.Text_Io, Ada.Strings.Utf_Encoding.Wide_Strings, Ada.Strings.Utf_Encoding.Wide_Wide_Strings; +with Ada.Environment_Variables; with Mapcode_Utils.As_U, Mapcode_Utils.Str_Tools, Language_Utils; use Mapcode_Utils; with Countries, Mapcodes.Languages; @@ -33,21 +34,21 @@ procedure T_Mapcode is Ada.Text_Io.Put_Line ( "Usage: " & Ada.Command_Line.Command_Name & " "); Ada.Text_Io.Put_Line ( - " -h // This help"); + " -h // This help"); Ada.Text_Io.Put_Line ( - " -t [ ] // Territory info"); + " -t [ ] // Territory info"); Ada.Text_Io.Put_Line ( - " -s // Same subdivisions"); + " -s // Same subdivisions"); Ada.Text_Io.Put_Line ( - " -S // Search territory"); + " -S // Search territory"); Ada.Text_Io.Put_Line ( - " -d // Decode"); + " -d // Decode"); Ada.Text_Io.Put_Line ( - " -c [ ] // Encode"); + " -c [ ] // Encode"); Ada.Text_Io.Put_Line ( - " -a [ ] // Alternative mapcodes"); + " -a [ ] // Alternative mapcodes"); Ada.Text_Io.Put_Line ( - " -l [ ] // Convert into a language"); + " -l [ [ ] ] // List or convert into a language"); Ada.Text_Io.Put_Line ( " ::= : | [ ] "); Ada.Text_Io.Put_Line ( @@ -103,7 +104,8 @@ procedure T_Mapcode is function Is_Command (Arg : in String) return Boolean is (Arg = "-h" or else Arg = "-t" or else Arg = "-s" or else Arg = "-S" - or else Arg = "-d" or else Arg = "-c" or else Arg = "-a"); + or else Arg = "-d" or else Arg = "-c" or else Arg = "-a" + or else Arg = "-l"); function Image (F : Mapcodes.Real) return String is begin @@ -324,60 +326,85 @@ begin Ada.Text_Io.Put_Line ("=> " & Image (Coord.Lat) & " " & Image (Coord.Lon)); elsif Command.Image = "-l" then + -- Languge conversion if I + 1 <= Ada.Command_Line.Argument_Count then + -- Text is set I := I + 1; Arg1 := As_U.Tus (Ada.Command_Line.Argument (I)); else - raise Argument_Error; - end if; - Arg2.Set_Null; - if I + 1 <= Ada.Command_Line.Argument_Count then - -- Optional output language - Arg2 := As_U.Tus (Ada.Command_Line.Argument (I + 1)); - if Arg2.Length = 0 and then Arg2.Element (1) = '-' then - Arg2.Set_Null; - else - I := I + 1; - end if; + -- Text is in ENV (easier with a debugger) + -- and output language will be default + begin + Arg1 := As_U.Tus (Ada.Environment_Variables ("Mapcode"); + exception + when others => + Arg1.Set_Null; + end; end if; - -- Set output language - declare - Language : Mapcodes.Languages.Language_List - := Mapcodes.Languages.Roman; - begin - if not Arg2.Is_Null - and then Arg2.Element (1) >= '0' and then Arg2.Element (1) <= '9' then - -- Argument is language num - Language := Mapcodes.Languages.Language_List'Val ( - Natural'Value (Arg2.Image)); - elsif not Arg2.Is_Null then - -- Argument is language name + if Arg1.Is_Null then + -- No text and no ENV: list all languages + for Lang in Mapcodes.Languages.Language_List loop declare - -- Convert to unicodes to get the language - Wws : constant Wide_Wide_String - := Ada.Strings.Utf_Encoding.Wide_Wide_Strings.Decode ( - Mapcode_Utils.Str_Tools.Upper_Str (Arg2.Image)); - Unicodes : Language_Utils.Unicode_Sequence (Wws'Range); + Str : constant String + := Integer'Image (Mapcodes.Languages.Language_List'Pos (Lang)); begin - for I in Wws'Range loop - Unicodes(I) := Wide_Wide_Character'Pos(Wws(I)); - end loop; - Language := Mapcodes.Languages.Get_Language (Unicodes); + Ada.Text_Io.Put_Line ( + (if Str'Length = 3 then Str (2 .. 3) + else '0' & Str (2)) + & " " & Mapcode_Utils.Str_Tools.Mixed_Str (Lang'Img)); end; + end loop; + else + -- Text is set + Arg2.Set_Null; + if I + 1 <= Ada.Command_Line.Argument_Count then + -- Optional output language + Arg2 := As_U.Tus (Ada.Command_Line.Argument (I + 1)); + if Arg2.Length = 0 and then Arg2.Element (1) = '-' then + Arg2.Set_Null; + else + I := I + 1; + end if; end if; - Ada.Text_Io.Put_Line ( - Ada.Strings.Utf_Encoding.Wide_Strings.Encode ( - Mapcodes.Languages.Convert ( - Ada.Strings.Utf_Encoding.Wide_Strings.Decode (Arg1.Image), - Language))); - exception - when Mapcodes.Decode_Error - | Mapcodes.Languages.Invalid_Text - | Mapcodes.Languages.Unknown_Language => - raise; - when others => - raise Argument_Error; - end; + -- Set output language + declare + Language : Mapcodes.Languages.Language_List + := Mapcodes.Languages.Default_Language; + begin + if not Arg2.Is_Null + and then Arg2.Element (1) >= '0' and then Arg2.Element (1) <= '9' then + -- Argument is language num + Language := Mapcodes.Languages.Language_List'Val ( + Natural'Value (Arg2.Image)); + elsif not Arg2.Is_Null then + -- Argument is language name + declare + -- Convert to unicodes to get the language + Wws : constant Wide_Wide_String + := Ada.Strings.Utf_Encoding.Wide_Wide_Strings.Decode ( + Mapcode_Utils.Str_Tools.Upper_Str (Arg2.Image)); + Unicodes : Language_Utils.Unicode_Sequence (Wws'Range); + begin + for I in Wws'Range loop + Unicodes(I) := Wide_Wide_Character'Pos(Wws(I)); + end loop; + Language := Mapcodes.Languages.Get_Language (Unicodes); + end; + end if; + Ada.Text_Io.Put_Line ( + Ada.Strings.Utf_Encoding.Wide_Strings.Encode ( + Mapcodes.Languages.Convert ( + Ada.Strings.Utf_Encoding.Wide_Strings.Decode (Arg1.Image), + Language))); + exception + when Mapcodes.Decode_Error + | Mapcodes.Languages.Invalid_Text + | Mapcodes.Languages.Unknown_Language => + raise; + when others => + raise Argument_Error; + end; + end if; else raise Argument_Error; end if; From cd828006a93c6261bf69074fcfa932d2417deee4 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Fri, 1 Jul 2022 21:17:00 +0200 Subject: [PATCH 38/42] Fix Export code --- src/t_mapcode.adb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 5512263..66696b9 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -335,7 +335,7 @@ begin -- Text is in ENV (easier with a debugger) -- and output language will be default begin - Arg1 := As_U.Tus (Ada.Environment_Variables ("Mapcode"); + Arg1 := As_U.Tus (Ada.Environment_Variables.Value ("Mapcode")); exception when others => Arg1.Set_Null; From ff63b286b33c7e75a473090ceda3a78cb3c23add Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Wed, 6 Jul 2022 18:05:37 +0200 Subject: [PATCH 39/42] Fix comments --- test/fulltest | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/fulltest b/test/fulltest index e14f401..2dd0228 100755 --- a/test/fulltest +++ b/test/fulltest @@ -43,9 +43,10 @@ export TEST=0 T0=`date "+%s"` # DEBUG mode logs each operation -# PRECISION is 0, 1 or 2 +# PRECISION is 0 to 8, default 2 # SCENARIO_ONLY play only the scenario -# TEST mode plays the scenario, tests the encoding_ok and 1% of the decoding_ok +# TEST mode plays the scenario, tests some language conversions, +# the encoding_ok and 1% of the decoding_ok function usage { echo "Usage: `basename $0` [ -p | --precision= ] [ -d | --debug ]" From d47a7a1887f3bfdf6fbc5424fb8348caeb8027c3 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Thu, 18 Apr 2024 19:51:31 +0200 Subject: [PATCH 40/42] Use Long_Float --- src/mapcodes.ads | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mapcodes.ads b/src/mapcodes.ads index 82aab8d..1bd49df 100644 --- a/src/mapcodes.ads +++ b/src/mapcodes.ads @@ -25,7 +25,7 @@ package Mapcodes is & Mapcode_Data_Version; -- Real type (for latitude and longitude) - type Real is digits 15 range -1.79E308 .. 1.79E308; + type Real is new Long_Float; ----------------- -- TERRITORIES -- From c29d0d5e64d02adae6a3a95ebf669380a3064954 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Thu, 18 Apr 2024 19:52:00 +0200 Subject: [PATCH 41/42] Improve error reporting --- src/t_mapcode.adb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/t_mapcode.adb b/src/t_mapcode.adb index 66696b9..a72d7e6 100644 --- a/src/t_mapcode.adb +++ b/src/t_mapcode.adb @@ -174,7 +174,7 @@ procedure T_Mapcode is begin if Ada.Command_Line.Argument_Count = 0 then - Usage; + raise Argument_Error; end if; I := 1; while I <= Ada.Command_Line.Argument_Count loop @@ -429,8 +429,10 @@ exception Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Raised Unknown_Language"); Ada.Command_Line.Set_Exit_Status (1); when Argument_Error => - Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, "Invalid Argument"); + Ada.Text_Io.Put_Line (Ada.Text_Io.Standard_Error, + "ERROR: Invalid Argument"); Ada.Command_Line.Set_Exit_Status (2); + Usage; when others => Ada.Command_Line.Set_Exit_Status (2); raise; From 0106a2edcdf5dfc57c02aebacc22dee04c9bea04 Mon Sep 17 00:00:00 2001 From: Pascal MALAISE Date: Thu, 18 Apr 2024 19:52:42 +0200 Subject: [PATCH 42/42] Use read instead of loops of awk --- test/fulltest | 116 ++++++++++++++++++-------------------------------- 1 file changed, 42 insertions(+), 74 deletions(-) diff --git a/test/fulltest b/test/fulltest index 2dd0228..44c0c5f 100755 --- a/test/fulltest +++ b/test/fulltest @@ -103,28 +103,6 @@ fi echo Precision $PRECISION PRECISION=P${PRECISION} -# Read field $3 of line $2 of file $1 -function readarg { -res="`awk -vLINE=$2 -vFIELD=$3 ' - BEGIN { - NL=0 - } - (NF == 0 || $1 ~ /^#/) { - # Skip empty lines and comment - next - } - { - # Count significant lines - NL=NL+1 - if (NL == LINE) { - printf "%s",$FIELD - exit 0 - } - } -' $1`" -echo "$res" -} - # Check that $2 = $3 # if $1 is -d then compare floats modulo EPS ($4) (1.0E-4, 1.0E-5, 1.0E-6) # Echo 0 if OK and 1 otherwise @@ -164,36 +142,36 @@ function check { # Play Scenario echo Scenario: # For each line -let L=1 -while true ; do - # Read line until end of file +# Read line until end of file +while IFS=' ' read -r a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 ; do + if [[ $a1 =~ ^#|^$ ]] ; then + continue + fi + # Process the line let I=1 INPUT="" OUTPUT="" let ININ=1 CMD="" while true ; do - arg=`readarg $TDIR/Scenario $L $I` - if [ "$arg" = "" ] ; then + declare arg="a$I" + if [ "${!arg}" = "" ] ; then # End of line break fi if [ -z "$CMD" ] ; then - CMD=$arg; + CMD=${!arg}; fi - if [ "$arg" = "=>" ] ; then + if [ "${!arg}" = "=>" ] ; then # Switch to output let ININ=0 elif [ $ININ -eq 1 ] ; then - INPUT=$INPUT$arg" " + INPUT=$INPUT${!arg}" " else - OUTPUT=$OUTPUT$arg" " + OUTPUT=$OUTPUT${!arg}" " fi let I=$I+1 done - if [ "$INPUT" = "" ] ; then - break - fi # Do test and save exit status export result=`t_mapcode $INPUT` export code=$? @@ -214,8 +192,7 @@ while true ; do else error "$INPUT => $result instead of $OUTPUT" fi - let L=$L+1 -done +done < $TDIR/Scenario echo OK. if [ "$SCENARIO_ONLY" = "1" ] ; then exit 0 @@ -233,27 +210,28 @@ else let I=1 fi PrevLang=x -while true ; do +let L=1 +while IFS=' ' read -r Lang Input Output Back ; do if [ $TEST -eq 1 ] ; then # Some specific effective lines if [ -n "${TESTS[$I]}" ] ; then - let L=${TESTS[$I]} + let TL=${TESTS[$I]} else # Last item of the list has been reached - let L=${L}+1 + let TL=${TL}+1 fi else # All the lines - let L=$I + let TL=$I fi - # En of file - Lang=`readarg $TDIR/Alphabets $L 1` - if [ -z "$Lang" ] ; then - break; + if [ $TL -ne $L ] ; then + let L=$L+1 + continue + fi + # End of file + if [[ $Lang =~ ^#|^$ ]] ; then + continue fi - Input=`readarg $TDIR/Alphabets $L 2` - Output=`readarg $TDIR/Alphabets $L 3` - Back=`readarg $TDIR/Alphabets $L 4` if [ -n "$DEBUG" ] ; then echo -l "$Input" "$Lang" elif [ "$Lang" != "$PrevLang" ] ; then @@ -283,7 +261,8 @@ while true ; do error "$Output => $Got_Back instead of $Back" fi let I=$I+1 -done + let L=$L+1 +done <$TDIR/Alphabets if [ -z "$DEBUG" ] ; then echo fi @@ -310,20 +289,16 @@ if [ $TEST -eq 0 ] ; then territory_failure "Toto" territory_failure AL Toto # For each line - let L=1 - while true ; do - ctx=`readarg $TDIR/TerritoryFailures $L 1` - if [ -z "$ctx" ] ; then - break; + while IFS=' ' read -r ctx ter ; do + if [[ $ctx =~ ^#|^$ ]] ; then + continue fi - ter=`readarg $TDIR/TerritoryFailures $L 2` if [ -z "$ter" ] ; then ter=$ctx ctx="" fi territory_failure $ter $ctx - let L=$L+1 - done + done <$TDIR/TerritoryFailures echo OK. fi @@ -345,34 +320,29 @@ if [ $TEST -eq 0 ] ; then decode_failure "QD3CL.PX8J-K3'" decode_failure "QD3CL.P'X8J-K3" # For each line - let L=1 - while true ; do - ctx=`readarg $TDIR/DecodeFailures $L 1` - if [ -z "$ctx" ] ; then - break; + while IFS=' ' read -r ctx cod ; do + if [[ $ctx =~ ^#|^$ ]] ; then + continue fi - cod=`readarg $TDIR/DecodeFailures $L 2` if [ -z "$cod" ] ; then cod=$ctx ctx="" fi decode_failure $ctx $cod - let L=$L+1 - done + done < $TDIR/DecodeFailures echo OK. fi # EncodeOk echo Encode # For each line -let L=1 -while true ; do - # Read lat and lon - lat=`readarg $TDIR/EncodeOk $L 1` +while IFS=' ' read -r lat lon ; do + if [[ $lat =~ ^#|^$ ]] ; then + continue + fi if [ -z "$lat" ] ; then break; fi - lon=`readarg $TDIR/EncodeOk $L 2` # Encode result=`t_mapcode -c $lat $lon $PRECISION` if [ $? -ne 0 ] ; then @@ -410,9 +380,7 @@ while true ; do echo "$lat $lon => $result => $dec" fi fi - - let L=$L+1 -done +done <$TDIR/EncodeOk echo OK. # Decode @@ -475,8 +443,8 @@ decode "" "ZZ0Z0.Z1YG" "90.000000000000" "179.999999999999" 1 1 # Read ctx cod lat lon loc glo let L=0 let R=0 -while read -r ctx cod lat lon loc glo || [[ -n "$ctx" ]]; do - if [ \( -z "$ctx" \) -o \( "$ctx" = "#" \) ] ; then +while IFS=' ' read -r ctx cod lat lon loc glo ; do + if [[ $ctx =~ ^#|^$ ]] ; then continue fi # Process each line, or 1% in test mode