- Total
data <- read.csv("dataforpylorigraph.csv", header = TRUE)
library(ggplot2)
library(grid)
data$birth.year_high <- as.numeric(data$birth.year_high)
#summary(data$birth.year_high)
data$total <- as.numeric(data$total)
#summary(data$total)
data$Author <- paste(data$Author..year.of.publication, ", ",
data$Research.Year)
data$Study.No <- factor(data$Study.No, ordered = TRUE)
data$Author <- factor(data$Author,
levels=c("Asaka, 1992 , unknown",
"Kikuchi, 1998 , 1996",
"Fujisawa, 1999 , 1974",
"Fujisawa, 1999 , 1984",
"Fujisawa, 1999 , 1994",
"Ogihara, 2000 , 1990",
"Yamagata, 2000 , 1988",
"Kurosawa, 2000 , 1995",
"Yamashita, 2001 , 1995",
"Fukuda, 2001 , 1986",
"Fukuda, 2001 , 1998",
"Kinjo, 2002 , 2000",
"Kato, 2003 , 2003",
"Kato, 2004 , 2004",
"Kikuchi, 2005 , 1988",
"Kawade, 2005 , 2000",
"Sasazuki, 2006 , 1990",
"Shikata, 2008 , 1988",
"Nakajima, 2010 , 1998",
"Nakajima, 2010 , 2005",
"Akamatsu, 2011 , 2007",
"Akamatsu, 2011 , 2008",
"Akamatsu, 2011 , 2009",
"Toyoda, 2012 , 2005",
"Tamura, 2012 , 2009",
"Kikuchi, 2013 , 1997",
"Kikuchi, 2013 , 2003",
"Urita, 2013 , 2002",
"Ueda, 2014 , 2005",
"Hirayama, 2014 , 2008",
"Okuda, 2014 , 2010",
"Watanabe, 2015 , 2010" ,
"Kamada, 2015 , 2011",
"Shiotani, 2007 , 2005",
"Yamaji, 2001 , 1997",
"Shibata, 2002 , 1993",
"Youn, 1998 , 1993",
"Naito, 2008 , 2002",
"Naito, 2008 , 2003",
"Shimatani, 2005 , 2000",
"Nobuta, 2004 , 1996",
"Kumagai, 1998 , 1986",
"Kumagai, 1998 , 1994",
"Reploge, 1996 , 1980",
"Fukao, 1993 , 1985"))
data1 <- subset(data, !is.na(total))
graph1 <- ggplot(data1, aes(x = birth.year_high,
y = total,
color = Author)) +
geom_line(linetype = "dashed") +
geom_point() +
scale_x_continuous(breaks = seq(1900, 2005, 5)) +
scale_y_continuous(breaks = seq(0,100,5)) +
scale_colour_manual(name = "Author,\nPublish year,\nStudy year",
values = c("#8A2BE2", "#A52A2A", "#FFFFFF",
"#8B8878", "#66CDAA", "#CD9B1D",
"#838B8B", "#7FFF00", "#483D8B",
"#0000CD", "#262626", "#CDB38B",
"#6B8E23", "#FFC1C1", "#8B8B00",
"#EE9A49", "#7EC0EE", "#8B6914",
"#104E8B", "#B4EEB4", "#EEE685",
"#FFF0F5", "#CDC1C5", "#ADD8E6",
"#68838B", "#F08080", "#00FA9A",
"#48D1CC", "#C71585", "#FF83FA",
"#36648B", "#00868B", "#8B864E",
"#D3D3D3", "#CDCDB4", "#EE4000",
"#FF83FA", "#EEE8AA", "#7CCD7C",
"#BBFFFF", "#96CDCD", "#EE0000",
"#FF3E96", "#B8860B"),
limits=c("Kikuchi, 1998 , 1996",
"Fujisawa, 1999 , 1974",
"Fujisawa, 1999 , 1984",
"Fujisawa, 1999 , 1994",
"Ogihara, 2000 , 1990",
"Yamagata, 2000 , 1988",
"Kurosawa, 2000 , 1995",
"Yamashita, 2001 , 1995",
"Fukuda, 2001 , 1986",
"Fukuda, 2001 , 1998",
"Kinjo, 2002 , 2000",
"Kato, 2003 , 2003",
"Kato, 2004 , 2004",
"Kikuchi, 2005 , 1988",
"Kawade, 2005 , 2000",
"Sasazuki, 2006 , 1990",
"Nakajima, 2010 , 1998",
"Nakajima, 2010 , 2005",
"Akamatsu, 2011 , 2007",
"Akamatsu, 2011 , 2008",
"Akamatsu, 2011 , 2009",
"Toyoda, 2012 , 2005",
"Tamura, 2012 , 2009",
"Kikuchi, 2013 , 1997",
"Kikuchi, 2013 , 2003",
"Urita, 2013 , 2002",
"Ueda, 2014 , 2005",
"Hirayama, 2014 , 2008",
"Okuda, 2014 , 2010",
"Watanabe, 2015 , 2010" ,
"Kamada, 2015 , 2011",
"Shiotani, 2007 , 2005",
"Yamaji, 2001 , 1997",
"Shibata, 2002 , 1993",
"Youn, 1998 , 1993",
"Naito, 2008 , 2002",
"Naito, 2008 , 2003",
"Shimatani, 2005 , 2000",
"Nobuta, 2004 , 1996",
"Kumagai, 1998 , 1986",
"Kumagai, 1998 , 1994",
"Reploge, 1996 , 1980",
"Fukao, 1993 , 1985",
"loess"),
labels = c("Kikuchi,1998,1996",
"Fujisawa,1999,1974",
"Fujisawa,1999,1984",
"Fujisawa,1999,1994",
"Ogihara,2000,1990",
"Yamagata,2000,1988",
"Kurosawa,2000,1995",
"Yamashita,2001,1995",
"Fukuda,2001,1986",
"Fukuda,2001,1998",
"Kinjo,2002,2000",
"Kato,2003,2003",
"Kato,2004,2004",
"Kikuchi,2005,1988",
"Kawade,2005,2000",
"Sasazuki,2006,1990",
"Nakajima,2010,1998",
"Nakajima,2010,2005",
"Akamatsu,2011,2007",
"Akamatsu,2011,2008",
"Akamatsu,2011,2009",
"Toyoda,2012,2005",
"Tamura,2012,2009",
"Kikuchi,2013,1997",
"Kikuchi,2013,2003",
"Urita,2013,2002",
"Ueda,2014,2005",
"Hirayama,2014,2008",
"Okuda,2014,2010",
"Watanabe,2015,2010" ,
"Kamada,2015,2011",
"Shiotani, 2007 , 2005",
"Yamaji,2001,1997",
"Shibata,2002,1993",
"Youn,1998,1993",
"Naito,2008,2002",
"Naito,2008,2003",
"Shimatani,2005,2000",
"Nobuta,2004,1996",
"Kumagai,1998,1986",
"Kumagai,1998,1994",
"Reploge,1996,1980",
"Fukao,1993,1985",
"LOWESS LINE")) +
ylab("Prevalence of H.pylori in Japanese (%)") +
xlab("Birth Year") +
geom_smooth(aes(colour = "loess"), method = "loess") +
theme_bw() +
theme(legend.position = "bottom",
axis.text.x = element_text(size = rel(1.5)),
axis.text.y = element_text(size = rel(1.5)),
axis.title.x = element_text(size = rel(1.5)),
axis.title.y = element_text(size = rel(1.5)),
legend.text = element_text(size = rel(1.1)),
legend.title = element_text(size = rel(1.1))) +
annotate("segment", x = 1929, xend = 1938.4,
y = 20.36, yend = 44.36,
colour = "red", size = 1.2,
arrow=arrow(length = unit(0.15,"inches"))) +
annotate("segment", x = 1919, xend = 1928.4,
y = 40.3, yend = 51.3,
colour = "red", size = 1.2,
arrow = arrow(length = unit(0.15, "inches"))) +
annotate("text", x=1929, y=19, label = "Ueda, 2014, 2005",
fontface = "italic", size = 5) +
annotate("text", x=1919, y=39, label = "Watanabe, 2015, 2010",
fontface = "italic", size = 5)
graph1

