Question: New Cholesterol Medication
A pharmaceutical company develops “CholestFix” to
reduce Low-Density Lipoprotein (LDL, fat carrier that’s low in
density) cholesterol. The current standard drug
lowers LDL by an average of 25 mg/dL with a standard deviation of 15
mg/dL. A clinical trial with 5 participants were recruited in the study
for three months. At the end of the study, the mean reduction is 29
mg/dL. Assume that the variance of LDL reduction of new drug is the same
as that of the standard drugs.
Based on the results in the clinical trial, researchers in the company
believe
CholestFix is more effective.
a). Perform a formal hypothesis test of the researchers’ belief
regarding LDL reduction, using a significance level of \(\alpha = 0.05\).
Claim: Ha: \(\mu\) > 25 mg/dL
Hypothesis: \(H_o\) : \(\mu\) \(le\) 25 mg/dL \(H_a\) : \(\mu\) \(gt\) 25 mg/dL
#Current drug standard:
# Current Drug: Lowers LDL by average of 25 mg/dL
# sd=15
# n=5
# New drug
# new drug mu = 29 mg/dL
# Company believe CholestFix is more effective
# a). Perform a formal hypothesis test of the researchers’ belief regarding LDL reduction, using a significance level of α=0.05
# One-sample t-test in R
# Note this is a random comparative sample with same descriptive of the prompt. Use Manual Calculations for more precisness
set.seed(123)
simulated_iq <- rnorm(n=5, mean = 29, sd = 15)
result <- t.test(simulated_iq, mu = 25,
alternative = "greater")
# Output
print(result)
One Sample t-test
data: simulated_iq
t = 1.2689, df = 4, p-value = 0.1366
alternative hypothesis: true mean is greater than 25
95 percent confidence interval:
20.30524 Inf
sample estimates:
mean of x
31.90355
###
cat("\nManual t-value:" ,
"\nR t-value:", round(result$statistic, 3),
"\nCritical t-value (0.05):",
"\nR p-value:", round(result$p.value, 4))
Manual t-value:
R t-value: 1.269
Critical t-value (0.05):
R p-value: 0.1366
#Manual Check
x_bar = 29
mu_0 = 25
sd = 15
n = 5
alpha = 0.05
#calculate the t statistic
#what is tcrit
t = (29-25)/(15/sqrt(5))
t
[1] 0.5962848
#Find the t crit of a one-tailed test specifically
t_crit = qt(1 - alpha, df = n - 1)
t > t_crit
[1] FALSE
cat("t > t_crit outputs: ", t > t_crit)
t > t_crit outputs: FALSE
#False
#p_val = pt(t, df = n - 1, lower.tail = FALSE)
cat("There is not statistically evidence that CholestFix out performs the standard drug", "( t =", t, "p>0.05).")
There is not statistically evidence that CholestFix out performs the standard drug ( t = 0.5962848 p>0.05).
The t-statistic is less than t-crit, therefore there is not
statistical evidence the new drug CholesFix out performs the
standard drug (0.5962848 < 2.1318468). CholesFix should not be
advertised as a better performing drug.
The analysis is justified as valid
A one sample t-test with a one-tail test was used because the
analysis compared an already known drug demographic mean of 25 to an
unknown new drug performance of CholesFix. As the researchers claim the
new drug, CholesFix, performs greater than the existing drug, this is a
one tail, one direction of interest, analysis.
Although the raw means of the new drug reduction, CholesFix, is
greater than the mean of the standard drug reduction, the
characteristics of the CholesFix distribution, for example a how
standard deviation of 15, statistically lead to higher variability in an
already, small dataset (n=5) contributing to a statistically
non-significant greater mean.
b). Given \(n = 50, \sigma = 15, \alpha =
0.05\), and an effect size we wish to detect \(\delta = 4\) mg/dL (corresponding to a
reduction from 29 mg/dL to 25 mg/dL). What is the probability that we’d
detect a true improvement?
One tailed test
n = 50
sd = 15
alpha = 0.05
delta = 4
lam = (delta) / ( sd/ sqrt(n))
power_calc <- power.t.test(n = 50,
delta = 4, # true difference between the means in H0 and Ha
sd = 15,
sig.level = 0.05,
type = "one.sample",
alternative = "two.sided")
cat("The probability that we detect the true improvement of the new drug CholesFix compared to the standard drug is", round(power_calc$power, 4))
The probability that we detect the true improvement of the new drug CholesFix compared to the standard drug is 0.4557
#using one-sided in alternative line instead to check
power_calc_one_alt <- power.t.test(n = 50,
delta = 4, # true difference between the means in H0 and Ha
sd = 15,
sig.level = 0.05,
type = "one.sample",
alternative = "one.sided")
Analysis is valid
The probability we detect the true improvement is based on the power
which is 0.4557. We base power on the level of significance (0.05),
sample size (n=50), and distance between the means of the null and
alternative hypothesis (effect size) to assign the likelihood of being
able to detect an improvement by identifying the change between the
comparative \(H_o\) and \(H_a\) outcomes in this case is 4. Since our
power is almost 1/2 it suggests a lower level of power that may be
improved through a larger sample size.
c). Determine the minimum sample size required to detect an effect
size of 4 mg/dL with a power of \(1 - \beta =
0.8\) and a significance level of \(\alpha = 0.05\). Assume the standard
deviation of LDL reduction is 15 mg/dL.
# The minimumal n
#effect size = 4
#power 0.8
# sd = 15
sample_size = power.t.test(power = .80,
delta = 4,
sd = 15,
sig.level = 0.05,
type= "one.sample",
alternative = "two.sided")
c_sample=ceiling(sample_size$n)
cat("Required sample size for 80% power is ", ceiling(sample_size$n))
Required sample size for 80% power is 113
Validity Assessment
To determine the sample size required for 80% power we we consider
the alpha level (\(\alpha\) = .05),
difference between \(H_a\) and \(H_o\) (\(\delta =
4\)) with the designated power level, to solve for n, the sample
size. Again we use a one sample test because the population parameter
was known, and was being compared to an unknown, actively investigated,
sample. To ensure our sample is not underpowered and has a power level
of 80% we recommend a sample size of 113.
d).
Power curve: To assess the impact of sample size on
power, we can create a power function in terms of the sample size
\(n\) and use the remaining information from
part (b). Plot the power curve by selecting a sequence of sample sizes.
#DEFINE the range of sample sizes to test
n_range = seq(10, 200, by = 5)
#use sapply to calculate power for every 'n' in range
#We keep delta
power = sapply(n_range, function(n_val)
{
p_out = power.t.test(n= n_val,
delta =4 ,
sd= 15,
sig.level= 0.05,
type = "one.sample",
alternative = "two.sided") #should this be two.sided too?
return(p_out$power)
})
plot(n_range, power, type = "b", pch = 16,
main = "Power Curve CholestFix",
xlab= "Sample Size (n)",
ylab = "Power (Probability of Detecting Effect)")
# Horizontal line at 80% (the standard goal for power)
abline(h = 0.80, col = "red", lty = 2)
abline(v = 112, col = "blue", lty = 3) # The n you found in 1c

