# 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: 2014-03-04 00:35:05 +0100 (Tue, 04 Mar 2014) $
#  number=$Revision: 9862 $
#  type=nmg
AED = Mɔn B ´Arabe
AOA = Mɔn Angola
AUD = Dɔ́llɔ Ɔstralia|$
BHD = Mɔn Bahrein||3
BIF = Fraŋ Burundi||0
BWP = Mɔn Botswana
CAD = Dɔ́llɔ Kanada|CA$
CDF = Fraŋ bó Kongolɛ̌
CHF = Fraŋ Suisse
CNY = Mɔn bó Chinois|¥
CVE = Mɔn Kapvɛrt
DJF = Fraŋ Jibuti||0
DZD = Mɔn Algeria
EGP = Mɔn Ägyptɛn
ERN = Mɔn Erytré
ETB = Mɔn Ethiopia
EUR = Euro|€
GBP = Mɔn Ngɛ̄lɛ̄n|£
GHC = Mɔn Gana|||1
GMD = Mɔn Gambia
GNS = Fraŋ Guiné|||1
INR = Mɔn India|Rs.
JPY = Mɔn Japɔn|¥|0
KES = Mɔn Kɛnya
KMF = Fraŋ bó Kɔmɔr||0
LRD = Dɔ́llɔ Liberia
LSL = Mɔn Lesoto
LYD = Mɔn Libya||3
MAD = Mɔn Marɔk
MGA = Mɔn Madagaskar||0
MRO = Mɔn Moritania||0
MUR = Mɔn Moriss||0
MWK = Mɔn Malawi
MZM = Mɔn Mozambik|||1
NAD = Dɔ́llɔ Namibia|$
NGN = Naïra Nigeria
RWF = Fraŋ Rwanda||0
SAR = Mɔn Saudi Arabia
SCR = Mɔn Seychɛlle
SDG = Mɔn Sudan
SDP = Mɔn Sudan (1957–1998)|||1
SHP = Mɔn má Saint Lina
SLL = Mɔn Leɔne||0
SOS = Mɔn Somalía||0
STD = Mɔn Sao tomé na prinship||0
SZL = Mɔn Ligangeni
TND = Mɔn Tunisia||3
TZS = Mɔn Tanzania||0
UGX = Mɔn Uganda||0
USD = Dɔ́llɔ Amɛŕka|$
XAF = Fraŋ CFA BEAC|FCFA|0
XOF = Fraŋ CFA BCEAO|CFA|0
ZAR = Mɔn Afrik yí sí
ZMK = Mɔn Zambia (1968–2012)||0|1
ZMW = Mɔn Zambia
ZWD = Dɔ́llɔ Zimbabwǝ (1980–2008)||0|1
