# 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
AED = Derhem Uymarati
AOA = Kwanza Unguli
AUD = Ḍular Usṭrali|A$
BHD = Ḍinar Ubaḥrayni||3
BIF = Frank Uburundi||0
BWP = Pula Ubutswani
CAD = Ḍular Ukanadi|CA$
CDF = Frank Ukunguli
CHF = Frank Uswisri
CNY = Ywan Renminbi Ucinwi|CN¥
CVE = Iskudu Ukabuvirdyani
DJF = Frank Uğibuti||0
DZD = Ḍinar Udzayri
EGP = Junih Umiṣṛi
ERN = Nakfa Uyritri
ETB = Birr Uyityuppi
EUR = Uṛu|€
GBP = Junih Ubriṭani|£
GHC = Sidi Uɣani|||1
GMD = Dalasi Agambi
GNS = Frank Uɣini|||1
INR = Rupi Uḥindi|₹
JPY = Yann Ujappuni|JP¥|0
KES = Cillin Ukini
KMF = Frank Uqumuri||0
LRD = Ḍular Ulibiri
LSL = Luti Ulusuṭi
LYD = Ḍinar Ulibi||3
MAD = Derhem Umeṛṛuki
MGA = Aryari Umalɣaci||0
MRO = Uqiyya Umuritani||0
MUR = Rupi Umurisi||0
MWK = Kwača Umalawi
MZM = Mitikal Umuzambiqi|||1
NAD = Ḍular Unamibi
NGN = Nayra Unijiri
RWF = Frank Urwandi||0
SAR = Ryal Usaεudi
SCR = Rupi Usicili
SDG = Junih Usudani
SDP = Junih Usudani (1956–2007)|||1
SHP = Junih Usantehilini
SLL = Lyun Usirralyuni||0
SOS = Cilin Uṣumali||0
STD = Dubra Usawṭumi||0|1
SZL = Lilanjini Uswazi
TND = Ḍinar Utunsi||3
TZS = Cilin Uṭanzani||0
UGX = Cilin Uɣandi (1966–1987)||0
USD = Ḍular Umirikani|US$
XAF = Frank CFA (BEAC)|FCFA|0
XOF = Frank CFA (BCEAO)|CFA|0
ZAR = Rand Ufriki Unzul
ZMK = Kwača Uzambi (1968–2012)||0|1
ZMW = Kwača Uzambi
ZWD = Ḍular Uzimbabwi||0|1
