Note: This is the R markdown of the manuscript “Associated Factors of Attention-Deficit/Hyperactivity Disorder Diagnosis and Psychostimulant Use: A Nationwide Representative Study”. Click run to reproduce all analyzes.

If you have any questions or queries, please reach me out at

last updated: 04 January, 2022

1 Get R file

#get file
load(url("https://osf.io/uhavp/download"))

2 Packages

pacman::p_load(tidyverse, janitor, arsenal, epiDisplay)

3 Psychometric analysis of the SNAP

3.1 Parents

ds %>% select(contains("snapp_")) %>% 
  alpha(.)

Reliability analysis   
Call: alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.92 0.92 0.92 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
            0    1    2    3 miss
snapp_1  0.30 0.51 0.14 0.05    0
snapp_2  0.54 0.31 0.11 0.04    0
snapp_3  0.53 0.30 0.12 0.06    0
snapp_4  0.57 0.28 0.10 0.05    0
snapp_5  0.52 0.31 0.12 0.06    0
snapp_6  0.49 0.32 0.13 0.06    0
snapp_7  0.49 0.31 0.14 0.07    0
snapp_8  0.35 0.41 0.17 0.07    0
snapp_9  0.48 0.34 0.12 0.06    0
snapp_10 0.40 0.34 0.17 0.09    0
snapp_11 0.53 0.30 0.11 0.06    0
snapp_12 0.66 0.20 0.09 0.05    0
snapp_13 0.70 0.20 0.07 0.04    0
snapp_14 0.48 0.30 0.13 0.09    0
snapp_15 0.33 0.33 0.20 0.14    0
snapp_16 0.45 0.33 0.14 0.08    0
snapp_17 0.41 0.34 0.16 0.10    0
snapp_18 0.35 0.35 0.17 0.12    0
ds %>% select(contains("snapp_")) %>% 
 splitHalf()
Split half reliabilities  
Call: splitHalf(r = .)

Maximum split half reliability (lambda 4) =  0.95
Guttman lambda 6                          =  0.93
Average split half reliability            =  0.92
Guttman lambda 3 (alpha)                  =  0.92
Guttman lambda 2                          =  0.92
Minimum split half reliability  (beta)    =  0.8
Average interitem r =  0.39  with median =  0.38

3.2 Teachers

ds %>% select(contains("snappro_")) %>% 
  pivot_longer(everything()) %>% 
  count(value) %>% 
  mutate(percent = (100 * n / sum(n)) %>% round(digits = 1))
ds %>% select(contains("snappro_")) %>% 
  alpha(.)

Reliability analysis   
Call: alpha(x = .)

 

 lower alpha upper     95% confidence boundaries
0.96 0.96 0.96 

 Reliability if an item is dropped:

 Item statistics 

Non missing response frequency for each item
              0    1    2    3 miss
snappro_1  0.34 0.39 0.19 0.07    0
snappro_2  0.47 0.31 0.16 0.06    0
snappro_3  0.58 0.26 0.11 0.05    0
snappro_4  0.53 0.27 0.13 0.07    0
snappro_5  0.50 0.29 0.14 0.06    0
snappro_6  0.52 0.27 0.14 0.07    0
snappro_7  0.61 0.26 0.09 0.04    0
snappro_8  0.30 0.40 0.19 0.10    0
snappro_9  0.50 0.30 0.13 0.06    0
snappro_10 0.56 0.27 0.11 0.06    0
snappro_11 0.59 0.25 0.10 0.06    0
snappro_12 0.75 0.16 0.06 0.03    0
snappro_13 0.69 0.20 0.08 0.03    0
snappro_14 0.68 0.21 0.07 0.04    0
snappro_15 0.49 0.31 0.14 0.06    0
snappro_16 0.63 0.24 0.09 0.04    0
snappro_17 0.62 0.24 0.09 0.05    0
snappro_18 0.63 0.23 0.09 0.05    0
ds %>% select(contains("snappro_")) %>% 
 splitHalf()
Split half reliabilities  
Call: splitHalf(r = .)

Maximum split half reliability (lambda 4) =  0.98
Guttman lambda 6                          =  0.97
Average split half reliability            =  0.96
Guttman lambda 3 (alpha)                  =  0.96
Guttman lambda 2                          =  0.96
Minimum split half reliability  (beta)    =  0.82
Average interitem r =  0.56  with median =  0.54

3.3 Correlation

cor(ds_selected$snapp_total, ds_selected$snapprof_total)
[1] 0.4666921

4 Research questions

4.1 Table 1

tableby(~age_group + sex_male + race_white + economic_status + public_School + region + city_size, data = ds_selected) %>% summary()
Overall (N=7114)
age_group
   1 4239 (59.6%)
   2 2299 (32.3%)
   3 576 (8.1%)
sex_male
   female 3562 (50.1%)
   male 3552 (49.9%)
race_white
   N-Miss 278
   other 2227 (32.6%)
   white 4609 (67.4%)
economic_status
   AB 2635 (37.0%)
   C 3513 (49.4%)
   DE 966 (13.6%)
public_School
   public 5993 (84.2%)
   private 1121 (15.8%)
region
   CO 628 (8.8%)
   NE 872 (12.3%)
   NO 250 (3.5%)
   SE 2345 (33.0%)
   SU 3019 (42.4%)
city_size
   small 2600 (36.5%)
   medium 3242 (45.6%)
   big 1272 (17.9%)
NA

4.2 Textual markers

The prevalence of ADHD-report was 7.1%.

ds_selected %>% #<-- dataset with predictors
  count(adhd_parent) %>% 
  mutate(prop = prop.table(n)) %>% 
   adorn_totals()

The prevalence was higher in boys than in girls (relative risk [RR] = 1.76, 95% confidence interval [CI] = 1.48-2.10)

riskratio(ds_selected$sex_male,ds_selected$adhd_parent)
$data
         Outcome
Predictor   no yes Total
   female 3379 183  3562
   male   3230 322  3552
   Total  6609 505  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate    lower    upper
   female 1.000000       NA       NA
   male   1.764517 1.480658 2.102793

$p.value
         two-sided
Predictor   midp.exact fisher.exact   chi.square
   female           NA           NA           NA
   male   9.128209e-11  1.08562e-10 1.117279e-10

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

and higher in children from upper upper-income classes A and B compared withthan in childred from lower lower-income classes D and E (RR = 1.40, 95% CI = 1.045-1.88).

riskratio(ds_selected$economic_status,ds_selected$adhd_parent, rev = "r")
$data
         Outcome
Predictor   no yes Total
    DE     913  53   966
    C     3264 249  3513
    AB    2432 203  2635
    Total 6609 505  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
       DE 1.000000        NA       NA
       C  1.291881 0.9687814 1.722738
       AB 1.404160 1.0473197 1.882583

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
       DE         NA           NA         NA
       C  0.07497211   0.08217484 0.07876962
       AB 0.01953964   0.02308901 0.02178100

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

The prevalence was higher in children who lived in the southern region of the country compared withthan in children who lived in the northeast region (RR = 1.59, 95% CI = 1.16-2.17).

riskratio(factor(ds_selected$region, levels=c("NE","SU","CO","NO","SE")),ds_selected$adhd_parent)
$data
         Outcome
Predictor   no yes Total
    NE     827  45   872
    SU    2802 217  3019
    CO     593  35   628
    NO     234  16   250
    SE    2153 192  2345
    Total 6609 505  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
       NE 1.000000        NA       NA
       SU 1.392838 1.0194556 1.902974
       CO 1.079972 0.7027771 1.659614
       NO 1.240178 0.7134565 2.155760
       SE 1.586581 1.1576768 2.174390

$p.value
         two-sided
Predictor  midp.exact fisher.exact  chi.square
       NE          NA           NA          NA
       SU 0.031930689  0.038077263 0.035361539
       CO 0.723960605  0.728260479 0.725637019
       NO 0.445173904  0.431718370 0.446085193
       SE 0.002685312  0.003020571 0.003484157

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

The prevalence of ADHD-probable was 3.9%

ds_selected %>% #<-- dataset with predictors
  count(adhd_risk) %>% 
  mutate(prop = prop.table(n)) %>% 
   adorn_totals()

which was higher in younger children and boys (RR = 2.97, 95% CI = 2.27-3.87)

riskratio(ds_selected$sex_male,ds_selected$adhd_risk)
$data
         Outcome
Predictor   no yes Total
   female 3492  70  3562
   male   3345 207  3552
   Total  6837 277  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate    lower    upper
   female 1.000000       NA       NA
   male   2.965468 2.270635 3.872926

$p.value
         two-sided
Predictor midp.exact fisher.exact   chi.square
   female         NA           NA           NA
   male            0 1.054224e-17 3.748842e-17

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
riskratio(relevel(ds_selected$race_white, ref = "white"),ds_selected$adhd_risk)
$data
         Outcome
Predictor   no yes Total
    white 4446 163  4609
    other 2123 104  2227
    Total 6569 267  6836

$measure
         risk ratio with 95% C.I.
Predictor estimate   lower    upper
    white 1.000000      NA       NA
    other 1.320481 1.03798 1.679869

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
    white         NA           NA         NA
    other 0.02531767   0.02774041 0.02339304

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

The prevalence of ADHD-probable was 3.9%, which was higher in younger children and boys (RR = 2.97, 95% CI = 2.27-3.87)

riskratio(ds_selected$sex_male,ds_selected$adhd_risk)
$data
         Outcome
Predictor   no yes Total
   female 3492  70  3562
   male   3345 207  3552
   Total  6837 277  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate    lower    upper
   female 1.000000       NA       NA
   male   2.965468 2.270635 3.872926

$p.value
         two-sided
Predictor midp.exact fisher.exact   chi.square
   female         NA           NA           NA
   male            0 1.054224e-17 3.748842e-17

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

The prevalence of ADHD-pst was 1.9%

ds_selected %>% #entire sample to check use of psychotropics
  drop_na() %>%
  count(psychostimulant) %>% 
  mutate(prop = prop.table(n)) %>% 
 adorn_totals()
 psychostimulant    n       prop
              no 5823 0.98063321
             yes  115 0.01936679
           Total 5938 1.00000000

The chi-square test was carried out to check the relationship between ADHD and Socioeconomic status. We could conclude that there’s no association between the two variables (X2(2) = 4.56, p = 0.1).

#classe social e TDAH
CrossTable(ds_selected$adhd_parent,
         ds_selected$economic_status,
         prop.r = T,  #row proportions
         prop.c = F, #column proportion
         total.r = T, #new column with totals
         total.c = F, 
         prop.t = F,
         expected = T,
         chisq = T) #chi square value

The prevalence was also higher in children who lived in the southeast region (RR = 4.37, 95% CI = 1.40-13.64) and the south region (RR = 3.22, 95% CI = 1.03-10.08) compared withthan in children who lived in the north region

riskratio(factor(ds_selected$region, levels=c("NO","SU","CO","NE","SE")),ds_selected$adhd_risk)
Warning in chisq.test(xx, correct = correction) :
  Chi-squared approximation may be incorrect
$data
         Outcome
