knitr::opts_chunk$set(echo = TRUE)

Este cuaderno pretende mostrar un acercamiento hacia la economia agricola del departamento de Caqueta, basado en datos espaciales y no espaciales, especificamente un archivo de evaluaciones agropecuarias del departamento y datos del marco geoestadistico nacional del año 2018

##esta primera linea borra cualquier objeto que pudiera tener almacenado el programa

rm(list=ls())

estas librerias seràn de gran utilidad para el desarrollo de la pràctica, con esta linea nos aseguramos de que se instalen solo una vez en el programa

list.of.packages <- c("here", "tidyverse", "rgeos", "maptools", "raster", "sf",  "viridis", "rnaturalearth", "GSODR", "ggrepel", "cowplot")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
library(here)
library(tidyverse)
library(rgeos)
library(maptools)
library(raster)
library(sf)
library(viridis)
library(rnaturalearth)
library(GSODR)
library(ggrepel)
library(cowplot)

En este objeto vamos a asignar los datos no espaciales asociados a las evaluaciones agropecuarias de Caqueta, donde se hace un resumen de los cultivos producidos en cada municipio, ademas de datos estadisticos como el area cultivada por cada elemento ademas de valores de produccion anual de los mismos

datos <- read_csv2("d:/Users/Janus/Documents/Geomatica basica/18_CAQUETA/Caqueta_EVA.csv")
Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
Parsed with column specification:
cols(
  COD_DEP = col_double(),
  DEPARTAMENTO = col_character(),
  COD_MUN = col_double(),
  MUNICIPIO = col_character(),
  GRUPO = col_character(),
  SUBGRUPO = col_character(),
  CULTIVO = col_character(),
  YEAR = col_double(),
  PERIODO = col_character(),
  `H_Sembrada
` = col_double(),
  H_Cosechada = col_double(),
  PROD = col_double(),
  REND = col_double(),
  `ESTADO FISICO PRODUCCION` = col_character(),
  `CICLO_ CULTIVO` = col_character()
)
datos

las siguientes dos lineas nos dejan ver unas muestras de los datos anteriores, la priemra nos deja ver las primeras seis filas y la segunda nos deja ver las ultimas seis del archivo

head(datos)
tail(datos)

vamos a iniciar el trabajo mostrando el rendimiento promedio de la produccion de los diferentes cultivos en cada uno de los muncipios, con esto podemos ver que grupo de cultivos predominan en tema de rendimiento anual en cada municipio

library(dplyr)
datos %>%
  group_by(MUNICIPIO, GRUPO) %>%
  summarise(rend_prom = mean(REND, na.rm = TRUE)) -> REND_resumen
`summarise()` regrouping output by 'MUNICIPIO' (override with `.groups` argument)
REND_resumen
NA

##En esta nueva exploracion, vemos otra agrupacion de los datos, en donde se muestra el rendimiento promedio de cada grupo de cultivo en Ton/año en Caqueta, donde observamos que se destacan los otros permanentes y los cereales, mas adelante veremos que importancia pueden tener estos datos

datos %>%
  group_by(MUNICIPIO, GRUPO) %>%
  summarise(rend_prom = mean(REND, na.rm = TRUE)) -> rend_resumen
`summarise()` regrouping output by 'MUNICIPIO' (override with `.groups` argument)
head(rend_resumen)

aqui vamos a mostrar que municipio tuvo un mayor rendimiento para cada grupo de cultivo especificamente en el año 2018, donde evidenciamos que san vicente del caguan es el municipio con mayor rendimiento.

datos %>%filter(YEAR==2018) %>% 
  group_by(GRUPO, MUNICIPIO) %>%
  summarize(max_rend = max(PROD, na.rm = TRUE)) %>%
    slice(which.max(max_rend)) -> REND_max_2018
`summarise()` regrouping output by 'GRUPO' (override with `.groups` argument)
REND_max_2018

para esta nueva visualizacion, realizaremos un filtro de los datos donde que municipio tuvo una mayor area cosechada para cada grupo de cultivo, observando que hay municipios que destinan una gran superficie para el tema agricola, como lo son Puerto rico y El Doncello.

datos %>%filter(YEAR==2018) %>% group_by(GRUPO, MUNICIPIO) %>%
  summarize(max_HECT_COS = max(H_Cosechada, na.rm = TRUE)) %>%
    slice(which.max(max_HECT_COS)) -> area_cosecha_max
`summarise()` regrouping output by 'GRUPO' (override with `.groups` argument)
area_cosecha_max

aqui realizamos un filtro de los datos para explorar el grupo de cultivo Otros permanentes y el subgrupo de caña para ver que cual fue la maxima produccion de caña panelera dentro del tiempo que cubren los datos.

datos %>% filter(GRUPO=="OTROS PERMANENTES") %>% group_by(MUNICIPIO,SUBGRUPO="CANA", CULTIVO="CANA PANELERA") %>% summarise (max_PROD=max(PROD, na.rm = TRUE)) %>% slice(which.max(max_PROD))->PROD_max
`summarise()` regrouping output by 'MUNICIPIO', 'SUBGRUPO' (override with `.groups` argument)
PROD_max

he decicido realizar una observacion de los datos en el municipio de San Benito, debido a que en la consulta anterior, se observo que este municipio presenta una alta produccion de cacao, llegando llegando hasta un maximo de 36000 hectareas del mismo

datos %>% 
  filter(MUNICIPIO=="SAN VICENTE DEL CAGUAN" & SUBGRUPO=="CANA") %>% 
  group_by(YEAR, CULTIVO="CANA PANELERA") ->  SANV_CACAO
SANV_CACAO

para ver estos datos de una forma grafica, nos aprovecharemos de la funcion ggplot para vrlos de forma grafica y analizarlos de mejor manera, donde observamos que el año de mayor produccion de caña panelera en el municipio fue el 2018 llegando a las 5594 toneladas en ese año

g <- ggplot(aes(x=YEAR, y= PROD/100), data = SANV_CACAO) + geom_bar(stat='identity') + labs(y='Cana panelera Production [Ton x 1000]')

g + ggtitle("Evolution of cana panelera production in SAN VICENTE DEL CAGUAN     from 2013 to 2018") + labs(caption= "Based on EMA data (DANE, 2018)")

ahora, se realizara otra consulta, esta vez para observar la superficie cosechada total por cada grupo de cultivo en el año 2018, donde se observa que los cultivos Otros Permanentes destacan ampliamente sobre el resto

datos %>% 
  filter(YEAR==2018) %>% 
  group_by(GRUPO) %>%
  summarize(sum_HECT_COS = sum(H_Cosechada, na.rm = TRUE)) %>%
     arrange(desc(sum_HECT_COS)) -> total_HECT_COS
`summarise()` ungrouping output (override with `.groups` argument)
total_HECT_COS

basados en lo anterior, vamos a realizar un filtro sobre el mismo año, pero tomando solo los cultivos otros permanentes, esto para ver cual cultivo en especifico es el que predomina respecto al area cosechada en el departamento. Como se observa, el caña panelera junto al cacao, presntan un gran porcentaje del total, donde destaca la caña

datos %>% filter(GRUPO=="OTROS PERMANENTES"& YEAR==2018) %>% group_by(CULTIVO) %>% summarize(sum_cosecha = sum(H_Cosechada, na.rm = TRUE)) %>%
     arrange(desc(sum_cosecha)) -> TOT_COSECHA
`summarise()` ungrouping output (override with `.groups` argument)
TOT_COSECHA

ahora que ya sabemos que la caña panelera es el cultivo otro permanente de mayor area cosechada, con este nuevo filtro veremos que municipio presenta una mayor area cosechada de cacao en el año 2018, donde vemos que el mayor exponente es el municipio de Puerto rico que presenta un area sembrada de 990 hectareas de cafe.

datos %>% 
  filter(YEAR==2018 & GRUPO=="OTROS PERMANENTES") %>% 
  group_by(CULTIVO, MUNICIPIO) %>%
  summarize(AREA_COS_MUN = max(H_Cosechada, na.rm = TRUE)) %>%
    slice(which.max(AREA_COS_MUN)) ->max_area2 
