library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.0.4
library(openintro)
library(dplyr)
library(plotrix)
library("MASS")
## Warning: package 'MASS' was built under R version 4.0.5

QUIZ QUESTION 1

  1. Suppose that as part of a program for counseling patients with many risk factors for diabetes, 100 obese patients are identified. From this group, 23 went on a highly restrictive diet. After one year, 9 out of those 23 patients are found to have gone off the diet and reverted to poor eating habits.
  1. Calculate pˆ (sample prop) and p~ (Wilson-adjusted sample proportion) (round to three decimal places) for the proportion of obese patients who reverted to poor eating habits.

  2. Using p~ calculate the 95% confidence interval to estimate the true proportion of obese patients who reverted to poor eating habits (recidivists). Be sure to consider the SE calculation under 𝑝𝑝�.

  3. Interpret your answer in context of the problem.

Answer 1A: p-hat, the sample proportion: Point estimator(p-hat=x/n) = 0.3913043 = .391 is the proportion of obese patients on the highly restrictive diet who reverted to poor eating habits.

1A: p~ (Wilson-adjusted sample proportion): = 0.4074074 = .407 is the adjusted proportion of obese patients on the highly restrictive diet who reverted to poor eating habits

1B: To begin, if the conditions for inference are reasonable, we would calculate the standard error and construct the 95% confidence interval using the inference function.

1C: As seen below, (and as we learned in one of our recent labs) the conditions for inference are not satisfied, so I could not calculate the 95% confidence interval. There aren’t at least 10 successes and 10 failures, so the simulation method must be used instead.

#  1A:   Calculate pˆ(sample prop) for the proportion of obese patients who reverted to poor eating habits.

id <- c("1", "2", "3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23")
restrictive_diet <- c("1","1","1","1","1","1","1","1","1","0","0","0","0","0","0","0","0","0","0","0","0","0","0")

results <- data.frame(id, restrictive_diet)
# 1A: calculate p_hat, the sample proportion of obese patients who reverted to poor eating habits
#get number of patients on restrictive diet who reverted to poor eating habits
results_poor <- nrow (results[results$restrictive_diet == "1",])
results_poor
## [1] 9
#  1A:  calculate p_hat, the sample proportion of obese patients who reverted to poor eating habits
#get number of patients on the restrictive diet (rows)

results_rows <- nrow(results)
results_rows
## [1] 23
#  1A:  calculate p_hat, the sample proportion of obese patients who reverted to poor eating habits
results_poor/results_rows
## [1] 0.3913043
#1A - Part II:  1A:  p~ (Wilson-adjusted sample proportion):
#data set
id <- c("1", "2", "3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23")
restrictive_diet <- c("1","1","1","1","1","1","1","1","1","0","0","0","0","0","0","0","0","0","0","0","0","0","0")

results <- data.frame(id, restrictive_diet)



results_poor                                                             #reverted to poor habits after 12 months
## [1] 9
results_rows                                                             #total number on restrictive diet
## [1] 23
results_continue <- nrow (results[results$restrictive_diet == "0",])     #continued diet after 12 months
results_continue
## [1] 14
obese <- 100                                                             #total population of obese patients

p_w_adj = (results_poor +2)/(results_rows +4)                             #calculation for Wilson's-Adjusted Sample Proportion

p_w_adj
## [1] 0.4074074
#1B:  Using p~ (0.4074074 rounded to .407) ) calculate the 95% confidence interval to estimate the true proportion of obese patients who #reverted to poor eating habits (recidivists). Be sure to consider the SE calculation under 𝑝𝑝�.


#We can calculate a 95% confidence interval for a sample mean by adding and subtracting 1.96 standard errors to the point estimate.

# The standard error is the standard deviation divided by the square root of the sample size.
  
se <- sd(9)/sqrt(23)

se <- std.error(23)

lower = .407 - (1.96 * se)
upper = .407 + (1.96 * se)
lower
## [1] NA
upper
## [1] NA
se
## [1] NA
#inference(results$restrictive_diet, est = "proportion", type = "ci", method = "theoretical", 
        #  success = "1")

QUIZ QUESTION 2

Type of bean Number of eggs Pinto 167 Cowpea 176 Navy bean 174 Northern bean 194

A researcher investigated the cowpea weevil’s preference for one type of bean over another as a place to lay eggs. Equal amounts of four types of seeds were placed into a jar and cowpea weevil were added. After 4 days, the following data was collected (below). Do these data provide evidence of a preference for some types of beans over others, i.e., are the data consistent with the claim that the eggs are distributed randomly among the four types of beans? Perform a 2 χ test.

  1. State the null and alternative hypotheses.
  2. Report the 2 χ statistic and the p-value.
  3. Interpret the results of the test in context of the problem.

