knitr::opts_chunk$set(cache = FALSE)

Introduction

This notebook illustrates data access through both tigris and tidycensus as well as joins using dplyr.

Dependencies

This notebook requires the following packages:

# tidyverse packages
library(dplyr)       # data wrangling

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
# spatial packages
library(mapview)     # preview geometric data
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
library(sf)          # spatial tools
Linking to GEOS 3.8.1, GDAL 3.2.1, PROJ 7.2.1
library(tidycensus)  # demographic data
library(tigris)      # tiger/line data
To enable 
caching of data, set `options(tigris_use_cache = TRUE)` in your R script or .Rprofile.

Attaching package: ‘tigris’

The following object is masked from ‘package:tidycensus’:

    fips_codes
# other packages
library(here)        # file path management
here() starts at /Users/prenercg/GitHub/slu-soc5650/module-2-combine-sources

tidycensus Set-up

Before using tidycensus, you need to install a census API key. Use the syntax below, copied into your console, to install the key you received via email.

census_api_key("KEY", install = TRUE)

This is not a code chunk you will need in each notebook. As long as install = TRUE, you will only have to do this once!

Decennial Census Data

Get List of Variables

To get a preview of variables available in the get_decennial() function, we can use the load_variables() function:

census <- load_variables(year = 2000, dataset = "sf1") 

I find it useful to assign the output of this function to an object so that I can search through it. Try searching for the variable P0010001, the total population of a geographic unit, in the census object.

Download a Single Variable

To download data, we can use use the get_decennial() function to access, for example, population by state in 2000:

popStates <- get_decennial(geography = "state", year = 2000, variable = "P001001")

A full list of the geographies available in tidycensus can be found here.

Download a Full Table

Most variables in the decennial census are actually a part of a table. There are individual variables, for example, for race:

census %>%
  filter(concept == "P3. RACE [8]")

We rarely want to download these one at a time. Instead, we want to download them at one time into a single data frame. The table number for these data is P003 - we take the first four characters from the name variable.

cityRace00 <- get_decennial(geography = "tract", year = 2000, state = 29,
                            county = "510", table = "P003", output = "wide")

We’ve used the FIPS codes for both Missouri (29) and St. Louis City (29510) here - you can find a full list of Missouri counties here.

Add Geometry

The tidycensus package also includes tools for downloading the geometries for these data as well. For instance, we can add geometric data to our previous call for City of St. Louis tract-level data on race by adding the geometry = TRUE argument:

## download
cityRace00 <- get_decennial(geography = "tract", year = 2000, state = 29,
                            county = "510", table = "P003", output = "wide",
                            geometry = TRUE)
Getting data from the 2000 decennial Census
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
Loading SF1 variables for 2000 from table P003. To cache this dataset for faster access to Census tables in the future, run this function with `cache_table = TRUE`. You only need to do this once per Census dataset.
Using Census Summary File 1
Using Census Summary File 1

  |                                                                                                                                                         
  |                                                                                                                                                   |   0%
  |                                                                                                                                                         
  |==                                                                                                                                                 |   1%
  |                                                                                                                                                         
  |===                                                                                                                                                |   2%
  |                                                                                                                                                         
  |====                                                                                                                                               |   3%
  |                                                                                                                                                         
  |=====                                                                                                                                              |   3%
  |                                                                                                                                                         
  |=====                                                                                                                                              |   4%
  |                                                                                                                                                         
  |======                                                                                                                                             |   4%
  |                                                                                                                                                         
  |=======                                                                                                                                            |   5%
  |                                                                                                                                                         
  |========                                                                                                                                           |   5%
  |                                                                                                                                                         
  |=========                                                                                                                                          |   6%
  |                                                                                                                                                         
  |==========                                                                                                                                         |   7%
  |                                                                                                                                                         
  |===========                                                                                                                                        |   7%
  |                                                                                                                                                         
  |===========                                                                                                                                        |   8%
  |                                                                                                                                                         
  |============                                                                                                                                       |   8%
  |                                                                                                                                                         
  |=============                                                                                                                                      |   9%
  |                                                                                                                                                         
  |==============                                                                                                                                     |   9%
  |                                                                                                                                                         
  |==============                                                                                                                                     |  10%
  |                                                                                                                                                         
  |===============                                                                                                                                    |  10%
  |                                                                                                                                                         
  |================                                                                                                                                   |  11%
  |                                                                                                                                                         
  |=================                                                                                                                                  |  11%
  |                                                                                                                                                         
  |=================                                                                                                                                  |  12%
  |                                                                                                                                                         
  |==================                                                                                                                                 |  12%
  |                                                                                                                                                         
  |==================                                                                                                                                 |  13%
  |                                                                                                                                                         
  |===================                                                                                                                                |  13%
  |                                                                                                                                                         
  |====================                                                                                                                               |  13%
  |                                                                                                                                                         
  |====================                                                                                                                               |  14%
  |                                                                                                                                                         
  |======================                                                                                                                             |  15%
  |                                                                                                                                                         
  |=======================                                                                                                                            |  16%
  |                                                                                                                                                         
  |========================                                                                                                                           |  16%
  |                                                                                                                                                         
  |==========================                                                                                                                         |  17%
  |                                                                                                                                                         
  |===========================                                                                                                                        |  19%
  |                                                                                                                                                         
  |=============================                                                                                                                      |  20%
  |                                                                                                                                                         
  |===============================                                                                                                                    |  21%
  |                                                                                                                                                         
  |=================================                                                                                                                  |  22%
  |                                                                                                                                                         
  |==================================                                                                                                                 |  23%
  |                                                                                                                                                         
  |====================================                                                                                                               |  25%
  |                                                                                                                                                         
  |======================================                                                                                                             |  26%
  |                                                                                                                                                         
  |========================================                                                                                                           |  27%
  |                                                                                                                                                         
  |==========================================                                                                                                         |  28%
  |                                                                                                                                                         
  |============================================                                                                                                       |  30%
  |                                                                                                                                                         
  |==============================================                                                                                                     |  31%
  |                                                                                                                                                         
  |===============================================                                                                                                    |  32%
  |                                                                                                                                                         
  |================================================                                                                                                   |  32%
  |                                                                                                                                                         
  |=================================================                                                                                                  |  33%
  |                                                                                                                                                         
  |===================================================                                                                                                |  35%
  |                                                                                                                                                         
  |====================================================                                                                                               |  36%
  |                                                                                                                                                         
  |=======================================================                                                                                            |  37%
  |                                                                                                                                                         
  |========================================================                                                                                           |  38%
  |                                                                                                                                                         
  |==========================================================                                                                                         |  40%
  |                                                                                                                                                         
  |============================================================                                                                                       |  41%
  |                                                                                                                                                         
  |===============================================================                                                                                    |  43%
  |                                                                                                                                                         
  |===================================================================                                                                                |  45%
  |                                                                                                                                                         
  |=====================================================================                                                                              |  47%
  |                                                                                                                                                         
  |======================================================================                                                                             |  48%
  |                                                                                                                                                         
  |=========================================================================                                                                          |  49%
  |                                                                                                                                                         
  |==========================================================================                                                                         |  50%
  |                                                                                                                                                         
  |==============================================================================                                                                     |  53%
  |                                                                                                                                                         
  |=================================================================================                                                                  |  55%
  |                                                                                                                                                         
  |====================================================================================                                                               |  57%
  |                                                                                                                                                         
  |=====================================================================================                                                              |  58%
  |                                                                                                                                                         
  |=======================================================================================                                                            |  59%
  |                                                                                                                                                         
  |===========================================================================================                                                        |  62%
  |                                                                                                                                                         
  |============================================================================================                                                       |  63%
  |                                                                                                                                                         
  |================================================================================================                                                   |  65%
  |                                                                                                                                                         
  |==================================================================================================                                                 |  67%
  |                                                                                                                                                         
  |===================================================================================================                                                |  67%
  |                                                                                                                                                         
  |=======================================================================================================                                            |  70%
  |                                                                                                                                                         
  |==========================================================================================================                                         |  72%
  |                                                                                                                                                         
  |==============================================================================================================                                     |  75%
  |                                                                                                                                                         
  |=================================================================================================================                                  |  77%
  |                                                                                                                                                         
  |====================================================================================================================                               |  79%
  |                                                                                                                                                         
  |=====================================================================================================================                              |  80%
  |                                                                                                                                                         
  |=======================================================================================================================                            |  81%
  |                                                                                                                                                         
  |=========================================================================================================================                          |  82%
  |                                                                                                                                                         
  |===========================================================================================================================                        |  84%
  |                                                                                                                                                         
  |============================================================================================================================                       |  84%
  |                                                                                                                                                         
  |================================================================================================================================                   |  87%
  |                                                                                                                                                         
  |==================================================================================================================================                 |  89%
  |                                                                                                                                                         
  |=====================================================================================================================================              |  90%
  |                                                                                                                                                         
  |=========================================================================================================================================          |  93%
  |                                                                                                                                                         
  |==============================================================================================================================================     |  97%
  |                                                                                                                                                         
  |===================================================================================================================================================| 100%
