1.Introduccion

En este cuaderno se ilustrarán estadisticas de la agricultura del departamento de Cesar, basadas en los datos suministrados por el DANE y se exploraran paquetes como dplyr.

Empezaremos liberando la memoria de datos anteriores, esto para optimizar el funcionamiento de R.

2.Funcionaldad de los GIS

rm(list=ls())

Se usaran varios paquetes que deben ser instalados, despues de instalarlos se puede poner un signo # para que al ejecutar de nuevo el codigo, elpaquete no se vuelva a instalar.

#installed.packages("here")
#install.packages("maptools")
#install.packages("viridis")
#install.packages(GSODR)
#install.packages("tinytex")
#install.packages("dplyr")
#install.packages(stringr)
library(here)
library(tidyverse)
library(tinytex)
library(stringr)
library(rgeos)
library(maptools)
library(raster)
library(sf)
library(viridis)
library(rnaturalearth)
library(GSODR)
library(ggrepel)
library(cowplot)
 theme_set(theme_cowplot())

3.Explorando las estadistcas de agricultura en Cesar

Con anterioridad se ha bajado de la pagina del DANE la estadistica de agricultura de Colombia y se ha depurado la informcion perteneciente al departamento de Cesar y se guardado

Vamos a leer el archivo.

datos <- read_csv("C:/Users/Usuario/Downloads/EVA_CESAR.csv")
Parsed with column specification:
cols(
  COD_DEP = col_double(),
  DEPARTAMENTO = col_character(),
  MPIO_CCDGO = col_double(),
  MUNICIPIO = col_character(),
  GRUPO = col_character(),
  SUBGRUPO = col_character(),
  CULTIVO = col_character(),
  YEAR = col_double(),
  Area_siembra = col_double(),
  Area_cosecha = col_double(),
  Produccion = col_double(),
  Rendimiento = col_double(),
  ESTADO = col_character(),
  CICLO = col_character()
)

Se revisan los atributos de los datos

head(datos)
tail(datos)

Se observan estadisticas en cuanto a producción, rendimiento de los cultivos ,áreas de siembra, areas de cosecha y los Cultivos estan organizados en grupos y subgrupos. Los datos no tienen unidades pero por medio de los encabezados de la tabla sabemos que las unidades de area son hectareas y las de rendimientos son toneladas/hectarea.

Aqui se usará el paquete dplyr,para explorar estos datos

datos %>%
  group_by(MUNICIPIO, GRUPO) %>%
  summarise(rend_prom = mean(Rendimiento, na.rm = TRUE)) -> rend_resumen

Observemos las seis primeras filas.

head(rend_resumen)

Se puede calcular el rendimiento por el grupo de cultivos por municipios.

datos %>%
  group_by(GRUPO) %>%
  summarise(rend_dep = mean(Rendimiento, na.rm = TRUE)) -> rend_cesar

rend_cesar
datos %>% 
  filter(YEAR==2018) %>% 
  group_by(GRUPO, MUNICIPIO) %>%
  summarize(max_rend = max(Rendimiento, na.rm = TRUE)) %>%
    slice(which.max(max_rend)) -> rend_max_18

rend_max_18

Ademas se pueden encontrar los municipios con mayores cosechas por grupos de cultivos en el departamento

datos %>% 
  filter(YEAR==2018) %>% 
  group_by(GRUPO, MUNICIPIO) %>%
  summarize(max_rend = max(Rendimiento, na.rm = TRUE)) %>%
    slice(which.max(max_rend)) -> rend_max_18

rend_max_18

Ahora podemos encontrar cuales son los municipios con las cosechas mas altas en todos los grupos en el año 2018.

datos %>% 
  filter(YEAR==2018) %>% 
  group_by(GRUPO, MUNICIPIO) %>%
  summarize(max_area_cosecha = max(Area_cosecha, na.rm = TRUE)) %>%
    slice(which.max(max_area_cosecha)) -> area_cosecha_max

area_cosecha_max

En el año 2018 la mayor cosecha se halla en el grupo de OTROS PERMANENTES y en el cultivo de café.

datos %>% 
  filter(MUNICIPIO=="AGUSTIN CODAZZI" & SUBGRUPO=="CAFE") %>% 
  group_by(YEAR, CULTIVO) ->  codazzi_cafe

codazzi_cafe
g <- ggplot(aes(x=YEAR, y=Produccion/1000), data = codazzi_cafe) + geom_bar(stat='identity') + labs(y='Produccion de Café [Ton x 1000]')
g + ggtitle("Produccion de Café en Codazzi  de 2007 a 2018") + labs(caption= "Basado en EMA data (DANE, 2018)")

Se puede conocer que cultivos tienen las mayores areas cosechadas en el 2018.

datos %>% 
  filter(YEAR==2018) %>% 
  group_by(GRUPO) %>%
  summarize(sum_area_cosecha = sum(Area_cosecha, na.rm = TRUE)) %>%
     arrange(desc(sum_area_cosecha)) -> total_area_cosecha

total_area_cosecha

Podemos saber que otros cultivos pertenecen al grupo de OTROS PERMANENTES

datos %>%
  filter(GRUPO=="OTROS PERMANENTES" & YEAR==2018) %>%
  group_by(CULTIVO) %>%
  summarize(sum_cosecha = sum(Area_cosecha, na.rm = TRUE)) %>%
     arrange(desc(sum_cosecha)) -> total_cosecha


total_cosecha

vamos a averiguar cuales son los municipios con mayores areas para los otros cultivos permanentes en el año 2018.

datos %>% 
  filter(YEAR==2018 & GRUPO=="OTROS PERMANENTES") %>% 
  group_by(CULTIVO, MUNICIPIO) %>%
  summarize(max_area2 = max(Area_cosecha, na.rm = TRUE)) %>%
    slice(which.max(max_area2)) -> area_cosecha2

area_cosecha2

Para realizar el grafico del area total de la cosecha y que este se vea ordenado, vamos a introducir un nuevo campo con las abreviaturas de los grupos, es decir tomaremos solamente los tres primeros caracteres del nombre del grupo así:

total_area_cosecha$CULTIVO <- abbreviate(total_area_cosecha$GRUPO, 3)
g <- ggplot(aes(x=CULTIVO, y=sum_area_cosecha), data = total_area_cosecha) + geom_bar(stat='identity') + labs(y='Total cultivada Area [Ha]')
g+ ggtitle("Total area cultivada por grupo en 2018 en Cesar") + theme(plot.title = element_text(hjust = 0.5)) +
   labs(caption= "Basado en EMA data (DANE, 2018)")

Vemos que las areas dedicadas a leguminosas, tuberculos y platanos y forestales son muy pequeñas,comparadas con las dedicadas a otros cultivos permanentes.

4. Uniendo estadisticas de agricultura en los municipios de Cesar

En cuadernos anteriores ya habiamos usado datos administrativos de Cesar, tomados del geoportal del DANE

Empezaremos a usar la libreria sf

ces_munic <- sf::st_read("C:/Users/Usuario/Documents/20_CESAR/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp")
Reading layer `MGN_MPIO_POLITICO' from data source `C:\Users\Usuario\Documents\20_CESAR\ADMINISTRATIVO\MGN_MPIO_POLITICO.shp' using driver `ESRI Shapefile'
Simple feature collection with 25 features and 9 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -74.13916 ymin: 7.67435 xmax: -72.88575 ymax: 10.86767
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs

