This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

plot(cars)
##  The hmohiv data-set is drawn from a study of HIV positive patients. 
#The study examined whether there was a difference in survival times of HIV 
#positive patients between those who had used intravenous drugs and those 
#who had not. This data-set has been taken from 

## Quesion: Is there a difference in survival times of HIV positive patients between 
#those who had used intravenous drugs and those who had not?


## Read data
hmohiv<-read.table("https://stats.idre.ucla.edu/stat/r/examples/asa/hmohiv.csv", sep=",", header = TRUE)
attach(hmohiv)
hmohiv
###  Read and view data
##  To check to see what object (format) that you have created
class(hmohiv)
##  To confirm the data that is contained within hmohiv
hmohiv 
##  In order to access variables 
hmohiv$ID 
hmohiv$time 
##  To View patient ID and age    
hmohiv[,c(1,3)]

###  Calculate survival time  
##  1) Create a new column
hmohiv["TIME_CHECK"]<-NA 

##  2) Calculate the difference, in days between end date and start date 
hmohiv$TIME_CHECK<-as.numeric(as.Date(hmohiv[,7], "%m/%d/%Y")-as.Date(hmohiv[,6], "%m/%d/%Y")) 

##  3) Check on output
hmohiv$TIME_CHECK 

##  4) Aggregate from days to months  
hmohiv$TIME_CHECK<-round(hmohiv$TIME_CHECK/30.5) 

##  5) Double-check your answer against the original time in the table
hmohiv[,c(2,8)] 
###  Survival anaysis
##  Load the survival package: 
library(survival) 

###  Create a Survival Object 
##  The initial step is to create a survival object
s_obj<-Surv(time, censor) 

##  Look at it in the context of time/censoring. Create a new column and copy the results of survival object into it 
hmohiv["s_obj"]<-NA 
hmohiv$s_obj<-Surv(time, censor) 

##  Compare it to the time and censor columns 
hmohiv[,c(2,5,9)] 
##  In the survival object, patients with censored times are represented by 4+, 1+ etc. 
##  Patients who experienced an event have unaltered times, eg 7, 9 etc. 
with(hmohiv, Surv(time, censor)) 
## Descriptive Statistics
survfit(Surv(time, censor)~ 1) 
summary(survfit(Surv(time, censor)~1))

# 100 people in the HIV dataset
# 80 people are uncensored (followed for the entire time, until occurrence of event)
# Among those 80 people, there was a median survival time of 7 months
# The 95% confidence interval for the median survival time for the 80 uncensored individuals is (5, 10)

# n.risk: the number of people at risk
# n.event: the number of events at that time point
# survival: the proportion of individuals who survived up until that point
## Nonparametric plots
surv.aml <- survfit(Surv(time,censor)~1)
plot(surv.aml, main = "Plot of Survival Curve for HIV Patients",
     xlab = "Length of Survival", ylab = "Proportion of Individuals who have Survived")

# Survival curve is also known a Kaplan-Meier plot
# The proportion of individuals who have survived up until that particular time as a solid black line
# 95% confidence interval as the dashed lines
## Going back to original questions
print(survfit(Surv(time,censor)~drug))

# Is there a difference in survival times of HIV positive patients between 
# those who had used intravenous drugs and those who had not?
# The description of data is broken into drug (=0) and drug (=1)

# 49 people on drug 
# 38 people died

plot(survfit(Surv(time,censor)~drug), main = "Plot of Survival Curves by Drug", xlab = "Length of Survival",ylab="Proportion of Individuals who have Survived",col=c("blue","red"))

legend("topright", legend=c("Drug=0", "Drug=1"),fill=c("blue","red"),bty="n")

# Is there a difference in survival times of HIV positive patients between those 
# who had used intravenous drugs and those who had not?
# Log rank statistics
# where ∑▒𝑂_𝑗𝑡  represents the sum of the observed number of events in the jth group over t
# ime and ∑▒𝐸_𝑗𝑡  represents the sum of the expected number of events in the jth group over time
## Statistic 
survdiff(Surv(time,censor)~drug)