## preview
mapview(cityRace00, zcol = "P003005")

Notice how I used the zcol argument for mapview() to preview a specific set of data as a thematic layer on the map! These data are not normalized, but we do get a quick preview of the distribution of Asian residents in St. Louis City.

Decennial Census Data

Get List of Variables

To get a preview of variables available in the get_acs() function, we can use the load_variables() function again. We’ll use "acs5" for our dataset and, for this example, we’ll pull from the most recent 2019 ACS year:

census <- load_variables(year = 2019, dataset = "acs5") 

Try searching for the table B19013, the median household income table.

Get and Interpret ACS Data

We’ll illustrate get_acs() by using the data in table B19019. First, we’ll download these data as a full table for all counties in Missouri:

## download
countyIncome <- get_acs(geography = "county", year = 2019, state = 29,
                        table = "B19019", output = "wide", geometry = TRUE)
Getting data from the 2015-2019 5-year ACS
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
Loading ACS5 variables for 2019 from table B19019. To cache this dataset for faster access to ACS tables in the future, run this function with `cache_table = TRUE`. You only need to do this once per ACS dataset.

  |                                                                                                                                                         
  |                                                                                                                                                   |   0%
  |                                                                                                                                                         
  |=                                                                                                                                                  |   1%
  |                                                                                                                                                         
  |===                                                                                                                                                |   2%
  |                                                                                                                                                         
  |====                                                                                                                                               |   2%
  |                                                                                                                                                         
  |=====                                                                                                                                              |   3%
  |                                                                                                                                                         
  |======                                                                                                                                             |   4%
  |                                                                                                                                                         
  |=======                                                                                                                                            |   5%
  |                                                                                                                                                         
  |=========                                                                                                                                          |   6%
  |                                                                                                                                                         
  |==========                                                                                                                                         |   7%
  |                                                                                                                                                         
  |===========                                                                                                                                        |   7%
  |                                                                                                                                                         
  |============                                                                                                                                       |   8%
  |                                                                                                                                                         
  |=============                                                                                                                                      |   9%
  |                                                                                                                                                         
  |==============                                                                                                                                     |   9%
  |                                                                                                                                                         
  |==============                                                                                                                                     |  10%
  |                                                                                                                                                         
  |===============                                                                                                                                    |  10%
  |                                                                                                                                                         
  |===============                                                                                                                                    |  11%
  |                                                                                                                                                         
  |=================                                                                                                                                  |  12%
  |                                                                                                                                                         
  |==================                                                                                                                                 |  12%
  |                                                                                                                                                         
  |===================                                                                                                                                |  13%
  |                                                                                                                                                         
  |====================                                                                                                                               |  13%
  |                                                                                                                                                         
  |====================                                                                                                                               |  14%
  |                                                                                                                                                         
  |======================                                                                                                                             |  15%
  |                                                                                                                                                         
  |=======================                                                                                                                            |  16%
  |                                                                                                                                                         
  |========================                                                                                                                           |  16%
  |                                                                                                                                                         
  |=========================                                                                                                                          |  17%
  |                                                                                                                                                         
  |==========================                                                                                                                         |  18%
  |                                                                                                                                                         
  |===========================                                                                                                                        |  18%
  |                                                                                                                                                         
  |============================                                                                                                                       |  19%
  |                                                                                                                                                         
  |=============================                                                                                                                      |  20%
  |                                                                                                                                                         
  |==============================                                                                                                                     |  20%
  |                                                                                                                                                         
  |===============================                                                                                                                    |  21%
  |                                                                                                                                                         
  |=================================                                                                                                                  |  23%
  |                                                                                                                                                         
  |==================================                                                                                                                 |  23%
  |                                                                                                                                                         
  |====================================                                                                                                               |  25%
  |                                                                                                                                                         
  |=====================================                                                                                                              |  25%
  |                                                                                                                                                         
  |======================================                                                                                                             |  26%
  |                                                                                                                                                         
  |=======================================                                                                                                            |  26%
  |                                                                                                                                                         
  |=========================================                                                                                                          |  28%
  |                                                                                                                                                         
  |===========================================                                                                                                        |  29%
  |                                                                                                                                                         
  |==============================================                                                                                                     |  31%
  |                                                                                                                                                         
  |=================================================                                                                                                  |  33%
  |                                                                                                                                                         
  |===================================================                                                                                                |  35%
  |                                                                                                                                                         
  |====================================================                                                                                               |  35%
  |                                                                                                                                                         
  |=====================================================                                                                                              |  36%
  |                                                                                                                                                         
  |=======================================================                                                                                            |  38%
  |                                                                                                                                                         
  |=========================================================                                                                                          |  39%
  |                                                                                                                                                         
  |============================================================                                                                                       |  41%
  |                                                                                                                                                         
  |=============================================================                                                                                      |  42%
  |                                                                                                                                                         
  |===============================================================                                                                                    |  43%
  |                                                                                                                                                         
  |===================================================================                                                                                |  45%
  |                                                                                                                                                         
  |=====================================================================                                                                              |  47%
  |                                                                                                                                                         
  |=======================================================================                                                                            |  48%
  |                                                                                                                                                         
  |=========================================================================                                                                          |  49%
  |                                                                                                                                                         
  |==========================================================================                                                                         |  51%
  |                                                                                                                                                         
  |===========================================================================                                                                        |  51%
  |                                                                                                                                                         
  |=============================================================================                                                                      |  52%
  |                                                                                                                                                         
  |==============================================================================                                                                     |  53%
  |                                                                                                                                                         
  |===============================================================================                                                                    |  53%
  |                                                                                                                                                         
  |===============================================================================                                                                    |  54%
  |                                                                                                                                                         
  |================================================================================                                                                   |  54%
  |                                                                                                                                                         
  |=================================================================================                                                                  |  55%
  |                                                                                                                                                         
  |===================================================================================                                                                |  56%
  |                                                                                                                                                         
  |====================================================================================                                                               |  57%
  |                                                                                                                                                         
  |======================================================================================                                                             |  59%
  |                                                                                                                                                         
  |=======================================================================================                                                            |  59%
  |                                                                                                                                                         
  |=========================================================================================                                                          |  61%
  |                                                                                                                                                         
  |==========================================================================================                                                         |  61%
  |                                                                                                                                                         
  |===========================================================================================                                                        |  62%
  |                                                                                                                                                         
  |============================================================================================                                                       |  62%
  |                                                                                                                                                         
  |============================================================================================                                                       |  63%
  |                                                                                                                                                         
  |=============================================================================================                                                      |  63%
  |                                                                                                                                                         
  |===============================================================================================                                                    |  65%
  |                                                                                                                                                         
  |=================================================================================================                                                  |  66%
  |                                                                                                                                                         
  |===================================================================================================                                                |  68%
  |                                                                                                                                                         
  |=====================================================================================================                                              |  69%
  |                                                                                                                                                         
  |=======================================================================================================                                            |  70%
  |                                                                                                                                                         
  |=========================================================================================================                                          |  71%
  |                                                                                                                                                         
  |===========================================================================================================                                        |  73%
  |                                                                                                                                                         
  |=============================================================================================================                                      |  74%
  |                                                                                                                                                         
  |==============================================================================================================                                     |  75%
  |                                                                                                                                                         
  |=================================================================================================================                                  |  77%
  |                                                                                                                                                         
  |====================================================================================================================                               |  79%
  |                                                                                                                                                         
  |======================================================================================================================                             |  81%
  |                                                                                                                                                         
  |========================================================================================================================                           |  81%
  |                                                                                                                                                         
  |===========================================================================================================================                        |  84%
  |                                                                                                                                                         
  |=============================================================================================================================                      |  85%
  |                                                                                                                                                         
  |===============================================================================================================================                    |  87%
  |                                                                                                                                                         
  |=================================================================================================================================                  |  88%
  |                                                                                                                                                         
  |===================================================================================================================================                |  89%
  |                                                                                                                                                         
  |=====================================================================================================================================              |  90%
  |                                                                                                                                                         
  |=======================================================================================================================================            |  92%
  |                                                                                                                                                         
  |==========================================================================================================================================         |  94%
  |                                                                                                                                                         
  |=============================================================================================================================================      |  96%
  |                                                                                                                                                         
  |================================================================================================================================================   |  98%
  |                                                                                                                                                         
  |================================================================================================================================================== |  99%
  |                                                                                                                                                         
  |===================================================================================================================================================| 100%
