#
# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
#

#
# COPYRIGHT AND PERMISSION NOTICE
#
# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved.
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of the Unicode data files and any associated documentation (the "Data
# Files") or Unicode software and any associated documentation (the
# "Software") to deal in the Data Files or Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, and/or sell copies of the Data Files or Software, and
# to permit persons to whom the Data Files or Software are furnished to do
# so, provided that (a) the above copyright notice(s) and this permission
# notice appear with all copies of the Data Files or Software, (b) both the
# above copyright notice(s) and this permission notice appear in associated
# documentation, and (c) there is clear notice in each modified Data File or
# in the Software as well as in the documentation associated with the Data
# File(s) or Software that the data or software has been modified.
#
# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THE DATA FILES OR SOFTWARE.
#
# Except as contained in this notice, the name of a copyright holder shall not
# be used in advertising or otherwise to promote the sale, use or other
# dealings in these Data Files or Software without prior written
# authorization of the copyright holder.
#
 
# Generated automatically from the Common Locale Data Repository. DO NOT EDIT!

ms=Bahasa Melayu
AE=Emiriah Arab Bersatu
AG=Antigua dan Barbuda
BA=Bosnia dan Herzegovina
CA=Kanada
CC=Cocos (Keeling) Islands
CD=Democratic Republic of the Congo
CF=Republik Afrika Tengah
CI=Pantai Gading
CL=Cile
CM=Kamerun
CN=Cina
CR=Kosta Rika
CY=Kibris
CZ=Republik Czech
DE=Jerman
DJ=Jibouti
DO=Republik Dominican
DZ=Aljazair
EG=Mesir
EH=Sahara Barat
ES=Sepanyol
FR=Perancis
GR=Yunani
GS=South Georgia and the South Sandwich Islands
GW=Guinea Bissau
HK=Hong Kong S.A.R., China
HM=Heard Island and McDonald Islands
HU=Hungari
IN=Hindia
IT=Itali
JM=Jamaika
JP=Jepun
KH=Kemboja
KN=Saint Kitts dan Nevis
KP=Utara Korea
KR=Selatan Korea
LB=Lubnan
LU=Luksembourg
MA=Maghribi
MG=Madagaskar
MH=Kepulauan Marshall
MO=Macao S.A.R., China
MV=Maldiv
MX=Meksiko
MZ=Mozambik
NL=Belanda
PH=Filipina
PM=Saint Pierre and Miquelon
PS=Palestinian Territory
PT=Feringgi
RE=R\u00e9union
SA=Arab Saudi
SB=Kepulauan Solomon
SG=Singapura
SJ=Svalbard and Jan Mayen
SL=Siera Leon
SR=Surinam
ST=Sao Tome dan Principe
TC=Turks and Caicos Islands
TD=Cad
TJ=Tadjikistan
TR=Turki
TT=Trinidad dan Tobago
US=Amerika Syarikat
VC=Saint Vincent dan Grenadines
WF=Wallis and Futuna
YE=Yaman
ZA=Afrika Selatan
