Importar la base de datos

bd <- read.csv("/Users/Karen/Downloads/USArrests.csv")
summary (bd)
##       X                 Murder          Assault         UrbanPop    
##  Length:50          Min.   : 0.800   Min.   : 45.0   Min.   :32.00  
##  Class :character   1st Qu.: 4.075   1st Qu.:109.0   1st Qu.:54.50  
##  Mode  :character   Median : 7.250   Median :159.0   Median :66.00  
##                     Mean   : 7.788   Mean   :170.8   Mean   :65.54  
##                     3rd Qu.:11.250   3rd Qu.:249.0   3rd Qu.:77.75  
##                     Max.   :17.400   Max.   :337.0   Max.   :91.00  
##       Rape      
##  Min.   : 7.30  
##  1st Qu.:15.07  
##  Median :20.10  
##  Mean   :21.23  
##  3rd Qu.:26.18  
##  Max.   :46.00
## Agregar el X como nombre de los renglones

bd2 <- bd
rownames(bd2)<- bd2$X

summary(bd2)
##       X                 Murder          Assault         UrbanPop    
##  Length:50          Min.   : 0.800   Min.   : 45.0   Min.   :32.00  
##  Class :character   1st Qu.: 4.075   1st Qu.:109.0   1st Qu.:54.50  
##  Mode  :character   Median : 7.250   Median :159.0   Median :66.00  
##                     Mean   : 7.788   Mean   :170.8   Mean   :65.54  
##                     3rd Qu.:11.250   3rd Qu.:249.0   3rd Qu.:77.75  
##                     Max.   :17.400   Max.   :337.0   Max.   :91.00  
##       Rape      
##  Min.   : 7.30  
##  1st Qu.:15.07  
##  Median :20.10  
##  Mean   :21.23  
##  3rd Qu.:26.18  
##  Max.   :46.00
## Eliminar la columna de X

bd3 <- bd2
bd3 <- subset (bd3, select = -c (X))
summary(bd3)
##      Murder          Assault         UrbanPop          Rape      
##  Min.   : 0.800   Min.   : 45.0   Min.   :32.00   Min.   : 7.30  
##  1st Qu.: 4.075   1st Qu.:109.0   1st Qu.:54.50   1st Qu.:15.07  
##  Median : 7.250   Median :159.0   Median :66.00   Median :20.10  
##  Mean   : 7.788   Mean   :170.8   Mean   :65.54   Mean   :21.23  
##  3rd Qu.:11.250   3rd Qu.:249.0   3rd Qu.:77.75   3rd Qu.:26.18  
##  Max.   :17.400   Max.   :337.0   Max.   :91.00   Max.   :46.00

Revisar presencia de datos anormales

#Dispersión
require(graphics)
pairs(bd3, panel = panel.smooth, main = "USArrests")

#Correlación
#library(shiny)

#ui <- fluidPage(
  #selectInput("Arrest","Arrest",choices = names(bd3)),
  #plotOutput("myplot"))

#server <- function(input, output, session) {

  #output$myplot <- renderPlot({
    #plot(Murder ~ get(input$Arrest) , data=bd3)
  #})
#}

#shinyApp(ui, server)

#Boxplot por categoría de arresto
boxplot(bd3)

#Se determinó que hay datos anormales en Rape (Fuera del límite superior), pero no se eliminaran al ser muy cercanos a los demás datos.

Herramienta el generador de valor de datos

Paso 1. Definir el area del negocio que buscamos impactar o mejorar y su KPI

El departamento de seguridad ciudadana en el indicador de crimen por estado en USA

Paso 2. Seleccionar plantilla (-s) para crear valor a partir de los datos de los clientes

Visión / Segmentación / Personalización / Contextualización

Paso 3. Generar ideas o conceptos especificos

Elaborar una segmentacion de clusters de la base de datos (USArrests)

Paso 4. Reunir los datos requeridos

Desarrollar segmentos con la funcion de k means clustering para agrupar los datos de arrestos y crimenes en los estados de USA

Paso 5. Plan de ejecucion

Seguridad ciudadana elaborará un plan de disminución de crimenes por estado

Sistemas asegurará la captura del markdown en las bases de datos

K-means Clustering

Paso 1. Normalizar variables

bd4 <- bd3
bd4 <- as.data.frame(scale(bd4))