## preview
mapview(countyIncome, zcol = "B19019_001E")

Notice how we needed to specify _001E for zcol. That references the specific variable we want to map - variable 1 in the table’s estimate (or E). The M values refer to the margin of the error - we expect this estimate to be off by some amount within +/- this value.

We can also download a specific column, like the median income for one-person households (B19019_002):

## download
countyIncome <- get_acs(geography = "county", year = 2019, state = 29,
                        variables = "B19019_002", output = "wide", 
                        geometry = TRUE)
Getting data from the 2015-2019 5-year ACS
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
## preview
mapview(countyIncome, zcol = "B19019_002E")

Combining Data Sources

Perhaps we have a range of data that we want to include. For this example, we’ll download data on median income and the proportion of women in tracts in Boone County, Missouri. We’ll download the income data with geometry = TRUE and the sex data with geometry = FALSE:

## download
booneIncome <- get_acs(geography = "tract", year = 2019, state = 29,
                       county = "019", variables = "B19019_001", 
                       output = "wide", geometry = TRUE) %>%
  rename(median_income = B19019_001E) %>%
  select(GEOID, median_income)
Getting data from the 2015-2019 5-year ACS
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.

  |                                                                                                                                                         
  |                                                                                                                                                   |   0%
  |                                                                                                                                                         
  |========================                                                                                                                           |  17%
  |                                                                                                                                                         
  |===================================================================================================================================================| 100%
