Input Data

q1 <- read_csv("Q1_data_set_6-11-24.csv", 
    col_types = cols(treatment = col_factor(levels = c("3", 
        "4")), block = col_factor(levels = c("1", 
        "4", "6", "7", "8", "9", "10", "11", 
        "12")), round = col_factor(levels = c("1", 
        "2", "3")), inoc_binary = col_factor(levels = c("1", 
        "0"))))
q1$colony <- as.factor(q1$colony)

rounds <- read_csv("rounds.csv")

q3 <- read_csv("q3_non_inoc_bees.csv",
      col_types = cols(treatment = col_factor(levels = c("3", 
        "4")), block = col_factor(levels = c("1", 
        "4", "6", "7", "8", "9", "10", "11", 
        "12")), round = col_factor(levels = c("1", 
        "2", "3"))))
## Warning: The following named parsers don't match the column names: round
q3$colony <- as.factor(q3$colony)
q3$bee <- as.factor(q3$bee)

q3 <- merge(q3, rounds, by = "colony", all = FALSE)

q4 <- read_csv("q4_all_bees_per_bee.csv", 
    col_types = cols(treatment = col_factor(levels = c("3", 
        "4")), block = col_factor(levels = c("1", 
        "4", "6", "7", "8", "9", "10", "11", 
        "12")), inoc_binary = col_factor(levels = c("1", 
        "0")), round = col_factor(levels = c("1", 
        "2", "3"))))

q4$colony <- as.factor(q4$colony)

Input additional data for merge

all_bees <- read_csv("qpcr_inoc_bees.csv", col_types = cols(treatment = col_factor(levels = c("1","2", "3","4")),replicate = col_factor(levels = c("1","4", "6", "7", "8", "9", "10", "11", "12")), start = col_date(format = "%m/%d/%Y"), Innoculation_date = col_date(format = "%m/%d/%Y"), date = col_date(format = "%m/%d/%Y"), censor_status = col_factor(levels = c("1","2"))))

pollen <- read_csv("pollen.csv")
pollen$colony <- as.factor(pollen$colony)
pollen$treatment <- as.factor(pollen$treatment)
pollen$block <- as.factor(pollen$block)

avg.pol <- pollen %>%
  group_by(colony) %>%
  summarise(avg.pol = mean(whole_dif))


avg.pol <- as.data.frame(avg.pol)

all_bees <- merge(all_bees, avg.pol, by="colony", all = FALSE)
q1 <- merge(q1, avg.pol, by = "colony", all = FALSE)
q3 <- merge(q3, avg.pol, by = "colony", all = FALSE)
q4 <- merge(q4, avg.pol, by = "colony", all = FALSE)

How long since inoculation does it take for an infection to be detected in the inoculated bee?

days_detec <- glm.nb(day_first_detection ~ treatment + avg.pol + round, data = q1)
## Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
## control$trace > : iteration limit reached

## Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
## control$trace > : iteration limit reached
drop1(days_detec, test = "Chisq")
## Single term deletions
## 
## Model:
## day_first_detection ~ treatment + avg.pol + round
##           Df Deviance    AIC    LRT Pr(>Chi)
## <none>         2.6217 48.107                
## treatment  1   3.5071 46.992 0.8854   0.3467
## avg.pol    1   4.3335 47.819 1.7118   0.1908
## round      2   4.9317 46.417 2.3100   0.3151
ddet1 <- update(days_detec, .~. -round)
## Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
## control$trace > : iteration limit reached

## Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
## control$trace > : iteration limit reached
drop1(ddet1, test = "Chisq")
## Single term deletions
## 
## Model:
## day_first_detection ~ treatment + avg.pol
##           Df Deviance    AIC     LRT Pr(>Chi)
## <none>         4.9316 46.417                 
## treatment  1   5.8877 45.373 0.95607   0.3282
## avg.pol    1   5.4377 44.923 0.50612   0.4768
ddet2 <- update(ddet1, .~. -avg.pol)
## Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
## control$trace > : iteration limit reached

## Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
## control$trace > : iteration limit reached
drop1(ddet2, test = "Chisq")
## Single term deletions
## 
## Model:
## day_first_detection ~ treatment
##           Df Deviance    AIC    LRT Pr(>Chi)
## <none>         5.4377 44.923                
## treatment  1   6.5334 44.019 1.0957   0.2952
Anova(ddet2)
## Analysis of Deviance Table (Type II tests)
## 
## Response: day_first_detection
##           LR Chisq Df Pr(>Chisq)
## treatment   1.0957  1     0.2952
plot(q1$treatment, q1$day_first_detection)

days <- q1 %>%
  group_by(treatment) %>%
  summarise(m = mean(day_first_detection))

days
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3          1.75
## 2 4          1.12

How long since inoculation does it take for an infection to be detected in non-inoculated bees?

