library(readr)
semiconductorFrame_1_ <- read_csv("D:/Education/Statistics/hw5/semiconductorFrame(1).csv")
New names:
* `` -> ...1
Rows: 20 Columns: 3
-- Column specification ----------------------------------------------------------------------------------------
Delimiter: ","
chr (1): solution
dbl (2): ...1, etchRate

i Use `spec()` to retrieve the full column specification for this data.
i Specify the column types or set `show_col_types = FALSE` to quiet this message.
View(semiconductorFrame_1_)
deflectionFrame <- read_csv("D:/Education/Statistics/hw5/deflectionFrame.csv")
New names:
* `` -> ...1
Rows: 30 Columns: 3
-- Column specification ----------------------------------------------------------------------------------------
Delimiter: ","
dbl (3): ...1, temp, type

i Use `spec()` to retrieve the full column specification for this data.
i Specify the column types or set `show_col_types = FALSE` to quiet this message.
View(deflectionFrame)

__not sure what this is

sOne = c(91.5, 94.18, 92.18, 95.39, 91.79, 89.07, 94.72, 89.21)
(var(sOne))^(1/2)
[1] 2.385019
mean(sOne)
[1] 92.255

#5-22 –a

qqnorm(DeflectionTemp1)
qqline(DeflectionTemp1)

qqnorm(DeflectionTemp2)
qqline(DeflectionTemp2)

library(ggplot2)
ggplot(deflectionFrame) + geom_boxplot(aes(x=as.factor(type), y=temp)) 

–From looking at the normal Q-Q plots we can see that both do not deviate to far from the line, therefore we can say each of the sets are normal. When we take a look at the box plots, we notice that the medians are not equal to each other. I don’t think the graphs can show us the difference in variances so I decided to find the variances using R code.(down below) <-along with a few other things

DeflectionTemp1 = c(206, 193, 192, 188, 207, 210, 205, 185, 194, 187, 189, 178, 194, 213, 205)
#mean(DeflectionTemp1)
#(var(DeflectionTemp1))^(1/2)
print(c("Mean 1", mean(DeflectionTemp1)))
[1] "Mean 1" "196.4" 
print(c("Standard Deviation 1", (var(DeflectionTemp1))^(1/2)))
[1] "Standard Deviation 1" "10.4799127586336"    
print(c("variance 1", (var(DeflectionTemp1))))
[1] "variance 1"       "109.828571428571"
DeflectionTemp2 = c(177, 176, 198, 197, 185, 188, 206, 200, 189, 201, 197, 203, 180, 192, 192)
#mean(DeflectionTemp2)
#(var(DeflectionTemp2))^(1/2)  
print(c("Mean 2", mean(DeflectionTemp2)))
[1] "Mean 2"           "192.066666666667"
print(c("Standard Deviation 2", (var(DeflectionTemp2))^(1/2)))
[1] "Standard Deviation 2" "9.43751379689941"    
print(c("variance 2", (var(DeflectionTemp2))))
[1] "variance 2"       "89.0666666666667"
t.test(temp~type, deflectionFrame, alternative = "g")

    Welch Two Sample t-test

data:  temp by type
t = 1.19, df = 27.698, p-value = 0.1221
alternative hypothesis: true difference in means between group 1 and group 2 is greater than 0
95 percent confidence interval:
 -1.863448       Inf
sample estimates:
mean in group 1 mean in group 2 
       196.4000        192.0667 

– using the t.test, we can find a p-value that is larger than our assumed alpha of 0.05. thus we can keep the null and conclude that the deflection temperature type 1 does exceed type 2.

t.test(DeflectionTemp1, DeflectionTemp2, mu = mean(DeflectionTemp1) - mean(DeflectionTemp2), alternative = "t", conf.level = 0.95)

    Welch Two Sample t-test

data:  DeflectionTemp1 and DeflectionTemp2
t = 0, df = 27.698, p-value = 1
alternative hypothesis: true difference in means is not equal to 4.333333
95 percent confidence interval:
 -3.129368 11.796035
sample estimates:
mean of x mean of y 
 196.4000  192.0667 

