This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

library(knitr)
#include_graphics('./chirps/chirps_pentad.png')
library(knitr)
#include_graphics('./chirps/chirps_pentad_2020.png')
library(rgdal)
Loading required package: sp
rgdal: version: 1.5-10, (SVN revision 1006)
Geospatial Data Abstraction Library extensions to R successfully loaded
Loaded GDAL runtime: GDAL 3.0.4, released 2020/01/28
Path to GDAL shared files: C:/Users/familiar/Documents/R/R-3.6.3/library/rgdal/gdal
GDAL binary built with GEOS: TRUE 
Loaded PROJ runtime: Rel. 6.3.1, February 10th, 2020, [PJ_VERSION: 631]
Path to PROJ shared files: C:/Users/familiar/Documents/R/R-3.6.3/library/rgdal/proj
Linking to sp version:1.4-2
To mute warnings of possible GDAL/OSR exportToProj4() degradation,
use options("rgdal_show_exportToProj4_warnings"="none") before loading rgdal.
## Loading required package: sp
## rgdal: version: 1.4-8, (SVN revision 845)
##  Geospatial Data Abstraction Library extensions to R successfully loaded
##  Loaded GDAL runtime: GDAL 2.4.2, released 2019/06/28
##  Path to GDAL shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/gdal
##  GDAL binary built with GEOS: FALSE 
##  Loaded PROJ.4 runtime: Rel. 5.2.0, September 15th, 2018, [PJ_VERSION: 520]
##  Path to PROJ.4 shared files: /Library/Frameworks/R.framework/Versions/3.6/Resources/library/rgdal/proj
##  Linking to sp version: 1.3-2
library(raster)
library(sf)
Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
## Linking to GEOS 3.7.2, GDAL 2.4.2, PROJ 5.2.0
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
-- Attaching packages --------------------------------------- tidyverse 1.3.0 --
v ggplot2 3.3.2     v purrr   0.3.4
v tibble  3.0.1     v dplyr   1.0.0
v tidyr   1.1.0     v stringr 1.4.0
v readr   1.3.1     v forcats 0.5.0
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x tidyr::extract() masks raster::extract()
x dplyr::filter()  masks stats::filter()
x dplyr::lag()     masks stats::lag()
x dplyr::select()  masks raster::select()
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
# ✓ ggplot2 3.3.0     ✓ purrr   0.3.4
## ✓ tibble  3.0.1     ✓ dplyr   0.8.5
## ✓ tidyr   1.0.3     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
# ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x tidyr::extract() masks raster::extract()
## x dplyr::filter()  masks stats::filter()
## x dplyr::lag()     masks stats::lag()
## x dplyr::select()  masks raster::select()
library(tmap)
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
library(gstat)
library(sp)
## Read the CHIRPS dataset
precip <- raster("C:/Users/familiar/Documents/Geo R final/chirps-v2.0.2020.05.6.tif")
(aoi <- shapefile("C:/Users/familiar/Downloads/gb2/La guajira/44_LA_GUAJIRA/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp"))
class       : SpatialPolygonsDataFrame 
features    : 15 
extent      : -73.66494, -71.11296, 10.39676, 12.45944  (xmin, xmax, ymin, ymax)
CRS object has comment, which is lost in output
crs         : +proj=longlat +datum=WGS84 +no_defs 
variables   : 9
names       : DPTO_CCDGO, MPIO_CCDGO, MPIO_CNMBR,                               MPIO_CRSLC,    MPIO_NAREA, MPIO_NANO, DPTO_CNMBR,     Shape_Leng,      Shape_Area 
min values  :         44,      44001,    ALBANIA,                                     1888,  179.59085022,      2017, LA GUAJIRA, 0.710049632727, 0.0148255649224 
max values  :         44,      44874, VILLANUEVA, Ordenanza015 del 29 de Noviembre de 1989, 7886.05230923,      2017, LA GUAJIRA,  6.11271226506,  0.653549310217 
precip.crop <- raster::crop(precip, extent(aoi))
precip.mask <- mask(x = precip.crop, mask = aoi)
precip.mask
class      : RasterLayer 
dimensions : 41, 51, 2091  (nrow, ncol, ncell)
resolution : 0.05, 0.05  (x, y)
extent     : -73.65, -71.1, 10.4, 12.45  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
source     : memory
names      : chirps.v2.0.2020.05.6 
values     : 0, 177.7225  (min, max)
plot(precip.mask, main= "CHIRPS Lluvias en La Guajira desde el  01.06  al  05.06 en 2020 [mm]")
plot(aoi, add=TRUE)

