require(tidyverse)
require(stringr)
require(forcats)
library(knitr)
require(broom)
locale("lv", asciify = TRUE)
options(digits=3)

1 Dataset

df <- read_csv("Dataset/Dati_anketas_dzemdibu_iestades_v2.csv")

renombro columnas

colnames(df) <- str_replace_all(colnames(df), "[? .]", "_")
colnames(df) <- str_replace(colnames(df), "Vieta,_kur_anketa_pildīta", "Pildita")
df$Pildita <- str_replace(df$Pildita, "cccc", "P.Stradiņa klīniskā universitātes slimnīca")
hist(df$Attitude, breaks = 4, 
     main = "Attitude", xlab = "Attitude")

hist(df$Knowledge, breaks = 7, 
     main = "Knowledge", xlab = "Knowledge")

Convertir attitude y knowledge en porcentaje

df <- df %>% 
        mutate(AttPerc = Attitude/4*100)
df <- df %>% 
        mutate(KnoPerc = Knowledge/8*100)
hist(df$AttPerc, breaks = 5, 
     main = "Attitude", xlab = "Attitude percentage")

hist(df$KnoPerc, breaks = 10, 
     main = "Knowledge", xlab = "Knowledge percentage")

2 Descriptive

Descriptivo de todo en porcentaje

2.1 Por variables 6, 7, 8, 9, 10, 12, 13, 17, 18, 19, 20

2.1.1 AGE

important not important
< 30 gadi 89.9 10.1
> 30 gadi 93.4 6.6


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`6__Is_it_important_to_take_care_about_deciduous_teeth_`)
X-squared = 6, df = 1, p-value = 0.02

Juice or other drinks with sugar Just water or herbal tea without sugar
< 30 gadi 12.08 87.9
> 30 gadi 7.45 92.5


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`7__Before_going_to_sleep,_what_could_you_offer_for_your_2-year_old_child_`)
X-squared = 9, df = 1, p-value = 0.003

after eruption of the first milk tooth don't know
< 30 gadi 36.2 63.8
> 30 gadi 48.3 51.7


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`8__In_which_age_you_should_begin_to_brush_your_childs_teeth_`)
X-squared = 20, df = 1, p-value = 1e-06

don't know toothbrush and toothpaste
< 30 gadi 74.3 25.7
> 30 gadi 77.1 22.9


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`9__What_would_you_have_to_use_for_brushing_your_childs_first_teeth_`)
X-squared = 2, df = 1, p-value = 0.2

don' t know toothpaste with fluorides
< 30 gadi 48.2 51.8
> 30 gadi 38.0 62.0


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`10__Which_toothpaste_would_you_choose_for_your_childs_first_teeth_`)
X-squared = 20, df = 1, p-value = 7e-05

do not agree don't know or agree
< 30 gadi 32.5 67.5
> 30 gadi 42.5 57.5


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`12__Fluoride_toothpaste_is_bad_for_my_child`)
X-squared = 20, df = 1, p-value = 5e-05

1000 ppm don't know
< 30 gadi 1.279 98.7
> 30 gadi 0.916 99.1


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`13__How_much_fluoride_should_a_0-3-year_old_childs_toothpaste_contain_`)
X-squared = 0.2, df = 1, p-value = 0.7

don't know pea size or as rice grain
< 30 gadi 10.91 89.1
> 30 gadi 9.01 91.0


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`17__How_much_toothpastes_should_be_squeezed_out_on_a_toothbrush_`)
X-squared = 1, df = 1, p-value = 0.2

don't know pēc vajadzības kad bērns atļauj tīrīt twice daily
< 30 gadi 30.8 0.11 69.1
> 30 gadi 28.6 0.00 71.4

Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  table(df$Age_groups, df$`18_1_How_many_times_per_day_you_should_brush_your_childs_teeth_`)
X-squared = 2, df = 2, p-value = 0.5

do not agree don' t know or agree
< 30 gadi 60.4 39.6
> 30 gadi 59.3 40.7


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`19__Toothbrushing_against_a_childs’_will_is_aggression_towards_a_child_`)
X-squared = 0.2, df = 1, p-value = 0.7

do not agree don' t know or agree
< 30 gadi 89.5 10.5
> 30 gadi 89.6 10.4


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$Age_groups, df$`20__It_is_better_to_not_to_brush_against_childs_will_as_the_milk_teeth_will_fall_out_anyway_`)
X-squared = 0, df = 1, p-value = 1

2.1.2 Lives in

important not important
Lauku teritorija 90.7 9.33
Pilsēta 90.3 9.69
Rīga vai Rīgas rajons 95.2 4.85


    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`6__Is_it_important_to_take_care_about_deciduous_teeth_`)
X-squared = 7, df = 2, p-value = 0.02

Juice or other drinks with sugar Just water or herbal tea without sugar
Lauku teritorija 14.51 85.5
Pilsēta 9.75 90.2
Rīga vai Rīgas rajons 4.54 95.5


    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`7__Before_going_to_sleep,_what_could_you_offer_for_your_2-year_old_child_`)
X-squared = 20, df = 2, p-value = 2e-05

after eruption of the first milk tooth don't know
Lauku teritorija 36.9 63.1
Pilsēta 39.6 60.4
Rīga vai Rīgas rajons 51.2 48.8


    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`8__In_which_age_you_should_begin_to_brush_your_childs_teeth_`)
X-squared = 20, df = 2, p-value = 1e-04

don't know toothbrush and toothpaste
Lauku teritorija 79.0 21.0
Pilsēta 73.9 26.1
Rīga vai Rīgas rajons 73.6 26.4


    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`9__What_would_you_have_to_use_for_brushing_your_childs_first_teeth_`)
X-squared = 5, df = 2, p-value = 0.08

don' t know toothpaste with fluorides
Lauku teritorija 48.0 52.0
Pilsēta 42.1 57.9
Rīga vai Rīgas rajons 43.0 57.0


    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`10__Which_toothpaste_would_you_choose_for_your_childs_first_teeth_`)
X-squared = 5, df = 2, p-value = 0.1

do not agree don't know or agree
Lauku teritorija 35.3 64.7
Pilsēta 34.0 66.0
Rīga vai Rīgas rajons 44.9 55.1


    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`12__Fluoride_toothpaste_is_bad_for_my_child`)
X-squared = 10, df = 2, p-value = 0.002

1000 ppm don't know
Lauku teritorija 1.365 98.6
Pilsēta 0.671 99.3
Rīga vai Rīgas rajons 1.852 98.1

Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`13__How_much_fluoride_should_a_0-3-year_old_childs_toothpaste_contain_`)
X-squared = 3, df = 2, p-value = 0.2

don't know pea size or as rice grain
Lauku teritorija 7.51 92.5
Pilsēta 12.65 87.4
Rīga vai Rīgas rajons 8.36 91.6


    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`17__How_much_toothpastes_should_be_squeezed_out_on_a_toothbrush_`)
X-squared = 10, df = 2, p-value = 0.006

don't know pēc vajadzības kad bērns atļauj tīrīt twice daily
Lauku teritorija 31.5 0.000 68.5
Pilsēta 28.2 0.135 71.7
Rīga vai Rīgas rajons 31.3 0.000 68.7

Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`18_1_How_many_times_per_day_you_should_brush_your_childs_teeth_`)
X-squared = 3, df = 4, p-value = 0.6

do not agree don' t know or agree
Lauku teritorija 56.2 43.8
Pilsēta 56.9 43.1
Rīga vai Rīgas rajons 72.7 27.3


    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`19__Toothbrushing_against_a_childs’_will_is_aggression_towards_a_child_`)
X-squared = 30, df = 2, p-value = 1e-06

do not agree don' t know or agree
Lauku teritorija 88.7 11.3
Pilsēta 88.7 11.3
Rīga vai Rīgas rajons 92.9 7.1


    Pearson's Chi-squared test

data:  table(df$Lives_in, df$`20__It_is_better_to_not_to_brush_against_childs_will_as_the_milk_teeth_will_fall_out_anyway_`)
X-squared = 5, df = 2, p-value = 0.09

2.1.3 más hijos

important not important
No 92.5 7.47
Yes, first child 89.6 10.36


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`6__Is_it_important_to_take_care_about_deciduous_teeth_`)
X-squared = 4, df = 1, p-value = 0.05

Juice or other drinks with sugar Just water or herbal tea without sugar
No 9.88 90.1
Yes, first child 11.02 89.0


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`7__Before_going_to_sleep,_what_could_you_offer_for_your_2-year_old_child_`)
X-squared = 0.4, df = 1, p-value = 0.5

after eruption of the first milk tooth don't know
No 48.6 51.4
Yes, first child 29.2 70.8


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`8__In_which_age_you_should_begin_to_brush_your_childs_teeth_`)
X-squared = 60, df = 1, p-value = 1e-14

don't know toothbrush and toothpaste
No 74.7 25.3
Yes, first child 76.6 23.4


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`9__What_would_you_have_to_use_for_brushing_your_childs_first_teeth_`)
X-squared = 0.6, df = 1, p-value = 0.4

don' t know toothpaste with fluorides
No 37.5 62.5
Yes, first child 54.3 45.7


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`10__Which_toothpaste_would_you_choose_for_your_childs_first_teeth_`)
X-squared = 40, df = 1, p-value = 5e-11

do not agree don't know or agree
No 38.9 61.1
Yes, first child 33.3 66.7


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`12__Fluoride_toothpaste_is_bad_for_my_child`)
X-squared = 5, df = 1, p-value = 0.03

1000 ppm don't know
No 0.619 99.4
Yes, first child 1.893 98.1


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`13__How_much_fluoride_should_a_0-3-year_old_childs_toothpaste_contain_`)
X-squared = 5, df = 1, p-value = 0.03

don't know pea size or as rice grain
No 10.3 89.7
Yes, first child 10.3 89.7


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`17__How_much_toothpastes_should_be_squeezed_out_on_a_toothbrush_`)
X-squared = 5e-30, df = 1, p-value = 1

