Assignment Objectives

  • Reinforce the likelihood concepts and MLE.

  • Understand the concepts of confidence intervals.

  • Master the process of finding likelihood ratio confidence interval of unknown parameter.


Policies of Using AI Tools

Policy on AI Tool Use: You must adhere to the AI tool policy specified in the course syllabus. The direct copying of AI-generated content is strictly prohibited. All submitted work must reflect your own understanding; where external tools are consulted, content must be thoroughly rephrased and synthesized in your own words.

Code Inclusion Requirement: Any code included in your essay must be properly commented to explain the purpose and/or expected output of key code lines. Submitting AI-generated code without meaningful, student-added comments will not be accepted.


One Parameter Lindley Distribution

The Lindley distribution is a continuous probability distribution proposed by D.V. Lindley in 1958. It represents a weighted mixture of exponential and gamma distributions, providing a flexible single-parameter model for lifetime data.

\[ f(x;\theta) = \frac{\theta^2}{1+\theta}(1+x)e^{-\theta x}, \quad x > 0, \quad \theta > 0 \]

where \(x\) = random variable (e.g., time, size, amount) and \(\theta\) = shape parameter controlling the distribution.

Given an independent random sample \(X_1, X_2, \dots, X_n\):

\[ L(\theta) = \prod_{i=1}^n f(x_i;\theta) = \prod_{i=1}^n \left[ \frac{\theta^2}{1+\theta} (1 + x_i) e^{-\theta x_i} \right]. \]

Let \(S = \sum_{i=1}^n x_i\), \(\bar{x} = S/n\), and \(C = \sum_{i=1}^n \ln(1 + x_i)\) (constant with respect to \(\theta\)):

\[ \ell(\theta) = \ln L(\theta) = n \ln\left( \frac{\theta^2}{1+\theta} \right) + C - \theta S. \]

After some algebra, we obtain the closed form of the MLE of \(\theta\) in the following

\[ \boxed{\hat{\theta} = \frac{1 - \bar{x} + \sqrt{\bar{x}^2 + 6\bar{x} + 1}}{2\bar{x}}} \]

As good exercise, we can derive the following Fisher information of \(\theta\):

\[ \boxed{I(\theta) = \frac{2}{\theta^2} - \frac{1}{(1+\theta)^2}} \]


This assignment focuses on constructing various confidence intervals of the shape parameter \(\theta\) in the Lindley distribution.


Question: Customer Service Times (minutes)

The customer service call duration data set originates from a major telecommunications provider in North America, operating in a highly competitive market where:

3.2, 5.8, 7.1, 4.5, 10.3, 6.2, 8.7, 5.1, 12.5, 6.9,
9.4, 5.7, 11.8, 4.9, 9.1, 6.5, 13.2, 7.8, 10.6, 6.1,
8.9, 5.4, 12.1, 7.3, 9.8, 5.9, 11.4, 6.8, 10.9, 7.5,
4.2, 8.3, 6.4, 14.1, 5.6, 9.7, 7.9, 11.1, 6.7, 10.2,
5.3, 8.6, 7.2, 12.9, 6.3, 9.3, 8.1, 13.7, 7.6, 10.8

Assuming the data follow a one-parameter Lindley distribution, construct a \(95\%\) confidence interval for the parameter \(\theta\) using the provided data and the specified methods. For each of the following questions, first describe your reasoning process for the analysis, then write code to perform the actual analysis. Finally, summarize the results to conclude the question.

  1. Construct a 95% asymptotic confidence interval based on the asymptotic sampling distribution of the maximum likelihood estimator (MLE) of \(\theta\).
# Data
x <- c(3.2,5.8,7.1,4.5,10.3,6.2,8.7,5.1,12.5,6.9,
       9.4,5.7,11.8,4.9,9.1,6.5,13.2,7.8,10.6,6.1,
       8.9,5.4,12.1,7.3,9.8,5.9,11.4,6.8,10.9,7.5,
       4.2,8.3,6.4,14.1,5.6,9.7,7.9,11.1,6.7,10.2,
       5.3,8.6,7.2,12.9,6.3,9.3,8.1,13.7,7.6,10.8)

n <- length(x)
sumx <- sum(x)

#-----------------------------
# (1) MLE via score equation
#-----------------------------
score <- function(theta){
  (2*n)/theta - n/(1+theta) - sumx
}

theta_hat <- uniroot(score, c(1e-6, 5))$root

#-----------------------------
# (2) Asymptotic Confidence Interval
#-----------------------------
info <- (2*n)/(theta_hat^2) - n/(1+theta_hat)^2
se <- sqrt(1/info)

