rm(list = ls(all.names = TRUE))
library(ggplot2)
library(tidyr)
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(knitr)
library(rmarkdown)
library(formatR)
data <- read.csv("df/icer-all.csv", as.is = TRUE)
# subset comparator = base
df <- data[(data$scenario=="vaxbase"),]
df$cost.diff.per100k <- as.numeric(df$cost.diff.per100k)
df$cases.averted <- as.numeric(df$cases.averted)
df$cases.averted.per100k <- as.numeric(df$cases.averted.per100k)
df$icer.case.averted <- as.numeric(df$icer.case.averted)
df$deaths.averted <- as.numeric(df$deaths.averted)
df$deaths.averted.per100k <- as.numeric(df$ deaths.averted.per100k)
df$icer.death.averted <- as.numeric(df$icer.death.averted)
df$dalys <- as.numeric(df$dalys)
df$dalys.per100k <- as.numeric(df$dalys.per100k)
df$dalys.averted <- as.numeric(df$dalys.averted)
df$dalys.averted.per100k <- as.numeric(df$dalys.averted.per100k)
df$icer.daly.averted <- as.numeric(df$icer.daly.averted)
# subset efficacy
df <- df[!(df$scenario == 'vaxbase' & df$v.eff %in% c(50, 60)),]
# factors
df$age <- factor(df$age, levels = c("0-4 yrs", "5-19 yrs", "20-64 yrs", "65+ yrs", "All"))
df$risk <- factor(df$risk, levels = c("High", "Non-high", "All"))
df$scenario <- factor(df$scenario, levels = c("vaxbase", "vax70"))
df$v.eff <- factor(df$v.eff)

1 Tables

2 Subset data.

# subset scenario
df_base <- df[(df$scenario == 'vaxbase'),]
# age groups
age_df_base <- df_base[(df_base$risk == "All"),]
# risk groups
risk_df_base <- df_base[!(df_base$age == 'All'),]

2.1 40% VE: ICER per case averted