– not sure why we didn’t use this type of t.test to solve our problem. The p-value in this problem turned out to be 1, and I’m not sure why it is.

shapiro.test(DeflectionTemp1) 

    Shapiro-Wilk normality test

data:  DeflectionTemp1
W = 0.93989, p-value = 0.381
shapiro.test(DeflectionTemp2)

    Shapiro-Wilk normality test

data:  DeflectionTemp2
W = 0.94774, p-value = 0.4895

– Something extra^^

power.t.test(delta = 5, power = 0.9, sig.level = 0.05, sd = sd(deflectionFrame$temp), type = "t", alternative = "o")

     Two-sample t test power calculation 

              n = 69.79702
          delta = 5
             sd = 10.04364
      sig.level = 0.05
          power = 0.9
    alternative = one.sided

NOTE: n is number in *each* group

The choice of n1 = n2 = 15 is not adequate to use for this situation. when we do the power.t.test we can see that our n must at least be size of 70. With a size less than 70, we would be finding data that is most likely unreliable, and therefore should not be used.

#5-23

sol1 = c(9.9, 9.4, 9.3, 9.6, 10.2, 10.6, 10.3, 10.0, 10.3, 10.1)
sol2 = c(10.2, 10.6, 10.7, 10.4, 10.5, 10.0, 10.2, 10.7, 10.4, 10.3)
etchRates = c(sol1, sol2)
rep("sol1", 10)
rep("sol2", 10)
soltype = c(rep("sol1", 10), rep("sol2",10 ))
etchFrame = data.frame(etchRates, soltype)
etchFrame
mean(sol1)
[1] 9.97
mean(sol2)
[1] 10.4

– from looking at our menas for each set, we find that the mean etch rates are not equal to each other.

t.test(etchRates~soltype, etchFrame)

    Welch Two Sample t-test

data:  etchRates by soltype
t = -2.8278, df = 13.952, p-value = 0.01346
alternative hypothesis: true difference in means between group sol1 and group sol2 is not equal to 0
95 percent confidence interval:
 -0.7562424 -0.1037576
sample estimates:
mean in group sol1 mean in group sol2 
              9.97              10.40 

–t.test(etchRates, soltype, mu = (mean(sol1) - mean(sol2)), alternative = “t”, conf.level = 0.95) -Tried this code, thought this would be the perfect situation to use this, but wasn’t exactly sure how to use it. Tried to find etchrates for solution 1 and solution 2 separately.

– Found a p-value of 0.01346 which is less than 0.05, thus we can reject the null hypothesis.

  1. the 95% confidence interval is found using the Welch two sample t-test, which shows a confidence interval from -0.76 to -0.104.
library(ggplot2)
ggplot(etchFrame)+stat_qq(aes(sample = etchRates, col = soltype))+stat_qq_line(aes(sample = etchRates, col = soltype))

  1. This plot shows us that we do have normality amongst the values presented in each of the data sets, but the assumption of equal variances would be wrong, due to the interval in which each line is contained in. We also notice that the slopes of each line are different, which could show us evidence of not being equal data sets.

5-33

dose20 = c(24, 28, 37, 30)
dose30 = c(37, 44, 31, 35)
bioActive = c(dose20, dose30)
dose = c(rep("dose20", 4), rep("dose30", 4))
DoseFrame = data.frame(bioActive, dose)
qqnorm(dose20)
qqline(dose20)

qqnorm(dose30)
qqline(dose30)

ggplot(DoseFrame) + geom_boxplot(aes(x=as.factor(dose), y=bioActive))

  1. from looking at the box plot, we notice that the dose30 has substantially higher bio activity than dose20.
t.test(dose20, dose30, , alternative = "g")

    Welch Two Sample t-test

data:  dose20 and dose30
t = -1.8201, df = 6, p-value = 0.9407
alternative hypothesis: true difference in means is greater than 0
95 percent confidence interval:
 -14.47346       Inf
sample estimates:
mean of x mean of y 
    29.75     36.75 
  1. The difference in two means is greater than 0, which claims that the bio activity does change with the increase or decrease in dosage amounts.

  2. I do have a little bit of a concern for the normality of each of the sets, in the top right corner of the qqnorm plots for each set, we a see a value that deviates far from the qqline, comparatively to the other values.