library(leaflet)
library(RColorBrewer)
pal <- colorNumeric(c("orange", "yellow", "green3","cyan", "blue", "darkblue"), values(precip.mask),
  na.color = "transparent")

leaflet() %>% addTiles() %>%
  addRasterImage(precip.mask, colors = pal, opacity = 0.8) %>%
  addLegend(pal = pal, values = values(precip.mask),
    title = "CHIRPS Lluvias en La Guajira desde el  01.06 al 05.06 en 2020 [mm]")
Discarded ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defsDiscarded datum WGS_1984 in CRS definitionUsing PROJ not WKT2 stringsDiscarded ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defsDiscarded datum WGS_1984 in CRS definitionDiscarded ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defsDiscarded datum WGS_1984 in CRS definitionUsing PROJ not WKT2 stringsDiscarded ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defsDiscarded datum WGS_1984 in CRS definitionDiscarded ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defsDiscarded datum WGS_1984 in CRS definitionUsing PROJ not WKT2 stringsDiscarded ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defsDiscarded datum WGS_1984 in CRS definitionUsing PROJ not WKT2 stringsDiscarded ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defsDiscarded datum WGS_1984 in CRS definitionDiscarded ellps WGS 84 in CRS definition: +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defsDiscarded datum WGS_1984 in CRS definitionUsing PROJ not WKT2 stringsSome values were outside the color scale and will be treated as NA
precip.points <- rasterToPoints(precip.mask, spatial = TRUE)
precip.points
class       : SpatialPointsDataFrame 
features    : 684 
extent      : -73.625, -71.125, 10.425, 12.425  (xmin, xmax, ymin, ymax)
CRS object has comment, which is lost in output
crs         : +proj=longlat +datum=WGS84 +no_defs 
variables   : 1
names       : chirps.v2.0.2020.05.6 
min values  :                     0 
max values  :      177.722457885742 
names(precip.points) <- "rain"
precip.points
class       : SpatialPointsDataFrame 
features    : 684 
extent      : -73.625, -71.125, 10.425, 12.425  (xmin, xmax, ymin, ymax)
CRS object has comment, which is lost in output
crs         : +proj=longlat +datum=WGS84 +no_defs 
variables   : 1
names       :             rain 
min values  :                0 
max values  : 177.722457885742 
str(precip.points)
Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
  ..@ data       :'data.frame': 684 obs. of  1 variable:
  .. ..$ rain: num [1:684] 2.92 4.17e-01 6.77e-15 0.00 1.54 ...
  ..@ coords.nrs : num(0) 
  ..@ coords     : num [1:684, 1:2] -71.7 -71.6 -71.6 -71.5 -71.7 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : NULL
  .. .. ..$ : chr [1:2] "x" "y"
  ..@ bbox       : num [1:2, 1:2] -73.6 10.4 -71.1 12.4
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:2] "x" "y"
  .. .. ..$ : chr [1:2] "min" "max"
  ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slot
  .. .. ..@ projargs: chr "+proj=longlat +datum=WGS84 +no_defs"
plot(precip.mask, main= "CHIRPS Lluvias en La Guajira desde el  01.06 al 05.06 en 2020 [mm]")
plot(aoi, add=TRUE)
points(precip.points$x, precip.points$y, col = "red", cex = .6)

library(geojsonio)
geojsonio::geojson_write(precip.points, file = "./chirps/ppoints.geojson")
Success! File is at ./chirps/ppoints.geojson
<geojson-file>
  Path:       ./chirps/ppoints.geojson
  From class: SpatialPointsDataFrame