## download
booneSex <- get_acs(geography = "tract", year = 2019, state = 29,
                       county = "019", variables = c("B01001_001", "B01001_026"),
                       output = "wide") %>%
  mutate(pct_women = B01001_026E/B01001_001E*100) %>%
  select(GEOID, pct_women)
Getting data from the 2015-2019 5-year ACS

To combine these data, we’ll use left_join() from dplyr. Our sf object should always be the first object in the join (the x data) and our non-sf data should be the second data (the y data):

boone <- left_join(booneIncome, booneSex, by = "GEOID")

Three common issues arise:

  1. The ID columns are named differently: by = c("GEOID" = "geoid")
  2. The ID columns are different type: booneIncome <- mutate(GEOID = as.numeric(GEOID))
  3. Both objects are sf objects: st_geometry(booneSEX) <- NULL

Using Tigris

To get data from the TIGER/line database, we can use the tigris package. You can see a full list of the data available here.

State Data

We can download a generalized version, which smooths out state boundaries so that the overall image is both smaller in disk size and (sometimes) easier to read. This is particularly helpful if you are making small scale maps of the entire United States. We’ll get these data at the “20m” resolution using the states() function:

states <- states(cb = TRUE, resolution = "20m")

  |                                                                                                                                                         
  |                                                                                                                                                   |   0%
  |                                                                                                                                                         
  |================================================================================================================================                   |  87%
  |                                                                                                                                                         
  |===================================================================================================================================================| 100%

County Data

Now, we’ll get more detailed data - all of the county boundaries for Missouri. We’ll use the counties() function using a slightly less generalized resolution, “5m”:

moCounties <- counties(cb = TRUE, resolution = "5m")

  |                                                                                                                                                         
  |                                                                                                                                                   |   0%
  |                                                                                                                                                         
  |==                                                                                                                                                 |   1%
  |                                                                                                                                                         
  |==========================                                                                                                                         |  18%
  |                                                                                                                                                         
  |==============================================                                                                                                     |  32%
  |                                                                                                                                                         
  |==============================================================                                                                                     |  42%
  |                                                                                                                                                         
  |========================================================================                                                                           |  49%
  |                                                                                                                                                         
  |===========================================================================                                                                        |  51%
  |                                                                                                                                                         
  |===================================================================================================                                                |  67%
  |                                                                                                                                                         
  |====================================================================================================                                               |  68%
  |                                                                                                                                                         
  |===================================================================================================================================================| 100%

Tract Data

Now, we’ll get even more detailed data - all of the tract boundaries for St. Charles County, Missouri. We’ll use the tracts() function with cb = FALSE by default:

stCharlesTracts <- tracts(state = 29, county = 183)

  |                                                                                                                                                         
  |                                                                                                                                                   |   0%
  |                                                                                                                                                         
  |=                                                                                                                                                  |   1%
  |                                                                                                                                                         
  |==========                                                                                                                                         |   7%
  |                                                                                                                                                         
  |==============                                                                                                                                     |   9%
  |                                                                                                                                                         
  |===============                                                                                                                                    |  10%
  |                                                                                                                                                         
  |================                                                                                                                                   |  11%
  |                                                                                                                                                         
  |=================                                                                                                                                  |  11%
  |                                                                                                                                                         
  |===================                                                                                                                                |  13%
  |                                                                                                                                                         
  |=====================                                                                                                                              |  14%
  |                                                                                                                                                         
  |======================                                                                                                                             |  15%
  |                                                                                                                                                         
  |===========================                                                                                                                        |  19%
  |                                                                                                                                                         
  |===============================                                                                                                                    |  21%
  |                                                                                                                                                         
  |=================================                                                                                                                  |  22%
  |                                                                                                                                                         
  |=================================                                                                                                                  |  23%
  |                                                                                                                                                         
  |=====================================                                                                                                              |  25%
  |                                                                                                                                                         
  |======================================                                                                                                             |  26%
  |                                                                                                                                                         
  |===========================================                                                                                                        |  29%
  |                                                                                                                                                         
  |===============================================                                                                                                    |  32%
  |                                                                                                                                                         
  |================================================                                                                                                   |  32%
  |                                                                                                                                                         
  |================================================                                                                                                   |  33%
  |                                                                                                                                                         
  |==================================================                                                                                                 |  34%
  |                                                                                                                                                         
  |======================================================                                                                                             |  36%
  |                                                                                                                                                         
  |========================================================                                                                                           |  38%
  |                                                                                                                                                         
  |=========================================================                                                                                          |  39%
  |                                                                                                                                                         
  |==============================================================                                                                                     |  42%
  |                                                                                                                                                         
  |===============================================================                                                                                    |  43%
  |                                                                                                                                                         
  |==================================================================                                                                                 |  45%
  |                                                                                                                                                         
  |====================================================================                                                                               |  46%
  |                                                                                                                                                         
  |======================================================================                                                                             |  48%
  |                                                                                                                                                         
  |=========================================================================                                                                          |  49%
  |                                                                                                                                                         
  |=============================================================================                                                                      |  52%
  |                                                                                                                                                         
  |=============================================================================                                                                      |  53%
  |                                                                                                                                                         
  |================================================================================                                                                   |  54%
  |                                                                                                                                                         
  |================================================================================                                                                   |  55%
  |                                                                                                                                                         
  |=================================================================================                                                                  |  55%
  |                                                                                                                                                         
  |===================================================================================                                                                |  56%
  |                                                                                                                                                         
  |===================================================================================                                                                |  57%
  |                                                                                                                                                         
  |====================================================================================                                                               |  57%
  |                                                                                                                                                         
  |=====================================================================================                                                              |  58%
  |                                                                                                                                                         
  |========================================================================================                                                           |  60%
  |                                                                                                                                                         
  |=========================================================================================                                                          |  60%
  |                                                                                                                                                         
  |=========================================================================================                                                          |  61%
  |                                                                                                                                                         
  |===========================================================================================                                                        |  62%
  |                                                                                                                                                         
  |============================================================================================                                                       |  62%
  |                                                                                                                                                         
  |==============================================================================================                                                     |  64%
  |                                                                                                                                                         
  |=================================================================================================                                                  |  66%
  |                                                                                                                                                         
  |===================================================================================================                                                |  68%
  |                                                                                                                                                         
  |======================================================================================================                                             |  70%
  |                                                                                                                                                         
  |=========================================================================================================                                          |  72%
  |                                                                                                                                                         
  |===========================================================================================================                                        |  73%
  |                                                                                                                                                         
  |=============================================================================================================                                      |  74%
  |                                                                                                                                                         
  |=================================================================================================================                                  |  77%
  |                                                                                                                                                         
  |====================================================================================================================                               |  79%
  |                                                                                                                                                         
  |=======================================================================================================================                            |  81%
  |                                                                                                                                                         
  |==========================================================================================================================                         |  83%
  |                                                                                                                                                         
  |=============================================================================================================================                      |  85%
  |                                                                                                                                                         
  |===============================================================================================================================                    |  86%
  |                                                                                                                                                         
  |================================================================================================================================                   |  87%
  |                                                                                                                                                         
  |===================================================================================================================================                |  89%
  |                                                                                                                                                         
  |=====================================================================================================================================              |  91%
  |                                                                                                                                                         
  |=========================================================================================================================================          |  93%
  |                                                                                                                                                         
  |============================================================================================================================================       |  95%
  |                                                                                                                                                         
  |=================================================================================================================================================  |  99%
  |                                                                                                                                                         
  |===================================================================================================================================================| 100%
