# Create a clipboard button on the rendered HTML page
source(here::here("clipboard.R")); clipboard
# Set seed for reproducibility
set.seed(1982)
# Set global options for all code chunks
knitr::opts_chunk$set(
# Disable messages printed by R code chunks
message = FALSE,
# Disable warnings printed by R code chunks
warning = FALSE,
# Show R code within code chunks in output
echo = TRUE,
# Include both R code and its results in output
include = TRUE,
# Evaluate R code chunks
eval = TRUE,
# Enable caching of R code chunks for faster rendering
cache = FALSE,
# Align figures in the center of the output
fig.align = "center",
# Enable retina display for high-resolution figures
retina = 2,
# Show errors in the output instead of stopping rendering
error = TRUE,
# Do not collapse code and output into a single block
collapse = FALSE
)
# Start the figure counter
fig_count <- 0
# Define the captioner function
captioner <- function(caption) {
fig_count <<- fig_count + 1
paste0("Figure ", fig_count, ": ", caption)
}
library(sf)
library(tmap)
library(mapview)
library(dplyr)
# set mapview options
mapviewOptions(basemaps = c("CartoDB.Positron",
"OpenStreetMap",
"Esri.WorldImagery",
"OpenTopoMap"))
Introduction
In this section, we will explore the amenities available in the
Geodatabase Nacional of Ecuador. The data was obtained from this website.
On the page, go to the bottom section (called Cartografia Historica) of
the page and click on 2022
and then on the
Descarga de Marco Geoestadístico 2021
button. This will
download a file named GEODATABASE_NACIONAL_2021.zip
. Unzip
the file and you will find a folder named
GEODATABASE_NACIONAL_2021
. Inside this folder, there is a
file named GEODATABASE_NACIONAL_2021.gpkg
, which is a
geopackage file containing several (9) layers. Using the manabi_area_simple.RDS
file, I filtered the contents of each layer.
By the way, the number of the layers are:
LAYERS_name <- c("viv_p", "ejes_l", "zon_a", "sec_a", "loc_p", "ingresos_l", "ca04_a", "aream_a", "man_a")
Most of the layers do not contain useful information for our
purposes. Here are some details about the layers:
aream_a
: This layer seems to contain the head of the
administrative areas as polygons, such as provinces, cantons, and
parishes.
loc_p
: This layer contains the locations of small towns
and villages, apparently.
ca04_a
: This layer contains the locations of amenities,
such as schools, hospitals, and other public buildings.
area_of_interest <- readRDS("clean_data/manabi_area_simple.RDS")
p <- mapview(
area_of_interest,
zcol = "geometry", # attribute used for fill
alpha.regions = 0, # fill transparency
color = "black", # border color
alpha = 0.4, # border transparency
legend = FALSE # remove legend
)
layer
aream_a
aream_a <- readRDS("clean_data/aream_a_cropped_to_manabi.RDS")
mapview(
aream_a,
zcol = "tipo_aream", # attribute used for fill
alpha.regions = 0.4, # fill transparency
color = "black", # border color
alpha = 1, # border transparency
legend = TRUE # remove legend
) + p
layer
loc_p
loc_p <- readRDS("clean_data/loc_p_cropped_to_manabi.RDS")
mapview(
loc_p,
zcol = "n_loc", # attribute used for fill
alpha.regions = 0.4, # fill transparency
color = "black", # border color
alpha = 0.2, # border transparency
cex = 1.5, # points size
legend = FALSE # remove legend
) + p
layer
ca04_a
# ca04_a <- readRDS("clean_data/ca04_a_cropped_to_manabi.RDS")
# amn <- unique(ca04_a$cod_otros) # check the unique values of the cod_otros column
# amn
# [1] NA "EDIFICIO EDUCACIONAL" "TEMPLO RELIGIOSO"
# [4] "CASA COMUNAL" "EDIFICIO IMPORTANTE" "EDIFICIO DE REFERENCIA"
# [7] "CAMPO DEPORTIVO" "CEMENTERIO" "GASOLINERA"
# [10] "ESTABLECIMIENTO DE SALUD" "PARQUE" "PLAZA"
# [13] "TANQUE DE AGUA" "EDIFICIO REFERENCIA"
# for (i in 2:length(amn)) {
# aux <- filter(ca04_a, cod_otros == amn[i])
# saveRDS(aux, paste0("clean_data/amn_", gsub(" ", "_", amn[i]), ".RDS"))
# }
Here we can see the EDIFICIO EDUCACIONAL
amenities.
amn_EDIFICIO_EDUCACIONAL <- readRDS("clean_data/amn_EDIFICIO_EDUCACIONAL.RDS")
mapview(
amn_EDIFICIO_EDUCACIONAL,
zcol = "nom_edif", # attribute used for fill
alpha.regions = 0.4, # fill transparency
color = "black", # border color
alpha = 1, # border transparency
legend = FALSE # remove legend
) + p
References
grateful::cite_packages(output = "paragraph", out.dir = ".")
We used R version 4.5.0 (R Core Team
2025) and the following R packages: here v. 1.0.1 (Müller 2020), htmltools v. 0.5.8.1 (Cheng et al. 2024), knitr v. 1.50 (Xie 2014, 2015, 2025), mapview v. 2.11.2 (Appelhans et al. 2023), osmextract v. 0.5.3
(Gilardi and Lovelace 2025), plotly v.
4.11.0 (Sievert 2020), renv v. 1.1.5 (Ushey and Wickham 2025), rmarkdown v. 2.29
(Xie, Allaire, and Grolemund 2018; Xie, Dervieux,
and Riederer 2020; Allaire et al. 2024), sf v. 1.0.21 (Pebesma 2018; Pebesma and Bivand 2023),
tidyverse v. 2.0.0 (Wickham et al. 2019),
tmap v. 4.1 (Tennekes 2018), xaringanExtra
v. 0.8.0 (Aden-Buie and Warkentin
2024).
Allaire, JJ, Yihui Xie, Christophe Dervieux, Jonathan McPherson, Javier
Luraschi, Kevin Ushey, Aron Atkins, et al. 2024.
rmarkdown: Dynamic Documents for r.
https://github.com/rstudio/rmarkdown.
Appelhans, Tim, Florian Detsch, Christoph Reudenbach, and Stefan
Woellauer. 2023.
mapview: Interactive
Viewing of Spatial Data in r.
https://github.com/r-spatial/mapview.
Müller, Kirill. 2020.
here: A Simpler
Way to Find Your Files.
https://doi.org/10.32614/CRAN.package.here.
Pebesma, Edzer. 2018.
“Simple Features for R:
Standardized Support for Spatial Vector Data.”
The R Journal 10 (1): 439–46.
https://doi.org/10.32614/RJ-2018-009.
Pebesma, Edzer, and Roger Bivand. 2023.
Spatial
Data Science: With applications in R.
Chapman and
Hall/CRC.
https://doi.org/10.1201/9780429459016.
R Core Team. 2025.
R: A Language and Environment for
Statistical Computing. Vienna, Austria: R Foundation for
Statistical Computing.
https://www.R-project.org/.
Sievert, Carson. 2020.
Interactive Web-Based Data Visualization with
r, Plotly, and Shiny. Chapman; Hall/CRC.
https://plotly-r.com.
Tennekes, Martijn. 2018.
“tmap:
Thematic Maps in R.” Journal of Statistical
Software 84 (6): 1–39.
https://doi.org/10.18637/jss.v084.i06.
Ushey, Kevin, and Hadley Wickham. 2025.
renv: Project Environments.
https://rstudio.github.io/renv/.
Wickham, Hadley, Mara Averick, Jennifer Bryan, Winston Chang, Lucy
D’Agostino McGowan, Romain François, Garrett Grolemund, et al. 2019.
“Welcome to the tidyverse.”
Journal of Open Source Software 4 (43): 1686.
https://doi.org/10.21105/joss.01686.
Xie, Yihui. 2014. “knitr: A
Comprehensive Tool for Reproducible Research in R.”
In Implementing Reproducible Computational Research, edited by
Victoria Stodden, Friedrich Leisch, and Roger D. Peng. Chapman;
Hall/CRC.
———. 2015.
Dynamic Documents with R and Knitr. 2nd
ed. Boca Raton, Florida: Chapman; Hall/CRC.
https://yihui.org/knitr/.
———. 2025.
knitr: A General-Purpose
Package for Dynamic Report Generation in R.
https://yihui.org/knitr/.
Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018.
R Markdown:
The Definitive Guide. Boca Raton, Florida: Chapman; Hall/CRC.
https://bookdown.org/yihui/rmarkdown.
Xie, Yihui, Christophe Dervieux, and Emily Riederer. 2020.
R
Markdown Cookbook. Boca Raton, Florida: Chapman; Hall/CRC.
https://bookdown.org/yihui/rmarkdown-cookbook.
LS0tCnRpdGxlOiAiQW1lbml0aWVzIGZyb20gR2VvZGF0YWJhc2UgTmFjaW9uYWwiCmRhdGU6ICJMYXN0IG1vZGlmaWVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkLSVtLSVZLicpYCIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBtYXRoamF4OiAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tYXRoamF4QDMvZXM1L3RleC1tbWwtY2h0bWwuanMiCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzCiAgICB0aGVtZTogZmxhdGx5CiAgICBjb2RlX2ZvbGRpbmc6IHNob3cgIyBjbGFzcy5zb3VyY2UgPSAiZm9sZC1oaWRlIiB0byBoaWRlIGNvZGUgYW5kIGFkZCBhIGJ1dHRvbiB0byBzaG93IGl0CiAgICBkZl9wcmludDogcGFnZWQKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IHRydWUKICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY3NzOiB2aXN1YWwuY3NzCmFsd2F5c19hbGxvd19odG1sOiB0cnVlCmJpYmxpb2dyYXBoeTogCiAgLSByZWZlcmVuY2VzLmJpYgogIC0gZ3JhdGVmdWwtcmVmcy5iaWIKLS0tCgpgYGB7cn0KIyBDcmVhdGUgYSBjbGlwYm9hcmQgYnV0dG9uIG9uIHRoZSByZW5kZXJlZCBIVE1MIHBhZ2UKc291cmNlKGhlcmU6OmhlcmUoImNsaXBib2FyZC5SIikpOyBjbGlwYm9hcmQKIyBTZXQgc2VlZCBmb3IgcmVwcm9kdWNpYmlsaXR5CnNldC5zZWVkKDE5ODIpIAojIFNldCBnbG9iYWwgb3B0aW9ucyBmb3IgYWxsIGNvZGUgY2h1bmtzCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICAjIERpc2FibGUgbWVzc2FnZXMgcHJpbnRlZCBieSBSIGNvZGUgY2h1bmtzCiAgbWVzc2FnZSA9IEZBTFNFLCAgICAKICAjIERpc2FibGUgd2FybmluZ3MgcHJpbnRlZCBieSBSIGNvZGUgY2h1bmtzCiAgd2FybmluZyA9IEZBTFNFLCAgICAKICAjIFNob3cgUiBjb2RlIHdpdGhpbiBjb2RlIGNodW5rcyBpbiBvdXRwdXQKICBlY2hvID0gVFJVRSwgICAgICAgIAogICMgSW5jbHVkZSBib3RoIFIgY29kZSBhbmQgaXRzIHJlc3VsdHMgaW4gb3V0cHV0CiAgaW5jbHVkZSA9IFRSVUUsICAgICAKICAjIEV2YWx1YXRlIFIgY29kZSBjaHVua3MKICBldmFsID0gVFJVRSwgICAgICAgCiAgIyBFbmFibGUgY2FjaGluZyBvZiBSIGNvZGUgY2h1bmtzIGZvciBmYXN0ZXIgcmVuZGVyaW5nCiAgY2FjaGUgPSBGQUxTRSwgICAgICAKICAjIEFsaWduIGZpZ3VyZXMgaW4gdGhlIGNlbnRlciBvZiB0aGUgb3V0cHV0CiAgZmlnLmFsaWduID0gImNlbnRlciIsCiAgIyBFbmFibGUgcmV0aW5hIGRpc3BsYXkgZm9yIGhpZ2gtcmVzb2x1dGlvbiBmaWd1cmVzCiAgcmV0aW5hID0gMiwKICAjIFNob3cgZXJyb3JzIGluIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiBzdG9wcGluZyByZW5kZXJpbmcKICBlcnJvciA9IFRSVUUsCiAgIyBEbyBub3QgY29sbGFwc2UgY29kZSBhbmQgb3V0cHV0IGludG8gYSBzaW5nbGUgYmxvY2sKICBjb2xsYXBzZSA9IEZBTFNFCikKIyBTdGFydCB0aGUgZmlndXJlIGNvdW50ZXIKZmlnX2NvdW50IDwtIDAKIyBEZWZpbmUgdGhlIGNhcHRpb25lciBmdW5jdGlvbgpjYXB0aW9uZXIgPC0gZnVuY3Rpb24oY2FwdGlvbikgewogIGZpZ19jb3VudCA8PC0gZmlnX2NvdW50ICsgMQogIHBhc3RlMCgiRmlndXJlICIsIGZpZ19jb3VudCwgIjogIiwgY2FwdGlvbikKfQpgYGAKCgpgYGB7cn0KbGlicmFyeShzZikKbGlicmFyeSh0bWFwKQpsaWJyYXJ5KG1hcHZpZXcpCmxpYnJhcnkoZHBseXIpCiMgc2V0IG1hcHZpZXcgb3B0aW9ucwptYXB2aWV3T3B0aW9ucyhiYXNlbWFwcyA9IGMoIkNhcnRvREIuUG9zaXRyb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9wZW5TdHJlZXRNYXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVzcmkuV29ybGRJbWFnZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuVG9wb01hcCIpKQpgYGAKCiMgSW50cm9kdWN0aW9uCgpJbiB0aGlzIHNlY3Rpb24sIHdlIHdpbGwgZXhwbG9yZSB0aGUgYW1lbml0aWVzIGF2YWlsYWJsZSBpbiB0aGUgR2VvZGF0YWJhc2UgTmFjaW9uYWwgb2YgRWN1YWRvci4gVGhlIGRhdGEgd2FzIG9idGFpbmVkIGZyb20gdGhpcyBbd2Vic2l0ZV0oaHR0cHM6Ly93d3cuZWN1YWRvcmVuY2lmcmFzLmdvYi5lYy9kb2N1bWVudG9zL3dlYi1pbmVjL0dlb2dyYWZpYV9Fc3RhZGlzdGljYS9NaWNyb3NpdGlvX2dlb3BvcnRhbC9pbmRleC5odG1sKS4gT24gdGhlIHBhZ2UsIGdvIHRvIHRoZSBib3R0b20gc2VjdGlvbiAoY2FsbGVkIENhcnRvZ3JhZmlhIEhpc3RvcmljYSkgb2YgdGhlIHBhZ2UgYW5kIGNsaWNrIG9uIGAyMDIyYCBhbmQgdGhlbiBvbiB0aGUgYERlc2NhcmdhIGRlIE1hcmNvIEdlb2VzdGFkw61zdGljbyAyMDIxYCBidXR0b24uIFRoaXMgd2lsbCBkb3dubG9hZCBhIGZpbGUgbmFtZWQgYEdFT0RBVEFCQVNFX05BQ0lPTkFMXzIwMjEuemlwYC4gVW56aXAgdGhlIGZpbGUgYW5kIHlvdSB3aWxsIGZpbmQgYSBmb2xkZXIgbmFtZWQgYEdFT0RBVEFCQVNFX05BQ0lPTkFMXzIwMjFgLiBJbnNpZGUgdGhpcyBmb2xkZXIsIHRoZXJlIGlzIGEgZmlsZSBuYW1lZCBgR0VPREFUQUJBU0VfTkFDSU9OQUxfMjAyMS5ncGtnYCwgd2hpY2ggaXMgYSBnZW9wYWNrYWdlIGZpbGUgY29udGFpbmluZyBzZXZlcmFsICg5KSBsYXllcnMuIFVzaW5nIHRoZSBbYG1hbmFiaV9hcmVhX3NpbXBsZS5SRFNgXShodHRwczovL2dpdGh1Yi5jb20vbGVuaW5yYWZhZWxyaWVyYXNlZ3VyYS9tYW5hYmkvYmxvYi9tYWluL2NsZWFuX2RhdGEvbWFuYWJpX2FyZWFfc2ltcGxlLlJEUykgZmlsZSwgSSBmaWx0ZXJlZCB0aGUgY29udGVudHMgb2YgZWFjaCBsYXllci4KCi0tLQoKQnkgdGhlIHdheSwgdGhlIG51bWJlciBvZiB0aGUgbGF5ZXJzIGFyZToKCmBgYHtyfQpMQVlFUlNfbmFtZSA8LSBjKCJ2aXZfcCIsICJlamVzX2wiLCAiem9uX2EiLCAic2VjX2EiLCAibG9jX3AiLCAiaW5ncmVzb3NfbCIsICJjYTA0X2EiLCAiYXJlYW1fYSIsICJtYW5fYSIpCmBgYAoKLS0tCgpNb3N0IG9mIHRoZSBsYXllcnMgZG8gbm90IGNvbnRhaW4gdXNlZnVsIGluZm9ybWF0aW9uIGZvciBvdXIgcHVycG9zZXMuIEhlcmUgYXJlIHNvbWUgZGV0YWlscyBhYm91dCB0aGUgbGF5ZXJzOgoKLSBgYXJlYW1fYWA6IFRoaXMgbGF5ZXIgc2VlbXMgdG8gY29udGFpbiB0aGUgaGVhZCBvZiB0aGUgYWRtaW5pc3RyYXRpdmUgYXJlYXMgYXMgcG9seWdvbnMsIHN1Y2ggYXMgcHJvdmluY2VzLCBjYW50b25zLCBhbmQgcGFyaXNoZXMuCi0gYGxvY19wYDogVGhpcyBsYXllciBjb250YWlucyB0aGUgbG9jYXRpb25zIG9mIHNtYWxsIHRvd25zIGFuZCB2aWxsYWdlcywgYXBwYXJlbnRseS4KLSBgY2EwNF9hYDogVGhpcyBsYXllciBjb250YWlucyB0aGUgbG9jYXRpb25zIG9mIGFtZW5pdGllcywgc3VjaCBhcyBzY2hvb2xzLCBob3NwaXRhbHMsIGFuZCBvdGhlciBwdWJsaWMgYnVpbGRpbmdzLgoKCmBgYHtyfQphcmVhX29mX2ludGVyZXN0IDwtIHJlYWRSRFMoImNsZWFuX2RhdGEvbWFuYWJpX2FyZWFfc2ltcGxlLlJEUyIpCnAgPC0gbWFwdmlldygKICBhcmVhX29mX2ludGVyZXN0LAogIHpjb2wgPSAiZ2VvbWV0cnkiLCAgICAgICAgIyBhdHRyaWJ1dGUgdXNlZCBmb3IgZmlsbAogIGFscGhhLnJlZ2lvbnMgPSAwLCAgICAjIGZpbGwgdHJhbnNwYXJlbmN5CiAgY29sb3IgPSAiYmxhY2siLCAgICAgICAgIyBib3JkZXIgY29sb3IKICBhbHBoYSA9IDAuNCwgICAgICAgICAgICAjIGJvcmRlciB0cmFuc3BhcmVuY3kKICBsZWdlbmQgPSBGQUxTRSAgICAgICAgICAgIyByZW1vdmUgbGVnZW5kCikKYGBgCgojIGxheWVyIGBhcmVhbV9hYAoKCgpgYGB7ciwgb3V0LndpZHRoID0gIjEwMCUiLCBmaWcuY2FwID0gY2FwdGlvbmVyKCJBcmVhIG9mIHRoZSBoZWFkIG9mIHRoZSBhZG1pbmlzdHJhdGl2ZSB1bml0cy4iKX0KYXJlYW1fYSA8LSByZWFkUkRTKCJjbGVhbl9kYXRhL2FyZWFtX2FfY3JvcHBlZF90b19tYW5hYmkuUkRTIikKbWFwdmlldygKICBhcmVhbV9hLAogIHpjb2wgPSAidGlwb19hcmVhbSIsICAgICAgICAjIGF0dHJpYnV0ZSB1c2VkIGZvciBmaWxsCiAgYWxwaGEucmVnaW9ucyA9IDAuNCwgICAgIyBmaWxsIHRyYW5zcGFyZW5jeQogIGNvbG9yID0gImJsYWNrIiwgICAgICAgICMgYm9yZGVyIGNvbG9yCiAgYWxwaGEgPSAxLCAgICAgICAgICAgICMgYm9yZGVyIHRyYW5zcGFyZW5jeQogIGxlZ2VuZCA9IFRSVUUgICAgICAgICAgICMgcmVtb3ZlIGxlZ2VuZAopICsgcApgYGAKCiMgbGF5ZXIgYGxvY19wYAoKCmBgYHtyLCBvdXQud2lkdGggPSAiMTAwJSIsIGZpZy5jYXAgPSBjYXB0aW9uZXIoIlNtYWxsIHRvd25zIGFuZCB2aWxsYWdlcywgYXBwYXJlbnRseS4iKX0KbG9jX3AgPC0gcmVhZFJEUygiY2xlYW5fZGF0YS9sb2NfcF9jcm9wcGVkX3RvX21hbmFiaS5SRFMiKQptYXB2aWV3KAogIGxvY19wLAogIHpjb2wgPSAibl9sb2MiLCAgICAgICAgIyBhdHRyaWJ1dGUgdXNlZCBmb3IgZmlsbAogIGFscGhhLnJlZ2lvbnMgPSAwLjQsICAgICMgZmlsbCB0cmFuc3BhcmVuY3kKICBjb2xvciA9ICJibGFjayIsICAgICAgICAjIGJvcmRlciBjb2xvcgogIGFscGhhID0gMC4yLCAgICAgICAgICAgICMgYm9yZGVyIHRyYW5zcGFyZW5jeQogIGNleCA9IDEuNSwgIyAgICAgICAgICAgcG9pbnRzIHNpemUKICAKICBsZWdlbmQgPSBGQUxTRSAgICAgICAgICAgIyByZW1vdmUgbGVnZW5kCikgKyBwCmBgYAoKCiMgbGF5ZXIgYGNhMDRfYWAKCmBgYHtyfQojIGNhMDRfYSA8LSByZWFkUkRTKCJjbGVhbl9kYXRhL2NhMDRfYV9jcm9wcGVkX3RvX21hbmFiaS5SRFMiKQojIGFtbiA8LSB1bmlxdWUoY2EwNF9hJGNvZF9vdHJvcykgIyBjaGVjayB0aGUgdW5pcXVlIHZhbHVlcyBvZiB0aGUgY29kX290cm9zIGNvbHVtbgojIGFtbgojICBbMV0gTkEgICAgICAgICAgICAgICAgICAgICAgICAgIkVESUZJQ0lPIEVEVUNBQ0lPTkFMIiAgICAgIlRFTVBMTyBSRUxJR0lPU08iICAgICAgICAKIyAgWzRdICJDQVNBIENPTVVOQUwiICAgICAgICAgICAgICJFRElGSUNJTyBJTVBPUlRBTlRFIiAgICAgICJFRElGSUNJTyBERSBSRUZFUkVOQ0lBIiAgCiMgIFs3XSAiQ0FNUE8gREVQT1JUSVZPIiAgICAgICAgICAiQ0VNRU5URVJJTyIgICAgICAgICAgICAgICAiR0FTT0xJTkVSQSIgICAgICAgICAgICAgIAojIFsxMF0gIkVTVEFCTEVDSU1JRU5UTyBERSBTQUxVRCIgIlBBUlFVRSIgICAgICAgICAgICAgICAgICAgIlBMQVpBIiAgICAgICAgICAgICAgICAgICAKIyBbMTNdICJUQU5RVUUgREUgQUdVQSIgICAgICAgICAgICJFRElGSUNJTyBSRUZFUkVOQ0lBIiAKIyBmb3IgKGkgaW4gMjpsZW5ndGgoYW1uKSkgewojICAgYXV4IDwtIGZpbHRlcihjYTA0X2EsIGNvZF9vdHJvcyA9PSBhbW5baV0pCiMgICBzYXZlUkRTKGF1eCwgcGFzdGUwKCJjbGVhbl9kYXRhL2Ftbl8iLCBnc3ViKCIgIiwgIl8iLCBhbW5baV0pLCAiLlJEUyIpKQojIH0KYGBgCgpIZXJlIHdlIGNhbiBzZWUgdGhlIGBFRElGSUNJTyBFRFVDQUNJT05BTGAgYW1lbml0aWVzLgoKYGBge3IsIG91dC53aWR0aCA9ICIxMDAlIiwgZmlnLmNhcCA9IGNhcHRpb25lcigiRWR1Y2F0aW9uYWwgYnVpbGRpbmdzLiIpfQphbW5fRURJRklDSU9fRURVQ0FDSU9OQUwgPC0gcmVhZFJEUygiY2xlYW5fZGF0YS9hbW5fRURJRklDSU9fRURVQ0FDSU9OQUwuUkRTIikKbWFwdmlldygKICAgIGFtbl9FRElGSUNJT19FRFVDQUNJT05BTCwKICAgIHpjb2wgPSAibm9tX2VkaWYiLCAgICAgICAgIyBhdHRyaWJ1dGUgdXNlZCBmb3IgZmlsbAogICAgYWxwaGEucmVnaW9ucyA9IDAuNCwgICAgIyBmaWxsIHRyYW5zcGFyZW5jeQogICAgY29sb3IgPSAiYmxhY2siLCAgICAgICAgIyBib3JkZXIgY29sb3IKICAgIGFscGhhID0gMSwgICAgICAgICAgICAjIGJvcmRlciB0cmFuc3BhcmVuY3kKICAgIGxlZ2VuZCA9IEZBTFNFICAgICAgICAgICAjIHJlbW92ZSBsZWdlbmQKICApICsgcApgYGAKCgoKCiMgUmVmZXJlbmNlcyAKCmBgYHtyfQpncmF0ZWZ1bDo6Y2l0ZV9wYWNrYWdlcyhvdXRwdXQgPSAicGFyYWdyYXBoIiwgb3V0LmRpciA9ICIuIikKYGBgCgoKCgo=