Data

data("sleep75")
sleepData <- sleep75
sleepData[is.na(sleepData)] <- 0

Basic Plots

We will create some basic plots to show the distribution and relationships between variables

For this plot we can read, that the sleep time including naps doesn’t correlate with how much that person is getting paid.

From this plot we can read, that number of hours that someone is working isn’t correlated to how much they are sleeping. Only in extreme cases we can observe, that if someone is working much more per week, then he is sleeping much less. It doesn’t work in other way, because people that aren’t working at all vary a lot in time they sleep.

For this boxplot we can observe that black people were earning less money on average than white people

From this plot we can learn the distribution of hourly wage and we can see that most of them are between 0k and 10k

From this plot we can observe how many are there construction workers and cleric workers and if they are union members or not. We can see that most of the workers are not members of the union, and there are about 4 times more construction workers than cleric workers

We can see that people who are not married have a greater spread in the hours of sleep per week, and single cases sleep even less than 20 hours. On the other hand, married people usually sleep more, and a much higher percentage of married than not married people sleep slightly less than 60 hours a week.

Correlation coefficients - Pearson’s linear correlation

The correlation coefficient between log hourly wage and sleep is -0.067. Since the correlation coefficient is close to zero, it suggests a weak linear relationship between the two variables. The negative sign indicates a negative correlation, meaning that as log hourly wage increases, sleep tends to decrease slightly. However, the correlation is weak, indicating that the relationship between the two variables is not strong.

## [1] -0.05782671

Rank correlation

Linear regression model

The intercept is -3.76664, indicating the expected average hourly wage when all other predictor variables are zero. For each additional year of education, the hourly wage is expected to increase by 0.39862 units. For each additional year of age, the hourly wage is expected to increase by 0.06090 units. Males have, on average, a higher hourly wage by 2.61621 units compared to females. All predictor variables (education, age, and gender) are highly significant (p < 0.001), indicating their impact on the hourly wage. The residual standard error is 3.278, representing the average amount of error in the predicted hourly wage. The multiple R-squared value is 0.2213, indicating that approximately 22.13% of the variance in the hourly wage can be explained by the predictors in the model. The F-statistic is 50.01 with a very low p-value, indicating that the model as a whole is highly significant.

## 
## Call:
## lm(formula = sleepData$hrwage ~ sleepData$educ + sleepData$age + 
##     sleepData$male, data = sleepData)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.1912 -2.2867 -0.1266  1.6524 29.7388 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -1.16071    0.95348  -1.217   0.2239    
## sleepData$educ  0.24322    0.05251   4.632 4.32e-06 ***
## sleepData$age   0.02333    0.01289   1.810   0.0707 .  
## sleepData$male  1.72391    0.28441   6.061 2.20e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.739 on 702 degrees of freedom
## Multiple R-squared:  0.08059,    Adjusted R-squared:  0.07666 
## F-statistic: 20.51 on 3 and 702 DF,  p-value: 9.492e-13

The intercept is 3285.21, which represents the expected average sleep duration when all other predictors are zero. For each unit increase in the smsa variable, sleep duration is expected to decrease by 51.63 units. However, this effect is not statistically significant (p = 0.1435). A one-unit increase in the inlf variable is associated with a decrease in sleep duration by 36.10 units, but this effect is also not statistically significant (p = 0.3534). A one-unit increase in construc is associated with an increase in sleep duration by 133.05 units. However, this effect is not statistically significant (p = 0.2393). Similarly, a one-unit increase in clerical is associated with an increase in sleep duration by 78.44 units, but this effect is not statistically significant (p = 0.1202). A one-unit increase in black is associated with a decrease in sleep duration by 72.55 units, although this effect is not statistically significant (p = 0.3485). A one-unit increase in south is associated with an increase in sleep duration by 77.49 units, and this effect approaches statistical significance (p = 0.0833). The overall model has limited explanatory power, as indicated by the low R-squared values. Only about 1.57% of the variability in sleep duration can be explained by the predictors included in the model. The F-statistic of 1.86 with a p-value of 0.08517 suggests that the model’s overall fit is not statistically significant.