# We see that when testing the null hypothesis that there is a significant difference in the survival 
# function for those who were on drug versus those who were not on drug. We reject the null hypothesis 
# Chisq = 11.9 with a p-value <.05.
## Cox proportional hazard model
# Univariate
coxph(Surv(time,censor)~factor(drug))

# This is therefore a linear model for the log-hazard or a multiplicative model for the hazard itself


# We see that when using the Cox regression to perform the test, the results are very similar to the 
# log rank test (Chisq = 11.9 with a p-value = 0.000575)
# The Cox regression estimates the hazard ratio of dying when comparing “Drug” with “No drugs”
# People have significantly better survival without drug (p-value = 0.000659)
# “No drug” is a reference level. Using drug has 2.295 times the hazard of dying in comparison to “Drug”


# Multivariate
coxph(Surv(time,censor)~factor(drug) + age)

# We consider additional risk factors. Here we consider “age”.


# After adjusting for age, peoples still have significantly better survival without drug (p-value < .05)
# The p-value for age <.05, with a hazard ratio HR = exp(coef)=1.102, indicating a strong relationship 
# between age and increased risk of death. Holding the other covariates constant, a higher value of age 
# is associated with a poor survival

detach(hmohiv)

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.

LS0tDQp0aXRsZTogIlN1cnZpdmFsIG1vZGVsIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gDQoNClRyeSBleGVjdXRpbmcgdGhpcyBjaHVuayBieSBjbGlja2luZyB0aGUgKlJ1biogYnV0dG9uIHdpdGhpbiB0aGUgY2h1bmsgb3IgYnkgcGxhY2luZyB5b3VyIGN1cnNvciBpbnNpZGUgaXQgYW5kIHByZXNzaW5nICpDdHJsK1NoaWZ0K0VudGVyKi4gDQoNCmBgYHtyfQ0KcGxvdChjYXJzKQ0KYGBgDQoNCg0KYGBge3J9DQojIyAgVGhlIGhtb2hpdiBkYXRhLXNldCBpcyBkcmF3biBmcm9tIGEgc3R1ZHkgb2YgSElWIHBvc2l0aXZlIHBhdGllbnRzLiANCiNUaGUgc3R1ZHkgZXhhbWluZWQgd2hldGhlciB0aGVyZSB3YXMgYSBkaWZmZXJlbmNlIGluIHN1cnZpdmFsIHRpbWVzIG9mIEhJViANCiNwb3NpdGl2ZSBwYXRpZW50cyBiZXR3ZWVuIHRob3NlIHdobyBoYWQgdXNlZCBpbnRyYXZlbm91cyBkcnVncyBhbmQgdGhvc2UgDQojd2hvIGhhZCBub3QuIFRoaXMgZGF0YS1zZXQgaGFzIGJlZW4gdGFrZW4gZnJvbSANCg0KIyMgUXVlc2lvbjogSXMgdGhlcmUgYSBkaWZmZXJlbmNlIGluIHN1cnZpdmFsIHRpbWVzIG9mIEhJViBwb3NpdGl2ZSBwYXRpZW50cyBiZXR3ZWVuIA0KI3Rob3NlIHdobyBoYWQgdXNlZCBpbnRyYXZlbm91cyBkcnVncyBhbmQgdGhvc2Ugd2hvIGhhZCBub3Q/DQoNCg0KIyMgUmVhZCBkYXRhDQpobW9oaXY8LXJlYWQudGFibGUoImh0dHBzOi8vc3RhdHMuaWRyZS51Y2xhLmVkdS9zdGF0L3IvZXhhbXBsZXMvYXNhL2htb2hpdi5jc3YiLCBzZXA9IiwiLCBoZWFkZXIgPSBUUlVFKQ0KYXR0YWNoKGhtb2hpdikNCmhtb2hpdg0KYGBgDQoNCmBgYHtyfQ0KIyMjICBSZWFkIGFuZCB2aWV3IGRhdGENCiMjICBUbyBjaGVjayB0byBzZWUgd2hhdCBvYmplY3QgKGZvcm1hdCkgdGhhdCB5b3UgaGF2ZSBjcmVhdGVkDQpjbGFzcyhobW9oaXYpDQpgYGANCg0KYGBge3J9DQojIyAgVG8gY29uZmlybSB0aGUgZGF0YSB0aGF0IGlzIGNvbnRhaW5lZCB3aXRoaW4gaG1vaGl2DQpobW9oaXYgDQpgYGANCg0KYGBge3J9DQojIyAgSW4gb3JkZXIgdG8gYWNjZXNzIHZhcmlhYmxlcyANCmhtb2hpdiRJRCANCmhtb2hpdiR0aW1lIA0KYGBgDQoNCmBgYHtyfQ0KIyMgIFRvIFZpZXcgcGF0aWVudCBJRCBhbmQgYWdlICAgIA0KaG1vaGl2WyxjKDEsMyldDQpgYGANCg0KYGBge3J9DQoNCiMjIyAgQ2FsY3VsYXRlIHN1cnZpdmFsIHRpbWUgIA0KIyMgIDEpIENyZWF0ZSBhIG5ldyBjb2x1bW4NCmhtb2hpdlsiVElNRV9DSEVDSyJdPC1OQSANCg0KIyMgIDIpIENhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSwgaW4gZGF5cyBiZXR3ZWVuIGVuZCBkYXRlIGFuZCBzdGFydCBkYXRlIA0KaG1vaGl2JFRJTUVfQ0hFQ0s8LWFzLm51bWVyaWMoYXMuRGF0ZShobW9oaXZbLDddLCAiJW0vJWQvJVkiKS1hcy5EYXRlKGhtb2hpdlssNl0sICIlbS8lZC8lWSIpKSANCg0KIyMgIDMpIENoZWNrIG9uIG91dHB1dA0KaG1vaGl2JFRJTUVfQ0hFQ0sgDQoNCiMjICA0KSBBZ2dyZWdhdGUgZnJvbSBkYXlzIHRvIG1vbnRocyAgDQpobW9oaXYkVElNRV9DSEVDSzwtcm91bmQoaG1vaGl2JFRJTUVfQ0hFQ0svMzAuNSkgDQoNCiMjICA1KSBEb3VibGUtY2hlY2sgeW91ciBhbnN3ZXIgYWdhaW5zdCB0aGUgb3JpZ2luYWwgdGltZSBpbiB0aGUgdGFibGUNCmhtb2hpdlssYygyLDgpXSANCmBgYA0KDQpgYGB7cn0NCiMjIyAgU3Vydml2YWwgYW5heXNpcw0KIyMgIExvYWQgdGhlIHN1cnZpdmFsIHBhY2thZ2U6IA0KbGlicmFyeShzdXJ2aXZhbCkgDQoNCiMjIyAgQ3JlYXRlIGEgU3Vydml2YWwgT2JqZWN0IA0KIyMgIFRoZSBpbml0aWFsIHN0ZXAgaXMgdG8gY3JlYXRlIGEgc3Vydml2YWwgb2JqZWN0DQpzX29iajwtU3Vydih0aW1lLCBjZW5zb3IpIA0KDQojIyAgTG9vayBhdCBpdCBpbiB0aGUgY29udGV4dCBvZiB0aW1lL2NlbnNvcmluZy4gQ3JlYXRlIGEgbmV3IGNvbHVtbiBhbmQgY29weSB0aGUgcmVzdWx0cyBvZiBzdXJ2aXZhbCBvYmplY3QgaW50byBpdCANCmhtb2hpdlsic19vYmoiXTwtTkEgDQpobW9oaXYkc19vYmo8LVN1cnYodGltZSwgY2Vuc29yKSANCg0KIyMgIENvbXBhcmUgaXQgdG8gdGhlIHRpbWUgYW5kIGNlbnNvciBjb2x1bW5zIA0KaG1vaGl2WyxjKDIsNSw5KV0gDQpgYGANCg0KYGBge3J9DQojIyAgSW4gdGhlIHN1cnZpdmFsIG9iamVjdCwgcGF0aWVudHMgd2l0aCBjZW5zb3JlZCB0aW1lcyBhcmUgcmVwcmVzZW50ZWQgYnkgNCssIDErIGV0Yy4gDQojIyAgUGF0aWVudHMgd2hvIGV4cGVyaWVuY2VkIGFuIGV2ZW50IGhhdmUgdW5hbHRlcmVkIHRpbWVzLCBlZyA3LCA5IGV0Yy4gDQp3aXRoKGhtb2hpdiwgU3Vydih0aW1lLCBjZW5zb3IpKSANCmBgYA0KDQpgYGB7cn0NCiMjIERlc2NyaXB0aXZlIFN0YXRpc3RpY3MNCnN1cnZmaXQoU3Vydih0aW1lLCBjZW5zb3IpfiAxKSANCnN1bW1hcnkoc3VydmZpdChTdXJ2KHRpbWUsIGNlbnNvcil+MSkpDQoNCiMgMTAwIHBlb3BsZSBpbiB0aGUgSElWIGRhdGFzZXQNCiMgODAgcGVvcGxlIGFyZSB1bmNlbnNvcmVkIChmb2xsb3dlZCBmb3IgdGhlIGVudGlyZSB0aW1lLCB1bnRpbCBvY2N1cnJlbmNlIG9mIGV2ZW50KQ0KIyBBbW9uZyB0aG9zZSA4MCBwZW9wbGUsIHRoZXJlIHdhcyBhIG1lZGlhbiBzdXJ2aXZhbCB0aW1lIG9mIDcgbW9udGhzDQojIFRoZSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBmb3IgdGhlIG1lZGlhbiBzdXJ2aXZhbCB0aW1lIGZvciB0aGUgODAgdW5jZW5zb3JlZCBpbmRpdmlkdWFscyBpcyAoNSwgMTApDQoNCiMgbi5yaXNrOiB0aGUgbnVtYmVyIG9mIHBlb3BsZSBhdCByaXNrDQojIG4uZXZlbnQ6IHRoZSBudW1iZXIgb2YgZXZlbnRzIGF0IHRoYXQgdGltZSBwb2ludA0KIyBzdXJ2aXZhbDogdGhlIHByb3BvcnRpb24gb2YgaW5kaXZpZHVhbHMgd2hvIHN1cnZpdmVkIHVwIHVudGlsIHRoYXQgcG9pbnQNCg0KYGBgDQoNCmBgYHtyfQ0KIyMgTm9ucGFyYW1ldHJpYyBwbG90cw0Kc3Vydi5hbWwgPC0gc3VydmZpdChTdXJ2KHRpbWUsY2Vuc29yKX4xKQ0KcGxvdChzdXJ2LmFtbCwgbWFpbiA9ICJQbG90IG9mIFN1cnZpdmFsIEN1cnZlIGZvciBISVYgUGF0aWVudHMiLA0KICAgICB4bGFiID0gIkxlbmd0aCBvZiBTdXJ2aXZhbCIsIHlsYWIgPSAiUHJvcG9ydGlvbiBvZiBJbmRpdmlkdWFscyB3aG8gaGF2ZSBTdXJ2aXZlZCIpDQoNCiMgU3Vydml2YWwgY3VydmUgaXMgYWxzbyBrbm93biBhIEthcGxhbi1NZWllciBwbG90DQojIFRoZSBwcm9wb3J0aW9uIG9mIGluZGl2aWR1YWxzIHdobyBoYXZlIHN1cnZpdmVkIHVwIHVudGlsIHRoYXQgcGFydGljdWxhciB0aW1lIGFzIGEgc29saWQgYmxhY2sgbGluZQ0KIyA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbCBhcyB0aGUgZGFzaGVkIGxpbmVzDQoNCmBgYA0KDQpgYGB7cn0NCiMjIEdvaW5nIGJhY2sgdG8gb3JpZ2luYWwgcXVlc3Rpb25zDQpwcmludChzdXJ2Zml0KFN1cnYodGltZSxjZW5zb3IpfmRydWcpKQ0KDQojIElzIHRoZXJlIGEgZGlmZmVyZW5jZSBpbiBzdXJ2aXZhbCB0aW1lcyBvZiBISVYgcG9zaXRpdmUgcGF0aWVudHMgYmV0d2VlbiANCiMgdGhvc2Ugd2hvIGhhZCB1c2VkIGludHJhdmVub3VzIGRydWdzIGFuZCB0aG9zZSB3aG8gaGFkIG5vdD8NCiMgVGhlIGRlc2NyaXB0aW9uIG9mIGRhdGEgaXMgYnJva2VuIGludG8gZHJ1ZyAoPTApIGFuZCBkcnVnICg9MSkNCg0KIyA0OSBwZW9wbGUgb24gZHJ1ZyANCiMgMzggcGVvcGxlIGRpZWQNCg0KcGxvdChzdXJ2Zml0KFN1cnYodGltZSxjZW5zb3IpfmRydWcpLCBtYWluID0gIlBsb3Qgb2YgU3Vydml2YWwgQ3VydmVzIGJ5IERydWciLCB4bGFiID0gIkxlbmd0aCBvZiBTdXJ2aXZhbCIseWxhYj0iUHJvcG9ydGlvbiBvZiBJbmRpdmlkdWFscyB3aG8gaGF2ZSBTdXJ2aXZlZCIsY29sPWMoImJsdWUiLCJyZWQiKSkNCg0KbGVnZW5kKCJ0b3ByaWdodCIsIGxlZ2VuZD1jKCJEcnVnPTAiLCAiRHJ1Zz0xIiksZmlsbD1jKCJibHVlIiwicmVkIiksYnR5PSJuIikNCg0KIyBJcyB0aGVyZSBhIGRpZmZlcmVuY2UgaW4gc3Vydml2YWwgdGltZXMgb2YgSElWIHBvc2l0aXZlIHBhdGllbnRzIGJldHdlZW4gdGhvc2UgDQojIHdobyBoYWQgdXNlZCBpbnRyYXZlbm91cyBkcnVncyBhbmQgdGhvc2Ugd2hvIGhhZCBub3Q/DQojIExvZyByYW5rIHN0YXRpc3RpY3MNCiMgd2hlcmUg4oiR4paS8J2Rgl/wnZGX8J2RoSAgcmVwcmVzZW50cyB0aGUgc3VtIG9mIHRoZSBvYnNlcnZlZCBudW1iZXIgb2YgZXZlbnRzIGluIHRoZSBqdGggZ3JvdXAgb3ZlciB0DQojIGltZSBhbmQg4oiR4paS8J2QuF/wnZGX8J2RoSAgcmVwcmVzZW50cyB0aGUgc3VtIG9mIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgZXZlbnRzIGluIHRoZSBqdGggZ3JvdXAgb3ZlciB0aW1lDQoNCg0KYGBgDQoNCmBgYHtyfQ0KIyMgU3RhdGlzdGljIA0Kc3VydmRpZmYoU3Vydih0aW1lLGNlbnNvcil+ZHJ1ZykNCg0KIyBXZSBzZWUgdGhhdCB3aGVuIHRlc3RpbmcgdGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiB0aGUgc3Vydml2YWwgDQojIGZ1bmN0aW9uIGZvciB0aG9zZSB3aG8gd2VyZSBvbiBkcnVnIHZlcnN1cyB0aG9zZSB3aG8gd2VyZSBub3Qgb24gZHJ1Zy4gV2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgDQojIENoaXNxID0gMTEuOSB3aXRoIGEgcC12YWx1ZSA8LjA1Lg0KDQpgYGANCg0KYGBge3J9DQojIyBDb3ggcHJvcG9ydGlvbmFsIGhhemFyZCBtb2RlbA0KIyBVbml2YXJpYXRlDQpjb3hwaChTdXJ2KHRpbWUsY2Vuc29yKX5mYWN0b3IoZHJ1ZykpDQoNCiMgVGhpcyBpcyB0aGVyZWZvcmUgYSBsaW5lYXIgbW9kZWwgZm9yIHRoZSBsb2ctaGF6YXJkIG9yIGEgbXVsdGlwbGljYXRpdmUgbW9kZWwgZm9yIHRoZSBoYXphcmQgaXRzZWxmDQoNCg0KIyBXZSBzZWUgdGhhdCB3aGVuIHVzaW5nIHRoZSBDb3ggcmVncmVzc2lvbiB0byBwZXJmb3JtIHRoZSB0ZXN0LCB0aGUgcmVzdWx0cyBhcmUgdmVyeSBzaW1pbGFyIHRvIHRoZSANCiMgbG9nIHJhbmsgdGVzdCAoQ2hpc3EgPSAxMS45IHdpdGggYSBwLXZhbHVlID0gMC4wMDA1NzUpDQojIFRoZSBDb3ggcmVncmVzc2lvbiBlc3RpbWF0ZXMgdGhlIGhhemFyZCByYXRpbyBvZiBkeWluZyB3aGVuIGNvbXBhcmluZyDigJxEcnVn4oCdIHdpdGgg4oCcTm8gZHJ1Z3PigJ0NCiMgUGVvcGxlIGhhdmUgc2lnbmlmaWNhbnRseSBiZXR0ZXIgc3Vydml2YWwgd2l0aG91dCBkcnVnIChwLXZhbHVlID0gMC4wMDA2NTkpDQojIOKAnE5vIGRydWfigJ0gaXMgYSByZWZlcmVuY2UgbGV2ZWwuIFVzaW5nIGRydWcgaGFzIDIuMjk1IHRpbWVzIHRoZSBoYXphcmQgb2YgZHlpbmcgaW4gY29tcGFyaXNvbiB0byDigJxEcnVn4oCdDQoNCg0KIyBNdWx0aXZhcmlhdGUNCmNveHBoKFN1cnYodGltZSxjZW5zb3IpfmZhY3RvcihkcnVnKSArIGFnZSkNCg0KIyBXZSBjb25zaWRlciBhZGRpdGlvbmFsIHJpc2sgZmFjdG9ycy4gSGVyZSB3ZSBjb25zaWRlciDigJxhZ2XigJ0uDQoNCg0KIyBBZnRlciBhZGp1c3RpbmcgZm9yIGFnZSwgcGVvcGxlcyBzdGlsbCBoYXZlIHNpZ25pZmljYW50bHkgYmV0dGVyIHN1cnZpdmFsIHdpdGhvdXQgZHJ1ZyAocC12YWx1ZSA8IC4wNSkNCiMgVGhlIHAtdmFsdWUgZm9yIGFnZSA8LjA1LCB3aXRoIGEgaGF6YXJkIHJhdGlvIEhSID0gZXhwKGNvZWYpPTEuMTAyLCBpbmRpY2F0aW5nIGEgc3Ryb25nIHJlbGF0aW9uc2hpcCANCiMgYmV0d2VlbiBhZ2UgYW5kIGluY3JlYXNlZCByaXNrIG9mIGRlYXRoLiBIb2xkaW5nIHRoZSBvdGhlciBjb3ZhcmlhdGVzIGNvbnN0YW50LCBhIGhpZ2hlciB2YWx1ZSBvZiBhZ2UgDQojIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBvb3Igc3Vydml2YWwNCg0KZGV0YWNoKGhtb2hpdikNCg0KYGBgDQoNCkFkZCBhIG5ldyBjaHVuayBieSBjbGlja2luZyB0aGUgKkluc2VydCBDaHVuayogYnV0dG9uIG9uIHRoZSB0b29sYmFyIG9yIGJ5IHByZXNzaW5nICpDdHJsK0FsdCtJKi4NCg0KV2hlbiB5b3Ugc2F2ZSB0aGUgbm90ZWJvb2ssIGFuIEhUTUwgZmlsZSBjb250YWluaW5nIHRoZSBjb2RlIGFuZCBvdXRwdXQgd2lsbCBiZSBzYXZlZCBhbG9uZ3NpZGUgaXQgKGNsaWNrIHRoZSAqUHJldmlldyogYnV0dG9uIG9yIHByZXNzICpDdHJsK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuDQoNClRoZSBwcmV2aWV3IHNob3dzIHlvdSBhIHJlbmRlcmVkIEhUTUwgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlIGVkaXRvci4gQ29uc2VxdWVudGx5LCB1bmxpa2UgKktuaXQqLCAqUHJldmlldyogZG9lcyBub3QgcnVuIGFueSBSIGNvZGUgY2h1bmtzLiBJbnN0ZWFkLCB0aGUgb3V0cHV0IG9mIHRoZSBjaHVuayB3aGVuIGl0IHdhcyBsYXN0IHJ1biBpbiB0aGUgZWRpdG9yIGlzIGRpc3BsYXllZC4NCg==