1 Introduction

Below is a breakdown of four powerful and commonly used probability distributions - normal, student’s T, chi-square and F. For the purposes of this analysis, I will be examining each distribution from the lens of exploring relative probabilities over a series of values, rather than cumulative ones at a particular point.

2 Normal Distribution

The normal distribution is the most fundamental and popular distribution in the world of statistics. Even those without statistical training have likely heard of the “bell curve.” Well, that shape symbolizes the relative probability distribution of standardized data which originated from a normally distributed population.

At the heart of the normal distribution’s characteristics is the empirical rule, which essentially states that about 68% of a population falls within one standard deviation of the mean, 95% falls within two standard deviations and over 99% fall within three standard deviations. An example of the bell curve with the empirical rule labeled is below.

include_graphics("Bell Curve.png")

Also stemming from the normal distribution comes the central limit theorem (CLT). The CLT states that, as the sample size of a study or experiment increases so does the sampling distribution’s resemblance of normality. This theorem is nonparametric, meaning it holds true regardless of the true population distribution from which the sample data came from. In other words, as long as the population of interest has a known and finite mean (or average) and variance, we can presume a relatively normal distribution of sample statistics (such as mean and proportion for example) coming from that population’s samples.

3 T Distribution

The normal distribution’s closest relative so to speak in the world of probability distributions is the T distribution (sometimes called the Student’s T). The T distribution is approximately bell shaped, and is also symmetric just like the normal distribution. The crucial difference between the T and normal distributions deals with knowledge of population variance.

As alluded to before, the normal distribution is a phenomenal tool when both the population mean and variance are finite and known. Alternatively, in a scenario where the population variance (\(\sigma^2\)) is unknown, the T distribution is often resorted to. For the T distribution, the sample variance (\(S^2\)) is used as an estimator of the population variance.

Additionally, the T distribution considers sample size in calculating relative probability while the normal distribution does not. The T distribution’s exact shape depends on its degrees of freedom (df). To find the degrees of freedom, we simply subtract one from the sample size. As degrees of freedom increases, so does the T distribution’s resemblance with the normal distribution, making this distribution most commonly used in cases of small sample sizes. An example of T distribution curves with differing degrees of freedoms in comparison to the standard normal distribution’s bell curve is below.

### Normal PDF 
curve(dnorm(x, mean = 0, sd = 1),
      from = -4,
      to = 4,
      lwd = 2,
      main = "Normal vs T Distributions",
      xlab = "Critical Value",
      ylab = "Probability Density")

box(lwd = 3)

### T Distribution PDF's

# df = 3
curve(dt(x, df = 3),
      from = -4, to = 4,
      lwd = 2,
      lty = 2,
      col = "red",
      add = TRUE)

# df = 10
curve(dt(x, df = 10),
      from = -4, to = 4,
      lwd = 2,
      lty = 2,
      col = "blue",
      add = TRUE)

# df = 20
curve(dt(x, df = 20),
      from = -4, to = 4,
      lwd = 2,
      lty = 2,
      col = "orange",
      add = TRUE)

legend("topright",
       legend = c("N (0,1)", 
                  paste0("T (df=", 3, ")"),
                  paste0("T (df=", 10, ")"),
                  paste0("T (df=", 20, ")")
                  ),
       col = c("black", "red", "blue", "orange"),
       lwd = 2,
       lty = 1,
       box.lwd = 3)

4 Chi-Square Distribution

Taking aspects from the normal, T and gamma distributions is the chi-square distribution. The gamma distribution is used for a population that is non-negative and skewed rightward. A typical example of when the gamma distribution might be applicable is modeling the length of time until a rare event (like a natural disaster) occurs.

The chi-square distribution is considered a special instance of the gamma. The gamma distribution has two parameters, alpha (\(\alpha\)) and beta (\(\beta\)). If \(\alpha\) = \(\frac{v}{2}\) (with v representing the degrees of freedom) and \(\beta\) = 2, then the distribution is chi-square.

Just like the T distribution, the chi-squares degrees of freedom is one unit less than the sample size being observed. Unlike the normal and T distributions though, the chi-square has a clear and prevalent rightward skew. This is because, as mentioned above, the chi-square distribution only deals with non-negative values. A greater degrees of freedom will correlate with an upward skew in relative probability happening at a greater critical value, before eventually leveling off. This can be seen in the plot below.

### Normal PDF 
curve(dnorm(x, mean = 0, sd = 1),
      from = 0,
      to = 40,
      lwd = 2,
      ylim = c(0,0.25),
      main = "Normal vs Chi-Square Distributions",
      xlab = "Critical Value",
      ylab = "Probability Density")

box(lwd = 3)

### Chi-Square Distribution PDF's

# df = 3
curve(dchisq(x, df = 3),
      from = 0, to = 40,
      lwd = 2,
      lty = 2,
      col = "red",
      add = TRUE)

# df = 10
curve(dchisq(x, df = 10),
      from = 0, to = 40,
      lwd = 2,
      lty = 2,
      col = "blue",
      add = TRUE)

# df = 20
curve(dchisq(x, df = 20),
      from = 0, to = 40,
      lwd = 2,
      lty = 2,
      col = "orange",
      add = TRUE)