Predictor   no yes Total
    NO     247   3   250
    SU    2902 117  3019
    CO     619   9   628
    NE     847  25   872
    SE    2222 123  2345
    Total 6837 277  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower     upper
       NO 1.000000        NA        NA
       SU 3.229546 1.0341942 10.085116
       CO 1.194268 0.3259983  4.375099
       NE 2.389144 0.7273559  7.847613
       SE 4.371002 1.4009316 13.637825

$p.value
         two-sided
Predictor  midp.exact fisher.exact  chi.square
       NO          NA           NA          NA
       SU 0.018147383  0.033181748 0.030628115
       CO 0.829154795  1.000000000 0.788321775
       NE 0.130927744  0.169800862 0.136333264
       SE 0.001408455  0.002750785 0.004672068

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

4.3 Table 2

4.3.1 ADHD report

ds_selected %>% 
  count(adhd_parent) %>% 
  mutate(prop=prop.table(n)*100)

Age group

riskratio(ds_selected$age_group,ds_selected$adhd_parent, rev = "row") #older children are references
$data
         Outcome
Predictor   no yes Total
    3      544  32   576
    2     2123 176  2299
    1     3942 297  4239
    Total 6609 505  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
        3 1.000000        NA       NA
        2 1.377990 0.9561945 1.985849
        1 1.261146 0.8850567 1.797049

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
        3         NA           NA         NA
        2 0.07712139   0.08750415 0.08191846
        1 0.19208807   0.21788824 0.19536606

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

Sex

riskratio(ds_selected$sex_male,ds_selected$adhd_parent) 
$data
         Outcome
Predictor   no yes Total
   female 3379 183  3562
   male   3230 322  3552
   Total  6609 505  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate    lower    upper
   female 1.000000       NA       NA
   male   1.764517 1.480658 2.102793

$p.value
         two-sided
Predictor   midp.exact fisher.exact   chi.square
   female           NA           NA           NA
   male   9.128209e-11  1.08562e-10 1.117279e-10

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(sex_male,adhd_parent) %>% 
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 2) %>%
  adorn_ns()
 sex_male            no         yes
   female 94.86% (3379) 5.14% (183)
     male 90.93% (3230) 9.07% (322)
ds_selected %>% #Relative Risk for gender
  {CrossTable(.$sex_male,.$adhd_parent,
              expected = T,
              chisq = T)}

Economic status

riskratio(ds_selected$economic_status,ds_selected$adhd_parent, rev = "r")  #DE are reference
$data
         Outcome
Predictor   no yes Total
    DE     913  53   966
    C     3264 249  3513
    AB    2432 203  2635
    Total 6609 505  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
       DE 1.000000        NA       NA
       C  1.291881 0.9687814 1.722738
       AB 1.404160 1.0473197 1.882583

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
       DE         NA           NA         NA
       C  0.07497211   0.08217484 0.07876962
       AB 0.01953964   0.02308901 0.02178100

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

Race

riskratio(ds$cor_1_branca_2_nao_branca_3_nao_informou,ds$parent_reported_adhd)  #change reference
$data
         Outcome
Predictor    0   1 Total
    1     4287 322  4609
    2     2060 167  2227
    3      262  16   278
    Total 6609 505  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
        1 1.000000        NA       NA
        2 1.073364 0.8966131 1.284959
        3 0.823808 0.5060987 1.340963

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
        1         NA           NA         NA
        2  0.4403050    0.4526988  0.4409126
        3  0.4424939    0.5418869  0.4321396

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

School type

riskratio(ds_selected$public_School,ds_selected$adhd_parent) 
$data
         Outcome
Predictor   no yes Total
  public  5576 417  5993
  private 1033  88  1121
  Total   6609 505  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
  public  1.000000        NA       NA
  private 1.128198 0.9045846 1.407088

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
  public          NA           NA         NA
  private  0.2873481    0.2817659   0.285776

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

Brazilian region

riskratio(relevel(ds_selected$region, ref = "NE"),ds_selected$adhd_parent) #need to change the reference
$data
         Outcome
Predictor   no yes Total
    NE     827  45   872
    CO     593  35   628
    NO     234  16   250
    SE    2153 192  2345
    SU    2802 217  3019
    Total 6609 505  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
       NE 1.000000        NA       NA
       CO 1.079972 0.7027771 1.659614
       NO 1.240178 0.7134565 2.155760
       SE 1.586581 1.1576768 2.174390
       SU 1.392838 1.0194556 1.902974

$p.value
         two-sided
Predictor  midp.exact fisher.exact  chi.square
       NE          NA           NA          NA
       CO 0.723960605  0.728260479 0.725637019
       NO 0.445173904  0.431718370 0.446085193
       SE 0.002685312  0.003020571 0.003484157
       SU 0.031930689  0.038077263 0.035361539

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(region, adhd_parent) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 region           no        yes
     CO 94.4%  (593) 5.6%  (35)
     NE 94.8%  (827) 5.2%  (45)
     NO 93.6%  (234) 6.4%  (16)
     SE 91.8% (2153) 8.2% (192)
     SU 92.8% (2802) 7.2% (217)
  Total 92.9% (6609) 7.1% (505)
riskratio(ds_selected$city_size,ds_selected$adhd_parent, rev = "r") 

4.3.2 ADHD Probable

Totals

ds_selected %>% #<-- dataset with predictors
  count(adhd_risk) %>% 
  mutate(prop = prop.table(n)) %>% 
   adorn_totals()
 adhd_risk    n       prop
        no 6837 0.96106269
       yes  277 0.03893731
     Total 7114 1.00000000

Age group

riskratio(ds_selected$age_group,ds_selected$adhd_risk, rev = "r") 
$data
         Outcome
Predictor   no yes Total
    3      564  12   576
    2     2210  89  2299
    1     4063 176  4239
    Total 6837 277  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate    lower    upper
        3 1.000000       NA       NA
        2 1.858199 1.024123 3.371573
        1 1.992923 1.117789 3.553212

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
        3         NA           NA         NA
        2 0.03049368   0.04193336 0.03714494
        1 0.01076177   0.01543821 0.01617942

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(age_group, adhd_risk) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 age_group           no        yes
         1 95.8% (4063) 4.2% (176)
         2 96.1% (2210) 3.9%  (89)
         3 97.9%  (564) 2.1%  (12)
     Total 96.1% (6837) 3.9% (277)

Sex

riskratio(ds_selected$sex_male,ds_selected$adhd_risk) 
$data
         Outcome
Predictor   no yes Total
   female 3492  70  3562
   male   3345 207  3552
   Total  6837 277  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate    lower    upper
   female 1.000000       NA       NA
   male   2.965468 2.270635 3.872926

$p.value
         two-sided
Predictor midp.exact fisher.exact   chi.square
   female         NA           NA           NA
   male            0 1.054224e-17 3.748842e-17

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(sex_male, adhd_risk) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 sex_male           no        yes
   female 98.0% (3492) 2.0%  (70)
     male 94.2% (3345) 5.8% (207)
    Total 96.1% (6837) 3.9% (277)

Race/Ethniticy

riskratio(ds$cor_1_branca_2_nao_branca_3_nao_informou,ds$adhd_risk_dsm_5_0_nao_1_sim) 
$data
         Outcome
Predictor    0   1 Total
    1     4446 163  4609
    2     2123 104  2227
    3      268  10   278
    Total 6837 277  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
        1 1.000000        NA       NA
        2 1.320481 1.0379801 1.679869
        3 1.017125 0.5433693 1.903941

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
        1         NA           NA         NA
        2 0.02531767   0.02774041 0.02339304
        3 0.92300151   0.86789609 0.95767709

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds %>% 
  tabyl(cor_1_branca_2_nao_branca_3_nao_informou, adhd_risk_dsm_5_0_nao_1_sim) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 cor_1_branca_2_nao_branca_3_nao_informou            0          1
                                        1 96.5% (4446) 3.5% (163)
                                        2 95.3% (2123) 4.7% (104)
                                        3 96.4%  (268) 3.6%  (10)
                                    Total 96.1% (6837) 3.9% (277)
riskratio(ds_selected$race_white,ds_selected$adhd_risk, rev = "r") 
$data
         Outcome
Predictor   no yes Total
    white 4446 163  4609
    other 2123 104  2227
    Total 6569 267  6836

$measure
         risk ratio with 95% C.I.
Predictor estimate   lower    upper
    white 1.000000      NA       NA
    other 1.320481 1.03798 1.679869

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
    white         NA           NA         NA
    other 0.02531767   0.02774041 0.02339304

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"

Income class

riskratio(ds_selected$economic_status,ds_selected$adhd_risk) 
$data
         Outcome
Predictor   no yes Total
    AB    2567  68  2635
    C     3366 147  3513
    DE     904  62   966
    Total 6837 277  7114

$measure
         risk ratio with 95% C.I.
Predictor estimate    lower    upper
       AB 1.000000       NA       NA
       C  1.621477 1.221850 2.151810
       DE 2.487060 1.776992 3.480864

$p.value
         two-sided
Predictor   midp.exact fisher.exact   chi.square
       AB           NA           NA           NA
       C  6.119647e-04 7.272842e-04 7.050421e-04
       DE 2.407965e-07 2.699206e-07 4.512870e-08

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(economic_status, adhd_risk) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 economic_status           no        yes
              AB 97.4% (2567) 2.6%  (68)
               C 95.8% (3366) 4.2% (147)
              DE 93.6%  (904) 6.4%  (62)
           Total 96.1% (6837) 3.9% (277)

Brazilian region

ds_selected %>% 
  tabyl(economic_status, adhd_risk) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 economic_status           no        yes
              AB 97.4% (2567) 2.6%  (68)
               C 95.8% (3366) 4.2% (147)
              DE 93.6%  (904) 6.4%  (62)
           Total 96.1% (6837) 3.9% (277)
ds_selected %>% 
  tabyl(region, adhd_risk) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 region           no        yes
     CO 98.6%  (619) 1.4%   (9)
     NE 97.1%  (847) 2.9%  (25)
     NO 98.8%  (247) 1.2%   (3)
     SE 94.8% (2222) 5.2% (123)
     SU 96.1% (2902) 3.9% (117)
  Total 96.1% (6837) 3.9% (277)

School type

riskratio(ds_selected$public_School,ds_selected$adhd_risk, rev = "r") #check reference
ds_selected %>% 
  tabyl(public_School, adhd_risk) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 public_School           no        yes
        public 95.8% (5739) 4.2% (254)
       private 97.9% (1098) 2.1%  (23)
         Total 96.1% (6837) 3.9% (277)

City Size

riskratio(ds_selected$city_size, ds_selected$adhd_risk, rev = "r") #check reference
ds_selected %>% 
  tabyl(city_size, adhd_risk) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 city_size           no        yes
     small 95.0% (2471) 5.0% (129)
    medium 96.8% (3138) 3.2% (104)
       big 96.5% (1228) 3.5%  (44)
     Total 96.1% (6837) 3.9% (277)

4.3.3 Psychostimulant use

Age group

riskratio(ds_selected$age_group, ds_selected$psychostimulant, rev = "r") #check reference
$data
         Outcome