`summarise()` regrouping output by 'CULTIVO' (override with `.groups` argument)
max_area2

antes de realizar el ploteo, a cada una de las clases, que seran los grupos de cultivo, vamos a realizarles una abreviatura, para que se pueda leer con claridad en el ploteo

total_HECT_COS$CROP <- abbreviate(total_HECT_COS$GRUPO, 3)

este ploteo nos muestra el area cultivada por cada grupo de cultivo en el año 2018, veremos la misma informacion de hace varias lineas, pero con este grafico, sera mucho mas facil de sacar conclusiones sobre el mismo

g <- ggplot(aes(x=CROP, y=sum_HECT_COS), data = total_HECT_COS) + geom_bar(stat='identity') + labs(y='Total Harvested Area [Ha]')
g+ ggtitle("Total harvested area by crop groups in 2018 for Caqueta") + theme(plot.title = element_text(hjust = 0.5)) +
   labs(caption= "Based on EMA data (DANE, 2018)")

la segunda parte del informe consistira en realizar una union entre los datos no espacilaes mostrados en la primeraparte y un archivo de datos espaciales proveniente del marco geoestadistico del pais provenineto del DANE

Caq_MUN <-sf::st_read("d:/Users/Janus/Documents/Geomatica basica/18_CAQUETA/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp")
Reading layer `MGN_MPIO_POLITICO' from data source `D:\Users\Janus\Documents\Geomatica basica\18_CAQUETA\ADMINISTRATIVO\MGN_MPIO_POLITICO.shp' using driver `ESRI Shapefile'
Simple feature collection with 16 features and 9 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -76.30622 ymin: -0.70584 xmax: -71.25385 ymax: 2.964148
geographic CRS: WGS 84

veamos que tiene este archivo .shp

Caq_MUN
Simple feature collection with 16 features and 9 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -76.30622 ymin: -0.70584 xmax: -71.25385 ymax: 2.964148
geographic CRS: WGS 84
First 10 features:
   DPTO_CCDGO MPIO_CCDGO             MPIO_CNMBR
1          18      18001              FLORENCIA
2          18      18029                ALBANIA
3          18      18094 BELÉN DE LOS ANDAQUÍES
4          18      18247            EL DONCELLO
5          18      18256              EL PAUJIL
6          18      18410           LA MONTAÑITA
7          18      18460                  MILÁN
8          18      18479                MORELIA
9          18      18610    SAN JOSÉ DEL FRAGUA
10         18      18860             VALPARAÍSO
                              MPIO_CRSLC MPIO_NAREA MPIO_NANO DPTO_CNMBR
1        Decreto 642 de Junio 17 de 1912  2547.6384      2017    CAQUETÁ
2    Ordenanza 3 de Noviembre 12 de 1985   414.1220      2017    CAQUETÁ
3        Decreto 963 de Marzo 14 de 1950  1191.6187      2017    CAQUETÁ
4   Decreto 1678 de Septiembre 7 de 1967  1105.8029      2017    CAQUETÁ
5  Decreto 1678 de Septiembret 7 de 1967  1234.7427      2017    CAQUETÁ
6          Decreto 83 de Julio 6 de 1955  1701.0522      2017    CAQUETÁ
7    Ordenanza 3 de Noviembre 12 de 1985  1220.5726      2017    CAQUETÁ
8    Ordenanza 3 de Noviembre 12 de 1985   462.4799      2017    CAQUETÁ
9    Ordenanza 3 de Noviembre 12 de 1985  1304.7690      2017    CAQUETÁ
10   Ordenanza 3 de Noviembre 12 de 1985  1330.2126      2017    CAQUETÁ
   Shape_Leng Shape_Area                       geometry
