In this notebook, we provide multiple poverty and development indicators. This is is the visualization tool, and besides that, it also provides information about intersections between different poverty and development indicators.

Poverty Lines


clean_pov_line<- read.csv("clean_pov_line.csv")

 #library(dplyr)
 clean_pov_line %>%
    arrange(desc(headcount)) %>%
    slice(1:10) 
NA
NA
NA

library(ggplot2)
ggplot(clean_pov_line, aes(x=headcount, y=region_name, fill=region_name)) + 
    geom_boxplot()

NA
NA
NA


library(ggplot2)
ggplot(clean_pov_line, aes(x=poverty_gap, y=region_name, fill=region_name)) + 
    geom_boxplot()

NA
NA
NA

library(ggplot2)
ggplot(clean_pov_line, aes(x=poverty_severity, y=region_name, fill=region_name)) + 
    geom_boxplot()

NA
NA
NA
library(ggplot2)
ggplot(clean_pov_line, aes(x=gini, y=region_name, fill=region_name)) + 
    geom_boxplot()

NA
NA


library(ggplot2)
ggplot(clean_pov_line, aes(x=watts, y=region_name, fill=region_name)) + 
    geom_boxplot()



p=ggplot(clean_pov_line, aes(headcount, gini)) + 
  geom_point(size = 3, colour=4, shape=10) + geom_smooth(method='lm', fullrange = TRUE) + 
  labs(x = "Heacount", y = "Gini") + theme_bw() +
  theme(legend.position = "top", legend.text = element_text(size = 12), 
        legend.title = element_text(size = 14))

p


p + scale_x_continuous(trans = 'log10') +
  scale_y_continuous(trans = 'log10')

NA
NA
NA

MPI

library(readxl)
mpi<-read_excel("mpi_data.xlsx")



 library(dplyr)
 mpi %>%
    arrange(desc(mpi[,7])) %>%
    slice(1:10) 
NA
NA

 ## variable names in MPI dataset

ls(mpi)
 [1] "Assets"                                                                     
 [2] "Child mortality"                                                            
 [3] "Cooking \r\nfuel"                                                           
 [4] "Country"                                                                    
 [5] "Drinking water"                                                             
 [6] "Education"                                                                  
 [7] "Electricity"                                                                
 [8] "Headcount ratio: Population in multidimensional  destitution poverty\r\n(D)"
 [9] "Headcount ratio: Population in multidimensional poverty\r\n(H)"             
[10] "Health"                                                                     
[11] "Housing"                                                                    
[12] "In severe poverty (severity 50% or higher)"                                 
[13] "Inequality\r\namong the poor\r\n(variance)¹"                                
[14] "Intensity of deprivation among the poor\r\n(A)"                             
[15] "ISO\r\ncountry code"                                                        
[16] "ISO\r\ncountry numeric code"                                                
[17] "Living Standards"                                                           
[18] "Multidimensional Poverty Index\r\n(MPI = H*A)"                              
[19] "Nutrition"                                                                  
[20] "Proportion of MPI poor who are destitute"                                   
[21] "Sanitation"                                                                 
[22] "School attendance"                                                          
[23] "Survey"                                                                     
[24] "Total number of indicators included \r\n(out of ten)"                       
[25] "Vulnerable to poverty (who experience 20-33.32% intensity of deprivations)" 
[26] "World region"                                                               
[27] "Year"                                                                       
[28] "Years of schooling"                                                         

library(ggplot2)

ggplot(mpi, aes(x= `Multidimensional Poverty Index\r\n(MPI = H*A)`, y= `World region`, fill=`World region`)) + 
    geom_boxplot()

NA
NA
NA
NA

library(ggplot2)

ggplot(mpi, aes(x= `Headcount ratio: Population in multidimensional poverty\r\n(H)`, y= `World region`, fill=`World region`)) + 
    geom_boxplot()

NA
NA
NA
NA


library(ggplot2)

ggplot(mpi, aes(x= `Intensity of deprivation among the poor\r\n(A)`, y= `World region`, fill=`World region`)) + 
    geom_boxplot()

