Introduction
This data set contains information on employee attrition. It has 1470
rows and 35 columns. The variables include age, gender, job
satisfaction, environment satisfaction, education field, job role,
income, overtime, percentage salary hike, tenure, training time, years
in current role, marital status, and more. With these variables, this
data set can be used to predict turnover, and find differences between
the group that stayed or left.
dat <- read.csv(file="https://github.com/chinwex/STA553/raw/main/w10/EmployeeAttritionData.csv")
Objectives of this
Analysis
The following are the questions and objectives that describe and
explain the main purpose of this analysis.
- To predict which employees are more likely to leave.
- What is the percentage of employees that have left the company?
- Are there any notable patterns in terms of employee attrition based
on gender, age, department, job role and job satisfaction?
Data Management
A binary variable Attrition count was added to the
dataset which takes the value of 0 and 1. The value, 0, represents
people who are still with the company whereas 1 represents people who
left. Another variable, Age category was created which
combined the ages into 5 different groups: less than 25, 25 to 34, 35 to
44, 45 to 55 and 55 and above.
dat$Attritioncount <- ifelse(dat$Attrition == "Yes", 1, 0)
dat$Agecat <- ifelse(dat$Age < 25, "Less than 25",
ifelse(dat$Age >= 25 & dat$Age < 35, "25-34",
ifelse(dat$Age >= 35 & dat$Age < 45, "35-44",
ifelse(dat$Age >= 45 & dat$Age < 55, "45-54", "55 and Above"))))
write.csv(dat, file = "C:\\Users\\echef\\Documents\\STA553\\week 10\\Attrition_data.csv")
The final dataset can be found here: https://github.com/chinwex/STA553/raw/main/w10/Attrition_data.csv
Employee Attrition
Dashboard
This dashboard was designed to identify the patterns of attrition in
the company based on several factors such as gender, age, job role, job
satisfaction, monthly income, department, and years at the company.
Attrition
Summary
- The total number of employees in the company = 1470
- Average Age of Employees = 37
- Average monthly income = 6503
- Average hourly rate = 66
- The number of employees recorded to have left = 237
- Percentage Attrition = 16.1%
Attrition by
Department and Job Role
The bulk of employees that leave the organisation work in research
and development. Positions mainly affected are the Laboratory Technician
and Research Scientist roles. Employees in the department of Human
Resources have the lowest attrition rates, which may be because they are
also the smallest department in the organisation. Overall, managers have
the company’s lowest attrition rates.
Attrition by Age
Employees whose ages lie between 25 and 34 are most likely to leave.
That may be due to the fact that they are the group with the highest
number of workers whereas those that are 55 or older are most likely to
stay.
Attrition by Age and
Gender
In all age groups, males have higher attrition counts than females.
Males who are between the ages of 25 and 34 have the highest attrition
counts while females who are 55 or older have the lowest attrition
counts.
Monthly Income by
Years at Company
There is a linear association between monthly income and years at the
company. The higher the number of years spent by a worker in the
company, the more the monthly income. For example, employees who have
spent 37 years in the company, have a median monthly income of 13,872
while those who have spent just 1 year, have a median monthly income of
3,346. Also, attrition rates are higher among people with lower working
years at the company.
Attrition by Job
Satisfaction
There are 4 levels of job satisfaction - low, medium, high and very
high. From the dashboard, this was assessed with a line plot showing the
total attrition at each job satisfaction level for every department.
Irrespective of the job satisfaction level, employees from Human
resources still maintained the lowest attrition counts. Overall, workers
with high job satisfaction have the highest attrition counts.
Employee Attrition
StoryPoint
LS0tDQp0aXRsZTogIkFuYWx5dGljIERhc2JvYXJkcyB3aXRoIFRhYmxlYXUiDQphdXRob3I6ICJFY2hlZnUgQ2hpbndlbmR1Ig0KZGF0ZTogIjQvOS8yMDI0Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIGZpZ193aWR0aDogNA0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRvY19jb2xsYXBzZWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgICB0aGVtZTogcmVhZGFibGUNCi0tLQ0KICAgICAgDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KZGl2I1RPQyBsaSB7DQogICAgbGlzdC1zdHlsZTpub25lOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsNCn0NCmgxLnRpdGxlIHsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuYXV0aG9yIHsgDQogIC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoNC5kYXRlIHsgDQogIC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDEgeyANCiAgICAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMjJweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpoMiB7IA0KICAgIC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxOHB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQpoMyB7IA0KICAgIC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNXB4Ow0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIGZvbnQtZmFjZTogYm9sZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KaDQgeyANCiAgICAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogZGFya3JlZDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KICAgLyogY2VudGVyIG1hcHMgdXNpbmcgY2h1bmsgb3B0aW9uOiBmaWcuYWxpZ249J2NlbnRlcicgKi8NCi5odG1sLXdpZGdldCB7DQogICAgbWFyZ2luOiBhdXRvOw0KfQ0KPC9zdHlsZT4NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQoNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUUsICAgDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQSkNCmBgYA0KDQoNCiMgSW50cm9kdWN0aW9uDQpUaGlzIGRhdGEgc2V0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIGVtcGxveWVlIGF0dHJpdGlvbi4gSXQgaGFzIDE0NzAgcm93cyBhbmQgMzUgY29sdW1ucy4gVGhlIHZhcmlhYmxlcyBpbmNsdWRlIGFnZSwgZ2VuZGVyLCBqb2Igc2F0aXNmYWN0aW9uLCBlbnZpcm9ubWVudCBzYXRpc2ZhY3Rpb24sIGVkdWNhdGlvbiBmaWVsZCwgam9iIHJvbGUsIGluY29tZSwgb3ZlcnRpbWUsIHBlcmNlbnRhZ2Ugc2FsYXJ5IGhpa2UsIHRlbnVyZSwgdHJhaW5pbmcgdGltZSwgeWVhcnMgaW4gY3VycmVudCByb2xlLCBtYXJpdGFsIHN0YXR1cywgYW5kIG1vcmUuIFdpdGggdGhlc2UgdmFyaWFibGVzLCB0aGlzIGRhdGEgc2V0IGNhbiBiZSB1c2VkIHRvIHByZWRpY3QgdHVybm92ZXIsIGFuZCBmaW5kIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGdyb3VwIHRoYXQgc3RheWVkIG9yIGxlZnQuDQoNCmBgYHtyfQ0KZGF0IDwtIHJlYWQuY3N2KGZpbGU9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaGlud2V4L1NUQTU1My9yYXcvbWFpbi93MTAvRW1wbG95ZWVBdHRyaXRpb25EYXRhLmNzdiIpDQpgYGANCg0KIyMgT2JqZWN0aXZlcyBvZiB0aGlzIEFuYWx5c2lzDQoNClRoZSBmb2xsb3dpbmcgYXJlIHRoZSBxdWVzdGlvbnMgYW5kIG9iamVjdGl2ZXMgdGhhdCBkZXNjcmliZSBhbmQgZXhwbGFpbiB0aGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgYW5hbHlzaXMuDQoNCjEuIFRvIHByZWRpY3Qgd2hpY2ggZW1wbG95ZWVzIGFyZSBtb3JlIGxpa2VseSB0byBsZWF2ZS4NCjIuIFdoYXQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgZW1wbG95ZWVzIHRoYXQgaGF2ZSBsZWZ0IHRoZSBjb21wYW55Pw0KMy4gQXJlIHRoZXJlIGFueSBub3RhYmxlIHBhdHRlcm5zIGluIHRlcm1zIG9mIGVtcGxveWVlIGF0dHJpdGlvbiBiYXNlZCBvbiBnZW5kZXIsIGFnZSwgZGVwYXJ0bWVudCwgam9iIHJvbGUgYW5kIGpvYiBzYXRpc2ZhY3Rpb24/DQoNCiMjIERhdGEgTWFuYWdlbWVudA0KQSBiaW5hcnkgdmFyaWFibGUgYEF0dHJpdGlvbiBjb3VudGAgd2FzIGFkZGVkIHRvIHRoZSBkYXRhc2V0IHdoaWNoIHRha2VzIHRoZSB2YWx1ZSBvZiAwIGFuZCAxLiBUaGUgdmFsdWUsIDAsIHJlcHJlc2VudHMgcGVvcGxlIHdobyBhcmUgc3RpbGwgd2l0aCB0aGUgY29tcGFueSB3aGVyZWFzIDEgcmVwcmVzZW50cyBwZW9wbGUgd2hvIGxlZnQuDQpBbm90aGVyIHZhcmlhYmxlLCBgQWdlIGNhdGVnb3J5YCB3YXMgY3JlYXRlZCB3aGljaCBjb21iaW5lZCB0aGUgYWdlcyBpbnRvIDUgZGlmZmVyZW50IGdyb3VwczogbGVzcyB0aGFuIDI1LCAyNSB0byAzNCwgMzUgdG8gNDQsIDQ1IHRvIDU1IGFuZCA1NSBhbmQgYWJvdmUuDQoNCmBgYHtyfQ0KZGF0JEF0dHJpdGlvbmNvdW50IDwtIGlmZWxzZShkYXQkQXR0cml0aW9uID09ICJZZXMiLCAxLCAwKQ0KZGF0JEFnZWNhdCA8LSBpZmVsc2UoZGF0JEFnZSA8IDI1LCAiTGVzcyB0aGFuIDI1IiwNCiAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkYXQkQWdlID49IDI1ICYgZGF0JEFnZSA8IDM1LCAiMjUtMzQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkYXQkQWdlID49IDM1ICYgZGF0JEFnZSA8IDQ1LCAiMzUtNDQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZGF0JEFnZSA+PSA0NSAmIGRhdCRBZ2UgPCA1NSwgIjQ1LTU0IiwgIjU1IGFuZCBBYm92ZSIpKSkpDQoNCmBgYA0KDQpgYGB7cn0NCndyaXRlLmNzdihkYXQsIGZpbGUgPSAiQzpcXFVzZXJzXFxlY2hlZlxcRG9jdW1lbnRzXFxTVEE1NTNcXHdlZWsgMTBcXEF0dHJpdGlvbl9kYXRhLmNzdiIpDQpgYGANCg0KVGhlIGZpbmFsIGRhdGFzZXQgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGlud2V4L1NUQTU1My9yYXcvbWFpbi93MTAvQXR0cml0aW9uX2RhdGEuY3N2IA0KDQojIEVtcGxveWVlIEF0dHJpdGlvbiBEYXNoYm9hcmQNCg0KVGhpcyBkYXNoYm9hcmQgd2FzIGRlc2lnbmVkIHRvIGlkZW50aWZ5IHRoZSBwYXR0ZXJucyBvZiBhdHRyaXRpb24gaW4gdGhlIGNvbXBhbnkgYmFzZWQgb24gc2V2ZXJhbCBmYWN0b3JzIHN1Y2ggYXMgZ2VuZGVyLCBhZ2UsIGpvYiByb2xlLCBqb2Igc2F0aXNmYWN0aW9uLCBtb250aGx5IGluY29tZSwgZGVwYXJ0bWVudCwgYW5kIHllYXJzIGF0IHRoZSBjb21wYW55Lg0KDQpcDQoNCjx0YWJsZSBib3JkZXIgPSAwIGJvcmRlcmNvbG9yPSJkYXJrZ3JlZW4iIGJnY29sb3I9JyNmNmY2ZjYnICB3aWR0aD0xMDAlICBhbGlnbiA9IGNlbnRlcj4NCjx0cj4NCjx0ZD4NCg0KPGRpdiBjbGFzcz0ndGFibGVhdVBsYWNlaG9sZGVyJyBpZD0ndml6MTcxMjY2NjA2Njk5Nycgc3R5bGU9J3Bvc2l0aW9uOiByZWxhdGl2ZSc+DQo8bm9zY3JpcHQ+PGEgaHJlZj0nIyc+DQo8aW1nIGFsdD0nICcgDQpzcmM9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztFbSYjNDc7RW1wbG95ZWVBdHRyaXRpb25kYXRhXzE3MTI2NDIwMzU3NjYwJiM0NztEYXNoYm9hcmQmIzQ3OzFfcnNzLnBuZycgc3R5bGU9J2JvcmRlcjogbm9uZScgLz4NCjwvYT4NCjwvbm9zY3JpcHQ+DQo8b2JqZWN0IGNsYXNzPSd0YWJsZWF1Vml6JyAgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPg0KPHBhcmFtIG5hbWU9J2hvc3RfdXJsJyB2YWx1ZT0naHR0cHMlM0ElMkYlMkZwdWJsaWMudGFibGVhdS5jb20lMkYnIC8+IA0KPHBhcmFtIG5hbWU9J2VtYmVkX2NvZGVfdmVyc2lvbicgdmFsdWU9JzMnIC8+IDxwYXJhbSBuYW1lPSdzaXRlX3Jvb3QnIHZhbHVlPScnIC8+DQo8cGFyYW0gbmFtZT0nbmFtZScgdmFsdWU9J0VtcGxveWVlQXR0cml0aW9uZGF0YV8xNzEyNjQyMDM1NzY2MCYjNDc7RGFzaGJvYXJkJyAvPg0KPHBhcmFtIG5hbWU9J3RhYnMnIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0ndG9vbGJhcicgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdzdGF0aWNfaW1hZ2UnIHZhbHVlPSdodHRwczomIzQ3OyYjNDc7cHVibGljLnRhYmxlYXUuY29tJiM0NztzdGF0aWMmIzQ3O2ltYWdlcyYjNDc7RW0mIzQ3O0VtcGxveWVlQXR0cml0aW9uZGF0YV8xNzEyNjQyMDM1NzY2MCYjNDc7RGFzaGJvYXJkJiM0NzsxLnBuZycgLz4gDQo8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3RhdGljX2ltYWdlJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3Bpbm5lcicgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdkaXNwbGF5X292ZXJsYXknIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0nZGlzcGxheV9jb3VudCcgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdsYW5ndWFnZScgdmFsdWU9J2VuLUdCJyAvPg0KPHBhcmFtIG5hbWU9J2ZpbHRlcicgdmFsdWU9J3B1Ymxpc2g9eWVzJyAvPg0KPC9vYmplY3Q+PC9kaXY+ICAgICAgICAgICAgICAgIA0KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiAgICAgICAgICAgICAgICAgICAgDQp2YXIgZGl2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aXoxNzEyNjY2MDY2OTk3Jyk7ICAgICAgICAgICAgICAgICAgICANCnZhciB2aXpFbGVtZW50ID0gZGl2RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF07ICAgICAgICAgICAgICAgICAgICANCmlmICggZGl2RWxlbWVudC5vZmZzZXRXaWR0aCA+IDgwMCApIHsgdml6RWxlbWVudC5zdHlsZS5taW5XaWR0aD0nOTAwcHgnOw0Kdml6RWxlbWVudC5zdHlsZS5tYXhXaWR0aD0nMTAwJSc7DQp2aXpFbGVtZW50LnN0eWxlLm1pbkhlaWdodD0nOTMwcHgnOw0Kdml6RWxlbWVudC5zdHlsZS5tYXhIZWlnaHQ9KGRpdkVsZW1lbnQub2Zmc2V0V2lkdGgqMC43NSkrJ3B4Jzt9IGVsc2UgaWYgKCBkaXZFbGVtZW50Lm9mZnNldFdpZHRoID4gNTAwICkgeyB2aXpFbGVtZW50LnN0eWxlLm1pbldpZHRoPSc5MDBweCc7DQp2aXpFbGVtZW50LnN0eWxlLm1heFdpZHRoPScxMDAlJzsNCnZpekVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSc5MzBweCc7DQp2aXpFbGVtZW50LnN0eWxlLm1heEhlaWdodD0oZGl2RWxlbWVudC5vZmZzZXRXaWR0aCowLjc1KSsncHgnO30gZWxzZSB7IHZpekVsZW1lbnQuc3R5bGUubWluV2lkdGg9JzkwMHB4JzsNCnZpekVsZW1lbnQuc3R5bGUubWF4V2lkdGg9JzEwMCUnO3ZpekVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PScyMTAwcHgnOw0Kdml6RWxlbWVudC5zdHlsZS5tYXhIZWlnaHQ9KGRpdkVsZW1lbnQub2Zmc2V0V2lkdGgqMS43NykrJ3B4Jzt9ICAgICAgICAgICAgICAgICAgICAgDQp2YXIgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOyAgICAgICAgICAgICAgICAgICAgDQpzY3JpcHRFbGVtZW50LnNyYyA9ICdodHRwczovL3B1YmxpYy50YWJsZWF1LmNvbS9qYXZhc2NyaXB0cy9hcGkvdml6X3YxLmpzJzsgICAgICAgICAgICAgICAgICAgIHZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgIA0KPC9zY3JpcHQ+DQoNCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KXA0KDQojIyBBdHRyaXRpb24gU3VtbWFyeQ0KDQotIFRoZSB0b3RhbCBudW1iZXIgb2YgZW1wbG95ZWVzIGluIHRoZSBjb21wYW55ID0gMTQ3MCANCi0gQXZlcmFnZSBBZ2Ugb2YgRW1wbG95ZWVzID0gMzcNCi0gQXZlcmFnZSBtb250aGx5IGluY29tZSA9IDY1MDMNCi0gQXZlcmFnZSBob3VybHkgcmF0ZSA9IDY2DQotIFRoZSBudW1iZXIgb2YgZW1wbG95ZWVzIHJlY29yZGVkIHRvIGhhdmUgbGVmdCA9IDIzNw0KLSBQZXJjZW50YWdlIEF0dHJpdGlvbiA9IDE2LjElDQoNCiMjIEF0dHJpdGlvbiBieSBEZXBhcnRtZW50IGFuZCBKb2IgUm9sZQ0KVGhlIGJ1bGsgb2YgZW1wbG95ZWVzIHRoYXQgbGVhdmUgdGhlIG9yZ2FuaXNhdGlvbiB3b3JrIGluIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudC4gUG9zaXRpb25zIG1haW5seSBhZmZlY3RlZCBhcmUgdGhlIExhYm9yYXRvcnkgVGVjaG5pY2lhbiBhbmQgUmVzZWFyY2ggU2NpZW50aXN0IHJvbGVzLiBFbXBsb3llZXMgaW4gdGhlIGRlcGFydG1lbnQgb2YgSHVtYW4gUmVzb3VyY2VzIGhhdmUgdGhlIGxvd2VzdCBhdHRyaXRpb24gcmF0ZXMsIHdoaWNoIG1heSBiZSBiZWNhdXNlIHRoZXkgYXJlIGFsc28gdGhlIHNtYWxsZXN0IGRlcGFydG1lbnQgaW4gdGhlIG9yZ2FuaXNhdGlvbi4gT3ZlcmFsbCwgbWFuYWdlcnMgaGF2ZSB0aGUgY29tcGFueSdzIGxvd2VzdCBhdHRyaXRpb24gcmF0ZXMuDQoNCiMjIEF0dHJpdGlvbiBieSBBZ2UNCkVtcGxveWVlcyB3aG9zZSBhZ2VzIGxpZSBiZXR3ZWVuIDI1IGFuZCAzNCBhcmUgbW9zdCBsaWtlbHkgdG8gbGVhdmUuIFRoYXQgbWF5IGJlIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIHRoZSBncm91cCB3aXRoIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHdoZXJlYXMgdGhvc2UgdGhhdCBhcmUgNTUgb3Igb2xkZXIgYXJlIG1vc3QgbGlrZWx5IHRvIHN0YXkuIA0KDQojIyBBdHRyaXRpb24gYnkgQWdlIGFuZCBHZW5kZXINCkluIGFsbCBhZ2UgZ3JvdXBzLCBtYWxlcyBoYXZlIGhpZ2hlciBhdHRyaXRpb24gY291bnRzIHRoYW4gZmVtYWxlcy4gTWFsZXMgd2hvIGFyZSBiZXR3ZWVuIHRoZSBhZ2VzIG9mIDI1IGFuZCAzNCBoYXZlIHRoZSBoaWdoZXN0IGF0dHJpdGlvbiBjb3VudHMgd2hpbGUgZmVtYWxlcyB3aG8gYXJlIDU1IG9yIG9sZGVyIGhhdmUgdGhlIGxvd2VzdCBhdHRyaXRpb24gY291bnRzLg0KDQojIyBNb250aGx5IEluY29tZSBieSBZZWFycyBhdCBDb21wYW55DQpUaGVyZSBpcyBhIGxpbmVhciBhc3NvY2lhdGlvbiBiZXR3ZWVuIG1vbnRobHkgaW5jb21lIGFuZCB5ZWFycyBhdCB0aGUgY29tcGFueS4gVGhlIGhpZ2hlciB0aGUgbnVtYmVyIG9mIHllYXJzIHNwZW50IGJ5IGEgd29ya2VyIGluIHRoZSBjb21wYW55LCB0aGUgbW9yZSB0aGUgbW9udGhseSBpbmNvbWUuIEZvciBleGFtcGxlLCBlbXBsb3llZXMgd2hvIGhhdmUgc3BlbnQgMzcgeWVhcnMgaW4gdGhlIGNvbXBhbnksIGhhdmUgYSBtZWRpYW4gbW9udGhseSBpbmNvbWUgb2YgMTMsODcyIHdoaWxlIHRob3NlIHdobyBoYXZlIHNwZW50IGp1c3QgMSB5ZWFyLCBoYXZlIGEgbWVkaWFuIG1vbnRobHkgaW5jb21lIG9mIDMsMzQ2LiBBbHNvLCBhdHRyaXRpb24gcmF0ZXMgYXJlIGhpZ2hlciBhbW9uZyBwZW9wbGUgd2l0aCBsb3dlciB3b3JraW5nIHllYXJzIGF0IHRoZSBjb21wYW55Lg0KDQojIyBBdHRyaXRpb24gYnkgSm9iIFNhdGlzZmFjdGlvbg0KVGhlcmUgYXJlIDQgbGV2ZWxzIG9mIGpvYiBzYXRpc2ZhY3Rpb24gLSBsb3csIG1lZGl1bSwgaGlnaCBhbmQgdmVyeSBoaWdoLiBGcm9tIHRoZSBkYXNoYm9hcmQsIHRoaXMgd2FzIGFzc2Vzc2VkIHdpdGggYSBsaW5lIHBsb3Qgc2hvd2luZyB0aGUgdG90YWwgYXR0cml0aW9uIGF0IGVhY2ggam9iIHNhdGlzZmFjdGlvbiBsZXZlbCBmb3IgZXZlcnkgZGVwYXJ0bWVudC4gSXJyZXNwZWN0aXZlIG9mIHRoZSBqb2Igc2F0aXNmYWN0aW9uIGxldmVsLCBlbXBsb3llZXMgZnJvbSBIdW1hbiByZXNvdXJjZXMgc3RpbGwgbWFpbnRhaW5lZCB0aGUgbG93ZXN0IGF0dHJpdGlvbiBjb3VudHMuIE92ZXJhbGwsIHdvcmtlcnMgd2l0aCBoaWdoIGpvYiBzYXRpc2ZhY3Rpb24gaGF2ZSB0aGUgaGlnaGVzdCBhdHRyaXRpb24gY291bnRzLg0KDQojIEVtcGxveWVlIEF0dHJpdGlvbiBTdG9yeVBvaW50DQoNClwNCg0KPHRhYmxlIGJvcmRlciA9IDAgYm9yZGVyY29sb3I9ImRhcmtncmVlbiIgYmdjb2xvcj0nI2Y2ZjZmNicgIHdpZHRoPTEwMCUgIGFsaWduID0gY2VudGVyPg0KPHRyPg0KPHRkPg0KDQo8ZGl2IGNsYXNzPSd0YWJsZWF1UGxhY2Vob2xkZXInIGlkPSd2aXoxNzEyNjY2NDU2NDYyJyBzdHlsZT0ncG9zaXRpb246IHJlbGF0aXZlJz4NCjxub3NjcmlwdD4NCjxhIGhyZWY9JyMnPjxpbWcgYWx0PScgJyANCnNyYz0naHR0cHM6JiM0NzsmIzQ3O3B1YmxpYy50YWJsZWF1LmNvbSYjNDc7c3RhdGljJiM0NztpbWFnZXMmIzQ3O0VtJiM0NztFbXBsb3llZUF0dHJpdGlvbmRhdGFfMTcxMjY0MjAzNTc2NjAmIzQ3O1N0b3J5cG9pbnQmIzQ3OzFfcnNzLnBuZycgc3R5bGU9J2JvcmRlcjogbm9uZScgLz48L2E+DQo8L25vc2NyaXB0PjxvYmplY3QgY2xhc3M9J3RhYmxlYXVWaXonICBzdHlsZT0nZGlzcGxheTpub25lOyc+DQo8cGFyYW0gbmFtZT0naG9zdF91cmwnIHZhbHVlPSdodHRwcyUzQSUyRiUyRnB1YmxpYy50YWJsZWF1LmNvbSUyRicgLz4gDQo8cGFyYW0gbmFtZT0nZW1iZWRfY29kZV92ZXJzaW9uJyB2YWx1ZT0nMycgLz4gDQo8cGFyYW0gbmFtZT0nc2l0ZV9yb290JyB2YWx1ZT0nJyAvPg0KPHBhcmFtIG5hbWU9J25hbWUnIHZhbHVlPSdFbXBsb3llZUF0dHJpdGlvbmRhdGFfMTcxMjY0MjAzNTc2NjAmIzQ3O1N0b3J5cG9pbnQnIC8+DQo8cGFyYW0gbmFtZT0ndGFicycgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSd0b29sYmFyJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J3N0YXRpY19pbWFnZScgdmFsdWU9J2h0dHBzOiYjNDc7JiM0NztwdWJsaWMudGFibGVhdS5jb20mIzQ3O3N0YXRpYyYjNDc7aW1hZ2VzJiM0NztFbSYjNDc7RW1wbG95ZWVBdHRyaXRpb25kYXRhXzE3MTI2NDIwMzU3NjYwJiM0NztTdG9yeXBvaW50JiM0NzsxLnBuZycgLz4gDQo8cGFyYW0gbmFtZT0nYW5pbWF0ZV90cmFuc2l0aW9uJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3RhdGljX2ltYWdlJyB2YWx1ZT0neWVzJyAvPg0KPHBhcmFtIG5hbWU9J2Rpc3BsYXlfc3Bpbm5lcicgdmFsdWU9J3llcycgLz4NCjxwYXJhbSBuYW1lPSdkaXNwbGF5X292ZXJsYXknIHZhbHVlPSd5ZXMnIC8+DQo8cGFyYW0gbmFtZT0nZGlzcGxheV9jb3VudCcgdmFsdWU9J3llcycgLz48cGFyYW0gbmFtZT0nbGFuZ3VhZ2UnIHZhbHVlPSdlbi1HQicgLz4NCjxwYXJhbSBuYW1lPSdmaWx0ZXInIHZhbHVlPSdwdWJsaXNoPXllcycgLz4NCjwvb2JqZWN0PjwvZGl2PiAgICAgICAgICAgICAgICANCjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gICAgICAgICAgICAgICAgICAgIA0KdmFyIGRpdkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndml6MTcxMjY2NjQ1NjQ2MicpOyAgICAgICAgICAgICAgICAgICAgDQp2YXIgdml6RWxlbWVudCA9IGRpdkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29iamVjdCcpWzBdOyAgICAgICAgICAgICAgICAgICAgDQp2aXpFbGVtZW50LnN0eWxlLndpZHRoPSc5MDBweCc7dml6RWxlbWVudC5zdHlsZS5oZWlnaHQ9JzkzMHB4JzsgICAgICAgICAgICAgICAgICAgIA0KdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgICAgICAgICAgICAgICAgICAgIA0Kc2NyaXB0RWxlbWVudC5zcmMgPSAnaHR0cHM6Ly9wdWJsaWMudGFibGVhdS5jb20vamF2YXNjcmlwdHMvYXBpL3Zpel92MS5qcyc7ICAgICAgICAgICAgICAgICAgICANCnZpekVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0RWxlbWVudCwgdml6RWxlbWVudCk7ICAgICAgICAgICAgICAgIA0KPC9zY3JpcHQ+DQoNCjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KXA0K