#aqui fica tudo que deve ser inicializado automaticamente no início do projeto
library(tidyverse) #manipular dados
library(gtsummary) #gerar tabelas de contingencia com p-valor
library(formattable) #gerar tabelas
library(DT) #gerar tabelas
library(rmarkdown) #estilo do relatório
library(data.table) #carregar grandes bases de dados
library(sjPlot) #plota coeficientes de modelos de regressão
library(sjlabelled) #para modelar a regressao logistica
library(sjmisc) #para modelar a regressao logistica
knitr::opts_chunk$set(echo = TRUE)
1. Base de Dados e Pré-processamento
2. Análise Exploratória dos Dados
2.1 Tabela de contingência vs Variável binária homicidio
#criando a tabela de contingência
dados_familia %>%
select( #aqui ta selecionando as variáveis na tabela
qtd_pesoas_familia,
raca,
jovem,
idoso,
idade,
comodos,
receb_fam,
empregado,
desempregado,
escolaridade,
regiao,
freq_escola,
analfabetismo,
qtd_dias_receb_QUART,
crowded,
fup,
desfecho) %>%
tbl_summary(by = desfecho,
statistic = list(all_continuous() ~ "{mean} ({sd})")) %>%
add_p() %>% #adiciona os p-valores dos testes estatísticos
bold_labels()
| Characteristic |
0, N = 183,275 |
1, N = 4,412 |
p-value |
| qtd_pesoas_familia |
2 (0) |
2 (0) |
<0.001 |
| raca |
|
|
<0.001 |
| 1 |
60,487 (36%) |
1,490 (38%) |
|
| 2 |
20,903 (13%) |
401 (10%) |
|
| 3 |
616 (0.4%) |
12 (0.3%) |
|
| 4 |
83,377 (50%) |
1,958 (50%) |
|
| 5 |
635 (0.4%) |
69 (1.8%) |
|
| Unknown |
17,257 |
482 |
|
| jovem |
10 (22) |
21 (28) |
<0.001 |
| idoso |
43 (40) |
18 (28) |
<0.001 |
| idade |
|
|
<0.001 |
| <20 |
19,298 (12%) |
866 (23%) |
|
| >60 |
77,259 (50%) |
804 (22%) |
|
| 20|-40 |
21,442 (14%) |
1,065 (29%) |
|
| 40|-60 |
37,208 (24%) |
999 (27%) |
|
| Unknown |
28,068 |
678 |
|
| comodos |
|
|
<0.001 |
| 0 |
3,136 (1.7%) |
98 (2.2%) |
|
| 1 |
4,023 (2.2%) |
126 (2.9%) |
|
| 2 |
10,598 (5.8%) |
306 (6.9%) |
|
| 3 |
24,142 (13%) |
597 (14%) |
|
| 4 |
46,152 (25%) |
1,133 (26%) |
|
| 5 |
47,591 (26%) |
1,089 (25%) |
|
| 6 |
28,103 (15%) |
638 (14%) |
|
| 7 |
10,458 (5.7%) |
228 (5.2%) |
|
| 8 |
9,072 (4.9%) |
197 (4.5%) |
|
| receb_fam |
1,711 (1,704) |
2,122 (1,772) |
<0.001 |
| empregado |
15 (26) |
23 (30) |
<0.001 |
| desempregado |
44 (35) |
50 (34) |
<0.001 |
| escolaridade |
|
|
<0.001 |
| 0 |
30,894 (22%) |
285 (8.8%) |
|
| 1 |
360 (0.3%) |
7 (0.2%) |
|
| 2 |
1,599 (1.1%) |
21 (0.6%) |
|
| 3 |
66,782 (47%) |
1,277 (40%) |
|
| 4 |
35,798 (25%) |
1,312 (41%) |
|
| 5 |
7,323 (5.1%) |
315 (9.7%) |
|
| 6 |
704 (0.5%) |
14 (0.4%) |
|
| Unknown |
39,815 |
1,181 |
|
| regiao |
|
|
<0.001 |
| Centro-Oeste |
10,507 (5.7%) |
321 (7.3%) |
|
| Nordeste |
71,723 (39%) |
1,622 (37%) |
|
| Norte |
9,250 (5.1%) |
274 (6.2%) |
|
| Sudeste |
61,027 (33%) |
1,248 (28%) |
|
| Sul |
30,638 (17%) |
945 (21%) |
|
| Unknown |
130 |
2 |
|
| freq_escola |
|
|
<0.001 |
| 0 |
59,914 (38%) |
955 (26%) |
|
| 1 |
540 (0.3%) |
14 (0.4%) |
|
| 2 |
1,916 (1.2%) |
38 (1.0%) |
|
| 3 |
67,210 (42%) |
1,591 (43%) |
|
| 4 |
24,666 (16%) |
932 (25%) |
|
| 5 |
4,419 (2.8%) |
176 (4.7%) |
|
| 6 |
436 (0.3%) |
6 (0.2%) |
|
| Unknown |
24,174 |
700 |
|
| analfabetismo |
38 (39) |
24 (32) |
<0.001 |
| Unknown |
18,491 |
512 |
|
| qtd_dias_receb_QUART |
|
|
<0.001 |
| 1 |
69,012 (38%) |
1,214 (28%) |
|
| 2 |
51,052 (28%) |
1,289 (29%) |
|
| 3 |
37,593 (21%) |
1,075 (24%) |
|
| 4 |
25,618 (14%) |
834 (19%) |
|
| crowded |
1.15 (0.88) |
1.32 (1.06) |
<0.001 |
| Unknown |
3,330 |
100 |
|
| fup |
5.60 (2.53) |
5.52 (2.49) |
0.090 |
| Unknown |
22,602 |
562 |
|
NA
2.3 Regressao Logistica
Construcao do modelo
#transformando em fator
dados_familia$desfecho <- factor(dados_familia$desfecho)
dados_familia$raca <- factor(dados_familia$raca)
#dados_familia$comodos <- factor(dados_familia$comodos)
dados_familia$escolaridade <- factor(dados_familia$escolaridade)
dados_familia$freq_escola <- factor(dados_familia$freq_escola)
dados_familia$idade <- factor(dados_familia$idade)
#modelagem da regressao logistica
m1 <- glm(desfecho ~ qtd_pesoas_familia + raca + jovem + idoso + idade + comodos + receb_fam + empregado +
desempregado + escolaridade + regiao + freq_escola + analfabetismo + qtd_dias_receb_QUART +
crowded + fup, data = dados_familia, family = binomial(link = "logit"))
Tabela de significancia
#construindo tabela
tab_model(m1, file="tabela-homicidio.html")
Profiled confidence intervals may take longer time to compute. Use 'ci_method="wald"'
for faster computation of CIs.
htmltools::includeHTML("tabela-homicidio.html")
| |
desfecho |
| Predictors |
Odds Ratios |
CI |
p |
| (Intercept) |
0.02 |
0.01 – 0.03 |
<0.001 |
| qtd pesoas familia |
1.22 |
1.10 – 1.38 |
0.001 |
| raca [2] |
0.68 |
0.58 – 0.79 |
<0.001 |
| raca [3] |
0.75 |
0.32 – 1.49 |
0.465 |
| raca [4] |
0.81 |
0.73 – 0.90 |
<0.001 |
| raca [5] |
3.88 |
2.75 – 5.36 |
<0.001 |
| jovem |
1.01 |
1.00 – 1.01 |
<0.001 |
| idoso |
0.98 |
0.98 – 0.99 |
<0.001 |
| idade [>60] |
0.79 |
0.64 – 0.97 |
0.025 |
| idade20|-40 |
1.28 |
1.13 – 1.45 |
<0.001 |
| idade40|-60 |
0.72 |
0.63 – 0.83 |
<0.001 |
| comodos |
1.04 |
1.01 – 1.08 |
0.012 |
| receb fam |
1.00 |
1.00 – 1.00 |
0.800 |
| empregado |
1.00 |
1.00 – 1.01 |
<0.001 |
| desempregado |
1.00 |
1.00 – 1.00 |
0.188 |
| escolaridade [1] |
1.92 |
0.68 – 4.57 |
0.176 |
| escolaridade [2] |
1.77 |
0.97 – 3.07 |
0.053 |
| escolaridade [3] |
1.68 |
1.35 – 2.08 |
<0.001 |
| escolaridade [4] |
2.22 |
1.75 – 2.82 |
<0.001 |
| escolaridade [5] |
2.74 |
2.03 – 3.68 |
<0.001 |
| escolaridade [6] |
2.71 |
1.12 – 5.59 |
0.014 |
| regiao [Nordeste] |
0.75 |
0.63 – 0.90 |
0.001 |
| regiao [Norte] |
0.97 |
0.78 – 1.22 |
0.825 |
| regiao [Sudeste] |
0.69 |
0.58 – 0.83 |
<0.001 |
| regiao [Sul] |
1.12 |
0.93 – 1.36 |
0.220 |
| freq escola [1] |
0.97 |
0.44 – 1.93 |
0.943 |
| freq escola [2] |
0.92 |
0.55 – 1.48 |
0.743 |
| freq escola [3] |
0.82 |
0.70 – 0.96 |
0.015 |
| freq escola [4] |
0.74 |
0.61 – 0.89 |
0.001 |
| freq escola [5] |
0.63 |
0.47 – 0.85 |
0.003 |
| freq escola [6] |
0.42 |
0.12 – 1.36 |
0.150 |
| analfabetismo |
1.00 |
1.00 – 1.00 |
0.725 |
| qtd dias receb QUART |
1.02 |
0.92 – 1.13 |
0.759 |
| crowded |
1.06 |
1.01 – 1.11 |
0.028 |
| fup |
0.99 |
0.97 – 1.00 |
0.108 |
| Observations |
104896 |
| R2 Tjur |
0.021 |
LS0tCnRpdGxlOiAiRmF0b3JlcyBkZSBSaXNjbyBTb2NpYWlzIHF1ZSBpbXBhY3RhbSBlbSBIb21pY8OtZGlvIEZhbWlsaWFyIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojYXF1aSBmaWNhIHR1ZG8gcXVlIGRldmUgc2VyIGluaWNpYWxpemFkbyBhdXRvbWF0aWNhbWVudGUgbm8gaW7DrWNpbyBkbyBwcm9qZXRvCmxpYnJhcnkodGlkeXZlcnNlKSAjbWFuaXB1bGFyIGRhZG9zCmxpYnJhcnkoZ3RzdW1tYXJ5KSAjZ2VyYXIgdGFiZWxhcyBkZSBjb250aW5nZW5jaWEgY29tIHAtdmFsb3IKbGlicmFyeShmb3JtYXR0YWJsZSkgI2dlcmFyIHRhYmVsYXMKbGlicmFyeShEVCkgI2dlcmFyIHRhYmVsYXMKbGlicmFyeShybWFya2Rvd24pICNlc3RpbG8gZG8gcmVsYXTDs3JpbwpsaWJyYXJ5KGRhdGEudGFibGUpICNjYXJyZWdhciBncmFuZGVzIGJhc2VzIGRlIGRhZG9zCmxpYnJhcnkoc2pQbG90KSAjcGxvdGEgY29lZmljaWVudGVzIGRlIG1vZGVsb3MgZGUgcmVncmVzc8OjbwpsaWJyYXJ5KHNqbGFiZWxsZWQpICNwYXJhIG1vZGVsYXIgYSByZWdyZXNzYW8gbG9naXN0aWNhCmxpYnJhcnkoc2ptaXNjKSAjcGFyYSBtb2RlbGFyIGEgcmVncmVzc2FvIGxvZ2lzdGljYQoKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCiMgMS4gQmFzZSBkZSBEYWRvcyBlIFByw6ktcHJvY2Vzc2FtZW50bwoKCmBgYHtyIGltcG9ydC1kYXRhc2V0LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojY2FycmVnYW5kbyBhIGJhc2UgZGUgZGFkb3MgZW0gLmNzdgpkYWRvcyA8LSAKICBkYXRhLnRhYmxlOjpmcmVhZCgiL0RhZG9zL0Nvb3J0ZTEwMG0vUEJGX1NIU00vU0hBUkVEL0RhdGFzZXRfU0lNX0RhaWFuZV9nZW8uY3N2IikgCmRhZG9zPC0gZGFkb3MgJT4lIGZpbHRlcihpZGFkZSA+IDEwKSAjcmV0aXJhbmRvIGNyaWFuY2FzIG1lbm9yZXMgZGUgMTAgYW5vcwoKI2Z1bmNhbyBwYXJhIGNhbGN1bGFyIGEgbW9kYQptb2RhIDwtIGZ1bmN0aW9uKHYpIHsKICB1bmlxdiA8LSB1bmlxdWUodikKICB1bmlxdlt3aGljaC5tYXgodGFidWxhdGUobWF0Y2godiwgdW5pcXYpKSldCn0KCiNjcmlhbmRvIGEgdmFyaWF2ZWwgaWRvc28KZGFkb3MgPC0gZGFkb3MgJT4lIAogIG11dGF0ZSgKICAgIGlkb3NvID0gY2FzZV93aGVuKAogICAgICBpZGFkZSA8IDYwfjAsCiAgICAgIGlkYWRlID49IDYwfjEpCiAgKQoKI2NyaWFuZG8gYSB2YXJpYXZlbCBqb3ZlbQpkYWRvcyA8LSBkYWRvcyAlPiUgCiAgbXV0YXRlKAogICAgam92ZW0gPSBjYXNlX3doZW4oCiAgICAgIGlkYWRlIDwgMTV+MCwKICAgICAgaWRhZGUgPj0gMTUgJiBpZGFkZSA8PSAyNH4xLAogICAgICBpZGFkZSA+IDI0fjApCiAgKQoKCiNjYXRlZ29yaXphbmRvIHZhcmlhdmVpcwpkYWRvcyA8LSBkYWRvcyAlPiUgCiAgbXV0YXRlKAogICAgaWRhZGVfY2F0ID0gY2FzZV93aGVuKAogICAgICBpZGFkZSA8IDIwfiI8MjAiLAogICAgICBpZGFkZSA+PSAyMCAmIGlkYWRlIDwgNDB+IjIwfC00MCIsCiAgICAgIGlkYWRlID49IDQwICYgaWRhZGUgPCA2MH4iNDB8LTYwIiwKICAgICAgaWRhZGUgPiA2MH4iPjYwIikKICApCgoKI2ZhbWlsaWFzIGNvbSBwZWxvIG1lbm9zIHVtIGhvbWljaWRpbwpxdGRfaG9taWNpZGlvX2ZhbWlsaWEgPC0gZGFkb3MgJT4lIAogIGdyb3VwX2J5KGNvZF9mYW1pbGlhcl9lcSkgJT4lICNhZ3J1cGFuZG8gcG9yIGZhbWlsaWFzCiAgc3VtbWFyaXNlKAogICAgcXRkX3Blc29hc19mYW1pbGlhID0gbigpLCNxdWFudGlkYWRlIGRlIHBlc3NvYXMgbmEgZmFtaWxpYQogICAgcXRkX2hvbWljaWRpb19mYW1pbGlhID0gc3VtKGhvbWljaWRlKSwgI3F1YW50aWRhZGUgZGUgaG9taWNpZGlvIG5hIGZhbWlsaWEKICAgIHJhY2EgPSBtb2RhKGNvZF9yYWNhX2Nvcl9wZXNzb2FfZXEpLCAjcmFjYSBwcmVkb21pbmFudGUobW9kYSkgbmEgZmFtaWxpYQogICAgam92ZW0gPSAoc3VtKGpvdmVtKS9uKCkpKjEwMCwgI3BlcmNlbnR1YWwgZGUgam92ZW5zIG5hIGZhbWlsaWEKICAgIGlkb3NvID0gKHN1bShpZG9zbykvbigpKSoxMDAsICNwZXJjZW50dWFsIGRlIGlkb3NvIG5hIGZhbWlsaWEKICAgICNzZXhvID0gbW9kYShzZXhvKSwgI3NleG8gcHJlZG9taW5hbnRlKG1vZGEpIG5hIGZhbWlsaWEKICAgIGlkYWRlID0gbW9kYShpZGFkZV9jYXQpLCAjaWRhZGUgbWVkaWFuYSBkYSBmYW1pbGlhCiAgICBjb21vZG9zID0gbW9kYShxdGRfY29tb2Rvc19kb21pY19mYW1fZXEpLCAjcXVhbnRpZGFkZSBwcmVkb21pbmFudGUobW9kYSljb21vZG9zIHBvciBmYW1pbGlhCiAgICByZWNlYl9mYW0gPSBtYXgocXRkX2RpYXNfcmVjZWJfZmFtKSwgI21heGltbyBkZSBkaWFzIHF1ZSBwZWxvIG1lbm9zIHVtIG1lbWJybyBkYSBmYW1pbGlhIHJlY2ViZXUgYm9sc2EgZmFtaWxpYSAKICAgICNyZW11bmVyYWNhb19lbXByZWdvID0gbWVkaWFuKHZhbF9yZW11bmVyX2VtcHJlZ29fbWVtYl9lcSksICNtZWRpYSBkYSByZW11bmVyYWNhbyBkb3MgbWVtYnJvcyBkYSBmYW1pbGlhCiAgICBlc2NvbGFyaWRhZGUgPSBtYXgoZXNjb2xhcmlkYWRlX2VxKSwgI2VzY29sYXJpZGFkZSBwcmVkb21pbmFudGUobW9kYSkgZGEgZXNvbGFyaWRhZGUgbmEgZmFtaWxpYQogICAgZnJlcV9lc2NvbGEgPSBtb2RhKGVzY29sYXJpZGFkZV9lcSksICNmcmVxdWVuY2lhIHByZWRvbWluYW50ZSBzZSBmcmVxdWVudG91IGVzY29sYQogICAgcmVnaWFvID0gbW9kYShyZWdpYW8pLCAjcmVnaWFvIHByZWRvbWluYW50ZSBkYSBmYW1pbGlhCiAgICB1ZiA9IG1vZGEodWYpLCAjcmVnaWFvIHByZWRvbWluYW50ZSBkYSBmYW1pbGlhCiAgICBhbmFsZmFiZXRpc21vID0gKHN1bShuYW9fc2FiZV9sZXJfZXNjcmV2ZXIpL24oKSkqMTAwLCAjcGVyY2VudHVhbCBkZSBhbmFsZmFiZXRvcwogICAgZGVzZW1wcmVnYWRvID0gKHN1bShkZXNlbXByZWdhZG8pL24oKSkqMTAwLCAjcGVyY2VudHVhbCBkZSBkZXNlbXByZWdhZG8gbmEgZmFtaWxpYQogICAgZW1wcmVnYWRvID0gKHN1bShlbXByZWdhZG8pL24oKSkqMTAwLCAjcGVyY2VudHVhbCBkZSBkZXNlbXByZWdhZG8gbmEgZmFtaWxpYQogICAgcXRkX2RpYXNfcmVjZWJfUVVBUlQgPSBtb2RhKHF0ZF9kaWFzX3JlY2ViX1FVQVJUKSwgI3JlYy4gZmFtIHF1YXJ0aWwgKG1vZGEpCiAgICBjcm93ZGVkID0gbWF4KGNyb3dkZWQpLCAjbWF4aW1vIGRlIHBlc3NvYXMgcG9yIGNvbW9kbwogICAgZnVwID0gbWVkaWFuKGZ1cCkpICU+JSAKICBmaWx0ZXIocXRkX3Blc29hc19mYW1pbGlhID4gMSkgI2ZhbWlsaWFzIGNvbSBtYWlzIGRlIHVtYSBwZXNzb2EKCgojY3JpYW5kbyBhIHZhcmlhdmVsIGRlc2ZlY2hvCmRhZG9zX2ZhbWlsaWEgPC0gcXRkX2hvbWljaWRpb19mYW1pbGlhICU+JSAKICBtdXRhdGUoICNzZSB0ZXZlIHBlbG8gbWVub3MgdW0gc3VpY2lkaW8gKDEpIGUgY2FzbyBjb250cnJhcmlvICgwKQogICAgZGVzZmVjaG8gPSBjYXNlX3doZW4ocXRkX2hvbWljaWRpb19mYW1pbGlhID49IDF+MSxUUlVFfjApCiAgKQoKCmBgYAoKIyAyLiBBbsOhbGlzZSBFeHBsb3JhdMOzcmlhIGRvcyBEYWRvcwoKIyMgMi4xIFRhYmVsYSBkZSBjb250aW5nw6puY2lhIHZzIFZhcmnDoXZlbCBiaW7DoXJpYSBob21pY2lkaW8KCmBgYHtyLCBsYXlvdXQ9ImwtYm9keS1vdXRzZXQifQojY3JpYW5kbyBhIHRhYmVsYSBkZSBjb250aW5nw6puY2lhCmRhZG9zX2ZhbWlsaWEgJT4lIAogIHNlbGVjdCggI2FxdWkgdGEgc2VsZWNpb25hbmRvIGFzIHZhcmnDoXZlaXMgbmEgdGFiZWxhCiAgIHF0ZF9wZXNvYXNfZmFtaWxpYSwKICAgIHJhY2EsCiAgICBqb3ZlbSwKICAgIGlkb3NvLAogICAgaWRhZGUsCiAgICBjb21vZG9zLAogICAgcmVjZWJfZmFtLAogICAgZW1wcmVnYWRvLCAKICAgIGRlc2VtcHJlZ2FkbywKICAgIGVzY29sYXJpZGFkZSwKICAgIHJlZ2lhbywKICAgIGZyZXFfZXNjb2xhLAogICAgYW5hbGZhYmV0aXNtbywKICAgIHF0ZF9kaWFzX3JlY2ViX1FVQVJULAogICAgY3Jvd2RlZCwKICAgIGZ1cCwKICAgIGRlc2ZlY2hvKSAlPiUgCiAgdGJsX3N1bW1hcnkoYnkgPSBkZXNmZWNobywKICAgICAgICAgICAgICBzdGF0aXN0aWMgPSBsaXN0KGFsbF9jb250aW51b3VzKCkgfiAie21lYW59ICh7c2R9KSIpKSAlPiUgCiAgYWRkX3AoKSAlPiUgI2FkaWNpb25hIG9zIHAtdmFsb3JlcyBkb3MgdGVzdGVzIGVzdGF0w61zdGljb3MgCiAgIGJvbGRfbGFiZWxzKCkgCgpgYGAKCgoKIyMgMi4zIFJlZ3Jlc3NhbyBMb2dpc3RpY2EKCiMjIyBDb25zdHJ1Y2FvIGRvIG1vZGVsbwoKYGBge3IgZWNobz1UUlVFfQojdHJhbnNmb3JtYW5kbyBlbSBmYXRvcgpkYWRvc19mYW1pbGlhJGRlc2ZlY2hvIDwtIGZhY3RvcihkYWRvc19mYW1pbGlhJGRlc2ZlY2hvKSAKZGFkb3NfZmFtaWxpYSRyYWNhIDwtIGZhY3RvcihkYWRvc19mYW1pbGlhJHJhY2EpIAojZGFkb3NfZmFtaWxpYSRjb21vZG9zIDwtIGZhY3RvcihkYWRvc19mYW1pbGlhJGNvbW9kb3MpIApkYWRvc19mYW1pbGlhJGVzY29sYXJpZGFkZSA8LSBmYWN0b3IoZGFkb3NfZmFtaWxpYSRlc2NvbGFyaWRhZGUpIApkYWRvc19mYW1pbGlhJGZyZXFfZXNjb2xhIDwtIGZhY3RvcihkYWRvc19mYW1pbGlhJGZyZXFfZXNjb2xhKSAKZGFkb3NfZmFtaWxpYSRpZGFkZSA8LSBmYWN0b3IoZGFkb3NfZmFtaWxpYSRpZGFkZSkgCgoKI21vZGVsYWdlbSBkYSByZWdyZXNzYW8gbG9naXN0aWNhCm0xIDwtIGdsbShkZXNmZWNobyB+IHF0ZF9wZXNvYXNfZmFtaWxpYSArIHJhY2EgKyBqb3ZlbSArIGlkb3NvICsgaWRhZGUgKyBjb21vZG9zICsgcmVjZWJfZmFtICsgZW1wcmVnYWRvICsgCiAgICAgIGRlc2VtcHJlZ2FkbyArIGVzY29sYXJpZGFkZSArIHJlZ2lhbyArIGZyZXFfZXNjb2xhICArIGFuYWxmYWJldGlzbW8gKyBxdGRfZGlhc19yZWNlYl9RVUFSVCArIAogICAgICBjcm93ZGVkICsgZnVwLCBkYXRhID0gZGFkb3NfZmFtaWxpYSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpKQoKYGBgCgojIyMgVGFiZWxhIGRlIHNpZ25pZmljYW5jaWEKYGBge3J9CiNjb25zdHJ1aW5kbyB0YWJlbGEKdGFiX21vZGVsKG0xLCBmaWxlPSJ0YWJlbGEtaG9taWNpZGlvLmh0bWwiKQpodG1sdG9vbHM6OmluY2x1ZGVIVE1MKCJ0YWJlbGEtaG9taWNpZGlvLmh0bWwiKQpgYGAKCgojIyMgUGxvdGFuZG8gbyBncmFmaWNvIGNvbSBPZGRzIFJhdGlvCgpgYGB7cn0KcGxvdF9tb2RlbChtMSwgc2hvdy52YWx1ZXMgPSBUUlVFLCB2YWx1ZS5vZmZzZXQgPSAuNCwgdGl0bGUgPSAiSG9taWNpZGlvIG5hIGZhbWlsaWEiKQpgYGA=