# Copyright 2012 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=21.0
#  number=$Revision: 6546 $
#  type=root
#  date=$Date: 2012-02-07 13:32:35 -0500 (Tue, 07 Feb 2012) $

AED = Dilàm è Yùnaetɛ Alab Emelɛ̀
AOA = Kwanzà è Àŋgolà
AUD = Dɔlà e Ùsɨ̀tɛ̀lɛlìa|AU$
BHD = Dinà è Balae||3
BIF = Fàlâŋ è Bùlundì||0
BWP = Kpuwlà è Botɨshǔanà
CAD = Dɔlà è Kanadà|CA$
CDF = Fàlâŋ è Kuŋgùlê
CHF = Fàlâŋ è Sues||||5
CNY = Yùwân Lèmembi è Chaenî|CN¥
CVE = Kàbòvàdianù è Èsùkudò
DJF = Fàlâŋ è Dzìbutì||0
DZD = Dinà è Àdzɛlìa
EGP = Bɔ̀ŋ è Edzì
ERN = Nakafa è Èletɨ̀làe
ETB = Bîi è Etyǒkpìa
EUR = Yulù|€
GBP = Bɔ̀ŋ Sɨ̀telè è Bèletì|UK£
GHC = Sɛ̀di è Gaanà|||1
GMD = Dàlasì è Gambìa
GNS = Fàlâŋ è Ginè|||1
INR = Lukpì è Endìa|Rs.
JPY = Ghɨ̂n Dzàkpànê|JP¥|0
KES = Shwɨlà tɨ Kenyà
KMF = Fàlâŋ è Komolìa||0
LRD = Dɔlà Làebɛlìa
LSL = Lɔtì Lèsutù
LYD = Dinà è Lebìa||3
MAD = Dilàm è Mòlokò
MGA = Àlǐalè è Màlàgasì||0
MRO = Ùgueya è Mùlètenyìa||0
MUR = Lukpìi è Mùleshòs||0
MWK = Kwachà è Màlawè
MZM = Mètikà è Mùzàmbî|||1
NAD = Dɔlà è Nàmibìa
NGN = Naelà è Gɨ̀anyɨ
RWF = Fàlâŋ è Lùwandà||0
SAR = Leyà è Sàwudì
SCR = Lukpìi è Sɛchɛ̀lɛ̀
SDG = Bɔ̀ŋ è Sùdànê
SHP = Bɔ̀ŋ è Sɛ̀n Èlenà
SLL = Lyɔ̂ŋ||0
SOS = Shwɨlà è Sùmalìa||0
STD = Dɔbàlà è Sàwu Tɔ̀me à Pèlènsipè||0
SZL = Lèlàŋgenè
TND = Dinà è Tùwneshìa||3
TZS = Shwɨlà è Tàanzanyìa||0
UGX = Shwɨlà è Yùgandà||0
USD = Dɔlà è US|US$
XAF = CFA Fàlâŋ BEAC|FCFA|0
XOF = CFA Fàlâŋ BCEAO|CFA|0
ZAR = Lân è Afɨlekà ghɨ Emàm ghò
ZMK = Kwachà è Zambìa||0
ZWD = Dɔlà è Zìmbagbɛ̀||0|1
