# TCD_2_area.properties 
# This file contains area values for CHAD
# /*********************************************************************************************
# * 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.geography.specifications.CountryAreaLabelPropertyFileSpecification

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

# The administration level of the area data
ADMIN_LEVEL = 2

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

# This is the source of the data
SOURCE = https://www.cia.gov/library/publications/the-world-factbook/
# SOURCE = https://www.cia.gov/library/publications/the-world-factbook/

# Level 1 (admin 1 = e.g., state)
# Level 2 (admin 2 = e.g., county)

# Generated key details :  Level 1 ( TD-BET = BORKOU ENNEDI TIBESTI ). Level 2 ( 030001 = TIBESTI ). 
TD-BET-G030001 = 600350.0
# Generated key details :  Level 1 ( TD-KA = KANEM ). Level 2 ( 060001 = NOKOU ). 
TD-KA-G060001 = 114520.0
# Generated key details :  Level 1 ( TD-BA = BATHA ). Level 2 ( 010001 = DJEDAA ). 
TD-BA-G010001 = 88800.0
# Generated key details :  Level 1 ( TD-BI = BILTINE ). Level 2 ( 020001 = IRIBA ). 
TD-BI-G020001 = 46850.0
# Generated key details :  Level 1 ( TD-LC = LAKE ). Level 2 ( 070001 = BOL ). 
TD-LC-G070001 = 22320.0
# Generated key details :  Level 1 ( TD-OD = OUADDAI ). Level 2 ( 120001 = ABECHE ). 
TD-OD-G120001 = 76240.0
# Generated key details :  Level 1 ( TD-CB = CHARI BAGUIRMI ). Level 2 ( 040001 = MASSAKORY ). 
TD-CB-G040001 = 82910.0
# Generated key details :  Level 1 ( TD-GR = GUERA ). Level 2 ( 050001 = MANGALME ). 
TD-GR-G050001 = 58950.0
# Generated key details :  Level 1 ( TD-SA = SALAMAT ). Level 2 ( 130001 = ABOU DEIA ). 
TD-SA-G130001 = 63000.0
# Generated key details :  Level 1 ( TD-MK = MAYO KEBBI ). Level 2 ( 100001 = BONGOR ). 
TD-MK-G100001 = 30105.0
# Generated key details :  Level 1 ( TD-MC = MOYEN CHARI ). Level 2 ( 110001 = KYABE ). 
TD-MC-G110001 = 45180.0
# Generated key details :  Level 1 ( TD-TA = TANDJILE ). Level 2 ( 140001 = LAI ). 
TD-TA-G140001 = 18045.0
# Generated key details :  Level 1 ( TD-LO = LOGONE OCCIDEN ). Level 2 ( 080001 = BENOYE ). 
TD-LO-G080001 = 8695.0
# Generated key details :  Level 1 ( TD-LR = LOGONE ORIENTA ). Level 2 ( 090001 = DOBA ). 
TD-LR-G090001 = 28035.0