legend("topright",
       legend = c("N (0,1)", 
                  paste0("Chi (df=", 3, ")"),
                  paste0("Chi (df=", 10, ")"),
                  paste0("Chi (df=", 20, ")")
                  ),
       col = c("black", "red", "blue", "orange"),
       lwd = 2,
       lty = 1,
       box.lwd = 3)

5 F Distribution

The F distribution largely resembles the chi-square and that is because the F distribution is actually the quotient of two independent chi-squared variables. While the T and chi-square distributions considered the degrees of freedom as (n - 1), the F distribution takes this formula and applies it to each of the two chi-squared variables in its calculation. Therefore, the F distribution has a separate degrees of freedom statistic for the numerator and denominator.

Like the chi-square distribution, the F distribution is non-negative and rightward skewed. The numerator degrees of freedom primarily controls the location of the curve’s skew relative to the plot’s x axis. An increasing numerator degrees of freedom will lead to the upward trajectory of relative probablity occurring at a greater critical value (a higher value along the x axis). The plot below illustrates how, while holding the denominator degrees of freedom constant, an increase in the numerator degrees of freedom means a rightward shift in the distribution’s peak, hence a weakening of the rightward skew characteristic.

### Normal PDF 
curve(dnorm(x, mean = 0, sd = 1),
      from = 0,
      to = 10,
      lwd = 2,
      ylim = c(0,1),
      main = "Normal vs F Distributions",
      xlab = "Critical Value",
      ylab = "Probability Density")

box(lwd = 3)

### F Distribution PDF's

curve(df(x, df1 =2, df2 = 10),
      from = 0, to = 10,
      lwd = 2,
      lty = 2,
      ylim = c(0,1),
      col = "red",
      add = TRUE)

curve(df(x, df1 =10, df2 = 10),
      from = 0, to = 10,
      lwd = 2,
      ylim = c(0,1),
      lty = 2,
      col = "blue",
      add = TRUE)

curve(df(x, df1 =100, df2 = 10),
      from = 0, to = 10,
      lwd = 2,
      ylim = c(0,1),
      lty = 2,
      col = "orange",
      add = TRUE)

legend("topright",
       legend = c("N (0,1)", 
                  paste0("F (df=", 2, ",", 10,  ")"),
                  paste0("F (df=", 10, ",",  10,  ")"),
                  paste0("F (df=", 100, ",",  10, ")")
                  ),
       col = c("black", "red", "blue", "orange"),
       lwd = 2,
       lty = 1,
       box.lwd = 3)

Meanwhile, the denominator degrees of freedom controls the distribution’s concentration. We can see via the graphic below that an increasing denominator degrees of freedom correlates with the relative probability density “spiking” within a smaller and more confined range of critical values. Hence, it is much more likely for a F distribution with a smaller denominator degrees of freedom to output a large F statistic.

### Normal PDF 
curve(dnorm(x, mean = 0, sd = 1),
      from = 0,
      to = 10,
      lwd = 2,
      ylim = c(0,1),
      main = "Normal vs F Distributions",
      xlab = "Critical Value",
      ylab = "Probability Density")

box(lwd = 3)

### F Distribution PDF's


curve(df(x, df1 =10, df2 = 2),
      from = 0, to = 10,
      lwd = 2,
      lty = 2,
      ylim = c(0,1),
      col = "red",
      add = TRUE)

curve(df(x, df1 =10, df2 = 10),
      from = 0, to = 10,
      lwd = 2,
      ylim = c(0,1),
      lty = 2,
      col = "blue",
      add = TRUE)

curve(df(x, df1 =10, df2 = 100),
      from = 0, to = 10,
      lwd = 2,
      ylim = c(0,1),
      lty = 2,
      col = "orange",
      add = TRUE)

legend("topright",
       legend = c("N (0,1)", 
                  paste0("F (df=", 10, ",", 2,  ")"),
                  paste0("F (df=", 10, ",",  10,  ")"),
                  paste0("F (df=", 10, ",",  100, ")")
                  ),
       col = c("black", "red", "blue", "orange"),
       lwd = 2,
       lty = 1,
       box.lwd = 3)