Revisaremos que contiene ces_munic

ces_munic
Simple feature collection with 25 features and 9 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -74.13916 ymin: 7.67435 xmax: -72.88575 ymax: 10.86767
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
First 10 features:
   DPTO_CCDGO MPIO_CCDGO  MPIO_CNMBR                               MPIO_CRSLC MPIO_NAREA
1          20      20011   AGUACHICA                     Ordenanza 40 de 1914  877.65080
2          20      20032      ASTREA     Ordenanza 13 de Noviembre 26 de 1984  637.90276
3          20      20060    BOSCONIA       Ordenanza 1 de Noviembre 6 de 1979  586.20146
4          20      20175 CHIMICHAGUA                   Ordenanza 0054 de 1892 1376.44464
5          20      20178  CHIRIGUANÁ                     Ordenanza 04 de 1888 1114.48038
6          20      20228    CURUMANÍ Ordenanza 36 del 16 de Noviembre de 1965  915.17120
7          20      20238    EL COPEY       Ordenanza 8 de Noviembre 3 de 1971  956.45083
8          20      20250     EL PASO                     Ordenanza 29 de 1979  813.94054
9          20      20295     GAMARRA          Ordenanza 15 de Abril 9 de 1929  326.88124
10         20      20310    GONZALEZ                     Ordenanza 31 de 1915   73.00612
   MPIO_NANO DPTO_CNMBR Shape_Leng  Shape_Area                       geometry
