Task 1: Correlation Analysis
1A) Read the csv file into R Studio and display the dataset.
1B) Create a correlation table for your to compare the correlations between all variables. Remove any variables where correlation between variables is irrelevant or inaccurate
- Commands: cor() mydata[ -c(“COLUMN_NAME OR COLUMN_NUMBER”) ]
#corr = cor( MYDATA )
#corr
corr = cor(mydata [ -c (1) ])
corr
TV radio newspaper sales
TV 1.00000000 0.05480866 0.05664787 0.7822244
radio 0.05480866 1.00000000 0.35410375 0.5762226
newspaper 0.05664787 0.35410375 1.00000000 0.2282990
sales 0.78222442 0.57622257 0.22829903 1.0000000
1C) Why is the value “1.0” down the diagonal? Which pairs seem to have the strongest correlations, list the pairs.
The value “1.0” goes down on a diagonal because at each point where “1.0” is located exact same variables are matched up with each other. For example, “1.0” first appears where TV is matched up with TV. Since they are the same variables, the relationship between them is perfectly correlated. The paris that seem to have the strongest correlations are TV and sales, and radio and sales.
1D-a) Identifying the dependent variable (y) and one independent variable (x_i) using the correlation table to identify a variable with a coefficient greater than 0.20 and lower than 0.60. Use those two variables to create a scatterplot to visualize the data. Note any patterns or relation between the two variables
- Commands: qplot( x = VARIABLE, y = VARIABLE, data = mydata)
qplot( x = radio, y = sales, data = mydata)

Task 2: Regression Analysis
- To create a regression model we use the function lm(), such as lm( y ~ x )
- Where the independent variable or variables [ x_1, x_2, … x_i ], predict the values of the dependent variable y.
2A) Create a linear regression model by identifying the dependent variable (y) and for independent variable (x_i) use the correlation table to identify a variable with a coefficient greater than 0.20 and lower than 0.60. (same variables as 1D-a)
#Simple Linear Regression Model
#reg <- lm( DEPENDENT_VARIABLE ~ INDEPENDENT_VARIABLE )
reg = lm( sales ~ radio )
2B) Use the regression model to create a report. Note the R-Squared and Adjusted R-Squared values, determine if this is a good or bad fit for your data?
- Commands: Use the summary() function to create a report for the linear model
#Summary of Simple Linear Regression Model
#summary(MODEL)
summary(reg)
Call:
lm(formula = sales ~ radio)
Residuals:
Min 1Q Median 3Q Max
-15.7305 -2.1324 0.7707 2.7775 8.1810
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.31164 0.56290 16.542 <2e-16 ***
radio 0.20250 0.02041 9.921 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.275 on 198 degrees of freedom
Multiple R-squared: 0.332, Adjusted R-squared: 0.3287
F-statistic: 98.42 on 1 and 198 DF, p-value: < 2.2e-16
The R-squared value for this data is 0.332 and the adjusted R-squared is 0.3287. Low R-quared values, generally anything below 0.5, indicate that the regression model is a bad fit for the data, which is true in this case.
2C) Create a plot for the dependent (y) and independent (x) variables Note any patterns or relation between the two variables describe the trend line.
- The trend line will show how far the predictions are from the actual value
- The distance from the actual versus the predicted is the residual
#p <- qplot( x = INDEPENDENT_VARIABLE, y = DEPENDENT_VARIABLE, data = mydata) + geom_point()
p <- qplot( x = radio, y = sales, data = mydata) + geom_point()
#Add a trend line plot using the a linear model
#p + geom_smooth(method = "lm", formula = y ~ x)
p + geom_smooth(medthod = "lm", formula = y ~ x)
Ignoring unknown parameters: medthod