Paso 2. K-means Clustering

segmentos <- kmeans(bd4, 4)
segmentos
## K-means clustering with 4 clusters of sizes 13, 13, 16, 8
## 
## Cluster means:
##       Murder    Assault   UrbanPop        Rape
## 1 -0.9615407 -1.1066010 -0.9301069 -0.96676331
## 2  0.6950701  1.0394414  0.7226370  1.27693964
## 3 -0.4894375 -0.3826001  0.5758298 -0.26165379
## 4  1.4118898  0.8743346 -0.8145211  0.01927104
## 
## Clustering vector:
##        Alabama         Alaska        Arizona       Arkansas     California 
##              4              2              2              4              2 
##       Colorado    Connecticut       Delaware        Florida        Georgia 
##              2              3              3              2              4 
##         Hawaii          Idaho       Illinois        Indiana           Iowa 
##              3              1              2              3              1 
##         Kansas       Kentucky      Louisiana          Maine       Maryland 
##              3              1              4              1              2 
##  Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
##              3              2              1              4              2 
##        Montana       Nebraska         Nevada  New Hampshire     New Jersey 
##              1              1              2              1              3 
##     New Mexico       New York North Carolina   North Dakota           Ohio 
##              2              2              4              1              3 
##       Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
##              3              3              3              3              4 
##   South Dakota      Tennessee          Texas           Utah        Vermont 
##              1              4              2              3              1 
##       Virginia     Washington  West Virginia      Wisconsin        Wyoming 
##              3              3              1              1              3 
## 
## Within cluster sum of squares by cluster:
## [1] 11.952463 19.922437 16.212213  8.316061
##  (between_SS / total_SS =  71.2 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
asignacion <- cbind(bd3, cluster = segmentos$cluster)
head(asignacion,10)
##             Murder Assault UrbanPop Rape cluster
## Alabama       13.2     236       58 21.2       4
## Alaska        10.0     263       48 44.5       2
## Arizona        8.1     294       80 31.0       2
## Arkansas       8.8     190       50 19.5       4
## California     9.0     276       91 40.6       2
## Colorado       7.9     204       78 38.7       2
## Connecticut    3.3     110       77 11.1       3
## Delaware       5.9     238       72 15.8       3
## Florida       15.4     335       80 31.9       2
## Georgia       17.4     211       60 25.8       4

Exportar csv

write.csv(asignacion,"clientes_segmentados.csv")

Visualizar Segmentos

#install.packages("factoextra")
library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_cluster(segmentos, data = bd4,
             palette=c("#8B3A3A", "#CD5555", "#EEA2AD", "red"),
             ellipse.type = "euclid",
             star.plot = T,
             repel = T,
             ggtheme = theme())

Optimizar k

library(cluster)
library(data.table)

set.seed(123)
optimizacion <- clusGap(bd4, FUN = kmeans, nstart = 25, K.max = 10, B = 50)
plot(optimizacion, xlab = "Numero de clusters k")

library(factoextra)
library(ggplot2)

set.seed(123)
crime <- sample(1:50,10)

wss <- sapply(1:crime, 
              function(k){kmeans(bd3, k, nstart=20,iter.max = 15                     )$tot.withinss})
## Warning in 1:crime: numerical expression has 10 elements: only the first used
plot(1:crime, wss,
     type="b", pch = 19, frame = FALSE, 
     xlab= "Número de clusters",
     ylab= "Suma de cuadrados dentro del total de clusters")
## Warning in 1:crime: numerical expression has 10 elements: only the first used

fviz_nbclust(bd3, kmeans, method = 'wss') +
             geom_vline(xintercept = 4, linetype=5, col= "red")

Conclusiones

A través de esta herramienta, cargamos una base de datos en la nube, con la finalidad de crear una segmentación de mercado a partir de clusters, de los arrestos en Estados Unidos. Primero normalizamos las variables, y despues visualizamos los segmentos con ayuda de la libreria factoextra, agrupando por estado y categoría de arresto en Estados Unidos.

De esta forma, encontramos que el conjunto de datos muestra los arrestos por cada 100,000 residentes clasificados por asalto, asesinato y violación en cada uno de los 50 estados de Estados Unidos; esto con el objetivo de observar si existía alguna dependencia entre el estado adquirido y el historial de arrestos. Demostrando de esta manera que, existen estados más inseguros que otros para la población en general.

