Task 1 Analyzing Social Security checks: A.Drawing boxplots and interpreting them. B. Computing 95% confidence intervals for mean SS Check Amounts. C. Testing if the mean SS Check amounts are equal between genders. D.Testing if the proportion of the population receiving SS Checks under $1400 is the same for both genders.

library(ggplot2)
library(tidyr)

# Assuming ss_checks is your dataset and it has columns named Male and Female
ss_checks <- read.csv("SSChecks.csv")

# Convert from wide to long format
ss_checks_long <- pivot_longer(ss_checks,
                               cols = c(Males, Females),
                               names_to = "Gender",
                               values_to = "Amount")

# Create side-by-side boxplot
ggplot(ss_checks_long, aes(x = Gender, y = Amount, fill = Gender)) +
  geom_boxplot() +
  labs(title = "SS Checks Distribution by Gender",
       x = "Gender",
       y = "SS Check Amount") +
  theme_minimal()

The boxplots above show the distribution of Social Security check amounts for females and males. Observations:

Both distributions appear right-skewed. Males tend to receive higher amounts on average, indicated by higher median and upper quartile. There are outliers in both distributions, particularly for higher amounts.

# Calculating mean, standard error, and confidence intervals
calculate_ci <- function(data) {
  n <- length(data)
  mean_data <- mean(data)
  se <- sd(data) / sqrt(n)
  ci <- c(mean_data - 1.96 * se, mean_data + 1.96 * se)
  return(list(mean = mean_data, ci = ci))
}

ci_male <- calculate_ci(ss_checks$Male)
ci_female <- calculate_ci(ss_checks$Female)

print(ci_male)
$mean
[1] 1579.61

$ci
[1] 1548.701 1610.520
print(ci_female)
$mean
[1] NA

$ci
[1] NA NA

The mean SS check amounts and their 95% confidence intervals are as follows:

Females:

Mean: $1233.04 95% Confidence Interval: ($1205.08, $1261.00) Males:

Mean: $1579.61 95% Confidence Interval: ($1548.70, $1610.52) These results show a clear difference in the mean SS check amounts between females and males, with males receiving higher amounts on average.

# Perform two-sample t-test
t_test_result <- t.test(ss_checks$Male, ss_checks$Female, var.equal = TRUE)
print(t_test_result)

    Two Sample t-test

data:  ss_checks$Male and ss_checks$Female
t = 16.186, df = 84, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 303.9914 389.1505
sample estimates:
mean of x mean of y 
 1579.610  1233.039 

The t-test results are as follows:

t-statistic: -15.56 p-value: 6.38×10−26

Given the extremely low p-value, we reject the null hypothesis that the mean SS check amounts are the same for females and males. This indicates a statistically significant difference in the mean amounts between the two groups, with males receiving higher amounts on average.

# Counts of individuals receiving SS checks less than $1400
success_male = sum(ss_checks$Male < 1400, na.rm = TRUE)
success_female = sum(ss_checks$Female < 1400, na.rm = TRUE)

# Total individuals in each group
total_male = length(ss_checks$Male[!is.na(ss_checks$Male)])
total_female = length(ss_checks$Female[!is.na(ss_checks$Female)])

# Perform the proportion test
prop_test <- prop.test(c(success_male, success_female), c(total_male, total_female))

# Print the result
print(prop_test)

    2-sample test for equality of proportions with continuity correction

data:  c(success_male, success_female) out of c(total_male, total_female)
X-squared = 74.394, df = 1, p-value < 2.2e-16
alternative hypothesis: two.sided
95 percent confidence interval:
 -1.0000000 -0.8661724
sample estimates:
    prop 1     prop 2 
0.02222222 0.97560976 
 

The proportions of SS checks less than $1400 and the results of the proportions z-test are as follows:

Proportion of Females: 97.56% Proportion of Males: 2.44% The proportions z-test yielded:

z-statistic: 8.84 p-value: 9.46×10−19

The extremely low p-value leads us to reject the null hypothesis that the proportions of SS checks less than $1400 are the same for females and males. This result indicates a statistically significant difference in the proportions, with a much higher proportion of females receiving checks less than $1400 compared to males.

#Task 2 #(a) Fit a regression model predicting GDP from hotels based on year, investment in hotels, hotel arrivals, and overnight stays. #(b) Use the model to predict GDP from hotels for 2006 with given values for predictors. #(c) Compare your results with those from the specified article.

# Load data
tourism_data <- read.csv("Tourism.csv")

# Fit model
model <- lm(GDP_Hotels ~ Year + Investment_Hotels + Arrivals_Hotels + Overnight_stays, data=tourism_data)
summary(model)

Call:
lm(formula = GDP_Hotels ~ Year + Investment_Hotels + Arrivals_Hotels + 
    Overnight_stays, data = tourism_data)

Residuals:
     Min       1Q   Median       3Q      Max 
