Clearing environment

rm(list = ls())

Loading necessary package

require(deSolve)

System of DEs

SARSCOV2Model <- function (t, y, params) {
  
S.h<-y[1] #create local variable S, first element of y
E.h<-y[2] 
I.h<-y[3]
S.l<-y[4]
E.l<-y[5]
I.l<-y[6]
Q<-y[7]
R<-y[8]
V<-y[9]

with(
  as.list(params, y),
  {
dS.h<--q*beta*(I.h+I.l)*S.h/(S.h+E.h+I.h+S.l+E.l+I.l+Q+R)-c*(1-exp((-1/K)*V))*S.h
dE.h<-q*beta*(I.h+I.l)*S.h/(S.h+E.h+I.h+S.l+E.l+I.l+Q+R)+c*(1-exp((-1/K)*V))*S.h-lambda*E.h
dI.h<-lambda*E.h-b*g*I.h-aH*h*(1-g)*I.h-gammah*(1-h)*(1-g)*I.h
dS.l<--(1-p)*q*beta*(I.h+I.l)*S.l/(S.h+E.h+I.h+S.l+E.l+I.l+Q+R)-(1-p)*c*(1-exp((-1/K)*V))*S.l
dE.l<-(1-p)*q*beta*(I.h+I.l)/(S.h+E.h+I.h+S.l+E.l+I.l+Q+R)+(1-p)*c*(1-exp((-1/K)*V))*S.l-lambda*E.l
dI.l<-lambda*E.l-b*I.l
dQ<-b*I.l+g*b*I.h-aQ*h*Q-gammaQ*(1-h)*Q
dR<-gammah*(1-h)*(1-g)*I.h+gammaQ*(1-h)*Q
dV<-omega*I.h+(1-p)*omega*I.l-delta*V
  dy<-c(dS.h,dE.h,dI.h,dS.l,dE.l,dI.l,dQ,dR,dV) #combine results into one vector dy
list(dy)
  }
)
}

Initial Values

times<-seq(0,180,by=1) 
covid.params<-c(q=0.2,beta=13,p=.2,c=0,lambda=1/4.43,b=1/0.77,g=0,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1,K=10000)
ystart<-c(S.h=(.2)*100000,E.h=0,I.h=1,S.l=(1-0.2)*100000,E.l=0,I.l=0,Q=0,R=0,V=0)
covid.out <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params))

Changing c to 0, 10, 20, 30, 40, & 50

covid.params.c1 <- c(q=0.5,beta=13,p=0.2,c=0,lambda=1/4.43,b=1/0.77,g=0,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=0.5,K=1000000)
covid.params.c2 <- c(q=0.5,beta=13,p=0.2,c=10,lambda=1/4.43,b=1/0.77,g=0,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1,K=1000000)
covid.params.c3 <- c(q=0.5,beta=13,p=0.2,c=20,lambda=1/4.43,b=1/0.77,g=0,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=1.5,K=1000000)
covid.params.c4 <- c(q=0.5,beta=13,p=0.2,c=30,lambda=1/4.43,b=1/0.77,g=0,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=2,K=1000000)
covid.params.c5 <- c(q=0.5,beta=13,p=0.2,c=40,lambda=1/4.43,b=1/0.77,g=0,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=2,K=1000000)
covid.params.c6 <- c(q=0.5,beta=13,p=0.2,c=50,lambda=1/4.43,b=1/0.77,g=0,gammaQ=0.1,gammah=1/2.7,aQ=1/1.93,aH=1/2.7,h=0.00082,omega=0,delta=2,K=1000000)

Creating data frame for each value of c

covid.out.c1 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.c1))
covid.out.c2 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.c2))
covid.out.c3 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.c3))
covid.out.c4 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.c4))
covid.out.c5 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.c5))
covid.out.c6 <- as.data.frame(lsoda(ystart,times,SARSCOV2Model,covid.params.c6))

Plotting all classes

## SUSCEPTIBLE ##
op1 <- par(fig=c(0,0.5,0,1), mar=c(4,4,1,1))
plot(covid.out.c1$S.h~covid.out.c1$time, type="l", col="blue", xlab="Days", ylab = "Susceptible (High)")
lines(covid.out.c2$S.h~covid.out.c2$time, type="l", col="red")
lines(covid.out.c3$S.h~covid.out.c3$time, type="l", col="purple")
lines(covid.out.c4$S.h~covid.out.c4$time, type="l", col="green")
lines(covid.out.c5$S.h~covid.out.c5$time, type="l", col="orange")
lines(covid.out.c6$S.h~covid.out.c6$time, type="l", col="darkturquoise")
legend(100, 17500,legend = c("c=0","c=10","c=20","c=30","c=40","c=50"), col = c("blue", "red", "purple", "green","orange","darkturquoise"), lty=1, cex=0.8)

par(fig=c(0.5,1,0,1), mar=c(4,4,1,1), new=T)
plot(covid.out.c1$S.l~covid.out.c1$time,type="l", col="blue", xlab="Days", ylab = "Susceptible (Low)")
lines(covid.out.c2$S.l~covid.out.c2$time, type="l", col="red")
lines(covid.out.c3$S.l~covid.out.c3$time, type="l", col="purple")
lines(covid.out.c4$S.l~covid.out.c4$time, type="l", col="green")
lines(covid.out.c5$S.l~covid.out.c5$time, type="l", col="orange")
lines(covid.out.c6$S.l~covid.out.c6$time, type="l", col="darkturquoise")
legend(100, 70000,legend = c("c=0","c=10","c=20","c=30","c=40","c=50"), col = c("blue", "red", "purple", "green","orange","darkturquoise"), lty=1, cex=0.8)
par(op1)

## EXPOSED ##
op3 <- par(fig=c(0,0.5,0,1), mar=c(4,4,1,1))

plot(covid.out.c1$E.h~covid.out.c1$time,type="l", col="blue", xlab="Days", ylab = "Exposed (High)")
lines(covid.out.c2$E.h~covid.out.c2$time, type="l", col="red")
lines(covid.out.c3$E.h~covid.out.c3$time, type="l", col="purple")
lines(covid.out.c4$E.h~covid.out.c4$time, type="l", col="green")
lines(covid.out.c5$E.h~covid.out.c5$time, type="l", col="orange")
lines(covid.out.c6$E.h~covid.out.c6$time, type="l", col="darkturquoise")
legend(100, 6000,legend = c("c=0","c=10","c=20","c=30","c=40","c=50"), col = c("blue", "red", "purple", "green","orange","darkturquoise"), lty=1, cex=0.8)

par(fig=c(0.5,1,0,1), mar=c(4,4,1,1), new=T)
plot(covid.out.c1$E.l~covid.out.c1$time,type="l", col="blue", xlab="Days", ylab = "Exposed (Low)")
lines(covid.out.c2$E.l~covid.out.c2$time, type="l", col="red")
lines(covid.out.c3$E.l~covid.out.c3$time, type="l", col="purple")
lines(covid.out.c4$E.l~covid.out.c4$time, type="l", col="green")
lines(covid.out.c5$E.l~covid.out.c5$time, type="l", col="orange")
lines(covid.out.c6$E.l~covid.out.c6$time, type="l", col="darkturquoise")
legend(100, 2.5,legend = c("c=0","c=10","c=20","c=30","c=40","c=50"), col = c("blue", "red", "purple", "green","orange","darkturquoise"), lty=1, cex=0.8)
par(op3)

## INFECTED ##
op2 <- par(fig=c(0,0.5,0,1), mar=c(4,4,1,1))

plot(covid.out.c1$I.h~covid.out.c1$time,type="l", col="blue", xlab="Days", ylab = "Infected (High)")
lines(covid.out.c2$I.h~covid.out.c2$time, type="l", col="red")
lines(covid.out.c3$I.h~covid.out.c3$time, type="l", col="purple")
lines(covid.out.c4$I.h~covid.out.c4$time, type="l", col="green")
lines(covid.out.c5$I.h~covid.out.c5$time, type="l", col="orange")
lines(covid.out.c6$I.h~covid.out.c6$time, type="l", col="darkturquoise")
legend(100, 17500,legend = c("c=0","c=10","c=20","c=30","c=40","c=50"), col = c("blue", "red", "purple", "green","orange","darkturquoise"), lty=1, cex=0.8)

par(fig=c(0.5,1,0,1), mar=c(4,4,1,1), new=T)
plot(covid.out.c1$I.l~covid.out.c1$time,type="l", col="blue", xlab="Days", ylab = "Infected (Low)")
lines(covid.out.c2$I.l~covid.out.c2$time, type="l", col="red")
lines(covid.out.c3$I.l~covid.out.c3$time, type="l", col="purple")
lines(covid.out.c4$I.l~covid.out.c4$time, type="l", col="green")
lines(covid.out.c5$I.l~covid.out.c5$time, type="l", col="orange")
lines(covid.out.c6$I.l~covid.out.c6$time, type="l", col="darkturquoise")
legend(100, 70000,legend = c("c=0","c=10","c=20","c=30","c=40","c=50"), col = c("blue", "red", "purple", "green","orange","darkturquoise"), lty=1, cex=0.8)
par(op2)

