1 Introduction

This report will compare several multiple linear regression models to determine which best predicts the yield of a strawberry plant based on several soil and environmental factors.

2 Data Set

The data set of interest contains detailed information on various environmental and soil factors that influence plant growth. It includes measurements of soil contents, environmental factors, and the plant yield. Information is provided for many kinds of fruit, but for this analysis, only strawberry data will be used. Data was recorded throughout the plant growth period and during harvest.

The data set was acquired from Kaggle courtesy of user Masha Sanaei. The link for the dataset is https://www.kaggle.com/datasets/snmahsa/soil-nutrients. The dataset was uploaded to a github repository for access as https://github.com/ncbrechbill/STA321/blob/main/STA321/Soil%20Nutrients.csv.

  • Name; character: The plant name. This dataset was pruned for only Strawberry data
  • Temperature (\(X_1\)); numeric: The average recorded air temperature in celcius
  • Rainfall(\(X_2\)); numeric: The total recorded rainfall in centimeters
  • pH(\(X_3\)); numeric: The average recoded soil pH
  • Nitrogen(\(X_4\)); numeric: Average soil Nitrogen content in parts per million (ppm)
  • Phosphorus(\(X_5\)); numeric: Average soil phosphorus content in ppm
  • Potassium (\(X_6\)); numeric: Average soil Potassium content in ppm
  • Light_Hours (\(X_7\)); numeric: Average hours of sunlight covering the plant each day
  • Yield (\(Y\)); numeric: The mass of harvested strawberries in grams

This data set contains 700 strawberry plant observations, all with complete data and no missing values. This set is sufficiently large to make accurate predictions for any number of these predictors. There are additional categorical variables that group ranges of these variables together. However, these will not be used under this analysis methodology.

3 Exploratory Data Analysis

Above are the pairwise scatterplots, correlation coefficients, and density functions. We can see that the variables are distributed normally, and the individual correlation coefficients are not very large. This, alongside previous research, indicates that no particular variable individually predicts the plant yield. We aim to determine if any combinations of factors can predict yield to any degree through multiple linear regression models.

4 Multiple Linear Regression

Let \(\{x_1, x_2, \cdots, x_k \}\) be \(k\) explanatory variables and \(y\) be the response variables. The general form of the multiple linear regression model is defined as

\[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_k x_k + \epsilon. \] This is a very special form in that y is linear in both parameters and predictors. The actual linear regression only assumes that \(y\) is linear only in parameters but not predictors since the value of predictors will be observed in data.

A multiple linear regression model was first created utilizing all potential variables. None of the factors are statistically significant. We will reduce the next model by removing the least significant factors. The residual plots were analyzed to check the assumptions of the parametric model, and all were valid. No further transformation would be justified.

strawberry <- dplyr::select(strawberry, Temperature, Rainfall, pH, Light_Hours, Nitrogen, Phosphorus, Potassium, Yield)

full.model <- lm(Yield ~ ., data = strawberry)
pander(full.model)
Fitting linear model: Yield ~ .
  Estimate Std. Error t value Pr(>|t|)
(Intercept) 20.46 2.435 8.402 2.48e-16
Temperature -0.006367 0.01052 -0.6051 0.5453
Rainfall -0.0003384 0.0004649 -0.728 0.4669
pH 0.1901 0.1737 1.095 0.274
Light_Hours -0.07511 0.07 -1.073 0.2836
Nitrogen -0.001444 0.002753 -0.5246 0.6001
Phosphorus 0.001231 0.007015 0.1755 0.8608
Potassium -0.0008489 0.007013 -0.121 0.9037
resid_panel(full.model)

The next model is reduced from the three least significant factors: potassium, phosphorus, and nitrogen. Still, no factors are statistically significant. The residual plots are provided again to check the parametric assumptions, all of which were valid.

reduced.model1 <- lm(Yield ~ . - Nitrogen - Phosphorus, - Potassium, data = strawberry)
pander(reduced.model1)
Fitting linear model: Yield ~ . - Nitrogen - Phosphorus
  Estimate Std. Error t value Pr(>|t|)