don't know pēc vajadzības kad bērns atļauj tīrīt twice daily
No 28.2 0.103 71.7
Yes, first child 33.1 0.000 66.9

Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  table(df$`2_Is_it_your_first_child_`, df$`18_1_How_many_times_per_day_you_should_brush_your_childs_teeth_`)
X-squared = 5, df = 2, p-value = 0.09

do not agree don' t know or agree
No 56.2 43.8
Yes, first child 65.4 34.6


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`19__Toothbrushing_against_a_childs’_will_is_aggression_towards_a_child_`)
X-squared = 10, df = 1, p-value = 3e-04

do not agree don' t know or agree
No 88.3 11.7
Yes, first child 91.5 8.5


    Pearson's Chi-squared test with Yates' continuity correction

data:  table(df$`2_Is_it_your_first_child_`, df$`20__It_is_better_to_not_to_brush_against_childs_will_as_the_milk_teeth_will_fall_out_anyway_`)
X-squared = 4, df = 1, p-value = 0.05

2.1.4 income

important not important
300-700 EUR 89.7 10.32
< 300 EUR 77.6 22.38
> 700 EUR 95.9 4.15


    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`6__Is_it_important_to_take_care_about_deciduous_teeth_`)
X-squared = 50, df = 2, p-value = 2e-12

Juice or other drinks with sugar Just water or herbal tea without sugar
300-700 EUR 13.37 86.6
< 300 EUR 20.28 79.7
> 700 EUR 6.14 93.9


    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`7__Before_going_to_sleep,_what_could_you_offer_for_your_2-year_old_child_`)
X-squared = 30, df = 2, p-value = 6e-08

after eruption of the first milk tooth don't know
300-700 EUR 37.1 62.9
< 300 EUR 23.6 76.4
> 700 EUR 48.3 51.7


    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`8__In_which_age_you_should_begin_to_brush_your_childs_teeth_`)
X-squared = 40, df = 2, p-value = 8e-09

don't know toothbrush and toothpaste
300-700 EUR 76.0 24.0
< 300 EUR 73.4 26.6
> 700 EUR 74.4 25.6


    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`9__What_would_you_have_to_use_for_brushing_your_childs_first_teeth_`)
X-squared = 0.7, df = 2, p-value = 0.7

don' t know toothpaste with fluorides
300-700 EUR 44.2 55.8
< 300 EUR 49.6 50.4
> 700 EUR 41.4 58.6


    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`10__Which_toothpaste_would_you_choose_for_your_childs_first_teeth_`)
X-squared = 4, df = 2, p-value = 0.2

do not agree don't know or agree
300-700 EUR 34.3 65.7
< 300 EUR 20.4 79.6
> 700 EUR 43.0 57.0


    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`12__Fluoride_toothpaste_is_bad_for_my_child`)
X-squared = 30, df = 2, p-value = 4e-07

1000 ppm don't know
300-700 EUR 1.01 99.0
< 300 EUR 0.00 100.0
> 700 EUR 1.21 98.8

Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`13__How_much_fluoride_should_a_0-3-year_old_childs_toothpaste_contain_`)
X-squared = 2, df = 2, p-value = 0.4

don't know pea size or as rice grain
300-700 EUR 10.8 89.2
< 300 EUR 20.1 79.9
> 700 EUR 7.7 92.3


    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`17__How_much_toothpastes_should_be_squeezed_out_on_a_toothbrush_`)
X-squared = 20, df = 2, p-value = 5e-05

don't know pēc vajadzības kad bērns atļauj tīrīt twice daily
300-700 EUR 32.2 0.145 67.6
< 300 EUR 39.0 0.000 61.0
> 700 EUR 25.7 0.000 74.3

Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`18_1_How_many_times_per_day_you_should_brush_your_childs_teeth_`)
X-squared = 10, df = 4, p-value = 0.007

do not agree don' t know or agree
300-700 EUR 56.0 44.0
< 300 EUR 46.8 53.2
> 700 EUR 65.7 34.3


    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`19__Toothbrushing_against_a_childs’_will_is_aggression_towards_a_child_`)
X-squared = 20, df = 2, p-value = 7e-06

do not agree don' t know or agree
300-700 EUR 88.5 11.47
< 300 EUR 76.2 23.78
> 700 EUR 92.6 7.39


    Pearson's Chi-squared test

data:  table(df$`29__Income_for_family`, df$`20__It_is_better_to_not_to_brush_against_childs_will_as_the_milk_teeth_will_fall_out_anyway_`)
X-squared = 30, df = 2, p-value = 5e-08

2.1.5 mother education

important not important
basic education 79.6 20.36
college 90.0 10.03
high school 88.9 11.11
university 95.2 4.85


    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`6__Is_it_important_to_take_care_about_deciduous_teeth_`)
X-squared = 50, df = 3, p-value = 6e-10

Juice or other drinks with sugar Just water or herbal tea without sugar
basic education 23.08 76.9
college 9.40 90.6
high school 15.18 84.8
university 6.73 93.3


    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`7__Before_going_to_sleep,_what_could_you_offer_for_your_2-year_old_child_`)
X-squared = 50, df = 3, p-value = 4e-10

after eruption of the first milk tooth don't know
basic education 27.1 72.9
college 36.8 63.2
high school 32.4 67.6
university 49.2 50.8


    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`8__In_which_age_you_should_begin_to_brush_your_childs_teeth_`)
X-squared = 50, df = 3, p-value = 5e-10

don't know toothbrush and toothpaste
basic education 69.2 30.8
college 73.8 26.2
high school 80.7 19.3
university 75.8 24.2


    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`9__What_would_you_have_to_use_for_brushing_your_childs_first_teeth_`)
X-squared = 9, df = 3, p-value = 0.04

don' t know toothpaste with fluorides
basic education 49.7 50.3
college 41.8 58.2
high school 45.2 54.8
university 43.1 56.9


    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`10__Which_toothpaste_would_you_choose_for_your_childs_first_teeth_`)
X-squared = 3, df = 3, p-value = 0.4

do not agree don't know or agree
basic education 18.3 81.7
college 32.7 67.3
high school 27.6 72.4
university 46.1 53.9


    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`12__Fluoride_toothpaste_is_bad_for_my_child`)
X-squared = 70, df = 3, p-value = 3e-14

1000 ppm don't know
basic education 0.617 99.4
college 0.345 99.7
high school 1.325 98.7
university 1.299 98.7

Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`13__How_much_fluoride_should_a_0-3-year_old_childs_toothpaste_contain_`)
X-squared = 2, df = 3, p-value = 0.5

don't know pea size or as rice grain
basic education 17.28 82.7
college 12.08 87.9
high school 12.17 87.8
university 7.16 92.8


    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`17__How_much_toothpastes_should_be_squeezed_out_on_a_toothbrush_`)
X-squared = 20, df = 3, p-value = 2e-04

don't know pēc vajadzības kad bērns atļauj tīrīt twice daily
basic education 39.2 0.00 60.8
college 30.7 0.00 69.3
high school 29.3 0.00 70.7
university 27.7 0.13 72.2

Chi-squared approximation may be incorrect

    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`18_1_How_many_times_per_day_you_should_brush_your_childs_teeth_`)
X-squared = 10, df = 6, p-value = 0.1

do not agree don' t know or agree
basic education 48.2 51.8
college 58.8 41.2
high school 50.2 49.8
university 66.2 33.8


    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`19__Toothbrushing_against_a_childs’_will_is_aggression_towards_a_child_`)
X-squared = 30, df = 3, p-value = 2e-07

do not agree don' t know or agree
basic education 79.6 20.36
college 91.7 8.33
high school 87.6 12.38
university 91.0 8.96


    Pearson's Chi-squared test

data:  table(df$`31__Mothers_education_group`, df$`20__It_is_better_to_not_to_brush_against_childs_will_as_the_milk_teeth_will_fall_out_anyway_`)
X-squared = 20, df = 3, p-value = 9e-05

3 Gráficos

df %>% 
        ggplot(aes(fct_infreq(Pildita))) + 
        geom_bar() +
        coord_flip() + 
        ggtitle("Participants") + ylab("Count") + xlab("Pildeta")

NA
df %>% 
        ggplot(aes(fct_infreq(Lives_in))) + 
        geom_bar() +
        coord_flip() + 
        ggtitle("Participants") + ylab("Count") + xlab("Lives_in")

df %>% 
        ggplot(aes(`2_Is_it_your_first_child_`)) + 
        geom_bar() 

df %>% 
        ggplot(aes(`3__Nr__of_children_in_family`)) + 
        geom_bar() 

df %>% 
        ggplot(aes(`4__Oral_health_for_older_siblings_groups`)) + 
        geom_bar() 

df$income <-  factor(df$`29__Income_for_family`, c("< 300 EUR", 
                                                   "300-700 EUR", 
                                                   "> 700 EUR"))
df %>% 
        ggplot(aes(income)) + 
        geom_bar() 

df %>% 
        ggplot(aes(x = `23__Did_you_receive_recommendation_from_your_ginecologist_to_visit_a_dentist_during_pregnancy_`)) + 
        geom_bar()

df$education <- factor(df$`31__Mothers_education_group`, 
                       c("basic education", 
                         "high school", 
                         "college", 
                         "university"))
df %>% 
        ggplot(aes(x = education)) +
        geom_bar()

df %>% 
        ggplot(aes(x = AttPerc, y = KnoPerc, colour = education)) +
        geom_point()

df %>% 
        ggplot(aes(x = education, y = AttPerc)) + 
        geom_boxplot() 

df %>% 
        ggplot(aes(x = Lives_in, y = Attitude)) +
        geom_boxplot()

df %>% 
        ggplot(aes(x = Lives_in, y = KnoPerc)) +
        geom_boxplot()

4 Qué explica Attitude