5-43

Car=c(1:7)
Finite_elements = c(14.58,48.52, 97.22,113.99,174.73,212.72,277.38)
Equivalent_plate=c(14.76,49.1,99.99,117.53,181.22,220.14,294.80)
JournalofAircraft = data.frame(Car, Finite_elements, Equivalent_plate)
qqnorm(Finite_elements)
qqline(Finite_elements)

qqnorm(Equivalent_plate)
qqline(Equivalent_plate)

#5-43

library(readxl)
JournAir <- read_excel("D:/Education/Statistics/hw5/JournAir.xlsx")
View(JournAir)
#Car=c(1:7)
#Finite_elements = c(14.58,48.52, 97.22,113.99,174.73,212.72,277.38)
#Equivalent_plate=c(14.76,49.1,99.99,117.53,181.22,220.14,294.80)
#JournalofAircraft = data.frame(Car, Finite_elements, Equivalent_plate)
qqnorm(JournAir$finiteElement)
qqline(JournAir$finiteElement)

qqnorm(JournAir$equiPLate)
qqline(JournAir$equiPLate)

t.test(JournAir$finiteElement, JournAir$equiPLate, paired = T)

    Paired t-test

data:  JournAir$finiteElement and JournAir$equiPLate
t = -2.4501, df = 6, p-value = 0.04979
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -10.964397921  -0.007030651
sample estimates:
mean of the differences 
              -5.485714 

a.The p-value from our t.tests is less than our our 1 minus confidence interval, thus we can reject the null hypothesis. From the differences of means section of the code, we can conclude that means are not the same.

  1. The confidence interval -> -10.96 to -.007

#5-45

library(readxl)
ImpSteel <- read_excel("D:/Education/Statistics/hw5/ImpSteel.xlsx")
View(ImpSteel)
qqnorm(ImpSteel$T1)
qqline(ImpSteel$T1)

qqnorm(ImpSteel$T2)
qqline(ImpSteel$T2)

t.test(ImpSteel$T1, ImpSteel$T2, paired = T, conf.level = 0.99)

    Paired t-test

data:  ImpSteel$T1 and ImpSteel$T2
t = -3.4805, df = 7, p-value = 0.01026
alternative hypothesis: true difference in means is not equal to 0
99 percent confidence interval:
 -0.426159965  0.001159965
sample estimates:
mean of the differences 
                -0.2125 

