input data

custom_labels <- c("Control", "Fungicide",  "Fungicide + Crithidia", "Crithidia")

p <- read_csv("pollen.dates.csv", 
    col_types = cols(treatment = col_factor(levels = c("1", 
        "2", "3", "4")), pollen.start = col_date(format = "%m/%d/%Y"), 
        pollen.end = col_date(format = "%m/%d/%Y"), 
        colony.start = col_date(format = "%m/%d/%Y")))

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

p <- p %>%
  mutate(
    fungicide = factor(fungicide),
    crithidia = factor(crithidia),
    block = factor(block),
    qro = factor(qro),
    id = factor(id)
  )

shapiro.test(p$whole_dif)
## 
##  Shapiro-Wilk normality test
## 
## data:  p$whole_dif
## W = 0.76908, p-value < 2.2e-16
hist(p$whole_dif)

p$box <- bcPower(p$whole_dif, -3, gamma=1.1)
shapiro.test(p$box)
## 
##  Shapiro-Wilk normality test
## 
## data:  p$box
## W = 0.92686, p-value < 2.2e-16
hist(p$box)

p$log <- log(p$whole_dif)
shapiro.test(p$log)
## 
##  Shapiro-Wilk normality test
## 
## data:  p$log
## W = 0.9363, p-value < 2.2e-16
hist(p$log)

pol.mod1 <- lmer(box ~ crithidia + fungicide + pollen.time + workers_alive + block + (1|colony), data = p)
pol.mod.int <- lmer(box ~ crithidia*fungicide + pollen.time + workers_alive + block + (1|colony), data = p)
drop1(pol.mod.int, test = "Chisq")
## Single term deletions
## 
## Model:
## box ~ crithidia * fungicide + pollen.time + workers_alive + block + 
##     (1 | colony)
##                     npar     AIC     LRT   Pr(Chi)    
## <none>                   -3275.0                      
## pollen.time            1 -3005.9 271.188 < 2.2e-16 ***
## workers_alive          1 -3182.7  94.362 < 2.2e-16 ***
## block                  8 -3252.8  38.285 6.669e-06 ***
## crithidia:fungicide    1 -3277.0   0.042    0.8385    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
drop1(pol.mod1)
## Single term deletions
## 
## Model:
## box ~ crithidia + fungicide + pollen.time + workers_alive + block + 
##     (1 | colony)
##               npar     AIC
## <none>             -3277.0
## crithidia        1 -3274.7
## fungicide        1 -3277.0
## pollen.time      1 -3007.8
## workers_alive    1 -3184.7
## block            8 -3254.8
Anova(pol.mod1)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: box
##                  Chisq Df Pr(>Chisq)    
## crithidia       3.1483  1    0.07601 .  
## fungicide       1.4167  1    0.23395    
## pollen.time   322.3806  1  < 2.2e-16 ***
## workers_alive  96.6335  1  < 2.2e-16 ***
## block          47.2314  8  1.385e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(pol.mod1, pol.mod.int)
## Data: p
## Models:
## pol.mod1: box ~ crithidia + fungicide + pollen.time + workers_alive + block + (1 | colony)
## pol.mod.int: box ~ crithidia * fungicide + pollen.time + workers_alive + block + (1 | colony)
##             npar   AIC     BIC logLik deviance  Chisq Df Pr(>Chisq)
## pol.mod1      15 -3277 -3208.0 1653.5    -3307                     
## pol.mod.int   16 -3275 -3201.5 1653.5    -3307 0.0415  1     0.8385
AIC(pol.mod1, pol.mod.int)
##             df       AIC
## pol.mod1    15 -3164.936
## pol.mod.int 16 -3156.316
drop1(pol.mod1, test = "Chisq")
## Single term deletions
## 
## Model:
## box ~ crithidia + fungicide + pollen.time + workers_alive + block + 
##     (1 | colony)
##               npar     AIC     LRT   Pr(Chi)    
## <none>             -3277.0                      
## crithidia        1 -3274.7   4.280   0.03856 *  
## fungicide        1 -3277.0   1.989   0.15847    
## pollen.time      1 -3007.8 271.190 < 2.2e-16 ***
## workers_alive    1 -3184.7  94.341 < 2.2e-16 ***
## block            8 -3254.8  38.246 6.781e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Anova(pol.mod1)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: box
##                  Chisq Df Pr(>Chisq)    
## crithidia       3.1483  1    0.07601 .  
## fungicide       1.4167  1    0.23395    
## pollen.time   322.3806  1  < 2.2e-16 ***
## workers_alive  96.6335  1  < 2.2e-16 ***
## block          47.2314  8  1.385e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(pol.mod1)
## Linear mixed model fit by REML ['lmerMod']
## Formula: box ~ crithidia + fungicide + pollen.time + workers_alive + block +  
##     (1 | colony)
##    Data: p
## 
## REML criterion at convergence: -3194.9
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -2.73866 -0.62142 -0.01707  0.61692  2.80644 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  colony   (Intercept) 0.0004090 0.02022 
##  Residual             0.0005754 0.02399 
## Number of obs: 733, groups:  colony, 35
## 
## Fixed effects:
##                 Estimate Std. Error t value
## (Intercept)    1.201e-01  1.447e-02   8.298
## crithidiaTRUE -1.266e-02  7.135e-03  -1.774
## fungicideTRUE -8.462e-03  7.110e-03  -1.190
## pollen.time    1.606e-03  8.944e-05  17.955
## workers_alive  1.473e-02  1.498e-03   9.830
## block4         5.313e-02  1.480e-02   3.590
## block6        -3.596e-02  1.475e-02  -2.437
## block7         1.160e-02  1.481e-02   0.783
## block8         1.948e-02  1.478e-02   1.318
## block9         7.993e-03  1.478e-02   0.541
## block10        3.679e-02  1.606e-02   2.291
## block11       -1.202e-02  1.480e-02  -0.813
## block12        8.685e-03  1.477e-02   0.588
qqnorm(resid(pol.mod1));qqline(resid(pol.mod1))

