# 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
AFA = Afeghani (1927–2002)|||1
AFN = Afegani do Afeganistão||0
ALL = lek albanês||0
AMD = Dram arménio
AOA = kwanza angolano
ARS = peso argentino
AWG = florim de Aruba
AZN = Manat do Azerbaijão
BAD = Dinar da Bósnia-Herzegóvina|||1
BAM = marco bósnio-herzegóvino conversível
BBD = dólar barbadense
BDT = Taka de Bangladesh
BEC = Franco belga (convertível)|||1
BGN = lev búlgaro
BHD = Dinar baremita||3
BIF = franco burundiano||0
BMD = dólar bermudense
BND = Dólar bruneíno
BOB = boliviano
BRL = real brasileiro|R$
BSD = dólar das Bahamas
BTN = Ngultrum do Butão
BWP = Pula de Botswana
BYB = Rublo novo bielorusso (1994–1999)|||1
BYN = rublo bielorrusso
BZD = dólar belizense
CAD = dólar canadiano|CA$
CDF = franco congolês
CHF = franco suíço
CLP = peso chileno||0
CNH = yuan offshore|||1
CNY = yuan|CN¥
COP = peso colombiano
CRC = colon costa-riquenho
CUC = peso cubano conversível
CUP = peso cubano
CVE = escudo cabo-verdiano|​
CYP = Libra de Chipre|||1
CZK = coroa checa
DJF = franco jibutiano||0
DKK = coroa dinamarquesa
DZD = dinar argelino
ECV = Unidad de Valor Constante (UVC) do Equador|||1
EGP = libra egípcia
ERN = nakfa eritreia
ETB = birr etíope
EUR = euro|€
FJD = Dólar de Fiji
FKP = libra das Ilhas Falkland
GBP = libra esterlina britânica|£
GHC = Cedi do Gana|||1
GHS = cedi ganês
GIP = libra de Gibraltar
GMD = dalasi gambiano
GNF = franco guineense||0
GTQ = quetzal da Guatemala
GYD = dólar da Guiana
HNL = lempira das Honduras
HRK = kuna croata
HUF = forint húngaro
ILS = Sheqel novo israelita|₪
ISK = coroa islandesa||0
KES = xelim queniano
KGS = Som do Quirguistão
KMF = franco comoriano||0
KYD = Dólar das Ilhas Caimão
KZT = Tenge do Cazaquistão
LAK = Kip de Laos||0
LRD = dólar liberiano
LTL = Litas da Lituânia|||1
LVL = Lats da Letónia|||1
LYD = dinar líbio||3
MAD = dirham marroquino
MDL = leu moldavo
MGA = ariari malgaxe||0
MKD = dinar macedónio
MLF = Franco do Mali|||1
MMK = Kyat de Mianmar||0
MNT = Tugrik da Mongólia
MRO = ouguiya mauritana (1973–2017)||0|1
MRU = ouguiya mauritana
MUR = rupia mauriciana
MVR = Rupia das Ilhas Maldivas
MWK = kwacha malauiano
MXN = peso mexicano|MX$
MXP = Peso Plata mexicano (1861–1992)|||1
MXV = Unidad de Inversion (UDI) mexicana|||1
MZN = metical moçambicano
NAD = Dólar da Namíbia
NIC = Córdoba nicaraguano (1988–1991)|||1
NIO = córdoba nicaraguano
NOK = coroa norueguesa
OMR = Rial de Omã||3
PAB = balboa do Panamá
PEN = sol peruano
PGK = Kina da Papua-Nova Guiné
PLN = zloti polaco
PLZ = Zloti polaco (1950–1995)|||1
PTE = Escudo português|​PTE||1
PYG = guarani paraguaio||0
QAR = Rial do Catar
RON = leu romeno
RSD = dinar sérvio||0
RUB = rublo russo
RWF = franco ruandês||0
SAR = Rial saudita
SCR = rupia seichelense
SDG = libra sudanesa
SEK = coroa sueca
SGD = Dólar de Singapura
SHP = libra santa-helenense
SOS = xelim somali||0
SRD = dólar do Suriname
SSP = libra sul-sudanesa
STN = dobra de São Tomé e Príncipe
SZL = Lilangeni da Suazilândia
THB = Baht da Tailândia|฿
TJS = Somoni do Tajaquistão
TMT = Manat do Turquemenistão
TND = dinar tunisino||3
TOP = Paʻanga de Tonga
TTD = Dólar de Trindade e Tobago
UAH = hryvnia ucraniano
USD = dólar dos Estados Unidos|US$
UYU = peso uruguaio
UZS = Som do Uzbequistão
VEF = bolívar (2008–2018)|||1
VES = bolívar
XAF = franco CFA (BEAC)|FCFA|0
XCD = Dólar das Caraíbas Orientais|EC$
XEU = Unidade da Moeda Europeia|||1
XOF = franco CFA (BCEAO)|CFA|0
XXX = moeda desconhecida|¤||1
YUD = Dinar forte jugoslavo|||1
YUM = Super Dinar jugoslavo|||1
YUN = Dinar conversível jugoslavo|||1
ZMK = Kwacha zambiano (1968–2012)||0|1
ZWD = Dólar do Zimbabwe||0|1
