1. Base de Dados e Pré-processamento

1.1 Carregando a base de dados

#carregando a base de dados em .csv
dados <- 
  data.table::fread("/Dados/Coorte100m/PBF_SHSM/SHARED/Dataset_SIM_Daiane_geo.csv", select = c("cod_familiar_eq", "idade", "cod_sexo_pessoa_eq", "cod_raca_cor_pessoa_eq", "escolaridade_eq", "regiao", "urban", "cod_destino_lixo_domic_fam_eq", "cod_escoa_sanitario_domic_fam_eq", "cod_abaste_agua_domic_fam_eq", "homicide", "suicide")) 
|--------------------------------------------------|
|==================================================|
dados <- dados %>% filter(idade > 10) #retirando criancas menores de 10 anos

1.2 Pre-processando a base original

#funcao para calcular a moda
moda <- function(v) {
  uniqv <- unique(v)
  uniqv[which.max(tabulate(match(v, uniqv)))]
}

#criando a variavel idade
dados <- dados %>% 
  mutate(
    idade = case_when(
      idade < 19~1,
      idade >= 20 & idade < 40~2,
      idade >= 40 & idade < 60~3,
      idade >= 60~4)
  )


#criando a variavel homem_familia
dados <- dados %>% 
  mutate(
    homem_familia = case_when(
      cod_sexo_pessoa_eq == 1~1,
      cod_sexo_pessoa_eq == 2~0)
  )


#criando a variavel escolaridade
dados <- dados %>% 
  mutate(
    escolaridade = case_when(
      escolaridade_eq == 0~0,
      escolaridade_eq == 1~1,
      escolaridade_eq == 2~2,
      escolaridade_eq == 3~3,
      escolaridade_eq == 4~4,
      escolaridade_eq == 5 | escolaridade_eq == 6~5)
  )


#mudando o rotulo da variavel regiao
dados <- dados %>% 
  mutate(
    regiao = case_when(
      regiao == "Nordeste"~1,
      regiao == "Norte"~2,
      regiao == "Sudeste"~3,
      regiao == "Centro-Oeste"~4,
      regiao == "Sul"~5)
  )


#criando a variavel LivingConditions

#Lixo
dados <- dados %>% 
  mutate(
    lixo = case_when(
      cod_destino_lixo_domic_fam_eq == 1 | cod_destino_lixo_domic_fam_eq == 2~1,
      TRUE~0)
  )


#Escoamento
dados <- dados %>% 
  mutate(
    escoamento = case_when(
      cod_escoa_sanitario_domic_fam_eq == 1 | cod_escoa_sanitario_domic_fam_eq == 2 | cod_escoa_sanitario_domic_fam_eq == 3~1,
      TRUE~0)
  )




#Agua
dados <- dados %>% 
  mutate(
    agua = case_when(
      cod_abaste_agua_domic_fam_eq == 1~1,
      TRUE~0)
  )


#LivingConditions
dados <- dados %>% 
  mutate(
    living_conditions = (lixo + escoamento + agua)
  )

1.3 Realizando a mudanca de grao da base


#familias com pelo menos um suicidio
qtd_suic_familia <- dados %>% 
  group_by(cod_familiar_eq) %>% #agrupando por familias
  summarise(
    qtd_pesoas_familia = n(),#quantidade de pessoas na familia
    qtd_suic_familia = sum(suicide), #quantidade de suicidios na familia
    qtd_homic_familia = sum(homicide), #quantidade de homicidio na familia
    homem_familia = (sum(homem_familia)/n())*100, #percentual de homens na familia
    raca = moda(cod_raca_cor_pessoa_eq), #raca predominante(moda) na familia
    regiao = moda(regiao), #regiao predominante (moda) da familia
    urban = moda(urban), #predominancia de membros da familia em area urbana
    idade = moda(idade), #predominancia (moda) da faixa etaria da familia
    escolaridade = moda(escolaridade), #predominancia (moda) da faixa etaria da familia
    living_conditions = moda(living_conditions)#condicao de vida predominante(moda) na familia
    ) %>% 
  filter(qtd_pesoas_familia > 1) #familias com mais de uma pessoa


#categorizar a quantidade de pessoas na familia
qtd_suic_familia <- qtd_suic_familia %>% 
  mutate( 
    pessoas_na_familia = case_when(
      qtd_pesoas_familia == 2~"1",
      qtd_pesoas_familia == 3~"2",
      qtd_pesoas_familia == 4~"2",
      qtd_pesoas_familia == 5~"3",
      qtd_pesoas_familia == 6~"3",
      qtd_pesoas_familia >7~"4")
  )
  