Anova(pol.mod1)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: box
##                  Chisq Df Pr(>Chisq)    
## crithidia       3.1483  1    0.07601 .  
## fungicide       1.4167  1    0.23395    
## pollen.time   322.3806  1  < 2.2e-16 ***
## workers_alive  96.6335  1  < 2.2e-16 ***
## block          47.2314  8  1.385e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
residuals <- resid(pol.mod1)
plot(residuals)

ps <- p[p$days >= 4 & p$days <=25, ]

range(ps$pollen.time)
## [1]  6 48
shapiro.test(ps$box)
## 
##  Shapiro-Wilk normality test
## 
## data:  ps$box
## W = 0.92339, p-value < 2.2e-16
hist(ps$box)

ps1 <- lmer(box ~ crithidia + fungicide + days + workers_alive + block +  (1|colony), data = ps)
Anova(ps1)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: box
##                  Chisq Df Pr(>Chisq)    
## crithidia       3.2185  1    0.07281 .  
## fungicide       1.2300  1    0.26741    
## days          229.4236  1  < 2.2e-16 ***
## workers_alive  73.0433  1  < 2.2e-16 ***
## block          43.3831  8  7.439e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
pe <- emmeans(ps1, pairwise ~ crithidia, type = "response")
pe
## $emmeans
##  crithidia emmean      SE   df lower.CL upper.CL
##  FALSE      0.229 0.00526 24.2    0.219    0.240
##  TRUE       0.216 0.00546 24.0    0.205    0.227
## 
## Results are averaged over the levels of: fungicide, block 
## Degrees-of-freedom method: kenward-roger 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast     estimate     SE   df t.ratio p.value
##  FALSE - TRUE   0.0136 0.0076 24.3   1.794  0.0853
## 
## Results are averaged over the levels of: fungicide, block 
## Degrees-of-freedom method: kenward-roger
qqnorm(resid(ps1));qqline(resid(ps1))

residuals <- resid(ps1)
plot(residuals)