days_detec.ni <- glmer.nb(days_first_det ~ treatment + avg.pol + (1|colony) + round, data = q3)
## Warning in theta.ml(Y, mu, weights = object@resp$weights, limit = limit, :
## iteration limit reached
drop1(days_detec.ni, test = "Chisq")
## Single term deletions
## 
## Model:
## days_first_det ~ treatment + avg.pol + (1 | colony) + round
##           npar    AIC    LRT  Pr(Chi)   
## <none>         195.39                   
## treatment    1 194.25 0.8555 0.354993   
## avg.pol      1 194.09 0.6999 0.402828   
## round        1 201.21 7.8167 0.005177 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
dd1 <- update(days_detec.ni, .~. -avg.pol)
drop1(dd1, test = "Chisq")
## Single term deletions
## 
## Model:
## days_first_det ~ treatment + (1 | colony) + round
##           npar    AIC    LRT  Pr(Chi)   
## <none>         194.09                   
## treatment    1 193.05 0.9535 0.328833   
## round        1 199.22 7.1251 0.007601 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(q3$treatment, q3$days_first_det)

days.ni <- q3 %>%
  group_by(treatment) %>%
  summarise(m = mean(days_first_det))

days.ni
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3          2.13
## 2 4          1.73

How long does it take for infection to reach ADL in inoculated bees?

days_detec_adl <- glm.nb(day_first_ADL ~ treatment + avg.pol + round, data = q1)
drop1(days_detec_adl, test = "Chisq")
## Single term deletions
## 
## Model:
## day_first_ADL ~ treatment + avg.pol + round
##           Df Deviance    AIC     LRT Pr(>Chi)
## <none>         11.664 65.652                 
## treatment  1   13.884 65.872 2.22045   0.1362
## avg.pol    1   11.765 63.754 0.10181   0.7497
## round      2   14.566 64.554 2.90186   0.2344
dadl <- update(days_detec_adl, .~. -avg.pol)
drop1(dadl, test = "Chisq")
## Single term deletions
## 
## Model:
## day_first_ADL ~ treatment + round
##           Df Deviance    AIC    LRT Pr(>Chi)
## <none>         11.775 63.754                
## treatment  1   13.996 63.975 2.2210   0.1361
## round      2   14.584 62.562 2.8084   0.2456
dadl2 <- update(dadl, .~. -round)
Anova(dadl2)
## Analysis of Deviance Table (Type II tests)
## 
## Response: day_first_ADL
##           LR Chisq Df Pr(>Chisq)  
## treatment    2.993  1    0.08363 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(q1$treatment, q1$day_first_ADL)

days.adl <- q1 %>%
  group_by(treatment) %>%
  summarise(m = mean(day_first_ADL))

days.adl
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3           3.5
## 2 4           2

How long does it take for infection to reach ADL in non-inoculated bees?

q3.adl <- q3[complete.cases(q3$days_first_adl), ]

days_detec_adl.ni <- glmer.nb(days_first_adl ~ treatment + avg.pol + (1|colony) + round, data = q3.adl)
drop1(days_detec_adl.ni, test = "Chisq")
## Single term deletions
## 
## Model:
## days_first_adl ~ treatment + avg.pol + (1 | colony) + round
##           npar    AIC     LRT   Pr(Chi)    
## <none>         221.34                      
## treatment    1 220.84  1.5064 0.2196816    
## avg.pol      1 224.33  4.9936 0.0254419 *  
## round        1 232.69 13.3492 0.0002585 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Anova(days_detec_adl.ni)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: days_first_adl
##             Chisq Df Pr(>Chisq)    
## treatment  1.6428  1     0.1999    
## avg.pol    5.8933  1     0.0152 *  
## round     16.8066  1  4.139e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(q3$treatment, q3$days_first_adl)

days.adl.ni <- q3.adl %>%
  group_by(treatment) %>%
  summarise(m = mean(days_first_adl))

days.adl.ni
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3          4.91
## 2 4          6

How many days out of 14 did an inoc bee test above adl for infection?

total_adl <- glm.nb(num_days_adl ~ treatment + avg.pol + round, data = q1)
drop1(total_adl, test = "Chisq")
## Single term deletions
## 
## Model:
## num_days_adl ~ treatment + avg.pol + round
##           Df Deviance    AIC    LRT Pr(>Chi)
## <none>         17.667 90.571                
## treatment  1   17.981 88.885 0.3138   0.5753
## avg.pol    1   18.681 89.586 1.0145   0.3138
## round      2   21.194 90.099 3.5272   0.1714
tot_ad <- update(total_adl, .~. -avg.pol)
drop1(tot_ad, test = "Chisq")
## Single term deletions
## 
## Model:
## num_days_adl ~ treatment + round
##           Df Deviance    AIC    LRT Pr(>Chi)  
## <none>         17.505 89.549                  
## treatment  1   17.781 87.826 0.2763  0.59913  
## round      2   23.247 91.292 5.7430  0.05661 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
totad2 <- update(tot_ad, .~. -round)
Anova(totad2)
## Analysis of Deviance Table (Type II tests)
## 
## Response: num_days_adl
##           LR Chisq Df Pr(>Chisq)
## treatment  0.24634  1     0.6197
plot(q1$treatment, q1$num_days_adl)

num_adl <- q1 %>%
  group_by(treatment) %>%
  summarise(m = mean(num_days_adl))
num_adl
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3           5.5
## 2 4           6.5

How many days out of 14 did a non-inoc bee test above adl for infection?