Predictor   no yes Total
    3      566   9   575
    2     2239  52  2291
    1     4157  74  4231
    Total 6962 135  7097

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
        3 1.000000        NA       NA
        2 1.450119 0.7189038 2.925071
        1 1.117414 0.5624866 2.219810

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
        3         NA           NA         NA
        2  0.2998557    0.3361292  0.2953127
        1  0.7828656    0.8654783  0.7509478

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(age_group, psychostimulant) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 age_group           no        yes       NA_
         1 98.1% (4157) 1.7%  (74) 0.2%  (8)
         2 97.4% (2239) 2.3%  (52) 0.3%  (8)
         3 98.3%  (566) 1.6%   (9) 0.2%  (1)
     Total 97.9% (6962) 1.9% (135) 0.2% (17)

sex

riskratio(ds_selected$sex_male, ds_selected$psychostimulant) #check reference
$data
         Outcome
Predictor   no yes Total
   female 3515  41  3556
   male   3447  94  3541
   Total  6962 135  7097

$measure
         risk ratio with 95% C.I.
Predictor estimate    lower   upper
   female 1.000000       NA      NA
   male   2.302395 1.600135 3.31286

$p.value
         two-sided
Predictor   midp.exact fisher.exact   chi.square
   female           NA           NA           NA
   male   3.009571e-06 3.251082e-06 3.650795e-06

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(sex_male, psychostimulant) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 sex_male           no        yes       NA_
   female 98.7% (3515) 1.2%  (41) 0.2%  (6)
     male 97.0% (3447) 2.6%  (94) 0.3% (11)
    Total 97.9% (6962) 1.9% (135) 0.2% (17)

income

riskratio(ds_selected$economic_status, ds_selected$psychostimulant, rev = "r") #check reference
$data
         Outcome
Predictor   no yes Total
    DE     955  11   966
    C     3436  65  3501
    AB    2571  59  2630
    Total 6962 135  7097

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
       DE 1.000000        NA       NA
       C  1.630443 0.8640134 3.076741
       AB 1.970066 1.0393727 3.734136

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
       DE         NA           NA         NA
       C  0.12053424   0.15884492 0.12665034
       AB 0.02820677   0.04000511 0.03356871

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(economic_status, psychostimulant) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 economic_status           no        yes       NA_
              AB 97.6% (2571) 2.2%  (59) 0.2%  (5)
               C 97.8% (3436) 1.9%  (65) 0.3% (12)
              DE 98.9%  (955) 1.1%  (11) 0.0%  (0)
           Total 97.9% (6962) 1.9% (135) 0.2% (17)

City size

riskratio(ds_selected$city_size, ds_selected$psychostimulant, rev = "r") #check reference
$data
         Outcome
Predictor   no yes Total
   big    1257  15  1272
   medium 3167  75  3242
   small  2538  45  2583
   Total  6962 135  7097

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
   big    1.000000        NA       NA
   medium 1.961752 1.1312034 3.402103
   small  1.477352 0.8267709 2.639871

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
   big            NA           NA         NA
   medium 0.01108165   0.01280013 0.01419559
   small  0.18407298   0.21371351 0.18429815

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(city_size, psychostimulant) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 city_size           no        yes       NA_
     small 97.6% (2538) 1.7%  (45) 0.7% (17)
    medium 97.7% (3167) 2.3%  (75) 0.0%  (0)
       big 98.8% (1257) 1.2%  (15) 0.0%  (0)
     Total 97.9% (6962) 1.9% (135) 0.2% (17)

Cor da pele (que analise estupida..)

riskratio(ds$cor_1_branca_2_nao_branca_3_nao_informou, ds_selected$psychostimulant, rev = "r") #check reference
Warning in chisq.test(xx, correct = correction) :
  Chi-squared approximation may be incorrect
$data
         Outcome
Predictor   no yes Total
    3      273   5   278
    2     2189  36  2225
    1     4500  94  4594
    Total 6962 135  7097

$measure
         risk ratio with 95% C.I.
Predictor  estimate     lower    upper
        3 1.0000000        NA       NA
        2 0.8995955 0.3559811 2.273357
        1 1.1376578 0.4665557 2.774085

$p.value
         two-sided
Predictor midp.exact fisher.exact chi.square
        3         NA           NA         NA
        2  0.7854924    0.8009775  0.8230331
        1  0.8243120    1.0000000  0.7763272

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds %>% 
  tabyl(cor_1_branca_2_nao_branca_3_nao_informou, uso_atual_de_psicoestimulante_0_nao_1_sim_2_nao_informado) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 cor_1_branca_2_nao_branca_3_nao_informou            0          1         2
                                        1 97.6% (4500) 2.0%  (94) 0.3% (15)
                                        2 98.3% (2189) 1.6%  (36) 0.1%  (2)
                                        3 98.2%  (273) 1.8%   (5) 0.0%  (0)
                                    Total 97.9% (6962) 1.9% (135) 0.2% (17)

Tipo de escola

riskratio(ds_selected$public_School, ds_selected$psychostimulant) #check reference
ds_selected %>% 
  tabyl(public_School, psychostimulant) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 public_School           no        yes       NA_
        public 97.8% (5862) 1.9% (114) 0.3% (17)
       private 98.1% (1100) 1.9%  (21) 0.0%  (0)
         Total 97.9% (6962) 1.9% (135) 0.2% (17)

Regiao

riskratio(relevel(ds_selected$region, ref = "NE"), ds_selected$psychostimulant) #check reference
Warning in chisq.test(xx, correct = correction) :
  Chi-squared approximation may be incorrect
$data
         Outcome
Predictor   no yes Total
    NE     869   3   872
    CO     619   9   628
    NO     248   2   250
    SE    2290  45  2335
    SU    2936  76  3012
    Total 6962 135  7097

$measure
         risk ratio with 95% C.I.
Predictor estimate     lower    upper
       NE 1.000000        NA       NA
       CO 4.165605 1.1323007 15.32479
       NO 2.325333 0.3907071 13.83946
       SE 5.601713 1.7453711 17.97852
       SU 7.334219 2.3194080 23.19159

$p.value
         two-sided
Predictor   midp.exact fisher.exact   chi.square
       NE           NA           NA           NA
       CO 2.494347e-02 3.494130e-02 1.949677e-02
       NO 3.864003e-01 3.099012e-01 3.399785e-01
       SE 2.801815e-04 4.408481e-04 1.018602e-03
       SU 3.980458e-06 7.180548e-06 5.957003e-05

$correction
[1] FALSE

attr(,"method")
[1] "Unconditional MLE & normal approximation (Wald) CI"
ds_selected %>% 
  tabyl(region, psychostimulant) %>% 
   adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 region           no        yes       NA_
     CO 98.6%  (619) 1.4%   (9) 0.0%  (0)
     NE 99.7%  (869) 0.3%   (3) 0.0%  (0)
     NO 99.2%  (248) 0.8%   (2) 0.0%  (0)
     SE 97.7% (2290) 1.9%  (45) 0.4% (10)
     SU 97.3% (2936) 2.5%  (76) 0.2%  (7)
  Total 97.9% (6962) 1.9% (135) 0.2% (17)

4.4 Table 3

Row = ADHD Report

ds_selected %>% 
  tabyl(adhd_parent, adhd_risk) %>% 
  adorn_totals(where = c("row","col")) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 adhd_parent           no         yes         Total
          no 97.5% (6446)  2.5% (163) 100.0% (6609)
         yes 77.4%  (391) 22.6% (114) 100.0%  (505)
       Total 96.1% (6837)  3.9% (277) 100.0% (7114)
114/(114+391)
[1] 0.2257426
ds_selected %>% 
  tabyl(adhd_parent, psychostimulant) %>% 
  adorn_totals(where = c("row","col")) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 adhd_parent           no         yes       NA_         Total
          no 99.2% (6553)  0.8%  (56) 0.0%  (0) 100.0% (6609)
         yes 81.0%  (409) 15.6%  (79) 3.4% (17) 100.0%  (505)
       Total 97.9% (6962)  1.9% (135) 0.2% (17) 100.0% (7114)

Row = ADHD Probable

ds_selected %>% 
  tabyl(adhd_risk, adhd_parent) %>% 
  adorn_totals(where = c("row","col")) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 adhd_risk           no         yes         Total
        no 94.3% (6446)  5.7% (391) 100.0% (6837)
       yes 58.8%  (163) 41.2% (114) 100.0%  (277)
     Total 92.9% (6609)  7.1% (505) 100.0% (7114)
ds_selected %>% 
  tabyl(adhd_risk, psychostimulant) %>% 
  adorn_totals(where = c("row","col")) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 adhd_risk           no         yes       NA_         Total
        no 98.3% (6724)  1.4%  (99) 0.2% (14) 100.0% (6837)
       yes 85.9%  (238) 13.0%  (36) 1.1%  (3) 100.0%  (277)
     Total 97.9% (6962)  1.9% (135) 0.2% (17) 100.0% (7114)
ds_selected %>% 
  tabyl(adhd_risk, psychostimulant) %>% 
  adorn_percentages() %>% 
  adorn_ns(.)

Row = Psychostimulant

ds_selected %>% 
  tabyl(psychostimulant, adhd_parent) %>% 
  adorn_totals(where = c("row","col")) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 psychostimulant           no          yes         Total
              no 94.1% (6553)   5.9% (409) 100.0% (6962)
             yes 41.5%   (56)  58.5%  (79) 100.0%  (135)
            <NA>  0.0%    (0) 100.0%  (17) 100.0%   (17)
           Total 92.9% (6609)   7.1% (505) 100.0% (7114)
ds_selected %>% 
  tabyl(psychostimulant, adhd_risk) %>% 
  adorn_totals(where = c("row","col")) %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 1) %>%
  adorn_ns
 psychostimulant           no         yes         Total
              no 96.6% (6724)  3.4% (238) 100.0% (6962)
             yes 73.3%   (99) 26.7%  (36) 100.0%  (135)
            <NA> 82.4%   (14) 17.6%   (3) 100.0%   (17)
           Total 96.1% (6837)  3.9% (277) 100.0% (7114)

4.5 Agreement

ds_selected %>% 
  tabyl(adhd_parent, adhd_risk) %>% 
  adorn_percentages("row") %>%
  adorn_pct_formatting(digits = 2) %>%
  adorn_ns()
CrossTable(ds_selected$adhd_parent, ds_selected$adhd_risk,
         prop.r = F,  #row proportions
         prop.c = F, #column proportion
         total.r = F, #new column with totals
         total.c = F, 
         prop.t = F,
         expected = F,
         mcnemar = T) #Data is pareid. shoudl be mcnemar
   Cell Contents 
|-------------------------|
|                       N | 
| Chi-square contribution | 
|-------------------------|

===========================================
                           ds_selected$adhd_risk
ds_selected$adhd_parent        no       yes
-------------------------------------------
no                           6446       163
                            1.401    34.583
-------------------------------------------
yes                           391       114
                           18.337   452.589
===========================================

 
McNemar's Chi-squared test 
------------------------------------------------------------
Chi^2 = 93.83394      d.f. = 1      p <2e-16 

McNemar's Chi-squared test with continuity correction 
------------------------------------------------------------
Chi^2 = 93.01264      d.f. = 1      p <2e-16 

4.6 Table 4