LS0tCnRpdGxlOiAiTWVldGluZyBFeGFtcGxlcyAtIENvbXBsZXRlIgphdXRob3I6ICJDaHJpc3RvcGhlciBQcmVuZXIsIFBoRCIKZGF0ZTogJyhgciBmb3JtYXQoU3lzLnRpbWUoKSwgIiVCICVkLCAlWSIpYCknCm91dHB1dDogCiAgZ2l0aHViX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdCAKLS0tCgpgYGB7ciBzZXR1cH0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGNhY2hlID0gRkFMU0UpCmBgYAoKIyMgSW50cm9kdWN0aW9uClRoaXMgbm90ZWJvb2sgaWxsdXN0cmF0ZXMgZGF0YSBhY2Nlc3MgdGhyb3VnaCBib3RoIGB0aWdyaXNgIGFuZCBgdGlkeWNlbnN1c2AgYXMgd2VsbCBhcyBqb2lucyB1c2luZyBgZHBseXJgLgoKIyMgRGVwZW5kZW5jaWVzClRoaXMgbm90ZWJvb2sgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBwYWNrYWdlczoKCmBgYHtyIGxvYWQtcGFja2FnZXN9CiMgdGlkeXZlcnNlIHBhY2thZ2VzCmxpYnJhcnkoZHBseXIpICAgICAgICMgZGF0YSB3cmFuZ2xpbmcKCiMgc3BhdGlhbCBwYWNrYWdlcwpsaWJyYXJ5KG1hcHZpZXcpICAgICAjIHByZXZpZXcgZ2VvbWV0cmljIGRhdGEKbGlicmFyeShzZikgICAgICAgICAgIyBzcGF0aWFsIHRvb2xzCmxpYnJhcnkodGlkeWNlbnN1cykgICMgZGVtb2dyYXBoaWMgZGF0YQpsaWJyYXJ5KHRpZ3JpcykgICAgICAjIHRpZ2VyL2xpbmUgZGF0YQoKIyBvdGhlciBwYWNrYWdlcwpsaWJyYXJ5KGhlcmUpICAgICAgICAjIGZpbGUgcGF0aCBtYW5hZ2VtZW50CmBgYAoKIyMgdGlkeWNlbnN1cyBTZXQtdXAKQmVmb3JlIHVzaW5nIGB0aWR5Y2Vuc3VzYCwgeW91IG5lZWQgdG8gaW5zdGFsbCBhIGNlbnN1cyBBUEkga2V5LiBVc2UgdGhlIHN5bnRheCBiZWxvdywgY29waWVkIGludG8geW91ciBjb25zb2xlLCB0byBpbnN0YWxsIHRoZSBrZXkgeW91IHJlY2VpdmVkIHZpYSBlbWFpbC4KCmBgYHIKY2Vuc3VzX2FwaV9rZXkoIktFWSIsIGluc3RhbGwgPSBUUlVFKQpgYGAKClRoaXMgaXMgbm90IGEgY29kZSBjaHVuayB5b3Ugd2lsbCBuZWVkIGluIGVhY2ggbm90ZWJvb2suIEFzIGxvbmcgYXMgYGluc3RhbGwgPSBUUlVFYCwgeW91IHdpbGwgb25seSBoYXZlIHRvIGRvIHRoaXMgb25jZSEKCiMjIERlY2VubmlhbCBDZW5zdXMgRGF0YQojIyMgR2V0IExpc3Qgb2YgVmFyaWFibGVzClRvIGdldCBhIHByZXZpZXcgb2YgdmFyaWFibGVzIGF2YWlsYWJsZSBpbiB0aGUgYGdldF9kZWNlbm5pYWwoKWAgZnVuY3Rpb24sIHdlIGNhbiB1c2UgdGhlIGBsb2FkX3ZhcmlhYmxlcygpYCBmdW5jdGlvbjoKCmBgYHtyIHByZXZpZXctY2Vuc3VzfQpjZW5zdXMgPC0gbG9hZF92YXJpYWJsZXMoeWVhciA9IDIwMDAsIGRhdGFzZXQgPSAic2YxIikgCmBgYAoKSSBmaW5kIGl0IHVzZWZ1bCB0byBhc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIGZ1bmN0aW9uIHRvIGFuIG9iamVjdCBzbyB0aGF0IEkgY2FuIHNlYXJjaCB0aHJvdWdoIGl0LiBUcnkgc2VhcmNoaW5nIGZvciB0aGUgdmFyaWFibGUgYFAwMDEwMDAxYCwgdGhlIHRvdGFsIHBvcHVsYXRpb24gb2YgYSBnZW9ncmFwaGljIHVuaXQsIGluIHRoZSBgY2Vuc3VzYCBvYmplY3QuCgojIyMgRG93bmxvYWQgYSBTaW5nbGUgVmFyaWFibGUKVG8gZG93bmxvYWQgZGF0YSwgd2UgY2FuIHVzZSB1c2UgdGhlIGBnZXRfZGVjZW5uaWFsKClgIGZ1bmN0aW9uIHRvIGFjY2VzcywgZm9yIGV4YW1wbGUsIHBvcHVsYXRpb24gYnkgc3RhdGUgaW4gMjAwMDoKCmBgYHtyIGNlbnN1cy1zdGF0ZS1wb3AsIHJlc3VsdHMgPSAiaGlkZSJ9CnBvcFN0YXRlcyA8LSBnZXRfZGVjZW5uaWFsKGdlb2dyYXBoeSA9ICJzdGF0ZSIsIHllYXIgPSAyMDAwLCB2YXJpYWJsZSA9ICJQMDAxMDAxIikKYGBgCgpBIGZ1bGwgbGlzdCBvZiB0aGUgZ2VvZ3JhcGhpZXMgYXZhaWxhYmxlIGluIGB0aWR5Y2Vuc3VzYCBjYW4gYmUgZm91bmQgW2hlcmVdKGh0dHBzOi8vd2Fsa2VyLWRhdGEuY29tL3RpZHljZW5zdXMvYXJ0aWNsZXMvYmFzaWMtdXNhZ2UuaHRtbCNnZW9ncmFwaHktaW4tdGlkeWNlbnN1cy0xKS4KCiMjIyBEb3dubG9hZCBhIEZ1bGwgVGFibGUKTW9zdCB2YXJpYWJsZXMgaW4gdGhlIGRlY2VubmlhbCBjZW5zdXMgYXJlIGFjdHVhbGx5IGEgcGFydCBvZiBhIHRhYmxlLiBUaGVyZSBhcmUgaW5kaXZpZHVhbCB2YXJpYWJsZXMsIGZvciBleGFtcGxlLCBmb3IgcmFjZToKCmBgYHtyIHNob3ctdmFyaWFibGVzfQpjZW5zdXMgJT4lCiAgZmlsdGVyKGNvbmNlcHQgPT0gIlAzLiBSQUNFIFs4XSIpCmBgYAoKV2UgcmFyZWx5IHdhbnQgdG8gZG93bmxvYWQgdGhlc2Ugb25lIGF0IGEgdGltZS4gSW5zdGVhZCwgd2Ugd2FudCB0byBkb3dubG9hZCB0aGVtIGF0IG9uZSB0aW1lIGludG8gYSBzaW5nbGUgZGF0YSBmcmFtZS4gVGhlIHRhYmxlIG51bWJlciBmb3IgdGhlc2UgZGF0YSBpcyBgUDAwM2AgLSB3ZSB0YWtlIHRoZSBmaXJzdCBmb3VyIGNoYXJhY3RlcnMgZnJvbSB0aGUgYG5hbWVgIHZhcmlhYmxlLgoKYGBge3IgY2Vuc3VzLXN0bC1yYWNlLCByZXN1bHRzID0gImhpZGUifQpjaXR5UmFjZTAwIDwtIGdldF9kZWNlbm5pYWwoZ2VvZ3JhcGh5ID0gInRyYWN0IiwgeWVhciA9IDIwMDAsIHN0YXRlID0gMjksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHkgPSAiNTEwIiwgdGFibGUgPSAiUDAwMyIsIG91dHB1dCA9ICJ3aWRlIikKYGBgCgpXZSd2ZSB1c2VkIHRoZSBGSVBTIGNvZGVzIGZvciBib3RoIE1pc3NvdXJpIChgMjlgKSBhbmQgU3QuIExvdWlzIENpdHkgKGAyOTUxMGApIGhlcmUgLSB5b3UgY2FuIGZpbmQgYSBmdWxsIGxpc3Qgb2YgTWlzc291cmkgY291bnRpZXMgW2hlcmVdKGh0dHBzOi8vd3d3Lm1zZGlzLm1pc3NvdXJpLmVkdS9yZXNvdXJjZXMvZmlwcy5odG1sKS4KCiMjIyBBZGQgR2VvbWV0cnkKVGhlIGB0aWR5Y2Vuc3VzYCBwYWNrYWdlIGFsc28gaW5jbHVkZXMgdG9vbHMgZm9yIGRvd25sb2FkaW5nIHRoZSBnZW9tZXRyaWVzIGZvciB0aGVzZSBkYXRhIGFzIHdlbGwuIEZvciBpbnN0YW5jZSwgd2UgY2FuIGFkZCBnZW9tZXRyaWMgZGF0YSB0byBvdXIgcHJldmlvdXMgY2FsbCBmb3IgQ2l0eSBvZiBTdC4gTG91aXMgdHJhY3QtbGV2ZWwgZGF0YSBvbiByYWNlIGJ5IGFkZGluZyB0aGUgYGdlb21ldHJ5ID0gVFJVRWAgYXJndW1lbnQ6CgpgYGB7cn0KIyMgZG93bmxvYWQKY2l0eVJhY2UwMCA8LSBnZXRfZGVjZW5uaWFsKGdlb2dyYXBoeSA9ICJ0cmFjdCIsIHllYXIgPSAyMDAwLCBzdGF0ZSA9IDI5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnR5ID0gIjUxMCIsIHRhYmxlID0gIlAwMDMiLCBvdXRwdXQgPSAid2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeSA9IFRSVUUpCgojIyBwcmV2aWV3Cm1hcHZpZXcoY2l0eVJhY2UwMCwgemNvbCA9ICJQMDAzMDA1IikKYGBgCgpOb3RpY2UgaG93IEkgdXNlZCB0aGUgYHpjb2xgIGFyZ3VtZW50IGZvciBgbWFwdmlldygpYCB0byBwcmV2aWV3IGEgc3BlY2lmaWMgc2V0IG9mIGRhdGEgYXMgYSB0aGVtYXRpYyBsYXllciBvbiB0aGUgbWFwISBUaGVzZSBkYXRhIGFyZSBub3Qgbm9ybWFsaXplZCwgYnV0IHdlIGRvIGdldCBhIHF1aWNrIHByZXZpZXcgb2YgdGhlIGRpc3RyaWJ1dGlvbiBvZiBBc2lhbiByZXNpZGVudHMgaW4gU3QuIExvdWlzIENpdHkuCgojIyBEZWNlbm5pYWwgQ2Vuc3VzIERhdGEKIyMjIEdldCBMaXN0IG9mIFZhcmlhYmxlcwpUbyBnZXQgYSBwcmV2aWV3IG9mIHZhcmlhYmxlcyBhdmFpbGFibGUgaW4gdGhlIGBnZXRfYWNzKClgIGZ1bmN0aW9uLCB3ZSBjYW4gdXNlIHRoZSBgbG9hZF92YXJpYWJsZXMoKWAgZnVuY3Rpb24gYWdhaW4uIFdlJ2xsIHVzZSBgImFjczUiYCBmb3Igb3VyIGRhdGFzZXQgYW5kLCBmb3IgdGhpcyBleGFtcGxlLCB3ZSdsbCBwdWxsIGZyb20gdGhlIG1vc3QgcmVjZW50IDIwMTkgQUNTIHllYXI6CgpgYGB7ciBwcmV2aWV3LWFjc30KY2Vuc3VzIDwtIGxvYWRfdmFyaWFibGVzKHllYXIgPSAyMDE5LCBkYXRhc2V0ID0gImFjczUiKSAKYGBgCgpUcnkgc2VhcmNoaW5nIGZvciB0aGUgdGFibGUgYEIxOTAxM2AsIHRoZSBtZWRpYW4gaG91c2Vob2xkIGluY29tZSB0YWJsZS4KCiMjIyBHZXQgYW5kIEludGVycHJldCBBQ1MgRGF0YQpXZSdsbCBpbGx1c3RyYXRlIGBnZXRfYWNzKClgIGJ5IHVzaW5nIHRoZSBkYXRhIGluIHRhYmxlIGBCMTkwMTlgLiBGaXJzdCwgd2UnbGwgZG93bmxvYWQgdGhlc2UgZGF0YSBhcyBhIGZ1bGwgdGFibGUgZm9yIGFsbCBjb3VudGllcyBpbiBNaXNzb3VyaToKCmBgYHtyIG1lZGlhbi1pbmNvbWUtMX0KIyMgZG93bmxvYWQKY291bnR5SW5jb21lIDwtIGdldF9hY3MoZ2VvZ3JhcGh5ID0gImNvdW50eSIsIHllYXIgPSAyMDE5LCBzdGF0ZSA9IDI5LAogICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSA9ICJCMTkwMTkiLCBvdXRwdXQgPSAid2lkZSIsIGdlb21ldHJ5ID0gVFJVRSkKCiMjIHByZXZpZXcKbWFwdmlldyhjb3VudHlJbmNvbWUsIHpjb2wgPSAiQjE5MDE5XzAwMUUiKQpgYGAKCk5vdGljZSBob3cgd2UgbmVlZGVkIHRvIHNwZWNpZnkgYF8wMDFFYCBmb3IgYHpjb2xgLiBUaGF0IHJlZmVyZW5jZXMgdGhlIHNwZWNpZmljIHZhcmlhYmxlIHdlIHdhbnQgdG8gbWFwIC0gdmFyaWFibGUgMSBpbiB0aGUgdGFibGUncyBlc3RpbWF0ZSAob3IgYEVgKS4gVGhlIGBNYCB2YWx1ZXMgcmVmZXIgdG8gdGhlIG1hcmdpbiBvZiB0aGUgZXJyb3IgLSB3ZSBleHBlY3QgdGhpcyBlc3RpbWF0ZSB0byBiZSBvZmYgYnkgc29tZSBhbW91bnQgd2l0aGluICsvLSB0aGlzIHZhbHVlLgoKV2UgY2FuIGFsc28gZG93bmxvYWQgYSBzcGVjaWZpYyBjb2x1bW4sIGxpa2UgdGhlIG1lZGlhbiBpbmNvbWUgZm9yIG9uZS1wZXJzb24gaG91c2Vob2xkcyAoYEIxOTAxOV8wMDJgKToKCmBgYHtyIG1lZGlhbi1pbmNvbWUtMn0KIyMgZG93bmxvYWQKY291bnR5SW5jb21lIDwtIGdldF9hY3MoZ2VvZ3JhcGh5ID0gImNvdW50eSIsIHllYXIgPSAyMDE5LCBzdGF0ZSA9IDI5LAogICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgPSAiQjE5MDE5XzAwMiIsIG91dHB1dCA9ICJ3aWRlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5ID0gVFJVRSkKCiMjIHByZXZpZXcKbWFwdmlldyhjb3VudHlJbmNvbWUsIHpjb2wgPSAiQjE5MDE5XzAwMkUiKQpgYGAKCiMjIENvbWJpbmluZyBEYXRhIFNvdXJjZXMKUGVyaGFwcyB3ZSBoYXZlIGEgcmFuZ2Ugb2YgZGF0YSB0aGF0IHdlIHdhbnQgdG8gaW5jbHVkZS4gRm9yIHRoaXMgZXhhbXBsZSwgd2UnbGwgZG93bmxvYWQgZGF0YSBvbiBtZWRpYW4gaW5jb21lIGFuZCB0aGUgcHJvcG9ydGlvbiBvZiB3b21lbiBpbiB0cmFjdHMgaW4gQm9vbmUgQ291bnR5LCBNaXNzb3VyaS4gV2UnbGwgZG93bmxvYWQgdGhlIGluY29tZSBkYXRhIHdpdGggYGdlb21ldHJ5ID0gVFJVRWAgYW5kIHRoZSBzZXggZGF0YSB3aXRoIGBnZW9tZXRyeSA9IEZBTFNFYDoKCmBgYHtyIGRvd25sb2FkLWJvb25lfQojIyBkb3dubG9hZApib29uZUluY29tZSA8LSBnZXRfYWNzKGdlb2dyYXBoeSA9ICJ0cmFjdCIsIHllYXIgPSAyMDE5LCBzdGF0ZSA9IDI5LAogICAgICAgICAgICAgICAgICAgICAgIGNvdW50eSA9ICIwMTkiLCB2YXJpYWJsZXMgPSAiQjE5MDE5XzAwMSIsIAogICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICJ3aWRlIiwgZ2VvbWV0cnkgPSBUUlVFKSAlPiUKICByZW5hbWUobWVkaWFuX2luY29tZSA9IEIxOTAxOV8wMDFFKSAlPiUKICBzZWxlY3QoR0VPSUQsIG1lZGlhbl9pbmNvbWUpCgojIyBkb3dubG9hZApib29uZVNleCA8LSBnZXRfYWNzKGdlb2dyYXBoeSA9ICJ0cmFjdCIsIHllYXIgPSAyMDE5LCBzdGF0ZSA9IDI5LAogICAgICAgICAgICAgICAgICAgICAgIGNvdW50eSA9ICIwMTkiLCB2YXJpYWJsZXMgPSBjKCJCMDEwMDFfMDAxIiwgIkIwMTAwMV8wMjYiKSwKICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAid2lkZSIpICU+JQogIG11dGF0ZShwY3Rfd29tZW4gPSBCMDEwMDFfMDI2RS9CMDEwMDFfMDAxRSoxMDApICU+JQogIHNlbGVjdChHRU9JRCwgcGN0X3dvbWVuKQpgYGAKClRvIGNvbWJpbmUgdGhlc2UgZGF0YSwgd2UnbGwgdXNlIGBsZWZ0X2pvaW4oKWAgZnJvbSBgZHBseXJgLiBPdXIgYHNmYCBvYmplY3Qgc2hvdWxkIGFsd2F5cyBiZSB0aGUgZmlyc3Qgb2JqZWN0IGluIHRoZSBqb2luICh0aGUgYHhgIGRhdGEpIGFuZCBvdXIgbm9uLXNmIGRhdGEgc2hvdWxkIGJlIHRoZSBzZWNvbmQgZGF0YSAodGhlIGB5YCBkYXRhKToKCmBgYHtyIGJvb25lLWpvaW59CmJvb25lIDwtIGxlZnRfam9pbihib29uZUluY29tZSwgYm9vbmVTZXgsIGJ5ID0gIkdFT0lEIikKYGBgCgpUaHJlZSBjb21tb24gaXNzdWVzIGFyaXNlOgoKICAxLiBUaGUgSUQgY29sdW1ucyBhcmUgbmFtZWQgZGlmZmVyZW50bHk6IGBieSA9IGMoIkdFT0lEIiA9ICJnZW9pZCIpYAogIDIuIFRoZSBJRCBjb2x1bW5zIGFyZSBkaWZmZXJlbnQgdHlwZTogYGJvb25lSW5jb21lIDwtIG11dGF0ZShHRU9JRCA9IGFzLm51bWVyaWMoR0VPSUQpKWAKICAzLiBCb3RoIG9iamVjdHMgYXJlIGBzZmAgb2JqZWN0czogYHN0X2dlb21ldHJ5KGJvb25lU0VYKSA8LSBOVUxMYAoKIyMgVXNpbmcgVGlncmlzClRvIGdldCBkYXRhIGZyb20gdGhlIFRJR0VSL2xpbmUgZGF0YWJhc2UsIHdlIGNhbiB1c2UgdGhlIGB0aWdyaXNgIHBhY2thZ2UuIFlvdSBjYW4gc2VlIGEgZnVsbCBsaXN0IG9mIHRoZSBkYXRhIGF2YWlsYWJsZSBbaGVyZV0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3RpZ3Jpcy90aWdyaXMucGRmKS4KCiMjIyBTdGF0ZSBEYXRhCldlIGNhbiBkb3dubG9hZCBhIGdlbmVyYWxpemVkIHZlcnNpb24sIHdoaWNoIHNtb290aHMgb3V0IHN0YXRlIGJvdW5kYXJpZXMgc28gdGhhdCB0aGUgb3ZlcmFsbCBpbWFnZSBpcyBib3RoIHNtYWxsZXIgaW4gZGlzayBzaXplIGFuZCAoc29tZXRpbWVzKSBlYXNpZXIgdG8gcmVhZC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaGVscGZ1bCBpZiB5b3UgYXJlIG1ha2luZyBzbWFsbCBzY2FsZSBtYXBzIG9mIHRoZSBlbnRpcmUgVW5pdGVkIFN0YXRlcy4gV2UnbGwgZ2V0IHRoZXNlIGRhdGEgYXQgdGhlICIyMG0iIHJlc29sdXRpb24gdXNpbmcgdGhlIGBzdGF0ZXMoKWAgZnVuY3Rpb246IAoKYGBge3IgZ2V0LXN0YXRlc30Kc3RhdGVzIDwtIHN0YXRlcyhjYiA9IFRSVUUsIHJlc29sdXRpb24gPSAiMjBtIikKYGBgCgojIyMgQ291bnR5IERhdGEKTm93LCB3ZSdsbCBnZXQgbW9yZSBkZXRhaWxlZCBkYXRhIC0gYWxsIG9mIHRoZSBjb3VudHkgYm91bmRhcmllcyBmb3IgTWlzc291cmkuIFdlJ2xsIHVzZSB0aGUgYGNvdW50aWVzKClgIGZ1bmN0aW9uIHVzaW5nIGEgc2xpZ2h0bHkgbGVzcyBnZW5lcmFsaXplZCByZXNvbHV0aW9uLCAiNW0iOgoKYGBge3IgZ2V0LWNvdW50aWVzfQptb0NvdW50aWVzIDwtIGNvdW50aWVzKGNiID0gVFJVRSwgcmVzb2x1dGlvbiA9ICI1bSIpCmBgYAoKIyMjIFRyYWN0IERhdGEKTm93LCB3ZSdsbCBnZXQgZXZlbiBtb3JlIGRldGFpbGVkIGRhdGEgLSBhbGwgb2YgdGhlIHRyYWN0IGJvdW5kYXJpZXMgZm9yIFN0LiBDaGFybGVzIENvdW50eSwgTWlzc291cmkuIFdlJ2xsIHVzZSB0aGUgYHRyYWN0cygpYCBmdW5jdGlvbiB3aXRoIGBjYiA9IEZBTFNFYCBieSBkZWZhdWx0OgoKYGBge3IgZ2V0LXRyYWN0c30Kc3RDaGFybGVzVHJhY3RzIDwtIHRyYWN0cyhzdGF0ZSA9IDI5LCBjb3VudHkgPSAxODMpCmBgYAoKYGBge3IgbW92ZS10by1kb2NzLCBpbmNsdWRlPUZBTFNFfQojIHlvdSBkbyBuZWVkIHRvIGluY2x1ZGUgdGhpcyBpbiBhbnkgbm90ZWJvb2sgeW91IGNyZWF0ZSBmb3IgdGhpcyBjbGFzcwpmczo6ZmlsZV9jb3B5KGhlcmU6OmhlcmUoImV4YW1wbGVzIiwgIm1lZXRpbmctMi0yLWV4YW1wbGVzLWNvbXBsZXRlLm5iLmh0bWwiKSwgCiAgICAgICAgICAgICAgaGVyZTo6aGVyZSgiZG9jcyIsICJpbmRleC5uYi5odG1sIiksIAogICAgICAgICAgICAgIG92ZXJ3cml0ZSA9IFRSVUUpCmBgYA==