library(tidyverse)
df<-readRDS("Energia_ambiental_diário.rds")
head(df)
NA
#amostragem
slice_sample(df,prop = 0.1)->df1
Estatisticas Descritivas
library(stargazer)
summary(df)
Date cod_modalidadeoperacao nom_subsistema
Min. :2000-01-01 TIPO I :1066453 NORDESTE:280479
1st Qu.:2007-12-21 TIPO III : 153508 NORTE : 64771
Median :2013-05-10 Pequenas Usinas (Tipo III): 125774 PARAGUAI: 8024
Mean :2012-06-05 TIPO II-A : 66201 SUDESTE :901432
3rd Qu.:2017-02-13 Conjunto de Usinas : 52636 SUL :294171
Max. :2021-12-31 (Other) : 84304
NA's : 1
nom_estado nom_tipousina nom_tipocombustivel preciptation
SAO PAULO :253521 BOMBEAMENTO : 737 Hidráulica :948047 Min. : 0.0
MINAS GERAIS :219349 EOLIELÉTRICA : 69677 Gás :158366 1st Qu.: 0.0
RIO GRANDE DO SUL:142434 FOTOVOLTAICA : 17813 Biomassa : 99819 Median : 0.0
BAHIA :109287 HIDROELÉTRICA:947310 Óleo Diesel : 99602 Mean : 3.5
GOIAS :100989 NUCLEAR : 8024 Óleo Combustível: 86652 3rd Qu.: 3.0
PARANA : 91966 TÉRMICA :505316 (Other) :156184 Max. :256.0
(Other) :631331 NA's : 207 NA's :454069
temperature humidity wind_speed co_ppb no2_ppb
Min. : 1.2 Min. : 21.0 Min. : 0.3 Min. : 0.0 Min. : 0.0
1st Qu.:20.9 1st Qu.: 69.0 1st Qu.: 2.1 1st Qu.: 92.0 1st Qu.: 0.8
Median :23.7 Median : 79.0 Median : 2.7 Median : 118.5 Median : 1.2
Mean :23.0 Mean : 76.9 Mean : 3.0 Mean : 140.6 Mean : 1.9
3rd Qu.:25.9 3rd Qu.: 87.5 3rd Qu.: 3.6 3rd Qu.: 155.2 3rd Qu.: 2.0
Max. :34.5 Max. :100.0 Max. :13.3 Max. :12303.9 Max. :64.0
NA's :454069 NA's :454069 NA's :454069 NA's :454069 NA's :545830
o3_ppb pm25_ugm3 so2_ugm3 val_geracao
Min. : 0.0 Min. : 0.0 Min. : 0.0 Min. : 0
1st Qu.: 14.9 1st Qu.: 5.2 1st Qu.: 0.4 1st Qu.: 216
Median : 19.3 Median : 8.1 Median : 0.7 Median : 1440
Mean : 20.0 Mean : 12.9 Mean : 1.8 Mean : 6676
3rd Qu.: 24.5 3rd Qu.: 12.7 3rd Qu.: 1.6 3rd Qu.: 5144
Max. :118.4 Max. :1853.6 Max. :110.9 Max. :392779
NA's :454069 NA's :466094 NA's :466142
visualização
modelo linear simples
for( i in 1:14){
print(names(df)[i])
formula <- as.formula(paste("val_geracao", "~", names(df)[i]))
m<-lm(formula,df)
print(summary(m))
}
[1] "Date"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-7626 -6240 -5248 -1512 386698
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9918.21230 102.59680 96.67 <2e-16 ***
Date -0.20921 0.00656 -31.89 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17220 on 1548875 degrees of freedom
Multiple R-squared: 0.0006563, Adjusted R-squared: 0.0006556
F-statistic: 1017 on 1 and 1548875 DF, p-value: < 2.2e-16
[1] "cod_modalidadeoperacao"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-8986 -7679 -3042 -57 383793
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6872.29 73.43 93.59 <2e-16 ***
cod_modalidadeoperacaoPequenas Usinas (Tipo III) -5207.95 87.45 -59.55 <2e-16 ***
cod_modalidadeoperacaoTIPO I 2113.53 75.22 28.10 <2e-16 ***
cod_modalidadeoperacaoTIPO II-A -6657.63 98.38 -67.67 <2e-16 ***
cod_modalidadeoperacaoTIPO II-B -5946.71 107.66 -55.23 <2e-16 ***
cod_modalidadeoperacaoTIPO II-C -5882.05 112.95 -52.08 <2e-16 ***
cod_modalidadeoperacaoTIPO III -6275.22 85.09 -73.75 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 16850 on 1548869 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.04362, Adjusted R-squared: 0.04361
F-statistic: 1.177e+04 on 6 and 1548869 DF, p-value: < 2.2e-16
[1] "nom_subsistema"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-83655 -5373 -4469 -891 376088
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5005.28 29.55 169.36 <2e-16 ***
nom_subsistemaNORTE 11686.12 68.23 171.27 <2e-16 ***
nom_subsistemaPARAGUAI 96447.04 177.21 544.24 <2e-16 ***
nom_subsistemaSUDESTE 1032.67 33.84 30.52 <2e-16 ***
nom_subsistemaSUL 428.78 41.31 10.38 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 15650 on 1548872 degrees of freedom
Multiple R-squared: 0.1744, Adjusted R-squared: 0.1744
F-statistic: 8.182e+04 on 4 and 1548872 DF, p-value: < 2.2e-16
[1] "nom_estado"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-83655 -4657 -2334 393 355352
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 57.15 222.23 0.257 0.797064
nom_estadoALAGOAS 29060.26 262.88 110.547 < 2e-16 ***
nom_estadoAMAPA 4036.96 285.97 14.117 < 2e-16 ***
nom_estadoAMAZONAS 3281.37 246.29 13.323 < 2e-16 ***
nom_estadoBAHIA 4704.44 226.63 20.758 < 2e-16 ***
nom_estadoCEARA 2764.36 231.86 11.922 < 2e-16 ***
nom_estadoDISTRITO FEDERAL 87.74 254.72 0.344 0.730495
nom_estadoESPIRITO SANTO 1929.15 232.60 8.294 < 2e-16 ***
nom_estadoGOIAS 3148.79 226.99 13.872 < 2e-16 ***
nom_estadoMARANHAO 7260.96 245.52 29.574 < 2e-16 ***
nom_estadoMATO GROSSO 2910.00 229.50 12.680 < 2e-16 ***
nom_estadoMATO GROSSO DO SUL 1191.23 230.54 5.167 0.00000023760 ***
nom_estadoMINAS GERAIS 5352.31 224.43 23.848 < 2e-16 ***
nom_estadoPARA 37370.45 241.63 154.658 < 2e-16 ***
nom_estadoPARAIBA 1419.42 263.64 5.384 0.00000007292 ***
nom_estadoPARANA 18434.25 227.45 81.047 < 2e-16 ***
nom_estadoPERNAMBUCO 4182.19 231.72 18.049 < 2e-16 ***
nom_estadoPIAUI 3292.46 245.81 13.395 < 2e-16 ***
nom_estadoRIO DE JANEIRO 8384.39 227.71 36.820 < 2e-16 ***
nom_estadoRIO GRANDE DO NORTE 4482.72 239.22 18.739 < 2e-16 ***
nom_estadoRIO GRANDE DO SUL 2277.16 225.62 10.093 < 2e-16 ***
nom_estadoRONDONIA 10986.94 242.32 45.342 < 2e-16 ***
nom_estadoRORAIMA 3207.56 881.22 3.640 0.000273 ***
nom_estadoSANTA CATARINA 7292.64 229.29 31.806 < 2e-16 ***
nom_estadoSAO PAULO 5708.48 224.14 25.468 < 2e-16 ***
nom_estadoSERGIPE 2220.50 366.03 6.066 0.00000000131 ***
nom_estadoTOCANTINS 7697.16 249.67 30.829 < 2e-16 ***
nom_estadoz - INTERNACIONAL 101395.17 276.23 367.072 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 14700 on 1548849 degrees of freedom
Multiple R-squared: 0.2722, Adjusted R-squared: 0.2722
F-statistic: 2.146e+04 on 27 and 1548849 DF, p-value: < 2.2e-16
[1] "nom_tipousina"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-37953 -7440 -2347 -685 383815
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.2537 618.3946 0.000 0.99967
nom_tipousinaEOLIELÉTRICA 4850.5892 621.6565 7.803 6.06e-15 ***
nom_tipousinaFOTOVOLTAICA 1132.9926 631.0578 1.795 0.07259 .
nom_tipousinaHIDROELÉTRICA 8963.9442 618.6351 14.490 < 2e-16 ***
nom_tipousinaNUCLEAR 37953.2025 646.1705 58.736 < 2e-16 ***
nom_tipousinaTÉRMICA 2346.4024 618.8454 3.792 0.00015 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 16790 on 1548871 degrees of freedom
Multiple R-squared: 0.05024, Adjusted R-squared: 0.05024
F-statistic: 1.639e+04 on 5 and 1548871 DF, p-value: < 2.2e-16
[1] "nom_tipocombustivel"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-37953 -7438 -3985 -274 383822
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 705.48 53.02 13.306 < 2e-16 ***
nom_tipocombustivelCarvão 5587.60 105.26 53.083 < 2e-16 ***
nom_tipocombustivelEólica 4159.56 82.88 50.189 < 2e-16 ***
nom_tipocombustivelFotovoltaica 481.09 134.58 3.575 0.000350 ***
nom_tipocombustivelGás 3583.88 67.70 52.940 < 2e-16 ***
nom_tipocombustivelHidráulica 8251.75 55.74 148.039 < 2e-16 ***
nom_tipocombustivelNuclear 37247.98 194.37 191.633 < 2e-16 ***
nom_tipocombustivelÓleo Combustível 131.23 77.78 1.687 0.091544 .
nom_tipocombustivelÓleo Diesel -258.93 75.02 -3.451 0.000558 ***
nom_tipocombustivelOutras Multi-Combustível 1445.16 221.13 6.535 0.0000000000635 ***
nom_tipocombustivelResíduos Industriais 3771.90 128.06 29.454 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 16750 on 1548659 degrees of freedom
(207 observations deleted due to missingness)
Multiple R-squared: 0.05455, Adjusted R-squared: 0.05454
F-statistic: 8936 on 10 and 1548659 DF, p-value: < 2.2e-16
[1] "preciptation"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-19262 -6951 -5622 -1179 175877
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7264.336 17.877 406.34 <2e-16 ***
preciptation 46.867 1.996 23.48 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17180 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 0.0005035, Adjusted R-squared: 0.0005026
F-statistic: 551.5 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "temperature"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-9100 -6905 -5477 -1164 175086
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3920.673 95.779 40.94 <2e-16 ***
temperature 152.444 4.099 37.19 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17180 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 0.001262, Adjusted R-squared: 0.001261
F-statistic: 1383 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "humidity"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-7743 -6975 -5652 -1204 175782
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7860.70 92.96 84.561 < 2e-16 ***
humidity -5.60 1.19 -4.705 0.00000253 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17190 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 2.022e-05, Adjusted R-squared: 1.931e-05
F-statistic: 22.14 on 1 and 1094806 DF, p-value: 0.000002533
[1] "wind_speed"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-8395 -6930 -5618 -1161 175317
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8523.43 42.49 200.6 <2e-16 ***
wind_speed -367.96 13.19 -27.9 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17180 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 0.0007105, Adjusted R-squared: 0.0007096
F-statistic: 778.4 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "co_ppb"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-21116 -6973 -5654 -1200 175783
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7259.4715 26.0830 278.322 <2e-16 ***
co_ppb 1.2137 0.1441 8.425 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17190 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 6.483e-05, Adjusted R-squared: 6.392e-05
F-statistic: 70.98 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "no2_ppb"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-8069 -6797 -5301 -996 175162
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8069.189 21.213 380.4 <2e-16 ***
no2_ppb -512.292 6.999 -73.2 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 16820 on 1003045 degrees of freedom
(545830 observations deleted due to missingness)
Multiple R-squared: 0.005313, Adjusted R-squared: 0.005312
F-statistic: 5358 on 1 and 1003045 DF, p-value: < 2.2e-16
[1] "o3_ppb"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-9553 -6891 -5466 -1140 174711
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9553.073 47.523 201.0 <2e-16 ***
o3_ppb -105.907 2.225 -47.6 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17170 on 1094806 degrees of freedom
(454069 observations deleted due to missingness)
Multiple R-squared: 0.002065, Adjusted R-squared: 0.002064
F-statistic: 2266 on 1 and 1094806 DF, p-value: < 2.2e-16
[1] "pm25_ugm3"
Call:
lm(formula = formula, data = df)
Residuals:
Min 1Q Median 3Q Max
-43278 -6940 -5589 -1179 175784
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7109.5911 18.9254 375.66 <2e-16 ***
pm25_ugm3 23.0642 0.7203 32.02 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 17170 on 1082781 degrees of freedom
(466094 observations deleted due to missingness)
Multiple R-squared: 0.0009461, Adjusted R-squared: 0.0009452
F-statistic: 1025 on 1 and 1082781 DF, p-value: < 2.2e-16
modelo linear multivariado
modelo por tipo de usina
modelo de penalidade
library(glmnet)
# Ajustar um modelo de regressão ridge (alpha = 0) ou lasso (alpha = 1) com glmnet
#x<-subset_df %>% select(,Date , preciptation , temperature , humidity , wind_speed , co_ppb , no2_ppb , o3_ppb , pm25_ugm3,cod_modalidadeoperacao , nom_subsistema , nom_estado , nom_tipousina , nom_tipocombustivel) %>% as.matrix()
modelo_penalizado <- glmnet(x, subset_df$val_geracao, alpha = 0)
# Coeficientes do modelo não penalizado (Regressão Linear)
coeficientes_nao_penalizados <- coef(n)
# Coeficientes do modelo penalizado (Regressão Ridge ou Lasso)
coeficientes_penalizados <- coef(modelo_penalizado)
print(coeficientes_penalizados)
# Selecionar apenas as variáveis numéricas relevantes para o PCA
data_for_pca <- df´´[,7:16] %>% na.omit()
Error: unexpected input in "data_for_pca <- df´"
library(factoextra)
library(FactoMineR)


