# BRA_1_human_2006_population.properties 
# This file contains population values for BRASIL
#
# /*********************************************************************************************
# * Copyright (c) 2006 IBM Corporation and others.
# * All rights reserved. This program and the accompanying materials
# * are made available under the terms of the Eclipse Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/epl-v10.html
# *
# * Contributors:
# *     IBM Corporation - initial API and implementation
# ***********************************************************************************************/

# /**********************************************************************************************
# * Key Format: 
# * 
# * 	 For level 1 data, the key is the ISO3166-2 code. An ISO3166-2 code is composed as follows: 
# * a two letter country code followed by up to three alphanumeric characters for the level 1 administration.
# *
# * 	 For level 2 data, the key is the ISO3166-2 code followed by six digits. The leftmost two digits indicate
# * the level 1 container of a level 2 administration (i.e. California is a level 1 container for Orange County
# * which is a level 2 administration).  The two digits were taken from a lexicographic sorting of all the
# * level 1 administrations within a country. Similarly, the four leftmost digits indicate a level 2 administration.
# * Again, these four digits are an index into the lexicographic sorting of all level 2 administrations within 
# * a level 1 administration. 
# ************************************************************************************************/

# This is the name of the class that will interpret the rest of the file's contents
RECORD_CLASSNAME = org.eclipse.stem.internal.data.records.CountryGraphRecord$CountryPopulationLabelGraphRecord

# The ISO-3166-1 alpha3 code for the country
ISOKEY = BRA

# The administration level of the population data
ADMIN_LEVEL = 1

# This is the date range for which the population values in this file are valid 
# See http://purl.org/dc/terms/1.1/valid
VALID = start=2006-01-01; end=2006-12-31;

# This is the source of the data
SOURCE = https://www.cia.gov/library/publications/the-world-factbook/
# SOURCE = http://www.citypopulation.de/Brazil.html
# SOURCE = http://www.ibge.gov.br/english/default.php
# SOURCE = http://www.goldfields.co.za/Investor/Annual_Reports/Fy_2003/gf_ar03/sd_03/story/study_6.htm
# SOURCE = https://www.cia.gov/library/publications/the-world-factbook/

# The population identifier
POPULATION = human

# The year the data is valid
YEAR = 2006

# State/Province

BR-AC = 669736
BR-AL = 3015912
BR-AP = 594587
BR-AM = 3232330
BR-BA = 13815334
BR-CE = 8097276
BR-CAP = 46300
BR-ES = 3408365
BR-GO = 5619917
BR-MA = 6103327
BR-MP = 3006885
BR-MT = 2803274
BR-MS = 2264468
BR-MG = 19237450
BR-PA = 6970586
BR-PB = 3595886
BR-PR = 10261856
BR-PE = 8413593
BR-PI = 3006885
BR-PRX = 11321
BR-RJ = 15383407
BR-RS = 10845087
BR-RN = 3003087
BR-RO = 1534594
BR-RR = 391317
BR-SC = 5866568
BR-SP = 40442795
BR-TO = 1305728