–The p-value is greater than 0.01, and our confidence interval for this test is 0.01, thus we fail to reject the null hypothesis. From the paired t.test, we are shown that the difference in means is not equal to zero, so no, there is not sufficient evidence to conclude that both tests give the same mean impurity levels. In fact, we have sufficient evidence that supports the claim that we have non-equal means for the tests given.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0DQotLS0NCg0KYGBge3J9DQpsaWJyYXJ5KHJlYWRyKQ0Kc2VtaWNvbmR1Y3RvckZyYW1lXzFfIDwtIHJlYWRfY3N2KCJEOi9FZHVjYXRpb24vU3RhdGlzdGljcy9odzUvc2VtaWNvbmR1Y3RvckZyYW1lKDEpLmNzdiIpDQpWaWV3KHNlbWljb25kdWN0b3JGcmFtZV8xXykNCmRlZmxlY3Rpb25GcmFtZSA8LSByZWFkX2NzdigiRDovRWR1Y2F0aW9uL1N0YXRpc3RpY3MvaHc1L2RlZmxlY3Rpb25GcmFtZS5jc3YiKQ0KVmlldyhkZWZsZWN0aW9uRnJhbWUpDQpgYGANCg0KDQpfX25vdCBzdXJlIHdoYXQgdGhpcyBpcyANCmBgYHtyfQ0Kc09uZSA9IGMoOTEuNSwgOTQuMTgsIDkyLjE4LCA5NS4zOSwgOTEuNzksIDg5LjA3LCA5NC43MiwgODkuMjEpDQoodmFyKHNPbmUpKV4oMS8yKQ0KbWVhbihzT25lKQ0KYGBgDQojNS0yMg0KLS1hDQpgYGB7cn0NCnFxbm9ybShEZWZsZWN0aW9uVGVtcDEpDQpxcWxpbmUoRGVmbGVjdGlvblRlbXAxKQ0KcXFub3JtKERlZmxlY3Rpb25UZW1wMikNCnFxbGluZShEZWZsZWN0aW9uVGVtcDIpDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGVmbGVjdGlvbkZyYW1lKSArIGdlb21fYm94cGxvdChhZXMoeD1hcy5mYWN0b3IodHlwZSksIHk9dGVtcCkpIA0KYGBgDQotLUZyb20gbG9va2luZyBhdCB0aGUgbm9ybWFsIFEtUSBwbG90cyB3ZSBjYW4gc2VlIHRoYXQgYm90aCBkbyBub3QgZGV2aWF0ZSB0byBmYXIgZnJvbSB0aGUgbGluZSwgdGhlcmVmb3JlIHdlIGNhbiBzYXkgZWFjaCBvZiB0aGUgc2V0cyBhcmUgbm9ybWFsLiBXaGVuIHdlIHRha2UgYSBsb29rIGF0IHRoZSBib3ggcGxvdHMsIHdlIG5vdGljZSB0aGF0IHRoZSBtZWRpYW5zIGFyZSBub3QgZXF1YWwgdG8gZWFjaCBvdGhlci4gSSBkb24ndCB0aGluayB0aGUgZ3JhcGhzIGNhbiBzaG93IHVzIHRoZSBkaWZmZXJlbmNlIGluIHZhcmlhbmNlcyBzbyBJIGRlY2lkZWQgdG8gZmluZCB0aGUgdmFyaWFuY2VzIHVzaW5nIFIgY29kZS4oZG93biBiZWxvdykgPC1hbG9uZyB3aXRoIGEgZmV3IG90aGVyIHRoaW5ncw0KYGBge3J9DQpEZWZsZWN0aW9uVGVtcDEgPSBjKDIwNiwgMTkzLCAxOTIsIDE4OCwgMjA3LCAyMTAsIDIwNSwgMTg1LCAxOTQsIDE4NywgMTg5LCAxNzgsIDE5NCwgMjEzLCAyMDUpDQojbWVhbihEZWZsZWN0aW9uVGVtcDEpDQojKHZhcihEZWZsZWN0aW9uVGVtcDEpKV4oMS8yKQ0KcHJpbnQoYygiTWVhbiAxIiwgbWVhbihEZWZsZWN0aW9uVGVtcDEpKSkNCnByaW50KGMoIlN0YW5kYXJkIERldmlhdGlvbiAxIiwgKHZhcihEZWZsZWN0aW9uVGVtcDEpKV4oMS8yKSkpDQpwcmludChjKCJ2YXJpYW5jZSAxIiwgKHZhcihEZWZsZWN0aW9uVGVtcDEpKSkpDQoNCkRlZmxlY3Rpb25UZW1wMiA9IGMoMTc3LCAxNzYsIDE5OCwgMTk3LCAxODUsIDE4OCwgMjA2LCAyMDAsIDE4OSwgMjAxLCAxOTcsIDIwMywgMTgwLCAxOTIsIDE5MikNCiNtZWFuKERlZmxlY3Rpb25UZW1wMikNCiModmFyKERlZmxlY3Rpb25UZW1wMikpXigxLzIpICANCnByaW50KGMoIk1lYW4gMiIsIG1lYW4oRGVmbGVjdGlvblRlbXAyKSkpDQpwcmludChjKCJTdGFuZGFyZCBEZXZpYXRpb24gMiIsICh2YXIoRGVmbGVjdGlvblRlbXAyKSleKDEvMikpKQ0KcHJpbnQoYygidmFyaWFuY2UgMiIsICh2YXIoRGVmbGVjdGlvblRlbXAyKSkpKQ0KYGBgDQpiLg0KYGBge3J9DQp0LnRlc3QodGVtcH50eXBlLCBkZWZsZWN0aW9uRnJhbWUsIGFsdGVybmF0aXZlID0gImciKQ0KYGBgDQotLSB1c2luZyB0aGUgdC50ZXN0LCB3ZSBjYW4gZmluZCBhIHAtdmFsdWUgdGhhdCBpcyBsYXJnZXIgdGhhbiBvdXIgYXNzdW1lZCBhbHBoYSBvZiAwLjA1LiB0aHVzIHdlIGNhbiBrZWVwIHRoZSBudWxsIGFuZCBjb25jbHVkZSB0aGF0IHRoZSBkZWZsZWN0aW9uIHRlbXBlcmF0dXJlIHR5cGUgMSBkb2VzIGV4Y2VlZCB0eXBlIDIuDQpgYGB7cn0NCnQudGVzdChEZWZsZWN0aW9uVGVtcDEsIERlZmxlY3Rpb25UZW1wMiwgbXUgPSBtZWFuKERlZmxlY3Rpb25UZW1wMSkgLSBtZWFuKERlZmxlY3Rpb25UZW1wMiksIGFsdGVybmF0aXZlID0gInQiLCBjb25mLmxldmVsID0gMC45NSkNCmBgYA0KDQotLSBub3Qgc3VyZSB3aHkgd2UgZGlkbid0IHVzZSB0aGlzIHR5cGUgb2YgdC50ZXN0IHRvIHNvbHZlIG91ciBwcm9ibGVtLiBUaGUgcC12YWx1ZSBpbiB0aGlzIHByb2JsZW0gdHVybmVkIG91dCB0byBiZSAxLCBhbmQgSSdtIG5vdCBzdXJlIHdoeSBpdCBpcy4gDQoNCg0KYGBge3J9DQpzaGFwaXJvLnRlc3QoRGVmbGVjdGlvblRlbXAxKSANCnNoYXBpcm8udGVzdChEZWZsZWN0aW9uVGVtcDIpDQpgYGANCi0tIFNvbWV0aGluZyBleHRyYV5eDQoNCmMuDQpgYGB7cn0NCnBvd2VyLnQudGVzdChkZWx0YSA9IDUsIHBvd2VyID0gMC45LCBzaWcubGV2ZWwgPSAwLjA1LCBzZCA9IHNkKGRlZmxlY3Rpb25GcmFtZSR0ZW1wKSwgdHlwZSA9ICJ0IiwgYWx0ZXJuYXRpdmUgPSAibyIpDQpgYGANClRoZSBjaG9pY2Ugb2YgbjEgPSBuMiA9IDE1IGlzIG5vdCBhZGVxdWF0ZSB0byB1c2UgZm9yIHRoaXMgc2l0dWF0aW9uLiB3aGVuIHdlIGRvIHRoZSBwb3dlci50LnRlc3Qgd2UgY2FuIHNlZSB0aGF0IG91ciBuIG11c3QgYXQgbGVhc3QgYmUgc2l6ZSBvZiA3MC4gV2l0aCBhIHNpemUgbGVzcyB0aGFuIDcwLCB3ZSB3b3VsZCBiZSBmaW5kaW5nIGRhdGEgdGhhdCBpcyBtb3N0IGxpa2VseSB1bnJlbGlhYmxlLCBhbmQgdGhlcmVmb3JlIHNob3VsZCBub3QgYmUgdXNlZC4gDQoNCg0KIzUtMjMNCmBgYHtyfQ0Kc29sMSA9IGMoOS45LCA5LjQsIDkuMywgOS42LCAxMC4yLCAxMC42LCAxMC4zLCAxMC4wLCAxMC4zLCAxMC4xKQ0Kc29sMiA9IGMoMTAuMiwgMTAuNiwgMTAuNywgMTAuNCwgMTAuNSwgMTAuMCwgMTAuMiwgMTAuNywgMTAuNCwgMTAuMykNCmBgYA0KYGBge3J9DQpldGNoUmF0ZXMgPSBjKHNvbDEsIHNvbDIpDQpyZXAoInNvbDEiLCAxMCkNCnJlcCgic29sMiIsIDEwKQ0Kc29sdHlwZSA9IGMocmVwKCJzb2wxIiwgMTApLCByZXAoInNvbDIiLDEwICkpDQpgYGANCg0KYGBge3J9DQpldGNoRnJhbWUgPSBkYXRhLmZyYW1lKGV0Y2hSYXRlcywgc29sdHlwZSkNCmV0Y2hGcmFtZQ0KYGBgDQphLg0KYGBge3J9DQptZWFuKHNvbDEpDQpgYGANCmBgYHtyfQ0KbWVhbihzb2wyKQ0KYGBgDQotLSBmcm9tIGxvb2tpbmcgYXQgb3VyIG1lbmFzIGZvciBlYWNoIHNldCwgd2UgZmluZCB0aGF0IHRoZSBtZWFuIGV0Y2ggcmF0ZXMgYXJlIG5vdCBlcXVhbCB0byBlYWNoIG90aGVyLiANCg0KYGBge3J9DQp0LnRlc3QoZXRjaFJhdGVzfnNvbHR5cGUsIGV0Y2hGcmFtZSkNCmBgYA0KLS10LnRlc3QoZXRjaFJhdGVzLCBzb2x0eXBlLCBtdSA9IChtZWFuKHNvbDEpIC0gbWVhbihzb2wyKSksIGFsdGVybmF0aXZlID0gInQiLCBjb25mLmxldmVsID0gMC45NSkNCi1UcmllZCB0aGlzIGNvZGUsIHRob3VnaHQgdGhpcyB3b3VsZCBiZSB0aGUgcGVyZmVjdCBzaXR1YXRpb24gdG8gdXNlIHRoaXMsIGJ1dCB3YXNuJ3QgZXhhY3RseSBzdXJlIGhvdyB0byB1c2UgaXQuIFRyaWVkIHRvIGZpbmQgZXRjaHJhdGVzIGZvciBzb2x1dGlvbiAxIGFuZCBzb2x1dGlvbiAyIHNlcGFyYXRlbHkuDQoNCi0tIEZvdW5kIGEgcC12YWx1ZSBvZiAwLjAxMzQ2IHdoaWNoIGlzIGxlc3MgdGhhbiAwLjA1LCB0aHVzIHdlIGNhbiByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcy4NCg0KYy4NCnRoZSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBpcyBmb3VuZCB1c2luZyB0aGUgV2VsY2ggdHdvIHNhbXBsZSB0LXRlc3QsIHdoaWNoIHNob3dzIGEgY29uZmlkZW5jZSBpbnRlcnZhbCBmcm9tIC0wLjc2IHRvIC0wLjEwNC4NCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZXRjaEZyYW1lKStzdGF0X3FxKGFlcyhzYW1wbGUgPSBldGNoUmF0ZXMsIGNvbCA9IHNvbHR5cGUpKStzdGF0X3FxX2xpbmUoYWVzKHNhbXBsZSA9IGV0Y2hSYXRlcywgY29sID0gc29sdHlwZSkpDQpgYGANCmQuDQpUaGlzIHBsb3Qgc2hvd3MgdXMgdGhhdCB3ZSBkbyBoYXZlIG5vcm1hbGl0eSBhbW9uZ3N0IHRoZSB2YWx1ZXMgcHJlc2VudGVkIGluIGVhY2ggb2YgdGhlIGRhdGEgc2V0cywgYnV0IHRoZSBhc3N1bXB0aW9uIG9mIGVxdWFsIHZhcmlhbmNlcyB3b3VsZCBiZSB3cm9uZywgZHVlIHRvIHRoZSBpbnRlcnZhbCBpbiB3aGljaCBlYWNoIGxpbmUgaXMgY29udGFpbmVkIGluLiBXZSBhbHNvIG5vdGljZSB0aGF0IHRoZSBzbG9wZXMgb2YgZWFjaCBsaW5lIGFyZSBkaWZmZXJlbnQsIHdoaWNoIGNvdWxkIHNob3cgdXMgZXZpZGVuY2Ugb2Ygbm90IGJlaW5nIGVxdWFsIGRhdGEgc2V0cy4gIA0KDQo1LTMzDQpgYGB7cn0NCmRvc2UyMCA9IGMoMjQsIDI4LCAzNywgMzApDQpkb3NlMzAgPSBjKDM3LCA0NCwgMzEsIDM1KQ0KYmlvQWN0aXZlID0gYyhkb3NlMjAsIGRvc2UzMCkNCmRvc2UgPSBjKHJlcCgiZG9zZTIwIiwgNCksIHJlcCgiZG9zZTMwIiwgNCkpDQpEb3NlRnJhbWUgPSBkYXRhLmZyYW1lKGJpb0FjdGl2ZSwgZG9zZSkNCnFxbm9ybShkb3NlMjApDQpxcWxpbmUoZG9zZTIwKQ0KcXFub3JtKGRvc2UzMCkNCnFxbGluZShkb3NlMzApDQpnZ3Bsb3QoRG9zZUZyYW1lKSArIGdlb21fYm94cGxvdChhZXMoeD1hcy5mYWN0b3IoZG9zZSksIHk9YmlvQWN0aXZlKSkNCmBgYA0KYS4NCmZyb20gbG9va2luZyBhdCB0aGUgYm94IHBsb3QsIHdlIG5vdGljZSB0aGF0IHRoZSBkb3NlMzAgaGFzIHN1YnN0YW50aWFsbHkgaGlnaGVyIGJpbyBhY3Rpdml0eSB0aGFuIGRvc2UyMC4NCmBgYHtyfQ0KdC50ZXN0KGRvc2UyMCwgZG9zZTMwLCAsIGFsdGVybmF0aXZlID0gImciKQ0KYGBgDQpiLiANClRoZSBkaWZmZXJlbmNlIGluIHR3byBtZWFucyBpcyBncmVhdGVyIHRoYW4gMCwgd2hpY2ggY2xhaW1zIHRoYXQgdGhlIGJpbyBhY3Rpdml0eSBkb2VzIGNoYW5nZSB3aXRoIHRoZSBpbmNyZWFzZSBvciBkZWNyZWFzZSBpbiBkb3NhZ2UgYW1vdW50cy4NCg0KYy4gDQpJIGRvIGhhdmUgYSBsaXR0bGUgYml0IG9mIGEgY29uY2VybiBmb3IgdGhlIG5vcm1hbGl0eSBvZiBlYWNoIG9mIHRoZSBzZXRzLCBpbiB0aGUgdG9wIHJpZ2h0IGNvcm5lciBvZiB0aGUgcXFub3JtIHBsb3RzIGZvciBlYWNoIHNldCwgd2UgYSBzZWUgYSB2YWx1ZSB0aGF0IGRldmlhdGVzIGZhciBmcm9tIHRoZSBxcWxpbmUsIGNvbXBhcmF0aXZlbHkgdG8gdGhlIG90aGVyIHZhbHVlcy4gDQoNCg0KNS00Mw0KYGBge3J9DQpDYXI9YygxOjcpDQpGaW5pdGVfZWxlbWVudHMgPSBjKDE0LjU4LDQ4LjUyLCA5Ny4yMiwxMTMuOTksMTc0LjczLDIxMi43MiwyNzcuMzgpDQpFcXVpdmFsZW50X3BsYXRlPWMoMTQuNzYsNDkuMSw5OS45OSwxMTcuNTMsMTgxLjIyLDIyMC4xNCwyOTQuODApDQpKb3VybmFsb2ZBaXJjcmFmdCA9IGRhdGEuZnJhbWUoQ2FyLCBGaW5pdGVfZWxlbWVudHMsIEVxdWl2YWxlbnRfcGxhdGUpDQpxcW5vcm0oRmluaXRlX2VsZW1lbnRzKQ0KcXFsaW5lKEZpbml0ZV9lbGVtZW50cykNCnFxbm9ybShFcXVpdmFsZW50X3BsYXRlKQ0KcXFsaW5lKEVxdWl2YWxlbnRfcGxhdGUpDQpgYGANCg0KIzUtNDMNCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQpKb3VybkFpciA8LSByZWFkX2V4Y2VsKCJEOi9FZHVjYXRpb24vU3RhdGlzdGljcy9odzUvSm91cm5BaXIueGxzeCIpDQpWaWV3KEpvdXJuQWlyKQ0KYGBgDQoNCmBgYHtyfQ0KcXFub3JtKEpvdXJuQWlyJGZpbml0ZUVsZW1lbnQpDQpxcWxpbmUoSm91cm5BaXIkZmluaXRlRWxlbWVudCkNCnFxbm9ybShKb3VybkFpciRlcXVpUExhdGUpDQpxcWxpbmUoSm91cm5BaXIkZXF1aVBMYXRlKQ0KYGBgDQoNCg0KYGBge3J9DQp0LnRlc3QoSm91cm5BaXIkZmluaXRlRWxlbWVudCwgSm91cm5BaXIkZXF1aVBMYXRlLCBwYWlyZWQgPSBUKQ0KDQpgYGANCmEuVGhlIHAtdmFsdWUgZnJvbSBvdXIgdC50ZXN0cyBpcyBsZXNzIHRoYW4gb3VyIG91ciAxIG1pbnVzIGNvbmZpZGVuY2UgaW50ZXJ2YWwsIHRodXMgd2UgY2FuIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzLiBGcm9tIHRoZSBkaWZmZXJlbmNlcyBvZiBtZWFucyBzZWN0aW9uIG9mIHRoZSBjb2RlLCB3ZSBjYW4gY29uY2x1ZGUgdGhhdCBtZWFucyBhcmUgbm90IHRoZSBzYW1lLg0KDQpiLg0KVGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgLT4gLTEwLjk2IHRvIC0uMDA3DQoNCg0KDQojNS00NQ0KYGBge3J9DQpsaWJyYXJ5KHJlYWR4bCkNCkltcFN0ZWVsIDwtIHJlYWRfZXhjZWwoIkQ6L0VkdWNhdGlvbi9TdGF0aXN0aWNzL2h3NS9JbXBTdGVlbC54bHN4IikNClZpZXcoSW1wU3RlZWwpDQpgYGANCg0KYGBge3J9DQpxcW5vcm0oSW1wU3RlZWwkVDEpDQpxcWxpbmUoSW1wU3RlZWwkVDEpDQpxcW5vcm0oSW1wU3RlZWwkVDIpDQpxcWxpbmUoSW1wU3RlZWwkVDIpDQpgYGANCg0KYGBge3J9DQp0LnRlc3QoSW1wU3RlZWwkVDEsIEltcFN0ZWVsJFQyLCBwYWlyZWQgPSBULCBjb25mLmxldmVsID0gMC45OSkNCmBgYA0KLS1UaGUgcC12YWx1ZSBpcyBncmVhdGVyIHRoYW4gMC4wMSwgYW5kIG91ciBjb25maWRlbmNlIGludGVydmFsIGZvciB0aGlzIHRlc3QgaXMgMC4wMSwgdGh1cyB3ZSBmYWlsIHRvIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzLiBGcm9tIHRoZSBwYWlyZWQgdC50ZXN0LCB3ZSBhcmUgc2hvd24gdGhhdCB0aGUgZGlmZmVyZW5jZSBpbiBtZWFucyBpcyBub3QgZXF1YWwgdG8gemVybywgc28gbm8sIHRoZXJlIGlzIG5vdCBzdWZmaWNpZW50IGV2aWRlbmNlIHRvIGNvbmNsdWRlIHRoYXQgYm90aCB0ZXN0cyBnaXZlIHRoZSBzYW1lIG1lYW4gaW1wdXJpdHkgbGV2ZWxzLiBJbiBmYWN0LCB3ZSBoYXZlIHN1ZmZpY2llbnQgZXZpZGVuY2UgdGhhdCBzdXBwb3J0cyB0aGUgY2xhaW0gdGhhdCB3ZSBoYXZlIG5vbi1lcXVhbCBtZWFucyBmb3IgdGhlIHRlc3RzIGdpdmVuLiANCg0K