NA
NA
NA

ggplot(mpi, aes(x= `Inequality\r\namong the poor\r\n(variance)¹`, y= `World region`, fill=`World region`)) + 
    geom_boxplot()

NA
NA
NA

top_mpi<- mpi %>%
    arrange(desc(mpi[,7])) %>%
    slice(1:20) 
    

library(ggplot2)
package 㤼㸱ggplot2㤼㸲 was built under R version 4.0.5
ggplot(data = top_mpi, aes(x = reorder(`ISO\r\ncountry code`,-`Multidimensional Poverty Index\r\n(MPI = H*A)`), 
                           y = `Multidimensional Poverty Index\r\n(MPI = H*A)`)) + 
   geom_bar(stat = "identity", fill = "green", color = "red") + 
   labs(title = "Multidimensional Poverty Index: Top 20 Countries",
        x = "Country Code", y = "MPI") 

NA
NA
NA
H<- mpi %>%
    arrange(desc(mpi[,8])) %>%
    slice(1:20) 
    

library(ggplot2)
ggplot(data = H, aes(x = reorder(`ISO\r\ncountry code`,-`Headcount ratio: Population in multidimensional poverty\r\n(H)`), 
                           y = `Headcount ratio: Population in multidimensional poverty\r\n(H)`)) + 
   geom_bar(stat = "identity", fill = "brown", color = "red") + 
   labs(title = "Headcount ratio: Population in multidimensional poverty: Top 20 Countries",
        x = "Country Code", y = "Headcount ratio (H)")


A<- mpi %>%
    arrange(desc(mpi[,9])) %>%
    slice(1:20) 
    

library(ggplot2)
ggplot(data = A, aes(x = reorder(`ISO\r\ncountry code`,-`Intensity of deprivation among the poor\r\n(A)`), 
                           y = `Intensity of deprivation among the poor\r\n(A)`)) + 
   geom_bar(stat = "identity", fill = "blue", color = "red") + 
   labs(title = "Intensity of Deprivation Among the Poor (A): Top 20 Countries",
        x = "Country Code", y = "Intensity of Deprivation (A)")

NA
NA
NA



top_inequality<- mpi %>%
    arrange(desc(mpi[,12])) %>%
    slice(1:20) 
 top_inequality<- na.omit(top_inequality)


library(ggplot2)
ggplot(data = top_inequality, aes(x = reorder(`ISO\r\ncountry code`,-`Inequality\r\namong the poor\r\n(variance)¹`), 
                           y = `Inequality\r\namong the poor\r\n(variance)¹`, fill = `ISO\r\ncountry code`)) + 
   geom_bar(stat = "identity") + 
   labs(title = "Inequality Among the Poor, top 20",
        x = "Country Code", y = "Inequality Among the Poor") 

NA
NA
NA
NA

Serbia <- mpi[1,18:27]


Serbia<-as.data.frame(t(Serbia))
Serbia <- tibble::rownames_to_column(Serbia, "indicator")
names(Serbia)[2]<- "contribution"


ggplot(Serbia, aes(x = reorder(indicator,-contribution), y = contribution)) + 
  geom_bar(stat= "identity", fill = "skyblue2", width = 0.5) +
  ggtitle("Contribution of each indicator: Serbia") + xlab("")+
scale_x_discrete(guide = guide_axis(n.dodge=3))

NA
NA
NA


map1<- ggplot(mapdata1, aes(x=long, y=lat, group=group)) +
  geom_polygon(aes(fill= mpi), 
               color="black")



map2 <- map1 + scale_fill_gradient(name = "MPI", low = "yellow", high =  "red", na.value = "grey50")+
  theme(axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks = element_blank(),
        axis.title.y=element_blank(),
        axis.title.x=element_blank(),
        rect = element_blank()) + 
  ggtitle("Multidimensional Poverty Index")

map2

NA
NA
NA

Subnational MPI



regions<-readxl::read_excel('sub_national_mpi.xlsx')
 
 
 print(regions) 
NA

regions[,3:10] %>% filter(Country =="Afghanistan") 
NA
NA
NA

