#packges

library("tidyverse")

#abro copia_df

df <- read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSFXHAlpWr7P2GHtqOi3F3_KLXFVbLxl5Q2armt4NS1Ju9iXrnrNL3AElAK4cfyllxWqLuJPLi-pMJs/pub?gid=1082241407&single=true&output=csv")

#summary

summary(df)
    NOMBRE               EDAD          RUT            TAMAÑO.PROSTATA    METODO         
 Length:75          Min.   :52.0   Length:75          Min.   : 30.0   Length:75         
 Class :character   1st Qu.:63.5   Class :character   1st Qu.: 50.0   Class :character  
 Mode  :character   Median :69.0   Mode  :character   Median : 65.0   Mode  :character  
                    Mean   :69.7                      Mean   : 73.5                     
                    3rd Qu.:75.0                      3rd Qu.: 87.5                     
                    Max.   :89.0                      Max.   :190.0                     
 UFM.QMAX.PRE       UFM.QMAX.POST        PSA.pre            PSA.post        
 Length:75          Length:75          Length:75          Length:75         
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
   RPM.PRE          VEJIGA.DE.LUCHA      RPM.POST            FECHA            BIOPSIA..GR.  
 Length:75          Length:75          Length:75          Length:75          Min.   :  6.0  
 Class :character   Class :character   Class :character   Class :character   1st Qu.: 32.0  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Median : 50.0  
                                                                             Mean   : 51.9  
                                                                             3rd Qu.: 61.0  
                                                                             Max.   :170.0  
 X..RESECCION    TECNICA.QX        TIEMPO.ENUCLEACION TIEMPO.MORCELACION HORAS.DE.SONDA
 Mode:logical   Length:75          Min.   : 30.0      Min.   : 5.0       Min.   :12    
 NA's:75        Class :character   1st Qu.: 45.0      1st Qu.:10.0       1st Qu.:24    
                Mode  :character   Median : 60.0      Median :15.0       Median :24    
                                   Mean   : 62.9      Mean   :16.7       Mean   :29    
                                   3rd Qu.: 77.5      3rd Qu.:20.0       3rd Qu.:24    
                                   Max.   :180.0      Max.   :50.0       Max.   :72    
 HORAS.IRRIGACION  ESTADIA.DIA   COMPLICACION.INTRA.OPERATORIO   DISURIA         
 Min.   :10.0     Min.   :1.00   Length:75                     Length:75         
 1st Qu.:12.0     1st Qu.:1.00   Class :character              Class :character  
 Median :12.0     Median :1.00   Mode  :character              Mode  :character  
 Mean   :14.9     Mean   :1.44                                                   
 3rd Qu.:12.0     3rd Qu.:1.50                                                   
 Max.   :48.0     Max.   :7.00                                                   
   URGENCIA             RAO            INCONTINENCIA          ITU           
 Length:75          Length:75          Length:75          Length:75         
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
  HEMATURIA          REINGRESO              X             CANCER.PROSTATA   
 Length:75          Length:75          Length:75          Length:75         
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
 CANCER.PROSTATA.IRRADIADO     X.1            LITIASIS.CONCOMITANTE MORCELACIÓN.2DO.TIEMPO
 Length:75                 Length:75          Length:75             Length:75             
 Class :character          Class :character   Class :character      Class :character      
 Mode  :character          Mode  :character   Mode  :character      Mode  :character      
                                                                                          
                                                                                          
                                                                                          

#Edad (B)

options(digits=3) #agregar solo un decimal 
df %>% 
summarise(promedio = mean(EDAD), desviacion = sd(EDAD), rango= max(EDAD)-min(EDAD))

#histograma edad

hist(df$EDAD)

#Tamaño prostata (D)

options(digits=3) #agregar solo un decimal 
df %>% 
summarise(promedio = mean(TAMAÑO.PROSTATA), desviacion = sd(TAMAÑO.PROSTATA), rango= max(TAMAÑO.PROSTATA)-min(TAMAÑO.PROSTATA))

