Overview
Department of Health and Mental Hygiene (DOHMH) conducts unannounced inspections of restaurants at least once a year. Inspectors check that restaurants comply with food safety rules. Now, more than ever, these inspection results are important to evaluate the food safety measures taken by the restaurants. COVID-19 caused many of the NYC restaurants to close from March 2020. Recently, the restaurants started to open again but are inspections by DOHMH more frequent now? DO inspections happen more in the areas with high COVID cases ? Is there a relation between inspection rating and COVID cases?
Data Preparation
Step 1 is to install and load required libraries to extract data from sources
Step 2 is to extract data from different sources
Raw data from looks like this:
Health inspection data contains 26 columns and 400,120 rows. Each row is a citation for a restaurant recorded after inspection. Now, let’s load the latest COVID spread data as well.
The Covid spread data contains 10 columns and 177 rows. Each row contains metrics corresponding to covid spread at Zip code level.
For the analysis we would require dataset at Zip code level for 2020 that includes both inspection data and covid data.
nyrestaurant_analysis <- filter(nyrestaurant,substr(inspection_date,1,4) == "2020", zipcode != '') %>%select(inspection_date,dba,zipcode,boro, cuisine_description,score)
#Select zip code level NYC restaurant data with average inspection grading score
nyrestaurant_zip <- nyrestaurant_analysis %>% group_by(zipcode) %>% summarise(scores = mean(score,na.rm = TRUE))
nyrestaurant_boro <- nyrestaurant_analysis %>% group_by(boro) %>% summarise(scores = mean(score,na.rm = TRUE))
#Select zip code level covid case rate
covid_zip <- covid_raw %>%select(MODIFIED_ZCTA,COVID_CASE_RATE,PERCENT_POSITIVE)
covid_zip <- rename(covid_raw,zipcode = MODIFIED_ZCTA)
covid_boro <- covid_raw %>%select(BOROUGH_GROUP,COVID_CASE_RATE,PERCENT_POSITIVE) %>% group_by(BOROUGH_GROUP) %>% summarise(COVID_CASE_RATE = mean(COVID_CASE_RATE,na.rm = TRUE),PERCENT_POSITIVE = mean(PERCENT_POSITIVE,na.rm = TRUE))
covid_boro <- rename(covid_boro,boro = BOROUGH_GROUP)
#Remove the cases where COVID data is not available
master_data_zip <- merge(x = nyrestaurant_zip , y = covid_zip, by = c("zipcode"))
master_data_boro <- merge(x = nyrestaurant_boro , y = covid_boro, by = c("boro"))
Research question
Is COVID case rate (Rate of confirmed cases per 100,000 people by Zip code of residence) predictive of NYC restaurant’s health inspection grading score ?
Cases
Each case represents a NYC restaurant in the united states. There 175 observations in the given data set.
Data collection
DOHMH New York City Restaurant Inspection Results Health The data is collected by Department of Health and Mental Hygiene (DOHMH) by creating a repository of every sustained or not yet adjudicated violation citation from every full or special program inspection conducted up to three years prior to the most recent inspection for restaurants and college cafeterias in an active status
NYC Coronavirus Disease 2019 (COVID-19) Data Health Department has collected about people who have tested positive for COVID-19 in NYC
Type of Study
This is an observational study.
Response
The response variable is restaurant’s grading score (at Zip level) and is numerical.
Explanatory
The explanatory variable is COVID case rate and is numerical
Relevant summary statistics
At Borough code level, COVID cases are high even though the inspection scores seems to show better grade (lower score mean better grade from Health Department). This shows that the Health department’s restaurant inspection score might be influenced by covid case rate. Essentially in a way that restaurants are often inspected and ensured that top grade is maintained among the restaurants in high covid cases areas

At Zip code level, there seems to be no relation between COVID case rate and Health Department inspection scores.

At Zip code level, there seems to be no relation between COVID positive cases rate and Health Department inspection scores.