Anova(ps1)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: box
##                  Chisq Df Pr(>Chisq)    
## crithidia       3.2185  1    0.07281 .  
## fungicide       1.2300  1    0.26741    
## days          229.4236  1  < 2.2e-16 ***
## workers_alive  73.0433  1  < 2.2e-16 ***
## block          43.3831  8  7.439e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ps_sum <- ps %>%
  group_by(treatment) %>%
  summarise(mean = mean(whole_dif),
            sd = sd(whole_dif),
            n = length(whole_dif)) %>%
  mutate(se = sd/sqrt(n))
ps_sum
## # A tibble: 4 × 5
##   treatment  mean    sd     n     se
##   <fct>     <dbl> <dbl> <int>  <dbl>
## 1 1         0.514 0.341   167 0.0264
## 2 2         0.442 0.322   170 0.0247
## 3 3         0.337 0.257   177 0.0193
## 4 4         0.363 0.270   149 0.0221
range(p$days)
## [1]  2 26
pollen_subset <- p[p$pollen.time >= 2 & p$pollen.time <=42, ]
pol.mod1 <- lmer(box ~ block + crithidia + fungicide + days + (1|colony), data = pollen_subset)
drop1(pol.mod1, test = "Chisq")
## Single term deletions
## 
## Model:
## box ~ block + crithidia + fungicide + days + (1 | colony)
##           npar     AIC     LRT   Pr(Chi)    
## <none>         -3061.4                      
## block        8 -3043.1  34.324 3.548e-05 ***
## crithidia    1 -3056.9   6.502   0.01078 *  
## fungicide    1 -3060.8   2.599   0.10693    
## days         1 -2843.6 219.852 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
pm1 <- update(pol.mod1, .~. -days)
drop1(pm1, test = "Chisq")
## Single term deletions
## 
## Model:
## box ~ block + crithidia + fungicide + (1 | colony)
##           npar     AIC    LRT   Pr(Chi)    
## <none>         -2843.6                     
## block        8 -2825.7 33.935 4.174e-05 ***
## crithidia    1 -2839.3  6.275   0.01225 *  
## fungicide    1 -2843.1  2.454   0.11721    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Anova(pm1)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: box
##             Chisq Df Pr(>Chisq)    
## block     39.2939  8  4.335e-06 ***
## crithidia  4.7072  1    0.03004 *  
## fungicide  1.7459  1    0.18639    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
qqnorm(resid(pm1));qqline(resid(pm1))

Anova(pm1)
## Analysis of Deviance Table (Type II Wald chisquare tests)
## 
## Response: box
##             Chisq Df Pr(>Chisq)    
## block     39.2939  8  4.335e-06 ***
## crithidia  4.7072  1    0.03004 *  
## fungicide  1.7459  1    0.18639    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
residuals <- resid(pm1)
plot(residuals)