z <- qnorm(0.975)

CI_asym <- c(theta_hat - z*se,
             theta_hat + z*se)

theta_hat
[1] 0.2191063
CI_asym
[1] 0.1758112 0.2624014
  1. Construct a 95% likelihood ratio confidence interval for \(\theta\).
#-----------------------------
# (3) Likelihood Ratio Confidence Interval
#-----------------------------
loglik <- function(theta){
  n*(2*log(theta) - log(1+theta)) + sum(log(1+x)) - theta*sumx
}

ll_max <- loglik(theta_hat)

# Chi-square critical value
crit <- qchisq(0.95, df=1)

# Function for Likelihood Ratio 
LR_fun <- function(theta){
  2*(ll_max - loglik(theta)) - crit
}

# Lower bound
lower <- uniroot(LR_fun, c(1e-6, theta_hat))$root

# Upper bound
upper <- uniroot(LR_fun, c(theta_hat, 1))$root

CI_LR <- c(lower, upper)

CI_LR
[1] 0.178641 0.265321
  1. Assuming the two confidence intervals above are valid, compare them in terms of performance and make a recommendation. Justify your recommendation.

Comparing the shape, accuracy, sample performance (specifically on small ones), and invariance of asymptotic confidence interval and likelihood ratio confidence interval you can find that asymptomatic confidence interval has a more symmetric shape, approximate accuracy, poor performance in small sample sizes, and no invariance. Likelihood ratio confidence interval is asymmetric, more accurate, performs well in small sample sizes, and has invariance.

Use the likelihood ratio confidence interval as it is more reliable and better reflects the true shape of the distribution.