total_adl.ni <- glmer.nb(total_days_adl ~ treatment + avg.pol + (1|colony) + round, data = q3)
drop1(total_adl.ni, test = "Chisq")
## Single term deletions
## 
## Model:
## total_days_adl ~ treatment + avg.pol + (1 | colony) + round
##           npar    AIC    LRT Pr(Chi)  
## <none>         234.80                 
## treatment    1 233.68 0.8801 0.34817  
## avg.pol      1 235.43 2.6287 0.10495  
## round        1 238.09 5.2826 0.02154 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
tot_ad.ni <- update(total_adl.ni, .~. -avg.pol)
drop1(tot_ad.ni, test = "Chisq")
## Single term deletions
## 
## Model:
## total_days_adl ~ treatment + (1 | colony) + round
##           npar    AIC    LRT  Pr(Chi)   
## <none>         235.43                   
## treatment    1 234.85 1.4154 0.234158   
## round        1 240.81 7.3743 0.006616 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Anova(tot_ad.ni)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: total_days_adl
##            Chisq Df Pr(>Chisq)   
## treatment 1.5796  1    0.20882   
## round     8.8756  1    0.00289 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(q3$treatment, q3$total_days_adl)

num_adl.ni <- q3 %>%
  group_by(treatment) %>%
  summarise(m = mean(total_days_adl))
num_adl.ni
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3          2.8 
## 2 4          1.83

How many days out of 14 did an inoc bee test positive for infection?

total_det <- glm(num_days_det ~ treatment + avg.pol + round, data = q1)
drop1(total_det, test = "Chisq")
## Single term deletions
## 
## Model:
## num_days_det ~ treatment + avg.pol + round
##           Df Deviance    AIC scaled dev. Pr(>Chi)  
## <none>         86.433 84.395                       
## treatment  1   95.525 83.995      1.6003  0.20586  
## avg.pol    1  123.034 88.044      5.6495  0.01746 *
## round      2  142.224 88.363      7.9685  0.01861 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
tot_det1 <- update(total_det, .~. -avg.pol)
drop1(tot_det1, test = "Chisq")
## Single term deletions
## 
## Model:
## num_days_det ~ treatment + round
##           Df Deviance    AIC scaled dev. Pr(>Chi)  
## <none>         123.03 88.044                       
## treatment  1   134.30 87.446      1.4018  0.23643  
## round      2   203.50 92.095      8.0512  0.01785 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Anova(tot_det1)
## Analysis of Deviance Table (Type II tests)
## 
## Response: num_days_det
##           LR Chisq Df Pr(>Chisq)  
## treatment   1.0988  1    0.29454  
## round       7.8481  2    0.01976 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(q1$treatment, q1$num_days_det)

num_det <- q1 %>%
  group_by(treatment) %>%
  summarise(m = mean(num_days_det))
num_det
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3          9.25
## 2 4         10.5

How many days out of 14 did a non-inoc bee test positive for infection?

total_det.ni <- glmer.nb(total_days_detected ~ treatment + avg.pol + (1|colony) + round, data = q3)
## Warning in theta.ml(Y, mu, weights = object@resp$weights, limit = limit, :
## iteration limit reached
drop1(total_det.ni, test = "Chisq")
## Single term deletions
## 
## Model:
## total_days_detected ~ treatment + avg.pol + (1 | colony) + round
##           npar    AIC      LRT Pr(Chi)
## <none>         298.53                 
## treatment    1 296.69 0.154873  0.6939
## avg.pol      1 296.57 0.036981  0.8475
## round        1 296.78 0.245371  0.6204
totdetni <- update(total_det.ni, .~. -avg.pol)
drop1(totdetni, test = "Chisq")
## Single term deletions
## 
## Model:
## total_days_detected ~ treatment + (1 | colony) + round
##           npar    AIC     LRT Pr(Chi)
## <none>         296.57                
## treatment    1 294.71 0.13935  0.7089
## round        1 294.90 0.32909  0.5662
totdetni1 <- update(totdetni, .~. -round)
Anova(totdetni1)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: total_days_detected
##            Chisq Df Pr(>Chisq)
## treatment 0.1693  1     0.6807
plot(q3$treatment, q3$total_days_detected)

num_detni <- q3 %>%
  group_by(treatment) %>%
  summarise(m = mean(total_days_detected))
num_detni
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3          7.67
## 2 4          7.97

How many days for an inoculated bee to reach max spores?

days_max <- glm.nb(days_max_spores ~ treatment + avg.pol + round, data = q1)
drop1(days_max, test = "Chisq")
## Single term deletions
## 
## Model:
## days_max_spores ~ treatment + avg.pol + round
##           Df Deviance    AIC    LRT Pr(>Chi)
## <none>         17.045 95.278                
## treatment  1   17.046 93.279 0.0013   0.9710
## avg.pol    1   17.123 93.356 0.0781   0.7798
## round      2   20.548 94.781 3.5035   0.1735
dm1 <- update(days_max, .~. -avg.pol)
drop1(dm1, test = "Chisq")
## Single term deletions
## 
## Model:
## days_max_spores ~ treatment + round
##           Df Deviance    AIC    LRT Pr(>Chi)  
## <none>         16.970 93.355                  
## treatment  1   16.973 91.358 0.0030  0.95629  
## round      2   21.720 94.106 4.7506  0.09298 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
dm2 <- update(dm1, .~. -round)
Anova(dm2)
## Analysis of Deviance Table (Type II tests)
## 
## Response: days_max_spores
##           LR Chisq Df Pr(>Chisq)
## treatment 0.012681  1     0.9103
plot(q1$treatment, q1$days_max_spores)