This is a graphical summary for power considering sample size
options. Detailing out interest in a 0.80 power level we use see the
sample size is the 113. This information graphically represents the
information listed in 1c, leaving the same interpretation for validity.
By analyzing the curvature of the line, we see the sample size for the
0.8 power level covers the majority of the curve, suggesting some
strength in the calculated 113 sample size. We see the sample sizes
above 150 do not assist the analysis as much as a smaller sample does at
lower probabilities, so by eye 0.8 probability is a good financial
balance between a large sample size with a stronger effect size.
Note: For each of the questions
above, write a short summary of what you observed, justify why your
analysis is valid, and interpret the results.
LS0tDQp0aXRsZTogIkFzc2lnbm1lbnQgOTogSHlwb3RoZXNpcyBUZXN0aW5nIGFuZCBQb3dlciBhbmQgU2FtcGxlIHNpemUgRGV0ZXJtaW5hdGlvbiINCmF1dGhvcjogIllvdXIgTmFtZSBFemFuYSBSaXZlcnMiDQpkYXRlOiAiIER1ZTogMDQvMDciDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vDQogICAgdG9jX2NvbGxhcHNlZDogeWVzDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgc21vb3RoX3Njcm9sbDogeWVzDQogICAgaGlnaGxpZ2h0OiBtb25vY2hyb21lDQogICAgdGhlbWU6IHNwYWNlbGFiDQogIHdvcmRfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIGtlZXBfbWQ6IHllcw0KICBwZGZfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgZmlnX3dpZHRoOiAzDQogICAgZmlnX2hlaWdodDogMw0KZWRpdG9yX29wdGlvbnM6IA0KICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lDQotLS0NCg0KYGBge2NzcywgZWNobyA9IEZBTFNFfQ0KI1RPQzo6YmVmb3JlIHsNCiAgY29udGVudDogIlRhYmxlIG9mIENvbnRlbnRzIjsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtc2l6ZTogMS4yZW07DQogIGRpc3BsYXk6IGJsb2NrOw0KICBjb2xvcjogbmF2eTsNCiAgbWFyZ2luLWJvdHRvbTogMTBweDsNCn0NCg0KDQpkaXYjVE9DIGxpIHsgICAgIC8qIHRhYmxlIG9mIGNvbnRlbnQgICovDQogICAgbGlzdC1zdHlsZTp1cHBlci1yb21hbjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7DQp9DQoNCmgxLnRpdGxlIHsgICAgLyogbGV2ZWwgMSBoZWFkZXIgb2YgdGl0bGUgICovDQogIGZvbnQtc2l6ZTogMjJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCn0NCg0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxNXB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsNCiAgY29sb3I6IG5hdnk7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDIwcHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoMiB7IC8qIEhlYWRlciAyIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmgzIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE2cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KLyogQWRkIGRvdHMgYWZ0ZXIgbnVtYmVyZWQgaGVhZGVycyAqLw0KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgew0KICBjb250ZW50OiAiLiI7DQoNCmJvZHkge2JhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7DQogICAgICBjb2xvcjogIzAwMDAwMDsNCiAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICAgIGZvbnQtc2l6ZTogMXJlbTsNCiAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICB9DQoNCi5oaWdobGlnaHRtZSB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyB9DQoNCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9DQoNCn0NCmBgYA0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCANCiMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGVzLg0KaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpDQogICBsaWJyYXJ5KGtuaXRyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwYW5kZXIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygicGFuZGVyIikNCiAgIGxpYnJhcnkocGFuZGVyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJnZ3Bsb3QyIikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpDQogIGxpYnJhcnkoZ2dwbG90MikNCn0NCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCiAgbGlicmFyeSh0aWR5dmVyc2UpDQp9DQoNCmlmICghcmVxdWlyZSgicGxvdGx5IikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCiAgbGlicmFyeShwbG90bHkpDQp9DQoNCmlmICghcmVxdWlyZSgiVkdBTSIpKSB7DQogIGluc3RhbGwucGFja2FnZXMoIlZHQU0iKQ0KICBsaWJyYXJ5KFZHQU0pDQp9DQojIyMjIFZHQU0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgIyBpbmNsdWRlIGNvZGUgY2h1bmsgaW4gdGhlIG91dHB1dCBmaWxlDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgICMgc29tZXRpbWVzLCB5b3UgY29kZSBtYXkgcHJvZHVjZSB3YXJuaW5nIG1lc3NhZ2VzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHlvdSBjYW4gY2hvb3NlIHRvIGluY2x1ZGUgdGhlIHdhcm5pbmcgbWVzc2FnZXMgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgb3V0cHV0IGZpbGUuIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgICAjIHlvdSBjYW4gYWxzbyBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlIHRoZSBvdXRwdXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUgb3V0cHV0IGZpbGUuDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQQ0KICAgICAgICAgICAgICAgICAgICAgICkgIA0KYGBgDQogDQogXA0KIA0KIyMgKipBc3NpZ25tZW50IE9iamVjdGl2ZXMqKiANCg0KPHA+DQoqIEVuaGFuY2UgdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgYW5kIHByb2NlZHVyZSBvZiBoeXBvdGhlc2lzIHRlc3RpbmcgLg0KDQoqIEltcGxlbWVudCB0aGUgcHJvY2VkdXJlcyBmb3IgcG93ZXIgYW5kIHNhbXBsZSBzaXplIGNhbGN1bGF0aW9uIGZvciBiYXNpYyBoeXBvdGhlc2lzIHRlc3RpbmcgcHJvY2VkdXJlcyB1c2luZyBudWlsdC1pbiBmdW5jdGlvbiBhbmQgbWFudWFsIGNhbGN1bGF0aW9uLg0KPC9wPg0KDQoNCiMjICoqUG9saWNpZXMgb2YgVXNpbmcgQUkgVG9vbHMqKg0KDQo8cD4NCioqUG9saWN5IG9uIEFJIFRvb2wgVXNlKio6IFBsZWFzZSBhZGhlcmUgdG8gdGhlIEFJIHRvb2wgcG9saWN5IHNwZWNpZmllZCBpbiB0aGUgY291cnNlIHN5bGxhYnVzLiBUaGUgZGlyZWN0IGNvcHlpbmcgb2YgQUktZ2VuZXJhdGVkIGNvbnRlbnQgaXMgc3RyaWN0bHkgcHJvaGliaXRlZC4gQWxsIHN1Ym1pdHRlZCB3b3JrIG11c3QgcmVmbGVjdCB5b3VyIG93biB1bmRlcnN0YW5kaW5nOyB3aGVyZSBleHRlcm5hbCB0b29scyBhcmUgY29uc3VsdGVkLCBjb250ZW50IG11c3QgYmUgdGhvcm91Z2hseSByZXBocmFzZWQgYW5kIHN5bnRoZXNpemVkIGluIHlvdXIgb3duIHdvcmRzLg0KPC9wPg0KDQo8cD4NCioqQ29kZSBJbmNsdXNpb24gUmVxdWlyZW1lbnQqKjogQW55IGNvZGUgaW5jbHVkZWQgaW4geW91ciBlc3NheSBtdXN0IGJlIHByb3Blcmx5IGNvbW1lbnRlZCB0byBleHBsYWluIHRoZSBwdXJwb3NlIGFuZC9vciBleHBlY3RlZCBvdXRwdXQgb2Yga2V5IGNvZGUgbGluZXMuIFN1Ym1pdHRpbmcgQUktZ2VuZXJhdGVkIGNvZGUgd2l0aG91dCBtZWFuaW5nZnVsLCBzdHVkZW50LWFkZGVkIGNvbW1lbnRzIHdpbGwgbm90IGJlIGFjY2VwdGVkLg0KPC9wPg0KDQoNCiMjICoqU2ltcGxlIHZlcnN1cyBDb21wb3NpdGUgSHlwb3RoZXNpcyoNCg0KKipTaW1wbGUgSHlwb3RoZXNpcyoqDQoNCiogKipTaW1wbGUgSHlwb3RoZXNpcyBUZXN0KiogaXMgYSBoeXBvdGhlc2lzIHRoYXQgY29tcGxldGVseSBzcGVjaWZpZXMgdGhlIHBvcHVsYXRpb24gZGlzdHJpYnV0aW9uLiBNYXRoZW1hdGljYWxseSwgc2ltcGxlIGh5cG90aGVzaXMgZml4ZXMgYWxsIHBhcmFtZXRlcnMgdG8gc3BlY2lmaWMgdmFsdWVzLiBGb3IgZXhhbXBsZSwgVGhlIHNpbXBsZSBoeXBvdGhlc2VzIGFyZTogJEhfMDogXG11ID0gNSQgKGlmICRcYWxwaGEkIGlzIGtub3duKSwgJEhfMDogXG11ID0gMTAwLCBcc2lnbWFeMiA9IDI1JCwgYW5kICRIXzE6IHAgPSAwLjckIGZvciBhIEJlcm5vdWxsaSBkaXN0cmlidXRpb24uDQoNCiogKipFeGFtcGxlIFNjZW5hcmlvKiogIFRlc3QgaWYgYSBjb2luIGlzIGZhaXI6DQoNClxiZWdpbnthbGlnbmVkfQ0KSF8wJjogcCA9IDAuNSBccXVhZCBcdGV4dHsoY29tcGxldGVseSBzcGVjaWZpZWQpfSBcXA0KSF8xJjogcCA9IDAuNiBccXVhZCBcdGV4dHsoYWxzbyBjb21wbGV0ZWx5IHNwZWNpZmllZCl9DQpcZW5ke2FsaWduZWR9DQoNCkJvdGggYXJlICoqc2ltcGxlKiogaHlwb3RoZXNlcy4NCg0KKipDb21wb3NpdGUgSHlwb3RoZXNpcyoqDQoNCiogKipDb21wb3NpdGUgSHlwb3RoZXNpcyoqIGlzIGEgaHlwb3RoZXNpcyB0aGF0IGRvZXMgbm90IGNvbXBsZXRlbHkgc3BlY2lmeSB0aGUgZGlzdHJpYnV0aW9uLiBNYXRoZW1hdGljYWxseSwgaXQgYWxsb3dzIGEgcmFuZ2Ugb2YgdmFsdWVzIGZvciBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZSwgaW4gb25lLXNpZGVkOiAkXG11ID41JDsgaW4gdHdvLXNpZGVkOiAkXG11IFxsZSA1JC4NCg0KKiAqKkV4YW1wbGUgU2NlbmFyaW9zKiogDQoNCg0KXGJlZ2lue2FsaWduZWR9DQomSF8wOiBcbXUgPSA1ICYmIFx0ZXh0eyhzaW1wbGUpfSBcXA0KJkhfMTogXG11ID4gNSAmJiBcdGV4dHsoY29tcG9zaXRlKX0NClxlbmR7YWxpZ25lZH0NCg0KDQoNClxiZWdpbnthbGlnbmVkfQ0KJkhfMDogXG11IFxsZXEgNSAmJiBcdGV4dHsoY29tcG9zaXRlKX0gXFwNCiZIXzE6IFxtdSA+IDUgJiYgXHRleHR7KGNvbXBvc2l0ZSl9DQpcZW5ke2FsaWduZWR9DQoNCg0KXGJlZ2lue2FsaWduZWR9DQomSF8wOiBcdGV4dHtkYXRhIGZvbGxvd3MgfSBOKFxtdSwgMSksIFxtdSA9IDAgJiYgXHRleHR7KHNpbXBsZSl9IFxcDQomSF8xOiBcdGV4dHtkYXRhIGZvbGxvd3MgUG9pc3Nvbn0oXGxhbWJkYSkgJiYgXHRleHR7KGNvbXBvc2l0ZSDigJMgZGlmZmVyZW50IGZhbWlseSl9DQpcZW5ke2FsaWduZWR9DQoNCg0KDQo8cD48Zm9udCBjb2xvciA9ICJkYXJrcmVkIj4qKlRoaXMgYXNzaWdubWVudCBmb2N1c2VzIG9uIHBlcmZvcm1pbmcgcGVyZm9ybWluZyBhIHRlc3Qgb2YgbWVhbiAoJFxtdSQpIGEgbm9ybWFsIHBvcHVsYXRpb24gYW5kIGNhbGN1bGF0aW5nIHRoZSBwb3dlciBhbmQgc2FtcGxlIHNpemUgYmFzZWQgb24gdmFyaW91cyBhc3N1bXB0aW9ucyoqPC9mb250PjwvcD4NCg0KDQpcDQoNCiMjICoqUXVlc3Rpb246IE5ldyBDaG9sZXN0ZXJvbCBNZWRpY2F0aW9uKioNCg0KPHA+DQpBIHBoYXJtYWNldXRpY2FsIGNvbXBhbnkgZGV2ZWxvcHMgKioiQ2hvbGVzdEZpeCIqKiB0byByZWR1Y2UgTG93LURlbnNpdHkgTGlwb3Byb3RlaW4gKExETCwgKmZhdCBjYXJyaWVyIHRoYXQncyBsb3cgaW4gZGVuc2l0eSopIGNob2xlc3Rlcm9sLiBUaGUgKipjdXJyZW50IHN0YW5kYXJkIGRydWcqKiBsb3dlcnMgTERMIGJ5IGFuIGF2ZXJhZ2Ugb2YgMjUgbWcvZEwgd2l0aCBhIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAxNSBtZy9kTC4gQSBjbGluaWNhbCB0cmlhbCB3aXRoIDUgcGFydGljaXBhbnRzIHdlcmUgcmVjcnVpdGVkIGluIHRoZSBzdHVkeSBmb3IgdGhyZWUgbW9udGhzLiBBdCB0aGUgZW5kIG9mIHRoZSBzdHVkeSwgdGhlIG1lYW4gcmVkdWN0aW9uIGlzIDI5IG1nL2RMLiBBc3N1bWUgdGhhdCB0aGUgdmFyaWFuY2Ugb2YgTERMIHJlZHVjdGlvbiBvZiBuZXcgZHJ1ZyBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBzdGFuZGFyZCBkcnVncy4NCg0KQmFzZWQgb24gdGhlIHJlc3VsdHMgaW4gdGhlIGNsaW5pY2FsIHRyaWFsLCByZXNlYXJjaGVycyBpbiB0aGUgY29tcGFueSBiZWxpZXZlICoqQ2hvbGVzdEZpeCoqIGlzIG1vcmUgZWZmZWN0aXZlLg0KPC9wPg0KDQoNCjxwPg0KYSkuIFBlcmZvcm0gYSBmb3JtYWwgaHlwb3RoZXNpcyB0ZXN0IG9mIHRoZSByZXNlYXJjaGVyc+KAmSBiZWxpZWYgcmVnYXJkaW5nIExETCByZWR1Y3Rpb24sIHVzaW5nIGEgc2lnbmlmaWNhbmNlIGxldmVsIG9mICRcYWxwaGEgPSAwLjA1JC4NCg0KDQpDbGFpbToNCiAgICBIYTogJFxtdSQgPiAyNSBtZy9kTA0KICAgIA0KSHlwb3RoZXNpczoNCiAgICAkSF9vJCA6ICRcbXUkICRsZSQgMjUgbWcvZEwNCiAgICAkSF9hJCA6ICRcbXUkICRndCQgMjUgbWcvZEwNCiAgICANCg0KDQpgYGB7cn0NCg0KI0N1cnJlbnQgZHJ1ZyBzdGFuZGFyZDoNCiAgICAjIEN1cnJlbnQgRHJ1ZzogTG93ZXJzIExETCBieSBhdmVyYWdlIG9mIDI1IG1nL2RMDQogICAgIyBzZD0xNQ0KICAgICMgbj01DQojIE5ldyBkcnVnDQogICMgbmV3IGRydWcgbXUgPSAyOSBtZy9kTA0KDQojIENvbXBhbnkgYmVsaWV2ZSBDaG9sZXN0Rml4IGlzIG1vcmUgZWZmZWN0aXZlDQoNCiMgYSkuIFBlcmZvcm0gYSBmb3JtYWwgaHlwb3RoZXNpcyB0ZXN0IG9mIHRoZSByZXNlYXJjaGVyc+KAmSBiZWxpZWYgcmVnYXJkaW5nIExETCByZWR1Y3Rpb24sIHVzaW5nIGEgc2lnbmlmaWNhbmNlIGxldmVsIG9mIM6xPTAuMDUNCg0KDQojIE9uZS1zYW1wbGUgdC10ZXN0IGluIFINCiMgTm90ZSB0aGlzIGlzIGEgcmFuZG9tIGNvbXBhcmF0aXZlIHNhbXBsZSB3aXRoIHNhbWUgZGVzY3JpcHRpdmUgb2YgdGhlIHByb21wdC4gVXNlIE1hbnVhbCBDYWxjdWxhdGlvbnMgZm9yIG1vcmUgcHJlY2lzbmVzcyANCnNldC5zZWVkKDEyMykNCnNpbXVsYXRlZF9pcSA8LSBybm9ybShuPTUsIG1lYW4gPSAyOSwgc2QgPSAxNSkNCnJlc3VsdCA8LSB0LnRlc3Qoc2ltdWxhdGVkX2lxLCBtdSA9IDI1LCANCiAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgPSAiZ3JlYXRlciIpDQoNCiMgT3V0cHV0DQpwcmludChyZXN1bHQpDQojIyMNCmNhdCgiXG5NYW51YWwgdC12YWx1ZToiICwNCiAgICAiXG5SIHQtdmFsdWU6Iiwgcm91bmQocmVzdWx0JHN0YXRpc3RpYywgMyksDQogICAgIlxuQ3JpdGljYWwgdC12YWx1ZSAoMC4wNSk6IiwNCiAgICAiXG5SIHAtdmFsdWU6Iiwgcm91bmQocmVzdWx0JHAudmFsdWUsIDQpKQ0KDQoNCg0KDQoNCiNNYW51YWwgQ2hlY2sgDQoNCnhfYmFyID0gMjkNCm11XzAgPSAyNQ0Kc2QgPSAxNQ0KbiA9IDUNCmFscGhhID0gMC4wNQ0KDQoNCiNjYWxjdWxhdGUgdGhlIHQgc3RhdGlzdGljDQoNCiN3aGF0IGlzIHRjcml0DQoNCnQgPSAoMjktMjUpLygxNS9zcXJ0KDUpKQ0KdA0KDQojRmluZCB0aGUgdCBjcml0IG9mIGEgb25lLXRhaWxlZCB0ZXN0IHNwZWNpZmljYWxseQ0KDQp0X2NyaXQgPSBxdCgxIC0gYWxwaGEsIGRmID0gbiAtIDEpDQoNCnQgPiB0X2NyaXQNCg0KY2F0KCJ0ID4gdF9jcml0IG91dHB1dHM6ICIsIHQgPiB0X2NyaXQpDQoNCiNGYWxzZQ0KDQojcF92YWwgPSBwdCh0LCBkZiA9IG4gLSAxLCBsb3dlci50YWlsID0gRkFMU0UpDQoNCmNhdCgiVGhlcmUgaXMgbm90IHN0YXRpc3RpY2FsbHkgZXZpZGVuY2UgdGhhdCBDaG9sZXN0Rml4IG91dCBwZXJmb3JtcyB0aGUgc3RhbmRhcmQgZHJ1ZyIsICIoIHQgPSIsIHQsICJwPjAuMDUpLiIpDQoNCmBgYA0KDQpUaGUgdC1zdGF0aXN0aWMgaXMgbGVzcyB0aGFuIHQtY3JpdCwgdGhlcmVmb3JlIHRoZXJlIGlzIG5vdCBzdGF0aXN0aWNhbCBldmlkZW5jZSB0aGUgbmV3IGRydWcgKkNob2xlc0ZpeCogb3V0IHBlcmZvcm1zIHRoZSBzdGFuZGFyZCBkcnVnIChgciB0YCA8IGByIHRfY3JpdGApLiBDaG9sZXNGaXggc2hvdWxkIG5vdCBiZSBhZHZlcnRpc2VkIGFzIGEgYmV0dGVyIHBlcmZvcm1pbmcgZHJ1Zy4gDQoNCioqVGhlIGFuYWx5c2lzIGlzIGp1c3RpZmllZCBhcyB2YWxpZCoqIA0KDQpBIG9uZSBzYW1wbGUgdC10ZXN0IHdpdGggYSBvbmUtdGFpbCB0ZXN0IHdhcyB1c2VkIGJlY2F1c2UgdGhlIGFuYWx5c2lzIGNvbXBhcmVkIGFuIGFscmVhZHkga25vd24gZHJ1ZyBkZW1vZ3JhcGhpYyBtZWFuIG9mIDI1IHRvIGFuIHVua25vd24gbmV3IGRydWcgcGVyZm9ybWFuY2Ugb2YgQ2hvbGVzRml4LiBBcyB0aGUgcmVzZWFyY2hlcnMgY2xhaW0gdGhlIG5ldyBkcnVnLCBDaG9sZXNGaXgsIHBlcmZvcm1zIGdyZWF0ZXIgdGhhbiB0aGUgZXhpc3RpbmcgZHJ1ZywgdGhpcyBpcyBhIG9uZSB0YWlsLCBvbmUgZGlyZWN0aW9uIG9mIGludGVyZXN0LCBhbmFseXNpcy4gDQoNCkFsdGhvdWdoIHRoZSByYXcgbWVhbnMgb2YgdGhlIG5ldyBkcnVnIHJlZHVjdGlvbiwgQ2hvbGVzRml4LCBpcyBncmVhdGVyIHRoYW4gdGhlIG1lYW4gb2YgdGhlIHN0YW5kYXJkIGRydWcgcmVkdWN0aW9uLCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBDaG9sZXNGaXggZGlzdHJpYnV0aW9uLCBmb3IgZXhhbXBsZSBhIGhvdyBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMTUsIHN0YXRpc3RpY2FsbHkgbGVhZCB0byBoaWdoZXIgdmFyaWFiaWxpdHkgaW4gYW4gYWxyZWFkeSwgc21hbGwgZGF0YXNldCAobj01KSBjb250cmlidXRpbmcgdG8gYSBzdGF0aXN0aWNhbGx5IG5vbi1zaWduaWZpY2FudCBncmVhdGVyIG1lYW4uDQoNCg0KDQoNCmIpLiBHaXZlbiAkbiA9IDUwLCBcc2lnbWEgPSAxNSwgXGFscGhhID0gMC4wNSQsIGFuZCBhbiBlZmZlY3Qgc2l6ZSB3ZSB3aXNoIHRvIGRldGVjdCAkXGRlbHRhID0gNCQgbWcvZEwgKGNvcnJlc3BvbmRpbmcgdG8gYSByZWR1Y3Rpb24gZnJvbSAyOSBtZy9kTCB0byAyNSBtZy9kTCkuICBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHdlJ2QgZGV0ZWN0IGEgdHJ1ZSBpbXByb3ZlbWVudD8NCg0KT25lIHRhaWxlZCB0ZXN0DQoNCmBgYHtyfQ0KDQpuID0gNTANCg0Kc2QgPSAxNQ0KDQphbHBoYSA9IDAuMDUNCg0KZGVsdGEgPSA0DQoNCmxhbSA9IChkZWx0YSkgLyAoIHNkLyBzcXJ0KG4pKQ0KDQpwb3dlcl9jYWxjIDwtIHBvd2VyLnQudGVzdChuID0gNTAsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IDQsICAgICMgdHJ1ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG1lYW5zIGluIEgwIGFuZCBIYQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBzZCA9IDE1LCAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzaWcubGV2ZWwgPSAwLjA1LA0KICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gIm9uZS5zYW1wbGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKQ0KY2F0KCJUaGUgcHJvYmFiaWxpdHkgdGhhdCB3ZSBkZXRlY3QgdGhlIHRydWUgaW1wcm92ZW1lbnQgb2YgdGhlIG5ldyBkcnVnIENob2xlc0ZpeCBjb21wYXJlZCB0byB0aGUgc3RhbmRhcmQgZHJ1ZyBpcyIsICByb3VuZChwb3dlcl9jYWxjJHBvd2VyLCA0KSkNCg0KDQoNCiN1c2luZyBvbmUtc2lkZWQgaW4gYWx0ZXJuYXRpdmUgbGluZSBpbnN0ZWFkIHRvIGNoZWNrDQpwb3dlcl9jYWxjX29uZV9hbHQgPC0gcG93ZXIudC50ZXN0KG4gPSA1MCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhID0gNCwgICAgIyB0cnVlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWVhbnMgaW4gSDAgYW5kIEhhDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNkID0gMTUsICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNpZy5sZXZlbCA9IDAuMDUsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAib25lLnNhbXBsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlID0gIm9uZS5zaWRlZCIpDQoNCmBgYA0KDQoNCioqQW5hbHlzaXMgaXMgdmFsaWQgKioNCg0KVGhlIHByb2JhYmlsaXR5IHdlIGRldGVjdCB0aGUgdHJ1ZSBpbXByb3ZlbWVudCBpcyBiYXNlZCBvbiB0aGUgcG93ZXIgd2hpY2ggaXMgYHIgcm91bmQocG93ZXJfY2FsYyRwb3dlciwgNClgLiBXZSBiYXNlIHBvd2VyIG9uIHRoZSBsZXZlbCBvZiBzaWduaWZpY2FuY2UgKDAuMDUpLCBzYW1wbGUgc2l6ZSAobj01MCksIGFuZCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBtZWFucyBvZiB0aGUgbnVsbCBhbmQgYWx0ZXJuYXRpdmUgaHlwb3RoZXNpcyAoZWZmZWN0IHNpemUpIHRvIGFzc2lnbiB0aGUgbGlrZWxpaG9vZCBvZiBiZWluZyBhYmxlIHRvIGRldGVjdCBhbiBpbXByb3ZlbWVudCBieSBpZGVudGlmeWluZyB0aGUgY2hhbmdlIGJldHdlZW4gdGhlIGNvbXBhcmF0aXZlICRIX28kIGFuZCAkSF9hJCBvdXRjb21lcyBpbiB0aGlzIGNhc2UgaXMgNC4gU2luY2Ugb3VyIHBvd2VyIGlzIGFsbW9zdCAxLzIgaXQgc3VnZ2VzdHMgYSBsb3dlciBsZXZlbCBvZiBwb3dlciB0aGF0IG1heSBiZSBpbXByb3ZlZCB0aHJvdWdoIGEgbGFyZ2VyIHNhbXBsZSBzaXplLg0KDQoNCmMpLiBEZXRlcm1pbmUgdGhlIG1pbmltdW0gc2FtcGxlIHNpemUgcmVxdWlyZWQgdG8gZGV0ZWN0IGFuIGVmZmVjdCBzaXplIG9mIDQgbWcvZEwgd2l0aCBhIHBvd2VyIG9mICQxIC0gXGJldGEgPSAwLjgkICBhbmQgYSBzaWduaWZpY2FuY2UgbGV2ZWwgb2YgJFxhbHBoYSA9IDAuMDUkLiBBc3N1bWUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBMREwgcmVkdWN0aW9uIGlzIDE1IG1nL2RMLg0KDQoNCmBgYHtyfQ0KDQoNCiMgVGhlIG1pbmltdW1hbCBuDQogICNlZmZlY3Qgc2l6ZSA9IDQNCiAgI3Bvd2VyIDAuOA0KICAjIHNkID0gMTUNCg0KDQoNCnNhbXBsZV9zaXplID0gcG93ZXIudC50ZXN0KHBvd2VyID0gLjgwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSA0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QgPSAxNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZy5sZXZlbCA9IDAuMDUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSAib25lLnNhbXBsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKQ0KDQoNCg0KY19zYW1wbGU9Y2VpbGluZyhzYW1wbGVfc2l6ZSRuKQ0KDQpjYXQoIlJlcXVpcmVkIHNhbXBsZSBzaXplIGZvciA4MCUgcG93ZXIgaXMgIiwgY2VpbGluZyhzYW1wbGVfc2l6ZSRuKSkNCmBgYA0KKipWYWxpZGl0eSBBc3Nlc3NtZW50KioNCg0KVG8gZGV0ZXJtaW5lIHRoZSBzYW1wbGUgc2l6ZSByZXF1aXJlZCBmb3IgODAlIHBvd2VyIHdlIHdlIGNvbnNpZGVyIHRoZSBhbHBoYSBsZXZlbCAoJFxhbHBoYSQgPSAuMDUpLCBkaWZmZXJlbmNlIGJldHdlZW4gJEhfYSQgYW5kICRIX28kICgkXGRlbHRhID0gNCQpIHdpdGggdGhlIGRlc2lnbmF0ZWQgcG93ZXIgbGV2ZWwsIHRvIHNvbHZlIGZvciBuLCB0aGUgc2FtcGxlIHNpemUuIEFnYWluIHdlIHVzZSBhIG9uZSBzYW1wbGUgdGVzdCBiZWNhdXNlIHRoZSBwb3B1bGF0aW9uIHBhcmFtZXRlciB3YXMga25vd24sIGFuZCB3YXMgYmVpbmcgY29tcGFyZWQgdG8gYW4gdW5rbm93biwgYWN0aXZlbHkgaW52ZXN0aWdhdGVkLCBzYW1wbGUuIFRvIGVuc3VyZSBvdXIgc2FtcGxlIGlzIG5vdCB1bmRlcnBvd2VyZWQgYW5kIGhhcyBhIHBvd2VyIGxldmVsIG9mIDgwJSB3ZSByZWNvbW1lbmQgYSBzYW1wbGUgc2l6ZSBvZiBgciBjZWlsaW5nKGNfc2FtcGxlKWAuIA0KDQoNCg0KZCkuICoqUG93ZXIgY3VydmUqKjogVG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2Ygc2FtcGxlIHNpemUgb24gcG93ZXIsIHdlIGNhbiBjcmVhdGUgYSBwb3dlciBmdW5jdGlvbiBpbiB0ZXJtcyBvZiB0aGUgc2FtcGxlIHNpemUgJG4kIGFuZCB1c2UgdGhlIHJlbWFpbmluZyBpbmZvcm1hdGlvbiBmcm9tIHBhcnQgKGIpLiBQbG90IHRoZSBwb3dlciBjdXJ2ZSBieSBzZWxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBzYW1wbGUgc2l6ZXMuDQo8L3A+DQoNCmBgYHtyfQ0KDQojREVGSU5FIHRoZSByYW5nZSBvZiBzYW1wbGUgc2l6ZXMgdG8gdGVzdA0Kbl9yYW5nZSA9IHNlcSgxMCwgMjAwLCBieSA9IDUpDQoNCg0KI3VzZSBzYXBwbHkgdG8gY2FsY3VsYXRlIHBvd2VyIGZvciBldmVyeSAnbicgaW4gcmFuZ2UNCiNXZSBrZWVwIGRlbHRhDQoNCnBvd2VyID0gc2FwcGx5KG5fcmFuZ2UsIGZ1bmN0aW9uKG5fdmFsKQ0Kew0KICANCiAgcF9vdXQgPSBwb3dlci50LnRlc3Qobj0gbl92YWwsDQogICAgICAgICAgICAgICAgICAgICAgIGRlbHRhID00ICwNCiAgICAgICAgICAgICAgICAgICAgICAgc2Q9IDE1LA0KICAgICAgICAgICAgICAgICAgICAgICBzaWcubGV2ZWw9IDAuMDUsDQogICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAib25lLnNhbXBsZSIsDQogICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpICNzaG91bGQgdGhpcyBiZSB0d28uc2lkZWQgdG9vPw0KDQogIHJldHVybihwX291dCRwb3dlcikNCiAgDQp9KQ0KDQpwbG90KG5fcmFuZ2UsIHBvd2VyLCB0eXBlID0gImIiLCBwY2ggPSAxNiwgDQogICAgIG1haW4gPSAiUG93ZXIgQ3VydmUgQ2hvbGVzdEZpeCIsDQogICAgIHhsYWI9ICJTYW1wbGUgU2l6ZSAobikiLA0KICAgICB5bGFiID0gIlBvd2VyIChQcm9iYWJpbGl0eSBvZiBEZXRlY3RpbmcgRWZmZWN0KSIpDQojIEhvcml6b250YWwgbGluZSBhdCA4MCUgKHRoZSBzdGFuZGFyZCBnb2FsIGZvciBwb3dlcikNCmFibGluZShoID0gMC44MCwgY29sID0gInJlZCIsIGx0eSA9IDIpDQphYmxpbmUodiA9IDExMiwgY29sID0gImJsdWUiLCBsdHkgPSAzKSAjIFRoZSBuIHlvdSBmb3VuZCBpbiAxYw0KYGBgDQoNClRoaXMgaXMgYSBncmFwaGljYWwgc3VtbWFyeSBmb3IgcG93ZXIgY29uc2lkZXJpbmcgc2FtcGxlIHNpemUgb3B0aW9ucy4gRGV0YWlsaW5nIG91dCBpbnRlcmVzdCBpbiBhIDAuODAgcG93ZXIgbGV2ZWwgd2UgdXNlIHNlZSB0aGUgc2FtcGxlIHNpemUgaXMgdGhlIGByIGNlaWxpbmcoc2FtcGxlX3NpemUkbilgLiBUaGlzIGluZm9ybWF0aW9uIGdyYXBoaWNhbGx5IHJlcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uIGxpc3RlZCBpbiAxYywgbGVhdmluZyB0aGUgc2FtZSBpbnRlcnByZXRhdGlvbiBmb3IgdmFsaWRpdHkuIEJ5IGFuYWx5emluZyB0aGUgY3VydmF0dXJlIG9mIHRoZSBsaW5lLCB3ZSBzZWUgdGhlIHNhbXBsZSBzaXplIGZvciB0aGUgMC44IHBvd2VyIGxldmVsIGNvdmVycyB0aGUgbWFqb3JpdHkgb2YgdGhlIGN1cnZlLCBzdWdnZXN0aW5nIHNvbWUgc3RyZW5ndGggaW4gdGhlIGNhbGN1bGF0ZWQgMTEzIHNhbXBsZSBzaXplLiBXZSBzZWUgdGhlIHNhbXBsZSBzaXplcyBhYm92ZSAxNTAgZG8gbm90IGFzc2lzdCB0aGUgYW5hbHlzaXMgYXMgbXVjaCBhcyBhIHNtYWxsZXIgc2FtcGxlIGRvZXMgYXQgbG93ZXIgcHJvYmFiaWxpdGllcywgc28gYnkgZXllIDAuOCBwcm9iYWJpbGl0eSBpcyBhIGdvb2QgZmluYW5jaWFsIGJhbGFuY2UgYmV0d2VlbiBhIGxhcmdlIHNhbXBsZSBzaXplIHdpdGggYSBzdHJvbmdlciBlZmZlY3Qgc2l6ZS4NCg0KDQo8Zm9udCBjb2xvciA9ICJyZWQiPioqTm90ZSoqOiBGb3IgZWFjaCBvZiB0aGUgcXVlc3Rpb25zIGFib3ZlLCB3cml0ZSBhIHNob3J0IHN1bW1hcnkgb2Ygd2hhdCB5b3Ugb2JzZXJ2ZWQsIGp1c3RpZnkgd2h5IHlvdXIgYW5hbHlzaXMgaXMgdmFsaWQsIGFuZCBpbnRlcnByZXQgdGhlIHJlc3VsdHMuPC9mb250Pg==