We can see from the trend line that we just created that there is a positive correlation or relationship between radio and sales. From the positive slope of the line, we know that as one variable increases, so does the other.
2D-b) Create a Multiple Linear Regression Model using all relevant independent variables and the dependent variable. Note the R-Squared and Adjusted R-Squared values, determine if this is a good or bad fit for your data?
mlr2 = lm(sales ~ radio + TV + newspaper, data=mydata)
summary(mlr2)
Call:
lm(formula = sales ~ radio + TV + newspaper, data = mydata)
Residuals:
Min 1Q Median 3Q Max
-8.8277 -0.8908 0.2418 1.1893 2.8292
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.938889 0.311908 9.422 <2e-16 ***
radio 0.188530 0.008611 21.893 <2e-16 ***
TV 0.045765 0.001395 32.809 <2e-16 ***
newspaper -0.001037 0.005871 -0.177 0.86
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.686 on 196 degrees of freedom
Multiple R-squared: 0.8972, Adjusted R-squared: 0.8956
F-statistic: 570.3 on 3 and 196 DF, p-value: < 2.2e-16
This model gives us an R-quared value of 0.8972 and an adjusted R-squared of 0.8956. These R-squared values are also much higher than the ones from the first model, and they are also a good fit for this data.
Based purely on the values for R-Squared and Adjusted R-Squared, which linear regression model is best in predicting the dependent variable? Explain why
The second and third model are extremely close to each other, however the second linear regression model is slightly better at predicting the dependent variable. Both the second and third model have the same R-squared value of 0.8972, however the second model has a slighty higher adjusted R-squared value which is 0.8962 compared to 0.8956. Even though this is a very small difference between the two adjusted R-squared values it is enough to make the second model slightly better.
2E) Use the three different models to predicted the dependent variable for the given values of the independent variables.
- Variable: Radio = 69
- Variable: TV = 255
- Variable: newspaper = 75
MODEL 1
sales_predicted1 = 9.3166 + (0.20250) * (radio)
sales_predicted1
[1] 23.2891
MODEL 2
sales_predicted2 = 2.92110 + 0.18799 * (radio) + 0.04575 * (TV)
sales_predicted2
[1] 27.55866
MODEL 3
sales_predicted3 = 2.938889 + 0.188530 * (radio) + 0.045765 * (TV) - 0.001037 * (newspaper)
sales_predicted3
[1] 27.53976
Task 3: Watson Analysis
To complete the last task, follow the directions found below. Make sure to screenshot and attach any pictures of the results obtained or any questions asked.
3A) Use the Predictive module to analyze the given data. Note any interesting patterns add an screenshot of what you found.
knitr::include_graphics("imgs/screenshot1.png")

knitr::include_graphics("imgs/screenshot2.png")

These predictive modules show that TV and radio are both strong predictors of sales. I also found it interesting that the predictive strength of this model is 72%.
3B) Note the predictive power strength of reported variables. Consider the one field predictive model only, describe your findings and add and screenshot
knitr::include_graphics("imgs/screenshot3.png")