ggplot(df_base[(df_base$v.eff == "40"),], aes(x = age, y = icer.case.averted, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Risk group") + 
  ylab("$ saved per case averted") + ggtitle("Prevalent Vaccination (40% efficacy): ICER per case averted")

2.2 40% VE: ICER per death averted

ggplot(df_base[(df_base$v.eff == "40"),], aes(x = age, y = icer.death.averted, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Risk group") + 
  ylab("$ saved per death averted") + ggtitle("Prevalent Vaccination (40% efficacy): ICER per death averted")

2.3 40% VE: ICER per DALY averted

ggplot(df_base[(df_base$v.eff == "40"),], aes(x = age, y = icer.daly.averted, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Risk group") + 
  ylab("$ saved per DALY averted") + ggtitle("Prevalent Vaccination (40% efficacy): ICER per DALY averted")

2.4 40% VE: Cases, cases averted

g4 <- ggplot(df_base[(df_base$v.eff == "40"),], aes(x = age, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Risk group")
g4 + aes(y = cases) + labs(y = "Cases", title = "Prevalent Vaccination (40% VE): Cases")

g4 + aes(y = cases.per100k) + labs(y = "Cases per 100k", title = "Prevalent Vaccination (40% VE): Cases per 100k")

g4 + aes(y = cases.averted) + labs(y = "Cases averted", title = "Prevalent Vaccination (40% VE): Cases averted")

g4 + aes(y = cases.averted.per100k) + labs(y = "Cases averted per 100k", title = "Prevalent Vaccination (40% VE): Cases averted per 100k")

2.5 40% VE: Deaths, deaths averted

g4 + aes(y = deaths) + labs(y = "Deaths", title = "Prevalent Vaccination (40% VE): Deaths")

g4 + aes(y = deaths.per100k) + labs(y = "Deaths per 100k", title = "Prevalent Vaccination (40% VE): Deaths per 100k")

g4 + aes(y = deaths.averted) + labs(y = "Deaths averted", title = "Prevalent Vaccination (40% VE): Deaths averted")

g4 + aes(y = deaths.averted.per100k) + labs(y = "Deaths averted per 100k", title = "Prevalent Vaccination (40% VE): Deaths averted per 100k")

2.6 40% VE: DALYs, DALYs averted

g4 + aes(y = dalys) + labs(y = "DALYs", title = "Prevalent Vaccination (40% VE): DALYs")

g4 + aes(y = dalys.per100k) + labs(y = "DALYs per 100k", title = "Prevalent Vaccination (40% VE): DALYs per 100k")

g4 + aes(y = dalys.averted) + labs(y = "DALYs averted", title = "Prevalent Vaccination (40% VE): DALYs averted")

g4 + aes(y = dalys.averted.per100k) + labs(y = "DALYs averted per 100k", title = "Prevalent Vaccination (40% VE): DALYs averted per 100k")

2.7 Fig. Cost-effectiveness plane (40% VE)

g5 <- ggplot(df_base, aes(x = dalys.averted.per100k, y = cost.diff.per100k)) +
  labs(x = "DALYs averted per 100K", y = "Cost saved per 100K", title = "Prevalent Vaccination: Cost saved vs. DALYs averted")
g5 + aes(color = risk, group = risk) + geom_point() + facet_grid(v.eff ~ age)

g5 + aes(color = age, group = age) + geom_point() + facet_grid(v.eff ~ risk)

3 Prevalent vax vs. No vax (All VE)

3.1 Fig. ICER per case averted

t <- labs(y = "$ saved per case averted", title = "Prevalent Vaccination: ICER per case averted")
ggplot(age_df_base, aes(x = age, y = icer.case.averted, color = v.eff, group = v.eff)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Vaccine \nefficacy") + t

ggplot(df_base[(df_base$age=="All"),], aes(x = v.eff, y = icer.case.averted, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Vaccine efficacy (%)", color = "Risk") + t

ggplot(df_base, aes(x = age, y = icer.case.averted, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Risk group") + t +
  facet_grid(~ v.eff)

3.2 Fig. ICER per death averted

t <- labs(y = "$ saved per death averted", title = "Prevalent Vaccination: ICER per death averted")
ggplot(age_df_base, aes(x = age, y = icer.death.averted, color = v.eff, group = v.eff)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Vaccine \nefficacy") + t

ggplot(df_base[(df_base$age=="All"),], aes(x = v.eff, y = icer.death.averted, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Vaccine efficacy (%)", color = "Risk") + t

ggplot(df_base, aes(x = age, y = icer.death.averted, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Risk group") + t +
  facet_grid(~ v.eff)

3.3 Fig. ICER per DALY averted

t <- labs(y = "$ saved per DALY averted", title = "Prevalent Vaccination: ICER per DALY averted")
ggplot(age_df_base, aes(x = age, y = icer.daly.averted, color = v.eff, group = v.eff)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Vaccine \nefficacy") + t

ggplot(df_base[(df_base$age=="All"),], aes(x = v.eff, y = icer.daly.averted, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Vaccine efficacy (%)", color = "Risk") + t

ggplot(df_base, aes(x = age, y = icer.daly.averted, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Risk group") + t +
  facet_grid(~ v.eff)

3.4 Set up plots.

# age
g1 <- ggplot(age_df_base, aes(x = age, group = v.eff, color = v.eff)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Vaccine \nefficacy")
# risk
g2 <- ggplot(df_base[(df_base$age=="All"),], aes(x = v.eff, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Vaccine efficacy", color = "Risk group")
g3 <- ggplot(risk_df_base, aes(x = age, group = risk, color = risk)) +
  geom_point() + geom_line(linetype = "dotted") + labs(x = "Age group", color = "Risk group") +
  facet_grid(~ v.eff)

3.5 Fig. Cases, cases averted

# age groups
g1 + aes(y = cases) + labs(y = "Cases", title = "Prevalent Vaccination: Cases")

g1 + aes(y = cases.per100k) + labs(y = "Cases per 100k", title = "Prevalent Vaccination: Cases per 100k")

g1 + aes(y = cases.averted) + labs(y = "Cases averted", title = "Prevalent Vaccination: Cases averted")

g1 + aes(y = cases.averted.per100k) + labs(y = "Cases averted per 100k", title = "Prevalent Vaccination: Cases averted per 100k")

# risk groups
g2 + aes(y = cases) + labs(y = "Cases", title = "Prevalent Vaccination: Cases")

g2 + aes(y = cases.per100k) + labs(y = "Cases per 100k", title = "Prevalent Vaccination: Cases per 100k")

g2 + aes(y = cases.averted) + labs(y = "Cases averted", title = "Prevalent Vaccination: Cases averted")

g2 + aes(y = cases.averted.per100k) + labs(y = "Cases averted per 100k", title = "Prevalent Vaccination: Cases averted per 100k")

g3 + aes(y = cases) + labs(y = "Cases", title = "Prevalent Vaccination: Cases")

g3 + aes(y = cases.per100k) + labs(y = "Cases per 100k", title = "Prevalent Vaccination: Cases per 100k")

g3 + aes(y = cases.averted) + labs(y = "Cases averted", title = "Prevalent Vaccination: Cases averted")

g3 + aes(y = cases.averted.per100k) + labs(y = "Cases averted per 100k", title = "Prevalent Vaccination: Cases averted per 100k")

3.6 Fig. Deaths, deaths averted

# age groups
g1 + aes(y = deaths) + labs(y = "Deaths", title = "Prevalent Vaccination: Deaths")

g1 + aes(y = deaths.per100k) + labs(y = "Deaths per 100k", title = "Prevalent Vaccination: Deaths per 100k")

g1 + aes(y = deaths.averted) + labs(y = "Deaths averted", title = "Prevalent Vaccination: Deaths averted")

g1 + aes(y = deaths.averted.per100k) + labs(y = "Deaths averted per 100k", title = "Prevalent Vaccination: Deaths averted per 100k")

# risk groups
g2 + aes(y = deaths) + labs(y = "Deaths", title = "Prevalent Vaccination: Deaths")

g2 + aes(y = deaths.per100k) + labs(y = "Deaths per 100k", title = "Prevalent Vaccination: Deaths per 100k")

g2 + aes(y = deaths.averted) + labs(y = "Deaths averted", title = "Prevalent Vaccination: Deaths averted")

g2 + aes(y = deaths.averted.per100k) + labs(y = "Deaths averted per 100k", title = "Prevalent Vaccination: Deaths averted per 100k")

g3 + aes(y = deaths) + labs(y = "Deaths", title = "Prevalent Vaccination: Deaths")

g3 + aes(y = deaths.per100k) + labs(y = "Deaths per 100k", title = "Prevalent Vaccination: Deaths per 100k")

g3 + aes(y = deaths.averted) + labs(y = "Deaths averted", title = "Prevalent Vaccination: Deaths averted")

g3 + aes(y = deaths.averted.per100k) + labs(y = "Deaths averted per 100k", title = "Prevalent Vaccination: Deaths averted per 100k")

3.7 Fig. DALYs, DALYs averted

# age groups
g1 + aes(y = dalys) + labs(y = "DALYs", title = "Prevalent Vaccination: DALYs")

g1 + aes(y = dalys.per100k) + labs(y = "DALYs per 100k", title = "Prevalent Vaccination: DALYs per 100k")

g1 + aes(y = dalys.averted) + labs(y = "DALYs averted", title = "Prevalent Vaccination: DALYs averted")

g1 + aes(y = dalys.averted.per100k) + labs(y = "DALYs averted per 100k", title = "Prevalent Vaccination: DALYs averted per 100k")

# risk groups
g2 + aes(y = dalys) + labs(y = "DALYs", title = "Prevalent Vaccination: DALYs")

g2 + aes(y = dalys.per100k) + labs(y = "DALYs per 100k", title = "Prevalent Vaccination: DALYs per 100k")

g2 + aes(y = dalys.averted) + labs(y = "DALYs averted", title = "Prevalent Vaccination: DALYs averted")

g2 + aes(y = dalys.averted.per100k) + labs(y = "DALYs averted per 100k", title = "Prevalent Vaccination: DALYs averted per 100k")

g3 + aes(y = dalys) + labs(y = "DALYs", title = "Prevalent Vaccination: DALYs")

g3 + aes(y = dalys.per100k) + labs(y = "DALYs per 100k", title = "Prevalent Vaccination: DALYs per 100k")

g3 + aes(y = dalys.averted) + labs(y = "DALYs averted", title = "Prevalent Vaccination: DALYs averted")

g3 + aes(y = dalys.averted.per100k) + labs(y = "DALYs averted per 100k", title = "Prevalent Vaccination: DALYs averted per 100k")

3.8 Fig. Cost-effectiveness plane (All VE)

l <- labs(x = "DALYs averted per 100K", y = "Cost saved per 100K")
# All VE%
a <- ggplot(df_base, aes(x = dalys.averted.per100k, y = cost.diff.per100k)) + l +
  labs(title = "Cost-effectiveness plane: Prevalent Vaccination vs. No Vaccination")
a + aes(color = risk, group = risk) + labs(color = "Risk") + geom_point() + facet_grid(v.eff ~ age)

a + aes(color = age, group = age) + labs(color = "Age group") + geom_point() + facet_grid(v.eff ~ risk)

LS0tCnRpdGxlOiAiUHJldmFsZW50IHZheCB2cy4gTm8gdmF4ICg0MCUgVkUpIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdGhlbWU6IGNvc21vCiAgICB0b2M6IHllcwogIGh0bWxfZG9jdW1lbnQ6IAogICAgZmlnX2NhcHRpb246IHllcwogICAga2VlcF9tZDogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdGhlbWU6IGNvc21vCiAgICB0b2M6IHllcwplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoCgllY2hvID0gRkFMU0UsCgl3YXJuaW5nID0gVFJVRSwKCWNhY2hlID0gVFJVRSwKCXRpZHkgPSBUUlVFCikKYGBgCgpgYGB7cn0Kcm0obGlzdCA9IGxzKGFsbC5uYW1lcyA9IFRSVUUpKQoKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KHJtYXJrZG93bikKbGlicmFyeShmb3JtYXRSKQpgYGAKCmBgYHtyfQpkYXRhIDwtIHJlYWQuY3N2KCJkZi9pY2VyLWFsbC5jc3YiLCBhcy5pcyA9IFRSVUUpCgojIHN1YnNldCBjb21wYXJhdG9yID0gYmFzZQpkZiA8LSBkYXRhWyhkYXRhJHNjZW5hcmlvPT0idmF4YmFzZSIpLF0KCmRmJGNvc3QuZGlmZi5wZXIxMDBrIDwtIGFzLm51bWVyaWMoZGYkY29zdC5kaWZmLnBlcjEwMGspCmRmJGNhc2VzLmF2ZXJ0ZWQgPC0gYXMubnVtZXJpYyhkZiRjYXNlcy5hdmVydGVkKQpkZiRjYXNlcy5hdmVydGVkLnBlcjEwMGsgPC0gYXMubnVtZXJpYyhkZiRjYXNlcy5hdmVydGVkLnBlcjEwMGspCmRmJGljZXIuY2FzZS5hdmVydGVkIDwtIGFzLm51bWVyaWMoZGYkaWNlci5jYXNlLmF2ZXJ0ZWQpCmRmJGRlYXRocy5hdmVydGVkIDwtIGFzLm51bWVyaWMoZGYkZGVhdGhzLmF2ZXJ0ZWQpCmRmJGRlYXRocy5hdmVydGVkLnBlcjEwMGsgPC0gYXMubnVtZXJpYyhkZiQgZGVhdGhzLmF2ZXJ0ZWQucGVyMTAwaykKZGYkaWNlci5kZWF0aC5hdmVydGVkIDwtIGFzLm51bWVyaWMoZGYkaWNlci5kZWF0aC5hdmVydGVkKQpkZiRkYWx5cyA8LSBhcy5udW1lcmljKGRmJGRhbHlzKQpkZiRkYWx5cy5wZXIxMDBrIDwtIGFzLm51bWVyaWMoZGYkZGFseXMucGVyMTAwaykKZGYkZGFseXMuYXZlcnRlZCA8LSBhcy5udW1lcmljKGRmJGRhbHlzLmF2ZXJ0ZWQpCmRmJGRhbHlzLmF2ZXJ0ZWQucGVyMTAwayA8LSBhcy5udW1lcmljKGRmJGRhbHlzLmF2ZXJ0ZWQucGVyMTAwaykKZGYkaWNlci5kYWx5LmF2ZXJ0ZWQgPC0gYXMubnVtZXJpYyhkZiRpY2VyLmRhbHkuYXZlcnRlZCkKYGBgCgpgYGB7cn0KIyBzdWJzZXQgZWZmaWNhY3kKZGYgPC0gZGZbIShkZiRzY2VuYXJpbyA9PSAndmF4YmFzZScgJiBkZiR2LmVmZiAlaW4lIGMoNTAsIDYwKSksXQoKIyBmYWN0b3JzCmRmJGFnZSA8LSBmYWN0b3IoZGYkYWdlLCBsZXZlbHMgPSBjKCIwLTQgeXJzIiwgIjUtMTkgeXJzIiwgIjIwLTY0IHlycyIsICI2NSsgeXJzIiwgIkFsbCIpKQpkZiRyaXNrIDwtIGZhY3RvcihkZiRyaXNrLCBsZXZlbHMgPSBjKCJIaWdoIiwgIk5vbi1oaWdoIiwgIkFsbCIpKQpkZiRzY2VuYXJpbyA8LSBmYWN0b3IoZGYkc2NlbmFyaW8sIGxldmVscyA9IGMoInZheGJhc2UiLCAidmF4NzAiKSkKZGYkdi5lZmYgPC0gZmFjdG9yKGRmJHYuZWZmKQpgYGAKCiMgVGFibGVzCgpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIyBUYWJsZTogSUNFUnMuCnQxIDwtIGRmW2MoInNjZW5hcmlvIiwgImFnZSIsICJyaXNrIiwgInYuZWZmIiwgImljZXIuY2FzZS5hdmVydGVkIiwgImljZXIuZGVhdGguYXZlcnRlZCIsICJpY2VyLmRhbHkuYXZlcnRlZCIpXSAlPiUKICBnYXRoZXIoImljZXIuY2FzZS5hdmVydGVkIiwgImljZXIuZGVhdGguYXZlcnRlZCIsICJpY2VyLmRhbHkuYXZlcnRlZCIsIGtleSA9ICJpY2VyIiwgdmFsdWUgPSAidmFsdWUiKSAlPiUKICBzcHJlYWQocmlzaywgdmFsdWUpICU+JQogIGFycmFuZ2Uoc2NlbmFyaW8sIHYuZWZmLCBpY2VyKQpoZWFkKHQxKQojd3JpdGUuY3N2KHQxLCAiZGYvZGYyLWljZXIuY3N2IikKCiMjIFRhYmxlOiBDYXNlcywgZGVhdGhzLCBEQUxZcyBwZXIgMTAwLDAwMCBwb3B1bGF0aW9uLgp0MiA8LSBkZltjKCJzY2VuYXJpbyIsICJhZ2UiLCAicmlzayIsICJ2LmVmZiIsICJjYXNlcy5wZXIxMDBrIiwgImRlYXRocy5wZXIxMDBrIiwgImRhbHlzLnBlcjEwMGsiKV0gJT4lCiAgZ2F0aGVyKCJjYXNlcy5wZXIxMDBrIiwgImRlYXRocy5wZXIxMDBrIiwgImRhbHlzLnBlcjEwMGsiLCBrZXkgPSAibWV0cmljIiwgdmFsdWUgPSAidmFsdWUiKSAlPiUKICBzcHJlYWQocmlzaywgdmFsdWUpICU+JQogIGFycmFuZ2Uoc2NlbmFyaW8sIHYuZWZmLCBtZXRyaWMpCmhlYWQodDIpCiN3cml0ZS5jc3YodDIsICJkZi9kZjItcmF0ZXMuY3N2IikKCiMjIFRhYmxlOiBDYXNlcywgZGVhdGhzLCBEQUxZcyBhdmVydGVkIHBlciAxMDAsMDAwCnQzIDwtIGRmW2MoInNjZW5hcmlvIiwgImFnZSIsICJyaXNrIiwgInYuZWZmIiwgImNhc2VzLmF2ZXJ0ZWQucGVyMTAwayIsICJkZWF0aHMuYXZlcnRlZC5wZXIxMDBrIiwgImRhbHlzLmF2ZXJ0ZWQucGVyMTAwayIpXSAlPiUKICBnYXRoZXIoImNhc2VzLmF2ZXJ0ZWQucGVyMTAwayIsICJkZWF0aHMuYXZlcnRlZC5wZXIxMDBrIiwgImRhbHlzLmF2ZXJ0ZWQucGVyMTAwayIsIGtleSA9ICJtZXRyaWMiLCB2YWx1ZSA9ICJ2YWx1ZSIpICU+JQogIHNwcmVhZChyaXNrLCB2YWx1ZSkgJT4lCiAgYXJyYW5nZShzY2VuYXJpbywgdi5lZmYsIG1ldHJpYykKaGVhZCh0MykKI3dyaXRlLmNzdih0MywgImRmL2RmMi1hdmVydGVkLXJhdGVzLmNzdiIpCmBgYAoKIyBTdWJzZXQgZGF0YS4KCmBgYHtyfQojIHN1YnNldCBzY2VuYXJpbwpkZl9iYXNlIDwtIGRmWyhkZiRzY2VuYXJpbyA9PSAndmF4YmFzZScpLF0KCiMgYWdlIGdyb3VwcwphZ2VfZGZfYmFzZSA8LSBkZl9iYXNlWyhkZl9iYXNlJHJpc2sgPT0gIkFsbCIpLF0KCiMgcmlzayBncm91cHMKcmlza19kZl9iYXNlIDwtIGRmX2Jhc2VbIShkZl9iYXNlJGFnZSA9PSAnQWxsJyksXQpgYGAKCiMjIDQwJSBWRTogSUNFUiBwZXIgY2FzZSBhdmVydGVkCmBgYHtyfQpnZ3Bsb3QoZGZfYmFzZVsoZGZfYmFzZSR2LmVmZiA9PSAiNDAiKSxdLCBhZXMoeCA9IGFnZSwgeSA9IGljZXIuY2FzZS5hdmVydGVkLCBncm91cCA9IHJpc2ssIGNvbG9yID0gcmlzaykpICsKICBnZW9tX3BvaW50KCkgKyBnZW9tX2xpbmUobGluZXR5cGUgPSAiZG90dGVkIikgKyBsYWJzKHggPSAiQWdlIGdyb3VwIiwgY29sb3IgPSAiUmlzayBncm91cCIpICsgCiAgeWxhYigiJCBzYXZlZCBwZXIgY2FzZSBhdmVydGVkIikgKyBnZ3RpdGxlKCJQcmV2YWxlbnQgVmFjY2luYXRpb24gKDQwJSBlZmZpY2FjeSk6IElDRVIgcGVyIGNhc2UgYXZlcnRlZCIpCmBgYAoKIyMgNDAlIFZFOiBJQ0VSIHBlciBkZWF0aCBhdmVydGVkCmBgYHtyfQpnZ3Bsb3QoZGZfYmFzZVsoZGZfYmFzZSR2LmVmZiA9PSAiNDAiKSxdLCBhZXMoeCA9IGFnZSwgeSA9IGljZXIuZGVhdGguYXZlcnRlZCwgZ3JvdXAgPSByaXNrLCBjb2xvciA9IHJpc2spKSArCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9saW5lKGxpbmV0eXBlID0gImRvdHRlZCIpICsgbGFicyh4ID0gIkFnZSBncm91cCIsIGNvbG9yID0gIlJpc2sgZ3JvdXAiKSArIAogIHlsYWIoIiQgc2F2ZWQgcGVyIGRlYXRoIGF2ZXJ0ZWQiKSArIGdndGl0bGUoIlByZXZhbGVudCBWYWNjaW5hdGlvbiAoNDAlIGVmZmljYWN5KTogSUNFUiBwZXIgZGVhdGggYXZlcnRlZCIpCmBgYAoKIyMgNDAlIFZFOiBJQ0VSIHBlciBEQUxZIGF2ZXJ0ZWQKYGBge3J9CmdncGxvdChkZl9iYXNlWyhkZl9iYXNlJHYuZWZmID09ICI0MCIpLF0sIGFlcyh4ID0gYWdlLCB5ID0gaWNlci5kYWx5LmF2ZXJ0ZWQsIGdyb3VwID0gcmlzaywgY29sb3IgPSByaXNrKSkgKwogIGdlb21fcG9pbnQoKSArIGdlb21fbGluZShsaW5ldHlwZSA9ICJkb3R0ZWQiKSArIGxhYnMoeCA9ICJBZ2UgZ3JvdXAiLCBjb2xvciA9ICJSaXNrIGdyb3VwIikgKyAKICB5bGFiKCIkIHNhdmVkIHBlciBEQUxZIGF2ZXJ0ZWQiKSArIGdndGl0bGUoIlByZXZhbGVudCBWYWNjaW5hdGlvbiAoNDAlIGVmZmljYWN5KTogSUNFUiBwZXIgREFMWSBhdmVydGVkIikKYGBgCgoKIyMgNDAlIFZFOiBDYXNlcywgY2FzZXMgYXZlcnRlZApgYGB7cn0KZzQgPC0gZ2dwbG90KGRmX2Jhc2VbKGRmX2Jhc2Ukdi5lZmYgPT0gIjQwIiksXSwgYWVzKHggPSBhZ2UsIGdyb3VwID0gcmlzaywgY29sb3IgPSByaXNrKSkgKwogIGdlb21fcG9pbnQoKSArIGdlb21fbGluZShsaW5ldHlwZSA9ICJkb3R0ZWQiKSArIGxhYnMoeCA9ICJBZ2UgZ3JvdXAiLCBjb2xvciA9ICJSaXNrIGdyb3VwIikKCmc0ICsgYWVzKHkgPSBjYXNlcykgKyBsYWJzKHkgPSAiQ2FzZXMiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb24gKDQwJSBWRSk6IENhc2VzIikKZzQgKyBhZXMoeSA9IGNhc2VzLnBlcjEwMGspICsgbGFicyh5ID0gIkNhc2VzIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uICg0MCUgVkUpOiBDYXNlcyBwZXIgMTAwayIpCmc0ICsgYWVzKHkgPSBjYXNlcy5hdmVydGVkKSArIGxhYnMoeSA9ICJDYXNlcyBhdmVydGVkIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uICg0MCUgVkUpOiBDYXNlcyBhdmVydGVkIikKZzQgKyBhZXMoeSA9IGNhc2VzLmF2ZXJ0ZWQucGVyMTAwaykgKyBsYWJzKHkgPSAiQ2FzZXMgYXZlcnRlZCBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbiAoNDAlIFZFKTogQ2FzZXMgYXZlcnRlZCBwZXIgMTAwayIpCmBgYAoKIyMgNDAlIFZFOiBEZWF0aHMsIGRlYXRocyBhdmVydGVkCmBgYHtyfQpnNCArIGFlcyh5ID0gZGVhdGhzKSArIGxhYnMoeSA9ICJEZWF0aHMiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb24gKDQwJSBWRSk6IERlYXRocyIpCmc0ICsgYWVzKHkgPSBkZWF0aHMucGVyMTAwaykgKyBsYWJzKHkgPSAiRGVhdGhzIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uICg0MCUgVkUpOiBEZWF0aHMgcGVyIDEwMGsiKQpnNCArIGFlcyh5ID0gZGVhdGhzLmF2ZXJ0ZWQpICsgbGFicyh5ID0gIkRlYXRocyBhdmVydGVkIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uICg0MCUgVkUpOiBEZWF0aHMgYXZlcnRlZCIpCmc0ICsgYWVzKHkgPSBkZWF0aHMuYXZlcnRlZC5wZXIxMDBrKSArIGxhYnMoeSA9ICJEZWF0aHMgYXZlcnRlZCBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbiAoNDAlIFZFKTogRGVhdGhzIGF2ZXJ0ZWQgcGVyIDEwMGsiKQpgYGAKCiMjIDQwJSBWRTogREFMWXMsIERBTFlzIGF2ZXJ0ZWQKYGBge3J9Cmc0ICsgYWVzKHkgPSBkYWx5cykgKyBsYWJzKHkgPSAiREFMWXMiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb24gKDQwJSBWRSk6IERBTFlzIikKZzQgKyBhZXMoeSA9IGRhbHlzLnBlcjEwMGspICsgbGFicyh5ID0gIkRBTFlzIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uICg0MCUgVkUpOiBEQUxZcyBwZXIgMTAwayIpCmc0ICsgYWVzKHkgPSBkYWx5cy5hdmVydGVkKSArIGxhYnMoeSA9ICJEQUxZcyBhdmVydGVkIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uICg0MCUgVkUpOiBEQUxZcyBhdmVydGVkIikKZzQgKyBhZXMoeSA9IGRhbHlzLmF2ZXJ0ZWQucGVyMTAwaykgKyBsYWJzKHkgPSAiREFMWXMgYXZlcnRlZCBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbiAoNDAlIFZFKTogREFMWXMgYXZlcnRlZCBwZXIgMTAwayIpCmBgYAoKIyMgRmlnLiBDb3N0LWVmZmVjdGl2ZW5lc3MgcGxhbmUgKDQwJSBWRSkKCmBgYHtyfQpnNSA8LSBnZ3Bsb3QoZGZfYmFzZSwgYWVzKHggPSBkYWx5cy5hdmVydGVkLnBlcjEwMGssIHkgPSBjb3N0LmRpZmYucGVyMTAwaykpICsKICBsYWJzKHggPSAiREFMWXMgYXZlcnRlZCBwZXIgMTAwSyIsIHkgPSAiQ29zdCBzYXZlZCBwZXIgMTAwSyIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogQ29zdCBzYXZlZCB2cy4gREFMWXMgYXZlcnRlZCIpCgpnNSArIGFlcyhjb2xvciA9IHJpc2ssIGdyb3VwID0gcmlzaykgKyBnZW9tX3BvaW50KCkgKyBmYWNldF9ncmlkKHYuZWZmIH4gYWdlKQoKZzUgKyBhZXMoY29sb3IgPSBhZ2UsIGdyb3VwID0gYWdlKSArIGdlb21fcG9pbnQoKSArIGZhY2V0X2dyaWQodi5lZmYgfiByaXNrKQpgYGAKCgojIFByZXZhbGVudCB2YXggdnMuIE5vIHZheCAoQWxsIFZFKQojIyBGaWcuIElDRVIgcGVyIGNhc2UgYXZlcnRlZAoKYGBge3J9CnQgPC0gbGFicyh5ID0gIiQgc2F2ZWQgcGVyIGNhc2UgYXZlcnRlZCIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogSUNFUiBwZXIgY2FzZSBhdmVydGVkIikKCmdncGxvdChhZ2VfZGZfYmFzZSwgYWVzKHggPSBhZ2UsIHkgPSBpY2VyLmNhc2UuYXZlcnRlZCwgY29sb3IgPSB2LmVmZiwgZ3JvdXAgPSB2LmVmZikpICsKICBnZW9tX3BvaW50KCkgKyBnZW9tX2xpbmUobGluZXR5cGUgPSAiZG90dGVkIikgKyBsYWJzKHggPSAiQWdlIGdyb3VwIiwgY29sb3IgPSAiVmFjY2luZSBcbmVmZmljYWN5IikgKyB0CgpnZ3Bsb3QoZGZfYmFzZVsoZGZfYmFzZSRhZ2U9PSJBbGwiKSxdLCBhZXMoeCA9IHYuZWZmLCB5ID0gaWNlci5jYXNlLmF2ZXJ0ZWQsIGdyb3VwID0gcmlzaywgY29sb3IgPSByaXNrKSkgKwogIGdlb21fcG9pbnQoKSArIGdlb21fbGluZShsaW5ldHlwZSA9ICJkb3R0ZWQiKSArIGxhYnMoeCA9ICJWYWNjaW5lIGVmZmljYWN5ICglKSIsIGNvbG9yID0gIlJpc2siKSArIHQKCmdncGxvdChkZl9iYXNlLCBhZXMoeCA9IGFnZSwgeSA9IGljZXIuY2FzZS5hdmVydGVkLCBncm91cCA9IHJpc2ssIGNvbG9yID0gcmlzaykpICsKICBnZW9tX3BvaW50KCkgKyBnZW9tX2xpbmUobGluZXR5cGUgPSAiZG90dGVkIikgKyBsYWJzKHggPSAiQWdlIGdyb3VwIiwgY29sb3IgPSAiUmlzayBncm91cCIpICsgdCArCiAgZmFjZXRfZ3JpZCh+IHYuZWZmKQpgYGAKCiMjIEZpZy4gSUNFUiBwZXIgZGVhdGggYXZlcnRlZAoKYGBge3J9CnQgPC0gbGFicyh5ID0gIiQgc2F2ZWQgcGVyIGRlYXRoIGF2ZXJ0ZWQiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IElDRVIgcGVyIGRlYXRoIGF2ZXJ0ZWQiKQoKZ2dwbG90KGFnZV9kZl9iYXNlLCBhZXMoeCA9IGFnZSwgeSA9IGljZXIuZGVhdGguYXZlcnRlZCwgY29sb3IgPSB2LmVmZiwgZ3JvdXAgPSB2LmVmZikpICsKICBnZW9tX3BvaW50KCkgKyBnZW9tX2xpbmUobGluZXR5cGUgPSAiZG90dGVkIikgKyBsYWJzKHggPSAiQWdlIGdyb3VwIiwgY29sb3IgPSAiVmFjY2luZSBcbmVmZmljYWN5IikgKyB0CgpnZ3Bsb3QoZGZfYmFzZVsoZGZfYmFzZSRhZ2U9PSJBbGwiKSxdLCBhZXMoeCA9IHYuZWZmLCB5ID0gaWNlci5kZWF0aC5hdmVydGVkLCBncm91cCA9IHJpc2ssIGNvbG9yID0gcmlzaykpICsKICBnZW9tX3BvaW50KCkgKyBnZW9tX2xpbmUobGluZXR5cGUgPSAiZG90dGVkIikgKyBsYWJzKHggPSAiVmFjY2luZSBlZmZpY2FjeSAoJSkiLCBjb2xvciA9ICJSaXNrIikgKyB0CgpnZ3Bsb3QoZGZfYmFzZSwgYWVzKHggPSBhZ2UsIHkgPSBpY2VyLmRlYXRoLmF2ZXJ0ZWQsIGdyb3VwID0gcmlzaywgY29sb3IgPSByaXNrKSkgKwogIGdlb21fcG9pbnQoKSArIGdlb21fbGluZShsaW5ldHlwZSA9ICJkb3R0ZWQiKSArIGxhYnMoeCA9ICJBZ2UgZ3JvdXAiLCBjb2xvciA9ICJSaXNrIGdyb3VwIikgKyB0ICsKICBmYWNldF9ncmlkKH4gdi5lZmYpCmBgYAoKIyMgRmlnLiBJQ0VSIHBlciBEQUxZIGF2ZXJ0ZWQKCmBgYHtyfQp0IDwtIGxhYnMoeSA9ICIkIHNhdmVkIHBlciBEQUxZIGF2ZXJ0ZWQiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IElDRVIgcGVyIERBTFkgYXZlcnRlZCIpCgpnZ3Bsb3QoYWdlX2RmX2Jhc2UsIGFlcyh4ID0gYWdlLCB5ID0gaWNlci5kYWx5LmF2ZXJ0ZWQsIGNvbG9yID0gdi5lZmYsIGdyb3VwID0gdi5lZmYpKSArCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9saW5lKGxpbmV0eXBlID0gImRvdHRlZCIpICsgbGFicyh4ID0gIkFnZSBncm91cCIsIGNvbG9yID0gIlZhY2NpbmUgXG5lZmZpY2FjeSIpICsgdAoKZ2dwbG90KGRmX2Jhc2VbKGRmX2Jhc2UkYWdlPT0iQWxsIiksXSwgYWVzKHggPSB2LmVmZiwgeSA9IGljZXIuZGFseS5hdmVydGVkLCBncm91cCA9IHJpc2ssIGNvbG9yID0gcmlzaykpICsKICBnZW9tX3BvaW50KCkgKyBnZW9tX2xpbmUobGluZXR5cGUgPSAiZG90dGVkIikgKyBsYWJzKHggPSAiVmFjY2luZSBlZmZpY2FjeSAoJSkiLCBjb2xvciA9ICJSaXNrIikgKyB0CgpnZ3Bsb3QoZGZfYmFzZSwgYWVzKHggPSBhZ2UsIHkgPSBpY2VyLmRhbHkuYXZlcnRlZCwgZ3JvdXAgPSByaXNrLCBjb2xvciA9IHJpc2spKSArCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9saW5lKGxpbmV0eXBlID0gImRvdHRlZCIpICsgbGFicyh4ID0gIkFnZSBncm91cCIsIGNvbG9yID0gIlJpc2sgZ3JvdXAiKSArIHQgKwogIGZhY2V0X2dyaWQofiB2LmVmZikKYGBgCgoKIyMgU2V0IHVwIHBsb3RzLgoKYGBge3J9CiMgYWdlCmcxIDwtIGdncGxvdChhZ2VfZGZfYmFzZSwgYWVzKHggPSBhZ2UsIGdyb3VwID0gdi5lZmYsIGNvbG9yID0gdi5lZmYpKSArCiAgZ2VvbV9wb2ludCgpICsgZ2VvbV9saW5lKGxpbmV0eXBlID0gImRvdHRlZCIpICsgbGFicyh4ID0gIkFnZSBncm91cCIsIGNvbG9yID0gIlZhY2NpbmUgXG5lZmZpY2FjeSIpCiMgcmlzawpnMiA8LSBnZ3Bsb3QoZGZfYmFzZVsoZGZfYmFzZSRhZ2U9PSJBbGwiKSxdLCBhZXMoeCA9IHYuZWZmLCBncm91cCA9IHJpc2ssIGNvbG9yID0gcmlzaykpICsKICBnZW9tX3BvaW50KCkgKyBnZW9tX2xpbmUobGluZXR5cGUgPSAiZG90dGVkIikgKyBsYWJzKHggPSAiVmFjY2luZSBlZmZpY2FjeSIsIGNvbG9yID0gIlJpc2sgZ3JvdXAiKQoKZzMgPC0gZ2dwbG90KHJpc2tfZGZfYmFzZSwgYWVzKHggPSBhZ2UsIGdyb3VwID0gcmlzaywgY29sb3IgPSByaXNrKSkgKwogIGdlb21fcG9pbnQoKSArIGdlb21fbGluZShsaW5ldHlwZSA9ICJkb3R0ZWQiKSArIGxhYnMoeCA9ICJBZ2UgZ3JvdXAiLCBjb2xvciA9ICJSaXNrIGdyb3VwIikgKwogIGZhY2V0X2dyaWQofiB2LmVmZikKYGBgCgojIyBGaWcuIENhc2VzLCBjYXNlcyBhdmVydGVkCgpgYGB7cn0KIyBhZ2UgZ3JvdXBzCmcxICsgYWVzKHkgPSBjYXNlcykgKyBsYWJzKHkgPSAiQ2FzZXMiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IENhc2VzIikKZzEgKyBhZXMoeSA9IGNhc2VzLnBlcjEwMGspICsgbGFicyh5ID0gIkNhc2VzIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBDYXNlcyBwZXIgMTAwayIpCmcxICsgYWVzKHkgPSBjYXNlcy5hdmVydGVkKSArIGxhYnMoeSA9ICJDYXNlcyBhdmVydGVkIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBDYXNlcyBhdmVydGVkIikKZzEgKyBhZXMoeSA9IGNhc2VzLmF2ZXJ0ZWQucGVyMTAwaykgKyBsYWJzKHkgPSAiQ2FzZXMgYXZlcnRlZCBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogQ2FzZXMgYXZlcnRlZCBwZXIgMTAwayIpCgojIHJpc2sgZ3JvdXBzCmcyICsgYWVzKHkgPSBjYXNlcykgKyBsYWJzKHkgPSAiQ2FzZXMiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IENhc2VzIikKZzIgKyBhZXMoeSA9IGNhc2VzLnBlcjEwMGspICsgbGFicyh5ID0gIkNhc2VzIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBDYXNlcyBwZXIgMTAwayIpCmcyICsgYWVzKHkgPSBjYXNlcy5hdmVydGVkKSArIGxhYnMoeSA9ICJDYXNlcyBhdmVydGVkIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBDYXNlcyBhdmVydGVkIikKZzIgKyBhZXMoeSA9IGNhc2VzLmF2ZXJ0ZWQucGVyMTAwaykgKyBsYWJzKHkgPSAiQ2FzZXMgYXZlcnRlZCBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogQ2FzZXMgYXZlcnRlZCBwZXIgMTAwayIpCgpnMyArIGFlcyh5ID0gY2FzZXMpICsgbGFicyh5ID0gIkNhc2VzIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBDYXNlcyIpCmczICsgYWVzKHkgPSBjYXNlcy5wZXIxMDBrKSArIGxhYnMoeSA9ICJDYXNlcyBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogQ2FzZXMgcGVyIDEwMGsiKQpnMyArIGFlcyh5ID0gY2FzZXMuYXZlcnRlZCkgKyBsYWJzKHkgPSAiQ2FzZXMgYXZlcnRlZCIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogQ2FzZXMgYXZlcnRlZCIpCmczICsgYWVzKHkgPSBjYXNlcy5hdmVydGVkLnBlcjEwMGspICsgbGFicyh5ID0gIkNhc2VzIGF2ZXJ0ZWQgcGVyIDEwMGsiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IENhc2VzIGF2ZXJ0ZWQgcGVyIDEwMGsiKQpgYGAKCiMjIEZpZy4gRGVhdGhzLCBkZWF0aHMgYXZlcnRlZAoKYGBge3J9CiMgYWdlIGdyb3VwcwpnMSArIGFlcyh5ID0gZGVhdGhzKSArIGxhYnMoeSA9ICJEZWF0aHMiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IERlYXRocyIpCmcxICsgYWVzKHkgPSBkZWF0aHMucGVyMTAwaykgKyBsYWJzKHkgPSAiRGVhdGhzIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEZWF0aHMgcGVyIDEwMGsiKQpnMSArIGFlcyh5ID0gZGVhdGhzLmF2ZXJ0ZWQpICsgbGFicyh5ID0gIkRlYXRocyBhdmVydGVkIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEZWF0aHMgYXZlcnRlZCIpCmcxICsgYWVzKHkgPSBkZWF0aHMuYXZlcnRlZC5wZXIxMDBrKSArIGxhYnMoeSA9ICJEZWF0aHMgYXZlcnRlZCBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogRGVhdGhzIGF2ZXJ0ZWQgcGVyIDEwMGsiKQoKIyByaXNrIGdyb3VwcwpnMiArIGFlcyh5ID0gZGVhdGhzKSArIGxhYnMoeSA9ICJEZWF0aHMiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IERlYXRocyIpCmcyICsgYWVzKHkgPSBkZWF0aHMucGVyMTAwaykgKyBsYWJzKHkgPSAiRGVhdGhzIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEZWF0aHMgcGVyIDEwMGsiKQpnMiArIGFlcyh5ID0gZGVhdGhzLmF2ZXJ0ZWQpICsgbGFicyh5ID0gIkRlYXRocyBhdmVydGVkIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEZWF0aHMgYXZlcnRlZCIpCmcyICsgYWVzKHkgPSBkZWF0aHMuYXZlcnRlZC5wZXIxMDBrKSArIGxhYnMoeSA9ICJEZWF0aHMgYXZlcnRlZCBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogRGVhdGhzIGF2ZXJ0ZWQgcGVyIDEwMGsiKQoKZzMgKyBhZXMoeSA9IGRlYXRocykgKyBsYWJzKHkgPSAiRGVhdGhzIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEZWF0aHMiKQpnMyArIGFlcyh5ID0gZGVhdGhzLnBlcjEwMGspICsgbGFicyh5ID0gIkRlYXRocyBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogRGVhdGhzIHBlciAxMDBrIikKZzMgKyBhZXMoeSA9IGRlYXRocy5hdmVydGVkKSArIGxhYnMoeSA9ICJEZWF0aHMgYXZlcnRlZCIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogRGVhdGhzIGF2ZXJ0ZWQiKQpnMyArIGFlcyh5ID0gZGVhdGhzLmF2ZXJ0ZWQucGVyMTAwaykgKyBsYWJzKHkgPSAiRGVhdGhzIGF2ZXJ0ZWQgcGVyIDEwMGsiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IERlYXRocyBhdmVydGVkIHBlciAxMDBrIikKYGBgCgojIyBGaWcuIERBTFlzLCBEQUxZcyBhdmVydGVkCgpgYGB7cn0KIyBhZ2UgZ3JvdXBzCmcxICsgYWVzKHkgPSBkYWx5cykgKyBsYWJzKHkgPSAiREFMWXMiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IERBTFlzIikKZzEgKyBhZXMoeSA9IGRhbHlzLnBlcjEwMGspICsgbGFicyh5ID0gIkRBTFlzIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEQUxZcyBwZXIgMTAwayIpCmcxICsgYWVzKHkgPSBkYWx5cy5hdmVydGVkKSArIGxhYnMoeSA9ICJEQUxZcyBhdmVydGVkIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEQUxZcyBhdmVydGVkIikKZzEgKyBhZXMoeSA9IGRhbHlzLmF2ZXJ0ZWQucGVyMTAwaykgKyBsYWJzKHkgPSAiREFMWXMgYXZlcnRlZCBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogREFMWXMgYXZlcnRlZCBwZXIgMTAwayIpCiMgcmlzayBncm91cHMKZzIgKyBhZXMoeSA9IGRhbHlzKSArIGxhYnMoeSA9ICJEQUxZcyIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogREFMWXMiKQpnMiArIGFlcyh5ID0gZGFseXMucGVyMTAwaykgKyBsYWJzKHkgPSAiREFMWXMgcGVyIDEwMGsiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IERBTFlzIHBlciAxMDBrIikKZzIgKyBhZXMoeSA9IGRhbHlzLmF2ZXJ0ZWQpICsgbGFicyh5ID0gIkRBTFlzIGF2ZXJ0ZWQiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IERBTFlzIGF2ZXJ0ZWQiKQpnMiArIGFlcyh5ID0gZGFseXMuYXZlcnRlZC5wZXIxMDBrKSArIGxhYnMoeSA9ICJEQUxZcyBhdmVydGVkIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEQUxZcyBhdmVydGVkIHBlciAxMDBrIikKCmczICsgYWVzKHkgPSBkYWx5cykgKyBsYWJzKHkgPSAiREFMWXMiLCB0aXRsZSA9ICJQcmV2YWxlbnQgVmFjY2luYXRpb246IERBTFlzIikKZzMgKyBhZXMoeSA9IGRhbHlzLnBlcjEwMGspICsgbGFicyh5ID0gIkRBTFlzIHBlciAxMDBrIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEQUxZcyBwZXIgMTAwayIpCmczICsgYWVzKHkgPSBkYWx5cy5hdmVydGVkKSArIGxhYnMoeSA9ICJEQUxZcyBhdmVydGVkIiwgdGl0bGUgPSAiUHJldmFsZW50IFZhY2NpbmF0aW9uOiBEQUxZcyBhdmVydGVkIikKZzMgKyBhZXMoeSA9IGRhbHlzLmF2ZXJ0ZWQucGVyMTAwaykgKyBsYWJzKHkgPSAiREFMWXMgYXZlcnRlZCBwZXIgMTAwayIsIHRpdGxlID0gIlByZXZhbGVudCBWYWNjaW5hdGlvbjogREFMWXMgYXZlcnRlZCBwZXIgMTAwayIpCmBgYAoKIyMgRmlnLiBDb3N0LWVmZmVjdGl2ZW5lc3MgcGxhbmUgKEFsbCBWRSkKCmBgYHtyfQpsIDwtIGxhYnMoeCA9ICJEQUxZcyBhdmVydGVkIHBlciAxMDBLIiwgeSA9ICJDb3N0IHNhdmVkIHBlciAxMDBLIikKCiMgQWxsIFZFJQphIDwtIGdncGxvdChkZl9iYXNlLCBhZXMoeCA9IGRhbHlzLmF2ZXJ0ZWQucGVyMTAwaywgeSA9IGNvc3QuZGlmZi5wZXIxMDBrKSkgKyBsICsKICBsYWJzKHRpdGxlID0gIkNvc3QtZWZmZWN0aXZlbmVzcyBwbGFuZTogUHJldmFsZW50IFZhY2NpbmF0aW9uIHZzLiBObyBWYWNjaW5hdGlvbiIpCgphICsgYWVzKGNvbG9yID0gcmlzaywgZ3JvdXAgPSByaXNrKSArIGxhYnMoY29sb3IgPSAiUmlzayIpICsgZ2VvbV9wb2ludCgpICsgZmFjZXRfZ3JpZCh2LmVmZiB+IGFnZSkKYSArIGFlcyhjb2xvciA9IGFnZSwgZ3JvdXAgPSBhZ2UpICsgbGFicyhjb2xvciA9ICJBZ2UgZ3JvdXAiKSArIGdlb21fcG9pbnQoKSArIGZhY2V0X2dyaWQodi5lZmYgfiByaXNrKQpgYGAK