library(tidyverse)
library(gtsummary)
library(broom)
library(gt)
view(ncd)

Preview data

head(ncd)

#Interpretation of the Dataset The dataset contains information on six participants, identified by unique participant IDs, with variables including age, sex, residence, education, occupation, and body mass index (BMI). Among them, five participants are male and only one is female, indicating a male-dominated sample. Most of the participants (five out of six) live in urban areas, while only one resides in a rural setting.

In terms of educational background, the participants show varying levels of education — ranging from no formal education to higher education. This suggests a mixed educational profile within the group. Occupations also vary, including service, business, farming, unemployment, and retirement, reflecting diverse socioeconomic conditions.

The ages of the participants range from 31 to 56 years, representing adults in early to late middle age. The BMI values of the participants range from 18.9 to 30.1, with one person classified as obese (BMI ≥ 30), three as overweight (BMI 25–29.9), and two as having a normal BMI (18.5–24.9). This indicates that the majority of participants are either overweight or obese, particularly among the urban male participants.

Overall, the dataset portrays a small, urban-dominated group of adults with varied educational and occupational backgrounds, where excess body weight appears relatively common.

ncd %>% 
   tbl_summary()
Characteristic N = 2201
participant_id 111 (56, 166)
age 50 (38, 67)
sex
    Female 118 (54%)
    Male 102 (46%)
residence
    Rural 133 (60%)
    Urban 87 (40%)
education
    Higher 50 (23%)
    No formal 25 (11%)
    Primary 66 (30%)
    Secondary 79 (36%)
occupation
    Business 46 (21%)
    Farmer 61 (28%)
    Retired 24 (11%)
    Service 66 (30%)
    Unemployed 23 (10%)
bmi 25.4 (21.3, 28.3)
systolic_bp 134 (114, 165)
diastolic_bp 91 (76, 107)
diabetes 51 (23%)
hypertension 84 (38%)
1 Median (Q1, Q3); n (%)

#interpretation The dataset represents a total of 2,201 participants, with a median participant ID of 111 (interquartile range: 56–166), indicating the sample covers a wide range of respondents. The median age is 50 years (IQR: 38–67), suggesting that the majority of participants are middle-aged adults, with some younger and older individuals included.

In terms of sex distribution, 54% of participants are female (n=118) and 46% are male (n=102), showing a slight predominance of females in the study population. Regarding residence, the majority of participants reside in rural areas (60%), while 40% live in urban settings, indicating that the sample is more representative of rural communities.

With respect to educational attainment, 36% of respondents have completed secondary education, followed by 30% with primary education, 23% with higher education, and 11% with no formal education. This distribution reflects a relatively diverse educational profile, though most participants have at least some formal schooling.

In terms of occupation, the largest groups are those engaged in service (30%) and farming (28%), followed by business (21%), retired individuals (11%), and unemployed persons (10%). This suggests that the majority of participants are economically active, with a notable portion involved in agriculture and service-based work.

The median Body Mass Index (BMI) is 25.4 (IQR: 21.3–28.3), which falls within the overweight range according to WHO classification. This indicates that many participants are likely to be overweight, with some individuals in the normal and obese categories as well.

Overall, the data describe a middle-aged, predominantly rural, and moderately educated population, with a balanced gender ratio and a tendency toward overweight BMI levels. The occupational diversity also highlights a mix of professional, agricultural, and informal sector engagement among the respondents.

ncd %>%
  tbl_summary(
    by = residence)
Characteristic Rural
N = 133
1
Urban
N = 87
1
participant_id 108 (64, 156) 115 (44, 176)
age 51 (38, 69) 49 (37, 65)
sex

    Female 74 (56%) 44 (51%)
    Male 59 (44%) 43 (49%)
education

    Higher 33 (25%) 17 (20%)
    No formal 13 (9.8%) 12 (14%)
    Primary 38 (29%) 28 (32%)
    Secondary 49 (37%) 30 (34%)
occupation

    Business 20 (15%) 26 (30%)
    Farmer 39 (29%) 22 (25%)
    Retired 14 (11%) 10 (11%)
    Service 42 (32%) 24 (28%)
    Unemployed 18 (14%) 5 (5.7%)
bmi 25.5 (21.1, 28.3) 24.9 (21.9, 28.4)
systolic_bp 136 (114, 166) 131 (111, 164)
diastolic_bp 91 (74, 104) 93 (77, 108)
diabetes 34 (26%) 17 (20%)
hypertension 55 (41%) 29 (33%)
1 Median (Q1, Q3); n (%)

interpretation

The dataset includes a total of 2,202 participants, of which 1,331 (60%) are from rural areas and 871 (40%) are from urban areas, showing that the study population is more rural-dominated.