This graphic once again shows that TV and radio are the strongest drivers of sales, combined they accound for 94% of sales. TV drives sales by 59% and radio drives sales by 32%. This also aligns with the regression models we used earlier which also show that TV was the strongest driver of sales.
3C) How do Watson results reconcile with your findings based on the R regression analysis in task 2? Explain how.
As mentioned above, the Watson results support the our findings from the R regression analysis. Watson analytics showed that TV and radio are the strongest drivers of sales and the regression models showed that TV and radio resulted in the strongest R-squared values proving that they are highly correlated and are best at driving sales.
LS0tCnRpdGxlOiAiUHJlZGljdGl2ZSBBbmFseXRpY3MiCmF1dGhvcjogIkNhbWVyb24gR2VyaGFydCIKZGF0ZTogIk1hcmNoIDYsIDIwMTgiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdApzdWJ0aXRsZTogQ01FIEdyb3VwIEZvdW5kYXRpb24gQnVzaW5lc3MgQW5hbHl0aWNzIExhYgotLS0KCi0tLS0tLS0tLS0tLS0KCiMjIE5vdGVib29rIEluc3RydWN0aW9ucwoKLS0tLS0tLS0tLS0tLQoKKiBGb3IgeW91ciBhc3NpZ25tZW50IHlvdSBtYXkgYmUgdXNpbmcgZGlmZmVyZW50IGRhdGFzZXQgdGhhbiB3aGF0IGlzIGluY2x1ZGVkIGhlcmUuIAoKKiBBbHdheXMgcmVhZCBjYXJlZnVsbHkgdGhlIGluc3RydWN0aW9ucyBvbiBTYWthaS4gIAoKKiBUYXNrcy9xdWVzdGlvbnMgdG8gYmUgY29tcGxldGVkL2Fuc3dlcmVkIGFyZSBoaWdobGlnaHRlZCBpbiBsYXJnZXIgYm9sZGVkIGZvbnRzIGFuZCBudW1iZXJlZCBhY2NvcmRpbmcgdG8gdGhlaXIgc2VjdGlvbi4KCiMjIyBBYm91dAoKKiBJbiBhIGdpdmVuIHllYXIsIGlmIGl0IHJhaW5zIG1vcmUsIHdlIG1heSBzZWUgdGhhdCB0aGVyZSBtaWdodCBiZSBhbiBpbmNyZWFzZSBpbiBjcm9wIHByb2R1Y3Rpb24uIFRoaXMgaXMgYmVjYXVzZSBtb3JlIHdhdGVyIG1heSBsZWFkIHRvIG1vcmUgcGxhbnRzLiAKCiogVGhpcyBpcyBhIGRpcmVjdCByZWxhdGlvbnNoaXA7IHRoZSBudW1iZXIgb2YgZnJ1aXRzIG1heSBiZSBhYmxlIHRvIGJlIHByZWRpY3RlZCBieSBhbW91bnQgb2Ygd2F0ZXJmYWxsIGluIGEgY2VydGFpbiB5ZWFyLiAKCiogVGhpcyBleGFtcGxlIHJlcHJlc2VudHMgc2ltcGxlIGxpbmVhciByZWdyZXNzaW9uLCB3aGljaCBpcyBhbiBleHRyZW1lbHkgdXNlZnVsIGNvbmNlcHQgdGhhdCBhbGxvd3MgdXMgdG8gcHJlZGljdCB2YWx1ZXMgb2YgYSBjZXJ0YWluIHZhcmlhYmxlIGJhc2VkIG9mZiBhbm90aGVyIHZhcmlhYmxlLiAKCiogVGhpcyBsYWIgd2lsbCBleHBsb3JlIHRoZSBjb25jZXB0cyBvZiBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb24sIG11bHRpcGxlIGxpbmVhciByZWdyZXNzaW9uLCBhbmQgd2F0c29uIGFuYWx5dGljcy4gCgoKIyMjIExvYWQgUGFja2FnZXMgaW4gUi9SU3R1ZGlvIAoKV2UgYXJlIGdvaW5nIHRvIHVzZSB0aWR5dmVyc2UgYSBjb2xsZWN0aW9uIG9mIFIgcGFja2FnZXMgZGVzaWduZWQgZm9yIGRhdGEgc2NpZW5jZS4gCgoqIEluZm86IGh0dHBzOi8vd3d3LnRpZHl2ZXJzZS5vcmcvCgpgYGB7ciwgZWNobyA9IEZBTFNFfQoKIyBIZXJlIHdlIGFyZSBjaGVja2luZyBpZiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQKaWYoIXJlcXVpcmUoInRpZHl2ZXJzZSIpKXsKICAKICAjIElmIHRoZSBwYWNrYWdlIGlzIG5vdCBpbiB0aGUgc3lzdGVtIHRoZW4gaXQgd2lsbCBiZSBpbnN0YWxsCiAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIiwgZGVwZW5kZW5jaWVzID0gVFJVRSkKICAKICAjIEhlcmUgd2UgYXJlIGxvYWRpbmcgdGhlIHBhY2thZ2UKICBsaWJyYXJ5KCJ0aWR5dmVyc2UiKQp9CgojIEhlcmUgd2UgYXJlIGNoZWNraW5nIGlmIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZAppZighcmVxdWlyZSgicGxvdGx5IikpewogIAogICMgSWYgdGhlIHBhY2thZ2UgaXMgbm90IGluIHRoZSBzeXN0ZW0gdGhlbiBpdCB3aWxsIGJlIGluc3RhbGwKICBpbnN0YWxsLnBhY2thZ2VzKCJwbG90bHkiLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQogIAogICMgSGVyZSB3ZSBhcmUgbG9hZGluZyB0aGUgcGFja2FnZQogIGxpYnJhcnkoInBsb3RseSIpCn0KCmBgYAoKLS0tLS0tLS0tLS0tLQoKIyMgVGFzayAxOiBDb3JyZWxhdGlvbiBBbmFseXNpcwoKLS0tLS0tLS0tLS0tLQoKIyMjIDFBKSBSZWFkIHRoZSBjc3YgZmlsZSBpbnRvIFIgU3R1ZGlvIGFuZCBkaXNwbGF5IHRoZSBkYXRhc2V0LiAKCiogTmFtZSB5b3VyIGRhdGFzZXQgJ215ZGF0YScgc28gaXQgZWFzeSB0byB3b3JrIHdpdGguCgoqIENvbW1hbmRzOiByZWFkX2NzdigpIHJlbmFtZSgpIGhlYWQoKQoKIyMjIyBFeHRyYWN0IHRoZSBhc3NpZ25lZCBmZWF0dXJlcyAoY29sdW1ucykgdG8gcGVyZm9ybSBzb21lIGFuYWx5dGljcy4gCgpgYGB7cn0KCm15ZGF0YSA9IHJlYWQuY3N2KGZpbGU9ImRhdGEvQWR2ZXJ0aXNpbmcuY3N2IikKaGVhZChteWRhdGEpCmBgYAoKYGBge3J9CnNhbGVzID0gbXlkYXRhJHNhbGVzCnJhZGlvID0gbXlkYXRhJHJhZGlvCm5ld3NwYXBlciA9IG15ZGF0YSRuZXdzcGFwZXIKVFYgPSBteWRhdGEkVFYKYGBgCgojIyMgMUIpIENyZWF0ZSBhIGNvcnJlbGF0aW9uIHRhYmxlIGZvciB5b3VyIHRvIGNvbXBhcmUgdGhlIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGFsbCB2YXJpYWJsZXMuIFJlbW92ZSBhbnkgdmFyaWFibGVzIHdoZXJlIGNvcnJlbGF0aW9uIGJldHdlZW4gdmFyaWFibGVzIGlzIGlycmVsZXZhbnQgb3IgaW5hY2N1cmF0ZQoKKiBDb21tYW5kczogY29yKCkgbXlkYXRhWyAtYygiQ09MVU1OX05BTUUgT1IgQ09MVU1OX05VTUJFUiIpIF0KCmBgYHtyfQoKI2NvcnIgPSBjb3IoIE1ZREFUQSApCiNjb3JyCgpjb3JyID0gY29yKG15ZGF0YSBbIC1jICgxKSBdKQpjb3JyCmBgYAoKIyMjIDFDKSBXaHkgaXMgdGhlIHZhbHVlICIxLjAiIGRvd24gdGhlIGRpYWdvbmFsPyBXaGljaCBwYWlycyBzZWVtIHRvIGhhdmUgdGhlIHN0cm9uZ2VzdCBjb3JyZWxhdGlvbnMsIGxpc3QgdGhlIHBhaXJzLiAKVGhlIHZhbHVlICIxLjAiIGdvZXMgZG93biBvbiBhIGRpYWdvbmFsIGJlY2F1c2UgYXQgZWFjaCBwb2ludCB3aGVyZSAiMS4wIiBpcyBsb2NhdGVkIGV4YWN0IHNhbWUgdmFyaWFibGVzIGFyZSBtYXRjaGVkIHVwIHdpdGggZWFjaCBvdGhlci4gRm9yIGV4YW1wbGUsICIxLjAiIGZpcnN0IGFwcGVhcnMgd2hlcmUgVFYgaXMgbWF0Y2hlZCB1cCB3aXRoIFRWLiBTaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSB2YXJpYWJsZXMsIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtIGlzIHBlcmZlY3RseSBjb3JyZWxhdGVkLiBUaGUgcGFyaXMgdGhhdCBzZWVtIHRvIGhhdmUgdGhlIHN0cm9uZ2VzdCBjb3JyZWxhdGlvbnMgYXJlIFRWIGFuZCBzYWxlcywgYW5kIHJhZGlvIGFuZCBzYWxlcy4gCgoKIyMjIDFELWEpIElkZW50aWZ5aW5nIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgKHkpIGFuZCBvbmUgaW5kZXBlbmRlbnQgdmFyaWFibGUgKHhfaSkgdXNpbmcgdGhlIGNvcnJlbGF0aW9uIHRhYmxlIHRvIGlkZW50aWZ5IGEgdmFyaWFibGUgd2l0aCBhIGNvZWZmaWNpZW50IGdyZWF0ZXIgdGhhbiAwLjIwIGFuZCBsb3dlciB0aGFuIDAuNjAuIFVzZSB0aG9zZSB0d28gdmFyaWFibGVzIHRvIGNyZWF0ZSBhIHNjYXR0ZXJwbG90IHRvIHZpc3VhbGl6ZSB0aGUgZGF0YS4gTm90ZSBhbnkgcGF0dGVybnMgb3IgcmVsYXRpb24gYmV0d2VlbiB0aGUgdHdvIHZhcmlhYmxlcwoKKiBDb21tYW5kczogcXBsb3QoIHggPSBWQVJJQUJMRSwgeSA9IFZBUklBQkxFLCBkYXRhID0gbXlkYXRhKQoKYGBge3J9CnFwbG90KCB4ID0gcmFkaW8sIHkgPSBzYWxlcywgZGF0YSA9IG15ZGF0YSkKYGBgCgoKIyMjIDFELWIpIENyZWF0ZSBhIDNEIHNjYXR0ZXJwbG90IGJldHdlZW4gdGhlIHR3byBvZiB0aGUgc3Ryb25nZXN0IGNvcnJlbGF0ZWQgdmFyaWFibGVzIHRvIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUuIE5vdGUgYW55IHBhdHRlcm5zIGFuZCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhyZWUgcG9pbnRzIHdpdGggdGhlIGhlaWdodHMgdmFsdWVzICh4LHkseikKCmBgYHtyfQoKI3AgPC0gcGxvdF9seShteWRhdGEsIHggPSB+VkFSSUJMRV8xLCB5ID0gflZBUklCTEVfMiwgeiA9IH5WQVJJQkxFXzMsIG1hcmtlciA9IGxpc3Qoc2l6ZSA9IDUpKSAlPiUKIyAgYWRkX21hcmtlcnMoKSAlPiUgCiNwCgoKcCA9IHBsb3RfbHkobXlkYXRhLCB4ID0gfnJhZGlvLCB5ID0gflRWLCB6ID0gfnNhbGVzLCBtYXJrZXIgPSBsaXN0KHNpemUgPSA1KSkgJT4lCiAgYWRkX21hcmtlcnMoKSAKcApgYGAKCgotLS0tLS0tLS0tLS0tCgojIyBUYXNrIDI6IFJlZ3Jlc3Npb24gQW5hbHlzaXMKCi0tLS0tLS0tLS0tLS0KCiogVG8gY3JlYXRlIGEgcmVncmVzc2lvbiBtb2RlbCB3ZSB1c2UgdGhlIGZ1bmN0aW9uIGxtKCksIHN1Y2ggYXMgbG0oIHkgfiB4ICkKKiBXaGVyZSB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGUgb3IgdmFyaWFibGVzIFsgeF8xLCB4XzIsIC4uLiB4X2kgXSwgcHJlZGljdCB0aGUgdmFsdWVzIG9mIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgeS4KCiMjIyAyQSkgQ3JlYXRlIGEgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgYnkgaWRlbnRpZnlpbmcgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSAoeSkgYW5kIGZvciBpbmRlcGVuZGVudCB2YXJpYWJsZSAoeF9pKSB1c2UgdGhlIGNvcnJlbGF0aW9uIHRhYmxlIHRvIGlkZW50aWZ5IGEgdmFyaWFibGUgd2l0aCBhIGNvZWZmaWNpZW50IGdyZWF0ZXIgdGhhbiAwLjIwIGFuZCBsb3dlciB0aGFuIDAuNjAuIChzYW1lIHZhcmlhYmxlcyBhcyAxRC1hKQoKKiBDb21tYW5kczogbG0oIHkgfiB4ICkgCgpgYGB7cn0KI1NpbXBsZSBMaW5lYXIgUmVncmVzc2lvbiBNb2RlbAoKI3JlZyA8LSBsbSggREVQRU5ERU5UX1ZBUklBQkxFIH4gSU5ERVBFTkRFTlRfVkFSSUFCTEUgKQoKcmVnID0gbG0oIHNhbGVzIH4gcmFkaW8gKQpgYGAKCgojIyMgMkIpIFVzZSB0aGUgcmVncmVzc2lvbiBtb2RlbCB0byBjcmVhdGUgYSByZXBvcnQuIE5vdGUgdGhlIFItU3F1YXJlZCBhbmQgQWRqdXN0ZWQgUi1TcXVhcmVkIHZhbHVlcywgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBnb29kIG9yIGJhZCBmaXQgZm9yIHlvdXIgZGF0YT8KCiogQ29tbWFuZHM6IFVzZSB0aGUgc3VtbWFyeSgpIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIHJlcG9ydCBmb3IgdGhlIGxpbmVhciBtb2RlbAoKYGBge3J9CiNTdW1tYXJ5IG9mIFNpbXBsZSBMaW5lYXIgUmVncmVzc2lvbiBNb2RlbAoKI3N1bW1hcnkoTU9ERUwpCgpzdW1tYXJ5KHJlZykKYGBgClRoZSBSLXNxdWFyZWQgdmFsdWUgZm9yIHRoaXMgZGF0YSBpcyAwLjMzMiBhbmQgdGhlIGFkanVzdGVkIFItc3F1YXJlZCBpcyAwLjMyODcuIExvdyBSLXF1YXJlZCB2YWx1ZXMsIGdlbmVyYWxseSBhbnl0aGluZyBiZWxvdyAwLjUsIGluZGljYXRlIHRoYXQgdGhlIHJlZ3Jlc3Npb24gbW9kZWwgaXMgYSBiYWQgZml0IGZvciB0aGUgZGF0YSwgd2hpY2ggaXMgdHJ1ZSBpbiB0aGlzIGNhc2UuIAoKIyMjIDJDKSBDcmVhdGUgYSBwbG90IGZvciB0aGUgZGVwZW5kZW50ICh5KSBhbmQgaW5kZXBlbmRlbnQgKHgpIHZhcmlhYmxlcyBOb3RlIGFueSBwYXR0ZXJucyBvciByZWxhdGlvbiBiZXR3ZWVuIHRoZSB0d28gdmFyaWFibGVzIGRlc2NyaWJlIHRoZSB0cmVuZCBsaW5lLgoKKiBUaGUgdHJlbmQgbGluZSB3aWxsIHNob3cgaG93IGZhciB0aGUgcHJlZGljdGlvbnMgYXJlIGZyb20gdGhlIGFjdHVhbCB2YWx1ZQoqIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBhY3R1YWwgdmVyc3VzIHRoZSBwcmVkaWN0ZWQgaXMgdGhlIHJlc2lkdWFsCgpgYGB7cn0KCiNwIDwtIHFwbG90KCB4ID0gSU5ERVBFTkRFTlRfVkFSSUFCTEUsIHkgPSBERVBFTkRFTlRfVkFSSUFCTEUsIGRhdGEgPSBteWRhdGEpICsgZ2VvbV9wb2ludCgpCgpwIDwtIHFwbG90KCB4ID0gcmFkaW8sIHkgPSBzYWxlcywgZGF0YSA9IG15ZGF0YSkgKyBnZW9tX3BvaW50KCkKCiNBZGQgYSB0cmVuZCBsaW5lIHBsb3QgdXNpbmcgdGhlIGEgbGluZWFyIG1vZGVsCiNwICsgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgZm9ybXVsYSA9IHkgfiB4KQoKcCArIGdlb21fc21vb3RoKG1lZHRob2QgPSAibG0iLCBmb3JtdWxhID0geSB+IHgpCmBgYApXZSBjYW4gc2VlIGZyb20gdGhlIHRyZW5kIGxpbmUgdGhhdCB3ZSBqdXN0IGNyZWF0ZWQgdGhhdCB0aGVyZSBpcyBhIHBvc2l0aXZlIGNvcnJlbGF0aW9uIG9yIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHJhZGlvIGFuZCBzYWxlcy4gRnJvbSB0aGUgcG9zaXRpdmUgc2xvcGUgb2YgdGhlIGxpbmUsIHdlIGtub3cgdGhhdCBhcyBvbmUgdmFyaWFibGUgaW5jcmVhc2VzLCBzbyBkb2VzIHRoZSBvdGhlci4gCgojIyMgMkQtYSkgQ3JlYXRlIGEgTXVsdGlwbGUgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgYW5kIHN1bW1hcnkgcmVwb3J0IHVzaW5nIHRoZSB0d28gc3Ryb25nZXN0IGNvcnJlbGF0ZWQgdmFyaWFibGVzIGFuZCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlLiBOb3RlIHRoZSBSLVNxdWFyZWQgYW5kIEFkanVzdGVkIFItU3F1YXJlZCB2YWx1ZXMsIGRldGVybWluZSBpZiB0aGlzIGlzIGEgZ29vZCBvciBiYWQgZml0IGZvciB5b3VyIGRhdGE/IENvbXBhcmVkIHRoaXMgbW9kZWwgdG8gdGhlIHByZXZpb3VzIG1vZGVsLCB3aGljaCBtb2RlbCBpcyBiZXR0ZXI/IAoKKiBTb21ldGltZXMsIG9uZSB2YXJpYWJsZSBpcyB2ZXJ5IGdvb2QgYXQgcHJlZGljdGluZyBhbm90aGVyIHZhcmlhYmxlLiBCdXQgbW9zdCB0aW1lcywgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgZmFjdG9ycyB0aGF0IGFmZmVjdCB0aGUgcHJlZGljdGlvbiBvZiBhbm90aGVyIHZhcmlhYmxlLgoqIFdoaWxlIGluY3JlYXNlZCByYWluZmFsbCBpcyBhIGdvb2QgcHJlZGljdG9yIG9mIGluY3JlYXNlZCBjcm9wIHN1cHBseSwgZGVjcmVhc2VkIGhlcmJpdm9yZXMgY2FuIGFsc28gcmVzdWx0IGluIGFuIGluY3JlYXNlIG9mIGNyb3BzLiAKKiBUaGlzIGlkZWEgaXMgYSBsb29zZSBtZXRhcGhvciBmb3IgbXVsdGlwbGUgbGluZWFyIHJlZ3Jlc3Npb24uIAoKKiBNdWx0aXBsZSBsaW5lYXIgcmVncmVzc2lvbiBsbSh5IH4geF8wICsgeF8xICsgeF8yICsgLi4uIHhfaSApCiogV2hlcmUgeSBpcyB0aGUgcHJlZGljdGVkL2RlcGVuZGVudCB2YXJpYWJsZSBhbmQgdGhlIHggdmFyaWFibGVzIGFyZSB0aGUgcHJlZGljdG9ycy9pbmRlcGVuZGVudCB2YXJpYWJsZSAKCiogY29tbWFuZHM6IGxtKCB5IH4geF8xICsgeF8yICkgc3VtbWFyeSggcmVnX21vZGVsICkKCmBgYHtyfQoKI011bHRpcGxlIExpbmVhciBSZWdyZXNzaW9uIE1vZGVsCiNtbHIxIDwtIGxtKCBERVBFTkRFTlRfVkFSSUFCTEUgfiBJTkRFUEVOREVOVF9WQVJJQUJMRTEgKyBJTkRFUEVOREVOVF9WQVJJQUJMRTIgKQptbHIxID0gbG0oIHNhbGVzIH4gcmFkaW8gKyBUViwgZGF0YSA9IG15ZGF0YSApCgojU3VtbWFyeSBvZiBNdWx0aXBsZSBMaW5lYXIgUmVncmVzc2lvbiBNb2RlbApzdW1tYXJ5KG1scjEpCmBgYApUaGUgUi1zcXVhcmVkIHZhbHVlIGZvciB0aGlzIG1vZGVsIGlzIDAuODk3MiBhbmQgdGhlIGFkanVzdGVkIFItc3F1YXJlZCB2YWx1ZSBpcyAwLjg5NjIuIFRoZXNlIHZhbHVlcyBhcmUgaGlnaGVyIGFuZCBtdWNoIGNsb3NlciB0byAxIHRoYW4gdGhlIHByZXZpb3VzIHZhbHVlcywgd2hpY2ggaW5kaWNhdGVkIHRoYXQgdGhpcyBtb2RlbCBmaXRzIHRoZSBkYXRhIGJldHRlciB0aGFuIHRoZSBwcmV2aW91cyBvbmUuIAoKIyMjIDJELWIpIENyZWF0ZSBhIE11bHRpcGxlIExpbmVhciBSZWdyZXNzaW9uIE1vZGVsIHVzaW5nIGFsbCByZWxldmFudCBpbmRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUuIE5vdGUgdGhlIFItU3F1YXJlZCBhbmQgQWRqdXN0ZWQgUi1TcXVhcmVkIHZhbHVlcywgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBnb29kIG9yIGJhZCBmaXQgZm9yIHlvdXIgZGF0YT8KYGBge3J9Cm1scjIgPSBsbShzYWxlcyB+IHJhZGlvICsgVFYgKyBuZXdzcGFwZXIsIGRhdGE9bXlkYXRhKQpzdW1tYXJ5KG1scjIpCmBgYApUaGlzIG1vZGVsIGdpdmVzIHVzIGFuIFItcXVhcmVkIHZhbHVlIG9mIDAuODk3MiBhbmQgYW4gYWRqdXN0ZWQgUi1zcXVhcmVkIG9mIDAuODk1Ni4gVGhlc2UgUi1zcXVhcmVkIHZhbHVlcyBhcmUgYWxzbyBtdWNoIGhpZ2hlciB0aGFuIHRoZSBvbmVzIGZyb20gdGhlIGZpcnN0IG1vZGVsLCBhbmQgdGhleSBhcmUgYWxzbyBhIGdvb2QgZml0IGZvciB0aGlzIGRhdGEuIAoKIyMjIyBCYXNlZCBwdXJlbHkgb24gdGhlIHZhbHVlcyBmb3IgUi1TcXVhcmVkIGFuZCBBZGp1c3RlZCBSLVNxdWFyZWQsIHdoaWNoIGxpbmVhciByZWdyZXNzaW9uIG1vZGVsIGlzIGJlc3QgaW4gcHJlZGljdGluZyB0aGUgZGVwZW5kZW50IHZhcmlhYmxlPyBFeHBsYWluIHdoeQpUaGUgc2Vjb25kIGFuZCB0aGlyZCBtb2RlbCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGVhY2ggb3RoZXIsIGhvd2V2ZXIgdGhlIHNlY29uZCBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbCBpcyBzbGlnaHRseSBiZXR0ZXIgYXQgcHJlZGljdGluZyB0aGUgZGVwZW5kZW50IHZhcmlhYmxlLiBCb3RoIHRoZSBzZWNvbmQgYW5kIHRoaXJkIG1vZGVsIGhhdmUgdGhlIHNhbWUgUi1zcXVhcmVkIHZhbHVlIG9mIDAuODk3MiwgaG93ZXZlciB0aGUgc2Vjb25kIG1vZGVsIGhhcyBhIHNsaWdodHkgaGlnaGVyIGFkanVzdGVkIFItc3F1YXJlZCB2YWx1ZSB3aGljaCBpcyAwLjg5NjIgY29tcGFyZWQgdG8gMC44OTU2LiBFdmVuIHRob3VnaCB0aGlzIGlzIGEgdmVyeSBzbWFsbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBhZGp1c3RlZCBSLXNxdWFyZWQgdmFsdWVzIGl0IGlzIGVub3VnaCB0byBtYWtlIHRoZSBzZWNvbmQgbW9kZWwgc2xpZ2h0bHkgYmV0dGVyLiAKCiMjIyAyRSkgVXNlIHRoZSB0aHJlZSBkaWZmZXJlbnQgbW9kZWxzIHRvIHByZWRpY3RlZCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIGZvciB0aGUgZ2l2ZW4gdmFsdWVzIG9mIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZXMuIAoKKiBWYXJpYWJsZTogUmFkaW8gPSA2OQoqIFZhcmlhYmxlOiBUViA9IDI1NQoqIFZhcmlhYmxlOiBuZXdzcGFwZXIgPSA3NQoKKipNT0RFTCAxKioKYGBge3J9CnNhbGVzX3ByZWRpY3RlZDEgPSA5LjMxNjYgKyAoMC4yMDI1MCkgKiAocmFkaW8pCnNhbGVzX3ByZWRpY3RlZDEKYGBgCgoqKk1PREVMIDIqKgpgYGB7cn0Kc2FsZXNfcHJlZGljdGVkMiA9IDIuOTIxMTAgKyAwLjE4Nzk5ICogKHJhZGlvKSArIDAuMDQ1NzUgKiAoVFYpCnNhbGVzX3ByZWRpY3RlZDIKYGBgCgoqKk1PREVMIDMqKgpgYGB7cn0Kc2FsZXNfcHJlZGljdGVkMyA9IDIuOTM4ODg5ICsgMC4xODg1MzAgKiAocmFkaW8pICsgMC4wNDU3NjUgKiAoVFYpIC0gMC4wMDEwMzcgKiAobmV3c3BhcGVyKQpzYWxlc19wcmVkaWN0ZWQzCmBgYAoKCi0tLS0tLS0tLS0tLS0KCiMjIFRhc2sgMzogV2F0c29uIEFuYWx5c2lzCgotLS0tLS0tLS0tLS0tCgpUbyBjb21wbGV0ZSB0aGUgbGFzdCB0YXNrLCBmb2xsb3cgdGhlIGRpcmVjdGlvbnMgZm91bmQgYmVsb3cuIE1ha2Ugc3VyZSB0byBzY3JlZW5zaG90IGFuZCBhdHRhY2ggYW55IHBpY3R1cmVzIG9mIHRoZSByZXN1bHRzIG9idGFpbmVkIG9yIGFueSBxdWVzdGlvbnMgYXNrZWQuIAoKIyMjIDNBKSBVc2UgdGhlIFByZWRpY3RpdmUgbW9kdWxlIHRvIGFuYWx5emUgdGhlIGdpdmVuIGRhdGEuIE5vdGUgYW55IGludGVyZXN0aW5nIHBhdHRlcm5zIGFkZCBhbiBzY3JlZW5zaG90IG9mIHdoYXQgeW91IGZvdW5kLgoKYGBge3J9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJpbWdzL3NjcmVlbnNob3QxLnBuZyIpIApgYGAKYGBge3J9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJpbWdzL3NjcmVlbnNob3QyLnBuZyIpCmBgYApUaGVzZSBwcmVkaWN0aXZlIG1vZHVsZXMgc2hvdyB0aGF0IFRWIGFuZCByYWRpbyBhcmUgYm90aCBzdHJvbmcgcHJlZGljdG9ycyBvZiBzYWxlcy4gSSBhbHNvIGZvdW5kIGl0IGludGVyZXN0aW5nIHRoYXQgdGhlIHByZWRpY3RpdmUgc3RyZW5ndGggb2YgdGhpcyBtb2RlbCBpcyA3MiUuIAoKIyMjIDNCKSBOb3RlIHRoZSBwcmVkaWN0aXZlIHBvd2VyIHN0cmVuZ3RoIG9mIHJlcG9ydGVkIHZhcmlhYmxlcy4gQ29uc2lkZXIgdGhlIG9uZSBmaWVsZCBwcmVkaWN0aXZlIG1vZGVsIG9ubHksIGRlc2NyaWJlIHlvdXIgZmluZGluZ3MgYW5kIGFkZCBhbmQgc2NyZWVuc2hvdAoKYGBge3J9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJpbWdzL3NjcmVlbnNob3QzLnBuZyIpCmBgYApUaGlzIGdyYXBoaWMgb25jZSBhZ2FpbiBzaG93cyB0aGF0IFRWIGFuZCByYWRpbyBhcmUgdGhlIHN0cm9uZ2VzdCBkcml2ZXJzIG9mIHNhbGVzLCBjb21iaW5lZCB0aGV5IGFjY291bmQgZm9yIDk0JSBvZiBzYWxlcy4gVFYgZHJpdmVzIHNhbGVzIGJ5IDU5JSBhbmQgcmFkaW8gZHJpdmVzIHNhbGVzIGJ5IDMyJS4gVGhpcyBhbHNvIGFsaWducyB3aXRoIHRoZSByZWdyZXNzaW9uIG1vZGVscyB3ZSB1c2VkIGVhcmxpZXIgd2hpY2ggYWxzbyBzaG93IHRoYXQgVFYgd2FzIHRoZSBzdHJvbmdlc3QgZHJpdmVyIG9mIHNhbGVzLiAKCiMjIyAzQykgSG93IGRvIFdhdHNvbiByZXN1bHRzIHJlY29uY2lsZSB3aXRoIHlvdXIgZmluZGluZ3MgYmFzZWQgb24gdGhlIFIgcmVncmVzc2lvbiBhbmFseXNpcyBpbiB0YXNrIDI/IEV4cGxhaW4gaG93LgpBcyBtZW50aW9uZWQgYWJvdmUsIHRoZSBXYXRzb24gcmVzdWx0cyBzdXBwb3J0IHRoZSBvdXIgZmluZGluZ3MgZnJvbSB0aGUgUiByZWdyZXNzaW9uIGFuYWx5c2lzLiBXYXRzb24gYW5hbHl0aWNzIHNob3dlZCB0aGF0IFRWIGFuZCByYWRpbyBhcmUgdGhlIHN0cm9uZ2VzdCBkcml2ZXJzIG9mIHNhbGVzIGFuZCB0aGUgcmVncmVzc2lvbiBtb2RlbHMgc2hvd2VkIHRoYXQgVFYgYW5kIHJhZGlvIHJlc3VsdGVkIGluIHRoZSBzdHJvbmdlc3QgUi1zcXVhcmVkIHZhbHVlcyBwcm92aW5nIHRoYXQgdGhleSBhcmUgaGlnaGx5IGNvcnJlbGF0ZWQgYW5kIGFyZSBiZXN0IGF0IGRyaXZpbmcgc2FsZXMuIAo=