#criando a variavel desfecho
dados_familia <- qtd_suic_familia %>% 
  mutate( #se teve pelo menos um suicidio (1) e caso contrrario (0)
    desfecho = case_when(qtd_suic_familia >= 1~1,TRUE~0)
  )

1.4 Salvando a base agregada no grao familia

#salvando a base de dados em .csv
rm(dados)
write.csv(dados_familia,"/Dados/Coorte100m/PBF_SHSM/SHARED/Dataset_SIM_Daiane_geo_Agregada.csv")
rm(dados_familia)
rm(qtd_suic_familia)
gc()
            used  (Mb) gc trigger    (Mb)   max used    (Mb)
Ncells   2683512 143.4  626419900 33454.5  645755748 34487.1
Vcells 106622989 813.5 3104563892 23686.0 3874748559 29562.0

2. Análise Exploratória dos Dados

2.1 Carregando a base de dados agregada

dados <- 
  data.table::fread("/Dados/Coorte100m/PBF_SHSM/SHARED/Dataset_SIM_Daiane_geo_Agregada.csv") 

#dados <- dados %>% sample_n(10000)

2.2 Tabela de contingência vs Variável binária suicídio familiar

dados %>% 
  select( #aqui ta selecionando as variáveis na tabela
    qtd_homic_familia,
    pessoas_na_familia,
    homem_familia,
    raca,
    regiao,
    urban,
    idade,
    escolaridade,
    living_conditions,
    desfecho) %>% 
  tbl_summary(by = desfecho,
              statistic = list(all_continuous() ~ "{mean} ({sd})")) %>% 
  add_p() %>% #adiciona os p-valores dos testes estatísticos 
   bold_labels() 