The median participant ID for rural respondents is 108 (IQR: 64–156), while for urban respondents it is 115 (IQR: 44–176), suggesting a similar spread of participant identifiers in both groups. The median age among rural participants is 51 years (38–69), slightly higher than that of urban participants at 49 years (37–65). This indicates that the rural group tends to be somewhat older on average.

Regarding sex distribution, females make up a slightly higher proportion in both groups—56% in rural and 51% in urban—showing a near gender balance across both populations.

In terms of education, both groups have comparable patterns. In rural areas, 37% of participants have secondary education, 29% have primary education, 25% have higher education, and 9.8% have no formal education. Similarly, in urban areas, 34% have secondary education, 32% have primary education, 20% have higher education, and 14% have no formal education. This suggests that educational attainment is relatively similar across both settings, though higher education is slightly more common in rural areas in this sample.

Occupational distribution varies more notably. In rural areas, the largest proportions are in service (32%) and farming (29%), followed by business (15%), unemployed (14%), and retired (11%). In contrast, urban residents are more often engaged in business (30%) and service (28%), with fewer in farming (25%), and smaller proportions of retired (11%) and unemployed (5.7%) individuals. This indicates that agriculture dominates in rural settings, while business and formal jobs are more prevalent in urban areas.

The median Body Mass Index (BMI) is 25.5 (21.1–28.3) for rural participants and 24.9 (21.9–28.4) for urban participants — both values fall within the overweight range, suggesting a common tendency toward overweight or obesity in both populations.

Blood pressure readings show that rural participants have a slightly higher median systolic blood pressure (136 mmHg) compared to urban participants (131 mmHg), while diastolic blood pressure is nearly similar, 91 mmHg in rural and 93 mmHg in urban areas.

The prevalence of diabetes is higher among rural participants (26%) compared to urban participants (20%), and hypertension is also more common in the rural group (41%) than in the urban group (33%).

Overall, the descriptive results indicate that the rural participants are slightly older, more often involved in farming or service work, and show higher levels of diabetes and hypertension, along with marginally higher BMI and blood pressure values. In contrast, urban participants tend to engage more in business-related occupations and have slightly lower rates of chronic conditions.

model <- glm( factor(hypertension) ~ age + sex + bmi + residence + education + occupation + diabetes, data = ncd, family = binomial)
tbl_regression(model)
Characteristic log(OR) 95% CI p-value
age 0.00 -0.02, 0.02 0.8
sex


    Female
    Male 0.30 -0.27, 0.87 0.3
bmi -0.01 -0.07, 0.04 0.6
residence


    Rural
    Urban -0.41 -1.0, 0.18 0.2
education


    Higher
    No formal 0.52 -0.48, 1.5 0.3
    Primary 0.05 -0.72, 0.84 0.9
    Secondary 0.09 -0.66, 0.85 0.8
occupation


    Business
    Farmer -0.41 -1.2, 0.41 0.3
    Retired -0.56 -1.7, 0.49 0.3
    Service -0.12 -0.91, 0.67 0.8
    Unemployed -0.26 -1.4, 0.80 0.6
diabetes


    No
    Yes 0.06 -0.61, 0.71 0.9
Abbreviations: CI = Confidence Interval, OR = Odds Ratio

#interpretation The table presents the results of a logistic regression analysis showing the log odds ratios (log[OR]), their 95% confidence intervals (CI), and p-values for the relationship between selected characteristics and the outcome variable.

The results indicate that age has a log(OR) of 0.00 (95% CI: -0.02 to 0.02, p = 0.8), suggesting that age has no significant association with the outcome. Similarly, sex shows that males have a log(OR) of 0.30 (95% CI: -0.27 to 0.87, p = 0.3) compared to females (reference group), indicating that although males have slightly higher odds, the association is not statistically significant.

For BMI, the log(OR) is -0.01 (95% CI: -0.07 to 0.04, p = 0.6), showing no significant relationship between BMI and the outcome variable.

In terms of residence, urban participants have a log(OR) of -0.41 (95% CI: -1.0 to 0.18, p = 0.2) compared to rural participants. This suggests that living in an urban area may be associated with lower odds of the outcome, but the association is not statistically significant.

For education, using higher education as the reference group, those with no formal education (log[OR] = 0.52, 95% CI: -0.48 to 1.5, p = 0.3), primary education (log[OR] = 0.05, 95% CI: -0.72 to 0.84, p = 0.9), and secondary education (log[OR] = 0.09, 95% CI: -0.66 to 0.85, p = 0.8) all show no significant association with the outcome.