## SELF-ISOLATING ##
op4 <- par(mar=c(6,6,2,2))

plot(covid.out.c1$Q~covid.out.c1$time,type="l", col="blue", xlab="Days", ylab = "Self-Isolating")
lines(covid.out.c2$Q~covid.out.c2$time, type="l", col="red")
lines(covid.out.c3$Q~covid.out.c3$time, type="l", col="purple")
lines(covid.out.c4$Q~covid.out.c4$time, type="l", col="green")
lines(covid.out.c5$Q~covid.out.c5$time, type="l", col="orange")
lines(covid.out.c6$Q~covid.out.c6$time, type="l", col="darkturquoise")
legend(125, 3,legend = c("c=0","c=10","c=20","c=30","c=40","c=50"), col = c("blue", "red", "purple", "green","orange","darkturquoise"), lty=1, cex=0.8)
par(op4)

## RECOVERED ##
op5 <- par(mar=c(6,6,2,2))

plot(covid.out.c1$R~covid.out.c1$time,type="l", col="blue", xlab="Days", ylab = "Recovered")
lines(covid.out.c2$R~covid.out.c2$time, type="l", col="red")
lines(covid.out.c3$R~covid.out.c3$time, type="l", col="purple")
lines(covid.out.c4$R~covid.out.c4$time, type="l", col="green")
lines(covid.out.c5$R~covid.out.c5$time, type="l", col="orange")
lines(covid.out.c6$R~covid.out.c6$time, type="l", col="darkturquoise")
legend(100, 15000,legend = c("c=0","c=10","c=20","c=30","c=40","c=50"), col = c("blue", "red", "purple", "green","orange","darkturquoise"), lty=1, cex=0.8)
par(op5)

## VIRUS IN ENVIRONMENT ##
op6 <- par(mar=c(6,6,2,2))

plot(covid.out.c1$V~covid.out.c1$time,type="l", col="blue", xlab="Days", ylab = "Virus in Environment")
lines(covid.out.c2$V~covid.out.c2$time, type="l", col="red")
lines(covid.out.c3$V~covid.out.c3$time, type="l", col="purple")
lines(covid.out.c4$V~covid.out.c4$time, type="l", col="green")
lines(covid.out.c5$V~covid.out.c5$time, type="l", col="orange")
lines(covid.out.c6$V~covid.out.c6$time, type="l", col="darkturquoise")
legend(100, 70000,legend = c("c=0","c=10","c=20","c=30","c=40","c=50"), col = c("blue", "red", "purple", "green","orange","darkturquoise"), lty=1, cex=0.8)
par(op6)

Results of plots

# first dataframe lists highest values
# second dataframe lists lowest values
# third dataframe lists ending values

results.c1 <- data.frame(
  S.h = c(max(covid.out.c1[ ,2]), max(covid.out.c2[ ,2]), max(covid.out.c3[ ,2]), max(covid.out.c4[ ,2]), max(covid.out.c5[ ,2]), max(covid.out.c6[ ,2])),
  E.h = c(max(covid.out.c1[ ,3]), max(covid.out.c2[ ,3]), max(covid.out.c3[ ,3]), max(covid.out.c4[ ,3]), max(covid.out.c5[ ,3]), max(covid.out.c6[ ,3])),
  I.h = c(max(covid.out.c1[ ,4]), max(covid.out.c2[ ,4]), max(covid.out.c3[ ,4]), max(covid.out.c4[ ,4]), max(covid.out.c5[ ,4]), max(covid.out.c6[ ,4])),
  S.l = c(max(covid.out.c1[ ,5]), max(covid.out.c2[ ,5]), max(covid.out.c3[ ,5]), max(covid.out.c4[ ,5]), max(covid.out.c5[ ,5]), max(covid.out.c6[ ,5])),
  E.l = c(max(covid.out.c1[ ,6]), max(covid.out.c2[ ,6]), max(covid.out.c3[ ,6]), max(covid.out.c4[ ,6]), max(covid.out.c5[ ,6]), max(covid.out.c6[ ,6])),
  I.l = c(max(covid.out.c1[ ,7]), max(covid.out.c2[ ,7]), max(covid.out.c3[ ,7]), max(covid.out.c4[ ,7]), max(covid.out.c5[ ,7]), max(covid.out.c6[ ,7])),
  Q = c(max(covid.out.c1[ ,8]), max(covid.out.c2[ ,8]), max(covid.out.c3[ ,8]), max(covid.out.c4[ ,8]), max(covid.out.c5[ ,8]), max(covid.out.c6[ ,8])),
  R = c(max(covid.out.c1[ ,9]), max(covid.out.c2[ ,9]), max(covid.out.c3[ ,9]), max(covid.out.c4[ ,9]), max(covid.out.c5[ ,9]), max(covid.out.c6[ ,9])),
  V = c(max(covid.out.c1[ ,10]), max(covid.out.c2[ ,10]), max(covid.out.c3[ ,10]), max(covid.out.c4[ ,10]), max(covid.out.c5[ ,10]), max(covid.out.c6[ ,10]))
)

results.c2 <- data.frame(
  S.h = c(min(covid.out.c1[ ,2]), min(covid.out.c2[ ,2]), min(covid.out.c3[ ,2]), min(covid.out.c4[ ,2]), min(covid.out.c5[ ,2]), min(covid.out.c6[ ,2])),
  E.h = c(min(covid.out.c1[ ,3]), min(covid.out.c2[ ,3]), min(covid.out.c3[ ,3]), min(covid.out.c4[ ,3]), min(covid.out.c5[ ,3]), min(covid.out.c6[ ,3])),
  I.h = c(min(covid.out.c1[ ,4]), min(covid.out.c2[ ,4]), min(covid.out.c3[ ,4]), min(covid.out.c4[ ,4]), min(covid.out.c5[ ,4]), min(covid.out.c6[ ,4])),
  S.l = c(min(covid.out.c1[ ,5]), min(covid.out.c2[ ,5]), min(covid.out.c3[ ,5]), min(covid.out.c4[ ,5]), min(covid.out.c5[ ,5]), min(covid.out.c6[ ,5])),
  E.l = c(min(covid.out.c1[ ,6]), min(covid.out.c2[ ,6]), min(covid.out.c3[ ,6]), min(covid.out.c4[ ,6]), min(covid.out.c5[ ,6]), min(covid.out.c6[ ,6])),
  I.l = c(min(covid.out.c1[ ,7]), min(covid.out.c2[ ,7]), min(covid.out.c3[ ,7]), min(covid.out.c4[ ,7]), min(covid.out.c5[ ,7]), min(covid.out.c6[ ,7])),
  Q = c(min(covid.out.c1[ ,8]), min(covid.out.c2[ ,8]), min(covid.out.c3[ ,8]), min(covid.out.c4[ ,8]), min(covid.out.c5[ ,8]), min(covid.out.c6[ ,8])),
  R = c(min(covid.out.c1[ ,9]), min(covid.out.c2[ ,9]), min(covid.out.c3[ ,9]), min(covid.out.c4[ ,9]), min(covid.out.c5[ ,9]), min(covid.out.c6[ ,9])),
  V = c(min(covid.out.c1[ ,10]), min(covid.out.c2[ ,10]), min(covid.out.c3[ ,10]), min(covid.out.c4[ ,10]), min(covid.out.c5[ ,10]), min(covid.out.c6[ ,10]))
)