num_det <- q1 %>%
  group_by(treatment) %>%
  summarise(m = mean(days_max_spores))
num_det
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3          6.62
## 2 4          6.88

How many days for a non-inoculated bee to reach max spores?

non.max <- glmer.nb(days_max_spores ~ treatment + round + avg.pol + (1|colony), data = q3)
## Warning in theta.ml(Y, mu, weights = object@resp$weights, limit = limit, :
## iteration limit reached
drop1(non.max, test = "Chisq")
## Single term deletions
## 
## Model:
## days_max_spores ~ treatment + round + avg.pol + (1 | colony)
##           npar    AIC    LRT  Pr(Chi)   
## <none>         325.35                   
## treatment    1 323.36 0.0012 0.972704   
## round        1 332.56 9.2065 0.002412 **
## avg.pol      1 323.37 0.0127 0.910135   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
nm1 <- update(non.max, .~. -avg.pol)
drop1(nm1, test = "Chisq")
## Single term deletions
## 
## Model:
## days_max_spores ~ treatment + round + (1 | colony)
##           npar    AIC    LRT  Pr(Chi)   
## <none>         323.37                   
## treatment    1 321.37 0.0024 0.960551   
## round        1 331.26 9.8911 0.001661 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Anova(nm1)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: days_max_spores
##             Chisq Df Pr(>Chisq)    
## treatment  0.0025  1  0.9604486    
## round     12.1176  1  0.0004995 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(q3$treatment, q3$days_max_spores)

num_max_ni <- q3 %>%
  group_by(treatment) %>%
  summarise(m = mean(days_max_spores))
num_max_ni
## # A tibble: 2 × 2
##   treatment     m
##   <fct>     <dbl>
## 1 3           7.5
## 2 4           7.1

What is the max spore count per treatment?

max.spore <- lmer(max_spores ~ treatment + round + avg.pol + (1|colony), data = q4)
Anova(max.spore)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: max_spores
##            Chisq Df Pr(>Chisq)
## treatment 0.4283  1     0.5128
## round     4.1195  2     0.1275
## avg.pol   0.4208  1     0.5165
plot(q4$treatment, q4$max_spores)

How many peaks of infection occur in IB vs. NIB per treatment?

