library(tidyverse)
library(openintro)
library(car)
pad<-read.csv("pad-CVD-short2.csv")
head(pad)
## X subject birthdate deathdate age_at_death species
## 1 1 Cf-Rh-30 1971-03-03 1991-03-18 20.04 Rhesus Indian-derived macaque
## 2 2 Cf-Rh-34 1971-05-25 2004-02-25 32.75 Rhesus Indian-derived macaque
## 3 3 Cf-Rh-41 1973-04-07 1996-06-28 23.22 Rhesus Indian-derived macaque
## 4 4 Il-Rh-1 1980-06-01 NA Rhesus Indian-derived macaque
## 5 5 Il-Rh-2 1983-08-04 NA Rhesus Indian-derived macaque
## 6 6 Il-Rh-3 1982-06-01 NA Rhesus Indian-derived macaque
## sex social_environment housing diet measurements age BodyWeight Creatinine
## 1 Female Social Outside Chow 1 18 NA 0.9
## 2 Male Mixed Inside Chow 1 24 NA 1.1
## 3 Female Mixed Inside Chow 1 20 NA 1.1
## 4 Female Social Inside Chow 2 23 5.2 0.5
## 5 Female Social Inside Chow 5 20 9.5 0.9
## 6 Female Individual Inside Chow 2 21 NA 0.6
## Glucose LacticDehydrogenase
## 1 52 NA
## 2 72 NA
## 3 57 NA
## 4 44 NA
## 5 85 NA
## 6 65 NA
Introducing the Test-Specific Biological Markers and the Rhesus
Indian-Derived Macaque
Are there associations between sex and age and biological markers
associated with Cardiovascular Disease (CVD)? Following a decrease of
9.8 percent from 2010-2019, the United States saw heart disease related
deaths in humans increase by 4.1 percent in 2020. Variables including
age, sex, and ethnicity groups were all included in the evaluation, and
overall, the increase in 2020 is statistically significant. There were
approximately five years of progress lost countrywide, with the
percentage being even higher for minority groups (AHA, 2022).
For the purposes of this project, our variables of focus are sex and
age, and their effect on heart disease or risk thereof. According to
CME: Your SA Journal of CPD, heart disease accounts for a third of all
female deaths worldwide, although the common perception is that it
occurs primarily in males. According to the journal, both men and women
are at equal risk of developing heart disease by age 60 (Bateman, 2012).
However, risk is evaluated on a case by case basis, pending
predispositions to higher or lower percentages of biomarkers associated
with heart disease and possible sex or age related levels of each
biomarker.
Using a random sample from the Primate Aging Database, we will be
evaluating levels of these biomarkers based on sex and age in Rhesus
Indian Derived Macaques. It is important to acknowledge that the genome
of the Rhesus species has been decoded by scientists and has revealed 93
percent similarity between chimpanzees and humans. If there are any
statistically significant findings from our hypothesis testing, there is
a reasonable possibility that they would be applicable to humans
(Arbanas, 2007). The biomarkers we will be researching in the Rhesus
Indian-Derived Macaque are creatinine, lactic dehydrogenase, and glucose
as they are significant biomarkers of heart disease development in
humans, and therefore possible biomarkers in the study population.
The first biomarker we will be testing is creatinine. Creatinine is a
chemical waste product of Creatine. Creatine is a chemical made by the
body and is used to supply energy mainly to the muscles. An increase in
serum creatinine, also termed worsening renal function, commonly occurs
in patients with heart failure, especially during acute heart failure
episodes (Damman, 2020). Though increased levels of creatinine is not a
direct cause of heart failure, there appears to be a correlation.
The second biomarker we will be testing is Lactic Dehydrogenase (LD).
LD is an enzyme that plays an integral role in the anaerobic metabolic
pathway, and is often used to diagnose myocardial infarction, more
commonly known as a heart attack. According to a retrospective,
cross-sectional and observational study based on data collected by the
Health Management Center of the First Affiliated Hospital of Nanjing
Medical University, half of the sample population with high levels of LD
showed a significantly increased risk of CVD based on the Framingham
Risk Prediction Model (Zhu, Wenfang, et. al, 2022).
The third biomarker we will be testing is glucose. The development of
CVD has a myriad of risk factors, however there has been shown to be a
strong link between diabetes and CVD in particular (Poznyak, 2022).
Diabetes is a disorder in which the body does not produce enough insulin
and inadvertently elevates blood glucose levels. High blood glucose
levels can have detrimental effects such as damaging blood vessels and
nerves in turn leading to higher risk of developing CVD. The PAD
database has a significant amount of data on glucose level averages in
the species we are measuring for both sexes.
We will be running a regression model for each of these three
biomarkers in Rhesus Indian-Derived Macaques to answer three key
questions regarding the species: Are sex and age reliable predictors of
Creatinine levels? Are sex and age reliable predictors of Lactic
Dehydrogenase levels? Are sex and age reliable predictors of Glucose
levels?
Presenting Data Visualization and Regression Models
Creatinine, Fadiga
padfem<-filter(pad,sex=="Female")
padmale<-filter(pad,sex=="Male")
sum(!is.na(padmale$Creatinine))
## [1] 176
sum(!is.na(padfem$Creatinine))
## [1] 318
summary(padfem$Creatinine,na.rm=TRUE)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.3750 0.7000 0.8000 0.8268 0.9000 2.4000 75
summary(padmale$Creatinine,na.rm=TRUE)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.400 0.900 1.000 1.001 1.116 1.600 66
sd(padfem$Creatinine,na.rm=TRUE)
## [1] 0.2181239
var(padfem$Creatinine,na.rm=TRUE)
## [1] 0.04757805
sd(padmale$Creatinine,na.rm=TRUE)
## [1] 0.2036863
var(padmale$Creatinine,na.rm=TRUE)
## [1] 0.0414881
Are sex and age reliable predictors of creatinine levels? The null
hypothesis that was made with Creatinine in mind, is sex and age are not
reliable predictors in Creatinine levels in Rhesus Indian-Derived
Macaques.The alternate hypothesis is sex and age are reliable predictors
of Creatinine levels in Rhesus Indian-Derived Macaques.The sample size
for males with recorded Creatinine levels is 176 compared to the overall
data size of 242.Their mean Creatinine levels were 1.00 mg/dL and also
had a median of 1.00 mg/dL. The measure of dispersion was a standard
deviation of 0.20 mg/dL and a variance of 0.04.The female population
sample size was 318 compared to the overall data size of 393. Their mean
Creatinine levels were 0.83 mg/dL and the median was 0.80 mg/dL.The
measure of dispersion was a standard deviation of 0.22 mg/dL and a
variance of 0.05.
Assumptions
Observations
The first assumption that is reviewed is Independence of
observations. The variable age and sex are independent of each other,
and as a result meets the assumption.
The second assumption is a linear relationship between x and y. The
data meets that assumption.
ggplot(padfem,aes(x=age,y=Creatinine))+
labs(title="Sex and Age compared to Creatinine levels in females")+
geom_point(col="yellow2",size=3,alpha=0.8)+
geom_smooth(method="lm",lty="dashed")+
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 75 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 75 rows containing missing values (`geom_point()`).

ggplot(padmale,aes(x=age,y=Creatinine))+
labs(title="Sex and Age compared to Creatinine levels in males")+
geom_point(color="red3",size=3,alpha=0.8)+
geom_smooth(method="lm",lty="dashed")+
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 66 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 66 rows containing missing values (`geom_point()`).

ggplot(pad,aes(x=age,y=Creatinine,col=sex))+
labs(title="Sex and Age compared to Creatinine levels")+
geom_point(size=3,alpha=0.8)+
geom_smooth(method="lm",lty="dashed")+
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 141 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 141 rows containing missing values (`geom_point()`).

reg1<-lm(Creatinine~sex+age,data=pad)
Normality of Residuals
The assumption is met for normality of residuals.

## [1] 563 601
Homoscedasticity
It violates the assumption.

Test
##
## Call:
## lm(formula = Creatinine ~ sex + age, data = pad)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.59099 -0.12725 -0.02351 0.09781 1.57081
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.8357564 0.0215027 38.867 <2e-16 ***
## sexMale 0.1749396 0.0201525 8.681 <2e-16 ***
## age -0.0005973 0.0011949 -0.500 0.617
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2133 on 491 degrees of freedom
## (141 observations deleted due to missingness)
## Multiple R-squared: 0.1333, Adjusted R-squared: 0.1298
## F-statistic: 37.77 on 2 and 491 DF, p-value: 5.513e-16
## (Intercept) sexMale age
## 0.8357563636 0.1749395817 -0.0005972506
Sex has a p value of <0.05. Age has a p value of >0.05. Given
the confidence level of 0.05 I reject the original null hypothesis as it
stated both age and sex as a reliable predictor of creatinine levels
when only sex is proven to be correlated with Creatinine levels. The
assumption for homoscedasticity was not met however. Holding all else
equal,Male Rhesus Indian-Derived Macaques have creatinine levels that
are 0.18 mg/dL higher than female Macaques. My testing of Creatinine
levels has the possibility of informing research in risk levels of
cardiovascular disease in humans by comparing the male Macaques levels
of creatinine to the levels of human males. Studies have shown that
these primates can be quite similar to humans, and since a higher level
of creatinine is associated with cardiovascular disease in humans, the
comparisons made in this hypothesis test may prove useful.
Lactic Dehydrogenase, Nowicki
sum(!is.na(padmale$LacticDehydrogenase))
## [1] 133
sum(!is.na(padfem$LacticDehydrogenase))
## [1] 245
summary(padfem$LacticDehydrogenase,na.rm=TRUE)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 136.0 218.0 283.5 333.5 387.0 1081.0 148
summary(padmale$LacticDehydrogenase,na.rm=TRUE)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 114.0 250.0 329.0 378.3 479.0 891.5 109
sd(padfem$LacticDehydrogenase,na.rm=TRUE)
## [1] 167.0755
var(padfem$LacticDehydrogenase,na.rm=TRUE)
## [1] 27914.22
sd(padmale$LacticDehydrogenase,na.rm=TRUE)
## [1] 180.0706
var(padmale$LacticDehydrogenase,na.rm=TRUE)
## [1] 32425.42
Are sex and age reliable predictors of Lactic Dehydrogenase levels in
Rhesus Indian-Derived Macaques? The null hypothesis for this regression
model asserts that there is no significant association between sex and
age of the Rhesus Indian-Derived Macaque and levels of lactic
dehydrogenase. By contrast, the alternate hypothesis states that there
is a significant association between sex and age of the Rhesus
Indian-Derived Macaque and levels of lactic dehydrogenase. In our random
sample, there are 133 males with recorded levels of Lactic
Dehydrogenase. They have a mean of 378.3 international units per liter
(IU/L) and a median of 329 IU/L. The measures of dispersion provide a
standard deviation of 180.07 IU/L and a variance of 32425.42. There are
245 females with recorded levels of Lactic Dehydrogenase in our random
sample with a mean of 333.5 IU/L and a median of 283.5 IU/L. The
measures of dispersion provide a standard deviation of 167.08 IU/L and a
variance of 27914.22.
Assumptions
Observations
To perform linear regression, several assumptions had to be met.
First, the variables had to be independent of each other. The variables
age and sex are independent of each other so the data meets this
assumption. Second, there had to be a linear relationship between sex
and age, the independent variables, and LD levels, the dependent
variable. The graphs below demonstrates this relationship.
ggplot(padfem,aes(x=age,y=LacticDehydrogenase))+
labs(title="Sex and Age compared to Lactic Dehydrogenase levels in females")+
geom_point(col="purple",size=3,alpha=0.8)+
geom_smooth(method="lm",lty="dashed")+
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 148 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 148 rows containing missing values (`geom_point()`).