#select specitic dataset
ds_model_adhd <- ds_selected %>% 
  dplyr::select(-id, -psychostimulant, -adhd_risk, -age_group) %>% 
  mutate(married = relevel(married, ref = "married"))
mod_adhd_complete <- glm(adhd_parent ~ ., family = binomial(link = "logit"), ds_model_adhd)
epiDisplay::logistic.display(mod_adhd_complete) %>% 
  knitr::kable() %>% 
  kableExtra::kable_styling(., latex_options = "striped", full_width = T)
Warning in kableExtra::kable_styling(., latex_options = "striped", full_width = T) :
  Please specify format in kable. kableExtra can customize either HTML or LaTeX outputs. See https://haozhu233.github.io/kableExtra/ for details.
x
Logistic regression predicting adhd_parent : yes vs no
crude OR(95%CI) adj. OR(95%CI) P(Wald’s test) P(LR-test)
public_School: private vs public 1.14 (0.88,1.47) 1.73 (1.24,2.39) 0.001 0.001
city_size: ref.=small 0.059
medium 1.04 (0.84,1.29) 1.16 (0.9,1.49) 0.258
big 0.83 (0.61,1.12) 0.78 (0.56,1.08) 0.138
region: ref.=CO 0.041
NE 0.85 (0.52,1.39) 0.94 (0.55,1.62) 0.821
NO 1.08 (0.55,2.1) 0.83 (0.41,1.68) 0.611
SE 1.36 (0.92,2.03) 1.54 (0.96,2.47) 0.072
SU 1.32 (0.89,1.95) 1.53 (0.97,2.43) 0.069
age (cont. var.) 0.9919 (0.9542,1.031) 0.9948 (0.9532,1.0382) 0.812 0.811
sex_male: male vs female 1.9 (1.54,2.33) 1.71 (1.38,2.11) < 0.001 < 0.001
race_white: white vs other 0.9 (0.73,1.11) 0.88 (0.7,1.11) 0.275 0.277
married: divorced vs married 1.6 (1.3,1.97) 1.47 (1.18,1.84) < 0.001 < 0.001
schooling: ref.=illiteracy 0.389
primary 1.18 (0.65,2.14) 1.43 (0.76,2.68) 0.27
high_or_above 1.2 (0.66,2.19) 1.55 (0.8,3) 0.192
economic_status: ref.=AB 0.034
C 1.02 (0.82,1.25) 0.88 (0.69,1.13) 0.326
DE 0.75 (0.53,1.08) 0.57 (0.37,0.88) 0.012
smoking: yes vs no 1.66 (1.28,2.16) 1.29 (0.95,1.74) 0.103 0.108
alcohol: yes vs no 1.64 (1.17,2.29) 1.24 (0.85,1.82) 0.267 0.274
scholar_achievement: ref.=average < 0.001
above 0.51 (0.37,0.7) 0.55 (0.4,0.77) < 0.001
below 2.76 (2.21,3.44) 3.1 (2.44,3.94) < 0.001
snap_parents_only: yes vs no 3.61 (2.84,4.6) 3.45 (2.65,4.48) < 0.001 < 0.001
snap_teachers_only: yes vs no 1.29 (0.97,1.71) 0.77 (0.56,1.05) 0.104 0.098
x
Log-likelihood = -1361.0522

No. of observations = 5954 AIC value = 2766.1044 |

Second output

 ds_selected %>% 
  select(-id, -psychostimulant, -age_group, -adhd_parent, -snap_parents_only , -snap_teachers_only)