1       2017      CESAR  1.9679384 0.072022220 POLYGON ((-73.56888 8.49782...
2       2017      CESAR  1.3358745 0.052526472 POLYGON ((-73.80394 9.63457...
3       2017      CESAR  1.2747707 0.048330887 POLYGON ((-73.82289 10.0769...
4       2017      CESAR  2.4739455 0.113242352 POLYGON ((-73.79569 9.49119...
5       2017      CESAR  2.4872058 0.091739688 POLYGON ((-73.52508 9.60095...
6       2017      CESAR  1.6062534 0.075292500 POLYGON ((-73.40689 9.40523...
7       2017      CESAR  1.6749954 0.078916864 POLYGON ((-73.82925 10.3998...
8       2017      CESAR  2.3246301 0.067051640 POLYGON ((-73.83815 9.78516...
9       2017      CESAR  0.9940224 0.026831192 POLYGON ((-73.64746 8.48989...
10      2017      CESAR  0.4348734 0.005992883 POLYGON ((-73.37035 8.45907...

Podemos ver que en estos datos se usa el sistema de referencia de coordenadas WGS1984.

Para realizar la union entre los datos de los municipios de los dos archivos se usara la funcion leaf_join.

datos %>% filter (MUNICIPIO =="VALLEDUPAR") ->  valle_datos
valle_datos

Revisaremos la calse de datos de la colomna MPIO_CCDGO, para poder realizar el join la clasede los datos a unir debe serla misma

class(valle_datos$MPIO_CCDGO)
[1] "numeric"

Haremos el join mediante el codigo de los municipios, ya que es un dato de identificación que poseen los dos archivos. Se creará una copia de los datos para evitar dañar el archivo original si se llegara a incurrir en un error al manipularlos.

datos2 <- datos
datos2$TEMP <-  as.numeric(datos2$MPIO_CCDGO)

Se realizará un cambio en los atributos de MPIO_CCDGO

head(datos2)

Filtraremos los datos teniendo en cuento atributos importantes

datos2 %>% filter(CULTIVO == "CAFE")  -> datos3
head(datos3)
class(datos3)
[1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame" 

Usamos la funcion %>%

datos4 <- datos3 %>% dplyr::select(MUNICIPIO, MPIO_CCDGO, YEAR, Produccion, Rendimiento) 
datos4
head(datos4)

En el siguiente código hay varios pasos incluidos, se agrupan , se unen, se mutan, se propagan, se unifican datos. Todas estas son funciones importantes al tratar datos.

datos4 %>% 
  group_by(MPIO_CCDGO) %>% 
  mutate(Visit = 1:n()) %>% 
  gather("YEAR", "Produccion", "Rendimiento", key = variable, value = number) %>% 
  unite(combi, variable, Visit) %>%
  spread(combi, number) -> datos5

Revisemos los seis primeros y los seis ultimos renglones de datos5

head(datos5)
tail(datos5)

Se realizará tambien una copia de los datos de caracteristicas simples, adjuntados al inicio del cuaderno.

ces_munic2 <- ces_munic

En principio tuve muchos problemas al realizar el join, entonces en la consola se realizo un data wrangling en el que separé el código del municipio en dos columnas de tres digitos cada una y realicé el join con el atribito CCDGO que tenia los ultimos tres digitos de la identificacion de cada municipio. y quedaron con los nombres ces_munic3 y datos6.

ces_munic3 <- separate(ces_munic2, MPIO_CCDGO, c("MPIO", "CCDGO"),sep = "20")
ces_munic3
Simple feature collection with 25 features and 10 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -74.13916 ymin: 7.67435 xmax: -72.88575 ymax: 10.86767
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
First 10 features:
   DPTO_CCDGO MPIO CCDGO  MPIO_CNMBR                               MPIO_CRSLC MPIO_NAREA
1          20        011   AGUACHICA                     Ordenanza 40 de 1914  877.65080
2          20        032      ASTREA     Ordenanza 13 de Noviembre 26 de 1984  637.90276
3          20        060    BOSCONIA       Ordenanza 1 de Noviembre 6 de 1979  586.20146
4          20        175 CHIMICHAGUA                   Ordenanza 0054 de 1892 1376.44464
5          20        178  CHIRIGUANÁ                     Ordenanza 04 de 1888 1114.48038
6          20        228    CURUMANÍ Ordenanza 36 del 16 de Noviembre de 1965  915.17120
7          20        238    EL COPEY       Ordenanza 8 de Noviembre 3 de 1971  956.45083
8          20        250     EL PASO                     Ordenanza 29 de 1979  813.94054
9          20        295     GAMARRA          Ordenanza 15 de Abril 9 de 1929  326.88124
10         20        310    GONZALEZ                     Ordenanza 31 de 1915   73.00612
   MPIO_NANO DPTO_CNMBR Shape_Leng  Shape_Area                       geometry
1       2017      CESAR  1.9679384 0.072022220 POLYGON ((-73.56888 8.49782...
2       2017      CESAR  1.3358745 0.052526472 POLYGON ((-73.80394 9.63457...
3       2017      CESAR  1.2747707 0.048330887 POLYGON ((-73.82289 10.0769...
4       2017      CESAR  2.4739455 0.113242352 POLYGON ((-73.79569 9.49119...
5       2017      CESAR  2.4872058 0.091739688 POLYGON ((-73.52508 9.60095...
6       2017      CESAR  1.6062534 0.075292500 POLYGON ((-73.40689 9.40523...
7       2017      CESAR  1.6749954 0.078916864 POLYGON ((-73.82925 10.3998...
8       2017      CESAR  2.3246301 0.067051640 POLYGON ((-73.83815 9.78516...
9       2017      CESAR  0.9940224 0.026831192 POLYGON ((-73.64746 8.48989...
10      2017      CESAR  0.4348734 0.005992883 POLYGON ((-73.37035 8.45907...
datos6 <- separate(datos5, MPIO_CCDGO, c("MPIO", "CCDGO"),sep = "20")
datos6

Ya hemos realizado todos lospasos previos para realizar el join.

ces_munic_stat = left_join(ces_munic3, datos6, by="CCDGO")
summary(ces_munic_stat)
 DPTO_CCDGO    MPIO.x             CCDGO                     MPIO_CNMBR
 20:25      Length:25          Length:25          AGUACHICA      : 1  
            Class :character   Class :character   AGUSTÍN CODAZZI: 1  
            Mode  :character   Mode  :character   ASTREA         : 1  
                                                  BECERRILL      : 1  
                                                  BOSCONIA       : 1  
                                                  CHIMICHAGUA    : 1  
                                                  (Other)        :19  
                                     MPIO_CRSLC   MPIO_NAREA        MPIO_NANO    DPTO_CNMBR
 1915                                     : 1   Min.   :  73.01   Min.   :2017   CESAR:25  
 Decreto 179 de Feb 25 de 1958            : 1   1st Qu.: 549.45   1st Qu.:2017             
 ORD 37 DE DICIEMBRE 10 DE 1997           : 1   Median : 755.91   Median :2017             
 Ordenananza 08 de 1935                   : 1   Mean   : 902.49   Mean   :2017             
 Ordenanza 003 del 19 de Noviembre de 1976: 1   3rd Qu.: 993.28   3rd Qu.:2017             
 Ordenanza 0054 de 1892                   : 1   Max.   :4185.79   Max.   :2017             
 (Other)                                  :19                                              
   Shape_Leng       Shape_Area        MUNICIPIO            MPIO.y           Produccion_1   
 Min.   :0.4349   Min.   :0.005993   Length:25          Length:25          Min.   :   8.0  
 1st Qu.:1.3359   1st Qu.:0.045082   Class :character   Class :character   1st Qu.:  81.0  
 Median :1.8600   Median :0.062240   Mode  :character   Mode  :character   Median : 195.0  
 Mean   :1.9210   Mean   :0.074318                                         Mean   : 698.9  
 3rd Qu.:2.3246   3rd Qu.:0.081449                                         3rd Qu.: 595.0  
 Max.   :4.8778   Max.   :0.345529                                         Max.   :3040.0  
                                                                           NA's   :6       
 Produccion_10    Produccion_11    Produccion_12     Produccion_2     Produccion_3   
 Min.   :   2.0   Min.   :   2.0   Min.   :   5.0   Min.   :  11.0   Min.   :  10.0  
 1st Qu.:  71.5   1st Qu.:  52.5   1st Qu.:  48.0   1st Qu.:  45.0   1st Qu.:  70.5  
 Median : 389.0   Median : 282.0   Median : 272.0   Median : 195.0   Median : 200.0  
 Mean   :1192.1   Mean   : 875.2   Mean   : 786.5   Mean   : 728.5   Mean   : 672.2  
 3rd Qu.:1539.5   3rd Qu.:1082.5   3rd Qu.: 821.5   3rd Qu.: 588.0   3rd Qu.: 588.0  
 Max.   :5340.0   Max.   :3971.0   Max.   :3820.0   Max.   :3235.0   Max.   :3011.0  
 NA's   :6        NA's   :6        NA's   :6        NA's   :6        NA's   :6       
  Produccion_4     Produccion_5     Produccion_6     Produccion_7     Produccion_8   
 Min.   :   8.0   Min.   :   8.0   Min.   :  10.0   Min.   :  11.0   Min.   :  11.0  
 1st Qu.:  86.0   1st Qu.:  76.5   1st Qu.:  94.5   1st Qu.:  62.5   1st Qu.:  66.0  
 Median : 184.0   Median : 181.0   Median : 272.0   Median : 204.0   Median : 239.0  
 Mean   : 698.7   Mean   : 580.9   Mean   :1052.4   Mean   : 792.2   Mean   : 891.4  
 3rd Qu.: 590.5   3rd Qu.: 520.5   3rd Qu.: 828.0   3rd Qu.: 728.5   3rd Qu.: 884.0  
 Max.   :3011.0   Max.   :3011.0   Max.   :6338.0   Max.   :4144.0   Max.   :4667.0  
 NA's   :6        NA's   :6        NA's   :6        NA's   :6        NA's   :6       
  Produccion_9    Rendimiento_1    Rendimiento_10   Rendimiento_11   Rendimiento_12  
 Min.   :   2.0   Min.   :0.4700   Min.   :0.6400   Min.   :0.6600   Min.   :0.6200  
 1st Qu.:  71.5   1st Qu.:0.5600   1st Qu.:0.8250   1st Qu.:0.6600   1st Qu.:0.6200  
 Median : 362.0   Median :0.6000   Median :0.9000   Median :0.6600   Median :0.6200  
 Mean   :1170.6   Mean   :0.5979   Mean   :0.8942   Mean   :0.6695   Mean   :0.6326  
 3rd Qu.:1500.5   3rd Qu.:0.6200   3rd Qu.:0.9700   3rd Qu.:0.6600   3rd Qu.:0.6200  
 Max.   :5217.0   Max.   :0.8100   Max.   :1.1000   Max.   :0.8400   Max.   :0.8600  
 NA's   :6        NA's   :6        NA's   :6        NA's   :6        NA's   :6       
 Rendimiento_2    Rendimiento_3    Rendimiento_4    Rendimiento_5    Rendimiento_6   
 Min.   :0.3800   Min.   :0.5000   Min.   :0.4500   Min.   :0.2000   Min.   :0.5000  
 1st Qu.:0.5100   1st Qu.:0.5000   1st Qu.:0.5000   1st Qu.:0.5000   1st Qu.:0.6000  
 Median :0.6000   Median :0.5000   Median :0.6000   Median :0.5000   Median :0.7500  
 Mean   :0.5821   Mean   :0.5579   Mean   :0.5842   Mean   :0.5447   Mean   :0.7653  
 3rd Qu.:0.6100   3rd Qu.:0.6000   3rd Qu.:0.6000   3rd Qu.:0.6000   3rd Qu.:0.8000  
 Max.   :0.8000   Max.   :0.8000   Max.   :0.8000   Max.   :0.8000   Max.   :1.2000  
 NA's   :6        NA's   :6        NA's   :6        NA's   :6        NA's   :6       
 Rendimiento_7    Rendimiento_8    Rendimiento_9        YEAR_1        YEAR_10    
 Min.   :0.3700   Min.   :0.4000   Min.   :0.6200   Min.   :2007   Min.   :2016  
 1st Qu.:0.4800   1st Qu.:0.5200   1st Qu.:0.8050   1st Qu.:2007   1st Qu.:2016  
 Median :0.5900   Median :0.6400   Median :0.8700   Median :2007   Median :2016  
 Mean   :0.5889   Mean   :0.6379   Mean   :0.8647   Mean   :2007   Mean   :2016  
 3rd Qu.:0.6650   3rd Qu.:0.7200   3rd Qu.:0.9350   3rd Qu.:2007   3rd Qu.:2016  
 Max.   :0.8900   Max.   :0.9600   Max.   :1.0700   Max.   :2007   Max.   :2016  
 NA's   :6        NA's   :6        NA's   :6        NA's   :6      NA's   :6     
    YEAR_11        YEAR_12         YEAR_2         YEAR_3         YEAR_4         YEAR_5    
 Min.   :2017   Min.   :2018   Min.   :2008   Min.   :2009   Min.   :2010   Min.   :2011  
 1st Qu.:2017   1st Qu.:2018   1st Qu.:2008   1st Qu.:2009   1st Qu.:2010   1st Qu.:2011  
 Median :2017   Median :2018   Median :2008   Median :2009   Median :2010   Median :2011  
 Mean   :2017   Mean   :2018   Mean   :2008   Mean   :2009   Mean   :2010   Mean   :2011  
 3rd Qu.:2017   3rd Qu.:2018   3rd Qu.:2008   3rd Qu.:2009   3rd Qu.:2010   3rd Qu.:2011  
 Max.   :2017   Max.   :2018   Max.   :2008   Max.   :2009   Max.   :2010   Max.   :2011  
 NA's   :6      NA's   :6      NA's   :6      NA's   :6      NA's   :6      NA's   :6     
     YEAR_6         YEAR_7         YEAR_8         YEAR_9              geometry 
 Min.   :2012   Min.   :2013   Min.   :2014   Min.   :2015   POLYGON      :25  
 1st Qu.:2012   1st Qu.:2013   1st Qu.:2014   1st Qu.:2015   epsg:4326    : 0  
 Median :2012   Median :2013   Median :2014   Median :2015   +proj=long...: 0  
 Mean   :2012   Mean   :2013   Mean   :2014   Mean   :2015                     
 3rd Qu.:2012   3rd Qu.:2013   3rd Qu.:2014   3rd Qu.:2015                     
 Max.   :2012   Max.   :2013   Max.   :2014   Max.   :2015                     
 NA's   :6      NA's   :6      NA's   :6      NA's   :6                        

5. MAPA

El paso final de este cuaderno es un mapa en el que se vera la produccion de cafe,(que es el cultivo mas relevante en el Cesar), en cada municipio de Cesar durante el año 2018.

#install.packages("leaflet")
library(RColorBrewer)
library(leaflet)
bins <- c(0, 250, 500, 750, 1000, 1250, 1500, 1750,2000,2250)
pal <- colorBin("YlOrRd", domain = ces_munic_stat$Produccion_12, bins = bins)

  mapa <- leaflet(data = ces_munic_stat) %>%
  addTiles() %>%
  addPolygons(label = ~Produccion_12,
              popup = ~MPIO_CNMBR,
              fillColor = ~pal(Produccion_12),
              color = "#444444",
              weight = 1,
              smoothFactor = 0.5,
              opacity = 1.0,
              fillOpacity = 0.5,
              highlightOptions = highlightOptions(color = "white", weight = 2, bringToFront = TRUE)
              ) %>%
  addProviderTiles(providers$OpenStreetMap) %>%
  addLegend("bottomright", pal = pal, values = ~Produccion_1,
    title = "Produccion de aguacate en el Cesar [Ton] (2018)",
    opacity = 1 )
Some values were outside the color scale and will be treated as NA
mapa
sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)

Matrix products: default

locale:
[1] LC_COLLATE=Spanish_Colombia.1252  LC_CTYPE=Spanish_Colombia.1252   
[3] LC_MONETARY=Spanish_Colombia.1252 LC_NUMERIC=C                     
[5] LC_TIME=Spanish_Colombia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] leaflet_2.0.3       RColorBrewer_1.1-2  cowplot_1.0.0       ggrepel_0.8.2      
 [5] GSODR_2.0.1         rnaturalearth_0.1.0 viridis_0.5.1       viridisLite_0.3.0  
 [9] sf_0.8-1            raster_3.0-12       maptools_0.9-9      rgeos_0.5-2        
[13] sp_1.4-1            tinytex_0.20        forcats_0.5.0       stringr_1.4.0      
[17] dplyr_0.8.4         purrr_0.3.3         readr_1.3.1         tidyr_1.0.2        
[21] tibble_2.1.3        ggplot2_3.3.0       tidyverse_1.3.0     here_0.1           
[25] MASS_7.3-51.4       Matrix_1.2-17      

loaded via a namespace (and not attached):
 [1] nlme_3.1-140            fs_1.3.2                lubridate_1.7.4        
 [4] httr_1.4.1              rprojroot_1.3-2         tools_3.6.1            
 [7] backports_1.1.5         R6_2.4.1                KernSmooth_2.23-15     
[10] DBI_1.1.0               colorspace_1.4-1        withr_2.1.2            
[13] tidyselect_1.0.0        gridExtra_2.3           compiler_3.6.1         
[16] cli_2.0.2               rvest_0.3.5             xml2_1.2.5             
[19] labeling_0.3            scales_1.1.0            classInt_0.4-2         
[22] digest_0.6.25           foreign_0.8-71          rmarkdown_2.1          
[25] base64enc_0.1-3         pkgconfig_2.0.3         htmltools_0.4.0        
[28] dbplyr_1.4.2            htmlwidgets_1.5.1       rlang_0.4.5            
[31] readxl_1.3.1            rstudioapi_0.11         farver_2.0.3           
[34] generics_0.0.2          jsonlite_1.6.1          crosstalk_1.1.0.1      
[37] magrittr_1.5            Rcpp_1.0.3              munsell_0.5.0          
[40] fansi_0.4.1             lifecycle_0.2.0         stringi_1.4.6          
[43] yaml_2.2.1              grid_3.6.1              crayon_1.3.4           
[46] lattice_0.20-38         haven_2.2.0             hms_0.5.3              
[49] knitr_1.28              pillar_1.4.3            codetools_0.2-16       
[52] reprex_0.3.0            glue_1.3.1              evaluate_0.14          
[55] leaflet.providers_1.9.0 data.table_1.12.8       modelr_0.1.6           
[58] vctrs_0.2.3             cellranger_1.1.0        gtable_0.3.0           
[61] assertthat_0.2.1        xfun_0.12               broom_0.5.5            
[64] e1071_1.7-3             rsconnect_0.8.16        class_7.3-15           
[67] units_0.6-5             ellipsis_0.3.0         
LS0tDQp0aXRsZTogIkVzdGFkaXN0aWNhcyBtdW5pY2lwYWxlcyBkZSBsYSBhZ3JpY3VsdHVyYSBlbiBDZXNhciINCm91dHB1dDogaHRtbF9ub3RlYm9vayANCg0KLS0tDQojIyAxLkludHJvZHVjY2lvbg0KDQpFbiBlc3RlIGN1YWRlcm5vIHNlIGlsdXN0cmFyw6FuIGVzdGFkaXN0aWNhcyBkZSBsYSBhZ3JpY3VsdHVyYSBkZWwgZGVwYXJ0YW1lbnRvIGRlIENlc2FyLCBiYXNhZGFzIGVuIGxvcyBkYXRvcyBzdW1pbmlzdHJhZG9zIHBvciBlbCBEQU5FIHkgc2UgZXhwbG9yYXJhbiBwYXF1ZXRlcyBjb21vIGRwbHlyLg0KDQpFbXBlemFyZW1vcyBsaWJlcmFuZG8gbGEgbWVtb3JpYSBkZSBkYXRvcyBhbnRlcmlvcmVzLCBlc3RvIHBhcmEgb3B0aW1pemFyIGVsIGZ1bmNpb25hbWllbnRvIGRlIFIuDQoNCiMjIDIuRnVuY2lvbmFsZGFkIGRlIGxvcyBHSVMNCg0KYGBge3J9DQpybShsaXN0PWxzKCkpDQpgYGANCg0KU2UgdXNhcmFuIHZhcmlvcyBwYXF1ZXRlcyBxdWUgZGViZW4gc2VyIGluc3RhbGFkb3MsIGRlc3B1ZXMgZGUgaW5zdGFsYXJsb3Mgc2UgcHVlZGUgcG9uZXIgdW4gc2lnbm8gIyBwYXJhIHF1ZSBhbCBlamVjdXRhciBkZSBudWV2byBlbCBjb2RpZ28sIGVscGFxdWV0ZSBubyBzZSB2dWVsdmEgYSBpbnN0YWxhci4NCg0KYGBge3J9DQojaW5zdGFsbGVkLnBhY2thZ2VzKCJoZXJlIikNCiNpbnN0YWxsLnBhY2thZ2VzKCJtYXB0b29scyIpDQojaW5zdGFsbC5wYWNrYWdlcygidmlyaWRpcyIpDQojaW5zdGFsbC5wYWNrYWdlcyhHU09EUikNCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aW55dGV4IikNCiNpbnN0YWxsLnBhY2thZ2VzKCJkcGx5ciIpDQojaW5zdGFsbC5wYWNrYWdlcyhzdHJpbmdyKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShoZXJlKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHRpbnl0ZXgpDQpsaWJyYXJ5KHN0cmluZ3IpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KHJnZW9zKQ0KYGBgDQpgYGB7cn0NCmxpYnJhcnkobWFwdG9vbHMpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KHJhc3RlcikNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkoc2YpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KHZpcmlkaXMpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KHJuYXR1cmFsZWFydGgpDQpsaWJyYXJ5KEdTT0RSKQ0KbGlicmFyeShnZ3JlcGVsKQ0KbGlicmFyeShjb3dwbG90KQ0KYGBgDQpgYGB7cn0NCiB0aGVtZV9zZXQodGhlbWVfY293cGxvdCgpKQ0KYGBgDQoNCiMjIDMuRXhwbG9yYW5kbyBsYXMgZXN0YWRpc3RjYXMgZGUgYWdyaWN1bHR1cmEgZW4gQ2VzYXINCg0KQ29uIGFudGVyaW9yaWRhZCBzZSBoYSBiYWphZG8gZGUgbGEgcGFnaW5hIGRlbCBEQU5FIGxhIGVzdGFkaXN0aWNhIGRlIGFncmljdWx0dXJhIGRlIENvbG9tYmlhIHkgc2UgaGEgZGVwdXJhZG8gbGEgaW5mb3JtY2lvbiBwZXJ0ZW5lY2llbnRlIGFsIGRlcGFydGFtZW50byBkZSBDZXNhciAgeSBzZSBndWFyZGFkbw0KDQpWYW1vcyBhIGxlZXIgZWwgYXJjaGl2by4NCg0KYGBge3J9DQpkYXRvcyA8LSByZWFkX2NzdigiQzovVXNlcnMvVXN1YXJpby9Eb3dubG9hZHMvRVZBX0NFU0FSLmNzdiIpDQpgYGANCg0KU2UgcmV2aXNhbiBsb3MgYXRyaWJ1dG9zIGRlIGxvcyBkYXRvcyANCmBgYHtyfQ0KaGVhZChkYXRvcykNCmBgYA0KYGBge3J9DQp0YWlsKGRhdG9zKQ0KYGBgDQpTZSBvYnNlcnZhbiBlc3RhZGlzdGljYXMgZW4gY3VhbnRvIGEgcHJvZHVjY2nDs24sIHJlbmRpbWllbnRvIGRlIGxvcyBjdWx0aXZvcyAsw6FyZWFzIGRlIHNpZW1icmEsIGFyZWFzIGRlIGNvc2VjaGEgeSBsb3MgQ3VsdGl2b3MgZXN0YW4gb3JnYW5pemFkb3MgZW4gZ3J1cG9zIHkgc3ViZ3J1cG9zLiBMb3MgZGF0b3Mgbm8gdGllbmVuIHVuaWRhZGVzIHBlcm8gcG9yIG1lZGlvIGRlIGxvcyBlbmNhYmV6YWRvcyBkZSBsYSB0YWJsYSBzYWJlbW9zIHF1ZSBsYXMgdW5pZGFkZXMgZGUgYXJlYSBzb24gaGVjdGFyZWFzIHkgbGFzIGRlIHJlbmRpbWllbnRvcyBzb24gdG9uZWxhZGFzL2hlY3RhcmVhLg0KDQpBcXVpIHNlIHVzYXLDoSBlbCBwYXF1ZXRlIGRwbHlyLHBhcmEgZXhwbG9yYXIgZXN0b3MgZGF0b3MNCg0KYGBge3J9DQpkYXRvcyAlPiUNCiAgZ3JvdXBfYnkoTVVOSUNJUElPLCBHUlVQTykgJT4lDQogIHN1bW1hcmlzZShyZW5kX3Byb20gPSBtZWFuKFJlbmRpbWllbnRvLCBuYS5ybSA9IFRSVUUpKSAtPiByZW5kX3Jlc3VtZW4NCg0KYGBgDQpPYnNlcnZlbW9zIGxhcyBzZWlzIHByaW1lcmFzIGZpbGFzLg0KDQpgYGB7cn0NCmhlYWQocmVuZF9yZXN1bWVuKQ0KYGBgDQpTZSBwdWVkZSBjYWxjdWxhciBlbCByZW5kaW1pZW50byBwb3IgZWwgZ3J1cG8gZGUgY3VsdGl2b3MgcG9yIG11bmljaXBpb3MuDQoNCmBgYHtyfQ0KZGF0b3MgJT4lDQogIGdyb3VwX2J5KEdSVVBPKSAlPiUNCiAgc3VtbWFyaXNlKHJlbmRfZGVwID0gbWVhbihSZW5kaW1pZW50bywgbmEucm0gPSBUUlVFKSkgLT4gcmVuZF9jZXNhcg0KDQpyZW5kX2Nlc2FyDQpgYGANCmBgYHtyfQ0KZGF0b3MgJT4lIA0KICBmaWx0ZXIoWUVBUj09MjAxOCkgJT4lIA0KICBncm91cF9ieShHUlVQTywgTVVOSUNJUElPKSAlPiUNCiAgc3VtbWFyaXplKG1heF9yZW5kID0gbWF4KFJlbmRpbWllbnRvLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgICBzbGljZSh3aGljaC5tYXgobWF4X3JlbmQpKSAtPiByZW5kX21heF8xOA0KDQpyZW5kX21heF8xOA0KYGBgDQoNCkFkZW1hcyBzZSBwdWVkZW4gZW5jb250cmFyIGxvcyBtdW5pY2lwaW9zIGNvbiBtYXlvcmVzIGNvc2VjaGFzICBwb3IgZ3J1cG9zIGRlIGN1bHRpdm9zIGVuIGVsIGRlcGFydGFtZW50bw0KDQpgYGB7cn0NCmRhdG9zICU+JSANCiAgZmlsdGVyKFlFQVI9PTIwMTgpICU+JSANCiAgZ3JvdXBfYnkoR1JVUE8sIE1VTklDSVBJTykgJT4lDQogIHN1bW1hcml6ZShtYXhfcmVuZCA9IG1heChSZW5kaW1pZW50bywgbmEucm0gPSBUUlVFKSkgJT4lDQogICAgc2xpY2Uod2hpY2gubWF4KG1heF9yZW5kKSkgLT4gcmVuZF9tYXhfMTgNCg0KcmVuZF9tYXhfMTgNCmBgYA0KQWhvcmEgcG9kZW1vcyBlbmNvbnRyYXIgY3VhbGVzIHNvbiBsb3MgbXVuaWNpcGlvcyBjb24gbGFzIGNvc2VjaGFzIG1hcyBhbHRhcyBlbiB0b2RvcyBsb3MgZ3J1cG9zIGVuIGVsIGHDsW8gMjAxOC4NCg0KYGBge3J9DQpkYXRvcyAlPiUgDQogIGZpbHRlcihZRUFSPT0yMDE4KSAlPiUgDQogIGdyb3VwX2J5KEdSVVBPLCBNVU5JQ0lQSU8pICU+JQ0KICBzdW1tYXJpemUobWF4X2FyZWFfY29zZWNoYSA9IG1heChBcmVhX2Nvc2VjaGEsIG5hLnJtID0gVFJVRSkpICU+JQ0KICAgIHNsaWNlKHdoaWNoLm1heChtYXhfYXJlYV9jb3NlY2hhKSkgLT4gYXJlYV9jb3NlY2hhX21heA0KDQphcmVhX2Nvc2VjaGFfbWF4DQpgYGANCkVuIGVsIGHDsW8gMjAxOCBsYSBtYXlvciBjb3NlY2hhIHNlIGhhbGxhIGVuIGVsIGdydXBvIGRlIE9UUk9TIFBFUk1BTkVOVEVTIHkgZW4gZWwgIGN1bHRpdm8gZGUgY2Fmw6kuIA0KDQpgYGB7cn0NCmRhdG9zICU+JSANCiAgZmlsdGVyKE1VTklDSVBJTz09IkFHVVNUSU4gQ09EQVpaSSIgJiBTVUJHUlVQTz09IkNBRkUiKSAlPiUgDQogIGdyb3VwX2J5KFlFQVIsIENVTFRJVk8pIC0+ICBjb2RhenppX2NhZmUNCg0KY29kYXp6aV9jYWZlDQpgYGANCmBgYHtyfQ0KZyA8LSBnZ3Bsb3QoYWVzKHg9WUVBUiwgeT1Qcm9kdWNjaW9uLzEwMDApLCBkYXRhID0gY29kYXp6aV9jYWZlKSArIGdlb21fYmFyKHN0YXQ9J2lkZW50aXR5JykgKyBsYWJzKHk9J1Byb2R1Y2Npb24gZGUgQ2Fmw6kgW1RvbiB4IDEwMDBdJykNCmBgYA0KDQpgYGB7cn0NCmcgKyBnZ3RpdGxlKCJQcm9kdWNjaW9uIGRlIENhZsOpIGVuIENvZGF6emkgIGRlIDIwMDcgYSAyMDE4IikgKyBsYWJzKGNhcHRpb249ICJCYXNhZG8gZW4gRU1BIGRhdGEgKERBTkUsIDIwMTgpIikNCmBgYA0KU2UgcHVlZGUgY29ub2NlciBxdWUgY3VsdGl2b3MgdGllbmVuIGxhcyBtYXlvcmVzIGFyZWFzIGNvc2VjaGFkYXMgZW4gZWwgMjAxOC4NCg0KYGBge3J9DQpkYXRvcyAlPiUgDQogIGZpbHRlcihZRUFSPT0yMDE4KSAlPiUgDQogIGdyb3VwX2J5KEdSVVBPKSAlPiUNCiAgc3VtbWFyaXplKHN1bV9hcmVhX2Nvc2VjaGEgPSBzdW0oQXJlYV9jb3NlY2hhLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgICAgYXJyYW5nZShkZXNjKHN1bV9hcmVhX2Nvc2VjaGEpKSAtPiB0b3RhbF9hcmVhX2Nvc2VjaGENCg0KdG90YWxfYXJlYV9jb3NlY2hhDQpgYGANClBvZGVtb3Mgc2FiZXIgcXVlIG90cm9zIGN1bHRpdm9zIHBlcnRlbmVjZW4gYWwgZ3J1cG8gZGUgT1RST1MgUEVSTUFORU5URVMgDQogDQpgYGB7cn0NCmRhdG9zICU+JQ0KICBmaWx0ZXIoR1JVUE89PSJPVFJPUyBQRVJNQU5FTlRFUyIgJiBZRUFSPT0yMDE4KSAlPiUNCiAgZ3JvdXBfYnkoQ1VMVElWTykgJT4lDQogIHN1bW1hcml6ZShzdW1fY29zZWNoYSA9IHN1bShBcmVhX2Nvc2VjaGEsIG5hLnJtID0gVFJVRSkpICU+JQ0KICAgICBhcnJhbmdlKGRlc2Moc3VtX2Nvc2VjaGEpKSAtPiB0b3RhbF9jb3NlY2hhDQoNCg0KdG90YWxfY29zZWNoYQ0KYGBgDQp2YW1vcyBhIGF2ZXJpZ3VhciBjdWFsZXMgc29uIGxvcyBtdW5pY2lwaW9zIGNvbiBtYXlvcmVzIGFyZWFzIHBhcmEgbG9zIG90cm9zIGN1bHRpdm9zIHBlcm1hbmVudGVzIGVuIGVsIGHDsW8gMjAxOC4NCg0KDQpgYGB7cn0NCmRhdG9zICU+JSANCiAgZmlsdGVyKFlFQVI9PTIwMTggJiBHUlVQTz09Ik9UUk9TIFBFUk1BTkVOVEVTIikgJT4lIA0KICBncm91cF9ieShDVUxUSVZPLCBNVU5JQ0lQSU8pICU+JQ0KICBzdW1tYXJpemUobWF4X2FyZWEyID0gbWF4KEFyZWFfY29zZWNoYSwgbmEucm0gPSBUUlVFKSkgJT4lDQogICAgc2xpY2Uod2hpY2gubWF4KG1heF9hcmVhMikpIC0+IGFyZWFfY29zZWNoYTINCg0KYXJlYV9jb3NlY2hhMg0KYGBgDQoNClBhcmEgcmVhbGl6YXIgZWwgZ3JhZmljbyAgZGVsIGFyZWEgdG90YWwgZGUgbGEgY29zZWNoYSB5IHF1ZSBlc3RlIHNlIHZlYSBvcmRlbmFkbywgIHZhbW9zIGEgaW50cm9kdWNpciB1biBudWV2byBjYW1wbyBjb24gbGFzIGFicmV2aWF0dXJhcyBkZSBsb3MgZ3J1cG9zLCBlcyBkZWNpciB0b21hcmVtb3Mgc29sYW1lbnRlIGxvcyB0cmVzIHByaW1lcm9zIGNhcmFjdGVyZXMgZGVsIG5vbWJyZSBkZWwgZ3J1cG8gYXPDrToNCg0KYGBge3J9DQp0b3RhbF9hcmVhX2Nvc2VjaGEkQ1VMVElWTyA8LSBhYmJyZXZpYXRlKHRvdGFsX2FyZWFfY29zZWNoYSRHUlVQTywgMykNCmBgYA0KDQpgYGB7cn0NCmcgPC0gZ2dwbG90KGFlcyh4PUNVTFRJVk8sIHk9c3VtX2FyZWFfY29zZWNoYSksIGRhdGEgPSB0b3RhbF9hcmVhX2Nvc2VjaGEpICsgZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknKSArIGxhYnMoeT0nVG90YWwgY3VsdGl2YWRhIEFyZWEgW0hhXScpDQpgYGANCg0KYGBge3J9DQpnKyBnZ3RpdGxlKCJUb3RhbCBhcmVhIGN1bHRpdmFkYSBwb3IgZ3J1cG8gZW4gMjAxOCBlbiBDZXNhciIpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsNCiAgIGxhYnMoY2FwdGlvbj0gIkJhc2FkbyBlbiBFTUEgZGF0YSAoREFORSwgMjAxOCkiKQ0KYGBgDQoNClZlbW9zIHF1ZSBsYXMgYXJlYXMgZGVkaWNhZGFzIGEgbGVndW1pbm9zYXMsIHR1YmVyY3Vsb3MgeSBwbGF0YW5vcyB5IGZvcmVzdGFsZXMgc29uIG11eSBwZXF1ZcOxYXMsY29tcGFyYWRhcyBjb24gbGFzIGRlZGljYWRhcyBhIG90cm9zIGN1bHRpdm9zIHBlcm1hbmVudGVzLg0KDQojIyA0LiBVbmllbmRvIGVzdGFkaXN0aWNhcyBkZSBhZ3JpY3VsdHVyYSBlbiBsb3MgbXVuaWNpcGlvcyBkZSBDZXNhcg0KDQpFbiBjdWFkZXJub3MgYW50ZXJpb3JlcyB5YSBoYWJpYW1vcyB1c2FkbyBkYXRvcyBhZG1pbmlzdHJhdGl2b3MgZGUgQ2VzYXIsIHRvbWFkb3MgZGVsIGdlb3BvcnRhbCBkZWwgW0RBTkVdKGh0dHBzOi8vZ2VvcG9ydGFsLmRhbmUuZ292LmNvLykNCg0KRW1wZXphcmVtb3MgYSB1c2FyIGxhIGxpYnJlcmlhIHNmDQoNCg0KYGBge3J9DQpjZXNfbXVuaWMgPC0gc2Y6OnN0X3JlYWQoIkM6L1VzZXJzL1VzdWFyaW8vRG9jdW1lbnRzLzIwX0NFU0FSL0FETUlOSVNUUkFUSVZPL01HTl9NUElPX1BPTElUSUNPLnNocCIpDQpgYGANCg0KUmV2aXNhcmVtb3MgcXVlIGNvbnRpZW5lIGNlc19tdW5pYw0KYGBge3J9DQpjZXNfbXVuaWMNCmBgYA0KUG9kZW1vcyB2ZXIgcXVlIGVuIGVzdG9zIGRhdG9zIHNlIHVzYSBlbCBzaXN0ZW1hIGRlIHJlZmVyZW5jaWEgZGUgY29vcmRlbmFkYXMgV0dTMTk4NC4gDQoNClBhcmEgcmVhbGl6YXIgbGEgdW5pb24gZW50cmUgbG9zIGRhdG9zIGRlIGxvcyBtdW5pY2lwaW9zICBkZSBsb3MgIGRvcyBhcmNoaXZvcyBzZSB1c2FyYSBsYSBmdW5jaW9uIGxlYWZfam9pbi4NCg0KYGBge3J9DQpkYXRvcyAlPiUgZmlsdGVyIChNVU5JQ0lQSU8gPT0iVkFMTEVEVVBBUiIpIC0+ICB2YWxsZV9kYXRvcw0KYGBgDQoNCmBgYHtyfQ0KdmFsbGVfZGF0b3MNCmBgYA0KUmV2aXNhcmVtb3MgbGEgY2Fsc2UgZGUgZGF0b3MgZGUgbGEgY29sb21uYSBNUElPX0NDREdPLCBwYXJhIHBvZGVyIHJlYWxpemFyIGVsIGpvaW4gbGEgY2xhc2VkZSBsb3MgZGF0b3MgYSB1bmlyIGRlYmUgc2VybGEgbWlzbWENCg0KYGBge3J9DQpjbGFzcyh2YWxsZV9kYXRvcyRNUElPX0NDREdPKQ0KYGBgDQoNCkhhcmVtb3MgZWwgam9pbiBtZWRpYW50ZSBlbCBjb2RpZ28gZGUgbG9zICBtdW5pY2lwaW9zLCB5YSBxdWUgZXMgdW4gZGF0byBkZSBpZGVudGlmaWNhY2nDs24gcXVlIHBvc2VlbiBsb3MgZG9zIGFyY2hpdm9zLg0KU2UgY3JlYXLDoSB1bmEgY29waWEgZGUgbG9zIGRhdG9zIHBhcmEgZXZpdGFyIGRhw7FhciBlbCBhcmNoaXZvIG9yaWdpbmFsICBzaSBzZSBsbGVnYXJhIGEgaW5jdXJyaXIgZW4gdW4gZXJyb3IgYWwgbWFuaXB1bGFybG9zLg0KDQpgYGB7cn0NCmRhdG9zMiA8LSBkYXRvcw0KYGBgDQoNCmBgYHtyfQ0KZGF0b3MyJFRFTVAgPC0gIGFzLm51bWVyaWMoZGF0b3MyJE1QSU9fQ0NER08pDQpgYGANClNlIHJlYWxpemFyw6EgdW4gY2FtYmlvIGVuIGxvcyBhdHJpYnV0b3MgZGUgTVBJT19DQ0RHTw0KDQoNCmBgYHtyfQ0KaGVhZChkYXRvczIpDQpgYGANCg0KRmlsdHJhcmVtb3MgbG9zIGRhdG9zIHRlbmllbmRvIGVuIGN1ZW50byBhdHJpYnV0b3MgaW1wb3J0YW50ZXMNCg0KYGBge3J9DQpkYXRvczIgJT4lIGZpbHRlcihDVUxUSVZPID09ICJDQUZFIikgIC0+IGRhdG9zMw0KYGBgDQoNCmBgYHtyfQ0KaGVhZChkYXRvczMpDQpgYGANCg0KYGBge3J9DQpjbGFzcyhkYXRvczMpDQpgYGANCg0KVXNhbW9zIGxhIGZ1bmNpb24gICU+JQ0KDQpgYGB7cn0NCmRhdG9zNCA8LSBkYXRvczMgJT4lIGRwbHlyOjpzZWxlY3QoTVVOSUNJUElPLCBNUElPX0NDREdPLCBZRUFSLCBQcm9kdWNjaW9uLCBSZW5kaW1pZW50bykgDQpgYGANCg0KYGBge3J9DQpkYXRvczQNCmBgYA0KDQoNCmBgYHtyfQ0KaGVhZChkYXRvczQpDQpgYGANCg0KRW4gZWwgc2lndWllbnRlIGPDs2RpZ28gaGF5IHZhcmlvcyBwYXNvcyBpbmNsdWlkb3MsIHNlIGFncnVwYW4gLCBzZSB1bmVuLCBzZSBtdXRhbiwgc2UgcHJvcGFnYW4sIHNlIHVuaWZpY2FuIGRhdG9zLiBUb2RhcyBlc3RhcyBzb24gZnVuY2lvbmVzIGltcG9ydGFudGVzIGFsIHRyYXRhciBkYXRvcy4gDQoNCmBgYHtyfQ0KZGF0b3M0ICU+JSANCiAgZ3JvdXBfYnkoTVBJT19DQ0RHTykgJT4lIA0KICBtdXRhdGUoVmlzaXQgPSAxOm4oKSkgJT4lIA0KICBnYXRoZXIoIllFQVIiLCAiUHJvZHVjY2lvbiIsICJSZW5kaW1pZW50byIsIGtleSA9IHZhcmlhYmxlLCB2YWx1ZSA9IG51bWJlcikgJT4lIA0KICB1bml0ZShjb21iaSwgdmFyaWFibGUsIFZpc2l0KSAlPiUNCiAgc3ByZWFkKGNvbWJpLCBudW1iZXIpIC0+IGRhdG9zNQ0KYGBgDQoNClJldmlzZW1vcyBsb3Mgc2VpcyBwcmltZXJvcyB5IGxvcyBzZWlzIHVsdGltb3MgIHJlbmdsb25lcyBkZSBkYXRvczUNCg0KYGBge3J9DQpoZWFkKGRhdG9zNSkNCmBgYA0KDQpgYGB7cn0NCnRhaWwoZGF0b3M1KQ0KYGBgDQoNClNlIHJlYWxpemFyw6EgdGFtYmllbiB1bmEgY29waWEgZGUgbG9zIGRhdG9zIGRlIGNhcmFjdGVyaXN0aWNhcyBzaW1wbGVzLCBhZGp1bnRhZG9zIGFsIGluaWNpbyBkZWwgY3VhZGVybm8uDQoNCmBgYHtyfQ0KY2VzX211bmljMiA8LSBjZXNfbXVuaWMNCmBgYA0KRW4gIHByaW5jaXBpbyB0dXZlIG11Y2hvcyBwcm9ibGVtYXMgYWwgcmVhbGl6YXIgZWwgam9pbiwgZW50b25jZXMgZW4gbGEgY29uc29sYSBzZSByZWFsaXpvIHVuIGRhdGEgd3JhbmdsaW5nIGVuIGVsIHF1ZSBzZXBhcsOpIGVsIGPDs2RpZ28gZGVsIG11bmljaXBpbyBlbiBkb3MgY29sdW1uYXMgZGUgdHJlcyBkaWdpdG9zIGNhZGEgdW5hIHkgcmVhbGljw6kgZWwgam9pbiBjb24gZWwgYXRyaWJpdG8gQ0NER08gcXVlIHRlbmlhIGxvcyB1bHRpbW9zIHRyZXMgZGlnaXRvcyBkZSBsYSBpZGVudGlmaWNhY2lvbiBkZSBjYWRhIG11bmljaXBpby4geSBxdWVkYXJvbiBjb24gbG9zIG5vbWJyZXMgY2VzX211bmljMyB5IGRhdG9zNi4NCg0KYGBge3J9DQpjZXNfbXVuaWMzIDwtIHNlcGFyYXRlKGNlc19tdW5pYzIsIE1QSU9fQ0NER08sIGMoIk1QSU8iLCAiQ0NER08iKSxzZXAgPSAiMjAiKQ0KYGBgDQoNCmBgYHtyfQ0KY2VzX211bmljMw0KYGBgDQpgYGB7cn0NCmRhdG9zNiA8LSBzZXBhcmF0ZShkYXRvczUsIE1QSU9fQ0NER08sIGMoIk1QSU8iLCAiQ0NER08iKSxzZXAgPSAiMjAiKQ0KYGBgDQpgYGB7cn0NCmRhdG9zNg0KYGBgDQoNCg0KWWEgaGVtb3MgcmVhbGl6YWRvIHRvZG9zIGxvc3Bhc29zIHByZXZpb3MgcGFyYSByZWFsaXphciBlbCBqb2luLiANCg0KDQpgYGB7cn0NCmNlc19tdW5pY19zdGF0ID0gbGVmdF9qb2luKGNlc19tdW5pYzMsIGRhdG9zNiwgYnk9IkNDREdPIikNCmBgYA0KDQpgYGB7cn0NCnN1bW1hcnkoY2VzX211bmljX3N0YXQpDQpgYGANCg0KIyMgNS4gTUFQQQ0KDQpFbCBwYXNvIGZpbmFsIGRlIGVzdGUgY3VhZGVybm8gZXMgdW4gbWFwYSBlbiBlbCBxdWUgc2UgdmVyYSBsYSBwcm9kdWNjaW9uIGRlIGNhZmUsKHF1ZSBlcyBlbCBjdWx0aXZvIG1hcyByZWxldmFudGUgZW4gZWwgQ2VzYXIpLCBlbiBjYWRhIG11bmljaXBpbyBkZSBDZXNhciBkdXJhbnRlIGVsIGHDsW8gMjAxOC4NCg0KYGBge3J9DQojaW5zdGFsbC5wYWNrYWdlcygibGVhZmxldCIpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KFJDb2xvckJyZXdlcikNCmxpYnJhcnkobGVhZmxldCkNCmBgYA0KDQpgYGB7cn0NCmJpbnMgPC0gYygwLCAyNTAsIDUwMCwgNzUwLCAxMDAwLCAxMjUwLCAxNTAwLCAxNzUwLDIwMDAsMjI1MCkNCnBhbCA8LSBjb2xvckJpbigiWWxPclJkIiwgZG9tYWluID0gY2VzX211bmljX3N0YXQkUHJvZHVjY2lvbl8xMiwgYmlucyA9IGJpbnMpDQoNCiAgbWFwYSA8LSBsZWFmbGV0KGRhdGEgPSBjZXNfbXVuaWNfc3RhdCkgJT4lDQogIGFkZFRpbGVzKCkgJT4lDQogIGFkZFBvbHlnb25zKGxhYmVsID0gflByb2R1Y2Npb25fMTIsDQogICAgICAgICAgICAgIHBvcHVwID0gfk1QSU9fQ05NQlIsDQogICAgICAgICAgICAgIGZpbGxDb2xvciA9IH5wYWwoUHJvZHVjY2lvbl8xMiksDQogICAgICAgICAgICAgIGNvbG9yID0gIiM0NDQ0NDQiLA0KICAgICAgICAgICAgICB3ZWlnaHQgPSAxLA0KICAgICAgICAgICAgICBzbW9vdGhGYWN0b3IgPSAwLjUsDQogICAgICAgICAgICAgIG9wYWNpdHkgPSAxLjAsDQogICAgICAgICAgICAgIGZpbGxPcGFjaXR5ID0gMC41LA0KICAgICAgICAgICAgICBoaWdobGlnaHRPcHRpb25zID0gaGlnaGxpZ2h0T3B0aW9ucyhjb2xvciA9ICJ3aGl0ZSIsIHdlaWdodCA9IDIsIGJyaW5nVG9Gcm9udCA9IFRSVUUpDQogICAgICAgICAgICAgICkgJT4lDQogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJE9wZW5TdHJlZXRNYXApICU+JQ0KICBhZGRMZWdlbmQoImJvdHRvbXJpZ2h0IiwgcGFsID0gcGFsLCB2YWx1ZXMgPSB+UHJvZHVjY2lvbl8xLA0KICAgIHRpdGxlID0gIlByb2R1Y2Npb24gZGUgYWd1YWNhdGUgZW4gZWwgQ2VzYXIgW1Rvbl0gKDIwMTgpIiwNCiAgICBvcGFjaXR5ID0gMSApDQpgYGANCmBgYHtyfQ0KbWFwYQ0KYGBgDQpgYGB7cn0NCnNlc3Npb25JbmZvKCkNCmBgYA==