ggplot(padmale,aes(x=age,y=LacticDehydrogenase))+
labs(title="Sex and Age compared to Lactic Dehydrogenase levels in males")+
geom_point(col="magenta",size=3,alpha=0.8)+
geom_smooth(method="lm",lty="dashed")+
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 109 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 109 rows containing missing values (`geom_point()`).

ggplot(pad,aes(x=age,y=LacticDehydrogenase,col=sex))+
labs(title="Sex and Age compared to Lactic Dehydrogenase levels")+
geom_point(size=3,alpha=0.8)+
geom_smooth(method="lm",lty="dashed")+
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 257 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 257 rows containing missing values (`geom_point()`).

reg2<-lm(LacticDehydrogenase~sex+age,data=pad)
Normality of residuals
The third assumption is a normality of residuals. The graph below
demonstrates that the residuals are not normally distributed.

## [1] 420 569
Homoscedasticity
The fitted plot also shows a violation of the fourth assumption of
homoscedasticity. However, testing will still be carried out to assess
any relationship between the dependent and independent variables.

Test
##
## Call:
## lm(formula = LacticDehydrogenase ~ sex + age, data = pad)
##
## Residuals:
## Min 1Q Median 3Q Max
## -284.14 -118.82 -47.10 80.05 723.13
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 376.259 18.243 20.625 < 2e-16 ***
## sexMale 49.466 18.387 2.690 0.00746 **
## age -3.065 1.050 -2.918 0.00373 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 170.1 on 375 degrees of freedom
## (257 observations deleted due to missingness)
## Multiple R-squared: 0.0372, Adjusted R-squared: 0.03207
## F-statistic: 7.245 on 2 and 375 DF, p-value: 0.0008178
## (Intercept) sexMale age
## 376.259240 49.466064 -3.064789
Both age and sex have a P value of <0.05. Given a confidence
interval of 0.05, the null hypothesis is rejected. Age and sex are
possible reliable predictors of LD levels in Rhesus Indian-Derived
Macaques, however the assumptions were not met for the linear regression
model. The baseline category the test provided was Female. Given the
baseline category and holding all else equal, male Rhesus Indian-Derived
Macaques have LD levels of 49.66 IU/L higher than females. Holding all
else equal, a decrease of 3 years of age is associated with an increase
of 1 IU/L. Since LD is a recorded biomarker of CVD in humans and given
the close DNA similarity of Rhesus Indian-Derived Macaques and humans,
this may be somewhat informative for biomedical researchers comparing
risk levels of Cardiovascular disease in human males and females of
different ages.
Glucose, Sciscent
sum(!is.na(padmale$Glucose))
## [1] 182
sum(!is.na(padfem$Glucose))
## [1] 326
summary(padfem$Glucose, na.rm = TRUE)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 27.00 57.00 67.00 70.69 78.00 271.00 67
summary(padmale$Glucose, na.rm = TRUE)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 27.00 60.00 67.00 70.74 76.88 224.50 60
sd(padfem$Glucose, na.rm = TRUE)
## [1] 23.6434
var(padfem$Glucose, na.rm = TRUE)
## [1] 559.0104
sd(padmale$Glucose, na.rm = TRUE)
## [1] 20.16354
var(padmale$Glucose, na.rm = TRUE)
## [1] 406.5682
Are sex and age reliable predictors of Glucose levels in Rhesus
Indian-Derived Macaques? To test our question, I will be utilizing a
regression model that exemplifies the relationship between sex and age
in regards to glucose levels.The null hypothesis asserts that there is
no significant correlation between sex and age of the Rhesus
Indian-Derived Macaques and levels of glucose. The alternate hypothesis
asserts that there is a significant correlation between sex and age of
the Rhesus Indian-Derived Macaques and levels of glucose. In our random
sample, there are 182 male Rhesus Indian-Derived Macaques with a
recorded mean of 70.74 milligrams per decilitre (mg/dL) and a median of
67.00 mg/dL. The measures of dispersion provide a standard deviation of
20.16354 mg/dL and a variance of 406.5682. On the other hand, there are
326 female Rhesus Indian-Derived Macaques with a recorded mean of 70.69
mg/dL and a median of 67.00 mg/dL. The measures of dispersion provide a
standard deviation of 23. 6434 mg/dL and a variance of 559.0104.
Assumptions
Observations
To perform linear regression, several assumptions must be met. First,
the variables we are testing have to be independent of each other. The
variables age and sex are independent so the data meets this assumption.
Second, there has to be a linear relationship between sex and age, the
independent variables and glucose levels, the dependent variable. The
graph below demonstrates this relationship.
ggplot(padfem, aes(x=age,y=Glucose))+
labs(title="Sex and Age Compared to Glucose Levels in Females")+
geom_point(size=3,alpha=0.8, color = 'lightblue')+
geom_smooth(method="lm",lty="dashed")+
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 67 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 67 rows containing missing values (`geom_point()`).

ggplot(padmale, aes(x=age,y=Glucose))+
labs(title="Sex and Age Compared to Glucose Levels in Males")+
geom_point(size=3,alpha=0.8, color = 'pink')+
geom_smooth(method="lm",lty="dashed")+
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 60 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 60 rows containing missing values (`geom_point()`).

ggplot(pad, aes(x=age,y=Glucose,col=sex))+
labs(title="Sex and Age Compared to Glucose Levels")+
geom_point(size=3,alpha=0.8)+
geom_smooth(method="lm",lty="dashed")+
theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 127 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 127 rows containing missing values (`geom_point()`).

reg3 <- lm(Glucose ~ age + sex, data = pad)
Normality of residuals
The third assumption is normality of residuals. The first graph below
demonstrates that the residuals are somewhat normally distributed as the
points do seem to be pretty close to the best fit line, however they
curve off towards the end signifying that our data does have more
extreme values than expected.

## [1] 541 570
Homoscedasticity
The fourth assumption is homoscedasticity. The second graph
demonstrates a violation of this assumption because as the x-value
increases, the residuals become further apart. However, testing can
still be done to assess any relationship between our dependent and
independent variables.