#Biopsia (GR) (N)

options(digits=3) #agregar solo un decimal 
df %>% 
summarise(promedio = mean(BIOPSIA..GR.), desviacion = sd(BIOPSIA..GR.), rango= max(BIOPSIA..GR.)-min(BIOPSIA..GR.))

#Tecnica QX (P)

#Tiempo de enucleación (Q)

options(digits=3) #agregar solo un decimal 
  df %>% 
summarise(promedio = mean(TIEMPO.ENUCLEACION), desviacion = sd(TIEMPO.ENUCLEACION), rango= max(TIEMPO.ENUCLEACION)-min(TIEMPO.ENUCLEACION))

#Tiempo de Morcelacion (R)

options(digits=3) #agregar solo un decimal 
  df %>% 
summarise(promedio = mean(TIEMPO.MORCELACION), desviacion = sd(TIEMPO.MORCELACION), rango= max(TIEMPO.MORCELACION)-min(TIEMPO.MORCELACION))

#horas de sonda (S)

options(digits=3) #agregar solo un decimal 
  df %>% 
summarise(promedio = mean(HORAS.DE.SONDA), desviacion = sd(HORAS.DE.SONDA), rango= max(HORAS.DE.SONDA)-min(HORAS.DE.SONDA))

#horas de sonda (clasifico por horas de sonda) (S)

#horas de irrigacion (T)

options(digits=3) #agregar solo un decimal 
  df %>% 
summarise(promedio = mean(HORAS.IRRIGACION), desviacion = sd(HORAS.IRRIGACION), rango= max(HORAS.IRRIGACION)-min(HORAS.IRRIGACION))

#horas de irrigacion (clasifico por horas de irrigacion) (T)

#Estadia dia (U)

options(digits=3) #agregar solo un decimal 
  df %>% 
summarise(promedio = mean(ESTADIA.DIA), desviacion = sd(ESTADIA.DIA), rango= max(ESTADIA.DIA)-min(ESTADIA.DIA))

#estadia dia (clasifico por estadia dia)(U)

#Variables de frecuencia para datos amarillos y verdes (61 datos) #abrir el df para esta planilla de datos

df1 <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSFXHAlpWr7P2GHtqOi3F3_KLXFVbLxl5Q2armt4NS1Ju9iXrnrNL3AElAK4cfyllxWqLuJPLi-pMJs/pub?gid=1359141274&single=true&output=csv")

#agrupo por Disuria (W)

options(digits=3) #agregar solo un decimal 
  df1 %>% 
  group_by(DISURIA) %>%
  summarise(n=n(), Porcentaje =  `n`/61*100)   #son 61 datos 

#agrupo por Urgencia (X)

options(digits=3) #agregar solo un decimal 
  df1 %>% 
  group_by(URGENCIA) %>%
  summarise(n=n(), Porcentaje =  `n`/61*100)   #son 61 datos 

#Agrupo por RAO (Y)

options(digits=3) #agregar solo un decimal 
  df1 %>% 
  group_by(RAO) %>%
  summarise(n=n(), Porcentaje =  `n`/61*100)   #son 61 datos 

#Agrupo por Incontinencia (Z)

options(digits=3) #agregar solo un decimal 
  df1 %>% 
  group_by(INCONTINENCIA) %>%
  summarise(n=n(), Porcentaje =  `n`/61*100)   #son 61 datos 

#Agrupo por ITU (AA)

options(digits=3) #agregar solo un decimal 
  df1 %>% 
  group_by(ITU) %>%
  summarise(n=n(), Porcentaje =  `n`/61*100)   #son 61 datos 

#Agrupo por Hematuria (AB)

options(digits=3) #agregar solo un decimal 
  df1 %>% 
  group_by(HEMATURIA) %>%
  summarise(n=n(), Porcentaje =  `n`/61*100)   #son 61 datos 