(Intercept) 20.53 2.263 9.073 1.257e-18
Temperature -0.006573 0.01064 -0.6179 0.5369
Rainfall -0.000428 0.0004754 -0.9003 0.3683
pH 0.1662 0.1762 0.9435 0.3458
Light_Hours -0.06902 0.07095 -0.9728 0.331
Potassium -0.0009551 0.00715 -0.1336 0.8938
resid_panel(reduced.model1)

The model was once again reduced, now only including two factors, pH and Light Hours. Still, neither factor was significant. The residual plots are provided again to check the parametric assumptions, all of which were valid.

reduced.model2 <- lm(Yield ~pH + Light_Hours, data = strawberry)
pander(reduced.model2)
Fitting linear model: Yield ~ pH + Light_Hours
  Estimate Std. Error t value Pr(>|t|)
(Intercept) 19.79 1.39 14.24 1.418e-40
pH 0.1833 0.1728 1.061 0.289
Light_Hours -0.07247 0.0697 -1.04 0.2988
resid_panel(reduced.model2)

5 Results Analysis

None of the tested multiple linear regression models were able to predict the variance in plant yield at a statistically significant level. Reducing the model again would result in a previously analyzed simple linear regression model, which was not significant either. It can be reasonably determined that, in our sampled population, none of the factors would be able to predict the strawberry yield, individually or combined.

6 Conclusions

More significant models may be able to be constructed under different sampling circumstances. For example, a designed experiment that changes the various factors at different levels may find differences in the plant yield. More conclusive evidence may be found in such an experiment.