Answers

  1. H0: Eggs are distributed evenly amongst all four types of bean plants HA: At least one of the types of bean plants has a different number of eggs

    bean_total = 711

  2. The 2 χ statistic = 2.2321 ; the df = 3; the p-value = 0.5257

  3. Because the p-value of .5257 > .05, there is no compelling evidence to reject the null hypothesis. There is no evidence that the bean eggs are not distributed randomly amongst the 4 plants.

bean_eggs <- c(167,176,174,194)
chisq <- chisq.test(bean_eggs)
chisq
## 
##  Chi-squared test for given probabilities
## 
## data:  bean_eggs
## X-squared = 2.2321, df = 3, p-value = 0.5257

/////////////////////////////////////////////////////////////////////

QUIZ QUESTION 3

Use the table to answer the following questions. A random sample of 125 college students determined whether they had taken an HIV test or not.

HIV Study with Men and Women Female Male Total HIV Test 11 8 19 No HIV Test 52 54 106 Total 63 62 125

  1. Find the probability that a person had taken the HIV test, given that they are female and the probability that a person had taken the HIV test, given that they are male.

  2. What is the relative risk ratio of taking the HIV test, for females versus males?

  3. Interpret your answer regarding the ratio of HIV tests for females versus males. (2 pts)

  4. Perform a 2 χ test. (Chi-Square test)

    1. State the null and alternative hypotheses.
    2. Report the 2 χ statistic and the p-value.
    3. Interpret the results of the test in context of the problem.

Answer Findings: 11/63 (17.5%) women in the sample had taken the HIV test compared to 8/62 (12.9%) men. (shown in the 2x2 contingency table above)

  1.     Pr{HIV TEST|Female} = 11/63 = .175 = 17.5%  (0.1746032)
        Pr{HIV TEST|Male  } = 8/62 = .129 = 12.9%   (0.1290323)
  2.     Pr{No HIV TEST|Female} = 52/63 = .825 82.5%  (0.8253968)
        Pr{No HIV TEST|Male}   = 54/62 = .870 = 87.0% (0.8709677)
  3. Based on the probability findings in part a, the probability that a female will have an HIV test is higher at 17.% vs. males at 12.9T. The relative risk factor that females will not undergo HIV testing is 82.5% vs a slightly higher rate for males of 87.0%.

3d 1. H0: Pr{HIV TEST|Female} = Pr{HIV TEST|Male} There is no association between females and HIV testing HA: Pr{HIV TEST|Female} > Pr{HIV TEST|Male} There is some association between females and HIV testing 2. See code below - I had problems getting the data into a matrix format in R, so I entered the values a little differently and then ran the 2 χ statistic and the p-value.

  The values given the method I used to enter the table data are as follows:  X-squared = 0.043169, df = 1, p-value = 0.8354
  
  1. Assuming an x-squared = 0.043169 and a df = 1 are correct as shown in the code below, the p-value = 0.8354. Because .8354 is greater than .05, we fail to reject the null hypothesis. There is no compelling evidence that there is an association between females and HIV testing vs. males and HIV testing.
#3a. Find the probability that a person had taken the HIV test, given that they are female and the probability that a
    #person had taken the HIV test, given that they are male

# Create data

female_hiv <- 11
female_noHiv <- 52
male_hiv <- 8
male_noHiv <-54
HIV_Total <- 19
No_HIV_Total <- 106
Male_Total <- 62
Female_Total <-63
#female hiv results

female_hiv_results=female_hiv/Female_Total
female_hiv_results
## [1] 0.1746032
#male hiv results
male_hiv_results= male_hiv/Male_Total
male_hiv_results
## [1] 0.1290323
#female no hiv results
female_noHiv_results=female_noHiv/Female_Total
female_noHiv_results
## [1] 0.8253968
#male no hiv results
male_noHiv_results=male_noHiv/Male_Total
male_noHiv_results
## [1] 0.8709677
##NOT RIGHT!!!  Could not get the values in my maxtrix, so I had to do it this way
## Testing for population prob
## Case A. Tabulated data
x <- c(F = 9, f= 52)
y <- c(M = 8, m = 59)

hiv<- data.frame(x,y)
chisq <-chisq.test(hiv)
chisq
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  hiv
## X-squared = 0.043169, df = 1, p-value = 0.8354

#```{r}

#HIV Study with Men and Women # Female Male Total #HIV Test 11 8 19 #No HIV Test 52 54 106 #Total 63 62 125

#test = matrix(c(11, 8, 19, 52, 54, 106, 63, 62, 125), nrows = 2, ncol= 2) #dimnames(test) = list( c(“HIV Test”, “No HIV Test”), c(“Female”, “Male”)) #test ```