#Agrupo por reingreso

#abro el df2 para t.test

df3 <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSFXHAlpWr7P2GHtqOi3F3_KLXFVbLxl5Q2armt4NS1Ju9iXrnrNL3AElAK4cfyllxWqLuJPLi-pMJs/pub?gid=1545735592&single=true&output=csv")

#summary

summary(df3)

#t.test para UFM (existen diferencias)

t.test(df3$`Valor UFM`~df3$UFM)

    Welch Two Sample t-test

data:  df3$`Valor UFM` by df3$UFM
t = 13, df = 70, p-value <2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 11.1 15.1
sample estimates:
mean in group UFM QMAX POST  mean in group UFM QMAX PRE 
                       22.3                         9.2 

#t.test para PSA (existen diferencias)

t.test(df3$`Valor PSA`~df3$PSA) #Existen diferencias

    Welch Two Sample t-test

data:  df3$`Valor PSA` by df3$PSA
t = -7, df = 43, p-value = 4e-08
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -5.54 -2.97
sample estimates:
mean in group PSA post  mean in group PSA pre 
                 0.654                  4.909 

#t.test para RPM (existen diferencias)

t.test(df3$`Valor RPM`~df3$RPM)

    Welch Two Sample t-test

data:  df3$`Valor RPM` by df3$RPM
t = -13, df = 43, p-value <2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -142 -105
sample estimates:
mean in group RPM POST  mean in group RPM PRE 
                   4.7                  128.5 