LS0tDQp0aXRsZTogJ0RhdGEgNjA2OiBEYXRhIFByb2plY3QnDQphdXRob3I6ICJCaGFyYW5pIE5pdHRhbGEiDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQphbHdheXNfYWxsb3dfaHRtbDogdHJ1ZQ0Kb3V0cHV0Og0KICBvcGVuaW50cm86OmxhYl9yZXBvcnQ6IGRlZmF1bHQNCiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgaW5jbHVkZXM6DQogICAgICBpbl9oZWFkZXI6IGhlYWRlci5odG1sDQogICAgY3NzOiAuL2xhYi5jc3MNCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQogICAgdGhlbWU6IGNlcnVsZWFuDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQplZGl0b3Jfb3B0aW9uczoNCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQojIyMgT3ZlcnZpZXcNCg0KRGVwYXJ0bWVudCBvZiBIZWFsdGggYW5kIE1lbnRhbCBIeWdpZW5lIChET0hNSCkgY29uZHVjdHMgdW5hbm5vdW5jZWQgaW5zcGVjdGlvbnMgb2YgcmVzdGF1cmFudHMgYXQgbGVhc3Qgb25jZSBhIHllYXIuIEluc3BlY3RvcnMgY2hlY2sgdGhhdCByZXN0YXVyYW50cyBjb21wbHkgd2l0aCBmb29kIHNhZmV0eSBydWxlcy4gTm93LCBtb3JlIHRoYW4gZXZlciwgdGhlc2UgaW5zcGVjdGlvbiByZXN1bHRzIGFyZSBpbXBvcnRhbnQgdG8gZXZhbHVhdGUgdGhlIGZvb2Qgc2FmZXR5IG1lYXN1cmVzIHRha2VuIGJ5IHRoZSByZXN0YXVyYW50cy4gQ09WSUQtMTkgY2F1c2VkIG1hbnkgb2YgdGhlIE5ZQyByZXN0YXVyYW50cyB0byBjbG9zZSBmcm9tIE1hcmNoIDIwMjAuIFJlY2VudGx5LCB0aGUgcmVzdGF1cmFudHMgc3RhcnRlZCB0byBvcGVuIGFnYWluIGJ1dCBhcmUgaW5zcGVjdGlvbnMgYnkgRE9ITUggbW9yZSBmcmVxdWVudCBub3c/IERPIGluc3BlY3Rpb25zIGhhcHBlbiBtb3JlIGluIHRoZSBhcmVhcyB3aXRoIGhpZ2ggQ09WSUQgY2FzZXMgPyBJcyB0aGVyZSBhIHJlbGF0aW9uIGJldHdlZW4gaW5zcGVjdGlvbiByYXRpbmcgYW5kIENPVklEIGNhc2VzPyAgDQoNCg0KIyMjIERhdGEgUHJlcGFyYXRpb24NCg0KU3RlcCAxIGlzIHRvIGluc3RhbGwgYW5kIGxvYWQgcmVxdWlyZWQgbGlicmFyaWVzIHRvIGV4dHJhY3QgZGF0YSBmcm9tIHNvdXJjZXMNCg0KYGBge3IgbGlicmFyaWVzLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGV2YWwgPSBUUlVFLCByZXN1bHRzID0gRkFMU0UpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoUlNvY3JhdGEpDQpsaWJyYXJ5KFJDdXJsKQ0KbGlicmFyeShybWFya2Rvd24pDQpgYGANCg0KDQpTdGVwIDIgaXMgdG8gZXh0cmFjdCBkYXRhIGZyb20gZGlmZmVyZW50IHNvdXJjZXMNCg0KUmF3IGRhdGEgZnJvbSBsb29rcyBsaWtlIHRoaXM6DQpgYGB7ciAsIG1lc3NhZ2U9RkFMU0UscmVzdWx0cz0iYXNpcyJ9DQp1cmwgPC0iaHR0cHM6Ly9kYXRhLmNpdHlvZm5ld3lvcmsudXMvSGVhbHRoL0RPSE1ILU5ldy1Zb3JrLUNpdHktUmVzdGF1cmFudC1JbnNwZWN0aW9uLVJlc3VsdHMvNDNubi1wbjhqIg0KbnlyZXN0YXVyYW50IDwtcmVhZC5zb2NyYXRhKHVybCkNCnBhZ2VkX3RhYmxlKG55cmVzdGF1cmFudCwgb3B0aW9ucyA9IGxpc3Qocm93cy5wcmludCA9IDUpKQ0KYGBgDQoNCkhlYWx0aCBpbnNwZWN0aW9uIGRhdGEgY29udGFpbnMgMjYgY29sdW1ucyBhbmQgNDAwLDEyMCByb3dzLiBFYWNoIHJvdyBpcyBhIGNpdGF0aW9uIGZvciBhIHJlc3RhdXJhbnQgcmVjb3JkZWQgYWZ0ZXIgaW5zcGVjdGlvbi4gTm93LCBsZXQncyBsb2FkIHRoZSBsYXRlc3QgQ09WSUQgc3ByZWFkIGRhdGEgYXMgd2VsbC4gIA0KDQpgYGB7ciAsIG1lc3NhZ2U9RkFMU0UsZWNobz0gRkFMU0UscmVzdWx0cz0iYXNpcyJ9DQpjb3ZpZF91cmwgPC0gZ2V0VVJMKCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbnljaGVhbHRoL2Nvcm9uYXZpcnVzLWRhdGEvbWFzdGVyL2RhdGEtYnktbW9kemN0YS5jc3YiKSANCmNvdmlkX3JhdyA8LSByZWFkLmNzdih0ZXh0ID0gY292aWRfdXJsKQ0KcGFnZWRfdGFibGUoY292aWRfcmF3LCBvcHRpb25zID0gbGlzdChyb3dzLnByaW50ID0gNSkpDQpgYGANCg0KDQpUaGUgQ292aWQgc3ByZWFkIGRhdGEgY29udGFpbnMgMTAgY29sdW1ucyBhbmQgMTc3IHJvd3MuIEVhY2ggcm93IGNvbnRhaW5zIG1ldHJpY3MgY29ycmVzcG9uZGluZyB0byBjb3ZpZCBzcHJlYWQgYXQgWmlwIGNvZGUgbGV2ZWwuICANCg0KRm9yIHRoZSBhbmFseXNpcyB3ZSB3b3VsZCByZXF1aXJlIGRhdGFzZXQgYXQgWmlwIGNvZGUgbGV2ZWwgZm9yIDIwMjAgdGhhdCBpbmNsdWRlcyBib3RoIGluc3BlY3Rpb24gZGF0YSBhbmQgY292aWQgZGF0YS4NCg0KYGBge3IgLCBtZXNzYWdlPUZBTFNFLHJlc3VsdHM9ImFzaXMifQ0KbnlyZXN0YXVyYW50X2FuYWx5c2lzIDwtICBmaWx0ZXIobnlyZXN0YXVyYW50LHN1YnN0cihpbnNwZWN0aW9uX2RhdGUsMSw0KSA9PSAiMjAyMCIsIHppcGNvZGUgIT0gJycpICU+JXNlbGVjdChpbnNwZWN0aW9uX2RhdGUsZGJhLHppcGNvZGUsYm9ybywgY3Vpc2luZV9kZXNjcmlwdGlvbixzY29yZSkNCg0KI1NlbGVjdCB6aXAgY29kZSBsZXZlbCBOWUMgcmVzdGF1cmFudCBkYXRhIHdpdGggYXZlcmFnZSBpbnNwZWN0aW9uIGdyYWRpbmcgc2NvcmUgDQpueXJlc3RhdXJhbnRfemlwIDwtIG55cmVzdGF1cmFudF9hbmFseXNpcyAlPiUgZ3JvdXBfYnkoemlwY29kZSkgJT4lIHN1bW1hcmlzZShzY29yZXMgPSBtZWFuKHNjb3JlLG5hLnJtID0gVFJVRSkpDQpueXJlc3RhdXJhbnRfYm9ybyA8LSBueXJlc3RhdXJhbnRfYW5hbHlzaXMgJT4lIGdyb3VwX2J5KGJvcm8pICU+JSBzdW1tYXJpc2Uoc2NvcmVzID0gbWVhbihzY29yZSxuYS5ybSA9IFRSVUUpKQ0KICANCiNTZWxlY3QgemlwIGNvZGUgbGV2ZWwgY292aWQgY2FzZSByYXRlDQpjb3ZpZF96aXAgPC0gY292aWRfcmF3ICU+JXNlbGVjdChNT0RJRklFRF9aQ1RBLENPVklEX0NBU0VfUkFURSxQRVJDRU5UX1BPU0lUSVZFKQ0KY292aWRfemlwIDwtIHJlbmFtZShjb3ZpZF9yYXcsemlwY29kZSA9IE1PRElGSUVEX1pDVEEpDQpjb3ZpZF9ib3JvIDwtIGNvdmlkX3JhdyAlPiVzZWxlY3QoQk9ST1VHSF9HUk9VUCxDT1ZJRF9DQVNFX1JBVEUsUEVSQ0VOVF9QT1NJVElWRSkgJT4lIGdyb3VwX2J5KEJPUk9VR0hfR1JPVVApICU+JSBzdW1tYXJpc2UoQ09WSURfQ0FTRV9SQVRFID0gbWVhbihDT1ZJRF9DQVNFX1JBVEUsbmEucm0gPSBUUlVFKSxQRVJDRU5UX1BPU0lUSVZFID0gbWVhbihQRVJDRU5UX1BPU0lUSVZFLG5hLnJtID0gVFJVRSkpDQpjb3ZpZF9ib3JvIDwtIHJlbmFtZShjb3ZpZF9ib3JvLGJvcm8gPSBCT1JPVUdIX0dST1VQKQ0KICANCiNSZW1vdmUgdGhlIGNhc2VzIHdoZXJlIENPVklEIGRhdGEgaXMgbm90IGF2YWlsYWJsZQ0KbWFzdGVyX2RhdGFfemlwIDwtIG1lcmdlKHggPSBueXJlc3RhdXJhbnRfemlwICwgeSA9IGNvdmlkX3ppcCwgYnkgPSBjKCJ6aXBjb2RlIikpDQptYXN0ZXJfZGF0YV9ib3JvIDwtIG1lcmdlKHggPSBueXJlc3RhdXJhbnRfYm9ybyAsIHkgPSBjb3ZpZF9ib3JvLCBieSA9IGMoImJvcm8iKSkNCiAgDQpgYGANCg0KDQojIyMgUmVzZWFyY2ggcXVlc3Rpb24NCklzIENPVklEICoqY2FzZSByYXRlKiogKFJhdGUgb2YgY29uZmlybWVkIGNhc2VzIHBlciAxMDAsMDAwIHBlb3BsZSBieSBaaXAgY29kZSBvZiByZXNpZGVuY2UpIHByZWRpY3RpdmUgb2YgTllDIHJlc3RhdXJhbnQncyBoZWFsdGggaW5zcGVjdGlvbiBbZ3JhZGluZyBzY29yZV0oaHR0cHM6Ly9hODE2LWhlYWx0aC5ueWMuZ292L0FCQ0VhdHNSZXN0YXVyYW50cy8jL2ZhcSkgPw0KIA0KDQojIyMgQ2FzZXMNCkVhY2ggY2FzZSByZXByZXNlbnRzIGEgTllDIHJlc3RhdXJhbnQgaW4gdGhlIHVuaXRlZCBzdGF0ZXMuIFRoZXJlICoxNzUqIG9ic2VydmF0aW9ucyBpbiB0aGUgZ2l2ZW4gZGF0YSBzZXQuDQoNCg0KIyMjIERhdGEgY29sbGVjdGlvbg0KKkRPSE1IIE5ldyBZb3JrIENpdHkgUmVzdGF1cmFudCBJbnNwZWN0aW9uIFJlc3VsdHMgSGVhbHRoKg0KVGhlIGRhdGEgaXMgY29sbGVjdGVkIGJ5IAlEZXBhcnRtZW50IG9mIEhlYWx0aCBhbmQgTWVudGFsIEh5Z2llbmUgKERPSE1IKSBieSBjcmVhdGluZyBhIHJlcG9zaXRvcnkgb2YgZXZlcnkgc3VzdGFpbmVkIG9yIG5vdCB5ZXQgYWRqdWRpY2F0ZWQgdmlvbGF0aW9uIGNpdGF0aW9uIGZyb20gZXZlcnkgZnVsbCBvciBzcGVjaWFsIHByb2dyYW0gaW5zcGVjdGlvbiBjb25kdWN0ZWQgdXAgdG8gdGhyZWUgeWVhcnMgcHJpb3IgdG8gdGhlIG1vc3QgcmVjZW50IGluc3BlY3Rpb24gZm9yIHJlc3RhdXJhbnRzIGFuZCBjb2xsZWdlIGNhZmV0ZXJpYXMgaW4gYW4gYWN0aXZlIHN0YXR1cw0KDQoqTllDIENvcm9uYXZpcnVzIERpc2Vhc2UgMjAxOSAoQ09WSUQtMTkpIERhdGEqDQpIZWFsdGggRGVwYXJ0bWVudCBoYXMgY29sbGVjdGVkIGFib3V0IHBlb3BsZSB3aG8gaGF2ZSB0ZXN0ZWQgcG9zaXRpdmUgZm9yIENPVklELTE5IGluIE5ZQw0KDQojIyMgVHlwZSBvZiBTdHVkeQ0KVGhpcyBpcyBhbiBvYnNlcnZhdGlvbmFsIHN0dWR5Lg0KDQojIyMgRGF0YSBTb3VyY2UNCipET0hNSCBOZXcgWW9yayBDaXR5IFJlc3RhdXJhbnQgSW5zcGVjdGlvbiBSZXN1bHRzIEhlYWx0aCoNClRoaXMgZGF0YXNldCBhbmQgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSBIZWFsdGggRGVwYXJ0bWVudOKAmXMgUmVzdGF1cmFudCBHcmFkaW5nIHdlYnNpdGUgY29tZSBmcm9tIHRoZSBzYW1lIGRhdGEgc291cmNlLiBUaGUgSGVhbHRoIERlcGFydG1lbnTigJlzIFJlc3RhdXJhbnQgR3JhZGluZyB3ZWJzaXRlIGlzIGhlcmU6DQpodHRwOi8vd3d3MS5ueWMuZ292L3NpdGUvZG9oL3NlcnZpY2VzL3Jlc3RhdXJhbnQtZ3JhZGVzLnBhZ2UNCg0KRGF0YSBpcyBleHRyYWN0ZWQgdXNpbmcgdGhlIFIgcGFja2FnZSBSU29jcmF0YQ0KDQoqTllDIENvcm9uYXZpcnVzIERpc2Vhc2UgMjAxOSAoQ09WSUQtMTkpIERhdGEqDQpEYWlseSBjb3VudCBvZiBOWUMgcmVzaWRlbnRzIHdobyB0ZXN0ZWQgcG9zaXRpdmUgZm9yIFNBUlMtQ29WLTIsIHdobyB3ZXJlIGhvc3BpdGFsaXplZCB3aXRoIENPVklELTE5LCBhbmQgZGVhdGhzIGFtb25nIENPVklELTE5IHBhdGllbnRzIGlzIGNvbGxlY3RlZCBmcm9tIGh0dHBzOi8vd3d3MS5ueWMuZ292L3NpdGUvZG9oL2NvdmlkL2NvdmlkLTE5LWRhdGEucGFnZSBhbmQgc3BlY2lmaWNhbGx5IGZyb20gdGhlaXIgZ2l0aHViIHJlcG9zaXRvcnkgaHR0cHM6Ly9naXRodWIuY29tL255Y2hlYWx0aC9jb3JvbmF2aXJ1cy1kYXRhDQoNCg0KIyMjIFJlc3BvbnNlDQpUaGUgcmVzcG9uc2UgdmFyaWFibGUgaXMgcmVzdGF1cmFudCdzIGdyYWRpbmcgc2NvcmUgKGF0IFppcCBsZXZlbCkgYW5kIGlzIG51bWVyaWNhbC4NCg0KDQojIyMgRXhwbGFuYXRvcnkNClRoZSBleHBsYW5hdG9yeSB2YXJpYWJsZSBpcyBDT1ZJRCBjYXNlIHJhdGUgYW5kIGlzIG51bWVyaWNhbA0KDQoNCiMjIyBSZWxldmFudCBzdW1tYXJ5IHN0YXRpc3RpY3MNCg0KDQpBdCBCb3JvdWdoIGNvZGUgbGV2ZWwsIENPVklEIGNhc2VzIGFyZSBoaWdoIGV2ZW4gdGhvdWdoIHRoZSBpbnNwZWN0aW9uIHNjb3JlcyBzZWVtcyB0byBzaG93IGJldHRlciBncmFkZSAobG93ZXIgc2NvcmUgbWVhbiBiZXR0ZXIgZ3JhZGUgZnJvbSBIZWFsdGggRGVwYXJ0bWVudCkuIFRoaXMgc2hvd3MgdGhhdCB0aGUgSGVhbHRoIGRlcGFydG1lbnQncyAgcmVzdGF1cmFudCBpbnNwZWN0aW9uIHNjb3JlIG1pZ2h0IGJlIGluZmx1ZW5jZWQgYnkgY292aWQgY2FzZSByYXRlLiBFc3NlbnRpYWxseSBpbiBhIHdheSB0aGF0IHJlc3RhdXJhbnRzIGFyZSBvZnRlbiBpbnNwZWN0ZWQgYW5kIGVuc3VyZWQgdGhhdCB0b3AgZ3JhZGUgaXMgbWFpbnRhaW5lZCBhbW9uZyB0aGUgcmVzdGF1cmFudHMgaW4gaGlnaCBjb3ZpZCBjYXNlcyBhcmVhcw0KDQpgYGB7ciAsIG1lc3NhZ2U9RkFMU0UscmVzdWx0cz0iYXNpcyJ9DQoNCmdncGxvdChtYXN0ZXJfZGF0YV9ib3JvLCBhZXMoeCA9IENPVklEX0NBU0VfUkFURSAsIHk9IHNjb3JlcykpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kPWxtKSsNCiAgIGdndGl0bGUoIk5ZQyBSZXN0YXVyYW50cyBpbnNwZWN0aW9uIHNjb3JlIHZzIENPVklEIGNhc2UgcmF0ZSIpICsgDQogICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQobGluZWhlaWdodD0uOCwgZmFjZT0iYm9sZCIpKQ0KDQoNCmBgYA0KDQpBdCBaaXAgY29kZSBsZXZlbCwgdGhlcmUgc2VlbXMgdG8gYmUgbm8gcmVsYXRpb24gYmV0d2VlbiBDT1ZJRCBjYXNlIHJhdGUgYW5kIEhlYWx0aCBEZXBhcnRtZW50IGluc3BlY3Rpb24gc2NvcmVzLiANCg0KYGBge3IgLCBtZXNzYWdlPUZBTFNFLHJlc3VsdHM9ImFzaXMifQ0KDQpnZ3Bsb3QobWFzdGVyX2RhdGFfemlwLCBhZXMoeCA9IENPVklEX0NBU0VfUkFURSAsIHk9IHNjb3JlcykpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kPWxtKSsNCiAgIGdndGl0bGUoIk5ZQyBSZXN0YXVyYW50cyBpbnNwZWN0aW9uIHNjb3JlIHZzIENPVklEIGNhc2UgcmF0ZSIpICsgDQogICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQobGluZWhlaWdodD0uOCwgZmFjZT0iYm9sZCIpKQ0KDQoNCmBgYA0KDQpcbg0KDQpBdCBaaXAgY29kZSBsZXZlbCwgdGhlcmUgc2VlbXMgdG8gYmUgbm8gcmVsYXRpb24gYmV0d2VlbiBDT1ZJRCBwb3NpdGl2ZSBjYXNlcyByYXRlIGFuZCBIZWFsdGggRGVwYXJ0bWVudCBpbnNwZWN0aW9uIHNjb3Jlcy4gDQpgYGB7ciAsIG1lc3NhZ2U9RkFMU0UscmVzdWx0cz0iYXNpcyJ9DQoNCmdncGxvdChtYXN0ZXJfZGF0YV96aXAsIGFlcyh4ID0gUEVSQ0VOVF9QT1NJVElWRSAsIHk9IHNjb3JlcykpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kPWxtKSsNCiAgIGdndGl0bGUoIk5ZQyBSZXN0YXVyYW50cyBpbnNwZWN0aW9uIHNjb3JlIHZzIENPVklEIHBvc2l0aXZlIGNhc2VzIHJhdGUiKSArIA0KICAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGxpbmVoZWlnaHQ9LjgsIGZhY2U9ImJvbGQiKSkNCg0KDQpgYGANCg0KPGRpdiBjbGFzcz0idG9jaWZ5LWV4dGVuZC1wYWdlIiBkYXRhLXVuaXF1ZT0idG9jaWZ5LWV4dGVuZC1wYWdlIiBzdHlsZT0iaGVpZ2h0OiAwOyI+PC9kaXY+