precip.points <- geojsonio::geojson_read("./chirps/ppoints.geojson", what="sp")
precip.points
class       : SpatialPointsDataFrame 
features    : 684 
extent      : -73.625, -71.125, 10.425, 12.425  (xmin, xmax, ymin, ymax)
CRS object has comment, which is lost in output
crs         : +proj=longlat +datum=WGS84 +no_defs 
variables   : 1
names       :             rain 
min values  :                0 
max values  : 177.722457885742 
(aoi <- shapefile("C:/Users/familiar/Downloads/gb2/La guajira/44_LA_GUAJIRA/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp"))
class       : SpatialPolygonsDataFrame 
features    : 15 
extent      : -73.66494, -71.11296, 10.39676, 12.45944  (xmin, xmax, ymin, ymax)
CRS object has comment, which is lost in output
crs         : +proj=longlat +datum=WGS84 +no_defs 
variables   : 9
names       : DPTO_CCDGO, MPIO_CCDGO, MPIO_CNMBR,                               MPIO_CRSLC,    MPIO_NAREA, MPIO_NANO, DPTO_CNMBR,     Shape_Leng,      Shape_Area 
min values  :         44,      44001,    ALBANIA,                                     1888,  179.59085022,      2017, LA GUAJIRA, 0.710049632727, 0.0148255649224 
max values  :         44,      44874, VILLANUEVA, Ordenanza015 del 29 de Noviembre de 1989, 7886.05230923,      2017, LA GUAJIRA,  6.11271226506,  0.653549310217 
guajira_sf <-  sf::st_as_sf(aoi)
(border_sf <-
  guajira_sf %>%
  summarise(area = sum(MPIO_NAREA)))
Simple feature collection with 1 feature and 1 field
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -73.66494 ymin: 10.39676 xmax: -71.11296 ymax: 12.45944
geographic CRS: WGS 84
      area                       geometry
