Preparação dos Dados

Abrir base do ENEM e criar amostras

# Bibliotecas
library(knitr)
library(esquisse)
library(tidyverse)
library(skimr)
library(extrafont)
gc()
            used  (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells   4125435 220.4    7984848  426.5   7984848  426.5
Vcells 117269465 894.7  171438110 1308.0 163239406 1245.5
memory.limit (9999999999)
Warning: 'memory.limit()' is no longer supported
[1] Inf

1.1.1 Organização da Base e analise preliminar

sample_00_10 <- readRDS("~/RStudio/ENEM/sample_00_10.rds")
Warning in readRDS("~/RStudio/ENEM/sample_00_10.rds") :
  error reading the file
Error in readRDS("~/RStudio/ENEM/sample_00_10.rds") : 
  error reading from connection

Observar Valores Unicos e Numéricos

#Observar Valores Unicos e Numéricos
sample_00_10[,1:3] <- lapply(sample_00_10[,1:3], as.numeric)
sample_00_10[,7:9] <- lapply(sample_00_10[,7:9], as.factor)

sample_00_10[,10] <- lapply(sample_00_10[,10], as.numeric)
sample_00_10[,11:12] <- lapply(sample_00_10[,11:12], as.factor)

sample_00_10[,13:19] <- lapply(sample_00_10[,13:19], as.numeric)
sample_00_10[,20:83] <- lapply(sample_00_10[,20:83], as.factor)

skim_tee(sample_00_10)
-- Data Summary ------------------------
                           Values
Name                       data  
Number of rows             30403 
Number of columns          83    
Key                        NULL  
_______________________          
Column type frequency:           
  character                3     
  factor                   69    
  numeric                  11    
________________________         
Group variables            None  
sample_00_10 %>% skim()
-- Data Summary ------------------------
                           Values    
Name                       Piped data
Number of rows             30403     
Number of columns          83        
Key                        NULL      
_______________________              
Column type frequency:               
  character                3         
  factor                   69        
  numeric                  11        
________________________             
Group variables            None      
fix_windows_histograms()
This function will change your system locale. It may have other unintended effects.
y

1.1.2. é possivel unificar as bases?

standarizar indicadores?

1.2.Preparação da Base Ambiental

Abrir Bases:

# unificar base de dados ambiental
# Centro <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/Centro.rds")
# NE <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/NE.rds")
# NO <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/NO.rds")
# SE <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/SE.rds")
# SUL <- readRDS("~/RStudio/ENEM/Data-20220615T014950Z-001/Data/Sul.rds")
# df_Am<-bind_rows(NE, NO, SE,SUL)
rm(NE,NO,SE,SUL,Centro)
head(df_Am)
Error in h(simpleError(msg, call)) : 
  error in evaluating the argument 'x' in selecting a method for function 'head': object 'df_Am' not found

Fundir Bases

#preparando para fundir

df_Am1<-df_Am %>% mutate(CO_MUNICIPIO_RESIDENCIA=code_muni) %>% # criterio unificador
  group_by(CO_MUNICIPIO_RESIDENCIA,Year,name_state,name_region) %>% # fatores a se manter
  summarise(co_ppb=mean(co_ppb),# media das variaveis ambientaris por dia/mes
            no2_ppb=mean(no2_ppb),
            o3_ppb=mean(o3_ppb),
            pm25_ugm3=mean(pm25_ugm3),
            so2_ugm3=mean(so2_ugm3),
            preciptation=mean(preciptation),
            temperature=mean(temperature),
            humidity=mean(humidity),
            wind_direction=mean(wind_direction),
            wind_speed=mean(wind_speed),
            wildfire==mean(wildfire))%>% distinct()
head(df_Am1)

1.3.União das Bases

# dftest<-left_join(sample_00_10,df_Am1,by="CO_MUNICIPIO_RESIDENCIA") 
# table(dftest$Year,dftest$NU_ANO)
# skim(dftest$Year)
# dftest %>% filter(Year==NU_ANO+2000) -> dftest0
# saveRDS(dftest,"dftest0.rds")
 dftest0 <- readRDS("~/RStudio/ENEM/dftest0.rds")

Análise Preliminar

gpa_mixed = lmer(Nota ~ Variavel Ambiental + (1 | ANO)+ (1 | Municipio), data = dfteste)

dftest0 %>% 
  ggplot(aes(co_ppb,NU_NOTA_REDACAO))+geom_point()+facet_wrap(~NU_ANO+2000,scales = "free")+geom_smooth()
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 3155 rows containing non-finite values (stat_smooth).
Warning: Removed 3155 rows containing missing values (geom_point).

dftest0 %>% 
  ggplot(aes(co_ppb,NU_NOTA_COMP1))+geom_point()+facet_wrap(~NU_ANO+2000,scales = "free")+geom_smooth()
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 16854 rows containing non-finite values (stat_smooth).
Warning: Removed 16854 rows containing missing values (geom_point).

dftest0 %>% 
  ggplot(aes(co_ppb,NU_NOTA_COMP2))+geom_point()+facet_wrap(~NU_ANO+2000,scales = "free")+geom_smooth()
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 16854 rows containing non-finite values (stat_smooth).
Warning: Removed 16854 rows containing missing values (geom_point).

dftest0 %>% 
  ggplot(aes(co_ppb,NU_NOTA_COMP3))+geom_point()+facet_wrap(~NU_ANO+2000,scales = "free")+geom_smooth()
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 16854 rows containing non-finite values (stat_smooth).
Warning: Removed 16854 rows containing missing values (geom_point).

dftest0 %>% 
  ggplot(aes(co_ppb,NU_NOTA_COMP4))+geom_point()+facet_wrap(~NU_ANO+2000,scales = "free")+geom_smooth()
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 16854 rows containing non-finite values (stat_smooth).
Warning: Removed 16854 rows containing missing values (geom_point).

dftest0 %>% 
  ggplot(aes(co_ppb,NU_NOTA_COMP5))+geom_point()+facet_wrap(~NU_ANO+2000,scales = "free")+geom_smooth()
`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'
Warning: Removed 16854 rows containing non-finite values (stat_smooth).
Warning: Removed 16854 rows containing missing values (geom_point).

library(lme4)
gpa_mixed = lmer(NU_NOTA_REDACAO ~ co_ppb+no2_ppb  + NU_IDADE + (1 +co_ppb| CO_UF_RESIDENCIA)+ (1 +co_ppb| NU_ANO), data = dftest0)
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  unable to evaluate scaled gradient
Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge: degenerate  Hessian with 4 negative eigenvalues
summary(gpa_mixed)
Linear mixed model fit by REML ['lmerMod']
Formula: 
NU_NOTA_REDACAO ~ co_ppb + no2_ppb + NU_IDADE + (1 + co_ppb |  
    CO_UF_RESIDENCIA) + (1 + co_ppb | NU_ANO)
   Data: dftest0

REML criterion at convergence: 5582022

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.6670 -0.2039  0.0322  0.2062  4.2815 

Random effects:
 Groups           Name        Variance  Std.Dev.  Corr
 CO_UF_RESIDENCIA (Intercept) 8.381e-03   0.09155     
                  co_ppb      4.230e-03   0.06504 0.63
 NU_ANO           (Intercept) 3.320e+04 182.19703     
                  co_ppb      8.200e+04 286.36461 0.00
 Residual                     2.724e+04 165.05674     
Number of obs: 427696, groups:  CO_UF_RESIDENCIA, 27; NU_ANO, 11

Fixed effects:
             Estimate Std. Error t value
(Intercept) 144.64178   54.95350   2.632
co_ppb       -0.02048   86.35020   0.000
no2_ppb      -0.10479    0.28394  -0.369
NU_IDADE     -3.02018    0.03650 -82.755

Correlation of Fixed Effects:
         (Intr) co_ppb n2_ppb
co_ppb    0.000              
no2_ppb   0.015  0.000       
NU_IDADE -0.009  0.000 -0.049
optimizer (nloptwrap) convergence code: 0 (OK)
unable to evaluate scaled gradient
Model failed to converge: degenerate  Hessian with 4 negative eigenvalues

Extração de Coeficientes

1.4.Conclusão

  • Viés de Coleta

  • Atrito/ Perca de dados

    • Dados Ausentes

    • Variaveis Pouco Claras

      • Avaliar Variaveis Q1,Q2,…Qn

      • Avaliar Variaveis Q1,Q2,…Qn

      • Avaliar autocorrelação das Variaveis Ambientais

Sugestões:

  • Normalizar Notas para facilitar comparação entre anos

2. Analise Exploratória

2.1 Estatistica Descritiva das Variaveis

2.2 Associações, correlações

2.3 Modelo Logico

  • melhores variaveis ambientais

  • melhores variaveis de Performace

  • Covariaveis, Autocorrelacionalidade, efeitos fixos e aleatórios

3. Regressão de Efeitos Mistos

2.1 Hipotese Básica do Modelo

2.2. Extração de Coeficientes

2.3 Hipoteses

LS0tDQp0aXRsZTogIkFuw6FsaXNlIFByZXBhcmF0w7NyaWFzIg0KYXV0aG9yOg0KLSBuYW1lOiBUaGlhZ28gTm9yb25oYSBHYXJkaW4NCiAgYWZmaWxpYXRpb246IEZ1bmRhw6fDo28gR2V0dWxpbyBWYXJnYXMNCi0gbmFtZTogV2VlYmVyYiBKLiBSw6lxdWlhIEpyLg0KICBhZmZpbGlhdGlvbjogRnVuZGHDp8OjbyBHZXR1bGlvIFZhcmdhcw0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGRmX3ByaW50OiBwYWdlZA0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCi0tLQ0KDQojIFByZXBhcmHDp8OjbyBkb3MgRGFkb3MNCg0KIyMgQWJyaXIgYmFzZSBkbyBFTkVNIGUgY3JpYXIgYW1vc3RyYXMNCg0KYGBge3J9DQojIEJpYmxpb3RlY2FzDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShlc3F1aXNzZSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShza2ltcikNCmxpYnJhcnkoZXh0cmFmb250KQ0KDQpgYGANCg0KYGBge3J9DQpnYygpDQptZW1vcnkubGltaXQgKDk5OTk5OTk5OTkpDQpgYGANCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiMgYWJyaXIgYmFzZSBlIGNyaWFyIGFtb3N0cmFzDQojZGFkb3NfZmluYWlzXzIwMDBfMjAxMCA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS8yX0RhZG8gdHJhdGFkby9kYWRvc19maW5haXNfMjAwMF8yMDEwLnJkcyIpDQojZGY8LXNsaWNlX3NhbXBsZShkYWRvc19maW5haXNfMjAwMF8yMDEwLHByb3AgPSAwLjAxKSANCiNzYXZlUkRTKGRmLCBmaWxlID0gInNhbXBsZV8wMF8xMC5yZHMiKQ0KI3RhYmxlKGRhZG9zX2ZpbmFpc18yMDAwXzIwMTAkTlVfQU5PKQ0KI3RhYmxlKGRmJE5VX0FOTykNCiNkYWRvc19maW5haXNfMjAwMF8yMDEwIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNLzJfRGFkbyB0cmF0YWRvL2RhZG9zX2ZpbmFpc18yMDEyXzIwMTQucmRzIikNCg0KI2RmMjwtc2xpY2Vfc2FtcGxlKGRhZG9zX2ZpbmFpc18yMDAwXzIwMTAscHJvcCA9IDAuMDEpIA0KI3NhdmVSRFMoZGYyLCBmaWxlID0gInNhbXBsZV8xMl8xNC5yZHMiKQ0KDQoNCiNkYWRvc19maW5haXNfMjAxNV8yMDIwIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNLzJfRGFkbyB0cmF0YWRvL2RhZG9zX2ZpbmFpc18yMDE1XzIwMjAucmRzIikNCiNkZjM8LXNsaWNlX3NhbXBsZShkYWRvc19maW5haXNfMjAxNV8yMDIwLHByb3AgPSAwLjAxKSANCiNzYXZlUkRTKGRmMywgZmlsZSA9ICJzYW1wbGVfMTVfMjAucmRzIikNCmBgYA0KDQojIyMjIDEuMS4xIE9yZ2FuaXphw6fDo28gZGEgQmFzZSBlIGFuYWxpc2UgcHJlbGltaW5hcg0KDQpgYGB7cn0NCnNhbXBsZV8wMF8xMCA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS9zYW1wbGVfMDBfMTAucmRzIikNCiMgcmVzYW1wbGU6DQpzYW1wbGVfMDBfMTA8LSBzbGljZV9zYW1wbGUoc2FtcGxlXzAwXzEwLHByb3AgPSAwLjEpDQoNCmBgYA0KDQpPYnNlcnZhciBWYWxvcmVzIFVuaWNvcyBlIE51bcOpcmljb3MNCg0KYGBge3IgZWNobz1UUlVFfQ0KI09ic2VydmFyIFZhbG9yZXMgVW5pY29zIGUgTnVtw6lyaWNvcw0Kc2FtcGxlXzAwXzEwWywxOjNdIDwtIGxhcHBseShzYW1wbGVfMDBfMTBbLDE6M10sIGFzLm51bWVyaWMpDQpzYW1wbGVfMDBfMTBbLDc6OV0gPC0gbGFwcGx5KHNhbXBsZV8wMF8xMFssNzo5XSwgYXMuZmFjdG9yKQ0KDQpzYW1wbGVfMDBfMTBbLDEwXSA8LSBsYXBwbHkoc2FtcGxlXzAwXzEwWywxMF0sIGFzLm51bWVyaWMpDQpzYW1wbGVfMDBfMTBbLDExOjEyXSA8LSBsYXBwbHkoc2FtcGxlXzAwXzEwWywxMToxMl0sIGFzLmZhY3RvcikNCg0Kc2FtcGxlXzAwXzEwWywxMzoxOV0gPC0gbGFwcGx5KHNhbXBsZV8wMF8xMFssMTM6MTldLCBhcy5udW1lcmljKQ0Kc2FtcGxlXzAwXzEwWywyMDo4M10gPC0gbGFwcGx5KHNhbXBsZV8wMF8xMFssMjA6ODNdLCBhcy5mYWN0b3IpDQoNCnNraW1fdGVlKHNhbXBsZV8wMF8xMCkNCg0KYGBgDQoNCmBgYHtyfQ0Kc2FtcGxlXzAwXzEwICU+JSBza2ltKCkNCiNmaXhfd2luZG93c19oaXN0b2dyYW1zKCkNCmBgYA0KDQojIyMjIDEuMS4yLiDDqSBwb3NzaXZlbCB1bmlmaWNhciBhcyBiYXNlcz8NCg0Kc3RhbmRhcml6YXIgaW5kaWNhZG9yZXM/DQoNCiMjIyAxLjIuUHJlcGFyYcOnw6NvIGRhIEJhc2UgQW1iaWVudGFsDQoNCkFicmlyIEJhc2VzOg0KDQpgYGB7ciB3YXJuaW5nPUZBTFNFfQ0KIyB1bmlmaWNhciBiYXNlIGRlIGRhZG9zIGFtYmllbnRhbA0KIyBDZW50cm8gPC0gcmVhZFJEUygifi9SU3R1ZGlvL0VORU0vRGF0YS0yMDIyMDYxNVQwMTQ5NTBaLTAwMS9EYXRhL0NlbnRyby5yZHMiKQ0KIyBORSA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS9EYXRhLTIwMjIwNjE1VDAxNDk1MFotMDAxL0RhdGEvTkUucmRzIikNCiMgTk8gPC0gcmVhZFJEUygifi9SU3R1ZGlvL0VORU0vRGF0YS0yMDIyMDYxNVQwMTQ5NTBaLTAwMS9EYXRhL05PLnJkcyIpDQojIFNFIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL0RhdGEtMjAyMjA2MTVUMDE0OTUwWi0wMDEvRGF0YS9TRS5yZHMiKQ0KIyBTVUwgPC0gcmVhZFJEUygifi9SU3R1ZGlvL0VORU0vRGF0YS0yMDIyMDYxNVQwMTQ5NTBaLTAwMS9EYXRhL1N1bC5yZHMiKQ0KIyBkZl9BbTwtYmluZF9yb3dzKE5FLCBOTywgU0UsU1VMKQ0KI3JtKE5FLE5PLFNFLFNVTCxDZW50cm8pDQojaGVhZChkZl9BbSkNCmBgYA0KDQpGdW5kaXIgQmFzZXMNCg0KYGBge30NCiNwcmVwYXJhbmRvIHBhcmEgZnVuZGlyDQoNCmRmX0FtMTwtZGZfQW0gJT4lIG11dGF0ZShDT19NVU5JQ0lQSU9fUkVTSURFTkNJQT1jb2RlX211bmkpICU+JSAjIGNyaXRlcmlvIHVuaWZpY2Fkb3INCiAgZ3JvdXBfYnkoQ09fTVVOSUNJUElPX1JFU0lERU5DSUEsWWVhcixuYW1lX3N0YXRlLG5hbWVfcmVnaW9uKSAlPiUgIyBmYXRvcmVzIGEgc2UgbWFudGVyDQogIHN1bW1hcmlzZShjb19wcGI9bWVhbihjb19wcGIpLCMgbWVkaWEgZGFzIHZhcmlhdmVpcyBhbWJpZW50YXJpcyBwb3IgZGlhL21lcw0KICAgICAgICAgICAgbm8yX3BwYj1tZWFuKG5vMl9wcGIpLA0KICAgICAgICAgICAgbzNfcHBiPW1lYW4obzNfcHBiKSwNCiAgICAgICAgICAgIHBtMjVfdWdtMz1tZWFuKHBtMjVfdWdtMyksDQogICAgICAgICAgICBzbzJfdWdtMz1tZWFuKHNvMl91Z20zKSwNCiAgICAgICAgICAgIHByZWNpcHRhdGlvbj1tZWFuKHByZWNpcHRhdGlvbiksDQogICAgICAgICAgICB0ZW1wZXJhdHVyZT1tZWFuKHRlbXBlcmF0dXJlKSwNCiAgICAgICAgICAgIGh1bWlkaXR5PW1lYW4oaHVtaWRpdHkpLA0KICAgICAgICAgICAgd2luZF9kaXJlY3Rpb249bWVhbih3aW5kX2RpcmVjdGlvbiksDQogICAgICAgICAgICB3aW5kX3NwZWVkPW1lYW4od2luZF9zcGVlZCksDQogICAgICAgICAgICB3aWxkZmlyZT09bWVhbih3aWxkZmlyZSkpJT4lIGRpc3RpbmN0KCkNCmhlYWQoZGZfQW0xKQ0KYGBgDQoNCiMjIyAxLjMuVW5pw6NvIGRhcyBCYXNlcw0KDQpgYGB7cn0NCiMgZGZ0ZXN0PC1sZWZ0X2pvaW4oc2FtcGxlXzAwXzEwLGRmX0FtMSxieT0iQ09fTVVOSUNJUElPX1JFU0lERU5DSUEiKSANCiMgdGFibGUoZGZ0ZXN0JFllYXIsZGZ0ZXN0JE5VX0FOTykNCiMgc2tpbShkZnRlc3QkWWVhcikNCiMgZGZ0ZXN0ICU+JSBmaWx0ZXIoWWVhcj09TlVfQU5PKzIwMDApIC0+IGRmdGVzdDANCiMgc2F2ZVJEUyhkZnRlc3QsImRmdGVzdDAucmRzIikNCiBkZnRlc3QwIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL2RmdGVzdDAucmRzIikNCmBgYA0KDQpBbsOhbGlzZSBQcmVsaW1pbmFyDQoNCmdwYV9taXhlZCA9IGxtZXIoTm90YSBcfiBWYXJpYXZlbCBBbWJpZW50YWwgKyAoMSBcfCBBTk8pKyAoMSBcfCBNdW5pY2lwaW8pLCBkYXRhID0gZGZ0ZXN0ZSkNCg0KYGBge3J9DQpkZnRlc3QwICU+JSANCiAgZ2dwbG90KGFlcyhjb19wcGIsTlVfTk9UQV9SRURBQ0FPKSkrZ2VvbV9wb2ludCgpK2ZhY2V0X3dyYXAofk5VX0FOTysyMDAwLHNjYWxlcyA9ICJmcmVlIikrZ2VvbV9zbW9vdGgoKQ0KZGZ0ZXN0MCAlPiUgDQogIGdncGxvdChhZXMoY29fcHBiLE5VX05PVEFfQ09NUDEpKStnZW9tX3BvaW50KCkrZmFjZXRfd3JhcCh+TlVfQU5PKzIwMDAsc2NhbGVzID0gImZyZWUiKStnZW9tX3Ntb290aCgpDQpkZnRlc3QwICU+JSANCiAgZ2dwbG90KGFlcyhjb19wcGIsTlVfTk9UQV9DT01QMikpK2dlb21fcG9pbnQoKStmYWNldF93cmFwKH5OVV9BTk8rMjAwMCxzY2FsZXMgPSAiZnJlZSIpK2dlb21fc21vb3RoKCkNCmRmdGVzdDAgJT4lIA0KICBnZ3Bsb3QoYWVzKGNvX3BwYixOVV9OT1RBX0NPTVAzKSkrZ2VvbV9wb2ludCgpK2ZhY2V0X3dyYXAofk5VX0FOTysyMDAwLHNjYWxlcyA9ICJmcmVlIikrZ2VvbV9zbW9vdGgoKQ0KZGZ0ZXN0MCAlPiUgDQogIGdncGxvdChhZXMoY29fcHBiLE5VX05PVEFfQ09NUDQpKStnZW9tX3BvaW50KCkrZmFjZXRfd3JhcCh+TlVfQU5PKzIwMDAsc2NhbGVzID0gImZyZWUiKStnZW9tX3Ntb290aCgpDQpkZnRlc3QwICU+JSANCiAgZ2dwbG90KGFlcyhjb19wcGIsTlVfTk9UQV9DT01QNSkpK2dlb21fcG9pbnQoKStmYWNldF93cmFwKH5OVV9BTk8rMjAwMCxzY2FsZXMgPSAiZnJlZSIpK2dlb21fc21vb3RoKCkNCg0KDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGxtZTQpDQpncGFfbWl4ZWQgPSBsbWVyKE5VX05PVEFfUkVEQUNBTyB+IGNvX3BwYitubzJfcHBiICArIE5VX0lEQURFICsgKDEgK2NvX3BwYnwgQ09fVUZfUkVTSURFTkNJQSkrICgxICtjb19wcGJ8IE5VX0FOTyksIGRhdGEgPSBkZnRlc3QwKQ0Kc3VtbWFyeShncGFfbWl4ZWQpDQpgYGANCg0KRXh0cmHDp8OjbyBkZSBDb2VmaWNpZW50ZXMNCg0KYGBge3J9DQoNCiNjb2VmKGdwYV9taXhlZCkNCnNsb3Blc19yYW5kb21fZ3JvdXBzIDwtIGNvZWYoZ3BhX21peGVkKQ0KYmV0YSA8LSBzbG9wZXNfcmFuZG9tX2dyb3VwcyROVV9BTk8NCmJldGEkZmFjdG9yPC1yb3cubmFtZXMoYmV0YSkNCmJldGENCiNleHRyYWluZG8gb3MgU0UNCmxpYnJhcnkocGFyYW1ldGVycykNCnNsb3Blc19TRV9yYW5kb21fZ3JvdXBzIDwtIHN0YW5kYXJkX2Vycm9yKGdwYV9taXhlZCwgZWZmZWN0cyA9ICJyYW5kb20iKQ0KIFNFIDwtIHNsb3Blc19TRV9yYW5kb21fZ3JvdXBzJE5VX0FOTw0KIFNFDQogYmV0YSRTRV9JbnRlcmNlcHQ8LVNFWywxXQ0KIGJldGEkU0VfY29fcHBiIDwtU0VbLDJdDQogYmV0YQ0KICMjIENhbGN1bGF0ZSA5NSVDSQ0KIFI8LWJldGEgJT4lIGdhdGhlcihUaXBvX2NvZWYsIENvZWYsYChJbnRlcmNlcHQpYCxjb19wcGIpIA0KIA0KICMgUjwtYmV0YSAlPiUgZ2F0aGVyKFRpcG9fY29lZiwgQ29lZixgKEludGVyY2VwdClgLCkgJT4lbXV0YXRlKA0KICMgYChJbnRlcmNlcHQpYD1TRV9JbnRlcmNlcHQpICU+JQ0KICMgZ2F0aGVyKHRpcG9fU0UsIFNFLCBjb19wcGIsYChJbnRlcmNlcHQpYCkgJT4lDQogIyBmaWx0ZXIodGlwb19TRT09VGlwb19jb2VmKQ0KIFIgJT4lDQogZ2dwbG90KGFlcyhDb2VmLGZhY3RvcikpK2dlb21fcG9pbnQoKSsNCiBmYWNldF9ncmlkKH5UaXBvX2NvZWYsc2NhbGVzID0gImZyZWUiKSsNCiBnZW9tX2Vycm9yYmFyKGFlcyh4bWluPShDb2VmKzEuNjQ1KlNFKSx4bWF4PShDb2VmLTEuNjQ1KlNFKSksc2l6ZT0wLjEpKw0KIGdlb21fcG9pbnRyYW5nZShhZXMoeG1pbj0oQ29lZisxLjY0NSpTRSkseG1heD0oQ29lZi0xLjY0NSpTRSkpLHNpemU9MC4xMCkrDQogZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwNCiBjb2xvciA9ICJyZWQiLCBzaXplPTEuMCkrDQogbGFicyh0aXRsZSA9ICJNb2RlbG8gbWlzdG9zIiwNCiBzdWJ0aXRsZSA9ICJDb2VmaWNpZW50ZXMoSUM5MCUpIiwNCiBjYXB0aW9uID0gIkVQUEcgRkdWIikNCmBgYA0KDQoNCiMjIyAxLjQuQ29uY2x1c8Ojbw0KDQotICAgVmnDqXMgZGUgQ29sZXRhDQoNCi0gICBBdHJpdG8vIFBlcmNhIGRlIGRhZG9zDQoNCiAgICAtICAgRGFkb3MgQXVzZW50ZXMNCg0KICAgICAgICAtICAgDQoNCiAgICAtICAgVmFyaWF2ZWlzIFBvdWNvIENsYXJhcw0KDQogICAgICAgIC0gICBBdmFsaWFyIFZhcmlhdmVpcyBRMSxRMiwuLi5Rbg0KDQogICAgICAgIC0gICBBdmFsaWFyIFZhcmlhdmVpcyBRMSxRMiwuLi5Rbg0KDQogICAgICAgIC0gICBBdmFsaWFyIGF1dG9jb3JyZWxhw6fDo28gZGFzIFZhcmlhdmVpcyBBbWJpZW50YWlzDQoNClN1Z2VzdMO1ZXM6DQoNCi0gICBOb3JtYWxpemFyIE5vdGFzIHBhcmEgZmFjaWxpdGFyIGNvbXBhcmHDp8OjbyBlbnRyZSBhbm9zDQoNCiMjIyAyLiBBbmFsaXNlIEV4cGxvcmF0w7NyaWENCg0KMi4xIEVzdGF0aXN0aWNhIERlc2NyaXRpdmEgZGFzIFZhcmlhdmVpcw0KDQoyLjIgQXNzb2NpYcOnw7VlcywgY29ycmVsYcOnw7Vlcw0KDQoyLjMgTW9kZWxvIExvZ2ljbw0KDQotICAgbWVsaG9yZXMgdmFyaWF2ZWlzIGFtYmllbnRhaXMNCg0KLSAgIG1lbGhvcmVzIHZhcmlhdmVpcyBkZSBQZXJmb3JtYWNlDQoNCi0gICBDb3ZhcmlhdmVpcywgQXV0b2NvcnJlbGFjaW9uYWxpZGFkZSwgZWZlaXRvcyBmaXhvcyBlIGFsZWF0w7NyaW9zDQoNCiMjIyAzLiBSZWdyZXNzw6NvIGRlIEVmZWl0b3MgTWlzdG9zDQoNCjIuMSBIaXBvdGVzZSBCw6FzaWNhIGRvIE1vZGVsbw0KDQoyLjIuIEV4dHJhw6fDo28gZGUgQ29lZmljaWVudGVzDQoNCjIuMyBIaXBvdGVzZXMNCg==