##
## Call:
## lm(formula = Glucose ~ age + sex, data = pad)
##
## Residuals:
## Min 1Q Median 3Q Max
## -44.010 -12.477 -3.782 6.144 199.549
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 69.61450 2.25037 30.935 <2e-16 ***
## age 0.07345 0.12746 0.576 0.565
## sexMale -0.10510 2.09576 -0.050 0.960
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 22.48 on 505 degrees of freedom
## (127 observations deleted due to missingness)
## Multiple R-squared: 0.000658, Adjusted R-squared: -0.0033
## F-statistic: 0.1662 on 2 and 505 DF, p-value: 0.8469
## (Intercept) age sexMale
## 69.61450058 0.07344584 -0.10510212
Both age and sex have a P value that is >0.05. Given a confidence
interval of 0.05, my regression model fails to reject the null. From
this regression model, age and sex do not seem to be reliable predictors
of glucose levels in Rhesus Indian-Derived Macaques, however, keep in
mind the assumption for homoscedasticity was not met and the normality
of residuals assumptions was only partially met. The baseline category
the test provided and compared to our other variables (age and glucose)
was the categorical value ‘Female’ within the variable sex. Given the
baseline category and holding all else equal, male Rhesus Indian-Derived
Macaques have glucose levels of 0.11 less than female Rhesus
Indian-Derived Macaques. Holding all else equal, an increase in 0.07
years of age is associated with an increase of 1 mg/dL. Glucose
levels/blood sugar levels play a crucial role in identifying CVD in
humans. This is because high blood sugar can damage blood vessels and
nerves leading to serious and life-threatening heart problems. Blood
sugar levels can help us indicate diabetes within patients and in turn
help us prevent CVD from impacting their lives. Given the close DNA
similarity of Rhesus Indian-Derived Macaques and humans, this may be
somewhat informative for biomedical researchers comparing risk levels of
cardiovascular disease in human males and females respectively. However,
within Rhesus Indian Derived Macaques, sex and age do not seem to play a
significant role in glucose levels meaning that we should look elsewhere
and other biomarkers for possible solutions.
Conclusion
In response to climbing heart disease rates in the United States, we
focused our hypothesis testing on the association between sex, age and
biological markers in regards to cardiovascular disease. Forgoing the
assumption of homoscedasticity, hypothesis testing revealed that sex of
the Rhesus Indian-Derived Macaque was a reliable predictor of levels of
Creatinine within the primate, and that age was not. Forgoing
assumptions of normality of residuals and homoscedasticity, it also
showed that age and sex are reliable predictors of levels of Lactic
Dehydrogenase in the Rhesus species. Lastly, forgoing assumptions of
normality of residuals and homoscedasticity, hypothesis testing revealed
that sex and age were not reliable predictors of glucose levels in the
Rhesus species. No regression models in this study included additional
and relevant covariates such as height and weight.
Even though the Rhesus Indian-Derived Macaque and humans share
approximately 93% similarity in DNA (Arbanas, 2007) it is unlikely that
testing these biomarkers against sex and age of humans would result in
any significant findings regarding risk levels of Cardiovascular
Disease.
Works Referenced
“AHA: Heart Disease Death Rates in US Spiked in 2020.” Renal &
Urology News, 18 Nov. 2022, p. NA. Gale Academic OneFile,
link.gale.com/apps/doc/A726995188/AONE?u=bingul&sid=bookmark-AONE&xid=31c52573.
Accessed 1 Apr. 2023.
Arbanas, Caroline. “Rhesus Monkey Genome Reveals DNA Similarities
with Chimps and Humans - the Source - Washington University in
St. Louis.” The Source, 9 Feb. 2021,
source.wustl.edu/2007/04/rhesus-monkey-genome-reveals-dna-similarities-with-chimps-and-humans/.
Bateman, Chris. “SA women at significant risk of developing heart
disease.” CME: Your SA Journal of CPD, vol. 30, no. 8, Aug. 2012,
pp. 301+. Gale Academic OneFile,
link.gale.com/apps/doc/A301872171/AONE?u=bingul&sid=bookmark-AONE&xid=fa88ebcd.
Accessed 1 Apr. 2023.
Cox, Laura A et al. “Nonhuman Primates and Translational
Research-Cardiovascular Disease.” ILAR journal vol. 58,2 (2017):
235-250. doi:10.1093/ilar/ilx025
Mullens, W., Damman, K., Testani, J.M., Martens, P., Mueller, C.,
Lassus, J., Tang, W.H.W., Skouri, H., Verbrugge, F.H., Orso, F., Hill,
L., Ural, D., Lainscak, M., Rossignol, P., Metra, M., Mebazaa, A.,
Seferovic, P., Ruschitzka, F. and Coats, A. (2020), Evaluation of kidney
function throughout the heart failure trajectory – a position statement
from the Heart Failure Association of the European Society of
Cardiology. Eur J Heart Fail, 22: 584-603. https://doi.org/10.1002/ejhf.1697
Poznyak, Anastasia V et al. “Effect of Glucose Levels on
Cardiovascular Risk.” Cells vol. 11,19 3034. 28 Sep. 2022, doi:10.3390/cells11193034
Raubertas, R., Beech, J., Watson, W. et al. Decreased complexity of
glucose dynamics in diabetes in rhesus monkeys. Sci Rep 9, 1438 (2019).
https://doi.org/10.1038/s41598-018-36776-4
“Creatinine Blood Test.” Mount Sinai Health System, https://www.mountsinai.org/health-library/tests/creatinine-blood
test#:~:text=Creatinine%20is%20a%20chemical%20waste,body%20entirely%20by%20the%20kidneys.
Zhu, Wenfang et al. “Serum Level of Lactate Dehydrogenase is
Associated with Cardiovascular Disease Risk as Determined by the
Framingham Risk Score and Arterial Stiffness in a Health-Examined
Population in China.” International journal of general medicine vol. 15
11-17. 4 Jan. 2022, doi:10.2147/IJGM.S337517
LS0tCnRpdGxlOiAiQmlvbWFya2VycyBvZiBDYXJkaW92YXNjdWxhciBEaXNlYXNlIGluIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyIKYXV0aG9yOiAiQW1pbmF0YSBGYWRpZ2EsIEJlY2sgTm93aWNraSwgQW5oIFNjaXNjZW50IgpkYXRlOiAiMiBNYXkgMjAyMyIKb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQKLS0tCgpgYGB7ciBsb2FkLXBhY2thZ2VzLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShvcGVuaW50cm8pCmxpYnJhcnkoY2FyKQpgYGAKCmBgYHtyIGNvZGUtY2h1bmstbGFiZWx9CnBhZDwtcmVhZC5jc3YoInBhZC1DVkQtc2hvcnQyLmNzdiIpCmhlYWQocGFkKQpgYGAKCiMjIEludHJvZHVjaW5nIHRoZSBUZXN0LVNwZWNpZmljIEJpb2xvZ2ljYWwgTWFya2VycyBhbmQgdGhlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlCgpBcmUgdGhlcmUgYXNzb2NpYXRpb25zIGJldHdlZW4gc2V4IGFuZCBhZ2UgYW5kIGJpb2xvZ2ljYWwgbWFya2VycyBhc3NvY2lhdGVkIHdpdGggQ2FyZGlvdmFzY3VsYXIgRGlzZWFzZSAoQ1ZEKT8gRm9sbG93aW5nIGEgZGVjcmVhc2Ugb2YgOS44IHBlcmNlbnQgZnJvbSAyMDEwLTIwMTksIHRoZSBVbml0ZWQgU3RhdGVzIHNhdyBoZWFydCBkaXNlYXNlIHJlbGF0ZWQgZGVhdGhzIGluIGh1bWFucyBpbmNyZWFzZSBieSA0LjEgcGVyY2VudCBpbiAyMDIwLiBWYXJpYWJsZXMgaW5jbHVkaW5nIGFnZSwgc2V4LCBhbmQgZXRobmljaXR5IGdyb3VwcyB3ZXJlIGFsbCBpbmNsdWRlZCBpbiB0aGUgZXZhbHVhdGlvbiwgYW5kIG92ZXJhbGwsIHRoZSBpbmNyZWFzZSBpbiAyMDIwIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQuIFRoZXJlIHdlcmUgYXBwcm94aW1hdGVseSBmaXZlIHllYXJzIG9mIHByb2dyZXNzIGxvc3QgY291bnRyeXdpZGUsIHdpdGggdGhlIHBlcmNlbnRhZ2UgYmVpbmcgZXZlbiBoaWdoZXIgZm9yIG1pbm9yaXR5IGdyb3VwcyAoQUhBLCAyMDIyKS4KCkZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBwcm9qZWN0LCBvdXIgdmFyaWFibGVzIG9mIGZvY3VzIGFyZSBzZXggYW5kIGFnZSwgYW5kIHRoZWlyIGVmZmVjdCBvbiBoZWFydCBkaXNlYXNlIG9yIHJpc2sgdGhlcmVvZi4gQWNjb3JkaW5nIHRvIENNRTogWW91ciBTQSBKb3VybmFsIG9mIENQRCwgaGVhcnQgZGlzZWFzZSBhY2NvdW50cyBmb3IgYSB0aGlyZCBvZiBhbGwgZmVtYWxlIGRlYXRocyB3b3JsZHdpZGUsIGFsdGhvdWdoIHRoZSBjb21tb24gcGVyY2VwdGlvbiBpcyB0aGF0IGl0IG9jY3VycyBwcmltYXJpbHkgaW4gbWFsZXMuIEFjY29yZGluZyB0byB0aGUgam91cm5hbCwgYm90aCBtZW4gYW5kIHdvbWVuIGFyZSBhdCBlcXVhbCByaXNrIG9mIGRldmVsb3BpbmcgaGVhcnQgZGlzZWFzZSBieSBhZ2UgNjAgKEJhdGVtYW4sIDIwMTIpLiBIb3dldmVyLCByaXNrIGlzIGV2YWx1YXRlZCBvbiBhIGNhc2UgYnkgY2FzZSBiYXNpcywgcGVuZGluZyBwcmVkaXNwb3NpdGlvbnMgdG8gaGlnaGVyIG9yIGxvd2VyIHBlcmNlbnRhZ2VzIG9mIGJpb21hcmtlcnMgYXNzb2NpYXRlZCB3aXRoIGhlYXJ0IGRpc2Vhc2UgYW5kIHBvc3NpYmxlIHNleCBvciBhZ2UgcmVsYXRlZCBsZXZlbHMgb2YgZWFjaCBiaW9tYXJrZXIuCgpVc2luZyBhIHJhbmRvbSBzYW1wbGUgZnJvbSB0aGUgUHJpbWF0ZSBBZ2luZyBEYXRhYmFzZSwgd2Ugd2lsbCBiZSBldmFsdWF0aW5nIGxldmVscyBvZiB0aGVzZSBiaW9tYXJrZXJzIGJhc2VkIG9uIHNleCBhbmQgYWdlIGluIFJoZXN1cyBJbmRpYW4gRGVyaXZlZCBNYWNhcXVlcy4gSXQgaXMgaW1wb3J0YW50IHRvIGFja25vd2xlZGdlIHRoYXQgdGhlIGdlbm9tZSBvZiB0aGUgUmhlc3VzIHNwZWNpZXMgaGFzIGJlZW4gZGVjb2RlZCBieSBzY2llbnRpc3RzIGFuZCBoYXMgcmV2ZWFsZWQgOTMgcGVyY2VudCBzaW1pbGFyaXR5IGJldHdlZW4gY2hpbXBhbnplZXMgYW5kIGh1bWFucy4gSWYgdGhlcmUgYXJlIGFueSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGZpbmRpbmdzIGZyb20gb3VyIGh5cG90aGVzaXMgdGVzdGluZywgdGhlcmUgaXMgYSByZWFzb25hYmxlIHBvc3NpYmlsaXR5IHRoYXQgdGhleSB3b3VsZCBiZSBhcHBsaWNhYmxlIHRvIGh1bWFucyAoQXJiYW5hcywgMjAwNykuIFRoZSBiaW9tYXJrZXJzIHdlIHdpbGwgYmUgcmVzZWFyY2hpbmcgaW4gdGhlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlIGFyZSBjcmVhdGluaW5lLCBsYWN0aWMgZGVoeWRyb2dlbmFzZSwgYW5kIGdsdWNvc2UgYXMgdGhleSBhcmUgc2lnbmlmaWNhbnQgYmlvbWFya2VycyBvZiBoZWFydCBkaXNlYXNlIGRldmVsb3BtZW50IGluIGh1bWFucywgYW5kIHRoZXJlZm9yZSBwb3NzaWJsZSBiaW9tYXJrZXJzIGluIHRoZSBzdHVkeSBwb3B1bGF0aW9uLgoKVGhlIGZpcnN0IGJpb21hcmtlciB3ZSB3aWxsIGJlIHRlc3RpbmcgaXMgY3JlYXRpbmluZS4gQ3JlYXRpbmluZSBpcyBhIGNoZW1pY2FsIHdhc3RlIHByb2R1Y3Qgb2YgQ3JlYXRpbmUuIENyZWF0aW5lIGlzIGEgY2hlbWljYWwgbWFkZSBieSB0aGUgYm9keSBhbmQgaXMgdXNlZCB0byBzdXBwbHkgZW5lcmd5IG1haW5seSB0byB0aGUgbXVzY2xlcy4gQW4gaW5jcmVhc2UgaW4gc2VydW0gY3JlYXRpbmluZSwgYWxzbyB0ZXJtZWQgd29yc2VuaW5nIHJlbmFsIGZ1bmN0aW9uLCBjb21tb25seSBvY2N1cnMgaW4gcGF0aWVudHMgd2l0aCBoZWFydCBmYWlsdXJlLCBlc3BlY2lhbGx5IGR1cmluZyBhY3V0ZSBoZWFydCBmYWlsdXJlIGVwaXNvZGVzIChEYW1tYW4sIDIwMjApLiBUaG91Z2ggaW5jcmVhc2VkIGxldmVscyBvZiBjcmVhdGluaW5lIGlzIG5vdCBhIGRpcmVjdCBjYXVzZSBvZiBoZWFydCBmYWlsdXJlLCB0aGVyZSBhcHBlYXJzIHRvIGJlIGEgY29ycmVsYXRpb24uCgpUaGUgc2Vjb25kIGJpb21hcmtlciB3ZSB3aWxsIGJlIHRlc3RpbmcgaXMgTGFjdGljIERlaHlkcm9nZW5hc2UgKExEKS4gTEQgaXMgYW4gZW56eW1lIHRoYXQgcGxheXMgYW4gaW50ZWdyYWwgcm9sZSBpbiB0aGUgYW5hZXJvYmljIG1ldGFib2xpYyBwYXRod2F5LCBhbmQgaXMgb2Z0ZW4gdXNlZCB0byBkaWFnbm9zZSBteW9jYXJkaWFsIGluZmFyY3Rpb24sIG1vcmUgY29tbW9ubHkga25vd24gYXMgYSBoZWFydCBhdHRhY2suIEFjY29yZGluZyB0byBhIHJldHJvc3BlY3RpdmUsIGNyb3NzLXNlY3Rpb25hbCBhbmQgb2JzZXJ2YXRpb25hbCBzdHVkeSBiYXNlZCBvbiBkYXRhIGNvbGxlY3RlZCBieSB0aGUgSGVhbHRoIE1hbmFnZW1lbnQgQ2VudGVyIG9mIHRoZSBGaXJzdCBBZmZpbGlhdGVkIEhvc3BpdGFsIG9mIE5hbmppbmcgTWVkaWNhbCBVbml2ZXJzaXR5LCBoYWxmIG9mIHRoZSBzYW1wbGUgcG9wdWxhdGlvbiB3aXRoIGhpZ2ggbGV2ZWxzIG9mIExEIHNob3dlZCBhIHNpZ25pZmljYW50bHkgaW5jcmVhc2VkIHJpc2sgb2YgQ1ZEIGJhc2VkIG9uIHRoZSBGcmFtaW5naGFtIFJpc2sgUHJlZGljdGlvbiBNb2RlbCAoWmh1LCBXZW5mYW5nLCBldC4gYWwsIDIwMjIpLgoKVGhlIHRoaXJkIGJpb21hcmtlciB3ZSB3aWxsIGJlIHRlc3RpbmcgaXMgZ2x1Y29zZS4gVGhlIGRldmVsb3BtZW50IG9mIENWRCBoYXMgYSBteXJpYWQgb2YgcmlzayBmYWN0b3JzLCBob3dldmVyIHRoZXJlIGhhcyBiZWVuIHNob3duIHRvIGJlIGEgc3Ryb25nIGxpbmsgYmV0d2VlbiBkaWFiZXRlcyBhbmQgQ1ZEIGluIHBhcnRpY3VsYXIgKFBvem55YWssIDIwMjIpLiBEaWFiZXRlcyBpcyBhIGRpc29yZGVyIGluIHdoaWNoIHRoZSBib2R5IGRvZXMgbm90IHByb2R1Y2UgZW5vdWdoIGluc3VsaW4gYW5kIGluYWR2ZXJ0ZW50bHkgZWxldmF0ZXMgYmxvb2QgZ2x1Y29zZSBsZXZlbHMuIEhpZ2ggYmxvb2QgZ2x1Y29zZSBsZXZlbHMgY2FuIGhhdmUgZGV0cmltZW50YWwgZWZmZWN0cyBzdWNoIGFzIGRhbWFnaW5nIGJsb29kIHZlc3NlbHMgYW5kIG5lcnZlcyBpbiB0dXJuIGxlYWRpbmcgdG8gaGlnaGVyIHJpc2sgb2YgZGV2ZWxvcGluZyBDVkQuIFRoZSBQQUQgZGF0YWJhc2UgaGFzIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIGRhdGEgb24gZ2x1Y29zZSBsZXZlbCBhdmVyYWdlcyBpbiB0aGUgc3BlY2llcyB3ZSBhcmUgbWVhc3VyaW5nIGZvciBib3RoIHNleGVzLgoKV2Ugd2lsbCBiZSBydW5uaW5nIGEgcmVncmVzc2lvbiBtb2RlbCBmb3IgZWFjaCBvZiB0aGVzZSB0aHJlZSBiaW9tYXJrZXJzIGluIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyB0byBhbnN3ZXIgdGhyZWUga2V5IHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIHNwZWNpZXM6IEFyZSBzZXggYW5kIGFnZSByZWxpYWJsZSBwcmVkaWN0b3JzIG9mIENyZWF0aW5pbmUgbGV2ZWxzPyBBcmUgc2V4IGFuZCBhZ2UgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBMYWN0aWMgRGVoeWRyb2dlbmFzZSBsZXZlbHM/IEFyZSBzZXggYW5kIGFnZSByZWxpYWJsZSBwcmVkaWN0b3JzIG9mIEdsdWNvc2UgbGV2ZWxzPwoKIyMjIFByZXNlbnRpbmcgRGF0YSBWaXN1YWxpemF0aW9uIGFuZCBSZWdyZXNzaW9uIE1vZGVscwoKIyMjIENyZWF0aW5pbmUsIEZhZGlnYQoKYGBge3J9CnBhZGZlbTwtZmlsdGVyKHBhZCxzZXg9PSJGZW1hbGUiKQpwYWRtYWxlPC1maWx0ZXIocGFkLHNleD09Ik1hbGUiKQpzdW0oIWlzLm5hKHBhZG1hbGUkQ3JlYXRpbmluZSkpCnN1bSghaXMubmEocGFkZmVtJENyZWF0aW5pbmUpKQoKc3VtbWFyeShwYWRmZW0kQ3JlYXRpbmluZSxuYS5ybT1UUlVFKQpzdW1tYXJ5KHBhZG1hbGUkQ3JlYXRpbmluZSxuYS5ybT1UUlVFKQpzZChwYWRmZW0kQ3JlYXRpbmluZSxuYS5ybT1UUlVFKQp2YXIocGFkZmVtJENyZWF0aW5pbmUsbmEucm09VFJVRSkKc2QocGFkbWFsZSRDcmVhdGluaW5lLG5hLnJtPVRSVUUpCnZhcihwYWRtYWxlJENyZWF0aW5pbmUsbmEucm09VFJVRSkKYGBgCgpBcmUgc2V4IGFuZCBhZ2UgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBjcmVhdGluaW5lIGxldmVscz8gVGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHdhcyBtYWRlIHdpdGggQ3JlYXRpbmluZSBpbiBtaW5kLCBpcyBzZXggYW5kIGFnZSBhcmUgbm90IHJlbGlhYmxlIHByZWRpY3RvcnMgaW4gQ3JlYXRpbmluZSBsZXZlbHMgaW4gUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzLlRoZSBhbHRlcm5hdGUgaHlwb3RoZXNpcyBpcyBzZXggYW5kIGFnZSBhcmUgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBDcmVhdGluaW5lIGxldmVscyBpbiBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMuVGhlIHNhbXBsZSBzaXplIGZvciBtYWxlcyB3aXRoIHJlY29yZGVkIENyZWF0aW5pbmUgbGV2ZWxzIGlzIDE3NiBjb21wYXJlZCB0byB0aGUgb3ZlcmFsbCBkYXRhIHNpemUgb2YgMjQyLlRoZWlyIG1lYW4gQ3JlYXRpbmluZSBsZXZlbHMgd2VyZSAxLjAwIG1nL2RMIGFuZCBhbHNvIGhhZCBhIG1lZGlhbiBvZiAxLjAwIG1nL2RMLiBUaGUgbWVhc3VyZSBvZiBkaXNwZXJzaW9uIHdhcyBhIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAwLjIwIG1nL2RMIGFuZCBhIHZhcmlhbmNlIG9mIDAuMDQuVGhlIGZlbWFsZSBwb3B1bGF0aW9uIHNhbXBsZSBzaXplIHdhcyAzMTggY29tcGFyZWQgdG8gdGhlIG92ZXJhbGwgZGF0YSBzaXplIG9mIDM5My4gVGhlaXIgbWVhbiBDcmVhdGluaW5lIGxldmVscyB3ZXJlIDAuODMgbWcvZEwgYW5kIHRoZSBtZWRpYW4gd2FzIDAuODAgbWcvZEwuVGhlIG1lYXN1cmUgb2YgZGlzcGVyc2lvbiB3YXMgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMC4yMiBtZy9kTCBhbmQgYSB2YXJpYW5jZSBvZiAwLjA1LgoKIyMjIyBBc3N1bXB0aW9ucwoKIyMjIyBPYnNlcnZhdGlvbnMKClRoZSBmaXJzdCBhc3N1bXB0aW9uIHRoYXQgaXMgcmV2aWV3ZWQgaXMgSW5kZXBlbmRlbmNlIG9mIG9ic2VydmF0aW9ucy4gVGhlIHZhcmlhYmxlIGFnZSBhbmQgc2V4IGFyZSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLCBhbmQgYXMgYSByZXN1bHQgbWVldHMgdGhlIGFzc3VtcHRpb24uCgpUaGUgc2Vjb25kIGFzc3VtcHRpb24gaXMgYSBsaW5lYXIgcmVsYXRpb25zaGlwIGJldHdlZW4geCBhbmQgeS4gVGhlIGRhdGEgbWVldHMgdGhhdCBhc3N1bXB0aW9uLgoKYGBge3J9CmdncGxvdChwYWRmZW0sYWVzKHg9YWdlLHk9Q3JlYXRpbmluZSkpKwogIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIGNvbXBhcmVkIHRvIENyZWF0aW5pbmUgbGV2ZWxzIGluIGZlbWFsZXMiKSsKICBnZW9tX3BvaW50KGNvbD0ieWVsbG93MiIsc2l6ZT0zLGFscGhhPTAuOCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsbHR5PSJkYXNoZWQiKSsKICB0aGVtZV9idygpCgpgYGAKCmBgYHtyfQpnZ3Bsb3QocGFkbWFsZSxhZXMoeD1hZ2UseT1DcmVhdGluaW5lKSkrCiAgIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIGNvbXBhcmVkIHRvIENyZWF0aW5pbmUgbGV2ZWxzIGluIG1hbGVzIikrCiAgZ2VvbV9wb2ludChjb2xvcj0icmVkMyIsc2l6ZT0zLGFscGhhPTAuOCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsbHR5PSJkYXNoZWQiKSsKICB0aGVtZV9idygpCgpgYGAKCmBgYHtyfQpnZ3Bsb3QocGFkLGFlcyh4PWFnZSx5PUNyZWF0aW5pbmUsY29sPXNleCkpKwogIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIGNvbXBhcmVkIHRvIENyZWF0aW5pbmUgbGV2ZWxzIikrCiAgZ2VvbV9wb2ludChzaXplPTMsYWxwaGE9MC44KSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KcmVnMTwtbG0oQ3JlYXRpbmluZX5zZXgrYWdlLGRhdGE9cGFkKQpgYGAKCiMjIyMgTm9ybWFsaXR5IG9mIFJlc2lkdWFscwoKVGhlIGFzc3VtcHRpb24gaXMgbWV0IGZvciBub3JtYWxpdHkgb2YgcmVzaWR1YWxzLgoKYGBge3J9CnFxUGxvdChyZWcxKQpgYGAKCiMjIyMgSG9tb3NjZWRhc3RpY2l0eQoKSXQgdmlvbGF0ZXMgdGhlIGFzc3VtcHRpb24uCgpgYGB7cn0KcGxvdChyZWcxLDEpCmBgYAoKIyMjIyBUZXN0CgpgYGB7cn0Kc3VtbWFyeShyZWcxKQpyZWcxJGNvZWZmaWNpZW50cwpgYGAKClNleCBoYXMgYSBwIHZhbHVlIG9mIDwwLjA1LiBBZ2UgaGFzIGEgcCB2YWx1ZSBvZiA+MC4wNS4gR2l2ZW4gdGhlIGNvbmZpZGVuY2UgbGV2ZWwgb2YgMC4wNSBJIHJlamVjdCB0aGUgb3JpZ2luYWwgbnVsbCBoeXBvdGhlc2lzIGFzIGl0IHN0YXRlZCBib3RoIGFnZSBhbmQgc2V4IGFzIGEgcmVsaWFibGUgcHJlZGljdG9yIG9mIGNyZWF0aW5pbmUgbGV2ZWxzIHdoZW4gb25seSBzZXggaXMgcHJvdmVuIHRvIGJlIGNvcnJlbGF0ZWQgd2l0aCBDcmVhdGluaW5lIGxldmVscy4gVGhlIGFzc3VtcHRpb24gZm9yIGhvbW9zY2VkYXN0aWNpdHkgd2FzIG5vdCBtZXQgaG93ZXZlci4gSG9sZGluZyBhbGwgZWxzZSBlcXVhbCxNYWxlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyBoYXZlIGNyZWF0aW5pbmUgbGV2ZWxzIHRoYXQgYXJlIDAuMTggbWcvZEwgaGlnaGVyIHRoYW4gZmVtYWxlIE1hY2FxdWVzLiBNeSB0ZXN0aW5nIG9mIENyZWF0aW5pbmUgbGV2ZWxzIGhhcyB0aGUgcG9zc2liaWxpdHkgb2YgaW5mb3JtaW5nIHJlc2VhcmNoIGluIHJpc2sgbGV2ZWxzIG9mIGNhcmRpb3Zhc2N1bGFyIGRpc2Vhc2UgaW4gaHVtYW5zIGJ5IGNvbXBhcmluZyB0aGUgbWFsZSBNYWNhcXVlcyBsZXZlbHMgb2YgY3JlYXRpbmluZSB0byB0aGUgbGV2ZWxzIG9mIGh1bWFuIG1hbGVzLiBTdHVkaWVzIGhhdmUgc2hvd24gdGhhdCB0aGVzZSBwcmltYXRlcyBjYW4gYmUgcXVpdGUgc2ltaWxhciB0byBodW1hbnMsIGFuZCBzaW5jZSBhIGhpZ2hlciBsZXZlbCBvZiBjcmVhdGluaW5lIGlzIGFzc29jaWF0ZWQgd2l0aCBjYXJkaW92YXNjdWxhciBkaXNlYXNlIGluIGh1bWFucywgdGhlIGNvbXBhcmlzb25zIG1hZGUgaW4gdGhpcyBoeXBvdGhlc2lzIHRlc3QgbWF5IHByb3ZlIHVzZWZ1bC4KCiMjIyBMYWN0aWMgRGVoeWRyb2dlbmFzZSwgTm93aWNraQoKYGBge3J9CnN1bSghaXMubmEocGFkbWFsZSRMYWN0aWNEZWh5ZHJvZ2VuYXNlKSkKc3VtKCFpcy5uYShwYWRmZW0kTGFjdGljRGVoeWRyb2dlbmFzZSkpCnN1bW1hcnkocGFkZmVtJExhY3RpY0RlaHlkcm9nZW5hc2UsbmEucm09VFJVRSkKc3VtbWFyeShwYWRtYWxlJExhY3RpY0RlaHlkcm9nZW5hc2UsbmEucm09VFJVRSkKc2QocGFkZmVtJExhY3RpY0RlaHlkcm9nZW5hc2UsbmEucm09VFJVRSkKdmFyKHBhZGZlbSRMYWN0aWNEZWh5ZHJvZ2VuYXNlLG5hLnJtPVRSVUUpCnNkKHBhZG1hbGUkTGFjdGljRGVoeWRyb2dlbmFzZSxuYS5ybT1UUlVFKQp2YXIocGFkbWFsZSRMYWN0aWNEZWh5ZHJvZ2VuYXNlLG5hLnJtPVRSVUUpCmBgYAoKQXJlIHNleCBhbmQgYWdlIHJlbGlhYmxlIHByZWRpY3RvcnMgb2YgTGFjdGljIERlaHlkcm9nZW5hc2UgbGV2ZWxzIGluIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcz8gVGhlIG51bGwgaHlwb3RoZXNpcyBmb3IgdGhpcyByZWdyZXNzaW9uIG1vZGVsIGFzc2VydHMgdGhhdCB0aGVyZSBpcyBubyBzaWduaWZpY2FudCBhc3NvY2lhdGlvbiBiZXR3ZWVuIHNleCBhbmQgYWdlIG9mIHRoZSBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZSBhbmQgbGV2ZWxzIG9mIGxhY3RpYyBkZWh5ZHJvZ2VuYXNlLiBCeSBjb250cmFzdCwgdGhlIGFsdGVybmF0ZSBoeXBvdGhlc2lzIHN0YXRlcyB0aGF0IHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24gYmV0d2VlbiBzZXggYW5kIGFnZSBvZiB0aGUgUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWUgYW5kIGxldmVscyBvZiBsYWN0aWMgZGVoeWRyb2dlbmFzZS4gSW4gb3VyIHJhbmRvbSBzYW1wbGUsIHRoZXJlIGFyZSAxMzMgbWFsZXMgd2l0aCByZWNvcmRlZCBsZXZlbHMgb2YgTGFjdGljIERlaHlkcm9nZW5hc2UuIFRoZXkgaGF2ZSBhIG1lYW4gb2YgMzc4LjMgaW50ZXJuYXRpb25hbCB1bml0cyBwZXIgbGl0ZXIgKElVL0wpIGFuZCBhIG1lZGlhbiBvZiAzMjkgSVUvTC4gVGhlIG1lYXN1cmVzIG9mIGRpc3BlcnNpb24gcHJvdmlkZSBhIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAxODAuMDcgSVUvTCBhbmQgYSB2YXJpYW5jZSBvZiAzMjQyNS40Mi4gVGhlcmUgYXJlIDI0NSBmZW1hbGVzIHdpdGggcmVjb3JkZWQgbGV2ZWxzIG9mIExhY3RpYyBEZWh5ZHJvZ2VuYXNlIGluIG91ciByYW5kb20gc2FtcGxlIHdpdGggYSBtZWFuIG9mIDMzMy41IElVL0wgYW5kIGEgbWVkaWFuIG9mIDI4My41IElVL0wuIFRoZSBtZWFzdXJlcyBvZiBkaXNwZXJzaW9uIHByb3ZpZGUgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMTY3LjA4IElVL0wgYW5kIGEgdmFyaWFuY2Ugb2YgMjc5MTQuMjIuCgojIyMjIEFzc3VtcHRpb25zCgojIyMjIE9ic2VydmF0aW9ucwoKVG8gcGVyZm9ybSBsaW5lYXIgcmVncmVzc2lvbiwgc2V2ZXJhbCBhc3N1bXB0aW9ucyBoYWQgdG8gYmUgbWV0LiBGaXJzdCwgdGhlIHZhcmlhYmxlcyBoYWQgdG8gYmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlci4gVGhlIHZhcmlhYmxlcyBhZ2UgYW5kIHNleCBhcmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlciBzbyB0aGUgZGF0YSBtZWV0cyB0aGlzIGFzc3VtcHRpb24uIFNlY29uZCwgdGhlcmUgaGFkIHRvIGJlIGEgbGluZWFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHNleCBhbmQgYWdlLCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGVzLCBhbmQgTEQgbGV2ZWxzLCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlLiBUaGUgZ3JhcGhzIGJlbG93IGRlbW9uc3RyYXRlcyB0aGlzIHJlbGF0aW9uc2hpcC4KCmBgYHtyfQpnZ3Bsb3QocGFkZmVtLGFlcyh4PWFnZSx5PUxhY3RpY0RlaHlkcm9nZW5hc2UpKSsKICAgbGFicyh0aXRsZT0iU2V4IGFuZCBBZ2UgY29tcGFyZWQgdG8gTGFjdGljIERlaHlkcm9nZW5hc2UgbGV2ZWxzIGluIGZlbWFsZXMiKSsKICBnZW9tX3BvaW50KGNvbD0icHVycGxlIixzaXplPTMsYWxwaGE9MC44KSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KZ2dwbG90KHBhZG1hbGUsYWVzKHg9YWdlLHk9TGFjdGljRGVoeWRyb2dlbmFzZSkpKwogICBsYWJzKHRpdGxlPSJTZXggYW5kIEFnZSBjb21wYXJlZCB0byBMYWN0aWMgRGVoeWRyb2dlbmFzZSBsZXZlbHMgaW4gbWFsZXMiKSsKICBnZW9tX3BvaW50KGNvbD0ibWFnZW50YSIsc2l6ZT0zLGFscGhhPTAuOCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsbHR5PSJkYXNoZWQiKSsKICB0aGVtZV9idygpCmBgYAoKYGBge3J9CmdncGxvdChwYWQsYWVzKHg9YWdlLHk9TGFjdGljRGVoeWRyb2dlbmFzZSxjb2w9c2V4KSkrCiAgIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIGNvbXBhcmVkIHRvIExhY3RpYyBEZWh5ZHJvZ2VuYXNlIGxldmVscyIpKwogIGdlb21fcG9pbnQoc2l6ZT0zLGFscGhhPTAuOCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsbHR5PSJkYXNoZWQiKSsKICB0aGVtZV9idygpCmBgYAoKYGBge3J9CnJlZzI8LWxtKExhY3RpY0RlaHlkcm9nZW5hc2V+c2V4K2FnZSxkYXRhPXBhZCkKYGBgCgojIyMjIE5vcm1hbGl0eSBvZiByZXNpZHVhbHMKClRoZSB0aGlyZCBhc3N1bXB0aW9uIGlzIGEgbm9ybWFsaXR5IG9mIHJlc2lkdWFscy4gVGhlIGdyYXBoIGJlbG93IGRlbW9uc3RyYXRlcyB0aGF0IHRoZSByZXNpZHVhbHMgYXJlIG5vdCBub3JtYWxseSBkaXN0cmlidXRlZC4KCmBgYHtyfQpxcVBsb3QocmVnMikKYGBgCgojIyMjIEhvbW9zY2VkYXN0aWNpdHkKClRoZSBmaXR0ZWQgcGxvdCBhbHNvIHNob3dzIGEgdmlvbGF0aW9uIG9mIHRoZSBmb3VydGggYXNzdW1wdGlvbiBvZiBob21vc2NlZGFzdGljaXR5LiBIb3dldmVyLCB0ZXN0aW5nIHdpbGwgc3RpbGwgYmUgY2FycmllZCBvdXQgdG8gYXNzZXNzIGFueSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZGVwZW5kZW50IGFuZCBpbmRlcGVuZGVudCB2YXJpYWJsZXMuCgpgYGB7cn0KcGxvdChyZWcyLDEpCmBgYAoKIyMjIyBUZXN0CgpgYGB7cn0Kc3VtbWFyeShyZWcyKQpyZWcyJGNvZWZmaWNpZW50cwpgYGAKCkJvdGggYWdlIGFuZCBzZXggaGF2ZSBhIFAgdmFsdWUgb2YgPDAuMDUuIEdpdmVuIGEgY29uZmlkZW5jZSBpbnRlcnZhbCBvZiAwLjA1LCB0aGUgbnVsbCBoeXBvdGhlc2lzIGlzIHJlamVjdGVkLiBBZ2UgYW5kIHNleCBhcmUgcG9zc2libGUgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBMRCBsZXZlbHMgaW4gUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzLCBob3dldmVyIHRoZSBhc3N1bXB0aW9ucyB3ZXJlIG5vdCBtZXQgZm9yIHRoZSBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbC4gVGhlIGJhc2VsaW5lIGNhdGVnb3J5IHRoZSB0ZXN0IHByb3ZpZGVkIHdhcyBGZW1hbGUuIEdpdmVuIHRoZSBiYXNlbGluZSBjYXRlZ29yeSBhbmQgaG9sZGluZyBhbGwgZWxzZSBlcXVhbCwgbWFsZSBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMgaGF2ZSBMRCBsZXZlbHMgb2YgNDkuNjYgSVUvTCBoaWdoZXIgdGhhbiBmZW1hbGVzLiBIb2xkaW5nIGFsbCBlbHNlIGVxdWFsLCBhIGRlY3JlYXNlIG9mIDMgeWVhcnMgb2YgYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmNyZWFzZSBvZiAxIElVL0wuIFNpbmNlIExEIGlzIGEgcmVjb3JkZWQgYmlvbWFya2VyIG9mIENWRCBpbiBodW1hbnMgYW5kIGdpdmVuIHRoZSBjbG9zZSBETkEgc2ltaWxhcml0eSBvZiBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMgYW5kIGh1bWFucywgdGhpcyBtYXkgYmUgc29tZXdoYXQgaW5mb3JtYXRpdmUgZm9yIGJpb21lZGljYWwgcmVzZWFyY2hlcnMgY29tcGFyaW5nIHJpc2sgbGV2ZWxzIG9mIENhcmRpb3Zhc2N1bGFyIGRpc2Vhc2UgaW4gaHVtYW4gbWFsZXMgYW5kIGZlbWFsZXMgb2YgZGlmZmVyZW50IGFnZXMuCgojIyMgR2x1Y29zZSwgU2Npc2NlbnQKCmBgYHtyfQpzdW0oIWlzLm5hKHBhZG1hbGUkR2x1Y29zZSkpCnN1bSghaXMubmEocGFkZmVtJEdsdWNvc2UpKQpzdW1tYXJ5KHBhZGZlbSRHbHVjb3NlLCBuYS5ybSA9IFRSVUUpCnN1bW1hcnkocGFkbWFsZSRHbHVjb3NlLCBuYS5ybSA9IFRSVUUpCnNkKHBhZGZlbSRHbHVjb3NlLCBuYS5ybSA9IFRSVUUpCnZhcihwYWRmZW0kR2x1Y29zZSwgbmEucm0gPSBUUlVFKQpzZChwYWRtYWxlJEdsdWNvc2UsIG5hLnJtID0gVFJVRSkKdmFyKHBhZG1hbGUkR2x1Y29zZSwgbmEucm0gPSBUUlVFKQoKYGBgCgpBcmUgc2V4IGFuZCBhZ2UgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBHbHVjb3NlIGxldmVscyBpbiBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXM/IFRvIHRlc3Qgb3VyIHF1ZXN0aW9uLCBJIHdpbGwgYmUgdXRpbGl6aW5nIGEgcmVncmVzc2lvbiBtb2RlbCB0aGF0IGV4ZW1wbGlmaWVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzZXggYW5kIGFnZSBpbiByZWdhcmRzIHRvIGdsdWNvc2UgbGV2ZWxzLlRoZSBudWxsIGh5cG90aGVzaXMgYXNzZXJ0cyB0aGF0IHRoZXJlIGlzIG5vIHNpZ25pZmljYW50IGNvcnJlbGF0aW9uIGJldHdlZW4gc2V4IGFuZCBhZ2Ugb2YgdGhlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyBhbmQgbGV2ZWxzIG9mIGdsdWNvc2UuIFRoZSBhbHRlcm5hdGUgaHlwb3RoZXNpcyBhc3NlcnRzIHRoYXQgdGhlcmUgaXMgYSBzaWduaWZpY2FudCBjb3JyZWxhdGlvbiBiZXR3ZWVuIHNleCBhbmQgYWdlIG9mIHRoZSBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMgYW5kIGxldmVscyBvZiBnbHVjb3NlLiBJbiBvdXIgcmFuZG9tIHNhbXBsZSwgdGhlcmUgYXJlIDE4MiBtYWxlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyB3aXRoIGEgcmVjb3JkZWQgbWVhbiBvZiA3MC43NCBtaWxsaWdyYW1zIHBlciBkZWNpbGl0cmUgKG1nL2RMKSBhbmQgYSBtZWRpYW4gb2YgNjcuMDAgbWcvZEwuIFRoZSBtZWFzdXJlcyBvZiBkaXNwZXJzaW9uIHByb3ZpZGUgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMjAuMTYzNTQgbWcvZEwgYW5kIGEgdmFyaWFuY2Ugb2YgNDA2LjU2ODIuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGVyZSBhcmUgMzI2IGZlbWFsZSBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMgd2l0aCBhIHJlY29yZGVkIG1lYW4gb2YgNzAuNjkgbWcvZEwgYW5kIGEgbWVkaWFuIG9mIDY3LjAwIG1nL2RMLiBUaGUgbWVhc3VyZXMgb2YgZGlzcGVyc2lvbiBwcm92aWRlIGEgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIDIzLiA2NDM0IG1nL2RMIGFuZCBhIHZhcmlhbmNlIG9mIDU1OS4wMTA0LgoKIyMjIyBBc3N1bXB0aW9ucwoKIyMjIyBPYnNlcnZhdGlvbnMKClRvIHBlcmZvcm0gbGluZWFyIHJlZ3Jlc3Npb24sIHNldmVyYWwgYXNzdW1wdGlvbnMgbXVzdCBiZSBtZXQuIEZpcnN0LCB0aGUgdmFyaWFibGVzIHdlIGFyZSB0ZXN0aW5nIGhhdmUgdG8gYmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlci4gVGhlIHZhcmlhYmxlcyBhZ2UgYW5kIHNleCBhcmUgaW5kZXBlbmRlbnQgc28gdGhlIGRhdGEgbWVldHMgdGhpcyBhc3N1bXB0aW9uLiBTZWNvbmQsIHRoZXJlIGhhcyB0byBiZSBhIGxpbmVhciByZWxhdGlvbnNoaXAgYmV0d2VlbiBzZXggYW5kIGFnZSwgdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgZ2x1Y29zZSBsZXZlbHMsIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUuIFRoZSBncmFwaCBiZWxvdyBkZW1vbnN0cmF0ZXMgdGhpcyByZWxhdGlvbnNoaXAuCgpgYGB7cn0KZ2dwbG90KHBhZGZlbSwgYWVzKHg9YWdlLHk9R2x1Y29zZSkpKwogICBsYWJzKHRpdGxlPSJTZXggYW5kIEFnZSBDb21wYXJlZCB0byBHbHVjb3NlIExldmVscyBpbiBGZW1hbGVzIikrCiAgZ2VvbV9wb2ludChzaXplPTMsYWxwaGE9MC44LCBjb2xvciA9ICdsaWdodGJsdWUnKSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KZ2dwbG90KHBhZG1hbGUsIGFlcyh4PWFnZSx5PUdsdWNvc2UpKSsKICAgbGFicyh0aXRsZT0iU2V4IGFuZCBBZ2UgQ29tcGFyZWQgdG8gR2x1Y29zZSBMZXZlbHMgaW4gTWFsZXMiKSsKICBnZW9tX3BvaW50KHNpemU9MyxhbHBoYT0wLjgsIGNvbG9yID0gJ3BpbmsnKSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KZ2dwbG90KHBhZCwgYWVzKHg9YWdlLHk9R2x1Y29zZSxjb2w9c2V4KSkrCiAgIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIENvbXBhcmVkIHRvIEdsdWNvc2UgTGV2ZWxzIikrCiAgZ2VvbV9wb2ludChzaXplPTMsYWxwaGE9MC44KSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KcmVnMyA8LSBsbShHbHVjb3NlIH4gYWdlICsgc2V4LCBkYXRhID0gcGFkKQpgYGAKCiMjIyMgTm9ybWFsaXR5IG9mIHJlc2lkdWFscwoKVGhlIHRoaXJkIGFzc3VtcHRpb24gaXMgbm9ybWFsaXR5IG9mIHJlc2lkdWFscy4gVGhlIGZpcnN0IGdyYXBoIGJlbG93IGRlbW9uc3RyYXRlcyB0aGF0IHRoZSByZXNpZHVhbHMgYXJlIHNvbWV3aGF0IG5vcm1hbGx5IGRpc3RyaWJ1dGVkIGFzIHRoZSBwb2ludHMgZG8gc2VlbSB0byBiZSBwcmV0dHkgY2xvc2UgdG8gdGhlIGJlc3QgZml0IGxpbmUsIGhvd2V2ZXIgdGhleSBjdXJ2ZSBvZmYgdG93YXJkcyB0aGUgZW5kIHNpZ25pZnlpbmcgdGhhdCBvdXIgZGF0YSBkb2VzIGhhdmUgbW9yZSBleHRyZW1lIHZhbHVlcyB0aGFuIGV4cGVjdGVkLgoKYGBge3J9CnFxUGxvdChyZWczKQpgYGAKCiMjIyMgSG9tb3NjZWRhc3RpY2l0eQoKVGhlIGZvdXJ0aCBhc3N1bXB0aW9uIGlzIGhvbW9zY2VkYXN0aWNpdHkuIFRoZSBzZWNvbmQgZ3JhcGggZGVtb25zdHJhdGVzIGEgdmlvbGF0aW9uIG9mIHRoaXMgYXNzdW1wdGlvbiBiZWNhdXNlIGFzIHRoZSB4LXZhbHVlIGluY3JlYXNlcywgdGhlIHJlc2lkdWFscyBiZWNvbWUgZnVydGhlciBhcGFydC4gSG93ZXZlciwgdGVzdGluZyBjYW4gc3RpbGwgYmUgZG9uZSB0byBhc3Nlc3MgYW55IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG91ciBkZXBlbmRlbnQgYW5kIGluZGVwZW5kZW50IHZhcmlhYmxlcy4KCmBgYHtyfQpwbG90KHJlZzMsIDEpCmBgYAoKYGBge3J9CnN1bW1hcnkocmVnMykKcmVnMyRjb2VmZmljaWVudHMKYGBgCgpCb3RoIGFnZSBhbmQgc2V4IGhhdmUgYSBQIHZhbHVlIHRoYXQgaXMgPjAuMDUuIEdpdmVuIGEgY29uZmlkZW5jZSBpbnRlcnZhbCBvZiAwLjA1LCBteSByZWdyZXNzaW9uIG1vZGVsIGZhaWxzIHRvIHJlamVjdCB0aGUgbnVsbC4gRnJvbSB0aGlzIHJlZ3Jlc3Npb24gbW9kZWwsIGFnZSBhbmQgc2V4IGRvIG5vdCBzZWVtIHRvIGJlIHJlbGlhYmxlIHByZWRpY3RvcnMgb2YgZ2x1Y29zZSBsZXZlbHMgaW4gUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzLCBob3dldmVyLCBrZWVwIGluIG1pbmQgdGhlIGFzc3VtcHRpb24gZm9yIGhvbW9zY2VkYXN0aWNpdHkgd2FzIG5vdCBtZXQgYW5kIHRoZSBub3JtYWxpdHkgb2YgcmVzaWR1YWxzIGFzc3VtcHRpb25zIHdhcyBvbmx5IHBhcnRpYWxseSBtZXQuIFRoZSBiYXNlbGluZSBjYXRlZ29yeSB0aGUgdGVzdCBwcm92aWRlZCBhbmQgY29tcGFyZWQgdG8gb3VyIG90aGVyIHZhcmlhYmxlcyAoYWdlIGFuZCBnbHVjb3NlKSB3YXMgdGhlIGNhdGVnb3JpY2FsIHZhbHVlICdGZW1hbGUnIHdpdGhpbiB0aGUgdmFyaWFibGUgc2V4LiBHaXZlbiB0aGUgYmFzZWxpbmUgY2F0ZWdvcnkgYW5kIGhvbGRpbmcgYWxsIGVsc2UgZXF1YWwsIG1hbGUgUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzIGhhdmUgZ2x1Y29zZSBsZXZlbHMgb2YgMC4xMSBsZXNzIHRoYW4gZmVtYWxlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcy4gSG9sZGluZyBhbGwgZWxzZSBlcXVhbCwgYW4gaW5jcmVhc2UgaW4gMC4wNyB5ZWFycyBvZiBhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGluY3JlYXNlIG9mIDEgbWcvZEwuIEdsdWNvc2UgbGV2ZWxzL2Jsb29kIHN1Z2FyIGxldmVscyBwbGF5IGEgY3J1Y2lhbCByb2xlIGluIGlkZW50aWZ5aW5nIENWRCBpbiBodW1hbnMuIFRoaXMgaXMgYmVjYXVzZSBoaWdoIGJsb29kIHN1Z2FyIGNhbiBkYW1hZ2UgYmxvb2QgdmVzc2VscyBhbmQgbmVydmVzIGxlYWRpbmcgdG8gc2VyaW91cyBhbmQgbGlmZS10aHJlYXRlbmluZyBoZWFydCBwcm9ibGVtcy4gQmxvb2Qgc3VnYXIgbGV2ZWxzIGNhbiBoZWxwIHVzIGluZGljYXRlIGRpYWJldGVzIHdpdGhpbiBwYXRpZW50cyBhbmQgaW4gdHVybiBoZWxwIHVzIHByZXZlbnQgQ1ZEIGZyb20gaW1wYWN0aW5nIHRoZWlyIGxpdmVzLiBHaXZlbiB0aGUgY2xvc2UgRE5BIHNpbWlsYXJpdHkgb2YgUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzIGFuZCBodW1hbnMsIHRoaXMgbWF5IGJlIHNvbWV3aGF0IGluZm9ybWF0aXZlIGZvciBiaW9tZWRpY2FsIHJlc2VhcmNoZXJzIGNvbXBhcmluZyByaXNrIGxldmVscyBvZiBjYXJkaW92YXNjdWxhciBkaXNlYXNlIGluIGh1bWFuIG1hbGVzIGFuZCBmZW1hbGVzIHJlc3BlY3RpdmVseS4gSG93ZXZlciwgd2l0aGluIFJoZXN1cyBJbmRpYW4gRGVyaXZlZCBNYWNhcXVlcywgc2V4IGFuZCBhZ2UgZG8gbm90IHNlZW0gdG8gcGxheSBhIHNpZ25pZmljYW50IHJvbGUgaW4gZ2x1Y29zZSBsZXZlbHMgbWVhbmluZyB0aGF0IHdlIHNob3VsZCBsb29rIGVsc2V3aGVyZSBhbmQgb3RoZXIgYmlvbWFya2VycyBmb3IgcG9zc2libGUgc29sdXRpb25zLgoKIyMgQ29uY2x1c2lvbgoKSW4gcmVzcG9uc2UgdG8gY2xpbWJpbmcgaGVhcnQgZGlzZWFzZSByYXRlcyBpbiB0aGUgVW5pdGVkIFN0YXRlcywgd2UgZm9jdXNlZCBvdXIgaHlwb3RoZXNpcyB0ZXN0aW5nIG9uIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHNleCwgYWdlIGFuZCBiaW9sb2dpY2FsIG1hcmtlcnMgaW4gcmVnYXJkcyB0byBjYXJkaW92YXNjdWxhciBkaXNlYXNlLiBGb3Jnb2luZyB0aGUgYXNzdW1wdGlvbiBvZiBob21vc2NlZGFzdGljaXR5LCBoeXBvdGhlc2lzIHRlc3RpbmcgcmV2ZWFsZWQgdGhhdCBzZXggb2YgdGhlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlIHdhcyBhIHJlbGlhYmxlIHByZWRpY3RvciBvZiBsZXZlbHMgb2YgQ3JlYXRpbmluZSB3aXRoaW4gdGhlIHByaW1hdGUsIGFuZCB0aGF0IGFnZSB3YXMgbm90LiBGb3Jnb2luZyBhc3N1bXB0aW9ucyBvZiBub3JtYWxpdHkgb2YgcmVzaWR1YWxzIGFuZCBob21vc2NlZGFzdGljaXR5LCBpdCBhbHNvIHNob3dlZCB0aGF0IGFnZSBhbmQgc2V4IGFyZSByZWxpYWJsZSBwcmVkaWN0b3JzIG9mIGxldmVscyBvZiBMYWN0aWMgRGVoeWRyb2dlbmFzZSBpbiB0aGUgUmhlc3VzIHNwZWNpZXMuICBMYXN0bHksIGZvcmdvaW5nIGFzc3VtcHRpb25zIG9mIG5vcm1hbGl0eSBvZiByZXNpZHVhbHMgYW5kIGhvbW9zY2VkYXN0aWNpdHksIGh5cG90aGVzaXMgdGVzdGluZyByZXZlYWxlZCB0aGF0IHNleCBhbmQgYWdlIHdlcmUgbm90IHJlbGlhYmxlIHByZWRpY3RvcnMgb2YgZ2x1Y29zZSBsZXZlbHMgaW4gdGhlIFJoZXN1cyBzcGVjaWVzLiBObyByZWdyZXNzaW9uIG1vZGVscyBpbiB0aGlzIHN0dWR5IGluY2x1ZGVkIGFkZGl0aW9uYWwgYW5kIHJlbGV2YW50IGNvdmFyaWF0ZXMgc3VjaCBhcyBoZWlnaHQgYW5kIHdlaWdodC4gCgpFdmVuIHRob3VnaCB0aGUgUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWUgYW5kIGh1bWFucyBzaGFyZSBhcHByb3hpbWF0ZWx5IDkzJSBzaW1pbGFyaXR5IGluIEROQSAgKEFyYmFuYXMsIDIwMDcpICBpdCBpcyB1bmxpa2VseSB0aGF0IHRlc3RpbmcgdGhlc2UgYmlvbWFya2VycyBhZ2FpbnN0IHNleCBhbmQgYWdlIG9mIGh1bWFucyB3b3VsZCByZXN1bHQgaW4gYW55IHNpZ25pZmljYW50IGZpbmRpbmdzIHJlZ2FyZGluZyByaXNrIGxldmVscyBvZiBDYXJkaW92YXNjdWxhciBEaXNlYXNlLiAKCiMjIFdvcmtzIFJlZmVyZW5jZWQKCiJBSEE6IEhlYXJ0IERpc2Vhc2UgRGVhdGggUmF0ZXMgaW4gVVMgU3Bpa2VkIGluIDIwMjAuIiBSZW5hbCAmIFVyb2xvZ3kgTmV3cywgMTggTm92LiAyMDIyLCBwLiBOQS4gR2FsZSBBY2FkZW1pYyBPbmVGaWxlLCBsaW5rLmdhbGUuY29tL2FwcHMvZG9jL0E3MjY5OTUxODgvQU9ORT91PWJpbmd1bCZzaWQ9Ym9va21hcmstQU9ORSZ4aWQ9MzFjNTI1NzMuIEFjY2Vzc2VkIDEgQXByLiAyMDIzLgoKQXJiYW5hcywgQ2Fyb2xpbmUuICJSaGVzdXMgTW9ua2V5IEdlbm9tZSBSZXZlYWxzIEROQSBTaW1pbGFyaXRpZXMgd2l0aCBDaGltcHMgYW5kIEh1bWFucyAtIHRoZSBTb3VyY2UgLSBXYXNoaW5ndG9uIFVuaXZlcnNpdHkgaW4gU3QuIExvdWlzLiIgVGhlIFNvdXJjZSwgOSBGZWIuIDIwMjEsIHNvdXJjZS53dXN0bC5lZHUvMjAwNy8wNC9yaGVzdXMtbW9ua2V5LWdlbm9tZS1yZXZlYWxzLWRuYS1zaW1pbGFyaXRpZXMtd2l0aC1jaGltcHMtYW5kLWh1bWFucy8uCgpCYXRlbWFuLCBDaHJpcy4gIlNBIHdvbWVuIGF0IHNpZ25pZmljYW50IHJpc2sgb2YgZGV2ZWxvcGluZyBoZWFydCBkaXNlYXNlLiIgQ01FOiBZb3VyIFNBIEpvdXJuYWwgb2YgQ1BELCB2b2wuIDMwLCBuby4gOCwgQXVnLiAyMDEyLCBwcC4gMzAxKy4gR2FsZSBBY2FkZW1pYyBPbmVGaWxlLCBsaW5rLmdhbGUuY29tL2FwcHMvZG9jL0EzMDE4NzIxNzEvQU9ORT91PWJpbmd1bCZzaWQ9Ym9va21hcmstQU9ORSZ4aWQ9ZmE4OGViY2QuIEFjY2Vzc2VkIDEgQXByLiAyMDIzLgoKQ294LCBMYXVyYSBBIGV0IGFsLiAiTm9uaHVtYW4gUHJpbWF0ZXMgYW5kIFRyYW5zbGF0aW9uYWwgUmVzZWFyY2gtQ2FyZGlvdmFzY3VsYXIgRGlzZWFzZS4iIElMQVIgam91cm5hbCB2b2wuIDU4LDIgKDIwMTcpOiAyMzUtMjUwLiA8ZG9pOjEwLjEwOTMvaWxhci9pbHgwMjU+CgpNdWxsZW5zLCBXLiwgRGFtbWFuLCBLLiwgVGVzdGFuaSwgSi5NLiwgTWFydGVucywgUC4sIE11ZWxsZXIsIEMuLCBMYXNzdXMsIEouLCBUYW5nLCBXLkguVy4sIFNrb3VyaSwgSC4sIFZlcmJydWdnZSwgRi5ILiwgT3JzbywgRi4sIEhpbGwsIEwuLCBVcmFsLCBELiwgTGFpbnNjYWssIE0uLCBSb3NzaWdub2wsIFAuLCBNZXRyYSwgTS4sIE1lYmF6YWEsIEEuLCBTZWZlcm92aWMsIFAuLCBSdXNjaGl0emthLCBGLiBhbmQgQ29hdHMsIEEuICgyMDIwKSwgRXZhbHVhdGlvbiBvZiBraWRuZXkgZnVuY3Rpb24gdGhyb3VnaG91dCB0aGUgaGVhcnQgZmFpbHVyZSB0cmFqZWN0b3J5IC0tIGEgcG9zaXRpb24gc3RhdGVtZW50IGZyb20gdGhlIEhlYXJ0IEZhaWx1cmUgQXNzb2NpYXRpb24gb2YgdGhlIEV1cm9wZWFuIFNvY2lldHkgb2YgQ2FyZGlvbG9neS4gRXVyIEogSGVhcnQgRmFpbCwgMjI6IDU4NC02MDMuIDxodHRwczovL2RvaS5vcmcvMTAuMTAwMi9lamhmLjE2OTc+CgpQb3pueWFrLCBBbmFzdGFzaWEgViBldCBhbC4gIkVmZmVjdCBvZiBHbHVjb3NlIExldmVscyBvbiBDYXJkaW92YXNjdWxhciBSaXNrLiIgQ2VsbHMgdm9sLiAxMSwxOSAzMDM0LiAyOCBTZXAuIDIwMjIsIDxkb2k6MTAuMzM5MC9jZWxsczExMTkzMDM0PgoKUmF1YmVydGFzLCBSLiwgQmVlY2gsIEouLCBXYXRzb24sIFcuIGV0IGFsLiBEZWNyZWFzZWQgY29tcGxleGl0eSBvZiBnbHVjb3NlIGR5bmFtaWNzIGluIGRpYWJldGVzIGluIHJoZXN1cyBtb25rZXlzLiBTY2kgUmVwIDksIDE0MzggKDIwMTkpLiA8aHR0cHM6Ly9kb2kub3JnLzEwLjEwMzgvczQxNTk4LTAxOC0zNjc3Ni00PgoKIkNyZWF0aW5pbmUgQmxvb2QgVGVzdC4iIE1vdW50IFNpbmFpIEhlYWx0aCBTeXN0ZW0sIDxodHRwczovL3d3dy5tb3VudHNpbmFpLm9yZy9oZWFsdGgtbGlicmFyeS90ZXN0cy9jcmVhdGluaW5lLWJsb29kPiB0ZXN0Izpcfjp0ZXh0PUNyZWF0aW5pbmUlMjBpcyUyMGElMjBjaGVtaWNhbCUyMHdhc3RlLGJvZHklMjBlbnRpcmVseSUyMGJ5JTIwdGhlJTIwa2lkbmV5cy4KClpodSwgV2VuZmFuZyBldCBhbC4gIlNlcnVtIExldmVsIG9mIExhY3RhdGUgRGVoeWRyb2dlbmFzZSBpcyBBc3NvY2lhdGVkIHdpdGggQ2FyZGlvdmFzY3VsYXIgRGlzZWFzZSBSaXNrIGFzIERldGVybWluZWQgYnkgdGhlIEZyYW1pbmdoYW0gUmlzayBTY29yZSBhbmQgQXJ0ZXJpYWwgU3RpZmZuZXNzIGluIGEgSGVhbHRoLUV4YW1pbmVkIFBvcHVsYXRpb24gaW4gQ2hpbmEuIiBJbnRlcm5hdGlvbmFsIGpvdXJuYWwgb2YgZ2VuZXJhbCBtZWRpY2luZSB2b2wuIDE1IDExLTE3LiA0IEphbi4gMjAyMiwgPGRvaToxMC4yMTQ3L0lKR00uUzMzNzUxNz4K