fit_att <- glm(AttPerc ~
                              Age_groups +
                              Lives_in + 
                              `2_Is_it_your_first_child_` +
                              `21_Do_you_have_your_own_dentist_` + 
                              `23__Did_you_receive_recommendation_from_your_ginecologist_to_visit_a_dentist_during_pregnancy_` +
                              `24__Have_you_had_your_teeth_restored_in_latest_` +
                              `26__Do_you_use_fluoride_toothpaste_` + 
                              `27__Did_you_smoke_until_pregnancy_` +
                              `29__Income_for_family` + 
                              `31__Mothers_education_group` +
                              `32_Do_you_use_phone_with_internet_`, 
                      data = df)
summary(fit_att)

Call:
glm(formula = AttPerc ~ Age_groups + Lives_in + `2_Is_it_your_first_child_` + 
    `21_Do_you_have_your_own_dentist_` + `23__Did_you_receive_recommendation_from_your_ginecologist_to_visit_a_dentist_during_pregnancy_` + 
    `24__Have_you_had_your_teeth_restored_in_latest_` + `26__Do_you_use_fluoride_toothpaste_` + 
    `27__Did_you_smoke_until_pregnancy_` + `29__Income_for_family` + 
    `31__Mothers_education_group` + `32_Do_you_use_phone_with_internet_`, 
    data = df)

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
-72.74  -16.07    2.44   17.76   52.52  

Coefficients:
                                                                                                    Estimate Std. Error t value Pr(>|t|)
(Intercept)                                                                                           57.011      2.841   20.07  < 2e-16
Age_groups> 30 gadi                                                                                    0.147      1.399    0.11  0.91613
Lives_inPilsēta                                                                                       -0.979      1.427   -0.69  0.49291
Lives_inRīga vai Rīgas rajons                                                                          3.356      1.827    1.84  0.06643
`2_Is_it_your_first_child_`Yes, first child                                                            0.202      1.351    0.15  0.88093
`21_Do_you_have_your_own_dentist_`Yes                                                                  1.893      1.560    1.21  0.22500
`23__Did_you_receive_recommendation_from_your_ginecologist_to_visit_a_dentist_during_pregnancy_`Yes    0.246      1.295    0.19  0.84922
`24__Have_you_had_your_teeth_restored_in_latest_`Yes                                                   0.326      1.288    0.25  0.80036
`26__Do_you_use_fluoride_toothpaste_`Yes                                                               4.413      1.253    3.52  0.00045
`27__Did_you_smoke_until_pregnancy_`Yes                                                               -0.779      1.528   -0.51  0.61044
`29__Income_for_family`< 300 EUR                                                                      -8.752      2.345   -3.73  0.00020
`29__Income_for_family`> 700 EUR                                                                       4.122      1.365    3.02  0.00258
`31__Mothers_education_group`college                                                                   5.649      2.477    2.28  0.02276
`31__Mothers_education_group`high school                                                               3.020      2.406    1.25  0.20971
`31__Mothers_education_group`university                                                                9.558      2.384    4.01  6.4e-05
`32_Do_you_use_phone_with_internet_`Yes                                                                0.320      1.590    0.20  0.84077
                                                                                                       
(Intercept)                                                                                         ***
Age_groups> 30 gadi                                                                                    
Lives_inPilsēta                                                                                        
Lives_inRīga vai Rīgas rajons                                                                       .  
`2_Is_it_your_first_child_`Yes, first child                                                            
`21_Do_you_have_your_own_dentist_`Yes                                                                  
`23__Did_you_receive_recommendation_from_your_ginecologist_to_visit_a_dentist_during_pregnancy_`Yes    
`24__Have_you_had_your_teeth_restored_in_latest_`Yes                                                   
`26__Do_you_use_fluoride_toothpaste_`Yes                                                            ***
`27__Did_you_smoke_until_pregnancy_`Yes                                                                
`29__Income_for_family`< 300 EUR                                                                    ***
`29__Income_for_family`> 700 EUR                                                                    ** 
`31__Mothers_education_group`college                                                                *  
`31__Mothers_education_group`high school                                                               
`31__Mothers_education_group`university                                                             ***
`32_Do_you_use_phone_with_internet_`Yes                                                                
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 505)

    Null deviance: 738354  on 1334  degrees of freedom
Residual deviance: 666552  on 1319  degrees of freedom
  (325 observations deleted due to missingness)
AIC: 12117

Number of Fisher Scoring iterations: 2

4.1 Graf att

td_att <- tidy(fit_att, conf.int = TRUE)
td_att %>% 
        ggplot(aes(term, estimate)) +
        geom_point() +
        geom_pointrange(aes(ymin = conf.low, ymax = conf.high)) +
        labs(title = "Coefficients of a linear regression model")

5 Qué explica knowledge?

fit_know <- glm(KnoPerc ~
                              Age_groups +
                              Lives_in + 
                              `2_Is_it_your_first_child_` +
                              `21_Do_you_have_your_own_dentist_` + 
                              `23__Did_you_receive_recommendation_from_your_ginecologist_to_visit_a_dentist_during_pregnancy_` +
                              `24__Have_you_had_your_teeth_restored_in_latest_` +
                              `26__Do_you_use_fluoride_toothpaste_` + 
                              `27__Did_you_smoke_until_pregnancy_` +
                              `29__Income_for_family` + 
                              `31__Mothers_education_group` +
                              `32_Do_you_use_phone_with_internet_`, 
                      data = df)
summary(fit_know)

Call:
glm(formula = KnoPerc ~ Age_groups + Lives_in + `2_Is_it_your_first_child_` + 
    `21_Do_you_have_your_own_dentist_` + `23__Did_you_receive_recommendation_from_your_ginecologist_to_visit_a_dentist_during_pregnancy_` + 
    `24__Have_you_had_your_teeth_restored_in_latest_` + `26__Do_you_use_fluoride_toothpaste_` + 
    `27__Did_you_smoke_until_pregnancy_` + `29__Income_for_family` + 
    `31__Mothers_education_group` + `32_Do_you_use_phone_with_internet_`, 
    data = df)

Deviance Residuals: 
   Min      1Q  Median      3Q     Max  
 -48.0   -10.2    -0.1    10.4    42.4  

Coefficients:
                                                                                                    Estimate Std. Error t value Pr(>|t|)
(Intercept)                                                                                           41.418      1.902   21.78  < 2e-16
Age_groups> 30 gadi                                                                                   -0.457      0.937   -0.49  0.62590
Lives_inPilsēta                                                                                        1.906      0.956    1.99  0.04628
Lives_inRīga vai Rīgas rajons                                                                          2.659      1.223    2.17  0.02988
`2_Is_it_your_first_child_`Yes, first child                                                           -5.201      0.905   -5.75  1.1e-08
`21_Do_you_have_your_own_dentist_`Yes                                                                  0.332      1.044    0.32  0.75028
`23__Did_you_receive_recommendation_from_your_ginecologist_to_visit_a_dentist_during_pregnancy_`Yes    0.924      0.867    1.07  0.28650
`24__Have_you_had_your_teeth_restored_in_latest_`Yes                                                   1.053      0.863    1.22  0.22228
`26__Do_you_use_fluoride_toothpaste_`Yes                                                               3.438      0.839    4.10  4.5e-05
`27__Did_you_smoke_until_pregnancy_`Yes                                                               -0.657      1.023   -0.64  0.52102
`29__Income_for_family`< 300 EUR                                                                      -3.647      1.570   -2.32  0.02035
`29__Income_for_family`> 700 EUR                                                                       2.324      0.914    2.54  0.01112
`31__Mothers_education_group`college                                                                   3.795      1.659    2.29  0.02232
`31__Mothers_education_group`high school                                                               2.483      1.611    1.54  0.12355
`31__Mothers_education_group`university                                                                5.697      1.596    3.57  0.00037
`32_Do_you_use_phone_with_internet_`Yes                                                                0.440      1.065    0.41  0.67961
                                                                                                       
(Intercept)                                                                                         ***
Age_groups> 30 gadi                                                                                    
Lives_inPilsēta                                                                                     *  
Lives_inRīga vai Rīgas rajons                                                                       *  
`2_Is_it_your_first_child_`Yes, first child                                                         ***
`21_Do_you_have_your_own_dentist_`Yes                                                                  
`23__Did_you_receive_recommendation_from_your_ginecologist_to_visit_a_dentist_during_pregnancy_`Yes    
`24__Have_you_had_your_teeth_restored_in_latest_`Yes                                                   
`26__Do_you_use_fluoride_toothpaste_`Yes                                                            ***
`27__Did_you_smoke_until_pregnancy_`Yes                                                                
`29__Income_for_family`< 300 EUR                                                                    *  
`29__Income_for_family`> 700 EUR                                                                    *  
`31__Mothers_education_group`college                                                                *  
`31__Mothers_education_group`high school                                                               
`31__Mothers_education_group`university                                                             ***
`32_Do_you_use_phone_with_internet_`Yes                                                                
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 227)

    Null deviance: 330635  on 1334  degrees of freedom
Residual deviance: 298863  on 1319  degrees of freedom
  (325 observations deleted due to missingness)
AIC: 11046

Number of Fisher Scoring iterations: 2

5.1 Graf knowledge

td_know <- tidy(fit_know, conf.int = TRUE)
td_know %>% 
        ggplot(aes(term, estimate)) +
        geom_point() +
        coord_flip() +
        geom_pointrange(aes(ymin = conf.low, ymax = conf.high)) +
        labs(title = "Coefficients of a linear regression model")

5.2 BMI