1    2.942508 0.20692777 POLYGON ((-75.42074 2.19413...
2    1.112829 0.03361758 POLYGON ((-75.89506 1.36569...
3    2.234657 0.09674460 POLYGON ((-75.78705 1.74982...
4    3.154370 0.08986744 POLYGON ((-75.36167 2.32142...
5    3.529316 0.10030928 POLYGON ((-75.36691 2.21234...
6    3.402939 0.13817351 POLYGON ((-75.40404 1.76944...
7    1.863197 0.09912782 POLYGON ((-75.39362 1.35738...
8    1.518688 0.03755356 POLYGON ((-75.77185 1.57991...
9    2.040837 0.10589313 POLYGON ((-76.16722 1.58752...
10   2.313848 0.10800551 POLYGON ((-75.73128 1.32740...

para realizar el join necesitamos un campo en comun entre ambos paquetes de datos, por lo que usaremos el codigo de municipio para ello, estas dos lineas nos serviran para crear dos campos nuevos a los datos no espaciales, con el objetivo de convertir la columna COD_MUN que es un objeto de tipo numerico a un objeto de tipo factor, cosa fundamental para realizar el join

datos_2 <- datos
datos_2$TEMP <-  as.character(datos_2$COD_MUN)
datos_2$MPIO_CCDGO <- as.factor(datos_2$TEMP)
datos_2

ahora al objeto datos_2 le realizaremos un filtro que consistira en que solo tomara los datos en el que se analize la caña panelera en cada uno de los municipios del departamento. El resultado de esto se almacenara en un nuevo objeto llamado datos_3

datos_2 %>% filter(CULTIVO == "CANA PANELERA")  -> datos_3
datos_3

Aqui vemos la clase del objeto recien creado, vemos que se trata de un dataframe, cosa que es buena para realizar el join

class(datos_3)
[1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame" 

para este nuevo objeto tomaremos solo los campos que nos sean de real interes del objeto datos_3, entre ellos el campo creado previamente que es un factor

datos_4 <- datos_3 %>% dplyr::select(MUNICIPIO, MPIO_CCDGO, YEAR, PROD, REND) 

ahora al resultado de la linea anterior vamos a organizarlo de manera cronologica, es decir, veremos los datos de cada municipio en un año, luego los del siguiente asi hasta cubrir todos los datos

datos_4 %>% 
  gather("YEAR", "PROD", "REND" , key = variable, value = number)
datos_4

ahora vamos a pasar de una organizacion de los datos en forma larga, es decir con muchas filas y pocas columnas a una orgnizacion larga con muchas columnas y pocas filas, de manera que en cada columna veamos los datos de produccion y rendimiento de cada año en columnas independientes, el resultado de este proceso se alamacenara en un nuevo objeto de nombre datos_5

datos_4 %>% 
  group_by(MPIO_CCDGO) %>% 
  mutate(Visit = 1:n()) %>% 
  gather("YEAR", "PROD", "REND", key = variable, value = number) %>% 
  unite(combi, variable, Visit) %>%
  spread(combi, number) -> datos_5
datos_5

ya que tenemos todos los elementos necesarios, procedemos a realizar el join entre los datos no espaciales y los datos espaciales, tomando como punto comun el campo MPIO_CCDGO

Caq_MUN_stat =left_join(Caq_MUN, datos_5, by="MPIO_CCDGO")
summary(Caq_MUN_stat)
  DPTO_CCDGO         MPIO_CCDGO         MPIO_CNMBR       
 Length:16          Length:16          Length:16         
 Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character  
                                                         
                                                         
                                                         
                                                         
  MPIO_CRSLC          MPIO_NAREA        MPIO_NANO     DPTO_CNMBR       
 Length:16          Min.   :  403.4   Min.   :2017   Length:16         
 Class :character   1st Qu.:  948.6   1st Qu.:2017   Class :character  
 Mode  :character   Median : 1269.8   Median :2017   Mode  :character  
                    Mean   : 5631.4   Mean   :2017                     
                    3rd Qu.: 2947.4   3rd Qu.:2017                     
                    Max.   :42312.8   Max.   :2017                     
                                                                       
   Shape_Leng       Shape_Area       MUNICIPIO             PROD_1      
 Min.   : 1.113   Min.   :0.03274   Length:16          Min.   :  1.58  
 1st Qu.: 1.794   1st Qu.:0.07708   Class :character   1st Qu.: 39.00  
 Median : 2.628   Median :0.10310   Mode  :character   Median :214.00  
 Mean   : 4.483   Mean   :0.45741                      Mean   :244.89  
 3rd Qu.: 3.713   3rd Qu.:0.23944                      3rd Qu.:311.00  
 Max.   :20.046   Max.   :3.43579                      Max.   :926.00  
                                                       NA's   :5       
    PROD_10          PROD_11           PROD_12         PROD_2      
 Min.   :  1.32   Min.   :   1.44   Min.   :  96   Min.   :   2.1  
 1st Qu.:  3.03   1st Qu.: 134.00   1st Qu.: 488   1st Qu.:  95.5  
 Median : 42.00   Median : 400.00   Median :1212   Median : 240.0  
 Mean   :204.26   Mean   :1276.59   Mean   :1784   Mean   : 377.7  
 3rd Qu.:410.00   3rd Qu.:1808.00   3rd Qu.:2580   3rd Qu.: 376.5  
 Max.   :680.00   Max.   :5431.00   Max.   :5594   Max.   :1537.0  
 NA's   :5        NA's   :5         NA's   :6      NA's   :5       
     PROD_3           PROD_4            PROD_5           PROD_6      
 Min.   :   1.0   Min.   :   1.35   Min.   :  86.0   Min.   :  1.11  
 1st Qu.:  95.5   1st Qu.: 165.50   1st Qu.: 283.5   1st Qu.:  1.20  
 Median : 240.0   Median : 275.00   Median : 929.0   Median :  1.30  
 Mean   : 710.1   Mean   : 879.12   Mean   :1279.4   Mean   :111.97  
 3rd Qu.: 463.5   3rd Qu.: 837.00   3rd Qu.:1577.0   3rd Qu.:188.00  
 Max.   :4386.0   Max.   :4845.00   Max.   :5557.0   Max.   :450.00  
 NA's   :5        NA's   :5         NA's   :5        NA's   :5       
     PROD_7            PROD_8            PROD_9            REND_1     
 Min.   :   1.05   Min.   :   1.28   Min.   :   1.32   Min.   :3.520  
 1st Qu.:   1.41   1st Qu.:  53.50   1st Qu.:  48.50   1st Qu.:5.490  
 Median :  44.00   Median : 126.00   Median : 525.00   Median :5.520  
 Mean   : 580.05   Mean   : 266.00   Mean   : 602.10   Mean   :5.495  
 3rd Qu.: 380.00   3rd Qu.: 340.00   3rd Qu.: 575.50   3rd Qu.:5.995  
 Max.   :3825.00   Max.   :1118.00   Max.   :2504.00   Max.   :6.380  
 NA's   :5         NA's   :5         NA's   :5         NA's   :5      
    REND_10         REND_11         REND_12          REND_2     
 Min.   :1.000   Min.   :1.000   Min.   :2.000   Min.   :3.840  
 1st Qu.:2.500   1st Qu.:2.500   1st Qu.:4.000   1st Qu.:6.000  
 Median :4.000   Median :4.000   Median :4.500   Median :6.000  
 Mean   :4.391   Mean   :4.027   Mean   :5.130   Mean   :6.031  
 3rd Qu.:6.150   3rd Qu.:5.000   3rd Qu.:6.225   3rd Qu.:6.500  
 Max.   :8.000   Max.   :8.000   Max.   :8.000   Max.   :7.000  
 NA's   :5       NA's   :5       NA's   :6       NA's   :5      
     REND_3          REND_4          REND_5          REND_6     
 Min.   :3.840   Min.   :0.750   Min.   :4.360   Min.   :2.000  
 1st Qu.:5.050   1st Qu.:5.000   1st Qu.:5.505   1st Qu.:4.500  
 Median :6.000   Median :5.400   Median :6.540   Median :5.000  
 Mean   :5.858   Mean   :5.194   Mean   :6.282   Mean   :5.318  
 3rd Qu.:6.500   3rd Qu.:6.250   3rd Qu.:7.090   3rd Qu.:6.250  
 Max.   :7.000   Max.   :6.880   Max.   :7.630   Max.   :8.000  
 NA's   :5       NA's   :5       NA's   :5       NA's   :5      
     REND_7          REND_8          REND_9         YEAR_1    
 Min.   :2.000   Min.   :2.000   Min.   :1.00   Min.   :2007  
 1st Qu.:4.000   1st Qu.:2.500   1st Qu.:3.50   1st Qu.:2007  
 Median :4.620   Median :4.600   Median :4.60   Median :2007  
 Mean   :4.941   Mean   :4.718   Mean   :4.90   Mean   :2007  
 3rd Qu.:6.000   3rd Qu.:6.150   3rd Qu.:6.65   3rd Qu.:2007  
 Max.   :7.500   Max.   :8.000   Max.   :8.00   Max.   :2007  
 NA's   :5       NA's   :5       NA's   :5      NA's   :5     
    YEAR_10        YEAR_11        YEAR_12         YEAR_2    
 Min.   :2016   Min.   :2017   Min.   :2018   Min.   :2008  
 1st Qu.:2016   1st Qu.:2017   1st Qu.:2018   1st Qu.:2008  
 Median :2016   Median :2017   Median :2018   Median :2008  
 Mean   :2016   Mean   :2017   Mean   :2018   Mean   :2008  
 3rd Qu.:2016   3rd Qu.:2017   3rd Qu.:2018   3rd Qu.:2008  
 Max.   :2017   Max.   :2018   Max.   :2018   Max.   :2008  
 NA's   :5      NA's   :5      NA's   :6      NA's   :5     
     YEAR_3         YEAR_4         YEAR_5         YEAR_6    
 Min.   :2009   Min.   :2010   Min.   :2011   Min.   :2012  
 1st Qu.:2009   1st Qu.:2010   1st Qu.:2011   1st Qu.:2012  
 Median :2009   Median :2010   Median :2011   Median :2012  
 Mean   :2009   Mean   :2010   Mean   :2011   Mean   :2012  
 3rd Qu.:2009   3rd Qu.:2010   3rd Qu.:2011   3rd Qu.:2012  
 Max.   :2009   Max.   :2010   Max.   :2011   Max.   :2013  
 NA's   :5      NA's   :5      NA's   :5      NA's   :5     
     YEAR_7         YEAR_8         YEAR_9              geometry 
 Min.   :2013   Min.   :2014   Min.   :2015   POLYGON      :16  
 1st Qu.:2013   1st Qu.:2014   1st Qu.:2015   epsg:4326    : 0  
 Median :2013   Median :2014   Median :2015   +proj=long...: 0  
 Mean   :2013   Mean   :2014   Mean   :2015                     
 3rd Qu.:2013   3rd Qu.:2014   3rd Qu.:2015                     
 Max.   :2014   Max.   :2015   Max.   :2016                     
 NA's   :5      NA's   :5      NA's   :5                        
head(Caq_MUN_stat)
Simple feature collection with 6 features and 46 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -76.1027 ymin: 0.9764735 xmax: -74.89527 ymax: 2.326755
geographic CRS: WGS 84
  DPTO_CCDGO MPIO_CCDGO             MPIO_CNMBR
1         18      18001              FLORENCIA
2         18      18029                ALBANIA
3         18      18094 BELÉN DE LOS ANDAQUÍES
4         18      18247            EL DONCELLO
5         18      18256              EL PAUJIL
6         18      18410           LA MONTAÑITA
                             MPIO_CRSLC MPIO_NAREA MPIO_NANO DPTO_CNMBR
1       Decreto 642 de Junio 17 de 1912   2547.638      2017    CAQUETÁ
2   Ordenanza 3 de Noviembre 12 de 1985    414.122      2017    CAQUETÁ
3       Decreto 963 de Marzo 14 de 1950   1191.619      2017    CAQUETÁ
4  Decreto 1678 de Septiembre 7 de 1967   1105.803      2017    CAQUETÁ
5 Decreto 1678 de Septiembret 7 de 1967   1234.743      2017    CAQUETÁ
6         Decreto 83 de Julio 6 de 1955   1701.052      2017    CAQUETÁ
  Shape_Leng Shape_Area              MUNICIPIO PROD_1 PROD_10 PROD_11
1   2.942508 0.20692777              FLORENCIA    926  680.00  712.00
2   1.112829 0.03361758                ALBANIA    450    2.28 3402.00
3   2.234657 0.09674460 BELEN DE LOS ANDAQUIES    324    1.52    1.44
4   3.154370 0.08986744            EL DONCELLO    247    1.32 2904.00
5   3.529316 0.10030928              EL PAUJIL     35  260.00  360.00
6   3.402939 0.13817351                   <NA>     NA      NA      NA
  PROD_12 PROD_2 PROD_3 PROD_4 PROD_5 PROD_6 PROD_7  PROD_8  PROD_9 REND_1
1     752    900      1   1.35   1548   1.25   1.50 1118.00  552.00   5.51
2    3462    438    612 810.00    929   1.11   1.32  180.00    1.32   5.49
3    1488    315    315 864.00    991   1.20   1.50    2.76 1665.00   3.52
4    2784    240    240 780.00    895   1.20   1.05    1.28 2504.00   5.49
5     360     34     34 182.00    209 396.00 420.00  420.00  560.00   5.83
6      NA     NA     NA     NA     NA     NA     NA      NA      NA     NA
  REND_10 REND_11 REND_12 REND_2 REND_3 REND_4 REND_5 REND_6 REND_7 REND_8
1       4       4       4   6.00   5.00    5.4   5.89      5   4.62    4.6
2       6       6       6   6.00   6.00    6.0   6.54      6   6.00    6.0
3       4       4       4   3.84   3.84    4.0   4.36      4   4.29    8.0
4       8       8       8   6.00   6.00    6.0   6.54      8   7.50    8.0
5       4       4       4   6.50   6.50    6.5   7.09      6   6.00    6.0
6      NA      NA      NA     NA     NA     NA     NA     NA     NA     NA
  REND_9 YEAR_1 YEAR_10 YEAR_11 YEAR_12 YEAR_2 YEAR_3 YEAR_4 YEAR_5 YEAR_6
1    4.6   2007    2016    2017    2018   2008   2009   2010   2011   2012
2    6.0   2007    2016    2017    2018   2008   2009   2010   2011   2012
3    4.5   2007    2016    2017    2018   2008   2009   2010   2011   2012
4    8.0   2007    2016    2017    2018   2008   2009   2010   2011   2012
5    7.0   2007    2016    2017    2018   2008   2009   2010   2011   2012
6     NA     NA      NA      NA      NA     NA     NA     NA     NA     NA
  YEAR_7 YEAR_8 YEAR_9                       geometry
1   2013   2014   2015 POLYGON ((-75.42074 2.19413...
2   2013   2014   2015 POLYGON ((-75.89506 1.36569...
3   2013   2014   2015 POLYGON ((-75.78705 1.74982...
4   2013   2014   2015 POLYGON ((-75.36167 2.32142...
5   2013   2014   2015 POLYGON ((-75.36691 2.21234...
6     NA     NA     NA POLYGON ((-75.40404 1.76944...
Caq_MUN_stat$p2018=as.numeric(Caq_MUN_stat$PROD_12)
summary(Caq_MUN_stat$p2018)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
     96     488    1212    1784    2580    5594       6 

para el mapa final estas librerias seran de gran ayuda

library(RColorBrewer)
library(leaflet)

esta instruccion nos permite ver en un mapa del departamento de Caqueta,los valores de produccion de caña de cada departamente, San vicente del caguan tiene la mayor produccion en el año 2018

bins <- c(50, 100, 500, 1500, 3000, 4000, 5000, 6000)
pal <- colorBin("YlOrRd", domain = Caq_MUN_stat$PROD_12, bins = bins)

  mapa <- leaflet(data = Caq_MUN_stat) %>%
  addTiles() %>%
  addPolygons(label = ~PROD_12,
              popup = ~MPIO_CNMBR,
              fillColor = ~pal(PROD_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 = ~PROD_12,
    title = "Cana panelera production in Caqueta [Ton] (2018)",
    opacity = 1
  )
  

este es el resultado, San vicente del caguan tiene la mayor produccion en el año 2018

mapa
LS0tDQp0aXRsZTogIkluZm9ybWUgdGVjbmljbyBEZXBhcnRhbWVudG8gZGUgQ2FxdWV0YSINCmF1dGhvcjogIkx1aXMgQWxiZXJ0byBDYXN0aWxsbyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQpgYGB7cn0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQoNCiMjIyBFc3RlIGN1YWRlcm5vIHByZXRlbmRlIG1vc3RyYXIgdW4gYWNlcmNhbWllbnRvIGhhY2lhIGxhIGVjb25vbWlhIGFncmljb2xhIGRlbCBkZXBhcnRhbWVudG8gZGUgQ2FxdWV0YSwgYmFzYWRvIGVuIGRhdG9zIGVzcGFjaWFsZXMgeSBubyBlc3BhY2lhbGVzLCBlc3BlY2lmaWNhbWVudGUgdW4gYXJjaGl2byBkZSBldmFsdWFjaW9uZXMgYWdyb3BlY3VhcmlhcyBkZWwgZGVwYXJ0YW1lbnRvIHkgZGF0b3MgZGVsIG1hcmNvIGdlb2VzdGFkaXN0aWNvIG5hY2lvbmFsIGRlbCBhw7FvIDIwMTgNCg0KIyNlc3RhIHByaW1lcmEgbGluZWEgYm9ycmEgY3VhbHF1aWVyIG9iamV0byBxdWUgcHVkaWVyYSB0ZW5lciBhbG1hY2VuYWRvIGVsIHByb2dyYW1hDQpgYGB7cn0NCnJtKGxpc3Q9bHMoKSkNCmBgYA0KIyMjIGVzdGFzIGxpYnJlcmlhcyBzZXLDoG4gZGUgZ3JhbiB1dGlsaWRhZCBwYXJhIGVsIGRlc2Fycm9sbG8gZGUgbGEgcHLDoGN0aWNhLCBjb24gZXN0YSBsaW5lYSBub3MgYXNlZ3VyYW1vcyBkZSBxdWUgc2UgaW5zdGFsZW4gc29sbyB1bmEgdmV6IGVuIGVsIHByb2dyYW1hDQpgYGB7cn0NCmxpc3Qub2YucGFja2FnZXMgPC0gYygiaGVyZSIsICJ0aWR5dmVyc2UiLCAicmdlb3MiLCAibWFwdG9vbHMiLCAicmFzdGVyIiwgInNmIiwgICJ2aXJpZGlzIiwgInJuYXR1cmFsZWFydGgiLCAiR1NPRFIiLCAiZ2dyZXBlbCIsICJjb3dwbG90IikNCm5ldy5wYWNrYWdlcyA8LSBsaXN0Lm9mLnBhY2thZ2VzWyEobGlzdC5vZi5wYWNrYWdlcyAlaW4lIGluc3RhbGxlZC5wYWNrYWdlcygpWywiUGFja2FnZSJdKV0NCmlmKGxlbmd0aChuZXcucGFja2FnZXMpKSBpbnN0YWxsLnBhY2thZ2VzKG5ldy5wYWNrYWdlcykNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkoaGVyZSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZ2VvcykNCmxpYnJhcnkobWFwdG9vbHMpDQpsaWJyYXJ5KHJhc3RlcikNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KHJuYXR1cmFsZWFydGgpDQpsaWJyYXJ5KEdTT0RSKQ0KbGlicmFyeShnZ3JlcGVsKQ0KbGlicmFyeShjb3dwbG90KQ0KYGBgDQojIyBFbiBlc3RlIG9iamV0byB2YW1vcyBhIGFzaWduYXIgbG9zIGRhdG9zIG5vIGVzcGFjaWFsZXMgYXNvY2lhZG9zIGEgbGFzIGV2YWx1YWNpb25lcyBhZ3JvcGVjdWFyaWFzIGRlIENhcXVldGEsIGRvbmRlIHNlIGhhY2UgdW4gcmVzdW1lbiBkZSBsb3MgY3VsdGl2b3MgcHJvZHVjaWRvcyBlbiBjYWRhIG11bmljaXBpbywgYWRlbWFzIGRlIGRhdG9zIGVzdGFkaXN0aWNvcyBjb21vIGVsIGFyZWEgY3VsdGl2YWRhIHBvciBjYWRhIGVsZW1lbnRvIGFkZW1hcyBkZSB2YWxvcmVzIGRlIHByb2R1Y2Npb24gYW51YWwgZGUgbG9zIG1pc21vcw0KYGBge3J9DQpkYXRvcyA8LSByZWFkX2NzdjIoImQ6L1VzZXJzL0phbnVzL0RvY3VtZW50cy9HZW9tYXRpY2EgYmFzaWNhLzE4X0NBUVVFVEEvQ2FxdWV0YV9FVkEuY3N2IikNCmRhdG9zDQpgYGANCiMjIGxhcyBzaWd1aWVudGVzIGRvcyBsaW5lYXMgbm9zIGRlamFuIHZlciB1bmFzIG11ZXN0cmFzIGRlIGxvcyBkYXRvcyBhbnRlcmlvcmVzLCBsYSBwcmllbXJhIG5vcyBkZWphIHZlciBsYXMgcHJpbWVyYXMgc2VpcyBmaWxhcyB5IGxhIHNlZ3VuZGEgbm9zIGRlamEgdmVyIGxhcyB1bHRpbWFzIHNlaXMgZGVsIGFyY2hpdm8NCmBgYHtyfQ0KaGVhZChkYXRvcykNCmBgYA0KDQpgYGB7cn0NCnRhaWwoZGF0b3MpDQpgYGANCiMjIHZhbW9zIGEgaW5pY2lhciBlbCB0cmFiYWpvIG1vc3RyYW5kbyBlbCByZW5kaW1pZW50byBwcm9tZWRpbyBkZSBsYSBwcm9kdWNjaW9uIGRlIGxvcyBkaWZlcmVudGVzIGN1bHRpdm9zIGVuIGNhZGEgdW5vIGRlIGxvcyBtdW5jaXBpb3MsIGNvbiBlc3RvIHBvZGVtb3MgdmVyIHF1ZSBncnVwbyBkZSBjdWx0aXZvcyBwcmVkb21pbmFuIGVuIHRlbWEgZGUgcmVuZGltaWVudG8gYW51YWwgZW4gY2FkYSBtdW5pY2lwaW8NCg0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQoNCg0KYGBgDQpgYGB7cn0NCmRhdG9zICU+JQ0KICBncm91cF9ieShNVU5JQ0lQSU8sIEdSVVBPKSAlPiUNCiAgc3VtbWFyaXNlKHJlbmRfcHJvbSA9IG1lYW4oUkVORCwgbmEucm0gPSBUUlVFKSkgLT4gUkVORF9yZXN1bWVuDQpSRU5EX3Jlc3VtZW4NCg0KYGBgDQoNCg0KIyNFbiBlc3RhIG51ZXZhIGV4cGxvcmFjaW9uLCB2ZW1vcyBvdHJhIGFncnVwYWNpb24gZGUgbG9zIGRhdG9zLCBlbiBkb25kZSBzZSBtdWVzdHJhIGVsIHJlbmRpbWllbnRvIHByb21lZGlvIGRlIGNhZGEgZ3J1cG8gZGUgY3VsdGl2byBlbiBUb24vYcOxbyBlbiBDYXF1ZXRhLCBkb25kZSBvYnNlcnZhbW9zIHF1ZSBzZSBkZXN0YWNhbiBsb3Mgb3Ryb3MgcGVybWFuZW50ZXMgeSBsb3MgY2VyZWFsZXMsIG1hcyBhZGVsYW50ZSB2ZXJlbW9zIHF1ZSBpbXBvcnRhbmNpYSBwdWVkZW4gdGVuZXIgZXN0b3MgZGF0b3MNCmBgYHtyfQ0KZGF0b3MgJT4lDQogIGdyb3VwX2J5KE1VTklDSVBJTywgR1JVUE8pICU+JQ0KICBzdW1tYXJpc2UocmVuZF9wcm9tID0gbWVhbihSRU5ELCBuYS5ybSA9IFRSVUUpKSAtPiByZW5kX3Jlc3VtZW4NCg0KaGVhZChyZW5kX3Jlc3VtZW4pDQpgYGANCiMjIGFxdWkgdmFtb3MgYSBtb3N0cmFyIHF1ZSBtdW5pY2lwaW8gdHV2byB1biBtYXlvciByZW5kaW1pZW50byBwYXJhIGNhZGEgZ3J1cG8gZGUgY3VsdGl2byBlc3BlY2lmaWNhbWVudGUgZW4gZWwgYcOxbyAyMDE4LCBkb25kZSBldmlkZW5jaWFtb3MgcXVlIHNhbiB2aWNlbnRlIGRlbCBjYWd1YW4gZXMgZWwgbXVuaWNpcGlvIGNvbiBtYXlvciByZW5kaW1pZW50by4NCmBgYHtyfQ0KZGF0b3MgJT4lZmlsdGVyKFlFQVI9PTIwMTgpICU+JSANCiAgZ3JvdXBfYnkoR1JVUE8sIE1VTklDSVBJTykgJT4lDQogIHN1bW1hcml6ZShtYXhfcmVuZCA9IG1heChQUk9ELCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgICBzbGljZSh3aGljaC5tYXgobWF4X3JlbmQpKSAtPiBSRU5EX21heF8yMDE4DQoNClJFTkRfbWF4XzIwMTgNCmBgYA0KIyMgcGFyYSBlc3RhIG51ZXZhIHZpc3VhbGl6YWNpb24sIHJlYWxpemFyZW1vcyB1biBmaWx0cm8gZGUgbG9zIGRhdG9zIGRvbmRlICBxdWUgbXVuaWNpcGlvIHR1dm8gdW5hIG1heW9yIGFyZWEgY29zZWNoYWRhIHBhcmEgY2FkYSBncnVwbyBkZSBjdWx0aXZvLCBvYnNlcnZhbmRvIHF1ZSBoYXkgbXVuaWNpcGlvcyBxdWUgZGVzdGluYW4gdW5hIGdyYW4gc3VwZXJmaWNpZSBwYXJhIGVsIHRlbWEgYWdyaWNvbGEsIGNvbW8gbG8gc29uIFB1ZXJ0byByaWNvIHkgRWwgRG9uY2VsbG8uDQpgYGB7cn0NCmRhdG9zICU+JWZpbHRlcihZRUFSPT0yMDE4KSAlPiUgZ3JvdXBfYnkoR1JVUE8sIE1VTklDSVBJTykgJT4lDQogIHN1bW1hcml6ZShtYXhfSEVDVF9DT1MgPSBtYXgoSF9Db3NlY2hhZGEsIG5hLnJtID0gVFJVRSkpICU+JQ0KICAgIHNsaWNlKHdoaWNoLm1heChtYXhfSEVDVF9DT1MpKSAtPiBhcmVhX2Nvc2VjaGFfbWF4DQoNCmFyZWFfY29zZWNoYV9tYXgNCmBgYA0KIyMgYXF1aSByZWFsaXphbW9zIHVuIGZpbHRybyBkZSBsb3MgZGF0b3MgcGFyYSBleHBsb3JhciBlbCBncnVwbyBkZSBjdWx0aXZvIE90cm9zIHBlcm1hbmVudGVzIHkgZWwgc3ViZ3J1cG8gZGUgY2HDsWEgIHBhcmEgdmVyIHF1ZSBjdWFsIGZ1ZSBsYSBtYXhpbWEgcHJvZHVjY2lvbiBkZSBjYcOxYSBwYW5lbGVyYSBkZW50cm8gZGVsIHRpZW1wbyBxdWUgY3VicmVuIGxvcyBkYXRvcy4NCmBgYHtyfQ0KZGF0b3MgJT4lIGZpbHRlcihHUlVQTz09Ik9UUk9TIFBFUk1BTkVOVEVTIikgJT4lIGdyb3VwX2J5KE1VTklDSVBJTyxTVUJHUlVQTz0iQ0FOQSIsIENVTFRJVk89IkNBTkEgUEFORUxFUkEiKSAlPiUgc3VtbWFyaXNlIChtYXhfUFJPRD1tYXgoUFJPRCwgbmEucm0gPSBUUlVFKSkgJT4lIHNsaWNlKHdoaWNoLm1heChtYXhfUFJPRCkpLT5QUk9EX21heA0KUFJPRF9tYXgNCmBgYA0KIyMgaGUgZGVjaWNpZG8gcmVhbGl6YXIgdW5hIG9ic2VydmFjaW9uIGRlIGxvcyBkYXRvcyBlbiBlbCBtdW5pY2lwaW8gZGUgU2FuIEJlbml0bywgZGViaWRvIGEgcXVlIGVuIGxhIGNvbnN1bHRhIGFudGVyaW9yLCBzZSBvYnNlcnZvIHF1ZSBlc3RlIG11bmljaXBpbyBwcmVzZW50YSB1bmEgYWx0YSBwcm9kdWNjaW9uIGRlIGNhY2FvLCBsbGVnYW5kbyBsbGVnYW5kbyBoYXN0YSB1biBtYXhpbW8gZGUgMzYwMDAgaGVjdGFyZWFzIGRlbCBtaXNtbw0KYGBge3J9DQpkYXRvcyAlPiUgDQogIGZpbHRlcihNVU5JQ0lQSU89PSJTQU4gVklDRU5URSBERUwgQ0FHVUFOIiAmIFNVQkdSVVBPPT0iQ0FOQSIpICU+JSANCiAgZ3JvdXBfYnkoWUVBUiwgQ1VMVElWTz0iQ0FOQSBQQU5FTEVSQSIpIC0+ICBTQU5WX0NBQ0FPDQpTQU5WX0NBQ0FPDQpgYGANCiMjIHBhcmEgdmVyIGVzdG9zIGRhdG9zIGRlIHVuYSBmb3JtYSBncmFmaWNhLCBub3MgYXByb3ZlY2hhcmVtb3MgZGUgbGEgZnVuY2lvbiBnZ3Bsb3QgcGFyYSB2cmxvcyBkZSBmb3JtYSBncmFmaWNhIHkgYW5hbGl6YXJsb3MgZGUgbWVqb3IgbWFuZXJhLCBkb25kZSBvYnNlcnZhbW9zIHF1ZSBlbCBhw7FvIGRlIG1heW9yIHByb2R1Y2Npb24gZGUgY2HDsWEgcGFuZWxlcmEgZW4gZWwgbXVuaWNpcGlvIGZ1ZSBlbCAyMDE4IGxsZWdhbmRvIGEgbGFzIDU1OTQgdG9uZWxhZGFzIGVuIGVzZSBhw7FvDQpgYGB7cn0NCmcgPC0gZ2dwbG90KGFlcyh4PVlFQVIsIHk9IFBST0QvMTAwKSwgZGF0YSA9IFNBTlZfQ0FDQU8pICsgZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknKSArIGxhYnMoeT0nQ2FuYSBwYW5lbGVyYSBQcm9kdWN0aW9uIFtUb24geCAxMDAwXScpDQoNCmcgKyBnZ3RpdGxlKCJFdm9sdXRpb24gb2YgY2FuYSBwYW5lbGVyYSBwcm9kdWN0aW9uIGluIFNBTiBWSUNFTlRFIERFTCBDQUdVQU4JIGZyb20gMjAxMyB0byAyMDE4IikgKyBsYWJzKGNhcHRpb249ICJCYXNlZCBvbiBFTUEgZGF0YSAoREFORSwgMjAxOCkiKQ0KYGBgDQojIyBhaG9yYSwgc2UgcmVhbGl6YXJhIG90cmEgY29uc3VsdGEsIGVzdGEgdmV6IHBhcmEgb2JzZXJ2YXIgbGEgc3VwZXJmaWNpZSBjb3NlY2hhZGEgdG90YWwgcG9yIGNhZGEgZ3J1cG8gZGUgY3VsdGl2byBlbiBlbCBhw7FvIDIwMTgsIGRvbmRlIHNlIG9ic2VydmEgcXVlIGxvcyBjdWx0aXZvcyBPdHJvcyBQZXJtYW5lbnRlcyBkZXN0YWNhbiBhbXBsaWFtZW50ZSBzb2JyZSBlbCByZXN0bw0KYGBge3J9DQpkYXRvcyAlPiUgDQogIGZpbHRlcihZRUFSPT0yMDE4KSAlPiUgDQogIGdyb3VwX2J5KEdSVVBPKSAlPiUNCiAgc3VtbWFyaXplKHN1bV9IRUNUX0NPUyA9IHN1bShIX0Nvc2VjaGFkYSwgbmEucm0gPSBUUlVFKSkgJT4lDQogICAgIGFycmFuZ2UoZGVzYyhzdW1fSEVDVF9DT1MpKSAtPiB0b3RhbF9IRUNUX0NPUw0KdG90YWxfSEVDVF9DT1MNCmBgYA0KIyMgYmFzYWRvcyBlbiBsbyBhbnRlcmlvciwgdmFtb3MgYSByZWFsaXphciB1biBmaWx0cm8gc29icmUgZWwgbWlzbW8gYcOxbywgcGVybyB0b21hbmRvIHNvbG8gbG9zIGN1bHRpdm9zIG90cm9zIHBlcm1hbmVudGVzLCBlc3RvIHBhcmEgdmVyIGN1YWwgY3VsdGl2byBlbiBlc3BlY2lmaWNvIGVzIGVsIHF1ZSBwcmVkb21pbmEgcmVzcGVjdG8gYWwgYXJlYSBjb3NlY2hhZGEgZW4gZWwgZGVwYXJ0YW1lbnRvLiBDb21vIHNlIG9ic2VydmEsIGVsIGNhw7FhIHBhbmVsZXJhIGp1bnRvIGFsIGNhY2FvLCBwcmVzbnRhbiB1biBncmFuIHBvcmNlbnRhamUgZGVsIHRvdGFsLCBkb25kZSBkZXN0YWNhIGxhIGNhw7FhDQpgYGB7cn0NCmRhdG9zICU+JSBmaWx0ZXIoR1JVUE89PSJPVFJPUyBQRVJNQU5FTlRFUyImIFlFQVI9PTIwMTgpICU+JSBncm91cF9ieShDVUxUSVZPKSAlPiUgc3VtbWFyaXplKHN1bV9jb3NlY2hhID0gc3VtKEhfQ29zZWNoYWRhLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgICAgYXJyYW5nZShkZXNjKHN1bV9jb3NlY2hhKSkgLT4gVE9UX0NPU0VDSEENCg0KVE9UX0NPU0VDSEENCmBgYA0KIyMgYWhvcmEgcXVlIHlhIHNhYmVtb3MgcXVlIGxhIGNhw7FhIHBhbmVsZXJhIGVzIGVsIGN1bHRpdm8gb3RybyBwZXJtYW5lbnRlIGRlIG1heW9yIGFyZWEgY29zZWNoYWRhLCBjb24gZXN0ZSBudWV2byBmaWx0cm8gdmVyZW1vcyBxdWUgbXVuaWNpcGlvIHByZXNlbnRhIHVuYSBtYXlvciBhcmVhIGNvc2VjaGFkYSBkZSBjYWNhbyBlbiBlbCBhw7FvIDIwMTgsIGRvbmRlIHZlbW9zIHF1ZSBlbCBtYXlvciBleHBvbmVudGUgZXMgZWwgbXVuaWNpcGlvIGRlIFB1ZXJ0byByaWNvIHF1ZSBwcmVzZW50YSB1biBhcmVhIHNlbWJyYWRhIGRlIDk5MCBoZWN0YXJlYXMgZGUgY2FmZS4NCmBgYHtyfQ0KZGF0b3MgJT4lIA0KICBmaWx0ZXIoWUVBUj09MjAxOCAmIEdSVVBPPT0iT1RST1MgUEVSTUFORU5URVMiKSAlPiUgDQogIGdyb3VwX2J5KENVTFRJVk8sIE1VTklDSVBJTykgJT4lDQogIHN1bW1hcml6ZShBUkVBX0NPU19NVU4gPSBtYXgoSF9Db3NlY2hhZGEsIG5hLnJtID0gVFJVRSkpICU+JQ0KICAgIHNsaWNlKHdoaWNoLm1heChBUkVBX0NPU19NVU4pKSAtPm1heF9hcmVhMiANCg0KbWF4X2FyZWEyDQpgYGANCiMjIGFudGVzIGRlIHJlYWxpemFyIGVsIHBsb3RlbywgYSBjYWRhIHVuYSBkZSBsYXMgY2xhc2VzLCBxdWUgc2VyYW4gbG9zIGdydXBvcyBkZSBjdWx0aXZvLCB2YW1vcyBhIHJlYWxpemFybGVzIHVuYSBhYnJldmlhdHVyYSwgcGFyYSBxdWUgc2UgcHVlZGEgbGVlciBjb24gY2xhcmlkYWQgZW4gZWwgcGxvdGVvDQpgYGB7cn0NCnRvdGFsX0hFQ1RfQ09TJENST1AgPC0gYWJicmV2aWF0ZSh0b3RhbF9IRUNUX0NPUyRHUlVQTywgMykNCmBgYA0KIyMgZXN0ZSBwbG90ZW8gbm9zIG11ZXN0cmEgZWwgYXJlYSBjdWx0aXZhZGEgcG9yIGNhZGEgZ3J1cG8gZGUgY3VsdGl2byBlbiBlbCBhw7FvIDIwMTgsIHZlcmVtb3MgbGEgbWlzbWEgaW5mb3JtYWNpb24gZGUgaGFjZSB2YXJpYXMgbGluZWFzLCBwZXJvIGNvbiBlc3RlIGdyYWZpY28sIHNlcmEgbXVjaG8gbWFzIGZhY2lsIGRlIHNhY2FyIGNvbmNsdXNpb25lcyBzb2JyZSBlbCBtaXNtbw0KYGBge3J9DQpnIDwtIGdncGxvdChhZXMoeD1DUk9QLCB5PXN1bV9IRUNUX0NPUyksIGRhdGEgPSB0b3RhbF9IRUNUX0NPUykgKyBnZW9tX2JhcihzdGF0PSdpZGVudGl0eScpICsgbGFicyh5PSdUb3RhbCBIYXJ2ZXN0ZWQgQXJlYSBbSGFdJykNCmBgYA0KDQpgYGB7cn0NCmcrIGdndGl0bGUoIlRvdGFsIGhhcnZlc3RlZCBhcmVhIGJ5IGNyb3AgZ3JvdXBzIGluIDIwMTggZm9yIENhcXVldGEiKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArDQogICBsYWJzKGNhcHRpb249ICJCYXNlZCBvbiBFTUEgZGF0YSAoREFORSwgMjAxOCkiKQ0KYGBgDQojIyBsYSBzZWd1bmRhIHBhcnRlIGRlbCBpbmZvcm1lIGNvbnNpc3RpcmEgZW4gcmVhbGl6YXIgdW5hIHVuaW9uIGVudHJlIGxvcyBkYXRvcyBubyBlc3BhY2lsYWVzIG1vc3RyYWRvcyBlbiBsYSBwcmltZXJhcGFydGUgeSB1biBhcmNoaXZvIGRlIGRhdG9zIGVzcGFjaWFsZXMgcHJvdmVuaWVudGUgZGVsIG1hcmNvIGdlb2VzdGFkaXN0aWNvIGRlbCBwYWlzIHByb3ZlbmluZXRvIGRlbCBEQU5FDQpgYGB7cn0NCkNhcV9NVU4gPC1zZjo6c3RfcmVhZCgiZDovVXNlcnMvSmFudXMvRG9jdW1lbnRzL0dlb21hdGljYSBiYXNpY2EvMThfQ0FRVUVUQS9BRE1JTklTVFJBVElWTy9NR05fTVBJT19QT0xJVElDTy5zaHAiKQ0KYGBgDQojIyB2ZWFtb3MgcXVlIHRpZW5lIGVzdGUgYXJjaGl2byAuc2hwDQpgYGB7cn0NCkNhcV9NVU4NCmBgYA0KIyMgcGFyYSByZWFsaXphciBlbCBqb2luIG5lY2VzaXRhbW9zIHVuIGNhbXBvIGVuIGNvbXVuIGVudHJlIGFtYm9zIHBhcXVldGVzIGRlIGRhdG9zLCBwb3IgbG8gcXVlIHVzYXJlbW9zIGVsIGNvZGlnbyBkZSBtdW5pY2lwaW8gcGFyYSBlbGxvLCBlc3RhcyBkb3MgbGluZWFzIG5vcyBzZXJ2aXJhbiBwYXJhIGNyZWFyIGRvcyBjYW1wb3MgbnVldm9zIGEgbG9zIGRhdG9zIG5vIGVzcGFjaWFsZXMsIGNvbiBlbCBvYmpldGl2byBkZSBjb252ZXJ0aXIgbGEgY29sdW1uYSBDT0RfTVVOIHF1ZSBlcyB1biBvYmpldG8gZGUgdGlwbyBudW1lcmljbyBhIHVuIG9iamV0byBkZSB0aXBvIGZhY3RvciwgY29zYSBmdW5kYW1lbnRhbCBwYXJhIHJlYWxpemFyIGVsIGpvaW4NCmBgYHtyfQ0KZGF0b3NfMiA8LSBkYXRvcw0KZGF0b3NfMiRURU1QIDwtICBhcy5jaGFyYWN0ZXIoZGF0b3NfMiRDT0RfTVVOKQ0KYGBgDQoNCg0KYGBge3J9DQpkYXRvc18yJE1QSU9fQ0NER08gPC0gYXMuZmFjdG9yKGRhdG9zXzIkVEVNUCkNCmRhdG9zXzINCmBgYA0KIyMgYWhvcmEgYWwgb2JqZXRvIGRhdG9zXzIgbGUgcmVhbGl6YXJlbW9zIHVuIGZpbHRybyBxdWUgY29uc2lzdGlyYSBlbiBxdWUgc29sbyB0b21hcmEgbG9zIGRhdG9zIGVuIGVsIHF1ZSBzZSBhbmFsaXplIGxhIGNhw7FhIHBhbmVsZXJhIGVuIGNhZGEgdW5vIGRlIGxvcyBtdW5pY2lwaW9zIGRlbCBkZXBhcnRhbWVudG8uIEVsIHJlc3VsdGFkbyBkZSBlc3RvIHNlIGFsbWFjZW5hcmEgZW4gdW4gbnVldm8gb2JqZXRvIGxsYW1hZG8gZGF0b3NfMw0KYGBge3J9DQpkYXRvc18yICU+JSBmaWx0ZXIoQ1VMVElWTyA9PSAiQ0FOQSBQQU5FTEVSQSIpICAtPiBkYXRvc18zDQpkYXRvc18zDQpgYGANCiMjIEFxdWkgdmVtb3MgbGEgY2xhc2UgZGVsIG9iamV0byByZWNpZW4gY3JlYWRvLCB2ZW1vcyBxdWUgc2UgdHJhdGEgZGUgdW4gZGF0YWZyYW1lLCBjb3NhIHF1ZSBlcyBidWVuYSBwYXJhIHJlYWxpemFyIGVsIGpvaW4NCmBgYHtyfQ0KY2xhc3MoZGF0b3NfMykNCmBgYA0KIyMgcGFyYSBlc3RlIG51ZXZvIG9iamV0byB0b21hcmVtb3Mgc29sbyBsb3MgY2FtcG9zIHF1ZSBub3Mgc2VhbiBkZSByZWFsIGludGVyZXMgZGVsIG9iamV0byBkYXRvc18zLCBlbnRyZSBlbGxvcyBlbCBjYW1wbyBjcmVhZG8gcHJldmlhbWVudGUgcXVlIGVzIHVuIGZhY3Rvcg0KYGBge3J9DQpkYXRvc180IDwtIGRhdG9zXzMgJT4lIGRwbHlyOjpzZWxlY3QoTVVOSUNJUElPLCBNUElPX0NDREdPLCBZRUFSLCBQUk9ELCBSRU5EKSANCmBgYA0KIyMgYWhvcmEgYWwgcmVzdWx0YWRvIGRlIGxhIGxpbmVhIGFudGVyaW9yIHZhbW9zIGEgb3JnYW5pemFybG8gZGUgbWFuZXJhIGNyb25vbG9naWNhLCBlcyBkZWNpciwgdmVyZW1vcyBsb3MgZGF0b3MgZGUgY2FkYSBtdW5pY2lwaW8gZW4gdW4gYcOxbywgbHVlZ28gbG9zIGRlbCBzaWd1aWVudGUgYXNpIGhhc3RhIGN1YnJpciB0b2RvcyBsb3MgZGF0b3MNCmBgYHtyfQ0KZGF0b3NfNCAlPiUgDQogIGdhdGhlcigiWUVBUiIsICJQUk9EIiwgIlJFTkQiICwga2V5ID0gdmFyaWFibGUsIHZhbHVlID0gbnVtYmVyKQ0KZGF0b3NfNA0KYGBgDQojIGFob3JhIHZhbW9zIGEgcGFzYXIgZGUgdW5hIG9yZ2FuaXphY2lvbiBkZSBsb3MgZGF0b3MgZW4gZm9ybWEgbGFyZ2EsIGVzIGRlY2lyIGNvbiBtdWNoYXMgZmlsYXMgeSBwb2NhcyBjb2x1bW5hcyBhIHVuYSBvcmduaXphY2lvbiBsYXJnYSBjb24gbXVjaGFzIGNvbHVtbmFzIHkgcG9jYXMgZmlsYXMsIGRlIG1hbmVyYSBxdWUgZW4gY2FkYSBjb2x1bW5hIHZlYW1vcyBsb3MgZGF0b3MgZGUgcHJvZHVjY2lvbiB5IHJlbmRpbWllbnRvIGRlIGNhZGEgYcOxbyBlbiBjb2x1bW5hcyBpbmRlcGVuZGllbnRlcywgZWwgcmVzdWx0YWRvIGRlIGVzdGUgcHJvY2VzbyBzZSBhbGFtYWNlbmFyYSBlbiB1biBudWV2byBvYmpldG8gZGUgbm9tYnJlIGRhdG9zXzUNCmBgYHtyfQ0KZGF0b3NfNCAlPiUgDQogIGdyb3VwX2J5KE1QSU9fQ0NER08pICU+JSANCiAgbXV0YXRlKFZpc2l0ID0gMTpuKCkpICU+JSANCiAgZ2F0aGVyKCJZRUFSIiwgIlBST0QiLCAiUkVORCIsIGtleSA9IHZhcmlhYmxlLCB2YWx1ZSA9IG51bWJlcikgJT4lIA0KICB1bml0ZShjb21iaSwgdmFyaWFibGUsIFZpc2l0KSAlPiUNCiAgc3ByZWFkKGNvbWJpLCBudW1iZXIpIC0+IGRhdG9zXzUNCg0KYGBgDQpgYGB7cn0NCmRhdG9zXzUNCmBgYA0KDQoNCiMjIHlhIHF1ZSB0ZW5lbW9zIHRvZG9zIGxvcyBlbGVtZW50b3MgbmVjZXNhcmlvcywgcHJvY2VkZW1vcyBhIHJlYWxpemFyIGVsIGpvaW4gZW50cmUgbG9zIGRhdG9zIG5vIGVzcGFjaWFsZXMgeSBsb3MgZGF0b3MgZXNwYWNpYWxlcywgdG9tYW5kbyBjb21vIHB1bnRvIGNvbXVuIGVsIGNhbXBvIE1QSU9fQ0NER08NCmBgYHtyfQ0KQ2FxX01VTl9zdGF0ID1sZWZ0X2pvaW4oQ2FxX01VTiwgZGF0b3NfNSwgYnk9Ik1QSU9fQ0NER08iKQ0Kc3VtbWFyeShDYXFfTVVOX3N0YXQpDQpgYGANCmBgYHtyfQ0KaGVhZChDYXFfTVVOX3N0YXQpDQpgYGANCg0KDQpgYGB7cn0NCkNhcV9NVU5fc3RhdCRwMjAxOD1hcy5udW1lcmljKENhcV9NVU5fc3RhdCRQUk9EXzEyKQ0KYGBgDQpgYGB7cn0NCnN1bW1hcnkoQ2FxX01VTl9zdGF0JHAyMDE4KQ0KYGBgDQoNCg0KDQojIyBwYXJhIGVsIG1hcGEgZmluYWwgZXN0YXMgbGlicmVyaWFzIHNlcmFuIGRlIGdyYW4gYXl1ZGENCmBgYHtyfQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQpsaWJyYXJ5KGxlYWZsZXQpDQpgYGANCiMjIGVzdGEgaW5zdHJ1Y2Npb24gbm9zIHBlcm1pdGUgdmVyIGVuIHVuIG1hcGEgZGVsIGRlcGFydGFtZW50byBkZSBDYXF1ZXRhLGxvcyB2YWxvcmVzIGRlIHByb2R1Y2Npb24gZGUgY2HDsWEgZGUgY2FkYSBkZXBhcnRhbWVudGUsIFNhbiB2aWNlbnRlIGRlbCBjYWd1YW4gdGllbmUgbGEgbWF5b3IgcHJvZHVjY2lvbiBlbiBlbCBhw7FvIDIwMTgNCmBgYHtyfQ0KYmlucyA8LSBjKDUwLCAxMDAsIDUwMCwgMTUwMCwgMzAwMCwgNDAwMCwgNTAwMCwgNjAwMCkNCnBhbCA8LSBjb2xvckJpbigiWWxPclJkIiwgZG9tYWluID0gQ2FxX01VTl9zdGF0JFBST0RfMTIsIGJpbnMgPSBiaW5zKQ0KDQogIG1hcGEgPC0gbGVhZmxldChkYXRhID0gQ2FxX01VTl9zdGF0KSAlPiUNCiAgYWRkVGlsZXMoKSAlPiUNCiAgYWRkUG9seWdvbnMobGFiZWwgPSB+UFJPRF8xMiwNCiAgICAgICAgICAgICAgcG9wdXAgPSB+TVBJT19DTk1CUiwNCiAgICAgICAgICAgICAgZmlsbENvbG9yID0gfnBhbChQUk9EXzEyKSwNCiAgICAgICAgICAgICAgY29sb3IgPSAiIzQ0NDQ0NCIsDQogICAgICAgICAgICAgIHdlaWdodCA9IDEsDQogICAgICAgICAgICAgIHNtb290aEZhY3RvciA9IDAuNSwNCiAgICAgICAgICAgICAgb3BhY2l0eSA9IDEuMCwNCiAgICAgICAgICAgICAgZmlsbE9wYWNpdHkgPSAwLjUsDQogICAgICAgICAgICAgIGhpZ2hsaWdodE9wdGlvbnMgPSBoaWdobGlnaHRPcHRpb25zKGNvbG9yID0gIndoaXRlIiwgd2VpZ2h0ID0gMiwgYnJpbmdUb0Zyb250ID0gVFJVRSkNCiAgICAgICAgICAgICAgKSAlPiUNCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkT3BlblN0cmVldE1hcCkgJT4lDQogIGFkZExlZ2VuZCgiYm90dG9tcmlnaHQiLCBwYWwgPSBwYWwsIHZhbHVlcyA9IH5QUk9EXzEyLA0KICAgIHRpdGxlID0gIkNhbmEgcGFuZWxlcmEgcHJvZHVjdGlvbiBpbiBDYXF1ZXRhIFtUb25dICgyMDE4KSIsDQogICAgb3BhY2l0eSA9IDENCiAgKQ0KICANCmBgYA0KIyMgZXN0ZSBlcyBlbCByZXN1bHRhZG8sIFNhbiB2aWNlbnRlIGRlbCBjYWd1YW4gdGllbmUgbGEgbWF5b3IgcHJvZHVjY2lvbiBlbiBlbCBhw7FvIDIwMTgNCmBgYHtyfQ0KbWFwYQ0KYGBgDQoNCg==