results.c3 <- data.frame(
  S.h = c(tail(covid.out.c1[ ,2],n=1), tail(covid.out.c2[ ,2],n=1), tail(covid.out.c3[ ,2],n=1), tail(covid.out.c4[ ,2],n=1), tail(covid.out.c5[ ,2],n=1), tail(covid.out.c6[ ,2],n=1)), 
  E.h = c(tail(covid.out.c1[ ,3],n=1), tail(covid.out.c2[ ,3],n=1), tail(covid.out.c3[ ,3],n=1), tail(covid.out.c4[ ,3],n=1), tail(covid.out.c5[ ,3],n=1), tail(covid.out.c6[ ,3],n=1)),
  I.h = c(tail(covid.out.c1[ ,4],n=1), tail(covid.out.c2[ ,4],n=1), tail(covid.out.c3[ ,4],n=1), tail(covid.out.c4[ ,4],n=1), tail(covid.out.c5[ ,4],n=1), tail(covid.out.c6[ ,4],n=1)),
  S.l = c(tail(covid.out.c1[ ,5],n=1), tail(covid.out.c2[ ,5],n=1), tail(covid.out.c3[ ,5],n=1), tail(covid.out.c4[ ,5],n=1), tail(covid.out.c5[ ,5],n=1), tail(covid.out.c6[ ,5],n=1)),
  E.l = c(tail(covid.out.c1[ ,6],n=1), tail(covid.out.c2[ ,6],n=1), tail(covid.out.c3[ ,6],n=1), tail(covid.out.c4[ ,6],n=1), tail(covid.out.c5[ ,6],n=1), tail(covid.out.c6[ ,6],n=1)), 
  I.l = c(tail(covid.out.c1[ ,7],n=1), tail(covid.out.c2[ ,7],n=1), tail(covid.out.c3[ ,7],n=1), tail(covid.out.c4[ ,7],n=1), tail(covid.out.c5[ ,7],n=1), tail(covid.out.c6[ ,7],n=1)),
  Q = c(tail(covid.out.c1[ ,8],n=1), tail(covid.out.c2[ ,8],n=1), tail(covid.out.c3[ ,8],n=1), tail(covid.out.c4[ ,8],n=1), tail(covid.out.c5[ ,8],n=1), tail(covid.out.c6[ ,8],n=1)),
  R = c(tail(covid.out.c1[ ,9],n=1), tail(covid.out.c2[ ,9],n=1), tail(covid.out.c3[ ,9],n=1), tail(covid.out.c4[ ,9],n=1), tail(covid.out.c5[ ,9],n=1), tail(covid.out.c6[ ,9],n=1)),
  V = c(tail(covid.out.c1[ ,10],n=1), tail(covid.out.c2[ ,10],n=1), tail(covid.out.c3[ ,10],n=1), tail(covid.out.c4[ ,10],n=1), tail(covid.out.c5[ ,10],n=1), tail(covid.out.c6[ ,10],n=1))
)

`.rowNamesDF<-`(results.c1,make.names=FALSE,c('c = 0','c = 10','c = 20','c = 30','c = 40','c = 50'))
`.rowNamesDF<-`(results.c2,make.names=FALSE,c('c = 0','c = 10','c = 20','c = 30','c = 40','c = 50'))
`.rowNamesDF<-`(results.c3,make.names=FALSE,c('c = 0','c = 10','c = 20','c = 30','c = 40','c = 50'))

Plotting highest, lowest, and ending values of classes

## HIGHEST ##
op7 <- par(mar=c(6,6,2,2))
plot(results.c1$S.h,type="b", col="blue", xlab="q values", ylab = "Individuals", main="Highest", ylim=c(0,80000))
lines(results.c1$E.h, type = "b", col="red")
lines(results.c1$I.h, type = "b", col="green")
lines(results.c1$S.l, type = "b", col="purple")
lines(results.c1$E.l, type = "b", col="orange")
lines(results.c1$I.l, type = "b", col="forestgreen")
lines(results.c1$Q, type = "b", col="darkturquoise")
lines(results.c1$R, type = "b", col="pink2")
lines(results.c1$V, type = "b", col="yellow")

legend(3, 70000,legend = c("Susceptibles (High)","Exposed (High)","Infected (High)","Susceptibles (Low)","Exposed (Low)","Infected (Low)", "Self-Isolating","Recovered","Virus"), col = c("blue", "red", "green","purple","orange","forestgreen","darkturquoise","pink2","yellow"), lty=1, cex=0.6)

par(op7)

## LOWEST
op8 <- par(mar=c(6,6,2,2))

plot(results.c2$S.h,type="b", col="blue", main="Lowest", xlab="q values", ylab = "Individuals", ylim=c(0,80000))
lines(results.c2$E.h, type = "b", col="red")
lines(results.c2$I.h, type = "b", col="green")
lines(results.c2$S.l, type = "b", col="purple")
lines(results.c2$E.l, type = "b", col="orange")
lines(results.c2$I.l, type = "b", col="forestgreen")
lines(results.c2$Q, type = "b", col="darkturquoise")
lines(results.c2$R, type = "b", col="pink2")
lines(results.c2$V, type = "b", col="yellow")

legend(3, 70000,legend = c("Susceptibles (High)","Exposed (High)","Infected (High)","Susceptibles (Low)","Exposed (Low)","Infected (Low)", "Self-Isolating","Recovered","Virus"), col = c("blue", "red", "green","purple","orange","forestgreen","darkturquoise","pink2","yellow"), lty=1, cex=0.6)

par(op8)

## ENDING ##
op9 <- par(mar=c(6,6,2,2))

plot(results.c3$S.h, type="b", col="blue", main="Ending", xlab="q values", ylab = "Individuals", ylim=c(0,80000))
lines(results.c3$E.h, type = "b", col="red")
lines(results.c3$I.h, type = "b", col="green")
lines(results.c3$S.l, type = "b", col="purple")
lines(results.c3$E.l, type = "b", col="orange")
lines(results.c3$I.l, type = "b", col="forestgreen")
lines(results.c3$Q, type = "b", col="darkturquoise")
lines(results.c3$R, type = "b", col="pink2")
lines(results.c3$V, type = "b", col="yellow")

legend(3, 70000,legend = c("Susceptibles (High)","Exposed (High)","Infected (High)","Susceptibles (Low)","Exposed (Low)","Infected (Low)", "Self-Isolating","Recovered","Virus"), col = c("blue", "red", "green","purple","orange","forestgreen","darkturquoise","pink2","yellow"), lty=1, cex=0.6)

par(op9)

