library(ggplot2)
library(ggthemes)
d <- read.csv(header=TRUE, "~/sort-perf")
d2 <- d[d$test == "set-model", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Set Model")+xlab("Model size")+ylab("Time")

d2 <- d[d$test == "append-half", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append half")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append half")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append half")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "append-10th", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 10th")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 10th")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 10th")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "append-100th", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 100th")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 100th")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 100th")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "append-1", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 1")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 1")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 1")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "append-2", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 2")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 2")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 2")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "append-10", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 10")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 10")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Append 10")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "remove-half", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove half")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove half")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove half")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "remove-10th", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 10th")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 10th")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 10th")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "remove-100th", ]

ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 100th")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 100th")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 100th")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "remove-10th", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 10th")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 10th")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 10th")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "remove-1", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 1")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 1")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 1")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "remove-2", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 2")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 2")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 2")+xlab("Model size")+ylab("Changes")

d2 <- d[d$test == "remove-10", ]
ggplot(d2,aes(x=model.size,y=time,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 10")+xlab("Model size")+ylab("Time")


ggplot(d2,aes(x=model.size,y=comparisons,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 10")+xlab("Model size")+ylab("Comparisons")


ggplot(d2,aes(x=model.size,y=changes,group=model,color=model))+geom_line()+scale_x_continuous(trans="log2")+ggtitle("Remove 10")+xlab("Model size")+ylab("Changes")

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgoKYGBge3J9CmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShnZ3RoZW1lcykKZCA8LSByZWFkLmNzdihoZWFkZXI9VFJVRSwgIn4vc29ydC1wZXJmIikKYGBgCgpgYGB7cn0KZDIgPC0gZFtkJHRlc3QgPT0gInNldC1tb2RlbCIsIF0KZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT10aW1lLGdyb3VwPW1vZGVsLGNvbG9yPW1vZGVsKSkrZ2VvbV9saW5lKCkrc2NhbGVfeF9jb250aW51b3VzKHRyYW5zPSJsb2cyIikrZ2d0aXRsZSgiU2V0IE1vZGVsIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIlRpbWUiKQpgYGAKCmBgYHtyfQpkMiA8LSBkW2QkdGVzdCA9PSAiYXBwZW5kLWhhbGYiLCBdCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9dGltZSxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCBoYWxmIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIlRpbWUiKQoKZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT1jb21wYXJpc29ucyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCBoYWxmIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIkNvbXBhcmlzb25zIikKCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9Y2hhbmdlcyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCBoYWxmIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIkNoYW5nZXMiKQoKYGBgCgpgYGB7cn0KZDIgPC0gZFtkJHRlc3QgPT0gImFwcGVuZC0xMHRoIiwgXQpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PXRpbWUsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJBcHBlbmQgMTB0aCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJUaW1lIikKCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9Y29tcGFyaXNvbnMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJBcHBlbmQgMTB0aCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDb21wYXJpc29ucyIpCgpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PWNoYW5nZXMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJBcHBlbmQgMTB0aCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDaGFuZ2VzIikKYGBgCgpgYGB7cn0KZDIgPC0gZFtkJHRlc3QgPT0gImFwcGVuZC0xMDB0aCIsIF0KZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT10aW1lLGdyb3VwPW1vZGVsLGNvbG9yPW1vZGVsKSkrZ2VvbV9saW5lKCkrc2NhbGVfeF9jb250aW51b3VzKHRyYW5zPSJsb2cyIikrZ2d0aXRsZSgiQXBwZW5kIDEwMHRoIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIlRpbWUiKQoKZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT1jb21wYXJpc29ucyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCAxMDB0aCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDb21wYXJpc29ucyIpCgpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PWNoYW5nZXMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJBcHBlbmQgMTAwdGgiKSt4bGFiKCJNb2RlbCBzaXplIikreWxhYigiQ2hhbmdlcyIpCgpgYGAKCmBgYHtyfQpkMiA8LSBkW2QkdGVzdCA9PSAiYXBwZW5kLTEiLCBdCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9dGltZSxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCAxIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIlRpbWUiKQoKZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT1jb21wYXJpc29ucyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCAxIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIkNvbXBhcmlzb25zIikKCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9Y2hhbmdlcyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCAxIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIkNoYW5nZXMiKQoKYGBgCmBgYHtyfQpkMiA8LSBkW2QkdGVzdCA9PSAiYXBwZW5kLTIiLCBdCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9dGltZSxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCAyIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIlRpbWUiKQoKZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT1jb21wYXJpc29ucyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCAyIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIkNvbXBhcmlzb25zIikKCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9Y2hhbmdlcyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCAyIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIkNoYW5nZXMiKQoKYGBgCgpgYGB7cn0KZDIgPC0gZFtkJHRlc3QgPT0gImFwcGVuZC0xMCIsIF0KZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT10aW1lLGdyb3VwPW1vZGVsLGNvbG9yPW1vZGVsKSkrZ2VvbV9saW5lKCkrc2NhbGVfeF9jb250aW51b3VzKHRyYW5zPSJsb2cyIikrZ2d0aXRsZSgiQXBwZW5kIDEwIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIlRpbWUiKQoKZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT1jb21wYXJpc29ucyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIkFwcGVuZCAxMCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDb21wYXJpc29ucyIpCgpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PWNoYW5nZXMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJBcHBlbmQgMTAiKSt4bGFiKCJNb2RlbCBzaXplIikreWxhYigiQ2hhbmdlcyIpCgpgYGAKCmBgYHtyfQpkMiA8LSBkW2QkdGVzdCA9PSAicmVtb3ZlLWhhbGYiLCBdCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9dGltZSxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIlJlbW92ZSBoYWxmIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIlRpbWUiKQoKZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT1jb21wYXJpc29ucyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIlJlbW92ZSBoYWxmIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIkNvbXBhcmlzb25zIikKCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9Y2hhbmdlcyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIlJlbW92ZSBoYWxmIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIkNoYW5nZXMiKQoKYGBgCgpgYGB7cn0KZDIgPC0gZFtkJHRlc3QgPT0gInJlbW92ZS0xMHRoIiwgXQpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PXRpbWUsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMTB0aCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJUaW1lIikKCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9Y29tcGFyaXNvbnMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMTB0aCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDb21wYXJpc29ucyIpCgpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PWNoYW5nZXMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMTB0aCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDaGFuZ2VzIikKYGBgCgpgYGB7cn0KZDIgPC0gZFtkJHRlc3QgPT0gInJlbW92ZS0xMDB0aCIsIF0KCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9dGltZSxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIlJlbW92ZSAxMDB0aCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJUaW1lIikKCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9Y29tcGFyaXNvbnMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMTAwdGgiKSt4bGFiKCJNb2RlbCBzaXplIikreWxhYigiQ29tcGFyaXNvbnMiKQoKZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT1jaGFuZ2VzLGdyb3VwPW1vZGVsLGNvbG9yPW1vZGVsKSkrZ2VvbV9saW5lKCkrc2NhbGVfeF9jb250aW51b3VzKHRyYW5zPSJsb2cyIikrZ2d0aXRsZSgiUmVtb3ZlIDEwMHRoIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIkNoYW5nZXMiKQpgYGAKYGBge3J9CmQyIDwtIGRbZCR0ZXN0ID09ICJyZW1vdmUtMTB0aCIsIF0KZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT10aW1lLGdyb3VwPW1vZGVsLGNvbG9yPW1vZGVsKSkrZ2VvbV9saW5lKCkrc2NhbGVfeF9jb250aW51b3VzKHRyYW5zPSJsb2cyIikrZ2d0aXRsZSgiUmVtb3ZlIDEwdGgiKSt4bGFiKCJNb2RlbCBzaXplIikreWxhYigiVGltZSIpCgpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PWNvbXBhcmlzb25zLGdyb3VwPW1vZGVsLGNvbG9yPW1vZGVsKSkrZ2VvbV9saW5lKCkrc2NhbGVfeF9jb250aW51b3VzKHRyYW5zPSJsb2cyIikrZ2d0aXRsZSgiUmVtb3ZlIDEwdGgiKSt4bGFiKCJNb2RlbCBzaXplIikreWxhYigiQ29tcGFyaXNvbnMiKQoKZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT1jaGFuZ2VzLGdyb3VwPW1vZGVsLGNvbG9yPW1vZGVsKSkrZ2VvbV9saW5lKCkrc2NhbGVfeF9jb250aW51b3VzKHRyYW5zPSJsb2cyIikrZ2d0aXRsZSgiUmVtb3ZlIDEwdGgiKSt4bGFiKCJNb2RlbCBzaXplIikreWxhYigiQ2hhbmdlcyIpCmBgYApgYGB7cn0KZDIgPC0gZFtkJHRlc3QgPT0gInJlbW92ZS0xIiwgXQpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PXRpbWUsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMSIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJUaW1lIikKCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9Y29tcGFyaXNvbnMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMSIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDb21wYXJpc29ucyIpCgpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PWNoYW5nZXMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMSIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDaGFuZ2VzIikKCmBgYApgYGB7cn0KZDIgPC0gZFtkJHRlc3QgPT0gInJlbW92ZS0yIiwgXQpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PXRpbWUsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMiIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJUaW1lIikKCmdncGxvdChkMixhZXMoeD1tb2RlbC5zaXplLHk9Y29tcGFyaXNvbnMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMiIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDb21wYXJpc29ucyIpCgpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PWNoYW5nZXMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMiIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDaGFuZ2VzIikKCmBgYApgYGB7cn0KZDIgPC0gZFtkJHRlc3QgPT0gInJlbW92ZS0xMCIsIF0KZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT10aW1lLGdyb3VwPW1vZGVsLGNvbG9yPW1vZGVsKSkrZ2VvbV9saW5lKCkrc2NhbGVfeF9jb250aW51b3VzKHRyYW5zPSJsb2cyIikrZ2d0aXRsZSgiUmVtb3ZlIDEwIikreGxhYigiTW9kZWwgc2l6ZSIpK3lsYWIoIlRpbWUiKQoKZ2dwbG90KGQyLGFlcyh4PW1vZGVsLnNpemUseT1jb21wYXJpc29ucyxncm91cD1tb2RlbCxjb2xvcj1tb2RlbCkpK2dlb21fbGluZSgpK3NjYWxlX3hfY29udGludW91cyh0cmFucz0ibG9nMiIpK2dndGl0bGUoIlJlbW92ZSAxMCIpK3hsYWIoIk1vZGVsIHNpemUiKSt5bGFiKCJDb21wYXJpc29ucyIpCgpnZ3Bsb3QoZDIsYWVzKHg9bW9kZWwuc2l6ZSx5PWNoYW5nZXMsZ3JvdXA9bW9kZWwsY29sb3I9bW9kZWwpKStnZW9tX2xpbmUoKStzY2FsZV94X2NvbnRpbnVvdXModHJhbnM9ImxvZzIiKStnZ3RpdGxlKCJSZW1vdmUgMTAiKSt4bGFiKCJNb2RlbCBzaXplIikreWxhYigiQ2hhbmdlcyIpCgpgYGA=