Regarding occupation, farmers have a log(OR) of -0.41 (95% CI: -1.2 to 0.41, p = 0.3) compared to those in business (reference group). This suggests that farmers may have slightly lower odds of the outcome, but again, this association is not statistically significant.

🔍 Summary of Findings

None of the variables — age, sex, BMI, residence, education, or occupation — show a statistically significant relationship with the outcome (all p-values > 0.05).

The confidence intervals for all predictors include zero, indicating no strong evidence of effect.

While some variables (e.g., urban residence, farming occupation) show a tendency toward lower odds, these differences are not meaningful statistically.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShndHN1bW1hcnkpDQpsaWJyYXJ5KGJyb29tKQ0KbGlicmFyeShndCkNCmBgYA0KDQpgYGB7cn0NCnZpZXcobmNkKQ0KYGBgDQoNCiMgUHJldmlldyBkYXRhDQoNCmBgYHtyfQ0KaGVhZChuY2QpDQpgYGANCg0KI0ludGVycHJldGF0aW9uIG9mIHRoZSBEYXRhc2V0DQpUaGUgZGF0YXNldCBjb250YWlucyBpbmZvcm1hdGlvbiBvbiBzaXggcGFydGljaXBhbnRzLCBpZGVudGlmaWVkIGJ5IHVuaXF1ZSBwYXJ0aWNpcGFudCBJRHMsIHdpdGggdmFyaWFibGVzIGluY2x1ZGluZyBhZ2UsIHNleCwgcmVzaWRlbmNlLCBlZHVjYXRpb24sIG9jY3VwYXRpb24sIGFuZCBib2R5IG1hc3MgaW5kZXggKEJNSSkuIEFtb25nIHRoZW0sIGZpdmUgcGFydGljaXBhbnRzIGFyZSBtYWxlIGFuZCBvbmx5IG9uZSBpcyBmZW1hbGUsIGluZGljYXRpbmcgYSBtYWxlLWRvbWluYXRlZCBzYW1wbGUuIE1vc3Qgb2YgdGhlIHBhcnRpY2lwYW50cyAoZml2ZSBvdXQgb2Ygc2l4KSBsaXZlIGluIHVyYmFuIGFyZWFzLCB3aGlsZSBvbmx5IG9uZSByZXNpZGVzIGluIGEgcnVyYWwgc2V0dGluZy4NCg0KSW4gdGVybXMgb2YgZWR1Y2F0aW9uYWwgYmFja2dyb3VuZCwgdGhlIHBhcnRpY2lwYW50cyBzaG93IHZhcnlpbmcgbGV2ZWxzIG9mIGVkdWNhdGlvbiDigJQgcmFuZ2luZyBmcm9tIG5vIGZvcm1hbCBlZHVjYXRpb24gdG8gaGlnaGVyIGVkdWNhdGlvbi4gVGhpcyBzdWdnZXN0cyBhIG1peGVkIGVkdWNhdGlvbmFsIHByb2ZpbGUgd2l0aGluIHRoZSBncm91cC4gT2NjdXBhdGlvbnMgYWxzbyB2YXJ5LCBpbmNsdWRpbmcgc2VydmljZSwgYnVzaW5lc3MsIGZhcm1pbmcsIHVuZW1wbG95bWVudCwgYW5kIHJldGlyZW1lbnQsIHJlZmxlY3RpbmcgZGl2ZXJzZSBzb2Npb2Vjb25vbWljIGNvbmRpdGlvbnMuDQoNClRoZSBhZ2VzIG9mIHRoZSBwYXJ0aWNpcGFudHMgcmFuZ2UgZnJvbSAzMSB0byA1NiB5ZWFycywgcmVwcmVzZW50aW5nIGFkdWx0cyBpbiBlYXJseSB0byBsYXRlIG1pZGRsZSBhZ2UuIFRoZSBCTUkgdmFsdWVzIG9mIHRoZSBwYXJ0aWNpcGFudHMgcmFuZ2UgZnJvbSAxOC45IHRvIDMwLjEsIHdpdGggb25lIHBlcnNvbiBjbGFzc2lmaWVkIGFzIG9iZXNlIChCTUkg4omlIDMwKSwgdGhyZWUgYXMgb3ZlcndlaWdodCAoQk1JIDI14oCTMjkuOSksIGFuZCB0d28gYXMgaGF2aW5nIGEgbm9ybWFsIEJNSSAoMTguNeKAkzI0LjkpLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgYXJlIGVpdGhlciBvdmVyd2VpZ2h0IG9yIG9iZXNlLCBwYXJ0aWN1bGFybHkgYW1vbmcgdGhlIHVyYmFuIG1hbGUgcGFydGljaXBhbnRzLg0KDQpPdmVyYWxsLCB0aGUgZGF0YXNldCBwb3J0cmF5cyBhIHNtYWxsLCB1cmJhbi1kb21pbmF0ZWQgZ3JvdXAgb2YgYWR1bHRzIHdpdGggdmFyaWVkIGVkdWNhdGlvbmFsIGFuZCBvY2N1cGF0aW9uYWwgYmFja2dyb3VuZHMsIHdoZXJlIGV4Y2VzcyBib2R5IHdlaWdodCBhcHBlYXJzIHJlbGF0aXZlbHkgY29tbW9uLg0KDQpgYGB7cn0NCm5jZCAlPiUgDQogICB0Ymxfc3VtbWFyeSgpDQpgYGANCg0KI2ludGVycHJldGF0aW9uIFRoZSBkYXRhc2V0IA0KcmVwcmVzZW50cyBhIHRvdGFsIG9mIDIsMjAxIHBhcnRpY2lwYW50cywgd2l0aCBhIG1lZGlhbiBwYXJ0aWNpcGFudCBJRCBvZiAxMTEgKGludGVycXVhcnRpbGUgcmFuZ2U6IDU24oCTMTY2KSwgaW5kaWNhdGluZyB0aGUgc2FtcGxlIGNvdmVycyBhIHdpZGUgcmFuZ2Ugb2YgcmVzcG9uZGVudHMuIFRoZSBtZWRpYW4gYWdlIGlzIDUwIHllYXJzIChJUVI6IDM44oCTNjcpLCBzdWdnZXN0aW5nIHRoYXQgdGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyBhcmUgbWlkZGxlLWFnZWQgYWR1bHRzLCB3aXRoIHNvbWUgeW91bmdlciBhbmQgb2xkZXIgaW5kaXZpZHVhbHMgaW5jbHVkZWQuDQoNCkluIHRlcm1zIG9mIHNleCBkaXN0cmlidXRpb24sIDU0JSBvZiBwYXJ0aWNpcGFudHMgYXJlIGZlbWFsZSAobj0xMTgpIGFuZCA0NiUgYXJlIG1hbGUgKG49MTAyKSwgc2hvd2luZyBhIHNsaWdodCBwcmVkb21pbmFuY2Ugb2YgZmVtYWxlcyBpbiB0aGUgc3R1ZHkgcG9wdWxhdGlvbi4gUmVnYXJkaW5nIHJlc2lkZW5jZSwgdGhlIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyByZXNpZGUgaW4gcnVyYWwgYXJlYXMgKDYwJSksIHdoaWxlIDQwJSBsaXZlIGluIHVyYmFuIHNldHRpbmdzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHNhbXBsZSBpcyBtb3JlIHJlcHJlc2VudGF0aXZlIG9mIHJ1cmFsIGNvbW11bml0aWVzLg0KDQpXaXRoIHJlc3BlY3QgdG8gZWR1Y2F0aW9uYWwgYXR0YWlubWVudCwgMzYlIG9mIHJlc3BvbmRlbnRzIGhhdmUgY29tcGxldGVkIHNlY29uZGFyeSBlZHVjYXRpb24sIGZvbGxvd2VkIGJ5IDMwJSB3aXRoIHByaW1hcnkgZWR1Y2F0aW9uLCAyMyUgd2l0aCBoaWdoZXIgZWR1Y2F0aW9uLCBhbmQgMTElIHdpdGggbm8gZm9ybWFsIGVkdWNhdGlvbi4gVGhpcyBkaXN0cmlidXRpb24gcmVmbGVjdHMgYSByZWxhdGl2ZWx5IGRpdmVyc2UgZWR1Y2F0aW9uYWwgcHJvZmlsZSwgdGhvdWdoIG1vc3QgcGFydGljaXBhbnRzIGhhdmUgYXQgbGVhc3Qgc29tZSBmb3JtYWwgc2Nob29saW5nLg0KDQpJbiB0ZXJtcyBvZiBvY2N1cGF0aW9uLCB0aGUgbGFyZ2VzdCBncm91cHMgYXJlIHRob3NlIGVuZ2FnZWQgaW4gc2VydmljZSAoMzAlKSBhbmQgZmFybWluZyAoMjglKSwgZm9sbG93ZWQgYnkgYnVzaW5lc3MgKDIxJSksIHJldGlyZWQgaW5kaXZpZHVhbHMgKDExJSksIGFuZCB1bmVtcGxveWVkIHBlcnNvbnMgKDEwJSkuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIGFyZSBlY29ub21pY2FsbHkgYWN0aXZlLCB3aXRoIGEgbm90YWJsZSBwb3J0aW9uIGludm9sdmVkIGluIGFncmljdWx0dXJlIGFuZCBzZXJ2aWNlLWJhc2VkIHdvcmsuDQoNClRoZSBtZWRpYW4gQm9keSBNYXNzIEluZGV4IChCTUkpIGlzIDI1LjQgKElRUjogMjEuM+KAkzI4LjMpLCB3aGljaCBmYWxscyB3aXRoaW4gdGhlIG92ZXJ3ZWlnaHQgcmFuZ2UgYWNjb3JkaW5nIHRvIFdITyBjbGFzc2lmaWNhdGlvbi4gVGhpcyBpbmRpY2F0ZXMgdGhhdCBtYW55IHBhcnRpY2lwYW50cyBhcmUgbGlrZWx5IHRvIGJlIG92ZXJ3ZWlnaHQsIHdpdGggc29tZSBpbmRpdmlkdWFscyBpbiB0aGUgbm9ybWFsIGFuZCBvYmVzZSBjYXRlZ29yaWVzIGFzIHdlbGwuDQoNCk92ZXJhbGwsIHRoZSBkYXRhIGRlc2NyaWJlIGEgbWlkZGxlLWFnZWQsIHByZWRvbWluYW50bHkgcnVyYWwsIGFuZCBtb2RlcmF0ZWx5IGVkdWNhdGVkIHBvcHVsYXRpb24sIHdpdGggYSBiYWxhbmNlZCBnZW5kZXIgcmF0aW8gYW5kIGEgdGVuZGVuY3kgdG93YXJkIG92ZXJ3ZWlnaHQgQk1JIGxldmVscy4gVGhlIG9jY3VwYXRpb25hbCBkaXZlcnNpdHkgYWxzbyBoaWdobGlnaHRzIGEgbWl4IG9mIHByb2Zlc3Npb25hbCwgYWdyaWN1bHR1cmFsLCBhbmQgaW5mb3JtYWwgc2VjdG9yIGVuZ2FnZW1lbnQgYW1vbmcgdGhlIHJlc3BvbmRlbnRzLg0KDQpgYGB7cn0NCm5jZCAlPiUNCiAgdGJsX3N1bW1hcnkoDQogICAgYnkgPSByZXNpZGVuY2UpDQpgYGANCg0KIyBpbnRlcnByZXRhdGlvbg0KVGhlIGRhdGFzZXQgaW5jbHVkZXMgYSB0b3RhbCBvZiAyLDIwMiBwYXJ0aWNpcGFudHMsIG9mIHdoaWNoIDEsMzMxICg2MCUpIGFyZSBmcm9tIHJ1cmFsIGFyZWFzIGFuZCA4NzEgKDQwJSkgYXJlIGZyb20gdXJiYW4gYXJlYXMsIHNob3dpbmcgdGhhdCB0aGUgc3R1ZHkgcG9wdWxhdGlvbiBpcyBtb3JlIHJ1cmFsLWRvbWluYXRlZC4NCg0KVGhlIG1lZGlhbiBwYXJ0aWNpcGFudCBJRCBmb3IgcnVyYWwgcmVzcG9uZGVudHMgaXMgMTA4IChJUVI6IDY04oCTMTU2KSwgd2hpbGUgZm9yIHVyYmFuIHJlc3BvbmRlbnRzIGl0IGlzIDExNSAoSVFSOiA0NOKAkzE3NiksIHN1Z2dlc3RpbmcgYSBzaW1pbGFyIHNwcmVhZCBvZiBwYXJ0aWNpcGFudCBpZGVudGlmaWVycyBpbiBib3RoIGdyb3Vwcy4gVGhlIG1lZGlhbiBhZ2UgYW1vbmcgcnVyYWwgcGFydGljaXBhbnRzIGlzIDUxIHllYXJzICgzOOKAkzY5KSwgc2xpZ2h0bHkgaGlnaGVyIHRoYW4gdGhhdCBvZiB1cmJhbiBwYXJ0aWNpcGFudHMgYXQgNDkgeWVhcnMgKDM34oCTNjUpLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBydXJhbCBncm91cCB0ZW5kcyB0byBiZSBzb21ld2hhdCBvbGRlciBvbiBhdmVyYWdlLg0KDQpSZWdhcmRpbmcgc2V4IGRpc3RyaWJ1dGlvbiwgZmVtYWxlcyBtYWtlIHVwIGEgc2xpZ2h0bHkgaGlnaGVyIHByb3BvcnRpb24gaW4gYm90aCBncm91cHPigJQ1NiUgaW4gcnVyYWwgYW5kIDUxJSBpbiB1cmJhbuKAlHNob3dpbmcgYSBuZWFyIGdlbmRlciBiYWxhbmNlIGFjcm9zcyBib3RoIHBvcHVsYXRpb25zLg0KDQpJbiB0ZXJtcyBvZiBlZHVjYXRpb24sIGJvdGggZ3JvdXBzIGhhdmUgY29tcGFyYWJsZSBwYXR0ZXJucy4gSW4gcnVyYWwgYXJlYXMsIDM3JSBvZiBwYXJ0aWNpcGFudHMgaGF2ZSBzZWNvbmRhcnkgZWR1Y2F0aW9uLCAyOSUgaGF2ZSBwcmltYXJ5IGVkdWNhdGlvbiwgMjUlIGhhdmUgaGlnaGVyIGVkdWNhdGlvbiwgYW5kIDkuOCUgaGF2ZSBubyBmb3JtYWwgZWR1Y2F0aW9uLiBTaW1pbGFybHksIGluIHVyYmFuIGFyZWFzLCAzNCUgaGF2ZSBzZWNvbmRhcnkgZWR1Y2F0aW9uLCAzMiUgaGF2ZSBwcmltYXJ5IGVkdWNhdGlvbiwgMjAlIGhhdmUgaGlnaGVyIGVkdWNhdGlvbiwgYW5kIDE0JSBoYXZlIG5vIGZvcm1hbCBlZHVjYXRpb24uIFRoaXMgc3VnZ2VzdHMgdGhhdCBlZHVjYXRpb25hbCBhdHRhaW5tZW50IGlzIHJlbGF0aXZlbHkgc2ltaWxhciBhY3Jvc3MgYm90aCBzZXR0aW5ncywgdGhvdWdoIGhpZ2hlciBlZHVjYXRpb24gaXMgc2xpZ2h0bHkgbW9yZSBjb21tb24gaW4gcnVyYWwgYXJlYXMgaW4gdGhpcyBzYW1wbGUuDQoNCk9jY3VwYXRpb25hbCBkaXN0cmlidXRpb24gdmFyaWVzIG1vcmUgbm90YWJseS4gSW4gcnVyYWwgYXJlYXMsIHRoZSBsYXJnZXN0IHByb3BvcnRpb25zIGFyZSBpbiBzZXJ2aWNlICgzMiUpIGFuZCBmYXJtaW5nICgyOSUpLCBmb2xsb3dlZCBieSBidXNpbmVzcyAoMTUlKSwgdW5lbXBsb3llZCAoMTQlKSwgYW5kIHJldGlyZWQgKDExJSkuIEluIGNvbnRyYXN0LCB1cmJhbiByZXNpZGVudHMgYXJlIG1vcmUgb2Z0ZW4gZW5nYWdlZCBpbiBidXNpbmVzcyAoMzAlKSBhbmQgc2VydmljZSAoMjglKSwgd2l0aCBmZXdlciBpbiBmYXJtaW5nICgyNSUpLCBhbmQgc21hbGxlciBwcm9wb3J0aW9ucyBvZiByZXRpcmVkICgxMSUpIGFuZCB1bmVtcGxveWVkICg1LjclKSBpbmRpdmlkdWFscy4gVGhpcyBpbmRpY2F0ZXMgdGhhdCBhZ3JpY3VsdHVyZSBkb21pbmF0ZXMgaW4gcnVyYWwgc2V0dGluZ3MsIHdoaWxlIGJ1c2luZXNzIGFuZCBmb3JtYWwgam9icyBhcmUgbW9yZSBwcmV2YWxlbnQgaW4gdXJiYW4gYXJlYXMuDQoNClRoZSBtZWRpYW4gQm9keSBNYXNzIEluZGV4IChCTUkpIGlzIDI1LjUgKDIxLjHigJMyOC4zKSBmb3IgcnVyYWwgcGFydGljaXBhbnRzIGFuZCAyNC45ICgyMS454oCTMjguNCkgZm9yIHVyYmFuIHBhcnRpY2lwYW50cyDigJQgYm90aCB2YWx1ZXMgZmFsbCB3aXRoaW4gdGhlIG92ZXJ3ZWlnaHQgcmFuZ2UsIHN1Z2dlc3RpbmcgYSBjb21tb24gdGVuZGVuY3kgdG93YXJkIG92ZXJ3ZWlnaHQgb3Igb2Jlc2l0eSBpbiBib3RoIHBvcHVsYXRpb25zLg0KDQpCbG9vZCBwcmVzc3VyZSByZWFkaW5ncyBzaG93IHRoYXQgcnVyYWwgcGFydGljaXBhbnRzIGhhdmUgYSBzbGlnaHRseSBoaWdoZXIgbWVkaWFuIHN5c3RvbGljIGJsb29kIHByZXNzdXJlICgxMzYgbW1IZykgY29tcGFyZWQgdG8gdXJiYW4gcGFydGljaXBhbnRzICgxMzEgbW1IZyksIHdoaWxlIGRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSBpcyBuZWFybHkgc2ltaWxhciwgOTEgbW1IZyBpbiBydXJhbCBhbmQgOTMgbW1IZyBpbiB1cmJhbiBhcmVhcy4NCg0KVGhlIHByZXZhbGVuY2Ugb2YgZGlhYmV0ZXMgaXMgaGlnaGVyIGFtb25nIHJ1cmFsIHBhcnRpY2lwYW50cyAoMjYlKSBjb21wYXJlZCB0byB1cmJhbiBwYXJ0aWNpcGFudHMgKDIwJSksIGFuZCBoeXBlcnRlbnNpb24gaXMgYWxzbyBtb3JlIGNvbW1vbiBpbiB0aGUgcnVyYWwgZ3JvdXAgKDQxJSkgdGhhbiBpbiB0aGUgdXJiYW4gZ3JvdXAgKDMzJSkuDQoNCk92ZXJhbGwsIHRoZSBkZXNjcmlwdGl2ZSByZXN1bHRzIGluZGljYXRlIHRoYXQgdGhlIHJ1cmFsIHBhcnRpY2lwYW50cyBhcmUgc2xpZ2h0bHkgb2xkZXIsIG1vcmUgb2Z0ZW4gaW52b2x2ZWQgaW4gZmFybWluZyBvciBzZXJ2aWNlIHdvcmssIGFuZCBzaG93IGhpZ2hlciBsZXZlbHMgb2YgZGlhYmV0ZXMgYW5kIGh5cGVydGVuc2lvbiwgYWxvbmcgd2l0aCBtYXJnaW5hbGx5IGhpZ2hlciBCTUkgYW5kIGJsb29kIHByZXNzdXJlIHZhbHVlcy4gSW4gY29udHJhc3QsIHVyYmFuIHBhcnRpY2lwYW50cyB0ZW5kIHRvIGVuZ2FnZSBtb3JlIGluIGJ1c2luZXNzLXJlbGF0ZWQgb2NjdXBhdGlvbnMgYW5kIGhhdmUgc2xpZ2h0bHkgbG93ZXIgcmF0ZXMgb2YgY2hyb25pYyBjb25kaXRpb25zLg0KDQpgYGB7cn0NCm1vZGVsIDwtIGdsbSggZmFjdG9yKGh5cGVydGVuc2lvbikgfiBhZ2UgKyBzZXggKyBibWkgKyByZXNpZGVuY2UgKyBlZHVjYXRpb24gKyBvY2N1cGF0aW9uICsgZGlhYmV0ZXMsIGRhdGEgPSBuY2QsIGZhbWlseSA9IGJpbm9taWFsKQ0KdGJsX3JlZ3Jlc3Npb24obW9kZWwpDQpgYGANCg0KI2ludGVycHJldGF0aW9uIFRoZSB0YWJsZSBwcmVzZW50cyB0aGUgcmVzdWx0cyBvZiBhIGxvZ2lzdGljIHJlZ3Jlc3Npb24gYW5hbHlzaXMgc2hvd2luZyB0aGUgbG9nIG9kZHMgcmF0aW9zIChsb2dbT1JdKSwgdGhlaXIgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIChDSSksIGFuZCBwLXZhbHVlcyBmb3IgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHNlbGVjdGVkIGNoYXJhY3RlcmlzdGljcyBhbmQgdGhlIG91dGNvbWUgdmFyaWFibGUuDQoNClRoZSByZXN1bHRzIGluZGljYXRlIHRoYXQgYWdlIGhhcyBhIGxvZyhPUikgb2YgMC4wMCAoOTUlIENJOiAtMC4wMiB0byAwLjAyLCBwID0gMC44KSwgc3VnZ2VzdGluZyB0aGF0IGFnZSBoYXMgbm8gc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24gd2l0aCB0aGUgb3V0Y29tZS4gU2ltaWxhcmx5LCBzZXggc2hvd3MgdGhhdCBtYWxlcyBoYXZlIGEgbG9nKE9SKSBvZiAwLjMwICg5NSUgQ0k6IC0wLjI3IHRvIDAuODcsIHAgPSAwLjMpIGNvbXBhcmVkIHRvIGZlbWFsZXMgKHJlZmVyZW5jZSBncm91cCksIGluZGljYXRpbmcgdGhhdCBhbHRob3VnaCBtYWxlcyBoYXZlIHNsaWdodGx5IGhpZ2hlciBvZGRzLCB0aGUgYXNzb2NpYXRpb24gaXMgbm90IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQuDQoNCkZvciBCTUksIHRoZSBsb2coT1IpIGlzIC0wLjAxICg5NSUgQ0k6IC0wLjA3IHRvIDAuMDQsIHAgPSAwLjYpLCBzaG93aW5nIG5vIHNpZ25pZmljYW50IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEJNSSBhbmQgdGhlIG91dGNvbWUgdmFyaWFibGUuDQoNCkluIHRlcm1zIG9mIHJlc2lkZW5jZSwgdXJiYW4gcGFydGljaXBhbnRzIGhhdmUgYSBsb2coT1IpIG9mIC0wLjQxICg5NSUgQ0k6IC0xLjAgdG8gMC4xOCwgcCA9IDAuMikgY29tcGFyZWQgdG8gcnVyYWwgcGFydGljaXBhbnRzLiBUaGlzIHN1Z2dlc3RzIHRoYXQgbGl2aW5nIGluIGFuIHVyYmFuIGFyZWEgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aCBsb3dlciBvZGRzIG9mIHRoZSBvdXRjb21lLCBidXQgdGhlIGFzc29jaWF0aW9uIGlzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50Lg0KDQpGb3IgZWR1Y2F0aW9uLCB1c2luZyBoaWdoZXIgZWR1Y2F0aW9uIGFzIHRoZSByZWZlcmVuY2UgZ3JvdXAsIHRob3NlIHdpdGggbm8gZm9ybWFsIGVkdWNhdGlvbiAobG9nW09SXSA9IDAuNTIsIDk1JSBDSTogLTAuNDggdG8gMS41LCBwID0gMC4zKSwgcHJpbWFyeSBlZHVjYXRpb24gKGxvZ1tPUl0gPSAwLjA1LCA5NSUgQ0k6IC0wLjcyIHRvIDAuODQsIHAgPSAwLjkpLCBhbmQgc2Vjb25kYXJ5IGVkdWNhdGlvbiAobG9nW09SXSA9IDAuMDksIDk1JSBDSTogLTAuNjYgdG8gMC44NSwgcCA9IDAuOCkgYWxsIHNob3cgbm8gc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24gd2l0aCB0aGUgb3V0Y29tZS4NCg0KUmVnYXJkaW5nIG9jY3VwYXRpb24sIGZhcm1lcnMgaGF2ZSBhIGxvZyhPUikgb2YgLTAuNDEgKDk1JSBDSTogLTEuMiB0byAwLjQxLCBwID0gMC4zKSBjb21wYXJlZCB0byB0aG9zZSBpbiBidXNpbmVzcyAocmVmZXJlbmNlIGdyb3VwKS4gVGhpcyBzdWdnZXN0cyB0aGF0IGZhcm1lcnMgbWF5IGhhdmUgc2xpZ2h0bHkgbG93ZXIgb2RkcyBvZiB0aGUgb3V0Y29tZSwgYnV0IGFnYWluLCB0aGlzIGFzc29jaWF0aW9uIGlzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50Lg0KDQrwn5SNIFN1bW1hcnkgb2YgRmluZGluZ3MNCg0KTm9uZSBvZiB0aGUgdmFyaWFibGVzIOKAlCBhZ2UsIHNleCwgQk1JLCByZXNpZGVuY2UsIGVkdWNhdGlvbiwgb3Igb2NjdXBhdGlvbiDigJQgc2hvdyBhIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgcmVsYXRpb25zaGlwIHdpdGggdGhlIG91dGNvbWUgKGFsbCBwLXZhbHVlcyBcPiAwLjA1KS4NCg0KVGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGZvciBhbGwgcHJlZGljdG9ycyBpbmNsdWRlIHplcm8sIGluZGljYXRpbmcgbm8gc3Ryb25nIGV2aWRlbmNlIG9mIGVmZmVjdC4NCg0KV2hpbGUgc29tZSB2YXJpYWJsZXMgKGUuZy4sIHVyYmFuIHJlc2lkZW5jZSwgZmFybWluZyBvY2N1cGF0aW9uKSBzaG93IGEgdGVuZGVuY3kgdG93YXJkIGxvd2VyIG9kZHMsIHRoZXNlIGRpZmZlcmVuY2VzIGFyZSBub3QgbWVhbmluZ2Z1bCBzdGF0aXN0aWNhbGx5Lg0K