Violent and Property Crime Rates Across U.S. Regions (2014)
This week’s homework explores reported crime rates for all 50 U.S. states (plus District of Columbia) using the 2014 UCR Crime Dataset from Social Explorer. Data was used to see how states, categorized by region, compare in terms of both violent and property crime rates. Violent crimes include reported murders, rapes, robberies, and aggravated assaults. Property crimes include reported burglaries, larcenies, and motor vehicle thefts. Regions were divided geographically into five groups: (1) West, (2) Midwest, (3) Northeast, (4) Southwest, and (5) Southeast.
Importing the Data
library(readr)
crimedata<-read_csv("/Users/Jennifer/Downloads/R12018303_SL040.csv")
Data Preview
head(crimedata)
Renaming Variables
library(dplyr)
crimedata1<-rename(crimedata, State=Geo_Name,
Total_Pop=SE_T001_001,
Total_VP_Crimes=SE_T002_001,
Total_V_Crimes=SE_T002_002,
Total_P_Crimes=SE_T002_003)
names(crimedata1)
[1] "Geo_FIPS" "State" "Geo_QName" "Total_Pop" "Total_VP_Crimes"
[6] "Total_V_Crimes" "Total_P_Crimes" "SE_T003_001" "SE_T003_002" "SE_T003_003"
[11] "SE_T004_001" "SE_T004_002" "SE_T004_003" "SE_T004_004" "SE_T004_005"
[16] "SE_T006_001" "SE_T006_002" "SE_T006_003" "SE_T006_004"
Recoding Existing Variables
State was recoded into five categories under new variable Region:
1.West: Washington, Utah, Oregon, Nevada, Montana, Idaho, Colorado, California
2.Midwest: Wisconsin, South Dakota, Ohio, North Dakota, Nebraska, Missouri, Minnesota, Michigan, Kansas, Iowa, Indiana, Illinois
3.Northeast: Vermont, Rhode Island, Pennsylvania, New York, New Jersey, New Hampshire, Massachussets, Maine, Connecticut
4.Southwest: Texas, Oklahoma, New Mexico, Arizona
5.Southeast: West Virginia, Virginia, Tennessee, South Carolina, Mississippi, Maryland, North Carolina, Lousiana, Kentucky, Georgia, Florida, Delaware, D.C., Arkansas, Alabama
crimedata2<-mutate(crimedata1, Region=State)
crimedata2$Region<-recode(crimedata2$Region, 'Washington'=1,'Montana'=1,'Oregon'=1,'Idaho'=1,'California'=1,
'Nevada'=1,'Utah'=1,'Colorado'=1,'Wyoming'=1, 'Alaska'=1, 'Hawaii'=1,
'North Dakota'=2, 'South Dakota'=2,'Nebraska'=2,'Kansas'=2, 'Missouri'=2, 'Iowa'=2, 'Minnesota'=2, 'Wisconsin'=2, 'Michigan'=2, 'Illinois'=2, 'Ohio'=2, 'Indiana'=2, 'Maine'=3, 'New Hampshire'=3, 'Massachusetts'=3, 'Vermont'=3, 'New York'=3, 'New Jersey'=3, 'Pennsylvania'=3, 'Rhode Island'=3, 'Connecticut'=3, 'Arizona'=4, 'New Mexico'=4, 'Texas'=4, 'Oklahoma'=4, 'Arkansas'=5, 'Louisiana'=5, 'Mississippi'=5, 'Alabama'=5, 'Georgia'=5,'South Carolina'=5, 'North Carolina'=5, 'Virginia'=5, 'Maryland'=5, 'West Virginia'=5, 'Florida'=5, 'Tennessee'=5, 'Kentucky'=5, 'Delaware'=5, 'District of Columbia'=5)
table(crimedata2$Region)
1 2 3 4 5
11 12 9 4 15
Keeping Variables
I selected six pertinent variables, decreasing the total number of variables from 20 to 6.
crimedata3<-select(crimedata2, Region, State, Total_Pop, Total_VP_Crimes, Total_P_Crimes, Total_V_Crimes)
dim(crimedata2)
[1] 51 20
dim(crimedata3)
[1] 51 6
Generating Summary Variables
by_region<-group_by(crimedata3, Region)
crimedata4<-summarize(by_region, Region_Pop=sum(Total_Pop),
Region_VP_Crimes=sum(Total_VP_Crimes),
Region_V_Crimes=sum(Total_V_Crimes),
Region_P_Crimes=sum(Total_P_Crimes))
print(crimedata4)
Generating More Variables
I created three new variables, Region_VP_Rate, Region_V_Rate, and Region_P_Rate which indicate violent and property crime rates for each region.
Region_VP_Rate: Percent of Combined Violent and Property Crimes Across Regions
Region_V_Rate: Percent of Violent Crime Rate Across Regions
Region_P_Rate: Percent of Crime Rate Across Regions
crimedata5<-mutate(crimedata4, Region_VP_Rate=Region_VP_Crimes/Region_Pop*100,
Region_V_Rate=Region_V_Crimes/Region_Pop*100,
Region_P_Rate=Region_P_Crimes/Region_Pop*100)
print(crimedata5[,6:8])
Chaining All Operations Together Using Magrittr
library(magrittr)
crime_data<-crimedata%>%
rename(State=Geo_Name,
Total_Pop=SE_T001_001,
Total_VP_Crimes= SE_T002_001,
Total_V_Crimes=SE_T002_002,
Total_P_Crimes=SE_T002_003)%>%
select(State, Total_Pop, Total_VP_Crimes, Total_P_Crimes,
Total_V_Crimes)%>%
mutate(Region=
recode(State,'Washington'=1,'Montana'=1,'Oregon'=1,'Idaho'=1,'California'=1,
'Nevada'=1,'Utah'=1,'Colorado'=1,'Wyoming'=1, 'Alaska'=1, 'Hawaii'=1,
'North Dakota'=2, 'South Dakota'=2,'Nebraska'=2,'Kansas'=2, 'Missouri'=2, 'Iowa'=2, 'Minnesota'=2, 'Wisconsin'=2, 'Michigan'=2, 'Illinois'=2, 'Ohio'=2, 'Indiana'=2, 'Maine'=3, 'New Hampshire'=3, 'Massachusetts'=3, 'Vermont'=3, 'New York'=3, 'New Jersey'=3, 'Pennsylvania'=3, 'Rhode Island'=3, 'Connecticut'=3, 'Arizona'=4, 'New Mexico'=4, 'Texas'=4, 'Oklahoma'=4, 'Arkansas'=5, 'Louisiana'=5, 'Mississippi'=5, 'Alabama'=5, 'Georgia'=5,'South Carolina'=5, 'North Carolina'=5, 'Virginia'=5, 'Maryland'=5, 'West Virginia'=5, 'Florida'=5, 'Tennessee'=5, 'Kentucky'=5, 'Delaware'=5, 'District of Columbia'=5))%>%
group_by(Region)%>%
summarize(
Region_Pop=sum(Total_Pop),
Region_VP_Crimes=sum(Total_VP_Crimes),
Region_V_Crimes=sum(Total_V_Crimes),
Region_P_Crimes=sum(Total_P_Crimes)
)%>%
mutate(Region_VP_Rate=Region_VP_Crimes/Region_Pop*100, Region_V_Rate=Region_V_Crimes/Region_Pop*100, Region_P_Rate=Region_P_Crimes/Region_Pop*100)
print(crime_data)
Visualizations
The data shows that the percentage of reported crimes per population is highest in the southwest region(3.47%), followed by southeast(3.25%), west(2.99%), midwest(2.62%), and northeast(2.13%). This order holds true for both violent and property crimes.
library(ggplot2)
ggplot(data=RegionData_LongFormat)+
geom_col(aes(x=Region, y=CrimeRate, fill=CrimeType), position="dodge")+labs(title="Percent of Violent and Property Crimes Across U.S. Regions (2014)",y="Percentage of Reported Crimes")