1 20621.92 POLYGON ((-72.88683 10.4532...
 (border <- as(border_sf, 'Spatial'))
class       : SpatialPolygonsDataFrame 
features    : 1 
extent      : -73.66494, -71.11296, 10.39676, 12.45944  (xmin, xmax, ymin, ymax)
CRS object has comment, which is lost in output
crs         : +proj=longlat +datum=WGS84 +no_defs 
variables   : 1
names       :           area 
value       : 20621.92459446 
(guajira.sf <- st_as_sf(aoi) %>% mutate(MUNIC = MPIO_CNMBR, CODIGO = MPIO_CCDGO) %>% select(MUNIC, CODIGO))
Simple feature collection with 15 features and 2 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -73.66494 ymin: 10.39676 xmax: -71.11296 ymax: 12.45944
geographic CRS: WGS 84
First 10 features:
                MUNIC CODIGO                       geometry
1           BARRANCAS  44078 MULTIPOLYGON (((-72.59885 1...
2        DISTRACCIÓN  44098 MULTIPOLYGON (((-72.89246 1...
3           EL MOLINO  44110 MULTIPOLYGON (((-72.96901 1...
4             FONSECA  44279 MULTIPOLYGON (((-72.91056 1...
5           HATONUEVO  44378 MULTIPOLYGON (((-72.6568 11...
6  LA JAGUA DEL PILAR  44420 MULTIPOLYGON (((-73.08581 1...
7             URUMITA  44855 MULTIPOLYGON (((-73.00927 1...
8          VILLANUEVA  44874 MULTIPOLYGON (((-72.9918 10...
9            RIOHACHA  44001 MULTIPOLYGON (((-72.89025 1...
10            ALBANIA  44035 MULTIPOLYGON (((-72.52248 1...
p.sf <- st_as_sf(precip.points)
(precip.sf = st_intersection(guajira.sf, p.sf))
although coordinates are longitude/latitude, st_intersection assumes that they are planar
attribute variables are assumed to be spatially constant throughout all geometries
Simple feature collection with 684 features and 3 fields
geometry type:  POINT
dimension:      XY
bbox:           xmin: -73.625 ymin: 10.425 xmax: -71.125 ymax: 12.425
geographic CRS: WGS 84
First 10 features:
      MUNIC CODIGO         rain               geometry
13   URIBIA  44847 2.917222e+00 POINT (-71.725 12.425)
13.1 URIBIA  44847 4.168321e-01 POINT (-71.625 12.425)
13.2 URIBIA  44847 6.771785e-15 POINT (-71.575 12.425)
13.3 URIBIA  44847 0.000000e+00 POINT (-71.525 12.425)
13.4 URIBIA  44847 1.536622e+00 POINT (-71.725 12.375)
13.5 URIBIA  44847 6.167189e-02 POINT (-71.675 12.375)
13.6 URIBIA  44847 0.000000e+00 POINT (-71.625 12.375)
13.7 URIBIA  44847 7.484411e-03 POINT (-71.575 12.375)
13.8 URIBIA  44847 2.421079e-02 POINT (-71.525 12.375)
13.9 URIBIA  44847 4.976604e-02 POINT (-71.475 12.375)
p.sf.magna <- st_transform(precip.sf, crs=3116)
guajira.sf.magna <- st_transform(guajira.sf, crs=3116)
(precip2 <- as(p.sf.magna, 'Spatial'))
Discarded datum Unknown based on GRS80 ellipsoid in CRS definition,
 but +towgs84= values preserved
class       : SpatialPointsDataFrame 
features    : 684 
extent      : 1049433, 1321637, 1644788, 1867198  (xmin, xmax, ymin, ymax)
CRS object has comment, which is lost in output
crs         : +proj=tmerc +lat_0=4.59620041666667 +lon_0=-74.0775079166667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
variables   : 3
names       :      MUNIC, CODIGO,             rain 
min values  :    ALBANIA,  44001,                0 
max values  : VILLANUEVA,  44874, 177.722457885742 
shapefile(precip2, filename='./chirps/precip2.shp', overwrite=TRUE)
precip2$rainfall <- round(precip2$rain, 1)
precip2
class       : SpatialPointsDataFrame 
features    : 684 
extent      : 1049433, 1321637, 1644788, 1867198  (xmin, xmax, ymin, ymax)
CRS object has comment, which is lost in output
crs         : +proj=tmerc +lat_0=4.59620041666667 +lon_0=-74.0775079166667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
variables   : 4
names       :      MUNIC, CODIGO,             rain, rainfall 
min values  :    ALBANIA,  44001,                0,        0 
max values  : VILLANUEVA,  44874, 177.722457885742,    177.7 
(guajira2 <- as(guajira.sf.magna, 'Spatial'))
Discarded datum Unknown based on GRS80 ellipsoid in CRS definition,
 but +towgs84= values preserved
class       : SpatialPolygonsDataFrame 
features    : 15 
extent      : 1045090, 1322921, 1641659, 1870870  (xmin, xmax, ymin, ymax)
CRS object has comment, which is lost in output
crs         : +proj=tmerc +lat_0=4.59620041666667 +lon_0=-74.0775079166667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
variables   : 2
names       :      MUNIC, CODIGO 
min values  :    ALBANIA,  44001 
max values  : VILLANUEVA,  44874 
shapefile(guajira2, filename='./chirps/montes2.shp', overwrite=TRUE)
precip2@bbox <- guajira2@bbox
tm_shape(guajira2) + tm_polygons() +
  tm_shape(precip2) +
  tm_dots(col="rainfall", palette = "RdYlBu", midpoint = 1.0,
             title="Precipitacion muestreada \n(en mm)", size=0.2) +
  tm_text("rainfall", just="center", xmod=.4, size = 0.3) +
  tm_legend(legend.outside=TRUE)
CRS object has comment, which is lost in outputCRS object has comment, which is lost in output

library(spatstat.data)
library(nlme)
library(dplyr)
library(raster)
library(rpart)
library(gstat)
library(DirichletReg)
library(Formula)
th <- as(dirichlet(as.ppp(precip2)), "SpatialPolygons")
Error in dirichlet(as.ppp(precip2)) : 
  no se pudo encontrar la función "dirichlet"

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.

LS0tDQp0aXRsZTogIkludGVycG9sYWNpw7NuIC0gZGF0b3MgZGUgcHJlY2lwaXRhY2nDs24gZGUgTGEgR3VhamlyYSINCmF1dGhvcjogIkVkdWFyZG8gTGV6YW1hIE1lbmVzZXMiDQpkYXRlOiAiMjQuMDYuMjAyMCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNClRoaXMgaXMgYW4gW1IgTWFya2Rvd25dKGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20pIE5vdGVib29rLiBXaGVuIHlvdSBleGVjdXRlIGNvZGUgd2l0aGluIHRoZSBub3RlYm9vaywgdGhlIHJlc3VsdHMgYXBwZWFyIGJlbmVhdGggdGhlIGNvZGUuIA0KDQpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIA0KDQpgYGB7ciB3YXJuaW5nID0gRkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KI2luY2x1ZGVfZ3JhcGhpY3MoJy4vY2hpcnBzL2NoaXJwc19wZW50YWQucG5nJykNCmxpYnJhcnkoa25pdHIpDQojaW5jbHVkZV9ncmFwaGljcygnLi9jaGlycHMvY2hpcnBzX3BlbnRhZF8yMDIwLnBuZycpDQpsaWJyYXJ5KHJnZGFsKQ0KIyMgTG9hZGluZyByZXF1aXJlZCBwYWNrYWdlOiBzcA0KIyMgcmdkYWw6IHZlcnNpb246IDEuNC04LCAoU1ZOIHJldmlzaW9uIDg0NSkNCiMjICBHZW9zcGF0aWFsIERhdGEgQWJzdHJhY3Rpb24gTGlicmFyeSBleHRlbnNpb25zIHRvIFIgc3VjY2Vzc2Z1bGx5IGxvYWRlZA0KIyMgIExvYWRlZCBHREFMIHJ1bnRpbWU6IEdEQUwgMi40LjIsIHJlbGVhc2VkIDIwMTkvMDYvMjgNCiMjICBQYXRoIHRvIEdEQUwgc2hhcmVkIGZpbGVzOiAvTGlicmFyeS9GcmFtZXdvcmtzL1IuZnJhbWV3b3JrL1ZlcnNpb25zLzMuNi9SZXNvdXJjZXMvbGlicmFyeS9yZ2RhbC9nZGFsDQojIyAgR0RBTCBiaW5hcnkgYnVpbHQgd2l0aCBHRU9TOiBGQUxTRSANCiMjICBMb2FkZWQgUFJPSi40IHJ1bnRpbWU6IFJlbC4gNS4yLjAsIFNlcHRlbWJlciAxNXRoLCAyMDE4LCBbUEpfVkVSU0lPTjogNTIwXQ0KIyMgIFBhdGggdG8gUFJPSi40IHNoYXJlZCBmaWxlczogL0xpYnJhcnkvRnJhbWV3b3Jrcy9SLmZyYW1ld29yay9WZXJzaW9ucy8zLjYvUmVzb3VyY2VzL2xpYnJhcnkvcmdkYWwvcHJvag0KIyMgIExpbmtpbmcgdG8gc3AgdmVyc2lvbjogMS4zLTINCmxpYnJhcnkocmFzdGVyKQ0KbGlicmFyeShzZikNCiMjIExpbmtpbmcgdG8gR0VPUyAzLjcuMiwgR0RBTCAyLjQuMiwgUFJPSiA1LjIuMA0KbGlicmFyeSh0aWR5dmVyc2UpDQojIyDilIDilIAgQXR0YWNoaW5nIHBhY2thZ2VzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCB0aWR5dmVyc2UgMS4zLjAg4pSA4pSADQojIOKckyBnZ3Bsb3QyIDMuMy4wICAgICDinJMgcHVycnIgICAwLjMuNA0KIyMg4pyTIHRpYmJsZSAgMy4wLjEgICAgIOKckyBkcGx5ciAgIDAuOC41DQojIyDinJMgdGlkeXIgICAxLjAuMyAgICAg4pyTIHN0cmluZ3IgMS40LjANCiMjIOKckyByZWFkciAgIDEuMy4xICAgICDinJMgZm9yY2F0cyAwLjUuMA0KIyDilIDilIAgQ29uZmxpY3RzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCB0aWR5dmVyc2VfY29uZmxpY3RzKCkg4pSA4pSADQojIyB4IHRpZHlyOjpleHRyYWN0KCkgbWFza3MgcmFzdGVyOjpleHRyYWN0KCkNCiMjIHggZHBseXI6OmZpbHRlcigpICBtYXNrcyBzdGF0czo6ZmlsdGVyKCkNCiMjIHggZHBseXI6OmxhZygpICAgICBtYXNrcyBzdGF0czo6bGFnKCkNCiMjIHggZHBseXI6OnNlbGVjdCgpICBtYXNrcyByYXN0ZXI6OnNlbGVjdCgpDQpsaWJyYXJ5KHRtYXApDQpsaWJyYXJ5KGdzdGF0KQ0KbGlicmFyeShzcCkNCmBgYA0KDQoNCmBgYHtyfQ0KIyMgUmVhZCB0aGUgQ0hJUlBTIGRhdGFzZXQNCnByZWNpcCA8LSByYXN0ZXIoIkM6L1VzZXJzL2ZhbWlsaWFyL0RvY3VtZW50cy9HZW8gUiBmaW5hbC9jaGlycHMtdjIuMC4yMDIwLjA1LjYudGlmIikNCmBgYA0KDQoNCmBgYHtyfQ0KKGFvaSA8LSBzaGFwZWZpbGUoIkM6L1VzZXJzL2ZhbWlsaWFyL0Rvd25sb2Fkcy9nYjIvTGEgZ3VhamlyYS80NF9MQV9HVUFKSVJBL0FETUlOSVNUUkFUSVZPL01HTl9NUElPX1BPTElUSUNPLnNocCIpKQ0KYGBgDQoNCmBgYHtyfQ0KcHJlY2lwLmNyb3AgPC0gcmFzdGVyOjpjcm9wKHByZWNpcCwgZXh0ZW50KGFvaSkpDQpwcmVjaXAubWFzayA8LSBtYXNrKHggPSBwcmVjaXAuY3JvcCwgbWFzayA9IGFvaSkNCnByZWNpcC5tYXNrDQpgYGANCg0KYGBge3J9DQpwbG90KHByZWNpcC5tYXNrLCBtYWluPSAiQ0hJUlBTIExsdXZpYXMgZW4gTGEgR3VhamlyYSBkZXNkZSBlbCAgMDEuMDYgIGFsICAwNS4wNiBlbiAyMDIwIFttbV0iKQ0KcGxvdChhb2ksIGFkZD1UUlVFKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShsZWFmbGV0KQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpDQpwYWwgPC0gY29sb3JOdW1lcmljKGMoIm9yYW5nZSIsICJ5ZWxsb3ciLCAiZ3JlZW4zIiwiY3lhbiIsICJibHVlIiwgImRhcmtibHVlIiksIHZhbHVlcyhwcmVjaXAubWFzayksDQogIG5hLmNvbG9yID0gInRyYW5zcGFyZW50IikNCg0KbGVhZmxldCgpICU+JSBhZGRUaWxlcygpICU+JQ0KICBhZGRSYXN0ZXJJbWFnZShwcmVjaXAubWFzaywgY29sb3JzID0gcGFsLCBvcGFjaXR5ID0gMC44KSAlPiUNCiAgYWRkTGVnZW5kKHBhbCA9IHBhbCwgdmFsdWVzID0gdmFsdWVzKHByZWNpcC5tYXNrKSwNCiAgICB0aXRsZSA9ICJDSElSUFMgTGx1dmlhcyBlbiBMYSBHdWFqaXJhIGRlc2RlIGVsICAwMS4wNiBhbCAwNS4wNiBlbiAyMDIwIFttbV0iKQ0KYGBgDQoNCmBgYHtyfQ0KcHJlY2lwLnBvaW50cyA8LSByYXN0ZXJUb1BvaW50cyhwcmVjaXAubWFzaywgc3BhdGlhbCA9IFRSVUUpDQpwcmVjaXAucG9pbnRzDQpuYW1lcyhwcmVjaXAucG9pbnRzKSA8LSAicmFpbiINCnByZWNpcC5wb2ludHMNCmBgYA0KDQpgYGB7cn0NCnN0cihwcmVjaXAucG9pbnRzKQ0KYGBgDQoNCmBgYHtyfQ0KcGxvdChwcmVjaXAubWFzaywgbWFpbj0gIkNISVJQUyBMbHV2aWFzIGVuIExhIEd1YWppcmEgZGVzZGUgZWwgIDAxLjA2IGFsIDA1LjA2IGVuIDIwMjAgW21tXSIpDQpwbG90KGFvaSwgYWRkPVRSVUUpDQpwb2ludHMocHJlY2lwLnBvaW50cyR4LCBwcmVjaXAucG9pbnRzJHksIGNvbCA9ICJyZWQiLCBjZXggPSAuNikNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkoZ2VvanNvbmlvKQ0KZ2VvanNvbmlvOjpnZW9qc29uX3dyaXRlKHByZWNpcC5wb2ludHMsIGZpbGUgPSAiLi9jaGlycHMvcHBvaW50cy5nZW9qc29uIikNCmBgYA0KDQpgYGB7cn0NCnByZWNpcC5wb2ludHMgPC0gZ2VvanNvbmlvOjpnZW9qc29uX3JlYWQoIi4vY2hpcnBzL3Bwb2ludHMuZ2VvanNvbiIsIHdoYXQ9InNwIikNCnByZWNpcC5wb2ludHMNCmBgYA0KDQpgYGB7cn0NCihhb2kgPC0gc2hhcGVmaWxlKCJDOi9Vc2Vycy9mYW1pbGlhci9Eb3dubG9hZHMvZ2IyL0xhIGd1YWppcmEvNDRfTEFfR1VBSklSQS9BRE1JTklTVFJBVElWTy9NR05fTVBJT19QT0xJVElDTy5zaHAiKSkNCmBgYA0KDQpgYGB7cn0NCmd1YWppcmFfc2YgPC0gIHNmOjpzdF9hc19zZihhb2kpDQooYm9yZGVyX3NmIDwtDQogIGd1YWppcmFfc2YgJT4lDQogIHN1bW1hcmlzZShhcmVhID0gc3VtKE1QSU9fTkFSRUEpKSkNCmBgYA0KDQpgYGB7cn0NCiAoYm9yZGVyIDwtIGFzKGJvcmRlcl9zZiwgJ1NwYXRpYWwnKSkNCmBgYA0KDQpgYGB7cn0NCihndWFqaXJhLnNmIDwtIHN0X2FzX3NmKGFvaSkgJT4lIG11dGF0ZShNVU5JQyA9IE1QSU9fQ05NQlIsIENPRElHTyA9IE1QSU9fQ0NER08pICU+JSBzZWxlY3QoTVVOSUMsIENPRElHTykpDQpgYGANCg0KYGBge3J9DQpwLnNmIDwtIHN0X2FzX3NmKHByZWNpcC5wb2ludHMpDQoocHJlY2lwLnNmID0gc3RfaW50ZXJzZWN0aW9uKGd1YWppcmEuc2YsIHAuc2YpKQ0KDQpgYGANCg0KYGBge3J9DQpwLnNmLm1hZ25hIDwtIHN0X3RyYW5zZm9ybShwcmVjaXAuc2YsIGNycz0zMTE2KQ0KZ3VhamlyYS5zZi5tYWduYSA8LSBzdF90cmFuc2Zvcm0oZ3VhamlyYS5zZiwgY3JzPTMxMTYpDQoocHJlY2lwMiA8LSBhcyhwLnNmLm1hZ25hLCAnU3BhdGlhbCcpKQ0KYGBgDQoNCmBgYHtyfQ0Kc2hhcGVmaWxlKHByZWNpcDIsIGZpbGVuYW1lPScuL2NoaXJwcy9wcmVjaXAyLnNocCcsIG92ZXJ3cml0ZT1UUlVFKQ0KcHJlY2lwMiRyYWluZmFsbCA8LSByb3VuZChwcmVjaXAyJHJhaW4sIDEpDQpwcmVjaXAyDQpgYGANCg0KYGBge3J9DQooZ3VhamlyYTIgPC0gYXMoZ3VhamlyYS5zZi5tYWduYSwgJ1NwYXRpYWwnKSkNCmBgYA0KDQpgYGB7cn0NCnNoYXBlZmlsZShndWFqaXJhMiwgZmlsZW5hbWU9Jy4vY2hpcnBzL21vbnRlczIuc2hwJywgb3ZlcndyaXRlPVRSVUUpDQpwcmVjaXAyQGJib3ggPC0gZ3VhamlyYTJAYmJveA0KdG1fc2hhcGUoZ3VhamlyYTIpICsgdG1fcG9seWdvbnMoKSArDQogIHRtX3NoYXBlKHByZWNpcDIpICsNCiAgdG1fZG90cyhjb2w9InJhaW5mYWxsIiwgcGFsZXR0ZSA9ICJSZFlsQnUiLCBtaWRwb2ludCA9IDEuMCwNCiAgICAgICAgICAgICB0aXRsZT0iUHJlY2lwaXRhY2lvbiBtdWVzdHJlYWRhIFxuKGVuIG1tKSIsIHNpemU9MC4yKSArDQogIHRtX3RleHQoInJhaW5mYWxsIiwganVzdD0iY2VudGVyIiwgeG1vZD0uNCwgc2l6ZSA9IDAuMykgKw0KICB0bV9sZWdlbmQobGVnZW5kLm91dHNpZGU9VFJVRSkNCg0KYGBgDQo0Lg0KYGBge3J9DQpsaWJyYXJ5KHNwYXRzdGF0LmRhdGEpDQpsaWJyYXJ5KG5sbWUpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShyYXN0ZXIpDQpsaWJyYXJ5KHJwYXJ0KQ0KbGlicmFyeShnc3RhdCkNCmxpYnJhcnkoRGlyaWNobGV0UmVnKQ0KbGlicmFyeShGb3JtdWxhKQ0KYGBgDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0V9DQp0aCA8LSBhcyhkaXJpY2hsZXQoYXMucHBwKHByZWNpcDIpKSwgIlNwYXRpYWxQb2x5Z29ucyIpDQpjcnModGgpIDwtIGNycyhwcmVjaXAyKQ0KY3JzKG1vbnRlczIpIDwtIGNycyhwcmVjaXAyKQ0KY3JzKHRoKQ0KY3JzKHByZWNpcDIpDQp0aC56ICAgICA8LSBvdmVyKHRoLCBwcmVjaXAyLCBmbj1tZWFuKQ0KdGguc3BkZiAgPC0gIFNwYXRpYWxQb2x5Z29uc0RhdGFGcmFtZSh0aCwgdGgueikNCnRoLmNscCAgIDwtIHJhc3Rlcjo6aW50ZXJzZWN0KGd1YWppcmEyLHRoLnNwZGYpDQoNCmBgYA0KDQpgYGB7cn0NCg0KYGBgDQoNCg0KDQoNCg0KQWRkIGEgbmV3IGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqSW5zZXJ0IENodW5rKiBidXR0b24gb24gdGhlIHRvb2xiYXIgb3IgYnkgcHJlc3NpbmcgKkN0cmwrQWx0K0kqLg0KDQpXaGVuIHlvdSBzYXZlIHRoZSBub3RlYm9vaywgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYW5kIG91dHB1dCB3aWxsIGJlIHNhdmVkIGFsb25nc2lkZSBpdCAoY2xpY2sgdGhlICpQcmV2aWV3KiBidXR0b24gb3IgcHJlc3MgKkN0cmwrU2hpZnQrSyogdG8gcHJldmlldyB0aGUgSFRNTCBmaWxlKS4NCg0KVGhlIHByZXZpZXcgc2hvd3MgeW91IGEgcmVuZGVyZWQgSFRNTCBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yLiBDb25zZXF1ZW50bHksIHVubGlrZSAqS25pdCosICpQcmV2aWV3KiBkb2VzIG5vdCBydW4gYW55IFIgY29kZSBjaHVua3MuIEluc3RlYWQsIHRoZSBvdXRwdXQgb2YgdGhlIGNodW5rIHdoZW4gaXQgd2FzIGxhc3QgcnVuIGluIHRoZSBlZGl0b3IgaXMgZGlzcGxheWVkLg0K