## 
## Call:
## lm(formula = sleepData$sleep ~ sleepData$smsa + sleepData$inlf + 
##     sleepData$construc + sleepData$clerical + sleepData$black + 
##     sleepData$south, data = sleepData)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2548.51  -252.62     5.52   262.26  1367.46 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         3285.21      38.40  85.560   <2e-16 ***
## sleepData$smsa       -51.63      35.26  -1.464   0.1435    
## sleepData$inlf       -36.10      38.87  -0.929   0.3534    
## sleepData$construc   133.05     112.97   1.178   0.2393    
## sleepData$clerical    78.44      50.41   1.556   0.1202    
## sleepData$black      -72.55      77.33  -0.938   0.3485    
## sleepData$south       77.49      44.68   1.734   0.0833 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 442.8 on 699 degrees of freedom
## Multiple R-squared:  0.01572,    Adjusted R-squared:  0.007269 
## F-statistic:  1.86 on 6 and 699 DF,  p-value: 0.08517

Nonlinear regression model

## [1] 1402.67

Most of responses are accumulated in a quite close area to the prediction line. We can observe few outliers. To sum up prediction model is more less accurate.

## 
## Call:
## lm(formula = totwrk ~ sleep + I(sleep^2), data = sleep1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2272.1  -561.0    82.7   568.3  3181.2 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.756e+03  9.071e+02   4.141 4.03e-05 ***
## sleep       -1.809e-01  5.746e-01  -0.315    0.753    
## I(sleep^2)  -9.565e-05  9.143e-05  -1.046    0.296    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 882.4 on 526 degrees of freedom
## Multiple R-squared:  0.1361, Adjusted R-squared:  0.1328 
## F-statistic: 41.43 on 2 and 526 DF,  p-value: < 2.2e-16

In the first (left top corner) plot we can obsere accummulation of results between 1500 and 2250, and residuals hestitate from -2000 up to 1500. Some outlyers are being observed. In the second plot (right to the first) we can see that predictions are strongly related to the results. In the third plot( left-bottom) whole resultsare accumulated in one area similairly to the first plot The last plot presents data completely different than the prediction was settled, whole results are accumulated on the left side of the plot between -3.0 and 2.0 Residuals.

par(mfrow = c(2,2))
plot(model3)

Correlation plot

From this correlation plot we can see that there is a strong correlation where there are red and blue squares. leis1, leis2 and leis3 are strongly related to totwtk and worknrm, and for example totwrk to worknrm. Blue means that the two variables under consideration vary in the same direction, i.e., if a variable increases the other one increases and if one decreases the other one decreases as well. Red means that is, if a variable increases the other decreases and vice versa

## corrplot 0.92 loaded