pca_result2$eig
eigenvalue percentage of variance cumulative percentage of variance
comp 1 3.11417223 31.1417223 31.14172
comp 2 1.73448227 17.3448227 48.48654
comp 3 1.18468509 11.8468509 60.33340
comp 4 1.01108316 10.1108316 70.44423
comp 5 0.94508154 9.4508154 79.89504
comp 6 0.72615665 7.2615665 87.15661
comp 7 0.64244777 6.4244777 93.58109
comp 8 0.47017946 4.7017946 98.28288
comp 9 0.09698142 0.9698142 99.25270
comp 10 0.07473041 0.7473041 100.00000
pca_result2$call$centre
[1] 3.245838e-14 -5.644361e-16 1.112571e-14 1.203773e-15 -7.553955e-16 -1.800661e-14 2.204141e-15 1.065543e-15
[9] -1.046605e-14 -3.113405e-14
options(scipen = 9)
pca_result2$var$contrib
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
preciptation 0.33570051 14.77439845 1.977472 32.4149955 19.0418272
temperature 0.00715783 6.70824396 34.732898 1.0588626 26.3239537
humidity 0.85974240 32.04779814 5.862930 1.7087800 0.2447823
wind_speed 0.93741864 16.96662224 18.841506 18.1503456 2.4859583
co_ppb 22.95036247 0.07958316 4.694254 1.8644901 1.6063753
no2_ppb 26.38160434 0.72372272 1.895669 0.9155119 0.7291454
o3_ppb 2.21921996 27.84300927 10.515181 4.1749070 0.2300643
pm25_ugm3 25.54276466 0.29480425 1.381312 2.4549985 1.4972474
so2_ugm3 20.69374250 0.48744757 6.028877 0.2797480 1.1663384
val_geracao 0.07228668 0.07437025 14.069902 36.9773609 46.6743078
LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gR2VyYcOnw6NvIEFuYWxpc2UgRXhwbG9yYXTDs3JpYSINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KZWRpdG9yX29wdGlvbnM6DQogIG1hcmtkb3duOg0KICAgIHdyYXA6IDgwDQotLS0NCg0KIyMgDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpkZjwtcmVhZFJEUygiRW5lcmdpYV9hbWJpZW50YWxfZGnDoXJpby5yZHMiKQ0KaGVhZChkZikNCg0KYGBgDQoNCmBgYHtyfQ0KI2Ftb3N0cmFnZW0NCnNsaWNlX3NhbXBsZShkZiwgcHJvcCA9IDAuMjUpLT5hDQoNCmBgYA0KDQojIyBFc3RhdGlzdGljYXMgRGVzY3JpdGl2YXMNCg0KYGBge3J9DQpsaWJyYXJ5KHN0YXJnYXplcikNCnN1bW1hcnkoZGYpDQpgYGANCg0KIyMgdmlzdWFsaXphw6fDo28NCg0KYGBge3J9DQojdmlzdWFsaXphw6fDo28NCmxpYnJhcnkodGlkeXZlcnNlKQ0KZGYgJT4lIGdncGxvdChhZXModGVtcGVyYXR1cmUsdmFsX2dlcmFjYW8pKSArZ2VvbV9zbW9vdGgoKStmYWNldF93cmFwKH5ub21fdGlwb2NvbWJ1c3RpdmVsLHNjYWxlPSJmcmVlIikNCmRmICU+JSBnZ3Bsb3QoYWVzKERhdGUsdmFsX2dlcmFjYW8pKSArZ2VvbV9zbW9vdGgoKStmYWNldF93cmFwKH5ub21fdGlwb2NvbWJ1c3RpdmVsLHNjYWxlPSJmcmVlIikNCmRmICU+JSBnZ3Bsb3QoYWVzKHByZWNpcHRhdGlvbix2YWxfZ2VyYWNhbykpICtnZW9tX3Ntb290aCgpK2ZhY2V0X3dyYXAofm5vbV90aXBvY29tYnVzdGl2ZWwsc2NhbGU9ImZyZWUiKQ0KZGYgJT4lIGdncGxvdChhZXMocG0yNV91Z20zLHZhbF9nZXJhY2FvKSkgK2dlb21fc21vb3RoKCkrZmFjZXRfd3JhcCh+bm9tX3RpcG9jb21idXN0aXZlbCxzY2FsZT0iZnJlZSIpDQpkZiAlPiUgZ2dwbG90KGFlcyh3aW5kX3NwZWVkLHZhbF9nZXJhY2FvKSkgK2dlb21fc21vb3RoKCkrZmFjZXRfd3JhcCh+bm9tX3RpcG9jb21idXN0aXZlbCxzY2FsZT0iZnJlZSIpDQoNCmBgYA0KDQojIG1vZGVsbyBsaW5lYXIgc2ltcGxlcw0KDQpgYGB7cn0NCmZvciggaSBpbiAxOjE0KXsNCiAgcHJpbnQobmFtZXMoZGYpW2ldKQ0KICBmb3JtdWxhIDwtIGFzLmZvcm11bGEocGFzdGUoInZhbF9nZXJhY2FvIiwgIn4iLCBuYW1lcyhkZilbaV0pKQ0KICBtPC1sbShmb3JtdWxhLGRmKQ0KICBwcmludChzdW1tYXJ5KG0pKQ0KfQ0KDQpgYGANCg0KIyBtb2RlbG8gbGluZWFyIG11bHRpdmFyaWFkbw0KDQpgYGB7cn0NCg0KI2Zvcm11bGE8LSJ2YWxfZ2VyYWNhb34iDQojZm9yKCBpIGluIDE6MTQpew0KIyAgcHJpbnQobmFtZXMoZGYpW2ldKQ0KIyAgZm9ybXVsYSA8LSBwYXN0ZShmb3JtdWxhLCIrIixuYW1lcyhkZilbaV0pDQojIA0KI30NCm08LWxtKHZhbF9nZXJhY2FvfiBEYXRlICsgIHByZWNpcHRhdGlvbiArIHRlbXBlcmF0dXJlICsgaHVtaWRpdHkgKyB3aW5kX3NwZWVkICsgY29fcHBiICsgbm8yX3BwYiArIG8zX3BwYiArIHBtMjVfdWdtMytjb2RfbW9kYWxpZGFkZW9wZXJhY2FvICsgbm9tX3N1YnNpc3RlbWEgKyBub21fZXN0YWRvICsgbm9tX3RpcG91c2luYSArIG5vbV90aXBvY29tYnVzdGl2ZWwgLGRmKQ0Kc3VtbWFyeShtKQ0KYGBgDQoNCiMjIG1vZGVsbyBwb3IgdGlwbyBkZSB1c2luYQ0KDQpgYGB7cn0NCmE8LXVuaXF1ZShkZiRub21fdGlwb3VzaW5hKQ0KDQpmb3IgKGkgaW4gYSkgew0KICBwcmludChpKQ0KICBzdWJzZXRfZGYgPC0gc3Vic2V0KGRmLCBub21fdGlwb3VzaW5hID09IGkpDQoNCiBtPC1sbSh2YWxfZ2VyYWNhb34gRGF0ZSArICBwcmVjaXB0YXRpb24gKyB0ZW1wZXJhdHVyZSArIGh1bWlkaXR5ICsgd2luZF9zcGVlZCArIGNvX3BwYiArIG5vMl9wcGIgKyBvM19wcGIgKyBwbTI1X3VnbTMgKyBub21fc3Vic2lzdGVtYSArIG5vbV9lc3RhZG8gLHN1YnNldF9kZikNCiBwcmludChzdW1tYXJ5KG0pKQ0KfQ0KI208LWxtKHZhbF9nZXJhY2FvfiBEYXRlICsgIHByZWNpcHRhdGlvbiArIHRlbXBlcmF0dXJlICsgaHVtaWRpdHkgKyB3aW5kX3NwZWVkICsgY29fcHBiICsgbm8yX3BwYiArIG8zX3BwYiArIHBtMjVfdWdtMytjb2RfbW9kYWxpZGFkZW9wZXJhY2FvICsgbm9tX3N1YnNpc3RlbWEgKyBub21fZXN0YWRvICsgbm9tX3RpcG91c2luYSArIG5vbV90aXBvY29tYnVzdGl2ZWwgLGRmKQ0KI3N1bW1hcnkobSkNCmBgYA0KDQpgYGB7cn0NCiNhDQogIHN1YnNldF9kZiA8LSBzdWJzZXQoZGYsIG5vbV90aXBvdXNpbmEgPT0gIk5VQ0xFQVIiKQ0KI3N1bW1hcnkoc3Vic2V0X2RmKQ0KIG08LWxtKHZhbF9nZXJhY2FvfiBEYXRlICsgIHByZWNpcHRhdGlvbiArIHRlbXBlcmF0dXJlICsgaHVtaWRpdHkgKyB3aW5kX3NwZWVkICsgY29fcHBiICsgbm8yX3BwYiArIG8zX3BwYiArIHBtMjVfdWdtMyAsc3Vic2V0X2RmKQ0KIHByaW50KHN1bW1hcnkobSkpDQpgYGANCg0KYGBge3J9DQphDQogIHN1YnNldF9kZiA8LSBzdWJzZXQoZGYsIG5vbV90aXBvdXNpbmEgPT0gIkJPTUJFQU1FTlRPIikNCnN1bW1hcnkoc3Vic2V0X2RmKQ0KIG08LWxtKHZhbF9nZXJhY2FvIH4gRGF0ZSArIHByZWNpcHRhdGlvbiArIHRlbXBlcmF0dXJlICsgDQogICAgaHVtaWRpdHkgKyB3aW5kX3NwZWVkICsgY29fcHBiICsgbm8yX3BwYiArIG8zX3BwYiArIHBtMjVfdWdtMyAsc3Vic2V0X2RmKQ0KIHByaW50KHN1bW1hcnkobSkpDQpgYGANCg0KYGBge3J9DQogIHN1YnNldF9kZiA8LSBzdWJzZXQoZGYsIG5vbV90aXBvdXNpbmEgPT0gIkZPVE9WT0xUQUlDQSIpICU+JSBkcm9wX25hKCkNCiNzdW1tYXJ5KHN1YnNldF9kZikNCiBtPC1sbSh2YWxfZ2VyYWNhbyB+IERhdGUgKyBwcmVjaXB0YXRpb24gKyB0ZW1wZXJhdHVyZSArIA0KICAgIGh1bWlkaXR5ICsgd2luZF9zcGVlZCArIGNvX3BwYiArIG5vMl9wcGIgKyBvM19wcGIgKyBwbTI1X3VnbTMgLHN1YnNldF9kZikNCiBwcmludChzdW1tYXJ5KG0pKQ0KYGBgDQoNCmBgYHtyfQ0KDQoNCiAgc3Vic2V0X2RmIDwtIHN1YnNldChkZiwgbm9tX3RpcG91c2luYSA9PSAiRU9MSUVMw4lUUklDQSIpDQojc3VtbWFyeShzdWJzZXRfZGYpDQogbTwtbG0odmFsX2dlcmFjYW8gfiBEYXRlICsgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyANCiAgICBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zICsgDQogICAgbm9tX3N1YnNpc3RlbWEgKyBub21fZXN0YWRvICxzdWJzZXRfZGYpDQogcHJpbnQoc3VtbWFyeShtKSkNCmBgYA0KDQojIG1vZGVsbyBkZSBwZW5hbGlkYWRlDQoNCmBgYHtyfQ0KIyBBanVzdGFyIHVtIG1vZGVsbyBkZSByZWdyZXNzw6NvIGxpbmVhciBzaW1wbGVzDQpkZiAlPiUgIGRyb3BfbmEoKSAtPnN1YnNldF9kZg0KbTwtbG0odmFsX2dlcmFjYW9+IERhdGUgKyAgcHJlY2lwdGF0aW9uICsgdGVtcGVyYXR1cmUgKyBodW1pZGl0eSArIHdpbmRfc3BlZWQgKyBjb19wcGIgKyBubzJfcHBiICsgbzNfcHBiICsgcG0yNV91Z20zK2NvZF9tb2RhbGlkYWRlb3BlcmFjYW8gKyBub21fc3Vic2lzdGVtYSArIG5vbV9lc3RhZG8gKyBub21fdGlwb3VzaW5hICsgbm9tX3RpcG9jb21idXN0aXZlbCAsc3Vic2V0X2RmKQ0Kc3VtbWFyeShtKQ0KIyhtb2RlbG9fbmFvX3BlbmFsaXphZG8pDQoNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkoZ2xtbmV0KQ0KDQpgYGANCg0KYGBge3J9DQojIEFqdXN0YXIgdW0gbW9kZWxvIGRlIHJlZ3Jlc3PDo28gcmlkZ2UgKGFscGhhID0gMCkgb3UgbGFzc28gKGFscGhhID0gMSkgY29tIGdsbW5ldA0KI3g8LXN1YnNldF9kZiAlPiUgc2VsZWN0KCxEYXRlICwgIHByZWNpcHRhdGlvbiAsIHRlbXBlcmF0dXJlICwgaHVtaWRpdHkgLCB3aW5kX3NwZWVkICwgY29fcHBiICwgbm8yX3BwYiAsIG8zX3BwYiAsIHBtMjVfdWdtMyxjb2RfbW9kYWxpZGFkZW9wZXJhY2FvICwgbm9tX3N1YnNpc3RlbWEgLCBub21fZXN0YWRvICwgbm9tX3RpcG91c2luYSAsIG5vbV90aXBvY29tYnVzdGl2ZWwpICU+JSBhcy5tYXRyaXgoKQ0KDQptb2RlbG9fcGVuYWxpemFkbyA8LSBnbG1uZXQoeCwgc3Vic2V0X2RmJHZhbF9nZXJhY2FvLCBhbHBoYSA9IDApDQojIENvZWZpY2llbnRlcyBkbyBtb2RlbG8gbsOjbyBwZW5hbGl6YWRvIChSZWdyZXNzw6NvIExpbmVhcikNCmNvZWZpY2llbnRlc19uYW9fcGVuYWxpemFkb3MgPC0gY29lZihuKQ0KDQojIENvZWZpY2llbnRlcyBkbyBtb2RlbG8gcGVuYWxpemFkbyAoUmVncmVzc8OjbyBSaWRnZSBvdSBMYXNzbykNCmNvZWZpY2llbnRlc19wZW5hbGl6YWRvcyA8LSBjb2VmKG1vZGVsb19wZW5hbGl6YWRvKQ0KcHJpbnQoY29lZmljaWVudGVzX3BlbmFsaXphZG9zKQ0KYGBgDQoNCmBgYHtyfQ0KI1BDQQ0KIyBTdXBvbmRvIHF1ZSB2b2PDqiB0ZW5oYSB1bSBjb25qdW50byBkZSBkYWRvcyBBbWJfT3JjDQoNCiMgU2VsZWNpb25hciBhcGVuYXMgYXMgdmFyacOhdmVpcyBudW3DqXJpY2FzIHJlbGV2YW50ZXMgcGFyYSBvIFBDQQ0KZGF0YV9mb3JfcGNhIDwtIGRmWyw3OjE2XSAlPiUgbmEub21pdCgpDQoNCg0KIyBOb3JtYWxpemFyIG9zIGRhZG9zIChzZSBuZWNlc3PDoXJpbykNCm5vcm1hbGl6ZWRfZGF0YSA8LSBzY2FsZShkYXRhX2Zvcl9wY2EpDQojIFJlbW92ZXIgbGluaGFzIGNvbSB2YWxvcmVzIGluZmluaXRvcw0Kbm9ybWFsaXplZF9kYXRhIDwtIG5vcm1hbGl6ZWRfZGF0YVtpcy5maW5pdGUocm93U3Vtcyhub3JtYWxpemVkX2RhdGEpKSwgXQ0KDQojIFJlYWxpemFyIG8gUENBDQojcGNhX3Jlc3VsdCA8LSBwcmNvbXAobm9ybWFsaXplZF9kYXRhLCBzY2FsZS4gPSBUUlVFLGNlbnRlciA9IFQpDQoNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkoZmFjdG9leHRyYSkNCmxpYnJhcnkoRmFjdG9NaW5lUikNCg0KYGBgDQoNCmBgYHtyfQ0KcGNhX3Jlc3VsdDI8LVBDQShub3JtYWxpemVkX2RhdGEpDQoNCmBgYA0KDQpgYGB7cn0NCnBjYV9yZXN1bHQyJGVpZw0KcGNhX3Jlc3VsdDIkY2FsbCRjZW50cmUNCm9wdGlvbnMoc2NpcGVuID0gOSkNCnBjYV9yZXN1bHQyJHZhciRjb250cmliDQpgYGANCg==