LS0tDQp0aXRsZTogIlNBUlMtQ29WLTIgTW9kZWwgKGMpIg0KYXV0aG9yOiBTaGVyaWRhbiBQYXluZQ0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCkNsZWFyaW5nIGVudmlyb25tZW50DQpgYGB7cn0NCnJtKGxpc3QgPSBscygpKQ0KYGBgDQoNCkxvYWRpbmcgbmVjZXNzYXJ5IHBhY2thZ2UNCmBgYHtyfQ0KcmVxdWlyZShkZVNvbHZlKQ0KYGBgDQoNClN5c3RlbSBvZiBERXMNCmBgYHtyfQ0KU0FSU0NPVjJNb2RlbCA8LSBmdW5jdGlvbiAodCwgeSwgcGFyYW1zKSB7DQogIA0KUy5oPC15WzFdICNjcmVhdGUgbG9jYWwgdmFyaWFibGUgUywgZmlyc3QgZWxlbWVudCBvZiB5DQpFLmg8LXlbMl0gDQpJLmg8LXlbM10NClMubDwteVs0XQ0KRS5sPC15WzVdDQpJLmw8LXlbNl0NClE8LXlbN10NClI8LXlbOF0NClY8LXlbOV0NCg0Kd2l0aCgNCiAgYXMubGlzdChwYXJhbXMsIHkpLA0KICB7DQpkUy5oPC0tcSpiZXRhKihJLmgrSS5sKSpTLmgvKFMuaCtFLmgrSS5oK1MubCtFLmwrSS5sK1ErUiktYyooMS1leHAoKC0xL0spKlYpKSpTLmgNCmRFLmg8LXEqYmV0YSooSS5oK0kubCkqUy5oLyhTLmgrRS5oK0kuaCtTLmwrRS5sK0kubCtRK1IpK2MqKDEtZXhwKCgtMS9LKSpWKSkqUy5oLWxhbWJkYSpFLmgNCmRJLmg8LWxhbWJkYSpFLmgtYipnKkkuaC1hSCpoKigxLWcpKkkuaC1nYW1tYWgqKDEtaCkqKDEtZykqSS5oDQpkUy5sPC0tKDEtcCkqcSpiZXRhKihJLmgrSS5sKSpTLmwvKFMuaCtFLmgrSS5oK1MubCtFLmwrSS5sK1ErUiktKDEtcCkqYyooMS1leHAoKC0xL0spKlYpKSpTLmwNCmRFLmw8LSgxLXApKnEqYmV0YSooSS5oK0kubCkvKFMuaCtFLmgrSS5oK1MubCtFLmwrSS5sK1ErUikrKDEtcCkqYyooMS1leHAoKC0xL0spKlYpKSpTLmwtbGFtYmRhKkUubA0KZEkubDwtbGFtYmRhKkUubC1iKkkubA0KZFE8LWIqSS5sK2cqYipJLmgtYVEqaCpRLWdhbW1hUSooMS1oKSpRDQpkUjwtZ2FtbWFoKigxLWgpKigxLWcpKkkuaCtnYW1tYVEqKDEtaCkqUQ0KZFY8LW9tZWdhKkkuaCsoMS1wKSpvbWVnYSpJLmwtZGVsdGEqVg0KICBkeTwtYyhkUy5oLGRFLmgsZEkuaCxkUy5sLGRFLmwsZEkubCxkUSxkUixkVikgI2NvbWJpbmUgcmVzdWx0cyBpbnRvIG9uZSB2ZWN0b3IgZHkNCmxpc3QoZHkpDQogIH0NCikNCn0NCmBgYA0KDQpJbml0aWFsIFZhbHVlcw0KYGBge3J9DQp0aW1lczwtc2VxKDAsMTgwLGJ5PTEpIA0KY292aWQucGFyYW1zPC1jKHE9MC4yLGJldGE9MTMscD0uMixjPTAsbGFtYmRhPTEvNC40MyxiPTEvMC43NyxnPTAsZ2FtbWFRPTAuMSxnYW1tYWg9MS8yLjcsYVE9MS8xLjkzLGFIPTEvMi43LGg9MC4wMDA4MixvbWVnYT0wLGRlbHRhPTEsSz0xMDAwMCkNCnlzdGFydDwtYyhTLmg9KC4yKSoxMDAwMDAsRS5oPTAsSS5oPTEsUy5sPSgxLTAuMikqMTAwMDAwLEUubD0wLEkubD0wLFE9MCxSPTAsVj0wKQ0KY292aWQub3V0IDwtIGFzLmRhdGEuZnJhbWUobHNvZGEoeXN0YXJ0LHRpbWVzLFNBUlNDT1YyTW9kZWwsY292aWQucGFyYW1zKSkNCmBgYA0KDQpDaGFuZ2luZyBjIHRvIDAsIDEwLCAyMCwgMzAsIDQwLCAmIDUwDQpgYGB7cn0NCmNvdmlkLnBhcmFtcy5jMSA8LSBjKHE9MC41LGJldGE9MTMscD0wLjIsYz0wLGxhbWJkYT0xLzQuNDMsYj0xLzAuNzcsZz0wLGdhbW1hUT0wLjEsZ2FtbWFoPTEvMi43LGFRPTEvMS45MyxhSD0xLzIuNyxoPTAuMDAwODIsb21lZ2E9MCxkZWx0YT0wLjUsSz0xMDAwMDAwKQ0KY292aWQucGFyYW1zLmMyIDwtIGMocT0wLjUsYmV0YT0xMyxwPTAuMixjPTEwLGxhbWJkYT0xLzQuNDMsYj0xLzAuNzcsZz0wLGdhbW1hUT0wLjEsZ2FtbWFoPTEvMi43LGFRPTEvMS45MyxhSD0xLzIuNyxoPTAuMDAwODIsb21lZ2E9MCxkZWx0YT0xLEs9MTAwMDAwMCkNCmNvdmlkLnBhcmFtcy5jMyA8LSBjKHE9MC41LGJldGE9MTMscD0wLjIsYz0yMCxsYW1iZGE9MS80LjQzLGI9MS8wLjc3LGc9MCxnYW1tYVE9MC4xLGdhbW1haD0xLzIuNyxhUT0xLzEuOTMsYUg9MS8yLjcsaD0wLjAwMDgyLG9tZWdhPTAsZGVsdGE9MS41LEs9MTAwMDAwMCkNCmNvdmlkLnBhcmFtcy5jNCA8LSBjKHE9MC41LGJldGE9MTMscD0wLjIsYz0zMCxsYW1iZGE9MS80LjQzLGI9MS8wLjc3LGc9MCxnYW1tYVE9MC4xLGdhbW1haD0xLzIuNyxhUT0xLzEuOTMsYUg9MS8yLjcsaD0wLjAwMDgyLG9tZWdhPTAsZGVsdGE9MixLPTEwMDAwMDApDQpjb3ZpZC5wYXJhbXMuYzUgPC0gYyhxPTAuNSxiZXRhPTEzLHA9MC4yLGM9NDAsbGFtYmRhPTEvNC40MyxiPTEvMC43NyxnPTAsZ2FtbWFRPTAuMSxnYW1tYWg9MS8yLjcsYVE9MS8xLjkzLGFIPTEvMi43LGg9MC4wMDA4MixvbWVnYT0wLGRlbHRhPTIsSz0xMDAwMDAwKQ0KY292aWQucGFyYW1zLmM2IDwtIGMocT0wLjUsYmV0YT0xMyxwPTAuMixjPTUwLGxhbWJkYT0xLzQuNDMsYj0xLzAuNzcsZz0wLGdhbW1hUT0wLjEsZ2FtbWFoPTEvMi43LGFRPTEvMS45MyxhSD0xLzIuNyxoPTAuMDAwODIsb21lZ2E9MCxkZWx0YT0yLEs9MTAwMDAwMCkNCmBgYA0KDQpDcmVhdGluZyBkYXRhIGZyYW1lIGZvciBlYWNoIHZhbHVlIG9mIGMNCmBgYHtyfQ0KY292aWQub3V0LmMxIDwtIGFzLmRhdGEuZnJhbWUobHNvZGEoeXN0YXJ0LHRpbWVzLFNBUlNDT1YyTW9kZWwsY292aWQucGFyYW1zLmMxKSkNCmNvdmlkLm91dC5jMiA8LSBhcy5kYXRhLmZyYW1lKGxzb2RhKHlzdGFydCx0aW1lcyxTQVJTQ09WMk1vZGVsLGNvdmlkLnBhcmFtcy5jMikpDQpjb3ZpZC5vdXQuYzMgPC0gYXMuZGF0YS5mcmFtZShsc29kYSh5c3RhcnQsdGltZXMsU0FSU0NPVjJNb2RlbCxjb3ZpZC5wYXJhbXMuYzMpKQ0KY292aWQub3V0LmM0IDwtIGFzLmRhdGEuZnJhbWUobHNvZGEoeXN0YXJ0LHRpbWVzLFNBUlNDT1YyTW9kZWwsY292aWQucGFyYW1zLmM0KSkNCmNvdmlkLm91dC5jNSA8LSBhcy5kYXRhLmZyYW1lKGxzb2RhKHlzdGFydCx0aW1lcyxTQVJTQ09WMk1vZGVsLGNvdmlkLnBhcmFtcy5jNSkpDQpjb3ZpZC5vdXQuYzYgPC0gYXMuZGF0YS5mcmFtZShsc29kYSh5c3RhcnQsdGltZXMsU0FSU0NPVjJNb2RlbCxjb3ZpZC5wYXJhbXMuYzYpKQ0KYGBgDQoNClBsb3R0aW5nIGFsbCBjbGFzc2VzDQpgYGB7cn0NCiMjIFNVU0NFUFRJQkxFICMjDQpvcDEgPC0gcGFyKGZpZz1jKDAsMC41LDAsMSksIG1hcj1jKDQsNCwxLDEpKQ0KcGxvdChjb3ZpZC5vdXQuYzEkUy5ofmNvdmlkLm91dC5jMSR0aW1lLCB0eXBlPSJsIiwgY29sPSJibHVlIiwgeGxhYj0iRGF5cyIsIHlsYWIgPSAiU3VzY2VwdGlibGUgKEhpZ2gpIikNCmxpbmVzKGNvdmlkLm91dC5jMiRTLmh+Y292aWQub3V0LmMyJHRpbWUsIHR5cGU9ImwiLCBjb2w9InJlZCIpDQpsaW5lcyhjb3ZpZC5vdXQuYzMkUy5ofmNvdmlkLm91dC5jMyR0aW1lLCB0eXBlPSJsIiwgY29sPSJwdXJwbGUiKQ0KbGluZXMoY292aWQub3V0LmM0JFMuaH5jb3ZpZC5vdXQuYzQkdGltZSwgdHlwZT0ibCIsIGNvbD0iZ3JlZW4iKQ0KbGluZXMoY292aWQub3V0LmM1JFMuaH5jb3ZpZC5vdXQuYzUkdGltZSwgdHlwZT0ibCIsIGNvbD0ib3JhbmdlIikNCmxpbmVzKGNvdmlkLm91dC5jNiRTLmh+Y292aWQub3V0LmM2JHRpbWUsIHR5cGU9ImwiLCBjb2w9ImRhcmt0dXJxdW9pc2UiKQ0KbGVnZW5kKDEwMCwgMTc1MDAsbGVnZW5kID0gYygiYz0wIiwiYz0xMCIsImM9MjAiLCJjPTMwIiwiYz00MCIsImM9NTAiKSwgY29sID0gYygiYmx1ZSIsICJyZWQiLCAicHVycGxlIiwgImdyZWVuIiwib3JhbmdlIiwiZGFya3R1cnF1b2lzZSIpLCBsdHk9MSwgY2V4PTAuOCkNCg0KcGFyKGZpZz1jKDAuNSwxLDAsMSksIG1hcj1jKDQsNCwxLDEpLCBuZXc9VCkNCnBsb3QoY292aWQub3V0LmMxJFMubH5jb3ZpZC5vdXQuYzEkdGltZSx0eXBlPSJsIiwgY29sPSJibHVlIiwgeGxhYj0iRGF5cyIsIHlsYWIgPSAiU3VzY2VwdGlibGUgKExvdykiKQ0KbGluZXMoY292aWQub3V0LmMyJFMubH5jb3ZpZC5vdXQuYzIkdGltZSwgdHlwZT0ibCIsIGNvbD0icmVkIikNCmxpbmVzKGNvdmlkLm91dC5jMyRTLmx+Y292aWQub3V0LmMzJHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzQkUy5sfmNvdmlkLm91dC5jNCR0aW1lLCB0eXBlPSJsIiwgY29sPSJncmVlbiIpDQpsaW5lcyhjb3ZpZC5vdXQuYzUkUy5sfmNvdmlkLm91dC5jNSR0aW1lLCB0eXBlPSJsIiwgY29sPSJvcmFuZ2UiKQ0KbGluZXMoY292aWQub3V0LmM2JFMubH5jb3ZpZC5vdXQuYzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsZWdlbmQoMTAwLCA3MDAwMCxsZWdlbmQgPSBjKCJjPTAiLCJjPTEwIiwiYz0yMCIsImM9MzAiLCJjPTQwIiwiYz01MCIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJwdXJwbGUiLCAiZ3JlZW4iLCJvcmFuZ2UiLCJkYXJrdHVycXVvaXNlIiksIGx0eT0xLCBjZXg9MC44KQ0KcGFyKG9wMSkNCg0KIyMgRVhQT1NFRCAjIw0Kb3AzIDwtIHBhcihmaWc9YygwLDAuNSwwLDEpLCBtYXI9Yyg0LDQsMSwxKSkNCnBsb3QoY292aWQub3V0LmMxJEUuaH5jb3ZpZC5vdXQuYzEkdGltZSx0eXBlPSJsIiwgY29sPSJibHVlIiwgeGxhYj0iRGF5cyIsIHlsYWIgPSAiRXhwb3NlZCAoSGlnaCkiKQ0KbGluZXMoY292aWQub3V0LmMyJEUuaH5jb3ZpZC5vdXQuYzIkdGltZSwgdHlwZT0ibCIsIGNvbD0icmVkIikNCmxpbmVzKGNvdmlkLm91dC5jMyRFLmh+Y292aWQub3V0LmMzJHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzQkRS5ofmNvdmlkLm91dC5jNCR0aW1lLCB0eXBlPSJsIiwgY29sPSJncmVlbiIpDQpsaW5lcyhjb3ZpZC5vdXQuYzUkRS5ofmNvdmlkLm91dC5jNSR0aW1lLCB0eXBlPSJsIiwgY29sPSJvcmFuZ2UiKQ0KbGluZXMoY292aWQub3V0LmM2JEUuaH5jb3ZpZC5vdXQuYzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsZWdlbmQoMTAwLCA2MDAwLGxlZ2VuZCA9IGMoImM9MCIsImM9MTAiLCJjPTIwIiwiYz0zMCIsImM9NDAiLCJjPTUwIiksIGNvbCA9IGMoImJsdWUiLCAicmVkIiwgInB1cnBsZSIsICJncmVlbiIsIm9yYW5nZSIsImRhcmt0dXJxdW9pc2UiKSwgbHR5PTEsIGNleD0wLjgpDQoNCnBhcihmaWc9YygwLjUsMSwwLDEpLCBtYXI9Yyg0LDQsMSwxKSwgbmV3PVQpDQpwbG90KGNvdmlkLm91dC5jMSRFLmx+Y292aWQub3V0LmMxJHRpbWUsdHlwZT0ibCIsIGNvbD0iYmx1ZSIsIHhsYWI9IkRheXMiLCB5bGFiID0gIkV4cG9zZWQgKExvdykiKQ0KbGluZXMoY292aWQub3V0LmMyJEUubH5jb3ZpZC5vdXQuYzIkdGltZSwgdHlwZT0ibCIsIGNvbD0icmVkIikNCmxpbmVzKGNvdmlkLm91dC5jMyRFLmx+Y292aWQub3V0LmMzJHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzQkRS5sfmNvdmlkLm91dC5jNCR0aW1lLCB0eXBlPSJsIiwgY29sPSJncmVlbiIpDQpsaW5lcyhjb3ZpZC5vdXQuYzUkRS5sfmNvdmlkLm91dC5jNSR0aW1lLCB0eXBlPSJsIiwgY29sPSJvcmFuZ2UiKQ0KbGluZXMoY292aWQub3V0LmM2JEUubH5jb3ZpZC5vdXQuYzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsZWdlbmQoMTAwLCAyLjUsbGVnZW5kID0gYygiYz0wIiwiYz0xMCIsImM9MjAiLCJjPTMwIiwiYz00MCIsImM9NTAiKSwgY29sID0gYygiYmx1ZSIsICJyZWQiLCAicHVycGxlIiwgImdyZWVuIiwib3JhbmdlIiwiZGFya3R1cnF1b2lzZSIpLCBsdHk9MSwgY2V4PTAuOCkNCnBhcihvcDMpDQoNCiMjIElORkVDVEVEICMjDQpvcDIgPC0gcGFyKGZpZz1jKDAsMC41LDAsMSksIG1hcj1jKDQsNCwxLDEpKQ0KcGxvdChjb3ZpZC5vdXQuYzEkSS5ofmNvdmlkLm91dC5jMSR0aW1lLHR5cGU9ImwiLCBjb2w9ImJsdWUiLCB4bGFiPSJEYXlzIiwgeWxhYiA9ICJJbmZlY3RlZCAoSGlnaCkiKQ0KbGluZXMoY292aWQub3V0LmMyJEkuaH5jb3ZpZC5vdXQuYzIkdGltZSwgdHlwZT0ibCIsIGNvbD0icmVkIikNCmxpbmVzKGNvdmlkLm91dC5jMyRJLmh+Y292aWQub3V0LmMzJHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzQkSS5ofmNvdmlkLm91dC5jNCR0aW1lLCB0eXBlPSJsIiwgY29sPSJncmVlbiIpDQpsaW5lcyhjb3ZpZC5vdXQuYzUkSS5ofmNvdmlkLm91dC5jNSR0aW1lLCB0eXBlPSJsIiwgY29sPSJvcmFuZ2UiKQ0KbGluZXMoY292aWQub3V0LmM2JEkuaH5jb3ZpZC5vdXQuYzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsZWdlbmQoMTAwLCAxNzUwMCxsZWdlbmQgPSBjKCJjPTAiLCJjPTEwIiwiYz0yMCIsImM9MzAiLCJjPTQwIiwiYz01MCIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJwdXJwbGUiLCAiZ3JlZW4iLCJvcmFuZ2UiLCJkYXJrdHVycXVvaXNlIiksIGx0eT0xLCBjZXg9MC44KQ0KDQpwYXIoZmlnPWMoMC41LDEsMCwxKSwgbWFyPWMoNCw0LDEsMSksIG5ldz1UKQ0KcGxvdChjb3ZpZC5vdXQuYzEkSS5sfmNvdmlkLm91dC5jMSR0aW1lLHR5cGU9ImwiLCBjb2w9ImJsdWUiLCB4bGFiPSJEYXlzIiwgeWxhYiA9ICJJbmZlY3RlZCAoTG93KSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzIkSS5sfmNvdmlkLm91dC5jMiR0aW1lLCB0eXBlPSJsIiwgY29sPSJyZWQiKQ0KbGluZXMoY292aWQub3V0LmMzJEkubH5jb3ZpZC5vdXQuYzMkdGltZSwgdHlwZT0ibCIsIGNvbD0icHVycGxlIikNCmxpbmVzKGNvdmlkLm91dC5jNCRJLmx+Y292aWQub3V0LmM0JHRpbWUsIHR5cGU9ImwiLCBjb2w9ImdyZWVuIikNCmxpbmVzKGNvdmlkLm91dC5jNSRJLmx+Y292aWQub3V0LmM1JHRpbWUsIHR5cGU9ImwiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzYkSS5sfmNvdmlkLm91dC5jNiR0aW1lLCB0eXBlPSJsIiwgY29sPSJkYXJrdHVycXVvaXNlIikNCmxlZ2VuZCgxMDAsIDcwMDAwLGxlZ2VuZCA9IGMoImM9MCIsImM9MTAiLCJjPTIwIiwiYz0zMCIsImM9NDAiLCJjPTUwIiksIGNvbCA9IGMoImJsdWUiLCAicmVkIiwgInB1cnBsZSIsICJncmVlbiIsIm9yYW5nZSIsImRhcmt0dXJxdW9pc2UiKSwgbHR5PTEsIGNleD0wLjgpDQpwYXIob3AyKQ0KDQojIyBTRUxGLUlTT0xBVElORyAjIw0Kb3A0IDwtIHBhcihtYXI9Yyg2LDYsMiwyKSkNCnBsb3QoY292aWQub3V0LmMxJFF+Y292aWQub3V0LmMxJHRpbWUsdHlwZT0ibCIsIGNvbD0iYmx1ZSIsIHhsYWI9IkRheXMiLCB5bGFiID0gIlNlbGYtSXNvbGF0aW5nIikNCmxpbmVzKGNvdmlkLm91dC5jMiRRfmNvdmlkLm91dC5jMiR0aW1lLCB0eXBlPSJsIiwgY29sPSJyZWQiKQ0KbGluZXMoY292aWQub3V0LmMzJFF+Y292aWQub3V0LmMzJHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzQkUX5jb3ZpZC5vdXQuYzQkdGltZSwgdHlwZT0ibCIsIGNvbD0iZ3JlZW4iKQ0KbGluZXMoY292aWQub3V0LmM1JFF+Y292aWQub3V0LmM1JHRpbWUsIHR5cGU9ImwiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzYkUX5jb3ZpZC5vdXQuYzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsZWdlbmQoMTI1LCAzLGxlZ2VuZCA9IGMoImM9MCIsImM9MTAiLCJjPTIwIiwiYz0zMCIsImM9NDAiLCJjPTUwIiksIGNvbCA9IGMoImJsdWUiLCAicmVkIiwgInB1cnBsZSIsICJncmVlbiIsIm9yYW5nZSIsImRhcmt0dXJxdW9pc2UiKSwgbHR5PTEsIGNleD0wLjgpDQpwYXIob3A0KQ0KDQojIyBSRUNPVkVSRUQgIyMNCm9wNSA8LSBwYXIobWFyPWMoNiw2LDIsMikpDQpwbG90KGNvdmlkLm91dC5jMSRSfmNvdmlkLm91dC5jMSR0aW1lLHR5cGU9ImwiLCBjb2w9ImJsdWUiLCB4bGFiPSJEYXlzIiwgeWxhYiA9ICJSZWNvdmVyZWQiKQ0KbGluZXMoY292aWQub3V0LmMyJFJ+Y292aWQub3V0LmMyJHRpbWUsIHR5cGU9ImwiLCBjb2w9InJlZCIpDQpsaW5lcyhjb3ZpZC5vdXQuYzMkUn5jb3ZpZC5vdXQuYzMkdGltZSwgdHlwZT0ibCIsIGNvbD0icHVycGxlIikNCmxpbmVzKGNvdmlkLm91dC5jNCRSfmNvdmlkLm91dC5jNCR0aW1lLCB0eXBlPSJsIiwgY29sPSJncmVlbiIpDQpsaW5lcyhjb3ZpZC5vdXQuYzUkUn5jb3ZpZC5vdXQuYzUkdGltZSwgdHlwZT0ibCIsIGNvbD0ib3JhbmdlIikNCmxpbmVzKGNvdmlkLm91dC5jNiRSfmNvdmlkLm91dC5jNiR0aW1lLCB0eXBlPSJsIiwgY29sPSJkYXJrdHVycXVvaXNlIikNCmxlZ2VuZCgxMDAsIDE1MDAwLGxlZ2VuZCA9IGMoImM9MCIsImM9MTAiLCJjPTIwIiwiYz0zMCIsImM9NDAiLCJjPTUwIiksIGNvbCA9IGMoImJsdWUiLCAicmVkIiwgInB1cnBsZSIsICJncmVlbiIsIm9yYW5nZSIsImRhcmt0dXJxdW9pc2UiKSwgbHR5PTEsIGNleD0wLjgpDQpwYXIob3A1KQ0KDQojIyBWSVJVUyBJTiBFTlZJUk9OTUVOVCAjIw0Kb3A2IDwtIHBhcihtYXI9Yyg2LDYsMiwyKSkNCnBsb3QoY292aWQub3V0LmMxJFZ+Y292aWQub3V0LmMxJHRpbWUsdHlwZT0ibCIsIGNvbD0iYmx1ZSIsIHhsYWI9IkRheXMiLCB5bGFiID0gIlZpcnVzIGluIEVudmlyb25tZW50IikNCmxpbmVzKGNvdmlkLm91dC5jMiRWfmNvdmlkLm91dC5jMiR0aW1lLCB0eXBlPSJsIiwgY29sPSJyZWQiKQ0KbGluZXMoY292aWQub3V0LmMzJFZ+Y292aWQub3V0LmMzJHRpbWUsIHR5cGU9ImwiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzQkVn5jb3ZpZC5vdXQuYzQkdGltZSwgdHlwZT0ibCIsIGNvbD0iZ3JlZW4iKQ0KbGluZXMoY292aWQub3V0LmM1JFZ+Y292aWQub3V0LmM1JHRpbWUsIHR5cGU9ImwiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhjb3ZpZC5vdXQuYzYkVn5jb3ZpZC5vdXQuYzYkdGltZSwgdHlwZT0ibCIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsZWdlbmQoMTAwLCA3MDAwMCxsZWdlbmQgPSBjKCJjPTAiLCJjPTEwIiwiYz0yMCIsImM9MzAiLCJjPTQwIiwiYz01MCIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJwdXJwbGUiLCAiZ3JlZW4iLCJvcmFuZ2UiLCJkYXJrdHVycXVvaXNlIiksIGx0eT0xLCBjZXg9MC44KQ0KcGFyKG9wNikNCmBgYA0KDQpSZXN1bHRzIG9mIHBsb3RzDQpgYGB7cn0NCiMgZmlyc3QgZGF0YWZyYW1lIGxpc3RzIGhpZ2hlc3QgdmFsdWVzDQojIHNlY29uZCBkYXRhZnJhbWUgbGlzdHMgbG93ZXN0IHZhbHVlcw0KIyB0aGlyZCBkYXRhZnJhbWUgbGlzdHMgZW5kaW5nIHZhbHVlcw0KDQpyZXN1bHRzLmMxIDwtIGRhdGEuZnJhbWUoDQogIFMuaCA9IGMobWF4KGNvdmlkLm91dC5jMVsgLDJdKSwgbWF4KGNvdmlkLm91dC5jMlsgLDJdKSwgbWF4KGNvdmlkLm91dC5jM1sgLDJdKSwgbWF4KGNvdmlkLm91dC5jNFsgLDJdKSwgbWF4KGNvdmlkLm91dC5jNVsgLDJdKSwgbWF4KGNvdmlkLm91dC5jNlsgLDJdKSksDQogIEUuaCA9IGMobWF4KGNvdmlkLm91dC5jMVsgLDNdKSwgbWF4KGNvdmlkLm91dC5jMlsgLDNdKSwgbWF4KGNvdmlkLm91dC5jM1sgLDNdKSwgbWF4KGNvdmlkLm91dC5jNFsgLDNdKSwgbWF4KGNvdmlkLm91dC5jNVsgLDNdKSwgbWF4KGNvdmlkLm91dC5jNlsgLDNdKSksDQogIEkuaCA9IGMobWF4KGNvdmlkLm91dC5jMVsgLDRdKSwgbWF4KGNvdmlkLm91dC5jMlsgLDRdKSwgbWF4KGNvdmlkLm91dC5jM1sgLDRdKSwgbWF4KGNvdmlkLm91dC5jNFsgLDRdKSwgbWF4KGNvdmlkLm91dC5jNVsgLDRdKSwgbWF4KGNvdmlkLm91dC5jNlsgLDRdKSksDQogIFMubCA9IGMobWF4KGNvdmlkLm91dC5jMVsgLDVdKSwgbWF4KGNvdmlkLm91dC5jMlsgLDVdKSwgbWF4KGNvdmlkLm91dC5jM1sgLDVdKSwgbWF4KGNvdmlkLm91dC5jNFsgLDVdKSwgbWF4KGNvdmlkLm91dC5jNVsgLDVdKSwgbWF4KGNvdmlkLm91dC5jNlsgLDVdKSksDQogIEUubCA9IGMobWF4KGNvdmlkLm91dC5jMVsgLDZdKSwgbWF4KGNvdmlkLm91dC5jMlsgLDZdKSwgbWF4KGNvdmlkLm91dC5jM1sgLDZdKSwgbWF4KGNvdmlkLm91dC5jNFsgLDZdKSwgbWF4KGNvdmlkLm91dC5jNVsgLDZdKSwgbWF4KGNvdmlkLm91dC5jNlsgLDZdKSksDQogIEkubCA9IGMobWF4KGNvdmlkLm91dC5jMVsgLDddKSwgbWF4KGNvdmlkLm91dC5jMlsgLDddKSwgbWF4KGNvdmlkLm91dC5jM1sgLDddKSwgbWF4KGNvdmlkLm91dC5jNFsgLDddKSwgbWF4KGNvdmlkLm91dC5jNVsgLDddKSwgbWF4KGNvdmlkLm91dC5jNlsgLDddKSksDQogIFEgPSBjKG1heChjb3ZpZC5vdXQuYzFbICw4XSksIG1heChjb3ZpZC5vdXQuYzJbICw4XSksIG1heChjb3ZpZC5vdXQuYzNbICw4XSksIG1heChjb3ZpZC5vdXQuYzRbICw4XSksIG1heChjb3ZpZC5vdXQuYzVbICw4XSksIG1heChjb3ZpZC5vdXQuYzZbICw4XSkpLA0KICBSID0gYyhtYXgoY292aWQub3V0LmMxWyAsOV0pLCBtYXgoY292aWQub3V0LmMyWyAsOV0pLCBtYXgoY292aWQub3V0LmMzWyAsOV0pLCBtYXgoY292aWQub3V0LmM0WyAsOV0pLCBtYXgoY292aWQub3V0LmM1WyAsOV0pLCBtYXgoY292aWQub3V0LmM2WyAsOV0pKSwNCiAgViA9IGMobWF4KGNvdmlkLm91dC5jMVsgLDEwXSksIG1heChjb3ZpZC5vdXQuYzJbICwxMF0pLCBtYXgoY292aWQub3V0LmMzWyAsMTBdKSwgbWF4KGNvdmlkLm91dC5jNFsgLDEwXSksIG1heChjb3ZpZC5vdXQuYzVbICwxMF0pLCBtYXgoY292aWQub3V0LmM2WyAsMTBdKSkNCikNCg0KcmVzdWx0cy5jMiA8LSBkYXRhLmZyYW1lKA0KICBTLmggPSBjKG1pbihjb3ZpZC5vdXQuYzFbICwyXSksIG1pbihjb3ZpZC5vdXQuYzJbICwyXSksIG1pbihjb3ZpZC5vdXQuYzNbICwyXSksIG1pbihjb3ZpZC5vdXQuYzRbICwyXSksIG1pbihjb3ZpZC5vdXQuYzVbICwyXSksIG1pbihjb3ZpZC5vdXQuYzZbICwyXSkpLA0KICBFLmggPSBjKG1pbihjb3ZpZC5vdXQuYzFbICwzXSksIG1pbihjb3ZpZC5vdXQuYzJbICwzXSksIG1pbihjb3ZpZC5vdXQuYzNbICwzXSksIG1pbihjb3ZpZC5vdXQuYzRbICwzXSksIG1pbihjb3ZpZC5vdXQuYzVbICwzXSksIG1pbihjb3ZpZC5vdXQuYzZbICwzXSkpLA0KICBJLmggPSBjKG1pbihjb3ZpZC5vdXQuYzFbICw0XSksIG1pbihjb3ZpZC5vdXQuYzJbICw0XSksIG1pbihjb3ZpZC5vdXQuYzNbICw0XSksIG1pbihjb3ZpZC5vdXQuYzRbICw0XSksIG1pbihjb3ZpZC5vdXQuYzVbICw0XSksIG1pbihjb3ZpZC5vdXQuYzZbICw0XSkpLA0KICBTLmwgPSBjKG1pbihjb3ZpZC5vdXQuYzFbICw1XSksIG1pbihjb3ZpZC5vdXQuYzJbICw1XSksIG1pbihjb3ZpZC5vdXQuYzNbICw1XSksIG1pbihjb3ZpZC5vdXQuYzRbICw1XSksIG1pbihjb3ZpZC5vdXQuYzVbICw1XSksIG1pbihjb3ZpZC5vdXQuYzZbICw1XSkpLA0KICBFLmwgPSBjKG1pbihjb3ZpZC5vdXQuYzFbICw2XSksIG1pbihjb3ZpZC5vdXQuYzJbICw2XSksIG1pbihjb3ZpZC5vdXQuYzNbICw2XSksIG1pbihjb3ZpZC5vdXQuYzRbICw2XSksIG1pbihjb3ZpZC5vdXQuYzVbICw2XSksIG1pbihjb3ZpZC5vdXQuYzZbICw2XSkpLA0KICBJLmwgPSBjKG1pbihjb3ZpZC5vdXQuYzFbICw3XSksIG1pbihjb3ZpZC5vdXQuYzJbICw3XSksIG1pbihjb3ZpZC5vdXQuYzNbICw3XSksIG1pbihjb3ZpZC5vdXQuYzRbICw3XSksIG1pbihjb3ZpZC5vdXQuYzVbICw3XSksIG1pbihjb3ZpZC5vdXQuYzZbICw3XSkpLA0KICBRID0gYyhtaW4oY292aWQub3V0LmMxWyAsOF0pLCBtaW4oY292aWQub3V0LmMyWyAsOF0pLCBtaW4oY292aWQub3V0LmMzWyAsOF0pLCBtaW4oY292aWQub3V0LmM0WyAsOF0pLCBtaW4oY292aWQub3V0LmM1WyAsOF0pLCBtaW4oY292aWQub3V0LmM2WyAsOF0pKSwNCiAgUiA9IGMobWluKGNvdmlkLm91dC5jMVsgLDldKSwgbWluKGNvdmlkLm91dC5jMlsgLDldKSwgbWluKGNvdmlkLm91dC5jM1sgLDldKSwgbWluKGNvdmlkLm91dC5jNFsgLDldKSwgbWluKGNvdmlkLm91dC5jNVsgLDldKSwgbWluKGNvdmlkLm91dC5jNlsgLDldKSksDQogIFYgPSBjKG1pbihjb3ZpZC5vdXQuYzFbICwxMF0pLCBtaW4oY292aWQub3V0LmMyWyAsMTBdKSwgbWluKGNvdmlkLm91dC5jM1sgLDEwXSksIG1pbihjb3ZpZC5vdXQuYzRbICwxMF0pLCBtaW4oY292aWQub3V0LmM1WyAsMTBdKSwgbWluKGNvdmlkLm91dC5jNlsgLDEwXSkpDQopDQoNCnJlc3VsdHMuYzMgPC0gZGF0YS5mcmFtZSgNCiAgUy5oID0gYyh0YWlsKGNvdmlkLm91dC5jMVsgLDJdLG49MSksIHRhaWwoY292aWQub3V0LmMyWyAsMl0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzNbICwyXSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jNFsgLDJdLG49MSksIHRhaWwoY292aWQub3V0LmM1WyAsMl0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzZbICwyXSxuPTEpKSwgDQogIEUuaCA9IGModGFpbChjb3ZpZC5vdXQuYzFbICwzXSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jMlsgLDNdLG49MSksIHRhaWwoY292aWQub3V0LmMzWyAsM10sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzRbICwzXSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jNVsgLDNdLG49MSksIHRhaWwoY292aWQub3V0LmM2WyAsM10sbj0xKSksDQogIEkuaCA9IGModGFpbChjb3ZpZC5vdXQuYzFbICw0XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jMlsgLDRdLG49MSksIHRhaWwoY292aWQub3V0LmMzWyAsNF0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzRbICw0XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jNVsgLDRdLG49MSksIHRhaWwoY292aWQub3V0LmM2WyAsNF0sbj0xKSksDQogIFMubCA9IGModGFpbChjb3ZpZC5vdXQuYzFbICw1XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jMlsgLDVdLG49MSksIHRhaWwoY292aWQub3V0LmMzWyAsNV0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzRbICw1XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jNVsgLDVdLG49MSksIHRhaWwoY292aWQub3V0LmM2WyAsNV0sbj0xKSksDQogIEUubCA9IGModGFpbChjb3ZpZC5vdXQuYzFbICw2XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jMlsgLDZdLG49MSksIHRhaWwoY292aWQub3V0LmMzWyAsNl0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzRbICw2XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jNVsgLDZdLG49MSksIHRhaWwoY292aWQub3V0LmM2WyAsNl0sbj0xKSksIA0KICBJLmwgPSBjKHRhaWwoY292aWQub3V0LmMxWyAsN10sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzJbICw3XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jM1sgLDddLG49MSksIHRhaWwoY292aWQub3V0LmM0WyAsN10sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzVbICw3XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jNlsgLDddLG49MSkpLA0KICBRID0gYyh0YWlsKGNvdmlkLm91dC5jMVsgLDhdLG49MSksIHRhaWwoY292aWQub3V0LmMyWyAsOF0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzNbICw4XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jNFsgLDhdLG49MSksIHRhaWwoY292aWQub3V0LmM1WyAsOF0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzZbICw4XSxuPTEpKSwNCiAgUiA9IGModGFpbChjb3ZpZC5vdXQuYzFbICw5XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jMlsgLDldLG49MSksIHRhaWwoY292aWQub3V0LmMzWyAsOV0sbj0xKSwgdGFpbChjb3ZpZC5vdXQuYzRbICw5XSxuPTEpLCB0YWlsKGNvdmlkLm91dC5jNVsgLDldLG49MSksIHRhaWwoY292aWQub3V0LmM2WyAsOV0sbj0xKSksDQogIFYgPSBjKHRhaWwoY292aWQub3V0LmMxWyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0LmMyWyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0LmMzWyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0LmM0WyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0LmM1WyAsMTBdLG49MSksIHRhaWwoY292aWQub3V0LmM2WyAsMTBdLG49MSkpDQopDQoNCmAucm93TmFtZXNERjwtYChyZXN1bHRzLmMxLG1ha2UubmFtZXM9RkFMU0UsYygnYyA9IDAnLCdjID0gMTAnLCdjID0gMjAnLCdjID0gMzAnLCdjID0gNDAnLCdjID0gNTAnKSkNCmAucm93TmFtZXNERjwtYChyZXN1bHRzLmMyLG1ha2UubmFtZXM9RkFMU0UsYygnYyA9IDAnLCdjID0gMTAnLCdjID0gMjAnLCdjID0gMzAnLCdjID0gNDAnLCdjID0gNTAnKSkNCmAucm93TmFtZXNERjwtYChyZXN1bHRzLmMzLG1ha2UubmFtZXM9RkFMU0UsYygnYyA9IDAnLCdjID0gMTAnLCdjID0gMjAnLCdjID0gMzAnLCdjID0gNDAnLCdjID0gNTAnKSkNCmBgYA0KDQpQbG90dGluZyBoaWdoZXN0LCBsb3dlc3QsIGFuZCBlbmRpbmcgdmFsdWVzIG9mIGNsYXNzZXMNCmBgYHtyfQ0KIyMgSElHSEVTVCAjIw0Kb3A3IDwtIHBhcihtYXI9Yyg2LDYsMiwyKSkNCnBsb3QocmVzdWx0cy5jMSRTLmgsdHlwZT0iYiIsIGNvbD0iYmx1ZSIsIHhsYWI9InEgdmFsdWVzIiwgeWxhYiA9ICJJbmRpdmlkdWFscyIsIG1haW49IkhpZ2hlc3QiLCB5bGltPWMoMCw4MDAwMCkpDQpsaW5lcyhyZXN1bHRzLmMxJEUuaCwgdHlwZSA9ICJiIiwgY29sPSJyZWQiKQ0KbGluZXMocmVzdWx0cy5jMSRJLmgsIHR5cGUgPSAiYiIsIGNvbD0iZ3JlZW4iKQ0KbGluZXMocmVzdWx0cy5jMSRTLmwsIHR5cGUgPSAiYiIsIGNvbD0icHVycGxlIikNCmxpbmVzKHJlc3VsdHMuYzEkRS5sLCB0eXBlID0gImIiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhyZXN1bHRzLmMxJEkubCwgdHlwZSA9ICJiIiwgY29sPSJmb3Jlc3RncmVlbiIpDQpsaW5lcyhyZXN1bHRzLmMxJFEsIHR5cGUgPSAiYiIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsaW5lcyhyZXN1bHRzLmMxJFIsIHR5cGUgPSAiYiIsIGNvbD0icGluazIiKQ0KbGluZXMocmVzdWx0cy5jMSRWLCB0eXBlID0gImIiLCBjb2w9InllbGxvdyIpDQoNCmxlZ2VuZCgzLCA3MDAwMCxsZWdlbmQgPSBjKCJTdXNjZXB0aWJsZXMgKEhpZ2gpIiwiRXhwb3NlZCAoSGlnaCkiLCJJbmZlY3RlZCAoSGlnaCkiLCJTdXNjZXB0aWJsZXMgKExvdykiLCJFeHBvc2VkIChMb3cpIiwiSW5mZWN0ZWQgKExvdykiLCAiU2VsZi1Jc29sYXRpbmciLCJSZWNvdmVyZWQiLCJWaXJ1cyIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJncmVlbiIsInB1cnBsZSIsIm9yYW5nZSIsImZvcmVzdGdyZWVuIiwiZGFya3R1cnF1b2lzZSIsInBpbmsyIiwieWVsbG93IiksIGx0eT0xLCBjZXg9MC42KQ0KDQpwYXIob3A3KQ0KDQojIyBMT1dFU1QNCm9wOCA8LSBwYXIobWFyPWMoNiw2LDIsMikpDQpwbG90KHJlc3VsdHMuYzIkUy5oLHR5cGU9ImIiLCBjb2w9ImJsdWUiLCBtYWluPSJMb3dlc3QiLCB4bGFiPSJxIHZhbHVlcyIsIHlsYWIgPSAiSW5kaXZpZHVhbHMiLCB5bGltPWMoMCw4MDAwMCkpDQpsaW5lcyhyZXN1bHRzLmMyJEUuaCwgdHlwZSA9ICJiIiwgY29sPSJyZWQiKQ0KbGluZXMocmVzdWx0cy5jMiRJLmgsIHR5cGUgPSAiYiIsIGNvbD0iZ3JlZW4iKQ0KbGluZXMocmVzdWx0cy5jMiRTLmwsIHR5cGUgPSAiYiIsIGNvbD0icHVycGxlIikNCmxpbmVzKHJlc3VsdHMuYzIkRS5sLCB0eXBlID0gImIiLCBjb2w9Im9yYW5nZSIpDQpsaW5lcyhyZXN1bHRzLmMyJEkubCwgdHlwZSA9ICJiIiwgY29sPSJmb3Jlc3RncmVlbiIpDQpsaW5lcyhyZXN1bHRzLmMyJFEsIHR5cGUgPSAiYiIsIGNvbD0iZGFya3R1cnF1b2lzZSIpDQpsaW5lcyhyZXN1bHRzLmMyJFIsIHR5cGUgPSAiYiIsIGNvbD0icGluazIiKQ0KbGluZXMocmVzdWx0cy5jMiRWLCB0eXBlID0gImIiLCBjb2w9InllbGxvdyIpDQoNCmxlZ2VuZCgzLCA3MDAwMCxsZWdlbmQgPSBjKCJTdXNjZXB0aWJsZXMgKEhpZ2gpIiwiRXhwb3NlZCAoSGlnaCkiLCJJbmZlY3RlZCAoSGlnaCkiLCJTdXNjZXB0aWJsZXMgKExvdykiLCJFeHBvc2VkIChMb3cpIiwiSW5mZWN0ZWQgKExvdykiLCAiU2VsZi1Jc29sYXRpbmciLCJSZWNvdmVyZWQiLCJWaXJ1cyIpLCBjb2wgPSBjKCJibHVlIiwgInJlZCIsICJncmVlbiIsInB1cnBsZSIsIm9yYW5nZSIsImZvcmVzdGdyZWVuIiwiZGFya3R1cnF1b2lzZSIsInBpbmsyIiwieWVsbG93IiksIGx0eT0xLCBjZXg9MC42KQ0KDQpwYXIob3A4KQ0KDQojIyBFTkRJTkcgIyMNCm9wOSA8LSBwYXIobWFyPWMoNiw2LDIsMikpDQpwbG90KHJlc3VsdHMuYzMkUy5oLCB0eXBlPSJiIiwgY29sPSJibHVlIiwgbWFpbj0iRW5kaW5nIiwgeGxhYj0icSB2YWx1ZXMiLCB5bGFiID0gIkluZGl2aWR1YWxzIiwgeWxpbT1jKDAsODAwMDApKQ0KbGluZXMocmVzdWx0cy5jMyRFLmgsIHR5cGUgPSAiYiIsIGNvbD0icmVkIikNCmxpbmVzKHJlc3VsdHMuYzMkSS5oLCB0eXBlID0gImIiLCBjb2w9ImdyZWVuIikNCmxpbmVzKHJlc3VsdHMuYzMkUy5sLCB0eXBlID0gImIiLCBjb2w9InB1cnBsZSIpDQpsaW5lcyhyZXN1bHRzLmMzJEUubCwgdHlwZSA9ICJiIiwgY29sPSJvcmFuZ2UiKQ0KbGluZXMocmVzdWx0cy5jMyRJLmwsIHR5cGUgPSAiYiIsIGNvbD0iZm9yZXN0Z3JlZW4iKQ0KbGluZXMocmVzdWx0cy5jMyRRLCB0eXBlID0gImIiLCBjb2w9ImRhcmt0dXJxdW9pc2UiKQ0KbGluZXMocmVzdWx0cy5jMyRSLCB0eXBlID0gImIiLCBjb2w9InBpbmsyIikNCmxpbmVzKHJlc3VsdHMuYzMkViwgdHlwZSA9ICJiIiwgY29sPSJ5ZWxsb3ciKQ0KDQpsZWdlbmQoMywgNzAwMDAsbGVnZW5kID0gYygiU3VzY2VwdGlibGVzIChIaWdoKSIsIkV4cG9zZWQgKEhpZ2gpIiwiSW5mZWN0ZWQgKEhpZ2gpIiwiU3VzY2VwdGlibGVzIChMb3cpIiwiRXhwb3NlZCAoTG93KSIsIkluZmVjdGVkIChMb3cpIiwgIlNlbGYtSXNvbGF0aW5nIiwiUmVjb3ZlcmVkIiwiVmlydXMiKSwgY29sID0gYygiYmx1ZSIsICJyZWQiLCAiZ3JlZW4iLCJwdXJwbGUiLCJvcmFuZ2UiLCJmb3Jlc3RncmVlbiIsImRhcmt0dXJxdW9pc2UiLCJwaW5rMiIsInllbGxvdyIpLCBsdHk9MSwgY2V4PTAuNikNCg0KcGFyKG9wOSkNCmBgYA==