LS0tDQp0aXRsZTogIkFzc2lnbm1lbnQgNzogQ29uc3RydWN0aW5nIExpa2VsaWhvb2QgUmF0aW8gQ29uZmlkZW5jZSBJbnRlcnZhbCINCmF1dGhvcjogIktpZXJhbiBIZWZmZXJhbiAiDQpkYXRlOiAiIER1ZTogMy8yNC8yNiAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vDQogICAgdG9jX2NvbGxhcHNlZDogeWVzDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgc21vb3RoX3Njcm9sbDogeWVzDQogICAgaGlnaGxpZ2h0OiBtb25vY2hyb21lDQogICAgdGhlbWU6IHNwYWNlbGFiDQogIHBkZl9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICBmaWdfd2lkdGg6IDMNCiAgICBmaWdfaGVpZ2h0OiAzDQogIHdvcmRfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIGtlZXBfbWQ6IHllcw0KZWRpdG9yX29wdGlvbnM6IA0KICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lDQotLS0NCg0KYGBge2NzcywgZWNobyA9IEZBTFNFfQ0KI1RPQzo6YmVmb3JlIHsNCiAgY29udGVudDogIlRhYmxlIG9mIENvbnRlbnRzIjsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtc2l6ZTogMS4yZW07DQogIGRpc3BsYXk6IGJsb2NrOw0KICBjb2xvcjogbmF2eTsNCiAgbWFyZ2luLWJvdHRvbTogMTBweDsNCn0NCg0KDQpkaXYjVE9DIGxpIHsgICAgIC8qIHRhYmxlIG9mIGNvbnRlbnQgICovDQogICAgbGlzdC1zdHlsZTp1cHBlci1yb21hbjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7DQp9DQoNCmgxLnRpdGxlIHsgICAgLyogbGV2ZWwgMSBoZWFkZXIgb2YgdGl0bGUgICovDQogIGZvbnQtc2l6ZTogMjJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCn0NCg0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxNXB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsNCiAgY29sb3I6IG5hdnk7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDIwcHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQpoMiB7IC8qIEhlYWRlciAyIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmgzIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE2cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KLyogQWRkIGRvdHMgYWZ0ZXIgbnVtYmVyZWQgaGVhZGVycyAqLw0KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgew0KICBjb250ZW50OiAiLiI7DQoNCmJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9DQoNCi5oaWdobGlnaHRtZSB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyB9DQoNCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9DQoNCn0NCmBgYA0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCANCiMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGVzLg0KaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpDQogICBsaWJyYXJ5KGtuaXRyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwYW5kZXIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygicGFuZGVyIikNCiAgIGxpYnJhcnkocGFuZGVyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJnZ3Bsb3QyIikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpDQogIGxpYnJhcnkoZ2dwbG90MikNCn0NCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCiAgbGlicmFyeSh0aWR5dmVyc2UpDQp9DQoNCmlmICghcmVxdWlyZSgicGxvdGx5IikpIHsNCiAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCiAgbGlicmFyeShwbG90bHkpDQp9DQoNCmlmICghcmVxdWlyZSgiVkdBTSIpKSB7DQogIGluc3RhbGwucGFja2FnZXMoIlZHQU0iKQ0KICBsaWJyYXJ5KFZHQU0pDQp9DQojIyMjIFZHQU0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgIyBpbmNsdWRlIGNvZGUgY2h1bmsgaW4gdGhlIG91dHB1dCBmaWxlDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgICMgc29tZXRpbWVzLCB5b3UgY29kZSBtYXkgcHJvZHVjZSB3YXJuaW5nIG1lc3NhZ2VzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHlvdSBjYW4gY2hvb3NlIHRvIGluY2x1ZGUgdGhlIHdhcm5pbmcgbWVzc2FnZXMgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgb3V0cHV0IGZpbGUuIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgICAjIHlvdSBjYW4gYWxzbyBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlIHRoZSBvdXRwdXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUgb3V0cHV0IGZpbGUuDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQQ0KICAgICAgICAgICAgICAgICAgICAgICkgIA0KYGBgDQogDQogXA0KIA0KIyMgKipBc3NpZ25tZW50IE9iamVjdGl2ZXMqKiANCg0KKiBSZWluZm9yY2UgdGhlIGxpa2VsaWhvb2QgY29uY2VwdHMgYW5kIE1MRS4NCg0KKiBVbmRlcnN0YW5kIHRoZSBjb25jZXB0cyBvZiBjb25maWRlbmNlIGludGVydmFscy4NCg0KKiBNYXN0ZXIgdGhlIHByb2Nlc3Mgb2YgZmluZGluZyBsaWtlbGlob29kIHJhdGlvIGNvbmZpZGVuY2UgaW50ZXJ2YWwgb2YgdW5rbm93biBwYXJhbWV0ZXIuDQoNClwNCg0KIyMgKipQb2xpY2llcyBvZiBVc2luZyBBSSBUb29scyoqDQoNCioqUG9saWN5IG9uIEFJIFRvb2wgVXNlKio6IFlvdSBtdXN0IGFkaGVyZSB0byB0aGUgQUkgdG9vbCBwb2xpY3kgc3BlY2lmaWVkIGluIHRoZSBjb3Vyc2Ugc3lsbGFidXMuIFRoZSBkaXJlY3QgY29weWluZyBvZiBBSS1nZW5lcmF0ZWQgY29udGVudCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBBbGwgc3VibWl0dGVkIHdvcmsgbXVzdCByZWZsZWN0IHlvdXIgb3duIHVuZGVyc3RhbmRpbmc7IHdoZXJlIGV4dGVybmFsIHRvb2xzIGFyZSBjb25zdWx0ZWQsIGNvbnRlbnQgbXVzdCBiZSB0aG9yb3VnaGx5IHJlcGhyYXNlZCBhbmQgc3ludGhlc2l6ZWQgaW4geW91ciBvd24gd29yZHMuDQoNCioqQ29kZSBJbmNsdXNpb24gUmVxdWlyZW1lbnQqKjogQW55IGNvZGUgaW5jbHVkZWQgaW4geW91ciBlc3NheSBtdXN0IGJlIHByb3Blcmx5IGNvbW1lbnRlZCB0byBleHBsYWluIHRoZSBwdXJwb3NlIGFuZC9vciBleHBlY3RlZCBvdXRwdXQgb2Yga2V5IGNvZGUgbGluZXMuIFN1Ym1pdHRpbmcgQUktZ2VuZXJhdGVkIGNvZGUgd2l0aG91dCBtZWFuaW5nZnVsLCBzdHVkZW50LWFkZGVkIGNvbW1lbnRzIHdpbGwgbm90IGJlIGFjY2VwdGVkLg0KDQpcDQoNCioqT25lIFBhcmFtZXRlciBMaW5kbGV5IERpc3RyaWJ1dGlvbioqDQoNClRoZSAqKkxpbmRsZXkgZGlzdHJpYnV0aW9uKiogaXMgYSAqKmNvbnRpbnVvdXMgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uKiogcHJvcG9zZWQgYnkgRC5WLiBMaW5kbGV5IGluIDE5NTguIEl0IHJlcHJlc2VudHMgYSAqKndlaWdodGVkIG1peHR1cmUqKiBvZiBleHBvbmVudGlhbCBhbmQgZ2FtbWEgZGlzdHJpYnV0aW9ucywgcHJvdmlkaW5nIGEgZmxleGlibGUgc2luZ2xlLXBhcmFtZXRlciBtb2RlbCBmb3IgbGlmZXRpbWUgZGF0YS4gDQoNCiQkDQpmKHg7XHRoZXRhKSA9IFxmcmFje1x0aGV0YV4yfXsxK1x0aGV0YX0oMSt4KWVeey1cdGhldGEgeH0sIFxxdWFkIHggPiAwLCBccXVhZCBcdGhldGEgPiAwDQokJA0KDQp3aGVyZSAkeCQgPSByYW5kb20gdmFyaWFibGUgKGUuZy4sIHRpbWUsIHNpemUsIGFtb3VudCkgYW5kICRcdGhldGEkID0gc2hhcGUgcGFyYW1ldGVyIGNvbnRyb2xsaW5nIHRoZSBkaXN0cmlidXRpb24uDQoNCkdpdmVuIGFuIGluZGVwZW5kZW50IHJhbmRvbSBzYW1wbGUgJFhfMSwgWF8yLCBcZG90cywgWF9uJDoNCg0KJCQNCkwoXHRoZXRhKSA9IFxwcm9kX3tpPTF9Xm4gZih4X2k7XHRoZXRhKSA9IFxwcm9kX3tpPTF9Xm4gXGxlZnRbIFxmcmFje1x0aGV0YV4yfXsxK1x0aGV0YX0gKDEgKyB4X2kpIGVeey1cdGhldGEgeF9pfSBccmlnaHRdLg0KJCQNCg0KTGV0ICRTID0gXHN1bV97aT0xfV5uIHhfaSQsICRcYmFye3h9ID0gUy9uJCwgIGFuZCAkQyA9IFxzdW1fe2k9MX1ebiBcbG4oMSArIHhfaSkkIChjb25zdGFudCB3aXRoIHJlc3BlY3QgdG8gJFx0aGV0YSQpOg0KDQokJA0KXGVsbChcdGhldGEpID0gXGxuIEwoXHRoZXRhKSA9IG4gXGxuXGxlZnQoIFxmcmFje1x0aGV0YV4yfXsxK1x0aGV0YX0gXHJpZ2h0KSArIEMgLSBcdGhldGEgUy4NCiQkDQoNCkFmdGVyIHNvbWUgYWxnZWJyYSwgd2Ugb2J0YWluIHRoZSBjbG9zZWQgZm9ybSBvZiB0aGUgTUxFIG9mICRcdGhldGEkIGluIHRoZSBmb2xsb3dpbmcNCg0KJCQNClxib3hlZHtcaGF0e1x0aGV0YX0gPSBcZnJhY3sxIC0gXGJhcnt4fSArIFxzcXJ0e1xiYXJ7eH1eMiArIDZcYmFye3h9ICsgMX19ezJcYmFye3h9fX0NCiQkDQoNCkFzIGdvb2QgZXhlcmNpc2UsIHdlIGNhbiBkZXJpdmUgdGhlIGZvbGxvd2luZyBGaXNoZXIgaW5mb3JtYXRpb24gb2YgJFx0aGV0YSQ6DQoNCiQkDQpcYm94ZWR7SShcdGhldGEpID0gXGZyYWN7Mn17XHRoZXRhXjJ9IC0gXGZyYWN7MX17KDErXHRoZXRhKV4yfX0NCiQkDQoNCg0KXA0KDQo8Zm9udCBjb2xvciA9ICJibHVlIj4qKlRoaXMgYXNzaWdubWVudCBmb2N1c2VzIG9uIGNvbnN0cnVjdGluZyB2YXJpb3VzIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9mIHRoZSBzaGFwZSBwYXJhbWV0ZXIgJFx0aGV0YSQgaW4gdGhlIExpbmRsZXkgZGlzdHJpYnV0aW9uLioqPC9mb250Pg0KDQoNClwNCg0KIyMgKipRdWVzdGlvbjogQ3VzdG9tZXIgU2VydmljZSBUaW1lcyAobWludXRlcykqKg0KDQpUaGUgY3VzdG9tZXIgc2VydmljZSBjYWxsIGR1cmF0aW9uIGRhdGEgc2V0IG9yaWdpbmF0ZXMgZnJvbSBhIG1ham9yIHRlbGVjb21tdW5pY2F0aW9ucyBwcm92aWRlciBpbiBOb3J0aCBBbWVyaWNhLCBvcGVyYXRpbmcgaW4gYSBoaWdobHkgY29tcGV0aXRpdmUgbWFya2V0IHdoZXJlOg0KDQpgYGANCjMuMiwgNS44LCA3LjEsIDQuNSwgMTAuMywgNi4yLCA4LjcsIDUuMSwgMTIuNSwgNi45LA0KOS40LCA1LjcsIDExLjgsIDQuOSwgOS4xLCA2LjUsIDEzLjIsIDcuOCwgMTAuNiwgNi4xLA0KOC45LCA1LjQsIDEyLjEsIDcuMywgOS44LCA1LjksIDExLjQsIDYuOCwgMTAuOSwgNy41LA0KNC4yLCA4LjMsIDYuNCwgMTQuMSwgNS42LCA5LjcsIDcuOSwgMTEuMSwgNi43LCAxMC4yLA0KNS4zLCA4LjYsIDcuMiwgMTIuOSwgNi4zLCA5LjMsIDguMSwgMTMuNywgNy42LCAxMC44DQpgYGANCg0KQXNzdW1pbmcgdGhlIGRhdGEgZm9sbG93IGEgb25lLXBhcmFtZXRlciBMaW5kbGV5IGRpc3RyaWJ1dGlvbiwgY29uc3RydWN0IGEgJDk1XCUkIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZm9yIHRoZSBwYXJhbWV0ZXIgJFx0aGV0YSQgdXNpbmcgdGhlIHByb3ZpZGVkIGRhdGEgYW5kIHRoZSBzcGVjaWZpZWQgbWV0aG9kcy4gRm9yIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMsIGZpcnN0IGRlc2NyaWJlIHlvdXIgcmVhc29uaW5nIHByb2Nlc3MgZm9yIHRoZSBhbmFseXNpcywgdGhlbiB3cml0ZSBjb2RlIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBhbmFseXNpcy4gRmluYWxseSwgc3VtbWFyaXplIHRoZSByZXN1bHRzIHRvIGNvbmNsdWRlIHRoZSBxdWVzdGlvbi4NCg0KDQphKSBDb25zdHJ1Y3QgYSAqKjk1JSBhc3ltcHRvdGljIGNvbmZpZGVuY2UgaW50ZXJ2YWwqKiBiYXNlZCBvbiB0aGUgYXN5bXB0b3RpYyBzYW1wbGluZyBkaXN0cmlidXRpb24gb2YgdGhlIG1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0b3IgKE1MRSkgb2YgJFx0aGV0YSQuDQoNCmBgYHtyfQ0KIyBEYXRhDQp4IDwtIGMoMy4yLDUuOCw3LjEsNC41LDEwLjMsNi4yLDguNyw1LjEsMTIuNSw2LjksDQogICAgICAgOS40LDUuNywxMS44LDQuOSw5LjEsNi41LDEzLjIsNy44LDEwLjYsNi4xLA0KICAgICAgIDguOSw1LjQsMTIuMSw3LjMsOS44LDUuOSwxMS40LDYuOCwxMC45LDcuNSwNCiAgICAgICA0LjIsOC4zLDYuNCwxNC4xLDUuNiw5LjcsNy45LDExLjEsNi43LDEwLjIsDQogICAgICAgNS4zLDguNiw3LjIsMTIuOSw2LjMsOS4zLDguMSwxMy43LDcuNiwxMC44KQ0KDQpuIDwtIGxlbmd0aCh4KQ0Kc3VteCA8LSBzdW0oeCkNCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojICgxKSBNTEUgdmlhIHNjb3JlIGVxdWF0aW9uDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnNjb3JlIDwtIGZ1bmN0aW9uKHRoZXRhKXsNCiAgKDIqbikvdGhldGEgLSBuLygxK3RoZXRhKSAtIHN1bXgNCn0NCg0KdGhldGFfaGF0IDwtIHVuaXJvb3Qoc2NvcmUsIGMoMWUtNiwgNSkpJHJvb3QNCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojICgyKSBBc3ltcHRvdGljIENvbmZpZGVuY2UgSW50ZXJ2YWwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KaW5mbyA8LSAoMipuKS8odGhldGFfaGF0XjIpIC0gbi8oMSt0aGV0YV9oYXQpXjINCnNlIDwtIHNxcnQoMS9pbmZvKQ0KDQp6IDwtIHFub3JtKDAuOTc1KQ0KDQpDSV9hc3ltIDwtIGModGhldGFfaGF0IC0geipzZSwNCiAgICAgICAgICAgICB0aGV0YV9oYXQgKyB6KnNlKQ0KDQp0aGV0YV9oYXQNCkNJX2FzeW0NCmBgYA0KDQpiKSBDb25zdHJ1Y3QgYSAqKjk1JSBsaWtlbGlob29kIHJhdGlvIGNvbmZpZGVuY2UgaW50ZXJ2YWwqKiBmb3IgJFx0aGV0YSQuDQoNCmBgYHtyfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojICgzKSBMaWtlbGlob29kIFJhdGlvIENvbmZpZGVuY2UgSW50ZXJ2YWwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KbG9nbGlrIDwtIGZ1bmN0aW9uKHRoZXRhKXsNCiAgbiooMipsb2codGhldGEpIC0gbG9nKDErdGhldGEpKSArIHN1bShsb2coMSt4KSkgLSB0aGV0YSpzdW14DQp9DQoNCmxsX21heCA8LSBsb2dsaWsodGhldGFfaGF0KQ0KDQojIENoaS1zcXVhcmUgY3JpdGljYWwgdmFsdWUNCmNyaXQgPC0gcWNoaXNxKDAuOTUsIGRmPTEpDQoNCiMgRnVuY3Rpb24gZm9yIExpa2VsaWhvb2QgUmF0aW8gDQpMUl9mdW4gPC0gZnVuY3Rpb24odGhldGEpew0KICAyKihsbF9tYXggLSBsb2dsaWsodGhldGEpKSAtIGNyaXQNCn0NCg0KIyBMb3dlciBib3VuZA0KbG93ZXIgPC0gdW5pcm9vdChMUl9mdW4sIGMoMWUtNiwgdGhldGFfaGF0KSkkcm9vdA0KDQojIFVwcGVyIGJvdW5kDQp1cHBlciA8LSB1bmlyb290KExSX2Z1biwgYyh0aGV0YV9oYXQsIDEpKSRyb290DQoNCkNJX0xSIDwtIGMobG93ZXIsIHVwcGVyKQ0KDQpDSV9MUg0KYGBgDQoNCmMpIEFzc3VtaW5nIHRoZSB0d28gY29uZmlkZW5jZSBpbnRlcnZhbHMgYWJvdmUgYXJlIHZhbGlkLCBjb21wYXJlIHRoZW0gaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIG1ha2UgYSByZWNvbW1lbmRhdGlvbi4gSnVzdGlmeSB5b3VyIHJlY29tbWVuZGF0aW9uLg0KDQoNCioqQ29tcGFyaW5nIHRoZSBzaGFwZSwgYWNjdXJhY3ksIHNhbXBsZSBwZXJmb3JtYW5jZSAoc3BlY2lmaWNhbGx5IG9uIHNtYWxsIG9uZXMpLCBhbmQgaW52YXJpYW5jZSBvZiBhc3ltcHRvdGljIGNvbmZpZGVuY2UgaW50ZXJ2YWwgYW5kIGxpa2VsaWhvb2QgcmF0aW8gY29uZmlkZW5jZSBpbnRlcnZhbCB5b3UgY2FuIGZpbmQgdGhhdCBhc3ltcHRvbWF0aWMgY29uZmlkZW5jZSBpbnRlcnZhbCBoYXMgYSBtb3JlIHN5bW1ldHJpYyBzaGFwZSwgYXBwcm94aW1hdGUgYWNjdXJhY3ksIHBvb3IgcGVyZm9ybWFuY2UgaW4gc21hbGwgc2FtcGxlIHNpemVzLCBhbmQgbm8gaW52YXJpYW5jZS4gTGlrZWxpaG9vZCByYXRpbyBjb25maWRlbmNlIGludGVydmFsIGlzIGFzeW1tZXRyaWMsIG1vcmUgYWNjdXJhdGUsIHBlcmZvcm1zIHdlbGwgaW4gc21hbGwgc2FtcGxlIHNpemVzLCBhbmQgaGFzIGludmFyaWFuY2UuKioNCg0KDQoqKlVzZSB0aGUgbGlrZWxpaG9vZCByYXRpbyBjb25maWRlbmNlIGludGVydmFsIGFzIGl0IGlzIG1vcmUgcmVsaWFibGUgYW5kIGJldHRlciByZWZsZWN0cyB0aGUgdHJ1ZSBzaGFwZSBvZiB0aGUgZGlzdHJpYnV0aW9uLioqDQoNCg0KDQoNCg0KDQoNCg==