LS0tCnRpdGxlOiAiQWRkaXRpb25hbCBhc3NpZ25tZW50LCBTbGVlcCBhbmQgdGhlIGFsbG9jYXRpb24gb2YgdGltZSIKZGF0ZTogImByIFN5cy5EYXRlKClgIgphdXRob3I6ICJKYW4gUGFzdHVjaGEgMTkzNjYyLCBLYW1pbCBIYWpkdWsgMTkzMzc1LCBNYWNpZWogU3phcnBhayAxOTM1NzgiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIHRoZW1lOiBjZXJ1bGVhbgogICAgaGlnaGxpZ2h0OiB0ZXh0bWF0ZQogICAgZm9udHNpemU6IDEwcHQKICAgIHRvYzogeWVzCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBubwogICAgZGZfcHJpbnQ6IGRlZmF1bHQKICAgIHRvY19kZXB0aDogNQplZGl0b3Jfb3B0aW9uczogCiAgbWFya2Rvd246IAogICAgd3JhcDogNzIKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KHdvb2xkcmlkZ2UpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShwbG90bHkpCmBgYAoKIyMgRGF0YQoKYGBge3IgbG9hZC1kYXRhfQpkYXRhKCJzbGVlcDc1IikKc2xlZXBEYXRhIDwtIHNsZWVwNzUKc2xlZXBEYXRhW2lzLm5hKHNsZWVwRGF0YSldIDwtIDAKYGBgCgojIyBCYXNpYyBQbG90cwoKV2Ugd2lsbCBjcmVhdGUgc29tZSBiYXNpYyBwbG90cyB0byBzaG93IHRoZSBkaXN0cmlidXRpb24gYW5kIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpYWJsZXMKCkZvciB0aGlzIHBsb3Qgd2UgY2FuIHJlYWQsIHRoYXQgdGhlIHNsZWVwIHRpbWUgaW5jbHVkaW5nIG5hcHMgZG9lc24ndCBjb3JyZWxhdGUgd2l0aCBob3cgbXVjaCB0aGF0IHBlcnNvbiBpcyBnZXR0aW5nIHBhaWQuCmBgYHtyIGVjaG89RkFMU0V9CmdncGxvdChkYXRhPXNsZWVwRGF0YSwgYWVzKHNsZWVwRGF0YSRzbHBuYXBzIC8gNjAgLHNsZWVwRGF0YSRocndhZ2UpKSArCiAgZ2VvbV9wb2ludCgpICsKICBsYWJzKHRpdGxlID0gIldhZ2UgYmFzZWQgb24gd2Vla2x5IHNsZWVwIHRpbWUiLCB4ID0gIldlZWtseSBzbGVlcCB0aW1lIGluIGhvdXJzIGluY2x1ZGluZyBuYXBzIiwgeSA9ICJIb3VybHkgd2FnZSIpCmBgYAoKRnJvbSB0aGlzIHBsb3Qgd2UgY2FuIHJlYWQsIHRoYXQgbnVtYmVyIG9mIGhvdXJzIHRoYXQgc29tZW9uZSBpcyB3b3JraW5nIGlzbid0IGNvcnJlbGF0ZWQgdG8gaG93IG11Y2ggdGhleSBhcmUgc2xlZXBpbmcuIE9ubHkgaW4gZXh0cmVtZSBjYXNlcyB3ZSBjYW4gb2JzZXJ2ZSwgdGhhdCBpZiBzb21lb25lIGlzIHdvcmtpbmcgbXVjaCBtb3JlIHBlciB3ZWVrLCB0aGVuIGhlIGlzIHNsZWVwaW5nIG11Y2ggbGVzcy4gSXQgZG9lc24ndCB3b3JrIGluIG90aGVyIHdheSwgYmVjYXVzZSBwZW9wbGUgdGhhdCBhcmVuJ3Qgd29ya2luZyBhdCBhbGwgdmFyeSBhIGxvdCBpbiB0aW1lIHRoZXkgc2xlZXAuCmBgYCB7ciBlY2hvPUZBTFNFfQpnZ3Bsb3QoZGF0YT1zbGVlcERhdGEsIGFlcyhzbGVlcERhdGEkdG90d3JrIC8gNjAsc2xlZXBEYXRhJHNscG5hcHMgLyA2MCkpICsKICBnZW9tX3BvaW50KCkgKwogIGxhYnModGl0bGUgPSAiU2xlZXAgdGltZSBiYXNlZCBvbiBob3VycyB3b3JrZWQgaW4gd2VlayIsIHggPSAiSG91cnMgd29ya2VkIGluIHdlZWsiLCB5ID0gIlNsZWVwIHRpbWUgaW5jbHVkaW5nIG5hcHMiKQpgYGAKCkZvciB0aGlzIGJveHBsb3Qgd2UgY2FuIG9ic2VydmUgdGhhdCBibGFjayBwZW9wbGUgd2VyZSBlYXJuaW5nIGxlc3MgbW9uZXkgb24gYXZlcmFnZSB0aGFuIHdoaXRlIHBlb3BsZQpgYGAge3IgZWNobyA9IEZBTFNFfQpib3hwbG90KHNsZWVwRGF0YSRlYXJuczc0fnNsZWVwRGF0YSRibGFjaywgbWFpbiA9ICJNZWFuIHRvdGFsIGVhcm5pbmdzIGluIDE5NzQiLAp4bGFiID0gIlRvdGFsIGVhcm5pbmdzIGluIFVTRCIsCnlsYWIgPSAiSXMgYmxhY2siLApjb2wgPSAib3JhbmdlIiwKYm9yZGVyID0gImJyb3duIiwKaG9yaXpvbnRhbCA9IFRSVUUpCmBgYAoKRnJvbSB0aGlzIHBsb3Qgd2UgY2FuIGxlYXJuIHRoZSBkaXN0cmlidXRpb24gb2YgaG91cmx5IHdhZ2UgYW5kIHdlIGNhbiBzZWUgdGhhdCBtb3N0IG9mIHRoZW0gYXJlIGJldHdlZW4gMGsgYW5kIDEwawpgYGAge3IgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZGF0YSA9IHNsZWVwRGF0YSwgYWVzKHggPSBocndhZ2UpKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxLCBmaWxsID0gImxpZ2h0Ymx1ZSIsIGNvbG9yID0gImJsYWNrIikgKwogIGxhYnModGl0bGUgPSAiRGlzdHJpYnV0aW9uIG9mIEhvdXJseSBXYWdlIiwKICAgICAgIHggPSAiSG91cmx5IFdhZ2UiLAogICAgICAgeSA9ICJGcmVxdWVuY3kiKQpgYGAKCkZyb20gdGhpcyBwbG90IHdlIGNhbiBvYnNlcnZlIGhvdyBtYW55IGFyZSB0aGVyZSBjb25zdHJ1Y3Rpb24gd29ya2VycyBhbmQgY2xlcmljIHdvcmtlcnMgYW5kIGlmIHRoZXkgYXJlIHVuaW9uIG1lbWJlcnMgb3Igbm90LiBXZSBjYW4gc2VlIHRoYXQgbW9zdCBvZiB0aGUgd29ya2VycyBhcmUgbm90IG1lbWJlcnMgb2YgdGhlIHVuaW9uLCBhbmQgdGhlcmUgYXJlIGFib3V0IDQgdGltZXMgbW9yZSBjb25zdHJ1Y3Rpb24gd29ya2VycyB0aGFuIGNsZXJpYyB3b3JrZXJzCmBgYCB7ciBlY2hvID0gRkFMU0V9CiMgU3RhY2tlZCBiYXIgcGxvdCBvZiB1bmlvbiBtZW1iZXJzaGlwIGJ5IGluZHVzdHJ5IChjbGVyaWNhbCB2cy4gY29uc3RydWN0aW9uKSBhbmQgZ2VuZGVyCmdncGxvdChkYXRhID0gc2xlZXBEYXRhLCBhZXMoeCA9IGZhY3RvcihjbGVyaWNhbCksIGZpbGwgPSBmYWN0b3IodW5pb24pKSkgKwogIGdlb21fYmFyKCkgKwogIGxhYnModGl0bGUgPSAiVW5pb24gTWVtYmVyc2hpcCBieSBJbmR1c3RyeSBhbmQgR2VuZGVyIiwKICAgICAgIHggPSAiSW5kdXN0cnkiLAogICAgICAgeSA9ICJDb3VudCIpICsKICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIkNvbnN0cnVjdGlvbiB3b3JrZXIiLCAiQ2xlcmljYWwgd29ya2VyIikpICsKICBzY2FsZV9maWxsX2Rpc2NyZXRlKGxhYmVscyA9IGMoIk5vdCBhIFVuaW9uIE1lbWJlciIsICJVbmlvbiBNZW1iZXIiKSkKCmBgYAoKV2UgY2FuIHNlZSB0aGF0IHBlb3BsZSB3aG8gYXJlIG5vdCBtYXJyaWVkIGhhdmUgYSBncmVhdGVyIHNwcmVhZCBpbiB0aGUgaG91cnMgb2Ygc2xlZXAgcGVyIHdlZWssIGFuZCBzaW5nbGUgY2FzZXMgc2xlZXAgZXZlbiBsZXNzIHRoYW4gMjAgaG91cnMuIE9uIHRoZSBvdGhlciBoYW5kLCBtYXJyaWVkIHBlb3BsZSB1c3VhbGx5IHNsZWVwIG1vcmUsIGFuZCBhIG11Y2ggaGlnaGVyIHBlcmNlbnRhZ2Ugb2YgbWFycmllZCB0aGFuIG5vdCBtYXJyaWVkIHBlb3BsZSBzbGVlcCBzbGlnaHRseSBsZXNzIHRoYW4gNjAgaG91cnMgYSB3ZWVrLgpgYGAge3IgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZGF0YSA9IHNsZWVwRGF0YSwgYWVzKHggPSBmYWN0b3IobWFyciksIHkgPSBzbGVlcCAvIDYwKSkgKwogIGdlb21fdmlvbGluKCkgKwogIGxhYnModGl0bGUgPSAiVmlvbGluIFBsb3Qgb2YgU2xlZXAgRHVyYXRpb24gYnkgTWFyaXRhbCBTdGF0dXMiLAogICAgICAgeCA9ICJNYXJpdGFsIFN0YXR1cyIsCiAgICAgICB5ID0gIlNsZWVwIER1cmF0aW9uIChob3VycykiKSArCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjKCJOb3QgTWFycmllZCIsICJNYXJyaWVkIikpCmBgYAoKIyMgQ29ycmVsYXRpb24gY29lZmZpY2llbnRzIC0gUGVhcnNvbidzIGxpbmVhciBjb3JyZWxhdGlvbgoKVGhlIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50IGJldHdlZW4gbG9nIGhvdXJseSB3YWdlIGFuZCBzbGVlcCBpcyAtMC4wNjcuIFNpbmNlIHRoZSBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCBpcyBjbG9zZSB0byB6ZXJvLCBpdCBzdWdnZXN0cyBhIHdlYWsgbGluZWFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28gdmFyaWFibGVzLiBUaGUgbmVnYXRpdmUgc2lnbiBpbmRpY2F0ZXMgYSBuZWdhdGl2ZSBjb3JyZWxhdGlvbiwgbWVhbmluZyB0aGF0IGFzIGxvZyBob3VybHkgd2FnZSBpbmNyZWFzZXMsIHNsZWVwIHRlbmRzIHRvIGRlY3JlYXNlIHNsaWdodGx5LiBIb3dldmVyLCB0aGUgY29ycmVsYXRpb24gaXMgd2VhaywgaW5kaWNhdGluZyB0aGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvIHZhcmlhYmxlcyBpcyBub3Qgc3Ryb25nLgpgYGAge3IgZWNobyA9IEZBTFNFfQpjb3Ioc2xlZXBEYXRhJGxocndhZ2UsIHNsZWVwRGF0YSRzbGVlcCwgbWV0aG9kPSJwZWFyc29uIikKYGBgCgoKCiMjIFJhbmsgY29ycmVsYXRpb24KCgojIExpbmVhciByZWdyZXNzaW9uIG1vZGVsClRoZSBpbnRlcmNlcHQgaXMgLTMuNzY2NjQsIGluZGljYXRpbmcgdGhlIGV4cGVjdGVkIGF2ZXJhZ2UgaG91cmx5IHdhZ2Ugd2hlbiBhbGwgb3RoZXIgcHJlZGljdG9yIHZhcmlhYmxlcyBhcmUgemVyby4gRm9yIGVhY2ggYWRkaXRpb25hbCB5ZWFyIG9mIGVkdWNhdGlvbiwgdGhlIGhvdXJseSB3YWdlIGlzIGV4cGVjdGVkIHRvIGluY3JlYXNlIGJ5IDAuMzk4NjIgdW5pdHMuIEZvciBlYWNoIGFkZGl0aW9uYWwgeWVhciBvZiBhZ2UsIHRoZSBob3VybHkgd2FnZSBpcyBleHBlY3RlZCB0byBpbmNyZWFzZSBieSAwLjA2MDkwIHVuaXRzLiBNYWxlcyBoYXZlLCBvbiBhdmVyYWdlLCBhIGhpZ2hlciBob3VybHkgd2FnZSBieSAyLjYxNjIxIHVuaXRzIGNvbXBhcmVkIHRvIGZlbWFsZXMuIEFsbCBwcmVkaWN0b3IgdmFyaWFibGVzIChlZHVjYXRpb24sIGFnZSwgYW5kIGdlbmRlcikgYXJlIGhpZ2hseSBzaWduaWZpY2FudCAocCA8IDAuMDAxKSwgaW5kaWNhdGluZyB0aGVpciBpbXBhY3Qgb24gdGhlIGhvdXJseSB3YWdlLiBUaGUgcmVzaWR1YWwgc3RhbmRhcmQgZXJyb3IgaXMgMy4yNzgsIHJlcHJlc2VudGluZyB0aGUgYXZlcmFnZSBhbW91bnQgb2YgZXJyb3IgaW4gdGhlIHByZWRpY3RlZCBob3VybHkgd2FnZS4gVGhlIG11bHRpcGxlIFItc3F1YXJlZCB2YWx1ZSBpcyAwLjIyMTMsIGluZGljYXRpbmcgdGhhdCBhcHByb3hpbWF0ZWx5IDIyLjEzJSBvZiB0aGUgdmFyaWFuY2UgaW4gdGhlIGhvdXJseSB3YWdlIGNhbiBiZSBleHBsYWluZWQgYnkgdGhlIHByZWRpY3RvcnMgaW4gdGhlIG1vZGVsLiBUaGUgRi1zdGF0aXN0aWMgaXMgNTAuMDEgd2l0aCBhIHZlcnkgbG93IHAtdmFsdWUsIGluZGljYXRpbmcgdGhhdCB0aGUgbW9kZWwgYXMgYSB3aG9sZSBpcyBoaWdobHkgc2lnbmlmaWNhbnQuCmBgYCB7ciBlY2hvID0gRkFMU0V9Cm1vZGVsMSA8LSBsbShzbGVlcERhdGEkaHJ3YWdlIH4gc2xlZXBEYXRhJGVkdWMgKyBzbGVlcERhdGEkYWdlICsgc2xlZXBEYXRhJG1hbGUsIGRhdGEgPSBzbGVlcERhdGEpCnN1bW1hcnkobW9kZWwxKQpgYGAKVGhlIGludGVyY2VwdCBpcyAzMjg1LjIxLCB3aGljaCByZXByZXNlbnRzIHRoZSBleHBlY3RlZCBhdmVyYWdlIHNsZWVwIGR1cmF0aW9uIHdoZW4gYWxsIG90aGVyIHByZWRpY3RvcnMgYXJlIHplcm8uIEZvciBlYWNoIHVuaXQgaW5jcmVhc2UgaW4gdGhlIHNtc2EgdmFyaWFibGUsIHNsZWVwIGR1cmF0aW9uIGlzIGV4cGVjdGVkIHRvIGRlY3JlYXNlIGJ5IDUxLjYzIHVuaXRzLiBIb3dldmVyLCB0aGlzIGVmZmVjdCBpcyBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCAocCA9IDAuMTQzNSkuIEEgb25lLXVuaXQgaW5jcmVhc2UgaW4gdGhlIGlubGYgdmFyaWFibGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVjcmVhc2UgaW4gc2xlZXAgZHVyYXRpb24gYnkgMzYuMTAgdW5pdHMsIGJ1dCB0aGlzIGVmZmVjdCBpcyBhbHNvIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IChwID0gMC4zNTM0KS4gQSBvbmUtdW5pdCBpbmNyZWFzZSBpbiBjb25zdHJ1YyBpcyBhc3NvY2lhdGVkIHdpdGggYW4gaW5jcmVhc2UgaW4gc2xlZXAgZHVyYXRpb24gYnkgMTMzLjA1IHVuaXRzLiBIb3dldmVyLCB0aGlzIGVmZmVjdCBpcyBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCAocCA9IDAuMjM5MykuIFNpbWlsYXJseSwgYSBvbmUtdW5pdCBpbmNyZWFzZSBpbiBjbGVyaWNhbCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gaW5jcmVhc2UgaW4gc2xlZXAgZHVyYXRpb24gYnkgNzguNDQgdW5pdHMsIGJ1dCB0aGlzIGVmZmVjdCBpcyBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCAocCA9IDAuMTIwMikuIEEgb25lLXVuaXQgaW5jcmVhc2UgaW4gYmxhY2sgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZGVjcmVhc2UgaW4gc2xlZXAgZHVyYXRpb24gYnkgNzIuNTUgdW5pdHMsIGFsdGhvdWdoIHRoaXMgZWZmZWN0IGlzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IChwID0gMC4zNDg1KS4gQSBvbmUtdW5pdCBpbmNyZWFzZSBpbiBzb3V0aCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gaW5jcmVhc2UgaW4gc2xlZXAgZHVyYXRpb24gYnkgNzcuNDkgdW5pdHMsIGFuZCB0aGlzIGVmZmVjdCBhcHByb2FjaGVzIHN0YXRpc3RpY2FsIHNpZ25pZmljYW5jZSAocCA9IDAuMDgzMykuIFRoZSBvdmVyYWxsIG1vZGVsIGhhcyBsaW1pdGVkIGV4cGxhbmF0b3J5IHBvd2VyLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGxvdyBSLXNxdWFyZWQgdmFsdWVzLiBPbmx5IGFib3V0IDEuNTclIG9mIHRoZSB2YXJpYWJpbGl0eSBpbiBzbGVlcCBkdXJhdGlvbiBjYW4gYmUgZXhwbGFpbmVkIGJ5IHRoZSBwcmVkaWN0b3JzIGluY2x1ZGVkIGluIHRoZSBtb2RlbC4gVGhlIEYtc3RhdGlzdGljIG9mIDEuODYgd2l0aCBhIHAtdmFsdWUgb2YgMC4wODUxNyBzdWdnZXN0cyB0aGF0IHRoZSBtb2RlbCdzIG92ZXJhbGwgZml0IGlzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LgpgYGAge3IgZWNobyA9IEZBTFNFfQptb2RlbDIgPC0gbG0oc2xlZXBEYXRhJHNsZWVwIH4gc2xlZXBEYXRhJHNtc2EgKyBzbGVlcERhdGEkaW5sZiArIHNsZWVwRGF0YSRjb25zdHJ1YyArIHNsZWVwRGF0YSRjbGVyaWNhbCArIHNsZWVwRGF0YSRibGFjayArIHNsZWVwRGF0YSRzb3V0aCwgZGF0YSA9IHNsZWVwRGF0YSkKc3VtbWFyeShtb2RlbDIpCmBgYAojIE5vbmxpbmVhciByZWdyZXNzaW9uIG1vZGVsCgpgYGAge3IgZWNobyA9IEZBTFNFfQpzbXBfc2l6ZTwtZmxvb3IoMC43NSpucm93KHNsZWVwRGF0YSkpCnNsZWVwX2luZDwtc2FtcGxlKHNlcV9sZW4obnJvdyhzbGVlcERhdGEpKSwgc2l6ZT1zbXBfc2l6ZSkKc2xlZXAxPC1zbGVlcERhdGFbc2xlZXBfaW5kLCBdCnNsZWVwVGVzdDwtc2xlZXBEYXRhWy1zbGVlcF9pbmQsIF0KbW9kZWwzPC1sbSh0b3R3cmt+c2xlZXAsZGF0YT1zbGVlcDEpICNvbmx5IGZvciB0cmFpbmluZyBkYXRhc2V0CmBgYAoKYGBgIHtyIGVjaG8gPSBGQUxTRX0KbGlicmFyeShNZXRyaWNzKQpldmFsdWF0ZTwtcHJlZGljdChtb2RlbDMsIG5ld2RhdGE9c2xlZXBUZXN0KQpybXNlKGV2YWx1YXRlLHNsZWVwVGVzdCRzbGVlcCkKYGBgCk1vc3Qgb2YgcmVzcG9uc2VzIGFyZSBhY2N1bXVsYXRlZCBpbiBhIHF1aXRlIGNsb3NlIGFyZWEgdG8gdGhlIHByZWRpY3Rpb24gbGluZS4gV2UgY2FuIG9ic2VydmUgZmV3IG91dGxpZXJzLiBUbyBzdW0gdXAgcHJlZGljdGlvbiBtb2RlbCBpcyBtb3JlIGxlc3MgYWNjdXJhdGUuCmBgYCB7ciBlY2hvID0gRkFMU0V9Cm1vZGVsND1sbSh0b3R3cmt+c2xlZXArSShzbGVlcF4yKSxkYXRhPXNsZWVwMSkKICAgIHN1bW1hcnkobW9kZWw0KQogICAgc2xlZXBpbmcgPC0gZGF0YS5mcmFtZShzbGVlcCA9ICgxOjUwMDApLCB0b3R3cmsgPSBwcmVkaWN0KG1vZGVsNCwgZGF0YS5mcmFtZShzbGVlcCA9ICgxOjUwMDApKSkpCiAgICBwbG90X2x5KCkgJT4lIAogICAgICBhZGRfdHJhY2UoeD1+c2xlZXAsIHk9fnRvdHdyaywgdHlwZT0ic2NhdHRlciIsIG1vZGU9ImxpbmVzIiwgZGF0YSA9IHNsZWVwaW5nLCBuYW1lID0gIlByZWRpY3RlZCBWYWx1ZSIpICU+JQogICAgICBhZGRfdHJhY2UoeD1+c2xlZXAsIHk9fnRvdHdyaywgdHlwZT0ic2NhdHRlciIsIG1vZGU9Im1hcmtlcnMiLCBkYXRhID0gc2xlZXBUZXN0LCBuYW1lID0gIkFjdHVhbCBWYWx1ZSIpCmBgYApJbiB0aGUgZmlyc3QgKGxlZnQgdG9wIGNvcm5lcikgcGxvdCB3ZSBjYW4gb2JzZXJlIGFjY3VtbXVsYXRpb24gb2YgcmVzdWx0cyBiZXR3ZWVuIDE1MDAgYW5kIDIyNTAsIAphbmQgcmVzaWR1YWxzIGhlc3RpdGF0ZSBmcm9tIC0yMDAwIHVwIHRvIDE1MDAuIFNvbWUgb3V0bHllcnMgYXJlIGJlaW5nIG9ic2VydmVkLgpJbiB0aGUgc2Vjb25kIHBsb3QgKHJpZ2h0IHRvIHRoZSBmaXJzdCkgd2UgY2FuIHNlZSB0aGF0IHByZWRpY3Rpb25zIGFyZSBzdHJvbmdseSByZWxhdGVkIHRvIHRoZSByZXN1bHRzLgpJbiB0aGUgdGhpcmQgcGxvdCggbGVmdC1ib3R0b20pIHdob2xlIHJlc3VsdHNhcmUgYWNjdW11bGF0ZWQgaW4gb25lIGFyZWEgc2ltaWxhaXJseSB0byB0aGUgZmlyc3QgcGxvdCAKVGhlIGxhc3QgcGxvdCBwcmVzZW50cyBkYXRhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRoYW4gdGhlIHByZWRpY3Rpb24gd2FzIHNldHRsZWQsIHdob2xlIHJlc3VsdHMgYXJlIGFjY3VtdWxhdGVkIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHBsb3QgYmV0d2VlbiAtMy4wIGFuZCAyLjAgUmVzaWR1YWxzLgpgYGAge3IgZWNobyA9IFRSVUV9CnBhcihtZnJvdyA9IGMoMiwyKSkKcGxvdChtb2RlbDMpCmBgYAoKIyBDb3JyZWxhdGlvbiBwbG90CkZyb20gdGhpcyBjb3JyZWxhdGlvbiBwbG90IHdlIGNhbiBzZWUgdGhhdCB0aGVyZSBpcyBhIHN0cm9uZyBjb3JyZWxhdGlvbiB3aGVyZSB0aGVyZSBhcmUgcmVkIGFuZCBibHVlIHNxdWFyZXMuIGxlaXMxLCBsZWlzMiBhbmQgbGVpczMgYXJlIHN0cm9uZ2x5IHJlbGF0ZWQgdG8gdG90d3RrIGFuZCB3b3JrbnJtLCBhbmQgZm9yIGV4YW1wbGUgdG90d3JrIHRvIHdvcmtucm0uIEJsdWUgbWVhbnMgdGhhdCB0aGUgdHdvIHZhcmlhYmxlcyB1bmRlciBjb25zaWRlcmF0aW9uIHZhcnkgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLCBpLmUuLCBpZiBhIHZhcmlhYmxlIGluY3JlYXNlcyB0aGUgb3RoZXIgb25lIGluY3JlYXNlcyBhbmQgaWYgb25lIGRlY3JlYXNlcyB0aGUgb3RoZXIgb25lIGRlY3JlYXNlcyBhcyB3ZWxsLiBSZWQgbWVhbnMgdGhhdCBpcywgaWYgYSB2YXJpYWJsZSBpbmNyZWFzZXMgdGhlIG90aGVyIGRlY3JlYXNlcyBhbmQgdmljZSB2ZXJzYQpgYGAge3IgZWNobyA9IEZBTFNFfQpsaWJyYXJ5KGNvcnJwbG90KQpjb3JycGxvdChjb3Ioc2xlZXBEYXRhKSwgbWV0aG9kID0gImNvbG9yIiwgb3JkZXI9ImFscGhhYmV0IiwgdHlwZT0idXBwZXIiLCBkaWFnPUZBTFNFKQpgYGA=