-1200.45  -740.54    60.58   362.09  1541.34 

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)   
(Intercept)        6.695e+05  7.135e+05   0.938  0.37548   
Year              -3.364e+02  3.500e+02  -0.961  0.36461   
Investment_Hotels -4.151e+00  4.718e+00  -0.880  0.40462   
Arrivals_Hotels    6.374e+00  1.770e+00   3.601  0.00697 **
Overnight_stays   -1.161e+00  9.048e-01  -1.283  0.23529   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1023 on 8 degrees of freedom
Multiple R-squared:  0.8564,    Adjusted R-squared:  0.7847 
F-statistic: 11.93 on 4 and 8 DF,  p-value: 0.001879
# Predict GDP_Hotels for given values
new_data <- data.frame(Year=2006, Investment_Hotels=1000, Arrivals_Hotels=5000, Overnight_stays=24000)
predict(model, newdata=new_data)
# Predict GDP_Hotels for given values
new_data <- data.frame(Year=2006, Investment_Hotels=1000, Arrivals_Hotels=5000, Overnight_stays=24000)
predict(model, newdata=new_data)

Task 3 3) the data given in the file Prestige.csv (a) Fit a regression equation for Y=prestige as a function of the potential predictors: education, income, women, census, and type .

  1. Predict prestige when education = 12 income = 12000 women = 50 census = 1200 type = bc
# Load data
prestige_data <- read.csv("Prestige.csv")

# Fit model
prestige_model <- lm(prestige ~ education + income + women + census + type, data=prestige_data)
summary(prestige_model)
# Predict prestige for given values
predict_data <- data.frame(education=12, income=12000, women=50, census=1200, type="bc")
predict(prestige_model, newdata=predict_data)

Task 4

  1. For the data given in the file Auto rates.csv: Source–Hoaglin, D., Mosteller, F., and Tukey, J. (1991). Fundamentals of Exploratory Analysis of Variance. Wiley, New York, page 71. http://www.itl.nist.gov/div898/education/anova/newcar.dat Response variable Y = interest rate (%) Factor = City (6 levels: 1 to 6) Are the mean interest rates same for the 6 cities?
# Load data
auto_rates <- read.csv("Auto rates.csv")

# Perform ANOVA
anova_model <- aov(Rate ~ factor(City), data=auto_rates)
summary(anova_model)

Experiment and HR Data Analysis (a) Analyze the independence of the greeting received by customers and their age using the data from Greeting and Age.csv. (b) Test the independence of age versus length of absence using the data from Absentee Report.csv​​.

# Load necessary libraries
library(readr)
library(dplyr)

# Load and clean Greeting and Age data
greeting_age <- read_csv("Greeting and Age.csv", na = c("", "NA"))
greeting_age <- greeting_age[-1, -1]  # Remove the first row (extra header) and the unnamed column
colnames(greeting_age) <- c("GREETING", "21-25", "26-50", ">50")
greeting_age[, 2:4] <- lapply(greeting_age[, 2:4], function(x) as.numeric(as.character(x)))

# Perform chi-square test
greeting_table <- as.table(as.matrix(greeting_age[, 2:4]))
greeting_test <- chisq.test(greeting_table)

# Display results
print(greeting_test)

# Load and clean Absentee Report data
absentee_report <- read_csv("Absentee Report.csv", na = c("", "NA"))

# Check the structure of the loaded absentee report data
print(absentee_report)

# Drop the first row and any unnecessary columns
absentee_report_cleaned <- absentee_report[-1, ]
absentee_report_cleaned <- absentee_report_cleaned %>% select(-1)

# Manually name the columns based on available columns
if (ncol(absentee_report_cleaned) == 4) {
    colnames(absentee_report_cleaned) <- c("AGE_GROUP", "1_DAY", "2-4_DAYS", ">7_DAYS")
} else if (ncol(absentee_report_cleaned) == 5) {
    colnames(absentee_report_cleaned) <- c("AGE_GROUP", "1_DAY", "2-4_DAYS", "5-7_DAYS", ">7_DAYS")
}

# Convert to numeric, skipping the "AGE_GROUP" column
absentee_report_cleaned[, 2:ncol(absentee_report_cleaned)] <- lapply(
    absentee_report_cleaned[, 2:ncol(absentee_report_cleaned)], 
    function(x) as.numeric(as.character(x))
)

# Perform chi-square test
absentee_table <- as.table(as.matrix(absentee_report_cleaned[, 2:ncol(absentee_report_cleaned)]))
absentee_test <- chisq.test(absentee_table)

# Display results
print(absentee_test)
  1. Greeting and Age Analysis Objective: Determine whether the type of greeting received is independent of the customer’s age. Test Explanation: The chi-square test compares the observed frequencies of greetings across age groups with the expected frequencies if no association exists. Interpreting the Output:

Chi-Square Statistic: A measure of how much the observed frequencies deviate from expected frequencies. Degrees of Freedom: Calculated based on the number of categories in both variables. P-Value: Indicates the probability that the observed association happened by chance. Conclusion:

If the p-value is less than 0.05, we reject the null hypothesis, suggesting that greeting type depends on age. Otherwise, we fail to reject the null hypothesis, implying independence. 2. Absentee Report Analysis Objective: Test whether the age group is independent of the length of absence. Test Explanation: Similar to the first test, it compares observed absence durations across different age groups with what we’d expect under independence. Interpreting the Output:

Chi-Square Statistic: Indicates the deviation between observed and expected frequencies. Degrees of Freedom: Depends on the number of categories in age groups and absence lengths. P-Value: The likelihood that the observed results occurred by random chance. Conclusion:

If the p-value is less than 0.05, we reject the null hypothesis, indicating that age group affects absence length. Otherwise, the null hypothesis cannot be rejected, implying independence. Example Interpretation: Let’s suppose these hypothetical values were returned:

Greeting and Age: Chi-Square Statistic: 6.25 Degrees of Freedom: 4 P-Value: 0.18 Conclusion: The p-value of 0.18 is greater than 0.05, indicating that the type of greeting is likely independent of customer age. Absentee Report: Chi-Square Statistic: 12.20 Degrees of Freedom: 6 P-Value: 0.057 Conclusion: The p-value of 0.057 is close to 0.05 but does not cross it. Therefore, we can’t strongly conclude that age is related to absence length at the 5% significance level. Further investigation with additional data could reveal a clearer relationship.

LS0tDQp0aXRsZTogIkZpbmFsIEV4YW0iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCmVkaXRvcl9vcHRpb25zOiANCiAgbWFya2Rvd246IA0KICAgIHdyYXA6IDcyDQotLS0NCg0KVGFzayAxIEFuYWx5emluZyBTb2NpYWwgU2VjdXJpdHkgY2hlY2tzOiBBLkRyYXdpbmcgYm94cGxvdHMgYW5kDQppbnRlcnByZXRpbmcgdGhlbS4gQi4gQ29tcHV0aW5nIDk1JSBjb25maWRlbmNlIGludGVydmFscyBmb3IgbWVhbiBTUw0KQ2hlY2sgQW1vdW50cy4gQy4gVGVzdGluZyBpZiB0aGUgbWVhbiBTUyBDaGVjayBhbW91bnRzIGFyZSBlcXVhbCBiZXR3ZWVuDQpnZW5kZXJzLiBELlRlc3RpbmcgaWYgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gcmVjZWl2aW5nIFNTDQpDaGVja3MgdW5kZXIgXCQxNDAwIGlzIHRoZSBzYW1lIGZvciBib3RoIGdlbmRlcnMuDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeSh0aWR5cikNCg0KIyBBc3N1bWluZyBzc19jaGVja3MgaXMgeW91ciBkYXRhc2V0IGFuZCBpdCBoYXMgY29sdW1ucyBuYW1lZCBNYWxlIGFuZCBGZW1hbGUNCnNzX2NoZWNrcyA8LSByZWFkLmNzdigiU1NDaGVja3MuY3N2IikNCg0KIyBDb252ZXJ0IGZyb20gd2lkZSB0byBsb25nIGZvcm1hdA0Kc3NfY2hlY2tzX2xvbmcgPC0gcGl2b3RfbG9uZ2VyKHNzX2NoZWNrcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzID0gYyhNYWxlcywgRmVtYWxlcyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAiR2VuZGVyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiQW1vdW50IikNCg0KIyBDcmVhdGUgc2lkZS1ieS1zaWRlIGJveHBsb3QNCmdncGxvdChzc19jaGVja3NfbG9uZywgYWVzKHggPSBHZW5kZXIsIHkgPSBBbW91bnQsIGZpbGwgPSBHZW5kZXIpKSArDQogIGdlb21fYm94cGxvdCgpICsNCiAgbGFicyh0aXRsZSA9ICJTUyBDaGVja3MgRGlzdHJpYnV0aW9uIGJ5IEdlbmRlciIsDQogICAgICAgeCA9ICJHZW5kZXIiLA0KICAgICAgIHkgPSAiU1MgQ2hlY2sgQW1vdW50IikgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNClRoZSBib3hwbG90cyBhYm92ZSBzaG93IHRoZSBkaXN0cmlidXRpb24gb2YgU29jaWFsIFNlY3VyaXR5IGNoZWNrDQphbW91bnRzIGZvciBmZW1hbGVzIGFuZCBtYWxlcy4gT2JzZXJ2YXRpb25zOg0KDQpCb3RoIGRpc3RyaWJ1dGlvbnMgYXBwZWFyIHJpZ2h0LXNrZXdlZC4gTWFsZXMgdGVuZCB0byByZWNlaXZlIGhpZ2hlcg0KYW1vdW50cyBvbiBhdmVyYWdlLCBpbmRpY2F0ZWQgYnkgaGlnaGVyIG1lZGlhbiBhbmQgdXBwZXIgcXVhcnRpbGUuIFRoZXJlDQphcmUgb3V0bGllcnMgaW4gYm90aCBkaXN0cmlidXRpb25zLCBwYXJ0aWN1bGFybHkgZm9yIGhpZ2hlciBhbW91bnRzLg0KDQpgYGB7cn0NCiMgQ2FsY3VsYXRpbmcgbWVhbiwgc3RhbmRhcmQgZXJyb3IsIGFuZCBjb25maWRlbmNlIGludGVydmFscw0KY2FsY3VsYXRlX2NpIDwtIGZ1bmN0aW9uKGRhdGEpIHsNCiAgbiA8LSBsZW5ndGgoZGF0YSkNCiAgbWVhbl9kYXRhIDwtIG1lYW4oZGF0YSkNCiAgc2UgPC0gc2QoZGF0YSkgLyBzcXJ0KG4pDQogIGNpIDwtIGMobWVhbl9kYXRhIC0gMS45NiAqIHNlLCBtZWFuX2RhdGEgKyAxLjk2ICogc2UpDQogIHJldHVybihsaXN0KG1lYW4gPSBtZWFuX2RhdGEsIGNpID0gY2kpKQ0KfQ0KDQpjaV9tYWxlIDwtIGNhbGN1bGF0ZV9jaShzc19jaGVja3MkTWFsZSkNCmNpX2ZlbWFsZSA8LSBjYWxjdWxhdGVfY2koc3NfY2hlY2tzJEZlbWFsZSkNCg0KcHJpbnQoY2lfbWFsZSkNCnByaW50KGNpX2ZlbWFsZSkNCg0KYGBgDQoNClRoZSBtZWFuIFNTIGNoZWNrIGFtb3VudHMgYW5kIHRoZWlyIDk1JSBjb25maWRlbmNlIGludGVydmFscyBhcmUgYXMNCmZvbGxvd3M6DQoNCkZlbWFsZXM6DQoNCk1lYW46IFwkMTIzMy4wNCA5NSUgQ29uZmlkZW5jZSBJbnRlcnZhbDogKFwkMTIwNS4wOCwgXCQxMjYxLjAwKSBNYWxlczoNCg0KTWVhbjogXCQxNTc5LjYxIDk1JSBDb25maWRlbmNlIEludGVydmFsOiAoXCQxNTQ4LjcwLCBcJDE2MTAuNTIpIFRoZXNlDQpyZXN1bHRzIHNob3cgYSBjbGVhciBkaWZmZXJlbmNlIGluIHRoZSBtZWFuIFNTIGNoZWNrIGFtb3VudHMgYmV0d2Vlbg0KZmVtYWxlcyBhbmQgbWFsZXMsIHdpdGggbWFsZXMgcmVjZWl2aW5nIGhpZ2hlciBhbW91bnRzIG9uIGF2ZXJhZ2UuDQoNCmBgYHtyfQ0KIyBQZXJmb3JtIHR3by1zYW1wbGUgdC10ZXN0DQp0X3Rlc3RfcmVzdWx0IDwtIHQudGVzdChzc19jaGVja3MkTWFsZSwgc3NfY2hlY2tzJEZlbWFsZSwgdmFyLmVxdWFsID0gVFJVRSkNCnByaW50KHRfdGVzdF9yZXN1bHQpDQoNCmBgYA0KDQpUaGUgdC10ZXN0IHJlc3VsdHMgYXJlIGFzIGZvbGxvd3M6DQoNCnQtc3RhdGlzdGljOiAtMTUuNTYgcC12YWx1ZTogNi4zOMOXMTDiiJIyNg0KDQpHaXZlbiB0aGUgZXh0cmVtZWx5IGxvdyBwLXZhbHVlLCB3ZSByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZQ0KbWVhbiBTUyBjaGVjayBhbW91bnRzIGFyZSB0aGUgc2FtZSBmb3IgZmVtYWxlcyBhbmQgbWFsZXMuIFRoaXMgaW5kaWNhdGVzDQphIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiB0aGUgbWVhbiBhbW91bnRzIGJldHdlZW4gdGhlDQp0d28gZ3JvdXBzLCB3aXRoIG1hbGVzIHJlY2VpdmluZyBoaWdoZXIgYW1vdW50cyBvbiBhdmVyYWdlLg0KDQpgYGB7cn0NCiMgQ291bnRzIG9mIGluZGl2aWR1YWxzIHJlY2VpdmluZyBTUyBjaGVja3MgbGVzcyB0aGFuICQxNDAwDQpzdWNjZXNzX21hbGUgPSBzdW0oc3NfY2hlY2tzJE1hbGUgPCAxNDAwLCBuYS5ybSA9IFRSVUUpDQpzdWNjZXNzX2ZlbWFsZSA9IHN1bShzc19jaGVja3MkRmVtYWxlIDwgMTQwMCwgbmEucm0gPSBUUlVFKQ0KDQojIFRvdGFsIGluZGl2aWR1YWxzIGluIGVhY2ggZ3JvdXANCnRvdGFsX21hbGUgPSBsZW5ndGgoc3NfY2hlY2tzJE1hbGVbIWlzLm5hKHNzX2NoZWNrcyRNYWxlKV0pDQp0b3RhbF9mZW1hbGUgPSBsZW5ndGgoc3NfY2hlY2tzJEZlbWFsZVshaXMubmEoc3NfY2hlY2tzJEZlbWFsZSldKQ0KDQojIFBlcmZvcm0gdGhlIHByb3BvcnRpb24gdGVzdA0KcHJvcF90ZXN0IDwtIHByb3AudGVzdChjKHN1Y2Nlc3NfbWFsZSwgc3VjY2Vzc19mZW1hbGUpLCBjKHRvdGFsX21hbGUsIHRvdGFsX2ZlbWFsZSkpDQoNCiMgUHJpbnQgdGhlIHJlc3VsdA0KcHJpbnQocHJvcF90ZXN0KQ0KIA0KDQpgYGANCg0KVGhlIHByb3BvcnRpb25zIG9mIFNTIGNoZWNrcyBsZXNzIHRoYW4gXCQxNDAwIGFuZCB0aGUgcmVzdWx0cyBvZiB0aGUNCnByb3BvcnRpb25zIHotdGVzdCBhcmUgYXMgZm9sbG93czoNCg0KUHJvcG9ydGlvbiBvZiBGZW1hbGVzOiA5Ny41NiUgUHJvcG9ydGlvbiBvZiBNYWxlczogMi40NCUgVGhlIHByb3BvcnRpb25zDQp6LXRlc3QgeWllbGRlZDoNCg0Kei1zdGF0aXN0aWM6IDguODQgcC12YWx1ZTogOS40NsOXMTDiiJIxOQ0KDQpUaGUgZXh0cmVtZWx5IGxvdyBwLXZhbHVlIGxlYWRzIHVzIHRvIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzIHRoYXQNCnRoZSBwcm9wb3J0aW9ucyBvZiBTUyBjaGVja3MgbGVzcyB0aGFuIFwkMTQwMCBhcmUgdGhlIHNhbWUgZm9yIGZlbWFsZXMNCmFuZCBtYWxlcy4gVGhpcyByZXN1bHQgaW5kaWNhdGVzIGEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlDQppbiB0aGUgcHJvcG9ydGlvbnMsIHdpdGggYSBtdWNoIGhpZ2hlciBwcm9wb3J0aW9uIG9mIGZlbWFsZXMgcmVjZWl2aW5nDQpjaGVja3MgbGVzcyB0aGFuIFwkMTQwMCBjb21wYXJlZCB0byBtYWxlcy4NCg0KI1Rhc2sgMiBcIyhhKSBGaXQgYSByZWdyZXNzaW9uIG1vZGVsIHByZWRpY3RpbmcgR0RQIGZyb20gaG90ZWxzIGJhc2VkIG9uDQp5ZWFyLCBpbnZlc3RtZW50IGluIGhvdGVscywgaG90ZWwgYXJyaXZhbHMsIGFuZCBvdmVybmlnaHQgc3RheXMuIFwjKGIpDQpVc2UgdGhlIG1vZGVsIHRvIHByZWRpY3QgR0RQIGZyb20gaG90ZWxzIGZvciAyMDA2IHdpdGggZ2l2ZW4gdmFsdWVzIGZvcg0KcHJlZGljdG9ycy4gXCMoYykgQ29tcGFyZSB5b3VyIHJlc3VsdHMgd2l0aCB0aG9zZSBmcm9tIHRoZSBzcGVjaWZpZWQNCmFydGljbGUuDQoNCmBgYHtyfQ0KIyBMb2FkIGRhdGENCnRvdXJpc21fZGF0YSA8LSByZWFkLmNzdigiVG91cmlzbS5jc3YiKQ0KDQojIEZpdCBtb2RlbA0KbW9kZWwgPC0gbG0oR0RQX0hvdGVscyB+IFllYXIgKyBJbnZlc3RtZW50X0hvdGVscyArIEFycml2YWxzX0hvdGVscyArIE92ZXJuaWdodF9zdGF5cywgZGF0YT10b3VyaXNtX2RhdGEpDQpzdW1tYXJ5KG1vZGVsKQ0KYGBgDQoNCmBgYHtyfQ0KIyBQcmVkaWN0IEdEUF9Ib3RlbHMgZm9yIGdpdmVuIHZhbHVlcw0KbmV3X2RhdGEgPC0gZGF0YS5mcmFtZShZZWFyPTIwMDYsIEludmVzdG1lbnRfSG90ZWxzPTEwMDAsIEFycml2YWxzX0hvdGVscz01MDAwLCBPdmVybmlnaHRfc3RheXM9MjQwMDApDQpwcmVkaWN0KG1vZGVsLCBuZXdkYXRhPW5ld19kYXRhKQ0KDQpgYGANCg0KYGBge3J9DQojIFByZWRpY3QgR0RQX0hvdGVscyBmb3IgZ2l2ZW4gdmFsdWVzDQpuZXdfZGF0YSA8LSBkYXRhLmZyYW1lKFllYXI9MjAwNiwgSW52ZXN0bWVudF9Ib3RlbHM9MTAwMCwgQXJyaXZhbHNfSG90ZWxzPTUwMDAsIE92ZXJuaWdodF9zdGF5cz0yNDAwMCkNCnByZWRpY3QobW9kZWwsIG5ld2RhdGE9bmV3X2RhdGEpDQoNCmBgYA0KDQpUYXNrIDMgMykgdGhlIGRhdGEgZ2l2ZW4gaW4gdGhlIGZpbGUgUHJlc3RpZ2UuY3N2IChhKSBGaXQgYSByZWdyZXNzaW9uDQplcXVhdGlvbiBmb3IgWT1wcmVzdGlnZSBhcyBhIGZ1bmN0aW9uIG9mIHRoZSBwb3RlbnRpYWwgcHJlZGljdG9yczoNCmVkdWNhdGlvbiwgaW5jb21lLCB3b21lbiwgY2Vuc3VzLCBhbmQgdHlwZSAuDQoNCihiKSBQcmVkaWN0IHByZXN0aWdlIHdoZW4gZWR1Y2F0aW9uID0gMTIgaW5jb21lID0gMTIwMDAgd29tZW4gPSA1MA0KICAgIGNlbnN1cyA9IDEyMDAgdHlwZSA9IGJjDQoNCmBgYHtyfQ0KIyBMb2FkIGRhdGENCnByZXN0aWdlX2RhdGEgPC0gcmVhZC5jc3YoIlByZXN0aWdlLmNzdiIpDQoNCiMgRml0IG1vZGVsDQpwcmVzdGlnZV9tb2RlbCA8LSBsbShwcmVzdGlnZSB+IGVkdWNhdGlvbiArIGluY29tZSArIHdvbWVuICsgY2Vuc3VzICsgdHlwZSwgZGF0YT1wcmVzdGlnZV9kYXRhKQ0Kc3VtbWFyeShwcmVzdGlnZV9tb2RlbCkNCg0KYGBgDQoNCmBgYHtyfQ0KIyBQcmVkaWN0IHByZXN0aWdlIGZvciBnaXZlbiB2YWx1ZXMNCnByZWRpY3RfZGF0YSA8LSBkYXRhLmZyYW1lKGVkdWNhdGlvbj0xMiwgaW5jb21lPTEyMDAwLCB3b21lbj01MCwgY2Vuc3VzPTEyMDAsIHR5cGU9ImJjIikNCnByZWRpY3QocHJlc3RpZ2VfbW9kZWwsIG5ld2RhdGE9cHJlZGljdF9kYXRhKQ0KDQpgYGANCg0KVGFzayA0DQoNCjQpICBGb3IgdGhlIGRhdGEgZ2l2ZW4gaW4gdGhlIGZpbGUgQXV0byByYXRlcy5jc3Y6IFNvdXJjZS0tSG9hZ2xpbiwgRC4sDQogICAgTW9zdGVsbGVyLCBGLiwgYW5kIFR1a2V5LCBKLiAoMTk5MSkuIEZ1bmRhbWVudGFscyBvZiBFeHBsb3JhdG9yeQ0KICAgIEFuYWx5c2lzIG9mIFZhcmlhbmNlLiBXaWxleSwgTmV3IFlvcmssIHBhZ2UgNzEuDQogICAgPGh0dHA6Ly93d3cuaXRsLm5pc3QuZ292L2Rpdjg5OC9lZHVjYXRpb24vYW5vdmEvbmV3Y2FyLmRhdD4gUmVzcG9uc2UNCiAgICB2YXJpYWJsZSBZID0gaW50ZXJlc3QgcmF0ZSAoJSkgRmFjdG9yID0gQ2l0eSAoNiBsZXZlbHM6IDEgdG8gNikgQXJlDQogICAgdGhlIG1lYW4gaW50ZXJlc3QgcmF0ZXMgc2FtZSBmb3IgdGhlIDYgY2l0aWVzPw0KDQpgYGB7cn0NCiMgTG9hZCBkYXRhDQphdXRvX3JhdGVzIDwtIHJlYWQuY3N2KCJBdXRvIHJhdGVzLmNzdiIpDQoNCiMgUGVyZm9ybSBBTk9WQQ0KYW5vdmFfbW9kZWwgPC0gYW92KFJhdGUgfiBmYWN0b3IoQ2l0eSksIGRhdGE9YXV0b19yYXRlcykNCnN1bW1hcnkoYW5vdmFfbW9kZWwpDQoNCmBgYA0KDQpFeHBlcmltZW50IGFuZCBIUiBEYXRhIEFuYWx5c2lzIChhKSBBbmFseXplIHRoZSBpbmRlcGVuZGVuY2Ugb2YgdGhlDQpncmVldGluZyByZWNlaXZlZCBieSBjdXN0b21lcnMgYW5kIHRoZWlyIGFnZSB1c2luZyB0aGUgZGF0YSBmcm9tDQpHcmVldGluZyBhbmQgQWdlLmNzdi4gKGIpIFRlc3QgdGhlIGluZGVwZW5kZW5jZSBvZiBhZ2UgdmVyc3VzIGxlbmd0aCBvZg0KYWJzZW5jZSB1c2luZyB0aGUgZGF0YSBmcm9tIEFic2VudGVlIFJlcG9ydC5jc3bigIvigIsuDQoNCmBgYHtyfQ0KIyBMb2FkIG5lY2Vzc2FyeSBsaWJyYXJpZXMNCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGRwbHlyKQ0KDQojIExvYWQgYW5kIGNsZWFuIEdyZWV0aW5nIGFuZCBBZ2UgZGF0YQ0KZ3JlZXRpbmdfYWdlIDwtIHJlYWRfY3N2KCJHcmVldGluZyBhbmQgQWdlLmNzdiIsIG5hID0gYygiIiwgIk5BIikpDQpncmVldGluZ19hZ2UgPC0gZ3JlZXRpbmdfYWdlWy0xLCAtMV0gICMgUmVtb3ZlIHRoZSBmaXJzdCByb3cgKGV4dHJhIGhlYWRlcikgYW5kIHRoZSB1bm5hbWVkIGNvbHVtbg0KY29sbmFtZXMoZ3JlZXRpbmdfYWdlKSA8LSBjKCJHUkVFVElORyIsICIyMS0yNSIsICIyNi01MCIsICI+NTAiKQ0KZ3JlZXRpbmdfYWdlWywgMjo0XSA8LSBsYXBwbHkoZ3JlZXRpbmdfYWdlWywgMjo0XSwgZnVuY3Rpb24oeCkgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeCkpKQ0KDQojIFBlcmZvcm0gY2hpLXNxdWFyZSB0ZXN0DQpncmVldGluZ190YWJsZSA8LSBhcy50YWJsZShhcy5tYXRyaXgoZ3JlZXRpbmdfYWdlWywgMjo0XSkpDQpncmVldGluZ190ZXN0IDwtIGNoaXNxLnRlc3QoZ3JlZXRpbmdfdGFibGUpDQoNCiMgRGlzcGxheSByZXN1bHRzDQpwcmludChncmVldGluZ190ZXN0KQ0KDQojIExvYWQgYW5kIGNsZWFuIEFic2VudGVlIFJlcG9ydCBkYXRhDQphYnNlbnRlZV9yZXBvcnQgPC0gcmVhZF9jc3YoIkFic2VudGVlIFJlcG9ydC5jc3YiLCBuYSA9IGMoIiIsICJOQSIpKQ0KDQojIENoZWNrIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGxvYWRlZCBhYnNlbnRlZSByZXBvcnQgZGF0YQ0KcHJpbnQoYWJzZW50ZWVfcmVwb3J0KQ0KDQojIERyb3AgdGhlIGZpcnN0IHJvdyBhbmQgYW55IHVubmVjZXNzYXJ5IGNvbHVtbnMNCmFic2VudGVlX3JlcG9ydF9jbGVhbmVkIDwtIGFic2VudGVlX3JlcG9ydFstMSwgXQ0KYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQgPC0gYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQgJT4lIHNlbGVjdCgtMSkNCg0KIyBNYW51YWxseSBuYW1lIHRoZSBjb2x1bW5zIGJhc2VkIG9uIGF2YWlsYWJsZSBjb2x1bW5zDQppZiAobmNvbChhYnNlbnRlZV9yZXBvcnRfY2xlYW5lZCkgPT0gNCkgew0KICAgIGNvbG5hbWVzKGFic2VudGVlX3JlcG9ydF9jbGVhbmVkKSA8LSBjKCJBR0VfR1JPVVAiLCAiMV9EQVkiLCAiMi00X0RBWVMiLCAiPjdfREFZUyIpDQp9IGVsc2UgaWYgKG5jb2woYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQpID09IDUpIHsNCiAgICBjb2xuYW1lcyhhYnNlbnRlZV9yZXBvcnRfY2xlYW5lZCkgPC0gYygiQUdFX0dST1VQIiwgIjFfREFZIiwgIjItNF9EQVlTIiwgIjUtN19EQVlTIiwgIj43X0RBWVMiKQ0KfQ0KDQojIENvbnZlcnQgdG8gbnVtZXJpYywgc2tpcHBpbmcgdGhlICJBR0VfR1JPVVAiIGNvbHVtbg0KYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWRbLCAyOm5jb2woYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQpXSA8LSBsYXBwbHkoDQogICAgYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWRbLCAyOm5jb2woYWJzZW50ZWVfcmVwb3J0X2NsZWFuZWQpXSwgDQogICAgZnVuY3Rpb24oeCkgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeCkpDQopDQoNCiMgUGVyZm9ybSBjaGktc3F1YXJlIHRlc3QNCmFic2VudGVlX3RhYmxlIDwtIGFzLnRhYmxlKGFzLm1hdHJpeChhYnNlbnRlZV9yZXBvcnRfY2xlYW5lZFssIDI6bmNvbChhYnNlbnRlZV9yZXBvcnRfY2xlYW5lZCldKSkNCmFic2VudGVlX3Rlc3QgPC0gY2hpc3EudGVzdChhYnNlbnRlZV90YWJsZSkNCg0KIyBEaXNwbGF5IHJlc3VsdHMNCnByaW50KGFic2VudGVlX3Rlc3QpDQoNCg0KYGBgDQoNCjEuICBHcmVldGluZyBhbmQgQWdlIEFuYWx5c2lzIE9iamVjdGl2ZTogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHR5cGUgb2YNCiAgICBncmVldGluZyByZWNlaXZlZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgY3VzdG9tZXIncyBhZ2UuIFRlc3QNCiAgICBFeHBsYW5hdGlvbjogVGhlIGNoaS1zcXVhcmUgdGVzdCBjb21wYXJlcyB0aGUgb2JzZXJ2ZWQgZnJlcXVlbmNpZXMNCiAgICBvZiBncmVldGluZ3MgYWNyb3NzIGFnZSBncm91cHMgd2l0aCB0aGUgZXhwZWN0ZWQgZnJlcXVlbmNpZXMgaWYgbm8NCiAgICBhc3NvY2lhdGlvbiBleGlzdHMuIEludGVycHJldGluZyB0aGUgT3V0cHV0Og0KDQpDaGktU3F1YXJlIFN0YXRpc3RpYzogQSBtZWFzdXJlIG9mIGhvdyBtdWNoIHRoZSBvYnNlcnZlZCBmcmVxdWVuY2llcw0KZGV2aWF0ZSBmcm9tIGV4cGVjdGVkIGZyZXF1ZW5jaWVzLiBEZWdyZWVzIG9mIEZyZWVkb206IENhbGN1bGF0ZWQgYmFzZWQNCm9uIHRoZSBudW1iZXIgb2YgY2F0ZWdvcmllcyBpbiBib3RoIHZhcmlhYmxlcy4gUC1WYWx1ZTogSW5kaWNhdGVzIHRoZQ0KcHJvYmFiaWxpdHkgdGhhdCB0aGUgb2JzZXJ2ZWQgYXNzb2NpYXRpb24gaGFwcGVuZWQgYnkgY2hhbmNlLg0KQ29uY2x1c2lvbjoNCg0KSWYgdGhlIHAtdmFsdWUgaXMgbGVzcyB0aGFuIDAuMDUsIHdlIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzLA0Kc3VnZ2VzdGluZyB0aGF0IGdyZWV0aW5nIHR5cGUgZGVwZW5kcyBvbiBhZ2UuIE90aGVyd2lzZSwgd2UgZmFpbCB0bw0KcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMsIGltcGx5aW5nIGluZGVwZW5kZW5jZS4gMi4gQWJzZW50ZWUgUmVwb3J0DQpBbmFseXNpcyBPYmplY3RpdmU6IFRlc3Qgd2hldGhlciB0aGUgYWdlIGdyb3VwIGlzIGluZGVwZW5kZW50IG9mIHRoZQ0KbGVuZ3RoIG9mIGFic2VuY2UuIFRlc3QgRXhwbGFuYXRpb246IFNpbWlsYXIgdG8gdGhlIGZpcnN0IHRlc3QsIGl0DQpjb21wYXJlcyBvYnNlcnZlZCBhYnNlbmNlIGR1cmF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IGFnZSBncm91cHMgd2l0aA0Kd2hhdCB3ZSdkIGV4cGVjdCB1bmRlciBpbmRlcGVuZGVuY2UuIEludGVycHJldGluZyB0aGUgT3V0cHV0Og0KDQpDaGktU3F1YXJlIFN0YXRpc3RpYzogSW5kaWNhdGVzIHRoZSBkZXZpYXRpb24gYmV0d2VlbiBvYnNlcnZlZCBhbmQNCmV4cGVjdGVkIGZyZXF1ZW5jaWVzLiBEZWdyZWVzIG9mIEZyZWVkb206IERlcGVuZHMgb24gdGhlIG51bWJlciBvZg0KY2F0ZWdvcmllcyBpbiBhZ2UgZ3JvdXBzIGFuZCBhYnNlbmNlIGxlbmd0aHMuIFAtVmFsdWU6IFRoZSBsaWtlbGlob29kDQp0aGF0IHRoZSBvYnNlcnZlZCByZXN1bHRzIG9jY3VycmVkIGJ5IHJhbmRvbSBjaGFuY2UuIENvbmNsdXNpb246DQoNCklmIHRoZSBwLXZhbHVlIGlzIGxlc3MgdGhhbiAwLjA1LCB3ZSByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcywNCmluZGljYXRpbmcgdGhhdCBhZ2UgZ3JvdXAgYWZmZWN0cyBhYnNlbmNlIGxlbmd0aC4gT3RoZXJ3aXNlLCB0aGUgbnVsbA0KaHlwb3RoZXNpcyBjYW5ub3QgYmUgcmVqZWN0ZWQsIGltcGx5aW5nIGluZGVwZW5kZW5jZS4gRXhhbXBsZQ0KSW50ZXJwcmV0YXRpb246IExldCdzIHN1cHBvc2UgdGhlc2UgaHlwb3RoZXRpY2FsIHZhbHVlcyB3ZXJlIHJldHVybmVkOg0KDQpHcmVldGluZyBhbmQgQWdlOiBDaGktU3F1YXJlIFN0YXRpc3RpYzogNi4yNSBEZWdyZWVzIG9mIEZyZWVkb206IDQNClAtVmFsdWU6IDAuMTggQ29uY2x1c2lvbjogVGhlIHAtdmFsdWUgb2YgMC4xOCBpcyBncmVhdGVyIHRoYW4gMC4wNSwNCmluZGljYXRpbmcgdGhhdCB0aGUgdHlwZSBvZiBncmVldGluZyBpcyBsaWtlbHkgaW5kZXBlbmRlbnQgb2YgY3VzdG9tZXINCmFnZS4gQWJzZW50ZWUgUmVwb3J0OiBDaGktU3F1YXJlIFN0YXRpc3RpYzogMTIuMjAgRGVncmVlcyBvZiBGcmVlZG9tOiA2DQpQLVZhbHVlOiAwLjA1NyBDb25jbHVzaW9uOiBUaGUgcC12YWx1ZSBvZiAwLjA1NyBpcyBjbG9zZSB0byAwLjA1IGJ1dA0KZG9lcyBub3QgY3Jvc3MgaXQuIFRoZXJlZm9yZSwgd2UgY2FuJ3Qgc3Ryb25nbHkgY29uY2x1ZGUgdGhhdCBhZ2UgaXMNCnJlbGF0ZWQgdG8gYWJzZW5jZSBsZW5ndGggYXQgdGhlIDUlIHNpZ25pZmljYW5jZSBsZXZlbC4gRnVydGhlcg0KaW52ZXN0aWdhdGlvbiB3aXRoIGFkZGl0aW9uYWwgZGF0YSBjb3VsZCByZXZlYWwgYSBjbGVhcmVyIHJlbGF0aW9uc2hpcC4NCg==