LS0tDQp0aXRsZTogIldlZWsgMTAgUXVpeiBDaGFwdGVycyA5LTEwIg0KYXV0aG9yOiAiQWFyeW4gWmltbWVybWFuIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQNCi0tLQ0KDQpgYGB7ciBsb2FkLXBhY2thZ2VzLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KG9wZW5pbnRybykNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHBsb3RyaXgpDQpsaWJyYXJ5KCJNQVNTIikNCmBgYA0KDQojIyMgUVVJWiBRVUVTVElPTiAxDQoxLiBTdXBwb3NlIHRoYXQgYXMgcGFydCBvZiBhIHByb2dyYW0gZm9yIGNvdW5zZWxpbmcgcGF0aWVudHMgd2l0aCBtYW55IHJpc2sgZmFjdG9ycyBmb3IgZGlhYmV0ZXMsIDEwMCBvYmVzZSBwYXRpZW50cw0KYXJlIGlkZW50aWZpZWQuIEZyb20gdGhpcyBncm91cCwgMjMgd2VudCBvbiBhIGhpZ2hseSByZXN0cmljdGl2ZSBkaWV0LiBBZnRlciBvbmUgeWVhciwgOSBvdXQgb2YgdGhvc2UgMjMgcGF0aWVudHMgYXJlDQpmb3VuZCB0byBoYXZlIGdvbmUgb2ZmIHRoZSBkaWV0IGFuZCByZXZlcnRlZCB0byBwb29yIGVhdGluZyBoYWJpdHMuDQoNCmEuIENhbGN1bGF0ZSBwy4YgKHNhbXBsZSBwcm9wKSBhbmQgcH4gKFdpbHNvbi1hZGp1c3RlZCBzYW1wbGUgcHJvcG9ydGlvbikgKHJvdW5kIHRvIHRocmVlIGRlY2ltYWwgcGxhY2VzKSBmb3IgdGhlIHByb3BvcnRpb24gb2Ygb2Jlc2UgcGF0aWVudHMgd2hvIHJldmVydGVkIHRvIHBvb3INCmVhdGluZyBoYWJpdHMuDQoNCmIuIFVzaW5nIHB+IGNhbGN1bGF0ZSB0aGUgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgdG8gZXN0aW1hdGUgdGhlIHRydWUgcHJvcG9ydGlvbiBvZiBvYmVzZSBwYXRpZW50cyB3aG8gcmV2ZXJ0ZWQNCnRvIHBvb3IgZWF0aW5nIGhhYml0cyAocmVjaWRpdmlzdHMpLiBCZSBzdXJlIHRvIGNvbnNpZGVyIHRoZSBTRSBjYWxjdWxhdGlvbiB1bmRlciDwnZGd8J2Rne+/vS4NCg0KDQpjLiBJbnRlcnByZXQgeW91ciBhbnN3ZXIgaW4gY29udGV4dCBvZiB0aGUgcHJvYmxlbS4NCg0KDQoNCioqKkFuc3dlcioqKg0KMUE6ICBwLWhhdCwgdGhlIHNhbXBsZSBwcm9wb3J0aW9uOiBQb2ludCBlc3RpbWF0b3IocC1oYXQ9eC9uKSAgPSAwLjM5MTMwNDMgPSAuMzkxIGlzIHRoZSBwcm9wb3J0aW9uIG9mIG9iZXNlIHBhdGllbnRzIG9uIHRoZSBoaWdobHkgcmVzdHJpY3RpdmUgZGlldCB3aG8gcmV2ZXJ0ZWQgdG8gcG9vciBlYXRpbmcgaGFiaXRzLiANCg0KMUE6ICBwfiAoV2lsc29uLWFkanVzdGVkIHNhbXBsZSBwcm9wb3J0aW9uKTogPSAwLjQwNzQwNzQgPSAuNDA3IGlzIHRoZSBhZGp1c3RlZCBwcm9wb3J0aW9uIG9mIG9iZXNlIHBhdGllbnRzIG9uIHRoZSBoaWdobHkgcmVzdHJpY3RpdmUgZGlldCB3aG8gcmV2ZXJ0ZWQgdG8gcG9vciBlYXRpbmcgaGFiaXRzDQoNCg0KMUI6ICBUbyBiZWdpbiwgaWYgdGhlIGNvbmRpdGlvbnMgZm9yIGluZmVyZW5jZSBhcmUgcmVhc29uYWJsZSwgd2Ugd291bGQgY2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBlcnJvciBhbmQgY29uc3RydWN0IHRoZSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCANCiAgICAgdXNpbmcgdGhlIGluZmVyZW5jZSBmdW5jdGlvbi4gICANCiAgICAgDQoxQzogIEFzIHNlZW4gYmVsb3csIChhbmQgYXMgd2UgbGVhcm5lZCBpbiBvbmUgb2Ygb3VyIHJlY2VudCBsYWJzKSB0aGUgY29uZGl0aW9ucyBmb3IgaW5mZXJlbmNlIGFyZSBub3Qgc2F0aXNmaWVkLCBzbyBJIGNvdWxkIG5vdCBjYWxjdWxhdGUgdGhlIDk1JSBjb25maWRlbmNlIGludGVydmFsLiAgVGhlcmUgYXJlbid0IGF0IGxlYXN0IDEwIHN1Y2Nlc3NlcyBhbmQgMTAgZmFpbHVyZXMsIHNvIHRoZSBzaW11bGF0aW9uIG1ldGhvZCBtdXN0IGJlIHVzZWQgaW5zdGVhZC4NCg0KDQoNCmBgYHtyIGNvZGUtY2h1bmstbGFiZWx9DQojICAxQTogICBDYWxjdWxhdGUgcMuGKHNhbXBsZSBwcm9wKSBmb3IgdGhlIHByb3BvcnRpb24gb2Ygb2Jlc2UgcGF0aWVudHMgd2hvIHJldmVydGVkIHRvIHBvb3IgZWF0aW5nIGhhYml0cy4NCg0KaWQgPC0gYygiMSIsICIyIiwgIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjIwIiwiMjEiLCIyMiIsIjIzIikNCnJlc3RyaWN0aXZlX2RpZXQgPC0gYygiMSIsIjEiLCIxIiwiMSIsIjEiLCIxIiwiMSIsIjEiLCIxIiwiMCIsIjAiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiKQ0KDQpyZXN1bHRzIDwtIGRhdGEuZnJhbWUoaWQsIHJlc3RyaWN0aXZlX2RpZXQpDQpgYGANCg0KDQpgYGB7cn0NCiMgMUE6IGNhbGN1bGF0ZSBwX2hhdCwgdGhlIHNhbXBsZSBwcm9wb3J0aW9uIG9mIG9iZXNlIHBhdGllbnRzIHdobyByZXZlcnRlZCB0byBwb29yIGVhdGluZyBoYWJpdHMNCiNnZXQgbnVtYmVyIG9mIHBhdGllbnRzIG9uIHJlc3RyaWN0aXZlIGRpZXQgd2hvIHJldmVydGVkIHRvIHBvb3IgZWF0aW5nIGhhYml0cw0KcmVzdWx0c19wb29yIDwtIG5yb3cgKHJlc3VsdHNbcmVzdWx0cyRyZXN0cmljdGl2ZV9kaWV0ID09ICIxIixdKQ0KcmVzdWx0c19wb29yDQpgYGANCmBgYHtyfQ0KIyAgMUE6ICBjYWxjdWxhdGUgcF9oYXQsIHRoZSBzYW1wbGUgcHJvcG9ydGlvbiBvZiBvYmVzZSBwYXRpZW50cyB3aG8gcmV2ZXJ0ZWQgdG8gcG9vciBlYXRpbmcgaGFiaXRzDQojZ2V0IG51bWJlciBvZiBwYXRpZW50cyBvbiB0aGUgcmVzdHJpY3RpdmUgZGlldCAocm93cykNCg0KcmVzdWx0c19yb3dzIDwtIG5yb3cocmVzdWx0cykNCnJlc3VsdHNfcm93cw0KDQpgYGANCmBgYHtyfQ0KIyAgMUE6ICBjYWxjdWxhdGUgcF9oYXQsIHRoZSBzYW1wbGUgcHJvcG9ydGlvbiBvZiBvYmVzZSBwYXRpZW50cyB3aG8gcmV2ZXJ0ZWQgdG8gcG9vciBlYXRpbmcgaGFiaXRzDQpyZXN1bHRzX3Bvb3IvcmVzdWx0c19yb3dzDQpgYGANCmBgYHtyfQ0KIzFBIC0gUGFydCBJSTogIDFBOiAgcH4gKFdpbHNvbi1hZGp1c3RlZCBzYW1wbGUgcHJvcG9ydGlvbik6DQojZGF0YSBzZXQNCmlkIDwtIGMoIjEiLCAiMiIsICIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiLCIyMCIsIjIxIiwiMjIiLCIyMyIpDQpyZXN0cmljdGl2ZV9kaWV0IDwtIGMoIjEiLCIxIiwiMSIsIjEiLCIxIiwiMSIsIjEiLCIxIiwiMSIsIjAiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiLCIwIikNCg0KcmVzdWx0cyA8LSBkYXRhLmZyYW1lKGlkLCByZXN0cmljdGl2ZV9kaWV0KQ0KDQoNCg0KcmVzdWx0c19wb29yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNyZXZlcnRlZCB0byBwb29yIGhhYml0cyBhZnRlciAxMiBtb250aHMNCnJlc3VsdHNfcm93cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdG90YWwgbnVtYmVyIG9uIHJlc3RyaWN0aXZlIGRpZXQNCnJlc3VsdHNfY29udGludWUgPC0gbnJvdyAocmVzdWx0c1tyZXN1bHRzJHJlc3RyaWN0aXZlX2RpZXQgPT0gIjAiLF0pICAgICAjY29udGludWVkIGRpZXQgYWZ0ZXIgMTIgbW9udGhzDQpyZXN1bHRzX2NvbnRpbnVlDQpvYmVzZSA8LSAxMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvdGFsIHBvcHVsYXRpb24gb2Ygb2Jlc2UgcGF0aWVudHMNCg0KcF93X2FkaiA9IChyZXN1bHRzX3Bvb3IgKzIpLyhyZXN1bHRzX3Jvd3MgKzQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2FsY3VsYXRpb24gZm9yIFdpbHNvbidzLUFkanVzdGVkIFNhbXBsZSBQcm9wb3J0aW9uDQoNCnBfd19hZGoNCg0KDQoNCmBgYA0KYGBge3J9DQojMUI6ICBVc2luZyBwfiAoMC40MDc0MDc0IHJvdW5kZWQgdG8gLjQwNykgKSBjYWxjdWxhdGUgdGhlIDk1JSBjb25maWRlbmNlIGludGVydmFsIHRvIGVzdGltYXRlIHRoZSB0cnVlIHByb3BvcnRpb24gb2Ygb2Jlc2UgcGF0aWVudHMgd2hvICNyZXZlcnRlZCB0byBwb29yIGVhdGluZyBoYWJpdHMgKHJlY2lkaXZpc3RzKS4gQmUgc3VyZSB0byBjb25zaWRlciB0aGUgU0UgY2FsY3VsYXRpb24gdW5kZXIg8J2RnfCdkZ3vv70uDQoNCg0KI1dlIGNhbiBjYWxjdWxhdGUgYSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgYSBzYW1wbGUgbWVhbiBieSBhZGRpbmcgYW5kIHN1YnRyYWN0aW5nIDEuOTYgc3RhbmRhcmQgZXJyb3JzIHRvIHRoZSBwb2ludCBlc3RpbWF0ZS4NCg0KIyBUaGUgc3RhbmRhcmQgZXJyb3IgaXMgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBkaXZpZGVkIGJ5IHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc2FtcGxlIHNpemUuDQogIA0Kc2UgPC0gc2QoOSkvc3FydCgyMykNCg0Kc2UgPC0gc3RkLmVycm9yKDIzKQ0KDQpsb3dlciA9IC40MDcgLSAoMS45NiAqIHNlKQ0KdXBwZXIgPSAuNDA3ICsgKDEuOTYgKiBzZSkNCmxvd2VyDQp1cHBlcg0Kc2UNCg0KYGBgDQoNCmBgYHtyfQ0KI2luZmVyZW5jZShyZXN1bHRzJHJlc3RyaWN0aXZlX2RpZXQsIGVzdCA9ICJwcm9wb3J0aW9uIiwgdHlwZSA9ICJjaSIsIG1ldGhvZCA9ICJ0aGVvcmV0aWNhbCIsIA0KICAgICAgICAjICBzdWNjZXNzID0gIjEiKQ0KYGBgDQojIyMgUVVJWiBRVUVTVElPTiAyDQoNClR5cGUgb2YgYmVhbiAgIE51bWJlciBvZiBlZ2dzDQpQaW50byAgICAgICAgICAgICAgMTY3DQpDb3dwZWEgICAgICAgICAgICAgMTc2DQpOYXZ5IGJlYW4gICAgICAgICAgMTc0DQpOb3J0aGVybiBiZWFuICAgICAgMTk0DQoNCkEgcmVzZWFyY2hlciBpbnZlc3RpZ2F0ZWQgdGhlIGNvd3BlYSB3ZWV2aWzigJlzIHByZWZlcmVuY2UgZm9yIG9uZSB0eXBlIG9mDQpiZWFuIG92ZXIgYW5vdGhlciBhcyBhIHBsYWNlIHRvIGxheSBlZ2dzLiBFcXVhbCBhbW91bnRzIG9mIGZvdXIgdHlwZXMgb2YNCnNlZWRzIHdlcmUgcGxhY2VkIGludG8gYSBqYXIgYW5kIGNvd3BlYSB3ZWV2aWwgd2VyZSBhZGRlZC4gQWZ0ZXIgNCBkYXlzLA0KdGhlIGZvbGxvd2luZyBkYXRhIHdhcyBjb2xsZWN0ZWQgKGJlbG93KS4gRG8gdGhlc2UgZGF0YSBwcm92aWRlIGV2aWRlbmNlIG9mDQphIHByZWZlcmVuY2UgZm9yIHNvbWUgdHlwZXMgb2YgYmVhbnMgb3ZlciBvdGhlcnMsIGkuZS4sIGFyZSB0aGUgZGF0YSBjb25zaXN0ZW50DQp3aXRoIHRoZSBjbGFpbSB0aGF0IHRoZSBlZ2dzIGFyZSBkaXN0cmlidXRlZCByYW5kb21seSBhbW9uZyB0aGUgZm91ciB0eXBlcyBvZiBiZWFucz8NClBlcmZvcm0gYSAyIM+HIHRlc3QuDQoNCg0KMS4gU3RhdGUgdGhlIG51bGwgYW5kIGFsdGVybmF0aXZlIGh5cG90aGVzZXMuDQoyLiBSZXBvcnQgdGhlIDIgz4cgc3RhdGlzdGljIGFuZCB0aGUgcC12YWx1ZS4NCjMuIEludGVycHJldCB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdCBpbiBjb250ZXh0IG9mIHRoZSBwcm9ibGVtLiANCg0KDQoqKipBbnN3ZXJzKioqDQoNCjEuICBIMDogIEVnZ3MgYXJlIGRpc3RyaWJ1dGVkIGV2ZW5seSBhbW9uZ3N0IGFsbCBmb3VyIHR5cGVzIG9mIGJlYW4gcGxhbnRzDQogICAgSEE6ICBBdCBsZWFzdCBvbmUgb2YgdGhlIHR5cGVzIG9mIGJlYW4gcGxhbnRzIGhhcyBhIGRpZmZlcmVudCBudW1iZXIgb2YgZWdncw0KICAgIA0KICAgIGJlYW5fdG90YWwgPSA3MTENCiAgICANCjIuICBUaGUgMiDPhyBzdGF0aXN0aWMgPSAyLjIzMjEgOyB0aGUgZGYgPSAzOyB0aGUgcC12YWx1ZSA9IDAuNTI1Nw0KDQozLiAgQmVjYXVzZSB0aGUgcC12YWx1ZSBvZiAuNTI1NyA+IC4wNSwgdGhlcmUgaXMgbm8gY29tcGVsbGluZyBldmlkZW5jZSB0byByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcy4gIFRoZXJlIGlzIG5vIGV2aWRlbmNlIHRoYXQgdGhlIGJlYW4gZWdncyBhcmUgbm90IGRpc3RyaWJ1dGVkIHJhbmRvbWx5IGFtb25nc3QgdGhlIDQgcGxhbnRzLg0KDQoNCmBgYHtyfQ0KDQpiZWFuX2VnZ3MgPC0gYygxNjcsMTc2LDE3NCwxOTQpDQpjaGlzcSA8LSBjaGlzcS50ZXN0KGJlYW5fZWdncykNCmNoaXNxDQoNCmBgYA0KYGBge3J9DQoNCmBgYA0KDQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQojIyMgUVVJWiBRVUVTVElPTiAzDQpVc2UgdGhlIHRhYmxlIHRvIGFuc3dlciB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy4gQSByYW5kb20gc2FtcGxlIG9mIDEyNSBjb2xsZWdlIHN0dWRlbnRzIGRldGVybWluZWQgd2hldGhlciB0aGV5DQpoYWQgdGFrZW4gYW4gSElWIHRlc3Qgb3Igbm90LiANCg0KDQpISVYgU3R1ZHkgd2l0aCBNZW4gYW5kIFdvbWVuDQogICAgICAgICAgICBGZW1hbGUgICAgTWFsZSAgICAgVG90YWwNCkhJViBUZXN0ICAgICAgMTEgICAgICA4ICAgICAgICAgIDE5DQpObyBISVYgVGVzdCAgIDUyICAgICA1NCAgICAgICAgICAxMDYNClRvdGFsICAgICAgICAgNjMgICAgIDYyICAgICAgICAgIDEyNQ0KDQoNCg0KYS4gRmluZCB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhIHBlcnNvbiBoYWQgdGFrZW4gdGhlIEhJViB0ZXN0LCBnaXZlbiB0aGF0IHRoZXkgYXJlIGZlbWFsZSBhbmQgdGhlIHByb2JhYmlsaXR5IHRoYXQgYQ0KICAgIHBlcnNvbiBoYWQgdGFrZW4gdGhlIEhJViB0ZXN0LCBnaXZlbiB0aGF0IHRoZXkgYXJlIG1hbGUuDQpiLiBXaGF0IGlzIHRoZSByZWxhdGl2ZSByaXNrIHJhdGlvIG9mIHRha2luZyB0aGUgSElWIHRlc3QsIGZvciBmZW1hbGVzIHZlcnN1cyBtYWxlcz8NCmMuIEludGVycHJldCB5b3VyIGFuc3dlciByZWdhcmRpbmcgdGhlIHJhdGlvIG9mIEhJViB0ZXN0cyBmb3IgZmVtYWxlcyB2ZXJzdXMgbWFsZXMuICgyIHB0cykNCg0KZC4gUGVyZm9ybSBhIDIgz4cgdGVzdC4gKENoaS1TcXVhcmUgdGVzdCkNCiAgIDEuIFN0YXRlIHRoZSBudWxsIGFuZCBhbHRlcm5hdGl2ZSBoeXBvdGhlc2VzLg0KICAgMi4gUmVwb3J0IHRoZSAyIM+HIHN0YXRpc3RpYyBhbmQgdGhlIHAtdmFsdWUuDQogICAzLiBJbnRlcnByZXQgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3QgaW4gY29udGV4dCBvZiB0aGUgcHJvYmxlbS4gDQoNCg0KKioqQW5zd2VyKioqDQpGaW5kaW5nczogIDExLzYzICgxNy41JSkgd29tZW4gaW4gdGhlIHNhbXBsZSBoYWQgdGFrZW4gdGhlIEhJViB0ZXN0IGNvbXBhcmVkIHRvIDgvNjIgKDEyLjklKSBtZW4uICAoc2hvd24gaW4gdGhlIDJ4MiBjb250aW5nZW5jeSB0YWJsZSBhYm92ZSkNCg0KYS4gICAgICAgICBQcntISVYgVEVTVHxGZW1hbGV9ID0gMTEvNjMgPSAuMTc1ID0gMTcuNSUgICgwLjE3NDYwMzIpDQogICAgICAgICAgIFBye0hJViBURVNUfE1hbGUgIH0gPSA4LzYyID0gLjEyOSA9IDEyLjklICAgKDAuMTI5MDMyMykNCiAgICAgIA0KYi4gICAgICAgICBQcntObyBISVYgVEVTVHxGZW1hbGV9ID0gNTIvNjMgPSAuODI1IDgyLjUlICAoMC44MjUzOTY4KQ0KICAgICAgICAgICBQcntObyBISVYgVEVTVHxNYWxlfSAgID0gNTQvNjIgPSAuODcwID0gODcuMCUgKDAuODcwOTY3NykNCiAgICAgICAgICAgDQpjLiBCYXNlZCBvbiB0aGUgcHJvYmFiaWxpdHkgZmluZGluZ3MgaW4gcGFydCBhLCB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhIGZlbWFsZSB3aWxsIGhhdmUgYW4gSElWIHRlc3QgaXMgaGlnaGVyIGF0IDE3LiUgdnMuIG1hbGVzIGF0IDEyLjlULiAgVGhlIHJlbGF0aXZlIHJpc2sgZmFjdG9yIHRoYXQgZmVtYWxlcyB3aWxsIG5vdCB1bmRlcmdvIEhJViB0ZXN0aW5nIGlzIDgyLjUlIHZzIGEgc2xpZ2h0bHkgaGlnaGVyIHJhdGUgZm9yIG1hbGVzIG9mIDg3LjAlLiAgIA0KDQoNCjNkDQogIDEuICBIMDogIFBye0hJViBURVNUfEZlbWFsZX0gPSBQcntISVYgVEVTVHxNYWxlfQ0KICAgICAgVGhlcmUgaXMgbm8gYXNzb2NpYXRpb24gYmV0d2VlbiBmZW1hbGVzIGFuZCBISVYgdGVzdGluZyANCiAgICAgIEhBOiAgUHJ7SElWIFRFU1R8RmVtYWxlfSA+IFBye0hJViBURVNUfE1hbGV9DQogICAgICBUaGVyZSBpcyBzb21lIGFzc29jaWF0aW9uIGJldHdlZW4gZmVtYWxlcyBhbmQgSElWIHRlc3RpbmcNCiAgMi4gIFNlZSBjb2RlIGJlbG93IC0gSSBoYWQgcHJvYmxlbXMgZ2V0dGluZyB0aGUgZGF0YSBpbnRvIGEgbWF0cml4IGZvcm1hdCBpbiBSLCBzbyBJIGVudGVyZWQgdGhlIHZhbHVlcyBhIGxpdHRsZSBkaWZmZXJlbnRseSBhbmQgdGhlbiByYW4gdGhlICAgICAgIDIgz4cgc3RhdGlzdGljIGFuZCB0aGUgcC12YWx1ZS4NCiAgDQogICAgICBUaGUgdmFsdWVzIGdpdmVuIHRoZSBtZXRob2QgSSB1c2VkIHRvIGVudGVyIHRoZSB0YWJsZSBkYXRhIGFyZSBhcyBmb2xsb3dzOiAgWC1zcXVhcmVkID0gMC4wNDMxNjksIGRmID0gMSwgcC12YWx1ZSA9IDAuODM1NA0KICAgICAgDQogIDMuICBBc3N1bWluZyBhbiB4LXNxdWFyZWQgPSAwLjA0MzE2OSBhbmQgYSBkZiA9IDEgYXJlIGNvcnJlY3QgYXMgc2hvd24gaW4gdGhlIGNvZGUgYmVsb3csIHRoZSBwLXZhbHVlID0gMC44MzU0LiAgQmVjYXVzZSAuODM1NCBpcyBncmVhdGVyIHRoYW4gLjA1LCB3ZSBmYWlsIHRvIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzLiAgVGhlcmUgaXMgbm8gY29tcGVsbGluZyBldmlkZW5jZSB0aGF0IHRoZXJlIGlzIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gZmVtYWxlcyBhbmQgSElWIHRlc3RpbmcgdnMuIG1hbGVzIGFuZCBISVYgdGVzdGluZy4gIA0KICANCmBgYHtyfQ0KIzNhLiBGaW5kIHRoZSBwcm9iYWJpbGl0eSB0aGF0IGEgcGVyc29uIGhhZCB0YWtlbiB0aGUgSElWIHRlc3QsIGdpdmVuIHRoYXQgdGhleSBhcmUgZmVtYWxlIGFuZCB0aGUgcHJvYmFiaWxpdHkgdGhhdCBhDQogICAgI3BlcnNvbiBoYWQgdGFrZW4gdGhlIEhJViB0ZXN0LCBnaXZlbiB0aGF0IHRoZXkgYXJlIG1hbGUNCg0KIyBDcmVhdGUgZGF0YQ0KDQpmZW1hbGVfaGl2IDwtIDExDQpmZW1hbGVfbm9IaXYgPC0gNTINCm1hbGVfaGl2IDwtIDgNCm1hbGVfbm9IaXYgPC01NA0KSElWX1RvdGFsIDwtIDE5DQpOb19ISVZfVG90YWwgPC0gMTA2DQpNYWxlX1RvdGFsIDwtIDYyDQpGZW1hbGVfVG90YWwgPC02Mw0KDQpgYGANCg0KDQpgYGB7cn0NCiNmZW1hbGUgaGl2IHJlc3VsdHMNCg0KZmVtYWxlX2hpdl9yZXN1bHRzPWZlbWFsZV9oaXYvRmVtYWxlX1RvdGFsDQpmZW1hbGVfaGl2X3Jlc3VsdHMNCg0KYGBgDQpgYGB7cn0NCiNtYWxlIGhpdiByZXN1bHRzDQptYWxlX2hpdl9yZXN1bHRzPSBtYWxlX2hpdi9NYWxlX1RvdGFsDQptYWxlX2hpdl9yZXN1bHRzDQoNCmBgYA0KYGBge3J9DQojZmVtYWxlIG5vIGhpdiByZXN1bHRzDQpmZW1hbGVfbm9IaXZfcmVzdWx0cz1mZW1hbGVfbm9IaXYvRmVtYWxlX1RvdGFsDQpmZW1hbGVfbm9IaXZfcmVzdWx0cw0KYGBgDQoNCmBgYHtyfQ0KI21hbGUgbm8gaGl2IHJlc3VsdHMNCm1hbGVfbm9IaXZfcmVzdWx0cz1tYWxlX25vSGl2L01hbGVfVG90YWwNCm1hbGVfbm9IaXZfcmVzdWx0cw0KDQpgYGANCg0KYGBge3J9DQoNCiMjTk9UIFJJR0hUISEhICBDb3VsZCBub3QgZ2V0IHRoZSB2YWx1ZXMgaW4gbXkgbWF4dHJpeCwgc28gSSBoYWQgdG8gZG8gaXQgdGhpcyB3YXkNCiMjIFRlc3RpbmcgZm9yIHBvcHVsYXRpb24gcHJvYg0KIyMgQ2FzZSBBLiBUYWJ1bGF0ZWQgZGF0YQ0KeCA8LSBjKEYgPSA5LCBmPSA1MikNCnkgPC0gYyhNID0gOCwgbSA9IDU5KQ0KDQpoaXY8LSBkYXRhLmZyYW1lKHgseSkNCmNoaXNxIDwtY2hpc3EudGVzdChoaXYpDQpjaGlzcQ0KDQpgYGANCiNgYGB7cn0NCg0KI0hJViBTdHVkeSB3aXRoIE1lbiBhbmQgV29tZW4NCiMgICAgICAgICAgICBGZW1hbGUgICAgTWFsZSAgICAgVG90YWwNCiNISVYgVGVzdCAgICAgIDExICAgICAgOCAgICAgICAgICAxOQ0KI05vIEhJViBUZXN0ICAgNTIgICAgIDU0ICAgICAgICAgIDEwNg0KI1RvdGFsICAgICAgICAgNjMgICAgIDYyICAgICAgICAgIDEyNQ0KDQoNCg0KI3Rlc3QgPSBtYXRyaXgoYygxMSwgOCwgMTksIDUyLCA1NCwgMTA2LCA2MywgNjIsIDEyNSksIG5yb3dzID0gMiwgbmNvbD0gMikNCiNkaW1uYW1lcyh0ZXN0KSA9IGxpc3QoIGMoIkhJViBUZXN0IiwgIk5vIEhJViBUZXN0IiksDQogICAgICAgICAgICAgICAgICAgICAgYygiRmVtYWxlIiwgIk1hbGUiKSkgDQojdGVzdA0KYGBgDQogICANCiANCg==