## Warning: package 'tidyverse' was built under R version 4.0.2
## Warning: package 'tibble' was built under R version 4.0.3
## Warning: package 'tidyr' was built under R version 4.0.2
## Warning: package 'dplyr' was built under R version 4.0.2
## Warning: package 'openintro' was built under R version 4.0.2
## Warning: package 'airports' was built under R version 4.0.2
## Warning: package 'cherryblossom' was built under R version 4.0.2
## Warning: package 'usdata' was built under R version 4.0.2
## Warning: package 'infer' was built under R version 4.0.2
## [1] "C:/Users/Jerome/Documents/From_Toshiba_HD_Work_Files/0000_Montgomery_College/Math_217/Week_10/201108_Math217_Lab6"
Exercise 1 Counts in each category of texted while driving
Insert any text here.
table(yrbss$text_while_driving_30d)
##
## 0 1-2 10-19 20-29 3-5
## 4792 925 373 298 493
## 30 6-9 did not drive
## 827 311 4646
Exercise 2 Proportion of people who hae texted while driving every day in the past 30 days and never wear helmets
no_helmet <- yrbss %>%
filter(helmet_12m =="never")
no_helmet <- no_helmet %>%
mutate(text_ind = ifelse(text_while_driving_30d == "30", "yes", "no"))
table (no_helmet$text_ind)
##
## no yes
## 6040 463
## [1] 6.63609
The proportion of people who have texted while driving every day in the past 30 days and never wear helmets is 6.636%.
Exercise 3 - Margin of Error for the estimate of the proportion of non-helmet wearers that have texted while driving each da for the past 30 days based on this survey?
no_helmet %>%
specify(response = text_ind, success = "yes") %>%
generate(reps = 1000, type = "bootstrap") %>%
calculate(stat = "prop") %>%
get_ci(level = 0.95)
## Warning: Removed 474 rows containing missing values.
## # A tibble: 1 x 2
## lower_ci upper_ci
## <dbl> <dbl>
## 1 0.0649 0.0778
But this code did not calculate a proportion. It only gave the CI. I deleted the get_ci command and got an error - it wouldn’t run. I looked at your code to calculate the margin of error in the Chapter 6 notes, but I have data in this problem with which I could compute the margin of error. text_ind is a categorical variable - i can’t calculate a mean and sd. So how do i do this??
Use <- R-Code to solve this: monarch 3 / , Mi/0cvn cw^ Z meanjength <- s <- sd( SE <- s/sqrt( n) E <- qt( .975, df=n-l )*SE meanjength + c(-E, E) tT& n # Use the sample size from the problem # Use the mean value from the problem # Use the st. dev. from the problem CtA ) # margin of error # This will give the lower and upper bounds of the Cl
Exercise 4
Create New Variables
hrs_tv <- yrbss %>%
filter(hours_tv_per_school_day == "do not watch")
hrs_tv <- hrs_tv %>%
mutate(text_ind = ifelse(text_while_driving_30d == "30", "yes", "no"))
hrs_tv %>%
specify(response = text_ind, success = "yes") %>%
generate(reps = 1000, type = "bootstrap") %>%
calculate(stat = "prop") %>%
get_ci(level = 0.95)
## Warning: Removed 118 rows containing missing values.
## # A tibble: 1 x 2
## lower_ci upper_ci
## <dbl> <dbl>
## 1 0.0540 0.0772
no_ride <- yrbss %>%
filter(helmet_12m == "did not ride")
no_ride <- no_ride %>%
mutate(text_ind = ifelse(text_while_driving_30d == "30", "yes", "no"))
no_ride %>%
specify(response = text_ind, success = "yes") %>%
generate(reps = 1000, type = "bootstrap") %>%
calculate(stat = "prop") %>%
get_ci(level = 0.95)
## Warning: Removed 324 rows containing missing values.
## # A tibble: 1 x 2
## lower_ci upper_ci
## <dbl> <dbl>
## 1 0.0622 0.0776
Exercise 5
n <- 1000
p <- seq(from = 0, to = 1, by =0.01)
me <- 2 * sqrt(p * (1 - p)/n)
dd <- data.frame(p = p, me = me)
ggplot(data = dd, aes (x = p, y = me)) +
geom_line() +
labs(x = "Population Proportion", y = "Margin of Error")

The answer to question 5 seems to be the margin of error is greatest when the population proportion is 0.50 and least when it is either 0 or 1.0 But since interviewing no one makes no sense and interviewing everyone is financially impossible (in most cases), we are left with working towards the middle.
Exercise 6
Exercise 6
Describe the sampling distribution of sample proportions at n=300 and p=0.1. Be sure to note the center, spread, and shape.
# Center
n<-300
p <- .1
center <- n*p
# Spread
se <- sqrt(p * (1 - p)/n)
center
## [1] 30
## [1] 0.01732051
Exercise 7 - Change P
# Center
n<-300
p <- .5
center <- n*p
# Spread
se <- sqrt(p * (1 - p)/n)
center
## [1] 150
## [1] 0.02886751
Exercise 8 - Change n
# Center
n<-200
p <- .1
center <- n*p
# Spread
se <- sqrt(p * (1 - p)/n)
center
## [1] 20
## [1] 0.0212132
# Center
m<-500
o <- .1
center <- m*o
# Spread
se <- sqrt(o * (1 - o)/m)
center
## [1] 50
## [1] 0.01341641
df <- data.frame(p = p, se = se)
ggplot(data = df, aes (x = p, y = se)) +
geom_line() +
labs(x = "Population Proportion", y = "Standard Error")
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?

Exercise 9 There’s a lot of code here that is irrelevant. I have no idea what the Lab wants me to do.
I finally found the prop.test command and ran that.
table(yrbss$strength_training_7d)
##
## 0 1 2 3 4 5 6 7
## 3632 1012 1305 1468 1059 1333 513 2085
table(yrbss$school_night_hours_sleep)
##
## <5 10+ 5 6 7 8 9
## 965 316 1480 2658 3461 2692 763
strength <- yrbss %>%
filter(strength_training_7d >= "4")
sleep <- yrbss %>%
filter (school_night_hours_sleep >= "8")
strength <- strength %>%
mutate(text_ind = ifelse(strength_training_7d > "5", "yes", "no"))
strength %>%
specify(response = text_ind, success = "yes") %>%
generate(reps = 1000, type = "bootstrap") %>%
calculate(stat = "prop") %>%
get_ci(level = 0.95)
## # A tibble: 1 x 2
## lower_ci upper_ci
## <dbl> <dbl>
## 1 0.507 0.534
##
## no yes
## 2392 2598
sleep <- sleep %>%
mutate(text_ind = ifelse(school_night_hours_sleep > "8", "yes", "no"))
##
## no yes
## 2692 763
sleep %>%
specify(response = text_ind, success = "yes") %>%
generate(reps = 1000, type = "bootstrap") %>%
calculate(stat = "prop") %>%
get_ci(level = 0.95)
## # A tibble: 1 x 2
## lower_ci upper_ci
## <dbl> <dbl>
## 1 0.206 0.234
prop.test (c(2598, 763), c(4990,3455))
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(2598, 763) out of c(4990, 3455)
## X-squared = 764.6, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.2799752 0.3196286
## sample estimates:
## prop 1 prop 2
## 0.5206413 0.2208394
Problem 10 is likewise confusing. What’s the question asking? A difference in proportion between those who sleep more than 10 hours/day and those who exercise 7 days/week? But that’s not how the question is worded. Does it mean those who strength train 7 days/week vs. those who don’t, for everyone who sleeps 10+ hours/week?
All the nonsense below (till problem 11) is my attempt to figure this out. I think I failed. I found there are 316 cases in the file in which sleep == 10+. I divided those 316 cases into those who exercised 7 days/week (84 cases) and those who didn’t (232). There is obviously a statistically significant difference in those proportions. (See the calculations.) What’s the probability I could detect a change? A change in what? How much of a change? What’s changing? I still maintain this question makes no sense. I reviewed the definition of a Type I error. I suppose I could say I have a 5% chance of detecting a change, since the only 2 numbers I have w/ the null hypothesis under the facts of the problem are 95% and 5%, and saying I have a 95% chance of detecting a change makes no sense - that’s like saying I have a 100% chance, which I don’t.
table(yrbss$strength_training_7d)
##
## 0 1 2 3 4 5 6 7
## 3632 1012 1305 1468 1059 1333 513 2085
table(yrbss$school_night_hours_sleep)
##
## <5 10+ 5 6 7 8 9
## 965 316 1480 2658 3461 2692 763
yrbss <- yrbss %>%
mutate(text_ind1 = ifelse(school_night_hours_sleep == "10+", "yes", "no"))
strength7 <- yrbss %>%
filter(text_ind1 == "yes")
table(strength7$strength_training_7d)
##
## 0 1 2 3 4 5 6 7
## 100 17 31 31 18 23 8 84
strength7 <- strength7 %>%
mutate(text_ind2 = ifelse(strength_training_7d == "7", "yes", "no"))
prop.test (c(232, 84), c(316,316))
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(232, 84) out of c(316, 316)
## X-squared = 136.77, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.3963062 0.5404026
## sample estimates:
## prop 1 prop 2
## 0.7341772 0.2658228
Problem 11
The answer is “it depends.” An assumption must be made about the proportion. If, for example, the proportion of churchgoers is assumed to be either 25% or 75%, the sample size will be smaller than if the the proportion of churchgoers approaches 50%. In other words, the more extreme the difference in proportion between churchgoers and non-churchgoers, the smaller the sample size is needed.
As explained in Example 9.6.6 and Example 9.6.7, the way to approach this problem is to assume a proportion of 50%, which will give the maximum sample size needed. Using the Wilson correction, the sample size would be 9600 observations.
LS0tDQp0aXRsZTogIjIwMTEwOF9NYXRoMjE3X0xhYjYiDQphdXRob3I6ICJyamEiDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydA0KLS0tDQoNCmBgYHtyIGxvYWQtcGFja2FnZXMsIG1lc3NhZ2U9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkob3BlbmludHJvKQ0KbGlicmFyeShpbmZlcikNCmdldHdkKCkNCmRhdGEoeXJic3MpDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDEgQ291bnRzIGluIGVhY2ggY2F0ZWdvcnkgb2YgdGV4dGVkIHdoaWxlIGRyaXZpbmcNCg0KSW5zZXJ0IGFueSB0ZXh0IGhlcmUuDQoNCmBgYHtyIGNvZGUtY2h1bmstbGFiZWx9DQp0YWJsZSh5cmJzcyR0ZXh0X3doaWxlX2RyaXZpbmdfMzBkKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSAyIFByb3BvcnRpb24gb2YgcGVvcGxlIHdobyBoYWUgdGV4dGVkIHdoaWxlIGRyaXZpbmcgZXZlcnkgZGF5IGluIHRoZSBwYXN0IDMwIGRheXMgYW5kIG5ldmVyIHdlYXIgaGVsbWV0cw0KDQoNCmBgYHtyfQ0Kbm9faGVsbWV0IDwtIHlyYnNzICU+JQ0KICBmaWx0ZXIoaGVsbWV0XzEybSA9PSJuZXZlciIpDQoNCiAgDQpgYGANCg0KDQpgYGB7cn0NCm5vX2hlbG1ldCA8LSBub19oZWxtZXQgJT4lDQptdXRhdGUodGV4dF9pbmQgPSBpZmVsc2UodGV4dF93aGlsZV9kcml2aW5nXzMwZCA9PSAiMzAiLCAieWVzIiwgIm5vIikpDQpgYGANCg0KDQpgYGB7cn0NCnRhYmxlIChub19oZWxtZXQkdGV4dF9pbmQpDQpgYGANCg0KYGBge3J9DQooNDYzLzY5NzcpKjEwMA0KYGBgDQpUaGUgcHJvcG9ydGlvbiBvZiBwZW9wbGUgd2hvIGhhdmUgdGV4dGVkIHdoaWxlIGRyaXZpbmcgZXZlcnkgZGF5IGluIHRoZSBwYXN0IDMwIGRheXMNCmFuZCBuZXZlciB3ZWFyIGhlbG1ldHMgaXMgNi42MzYlLg0KDQojIyMgRXhlcmNpc2UgMyAtIE1hcmdpbiBvZiBFcnJvciBmb3IgdGhlIGVzdGltYXRlIG9mIHRoZSBwcm9wb3J0aW9uIG9mIG5vbi1oZWxtZXQgd2VhcmVycyB0aGF0IGhhdmUgdGV4dGVkIHdoaWxlIGRyaXZpbmcgZWFjaCBkYSBmb3IgdGhlIHBhc3QgMzAgZGF5cyBiYXNlZCBvbiB0aGlzIHN1cnZleT8NCg0KYGBge3J9DQpub19oZWxtZXQgJT4lDQogIHNwZWNpZnkocmVzcG9uc2UgPSB0ZXh0X2luZCwgc3VjY2VzcyA9ICJ5ZXMiKSAlPiUNCiAgZ2VuZXJhdGUocmVwcyA9IDEwMDAsIHR5cGUgPSAiYm9vdHN0cmFwIikgJT4lDQogIGNhbGN1bGF0ZShzdGF0ID0gInByb3AiKSAlPiUNCiAgZ2V0X2NpKGxldmVsID0gMC45NSkNCmBgYA0KDQpCdXQgdGhpcyBjb2RlIGRpZCBub3QgY2FsY3VsYXRlIGEgcHJvcG9ydGlvbi4gSXQgb25seSBnYXZlIHRoZSBDSS4gIEkgZGVsZXRlZCB0aGUgZ2V0X2NpIGNvbW1hbmQNCmFuZCBnb3QgYW4gZXJyb3IgLSBpdCB3b3VsZG4ndCBydW4uIEkgbG9va2VkIGF0IHlvdXIgY29kZSB0byBjYWxjdWxhdGUgdGhlIG1hcmdpbiBvZiBlcnJvciBpbiB0aGUgDQpDaGFwdGVyIDYgbm90ZXMsIGJ1dCBJIGhhdmUgZGF0YSBpbiB0aGlzIHByb2JsZW0gd2l0aCB3aGljaCBJIGNvdWxkIGNvbXB1dGUgdGhlIG1hcmdpbiBvZiBlcnJvci4gdGV4dF9pbmQNCmlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgLSBpIGNhbid0IGNhbGN1bGF0ZSBhIG1lYW4gYW5kIHNkLiBTbyBob3cgZG8gaSBkbyB0aGlzPz8NCg0KDQpVc2UgPC0gUi1Db2RlIHRvIHNvbHZlIHRoaXM6IG1vbmFyY2ggMyAvICwgTWkvMGN2biBjd14gWg0KbWVhbmplbmd0aCA8LQ0KcyA8LSBzZCgNClNFIDwtIHMvc3FydCggbikNCkUgPC0gcXQoIC45NzUsIGRmPW4tbCApKlNFDQptZWFuamVuZ3RoICsgYygtRSwgRSkNCnRUXGUgJiBuDQojIFVzZSB0aGUgc2FtcGxlIHNpemUgZnJvbSB0aGUgcHJvYmxlbQ0KIyBVc2UgdGhlIG1lYW4gdmFsdWUgZnJvbSB0aGUgcHJvYmxlbQ0KIyBVc2UgdGhlIHN0LiBkZXYuIGZyb20gdGhlIHByb2JsZW0NCkN0QQ0KKQ0KIyBtYXJnaW4gb2YgZXJyb3INCiMgVGhpcyB3aWxsIGdpdmUgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZHMgb2YgdGhlIENsDQoNCg0KIyMjIEV4ZXJjaXNlIDQNCg0KIyMjIyBDcmVhdGUgTmV3IFZhcmlhYmxlcyANCg0KYGBge3J9DQpocnNfdHYgPC0geXJic3MgJT4lDQogIGZpbHRlcihob3Vyc190dl9wZXJfc2Nob29sX2RheSA9PSAiZG8gbm90IHdhdGNoIikNCmBgYA0KDQoNCmBgYHtyfQ0KaHJzX3R2IDwtIGhyc190diAlPiUNCm11dGF0ZSh0ZXh0X2luZCA9IGlmZWxzZSh0ZXh0X3doaWxlX2RyaXZpbmdfMzBkID09ICIzMCIsICJ5ZXMiLCAibm8iKSkNCmBgYA0KDQoNCmBgYHtyfQ0KaHJzX3R2ICU+JQ0KICBzcGVjaWZ5KHJlc3BvbnNlID0gdGV4dF9pbmQsIHN1Y2Nlc3MgPSAieWVzIikgJT4lDQogIGdlbmVyYXRlKHJlcHMgPSAxMDAwLCB0eXBlID0gImJvb3RzdHJhcCIpICU+JQ0KICBjYWxjdWxhdGUoc3RhdCA9ICJwcm9wIikgJT4lDQogIGdldF9jaShsZXZlbCA9IDAuOTUpDQpgYGANCg0KDQpgYGB7cn0NCm5vX3JpZGUgPC0geXJic3MgJT4lDQogIGZpbHRlcihoZWxtZXRfMTJtID09ICJkaWQgbm90IHJpZGUiKQ0KYGBgDQoNCg0KYGBge3J9DQpub19yaWRlIDwtIG5vX3JpZGUgJT4lDQptdXRhdGUodGV4dF9pbmQgPSBpZmVsc2UodGV4dF93aGlsZV9kcml2aW5nXzMwZCA9PSAiMzAiLCAieWVzIiwgIm5vIikpDQpgYGANCg0KYGBge3J9DQpub19yaWRlICU+JQ0KICBzcGVjaWZ5KHJlc3BvbnNlID0gdGV4dF9pbmQsIHN1Y2Nlc3MgPSAieWVzIikgJT4lDQogIGdlbmVyYXRlKHJlcHMgPSAxMDAwLCB0eXBlID0gImJvb3RzdHJhcCIpICU+JQ0KICBjYWxjdWxhdGUoc3RhdCA9ICJwcm9wIikgJT4lDQogIGdldF9jaShsZXZlbCA9IDAuOTUpDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDUgDQoNCmBgYHtyfQ0KbiA8LSAxMDAwDQpwIDwtIHNlcShmcm9tID0gMCwgdG8gPSAxLCBieSA9MC4wMSkNCm1lIDwtIDIgKiBzcXJ0KHAgKiAoMSAtIHApL24pDQpgYGANCg0KDQpgYGB7cn0NCmRkIDwtIGRhdGEuZnJhbWUocCA9IHAsIG1lID0gbWUpDQpnZ3Bsb3QoZGF0YSA9IGRkLCBhZXMgKHggPSBwLCB5ID0gbWUpKSArDQogIGdlb21fbGluZSgpICsNCiAgbGFicyh4ID0gIlBvcHVsYXRpb24gUHJvcG9ydGlvbiIsIHkgPSAiTWFyZ2luIG9mIEVycm9yIikNCmBgYA0KDQpUaGUgYW5zd2VyIHRvIHF1ZXN0aW9uIDUgc2VlbXMgdG8gYmUgdGhlIG1hcmdpbiBvZiBlcnJvciBpcyBncmVhdGVzdCB3aGVuIHRoZSBwb3B1bGF0aW9uDQpwcm9wb3J0aW9uIGlzIDAuNTAgYW5kIGxlYXN0IHdoZW4gaXQgaXMgZWl0aGVyIDAgb3IgMS4wIEJ1dCBzaW5jZSBpbnRlcnZpZXdpbmcgbm8gb25lIG1ha2VzIA0Kbm8gc2Vuc2UgYW5kIGludGVydmlld2luZyBldmVyeW9uZSBpcyBmaW5hbmNpYWxseSBpbXBvc3NpYmxlIChpbiBtb3N0IGNhc2VzKSwgd2UgYXJlIGxlZnQgDQp3aXRoIHdvcmtpbmcgdG93YXJkcyB0aGUgbWlkZGxlLiANCg0KDQojIyMgRXhlcmNpc2UgNg0KDQojIyMgRXhlcmNpc2UgNg0KDQpEZXNjcmliZSB0aGUgc2FtcGxpbmcgZGlzdHJpYnV0aW9uIG9mIHNhbXBsZSBwcm9wb3J0aW9ucyBhdCBuPTMwMCBhbmQgcD0wLjEuIEJlIHN1cmUgdG8gbm90ZSB0aGUgY2VudGVyLCBzcHJlYWQsIGFuZCBzaGFwZS4NCg0KDQpgYGB7cn0NCg0KIyBDZW50ZXINCm48LTMwMA0KcCA8LSAuMQ0KY2VudGVyIDwtIG4qcA0KDQojIFNwcmVhZA0KDQpzZSA8LSBzcXJ0KHAgKiAoMSAtIHApL24pDQpjZW50ZXINCnNlDQoNCg0KYGBgDQoNCiMjIyBFeGVyY2lzZSA3IC0gQ2hhbmdlIFANCg0KYGBge3J9DQojIENlbnRlcg0KbjwtMzAwDQpwIDwtIC41DQpjZW50ZXIgPC0gbipwDQoNCiMgU3ByZWFkDQoNCnNlIDwtIHNxcnQocCAqICgxIC0gcCkvbikNCmNlbnRlcg0Kc2UNCg0KYGBgDQoNCg0KDQoNCg0KIyMjIEV4ZXJjaXNlIDggLSBDaGFuZ2Ugbg0KDQoNCmBgYHtyfQ0KIyBDZW50ZXINCm48LTIwMA0KcCA8LSAuMQ0KY2VudGVyIDwtIG4qcA0KDQojIFNwcmVhZA0KDQpzZSA8LSBzcXJ0KHAgKiAoMSAtIHApL24pDQpjZW50ZXINCnNlDQoNCiMgQ2VudGVyDQptPC01MDANCm8gPC0gLjENCmNlbnRlciA8LSBtKm8NCg0KIyBTcHJlYWQNCg0Kc2UgPC0gc3FydChvICogKDEgLSBvKS9tKQ0KY2VudGVyDQpzZQ0KDQoNCg0KDQoNCmBgYA0KDQoNCg0KYGBge3J9DQpkZiA8LSBkYXRhLmZyYW1lKHAgPSBwLCBzZSA9IHNlKQ0KZ2dwbG90KGRhdGEgPSBkZiwgYWVzICh4ID0gcCwgeSA9IHNlKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGxhYnMoeCA9ICJQb3B1bGF0aW9uIFByb3BvcnRpb24iLCB5ID0gIlN0YW5kYXJkIEVycm9yIikNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIyMgRXhlcmNpc2UgOSAgVGhlcmUncyBhIGxvdCBvZiBjb2RlIGhlcmUgdGhhdCBpcyBpcnJlbGV2YW50LiBJIGhhdmUgbm8gaWRlYSB3aGF0IHRoZSBMYWIgd2FudHMgbWUgdG8gZG8uDQojIyMjIEkgZmluYWxseSBmb3VuZCB0aGUgcHJvcC50ZXN0IGNvbW1hbmQgYW5kIHJhbiB0aGF0LiAgDQoNCg0KYGBge3J9DQp0YWJsZSh5cmJzcyRzdHJlbmd0aF90cmFpbmluZ183ZCkNCnRhYmxlKHlyYnNzJHNjaG9vbF9uaWdodF9ob3Vyc19zbGVlcCkNCmBgYA0KDQoNCmBgYHtyfQ0Kc3RyZW5ndGggPC0geXJic3MgJT4lDQogIGZpbHRlcihzdHJlbmd0aF90cmFpbmluZ183ZCA+PSAiNCIpDQpgYGANCg0KDQpgYGB7cn0NCnNsZWVwIDwtIHlyYnNzICU+JQ0KICBmaWx0ZXIgKHNjaG9vbF9uaWdodF9ob3Vyc19zbGVlcCA+PSAiOCIpIA0KICANCmBgYA0KDQoNCmBgYHtyfQ0Kc3RyZW5ndGggPC0gc3RyZW5ndGggJT4lDQptdXRhdGUodGV4dF9pbmQgPSBpZmVsc2Uoc3RyZW5ndGhfdHJhaW5pbmdfN2QgPiAiNSIsICJ5ZXMiLCAibm8iKSkNCmBgYA0KDQoNCg0KYGBge3J9DQpzdHJlbmd0aCAlPiUNCiAgc3BlY2lmeShyZXNwb25zZSA9IHRleHRfaW5kLCBzdWNjZXNzID0gInllcyIpICU+JQ0KICBnZW5lcmF0ZShyZXBzID0gMTAwMCwgdHlwZSA9ICJib290c3RyYXAiKSAlPiUNCiAgY2FsY3VsYXRlKHN0YXQgPSAicHJvcCIpICU+JQ0KICBnZXRfY2kobGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCmBgYHtyfQ0KdGFibGUoc3RyZW5ndGgkdGV4dF9pbmQpDQpgYGANCg0KYGBge3J9DQpzbGVlcCA8LSBzbGVlcCAlPiUNCm11dGF0ZSh0ZXh0X2luZCA9IGlmZWxzZShzY2hvb2xfbmlnaHRfaG91cnNfc2xlZXAgPiAiOCIsICJ5ZXMiLCAibm8iKSkNCmBgYA0KDQoNCmBgYHtyfQ0KdGFibGUoc2xlZXAkdGV4dF9pbmQpDQpgYGANCg0KDQpgYGB7cn0NCnNsZWVwICU+JQ0KICBzcGVjaWZ5KHJlc3BvbnNlID0gdGV4dF9pbmQsIHN1Y2Nlc3MgPSAieWVzIikgJT4lDQogIGdlbmVyYXRlKHJlcHMgPSAxMDAwLCB0eXBlID0gImJvb3RzdHJhcCIpICU+JQ0KICBjYWxjdWxhdGUoc3RhdCA9ICJwcm9wIikgJT4lDQogIGdldF9jaShsZXZlbCA9IDAuOTUpDQpgYGANCg0KDQpgYGB7cn0NCnByb3AudGVzdCAoYygyNTk4LCA3NjMpLCBjKDQ5OTAsMzQ1NSkpDQpgYGANCg0KIyMjIyBQcm9ibGVtIDEwIGlzIGxpa2V3aXNlIGNvbmZ1c2luZy4gV2hhdCdzIHRoZSBxdWVzdGlvbiBhc2tpbmc/ICBBIGRpZmZlcmVuY2UgaW4gcHJvcG9ydGlvbiBiZXR3ZWVuIHRob3NlIHdobyBzbGVlcCBtb3JlIHRoYW4gMTAgaG91cnMvZGF5IGFuZCB0aG9zZSB3aG8gZXhlcmNpc2UgNyBkYXlzL3dlZWs/IEJ1dCB0aGF0J3Mgbm90IGhvdyB0aGUgcXVlc3Rpb24gaXMgd29yZGVkLiBEb2VzIGl0IG1lYW4gdGhvc2Ugd2hvIHN0cmVuZ3RoIHRyYWluIDcgZGF5cy93ZWVrIHZzLiB0aG9zZSB3aG8gZG9uJ3QsIGZvciBldmVyeW9uZSB3aG8gc2xlZXBzIDEwKyBob3Vycy93ZWVrPyAgDQoNCkFsbCB0aGUgbm9uc2Vuc2UgYmVsb3cgKHRpbGwgcHJvYmxlbSAxMSkgaXMgbXkgYXR0ZW1wdCB0byBmaWd1cmUgdGhpcyBvdXQuIEkgdGhpbmsgSSBmYWlsZWQuIEkgZm91bmQgdGhlcmUNCmFyZSAzMTYgY2FzZXMgaW4gdGhlIGZpbGUgaW4gd2hpY2ggc2xlZXAgPT0gMTArLiAgSSBkaXZpZGVkIHRob3NlIDMxNiBjYXNlcyBpbnRvIHRob3NlIHdobyBleGVyY2lzZWQgNyBkYXlzL3dlZWsNCig4NCBjYXNlcykgYW5kIHRob3NlIHdobyBkaWRuJ3QgKDIzMikuICBUaGVyZSBpcyBvYnZpb3VzbHkgYSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gIHRob3NlIA0KcHJvcG9ydGlvbnMuIChTZWUgdGhlIGNhbGN1bGF0aW9ucy4pICBXaGF0J3MgdGhlIHByb2JhYmlsaXR5IEkgY291bGQgZGV0ZWN0IGEgY2hhbmdlPyAgQSBjaGFuZ2UgaW4gd2hhdD8gSG93IG11Y2ggb2YNCmEgY2hhbmdlPyBXaGF0J3MgY2hhbmdpbmc/DQogSSBzdGlsbCBtYWludGFpbiB0aGlzIHF1ZXN0aW9uIG1ha2VzIG5vIHNlbnNlLiBJIHJldmlld2VkIHRoZSBkZWZpbml0aW9uIG9mIGEgVHlwZSBJIGVycm9yLg0KSSBzdXBwb3NlIEkgY291bGQgc2F5IEkgaGF2ZSBhIDUlIGNoYW5jZSBvZiBkZXRlY3RpbmcgYSBjaGFuZ2UsIHNpbmNlIHRoZSBvbmx5IDIgbnVtYmVycyBJIGhhdmUgdy8gdGhlIA0KbnVsbCBoeXBvdGhlc2lzIHVuZGVyIHRoZSBmYWN0cyBvZiB0aGUgcHJvYmxlbSBhcmUgOTUlIGFuZCA1JSwgYW5kIHNheWluZyBJIGhhdmUgYSA5NSUgY2hhbmNlIG9mIGRldGVjdGluZw0KYSBjaGFuZ2UgbWFrZXMgbm8gc2Vuc2UgLSB0aGF0J3MgbGlrZSBzYXlpbmcgSSBoYXZlIGEgMTAwJSBjaGFuY2UsIHdoaWNoIEkgZG9uJ3QuIA0KDQoNCmBgYHtyfQ0KdGFibGUoeXJic3Mkc3RyZW5ndGhfdHJhaW5pbmdfN2QpDQp0YWJsZSh5cmJzcyRzY2hvb2xfbmlnaHRfaG91cnNfc2xlZXApDQpgYGANCg0KDQpgYGB7cn0NCnlyYnNzIDwtIHlyYnNzICU+JQ0KbXV0YXRlKHRleHRfaW5kMSA9IGlmZWxzZShzY2hvb2xfbmlnaHRfaG91cnNfc2xlZXAgPT0gIjEwKyIsICJ5ZXMiLCAibm8iKSkNCmBgYA0KDQoNCg0KYGBge3J9DQpzdHJlbmd0aDcgPC0geXJic3MgJT4lDQogIGZpbHRlcih0ZXh0X2luZDEgID09ICJ5ZXMiKQ0KYGBgDQoNCg0KYGBge3J9DQp0YWJsZShzdHJlbmd0aDckc3RyZW5ndGhfdHJhaW5pbmdfN2QpDQoNCnN0cmVuZ3RoNyA8LSBzdHJlbmd0aDcgJT4lDQogIG11dGF0ZSh0ZXh0X2luZDIgPSBpZmVsc2Uoc3RyZW5ndGhfdHJhaW5pbmdfN2QgPT0gIjciLCAieWVzIiwgIm5vIikpDQoNCg0KYGBgDQoNCg0KYGBge3J9DQpwcm9wLnRlc3QgKGMoMjMyLCA4NCksIGMoMzE2LDMxNikpDQpgYGANCg0KDQoNCiMjIyBQcm9ibGVtIDExDQoNClRoZSBhbnN3ZXIgaXMgIml0IGRlcGVuZHMuIiAgQW4gYXNzdW1wdGlvbiBtdXN0IGJlIG1hZGUgYWJvdXQgdGhlIHByb3BvcnRpb24uIElmLCBmb3IgZXhhbXBsZSwgDQp0aGUgcHJvcG9ydGlvbiBvZiBjaHVyY2hnb2VycyAgaXMgYXNzdW1lZCB0byBiZSBlaXRoZXIgMjUlIG9yIDc1JSwgdGhlIHNhbXBsZSBzaXplIHdpbGwgYmUgc21hbGxlciB0aGFuIGlmIHRoZQ0KdGhlIHByb3BvcnRpb24gb2YgY2h1cmNoZ29lcnMgYXBwcm9hY2hlcyA1MCUuICBJbiBvdGhlciB3b3JkcywgdGhlIG1vcmUgZXh0cmVtZSB0aGUgZGlmZmVyZW5jZSBpbiBwcm9wb3J0aW9uDQpiZXR3ZWVuIGNodXJjaGdvZXJzIGFuZCBub24tY2h1cmNoZ29lcnMsIHRoZSBzbWFsbGVyIHRoZSBzYW1wbGUgc2l6ZSBpcyBuZWVkZWQuDQogDQoNCkFzIGV4cGxhaW5lZCBpbiBFeGFtcGxlIDkuNi42IGFuZCBFeGFtcGxlIDkuNi43LCB0aGUgd2F5IHRvIGFwcHJvYWNoIHRoaXMgcHJvYmxlbSBpcyB0byBhc3N1bWUgYSBwcm9wb3J0aW9uIG9mIDUwJSwgd2hpY2ggd2lsbCBnaXZlIHRoZSBtYXhpbXVtIHNhbXBsZSBzaXplIG5lZWRlZC4gIFVzaW5nIHRoZSBXaWxzb24gY29ycmVjdGlvbiwgdGhlIHNhbXBsZSBzaXplIHdvdWxkIGJlIDk2MDAgb2JzZXJ2YXRpb25zLiANCg0K