LS0tDQp0aXRsZTogInFQQ1IgRGF0YXNldCBRdWVzdGlvbnMiDQphdXRob3I6ICJFbWlseSBSdW5uaW9uIg0KZGF0ZTogIkFuYWx5c2lzIFN1bW1lciAyMDI0Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNA0KICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0aGVtZTogam91cm5hbA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChtZXNzYWdlID0gRkFMU0UpDQpgYGANCg0KDQpgYGB7ciBsb2FkIGxpYnJhcmllcywgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KHZpcmlkaXNMaXRlKQ0KbGlicmFyeShzdGF0cykNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShlbW1lYW5zKQ0KbGlicmFyeShNQVNTKQ0KbGlicmFyeShsbWU0KQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGNvd3Bsb3QpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoZ2dwdWJyKQ0KbGlicmFyeShnbG1tVE1CKQ0KbGlicmFyeShyc3RhdGl4KQ0KbGlicmFyeShmaXRkaXN0cnBsdXMpDQpgYGANCg0KDQojIyMgSW5wdXQgRGF0YSANCg0KYGBge3J9DQoNCnExIDwtIHJlYWRfY3N2KCJRMV9kYXRhX3NldF82LTExLTI0LmNzdiIsIA0KICAgIGNvbF90eXBlcyA9IGNvbHModHJlYXRtZW50ID0gY29sX2ZhY3RvcihsZXZlbHMgPSBjKCIzIiwgDQogICAgICAgICI0IikpLCBibG9jayA9IGNvbF9mYWN0b3IobGV2ZWxzID0gYygiMSIsIA0KICAgICAgICAiNCIsICI2IiwgIjciLCAiOCIsICI5IiwgIjEwIiwgIjExIiwgDQogICAgICAgICIxMiIpKSwgcm91bmQgPSBjb2xfZmFjdG9yKGxldmVscyA9IGMoIjEiLCANCiAgICAgICAgIjIiLCAiMyIpKSwgaW5vY19iaW5hcnkgPSBjb2xfZmFjdG9yKGxldmVscyA9IGMoIjEiLCANCiAgICAgICAgIjAiKSkpKQ0KcTEkY29sb255IDwtIGFzLmZhY3RvcihxMSRjb2xvbnkpDQoNCnJvdW5kcyA8LSByZWFkX2Nzdigicm91bmRzLmNzdiIpDQoNCnEzIDwtIHJlYWRfY3N2KCJxM19ub25faW5vY19iZWVzLmNzdiIsDQogICAgICBjb2xfdHlwZXMgPSBjb2xzKHRyZWF0bWVudCA9IGNvbF9mYWN0b3IobGV2ZWxzID0gYygiMyIsIA0KICAgICAgICAiNCIpKSwgYmxvY2sgPSBjb2xfZmFjdG9yKGxldmVscyA9IGMoIjEiLCANCiAgICAgICAgIjQiLCAiNiIsICI3IiwgIjgiLCAiOSIsICIxMCIsICIxMSIsIA0KICAgICAgICAiMTIiKSksIHJvdW5kID0gY29sX2ZhY3RvcihsZXZlbHMgPSBjKCIxIiwgDQogICAgICAgICIyIiwgIjMiKSkpKQ0KDQpxMyRjb2xvbnkgPC0gYXMuZmFjdG9yKHEzJGNvbG9ueSkNCnEzJGJlZSA8LSBhcy5mYWN0b3IocTMkYmVlKQ0KDQpxMyA8LSBtZXJnZShxMywgcm91bmRzLCBieSA9ICJjb2xvbnkiLCBhbGwgPSBGQUxTRSkNCg0KcTQgPC0gcmVhZF9jc3YoInE0X2FsbF9iZWVzX3Blcl9iZWUuY3N2IiwgDQogICAgY29sX3R5cGVzID0gY29scyh0cmVhdG1lbnQgPSBjb2xfZmFjdG9yKGxldmVscyA9IGMoIjMiLCANCiAgICAgICAgIjQiKSksIGJsb2NrID0gY29sX2ZhY3RvcihsZXZlbHMgPSBjKCIxIiwgDQogICAgICAgICI0IiwgIjYiLCAiNyIsICI4IiwgIjkiLCAiMTAiLCAiMTEiLCANCiAgICAgICAgIjEyIikpLCBpbm9jX2JpbmFyeSA9IGNvbF9mYWN0b3IobGV2ZWxzID0gYygiMSIsIA0KICAgICAgICAiMCIpKSwgcm91bmQgPSBjb2xfZmFjdG9yKGxldmVscyA9IGMoIjEiLCANCiAgICAgICAgIjIiLCAiMyIpKSkpDQoNCnE0JGNvbG9ueSA8LSBhcy5mYWN0b3IocTQkY29sb255KQ0KDQpgYGANCg0KDQojIyMgSW5wdXQgYWRkaXRpb25hbCBkYXRhIGZvciBtZXJnZSANCg0KYGBge3J9DQphbGxfYmVlcyA8LSByZWFkX2NzdigicXBjcl9pbm9jX2JlZXMuY3N2IiwgY29sX3R5cGVzID0gY29scyh0cmVhdG1lbnQgPSBjb2xfZmFjdG9yKGxldmVscyA9IGMoIjEiLCIyIiwgIjMiLCI0IikpLHJlcGxpY2F0ZSA9IGNvbF9mYWN0b3IobGV2ZWxzID0gYygiMSIsIjQiLCAiNiIsICI3IiwgIjgiLCAiOSIsICIxMCIsICIxMSIsICIxMiIpKSwgc3RhcnQgPSBjb2xfZGF0ZShmb3JtYXQgPSAiJW0vJWQvJVkiKSwgSW5ub2N1bGF0aW9uX2RhdGUgPSBjb2xfZGF0ZShmb3JtYXQgPSAiJW0vJWQvJVkiKSwgZGF0ZSA9IGNvbF9kYXRlKGZvcm1hdCA9ICIlbS8lZC8lWSIpLCBjZW5zb3Jfc3RhdHVzID0gY29sX2ZhY3RvcihsZXZlbHMgPSBjKCIxIiwiMiIpKSkpDQoNCnBvbGxlbiA8LSByZWFkX2NzdigicG9sbGVuLmNzdiIpDQpwb2xsZW4kY29sb255IDwtIGFzLmZhY3Rvcihwb2xsZW4kY29sb255KQ0KcG9sbGVuJHRyZWF0bWVudCA8LSBhcy5mYWN0b3IocG9sbGVuJHRyZWF0bWVudCkNCnBvbGxlbiRibG9jayA8LSBhcy5mYWN0b3IocG9sbGVuJGJsb2NrKQ0KDQphdmcucG9sIDwtIHBvbGxlbiAlPiUNCiAgZ3JvdXBfYnkoY29sb255KSAlPiUNCiAgc3VtbWFyaXNlKGF2Zy5wb2wgPSBtZWFuKHdob2xlX2RpZikpDQoNCg0KYXZnLnBvbCA8LSBhcy5kYXRhLmZyYW1lKGF2Zy5wb2wpDQoNCmFsbF9iZWVzIDwtIG1lcmdlKGFsbF9iZWVzLCBhdmcucG9sLCBieT0iY29sb255IiwgYWxsID0gRkFMU0UpDQpxMSA8LSBtZXJnZShxMSwgYXZnLnBvbCwgYnkgPSAiY29sb255IiwgYWxsID0gRkFMU0UpDQpxMyA8LSBtZXJnZShxMywgYXZnLnBvbCwgYnkgPSAiY29sb255IiwgYWxsID0gRkFMU0UpDQpxNCA8LSBtZXJnZShxNCwgYXZnLnBvbCwgYnkgPSAiY29sb255IiwgYWxsID0gRkFMU0UpDQpgYGANCg0KDQojIyBIb3cgbG9uZyBzaW5jZSBpbm9jdWxhdGlvbiBkb2VzIGl0IHRha2UgZm9yIGFuIGluZmVjdGlvbiB0byBiZSBkZXRlY3RlZCBpbiB0aGUgaW5vY3VsYXRlZCBiZWU/IA0KDQpgYGB7cn0NCg0KZGF5c19kZXRlYyA8LSBnbG0ubmIoZGF5X2ZpcnN0X2RldGVjdGlvbiB+IHRyZWF0bWVudCArIGF2Zy5wb2wgKyByb3VuZCwgZGF0YSA9IHExKQ0KZHJvcDEoZGF5c19kZXRlYywgdGVzdCA9ICJDaGlzcSIpDQpkZGV0MSA8LSB1cGRhdGUoZGF5c19kZXRlYywgLn4uIC1yb3VuZCkNCmRyb3AxKGRkZXQxLCB0ZXN0ID0gIkNoaXNxIikNCmRkZXQyIDwtIHVwZGF0ZShkZGV0MSwgLn4uIC1hdmcucG9sKQ0KZHJvcDEoZGRldDIsIHRlc3QgPSAiQ2hpc3EiKQ0KQW5vdmEoZGRldDIpDQoNCnBsb3QocTEkdHJlYXRtZW50LCBxMSRkYXlfZmlyc3RfZGV0ZWN0aW9uKQ0KDQpkYXlzIDwtIHExICU+JQ0KICBncm91cF9ieSh0cmVhdG1lbnQpICU+JQ0KICBzdW1tYXJpc2UobSA9IG1lYW4oZGF5X2ZpcnN0X2RldGVjdGlvbikpDQoNCmRheXMNCg0KYGBgDQoNCiMjIEhvdyBsb25nIHNpbmNlIGlub2N1bGF0aW9uIGRvZXMgaXQgdGFrZSBmb3IgYW4gaW5mZWN0aW9uIHRvIGJlIGRldGVjdGVkIGluIG5vbi1pbm9jdWxhdGVkIGJlZXM/IA0KDQpgYGB7cn0NCmRheXNfZGV0ZWMubmkgPC0gZ2xtZXIubmIoZGF5c19maXJzdF9kZXQgfiB0cmVhdG1lbnQgKyBhdmcucG9sICsgKDF8Y29sb255KSArIHJvdW5kLCBkYXRhID0gcTMpDQpkcm9wMShkYXlzX2RldGVjLm5pLCB0ZXN0ID0gIkNoaXNxIikNCmRkMSA8LSB1cGRhdGUoZGF5c19kZXRlYy5uaSwgLn4uIC1hdmcucG9sKQ0KZHJvcDEoZGQxLCB0ZXN0ID0gIkNoaXNxIikNCg0KcGxvdChxMyR0cmVhdG1lbnQsIHEzJGRheXNfZmlyc3RfZGV0KQ0KDQpkYXlzLm5pIDwtIHEzICU+JQ0KICBncm91cF9ieSh0cmVhdG1lbnQpICU+JQ0KICBzdW1tYXJpc2UobSA9IG1lYW4oZGF5c19maXJzdF9kZXQpKQ0KDQpkYXlzLm5pDQpgYGANCg0KDQojIyBIb3cgbG9uZyBkb2VzIGl0IHRha2UgZm9yIGluZmVjdGlvbiB0byByZWFjaCBBREwgaW4gaW5vY3VsYXRlZCBiZWVzPyANCg0KYGBge3J9DQpkYXlzX2RldGVjX2FkbCA8LSBnbG0ubmIoZGF5X2ZpcnN0X0FETCB+IHRyZWF0bWVudCArIGF2Zy5wb2wgKyByb3VuZCwgZGF0YSA9IHExKQ0KZHJvcDEoZGF5c19kZXRlY19hZGwsIHRlc3QgPSAiQ2hpc3EiKQ0KZGFkbCA8LSB1cGRhdGUoZGF5c19kZXRlY19hZGwsIC5+LiAtYXZnLnBvbCkNCmRyb3AxKGRhZGwsIHRlc3QgPSAiQ2hpc3EiKQ0KZGFkbDIgPC0gdXBkYXRlKGRhZGwsIC5+LiAtcm91bmQpDQpBbm92YShkYWRsMikNCg0KcGxvdChxMSR0cmVhdG1lbnQsIHExJGRheV9maXJzdF9BREwpDQoNCmRheXMuYWRsIDwtIHExICU+JQ0KICBncm91cF9ieSh0cmVhdG1lbnQpICU+JQ0KICBzdW1tYXJpc2UobSA9IG1lYW4oZGF5X2ZpcnN0X0FETCkpDQoNCmRheXMuYWRsDQpgYGANCg0KDQojIyBIb3cgbG9uZyBkb2VzIGl0IHRha2UgZm9yIGluZmVjdGlvbiB0byByZWFjaCBBREwgaW4gbm9uLWlub2N1bGF0ZWQgYmVlcz8gDQoNCmBgYHtyfQ0KcTMuYWRsIDwtIHEzW2NvbXBsZXRlLmNhc2VzKHEzJGRheXNfZmlyc3RfYWRsKSwgXQ0KDQpkYXlzX2RldGVjX2FkbC5uaSA8LSBnbG1lci5uYihkYXlzX2ZpcnN0X2FkbCB+IHRyZWF0bWVudCArIGF2Zy5wb2wgKyAoMXxjb2xvbnkpICsgcm91bmQsIGRhdGEgPSBxMy5hZGwpDQpkcm9wMShkYXlzX2RldGVjX2FkbC5uaSwgdGVzdCA9ICJDaGlzcSIpDQpBbm92YShkYXlzX2RldGVjX2FkbC5uaSkNCg0KcGxvdChxMyR0cmVhdG1lbnQsIHEzJGRheXNfZmlyc3RfYWRsKQ0KDQpkYXlzLmFkbC5uaSA8LSBxMy5hZGwgJT4lDQogIGdyb3VwX2J5KHRyZWF0bWVudCkgJT4lDQogIHN1bW1hcmlzZShtID0gbWVhbihkYXlzX2ZpcnN0X2FkbCkpDQoNCmRheXMuYWRsLm5pDQoNCmBgYA0KDQoNCiMjIEhvdyBtYW55IGRheXMgb3V0IG9mIDE0IGRpZCBhbiBpbm9jIGJlZSB0ZXN0IGFib3ZlIGFkbCBmb3IgaW5mZWN0aW9uPyANCg0KYGBge3J9DQoNCnRvdGFsX2FkbCA8LSBnbG0ubmIobnVtX2RheXNfYWRsIH4gdHJlYXRtZW50ICsgYXZnLnBvbCArIHJvdW5kLCBkYXRhID0gcTEpDQpkcm9wMSh0b3RhbF9hZGwsIHRlc3QgPSAiQ2hpc3EiKQ0KdG90X2FkIDwtIHVwZGF0ZSh0b3RhbF9hZGwsIC5+LiAtYXZnLnBvbCkNCmRyb3AxKHRvdF9hZCwgdGVzdCA9ICJDaGlzcSIpDQp0b3RhZDIgPC0gdXBkYXRlKHRvdF9hZCwgLn4uIC1yb3VuZCkNCkFub3ZhKHRvdGFkMikNCg0KcGxvdChxMSR0cmVhdG1lbnQsIHExJG51bV9kYXlzX2FkbCkNCg0KbnVtX2FkbCA8LSBxMSAlPiUNCiAgZ3JvdXBfYnkodHJlYXRtZW50KSAlPiUNCiAgc3VtbWFyaXNlKG0gPSBtZWFuKG51bV9kYXlzX2FkbCkpDQpudW1fYWRsDQoNCmBgYA0KDQoNCg0KIyMgSG93IG1hbnkgZGF5cyBvdXQgb2YgMTQgZGlkIGEgbm9uLWlub2MgYmVlIHRlc3QgYWJvdmUgYWRsIGZvciBpbmZlY3Rpb24/DQoNCmBgYHtyfQ0KdG90YWxfYWRsLm5pIDwtIGdsbWVyLm5iKHRvdGFsX2RheXNfYWRsIH4gdHJlYXRtZW50ICsgYXZnLnBvbCArICgxfGNvbG9ueSkgKyByb3VuZCwgZGF0YSA9IHEzKQ0KZHJvcDEodG90YWxfYWRsLm5pLCB0ZXN0ID0gIkNoaXNxIikNCnRvdF9hZC5uaSA8LSB1cGRhdGUodG90YWxfYWRsLm5pLCAufi4gLWF2Zy5wb2wpDQpkcm9wMSh0b3RfYWQubmksIHRlc3QgPSAiQ2hpc3EiKQ0KQW5vdmEodG90X2FkLm5pKQ0KDQpwbG90KHEzJHRyZWF0bWVudCwgcTMkdG90YWxfZGF5c19hZGwpDQoNCm51bV9hZGwubmkgPC0gcTMgJT4lDQogIGdyb3VwX2J5KHRyZWF0bWVudCkgJT4lDQogIHN1bW1hcmlzZShtID0gbWVhbih0b3RhbF9kYXlzX2FkbCkpDQpudW1fYWRsLm5pDQoNCg0KYGBgDQoNCg0KIyMgSG93IG1hbnkgZGF5cyBvdXQgb2YgMTQgZGlkIGFuIGlub2MgYmVlIHRlc3QgcG9zaXRpdmUgZm9yIGluZmVjdGlvbj8gDQoNCmBgYHtyfQ0KdG90YWxfZGV0IDwtIGdsbShudW1fZGF5c19kZXQgfiB0cmVhdG1lbnQgKyBhdmcucG9sICsgcm91bmQsIGRhdGEgPSBxMSkNCmRyb3AxKHRvdGFsX2RldCwgdGVzdCA9ICJDaGlzcSIpDQp0b3RfZGV0MSA8LSB1cGRhdGUodG90YWxfZGV0LCAufi4gLWF2Zy5wb2wpDQpkcm9wMSh0b3RfZGV0MSwgdGVzdCA9ICJDaGlzcSIpDQoNCkFub3ZhKHRvdF9kZXQxKQ0KDQpwbG90KHExJHRyZWF0bWVudCwgcTEkbnVtX2RheXNfZGV0KQ0KDQpudW1fZGV0IDwtIHExICU+JQ0KICBncm91cF9ieSh0cmVhdG1lbnQpICU+JQ0KICBzdW1tYXJpc2UobSA9IG1lYW4obnVtX2RheXNfZGV0KSkNCm51bV9kZXQNCg0KYGBgDQoNCg0KDQojIyBIb3cgbWFueSBkYXlzIG91dCBvZiAxNCBkaWQgYSBub24taW5vYyBiZWUgdGVzdCBwb3NpdGl2ZSBmb3IgaW5mZWN0aW9uPyANCg0KYGBge3J9DQp0b3RhbF9kZXQubmkgPC0gZ2xtZXIubmIodG90YWxfZGF5c19kZXRlY3RlZCB+IHRyZWF0bWVudCArIGF2Zy5wb2wgKyAoMXxjb2xvbnkpICsgcm91bmQsIGRhdGEgPSBxMykNCmRyb3AxKHRvdGFsX2RldC5uaSwgdGVzdCA9ICJDaGlzcSIpDQp0b3RkZXRuaSA8LSB1cGRhdGUodG90YWxfZGV0Lm5pLCAufi4gLWF2Zy5wb2wpDQpkcm9wMSh0b3RkZXRuaSwgdGVzdCA9ICJDaGlzcSIpDQp0b3RkZXRuaTEgPC0gdXBkYXRlKHRvdGRldG5pLCAufi4gLXJvdW5kKQ0KQW5vdmEodG90ZGV0bmkxKQ0KDQpwbG90KHEzJHRyZWF0bWVudCwgcTMkdG90YWxfZGF5c19kZXRlY3RlZCkNCg0KbnVtX2RldG5pIDwtIHEzICU+JQ0KICBncm91cF9ieSh0cmVhdG1lbnQpICU+JQ0KICBzdW1tYXJpc2UobSA9IG1lYW4odG90YWxfZGF5c19kZXRlY3RlZCkpDQpudW1fZGV0bmkNCg0KYGBgDQoNCg0KIyMgSG93IG1hbnkgZGF5cyBmb3IgYW4gaW5vY3VsYXRlZCBiZWUgdG8gcmVhY2ggbWF4IHNwb3Jlcz8gDQoNCg0KYGBge3J9DQpkYXlzX21heCA8LSBnbG0ubmIoZGF5c19tYXhfc3BvcmVzIH4gdHJlYXRtZW50ICsgYXZnLnBvbCArIHJvdW5kLCBkYXRhID0gcTEpDQpkcm9wMShkYXlzX21heCwgdGVzdCA9ICJDaGlzcSIpDQpkbTEgPC0gdXBkYXRlKGRheXNfbWF4LCAufi4gLWF2Zy5wb2wpDQpkcm9wMShkbTEsIHRlc3QgPSAiQ2hpc3EiKQ0KZG0yIDwtIHVwZGF0ZShkbTEsIC5+LiAtcm91bmQpDQpBbm92YShkbTIpDQoNCnBsb3QocTEkdHJlYXRtZW50LCBxMSRkYXlzX21heF9zcG9yZXMpDQoNCm51bV9kZXQgPC0gcTEgJT4lDQogIGdyb3VwX2J5KHRyZWF0bWVudCkgJT4lDQogIHN1bW1hcmlzZShtID0gbWVhbihkYXlzX21heF9zcG9yZXMpKQ0KbnVtX2RldA0KDQoNCmBgYA0KDQoNCiMjIEhvdyBtYW55IGRheXMgZm9yIGEgbm9uLWlub2N1bGF0ZWQgYmVlIHRvIHJlYWNoIG1heCBzcG9yZXM/IA0KDQpgYGB7cn0NCm5vbi5tYXggPC0gZ2xtZXIubmIoZGF5c19tYXhfc3BvcmVzIH4gdHJlYXRtZW50ICsgcm91bmQgKyBhdmcucG9sICsgKDF8Y29sb255KSwgZGF0YSA9IHEzKQ0KZHJvcDEobm9uLm1heCwgdGVzdCA9ICJDaGlzcSIpDQpubTEgPC0gdXBkYXRlKG5vbi5tYXgsIC5+LiAtYXZnLnBvbCkNCmRyb3AxKG5tMSwgdGVzdCA9ICJDaGlzcSIpDQoNCkFub3ZhKG5tMSkNCg0KcGxvdChxMyR0cmVhdG1lbnQsIHEzJGRheXNfbWF4X3Nwb3JlcykNCg0KbnVtX21heF9uaSA8LSBxMyAlPiUNCiAgZ3JvdXBfYnkodHJlYXRtZW50KSAlPiUNCiAgc3VtbWFyaXNlKG0gPSBtZWFuKGRheXNfbWF4X3Nwb3JlcykpDQpudW1fbWF4X25pDQoNCg0KYGBgDQoNCg0KDQojIyBXaGF0IGlzIHRoZSBtYXggc3BvcmUgY291bnQgcGVyIHRyZWF0bWVudD8gDQoNCmBgYHtyfQ0KDQptYXguc3BvcmUgPC0gbG1lcihtYXhfc3BvcmVzIH4gdHJlYXRtZW50ICsgcm91bmQgKyBhdmcucG9sICsgKDF8Y29sb255KSwgZGF0YSA9IHE0KQ0KQW5vdmEobWF4LnNwb3JlKQ0KDQpwbG90KHE0JHRyZWF0bWVudCwgcTQkbWF4X3Nwb3JlcykNCg0KYGBgDQoNCg0KDQojIyBIb3cgbWFueSBwZWFrcyBvZiBpbmZlY3Rpb24gb2NjdXIgaW4gSUIgdnMuIE5JQiBwZXIgdHJlYXRtZW50PyANCg0K