LS0tCnRpdGxlOiAiRFIgU0VHVVJBIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCiNwYWNrZ2VzCmBgYHtyfQpsaWJyYXJ5KCJ0aWR5dmVyc2UiKQpgYGAKI2Ficm8gY29waWFfZGYKYGBge3J9CmRmIDwtIHJlYWQuY3N2KCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC9lLzJQQUNYLTF2U0ZYSEFscFdyN1AyR0h0cU9pM0YzX0tMWEZWYkx4bDVRMmFybXQ0TlMxSnU5aVhybnJOTDNBRWxBSzRjZnlsbHhXcUx1SlBMaS1wTUpzL3B1Yj9naWQ9MTA4MjI0MTQwNyZzaW5nbGU9dHJ1ZSZvdXRwdXQ9Y3N2IikKYGBgCiNzdW1tYXJ5CmBgYHtyfQpzdW1tYXJ5KGRmKQpgYGAKI0VkYWQgKEIpCmBgYHtyfQpvcHRpb25zKGRpZ2l0cz0zKSAjYWdyZWdhciBzb2xvIHVuIGRlY2ltYWwgCmRmICU+JSAKc3VtbWFyaXNlKHByb21lZGlvID0gbWVhbihFREFEKSwgZGVzdmlhY2lvbiA9IHNkKEVEQUQpLCByYW5nbz0gbWF4KEVEQUQpLW1pbihFREFEKSkKYGBgCiNoaXN0b2dyYW1hIGVkYWQKYGBge3J9Cmhpc3QoZGYkRURBRCkKYGBgCiNUYW1hw7FvIHByb3N0YXRhIChEKQpgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIApkZiAlPiUgCnN1bW1hcmlzZShwcm9tZWRpbyA9IG1lYW4oVEFNQcORTy5QUk9TVEFUQSksIGRlc3ZpYWNpb24gPSBzZChUQU1Bw5FPLlBST1NUQVRBKSwgcmFuZ289IG1heChUQU1Bw5FPLlBST1NUQVRBKS1taW4oVEFNQcORTy5QUk9TVEFUQSkpCmBgYAojQmlvcHNpYSAoR1IpIChOKQpgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIApkZiAlPiUgCnN1bW1hcmlzZShwcm9tZWRpbyA9IG1lYW4oQklPUFNJQS4uR1IuKSwgZGVzdmlhY2lvbiA9IHNkKEJJT1BTSUEuLkdSLiksIHJhbmdvPSBtYXgoQklPUFNJQS4uR1IuKS1taW4oQklPUFNJQS4uR1IuKSkKYGBgCiNUZWNuaWNhIFFYIChQKQpgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIApkZiU+JSAKICBncm91cF9ieShURUNOSUNBLlFYKSAlPiUKICBzdW1tYXJpc2Uobj1uKCksIFBvcmNlbnRhamUgPSAgYG5gLzc1KjEwMCkgI3NvbiA3NSBkYXRvcyAKYGBgCiNUaWVtcG8gZGUgZW51Y2xlYWNpw7NuIChRKQpgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIAogIGRmICU+JSAKc3VtbWFyaXNlKHByb21lZGlvID0gbWVhbihUSUVNUE8uRU5VQ0xFQUNJT04pLCBkZXN2aWFjaW9uID0gc2QoVElFTVBPLkVOVUNMRUFDSU9OKSwgcmFuZ289IG1heChUSUVNUE8uRU5VQ0xFQUNJT04pLW1pbihUSUVNUE8uRU5VQ0xFQUNJT04pKQpgYGAKI1RpZW1wbyBkZSBNb3JjZWxhY2lvbiAoUikKYGBge3J9Cm9wdGlvbnMoZGlnaXRzPTMpICNhZ3JlZ2FyIHNvbG8gdW4gZGVjaW1hbCAKICBkZiAlPiUgCnN1bW1hcmlzZShwcm9tZWRpbyA9IG1lYW4oVElFTVBPLk1PUkNFTEFDSU9OKSwgZGVzdmlhY2lvbiA9IHNkKFRJRU1QTy5NT1JDRUxBQ0lPTiksIHJhbmdvPSBtYXgoVElFTVBPLk1PUkNFTEFDSU9OKS1taW4oVElFTVBPLk1PUkNFTEFDSU9OKSkKYGBgCiNob3JhcyBkZSBzb25kYSAoUykKYGBge3J9Cm9wdGlvbnMoZGlnaXRzPTMpICNhZ3JlZ2FyIHNvbG8gdW4gZGVjaW1hbCAKICBkZiAlPiUgCnN1bW1hcmlzZShwcm9tZWRpbyA9IG1lYW4oSE9SQVMuREUuU09OREEpLCBkZXN2aWFjaW9uID0gc2QoSE9SQVMuREUuU09OREEpLCByYW5nbz0gbWF4KEhPUkFTLkRFLlNPTkRBKS1taW4oSE9SQVMuREUuU09OREEpKQpgYGAKI2hvcmFzIGRlIHNvbmRhIChjbGFzaWZpY28gcG9yIGhvcmFzIGRlIHNvbmRhKSAoUykKYGBge3J9Cm9wdGlvbnMoZGlnaXRzPTMpICNhZ3JlZ2FyIHNvbG8gdW4gZGVjaW1hbCAKICBkZiAlPiUgCiAgZ3JvdXBfYnkoSE9SQVMuREUuU09OREEpICU+JQogIHN1bW1hcmlzZShuPW4oKSwgUG9yY2VudGFqZSA9ICBgbmAvNzUqMTAwKSAjc29uIDc1IGRhdG9zIApgYGAKI2hvcmFzIGRlIGlycmlnYWNpb24gKFQpCmBgYHtyfQpvcHRpb25zKGRpZ2l0cz0zKSAjYWdyZWdhciBzb2xvIHVuIGRlY2ltYWwgCiAgZGYgJT4lIApzdW1tYXJpc2UocHJvbWVkaW8gPSBtZWFuKEhPUkFTLklSUklHQUNJT04pLCBkZXN2aWFjaW9uID0gc2QoSE9SQVMuSVJSSUdBQ0lPTiksIHJhbmdvPSBtYXgoSE9SQVMuSVJSSUdBQ0lPTiktbWluKEhPUkFTLklSUklHQUNJT04pKQpgYGAKI2hvcmFzIGRlIGlycmlnYWNpb24gKGNsYXNpZmljbyBwb3IgaG9yYXMgZGUgaXJyaWdhY2lvbikgKFQpCmBgYHtyfQpvcHRpb25zKGRpZ2l0cz0zKSAjYWdyZWdhciBzb2xvIHVuIGRlY2ltYWwgCiAgZGYgJT4lIAogIGdyb3VwX2J5KEhPUkFTLklSUklHQUNJT04pICU+JQogIHN1bW1hcmlzZShuPW4oKSwgUG9yY2VudGFqZSA9ICBgbmAvNzUqMTAwKSAgI3NvbiA3NSBkYXRvcyAKYGBgCiNFc3RhZGlhIGRpYSAoVSkKYGBge3J9Cm9wdGlvbnMoZGlnaXRzPTMpICNhZ3JlZ2FyIHNvbG8gdW4gZGVjaW1hbCAKICBkZiAlPiUgCnN1bW1hcmlzZShwcm9tZWRpbyA9IG1lYW4oRVNUQURJQS5ESUEpLCBkZXN2aWFjaW9uID0gc2QoRVNUQURJQS5ESUEpLCByYW5nbz0gbWF4KEVTVEFESUEuRElBKS1taW4oRVNUQURJQS5ESUEpKQpgYGAKI2VzdGFkaWEgZGlhIChjbGFzaWZpY28gcG9yIGVzdGFkaWEgZGlhKShVKQpgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIAogIGRmICU+JSAKICBncm91cF9ieShFU1RBRElBLkRJQSkgJT4lCiAgc3VtbWFyaXNlKG49bigpLCBQb3JjZW50YWplID0gIGBuYC83NSoxMDApICAjc29uIDc1IGRhdG9zIApgYGAKI1ZhcmlhYmxlcyBkZSBmcmVjdWVuY2lhIHBhcmEgZGF0b3MgYW1hcmlsbG9zIHkgdmVyZGVzICg2MSBkYXRvcykKI2FicmlyIGVsIGRmIHBhcmEgZXN0YSBwbGFuaWxsYSBkZSBkYXRvcyAKYGBge3J9CmRmMSA8LSByZWFkX2NzdigiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvZS8yUEFDWC0xdlNGWEhBbHBXcjdQMkdIdHFPaTNGM19LTFhGVmJMeGw1UTJhcm10NE5TMUp1OWlYcm5yTkwzQUVsQUs0Y2Z5bGx4V3FMdUpQTGktcE1Kcy9wdWI/Z2lkPTEzNTkxNDEyNzQmc2luZ2xlPXRydWUmb3V0cHV0PWNzdiIpCmBgYAojYWdydXBvIHBvciBEaXN1cmlhIChXKQpgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIAogIGRmMSAlPiUgCiAgZ3JvdXBfYnkoRElTVVJJQSkgJT4lCiAgc3VtbWFyaXNlKG49bigpLCBQb3JjZW50YWplID0gIGBuYC82MSoxMDApICAgI3NvbiA2MSBkYXRvcyAKYGBgCiNhZ3J1cG8gcG9yIFVyZ2VuY2lhIChYKQpgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIAogIGRmMSAlPiUgCiAgZ3JvdXBfYnkoVVJHRU5DSUEpICU+JQogIHN1bW1hcmlzZShuPW4oKSwgUG9yY2VudGFqZSA9ICBgbmAvNjEqMTAwKSAgICNzb24gNjEgZGF0b3MgCmBgYAojQWdydXBvIHBvciBSQU8gKFkpCmBgYHtyfQpvcHRpb25zKGRpZ2l0cz0zKSAjYWdyZWdhciBzb2xvIHVuIGRlY2ltYWwgCiAgZGYxICU+JSAKICBncm91cF9ieShSQU8pICU+JQogIHN1bW1hcmlzZShuPW4oKSwgUG9yY2VudGFqZSA9ICBgbmAvNjEqMTAwKSAgICNzb24gNjEgZGF0b3MgCmBgYAojQWdydXBvIHBvciBJbmNvbnRpbmVuY2lhIChaKQpgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIAogIGRmMSAlPiUgCiAgZ3JvdXBfYnkoSU5DT05USU5FTkNJQSkgJT4lCiAgc3VtbWFyaXNlKG49bigpLCBQb3JjZW50YWplID0gIGBuYC82MSoxMDApICAgI3NvbiA2MSBkYXRvcyAKYGBgCiNBZ3J1cG8gcG9yIElUVSAoQUEpCmBgYHtyfQpvcHRpb25zKGRpZ2l0cz0zKSAjYWdyZWdhciBzb2xvIHVuIGRlY2ltYWwgCiAgZGYxICU+JSAKICBncm91cF9ieShJVFUpICU+JQogIHN1bW1hcmlzZShuPW4oKSwgUG9yY2VudGFqZSA9ICBgbmAvNjEqMTAwKSAgICNzb24gNjEgZGF0b3MgCmBgYAojQWdydXBvIHBvciBIZW1hdHVyaWEgKEFCKQpgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIAogIGRmMSAlPiUgCiAgZ3JvdXBfYnkoSEVNQVRVUklBKSAlPiUKICBzdW1tYXJpc2Uobj1uKCksIFBvcmNlbnRhamUgPSAgYG5gLzYxKjEwMCkgICAjc29uIDYxIGRhdG9zIApgYGAKI0FncnVwbyBwb3IgcmVpbmdyZXNvIApgYGB7cn0Kb3B0aW9ucyhkaWdpdHM9MykgI2FncmVnYXIgc29sbyB1biBkZWNpbWFsIAogIGRmMSAlPiUgCiAgZ3JvdXBfYnkoUkVJTkdSRVNPKSAlPiUKICBzdW1tYXJpc2Uobj1uKCksIFBvcmNlbnRhamUgPSAgYG5gLzYxKjEwMCkgICAjc29uIDYxIGRhdG9zIApgYGAKI2Ficm8gZWwgZGYyIHBhcmEgdC50ZXN0CmBgYHtyfQpkZjMgPC0gcmVhZF9jc3YoImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kL2UvMlBBQ1gtMXZTRlhIQWxwV3I3UDJHSHRxT2kzRjNfS0xYRlZiTHhsNVEyYXJtdDROUzFKdTlpWHJuck5MM0FFbEFLNGNmeWxseFdxTHVKUExpLXBNSnMvcHViP2dpZD0xNTQ1NzM1NTkyJnNpbmdsZT10cnVlJm91dHB1dD1jc3YiKQpgYGAKI3N1bW1hcnkKYGBge3J9CnN1bW1hcnkoZGYzKQpgYGAKI3QudGVzdCBwYXJhIFVGTSAoZXhpc3RlbiBkaWZlcmVuY2lhcykKYGBge3J9CnQudGVzdChkZjMkYFZhbG9yIFVGTWB+ZGYzJFVGTSkgI0V4aXN0ZW4gZGlmZXJlbmNpYXMKYGBgCiN0LnRlc3QgcGFyYSBQU0EgKGV4aXN0ZW4gZGlmZXJlbmNpYXMpCmBgYHtyfQp0LnRlc3QoZGYzJGBWYWxvciBQU0FgfmRmMyRQU0EpICNFeGlzdGVuIGRpZmVyZW5jaWFzCmBgYAojdC50ZXN0IHBhcmEgUlBNIChleGlzdGVuIGRpZmVyZW5jaWFzKQpgYGB7cn0KdC50ZXN0KGRmMyRgVmFsb3IgUlBNYH5kZjMkUlBNKSAjRXhpc3RlbiBkaWZlcmVuY2lhcyAKYGBgCgoKCgoKCgoKCgoKCgoKCgoKCgo=