summary(pm1)
## Linear mixed model fit by REML ['lmerMod']
## Formula: box ~ block + crithidia + fungicide + (1 | colony)
##    Data: pollen_subset
## 
## REML criterion at convergence: -2789.3
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -2.51660 -0.62354  0.01291  0.66121  2.27344 
## 
## Random effects:
##  Groups   Name        Variance  Std.Dev.
##  colony   (Intercept) 0.0005472 0.02339 
##  Residual             0.0008630 0.02938 
## Number of obs: 699, groups:  colony, 35
## 
## Fixed effects:
##                Estimate Std. Error t value
## (Intercept)    0.230527   0.013433  17.162
## block4         0.052682   0.017198   3.063
## block6        -0.040380   0.017174  -2.351
## block7        -0.001490   0.017191  -0.087
## block8         0.013249   0.017190   0.771
## block9         0.006216   0.017186   0.362
## block10        0.029247   0.018668   1.567
## block11       -0.025224   0.017179  -1.468
## block12        0.001247   0.017186   0.073
## crithidiaTRUE -0.017923   0.008261  -2.170
## fungicideTRUE -0.010916   0.008261  -1.321
## 
## Correlation of Fixed Effects:
##             (Intr) block4 block6 block7 block8 block9 blck10 blck11 blck12
## block4      -0.639                                                        
## block6      -0.640  0.500                                                 
## block7      -0.640  0.500  0.500                                          
## block8      -0.640  0.500  0.500  0.500                                   
## block9      -0.640  0.500  0.501  0.500  0.500                            
## block10     -0.589  0.460  0.461  0.460  0.460  0.460                     
## block11     -0.640  0.500  0.501  0.500  0.500  0.500  0.461              
## block12     -0.639  0.500  0.501  0.500  0.500  0.500  0.461  0.500       
## crithidTRUE -0.295 -0.001 -0.001  0.000 -0.001 -0.001  0.076 -0.001 -0.001
## fungicdTRUE -0.295  0.000  0.000  0.000  0.000  0.000 -0.077 -0.001 -0.001
##             crTRUE
## block4            
## block6            
## block7            
## block8            
## block9            
## block10           
## block11           
## block12           
## crithidTRUE       
## fungicdTRUE -0.039
range(pollen_subset$pollen.time)
## [1]  2 42
ggplot(data = p, aes(x = pollen.time, y = whole_dif, fill = treatment)) +
  geom_smooth() +
  labs(x = "Time (days)", y = "Mean Pollen Consumed (g)") +
  theme_cowplot()+
  scale_x_continuous(breaks = seq(min(p$pollen.time), max(ps$pollen.time), by = 1))

ggplot(data = pollen_subset, aes(x = pollen.time, y = whole_dif, fill = treatment)) +
  geom_smooth() +
  labs(x = "Time (days)", y = "Mean Pollen Consumed (g)") +
  theme_cowplot() +
  scale_x_continuous(breaks = seq(min(pollen_subset$pollen.time), max(pollen_subset$pollen.time), by = 1)) +
 scale_fill_manual(values = c("lightgreen", "lightblue", "sienna", "goldenrod"), 
                   labels = c("Control", "Fungicide", "Crithidia + Fungicide", "Crithidia"))

ggplot(data = ps_sum, aes(x = treatment, y = mean, fill = treatment)) +
  geom_col_pattern(
    aes(pattern = treatment),
    pattern_density = c(0, 0, 0.4, 0),  # Add density for the fourth column
    pattern_spacing = 0.03,
    position = position_dodge(0.9)
  ) +
  coord_cartesian(ylim = c(0, 0.65)) +
  geom_errorbar(aes(ymin = mean - se, ymax = mean + se), width = 0.2, position = position_dodge(0.9)) +
  labs(x = "Treatment", y = "Average Pollen Consumed (g)") +
  annotate(
    geom = "text",
    x = 3,
    y = 0.6,
    label = "P = 0.05",
    size = 8
  ) + 
  theme_classic(base_size = 20) +
  scale_fill_manual(values = c("lightgreen", "lightblue", "lightblue", "grey")) +
  scale_pattern_manual(values = c("none", "none", "stripe", "none")) +  # Add stripes to the fourth column
  scale_x_discrete(labels = custom_labels) +
  theme(legend.position = "none") +
  geom_segment(x = 1, xend = 2, y = 0.65, yend = 0.65, 
               lineend = "round", linejoin = "round") +
  geom_segment(x = 1, xend = 1, y = 0.64, yend = 0.66, 
               lineend = "round", linejoin = "round") +
  geom_segment(x = 2, xend = 2, y = 0.64, yend = 0.66, 
               lineend = "round", linejoin = "round") +
  geom_segment(x = 3, xend = 4, y = 0.47, yend = 0.47, 
               lineend = "round", linejoin = "round") +
  geom_segment(x = 3, xend = 3, y = 0.46, yend = 0.48, 
               lineend = "round", linejoin = "round") +
  geom_segment(x = 4, xend = 4, y = 0.46, yend = 0.48, 
               lineend = "round", linejoin = "round") +
  geom_text(x = 1.5, y = 0.65, label = "a", size = 6, vjust = -0.5) +
  geom_text(x = 3.5, y = 0.48, label = "b", size = 6, vjust = -0.5)