Error in select(., -id, -psychostimulant, -age_group, -adhd_parent, -snap_parents_only,  : 
  unused arguments (-id, -psychostimulant, -age_group, -adhd_parent, -snap_parents_only, -snap_teachers_only)
epiDisplay::logistic.display(mod_adhd_risk_complete)

Logistic regression predicting adhd_risk : yes vs no 
 
                                  crude OR(95%CI)     adj. OR(95%CI)      P(Wald's test) P(LR-test)
public_School: private vs public  0.51 (0.32,0.8)     1.05 (0.62,1.78)    0.861          0.862     
                                                                                                   
city_size: ref.=small                                                                    0.168     
   medium                         0.64 (0.48,0.86)    0.75 (0.53,1.05)    0.095                    
   big                            0.75 (0.51,1.09)    0.74 (0.49,1.13)    0.163                    
                                                                                                   
region: ref.=CO                                                                          0.099     
   NE                             2.05 (0.91,4.65)    1.41 (0.59,3.41)    0.44                     
   NO                             0.96 (0.25,3.64)    0.76 (0.19,3.02)    0.701                    
   SE                             3.39 (1.64,7.01)    2.02 (0.9,4.55)     0.088                    
   SU                             2.66 (1.29,5.5)     2.18 (0.98,4.85)    0.057                    
                                                                                                   
age (cont. var.)                  0.96 (0.91,1.01)    0.94 (0.89,1)       0.046          0.043     
                                                                                                   
sex_male: male vs female          2.84 (2.11,3.82)    2.32 (1.7,3.17)     < 0.001        < 0.001   
                                                                                                   
race_white: white vs other        0.75 (0.57,0.98)    0.89 (0.66,1.21)    0.467          0.468     
                                                                                                   
married: divorced vs married      2.07 (1.58,2.7)     1.65 (1.23,2.21)    < 0.001        0.001     
                                                                                                   
schooling: ref.=illiteracy                                                               0.339     
   primary                        0.5 (0.29,0.86)     0.83 (0.46,1.49)    0.531                    
   high_or_above                  0.36 (0.2,0.62)     1.06 (0.56,2.03)    0.854                    
                                                                                                   
economic_status: ref.=AB                                                                 0.183     
   C                              1.83 (1.34,2.52)    1.38 (0.95,2)       0.091                    
   DE                             2.6 (1.74,3.91)     1.53 (0.91,2.59)    0.109                    
                                                                                                   
smoking: yes vs no                1.98 (1.42,2.75)    1.1 (0.75,1.63)     0.62           0.622     
                                                                                                   
alcohol: yes vs no                2.25 (1.51,3.35)    1.62 (1.01,2.58)    0.045          0.052     
                                                                                                   
scholar_achievement: ref.=average                                                        < 0.001   
   above                          0.85 (0.43,1.67)    0.88 (0.45,1.75)    0.722                    
   below                          15.28 (9.69,24.08)  13.74 (8.67,21.78)  < 0.001                  
                                                                                                   
Log-likelihood = -758.8407
No. of observations = 5954
AIC value = 1557.6813
epiDisplay::logistic.display(mod_psychostimulant_complete)

Logistic regression predicting psychostimulant : yes vs no 
 
                                  crude OR(95%CI)   adj. OR(95%CI)    P(Wald's test) P(LR-test)
public_School: private vs public  1.02 (0.62,1.67)  1.97 (1.05,3.68)  0.034          0.04      
                                                                                               
city_size: ref.=small                                                                0.07      
   medium                         1.48 (0.98,2.23)  1.63 (1.02,2.6)   0.041                    
   big                            0.81 (0.44,1.51)  0.93 (0.48,1.79)  0.825                    
                                                                                               
region: ref.=CO                                                                      < 0.001   
   NE                             0.27 (0.07,1.03)  0.38 (0.1,1.52)   0.173                    
   NO                             0.63 (0.13,3.01)  0.53 (0.11,2.57)  0.43                     
   SE                             1.18 (0.54,2.55)  1.72 (0.7,4.21)   0.234                    
   SU                             1.8 (0.86,3.77)   2.57 (1.1,6.02)   0.029                    
                                                                                               
age (cont. var.)                  1 (0.94,1.08)     1.03 (0.95,1.11)  0.455          0.458     
                                                                                               
sex_male: male vs female          2.21 (1.49,3.3)   1.96 (1.31,2.94)  0.001          < 0.001   
                                                                                               
race_white: white vs other        1.35 (0.89,2.05)  1.18 (0.75,1.85)  0.471          0.467     
                                                                                               
married: divorced vs married      1.5 (1.02,2.2)    1.68 (1.12,2.53)  0.013          0.015     
                                                                                               
schooling: ref.=illiteracy                                                           0.578     
   primary                        0.99 (0.36,2.75)  0.93 (0.32,2.67)  0.888                    
   high_or_above                  0.89 (0.32,2.5)   0.73 (0.24,2.24)  0.583                    
                                                                                               
economic_status: ref.=AB                                                             0.068     
   C                              0.76 (0.52,1.12)  0.62 (0.4,0.98)   0.04                     
   DE                             0.55 (0.27,1.11)  0.46 (0.2,1.05)   0.064                    
                                                                                               
smoking: yes vs no                1.03 (0.59,1.81)  0.99 (0.54,1.81)  0.97           0.97      
                                                                                               
alcohol: yes vs no                0.51 (0.19,1.4)   0.43 (0.15,1.22)  0.112          0.076     
                                                                                               
scholar_achievement: ref.=average                                                    < 0.001   
   above                          0.63 (0.34,1.18)  0.62 (0.33,1.17)  0.142                    
   below                          3.56 (2.31,5.48)  3.95 (2.5,6.24)   < 0.001                  
                                                                                               
snap_parents_only: yes vs no      2.1 (1.29,3.43)   1.85 (1.1,3.1)    0.02           0.027     
                                                                                               
snap_teachers_only: yes vs no     1.34 (0.79,2.25)  0.66 (0.38,1.16)  0.152          0.139     
                                                                                               
Log-likelihood = -503.7951
No. of observations = 5938
AIC value = 1051.5903

4.7 Reviewer ask = Influence of age

Overall (N=7114)
age
   Mean (SD) 9.273 (2.564)
   Range 5.000 - 18.000
arsenal::tableby(~age, data = ds_selected) %>% summary()
glm(ds_selected$adhd_parent ~ ds_selected$age, family = binomial) %>% summary()

Call:
glm(formula = ds_selected$adhd_parent ~ ds_selected$age, family = binomial)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.3938  -0.3846  -0.3834  -0.3811   2.3108  

Coefficients:
                 Estimate Std. Error z value Pr(>|z|)    
(Intercept)     -2.628758   0.172938 -15.201   <2e-16 ***
ds_selected$age  0.006149   0.017905   0.343    0.731    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 3645.0  on 7113  degrees of freedom
Residual deviance: 3644.9  on 7112  degrees of freedom
AIC: 3648.9

Number of Fisher Scoring iterations: 5
glm(ds_selected$adhd_risk ~ ds_selected$age, family = binomial) %>% summary()

Call:
glm(formula = ds_selected$adhd_risk ~ ds_selected$age, family = binomial)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.3089  -0.2955  -0.2827  -0.2704   2.6630  

Coefficients:
                Estimate Std. Error z value Pr(>|z|)    
(Intercept)     -2.79248    0.23383 -11.942   <2e-16 ***
ds_selected$age -0.04525    0.02504  -1.807   0.0708 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2341.2  on 7113  degrees of freedom
Residual deviance: 2337.9  on 7112  degrees of freedom
AIC: 2341.9

Number of Fisher Scoring iterations: 6
glm(ds_selected$psychostimulant ~ ds_selected$age, family = binomial) %>% summary()

Call:
glm(formula = ds_selected$psychostimulant ~ ds_selected$age, 
    family = binomial)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.2099  -0.1986  -0.1955  -0.1924   2.8390  

Coefficients:
                Estimate Std. Error z value Pr(>|z|)    
(Intercept)     -4.09172    0.32428 -12.618   <2e-16 ***
ds_selected$age  0.01596    0.03332   0.479    0.632    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1337.2  on 7096  degrees of freedom
Residual deviance: 1337.0  on 7095  degrees of freedom
  (17 observations deleted due to missingness)
AIC: 1341

Number of Fisher Scoring iterations: 6

! done
If you use this markdown, please cite it.
Contact me at
Done on January 4, 2022.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2sgLSBEYXRhIEFuYWx5c2lzIChBREhEIHBhcGVyIDIwMjIpIg0KYXV0aG9yOiAiTHVpcyBBbnVuY2lhw6fDo28iDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IHVuaXRlZA0KICAgIGhpZ2hsaWdodDogdGV4dG1hdGUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQ0KLS0tDQoNCjxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPg0KKipOb3RlKio6IFRoaXMgaXMgdGhlIFIgbWFya2Rvd24gb2YgdGhlIG1hbnVzY3JpcHQgIkFzc29jaWF0ZWQgRmFjdG9ycyBvZiBBdHRlbnRpb24tRGVmaWNpdC9IeXBlcmFjdGl2aXR5IERpc29yZGVyIERpYWdub3Npcw0KYW5kIFBzeWNob3N0aW11bGFudCBVc2U6IEEgTmF0aW9ud2lkZSBSZXByZXNlbnRhdGl2ZSBTdHVkeSIuIENsaWNrIHJ1biB0byByZXByb2R1Y2UgYWxsIGFuYWx5emVzLg0KDQpJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHF1ZXJpZXMsIHBsZWFzZSByZWFjaCBtZSBvdXQgYXQgbHVpc2ZjYUBwdWMtcmlvLmJyDQoNCmxhc3QgdXBkYXRlZDogYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWANCjwvZGl2Pg0KDQojIEdldCBSIGZpbGUNCg0KYGBge3J9DQojZ2V0IGZpbGUNCmxvYWQodXJsKCJodHRwczovL29zZi5pby91aGF2cC9kb3dubG9hZCIpKQ0KYGBgDQoNCiMgUGFja2FnZXMNCg0KYGBge3J9DQpwYWNtYW46OnBfbG9hZCh0aWR5dmVyc2UsIGphbml0b3IsIGFyc2VuYWwpDQpgYGANCg0KDQojIFBzeWNob21ldHJpYyBhbmFseXNpcyBvZiB0aGUgU05BUA0KDQojIyBQYXJlbnRzDQoNCmBgYHtyfQ0KZHMgJT4lIHNlbGVjdChjb250YWlucygic25hcHBfIikpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGV2ZXJ5dGhpbmcoKSkgJT4lIA0KICBjb3VudCh2YWx1ZSkgJT4lIA0KICBtdXRhdGUocGVyY2VudCA9ICgxMDAgKiBuIC8gc3VtKG4pKSAlPiUgcm91bmQoZGlnaXRzID0gMSkpDQpgYGANCg0KDQoNCmBgYHtyfQ0KZHMgJT4lIHNlbGVjdChjb250YWlucygic25hcHBfIikpICU+JSANCiAgYWxwaGEoLikNCmBgYA0KDQoNCmBgYHtyfQ0KZHMgJT4lIHNlbGVjdChjb250YWlucygic25hcHBfIikpICU+JSANCiBzcGxpdEhhbGYoKQ0KYGBgDQoNCg0KIyMgVGVhY2hlcnMNCg0KDQpgYGB7cn0NCmRzICU+JSBzZWxlY3QoY29udGFpbnMoInNuYXBwcm9fIikpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGV2ZXJ5dGhpbmcoKSkgJT4lIA0KICBjb3VudCh2YWx1ZSkgJT4lIA0KICBtdXRhdGUocGVyY2VudCA9ICgxMDAgKiBuIC8gc3VtKG4pKSAlPiUgcm91bmQoZGlnaXRzID0gMSkpDQpgYGANCg0KDQpgYGB7cn0NCmRzICU+JSBzZWxlY3QoY29udGFpbnMoInNuYXBwcm9fIikpICU+JSANCiAgYWxwaGEoLikNCmBgYA0KDQoNCmBgYHtyfQ0KZHMgJT4lIHNlbGVjdChjb250YWlucygic25hcHByb18iKSkgJT4lIA0KIHNwbGl0SGFsZigpDQpgYGANCiMjIENvcnJlbGF0aW9uDQoNCmBgYHtyfQ0KY29yKGRzX3NlbGVjdGVkJHNuYXBwX3RvdGFsLCBkc19zZWxlY3RlZCRzbmFwcHJvZl90b3RhbCkNCmBgYA0KDQoNCiMgUmVzZWFyY2ggcXVlc3Rpb25zDQoNCiMjIFRhYmxlIDENCg0KYGBge3J9DQp0YWJsZWJ5KH5hZ2VfZ3JvdXAgKyBzZXhfbWFsZSArIHJhY2Vfd2hpdGUgKyBlY29ub21pY19zdGF0dXMgKyBwdWJsaWNfU2Nob29sICsgcmVnaW9uICsgY2l0eV9zaXplLCBkYXRhID0gZHNfc2VsZWN0ZWQpICU+JSBzdW1tYXJ5KCkNCmBgYA0KDQoNCiMjIFRleHR1YWwgbWFya2Vycw0KDQpUaGUgcHJldmFsZW5jZSBvZiBBREhELXJlcG9ydCB3YXMgNy4xJS4gDQoNCmBgYHtyLCBldmFsPUZBTFNFIH0NCmRzX3NlbGVjdGVkICU+JSAjPC0tIGRhdGFzZXQgd2l0aCBwcmVkaWN0b3JzDQogIGNvdW50KGFkaGRfcGFyZW50KSAlPiUgDQogIG11dGF0ZShwcm9wID0gcHJvcC50YWJsZShuKSkgJT4lIA0KICAgYWRvcm5fdG90YWxzKCkNCmBgYA0KVGhlIHByZXZhbGVuY2Ugd2FzIGhpZ2hlciBpbiBib3lzIHRoYW4gaW4gZ2lybHMgKHJlbGF0aXZlIHJpc2sgW1JSXSA9IDEuNzYsIDk1JSBjb25maWRlbmNlIGludGVydmFsIFtDSV0gPSAxLjQ4LTIuMTApICANCg0KDQpgYGB7cn0NCnJpc2tyYXRpbyhkc19zZWxlY3RlZCRzZXhfbWFsZSxkc19zZWxlY3RlZCRhZGhkX3BhcmVudCkNCmBgYA0KDQphbmQgaGlnaGVyIGluIGNoaWxkcmVuIGZyb20gdXBwZXIgdXBwZXItaW5jb21lIGNsYXNzZXMgQSBhbmQgQiBjb21wYXJlZCB3aXRodGhhbiBpbiBjaGlsZHJlZCBmcm9tIGxvd2VyIGxvd2VyLWluY29tZSBjbGFzc2VzIEQgYW5kIEUgKFJSID0gMS40MCwgOTUlIENJID0gMS4wNDUtMS44OCkuDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKGRzX3NlbGVjdGVkJGVjb25vbWljX3N0YXR1cyxkc19zZWxlY3RlZCRhZGhkX3BhcmVudCwgcmV2ID0gInIiKQ0KYGBgDQoNClRoZSBwcmV2YWxlbmNlIHdhcyBoaWdoZXIgaW4gY2hpbGRyZW4gd2hvIGxpdmVkIGluIHRoZSBzb3V0aGVybiByZWdpb24gb2YgdGhlIGNvdW50cnkgY29tcGFyZWQgd2l0aHRoYW4gaW4gY2hpbGRyZW4gd2hvIGxpdmVkIGluIHRoZSBub3J0aGVhc3QgcmVnaW9uIChSUiA9IDEuNTksIDk1JSBDSSA9IDEuMTYtMi4xNykuDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKGZhY3Rvcihkc19zZWxlY3RlZCRyZWdpb24sIGxldmVscz1jKCJORSIsIlNVIiwiQ08iLCJOTyIsIlNFIikpLGRzX3NlbGVjdGVkJGFkaGRfcGFyZW50KQ0KIygxOTIvMjM0NSkvKDQ1Lzg3MikNCmBgYA0KDQpUaGUgcHJldmFsZW5jZSBvZiBBREhELXByb2JhYmxlIHdhcyAzLjklDQoNCmBgYHtyLCBldmFsPUZBTFNFIH0NCmRzX3NlbGVjdGVkICU+JSAjPC0tIGRhdGFzZXQgd2l0aCBwcmVkaWN0b3JzDQogIGNvdW50KGFkaGRfcmlzaykgJT4lIA0KICBtdXRhdGUocHJvcCA9IHByb3AudGFibGUobikpICU+JSANCiAgIGFkb3JuX3RvdGFscygpDQpgYGANCg0Kd2hpY2ggd2FzIGhpZ2hlciBpbiB5b3VuZ2VyIGNoaWxkcmVuIGFuZCBib3lzIChSUiA9IDIuOTcsIDk1JSBDSSA9IDIuMjctMy44NykNCg0KYGBge3J9DQpyaXNrcmF0aW8oZHNfc2VsZWN0ZWQkc2V4X21hbGUsZHNfc2VsZWN0ZWQkYWRoZF9yaXNrKQ0KYGBgDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKHJlbGV2ZWwoZHNfc2VsZWN0ZWQkcmFjZV93aGl0ZSwgcmVmID0gIndoaXRlIiksZHNfc2VsZWN0ZWQkYWRoZF9yaXNrKQ0KYGBgDQoNCg0KVGhlIHByZXZhbGVuY2Ugb2YgQURIRC1wcm9iYWJsZSB3YXMgMy45JSwgd2hpY2ggd2FzIGhpZ2hlciBpbiB5b3VuZ2VyIGNoaWxkcmVuIGFuZCBib3lzIChSUiA9IDIuOTcsIDk1JSBDSSA9IDIuMjctMy44NykNCg0KYGBge3J9DQpyaXNrcmF0aW8oZHNfc2VsZWN0ZWQkc2V4X21hbGUsZHNfc2VsZWN0ZWQkYWRoZF9yaXNrKQ0KYGBgDQoNClRoZSBwcmV2YWxlbmNlIG9mIEFESEQtcHN0IHdhcyAxLjklDQoNCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgI2VudGlyZSBzYW1wbGUgdG8gY2hlY2sgdXNlIG9mIHBzeWNob3Ryb3BpY3MNCiAgZHJvcF9uYSgpICU+JQ0KICBjb3VudChwc3ljaG9zdGltdWxhbnQpICU+JSANCiAgbXV0YXRlKHByb3AgPSBwcm9wLnRhYmxlKG4pKSAlPiUgDQogYWRvcm5fdG90YWxzKCkNCmBgYA0KDQpUaGUgY2hpLXNxdWFyZSB0ZXN0IHdhcyBjYXJyaWVkIG91dCB0byBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gQURIRCBhbmQgU29jaW9lY29ub21pYyBzdGF0dXMuIFdlIGNvdWxkIGNvbmNsdWRlIHRoYXQgdGhlcmUncyBubyBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSB0d28gdmFyaWFibGVzIChYMigyKSA9IDQuNTYsIHAgPSAwLjEpLg0KDQpgYGB7ciwgZXZhbCA9IFRSVUUgfQ0KI2NsYXNzZSBzb2NpYWwgZSBUREFIDQpDcm9zc1RhYmxlKGRzX3NlbGVjdGVkJGFkaGRfcGFyZW50LA0KICAgICAgICAgZHNfc2VsZWN0ZWQkZWNvbm9taWNfc3RhdHVzLA0KICAgICAgICAgcHJvcC5yID0gVCwgICNyb3cgcHJvcG9ydGlvbnMNCiAgICAgICAgIHByb3AuYyA9IEYsICNjb2x1bW4gcHJvcG9ydGlvbg0KICAgICAgICAgdG90YWwuciA9IFQsICNuZXcgY29sdW1uIHdpdGggdG90YWxzDQogICAgICAgICB0b3RhbC5jID0gRiwgDQogICAgICAgICBwcm9wLnQgPSBGLA0KICAgICAgICAgZXhwZWN0ZWQgPSBULA0KICAgICAgICAgY2hpc3EgPSBUKSAjY2hpIHNxdWFyZSB2YWx1ZQ0KYGBgDQoNCg0KDQpUaGUgcHJldmFsZW5jZSB3YXMgYWxzbyBoaWdoZXIgaW4gY2hpbGRyZW4gd2hvIGxpdmVkIGluIHRoZSBzb3V0aGVhc3QgcmVnaW9uIChSUiA9IDQuMzcsIDk1JSBDSSA9IDEuNDAtMTMuNjQpIGFuZCB0aGUgc291dGggcmVnaW9uIChSUiA9IDMuMjIsIDk1JSBDSSA9IDEuMDMtMTAuMDgpIGNvbXBhcmVkIHdpdGh0aGFuIGluIGNoaWxkcmVuIHdobyBsaXZlZCBpbiB0aGUgbm9ydGggcmVnaW9uIA0KDQpgYGB7cn0NCnJpc2tyYXRpbyhmYWN0b3IoZHNfc2VsZWN0ZWQkcmVnaW9uLCBsZXZlbHM9YygiTk8iLCJTVSIsIkNPIiwiTkUiLCJTRSIpKSxkc19zZWxlY3RlZCRhZGhkX3Jpc2spDQpgYGANCiANCiANCg0KIyMgVGFibGUgMg0KDQojIyMgQURIRCByZXBvcnQNCg0KYGBge3IgcHJldmFsZW5jZSBvZiBBREhEIHJlcG9ydCB9DQpkc19zZWxlY3RlZCAlPiUgDQogIGNvdW50KGFkaGRfcGFyZW50KSAlPiUgDQogIG11dGF0ZShwcm9wPXByb3AudGFibGUobikqMTAwKQ0KYGBgDQoNCg0KQWdlIGdyb3VwDQoNCmBgYHtyIHJlbGF0aXZlIHJpc2sgYWdlIGdyb3VwIH0NCnJpc2tyYXRpbyhkc19zZWxlY3RlZCRhZ2VfZ3JvdXAsZHNfc2VsZWN0ZWQkYWRoZF9wYXJlbnQsIHJldiA9ICJyb3ciKSAjb2xkZXIgY2hpbGRyZW4gYXJlIHJlZmVyZW5jZXMNCmBgYA0KDQoNClNleCANCg0KYGBge3IgcmVsYXRpdmUgcmlzayBzZXggfQ0Kcmlza3JhdGlvKGRzX3NlbGVjdGVkJHNleF9tYWxlLGRzX3NlbGVjdGVkJGFkaGRfcGFyZW50KSANCmBgYA0KDQoNCmBgYHtyIHByZXZhbGVuY2Ugb2YgQURIRCByZXBvcnQgYnkgc2V4IH0NCmRzX3NlbGVjdGVkICU+JSANCiAgdGFieWwoc2V4X21hbGUsYWRoZF9wYXJlbnQpICU+JSANCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JQ0KICBhZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAyKSAlPiUNCiAgYWRvcm5fbnMoKQ0KYGBgDQoNCg0KYGBge3IgY2hpLXNxdWFyZSBzZXggfQ0KZHNfc2VsZWN0ZWQgJT4lICNSZWxhdGl2ZSBSaXNrIGZvciBnZW5kZXINCiAge0Nyb3NzVGFibGUoLiRzZXhfbWFsZSwuJGFkaGRfcGFyZW50LA0KICAgICAgICAgICAgICBleHBlY3RlZCA9IFQsDQogICAgICAgICAgICAgIGNoaXNxID0gVCl9DQpgYGANCg0KDQpFY29ub21pYyBzdGF0dXMNCg0KYGBge3IgcmVsYXRpdmUgcmlzayBzb2Npb2Vjb25vbWljIHN0YXR1cyB9DQpyaXNrcmF0aW8oZHNfc2VsZWN0ZWQkZWNvbm9taWNfc3RhdHVzLGRzX3NlbGVjdGVkJGFkaGRfcGFyZW50LCByZXYgPSAiciIpICAjREUgYXJlIHJlZmVyZW5jZQ0KYGBgDQoNClJhY2UNCg0KYGBge3IgcmVsYXRpdmUgcmlzayBFdGhuaWNpdHl9DQpyaXNrcmF0aW8oZHNfc2VsZWN0ZWQkcmFjZV93aGl0ZSxkc19zZWxlY3RlZCRhZGhkX3BhcmVudCwgcmV2ID0gInIiKSAgI2NoYW5nZSByZWZlcmVuY2UNCnJpc2tyYXRpbyhkcyRjb3JfMV9icmFuY2FfMl9uYW9fYnJhbmNhXzNfbmFvX2luZm9ybW91LGRzJHBhcmVudF9yZXBvcnRlZF9hZGhkKSAgI2NoYW5nZSByZWZlcmVuY2UNCmBgYA0KDQpTY2hvb2wgdHlwZQ0KDQpgYGB7ciByZWxhdGl2ZSByaXNrIHNjaG9vbCB0eXBlIH0NCnJpc2tyYXRpbyhkc19zZWxlY3RlZCRwdWJsaWNfU2Nob29sLGRzX3NlbGVjdGVkJGFkaGRfcGFyZW50KSANCmBgYA0KDQpCcmF6aWxpYW4gcmVnaW9uDQoNCmBgYHtyIHJlbGF0aXZlIHJpc2sgcmVnaW9uIH0NCnJpc2tyYXRpbyhyZWxldmVsKGRzX3NlbGVjdGVkJHJlZ2lvbiwgcmVmID0gIk5FIiksZHNfc2VsZWN0ZWQkYWRoZF9wYXJlbnQpICNuZWVkIHRvIGNoYW5nZSB0aGUgcmVmZXJlbmNlDQpgYGANCg0KDQpgYGB7cn0NCmRzX3NlbGVjdGVkICU+JSANCiAgdGFieWwocmVnaW9uLCBhZGhkX3BhcmVudCkgJT4lIA0KICAgYWRvcm5fdG90YWxzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JQ0KICBhZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAxKSAlPiUNCiAgYWRvcm5fbnMNCmBgYA0KDQoNCg0KYGBge3IgcmVsYXRpdmUgcmlzayBjaXR5IH0NCnJpc2tyYXRpbyhkc19zZWxlY3RlZCRjaXR5X3NpemUsZHNfc2VsZWN0ZWQkYWRoZF9wYXJlbnQsIHJldiA9ICJyIikgDQpgYGANCg0KDQojIyMgQURIRCBQcm9iYWJsZQ0KDQoNClRvdGFscw0KYGBge3IgfQ0KZHNfc2VsZWN0ZWQgJT4lICM8LS0gZGF0YXNldCB3aXRoIHByZWRpY3RvcnMNCiAgY291bnQoYWRoZF9yaXNrKSAlPiUgDQogIG11dGF0ZShwcm9wID0gcHJvcC50YWJsZShuKSkgJT4lIA0KICAgYWRvcm5fdG90YWxzKCkNCmBgYA0KDQpBZ2UgZ3JvdXANCg0KYGBge3IgcmVsYXRpdmUgcmlzayBhZGhkIHByb2JhYmxlIGFnZSBncm91cCB9DQpyaXNrcmF0aW8oZHNfc2VsZWN0ZWQkYWdlX2dyb3VwLGRzX3NlbGVjdGVkJGFkaGRfcmlzaywgcmV2ID0gInIiKSANCmBgYA0KDQpgYGB7cn0NCmRzX3NlbGVjdGVkICU+JSANCiAgdGFieWwoYWdlX2dyb3VwLCBhZGhkX3Jpc2spICU+JSANCiAgIGFkb3JuX3RvdGFscygicm93IikgJT4lDQogIGFkb3JuX3BlcmNlbnRhZ2VzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcoZGlnaXRzID0gMSkgJT4lDQogIGFkb3JuX25zDQpgYGANCg0KDQpTZXgNCg0KYGBge3IgcmVsYXRpdmUgcmlzayBhZGhkIHByb2JhYmxlIGdlbmRlciB9DQpyaXNrcmF0aW8oZHNfc2VsZWN0ZWQkc2V4X21hbGUsZHNfc2VsZWN0ZWQkYWRoZF9yaXNrKSANCmBgYA0KDQpgYGB7cn0NCmRzX3NlbGVjdGVkICU+JSANCiAgdGFieWwoc2V4X21hbGUsIGFkaGRfcmlzaykgJT4lIA0KICAgYWRvcm5fdG90YWxzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JQ0KICBhZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAxKSAlPiUNCiAgYWRvcm5fbnMNCmBgYA0KDQoNClJhY2UvRXRobml0aWN5IA0KDQpgYGB7ciByZWxhdGl2ZSByaXNrIGFkaGQgcHJvYmFibGUgZXRobmljaXR5IH0NCnJpc2tyYXRpbyhkcyRjb3JfMV9icmFuY2FfMl9uYW9fYnJhbmNhXzNfbmFvX2luZm9ybW91LGRzJGFkaGRfcmlza19kc21fNV8wX25hb18xX3NpbSkgDQpgYGANCg0KYGBge3J9DQpkcyAlPiUgDQogIHRhYnlsKGNvcl8xX2JyYW5jYV8yX25hb19icmFuY2FfM19uYW9faW5mb3Jtb3UsIGFkaGRfcmlza19kc21fNV8wX25hb18xX3NpbSkgJT4lIA0KICAgYWRvcm5fdG90YWxzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JQ0KICBhZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAxKSAlPiUNCiAgYWRvcm5fbnMNCmBgYA0KDQoNCg0KYGBge3J9DQpyaXNrcmF0aW8oZHNfc2VsZWN0ZWQkcmFjZV93aGl0ZSxkc19zZWxlY3RlZCRhZGhkX3Jpc2ssIHJldiA9ICJyIikgDQpgYGANCg0KSW5jb21lIGNsYXNzDQoNCg0KYGBge3IgcmVsYXRpdmUgcmlzayBhZGhkIHByb2JhYmxlIGVjb25vbWljIH0NCnJpc2tyYXRpbyhkc19zZWxlY3RlZCRlY29ub21pY19zdGF0dXMsZHNfc2VsZWN0ZWQkYWRoZF9yaXNrKSANCmBgYA0KDQoNCmBgYHtyfQ0KZHNfc2VsZWN0ZWQgJT4lIA0KICB0YWJ5bChlY29ub21pY19zdGF0dXMsIGFkaGRfcmlzaykgJT4lIA0KICAgYWRvcm5fdG90YWxzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JQ0KICBhZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAxKSAlPiUNCiAgYWRvcm5fbnMNCmBgYA0KDQoNCg0KDQpCcmF6aWxpYW4gcmVnaW9uDQoNCg0KYGBge3IgcmVsYXRpdmUgcmlzayBhZGhkIHByb2JhYmxlIHJlZ2lvbiB9DQpyaXNrcmF0aW8ocmVsZXZlbChkc19zZWxlY3RlZCRyZWdpb24sIHJlZiA9ICJOTyIpLGRzX3NlbGVjdGVkJGFkaGRfcmlzaykgI2NoZWNrIHJlZmVyZW5jZQ0KYGBgDQoNCmBgYHtyfQ0KZHNfc2VsZWN0ZWQgJT4lIA0KICB0YWJ5bChyZWdpb24sIGFkaGRfcmlzaykgJT4lIA0KICAgYWRvcm5fdG90YWxzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JQ0KICBhZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAxKSAlPiUNCiAgYWRvcm5fbnMNCmBgYA0KDQpTY2hvb2wgdHlwZQ0KDQpgYGB7ciByZWxhdGl2ZSByaXNrIGFkaGQgcHJvYmFibGUgc2Nob29sIHR5cGUgfQ0Kcmlza3JhdGlvKGRzX3NlbGVjdGVkJHB1YmxpY19TY2hvb2wsZHNfc2VsZWN0ZWQkYWRoZF9yaXNrLCByZXYgPSAiciIpICNjaGVjayByZWZlcmVuY2UNCmBgYA0KDQoNCmBgYHtyfQ0KZHNfc2VsZWN0ZWQgJT4lIA0KICB0YWJ5bChwdWJsaWNfU2Nob29sLCBhZGhkX3Jpc2spICU+JSANCiAgIGFkb3JuX3RvdGFscygicm93IikgJT4lDQogIGFkb3JuX3BlcmNlbnRhZ2VzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcoZGlnaXRzID0gMSkgJT4lDQogIGFkb3JuX25zDQpgYGANCg0KDQpDaXR5IFNpemUNCg0KYGBge3IgcmVsYXRpdmUgcmlzayBhZGhkIGRlbnNpdHkgfQ0Kcmlza3JhdGlvKGRzX3NlbGVjdGVkJGNpdHlfc2l6ZSwgZHNfc2VsZWN0ZWQkYWRoZF9yaXNrLCByZXYgPSAiciIpICNjaGVjayByZWZlcmVuY2UNCmBgYA0KDQoNCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKGNpdHlfc2l6ZSwgYWRoZF9yaXNrKSAlPiUgDQogICBhZG9ybl90b3RhbHMoInJvdyIpICU+JQ0KICBhZG9ybl9wZXJjZW50YWdlcygicm93IikgJT4lDQogIGFkb3JuX3BjdF9mb3JtYXR0aW5nKGRpZ2l0cyA9IDEpICU+JQ0KICBhZG9ybl9ucw0KYGBgDQoNCg0KIyMjIFBzeWNob3N0aW11bGFudCB1c2UNCg0KDQpBZ2UgZ3JvdXANCmBgYHtyIHJlbGF0aXZlIHJpc2sgcHN5Y2hvc3QgYWdlX2dyb3VwIH0NCnJpc2tyYXRpbyhkc19zZWxlY3RlZCRhZ2VfZ3JvdXAsIGRzX3NlbGVjdGVkJHBzeWNob3N0aW11bGFudCwgcmV2ID0gInIiKSAjY2hlY2sgcmVmZXJlbmNlDQpgYGANCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKGFnZV9ncm91cCwgcHN5Y2hvc3RpbXVsYW50KSAlPiUgDQogICBhZG9ybl90b3RhbHMoInJvdyIpICU+JQ0KICBhZG9ybl9wZXJjZW50YWdlcygicm93IikgJT4lDQogIGFkb3JuX3BjdF9mb3JtYXR0aW5nKGRpZ2l0cyA9IDEpICU+JQ0KICBhZG9ybl9ucw0KYGBgDQoNCg0Kc2V4DQoNCmBgYHtyIHJlbGF0aXZlIHJpc2sgcHN5Y2hvc3Qgc2V4IH0NCnJpc2tyYXRpbyhkc19zZWxlY3RlZCRzZXhfbWFsZSwgZHNfc2VsZWN0ZWQkcHN5Y2hvc3RpbXVsYW50KSAjY2hlY2sgcmVmZXJlbmNlDQpgYGANCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKHNleF9tYWxlLCBwc3ljaG9zdGltdWxhbnQpICU+JSANCiAgIGFkb3JuX3RvdGFscygicm93IikgJT4lDQogIGFkb3JuX3BlcmNlbnRhZ2VzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcoZGlnaXRzID0gMSkgJT4lDQogIGFkb3JuX25zDQpgYGANCg0KDQppbmNvbWUNCg0KYGBge3IgcmVsYXRpdmUgcmlzayBwc3ljaG9zdCBpbmNvbWUgfQ0Kcmlza3JhdGlvKGRzX3NlbGVjdGVkJGVjb25vbWljX3N0YXR1cywgZHNfc2VsZWN0ZWQkcHN5Y2hvc3RpbXVsYW50LCByZXYgPSAiciIpICNjaGVjayByZWZlcmVuY2UNCmBgYA0KDQpgYGB7cn0NCmRzX3NlbGVjdGVkICU+JSANCiAgdGFieWwoZWNvbm9taWNfc3RhdHVzLCBwc3ljaG9zdGltdWxhbnQpICU+JSANCiAgIGFkb3JuX3RvdGFscygicm93IikgJT4lDQogIGFkb3JuX3BlcmNlbnRhZ2VzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcoZGlnaXRzID0gMSkgJT4lDQogIGFkb3JuX25zDQpgYGANCg0KDQpDaXR5IHNpemUNCg0KYGBge3IgcmVsYXRpdmUgcmlzayBwc3ljaG9zdCBkZW5zaXR5IH0NCnJpc2tyYXRpbyhkc19zZWxlY3RlZCRjaXR5X3NpemUsIGRzX3NlbGVjdGVkJHBzeWNob3N0aW11bGFudCwgcmV2ID0gInIiKSAjY2hlY2sgcmVmZXJlbmNlDQpgYGANCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKGNpdHlfc2l6ZSwgcHN5Y2hvc3RpbXVsYW50KSAlPiUgDQogICBhZG9ybl90b3RhbHMoInJvdyIpICU+JQ0KICBhZG9ybl9wZXJjZW50YWdlcygicm93IikgJT4lDQogIGFkb3JuX3BjdF9mb3JtYXR0aW5nKGRpZ2l0cyA9IDEpICU+JQ0KICBhZG9ybl9ucw0KYGBgDQoNCg0KDQoNCkNvciBkYSBwZWxlIChxdWUgYW5hbGlzZSBlc3R1cGlkYS4uKQ0KYGBge3IgcmVsYXRpdmUgcmlzayBwc3ljaG9zdCBldGhpbmljaXR5IH0NCnJpc2tyYXRpbyhkcyRjb3JfMV9icmFuY2FfMl9uYW9fYnJhbmNhXzNfbmFvX2luZm9ybW91LCBkc19zZWxlY3RlZCRwc3ljaG9zdGltdWxhbnQpICNjaGVjayByZWZlcmVuY2UNCmBgYA0KDQpgYGB7cn0NCmRzICU+JSANCiAgdGFieWwoY29yXzFfYnJhbmNhXzJfbmFvX2JyYW5jYV8zX25hb19pbmZvcm1vdSwgdXNvX2F0dWFsX2RlX3BzaWNvZXN0aW11bGFudGVfMF9uYW9fMV9zaW1fMl9uYW9faW5mb3JtYWRvKSAlPiUgDQogICBhZG9ybl90b3RhbHMoInJvdyIpICU+JQ0KICBhZG9ybl9wZXJjZW50YWdlcygicm93IikgJT4lDQogIGFkb3JuX3BjdF9mb3JtYXR0aW5nKGRpZ2l0cyA9IDEpICU+JQ0KICBhZG9ybl9ucw0KYGBgDQoNCg0KDQpUaXBvIGRlIGVzY29sYQ0KDQpgYGB7ciByZWxhdGl2ZSByaXNrIHBzeWNob3N0IHNjaG9vbCB9DQpyaXNrcmF0aW8oZHNfc2VsZWN0ZWQkcHVibGljX1NjaG9vbCwgZHNfc2VsZWN0ZWQkcHN5Y2hvc3RpbXVsYW50KSAjY2hlY2sgcmVmZXJlbmNlDQpgYGANCg0KDQpgYGB7cn0NCmRzX3NlbGVjdGVkICU+JSANCiAgdGFieWwocHVibGljX1NjaG9vbCwgcHN5Y2hvc3RpbXVsYW50KSAlPiUgDQogICBhZG9ybl90b3RhbHMoInJvdyIpICU+JQ0KICBhZG9ybl9wZXJjZW50YWdlcygicm93IikgJT4lDQogIGFkb3JuX3BjdF9mb3JtYXR0aW5nKGRpZ2l0cyA9IDEpICU+JQ0KICBhZG9ybl9ucw0KYGBgDQoNClJlZ2lhbw0KDQpgYGB7ciByZWxhdGl2ZSByaXNrIHBzeWNob3N0IHJlZ2lvbiB9DQpyaXNrcmF0aW8ocmVsZXZlbChkc19zZWxlY3RlZCRyZWdpb24sIHJlZiA9ICJORSIpLCBkc19zZWxlY3RlZCRwc3ljaG9zdGltdWxhbnQpICNjaGVjayByZWZlcmVuY2UNCmBgYA0KDQpgYGB7cn0NCmRzX3NlbGVjdGVkICU+JSANCiAgdGFieWwocmVnaW9uLCBwc3ljaG9zdGltdWxhbnQpICU+JSANCiAgIGFkb3JuX3RvdGFscygicm93IikgJT4lDQogIGFkb3JuX3BlcmNlbnRhZ2VzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcoZGlnaXRzID0gMSkgJT4lDQogIGFkb3JuX25zDQpgYGANCg0KIyMgVGFibGUgMw0KDQpSb3cgPSBBREhEIFJlcG9ydCANCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKGFkaGRfcGFyZW50LCBhZGhkX3Jpc2spICU+JSANCiAgYWRvcm5fdG90YWxzKHdoZXJlID0gYygicm93IiwiY29sIikpICU+JQ0KICBhZG9ybl9wZXJjZW50YWdlcygicm93IikgJT4lDQogIGFkb3JuX3BjdF9mb3JtYXR0aW5nKGRpZ2l0cyA9IDEpICU+JQ0KICBhZG9ybl9ucw0KYGBgDQoNCmBgYHtyfQ0KMTE0LygxMTQrMzkxKQ0KYGBgDQoNCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKGFkaGRfcGFyZW50LCBwc3ljaG9zdGltdWxhbnQpICU+JSANCiAgYWRvcm5fdG90YWxzKHdoZXJlID0gYygicm93IiwiY29sIikpICU+JQ0KICBhZG9ybl9wZXJjZW50YWdlcygicm93IikgJT4lDQogIGFkb3JuX3BjdF9mb3JtYXR0aW5nKGRpZ2l0cyA9IDEpICU+JQ0KICBhZG9ybl9ucw0KYGBgDQoNClJvdyA9IEFESEQgUHJvYmFibGUNCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKGFkaGRfcmlzaywgYWRoZF9wYXJlbnQpICU+JSANCiAgYWRvcm5fdG90YWxzKHdoZXJlID0gYygicm93IiwiY29sIikpICU+JQ0KICBhZG9ybl9wZXJjZW50YWdlcygicm93IikgJT4lDQogIGFkb3JuX3BjdF9mb3JtYXR0aW5nKGRpZ2l0cyA9IDEpICU+JQ0KICBhZG9ybl9ucw0KYGBgDQoNCmBgYHtyfQ0KZHNfc2VsZWN0ZWQgJT4lIA0KICB0YWJ5bChhZGhkX3Jpc2ssIHBzeWNob3N0aW11bGFudCkgJT4lIA0KICBhZG9ybl90b3RhbHMod2hlcmUgPSBjKCJyb3ciLCJjb2wiKSkgJT4lDQogIGFkb3JuX3BlcmNlbnRhZ2VzKCJyb3ciKSAlPiUNCiAgYWRvcm5fcGN0X2Zvcm1hdHRpbmcoZGlnaXRzID0gMSkgJT4lDQogIGFkb3JuX25zDQpgYGANCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKGFkaGRfcmlzaywgcHN5Y2hvc3RpbXVsYW50KSAlPiUgDQogIGFkb3JuX3BlcmNlbnRhZ2VzKCkgJT4lIA0KICBhZG9ybl9ucyguKQ0KYGBgDQoNCg0KUm93ID0gUHN5Y2hvc3RpbXVsYW50DQoNCmBgYHtyfQ0KZHNfc2VsZWN0ZWQgJT4lIA0KICB0YWJ5bChwc3ljaG9zdGltdWxhbnQsIGFkaGRfcGFyZW50KSAlPiUgDQogIGFkb3JuX3RvdGFscyh3aGVyZSA9IGMoInJvdyIsImNvbCIpKSAlPiUNCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JQ0KICBhZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAxKSAlPiUNCiAgYWRvcm5fbnMNCmBgYA0KDQoNCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKHBzeWNob3N0aW11bGFudCwgYWRoZF9yaXNrKSAlPiUgDQogIGFkb3JuX3RvdGFscyh3aGVyZSA9IGMoInJvdyIsImNvbCIpKSAlPiUNCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JQ0KICBhZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAxKSAlPiUNCiAgYWRvcm5fbnMNCmBgYA0KDQojIyBBZ3JlZW1lbnQNCg0KYGBge3J9DQpkc19zZWxlY3RlZCAlPiUgDQogIHRhYnlsKGFkaGRfcGFyZW50LCBhZGhkX3Jpc2spICU+JSANCiAgYWRvcm5fcGVyY2VudGFnZXMoInJvdyIpICU+JQ0KICBhZG9ybl9wY3RfZm9ybWF0dGluZyhkaWdpdHMgPSAyKSAlPiUNCiAgYWRvcm5fbnMoKQ0KYGBgDQoNCg0KYGBge3J9DQpDcm9zc1RhYmxlKGRzX3NlbGVjdGVkJGFkaGRfcGFyZW50LCBkc19zZWxlY3RlZCRhZGhkX3Jpc2ssDQogICAgICAgICBwcm9wLnIgPSBGLCAgI3JvdyBwcm9wb3J0aW9ucw0KICAgICAgICAgcHJvcC5jID0gRiwgI2NvbHVtbiBwcm9wb3J0aW9uDQogICAgICAgICB0b3RhbC5yID0gRiwgI25ldyBjb2x1bW4gd2l0aCB0b3RhbHMNCiAgICAgICAgIHRvdGFsLmMgPSBGLCANCiAgICAgICAgIHByb3AudCA9IEYsDQogICAgICAgICBleHBlY3RlZCA9IEYsDQogICAgICAgICBtY25lbWFyID0gVCkgI0RhdGEgaXMgcGFyZWlkLiBzaG91ZGwgYmUgbWNuZW1hcg0KYGBgDQoNCg0KDQojIyBUYWJsZSA0DQoNCmBgYHtyIGxvZ2lzdGljIG1vRGVsIEFESEQgcGFyZW50IFRBUkdFVCAxIH0NCiNzZWxlY3Qgc3BlY2l0aWMgZGF0YXNldA0KZHNfbW9kZWxfYWRoZCA8LSBkc19zZWxlY3RlZCAlPiUgDQogIGRwbHlyOjpzZWxlY3QoLWlkLCAtcHN5Y2hvc3RpbXVsYW50LCAtYWRoZF9yaXNrLCAtYWdlX2dyb3VwLCAtY29udGFpbnMoInNuYXBwXyIpLCAtY29udGFpbnMoInNuYXBwcm9mXyIpKSAlPiUgDQogIG11dGF0ZShtYXJyaWVkID0gcmVsZXZlbChtYXJyaWVkLCByZWYgPSAibWFycmllZCIpKQ0KYGBgDQoNCmBgYHtyIGNvbXB1dGUgbG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbCBBREhEIHJlcG9ydCB9DQptb2RfYWRoZF9jb21wbGV0ZSA8LSBnbG0oYWRoZF9wYXJlbnQgfiAuLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIGRzX21vZGVsX2FkaGQpDQpgYGANCg0KDQpgYGB7cn0NCmVwaURpc3BsYXk6OmxvZ2lzdGljLmRpc3BsYXkobW9kX2FkaGRfY29tcGxldGUpICU+JSANCiAga25pdHI6OmthYmxlKCkgJT4lIA0KICBrYWJsZUV4dHJhOjprYWJsZV9zdHlsaW5nKC4sIGxhdGV4X29wdGlvbnMgPSAic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBUKQ0KYGBgDQoNCg0KDQpTZWNvbmQgb3V0cHV0DQoNCmBgYHtyIGxvZ2lzdGljIG1vZGVsIGFkaGQgcmlzayBUQVJHRVQgMiB9DQpkc19tb2RlbF9hZGhkX3Jpc2sgPC0gZHNfc2VsZWN0ZWQgJT4lIA0KICBkcGx5cjo6c2VsZWN0KC1pZCwgLXBzeWNob3N0aW11bGFudCwgLWFnZV9ncm91cCwgLWFkaGRfcGFyZW50LCAtc25hcF9wYXJlbnRzX29ubHkgLCAtc25hcF90ZWFjaGVyc19vbmx5LCAtY29udGFpbnMoInNuYXBwXyIpLCAtY29udGFpbnMoInNuYXBwcm9mXyIpKSAlPiUgDQogICAgbXV0YXRlKG1hcnJpZWQgPSByZWxldmVsKG1hcnJpZWQsIHJlZiA9ICJtYXJyaWVkIikpDQpgYGANCg0KDQpgYGB7ciBjb21wdXRlIHJlZ3Jlc3Npb24gbW9kZWwgUFJPQkFCTEUgfQ0KbW9kX2FkaGRfcmlza19jb21wbGV0ZSA8LSBnbG0oYWRoZF9yaXNrIH4gLiwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpLCBkc19tb2RlbF9hZGhkX3Jpc2spDQpgYGANCg0KYGBge3J9DQplcGlEaXNwbGF5Ojpsb2dpc3RpYy5kaXNwbGF5KG1vZF9hZGhkX3Jpc2tfY29tcGxldGUpDQpgYGANCg0KYGBge3IgbG9naXN0aWMgbWRvZWwgVEFSR0VUIDMgcHN5Y2hvc3RpbXVsYW50IH0NCmRzX21vZGVsX3BzeWNob3N0aW11bGFudCA8LSBkc19zZWxlY3RlZCAlPiUgDQogIHNlbGVjdCgtaWQsIC1hZGhkX3Jpc2ssIC1hZGhkX3BhcmVudCwtYWdlX2dyb3VwLCAtY29udGFpbnMoInNuYXBwXyIpLCAtY29udGFpbnMoInNuYXBwcm9mXyIpKSAlPiUgDQogIG11dGF0ZShtYXJyaWVkID0gcmVsZXZlbChtYXJyaWVkLCByZWYgPSAibWFycmllZCIpKQ0KYGBgDQoNCg0KYGBge3IgY29tcHV0ZSByZWdyZXNzaW9uIG1vZGVsIHBzeWNob3N0aW11bGF0IHVzZSB9DQptb2RfcHN5Y2hvc3RpbXVsYW50X2NvbXBsZXRlIDwtIGdsbShwc3ljaG9zdGltdWxhbnQgfiAuLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIGRzX21vZGVsX3BzeWNob3N0aW11bGFudCkNCmBgYA0KDQoNCmBgYHtyfQ0KZXBpRGlzcGxheTo6bG9naXN0aWMuZGlzcGxheShtb2RfcHN5Y2hvc3RpbXVsYW50X2NvbXBsZXRlKQ0KYGBgDQoNCiMjIFJldmlld2VyIGFzayA9IEluZmx1ZW5jZSBvZiBhZ2UNCg0KYGBge3J9DQphcnNlbmFsOjp0YWJsZWJ5KH5hZ2UsIGRhdGEgPSBkc19zZWxlY3RlZCkgJT4lIHN1bW1hcnkoKQ0KYGBgDQoNCmBgYHtyfQ0KZ2xtKGRzX3NlbGVjdGVkJGFkaGRfcGFyZW50IH4gZHNfc2VsZWN0ZWQkYWdlLCBmYW1pbHkgPSBiaW5vbWlhbCkgJT4lIHN1bW1hcnkoKQ0KYGBgDQoNCmBgYHtyfQ0KZ2xtKGRzX3NlbGVjdGVkJGFkaGRfcmlzayB+IGRzX3NlbGVjdGVkJGFnZSwgZmFtaWx5ID0gYmlub21pYWwpICU+JSBzdW1tYXJ5KCkNCmBgYA0KDQpgYGB7cn0NCmdsbShkc19zZWxlY3RlZCRwc3ljaG9zdGltdWxhbnQgfiBkc19zZWxlY3RlZCRhZ2UsIGZhbWlseSA9IGJpbm9taWFsKSAlPiUgc3VtbWFyeSgpDQpgYGANCg0KDQohIGRvbmUgIA0KSWYgeW91IHVzZSB0aGlzIG1hcmtkb3duLCBwbGVhc2UgY2l0ZSBpdC4gIA0KQ29udGFjdCBtZSBhdCBsdWlzZmNhQHB1Yy1yaW8uYnIgIA0KRG9uZSBvbiBKYW51YXJ5IDQsIDIwMjIuDQoNCg0K