Se pudo identificar gracias a la segmentación por clusters, que los estados mas seguros son los que se encuentran al norte de Estados Unidos, siendo estos: Vermont, West Virginia, Minnesota, entre otros. Mientras que los estados con mayor cantidad de arrestos, delitos e inseguridad de forma consecuente, son algunos en el sur de Estados Unidos, como: California, Florida, Mississippi, entre otros. Todos estos pueden ser visualizados en el mapa que se presenta a continuación:

Por lo que, el departamento de seguridad ciudadana, ahora podrá comenzar a ejecutar el nuevo plan de disminución de crimenes, principalmente en el sur del país, para garantizar la vivencia sana de toda la población.

LS0tCnRpdGxlOiA8c3BhbiBzdHlsZT0iQ29sb3I6I0NEMzMzMyI+IENsdXN0ZXJzIFVTQXJyZXN0cwphdXRob3I6ICJLYXJlbiBOZXJpIC0gQTAxNjU3OTc0IgpkYXRlOiAiMjAyMi0wOS0wNyIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCiFbXShodHRwczovL3RodW1icy5nZnljYXQuY29tL1NrZWxldGFsU2FuZHlBZnJpY2FuaGFycmllcmhhd2stbWF4LTFtYi5naWYpe3dpZHRoPSc2MDBweCd9CgoKIyMgPHNwYW4gc3R5bGU9IkNvbG9yOiNDRDMzMzMiPiBJbXBvcnRhciBsYSBiYXNlIGRlIGRhdG9zCmBgYHtyfQpiZCA8LSByZWFkLmNzdigiL1VzZXJzL0thcmVuL0Rvd25sb2Fkcy9VU0FycmVzdHMuY3N2IikKc3VtbWFyeSAoYmQpCgojIyBBZ3JlZ2FyIGVsIFggY29tbyBub21icmUgZGUgbG9zIHJlbmdsb25lcwoKYmQyIDwtIGJkCnJvd25hbWVzKGJkMik8LSBiZDIkWAoKc3VtbWFyeShiZDIpCiMjIEVsaW1pbmFyIGxhIGNvbHVtbmEgZGUgWAoKYmQzIDwtIGJkMgpiZDMgPC0gc3Vic2V0IChiZDMsIHNlbGVjdCA9IC1jIChYKSkKc3VtbWFyeShiZDMpCmBgYAoKIyMgPHNwYW4gc3R5bGU9IkNvbG9yOiNDRDMzMzMiPiBSZXZpc2FyIHByZXNlbmNpYSBkZSBkYXRvcyBhbm9ybWFsZXMgCmBgYHtyfQojRGlzcGVyc2nDs24KcmVxdWlyZShncmFwaGljcykKcGFpcnMoYmQzLCBwYW5lbCA9IHBhbmVsLnNtb290aCwgbWFpbiA9ICJVU0FycmVzdHMiKQoKI0NvcnJlbGFjacOzbgojbGlicmFyeShzaGlueSkKCiN1aSA8LSBmbHVpZFBhZ2UoCiAgI3NlbGVjdElucHV0KCJBcnJlc3QiLCJBcnJlc3QiLGNob2ljZXMgPSBuYW1lcyhiZDMpKSwKICAjcGxvdE91dHB1dCgibXlwbG90IikpCgojc2VydmVyIDwtIGZ1bmN0aW9uKGlucHV0LCBvdXRwdXQsIHNlc3Npb24pIHsKCiAgI291dHB1dCRteXBsb3QgPC0gcmVuZGVyUGxvdCh7CiAgICAjcGxvdChNdXJkZXIgfiBnZXQoaW5wdXQkQXJyZXN0KSAsIGRhdGE9YmQzKQogICN9KQojfQoKI3NoaW55QXBwKHVpLCBzZXJ2ZXIpCgojQm94cGxvdCBwb3IgY2F0ZWdvcsOtYSBkZSBhcnJlc3RvCmJveHBsb3QoYmQzKQoKI1NlIGRldGVybWluw7MgcXVlIGhheSBkYXRvcyBhbm9ybWFsZXMgZW4gUmFwZSAoRnVlcmEgZGVsIGzDrW1pdGUgc3VwZXJpb3IpLCBwZXJvIG5vIHNlIGVsaW1pbmFyYW4gYWwgc2VyIG11eSBjZXJjYW5vcyBhIGxvcyBkZW3DoXMgZGF0b3MuCmBgYAoKIyMgPHNwYW4gc3R5bGU9IkNvbG9yOiNDRDMzMzMiPiBIZXJyYW1pZW50YSBlbCBnZW5lcmFkb3IgZGUgdmFsb3IgZGUgZGF0b3MgCgoqKlBhc28gMS4gRGVmaW5pciBlbCBhcmVhIGRlbCBuZWdvY2lvIHF1ZSBidXNjYW1vcyBpbXBhY3RhciBvIG1lam9yYXIgeSBzdSBLUEkqKgoKRWwgZGVwYXJ0YW1lbnRvIGRlIHNlZ3VyaWRhZCBjaXVkYWRhbmEgZW4gZWwgaW5kaWNhZG9yIGRlIGNyaW1lbiBwb3IgZXN0YWRvIGVuIFVTQQoKKipQYXNvIDIuIFNlbGVjY2lvbmFyIHBsYW50aWxsYSAoLXMpIHBhcmEgY3JlYXIgdmFsb3IgYSBwYXJ0aXIgZGUgbG9zIGRhdG9zIGRlIGxvcyBjbGllbnRlcyoqCgpWaXNpw7NuIC8gKipTZWdtZW50YWNpw7NuKiogLyBQZXJzb25hbGl6YWNpw7NuIC8gQ29udGV4dHVhbGl6YWNpw7NuIAoKKipQYXNvIDMuIEdlbmVyYXIgaWRlYXMgbyBjb25jZXB0b3MgZXNwZWNpZmljb3MqKgoKRWxhYm9yYXIgdW5hIHNlZ21lbnRhY2lvbiBkZSBjbHVzdGVycyBkZSBsYSBiYXNlIGRlIGRhdG9zIChVU0FycmVzdHMpCgoqKlBhc28gNC4gUmV1bmlyIGxvcyBkYXRvcyByZXF1ZXJpZG9zICoqCgpEZXNhcnJvbGxhciBzZWdtZW50b3MgY29uIGxhIGZ1bmNpb24gZGUgayBtZWFucyBjbHVzdGVyaW5nIHBhcmEgYWdydXBhciBsb3MgZGF0b3MgZGUgYXJyZXN0b3MgeSBjcmltZW5lcyBlbiBsb3MgZXN0YWRvcyBkZSBVU0EKCioqUGFzbyA1LiBQbGFuIGRlIGVqZWN1Y2lvbiAqKgoKU2VndXJpZGFkIGNpdWRhZGFuYSBlbGFib3JhcsOhIHVuIHBsYW4gZGUgZGlzbWludWNpw7NuIGRlIGNyaW1lbmVzIHBvciBlc3RhZG8KClNpc3RlbWFzIGFzZWd1cmFyw6EgbGEgY2FwdHVyYSBkZWwgbWFya2Rvd24gZW4gbGFzIGJhc2VzIGRlIGRhdG9zIAoKCiMjIDxzcGFuIHN0eWxlPSJDb2xvcjojQ0QzMzMzIj4gSy1tZWFucyBDbHVzdGVyaW5nCgojIyMgUGFzbyAxLiBOb3JtYWxpemFyIHZhcmlhYmxlcwpgYGB7cn0KYmQ0IDwtIGJkMwpiZDQgPC0gYXMuZGF0YS5mcmFtZShzY2FsZShiZDQpKQpgYGAKCiMjIyBQYXNvIDIuIEstbWVhbnMgQ2x1c3RlcmluZwpgYGB7cn0Kc2VnbWVudG9zIDwtIGttZWFucyhiZDQsIDQpCnNlZ21lbnRvcwoKYXNpZ25hY2lvbiA8LSBjYmluZChiZDMsIGNsdXN0ZXIgPSBzZWdtZW50b3MkY2x1c3RlcikKaGVhZChhc2lnbmFjaW9uLDEwKQpgYGAKCiMjIyBFeHBvcnRhciBjc3YKYGBge3J9CndyaXRlLmNzdihhc2lnbmFjaW9uLCJjbGllbnRlc19zZWdtZW50YWRvcy5jc3YiKQoKYGBgCgojIyMgVmlzdWFsaXphciBTZWdtZW50b3MKYGBge3J9CiNpbnN0YWxsLnBhY2thZ2VzKCJmYWN0b2V4dHJhIikKbGlicmFyeShmYWN0b2V4dHJhKQpmdml6X2NsdXN0ZXIoc2VnbWVudG9zLCBkYXRhID0gYmQ0LAogICAgICAgICAgICAgcGFsZXR0ZT1jKCIjOEIzQTNBIiwgIiNDRDU1NTUiLCAiI0VFQTJBRCIsICJyZWQiKSwKICAgICAgICAgICAgIGVsbGlwc2UudHlwZSA9ICJldWNsaWQiLAogICAgICAgICAgICAgc3Rhci5wbG90ID0gVCwKICAgICAgICAgICAgIHJlcGVsID0gVCwKICAgICAgICAgICAgIGdndGhlbWUgPSB0aGVtZSgpKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJDb2xvcjojQ0QzMzMzIj4gT3B0aW1pemFyIGsKYGBge3J9CmxpYnJhcnkoY2x1c3RlcikKbGlicmFyeShkYXRhLnRhYmxlKQoKc2V0LnNlZWQoMTIzKQpvcHRpbWl6YWNpb24gPC0gY2x1c0dhcChiZDQsIEZVTiA9IGttZWFucywgbnN0YXJ0ID0gMjUsIEsubWF4ID0gMTAsIEIgPSA1MCkKcGxvdChvcHRpbWl6YWNpb24sIHhsYWIgPSAiTnVtZXJvIGRlIGNsdXN0ZXJzIGsiKQoKbGlicmFyeShmYWN0b2V4dHJhKQpsaWJyYXJ5KGdncGxvdDIpCgpzZXQuc2VlZCgxMjMpCmNyaW1lIDwtIHNhbXBsZSgxOjUwLDEwKQoKd3NzIDwtIHNhcHBseSgxOmNyaW1lLCAKICAgICAgICAgICAgICBmdW5jdGlvbihrKXtrbWVhbnMoYmQzLCBrLCBuc3RhcnQ9MjAsaXRlci5tYXggPSAxNSAgICAgICAgICAgICAgICAgICAgICkkdG90LndpdGhpbnNzfSkKCnBsb3QoMTpjcmltZSwgd3NzLAogICAgIHR5cGU9ImIiLCBwY2ggPSAxOSwgZnJhbWUgPSBGQUxTRSwgCiAgICAgeGxhYj0gIk7Dum1lcm8gZGUgY2x1c3RlcnMiLAogICAgIHlsYWI9ICJTdW1hIGRlIGN1YWRyYWRvcyBkZW50cm8gZGVsIHRvdGFsIGRlIGNsdXN0ZXJzIikKCmZ2aXpfbmJjbHVzdChiZDMsIGttZWFucywgbWV0aG9kID0gJ3dzcycpICsKICAgICAgICAgICAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDQsIGxpbmV0eXBlPTUsIGNvbD0gInJlZCIpCmBgYAoKIyMgPHNwYW4gc3R5bGU9IkNvbG9yOiNDRDMzMzMiPiBDb25jbHVzaW9uZXMKQSB0cmF2w6lzIGRlIGVzdGEgaGVycmFtaWVudGEsIGNhcmdhbW9zIHVuYSBiYXNlIGRlIGRhdG9zIGVuIGxhIG51YmUsIGNvbiBsYSBmaW5hbGlkYWQgZGUgY3JlYXIgdW5hIHNlZ21lbnRhY2nDs24gZGUgbWVyY2FkbyBhIHBhcnRpciBkZSBjbHVzdGVycywgZGUgbG9zIGFycmVzdG9zIGVuIEVzdGFkb3MgVW5pZG9zLiBQcmltZXJvIG5vcm1hbGl6YW1vcyBsYXMgdmFyaWFibGVzLCB5IGRlc3B1ZXMgdmlzdWFsaXphbW9zIGxvcyBzZWdtZW50b3MgY29uIGF5dWRhIGRlIGxhIGxpYnJlcmlhIGZhY3RvZXh0cmEsIGFncnVwYW5kbyBwb3IgZXN0YWRvIHkgY2F0ZWdvcsOtYSBkZSBhcnJlc3RvIGVuIEVzdGFkb3MgVW5pZG9zLiAKCkRlIGVzdGEgZm9ybWEsIGVuY29udHJhbW9zIHF1ZSBlbCBjb25qdW50byBkZSBkYXRvcyBtdWVzdHJhIGxvcyAqKmFycmVzdG9zIHBvciBjYWRhIDEwMCwwMDAgcmVzaWRlbnRlcyBjbGFzaWZpY2Fkb3MgcG9yIGFzYWx0bywgYXNlc2luYXRvIHkgdmlvbGFjacOzbiBlbiBjYWRhIHVubyBkZSBsb3MgNTAgZXN0YWRvcyBkZSBFc3RhZG9zIFVuaWRvcyoqOyBlc3RvIGNvbiBlbCBvYmpldGl2byBkZSBvYnNlcnZhciBzaSBleGlzdMOtYSBhbGd1bmEgZGVwZW5kZW5jaWEgZW50cmUgZWwgZXN0YWRvIGFkcXVpcmlkbyB5IGVsIGhpc3RvcmlhbCBkZSBhcnJlc3Rvcy4gRGVtb3N0cmFuZG8gZGUgZXN0YSBtYW5lcmEgcXVlLCBleGlzdGVuIGVzdGFkb3MgbcOhcyBpbnNlZ3Vyb3MgcXVlIG90cm9zIHBhcmEgbGEgcG9ibGFjacOzbiBlbiBnZW5lcmFsLiAKClNlIHB1ZG8gaWRlbnRpZmljYXIgZ3JhY2lhcyBhIGxhIHNlZ21lbnRhY2nDs24gcG9yIGNsdXN0ZXJzLCBxdWUgbG9zIGVzdGFkb3MgbWFzIHNlZ3Vyb3Mgc29uIGxvcyBxdWUgc2UgZW5jdWVudHJhbiBhbCBub3J0ZSBkZSBFc3RhZG9zIFVuaWRvcywgc2llbmRvIGVzdG9zOiAqKlZlcm1vbnQsIFdlc3QgVmlyZ2luaWEsIE1pbm5lc290YSoqLCBlbnRyZSBvdHJvcy4gTWllbnRyYXMgcXVlIGxvcyBlc3RhZG9zIGNvbiBtYXlvciBjYW50aWRhZCBkZSBhcnJlc3RvcywgZGVsaXRvcyBlIGluc2VndXJpZGFkIGRlIGZvcm1hIGNvbnNlY3VlbnRlLCBzb24gYWxndW5vcyBlbiBlbCBzdXIgZGUgRXN0YWRvcyBVbmlkb3MsIGNvbW86ICoqQ2FsaWZvcm5pYSwgRmxvcmlkYSwgTWlzc2lzc2lwcGkqKiwgZW50cmUgb3Ryb3MuIFRvZG9zIGVzdG9zIHB1ZWRlbiBzZXIgdmlzdWFsaXphZG9zIGVuIGVsIG1hcGEgcXVlIHNlIHByZXNlbnRhIGEgY29udGludWFjacOzbjogCgohW10oaHR0cHM6Ly9jbm5lc3Bhbm9sLmNubi5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjIvMDgvZGVsaXRvcy12aW9sZW50b3MtZXN0YWRvcy11bmlkb3MtMi0xLmpwZz9xdWFsaXR5PTEwMCZzdHJpcD1pbmZvKXt3aWR0aD0nODAwcHgnfSAKClBvciBsbyBxdWUsIGVsIGRlcGFydGFtZW50byBkZSBzZWd1cmlkYWQgY2l1ZGFkYW5hLCBhaG9yYSBwb2Ryw6EgY29tZW56YXIgYSBlamVjdXRhciBlbCBudWV2byAqKnBsYW4gZGUgZGlzbWludWNpw7NuIGRlIGNyaW1lbmVzKiosIHByaW5jaXBhbG1lbnRlIGVuIGVsIHN1ciBkZWwgcGHDrXMsIHBhcmEgZ2FyYW50aXphciBsYSB2aXZlbmNpYSBzYW5hIGRlIHRvZGEgbGEgcG9ibGFjacOzbi4g