LS0tDQp0aXRsZTogIkJ1bWJsZSBiZWUgZGlzZWFzZSBkeW5hbWljcyINCmF1dGhvcjogIkVtaWx5IFJ1bm5pb24iDQpkYXRlOiAiRGF0YSBDb2xsZWN0ZWQgMjAyMiINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdGhlbWU6IGpvdXJuYWwNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQobWVzc2FnZSA9IEZBTFNFKQ0KYGBgDQoNCg0KYGBge3IgbG9hZCBsaWJyYXJpZXMsIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeSh2aXJpZGlzTGl0ZSkNCmxpYnJhcnkoc3RhdHMpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGNhcikNCmxpYnJhcnkoZW1tZWFucykNCmxpYnJhcnkoTUFTUykNCmxpYnJhcnkobG1lNCkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwYXR0ZXJuKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShibG1lY28pDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGNvd3Bsb3QpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoYWdyaWNvbGFlKSANCmxpYnJhcnkoZ2dwdWJyKQ0KbGlicmFyeShnbHVlKQ0KbGlicmFyeShtdWx0Y29tcCkNCmxpYnJhcnkobXVsdGNvbXBWaWV3KQ0KbGlicmFyeShnbG1tVE1CKQ0KbGlicmFyeShyc3RhdGl4KQ0KbGlicmFyeShmaXRkaXN0cnBsdXMpDQpsaWJyYXJ5KGxvZ3NwbGluZSkNCmxpYnJhcnkoR0dhbGx5KQ0KbGlicmFyeShkYXRhLnRhYmxlKQ0KYGBgDQoNCg0KIyBpbnB1dCBkYXRhIA0KDQpgYGB7cn0NCg0KY3VzdG9tX2xhYmVscyA8LSBjKCJDb250cm9sIiwgIkZ1bmdpY2lkZSIsICAiRnVuZ2ljaWRlICsgQ3JpdGhpZGlhIiwgIkNyaXRoaWRpYSIpDQoNCnAgPC0gcmVhZF9jc3YoInBvbGxlbi5kYXRlcy5jc3YiLCANCiAgICBjb2xfdHlwZXMgPSBjb2xzKHRyZWF0bWVudCA9IGNvbF9mYWN0b3IobGV2ZWxzID0gYygiMSIsIA0KICAgICAgICAiMiIsICIzIiwgIjQiKSksIHBvbGxlbi5zdGFydCA9IGNvbF9kYXRlKGZvcm1hdCA9ICIlbS8lZC8lWSIpLCANCiAgICAgICAgcG9sbGVuLmVuZCA9IGNvbF9kYXRlKGZvcm1hdCA9ICIlbS8lZC8lWSIpLCANCiAgICAgICAgY29sb255LnN0YXJ0ID0gY29sX2RhdGUoZm9ybWF0ID0gIiVtLyVkLyVZIikpKQ0KDQpwJGNvbG9ueSA8LSBhcy5mYWN0b3IocCRjb2xvbnkpDQoNCnAgPC0gcCAlPiUNCiAgbXV0YXRlKA0KICAgIGZ1bmdpY2lkZSA9IGZhY3RvcihmdW5naWNpZGUpLA0KICAgIGNyaXRoaWRpYSA9IGZhY3Rvcihjcml0aGlkaWEpLA0KICAgIGJsb2NrID0gZmFjdG9yKGJsb2NrKSwNCiAgICBxcm8gPSBmYWN0b3IocXJvKSwNCiAgICBpZCA9IGZhY3RvcihpZCkNCiAgKQ0KDQpzaGFwaXJvLnRlc3QocCR3aG9sZV9kaWYpDQpoaXN0KHAkd2hvbGVfZGlmKQ0KDQpwJGJveCA8LSBiY1Bvd2VyKHAkd2hvbGVfZGlmLCAtMywgZ2FtbWE9MS4xKQ0Kc2hhcGlyby50ZXN0KHAkYm94KQ0KaGlzdChwJGJveCkNCg0KcCRsb2cgPC0gbG9nKHAkd2hvbGVfZGlmKQ0Kc2hhcGlyby50ZXN0KHAkbG9nKQ0KaGlzdChwJGxvZykNCg0KYGBgDQoNCg0KYGBge3J9DQpwb2wubW9kMSA8LSBsbWVyKGJveCB+IGNyaXRoaWRpYSArIGZ1bmdpY2lkZSArIHBvbGxlbi50aW1lICsgd29ya2Vyc19hbGl2ZSArIGJsb2NrICsgKDF8Y29sb255KSwgZGF0YSA9IHApDQpwb2wubW9kLmludCA8LSBsbWVyKGJveCB+IGNyaXRoaWRpYSpmdW5naWNpZGUgKyBwb2xsZW4udGltZSArIHdvcmtlcnNfYWxpdmUgKyBibG9jayArICgxfGNvbG9ueSksIGRhdGEgPSBwKQ0KZHJvcDEocG9sLm1vZC5pbnQsIHRlc3QgPSAiQ2hpc3EiKQ0KDQpkcm9wMShwb2wubW9kMSkNCkFub3ZhKHBvbC5tb2QxKQ0KDQoNCmFub3ZhKHBvbC5tb2QxLCBwb2wubW9kLmludCkNCkFJQyhwb2wubW9kMSwgcG9sLm1vZC5pbnQpDQpkcm9wMShwb2wubW9kMSwgdGVzdCA9ICJDaGlzcSIpDQoNCg0KQW5vdmEocG9sLm1vZDEpDQpzdW1tYXJ5KHBvbC5tb2QxKQ0KDQpxcW5vcm0ocmVzaWQocG9sLm1vZDEpKTtxcWxpbmUocmVzaWQocG9sLm1vZDEpKQ0KQW5vdmEocG9sLm1vZDEpDQpyZXNpZHVhbHMgPC0gcmVzaWQocG9sLm1vZDEpDQpwbG90KHJlc2lkdWFscykNCg0KDQoNCg0KcHMgPC0gcFtwJGRheXMgPj0gNCAmIHAkZGF5cyA8PTI1LCBdDQoNCnJhbmdlKHBzJHBvbGxlbi50aW1lKQ0KDQpzaGFwaXJvLnRlc3QocHMkYm94KQ0KaGlzdChwcyRib3gpDQoNCg0KcHMxIDwtIGxtZXIoYm94IH4gY3JpdGhpZGlhICsgZnVuZ2ljaWRlICsgZGF5cyArIHdvcmtlcnNfYWxpdmUgKyBibG9jayArICAoMXxjb2xvbnkpLCBkYXRhID0gcHMpDQpBbm92YShwczEpDQpwZSA8LSBlbW1lYW5zKHBzMSwgcGFpcndpc2UgfiBjcml0aGlkaWEsIHR5cGUgPSAicmVzcG9uc2UiKQ0KcGUNCnFxbm9ybShyZXNpZChwczEpKTtxcWxpbmUocmVzaWQocHMxKSkNCnJlc2lkdWFscyA8LSByZXNpZChwczEpDQpwbG90KHJlc2lkdWFscykNCkFub3ZhKHBzMSkNCg0KcHNfc3VtIDwtIHBzICU+JQ0KICBncm91cF9ieSh0cmVhdG1lbnQpICU+JQ0KICBzdW1tYXJpc2UobWVhbiA9IG1lYW4od2hvbGVfZGlmKSwNCiAgICAgICAgICAgIHNkID0gc2Qod2hvbGVfZGlmKSwNCiAgICAgICAgICAgIG4gPSBsZW5ndGgod2hvbGVfZGlmKSkgJT4lDQogIG11dGF0ZShzZSA9IHNkL3NxcnQobikpDQpwc19zdW0NCg0KDQpgYGANCg0KYGBge3J9DQoNCnJhbmdlKHAkZGF5cykNCg0KcG9sbGVuX3N1YnNldCA8LSBwW3AkcG9sbGVuLnRpbWUgPj0gMiAmIHAkcG9sbGVuLnRpbWUgPD00MiwgXQ0KcG9sLm1vZDEgPC0gbG1lcihib3ggfiBibG9jayArIGNyaXRoaWRpYSArIGZ1bmdpY2lkZSArIGRheXMgKyAoMXxjb2xvbnkpLCBkYXRhID0gcG9sbGVuX3N1YnNldCkNCmRyb3AxKHBvbC5tb2QxLCB0ZXN0ID0gIkNoaXNxIikNCnBtMSA8LSB1cGRhdGUocG9sLm1vZDEsIC5+LiAtZGF5cykNCmRyb3AxKHBtMSwgdGVzdCA9ICJDaGlzcSIpDQpBbm92YShwbTEpDQoNCnFxbm9ybShyZXNpZChwbTEpKTtxcWxpbmUocmVzaWQocG0xKSkNCkFub3ZhKHBtMSkNCnJlc2lkdWFscyA8LSByZXNpZChwbTEpDQpwbG90KHJlc2lkdWFscykNCnN1bW1hcnkocG0xKQ0KYGBgDQoNCg0KDQpgYGB7ciwgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PSA0fQ0KcmFuZ2UocG9sbGVuX3N1YnNldCRwb2xsZW4udGltZSkNCg0KZ2dwbG90KGRhdGEgPSBwLCBhZXMoeCA9IHBvbGxlbi50aW1lLCB5ID0gd2hvbGVfZGlmLCBmaWxsID0gdHJlYXRtZW50KSkgKw0KICBnZW9tX3Ntb290aCgpICsNCiAgbGFicyh4ID0gIlRpbWUgKGRheXMpIiwgeSA9ICJNZWFuIFBvbGxlbiBDb25zdW1lZCAoZykiKSArDQogIHRoZW1lX2Nvd3Bsb3QoKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcShtaW4ocCRwb2xsZW4udGltZSksIG1heChwcyRwb2xsZW4udGltZSksIGJ5ID0gMSkpDQoNCmdncGxvdChkYXRhID0gcG9sbGVuX3N1YnNldCwgYWVzKHggPSBwb2xsZW4udGltZSwgeSA9IHdob2xlX2RpZiwgZmlsbCA9IHRyZWF0bWVudCkpICsNCiAgZ2VvbV9zbW9vdGgoKSArDQogIGxhYnMoeCA9ICJUaW1lIChkYXlzKSIsIHkgPSAiTWVhbiBQb2xsZW4gQ29uc3VtZWQgKGcpIikgKw0KICB0aGVtZV9jb3dwbG90KCkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKG1pbihwb2xsZW5fc3Vic2V0JHBvbGxlbi50aW1lKSwgbWF4KHBvbGxlbl9zdWJzZXQkcG9sbGVuLnRpbWUpLCBieSA9IDEpKSArDQogc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygibGlnaHRncmVlbiIsICJsaWdodGJsdWUiLCAic2llbm5hIiwgImdvbGRlbnJvZCIpLCANCiAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJDb250cm9sIiwgIkZ1bmdpY2lkZSIsICJDcml0aGlkaWEgKyBGdW5naWNpZGUiLCAiQ3JpdGhpZGlhIikpDQoNCg0KYGBgDQoNCg0KDQpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9OH0NCmdncGxvdChkYXRhID0gcHNfc3VtLCBhZXMoeCA9IHRyZWF0bWVudCwgeSA9IG1lYW4sIGZpbGwgPSB0cmVhdG1lbnQpKSArDQogIGdlb21fY29sX3BhdHRlcm4oDQogICAgYWVzKHBhdHRlcm4gPSB0cmVhdG1lbnQpLA0KICAgIHBhdHRlcm5fZGVuc2l0eSA9IGMoMCwgMCwgMC40LCAwKSwgICMgQWRkIGRlbnNpdHkgZm9yIHRoZSBmb3VydGggY29sdW1uDQogICAgcGF0dGVybl9zcGFjaW5nID0gMC4wMywNCiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKDAuOSkNCiAgKSArDQogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAwLjY1KSkgKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhbiAtIHNlLCB5bWF4ID0gbWVhbiArIHNlKSwgd2lkdGggPSAwLjIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSkgKw0KICBsYWJzKHggPSAiVHJlYXRtZW50IiwgeSA9ICJBdmVyYWdlIFBvbGxlbiBDb25zdW1lZCAoZykiKSArDQogIGFubm90YXRlKA0KICAgIGdlb20gPSAidGV4dCIsDQogICAgeCA9IDMsDQogICAgeSA9IDAuNiwNCiAgICBsYWJlbCA9ICJQID0gMC4wNSIsDQogICAgc2l6ZSA9IDgNCiAgKSArIA0KICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDIwKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImxpZ2h0Z3JlZW4iLCAibGlnaHRibHVlIiwgImxpZ2h0Ymx1ZSIsICJncmV5IikpICsNCiAgc2NhbGVfcGF0dGVybl9tYW51YWwodmFsdWVzID0gYygibm9uZSIsICJub25lIiwgInN0cmlwZSIsICJub25lIikpICsgICMgQWRkIHN0cmlwZXMgdG8gdGhlIGZvdXJ0aCBjb2x1bW4NCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjdXN0b21fbGFiZWxzKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKw0KICBnZW9tX3NlZ21lbnQoeCA9IDEsIHhlbmQgPSAyLCB5ID0gMC42NSwgeWVuZCA9IDAuNjUsIA0KICAgICAgICAgICAgICAgbGluZWVuZCA9ICJyb3VuZCIsIGxpbmVqb2luID0gInJvdW5kIikgKw0KICBnZW9tX3NlZ21lbnQoeCA9IDEsIHhlbmQgPSAxLCB5ID0gMC42NCwgeWVuZCA9IDAuNjYsIA0KICAgICAgICAgICAgICAgbGluZWVuZCA9ICJyb3VuZCIsIGxpbmVqb2luID0gInJvdW5kIikgKw0KICBnZW9tX3NlZ21lbnQoeCA9IDIsIHhlbmQgPSAyLCB5ID0gMC42NCwgeWVuZCA9IDAuNjYsIA0KICAgICAgICAgICAgICAgbGluZWVuZCA9ICJyb3VuZCIsIGxpbmVqb2luID0gInJvdW5kIikgKw0KICBnZW9tX3NlZ21lbnQoeCA9IDMsIHhlbmQgPSA0LCB5ID0gMC40NywgeWVuZCA9IDAuNDcsIA0KICAgICAgICAgICAgICAgbGluZWVuZCA9ICJyb3VuZCIsIGxpbmVqb2luID0gInJvdW5kIikgKw0KICBnZW9tX3NlZ21lbnQoeCA9IDMsIHhlbmQgPSAzLCB5ID0gMC40NiwgeWVuZCA9IDAuNDgsIA0KICAgICAgICAgICAgICAgbGluZWVuZCA9ICJyb3VuZCIsIGxpbmVqb2luID0gInJvdW5kIikgKw0KICBnZW9tX3NlZ21lbnQoeCA9IDQsIHhlbmQgPSA0LCB5ID0gMC40NiwgeWVuZCA9IDAuNDgsIA0KICAgICAgICAgICAgICAgbGluZWVuZCA9ICJyb3VuZCIsIGxpbmVqb2luID0gInJvdW5kIikgKw0KICBnZW9tX3RleHQoeCA9IDEuNSwgeSA9IDAuNjUsIGxhYmVsID0gImEiLCBzaXplID0gNiwgdmp1c3QgPSAtMC41KSArDQogIGdlb21fdGV4dCh4ID0gMy41LCB5ID0gMC40OCwgbGFiZWwgPSAiYiIsIHNpemUgPSA2LCB2anVzdCA9IC0wLjUpDQpgYGA=