# 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 = Dirham dos Emirados Árabes Unidos
AFA = Afeghani (1927–2002)|||1
AFN = Afegani do Afeganistão||0
ALL = lek albanês||0
AMD = Dram arménio||0
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
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$
CHF = franco suíço
CLP = peso chileno||0
CNH = yuan offshore|||1
CNY = yuan|CN¥
COP = peso colombiano||0
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
EUR = euro|€
FJD = Dólar de Fiji
FKP = libra das Ilhas Falkland
GBP = libra esterlina britânica|£
GHC = Cedi do Gana|||1
GHS = Cedi de Gana
GIP = libra de Gibraltar
GMD = Dalasi da Gâmbia
GNF = Franco guineense||0
GTQ = quetzal da Guatemala
GYD = dólar da Guiana||0
HNL = lempira das Honduras
HRK = kuna croata
HUF = forint húngaro
ISK = coroa islandesa||0
KGS = Som do Quirguistão
KYD = Dólar das Ilhas Caimão
KZT = Tenge do Cazaquistão
LAK = Kip de Laos||0
LKR = Rupia do Sri Lanka
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 de Madagáscar||0
MKD = dinar macedónio
MLF = Franco do Mali|||1
MMK = Kyat de Mianmar||0
MNT = Tugrik da Mongólia||0
MOP = Pataca de Macau|MOP$
MRO = Ouguiya da Mauritânia||0
MVR = Rupia das Ilhas Maldivas
MWK = Kwacha do Malawi
MXN = peso mexicano|MX$
MXP = Peso Plata mexicano (1861–1992)|||1
MXV = Unidad de Inversion (UDI) mexicana|||1
MZN = Metical de Moçambique
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|​||1
PYG = guarani paraguaio||0
QAR = Rial do Catar
RON = leu romeno
RSD = dinar sérvio||0
RUB = rublo russo
SAR = Rial saudita
SDG = libra sudanesa
SEK = coroa sueca
SGD = Dólar de Singapura
SOS = Xelim somali||0
SRD = dólar do Suriname
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||0
VEF = bolívar
VUV = Vatu de Vanuatu||0
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