LS0tCnRpdGxlOiAiU09DIDcxMjogSG9tZXdvcmsgMiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoqSmVubmlmZXIgR2FuZWxlcyoKPGJyLz4qMi8xMC8xOSoKCiMjKipWaW9sZW50IGFuZCBQcm9wZXJ0eSBDcmltZSBSYXRlcyBBY3Jvc3MgVS5TLiBSZWdpb25zICgyMDE0KSoqCgpUaGlzIHdlZWsncyBob21ld29yayBleHBsb3JlcyByZXBvcnRlZCBjcmltZSByYXRlcyBmb3IgYWxsIDUwIFUuUy4gc3RhdGVzIChwbHVzIERpc3RyaWN0IG9mIENvbHVtYmlhKSB1c2luZyB0aGUgMjAxNCBVQ1IgQ3JpbWUgRGF0YXNldCBmcm9tIFNvY2lhbCBFeHBsb3Jlci4gRGF0YSB3YXMgdXNlZCB0byBzZWUgaG93IHN0YXRlcywgY2F0ZWdvcml6ZWQgYnkgcmVnaW9uLCBjb21wYXJlIGluIHRlcm1zIG9mIGJvdGggdmlvbGVudCBhbmQgcHJvcGVydHkgY3JpbWUgcmF0ZXMuIFZpb2xlbnQgY3JpbWVzIGluY2x1ZGUgcmVwb3J0ZWQgbXVyZGVycywgcmFwZXMsIHJvYmJlcmllcywgYW5kIGFnZ3JhdmF0ZWQgYXNzYXVsdHMuIFByb3BlcnR5IGNyaW1lcyBpbmNsdWRlIHJlcG9ydGVkIGJ1cmdsYXJpZXMsIGxhcmNlbmllcywgYW5kIG1vdG9yIHZlaGljbGUgdGhlZnRzLiBSZWdpb25zIHdlcmUgZGl2aWRlZCBnZW9ncmFwaGljYWxseSBpbnRvIGZpdmUgZ3JvdXBzOiAoMSkgV2VzdCwgKDIpIE1pZHdlc3QsICgzKSBOb3J0aGVhc3QsICg0KSBTb3V0aHdlc3QsIGFuZCAoNSkgU291dGhlYXN0LgoKIyMjSW1wb3J0aW5nIHRoZSBEYXRhCmBgYHtyfQpsaWJyYXJ5KHJlYWRyKQpjcmltZWRhdGE8LXJlYWRfY3N2KCIvVXNlcnMvSmVubmlmZXIvRG93bmxvYWRzL1IxMjAxODMwM19TTDA0MC5jc3YiKQpgYGAKCiMjI0RhdGEgUHJldmlldwpgYGB7cn0KaGVhZChjcmltZWRhdGEpCmBgYAoKIyMjUmVuYW1pbmcgVmFyaWFibGVzCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpjcmltZWRhdGExPC1yZW5hbWUoY3JpbWVkYXRhLCBTdGF0ZT1HZW9fTmFtZSwgCiAgICAgICAgICAgICAgICAgICBUb3RhbF9Qb3A9U0VfVDAwMV8wMDEsCiAgICAgICAgICAgICAgICAgICBUb3RhbF9WUF9DcmltZXM9U0VfVDAwMl8wMDEsCiAgICAgICAgICAgICAgICAgICBUb3RhbF9WX0NyaW1lcz1TRV9UMDAyXzAwMiwKICAgICAgICAgICAgICAgICAgIFRvdGFsX1BfQ3JpbWVzPVNFX1QwMDJfMDAzKQpuYW1lcyhjcmltZWRhdGExKQpgYGAKCgojIyNSZWNvZGluZyBFeGlzdGluZyBWYXJpYWJsZXMKKipTdGF0ZSoqIHdhcyByZWNvZGVkIGludG8gZml2ZSBjYXRlZ29yaWVzIHVuZGVyIG5ldyB2YXJpYWJsZSAqKlJlZ2lvbioqOgoKPGJyLz4xLioqV2VzdCoqOiBXYXNoaW5ndG9uLCBVdGFoLCBPcmVnb24sIE5ldmFkYSwgTW9udGFuYSwgSWRhaG8sIENvbG9yYWRvLCBDYWxpZm9ybmlhIAo8YnIvPjIuKipNaWR3ZXN0Kio6IFdpc2NvbnNpbiwgU291dGggRGFrb3RhLCBPaGlvLCBOb3J0aCBEYWtvdGEsIE5lYnJhc2thLCBNaXNzb3VyaSwgTWlubmVzb3RhLCBNaWNoaWdhbiwgS2Fuc2FzLCBJb3dhLCAgSW5kaWFuYSwgSWxsaW5vaXMKPGJyLz4zLioqTm9ydGhlYXN0Kio6IFZlcm1vbnQsIFJob2RlIElzbGFuZCwgUGVubnN5bHZhbmlhLCBOZXcgWW9yaywgTmV3IEplcnNleSwgTmV3IEhhbXBzaGlyZSwgTWFzc2FjaHVzc2V0cywgTWFpbmUsIENvbm5lY3RpY3V0Cjxici8+NC4qKlNvdXRod2VzdCoqOiBUZXhhcywgT2tsYWhvbWEsIE5ldyBNZXhpY28sIEFyaXpvbmEKPGJyLz41LioqU291dGhlYXN0Kio6IFdlc3QgVmlyZ2luaWEsIFZpcmdpbmlhLCBUZW5uZXNzZWUsIFNvdXRoIENhcm9saW5hLCBNaXNzaXNzaXBwaSwgTWFyeWxhbmQsIE5vcnRoIENhcm9saW5hLCBMb3VzaWFuYSwgS2VudHVja3ksIEdlb3JnaWEsIEZsb3JpZGEsIERlbGF3YXJlLCBELkMuLCBBcmthbnNhcywgQWxhYmFtYQoKCmBgYHtyfQpjcmltZWRhdGEyPC1tdXRhdGUoY3JpbWVkYXRhMSwgUmVnaW9uPVN0YXRlKQpjcmltZWRhdGEyJFJlZ2lvbjwtcmVjb2RlKGNyaW1lZGF0YTIkUmVnaW9uLCAnV2FzaGluZ3Rvbic9MSwnTW9udGFuYSc9MSwnT3JlZ29uJz0xLCdJZGFobyc9MSwnQ2FsaWZvcm5pYSc9MSwKICAgICAgICAgJ05ldmFkYSc9MSwnVXRhaCc9MSwnQ29sb3JhZG8nPTEsJ1d5b21pbmcnPTEsICdBbGFza2EnPTEsICdIYXdhaWknPTEsCiAgICAgICAgICdOb3J0aCBEYWtvdGEnPTIsICdTb3V0aCBEYWtvdGEnPTIsJ05lYnJhc2thJz0yLCdLYW5zYXMnPTIsICdNaXNzb3VyaSc9MiwgJ0lvd2EnPTIsICdNaW5uZXNvdGEnPTIsICdXaXNjb25zaW4nPTIsICdNaWNoaWdhbic9MiwgJ0lsbGlub2lzJz0yLCAnT2hpbyc9MiwgJ0luZGlhbmEnPTIsICdNYWluZSc9MywgJ05ldyBIYW1wc2hpcmUnPTMsICdNYXNzYWNodXNldHRzJz0zLCAgJ1Zlcm1vbnQnPTMsICdOZXcgWW9yayc9MywgJ05ldyBKZXJzZXknPTMsICdQZW5uc3lsdmFuaWEnPTMsICdSaG9kZSBJc2xhbmQnPTMsICdDb25uZWN0aWN1dCc9MywgJ0FyaXpvbmEnPTQsICdOZXcgTWV4aWNvJz00LCAnVGV4YXMnPTQsICdPa2xhaG9tYSc9NCwgJ0Fya2Fuc2FzJz01LCAnTG91aXNpYW5hJz01LCAnTWlzc2lzc2lwcGknPTUsICdBbGFiYW1hJz01LCAnR2VvcmdpYSc9NSwnU291dGggQ2Fyb2xpbmEnPTUsICdOb3J0aCBDYXJvbGluYSc9NSwgJ1ZpcmdpbmlhJz01LCAnTWFyeWxhbmQnPTUsICdXZXN0IFZpcmdpbmlhJz01LCAnRmxvcmlkYSc9NSwgJ1Rlbm5lc3NlZSc9NSwgJ0tlbnR1Y2t5Jz01LCAnRGVsYXdhcmUnPTUsICdEaXN0cmljdCBvZiBDb2x1bWJpYSc9NSkKCnRhYmxlKGNyaW1lZGF0YTIkUmVnaW9uKQpgYGAKIyMjS2VlcGluZyBWYXJpYWJsZXMgCkkgc2VsZWN0ZWQgc2l4IHBlcnRpbmVudCB2YXJpYWJsZXMsIGRlY3JlYXNpbmcgdGhlIHRvdGFsIG51bWJlciBvZiB2YXJpYWJsZXMgZnJvbSAyMCB0byA2LgpgYGB7cn0KY3JpbWVkYXRhMzwtc2VsZWN0KGNyaW1lZGF0YTIsIFJlZ2lvbiwgU3RhdGUsIFRvdGFsX1BvcCwgVG90YWxfVlBfQ3JpbWVzLCBUb3RhbF9QX0NyaW1lcywgVG90YWxfVl9DcmltZXMpCmRpbShjcmltZWRhdGEyKQpkaW0oY3JpbWVkYXRhMykKYGBgCgoKIyMjR2VuZXJhdGluZyBTdW1tYXJ5IFZhcmlhYmxlcwpgYGB7cn0KYnlfcmVnaW9uPC1ncm91cF9ieShjcmltZWRhdGEzLCBSZWdpb24pCmNyaW1lZGF0YTQ8LXN1bW1hcml6ZShieV9yZWdpb24sIFJlZ2lvbl9Qb3A9c3VtKFRvdGFsX1BvcCksCiAgICAgICAgICAgICAgICAgICAgICBSZWdpb25fVlBfQ3JpbWVzPXN1bShUb3RhbF9WUF9DcmltZXMpLAogICAgICAgICAgICAgICAgICAgICAgUmVnaW9uX1ZfQ3JpbWVzPXN1bShUb3RhbF9WX0NyaW1lcyksCiAgICAgICAgICAgICAgICAgICAgICBSZWdpb25fUF9DcmltZXM9c3VtKFRvdGFsX1BfQ3JpbWVzKSkKCnByaW50KGNyaW1lZGF0YTQpCmBgYAojIyNHZW5lcmF0aW5nIE1vcmUgVmFyaWFibGVzCkkgY3JlYXRlZCB0aHJlZSBuZXcgdmFyaWFibGVzLCAqKlJlZ2lvbl9WUF9SYXRlKiosICoqUmVnaW9uX1ZfUmF0ZSoqLCBhbmQgKipSZWdpb25fUF9SYXRlKiogd2hpY2ggaW5kaWNhdGUgdmlvbGVudCBhbmQgcHJvcGVydHkgY3JpbWUgcmF0ZXMgZm9yIGVhY2ggcmVnaW9uLgoKKipSZWdpb25fVlBfUmF0ZSoqOiBQZXJjZW50IG9mIENvbWJpbmVkIFZpb2xlbnQgYW5kIFByb3BlcnR5IENyaW1lcyBBY3Jvc3MgUmVnaW9ucwo8YnIvPgoqKlJlZ2lvbl9WX1JhdGUqKjogUGVyY2VudCBvZiBWaW9sZW50IENyaW1lIFJhdGUgQWNyb3NzIFJlZ2lvbnMKPGJyIC8+CioqUmVnaW9uX1BfUmF0ZSoqOiBQZXJjZW50IG9mIENyaW1lIFJhdGUgQWNyb3NzIFJlZ2lvbnMKCmBgYHtyfQpjcmltZWRhdGE1PC1tdXRhdGUoY3JpbWVkYXRhNCwgUmVnaW9uX1ZQX1JhdGU9UmVnaW9uX1ZQX0NyaW1lcy9SZWdpb25fUG9wKjEwMCwKUmVnaW9uX1ZfUmF0ZT1SZWdpb25fVl9DcmltZXMvUmVnaW9uX1BvcCoxMDAsClJlZ2lvbl9QX1JhdGU9UmVnaW9uX1BfQ3JpbWVzL1JlZ2lvbl9Qb3AqMTAwKQpwcmludChjcmltZWRhdGE1Wyw2OjhdKQpgYGAKCiMjI0NoYWluaW5nIEFsbCBPcGVyYXRpb25zIFRvZ2V0aGVyIFVzaW5nIE1hZ3JpdHRyCmBgYHtyfQpsaWJyYXJ5KG1hZ3JpdHRyKQpjcmltZV9kYXRhPC1jcmltZWRhdGElPiUKICByZW5hbWUoU3RhdGU9R2VvX05hbWUsCiAgICAgICAgIFRvdGFsX1BvcD1TRV9UMDAxXzAwMSwKICAgICAgICAgVG90YWxfVlBfQ3JpbWVzPSBTRV9UMDAyXzAwMSwKICAgICAgICAgVG90YWxfVl9DcmltZXM9U0VfVDAwMl8wMDIsCiAgICAgICAgIFRvdGFsX1BfQ3JpbWVzPVNFX1QwMDJfMDAzKSU+JQogIHNlbGVjdChTdGF0ZSwgVG90YWxfUG9wLCBUb3RhbF9WUF9DcmltZXMsIFRvdGFsX1BfQ3JpbWVzLAogICAgICAgICBUb3RhbF9WX0NyaW1lcyklPiUKICBtdXRhdGUoUmVnaW9uPQogIHJlY29kZShTdGF0ZSwnV2FzaGluZ3Rvbic9MSwnTW9udGFuYSc9MSwnT3JlZ29uJz0xLCdJZGFobyc9MSwnQ2FsaWZvcm5pYSc9MSwKICAgICAgICAgJ05ldmFkYSc9MSwnVXRhaCc9MSwnQ29sb3JhZG8nPTEsJ1d5b21pbmcnPTEsICdBbGFza2EnPTEsICdIYXdhaWknPTEsCiAgICAgICAgICdOb3J0aCBEYWtvdGEnPTIsICdTb3V0aCBEYWtvdGEnPTIsJ05lYnJhc2thJz0yLCdLYW5zYXMnPTIsICdNaXNzb3VyaSc9MiwgJ0lvd2EnPTIsICdNaW5uZXNvdGEnPTIsICdXaXNjb25zaW4nPTIsICdNaWNoaWdhbic9MiwgJ0lsbGlub2lzJz0yLCAnT2hpbyc9MiwgJ0luZGlhbmEnPTIsICdNYWluZSc9MywgJ05ldyBIYW1wc2hpcmUnPTMsICdNYXNzYWNodXNldHRzJz0zLCAgJ1Zlcm1vbnQnPTMsICdOZXcgWW9yayc9MywgJ05ldyBKZXJzZXknPTMsICdQZW5uc3lsdmFuaWEnPTMsICdSaG9kZSBJc2xhbmQnPTMsICdDb25uZWN0aWN1dCc9MywgJ0FyaXpvbmEnPTQsICdOZXcgTWV4aWNvJz00LCAnVGV4YXMnPTQsICdPa2xhaG9tYSc9NCwgJ0Fya2Fuc2FzJz01LCAnTG91aXNpYW5hJz01LCAnTWlzc2lzc2lwcGknPTUsICdBbGFiYW1hJz01LCAnR2VvcmdpYSc9NSwnU291dGggQ2Fyb2xpbmEnPTUsICdOb3J0aCBDYXJvbGluYSc9NSwgJ1ZpcmdpbmlhJz01LCAnTWFyeWxhbmQnPTUsICdXZXN0IFZpcmdpbmlhJz01LCAnRmxvcmlkYSc9NSwgJ1Rlbm5lc3NlZSc9NSwgJ0tlbnR1Y2t5Jz01LCAnRGVsYXdhcmUnPTUsICdEaXN0cmljdCBvZiBDb2x1bWJpYSc9NSkpJT4lCiAgZ3JvdXBfYnkoUmVnaW9uKSU+JQogIHN1bW1hcml6ZSggCiAgICAgICAgICAgIFJlZ2lvbl9Qb3A9c3VtKFRvdGFsX1BvcCksCiAgICAgICAgICAgIFJlZ2lvbl9WUF9DcmltZXM9c3VtKFRvdGFsX1ZQX0NyaW1lcyksCiAgICAgICAgICAgIFJlZ2lvbl9WX0NyaW1lcz1zdW0oVG90YWxfVl9DcmltZXMpLAogICAgICAgICAgICBSZWdpb25fUF9DcmltZXM9c3VtKFRvdGFsX1BfQ3JpbWVzKQogICAgICAgICAgICApJT4lCiAgICBtdXRhdGUoUmVnaW9uX1ZQX1JhdGU9UmVnaW9uX1ZQX0NyaW1lcy9SZWdpb25fUG9wKjEwMCwgUmVnaW9uX1ZfUmF0ZT1SZWdpb25fVl9DcmltZXMvUmVnaW9uX1BvcCoxMDAsIFJlZ2lvbl9QX1JhdGU9UmVnaW9uX1BfQ3JpbWVzL1JlZ2lvbl9Qb3AqMTAwKQoKcHJpbnQoY3JpbWVfZGF0YSkKCmBgYAoKCiMjI1Jlc2hhcGluZyBmcm9tIFdpZGUgdG8gTG9uZyBGb3JtYXQKYGBge3IgZWNobz1UUlVFfQpsaWJyYXJ5KHRpZHlyKQpSZWdpb25EYXRhPC1jcmltZV9kYXRhJT4lCiAgcmVuYW1lKENvbWJpbmVkPVJlZ2lvbl9WUF9SYXRlLCBQcm9wZXJ0eT1SZWdpb25fUF9SYXRlLCBWaW9sZW50PVJlZ2lvbl9WX1JhdGUpJT4lCiAgc2VsZWN0KFJlZ2lvbiwgQ29tYmluZWQsIFByb3BlcnR5LCBWaW9sZW50KQpSZWdpb25EYXRhX0xvbmdGb3JtYXQgPC0gZ2F0aGVyKENyaW1lRGF0YSwgIkNyaW1lVHlwZSIsIkNyaW1lUmF0ZSIsLVJlZ2lvbikKCmhlYWQoUmVnaW9uRGF0YV9Mb25nRm9ybWF0KSAKCgpgYGAKCiMjI1Zpc3VhbGl6YXRpb25zClRoZSBkYXRhIHNob3dzIHRoYXQgdGhlIHBlcmNlbnRhZ2Ugb2YgcmVwb3J0ZWQgY3JpbWVzIHBlciBwb3B1bGF0aW9uIGlzIGhpZ2hlc3QgaW4gdGhlIHNvdXRod2VzdCByZWdpb24oMy40NyUpLCBmb2xsb3dlZCBieSBzb3V0aGVhc3QoMy4yNSUpLCB3ZXN0KDIuOTklKSwgbWlkd2VzdCgyLjYyJSksIGFuZCBub3J0aGVhc3QoMi4xMyUpLiBUaGlzIG9yZGVyIGhvbGRzIHRydWUgZm9yIGJvdGggdmlvbGVudCBhbmQgcHJvcGVydHkgY3JpbWVzLgpgYGB7ciBlY2hvPVRSVUV9CmxpYnJhcnkoZ2dwbG90MikKZ2dwbG90KGRhdGE9UmVnaW9uRGF0YV9Mb25nRm9ybWF0KSsKZ2VvbV9jb2woYWVzKHg9UmVnaW9uLCB5PUNyaW1lUmF0ZSwgZmlsbD1DcmltZVR5cGUpLCBwb3NpdGlvbj0iZG9kZ2UiKStsYWJzKHRpdGxlPSJQZXJjZW50IG9mIFZpb2xlbnQgYW5kIFByb3BlcnR5IENyaW1lcyBBY3Jvc3MgVS5TLiBSZWdpb25zICgyMDE0KSIseT0iUGVyY2VudGFnZSBvZiBSZXBvcnRlZCBDcmltZXMiKQpgYGAK