summary(df_BMI$BMI)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   15.4    20.6    22.6    23.4    25.4    44.2 
LS0tCnRpdGxlOiAiS25vd2xlZGdlIGFuZCBBdHRpdHVkZSBPcmFsIEhlYWx0aCBNb3RoZXJzIExhdHZpYSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICB3b3JkX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKLS0tCmBgYHtyIHBhcXVldGVzLCBldmFsPUZBTFNFfQpyZXF1aXJlKHRpZHl2ZXJzZSkKcmVxdWlyZShzdHJpbmdyKQpyZXF1aXJlKGZvcmNhdHMpCmxpYnJhcnkoa25pdHIpCnJlcXVpcmUoYnJvb20pCmBgYApgYGB7ciBsb2NhbGUsIGV2YWw9RkFMU0V9CmxvY2FsZSgibHYiLCBhc2NpaWZ5ID0gVFJVRSkKb3B0aW9ucyhkaWdpdHM9MykKYGBgCgoKIyBEYXRhc2V0CmBgYHtyIFJlYWQsIGV2YWw9RkFMU0V9CmRmIDwtIHJlYWRfY3N2KCJEYXRhc2V0L0RhdGlfYW5rZXRhc19kemVtZGlidV9pZXN0YWRlc192Mi5jc3YiKQpgYGAKCnJlbm9tYnJvIGNvbHVtbmFzCmBgYHtyfQoKY29sbmFtZXMoZGYpIDwtIHN0cl9yZXBsYWNlX2FsbChjb2xuYW1lcyhkZiksICJbPyAuXSIsICJfIikKY29sbmFtZXMoZGYpIDwtIHN0cl9yZXBsYWNlKGNvbG5hbWVzKGRmKSwgIlZpZXRhLF9rdXJfYW5rZXRhX3BpbGTEq3RhIiwgIlBpbGRpdGEiKQpkZiRQaWxkaXRhIDwtIHN0cl9yZXBsYWNlKGRmJFBpbGRpdGEsICJjY2NjIiwgIlAuU3RyYWRpxYZhIGtsxKtuaXNrxIEgdW5pdmVyc2l0xIF0ZXMgc2xpbW7Eq2NhIikKYGBgCgoKCgpgYGB7ciBoaXN0IGF0dGl0dWRlfQpoaXN0KGRmJEF0dGl0dWRlLCBicmVha3MgPSA0LCAKICAgICBtYWluID0gIkF0dGl0dWRlIiwgeGxhYiA9ICJBdHRpdHVkZSIpCmBgYApgYGB7ciBoaXN0IGtub3d9Cmhpc3QoZGYkS25vd2xlZGdlLCBicmVha3MgPSA3LCAKICAgICBtYWluID0gIktub3dsZWRnZSIsIHhsYWIgPSAiS25vd2xlZGdlIikKYGBgCkNvbnZlcnRpciBhdHRpdHVkZSB5IGtub3dsZWRnZSBlbiBwb3JjZW50YWplCmBgYHtyIGNvbnZpZXJ0byBhIHkgayBhICV9CmRmIDwtIGRmICU+JSAKICAgICAgICBtdXRhdGUoQXR0UGVyYyA9IEF0dGl0dWRlLzQqMTAwKQpkZiA8LSBkZiAlPiUgCiAgICAgICAgbXV0YXRlKEtub1BlcmMgPSBLbm93bGVkZ2UvOCoxMDApCmBgYAoKCmBgYHtyIGhpc3QgYSV9Cmhpc3QoZGYkQXR0UGVyYywgYnJlYWtzID0gNSwgCiAgICAgbWFpbiA9ICJBdHRpdHVkZSIsIHhsYWIgPSAiQXR0aXR1ZGUgcGVyY2VudGFnZSIpCmBgYApgYGB7ciBoaXN0IHAlfQpoaXN0KGRmJEtub1BlcmMsIGJyZWFrcyA9IDEwLCAKICAgICBtYWluID0gIktub3dsZWRnZSIsIHhsYWIgPSAiS25vd2xlZGdlIHBlcmNlbnRhZ2UiKQpgYGAKCiMgRGVzY3JpcHRpdmUKRGVzY3JpcHRpdm8gZGUgdG9kbyBlbiBwb3JjZW50YWplCmBgYHtyIGRlc2NyaXB0aXZvIGVuICUsIGV2YWw9VFJVRSwgZWNobz1GQUxTRX0KZGYgJT4lIGNvdW50KGBEYXVkenVtc2ApICU+JSBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYFBpbGRpdGFgKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYEFnZWApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChBZ2VfZ3JvdXBzKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYExpdmVzX2luYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGAzX19Ocl9fb2ZfY2hpbGRyZW5faW5fZmFtaWx5YCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGA0X19PcmFsX2hlYWx0aF9mb3Jfb2xkZXJfc2libGluZ3NgKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYDRfX09yYWxfaGVhbHRoX2Zvcl9vbGRlcl9zaWJsaW5nc19ncm91cHNgKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYDIxX0RvX3lvdV9oYXZlX3lvdXJfb3duX2RlbnRpc3RfYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGAyM19fRGlkX3lvdV9yZWNlaXZlX3JlY29tbWVuZGF0aW9uX2Zyb21feW91cl9naW5lY29sb2dpc3RfdG9fdmlzaXRfYV9kZW50aXN0X2R1cmluZ19wcmVnbmFuY3lfYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGAyNF9fSGF2ZV95b3VfaGFkX3lvdXJfdGVldGhfcmVzdG9yZWRfaW5fbGF0ZXN0X2ApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChgMjVfX0RvX3lvdV9rbm93X2lmX3lvdV9oYXZlX3NvbWVfZGFtYWdlZF90ZWV0aF9gKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYDI2X19Eb195b3VfdXNlX2ZsdW9yaWRlX3Rvb3RocGFzdGVfYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGAyN19fRGlkX3lvdV9zbW9rZV91bnRpbF9wcmVnbmFuY3lfYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGBCTUlgKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYDI5X19JbmNvbWVfZm9yX2ZhbWlseWApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChgMzBfX05yX19vZl9wZW9wbGVfaW5fZmFtaWx5YCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYDMyX0RvX3lvdV91c2VfcGhvbmVfd2l0aF9pbnRlcm5ldF9gKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYDZfX0lzX2l0X2ltcG9ydGFudF90b190YWtlX2NhcmVfYWJvdXRfZGVjaWR1b3VzX3RlZXRoX2ApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChgMTJfX0ZsdW9yaWRlX3Rvb3RocGFzdGVfaXNfYmFkX2Zvcl9teV9jaGlsZGApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChgMTlfX1Rvb3RoYnJ1c2hpbmdfYWdhaW5zdF9hX2NoaWxkc+KAmV93aWxsX2lzX2FnZ3Jlc3Npb25fdG93YXJkc19hX2NoaWxkX2ApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChgMjBfX0l0X2lzX2JldHRlcl90b19ub3RfdG9fYnJ1c2hfYWdhaW5zdF9jaGlsZHNfd2lsbF9hc190aGVfbWlsa190ZWV0aF93aWxsX2ZhbGxfb3V0X2FueXdheV9gKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYEF0dGl0dWRlYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGA3X19CZWZvcmVfZ29pbmdfdG9fc2xlZXAsX3doYXRfY291bGRfeW91X29mZmVyX2Zvcl95b3VyXzIteWVhcl9vbGRfY2hpbGRfYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGA4X19Jbl93aGljaF9hZ2VfeW91X3Nob3VsZF9iZWdpbl90b19icnVzaF95b3VyX2NoaWxkc190ZWV0aF9gKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYDlfX1doYXRfd291bGRfeW91X2hhdmVfdG9fdXNlX2Zvcl9icnVzaGluZ195b3VyX2NoaWxkc19maXJzdF90ZWV0aF9gKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYDEwX19XaGljaF90b290aHBhc3RlX3dvdWxkX3lvdV9jaG9vc2VfZm9yX3lvdXJfY2hpbGRzX2ZpcnN0X3RlZXRoX2ApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChgMTNfX0hvd19tdWNoX2ZsdW9yaWRlX3Nob3VsZF9hXzAtMy15ZWFyX29sZF9jaGlsZHNfdG9vdGhwYXN0ZV9jb250YWluX2ApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChgMTZfX0luX3doaWNoX2FnZV93b3VsZF95b3VfaGF2ZV90b190YWtlX3lvdXJfY2hpbGRfdG9faGlzX2ZpcnN0X3Zpc2l0X3RvX2RlbnRpc3RfYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGAxN19fSG93X211Y2hfdG9vdGhwYXN0ZXNfc2hvdWxkX2JlX3NxdWVlemVkX291dF9vbl9hX3Rvb3RoYnJ1c2hfYCkgJT4lICAgICAgICAgbXV0YXRlKFBlcmNlbnRhamUgPSBwcm9wLnRhYmxlKG4pKjEwMCkKZGYgJT4lIGNvdW50KGAxOF8xX0hvd19tYW55X3RpbWVzX3Blcl9kYXlfeW91X3Nob3VsZF9icnVzaF95b3VyX2NoaWxkc190ZWV0aF9gKSAlPiUgICAgICAgICBtdXRhdGUoUGVyY2VudGFqZSA9IHByb3AudGFibGUobikqMTAwKQpkZiAlPiUgY291bnQoYEtub3dsZWRnZWApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChgQXR0UGVyY2ApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCmRmICU+JSBjb3VudChgS25vUGVyY2ApICU+JSAgICAgICAgIG11dGF0ZShQZXJjZW50YWplID0gcHJvcC50YWJsZShuKSoxMDApCgpgYGAKCiMjIFBvciB2YXJpYWJsZXMgNiwgNywgOCwgOSwgMTAsIDEyLCAxMywgMTcsIDE4LCAxOSwgMjAKCiMjIyBBR0UKYGBge3IsIGVjaG89RkFMU0V9CiMgQWdlCQkJCQkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJQWdlX2dyb3VwcywgZGYkCWA2X19Jc19pdF9pbXBvcnRhbnRfdG9fdGFrZV9jYXJlX2Fib3V0X2RlY2lkdW91c190ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJEFnZV9ncm91cHMsIGRmJGA2X19Jc19pdF9pbXBvcnRhbnRfdG9fdGFrZV9jYXJlX2Fib3V0X2RlY2lkdW91c190ZWV0aF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJQWdlX2dyb3VwcywgZGYkCWA3X19CZWZvcmVfZ29pbmdfdG9fc2xlZXAsX3doYXRfY291bGRfeW91X29mZmVyX2Zvcl95b3VyXzIteWVhcl9vbGRfY2hpbGRfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRBZ2VfZ3JvdXBzLCBkZiRgN19fQmVmb3JlX2dvaW5nX3RvX3NsZWVwLF93aGF0X2NvdWxkX3lvdV9vZmZlcl9mb3JfeW91cl8yLXllYXJfb2xkX2NoaWxkX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlBZ2VfZ3JvdXBzLCBkZiQJYDhfX0luX3doaWNoX2FnZV95b3Vfc2hvdWxkX2JlZ2luX3RvX2JydXNoX3lvdXJfY2hpbGRzX3RlZXRoX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkQWdlX2dyb3VwcywgZGYkYDhfX0luX3doaWNoX2FnZV95b3Vfc2hvdWxkX2JlZ2luX3RvX2JydXNoX3lvdXJfY2hpbGRzX3RlZXRoX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlBZ2VfZ3JvdXBzLCBkZiQJYDlfX1doYXRfd291bGRfeW91X2hhdmVfdG9fdXNlX2Zvcl9icnVzaGluZ195b3VyX2NoaWxkc19maXJzdF90ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJEFnZV9ncm91cHMsIGRmJGA5X19XaGF0X3dvdWxkX3lvdV9oYXZlX3RvX3VzZV9mb3JfYnJ1c2hpbmdfeW91cl9jaGlsZHNfZmlyc3RfdGVldGhfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCUFnZV9ncm91cHMsIGRmJAlgMTBfX1doaWNoX3Rvb3RocGFzdGVfd291bGRfeW91X2Nob29zZV9mb3JfeW91cl9jaGlsZHNfZmlyc3RfdGVldGhfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRBZ2VfZ3JvdXBzLCBkZiRgMTBfX1doaWNoX3Rvb3RocGFzdGVfd291bGRfeW91X2Nob29zZV9mb3JfeW91cl9jaGlsZHNfZmlyc3RfdGVldGhfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCUFnZV9ncm91cHMsIGRmJAlgMTJfX0ZsdW9yaWRlX3Rvb3RocGFzdGVfaXNfYmFkX2Zvcl9teV9jaGlsZGAJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkQWdlX2dyb3VwcywgZGYkYDEyX19GbHVvcmlkZV90b290aHBhc3RlX2lzX2JhZF9mb3JfbXlfY2hpbGRgKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJQWdlX2dyb3VwcywgZGYkCWAxM19fSG93X211Y2hfZmx1b3JpZGVfc2hvdWxkX2FfMC0zLXllYXJfb2xkX2NoaWxkc190b290aHBhc3RlX2NvbnRhaW5fYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRBZ2VfZ3JvdXBzLCBkZiRgMTNfX0hvd19tdWNoX2ZsdW9yaWRlX3Nob3VsZF9hXzAtMy15ZWFyX29sZF9jaGlsZHNfdG9vdGhwYXN0ZV9jb250YWluX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlBZ2VfZ3JvdXBzLCBkZiQJYDE3X19Ib3dfbXVjaF90b290aHBhc3Rlc19zaG91bGRfYmVfc3F1ZWV6ZWRfb3V0X29uX2FfdG9vdGhicnVzaF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJEFnZV9ncm91cHMsIGRmJGAxN19fSG93X211Y2hfdG9vdGhwYXN0ZXNfc2hvdWxkX2JlX3NxdWVlemVkX291dF9vbl9hX3Rvb3RoYnJ1c2hfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCUFnZV9ncm91cHMsIGRmJAlgMThfMV9Ib3dfbWFueV90aW1lc19wZXJfZGF5X3lvdV9zaG91bGRfYnJ1c2hfeW91cl9jaGlsZHNfdGVldGhfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRBZ2VfZ3JvdXBzLCBkZiRgMThfMV9Ib3dfbWFueV90aW1lc19wZXJfZGF5X3lvdV9zaG91bGRfYnJ1c2hfeW91cl9jaGlsZHNfdGVldGhfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCUFnZV9ncm91cHMsIGRmJAlgMTlfX1Rvb3RoYnJ1c2hpbmdfYWdhaW5zdF9hX2NoaWxkc+KAmV93aWxsX2lzX2FnZ3Jlc3Npb25fdG93YXJkc19hX2NoaWxkX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkQWdlX2dyb3VwcywgZGYkYDE5X19Ub290aGJydXNoaW5nX2FnYWluc3RfYV9jaGlsZHPigJlfd2lsbF9pc19hZ2dyZXNzaW9uX3Rvd2FyZHNfYV9jaGlsZF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJQWdlX2dyb3VwcywgZGYkCWAyMF9fSXRfaXNfYmV0dGVyX3RvX25vdF90b19icnVzaF9hZ2FpbnN0X2NoaWxkc193aWxsX2FzX3RoZV9taWxrX3RlZXRoX3dpbGxfZmFsbF9vdXRfYW55d2F5X2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkQWdlX2dyb3VwcywgZGYkYDIwX19JdF9pc19iZXR0ZXJfdG9fbm90X3RvX2JydXNoX2FnYWluc3RfY2hpbGRzX3dpbGxfYXNfdGhlX21pbGtfdGVldGhfd2lsbF9mYWxsX291dF9hbnl3YXlfYCkpCmBgYAojIyMgTGl2ZXMgaW4KYGBge3IsIGVjaG89RkFMU0V9CmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCUxpdmVzX2luLCBkZiQJYDZfX0lzX2l0X2ltcG9ydGFudF90b190YWtlX2NhcmVfYWJvdXRfZGVjaWR1b3VzX3RlZXRoX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkTGl2ZXNfaW4sIGRmJGA2X19Jc19pdF9pbXBvcnRhbnRfdG9fdGFrZV9jYXJlX2Fib3V0X2RlY2lkdW91c190ZWV0aF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJTGl2ZXNfaW4sIGRmJAlgN19fQmVmb3JlX2dvaW5nX3RvX3NsZWVwLF93aGF0X2NvdWxkX3lvdV9vZmZlcl9mb3JfeW91cl8yLXllYXJfb2xkX2NoaWxkX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkTGl2ZXNfaW4sIGRmJGA3X19CZWZvcmVfZ29pbmdfdG9fc2xlZXAsX3doYXRfY291bGRfeW91X29mZmVyX2Zvcl95b3VyXzIteWVhcl9vbGRfY2hpbGRfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCUxpdmVzX2luLCBkZiQJYDhfX0luX3doaWNoX2FnZV95b3Vfc2hvdWxkX2JlZ2luX3RvX2JydXNoX3lvdXJfY2hpbGRzX3RlZXRoX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkTGl2ZXNfaW4sIGRmJGA4X19Jbl93aGljaF9hZ2VfeW91X3Nob3VsZF9iZWdpbl90b19icnVzaF95b3VyX2NoaWxkc190ZWV0aF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJTGl2ZXNfaW4sIGRmJAlgOV9fV2hhdF93b3VsZF95b3VfaGF2ZV90b191c2VfZm9yX2JydXNoaW5nX3lvdXJfY2hpbGRzX2ZpcnN0X3RlZXRoX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkTGl2ZXNfaW4sIGRmJGA5X19XaGF0X3dvdWxkX3lvdV9oYXZlX3RvX3VzZV9mb3JfYnJ1c2hpbmdfeW91cl9jaGlsZHNfZmlyc3RfdGVldGhfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCUxpdmVzX2luLCBkZiQJYDEwX19XaGljaF90b290aHBhc3RlX3dvdWxkX3lvdV9jaG9vc2VfZm9yX3lvdXJfY2hpbGRzX2ZpcnN0X3RlZXRoX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkTGl2ZXNfaW4sIGRmJGAxMF9fV2hpY2hfdG9vdGhwYXN0ZV93b3VsZF95b3VfY2hvb3NlX2Zvcl95b3VyX2NoaWxkc19maXJzdF90ZWV0aF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJTGl2ZXNfaW4sIGRmJAlgMTJfX0ZsdW9yaWRlX3Rvb3RocGFzdGVfaXNfYmFkX2Zvcl9teV9jaGlsZGAJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkTGl2ZXNfaW4sIGRmJGAxMl9fRmx1b3JpZGVfdG9vdGhwYXN0ZV9pc19iYWRfZm9yX215X2NoaWxkYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCUxpdmVzX2luLCBkZiQJYDEzX19Ib3dfbXVjaF9mbHVvcmlkZV9zaG91bGRfYV8wLTMteWVhcl9vbGRfY2hpbGRzX3Rvb3RocGFzdGVfY29udGFpbl9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJExpdmVzX2luLCBkZiRgMTNfX0hvd19tdWNoX2ZsdW9yaWRlX3Nob3VsZF9hXzAtMy15ZWFyX29sZF9jaGlsZHNfdG9vdGhwYXN0ZV9jb250YWluX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlMaXZlc19pbiwgZGYkCWAxN19fSG93X211Y2hfdG9vdGhwYXN0ZXNfc2hvdWxkX2JlX3NxdWVlemVkX291dF9vbl9hX3Rvb3RoYnJ1c2hfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRMaXZlc19pbiwgZGYkYDE3X19Ib3dfbXVjaF90b290aHBhc3Rlc19zaG91bGRfYmVfc3F1ZWV6ZWRfb3V0X29uX2FfdG9vdGhicnVzaF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJTGl2ZXNfaW4sIGRmJAlgMThfMV9Ib3dfbWFueV90aW1lc19wZXJfZGF5X3lvdV9zaG91bGRfYnJ1c2hfeW91cl9jaGlsZHNfdGVldGhfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRMaXZlc19pbiwgZGYkYDE4XzFfSG93X21hbnlfdGltZXNfcGVyX2RheV95b3Vfc2hvdWxkX2JydXNoX3lvdXJfY2hpbGRzX3RlZXRoX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlMaXZlc19pbiwgZGYkCWAxOV9fVG9vdGhicnVzaGluZ19hZ2FpbnN0X2FfY2hpbGRz4oCZX3dpbGxfaXNfYWdncmVzc2lvbl90b3dhcmRzX2FfY2hpbGRfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRMaXZlc19pbiwgZGYkYDE5X19Ub290aGJydXNoaW5nX2FnYWluc3RfYV9jaGlsZHPigJlfd2lsbF9pc19hZ2dyZXNzaW9uX3Rvd2FyZHNfYV9jaGlsZF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJTGl2ZXNfaW4sIGRmJAlgMjBfX0l0X2lzX2JldHRlcl90b19ub3RfdG9fYnJ1c2hfYWdhaW5zdF9jaGlsZHNfd2lsbF9hc190aGVfbWlsa190ZWV0aF93aWxsX2ZhbGxfb3V0X2FueXdheV9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJExpdmVzX2luLCBkZiRgMjBfX0l0X2lzX2JldHRlcl90b19ub3RfdG9fYnJ1c2hfYWdhaW5zdF9jaGlsZHNfd2lsbF9hc190aGVfbWlsa190ZWV0aF93aWxsX2ZhbGxfb3V0X2FueXdheV9gKSkKCmBgYAoKIyMjIG3DoXMgaGlqb3MKYGBge3IsIGVjaG89RkFMU0V9CmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCwgZGYkCWA2X19Jc19pdF9pbXBvcnRhbnRfdG9fdGFrZV9jYXJlX2Fib3V0X2RlY2lkdW91c190ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCwgZGYkYDZfX0lzX2l0X2ltcG9ydGFudF90b190YWtlX2NhcmVfYWJvdXRfZGVjaWR1b3VzX3RlZXRoX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMl9Jc19pdF95b3VyX2ZpcnN0X2NoaWxkX2AsIGRmJAlgN19fQmVmb3JlX2dvaW5nX3RvX3NsZWVwLF93aGF0X2NvdWxkX3lvdV9vZmZlcl9mb3JfeW91cl8yLXllYXJfb2xkX2NoaWxkX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkYDJfSXNfaXRfeW91cl9maXJzdF9jaGlsZF9gLCBkZiRgN19fQmVmb3JlX2dvaW5nX3RvX3NsZWVwLF93aGF0X2NvdWxkX3lvdV9vZmZlcl9mb3JfeW91cl8yLXllYXJfb2xkX2NoaWxkX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMl9Jc19pdF95b3VyX2ZpcnN0X2NoaWxkX2AsIGRmJAlgOF9fSW5fd2hpY2hfYWdlX3lvdV9zaG91bGRfYmVnaW5fdG9fYnJ1c2hfeW91cl9jaGlsZHNfdGVldGhfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMl9Jc19pdF95b3VyX2ZpcnN0X2NoaWxkX2AsIGRmJGA4X19Jbl93aGljaF9hZ2VfeW91X3Nob3VsZF9iZWdpbl90b19icnVzaF95b3VyX2NoaWxkc190ZWV0aF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJYDJfSXNfaXRfeW91cl9maXJzdF9jaGlsZF9gLCBkZiQJYDlfX1doYXRfd291bGRfeW91X2hhdmVfdG9fdXNlX2Zvcl9icnVzaGluZ195b3VyX2NoaWxkc19maXJzdF90ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCwgZGYkYDlfX1doYXRfd291bGRfeW91X2hhdmVfdG9fdXNlX2Zvcl9icnVzaGluZ195b3VyX2NoaWxkc19maXJzdF90ZWV0aF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJYDJfSXNfaXRfeW91cl9maXJzdF9jaGlsZF9gLCBkZiQJYDEwX19XaGljaF90b290aHBhc3RlX3dvdWxkX3lvdV9jaG9vc2VfZm9yX3lvdXJfY2hpbGRzX2ZpcnN0X3RlZXRoX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkYDJfSXNfaXRfeW91cl9maXJzdF9jaGlsZF9gLCBkZiRgMTBfX1doaWNoX3Rvb3RocGFzdGVfd291bGRfeW91X2Nob29zZV9mb3JfeW91cl9jaGlsZHNfZmlyc3RfdGVldGhfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCwgZGYkCWAxMl9fRmx1b3JpZGVfdG9vdGhwYXN0ZV9pc19iYWRfZm9yX215X2NoaWxkYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMl9Jc19pdF95b3VyX2ZpcnN0X2NoaWxkX2AsIGRmJGAxMl9fRmx1b3JpZGVfdG9vdGhwYXN0ZV9pc19iYWRfZm9yX215X2NoaWxkYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCwgZGYkCWAxM19fSG93X211Y2hfZmx1b3JpZGVfc2hvdWxkX2FfMC0zLXllYXJfb2xkX2NoaWxkc190b290aHBhc3RlX2NvbnRhaW5fYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMl9Jc19pdF95b3VyX2ZpcnN0X2NoaWxkX2AsIGRmJGAxM19fSG93X211Y2hfZmx1b3JpZGVfc2hvdWxkX2FfMC0zLXllYXJfb2xkX2NoaWxkc190b290aHBhc3RlX2NvbnRhaW5fYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCwgZGYkCWAxN19fSG93X211Y2hfdG9vdGhwYXN0ZXNfc2hvdWxkX2JlX3NxdWVlemVkX291dF9vbl9hX3Rvb3RoYnJ1c2hfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMl9Jc19pdF95b3VyX2ZpcnN0X2NoaWxkX2AsIGRmJGAxN19fSG93X211Y2hfdG9vdGhwYXN0ZXNfc2hvdWxkX2JlX3NxdWVlemVkX291dF9vbl9hX3Rvb3RoYnJ1c2hfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCwgZGYkCWAxOF8xX0hvd19tYW55X3RpbWVzX3Blcl9kYXlfeW91X3Nob3VsZF9icnVzaF95b3VyX2NoaWxkc190ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCwgZGYkYDE4XzFfSG93X21hbnlfdGltZXNfcGVyX2RheV95b3Vfc2hvdWxkX2JydXNoX3lvdXJfY2hpbGRzX3RlZXRoX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMl9Jc19pdF95b3VyX2ZpcnN0X2NoaWxkX2AsIGRmJAlgMTlfX1Rvb3RoYnJ1c2hpbmdfYWdhaW5zdF9hX2NoaWxkc+KAmV93aWxsX2lzX2FnZ3Jlc3Npb25fdG93YXJkc19hX2NoaWxkX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkYDJfSXNfaXRfeW91cl9maXJzdF9jaGlsZF9gLCBkZiRgMTlfX1Rvb3RoYnJ1c2hpbmdfYWdhaW5zdF9hX2NoaWxkc+KAmV93aWxsX2lzX2FnZ3Jlc3Npb25fdG93YXJkc19hX2NoaWxkX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMl9Jc19pdF95b3VyX2ZpcnN0X2NoaWxkX2AsIGRmJAlgMjBfX0l0X2lzX2JldHRlcl90b19ub3RfdG9fYnJ1c2hfYWdhaW5zdF9jaGlsZHNfd2lsbF9hc190aGVfbWlsa190ZWV0aF93aWxsX2ZhbGxfb3V0X2FueXdheV9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCwgZGYkYDIwX19JdF9pc19iZXR0ZXJfdG9fbm90X3RvX2JydXNoX2FnYWluc3RfY2hpbGRzX3dpbGxfYXNfdGhlX21pbGtfdGVldGhfd2lsbF9mYWxsX291dF9hbnl3YXlfYCkpCgpgYGAKIyMjIGluY29tZQpgYGB7ciwgZWNobz1GQUxTRX0Ka2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJYDI5X19JbmNvbWVfZm9yX2ZhbWlseWAsIGRmJAlgNl9fSXNfaXRfaW1wb3J0YW50X3RvX3Rha2VfY2FyZV9hYm91dF9kZWNpZHVvdXNfdGVldGhfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkYDZfX0lzX2l0X2ltcG9ydGFudF90b190YWtlX2NhcmVfYWJvdXRfZGVjaWR1b3VzX3RlZXRoX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkCWA3X19CZWZvcmVfZ29pbmdfdG9fc2xlZXAsX3doYXRfY291bGRfeW91X29mZmVyX2Zvcl95b3VyXzIteWVhcl9vbGRfY2hpbGRfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkYDdfX0JlZm9yZV9nb2luZ190b19zbGVlcCxfd2hhdF9jb3VsZF95b3Vfb2ZmZXJfZm9yX3lvdXJfMi15ZWFyX29sZF9jaGlsZF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJYDI5X19JbmNvbWVfZm9yX2ZhbWlseWAsIGRmJAlgOF9fSW5fd2hpY2hfYWdlX3lvdV9zaG91bGRfYmVnaW5fdG9fYnJ1c2hfeW91cl9jaGlsZHNfdGVldGhfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkYDhfX0luX3doaWNoX2FnZV95b3Vfc2hvdWxkX2JlZ2luX3RvX2JydXNoX3lvdXJfY2hpbGRzX3RlZXRoX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkCWA5X19XaGF0X3dvdWxkX3lvdV9oYXZlX3RvX3VzZV9mb3JfYnJ1c2hpbmdfeW91cl9jaGlsZHNfZmlyc3RfdGVldGhfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkYDlfX1doYXRfd291bGRfeW91X2hhdmVfdG9fdXNlX2Zvcl9icnVzaGluZ195b3VyX2NoaWxkc19maXJzdF90ZWV0aF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJYDI5X19JbmNvbWVfZm9yX2ZhbWlseWAsIGRmJAlgMTBfX1doaWNoX3Rvb3RocGFzdGVfd291bGRfeW91X2Nob29zZV9mb3JfeW91cl9jaGlsZHNfZmlyc3RfdGVldGhfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkYDEwX19XaGljaF90b290aHBhc3RlX3dvdWxkX3lvdV9jaG9vc2VfZm9yX3lvdXJfY2hpbGRzX2ZpcnN0X3RlZXRoX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkCWAxMl9fRmx1b3JpZGVfdG9vdGhwYXN0ZV9pc19iYWRfZm9yX215X2NoaWxkYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkYDEyX19GbHVvcmlkZV90b290aHBhc3RlX2lzX2JhZF9mb3JfbXlfY2hpbGRgKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJYDI5X19JbmNvbWVfZm9yX2ZhbWlseWAsIGRmJAlgMTNfX0hvd19tdWNoX2ZsdW9yaWRlX3Nob3VsZF9hXzAtMy15ZWFyX29sZF9jaGlsZHNfdG9vdGhwYXN0ZV9jb250YWluX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkYDI5X19JbmNvbWVfZm9yX2ZhbWlseWAsIGRmJGAxM19fSG93X211Y2hfZmx1b3JpZGVfc2hvdWxkX2FfMC0zLXllYXJfb2xkX2NoaWxkc190b290aHBhc3RlX2NvbnRhaW5fYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAyOV9fSW5jb21lX2Zvcl9mYW1pbHlgLCBkZiQJYDE3X19Ib3dfbXVjaF90b290aHBhc3Rlc19zaG91bGRfYmVfc3F1ZWV6ZWRfb3V0X29uX2FfdG9vdGhicnVzaF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAyOV9fSW5jb21lX2Zvcl9mYW1pbHlgLCBkZiRgMTdfX0hvd19tdWNoX3Rvb3RocGFzdGVzX3Nob3VsZF9iZV9zcXVlZXplZF9vdXRfb25fYV90b290aGJydXNoX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkCWAxOF8xX0hvd19tYW55X3RpbWVzX3Blcl9kYXlfeW91X3Nob3VsZF9icnVzaF95b3VyX2NoaWxkc190ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAyOV9fSW5jb21lX2Zvcl9mYW1pbHlgLCBkZiRgMThfMV9Ib3dfbWFueV90aW1lc19wZXJfZGF5X3lvdV9zaG91bGRfYnJ1c2hfeW91cl9jaGlsZHNfdGVldGhfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAyOV9fSW5jb21lX2Zvcl9mYW1pbHlgLCBkZiQJYDE5X19Ub290aGJydXNoaW5nX2FnYWluc3RfYV9jaGlsZHPigJlfd2lsbF9pc19hZ2dyZXNzaW9uX3Rvd2FyZHNfYV9jaGlsZF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAyOV9fSW5jb21lX2Zvcl9mYW1pbHlgLCBkZiRgMTlfX1Rvb3RoYnJ1c2hpbmdfYWdhaW5zdF9hX2NoaWxkc+KAmV93aWxsX2lzX2FnZ3Jlc3Npb25fdG93YXJkc19hX2NoaWxkX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMjlfX0luY29tZV9mb3JfZmFtaWx5YCwgZGYkCWAyMF9fSXRfaXNfYmV0dGVyX3RvX25vdF90b19icnVzaF9hZ2FpbnN0X2NoaWxkc193aWxsX2FzX3RoZV9taWxrX3RlZXRoX3dpbGxfZmFsbF9vdXRfYW55d2F5X2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkYDI5X19JbmNvbWVfZm9yX2ZhbWlseWAsIGRmJGAyMF9fSXRfaXNfYmV0dGVyX3RvX25vdF90b19icnVzaF9hZ2FpbnN0X2NoaWxkc193aWxsX2FzX3RoZV9taWxrX3RlZXRoX3dpbGxfZmFsbF9vdXRfYW55d2F5X2ApKQoKYGBgCiMjIyBtb3RoZXIgZWR1Y2F0aW9uCmBgYHtyLCBlY2hvPUZBTFNFfQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMzFfX01vdGhlcnNfZWR1Y2F0aW9uX2dyb3VwYCwgZGYkCWA2X19Jc19pdF9pbXBvcnRhbnRfdG9fdGFrZV9jYXJlX2Fib3V0X2RlY2lkdW91c190ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiRgNl9fSXNfaXRfaW1wb3J0YW50X3RvX3Rha2VfY2FyZV9hYm91dF9kZWNpZHVvdXNfdGVldGhfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiQJYDdfX0JlZm9yZV9nb2luZ190b19zbGVlcCxfd2hhdF9jb3VsZF95b3Vfb2ZmZXJfZm9yX3lvdXJfMi15ZWFyX29sZF9jaGlsZF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiRgN19fQmVmb3JlX2dvaW5nX3RvX3NsZWVwLF93aGF0X2NvdWxkX3lvdV9vZmZlcl9mb3JfeW91cl8yLXllYXJfb2xkX2NoaWxkX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMzFfX01vdGhlcnNfZWR1Y2F0aW9uX2dyb3VwYCwgZGYkCWA4X19Jbl93aGljaF9hZ2VfeW91X3Nob3VsZF9iZWdpbl90b19icnVzaF95b3VyX2NoaWxkc190ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiRgOF9fSW5fd2hpY2hfYWdlX3lvdV9zaG91bGRfYmVnaW5fdG9fYnJ1c2hfeW91cl9jaGlsZHNfdGVldGhfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiQJYDlfX1doYXRfd291bGRfeW91X2hhdmVfdG9fdXNlX2Zvcl9icnVzaGluZ195b3VyX2NoaWxkc19maXJzdF90ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiRgOV9fV2hhdF93b3VsZF95b3VfaGF2ZV90b191c2VfZm9yX2JydXNoaW5nX3lvdXJfY2hpbGRzX2ZpcnN0X3RlZXRoX2ApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMzFfX01vdGhlcnNfZWR1Y2F0aW9uX2dyb3VwYCwgZGYkCWAxMF9fV2hpY2hfdG9vdGhwYXN0ZV93b3VsZF95b3VfY2hvb3NlX2Zvcl95b3VyX2NoaWxkc19maXJzdF90ZWV0aF9gCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiRgMTBfX1doaWNoX3Rvb3RocGFzdGVfd291bGRfeW91X2Nob29zZV9mb3JfeW91cl9jaGlsZHNfZmlyc3RfdGVldGhfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiQJYDEyX19GbHVvcmlkZV90b290aHBhc3RlX2lzX2JhZF9mb3JfbXlfY2hpbGRgCSksIDEpKjEwMCkJOwljaGlzcS50ZXN0KHRhYmxlKGRmJGAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiRgMTJfX0ZsdW9yaWRlX3Rvb3RocGFzdGVfaXNfYmFkX2Zvcl9teV9jaGlsZGApKQprYWJsZShwcm9wLnRhYmxlKHRhYmxlKGRmJAlgMzFfX01vdGhlcnNfZWR1Y2F0aW9uX2dyb3VwYCwgZGYkCWAxM19fSG93X211Y2hfZmx1b3JpZGVfc2hvdWxkX2FfMC0zLXllYXJfb2xkX2NoaWxkc190b290aHBhc3RlX2NvbnRhaW5fYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMzFfX01vdGhlcnNfZWR1Y2F0aW9uX2dyb3VwYCwgZGYkYDEzX19Ib3dfbXVjaF9mbHVvcmlkZV9zaG91bGRfYV8wLTMteWVhcl9vbGRfY2hpbGRzX3Rvb3RocGFzdGVfY29udGFpbl9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJYDMxX19Nb3RoZXJzX2VkdWNhdGlvbl9ncm91cGAsIGRmJAlgMTdfX0hvd19tdWNoX3Rvb3RocGFzdGVzX3Nob3VsZF9iZV9zcXVlZXplZF9vdXRfb25fYV90b290aGJydXNoX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkYDMxX19Nb3RoZXJzX2VkdWNhdGlvbl9ncm91cGAsIGRmJGAxN19fSG93X211Y2hfdG9vdGhwYXN0ZXNfc2hvdWxkX2JlX3NxdWVlemVkX291dF9vbl9hX3Rvb3RoYnJ1c2hfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiQJYDE4XzFfSG93X21hbnlfdGltZXNfcGVyX2RheV95b3Vfc2hvdWxkX2JydXNoX3lvdXJfY2hpbGRzX3RlZXRoX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkYDMxX19Nb3RoZXJzX2VkdWNhdGlvbl9ncm91cGAsIGRmJGAxOF8xX0hvd19tYW55X3RpbWVzX3Blcl9kYXlfeW91X3Nob3VsZF9icnVzaF95b3VyX2NoaWxkc190ZWV0aF9gKSkKa2FibGUocHJvcC50YWJsZSh0YWJsZShkZiQJYDMxX19Nb3RoZXJzX2VkdWNhdGlvbl9ncm91cGAsIGRmJAlgMTlfX1Rvb3RoYnJ1c2hpbmdfYWdhaW5zdF9hX2NoaWxkc+KAmV93aWxsX2lzX2FnZ3Jlc3Npb25fdG93YXJkc19hX2NoaWxkX2AJKSwgMSkqMTAwKQk7CWNoaXNxLnRlc3QodGFibGUoZGYkYDMxX19Nb3RoZXJzX2VkdWNhdGlvbl9ncm91cGAsIGRmJGAxOV9fVG9vdGhicnVzaGluZ19hZ2FpbnN0X2FfY2hpbGRz4oCZX3dpbGxfaXNfYWdncmVzc2lvbl90b3dhcmRzX2FfY2hpbGRfYCkpCmthYmxlKHByb3AudGFibGUodGFibGUoZGYkCWAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgLCBkZiQJYDIwX19JdF9pc19iZXR0ZXJfdG9fbm90X3RvX2JydXNoX2FnYWluc3RfY2hpbGRzX3dpbGxfYXNfdGhlX21pbGtfdGVldGhfd2lsbF9mYWxsX291dF9hbnl3YXlfYAkpLCAxKSoxMDApCTsJY2hpc3EudGVzdCh0YWJsZShkZiRgMzFfX01vdGhlcnNfZWR1Y2F0aW9uX2dyb3VwYCwgZGYkYDIwX19JdF9pc19iZXR0ZXJfdG9fbm90X3RvX2JydXNoX2FnYWluc3RfY2hpbGRzX3dpbGxfYXNfdGhlX21pbGtfdGVldGhfd2lsbF9mYWxsX291dF9hbnl3YXlfYCkpCgpgYGAKCiMgR3LDoWZpY29zCmBgYHtyfQpkZiAlPiUgCiAgICAgICAgZ2dwbG90KGFlcyhmY3RfaW5mcmVxKFBpbGRpdGEpKSkgKyAKICAgICAgICBnZW9tX2JhcigpICsKICAgICAgICBjb29yZF9mbGlwKCkgKyAKICAgICAgICBnZ3RpdGxlKCJQYXJ0aWNpcGFudHMiKSArIHlsYWIoIkNvdW50IikgKyB4bGFiKCJQaWxkZXRhIikKIApgYGAKYGBge3J9CmRmICU+JSAKICAgICAgICBnZ3Bsb3QoYWVzKGZjdF9pbmZyZXEoTGl2ZXNfaW4pKSkgKyAKICAgICAgICBnZW9tX2JhcigpICsKICAgICAgICBjb29yZF9mbGlwKCkgKyAKICAgICAgICBnZ3RpdGxlKCJQYXJ0aWNpcGFudHMiKSArIHlsYWIoIkNvdW50IikgKyB4bGFiKCJMaXZlc19pbiIpCmBgYAoKYGBge3J9CmRmICU+JSAKICAgICAgICBnZ3Bsb3QoYWVzKGAyX0lzX2l0X3lvdXJfZmlyc3RfY2hpbGRfYCkpICsgCiAgICAgICAgZ2VvbV9iYXIoKSAKYGBgCgpgYGB7cn0KZGYgJT4lIAogICAgICAgIGdncGxvdChhZXMoYDNfX05yX19vZl9jaGlsZHJlbl9pbl9mYW1pbHlgKSkgKyAKICAgICAgICBnZW9tX2JhcigpIApgYGAKCmBgYHtyfQpkZiAlPiUgCiAgICAgICAgZ2dwbG90KGFlcyhgNF9fT3JhbF9oZWFsdGhfZm9yX29sZGVyX3NpYmxpbmdzX2dyb3Vwc2ApKSArIAogICAgICAgIGdlb21fYmFyKCkgCmBgYAoKYGBge3J9CmRmJGluY29tZSA8LSAgZmFjdG9yKGRmJGAyOV9fSW5jb21lX2Zvcl9mYW1pbHlgLCBjKCI8IDMwMCBFVVIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMwMC03MDAgRVVSIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI+IDcwMCBFVVIiKSkKZGYgJT4lIAogICAgICAgIGdncGxvdChhZXMoaW5jb21lKSkgKyAKICAgICAgICBnZW9tX2JhcigpIApgYGAKYGBge3J9CmRmICU+JSAKICAgICAgICBnZ3Bsb3QoYWVzKHggPSBgMjNfX0RpZF95b3VfcmVjZWl2ZV9yZWNvbW1lbmRhdGlvbl9mcm9tX3lvdXJfZ2luZWNvbG9naXN0X3RvX3Zpc2l0X2FfZGVudGlzdF9kdXJpbmdfcHJlZ25hbmN5X2ApKSArIAogICAgICAgIGdlb21fYmFyKCkKYGBgCgpgYGB7cn0KZGYkZWR1Y2F0aW9uIDwtIGZhY3RvcihkZiRgMzFfX01vdGhlcnNfZWR1Y2F0aW9uX2dyb3VwYCwgCiAgICAgICAgICAgICAgICAgICAgICAgYygiYmFzaWMgZWR1Y2F0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAiaGlnaCBzY2hvb2wiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xsZWdlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5pdmVyc2l0eSIpKQpkZiAlPiUgCiAgICAgICAgZ2dwbG90KGFlcyh4ID0gZWR1Y2F0aW9uKSkgKwogICAgICAgIGdlb21fYmFyKCkKYGBgCgpgYGB7cn0KZGYgJT4lIAogICAgICAgIGdncGxvdChhZXMoeCA9IEF0dFBlcmMsIHkgPSBLbm9QZXJjLCBjb2xvdXIgPSBlZHVjYXRpb24pKSArCiAgICAgICAgZ2VvbV9wb2ludCgpCmBgYAoKYGBge3J9CmRmICU+JSAKICAgICAgICBnZ3Bsb3QoYWVzKHggPSBlZHVjYXRpb24sIHkgPSBBdHRQZXJjKSkgKyAKICAgICAgICBnZW9tX2JveHBsb3QoKSAKYGBgCmBgYHtyfQpkZiAlPiUgCiAgICAgICAgZ2dwbG90KGFlcyh4ID0gTGl2ZXNfaW4sIHkgPSBBdHRpdHVkZSkpICsKICAgICAgICBnZW9tX2JveHBsb3QoKQpgYGAKYGBge3J9CmRmICU+JSAKICAgICAgICBnZ3Bsb3QoYWVzKHggPSBMaXZlc19pbiwgeSA9IEtub1BlcmMpKSArCiAgICAgICAgZ2VvbV9ib3hwbG90KCkKYGBgCgojIFF1w6kgZXhwbGljYSBBdHRpdHVkZQpgYGB7cn0KZml0X2F0dCA8LSBnbG0oQXR0UGVyYyB+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFnZV9ncm91cHMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXZlc19pbiArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMl9Jc19pdF95b3VyX2ZpcnN0X2NoaWxkX2AgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMjFfRG9feW91X2hhdmVfeW91cl9vd25fZGVudGlzdF9gICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyM19fRGlkX3lvdV9yZWNlaXZlX3JlY29tbWVuZGF0aW9uX2Zyb21feW91cl9naW5lY29sb2dpc3RfdG9fdmlzaXRfYV9kZW50aXN0X2R1cmluZ19wcmVnbmFuY3lfYCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyNF9fSGF2ZV95b3VfaGFkX3lvdXJfdGVldGhfcmVzdG9yZWRfaW5fbGF0ZXN0X2AgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMjZfX0RvX3lvdV91c2VfZmx1b3JpZGVfdG9vdGhwYXN0ZV9gICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyN19fRGlkX3lvdV9zbW9rZV91bnRpbF9wcmVnbmFuY3lfYCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAyOV9fSW5jb21lX2Zvcl9mYW1pbHlgICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAzMV9fTW90aGVyc19lZHVjYXRpb25fZ3JvdXBgICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDMyX0RvX3lvdV91c2VfcGhvbmVfd2l0aF9pbnRlcm5ldF9gLCAKICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkZikKc3VtbWFyeShmaXRfYXR0KQpgYGAKCiMjIEdyYWYgYXR0CmBgYHtyfQp0ZF9hdHQgPC0gdGlkeShmaXRfYXR0LCBjb25mLmludCA9IFRSVUUpCnRkX2F0dCAlPiUgCiAgICAgICAgZ2dwbG90KGFlcyh0ZXJtLCBlc3RpbWF0ZSkpICsKICAgICAgICBnZW9tX3BvaW50KCkgKwogICAgICAgIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNvbmYubG93LCB5bWF4ID0gY29uZi5oaWdoKSkgKwogICAgICAgIGxhYnModGl0bGUgPSAiQ29lZmZpY2llbnRzIG9mIGEgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwiKQpgYGAKCgoKIyBRdcOpIGV4cGxpY2Ega25vd2xlZGdlPwpgYGB7cn0KZml0X2tub3cgPC0gZ2xtKEtub1BlcmMgfgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ2VfZ3JvdXBzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGl2ZXNfaW4gKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDJfSXNfaXRfeW91cl9maXJzdF9jaGlsZF9gICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDIxX0RvX3lvdV9oYXZlX3lvdXJfb3duX2RlbnRpc3RfYCArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMjNfX0RpZF95b3VfcmVjZWl2ZV9yZWNvbW1lbmRhdGlvbl9mcm9tX3lvdXJfZ2luZWNvbG9naXN0X3RvX3Zpc2l0X2FfZGVudGlzdF9kdXJpbmdfcHJlZ25hbmN5X2AgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMjRfX0hhdmVfeW91X2hhZF95b3VyX3RlZXRoX3Jlc3RvcmVkX2luX2xhdGVzdF9gICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDI2X19Eb195b3VfdXNlX2ZsdW9yaWRlX3Rvb3RocGFzdGVfYCArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMjdfX0RpZF95b3Vfc21va2VfdW50aWxfcHJlZ25hbmN5X2AgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMjlfX0luY29tZV9mb3JfZmFtaWx5YCArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgMzFfX01vdGhlcnNfZWR1Y2F0aW9uX2dyb3VwYCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAzMl9Eb195b3VfdXNlX3Bob25lX3dpdGhfaW50ZXJuZXRfYCwgCiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGYpCnN1bW1hcnkoZml0X2tub3cpCmBgYAoKIyMgR3JhZiBrbm93bGVkZ2UKCmBgYHtyfQp0ZF9rbm93IDwtIHRpZHkoZml0X2tub3csIGNvbmYuaW50ID0gVFJVRSkKdGRfa25vdyAlPiUgCiAgICAgICAgZ2dwbG90KGFlcyh0ZXJtLCBlc3RpbWF0ZSkpICsKICAgICAgICBnZW9tX3BvaW50KCkgKwogICAgICAgIGNvb3JkX2ZsaXAoKSArCiAgICAgICAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY29uZi5sb3csIHltYXggPSBjb25mLmhpZ2gpKSArCiAgICAgICAgbGFicyh0aXRsZSA9ICJDb2VmZmljaWVudHMgb2YgYSBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbCIpCmBgYAoKIyMgQk1JCmBgYHtyfQp0YWJsZShkZiRCTUkpCmNsYXNzKGRmJEJNSSkKZGYkQk1JIDwtIGFzLm51bWVyaWMoZGYkQk1JKQpoaXN0KGRmJEJNSSkKZGZfQk1JIDwtIGRmICU+JSAKICAgICAgICBmaWx0ZXIoQk1JID4gMCkKaGlzdChkZl9CTUkkQk1JKQpgYGAKYGBge3J9CnN1bW1hcnkoZGZfQk1JJEJNSSkKYGBgCgoK