require(rCharts)
h1 <- hPlot(x = "birth.year_high", y = "total",
data = data1,
type = c("bubble"), #"spline"
group = c("Author"),
size = "n_total"
)
h1$title(text = "Prevalence of <i>H.pylori</i> in Japanese", align = "center")
h1$chart(zoomType = "xy")
h1$yAxis(min=0, max = 100,
title = list(text = "Persentage (%)"), tickInterval= 10,
scalable = TRUE)
h1$xAxis(title = list(text = "Birth year (1906 - 2003)")) #,
#formatter = "function () {
#return Highcharts.numberFormat(this.value, 0, '', '');} // Remove the thousands sep?")
h1$legend(title = list(text = "Author, publish year, study year"))
#h1$series(name = "LOWESS LINE", regression = TRUE, type = "loess")
h1$set(height = 700)
h1$exporting(enabled = T)
h1$show('inline', include_assets = TRUE, standalone = TRUE)
library(plotly)
g <- ggplot(data=data1) +
geom_point(mapping=aes(x = birth.year_high,
y = total, colour = Author,
size = n_total)) +
geom_line(mapping = aes(x = birth.year_high,
y = total, colour = Author), linetype = "dashed") +
scale_x_continuous(breaks = seq(1900, 2005, 5)) +
scale_y_continuous(breaks = seq(0,100,5)) +
scale_colour_manual(name = "Author,\nPublish year,\nStudy year",
values = c("#8A2BE2", "#A52A2A", "#FFFFFF",
"#8B8878", "#66CDAA", "#CD9B1D",
"#838B8B", "#7FFF00", "#483D8B",
"#0000CD", "#262626", "#CDB38B",
"#6B8E23", "#FFC1C1", "#8B8B00",
"#EE9A49", "#7EC0EE", "#8B6914",
"#104E8B", "#B4EEB4", "#EEE685",
"#FFF0F5", "#CDC1C5", "#ADD8E6",
"#68838B", "#F08080", "#00FA9A",
"#48D1CC", "#C71585", "#FF83FA",
"#36648B", "#00868B", "#8B864E",
"#D3D3D3", "#CDCDB4", "#EE4000",
"#FF83FA", "#EEE8AA", "#7CCD7C",
"#BBFFFF", "#96CDCD", "#EE0000",
"#FF3E96", "#B8860B"),
limits=c("Kikuchi, 1998 , 1996",
"Fujisawa, 1999 , 1974",
"Fujisawa, 1999 , 1984",
"Fujisawa, 1999 , 1994",
"Ogihara, 2000 , 1990",
"Yamagata, 2000 , 1988",
"Kurosawa, 2000 , 1995",
"Yamashita, 2001 , 1995",
"Fukuda, 2001 , 1986",
"Fukuda, 2001 , 1998",
"Kinjo, 2002 , 2000",
"Kato, 2003 , 2003",
"Kato, 2004 , 2004",
"Kikuchi, 2005 , 1988",
"Kawade, 2005 , 2000",
"Sasazuki, 2006 , 1990",
"Nakajima, 2010 , 1998",
"Nakajima, 2010 , 2005",
"Akamatsu, 2011 , 2007",
"Akamatsu, 2011 , 2008",
"Akamatsu, 2011 , 2009",
"Toyoda, 2012 , 2005",
"Tamura, 2012 , 2009",
"Kikuchi, 2013 , 1997",
"Kikuchi, 2013 , 2003",
"Urita, 2013 , 2002",
"Ueda, 2014 , 2005",
"Hirayama, 2014 , 2008",
"Okuda, 2014 , 2010",
"Watanabe, 2015 , 2010" ,
"Kamada, 2015 , 2011",
"Shiotani, 2007 , 2005",
"Yamaji, 2001 , 1997",
"Shibata, 2002 , 1993",
"Youn, 1998 , 1993",
"Naito, 2008 , 2002",
"Naito, 2008 , 2003",
"Shimatani, 2005 , 2000",
"Nobuta, 2004 , 1996",
"Kumagai, 1998 , 1986",
"Kumagai, 1998 , 1994",
"Reploge, 1996 , 1980",
"Fukao, 1993 , 1985",
"loess"),
labels = c("Kikuchi,1998,1996",
"Fujisawa,1999,1974",
"Fujisawa,1999,1984",
"Fujisawa,1999,1994",
"Ogihara,2000,1990",
"Yamagata,2000,1988",
"Kurosawa,2000,1995",
"Yamashita,2001,1995",
"Fukuda,2001,1986",
"Fukuda,2001,1998",
"Kinjo,2002,2000",
"Kato,2003,2003",
"Kato,2004,2004",
"Kikuchi,2005,1988",
"Kawade,2005,2000",
"Sasazuki,2006,1990",
"Nakajima,2010,1998",
"Nakajima,2010,2005",
"Akamatsu,2011,2007",
"Akamatsu,2011,2008",
"Akamatsu,2011,2009",
"Toyoda,2012,2005",
"Tamura,2012,2009",
"Kikuchi,2013,1997",
"Kikuchi,2013,2003",
"Urita,2013,2002",
"Ueda,2014,2005",
"Hirayama,2014,2008",
"Okuda,2014,2010",
"Watanabe,2015,2010" ,
"Kamada,2015,2011",
"Shiotani, 2007 , 2005",
"Yamaji,2001,1997",
"Shibata,2002,1993",
"Youn,1998,1993",
"Naito,2008,2002",
"Naito,2008,2003",
"Shimatani,2005,2000",
"Nobuta,2004,1996",
"Kumagai,1998,1986",
"Kumagai,1998,1994",
"Reploge,1996,1980",
"Fukao,1993,1985",
"LOWESS LINE")) +
ylab("Prevalence of <i>H.pylori</i> in Japanese (%)") +
xlab("Birth Year") +
geom_smooth(mapping = aes(x = birth.year_high,
y = total,colour = "loess"), method = "loess") +
theme_bw() +
theme( legend.position="none",
axis.text.x = element_text(size = rel(1.3)),
axis.text.y = element_text(size = rel(1.3)),
axis.title.x = element_text(size = rel(1.5)),
axis.title.y = element_text(size = rel(1.3)))
#ggplotly(g)
layout(ggplotly(g), legend=list(orientation = "h"))
- 男女別
source("function for multiplot by ggplot.R")
data_sex <- subset(data, !is.na(men))
Men <- ggplot(data_sex, aes(x = birth.year_high,
y = men,
color = Author)) +
geom_line(linetype = "dashed", size = 1.2) +
geom_point() +
scale_x_continuous(breaks = seq(1900, 2005, 5)) +
scale_y_continuous(limits=c(0,100),breaks = seq(0,100,5))+
scale_colour_manual(name = "",
values = c("#6495ED", "#FF8C00",
"#556B2F", "#7AC5CD",
"#458B00", "#8B7D6B", "#CD2626"),
limits=c("Kikuchi, 1998 , 1996",
"Ogihara, 2000 , 1990",
"Yamagata, 2000 , 1988",
"Kikuchi, 2005 , 1988",
"Tamura, 2012 , 2009",
"Hirayama, 2014 , 2008",
"loess"),
labels = c("Kikuchi,1998,1996",
"Ogihara,2000,1990",
"Yamagata,2000,1988",
"Kikuchi,2005,1988",
"Tamura,2012,2009",
"Hirayama,2014,2008",
"LOWESS LINE")) +
ylab("Prevalence of H.pylori in Japanese men (%)") +
xlab("Birth Year") +
geom_smooth(aes(colour = "loess"), method = "loess") +
theme_bw()+
theme(legend.position = "bottom",
axis.text.x = element_text(size = rel(1.3)),
axis.text.y = element_text(size = rel(1.5)),
axis.title.x = element_text(size = rel(1.5)),
axis.title.y = element_text(size = rel(1.5)),
legend.text = element_text(size = rel(1.2)))
Women <- ggplot(data_sex, aes(x = birth.year_high,
y = women,
color = Author)) +
geom_line(linetype = "dashed", size = 1.2) +
geom_point() +
scale_x_continuous(breaks = seq(1900, 2005, 5)) +
scale_y_continuous(limits=c(0,100),breaks = seq(0,100,5))+
scale_colour_manual(name = "",
values = c("#CD00CD", "#CDC9A5",
"#90EE90", "#191970",
"#668B8B", "#EE5C42", "#CD2626"),
limits=c("Kikuchi, 1998 , 1996",
"Ogihara, 2000 , 1990",
"Yamagata, 2000 , 1988",
"Kikuchi, 2005 , 1988",
"Tamura, 2012 , 2009",
"Hirayama, 2014 , 2008",
"loess"),
labels = c("Kikuchi,1998,1996",
"Ogihara,2000,1990",
"Yamagata,2000,1988",
"Kikuchi,2005,1988",
"Tamura,2012,2009",
"Hirayama,2014,2008",
"LOWESS LINE")) +
ylab("Prevalence of H.pylori in Japanese women (%)") +
xlab("Birth Year") +
geom_smooth(aes(colour = "loess"), method = "loess") +
theme_bw()+
theme(legend.position = "bottom",
axis.text.x = element_text(size = rel(1.3)),
axis.text.y = element_text(size = rel(1.5)),
axis.title.x = element_text(size = rel(1.5)),
axis.title.y = element_text(size = rel(1.5)),
legend.text = element_text(size = rel(1.2)))
multiplot(Men, Women, cols = 2)
LS0tCnRpdGxlOiAiZ3JhcGggZm9yICpILnB5bG9yaSogaW4gSmFwYW5lc2UiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KMS4gVG90YWwKYGBge3IsIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0xMn0KZGF0YSA8LSByZWFkLmNzdigiZGF0YWZvcnB5bG9yaWdyYXBoLmNzdiIsIGhlYWRlciA9IFRSVUUpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShncmlkKQpkYXRhJGJpcnRoLnllYXJfaGlnaCA8LSBhcy5udW1lcmljKGRhdGEkYmlydGgueWVhcl9oaWdoKQojc3VtbWFyeShkYXRhJGJpcnRoLnllYXJfaGlnaCkKZGF0YSR0b3RhbCA8LSBhcy5udW1lcmljKGRhdGEkdG90YWwpCiNzdW1tYXJ5KGRhdGEkdG90YWwpCmRhdGEkQXV0aG9yIDwtIHBhc3RlKGRhdGEkQXV0aG9yLi55ZWFyLm9mLnB1YmxpY2F0aW9uLCAiLCAiLCAKICAgICAgICAgICAgICAgICAgICAgZGF0YSRSZXNlYXJjaC5ZZWFyKQpkYXRhJFN0dWR5Lk5vIDwtIGZhY3RvcihkYXRhJFN0dWR5Lk5vLCBvcmRlcmVkID0gVFJVRSkKZGF0YSRBdXRob3IgPC0gZmFjdG9yKGRhdGEkQXV0aG9yLAogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzPWMoIkFzYWthLCAxOTkyICwgIHVua25vd24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDE5OTggLCAgMTk5NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsIDE5OTkgLCAgMTk3NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsIDE5OTkgLCAgMTk4NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsIDE5OTkgLCAgMTk5NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2dpaGFyYSwgMjAwMCAsICAxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hZ2F0YSwgMjAwMCAsICAxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLdXJvc2F3YSwgMjAwMCAsICAxOTk1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hc2hpdGEsIDIwMDEgLCAgMTk5NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVrdWRhLCAyMDAxICwgIDE5ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a3VkYSwgMjAwMSAsICAxOTk4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaW5qbywgMjAwMiAsICAyMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYXRvLCAyMDAzICwgIDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthdG8sIDIwMDQgLCAgMjAwNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwgMjAwNSAsICAxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYXdhZGUsIDIwMDUgLCAgMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2FzYXp1a2ksIDIwMDYgLCAgMTk5MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpa2F0YSwgMjAwOCAsICAxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwgMjAxMCAsICAxOTk4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwgMjAxMCAsICAyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3lvZGEsIDIwMTIgLCAgMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFtdXJhLCAyMDEyICwgIDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDIwMTMgLCAgMTk5NyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwgMjAxMyAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVcml0YSwgMjAxMyAsICAyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVZWRhLCAyMDE0ICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLCAyMDE0ICwgIDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9rdWRhLCAyMDE0ICwgIDIwMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhdGFuYWJlLCAyMDE1ICwgIDIwMTAiICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYW1hZGEsIDIwMTUgLCAgMjAxMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpb3RhbmksIDIwMDcgICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFqaSwgMjAwMSAsICAxOTk3IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpYmF0YSwgMjAwMiAsICAxOTkzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3VuLCAxOTk4ICwgIDE5OTMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywgMjAwOCAsICAyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywgMjAwOCAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGltYXRhbmksIDIwMDUgLCAgMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9idXRhLCAyMDA0ICwgIDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksIDE5OTggLCAgMTk4NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3VtYWdhaSwgMTk5OCAsICAxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXBsb2dlLCAxOTk2ICwgIDE5ODAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a2FvLCAxOTkzICwgIDE5ODUiKSkKCgpkYXRhMSA8LSBzdWJzZXQoZGF0YSwgIWlzLm5hKHRvdGFsKSkKCmdyYXBoMSA8LSBnZ3Bsb3QoZGF0YTEsIGFlcyh4ID0gYmlydGgueWVhcl9oaWdoLCAKICAgICAgICAgICAgICAgICAgeSA9IHRvdGFsLAogICAgICAgICAgICAgICAgICBjb2xvciA9IEF1dGhvcikpICsgCiAgZ2VvbV9saW5lKGxpbmV0eXBlID0gImRhc2hlZCIpICsgCiAgZ2VvbV9wb2ludCgpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgxOTAwLCAyMDA1LCA1KSkgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsMTAwLDUpKSArCiAgc2NhbGVfY29sb3VyX21hbnVhbChuYW1lID0gIkF1dGhvcixcblB1Ymxpc2ggeWVhcixcblN0dWR5IHllYXIiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiIzhBMkJFMiIsICIjQTUyQTJBIiwgIiNGRkZGRkYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM4Qjg4NzgiLCAiIzY2Q0RBQSIsICIjQ0Q5QjFEIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjODM4QjhCIiwgIiM3RkZGMDAiLCAiIzQ4M0Q4QiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMDAwMENEIiwgIiMyNjI2MjYiLCAiI0NEQjM4QiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzZCOEUyMyIsICIjRkZDMUMxIiwgIiM4QjhCMDAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNFRTlBNDkiLCAiIzdFQzBFRSIsICIjOEI2OTE0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMTA0RThCIiwgIiNCNEVFQjQiLCAiI0VFRTY4NSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0ZGRjBGNSIsICIjQ0RDMUM1IiwgIiNBREQ4RTYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM2ODgzOEIiLCAiI0YwODA4MCIsICIjMDBGQTlBIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNDhEMUNDIiwgIiNDNzE1ODUiLCAiI0ZGODNGQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzM2NjQ4QiIsICIjMDA4NjhCIiwgIiM4Qjg2NEUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNEM0QzRDMiLCAiI0NEQ0RCNCIsICIjRUU0MDAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRkY4M0ZBIiwgIiNFRUU4QUEiLCAiIzdDQ0Q3QyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0JCRkZGRiIsICIjOTZDRENEIiwgIiNFRTAwMDAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNGRjNFOTYiLCAiI0I4ODYwQiIpLCAKICAgICAgICAgICAgICAgICAgICAgIGxpbWl0cz1jKCJLaWt1Y2hpLCAxOTk4ICwgIDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLCAxOTk5ICwgIDE5NzQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLCAxOTk5ICwgIDE5ODQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLCAxOTk5ICwgIDE5OTQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9naWhhcmEsIDIwMDAgLCAgMTk5MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYWdhdGEsIDIwMDAgLCAgMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3Vyb3Nhd2EsIDIwMDAgLCAgMTk5NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYXNoaXRhLCAyMDAxICwgIDE5OTUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a3VkYSwgMjAwMSAsICAxOTg2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWt1ZGEsIDIwMDEgLCAgMTk5OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2luam8sIDIwMDIgLCAgMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F0bywgMjAwMyAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYXRvLCAyMDA0ICwgIDIwMDQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDIwMDUgLCAgMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F3YWRlLCAyMDA1ICwgIDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhc2F6dWtpLCAyMDA2ICwgIDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ha2FqaW1hLCAyMDEwICwgIDE5OTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ha2FqaW1hLCAyMDEwICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LCAyMDExICwgIDIwMDciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LCAyMDExICwgIDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LCAyMDExICwgIDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRveW9kYSwgMjAxMiAsICAyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYW11cmEsIDIwMTIgLCAgMjAwOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwgMjAxMyAsICAxOTk3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaWt1Y2hpLCAyMDEzICwgIDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVyaXRhLCAyMDEzICwgIDIwMDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVlZGEsIDIwMTQgLCAgMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGlyYXlhbWEsIDIwMTQgLCAgMjAwOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2t1ZGEsIDIwMTQgLCAgMjAxMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2F0YW5hYmUsIDIwMTUgLCAgMjAxMCIgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthbWFkYSwgMjAxNSAsICAyMDExIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpb3RhbmksIDIwMDcgICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFqaSwgMjAwMSAsICAxOTk3IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpYmF0YSwgMjAwMiAsICAxOTkzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3VuLCAxOTk4ICwgIDE5OTMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywgMjAwOCAsICAyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywgMjAwOCAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGltYXRhbmksIDIwMDUgLCAgMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9idXRhLCAyMDA0ICwgIDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksIDE5OTggLCAgMTk4NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3VtYWdhaSwgMTk5OCAsICAxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXBsb2dlLCAxOTk2ICwgIDE5ODAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a2FvLCAxOTkzICwgIDE5ODUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvZXNzIiksIAogICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiS2lrdWNoaSwxOTk4LDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsMTk5OSwxOTc0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLDE5OTksMTk4NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwxOTk5LDE5OTQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2dpaGFyYSwyMDAwLDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYWdhdGEsMjAwMCwxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1cm9zYXdhLDIwMDAsMTk5NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hc2hpdGEsMjAwMSwxOTk1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a3VkYSwyMDAxLDE5ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVrdWRhLDIwMDEsMTk5OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaW5qbywyMDAyLDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F0bywyMDAzLDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F0bywyMDA0LDIwMDQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwyMDA1LDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F3YWRlLDIwMDUsMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYXNhenVraSwyMDA2LDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFrYWppbWEsMjAxMCwxOTk4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ha2FqaW1hLDIwMTAsMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwyMDExLDIwMDciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWthbWF0c3UsMjAxMSwyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LDIwMTEsMjAwOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3lvZGEsMjAxMiwyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhbXVyYSwyMDEyLDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwyMDEzLDE5OTciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwyMDEzLDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXJpdGEsMjAxMywyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVlZGEsMjAxNCwyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLDIwMTQsMjAwOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPa3VkYSwyMDE0LDIwMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2F0YW5hYmUsMjAxNSwyMDEwIiAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYW1hZGEsMjAxNSwyMDExIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGlvdGFuaSwgMjAwNyAgLCAgMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hamksMjAwMSwxOTk3IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGliYXRhLDIwMDIsMTk5MyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3VuLDE5OTgsMTk5MyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFpdG8sMjAwOCwyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5haXRvLDIwMDgsMjAwMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGltYXRhbmksMjAwNSwyMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vYnV0YSwyMDA0LDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3VtYWdhaSwxOTk4LDE5ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3VtYWdhaSwxOTk4LDE5OTQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVwbG9nZSwxOTk2LDE5ODAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVrYW8sMTk5MywxOTg1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxPV0VTUyBMSU5FIikpICsgCiAgeWxhYigiUHJldmFsZW5jZSBvZiBILnB5bG9yaSBpbiBKYXBhbmVzZSAoJSkiKSArIAogIHhsYWIoIkJpcnRoIFllYXIiKSArIAogIGdlb21fc21vb3RoKGFlcyhjb2xvdXIgPSAibG9lc3MiKSwgbWV0aG9kID0gImxvZXNzIikgKyAKICB0aGVtZV9idygpICsgICAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwgCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwgCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS41KSksIAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuNSkpLCAKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuMSkpLCAKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjEpKSkgKyAKICBhbm5vdGF0ZSgic2VnbWVudCIsIHggPSAxOTI5LCB4ZW5kID0gMTkzOC40LAogICAgICAgICAgIHkgPSAyMC4zNiwgeWVuZCA9IDQ0LjM2LAogICAgICAgICAgIGNvbG91ciA9ICJyZWQiLCBzaXplID0gMS4yLAogICAgICAgICAgIGFycm93PWFycm93KGxlbmd0aCA9IHVuaXQoMC4xNSwiaW5jaGVzIikpKSArIAogIGFubm90YXRlKCJzZWdtZW50IiwgeCA9IDE5MTksIHhlbmQgPSAxOTI4LjQsIAogICAgICAgICAgIHkgPSA0MC4zLCB5ZW5kID0gNTEuMywgCiAgICAgICAgICAgY29sb3VyID0gInJlZCIsIHNpemUgPSAxLjIsIAogICAgICAgICAgIGFycm93ID0gYXJyb3cobGVuZ3RoID0gdW5pdCgwLjE1LCAiaW5jaGVzIikpKSArIAogIGFubm90YXRlKCJ0ZXh0IiwgeD0xOTI5LCB5PTE5LCBsYWJlbCA9ICJVZWRhLCAyMDE0LCAyMDA1IiwKICAgICAgICAgICBmb250ZmFjZSA9ICJpdGFsaWMiLCBzaXplID0gNSkgKyAKICBhbm5vdGF0ZSgidGV4dCIsIHg9MTkxOSwgeT0zOSwgbGFiZWwgPSAiV2F0YW5hYmUsIDIwMTUsIDIwMTAiLAogICAgICAgICAgIGZvbnRmYWNlID0gIml0YWxpYyIsIHNpemUgPSA1KQpncmFwaDEKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTEyLCByZXN1bHRzID0gJ2FzaXMnLCBjb21tZW50ID0gTkEsIGNhY2hlID0gRiwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KcmVxdWlyZShyQ2hhcnRzKQpoMSA8LSBoUGxvdCh4ID0gImJpcnRoLnllYXJfaGlnaCIsIHkgPSAidG90YWwiLAogICAgICAgICAgICBkYXRhID0gZGF0YTEsCiAgICAgICAgICAgIHR5cGUgPSBjKCJidWJibGUiKSwgIyJzcGxpbmUiCiAgICAgICAgICAgIGdyb3VwID0gYygiQXV0aG9yIiksCiAgICAgICAgICAgIHNpemUgPSAibl90b3RhbCIKICAgICAgICkKaDEkdGl0bGUodGV4dCA9ICJQcmV2YWxlbmNlIG9mIDxpPkgucHlsb3JpPC9pPiBpbiBKYXBhbmVzZSIsIGFsaWduID0gImNlbnRlciIpCmgxJGNoYXJ0KHpvb21UeXBlID0gInh5IikKaDEkeUF4aXMobWluPTAsIG1heCA9IDEwMCwgCiAgICAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlBlcnNlbnRhZ2UgKCUpIiksIHRpY2tJbnRlcnZhbD0gMTAsIAogICAgICAgICBzY2FsYWJsZSA9IFRSVUUpCmgxJHhBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIkJpcnRoIHllYXIgKDE5MDYgLSAyMDAzKSIpKSAjLCAKICAgICAgICAgI2Zvcm1hdHRlciA9ICJmdW5jdGlvbiAoKSB7CiAgICAgICAgICNyZXR1cm4gSGlnaGNoYXJ0cy5udW1iZXJGb3JtYXQodGhpcy52YWx1ZSwgMCwgJycsICcnKTt9IC8vIFJlbW92ZSB0aGUgdGhvdXNhbmRzIHNlcD8iKQpoMSRsZWdlbmQodGl0bGUgPSBsaXN0KHRleHQgPSAiQXV0aG9yLCBwdWJsaXNoIHllYXIsIHN0dWR5IHllYXIiKSkKI2gxJHNlcmllcyhuYW1lID0gIkxPV0VTUyBMSU5FIiwgcmVncmVzc2lvbiA9IFRSVUUsIHR5cGUgPSAibG9lc3MiKQpoMSRzZXQoaGVpZ2h0ID0gNzAwKQoKaDEkZXhwb3J0aW5nKGVuYWJsZWQgPSBUKQoKaDEkc2hvdygnaW5saW5lJywgaW5jbHVkZV9hc3NldHMgPSBUUlVFLCBzdGFuZGFsb25lID0gVFJVRSkKCmBgYAoKCgpgYGB7ciwgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTE0LCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHBsb3RseSkKZyA8LSBnZ3Bsb3QoZGF0YT1kYXRhMSkgKyAgIAogIGdlb21fcG9pbnQobWFwcGluZz1hZXMoeCA9IGJpcnRoLnllYXJfaGlnaCwKICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB0b3RhbCwgY29sb3VyID0gQXV0aG9yLCAKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuX3RvdGFsKSkgKyAgCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGJpcnRoLnllYXJfaGlnaCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHRvdGFsLCBjb2xvdXIgPSBBdXRob3IpLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTkwMCwgMjAwNSwgNSkpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDEwMCw1KSkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwobmFtZSA9ICJBdXRob3IsXG5QdWJsaXNoIHllYXIsXG5TdHVkeSB5ZWFyIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiM4QTJCRTIiLCAiI0E1MkEyQSIsICIjRkZGRkZGIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjOEI4ODc4IiwgIiM2NkNEQUEiLCAiI0NEOUIxRCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzgzOEI4QiIsICIjN0ZGRjAwIiwgIiM0ODNEOEIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzAwMDBDRCIsICIjMjYyNjI2IiwgIiNDREIzOEIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM2QjhFMjMiLCAiI0ZGQzFDMSIsICIjOEI4QjAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRUU5QTQ5IiwgIiM3RUMwRUUiLCAiIzhCNjkxNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzEwNEU4QiIsICIjQjRFRUI0IiwgIiNFRUU2ODUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNGRkYwRjUiLCAiI0NEQzFDNSIsICIjQUREOEU2IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNjg4MzhCIiwgIiNGMDgwODAiLCAiIzAwRkE5QSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzQ4RDFDQyIsICIjQzcxNTg1IiwgIiNGRjgzRkEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMzNjY0OEIiLCAiIzAwODY4QiIsICIjOEI4NjRFIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRDNEM0QzIiwgIiNDRENEQjQiLCAiI0VFNDAwMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0ZGODNGQSIsICIjRUVFOEFBIiwgIiM3Q0NEN0MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNCQkZGRkYiLCAiIzk2Q0RDRCIsICIjRUUwMDAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRkYzRTk2IiwgIiNCODg2MEIiKSwgCiAgICAgICAgICAgICAgICAgICAgICBsaW1pdHM9YygiS2lrdWNoaSwgMTk5OCAsICAxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwgMTk5OSAsICAxOTc0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwgMTk5OSAsICAxOTg0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwgMTk5OSAsICAxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPZ2loYXJhLCAyMDAwICwgIDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFnYXRhLCAyMDAwICwgIDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1cm9zYXdhLCAyMDAwICwgIDE5OTUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFzaGl0YSwgMjAwMSAsICAxOTk1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWt1ZGEsIDIwMDEgLCAgMTk4NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVrdWRhLCAyMDAxICwgIDE5OTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpbmpvLCAyMDAyICwgIDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthdG8sIDIwMDMgLCAgMjAwMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F0bywgMjAwNCAsICAyMDA0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaWt1Y2hpLCAyMDA1ICwgIDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthd2FkZSwgMjAwNSAsICAyMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYXNhenVraSwgMjAwNiAsICAxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwgMjAxMCAsICAxOTk4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwgMjAxMCAsICAyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3lvZGEsIDIwMTIgLCAgMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFtdXJhLCAyMDEyICwgIDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDIwMTMgLCAgMTk5NyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwgMjAxMyAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVcml0YSwgMjAxMyAsICAyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVZWRhLCAyMDE0ICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLCAyMDE0ICwgIDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9rdWRhLCAyMDE0ICwgIDIwMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhdGFuYWJlLCAyMDE1ICwgIDIwMTAiICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYW1hZGEsIDIwMTUgLCAgMjAxMSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNoaW90YW5pLCAyMDA3ICAsICAyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hamksIDIwMDEgLCAgMTk5NyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNoaWJhdGEsIDIwMDIgLCAgMTk5MyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91biwgMTk5OCAsICAxOTkzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFpdG8sIDIwMDggLCAgMjAwMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFpdG8sIDIwMDggLCAgMjAwMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpbWF0YW5pLCAyMDA1ICwgIDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vYnV0YSwgMjAwNCAsICAxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLdW1hZ2FpLCAxOTk4ICwgIDE5ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksIDE5OTggLCAgMTk5NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVwbG9nZSwgMTk5NiAsICAxOTgwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWthbywgMTk5MyAsICAxOTg1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2VzcyIpLCAKICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktpa3VjaGksMTk5OCwxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLDE5OTksMTk3NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwxOTk5LDE5ODQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsMTk5OSwxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9naWhhcmEsMjAwMCwxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFnYXRhLDIwMDAsMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLdXJvc2F3YSwyMDAwLDE5OTUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYXNoaXRhLDIwMDEsMTk5NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWt1ZGEsMjAwMSwxOTg2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a3VkYSwyMDAxLDE5OTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2luam8sMjAwMiwyMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthdG8sMjAwMywyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthdG8sMjAwNCwyMDA0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksMjAwNSwxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthd2FkZSwyMDA1LDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2FzYXp1a2ksMjAwNiwxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ha2FqaW1hLDIwMTAsMTk5OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwyMDEwLDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWthbWF0c3UsMjAxMSwyMDA3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LDIwMTEsMjAwOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwyMDExLDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG95b2RhLDIwMTIsMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYW11cmEsMjAxMiwyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksMjAxMywxOTk3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksMjAxMywyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVyaXRhLDIwMTMsMjAwMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVZWRhLDIwMTQsMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIaXJheWFtYSwyMDE0LDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2t1ZGEsMjAxNCwyMDEwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhdGFuYWJlLDIwMTUsMjAxMCIgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2FtYWRhLDIwMTUsMjAxMSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpb3RhbmksIDIwMDcgICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYWppLDIwMDEsMTk5NyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpYmF0YSwyMDAyLDE5OTMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91biwxOTk4LDE5OTMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5haXRvLDIwMDgsMjAwMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywyMDA4LDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpbWF0YW5pLDIwMDUsMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2J1dGEsMjAwNCwxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksMTk5OCwxOTg2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksMTk5OCwxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlcGxvZ2UsMTk5NiwxOTgwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a2FvLDE5OTMsMTk4NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMT1dFU1MgTElORSIpKSArIAogIHlsYWIoIlByZXZhbGVuY2Ugb2YgPGk+SC5weWxvcmk8L2k+IGluIEphcGFuZXNlICglKSIpICsgCiAgeGxhYigiQmlydGggWWVhciIpICsgCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gYmlydGgueWVhcl9oaWdoLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB0b3RhbCxjb2xvdXIgPSAibG9lc3MiKSwgbWV0aG9kID0gImxvZXNzIikgKyAKICB0aGVtZV9idygpICsKICB0aGVtZSggICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249Im5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS4zKSksIAogICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS4zKSksIAogICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuNSkpLCAKICAgICAgICAgICAgICAgICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjMpKSkKI2dncGxvdGx5KGcpCgpsYXlvdXQoZ2dwbG90bHkoZyksIGxlZ2VuZD1saXN0KG9yaWVudGF0aW9uID0gImgiKSkgCgpgYGAKCgoyLiDnlLflpbPliKUKYGBge3IsIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE2fQpzb3VyY2UoImZ1bmN0aW9uIGZvciBtdWx0aXBsb3QgYnkgZ2dwbG90LlIiKQpkYXRhX3NleCA8LSBzdWJzZXQoZGF0YSwgIWlzLm5hKG1lbikpCgpNZW4gPC0gZ2dwbG90KGRhdGFfc2V4LCBhZXMoeCA9IGJpcnRoLnllYXJfaGlnaCwgCiAgICAgICAgICAgICAgICAgIHkgPSBtZW4sCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gQXV0aG9yKSkgKyAKICBnZW9tX2xpbmUobGluZXR5cGUgPSAiZGFzaGVkIiwgc2l6ZSA9IDEuMikgKyAKICBnZW9tX3BvaW50KCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTkwMCwgMjAwNSwgNSkpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cz1jKDAsMTAwKSxicmVha3MgPSBzZXEoMCwxMDAsNSkpKwogIHNjYWxlX2NvbG91cl9tYW51YWwobmFtZSA9ICIiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiIzY0OTVFRCIsICIjRkY4QzAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNTU2QjJGIiwgIiM3QUM1Q0QiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM0NThCMDAiLCAiIzhCN0Q2QiIsICIjQ0QyNjI2IiksIAogICAgICAgICAgICAgICAgICAgICAgbGltaXRzPWMoIktpa3VjaGksIDE5OTggLCAgMTk5NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2dpaGFyYSwgMjAwMCAsICAxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hZ2F0YSwgMjAwMCAsICAxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaWt1Y2hpLCAyMDA1ICwgIDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhbXVyYSwgMjAxMiAsICAyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIaXJheWFtYSwgMjAxNCAsICAyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2VzcyIpLCAKICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktpa3VjaGksMTk5OCwxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9naWhhcmEsMjAwMCwxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFnYXRhLDIwMDAsMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaWt1Y2hpLDIwMDUsMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYW11cmEsMjAxMiwyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLDIwMTQsMjAwOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMT1dFU1MgTElORSIpKSArIAogIHlsYWIoIlByZXZhbGVuY2Ugb2YgSC5weWxvcmkgaW4gSmFwYW5lc2UgbWVuICglKSIpICsgCiAgeGxhYigiQmlydGggWWVhciIpICsgCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG91ciA9ICJsb2VzcyIpLCBtZXRob2QgPSAibG9lc3MiKSArIAogIHRoZW1lX2J3KCkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS4zKSksIAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS41KSksIAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuNSkpLCAKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwgCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjIpKSkgCgpXb21lbiA8LSBnZ3Bsb3QoZGF0YV9zZXgsIGFlcyh4ID0gYmlydGgueWVhcl9oaWdoLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHdvbWVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IEF1dGhvcikpICsgCiAgZ2VvbV9saW5lKGxpbmV0eXBlID0gImRhc2hlZCIsIHNpemUgPSAxLjIpICsgCiAgZ2VvbV9wb2ludCgpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgxOTAwLCAyMDA1LCA1KSkgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzPWMoMCwxMDApLGJyZWFrcyA9IHNlcSgwLDEwMCw1KSkrCiAgc2NhbGVfY29sb3VyX21hbnVhbChuYW1lID0gIiIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjQ0QwMENEIiwgIiNDREM5QTUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM5MEVFOTAiLCAiIzE5MTk3MCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzY2OEI4QiIsICIjRUU1QzQyIiwgIiNDRDI2MjYiKSwgCiAgICAgICAgICAgICAgICAgICAgICBsaW1pdHM9YygiS2lrdWNoaSwgMTk5OCAsICAxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPZ2loYXJhLCAyMDAwICwgIDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFnYXRhLCAyMDAwICwgIDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDIwMDUgLCAgMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFtdXJhLCAyMDEyICwgIDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLCAyMDE0ICwgIDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvZXNzIiksIAogICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiS2lrdWNoaSwxOTk4LDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2dpaGFyYSwyMDAwLDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYWdhdGEsMjAwMCwxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksMjAwNSwxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhbXVyYSwyMDEyLDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGlyYXlhbWEsMjAxNCwyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxPV0VTUyBMSU5FIikpICsgCiAgeWxhYigiUHJldmFsZW5jZSBvZiBILnB5bG9yaSBpbiBKYXBhbmVzZSB3b21lbiAoJSkiKSArIAogIHhsYWIoIkJpcnRoIFllYXIiKSArIAogIGdlb21fc21vb3RoKGFlcyhjb2xvdXIgPSAibG9lc3MiKSwgbWV0aG9kID0gImxvZXNzIikgKyAKICB0aGVtZV9idygpKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjMpKSwgCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwgCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS41KSksIAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuNSkpLCAKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuMikpKQoKCm11bHRpcGxvdChNZW4sIFdvbWVuLCBjb2xzID0gMikKCmBgYAoKCg==