LS0tCnRpdGxlOiAiQnJlYWtkb3duIG9mIFNhbXBsaW5nIERpc3RyaWJ1dGlvbnMiCmF1dGhvcjogIkNocmlzIEJhaG0iCmRhdGU6ICIyMDI2LTAyLTA4IgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IHRydWUKICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQogICAgdG9jX2RlcHRoOiA0CiAgICBmaWdfd2lkdGg6IDYKICAgIGZpZ19oZWlnaHQ6IDQKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgdGhlbWU6IGx1bWVuCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICB3b3JkX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDQKLS0tCgpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9CmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47CiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOwp9CgpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLwogIGZvbnQtc2l6ZTogMjRweDsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogRGFya1JlZDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBEYXJrUmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBEYXJrQmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIuIjsKfQpgYGAKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIGNvZGUgY2h1bmsgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIFIgY29kZSwgd2FybmluZ3MsIGFuZCBvdXRwdXQgCiMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGVzLgoKaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7ICAgICAgICAgICAgICAgICAgICAgICMgdXNlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB0byBkZXRlY3QKICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKSAgICAgICAgICAgICAgICAgICMgd2hldGhlciBhIHBhY2thZ2Ugd2FzIGluc3RhbGxlZCBpbgogICBsaWJyYXJ5KGtuaXRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB5b3VyIG1hY2hpbmUuIElmIG5vdCwgaW5zdGFsbCBpdCBhbmQKfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbG9hZCBpdCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkuCgppZiAoIXJlcXVpcmUodGlkeXZlcnNlKSkge2xpYnJhcnkodGlkeXZzZXJzZSl9IAoKaWYgKCFyZXF1aXJlKEdHYWxseSkpIHtsaWJyYXJ5KEdHYWxseSl9IAoKaWYgKCFyZXF1aXJlKGthYmxlRXh0cmEpKSB7bGlicmFyeShrYWJsZUV4dHJhKX0gCgppZiAoIXJlcXVpcmUoZ2dwbG90MikpIHtsaWJyYXJ5KGdncGxvdDIpfSAKCmlmICghcmVxdWlyZShjYXIpKSB7bGlicmFyeShjYXIpfSAKCmlmICghcmVxdWlyZShkcGx5cikpIHtsaWJyYXJ5KGRwbHlyKX0gCgppZiAoIXJlcXVpcmUocGFuZGVyKSkge2xpYnJhcnkocGFuZGVyKX0gCgppZiAoIXJlcXVpcmUoZm9yZWNhc3QpKSB7bGlicmFyeShmb3JlY2FzdCl9IAoKaWYgKCFyZXF1aXJlKGx1YnJpZGF0ZSkpIHtsaWJyYXJ5KGx1YnJpZGF0ZSl9IAoKaWYgKCFyZXF1aXJlKCJzY2FsZXMiKSkgewppbnN0YWxsLnBhY2thZ2VzKCJzY2FsZXMiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKbGlicmFyeSgic2NhbGVzIikgCn0KCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKCWVjaG8gPSBUUlVFLAoJbWVzc2FnZSA9IEZBTFNFLAoJd2FybmluZyA9IEZBTFNFLAoJY29tbWVudCA9IE5BLAoJcmVzdWx0cyA9IFRSVUUKKQpgYGAKCiMgSW50cm9kdWN0aW9uCkJlbG93IGlzIGEgYnJlYWtkb3duIG9mIGZvdXIgcG93ZXJmdWwgYW5kIGNvbW1vbmx5IHVzZWQgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9ucyAtIG5vcm1hbCwgc3R1ZGVudCdzIFQsIGNoaS1zcXVhcmUgYW5kIEYuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBhbmFseXNpcywgSSB3aWxsIGJlIGV4YW1pbmluZyBlYWNoIGRpc3RyaWJ1dGlvbiBmcm9tIHRoZSBsZW5zIG9mIGV4cGxvcmluZyAqcmVsYXRpdmUqIHByb2JhYmlsaXRpZXMgb3ZlciBhIHNlcmllcyBvZiB2YWx1ZXMsIHJhdGhlciB0aGFuIGN1bXVsYXRpdmUgb25lcyBhdCBhIHBhcnRpY3VsYXIgcG9pbnQuCgoKIyBOb3JtYWwgRGlzdHJpYnV0aW9uClRoZSBub3JtYWwgZGlzdHJpYnV0aW9uIGlzIHRoZSBtb3N0IGZ1bmRhbWVudGFsIGFuZCBwb3B1bGFyIGRpc3RyaWJ1dGlvbiBpbiB0aGUgd29ybGQgb2Ygc3RhdGlzdGljcy4gRXZlbiB0aG9zZSB3aXRob3V0IHN0YXRpc3RpY2FsIHRyYWluaW5nIGhhdmUgbGlrZWx5IGhlYXJkIG9mIHRoZSAiYmVsbCBjdXJ2ZS4iIFdlbGwsIHRoYXQgc2hhcGUgc3ltYm9saXplcyB0aGUgcmVsYXRpdmUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uIG9mIHN0YW5kYXJkaXplZCBkYXRhIHdoaWNoIG9yaWdpbmF0ZWQgZnJvbSBhIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIHBvcHVsYXRpb24uCgpBdCB0aGUgaGVhcnQgb2YgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24ncyBjaGFyYWN0ZXJpc3RpY3MgaXMgdGhlIGVtcGlyaWNhbCBydWxlLCB3aGljaCBlc3NlbnRpYWxseSBzdGF0ZXMgdGhhdCBhYm91dCA2OCUgb2YgYSBwb3B1bGF0aW9uIGZhbGxzIHdpdGhpbiBvbmUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBtZWFuLCA5NSUgZmFsbHMgd2l0aGluIHR3byBzdGFuZGFyZCBkZXZpYXRpb25zIGFuZCBvdmVyIDk5JSBmYWxsIHdpdGhpbiB0aHJlZSBzdGFuZGFyZCBkZXZpYXRpb25zLiBBbiBleGFtcGxlIG9mIHRoZSBiZWxsIGN1cnZlIHdpdGggdGhlIGVtcGlyaWNhbCBydWxlIGxhYmVsZWQgaXMgYmVsb3cuCgpgYGB7ciwgZmlnLmFsaWduPSdjZW50ZXInfQppbmNsdWRlX2dyYXBoaWNzKCJCZWxsIEN1cnZlLnBuZyIpCmBgYAoKQWxzbyBzdGVtbWluZyBmcm9tIHRoZSBub3JtYWwgZGlzdHJpYnV0aW9uIGNvbWVzIHRoZSBjZW50cmFsIGxpbWl0IHRoZW9yZW0gKENMVCkuIFRoZSBDTFQgc3RhdGVzIHRoYXQsIGFzIHRoZSBzYW1wbGUgc2l6ZSBvZiBhIHN0dWR5IG9yIGV4cGVyaW1lbnQgaW5jcmVhc2VzIHNvIGRvZXMgdGhlIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbidzIHJlc2VtYmxhbmNlIG9mIG5vcm1hbGl0eS4gVGhpcyB0aGVvcmVtIGlzIG5vbnBhcmFtZXRyaWMsIG1lYW5pbmcgaXQgaG9sZHMgdHJ1ZSAqcmVnYXJkbGVzcyogb2YgdGhlIHRydWUgcG9wdWxhdGlvbiBkaXN0cmlidXRpb24gZnJvbSB3aGljaCB0aGUgc2FtcGxlIGRhdGEgY2FtZSBmcm9tLiBJbiBvdGhlciB3b3JkcywgYXMgbG9uZyBhcyB0aGUgcG9wdWxhdGlvbiBvZiBpbnRlcmVzdCBoYXMgYSBrbm93biBhbmQgZmluaXRlIG1lYW4gKG9yIGF2ZXJhZ2UpIGFuZCB2YXJpYW5jZSwgd2UgY2FuIHByZXN1bWUgYSByZWxhdGl2ZWx5IG5vcm1hbCBkaXN0cmlidXRpb24gb2Ygc2FtcGxlIHN0YXRpc3RpY3MgKHN1Y2ggYXMgbWVhbiBhbmQgcHJvcG9ydGlvbiBmb3IgZXhhbXBsZSkgY29taW5nIGZyb20gdGhhdCBwb3B1bGF0aW9uJ3Mgc2FtcGxlcy4KCiMgVCBEaXN0cmlidXRpb24KVGhlIG5vcm1hbCBkaXN0cmlidXRpb24ncyBjbG9zZXN0IHJlbGF0aXZlIHNvIHRvIHNwZWFrIGluIHRoZSB3b3JsZCBvZiBwcm9iYWJpbGl0eSBkaXN0cmlidXRpb25zIGlzIHRoZSBUIGRpc3RyaWJ1dGlvbiAoc29tZXRpbWVzIGNhbGxlZCB0aGUgU3R1ZGVudCdzIFQpLiBUaGUgVCBkaXN0cmlidXRpb24gaXMgYXBwcm94aW1hdGVseSBiZWxsIHNoYXBlZCwgYW5kIGlzIGFsc28gc3ltbWV0cmljIGp1c3QgbGlrZSB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gVGhlIGNydWNpYWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBUIGFuZCBub3JtYWwgZGlzdHJpYnV0aW9ucyBkZWFscyB3aXRoIGtub3dsZWRnZSBvZiBwb3B1bGF0aW9uIHZhcmlhbmNlLiAKCkFzIGFsbHVkZWQgdG8gYmVmb3JlLCB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbiBpcyBhIHBoZW5vbWVuYWwgdG9vbCB3aGVuIGJvdGggdGhlIHBvcHVsYXRpb24gbWVhbiBhbmQgdmFyaWFuY2UgYXJlIGZpbml0ZSBhbmQga25vd24uIEFsdGVybmF0aXZlbHksIGluIGEgc2NlbmFyaW8gd2hlcmUgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UgKCRcc2lnbWFeMiQpIGlzIHVua25vd24sIHRoZSBUIGRpc3RyaWJ1dGlvbiBpcyBvZnRlbiByZXNvcnRlZCB0by4gRm9yIHRoZSBUIGRpc3RyaWJ1dGlvbiwgdGhlIHNhbXBsZSB2YXJpYW5jZSAoJFNeMiQpIGlzIHVzZWQgYXMgYW4gZXN0aW1hdG9yIG9mIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlLgoKQWRkaXRpb25hbGx5LCB0aGUgVCBkaXN0cmlidXRpb24gY29uc2lkZXJzIHNhbXBsZSBzaXplIGluIGNhbGN1bGF0aW5nIHJlbGF0aXZlIHByb2JhYmlsaXR5IHdoaWxlIHRoZSBub3JtYWwgZGlzdHJpYnV0aW9uIGRvZXMgbm90LiBUaGUgVCBkaXN0cmlidXRpb24ncyBleGFjdCBzaGFwZSBkZXBlbmRzIG9uIGl0cyBkZWdyZWVzIG9mIGZyZWVkb20gKGRmKS4gVG8gZmluZCB0aGUgZGVncmVlcyBvZiBmcmVlZG9tLCB3ZSBzaW1wbHkgc3VidHJhY3Qgb25lIGZyb20gdGhlIHNhbXBsZSBzaXplLiBBcyBkZWdyZWVzIG9mIGZyZWVkb20gaW5jcmVhc2VzLCBzbyBkb2VzIHRoZSBUIGRpc3RyaWJ1dGlvbidzIHJlc2VtYmxhbmNlIHdpdGggdGhlIG5vcm1hbCBkaXN0cmlidXRpb24sIG1ha2luZyB0aGlzIGRpc3RyaWJ1dGlvbiBtb3N0IGNvbW1vbmx5IHVzZWQgaW4gY2FzZXMgb2Ygc21hbGwgc2FtcGxlIHNpemVzLiBBbiBleGFtcGxlIG9mIFQgZGlzdHJpYnV0aW9uIGN1cnZlcyB3aXRoIGRpZmZlcmluZyBkZWdyZWVzIG9mIGZyZWVkb21zIGluIGNvbXBhcmlzb24gdG8gdGhlIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24ncyBiZWxsIGN1cnZlIGlzIGJlbG93LgoKYGBge3IgVCBQbG90cywgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcuaGVpZ2h0PTYuNSwgZmlnLndpZHRoPTYuNX0KIyMjIE5vcm1hbCBQREYgCmN1cnZlKGRub3JtKHgsIG1lYW4gPSAwLCBzZCA9IDEpLAogICAgICBmcm9tID0gLTQsCiAgICAgIHRvID0gNCwKICAgICAgbHdkID0gMiwKICAgICAgbWFpbiA9ICJOb3JtYWwgdnMgVCBEaXN0cmlidXRpb25zIiwKICAgICAgeGxhYiA9ICJDcml0aWNhbCBWYWx1ZSIsCiAgICAgIHlsYWIgPSAiUHJvYmFiaWxpdHkgRGVuc2l0eSIpCgpib3gobHdkID0gMykKCiMjIyBUIERpc3RyaWJ1dGlvbiBQREYncwoKIyBkZiA9IDMKY3VydmUoZHQoeCwgZGYgPSAzKSwKICAgICAgZnJvbSA9IC00LCB0byA9IDQsCiAgICAgIGx3ZCA9IDIsCiAgICAgIGx0eSA9IDIsCiAgICAgIGNvbCA9ICJyZWQiLAogICAgICBhZGQgPSBUUlVFKQoKIyBkZiA9IDEwCmN1cnZlKGR0KHgsIGRmID0gMTApLAogICAgICBmcm9tID0gLTQsIHRvID0gNCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gImJsdWUiLAogICAgICBhZGQgPSBUUlVFKQoKIyBkZiA9IDIwCmN1cnZlKGR0KHgsIGRmID0gMjApLAogICAgICBmcm9tID0gLTQsIHRvID0gNCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gIm9yYW5nZSIsCiAgICAgIGFkZCA9IFRSVUUpCgpsZWdlbmQoInRvcHJpZ2h0IiwKICAgICAgIGxlZ2VuZCA9IGMoIk4gKDAsMSkiLCAKICAgICAgICAgICAgICAgICAgcGFzdGUwKCJUIChkZj0iLCAzLCAiKSIpLAogICAgICAgICAgICAgICAgICBwYXN0ZTAoIlQgKGRmPSIsIDEwLCAiKSIpLAogICAgICAgICAgICAgICAgICBwYXN0ZTAoIlQgKGRmPSIsIDIwLCAiKSIpCiAgICAgICAgICAgICAgICAgICksCiAgICAgICBjb2wgPSBjKCJibGFjayIsICJyZWQiLCAiYmx1ZSIsICJvcmFuZ2UiKSwKICAgICAgIGx3ZCA9IDIsCiAgICAgICBsdHkgPSAxLAogICAgICAgYm94Lmx3ZCA9IDMpCgpgYGAKCiMgQ2hpLVNxdWFyZSBEaXN0cmlidXRpb24KVGFraW5nIGFzcGVjdHMgZnJvbSB0aGUgbm9ybWFsLCBUIGFuZCBnYW1tYSBkaXN0cmlidXRpb25zIGlzIHRoZSBjaGktc3F1YXJlIGRpc3RyaWJ1dGlvbi4gVGhlIGdhbW1hIGRpc3RyaWJ1dGlvbiBpcyB1c2VkIGZvciBhIHBvcHVsYXRpb24gdGhhdCBpcyBub24tbmVnYXRpdmUgYW5kIHNrZXdlZCByaWdodHdhcmQuIEEgdHlwaWNhbCBleGFtcGxlIG9mIHdoZW4gdGhlIGdhbW1hIGRpc3RyaWJ1dGlvbiBtaWdodCBiZSBhcHBsaWNhYmxlIGlzIG1vZGVsaW5nIHRoZSBsZW5ndGggb2YgdGltZSB1bnRpbCBhIHJhcmUgZXZlbnQgKGxpa2UgYSBuYXR1cmFsIGRpc2FzdGVyKSBvY2N1cnMuCgpUaGUgY2hpLXNxdWFyZSBkaXN0cmlidXRpb24gaXMgY29uc2lkZXJlZCBhIHNwZWNpYWwgaW5zdGFuY2Ugb2YgdGhlIGdhbW1hLiBUaGUgZ2FtbWEgZGlzdHJpYnV0aW9uIGhhcyB0d28gcGFyYW1ldGVycywgYWxwaGEgKCRcYWxwaGEkKSBhbmQgYmV0YSAoJFxiZXRhJCkuIElmICRcYWxwaGEkID0gJFxmcmFje3Z9ezJ9JCAod2l0aCB2IHJlcHJlc2VudGluZyB0aGUgZGVncmVlcyBvZiBmcmVlZG9tKSBhbmQgJFxiZXRhJCA9IDIsIHRoZW4gdGhlIGRpc3RyaWJ1dGlvbiBpcyBjaGktc3F1YXJlLgoKSnVzdCBsaWtlIHRoZSBUIGRpc3RyaWJ1dGlvbiwgdGhlIGNoaS1zcXVhcmVzIGRlZ3JlZXMgb2YgZnJlZWRvbSBpcyBvbmUgdW5pdCBsZXNzIHRoYW4gdGhlIHNhbXBsZSBzaXplIGJlaW5nIG9ic2VydmVkLiBVbmxpa2UgdGhlIG5vcm1hbCBhbmQgVCBkaXN0cmlidXRpb25zIHRob3VnaCwgdGhlIGNoaS1zcXVhcmUgaGFzIGEgY2xlYXIgYW5kIHByZXZhbGVudCByaWdodHdhcmQgc2tldy4gVGhpcyBpcyBiZWNhdXNlLCBhcyBtZW50aW9uZWQgYWJvdmUsIHRoZSBjaGktc3F1YXJlIGRpc3RyaWJ1dGlvbiBvbmx5IGRlYWxzIHdpdGggbm9uLW5lZ2F0aXZlIHZhbHVlcy4gQSBncmVhdGVyIGRlZ3JlZXMgb2YgZnJlZWRvbSB3aWxsIGNvcnJlbGF0ZSB3aXRoIGFuIHVwd2FyZCBza2V3IGluIHJlbGF0aXZlIHByb2JhYmlsaXR5IGhhcHBlbmluZyBhdCBhIGdyZWF0ZXIgY3JpdGljYWwgdmFsdWUsIGJlZm9yZSBldmVudHVhbGx5IGxldmVsaW5nIG9mZi4gVGhpcyBjYW4gYmUgc2VlbiBpbiB0aGUgcGxvdCBiZWxvdy4KCmBgYHtyIENoaSBTcXVhcmUgUGxvdHMsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD02LjUsIGZpZy53aWR0aD02LjV9CiMjIyBOb3JtYWwgUERGIApjdXJ2ZShkbm9ybSh4LCBtZWFuID0gMCwgc2QgPSAxKSwKICAgICAgZnJvbSA9IDAsCiAgICAgIHRvID0gNDAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMC4yNSksCiAgICAgIG1haW4gPSAiTm9ybWFsIHZzIENoaS1TcXVhcmUgRGlzdHJpYnV0aW9ucyIsCiAgICAgIHhsYWIgPSAiQ3JpdGljYWwgVmFsdWUiLAogICAgICB5bGFiID0gIlByb2JhYmlsaXR5IERlbnNpdHkiKQoKYm94KGx3ZCA9IDMpCgojIyMgQ2hpLVNxdWFyZSBEaXN0cmlidXRpb24gUERGJ3MKCiMgZGYgPSAzCmN1cnZlKGRjaGlzcSh4LCBkZiA9IDMpLAogICAgICBmcm9tID0gMCwgdG8gPSA0MCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gInJlZCIsCiAgICAgIGFkZCA9IFRSVUUpCgojIGRmID0gMTAKY3VydmUoZGNoaXNxKHgsIGRmID0gMTApLAogICAgICBmcm9tID0gMCwgdG8gPSA0MCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gImJsdWUiLAogICAgICBhZGQgPSBUUlVFKQoKIyBkZiA9IDIwCmN1cnZlKGRjaGlzcSh4LCBkZiA9IDIwKSwKICAgICAgZnJvbSA9IDAsIHRvID0gNDAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIGx0eSA9IDIsCiAgICAgIGNvbCA9ICJvcmFuZ2UiLAogICAgICBhZGQgPSBUUlVFKQoKbGVnZW5kKCJ0b3ByaWdodCIsCiAgICAgICBsZWdlbmQgPSBjKCJOICgwLDEpIiwgCiAgICAgICAgICAgICAgICAgIHBhc3RlMCgiQ2hpIChkZj0iLCAzLCAiKSIpLAogICAgICAgICAgICAgICAgICBwYXN0ZTAoIkNoaSAoZGY9IiwgMTAsICIpIiksCiAgICAgICAgICAgICAgICAgIHBhc3RlMCgiQ2hpIChkZj0iLCAyMCwgIikiKQogICAgICAgICAgICAgICAgICApLAogICAgICAgY29sID0gYygiYmxhY2siLCAicmVkIiwgImJsdWUiLCAib3JhbmdlIiksCiAgICAgICBsd2QgPSAyLAogICAgICAgbHR5ID0gMSwKICAgICAgIGJveC5sd2QgPSAzKQoKYGBgCgojIEYgRGlzdHJpYnV0aW9uClRoZSBGIGRpc3RyaWJ1dGlvbiBsYXJnZWx5IHJlc2VtYmxlcyB0aGUgY2hpLXNxdWFyZSBhbmQgdGhhdCBpcyBiZWNhdXNlIHRoZSBGIGRpc3RyaWJ1dGlvbiBpcyBhY3R1YWxseSB0aGUgcXVvdGllbnQgb2YgdHdvIGluZGVwZW5kZW50IGNoaS1zcXVhcmVkIHZhcmlhYmxlcy4gV2hpbGUgdGhlIFQgYW5kIGNoaS1zcXVhcmUgZGlzdHJpYnV0aW9ucyBjb25zaWRlcmVkIHRoZSBkZWdyZWVzIG9mIGZyZWVkb20gYXMgKG4gLSAxKSwgdGhlIEYgZGlzdHJpYnV0aW9uIHRha2VzIHRoaXMgZm9ybXVsYSBhbmQgYXBwbGllcyBpdCB0byBlYWNoIG9mIHRoZSB0d28gY2hpLXNxdWFyZWQgdmFyaWFibGVzIGluIGl0cyBjYWxjdWxhdGlvbi4gVGhlcmVmb3JlLCB0aGUgRiBkaXN0cmlidXRpb24gaGFzIGEgc2VwYXJhdGUgZGVncmVlcyBvZiBmcmVlZG9tIHN0YXRpc3RpYyBmb3IgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuCgpMaWtlIHRoZSBjaGktc3F1YXJlIGRpc3RyaWJ1dGlvbiwgdGhlIEYgZGlzdHJpYnV0aW9uIGlzIG5vbi1uZWdhdGl2ZSBhbmQgcmlnaHR3YXJkIHNrZXdlZC4gVGhlIG51bWVyYXRvciBkZWdyZWVzIG9mIGZyZWVkb20gcHJpbWFyaWx5IGNvbnRyb2xzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VydmUncyBza2V3IHJlbGF0aXZlIHRvIHRoZSBwbG90J3MgeCBheGlzLiBBbiBpbmNyZWFzaW5nIG51bWVyYXRvciBkZWdyZWVzIG9mIGZyZWVkb20gd2lsbCBsZWFkIHRvIHRoZSB1cHdhcmQgdHJhamVjdG9yeSBvZiByZWxhdGl2ZSBwcm9iYWJsaXR5IG9jY3VycmluZyBhdCBhIGdyZWF0ZXIgY3JpdGljYWwgdmFsdWUgKGEgaGlnaGVyIHZhbHVlIGFsb25nIHRoZSB4IGF4aXMpLiBUaGUgcGxvdCBiZWxvdyBpbGx1c3RyYXRlcyBob3csIHdoaWxlIGhvbGRpbmcgdGhlIGRlbm9taW5hdG9yIGRlZ3JlZXMgb2YgZnJlZWRvbSBjb25zdGFudCwgYW4gaW5jcmVhc2UgaW4gdGhlIG51bWVyYXRvciBkZWdyZWVzIG9mIGZyZWVkb20gbWVhbnMgYSByaWdodHdhcmQgc2hpZnQgaW4gdGhlIGRpc3RyaWJ1dGlvbidzIHBlYWssIGhlbmNlIGEgd2Vha2VuaW5nIG9mIHRoZSByaWdodHdhcmQgc2tldyBjaGFyYWN0ZXJpc3RpYy4KCmBgYHtyIEYgRDEgUGxvdHMsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD02LjUsIGZpZy53aWR0aD02LjV9CiMjIyBOb3JtYWwgUERGIApjdXJ2ZShkbm9ybSh4LCBtZWFuID0gMCwgc2QgPSAxKSwKICAgICAgZnJvbSA9IDAsCiAgICAgIHRvID0gMTAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMSksCiAgICAgIG1haW4gPSAiTm9ybWFsIHZzIEYgRGlzdHJpYnV0aW9ucyIsCiAgICAgIHhsYWIgPSAiQ3JpdGljYWwgVmFsdWUiLAogICAgICB5bGFiID0gIlByb2JhYmlsaXR5IERlbnNpdHkiKQoKYm94KGx3ZCA9IDMpCgojIyMgRiBEaXN0cmlidXRpb24gUERGJ3MKCmN1cnZlKGRmKHgsIGRmMSA9MiwgZGYyID0gMTApLAogICAgICBmcm9tID0gMCwgdG8gPSAxMCwKICAgICAgbHdkID0gMiwKICAgICAgbHR5ID0gMiwKICAgICAgeWxpbSA9IGMoMCwxKSwKICAgICAgY29sID0gInJlZCIsCiAgICAgIGFkZCA9IFRSVUUpCgpjdXJ2ZShkZih4LCBkZjEgPTEwLCBkZjIgPSAxMCksCiAgICAgIGZyb20gPSAwLCB0byA9IDEwLAogICAgICBsd2QgPSAyLAogICAgICB5bGltID0gYygwLDEpLAogICAgICBsdHkgPSAyLAogICAgICBjb2wgPSAiYmx1ZSIsCiAgICAgIGFkZCA9IFRSVUUpCgpjdXJ2ZShkZih4LCBkZjEgPTEwMCwgZGYyID0gMTApLAogICAgICBmcm9tID0gMCwgdG8gPSAxMCwKICAgICAgbHdkID0gMiwKICAgICAgeWxpbSA9IGMoMCwxKSwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gIm9yYW5nZSIsCiAgICAgIGFkZCA9IFRSVUUpCgpsZWdlbmQoInRvcHJpZ2h0IiwKICAgICAgIGxlZ2VuZCA9IGMoIk4gKDAsMSkiLCAKICAgICAgICAgICAgICAgICAgcGFzdGUwKCJGIChkZj0iLCAyLCAiLCIsIDEwLCAgIikiKSwKICAgICAgICAgICAgICAgICAgcGFzdGUwKCJGIChkZj0iLCAxMCwgIiwiLCAgMTAsICAiKSIpLAogICAgICAgICAgICAgICAgICBwYXN0ZTAoIkYgKGRmPSIsIDEwMCwgIiwiLCAgMTAsICIpIikKICAgICAgICAgICAgICAgICAgKSwKICAgICAgIGNvbCA9IGMoImJsYWNrIiwgInJlZCIsICJibHVlIiwgIm9yYW5nZSIpLAogICAgICAgbHdkID0gMiwKICAgICAgIGx0eSA9IDEsCiAgICAgICBib3gubHdkID0gMykKCmBgYAoKTWVhbndoaWxlLCB0aGUgZGVub21pbmF0b3IgZGVncmVlcyBvZiBmcmVlZG9tIGNvbnRyb2xzIHRoZSBkaXN0cmlidXRpb24ncyBjb25jZW50cmF0aW9uLiBXZSBjYW4gc2VlIHZpYSB0aGUgZ3JhcGhpYyBiZWxvdyB0aGF0IGFuIGluY3JlYXNpbmcgZGVub21pbmF0b3IgZGVncmVlcyBvZiBmcmVlZG9tIGNvcnJlbGF0ZXMgd2l0aCB0aGUgcmVsYXRpdmUgcHJvYmFiaWxpdHkgZGVuc2l0eSAic3Bpa2luZyIgd2l0aGluIGEgc21hbGxlciBhbmQgbW9yZSBjb25maW5lZCByYW5nZSBvZiBjcml0aWNhbCB2YWx1ZXMuIEhlbmNlLCBpdCBpcyBtdWNoIG1vcmUgbGlrZWx5IGZvciBhIEYgZGlzdHJpYnV0aW9uIHdpdGggYSBzbWFsbGVyIGRlbm9taW5hdG9yIGRlZ3JlZXMgb2YgZnJlZWRvbSB0byBvdXRwdXQgYSBsYXJnZSBGIHN0YXRpc3RpYy4KCmBgYHtyIEYgRDIgUGxvdHMsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD02LjUsIGZpZy53aWR0aD02LjV9CiMjIyBOb3JtYWwgUERGIApjdXJ2ZShkbm9ybSh4LCBtZWFuID0gMCwgc2QgPSAxKSwKICAgICAgZnJvbSA9IDAsCiAgICAgIHRvID0gMTAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMSksCiAgICAgIG1haW4gPSAiTm9ybWFsIHZzIEYgRGlzdHJpYnV0aW9ucyIsCiAgICAgIHhsYWIgPSAiQ3JpdGljYWwgVmFsdWUiLAogICAgICB5bGFiID0gIlByb2JhYmlsaXR5IERlbnNpdHkiKQoKYm94KGx3ZCA9IDMpCgojIyMgRiBEaXN0cmlidXRpb24gUERGJ3MKCgpjdXJ2ZShkZih4LCBkZjEgPTEwLCBkZjIgPSAyKSwKICAgICAgZnJvbSA9IDAsIHRvID0gMTAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIGx0eSA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMSksCiAgICAgIGNvbCA9ICJyZWQiLAogICAgICBhZGQgPSBUUlVFKQoKY3VydmUoZGYoeCwgZGYxID0xMCwgZGYyID0gMTApLAogICAgICBmcm9tID0gMCwgdG8gPSAxMCwKICAgICAgbHdkID0gMiwKICAgICAgeWxpbSA9IGMoMCwxKSwKICAgICAgbHR5ID0gMiwKICAgICAgY29sID0gImJsdWUiLAogICAgICBhZGQgPSBUUlVFKQoKY3VydmUoZGYoeCwgZGYxID0xMCwgZGYyID0gMTAwKSwKICAgICAgZnJvbSA9IDAsIHRvID0gMTAsCiAgICAgIGx3ZCA9IDIsCiAgICAgIHlsaW0gPSBjKDAsMSksCiAgICAgIGx0eSA9IDIsCiAgICAgIGNvbCA9ICJvcmFuZ2UiLAogICAgICBhZGQgPSBUUlVFKQoKbGVnZW5kKCJ0b3ByaWdodCIsCiAgICAgICBsZWdlbmQgPSBjKCJOICgwLDEpIiwgCiAgICAgICAgICAgICAgICAgIHBhc3RlMCgiRiAoZGY9IiwgMTAsICIsIiwgMiwgICIpIiksCiAgICAgICAgICAgICAgICAgIHBhc3RlMCgiRiAoZGY9IiwgMTAsICIsIiwgIDEwLCAgIikiKSwKICAgICAgICAgICAgICAgICAgcGFzdGUwKCJGIChkZj0iLCAxMCwgIiwiLCAgMTAwLCAiKSIpCiAgICAgICAgICAgICAgICAgICksCiAgICAgICBjb2wgPSBjKCJibGFjayIsICJyZWQiLCAiYmx1ZSIsICJvcmFuZ2UiKSwKICAgICAgIGx3ZCA9IDIsCiAgICAgICBsdHkgPSAxLAogICAgICAgYm94Lmx3ZCA9IDMpCgpgYGAK