# Copyright 2014 Google Inc.
# 
# 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.

#
# The key is an ISO4217 currency code, and the value is of the form:
#   display name|symbol|decimal digits|not-used-flag|rounding
# If a symbol is not supplied, the currency code will be used
# If # of decimal digits is omitted, 2 is used
# If a currency is not generally used, not-used-flag=1
# If a currency should be rounded to a multiple of of the least significant
#   digit, rounding will be present
# Trailing empty fields can be omitted

# DO NOT EDIT - GENERATED FROM CLDR DATA:
#  cldrVersion=25
#  date=$Date: 2013-08-29 04:32:04 +0200 (Thu, 29 Aug 2013) $
#  number=$Revision: 9287 $
#  type=bas
AED = Dirhàm èmìrâ
AOA = Kwànza àŋgolà
AUD = Dɔ̀lâr òstralìà|$
BHD = Dinâr Bàraìn||3
BIF = Frǎŋ bùrundì||0
BWP = Pùla Bòtswanà
CAD = Dɔ̀lâr kànadà|CA$
CDF = Frǎŋ kòŋgo
CHF = Frǎŋ sùwîs
CNY = Yùan kinà|¥
CVE = Èskudò kabwe᷆r
DJF = Frǎŋ jìbutì||0
DZD = Dìnâr àlgerìà
EGP = Paùnd ègîptò
ERN = Nafkà èrìtrěà
ETB = Bîr ètìopìà
EUR = Èrô|€
GBP = Stɛrlìŋ ŋgìsì|£
GHC = Sèdi gānà|||1
GMD = Dalasì gambìà
GNS = Frǎŋ gìnê|||1
INR = Rùpi īndìà|Rs.
JPY = Yɛ̂n yàpân|¥|0
KES = Silîŋ kenìà
KMF = Frǎŋ kòmorà||0
LRD = Dɔ̀lâr lìberìà
LSL = Lotì lèsòtò
LYD = Dìnâr libìà||3
MAD = Dìrham màrôk
MGA = Frǎŋ màlàgasì||0
MRO = Ùgwiya mòrìtanìa||0
MUR = Rupìɛ̀ mòrîs||0
MWK = Kwaca màlawì
MZM = Mètìkal mòsàmbîk|||1
NAD = Dɔ̀lâr nàmibìà|$
NGN = Nayrà nìgerìà
RWF = Frǎŋ Rùandà||0
SAR = Rìal sàudì
SCR = Rùpiɛ̀ sèsɛ̂l
SDG = Dìnâr sùdân
SDP = Paùnd sùdân|||1
SHP = Paùnd hèlenà
SLL = Lèonɛ̀||0
SOS = Silîŋ sòmàli||0
STD = Dobrà sàotòme||0
SZL = Lìlàŋgeni swàzì
TND = Dìnâr tùnîs||3
TZS = Silîŋ tànzànià||0
UGX = Silîŋ ùgàndà||0
USD = Dɔla àmerkà|$
XAF = Frǎŋ CFA (BEAC)|FCFA|0
XOF = Frǎŋ CFA (BCEAO)|CFA|0
ZAR = Rân àfrǐkàsɔ̀
ZMK = Kwàca sàmbià (1968–2012)||0|1
ZMW = Kwàca sàmbià
ZWD = Dɔ̀lâr sìmbàbwê||0|1