LS0tDQp0aXRsZTogIlJlZ3Jlc3Npb24gQW5hbHlzaXMgb2YgU29pbCBDb250ZW50cyINCmF1dGhvcjogIk5vYWggQnJlY2hiaWxsIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfd2lkdGg6IDYNCiAgICBmaWdfaGVpZ2h0OiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdG9jX2NvbGxhcHNlZDogeWVzDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgc21vb3RoX3Njcm9sbDogeWVzDQogICAgdGhlbWU6IGx1bWVuDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQppZiAoIXJlcXVpcmUoInRpZHl2ZXJzZSIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KICAgbGlicmFyeSh0aWR5dmVyc2UpDQp9DQppZiAoIXJlcXVpcmUoIkdHYWxseSIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJHR2FsbHkiKQ0KICAgbGlicmFyeShHR2FsbHkpDQp9DQppZiAoIXJlcXVpcmUoImdnUmVzaWRwYW5lbCIpKSB7DQogIGluc3RhbGwucGFja2FnZXMoImdnUmVzaWRwYW5lbCIpDQogIGxpYnJhcnkoZ2dSZXNpZHBhbmVsKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwYW5kZXIiKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKCJwYW5kZXIiKQ0KICBsaWJyYXJ5KHBhbmRlcikNCn0NCmBgYA0KDQojIEludHJvZHVjdGlvbg0KDQpUaGlzIHJlcG9ydCB3aWxsIGNvbXBhcmUgc2V2ZXJhbCBtdWx0aXBsZSBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbHMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJlc3QgcHJlZGljdHMgdGhlIHlpZWxkIG9mIGEgc3RyYXdiZXJyeSBwbGFudCBiYXNlZCBvbiBzZXZlcmFsIHNvaWwgYW5kIGVudmlyb25tZW50YWwgZmFjdG9ycy4NCg0KIyBEYXRhIFNldA0KDQpUaGUgZGF0YSBzZXQgb2YgaW50ZXJlc3QgY29udGFpbnMgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdmFyaW91cyBlbnZpcm9ubWVudGFsIGFuZCBzb2lsIGZhY3RvcnMgdGhhdCBpbmZsdWVuY2UgcGxhbnQgZ3Jvd3RoLiBJdCBpbmNsdWRlcyBtZWFzdXJlbWVudHMgb2Ygc29pbCBjb250ZW50cywgZW52aXJvbm1lbnRhbCBmYWN0b3JzLCBhbmQgdGhlIHBsYW50IHlpZWxkLiBJbmZvcm1hdGlvbiBpcyBwcm92aWRlZCBmb3IgbWFueSBraW5kcyBvZiBmcnVpdCwgYnV0IGZvciB0aGlzIGFuYWx5c2lzLCBvbmx5IHN0cmF3YmVycnkgZGF0YSB3aWxsIGJlIHVzZWQuIERhdGEgd2FzIHJlY29yZGVkIHRocm91Z2hvdXQgdGhlIHBsYW50IGdyb3d0aCBwZXJpb2QgYW5kIGR1cmluZyBoYXJ2ZXN0Lg0KDQpUaGUgZGF0YSBzZXQgd2FzIGFjcXVpcmVkIGZyb20gS2FnZ2xlIGNvdXJ0ZXN5IG9mIHVzZXIgTWFzaGEgU2FuYWVpLiBUaGUgbGluayBmb3IgdGhlIGRhdGFzZXQgaXMgPGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vZGF0YXNldHMvc25tYWhzYS9zb2lsLW51dHJpZW50cz4uIFRoZSBkYXRhc2V0IHdhcyB1cGxvYWRlZCB0byBhIGdpdGh1YiByZXBvc2l0b3J5IGZvciBhY2Nlc3MgYXMgPGh0dHBzOi8vZ2l0aHViLmNvbS9uY2JyZWNoYmlsbC9TVEEzMjEvYmxvYi9tYWluL1NUQTMyMS9Tb2lsJTIwTnV0cmllbnRzLmNzdj4uDQoNCi0gICBOYW1lOyBjaGFyYWN0ZXI6IFRoZSBwbGFudCBuYW1lLiBUaGlzIGRhdGFzZXQgd2FzIHBydW5lZCBmb3Igb25seSBTdHJhd2JlcnJ5IGRhdGENCi0gICBUZW1wZXJhdHVyZSAoJFhfMSQpOyBudW1lcmljOiBUaGUgYXZlcmFnZSByZWNvcmRlZCBhaXIgdGVtcGVyYXR1cmUgaW4gY2VsY2l1cw0KLSAgIFJhaW5mYWxsKCRYXzIkKTsgbnVtZXJpYzogVGhlIHRvdGFsIHJlY29yZGVkIHJhaW5mYWxsIGluIGNlbnRpbWV0ZXJzDQotICAgcEgoJFhfMyQpOyBudW1lcmljOiBUaGUgYXZlcmFnZSByZWNvZGVkIHNvaWwgcEgNCi0gICBOaXRyb2dlbigkWF80JCk7IG51bWVyaWM6IEF2ZXJhZ2Ugc29pbCBOaXRyb2dlbiBjb250ZW50IGluIHBhcnRzIHBlciBtaWxsaW9uIChwcG0pDQotICAgUGhvc3Bob3J1cygkWF81JCk7IG51bWVyaWM6IEF2ZXJhZ2Ugc29pbCBwaG9zcGhvcnVzIGNvbnRlbnQgaW4gcHBtDQotICAgUG90YXNzaXVtICgkWF82JCk7IG51bWVyaWM6IEF2ZXJhZ2Ugc29pbCBQb3Rhc3NpdW0gY29udGVudCBpbiBwcG0NCi0gICBMaWdodF9Ib3VycyAoJFhfNyQpOyBudW1lcmljOiBBdmVyYWdlIGhvdXJzIG9mIHN1bmxpZ2h0IGNvdmVyaW5nIHRoZSBwbGFudCBlYWNoIGRheQ0KLSAgIFlpZWxkICgkWSQpOyBudW1lcmljOiBUaGUgbWFzcyBvZiBoYXJ2ZXN0ZWQgc3RyYXdiZXJyaWVzIGluIGdyYW1zDQoNClRoaXMgZGF0YSBzZXQgY29udGFpbnMgNzAwIHN0cmF3YmVycnkgcGxhbnQgb2JzZXJ2YXRpb25zLCBhbGwgd2l0aCBjb21wbGV0ZSBkYXRhIGFuZCBubyBtaXNzaW5nIHZhbHVlcy4gVGhpcyBzZXQgaXMgc3VmZmljaWVudGx5IGxhcmdlIHRvIG1ha2UgYWNjdXJhdGUgcHJlZGljdGlvbnMgZm9yIGFueSBudW1iZXIgb2YgdGhlc2UgcHJlZGljdG9ycy4gVGhlcmUgYXJlIGFkZGl0aW9uYWwgY2F0ZWdvcmljYWwgdmFyaWFibGVzIHRoYXQgZ3JvdXAgcmFuZ2VzIG9mIHRoZXNlIHZhcmlhYmxlcyB0b2dldGhlci4gSG93ZXZlciwgdGhlc2Ugd2lsbCBub3QgYmUgdXNlZCB1bmRlciB0aGlzIGFuYWx5c2lzIG1ldGhvZG9sb2d5Lg0KDQojIEV4cGxvcmF0b3J5IERhdGEgQW5hbHlzaXMNCg0KYGBge3IsIGZpZy5hbGlnbj0nY2VudGVyJywgZWNobz1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpzb2lsIDwtIHJlYWQuY3N2KCJ+L1dDVS9TY2hvb2x3b3JrL1NUQTMyMS9EYXRhL1NvaWwgTnV0cmllbnRzLmNzdiIsIGhlYWRlciA9IFRSVUUpDQpzdHJhd2JlcnJ5IDwtIHN1YnNldChzb2lsLCBOYW1lID09ICJTdHJhd2JlcnJ5IikNCnN0cmF3YmVycnkgPC0gZHBseXI6OnNlbGVjdChzdHJhd2JlcnJ5LCBOYW1lLCBUZW1wZXJhdHVyZSwgUmFpbmZhbGwsIHBILCBMaWdodF9Ib3VycywgTml0cm9nZW4sIFBob3NwaG9ydXMsIFBvdGFzc2l1bSwgWWllbGQsICkNCg0KZ2dwYWlycyhzdHJhd2JlcnJ5KQ0KYGBgDQoNCg0KQWJvdmUgYXJlIHRoZSBwYWlyd2lzZSBzY2F0dGVycGxvdHMsIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50cywgYW5kIGRlbnNpdHkgZnVuY3Rpb25zLiBXZSBjYW4gc2VlIHRoYXQgdGhlIHZhcmlhYmxlcyBhcmUgZGlzdHJpYnV0ZWQgbm9ybWFsbHksIGFuZCB0aGUgaW5kaXZpZHVhbCBjb3JyZWxhdGlvbiBjb2VmZmljaWVudHMgYXJlIG5vdCB2ZXJ5IGxhcmdlLiBUaGlzLCBhbG9uZ3NpZGUgcHJldmlvdXMgcmVzZWFyY2gsIGluZGljYXRlcyB0aGF0IG5vIHBhcnRpY3VsYXIgdmFyaWFibGUgaW5kaXZpZHVhbGx5IHByZWRpY3RzIHRoZSBwbGFudCB5aWVsZC4gV2UgYWltIHRvIGRldGVybWluZSBpZiBhbnkgY29tYmluYXRpb25zIG9mIGZhY3RvcnMgY2FuIHByZWRpY3QgeWllbGQgdG8gYW55IGRlZ3JlZSB0aHJvdWdoIG11bHRpcGxlIGxpbmVhciByZWdyZXNzaW9uIG1vZGVscy4NCg0KIyBNdWx0aXBsZSBMaW5lYXIgUmVncmVzc2lvbg0KDQpMZXQgJFx7eF8xLCB4XzIsIFxjZG90cywgeF9rIFx9JCBiZSAkayQgZXhwbGFuYXRvcnkgdmFyaWFibGVzIGFuZCAkeSQgYmUgdGhlIHJlc3BvbnNlIHZhcmlhYmxlcy4gVGhlIGdlbmVyYWwgZm9ybSBvZiB0aGUgbXVsdGlwbGUgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgaXMgZGVmaW5lZCBhcw0KDQokJCB5ID0gXGJldGFfMCArIFxiZXRhXzEgeF8xICsgXGJldGFfMiB4XzIgKyBcY2RvdHMgKyBcYmV0YV9rIHhfayArIFxlcHNpbG9uLiAkJCBUaGlzIGlzIGEgdmVyeSBzcGVjaWFsIGZvcm0gaW4gdGhhdCB5IGlzIGxpbmVhciBpbiBib3RoIHBhcmFtZXRlcnMgYW5kIHByZWRpY3RvcnMuIFRoZSBhY3R1YWwgbGluZWFyIHJlZ3Jlc3Npb24gb25seSBhc3N1bWVzIHRoYXQgJHkkIGlzIGxpbmVhciBvbmx5IGluIHBhcmFtZXRlcnMgYnV0IG5vdCBwcmVkaWN0b3JzIHNpbmNlIHRoZSB2YWx1ZSBvZiBwcmVkaWN0b3JzIHdpbGwgYmUgb2JzZXJ2ZWQgaW4gZGF0YS4NCg0KQSBtdWx0aXBsZSBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbCB3YXMgZmlyc3QgY3JlYXRlZCB1dGlsaXppbmcgYWxsIHBvdGVudGlhbCB2YXJpYWJsZXMuIE5vbmUgb2YgdGhlIGZhY3RvcnMgYXJlIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQuIFdlIHdpbGwgcmVkdWNlIHRoZSBuZXh0IG1vZGVsIGJ5IHJlbW92aW5nIHRoZSBsZWFzdCBzaWduaWZpY2FudCBmYWN0b3JzLiBUaGUgcmVzaWR1YWwgcGxvdHMgd2VyZSBhbmFseXplZCB0byBjaGVjayB0aGUgYXNzdW1wdGlvbnMgb2YgdGhlIHBhcmFtZXRyaWMgbW9kZWwsIGFuZCBhbGwgd2VyZSB2YWxpZC4gTm8gZnVydGhlciB0cmFuc2Zvcm1hdGlvbiB3b3VsZCBiZSBqdXN0aWZpZWQuDQoNCmBgYHtyLCBmaWcuYWxpZ249J2NlbnRlcid9DQpzdHJhd2JlcnJ5IDwtIGRwbHlyOjpzZWxlY3Qoc3RyYXdiZXJyeSwgVGVtcGVyYXR1cmUsIFJhaW5mYWxsLCBwSCwgTGlnaHRfSG91cnMsIE5pdHJvZ2VuLCBQaG9zcGhvcnVzLCBQb3Rhc3NpdW0sIFlpZWxkKQ0KDQpmdWxsLm1vZGVsIDwtIGxtKFlpZWxkIH4gLiwgZGF0YSA9IHN0cmF3YmVycnkpDQpwYW5kZXIoZnVsbC5tb2RlbCkNCnJlc2lkX3BhbmVsKGZ1bGwubW9kZWwpDQpgYGANCg0KVGhlIG5leHQgbW9kZWwgaXMgcmVkdWNlZCBmcm9tIHRoZSB0aHJlZSBsZWFzdCBzaWduaWZpY2FudCBmYWN0b3JzOiBwb3Rhc3NpdW0sIHBob3NwaG9ydXMsIGFuZCBuaXRyb2dlbi4gU3RpbGwsIG5vIGZhY3RvcnMgYXJlIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQuIFRoZSByZXNpZHVhbCBwbG90cyBhcmUgcHJvdmlkZWQgYWdhaW4gdG8gY2hlY2sgdGhlIHBhcmFtZXRyaWMgYXNzdW1wdGlvbnMsIGFsbCBvZiB3aGljaCB3ZXJlIHZhbGlkLg0KDQpgYGB7ciwgZmlnLmFsaWduPSdjZW50ZXInfQ0KcmVkdWNlZC5tb2RlbDEgPC0gbG0oWWllbGQgfiAuIC0gTml0cm9nZW4gLSBQaG9zcGhvcnVzLCAtIFBvdGFzc2l1bSwgZGF0YSA9IHN0cmF3YmVycnkpDQpwYW5kZXIocmVkdWNlZC5tb2RlbDEpDQpyZXNpZF9wYW5lbChyZWR1Y2VkLm1vZGVsMSkNCmBgYA0KDQpUaGUgbW9kZWwgd2FzIG9uY2UgYWdhaW4gcmVkdWNlZCwgbm93IG9ubHkgaW5jbHVkaW5nIHR3byBmYWN0b3JzLCBwSCBhbmQgTGlnaHQgSG91cnMuIFN0aWxsLCBuZWl0aGVyIGZhY3RvciB3YXMgc2lnbmlmaWNhbnQuIFRoZSByZXNpZHVhbCBwbG90cyBhcmUgcHJvdmlkZWQgYWdhaW4gdG8gY2hlY2sgdGhlIHBhcmFtZXRyaWMgYXNzdW1wdGlvbnMsIGFsbCBvZiB3aGljaCB3ZXJlIHZhbGlkLg0KDQpgYGB7ciwgZmlnLmFsaWduPSdjZW50ZXInfQ0KcmVkdWNlZC5tb2RlbDIgPC0gbG0oWWllbGQgfnBIICsgTGlnaHRfSG91cnMsIGRhdGEgPSBzdHJhd2JlcnJ5KQ0KcGFuZGVyKHJlZHVjZWQubW9kZWwyKQ0KcmVzaWRfcGFuZWwocmVkdWNlZC5tb2RlbDIpDQpgYGANCg0KIyBSZXN1bHRzIEFuYWx5c2lzDQoNCk5vbmUgb2YgdGhlIHRlc3RlZCBtdWx0aXBsZSBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbHMgd2VyZSBhYmxlIHRvIHByZWRpY3QgdGhlIHZhcmlhbmNlIGluIHBsYW50IHlpZWxkIGF0IGEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBsZXZlbC4gUmVkdWNpbmcgdGhlIG1vZGVsIGFnYWluIHdvdWxkIHJlc3VsdCBpbiBhIHByZXZpb3VzbHkgYW5hbHl6ZWQgc2ltcGxlIGxpbmVhciByZWdyZXNzaW9uIG1vZGVsLCB3aGljaCB3YXMgbm90IHNpZ25pZmljYW50IGVpdGhlci4gSXQgY2FuIGJlIHJlYXNvbmFibHkgZGV0ZXJtaW5lZCB0aGF0LCBpbiBvdXIgc2FtcGxlZCBwb3B1bGF0aW9uLCBub25lIG9mIHRoZSBmYWN0b3JzIHdvdWxkIGJlIGFibGUgdG8gcHJlZGljdCB0aGUgc3RyYXdiZXJyeSB5aWVsZCwgaW5kaXZpZHVhbGx5IG9yIGNvbWJpbmVkLg0KDQojIENvbmNsdXNpb25zDQoNCk1vcmUgc2lnbmlmaWNhbnQgbW9kZWxzIG1heSBiZSBhYmxlIHRvIGJlIGNvbnN0cnVjdGVkIHVuZGVyIGRpZmZlcmVudCBzYW1wbGluZyBjaXJjdW1zdGFuY2VzLiBGb3IgZXhhbXBsZSwgYSBkZXNpZ25lZCBleHBlcmltZW50IHRoYXQgY2hhbmdlcyB0aGUgdmFyaW91cyBmYWN0b3JzIGF0IGRpZmZlcmVudCBsZXZlbHMgbWF5IGZpbmQgZGlmZmVyZW5jZXMgaW4gdGhlIHBsYW50IHlpZWxkLiBNb3JlIGNvbmNsdXNpdmUgZXZpZGVuY2UgbWF5IGJlIGZvdW5kIGluIHN1Y2ggYW4gZXhwZXJpbWVudC4NCg==