MPM

Human Development Index

LS0tDQp0aXRsZTogIkRyYWZ0OiBQb3ZlcnR5IGFuZCBEZXZlbG9wbWVudCBJbmRpY2F0b3JzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KDQpJbiB0aGlzIG5vdGVib29rLCB3ZSBwcm92aWRlIG11bHRpcGxlIHBvdmVydHkgYW5kIGRldmVsb3BtZW50IGluZGljYXRvcnMuIFRoaXMgaXMgaXMgdGhlIHZpc3VhbGl6YXRpb24gdG9vbCwgYW5kIGJlc2lkZXMgdGhhdCwgaXQgYWxzbyBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBpbnRlcnNlY3Rpb25zIGJldHdlZW4gZGlmZmVyZW50IHBvdmVydHkgYW5kIGRldmVsb3BtZW50IGluZGljYXRvcnMuIA0KDQoNCg0KIyBQb3ZlcnR5IExpbmVzIA0KDQogICAgDQoNCmBgYHtyfQ0KDQpjbGVhbl9wb3ZfbGluZTwtIHJlYWQuY3N2KCJjbGVhbl9wb3ZfbGluZS5jc3YiKQ0KDQogI2xpYnJhcnkoZHBseXIpDQogY2xlYW5fcG92X2xpbmUgJT4lDQogICAgYXJyYW5nZShkZXNjKGhlYWRjb3VudCkpICU+JQ0KICAgIHNsaWNlKDE6MTApIA0KICAgIA0KDQoNCmBgYA0KDQoNCg0KYGBge3J9DQoNCiNsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoY2xlYW5fcG92X2xpbmUsIGFlcyh4PWhlYWRjb3VudCwgeT1yZWdpb25fbmFtZSwgZmlsbD1yZWdpb25fbmFtZSkpICsgDQogICAgZ2VvbV9ib3hwbG90KCkNCg0KDQoNCmBgYA0KDQoNCg0KYGBge3J9DQoNCg0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGNsZWFuX3Bvdl9saW5lLCBhZXMoeD1wb3ZlcnR5X2dhcCwgeT1yZWdpb25fbmFtZSwgZmlsbD1yZWdpb25fbmFtZSkpICsgDQogICAgZ2VvbV9ib3hwbG90KCkNCg0KDQoNCmBgYA0KDQoNCg0KYGBge3J9DQoNCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdChjbGVhbl9wb3ZfbGluZSwgYWVzKHg9cG92ZXJ0eV9zZXZlcml0eSwgeT1yZWdpb25fbmFtZSwgZmlsbD1yZWdpb25fbmFtZSkpICsgDQogICAgZ2VvbV9ib3hwbG90KCkNCg0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGNsZWFuX3Bvdl9saW5lLCBhZXMoeD1naW5pLCB5PXJlZ2lvbl9uYW1lLCBmaWxsPXJlZ2lvbl9uYW1lKSkgKyANCiAgICBnZW9tX2JveHBsb3QoKQ0KDQoNCmBgYA0KDQoNCg0KYGBge3J9DQoNCg0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGNsZWFuX3Bvdl9saW5lLCBhZXMoeD13YXR0cywgeT1yZWdpb25fbmFtZSwgZmlsbD1yZWdpb25fbmFtZSkpICsgDQogICAgZ2VvbV9ib3hwbG90KCkNCg0KYGBgDQoNCg0KDQoNCmBgYHtyfQ0KDQoNCnA9Z2dwbG90KGNsZWFuX3Bvdl9saW5lLCBhZXMoaGVhZGNvdW50LCBnaW5pKSkgKyANCiAgZ2VvbV9wb2ludChzaXplID0gMywgY29sb3VyPTQsIHNoYXBlPTEwKSArIGdlb21fc21vb3RoKG1ldGhvZD0nbG0nLCBmdWxscmFuZ2UgPSBUUlVFKSArIA0KICBsYWJzKHggPSAiSGVhZGNvdW50IiwgeSA9ICJHaW5pIikgKyB0aGVtZV9idygpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIsIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksIA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSkNCg0KcA0KDQpwICsgc2NhbGVfeF9jb250aW51b3VzKHRyYW5zID0gJ2xvZzEwJykgKw0KICBzY2FsZV95X2NvbnRpbnVvdXModHJhbnMgPSAnbG9nMTAnKQ0KDQoNCg0KYGBgDQoNCg0KIyBNUEkgDQoNCg0KDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQptcGk8LXJlYWRfZXhjZWwoIm1waV9kYXRhLnhsc3giKQ0KDQoNCg0KIGxpYnJhcnkoZHBseXIpDQogbXBpICU+JQ0KICAgIGFycmFuZ2UoZGVzYyhtcGlbLDddKSkgJT4lDQogICAgc2xpY2UoMToxMCkgDQogICAgDQoNCmBgYA0KDQpgYGB7cn0NCg0KICMjIHZhcmlhYmxlIG5hbWVzIGluIE1QSSBkYXRhc2V0DQoNCmxzKG1waSkNCg0KDQpgYGANCg0KDQoNCmBgYHtyfQ0KDQpsaWJyYXJ5KGdncGxvdDIpDQoNCmdncGxvdChtcGksIGFlcyh4PSBgTXVsdGlkaW1lbnNpb25hbCBQb3ZlcnR5IEluZGV4XHJcbihNUEkgPSBIKkEpYCwgeT0gYFdvcmxkIHJlZ2lvbmAsIGZpbGw9YFdvcmxkIHJlZ2lvbmApKSArIA0KICAgIGdlb21fYm94cGxvdCgpDQoNCg0KDQoNCmBgYA0KDQoNCg0KYGBge3J9DQoNCmxpYnJhcnkoZ2dwbG90MikNCg0KZ2dwbG90KG1waSwgYWVzKHg9IGBIZWFkY291bnQgcmF0aW86IFBvcHVsYXRpb24gaW4gbXVsdGlkaW1lbnNpb25hbCBwb3ZlcnR5XHJcbihIKWAsIHk9IGBXb3JsZCByZWdpb25gLCBmaWxsPWBXb3JsZCByZWdpb25gKSkgKyANCiAgICBnZW9tX2JveHBsb3QoKQ0KDQoNCg0KDQpgYGANCg0KDQpgYGB7cn0NCg0KDQpsaWJyYXJ5KGdncGxvdDIpDQoNCmdncGxvdChtcGksIGFlcyh4PSBgSW50ZW5zaXR5IG9mIGRlcHJpdmF0aW9uIGFtb25nIHRoZSBwb29yXHJcbihBKWAsIHk9IGBXb3JsZCByZWdpb25gLCBmaWxsPWBXb3JsZCByZWdpb25gKSkgKyANCiAgICBnZW9tX2JveHBsb3QoKQ0KDQoNCg0KYGBgDQoNCmBgYHtyfQ0KDQpnZ3Bsb3QobXBpLCBhZXMoeD0gYEluZXF1YWxpdHlcclxuYW1vbmcgdGhlIHBvb3JcclxuKHZhcmlhbmNlKcK5YCwgeT0gYFdvcmxkIHJlZ2lvbmAsIGZpbGw9YFdvcmxkIHJlZ2lvbmApKSArIA0KICAgIGdlb21fYm94cGxvdCgpDQoNCg0KDQpgYGANCg0KDQoNCg0KDQoNCmBgYHtyfQ0KDQp0b3BfbXBpPC0gbXBpICU+JQ0KICAgIGFycmFuZ2UoZGVzYyhtcGlbLDddKSkgJT4lDQogICAgc2xpY2UoMToyMCkgDQogICAgDQoNCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdChkYXRhID0gdG9wX21waSwgYWVzKHggPSByZW9yZGVyKGBJU09cclxuY291bnRyeSBjb2RlYCwtYE11bHRpZGltZW5zaW9uYWwgUG92ZXJ0eSBJbmRleFxyXG4oTVBJID0gSCpBKWApLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBgTXVsdGlkaW1lbnNpb25hbCBQb3ZlcnR5IEluZGV4XHJcbihNUEkgPSBIKkEpYCkpICsgDQogICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICJncmVlbiIsIGNvbG9yID0gInJlZCIpICsgDQogICBsYWJzKHRpdGxlID0gIk11bHRpZGltZW5zaW9uYWwgUG92ZXJ0eSBJbmRleDogVG9wIDIwIENvdW50cmllcyIsDQogICAgICAgIHggPSAiQ291bnRyeSBDb2RlIiwgeSA9ICJNUEkiKSANCg0KDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCmBgYHtyfQ0KSDwtIG1waSAlPiUNCiAgICBhcnJhbmdlKGRlc2MobXBpWyw4XSkpICU+JQ0KICAgIHNsaWNlKDE6MjApIA0KICAgIA0KDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGF0YSA9IEgsIGFlcyh4ID0gcmVvcmRlcihgSVNPXHJcbmNvdW50cnkgY29kZWAsLWBIZWFkY291bnQgcmF0aW86IFBvcHVsYXRpb24gaW4gbXVsdGlkaW1lbnNpb25hbCBwb3ZlcnR5XHJcbihIKWApLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBgSGVhZGNvdW50IHJhdGlvOiBQb3B1bGF0aW9uIGluIG11bHRpZGltZW5zaW9uYWwgcG92ZXJ0eVxyXG4oSClgKSkgKyANCiAgIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBmaWxsID0gImJyb3duIiwgY29sb3IgPSAicmVkIikgKyANCiAgIGxhYnModGl0bGUgPSAiSGVhZGNvdW50IHJhdGlvOiBQb3B1bGF0aW9uIGluIG11bHRpZGltZW5zaW9uYWwgcG92ZXJ0eTogVG9wIDIwIENvdW50cmllcyIsDQogICAgICAgIHggPSAiQ291bnRyeSBDb2RlIiwgeSA9ICJIZWFkY291bnQgcmF0aW8gKEgpIikNCg0KYGBgDQoNCmBgYHtyfQ0KDQpBPC0gbXBpICU+JQ0KICAgIGFycmFuZ2UoZGVzYyhtcGlbLDldKSkgJT4lDQogICAgc2xpY2UoMToyMCkgDQogICAgDQoNCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdChkYXRhID0gQSwgYWVzKHggPSByZW9yZGVyKGBJU09cclxuY291bnRyeSBjb2RlYCwtYEludGVuc2l0eSBvZiBkZXByaXZhdGlvbiBhbW9uZyB0aGUgcG9vclxyXG4oQSlgKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYEludGVuc2l0eSBvZiBkZXByaXZhdGlvbiBhbW9uZyB0aGUgcG9vclxyXG4oQSlgKSkgKyANCiAgIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBmaWxsID0gImJsdWUiLCBjb2xvciA9ICJyZWQiKSArIA0KICAgbGFicyh0aXRsZSA9ICJJbnRlbnNpdHkgb2YgRGVwcml2YXRpb24gQW1vbmcgdGhlIFBvb3IgKEEpOiBUb3AgMjAgQ291bnRyaWVzIiwNCiAgICAgICAgeCA9ICJDb3VudHJ5IENvZGUiLCB5ID0gIkludGVuc2l0eSBvZiBEZXByaXZhdGlvbiAoQSkiKQ0KDQoNCg0KYGBgDQoNCg0KDQoNCg0KDQoNCmBgYHtyfQ0KDQp0b3BfaW5lcXVhbGl0eTwtIG1waSAlPiUNCiAgICBhcnJhbmdlKGRlc2MobXBpWywxMl0pKSAlPiUNCiAgICBzbGljZSgxOjIwKSANCiB0b3BfaW5lcXVhbGl0eTwtIG5hLm9taXQodG9wX2luZXF1YWxpdHkpDQoNCg0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGRhdGEgPSB0b3BfaW5lcXVhbGl0eSwgYWVzKHggPSByZW9yZGVyKGBJU09cclxuY291bnRyeSBjb2RlYCwtYEluZXF1YWxpdHlcclxuYW1vbmcgdGhlIHBvb3JcclxuKHZhcmlhbmNlKcK5YCksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGBJbmVxdWFsaXR5XHJcbmFtb25nIHRoZSBwb29yXHJcbih2YXJpYW5jZSnCuWAsIGZpbGwgPSBgSVNPXHJcbmNvdW50cnkgY29kZWApKSArIA0KICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsgDQogICBsYWJzKHRpdGxlID0gIkluZXF1YWxpdHkgQW1vbmcgdGhlIFBvb3IsIHRvcCAyMCIsDQogICAgICAgIHggPSAiQ291bnRyeSBDb2RlIiwgeSA9ICJJbmVxdWFsaXR5IEFtb25nIHRoZSBQb29yIikgDQogICANCg0KDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQpgYGB7cn0NCg0KU2VyYmlhIDwtIG1waVsxLDE4OjI3XQ0KDQoNClNlcmJpYTwtYXMuZGF0YS5mcmFtZSh0KFNlcmJpYSkpDQpTZXJiaWEgPC0gdGliYmxlOjpyb3duYW1lc190b19jb2x1bW4oU2VyYmlhLCAiaW5kaWNhdG9yIikNCm5hbWVzKFNlcmJpYSlbMl08LSAiY29udHJpYnV0aW9uIg0KDQoNCmdncGxvdChTZXJiaWEsIGFlcyh4ID0gcmVvcmRlcihpbmRpY2F0b3IsLWNvbnRyaWJ1dGlvbiksIHkgPSBjb250cmlidXRpb24pKSArIA0KICBnZW9tX2JhcihzdGF0PSAiaWRlbnRpdHkiLCBmaWxsID0gInNreWJsdWUyIiwgd2lkdGggPSAwLjUpICsNCiAgZ2d0aXRsZSgiQ29udHJpYnV0aW9uIG9mIGVhY2ggaW5kaWNhdG9yOiBTZXJiaWEiKSArIHhsYWIoIiIpKw0Kc2NhbGVfeF9kaXNjcmV0ZShndWlkZSA9IGd1aWRlX2F4aXMobi5kb2RnZT0zKSkNCg0KDQoNCmBgYA0KDQpgYGB7cn0NCg0KDQptYXAxPC0gZ2dwbG90KG1hcGRhdGExLCBhZXMoeD1sb25nLCB5PWxhdCwgZ3JvdXA9Z3JvdXApKSArDQogIGdlb21fcG9seWdvbihhZXMoZmlsbD0gbXBpKSwgDQogICAgICAgICAgICAgICBjb2xvcj0iYmxhY2siKQ0KDQoNCg0KbWFwMiA8LSBtYXAxICsgc2NhbGVfZmlsbF9ncmFkaWVudChuYW1lID0gIk1QSSIsIGxvdyA9ICJ5ZWxsb3ciLCBoaWdoID0gICJyZWQiLCBuYS52YWx1ZSA9ICJncmV5NTAiKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLnk9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLng9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICByZWN0ID0gZWxlbWVudF9ibGFuaygpKSArIA0KICBnZ3RpdGxlKCJNdWx0aWRpbWVuc2lvbmFsIFBvdmVydHkgSW5kZXgiKQ0KDQptYXAyDQoNCg0KDQpgYGANCg0KDQoNCg0KDQoNCiMgU3VibmF0aW9uYWwgTVBJIA0KDQpgYGB7cn0NCg0KDQpyZWdpb25zPC1yZWFkeGw6OnJlYWRfZXhjZWwoJ3N1Yl9uYXRpb25hbF9tcGkueGxzeCcpDQogDQogDQogcHJpbnQocmVnaW9ucykgDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpyZWdpb25zWywzOjEwXSAlPiUgZmlsdGVyKENvdW50cnkgPT0iQWZnaGFuaXN0YW4iKSANCiAgDQoNCg0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KIyBNUE0gDQoNCg0KDQoNCiMgSHVtYW4gRGV2ZWxvcG1lbnQgSW5kZXggDQoNCg0KDQoNCg0KDQoNCg0KDQo=