There was an error in 'add_p()/add_difference()' for variable 'qtd_homic_familia', p-value omitted:
Error in stats::fisher.test(c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, : FEXACT error 40.
Out of workspace.
Characteristic 0, N = 21,598,4821 1, N = 32,7271 p-value2
qtd_homic_familia
0 21,386,133 (99%) 32,008 (98%)
1 206,696 (1.0%) 699 (2.1%)
2 5,392 (<0.1%) 19 (<0.1%)
3 245 (<0.1%) 1 (<0.1%)
4 15 (<0.1%) 0 (0%)
5 1 (<0.1%) 0 (0%)
pessoas_na_familia <0.001
1 10,088,330 (47%) 8,787 (28%)
2 8,659,781 (41%) 14,924 (47%)
3 2,333,798 (11%) 6,902 (22%)
4 221,379 (1.0%) 952 (3.0%)
Unknown 295,194 1,162
homem_familia 46 (22) 52 (19) <0.001
raca <0.001
1 6,573,302 (33%) 11,776 (39%)
2 1,502,227 (7.6%) 2,172 (7.3%)
3 67,582 (0.3%) 80 (0.3%)
4 11,447,985 (58%) 15,437 (52%)
5 95,640 (0.5%) 435 (1.5%)
Unknown 1,911,746 2,827
regiao <0.001
1 8,618,383 (40%) 12,122 (37%)
2 2,008,379 (9.3%) 2,503 (7.7%)
3 6,858,034 (32%) 9,110 (28%)
4 1,474,313 (6.8%) 2,315 (7.1%)
5 2,616,703 (12%) 6,655 (20%)
Unknown 22,670 22
urban <0.001
0 5,254,968 (26%) 9,500 (30%)
1 15,333,490 (74%) 22,013 (70%)
Unknown 1,010,024 1,214
idade <0.001
1 6,138,318 (29%) 11,405 (35%)
2 9,704,713 (46%) 13,632 (42%)
3 4,119,118 (19%) 5,858 (18%)
4 1,353,356 (6.3%) 1,424 (4.4%)
Unknown 282,977 408
escolaridade <0.001
0 1,996,971 (11%) 3,363 (12%)
1 35,890 (0.2%) 41 (0.2%)
2 122,090 (0.7%) 169 (0.6%)
3 7,129,604 (40%) 12,132 (45%)
4 5,958,677 (33%) 9,393 (35%)
5 2,780,214 (15%) 2,101 (7.7%)
Unknown 3,575,036 5,528
living_conditions <0.001
0 2,031,060 (9.4%) 2,952 (9.0%)
1 1,860,732 (8.6%) 3,263 (10.0%)
2 4,531,631 (21%) 7,410 (23%)
3 13,175,059 (61%) 19,102 (58%)
1 n (%); Mean (SD)
2 Pearson's Chi-squared test; Wilcoxon rank sum test

3. Regressao Logistica

3.1 Construcao do modelo


#modelagem da regressao logistica
m1 <- glm(desfecho ~ qtd_homic_familia + pessoas_na_familia + homem_familia + raca + regiao + urban + idade + escolaridade + living_conditions, data = dados, family = binomial(link = "logit"))

summary(m1)

Call:
glm(formula = desfecho ~ qtd_homic_familia + pessoas_na_familia + 
    homem_familia + raca + regiao + urban + idade + escolaridade + 
    living_conditions, family = binomial(link = "logit"), data = dados)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.2991  -0.0611  -0.0482  -0.0397   4.1325  

Coefficients:
                      Estimate Std. Error  z value Pr(>|z|)    
(Intercept)         -7.2878300  0.0416999 -174.768  < 2e-16 ***
qtd_homic_familia    0.4582886  0.0405174   11.311  < 2e-16 ***
pessoas_na_familia2  0.6313746  0.0157501   40.087  < 2e-16 ***
pessoas_na_familia3  1.1551285  0.0197516   58.483  < 2e-16 ***
pessoas_na_familia4  1.5168903  0.0399293   37.989  < 2e-16 ***
homem_familia        0.0113679  0.0003264   34.827  < 2e-16 ***
raca2               -0.1395011  0.0262247   -5.319 1.04e-07 ***
raca3               -0.2563168  0.1247354   -2.055  0.03989 *  
raca4               -0.2234810  0.0155999  -14.326  < 2e-16 ***
raca5                0.9052960  0.0534195   16.947  < 2e-16 ***
regiao2             -0.1400343  0.0255728   -5.476 4.35e-08 ***
regiao3              0.0031151  0.0172758    0.180  0.85690    
regiao4              0.2060884  0.0261628    7.877 3.35e-15 ***
regiao5              0.5632645  0.0205074   27.466  < 2e-16 ***
urban1              -0.0513244  0.0178476   -2.876  0.00403 ** 
idade2               0.0802788  0.0157975    5.082 3.74e-07 ***
idade3              -0.0440783  0.0193386   -2.279  0.02265 *  
idade4              -0.2742231  0.0322476   -8.504  < 2e-16 ***
escolaridade1       -0.2646262  0.1593179   -1.661  0.09671 .  
escolaridade2       -0.1095082  0.0821363   -1.333  0.18245    
escolaridade3       -0.1589606  0.0207841   -7.648 2.04e-14 ***
escolaridade4       -0.2661941  0.0221819  -12.001  < 2e-16 ***
escolaridade5       -0.7789799  0.0300139  -25.954  < 2e-16 ***
living_conditions1   0.0264305  0.0337192    0.784  0.43313    
living_conditions2   0.0067576  0.0312055    0.217  0.82856    
living_conditions3  -0.0129738  0.0322286   -0.403  0.68728    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 374966  on 16913585  degrees of freedom
Residual deviance: 364878  on 16913560  degrees of freedom
  (4717623 observations deleted due to missingness)
AIC: 364930

Number of Fisher Scoring iterations: 10

3.2 Tabela de significancia

#construindo tabela
tab_model(m1, file="tabela-suicidio.html")
Profiled confidence intervals may take longer time to compute. Use 'ci_method="wald"' for
  faster computation of CIs.
htmltools::includeHTML("tabela-suicidio.html")
  desfecho
Predictors Odds Ratios CI p
(Intercept) 0.00 0.00 – 0.00 <0.001
qtd homic familia 1.58 1.46 – 1.71 <0.001
pessoas na familia [2] 1.88 1.82 – 1.94 <0.001
pessoas na familia [3] 3.17 3.05 – 3.30 <0.001
pessoas na familia [4] 4.56 4.21 – 4.93 <0.001
homem familia 1.01 1.01 – 1.01 <0.001
raca [2] 0.87 0.83 – 0.92 <0.001
raca [3] 0.77 0.60 – 0.98 0.040
raca [4] 0.80 0.78 – 0.82 <0.001
raca [5] 2.47 2.22 – 2.74 <0.001
regiao [2] 0.87 0.83 – 0.91 <0.001
regiao [3] 1.00 0.97 – 1.04 0.857
regiao [4] 1.23 1.17 – 1.29 <0.001
regiao [5] 1.76 1.69 – 1.83 <0.001
urban [1] 0.95 0.92 – 0.98 0.004
idade [2] 1.08 1.05 – 1.12 <0.001
idade [3] 0.96 0.92 – 0.99 0.023
idade [4] 0.76 0.71 – 0.81 <0.001
escolaridade [1] 0.77 0.55 – 1.03 0.097
escolaridade [2] 0.90 0.76 – 1.05 0.182
escolaridade [3] 0.85 0.82 – 0.89 <0.001
escolaridade [4] 0.77 0.73 – 0.80 <0.001
escolaridade [5] 0.46 0.43 – 0.49 <0.001
living conditions [1] 1.03 0.96 – 1.10 0.433
living conditions [2] 1.01 0.95 – 1.07 0.829
living conditions [3] 0.99 0.93 – 1.05 0.687
Observations 16913586
R2 Tjur 0.001
NA

3.3 Plotando o grafico com Odds Ratio

plot_model(m1, colors = "bw", show.values = TRUE, value.offset = .5, title = "Suicidio na familia")

LS0tCnRpdGxlOiAiRmF0b3JlcyBkZSBSaXNjbyBTb2NpYWlzIHF1ZSBpbXBhY3RhbSBlbSBTdWljw61kaW8gRmFtaWxpYXIiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgd29yZF9kb2N1bWVudDogZGVmYXVsdAotLS0KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiNhcXVpIGZpY2EgdHVkbyBxdWUgZGV2ZSBzZXIgaW5pY2lhbGl6YWRvIGF1dG9tYXRpY2FtZW50ZSBubyBpbsOtY2lvIGRvIHByb2pldG8KbGlicmFyeSh0aWR5dmVyc2UpICNtYW5pcHVsYXIgZGFkb3MKbGlicmFyeShndHN1bW1hcnkpICNnZXJhciB0YWJlbGFzIGRlIGNvbnRpbmdlbmNpYSBjb20gcC12YWxvcgpsaWJyYXJ5KGZvcm1hdHRhYmxlKSAjZ2VyYXIgdGFiZWxhcwpsaWJyYXJ5KERUKSAjZ2VyYXIgdGFiZWxhcwpsaWJyYXJ5KHJtYXJrZG93bikgI2VzdGlsbyBkbyByZWxhdMOzcmlvCmxpYnJhcnkoZGF0YS50YWJsZSkgI2NhcnJlZ2FyIGdyYW5kZXMgYmFzZXMgZGUgZGFkb3MKbGlicmFyeShzalBsb3QpICNwbG90YSBjb2VmaWNpZW50ZXMgZGUgbW9kZWxvcyBkZSByZWdyZXNzw6NvCmxpYnJhcnkoc2psYWJlbGxlZCkgI3BhcmEgbW9kZWxhciBhIHJlZ3Jlc3NhbyBsb2dpc3RpY2EKbGlicmFyeShzam1pc2MpICNwYXJhIG1vZGVsYXIgYSByZWdyZXNzYW8gbG9naXN0aWNhCgprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKIyAxLiBCYXNlIGRlIERhZG9zIGUgUHLDqS1wcm9jZXNzYW1lbnRvCgojIyAxLjEgQ2FycmVnYW5kbyBhIGJhc2UgZGUgZGFkb3MKYGBge3IgaW1wb3J0LWRhdGFzZXR9CiNjYXJyZWdhbmRvIGEgYmFzZSBkZSBkYWRvcyBlbSAuY3N2CmRhZG9zIDwtIAogIGRhdGEudGFibGU6OmZyZWFkKCIvRGFkb3MvQ29vcnRlMTAwbS9QQkZfU0hTTS9TSEFSRUQvRGF0YXNldF9TSU1fRGFpYW5lX2dlby5jc3YiLCBzZWxlY3QgPSBjKCJjb2RfZmFtaWxpYXJfZXEiLCAiaWRhZGUiLCAiY29kX3NleG9fcGVzc29hX2VxIiwgImNvZF9yYWNhX2Nvcl9wZXNzb2FfZXEiLCAiZXNjb2xhcmlkYWRlX2VxIiwgInJlZ2lhbyIsICJ1cmJhbiIsICJjb2RfZGVzdGlub19saXhvX2RvbWljX2ZhbV9lcSIsICJjb2RfZXNjb2Ffc2FuaXRhcmlvX2RvbWljX2ZhbV9lcSIsICJjb2RfYWJhc3RlX2FndWFfZG9taWNfZmFtX2VxIiwgImhvbWljaWRlIiwgInN1aWNpZGUiKSkgCgoKZGFkb3MgPC0gZGFkb3MgJT4lIGZpbHRlcihpZGFkZSA+IDEwKSAjcmV0aXJhbmRvIGNyaWFuY2FzIG1lbm9yZXMgZGUgMTAgYW5vcwoKCmBgYAoKIyMgMS4yIFByZS1wcm9jZXNzYW5kbyBhIGJhc2Ugb3JpZ2luYWwgCmBgYHtyfQojZnVuY2FvIHBhcmEgY2FsY3VsYXIgYSBtb2RhCm1vZGEgPC0gZnVuY3Rpb24odikgewogIHVuaXF2IDwtIHVuaXF1ZSh2KQogIHVuaXF2W3doaWNoLm1heCh0YWJ1bGF0ZShtYXRjaCh2LCB1bmlxdikpKV0KfQoKI2NyaWFuZG8gYSB2YXJpYXZlbCBpZGFkZQpkYWRvcyA8LSBkYWRvcyAlPiUgCiAgbXV0YXRlKAogICAgaWRhZGUgPSBjYXNlX3doZW4oCiAgICAgIGlkYWRlIDwgMTl+MSwKICAgICAgaWRhZGUgPj0gMjAgJiBpZGFkZSA8IDQwfjIsCiAgICAgIGlkYWRlID49IDQwICYgaWRhZGUgPCA2MH4zLAogICAgICBpZGFkZSA+PSA2MH40KQogICkKCgojY3JpYW5kbyBhIHZhcmlhdmVsIGhvbWVtX2ZhbWlsaWEKZGFkb3MgPC0gZGFkb3MgJT4lIAogIG11dGF0ZSgKICAgIGhvbWVtX2ZhbWlsaWEgPSBjYXNlX3doZW4oCiAgICAgIGNvZF9zZXhvX3Blc3NvYV9lcSA9PSAxfjEsCiAgICAgIGNvZF9zZXhvX3Blc3NvYV9lcSA9PSAyfjApCiAgKQoKCiNjcmlhbmRvIGEgdmFyaWF2ZWwgZXNjb2xhcmlkYWRlCmRhZG9zIDwtIGRhZG9zICU+JSAKICBtdXRhdGUoCiAgICBlc2NvbGFyaWRhZGUgPSBjYXNlX3doZW4oCiAgICAgIGVzY29sYXJpZGFkZV9lcSA9PSAwfjAsCiAgICAgIGVzY29sYXJpZGFkZV9lcSA9PSAxfjEsCiAgICAgIGVzY29sYXJpZGFkZV9lcSA9PSAyfjIsCiAgICAgIGVzY29sYXJpZGFkZV9lcSA9PSAzfjMsCiAgICAgIGVzY29sYXJpZGFkZV9lcSA9PSA0fjQsCiAgICAgIGVzY29sYXJpZGFkZV9lcSA9PSA1IHwgZXNjb2xhcmlkYWRlX2VxID09IDZ+NSkKICApCgoKI211ZGFuZG8gbyByb3R1bG8gZGEgdmFyaWF2ZWwgcmVnaWFvCmRhZG9zIDwtIGRhZG9zICU+JSAKICBtdXRhdGUoCiAgICByZWdpYW8gPSBjYXNlX3doZW4oCiAgICAgIHJlZ2lhbyA9PSAiTm9yZGVzdGUifjEsCiAgICAgIHJlZ2lhbyA9PSAiTm9ydGUifjIsCiAgICAgIHJlZ2lhbyA9PSAiU3VkZXN0ZSJ+MywKICAgICAgcmVnaWFvID09ICJDZW50cm8tT2VzdGUifjQsCiAgICAgIHJlZ2lhbyA9PSAiU3VsIn41KQogICkKCgojY3JpYW5kbyBhIHZhcmlhdmVsIExpdmluZ0NvbmRpdGlvbnMKCiNMaXhvCmRhZG9zIDwtIGRhZG9zICU+JSAKICBtdXRhdGUoCiAgICBsaXhvID0gY2FzZV93aGVuKAogICAgICBjb2RfZGVzdGlub19saXhvX2RvbWljX2ZhbV9lcSA9PSAxIHwgY29kX2Rlc3Rpbm9fbGl4b19kb21pY19mYW1fZXEgPT0gMn4xLAogICAgICBUUlVFfjApCiAgKQoKCiNFc2NvYW1lbnRvCmRhZG9zIDwtIGRhZG9zICU+JSAKICBtdXRhdGUoCiAgICBlc2NvYW1lbnRvID0gY2FzZV93aGVuKAogICAgICBjb2RfZXNjb2Ffc2FuaXRhcmlvX2RvbWljX2ZhbV9lcSA9PSAxIHwgY29kX2VzY29hX3Nhbml0YXJpb19kb21pY19mYW1fZXEgPT0gMiB8IGNvZF9lc2NvYV9zYW5pdGFyaW9fZG9taWNfZmFtX2VxID09IDN+MSwKICAgICAgVFJVRX4wKQogICkKCgoKCiNBZ3VhCmRhZG9zIDwtIGRhZG9zICU+JSAKICBtdXRhdGUoCiAgICBhZ3VhID0gY2FzZV93aGVuKAogICAgICBjb2RfYWJhc3RlX2FndWFfZG9taWNfZmFtX2VxID09IDF+MSwKICAgICAgVFJVRX4wKQogICkKCgojTGl2aW5nQ29uZGl0aW9ucwpkYWRvcyA8LSBkYWRvcyAlPiUgCiAgbXV0YXRlKAogICAgbGl2aW5nX2NvbmRpdGlvbnMgPSAobGl4byArIGVzY29hbWVudG8gKyBhZ3VhKQogICkKCgpgYGAKCiMjIDEuMyBSZWFsaXphbmRvIGEgbXVkYW5jYSBkZSBncmFvIGRhIGJhc2UKYGBge3J9CgojZmFtaWxpYXMgY29tIHBlbG8gbWVub3MgdW0gc3VpY2lkaW8KcXRkX3N1aWNfZmFtaWxpYSA8LSBkYWRvcyAlPiUgCiAgZ3JvdXBfYnkoY29kX2ZhbWlsaWFyX2VxKSAlPiUgI2FncnVwYW5kbyBwb3IgZmFtaWxpYXMKICBzdW1tYXJpc2UoCiAgICBxdGRfcGVzb2FzX2ZhbWlsaWEgPSBuKCksI3F1YW50aWRhZGUgZGUgcGVzc29hcyBuYSBmYW1pbGlhCiAgICBxdGRfc3VpY19mYW1pbGlhID0gc3VtKHN1aWNpZGUpLCAjcXVhbnRpZGFkZSBkZSBzdWljaWRpb3MgbmEgZmFtaWxpYQogICAgcXRkX2hvbWljX2ZhbWlsaWEgPSBzdW0oaG9taWNpZGUpLCAjcXVhbnRpZGFkZSBkZSBob21pY2lkaW8gbmEgZmFtaWxpYQogICAgaG9tZW1fZmFtaWxpYSA9IChzdW0oaG9tZW1fZmFtaWxpYSkvbigpKSoxMDAsICNwZXJjZW50dWFsIGRlIGhvbWVucyBuYSBmYW1pbGlhCiAgICByYWNhID0gbW9kYShjb2RfcmFjYV9jb3JfcGVzc29hX2VxKSwgI3JhY2EgcHJlZG9taW5hbnRlKG1vZGEpIG5hIGZhbWlsaWEKICAgIHJlZ2lhbyA9IG1vZGEocmVnaWFvKSwgI3JlZ2lhbyBwcmVkb21pbmFudGUgKG1vZGEpIGRhIGZhbWlsaWEKICAgIHVyYmFuID0gbW9kYSh1cmJhbiksICNwcmVkb21pbmFuY2lhIGRlIG1lbWJyb3MgZGEgZmFtaWxpYSBlbSBhcmVhIHVyYmFuYQogICAgaWRhZGUgPSBtb2RhKGlkYWRlKSwgI3ByZWRvbWluYW5jaWEgKG1vZGEpIGRhIGZhaXhhIGV0YXJpYSBkYSBmYW1pbGlhCiAgICBlc2NvbGFyaWRhZGUgPSBtb2RhKGVzY29sYXJpZGFkZSksICNwcmVkb21pbmFuY2lhIChtb2RhKSBkYSBmYWl4YSBldGFyaWEgZGEgZmFtaWxpYQogICAgbGl2aW5nX2NvbmRpdGlvbnMgPSBtb2RhKGxpdmluZ19jb25kaXRpb25zKSNjb25kaWNhbyBkZSB2aWRhIHByZWRvbWluYW50ZShtb2RhKSBuYSBmYW1pbGlhCiAgICApICU+JSAKICBmaWx0ZXIocXRkX3Blc29hc19mYW1pbGlhID4gMSkgI2ZhbWlsaWFzIGNvbSBtYWlzIGRlIHVtYSBwZXNzb2EKCgojY2F0ZWdvcml6YXIgYSBxdWFudGlkYWRlIGRlIHBlc3NvYXMgbmEgZmFtaWxpYQpxdGRfc3VpY19mYW1pbGlhIDwtIHF0ZF9zdWljX2ZhbWlsaWEgJT4lIAogIG11dGF0ZSggCiAgICBwZXNzb2FzX25hX2ZhbWlsaWEgPSBjYXNlX3doZW4oCiAgICAgIHF0ZF9wZXNvYXNfZmFtaWxpYSA9PSAyfiIxIiwKICAgICAgcXRkX3Blc29hc19mYW1pbGlhID09IDN+IjIiLAogICAgICBxdGRfcGVzb2FzX2ZhbWlsaWEgPT0gNH4iMiIsCiAgICAgIHF0ZF9wZXNvYXNfZmFtaWxpYSA9PSA1fiIzIiwKICAgICAgcXRkX3Blc29hc19mYW1pbGlhID09IDZ+IjMiLAogICAgICBxdGRfcGVzb2FzX2ZhbWlsaWEgPjd+IjQiKQogICkKICAKCgojY3JpYW5kbyBhIHZhcmlhdmVsIGRlc2ZlY2hvCmRhZG9zX2ZhbWlsaWEgPC0gcXRkX3N1aWNfZmFtaWxpYSAlPiUgCiAgbXV0YXRlKCAjc2UgdGV2ZSBwZWxvIG1lbm9zIHVtIHN1aWNpZGlvICgxKSBlIGNhc28gY29udHJyYXJpbyAoMCkKICAgIGRlc2ZlY2hvID0gY2FzZV93aGVuKHF0ZF9zdWljX2ZhbWlsaWEgPj0gMX4xLFRSVUV+MCkKICApCgoKYGBgCgojIyAxLjQgU2FsdmFuZG8gYSBiYXNlIGFncmVnYWRhIG5vIGdyYW8gZmFtaWxpYQpgYGB7cn0KI3NhbHZhbmRvIGEgYmFzZSBkZSBkYWRvcyBlbSAuY3N2CnJtKGRhZG9zKQp3cml0ZS5jc3YoZGFkb3NfZmFtaWxpYSwiL0RhZG9zL0Nvb3J0ZTEwMG0vUEJGX1NIU00vU0hBUkVEL0RhdGFzZXRfU0lNX0RhaWFuZV9nZW9fQWdyZWdhZGEuY3N2IikKcm0oZGFkb3NfZmFtaWxpYSkKcm0ocXRkX3N1aWNfZmFtaWxpYSkKZ2MoKQpgYGAKCgojIDIuIEFuw6FsaXNlIEV4cGxvcmF0w7NyaWEgZG9zIERhZG9zCgojIyMgMi4xIENhcnJlZ2FuZG8gYSBiYXNlIGRlIGRhZG9zIGFncmVnYWRhCmBgYHtyfQpkYWRvcyA8LSAKICBkYXRhLnRhYmxlOjpmcmVhZCgiL0RhZG9zL0Nvb3J0ZTEwMG0vUEJGX1NIU00vU0hBUkVEL0RhdGFzZXRfU0lNX0RhaWFuZV9nZW9fQWdyZWdhZGEuY3N2IikgCgojZGFkb3MgPC0gZGFkb3MgJT4lIHNhbXBsZV9uKDEwMDAwKQpgYGAKCgojIyAyLjIgVGFiZWxhIGRlIGNvbnRpbmfDqm5jaWEgdnMgVmFyacOhdmVsIGJpbsOhcmlhIHN1aWPDrWRpbyBmYW1pbGlhcgoKYGBge3IsIGxheW91dD0ibC1ib2R5LW91dHNldCJ9CgojdHJhbnNmb3JtYW5kbyBlbSBmYXRvcgpkYWRvcyRkZXNmZWNobyA8LSBmYWN0b3IoZGFkb3MkZGVzZmVjaG8pIApkYWRvcyRyYWNhIDwtIGZhY3RvcihkYWRvcyRyYWNhKSAKZGFkb3MkcmVnaWFvIDwtIGZhY3RvcihkYWRvcyRyZWdpYW8pIApkYWRvcyR1cmJhbiA8LSBmYWN0b3IoZGFkb3MkdXJiYW4pIApkYWRvcyRpZGFkZSA8LSBmYWN0b3IoZGFkb3MkaWRhZGUpIApkYWRvcyRlc2NvbGFyaWRhZGUgPC0gZmFjdG9yKGRhZG9zJGVzY29sYXJpZGFkZSkgCmRhZG9zJGxpdmluZ19jb25kaXRpb25zIDwtIGZhY3RvcihkYWRvcyRsaXZpbmdfY29uZGl0aW9ucykgCmRhZG9zJHBlc3NvYXNfbmFfZmFtaWxpYSA8LSBmYWN0b3IoZGFkb3MkcGVzc29hc19uYV9mYW1pbGlhKSAKCiNjcmlhbmRvIGEgdGFiZWxhIGRlIGNvbnRpbmfDqm5jaWEKZGFkb3MgJT4lIAogIHNlbGVjdCggI2FxdWkgdGEgc2VsZWNpb25hbmRvIGFzIHZhcmnDoXZlaXMgbmEgdGFiZWxhCiAgICBxdGRfaG9taWNfZmFtaWxpYSwKICAgIHBlc3NvYXNfbmFfZmFtaWxpYSwKICAgIGhvbWVtX2ZhbWlsaWEsCiAgICByYWNhLAogICAgcmVnaWFvLAogICAgdXJiYW4sCiAgICBpZGFkZSwKICAgIGVzY29sYXJpZGFkZSwKICAgIGxpdmluZ19jb25kaXRpb25zLAogICAgZGVzZmVjaG8pICU+JSAKICB0Ymxfc3VtbWFyeShieSA9IGRlc2ZlY2hvLAogICAgICAgICAgICAgIHN0YXRpc3RpYyA9IGxpc3QoYWxsX2NvbnRpbnVvdXMoKSB+ICJ7bWVhbn0gKHtzZH0pIikpICU+JSAKICBhZGRfcCgpICU+JSAjYWRpY2lvbmEgb3MgcC12YWxvcmVzIGRvcyB0ZXN0ZXMgZXN0YXTDrXN0aWNvcyAKICAgYm9sZF9sYWJlbHMoKSAKCgpgYGAKCgojIDMuIFJlZ3Jlc3NhbyBMb2dpc3RpY2EKCiMjIDMuMSBDb25zdHJ1Y2FvIGRvIG1vZGVsbwoKYGBge3IgZWNobz1UUlVFfQoKI21vZGVsYWdlbSBkYSByZWdyZXNzYW8gbG9naXN0aWNhCm0xIDwtIGdsbShkZXNmZWNobyB+IHF0ZF9ob21pY19mYW1pbGlhICsgcGVzc29hc19uYV9mYW1pbGlhICsgaG9tZW1fZmFtaWxpYSArIHJhY2EgKyByZWdpYW8gKyB1cmJhbiArIGlkYWRlICsgZXNjb2xhcmlkYWRlICsgbGl2aW5nX2NvbmRpdGlvbnMsIGRhdGEgPSBkYWRvcywgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpKQoKc3VtbWFyeShtMSkKCmBgYAoKIyMgMy4yIFRhYmVsYSBkZSBzaWduaWZpY2FuY2lhCmBgYHtyIG1lc3NhZ2U9RkFMU0V9CiNjb25zdHJ1aW5kbyB0YWJlbGEKdGFiX21vZGVsKG0xLCBmaWxlPSJ0YWJlbGEtc3VpY2lkaW8uaHRtbCIpCmh0bWx0b29sczo6aW5jbHVkZUhUTUwoInRhYmVsYS1zdWljaWRpby5odG1sIikKCmBgYAoKCiMjIDMuMyBQbG90YW5kbyBvIGdyYWZpY28gY29tIE9kZHMgUmF0aW8KCmBgYHtyfQpwbG90X21vZGVsKG0xLCBjb2xvcnMgPSAiYnciLCBzaG93LnZhbHVlcyA9IFRSVUUsIHZhbHVlLm9mZnNldCA9IC41LCB0aXRsZSA9ICJTdWljaWRpbyBuYSBmYW1pbGlhIikKYGBgCgoKCgoK