#{r} #require(devtools) #install_version("quanteda", version = "1.2.0", repos = "http://cran.us.r-project.org") #

library(readtext)
library(quanteda)
library(tidyverse)
library(stm)
library(tidytext)
library(haven)
library(data.table)

UNGD data are available on the Harvard Dataverse at https://doi.org/10.7910/DVN/0TJX8Y


DATA_DIR <- "~/Dropbox/Research/UNGDC projects/UN Data/" 

ungd_files <- readtext(paste0(DATA_DIR, "TXT/*"), 
                                 docvarsfrom = "filenames", 
                                 dvsep="_", 
                                 docvarnames = c("Country", "Session", "Year"))


ungd_files$doc_id <- str_replace(ungd_files$doc_id , ".txt", "") %>%
   str_replace(. , "_\\d{2}", "")
set.seed(123)
#Logicals for EU member states
EU <- c("BEL", "FRA", "DEU", "ITA", "LUX", "NLD")
wave1 <- c("DNK", "IRL", "GBR")
wave2 <- "GRC" 
wave3 <- c("ESP", "PRT") 
wave4 <- c("AUT", "FIN", "SWE") 
wave5 <- c("CZE", "HUN", "POL", "EST", "LVA", "LTU", "CYP", "MLT", "SVK", "SVN")
wave6 <- c("BGR", "ROU") 
wave7 <- "HRV" 
ungd_files$accession <- as.numeric(ungd_files$Year>2003)

ungd_files <- ungd_files %>% mutate(is.eu = as.numeric(Country %in% EU))

#first wave
ungd_files$is.eu[ungd_files$Country== "DNK" & ungd_files$Year >1972] <- 1
ungd_files$is.eu[ungd_files$Country== "IRL" & ungd_files$Year >1972] <- 1
ungd_files$is.eu[ungd_files$Country== "GBR" & ungd_files$Year >1972] <- 1

#second wave
ungd_files$is.eu[ungd_files$Country== "GRC" & ungd_files$Year >1980] <- 1

#third wave
ungd_files$is.eu[ungd_files$Country== "ESP" & ungd_files$Year >1985] <- 1
ungd_files$is.eu[ungd_files$Country== "PRT" & ungd_files$Year >1985] <- 1

#fourth wave
ungd_files$is.eu[ungd_files$Country== "AUT" & ungd_files$Year >1994] <- 1
ungd_files$is.eu[ungd_files$Country== "FIN" & ungd_files$Year >1994] <- 1
ungd_files$is.eu[ungd_files$Country== "SWE" & ungd_files$Year >1994] <- 1

#fifth wave
ungd_files$is.eu[ungd_files$Country== "CZE" & ungd_files$Year >2003] <- 1
ungd_files$is.eu[ungd_files$Country== "HUN" & ungd_files$Year >2003] <- 1
ungd_files$is.eu[ungd_files$Country== "POL" & ungd_files$Year >2003] <- 1
ungd_files$is.eu[ungd_files$Country== "EST" & ungd_files$Year >2003] <- 1
ungd_files$is.eu[ungd_files$Country== "LVA" & ungd_files$Year >2003] <- 1
ungd_files$is.eu[ungd_files$Country== "LTU" & ungd_files$Year >2003] <- 1
ungd_files$is.eu[ungd_files$Country== "CYP" & ungd_files$Year >2003] <- 1
ungd_files$is.eu[ungd_files$Country== "MLT" & ungd_files$Year >2003] <- 1
ungd_files$is.eu[ungd_files$Country== "SVK" & ungd_files$Year >2003] <- 1
ungd_files$is.eu[ungd_files$Country== "SVN" & ungd_files$Year >2003] <- 1

#sixth wave
ungd_files$is.eu[ungd_files$Country== "BGR" & ungd_files$Year >2006] <- 1
ungd_files$is.eu[ungd_files$Country== "ROU" & ungd_files$Year >2006] <- 1

#seventh wave
ungd_files$is.eu[ungd_files$Country== "HRV" & ungd_files$Year >2012] <- 1
ungd_files <-  mutate(ungd_files, eu6 = as.numeric(Country %in% EU))
#simil <-  mutate(simil, wave1 = Country %in% wave1)
#simil <-  mutate(simil, wave2 = Country %in% wave2)
#simil <-  mutate(simil, wave3 = Country %in% wave3)
#simil <-  mutate(simil, wave4 = Country %in% wave4)
ungd_files <-  mutate(ungd_files, eu10 = as.numeric(Country %in% wave5))
#simil <-  mutate(simil, wave6 = Country %in% wave6)
#simil <-  mutate(simil, wave7 = Country %in% wave7)
ungd_files <-  mutate(ungd_files, eu9 = eu6)
ungd_files$eu9[ungd_files$Country== "DNK" & ungd_files$Year >1972] <- 1
ungd_files$eu9[ungd_files$Country== "IRL" & ungd_files$Year >1972] <- 1
ungd_files$eu9[ungd_files$Country== "GBR" & ungd_files$Year >1972] <- 1

ungd_files <-  mutate(ungd_files, eu12 = eu9)
ungd_files$eu12[ungd_files$Country== "GRC" & ungd_files$Year >1980] <- 1
ungd_files$eu12[ungd_files$Country== "ESP" & ungd_files$Year >1985] <- 1
ungd_files$eu12[ungd_files$Country== "PRT" & ungd_files$Year >1985] <- 1

ungd_files <-  mutate(ungd_files, eu15 = eu12)
ungd_files$eu15[ungd_files$Country== "AUT" & ungd_files$Year >1994] <- 1
ungd_files$eu15[ungd_files$Country== "FIN" & ungd_files$Year >1994] <- 1
ungd_files$eu15[ungd_files$Country== "SWE" & ungd_files$Year >1994] <- 1
ungd_corpus <- corpus(ungd_files, text_field = "text")
ungd_corpus.10y2004 <- corpus_subset(ungd_corpus, Year>1993 & Year<2014)

Figure 5 (and figures 14-15 in supplementary materials)

dfm_eu10_10 <- corpus_subset(ungd_corpus.10y2004, eu10==1) %>% 
  tokens(what = "word", 
         remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE) %>% 
  tokens_select(stopwords("english"), selection = "remove", padding = TRUE) %>%
  tokens(ngrams = c(2)) %>%
  dfm(groups = "accession")

#keyness analysis
keyness_eu10_10 <-  textstat_keyness(dfm_eu10_10, target = 2)

#plotting keyness
keyplot <- textplot_keyness(keyness_eu10_10, margin = 0.2, labelsize = 2, color = c("red", "darkblue"), n = 30) +
  theme(legend.position="none")

ggsave(keyplot,filename="keyness_eu10_10y2004.pdf", width = 7, height = 7)

dfm_eu10_10@Dimnames$docs <- c("1994-2003", "2004-2013")

#plotting wordcloud
pdf("wordcloud_eu10_10y2004.pdf", width = 7, height = 7)
textplot_wordcloud(dfm_eu10_10,comparison = TRUE, max_words = 300, color = c("blue", "red"))
dev.off()

Figure 16-17 in supplementary materials

dfm_eu6_10 <- corpus_subset(ungd_corpus.10y2004, eu6==1) %>% 
  tokens(what = "word", 
         remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE) %>% 
  tokens_select(stopwords("english"), selection = "remove", padding = TRUE) %>%
  tokens(ngrams = c(2)) %>%
  dfm(groups = "accession")

#keyness analysis
keyness_eu6_10 <-  textstat_keyness(dfm_eu6_10, target = 2)

#plotting keyness
keyplot <- textplot_keyness(keyness_eu6_10, margin = 0.2, labelsize = 2, color = c("red", "darkblue"), n = 30) +
  theme(legend.position="none")

ggsave(keyplot,filename="keyness_eu6_10y2004.pdf", width = 7, height = 7)

dfm_eu6_10@Dimnames$docs <- c("1994-2003", "2004-2013")

#plotting wordcloud
pdf("wordcloud_eu6_10y2004.pdf", width = 7, height = 7)
textplot_wordcloud(dfm_eu6_10,comparison = TRUE, max_words = 300, color = c("blue", "red"))
dev.off()
LS0tCnRpdGxlOiAiS2V5bmVzcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgoKI2BgYHtyfQojcmVxdWlyZShkZXZ0b29scykKI2luc3RhbGxfdmVyc2lvbigicXVhbnRlZGEiLCB2ZXJzaW9uID0gIjEuMi4wIiwgcmVwb3MgPSAiaHR0cDovL2NyYW4udXMuci1wcm9qZWN0Lm9yZyIpCiNgYGAKCgpgYGB7ciwgbWVzc2FnZT1GQUxTRX0KbGlicmFyeShyZWFkdGV4dCkKbGlicmFyeShxdWFudGVkYSkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoc3RtKQpsaWJyYXJ5KHRpZHl0ZXh0KQpsaWJyYXJ5KGhhdmVuKQpsaWJyYXJ5KGRhdGEudGFibGUpCmBgYAoKVU5HRCBkYXRhIGFyZSBhdmFpbGFibGUgb24gdGhlIEhhcnZhcmQgRGF0YXZlcnNlIGF0IGh0dHBzOi8vZG9pLm9yZy8xMC43OTEwL0RWTi8wVEpYOFkKCgpgYGB7cn0KCkRBVEFfRElSIDwtICJ+L0Ryb3Bib3gvUmVzZWFyY2gvVU5HREMgcHJvamVjdHMvVU4gRGF0YS8iIAoKdW5nZF9maWxlcyA8LSByZWFkdGV4dChwYXN0ZTAoREFUQV9ESVIsICJUWFQvKiIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdmFyc2Zyb20gPSAiZmlsZW5hbWVzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR2c2VwPSJfIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3Zhcm5hbWVzID0gYygiQ291bnRyeSIsICJTZXNzaW9uIiwgIlllYXIiKSkKCgp1bmdkX2ZpbGVzJGRvY19pZCA8LSBzdHJfcmVwbGFjZSh1bmdkX2ZpbGVzJGRvY19pZCAsICIudHh0IiwgIiIpICU+JQogICBzdHJfcmVwbGFjZSguICwgIl9cXGR7Mn0iLCAiIikKCgpgYGAKCgpgYGB7cn0Kc2V0LnNlZWQoMTIzKQpgYGAKCgoKYGBge3J9CiNMb2dpY2FscyBmb3IgRVUgbWVtYmVyIHN0YXRlcwpFVSA8LSBjKCJCRUwiLCAiRlJBIiwgIkRFVSIsICJJVEEiLCAiTFVYIiwgIk5MRCIpCndhdmUxIDwtIGMoIkROSyIsICJJUkwiLCAiR0JSIikKd2F2ZTIgPC0gIkdSQyIgCndhdmUzIDwtIGMoIkVTUCIsICJQUlQiKSAKd2F2ZTQgPC0gYygiQVVUIiwgIkZJTiIsICJTV0UiKSAKd2F2ZTUgPC0gYygiQ1pFIiwgIkhVTiIsICJQT0wiLCAiRVNUIiwgIkxWQSIsICJMVFUiLCAiQ1lQIiwgIk1MVCIsICJTVksiLCAiU1ZOIikKd2F2ZTYgPC0gYygiQkdSIiwgIlJPVSIpIAp3YXZlNyA8LSAiSFJWIiAKYGBgCgoKCmBgYHtyfQp1bmdkX2ZpbGVzJGFjY2Vzc2lvbiA8LSBhcy5udW1lcmljKHVuZ2RfZmlsZXMkWWVhcj4yMDAzKQoKdW5nZF9maWxlcyA8LSB1bmdkX2ZpbGVzICU+JSBtdXRhdGUoaXMuZXUgPSBhcy5udW1lcmljKENvdW50cnkgJWluJSBFVSkpCgojZmlyc3Qgd2F2ZQp1bmdkX2ZpbGVzJGlzLmV1W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJETksiICYgdW5nZF9maWxlcyRZZWFyID4xOTcyXSA8LSAxCnVuZ2RfZmlsZXMkaXMuZXVbdW5nZF9maWxlcyRDb3VudHJ5PT0gIklSTCIgJiB1bmdkX2ZpbGVzJFllYXIgPjE5NzJdIDwtIDEKdW5nZF9maWxlcyRpcy5ldVt1bmdkX2ZpbGVzJENvdW50cnk9PSAiR0JSIiAmIHVuZ2RfZmlsZXMkWWVhciA+MTk3Ml0gPC0gMQoKI3NlY29uZCB3YXZlCnVuZ2RfZmlsZXMkaXMuZXVbdW5nZF9maWxlcyRDb3VudHJ5PT0gIkdSQyIgJiB1bmdkX2ZpbGVzJFllYXIgPjE5ODBdIDwtIDEKCiN0aGlyZCB3YXZlCnVuZ2RfZmlsZXMkaXMuZXVbdW5nZF9maWxlcyRDb3VudHJ5PT0gIkVTUCIgJiB1bmdkX2ZpbGVzJFllYXIgPjE5ODVdIDwtIDEKdW5nZF9maWxlcyRpcy5ldVt1bmdkX2ZpbGVzJENvdW50cnk9PSAiUFJUIiAmIHVuZ2RfZmlsZXMkWWVhciA+MTk4NV0gPC0gMQoKI2ZvdXJ0aCB3YXZlCnVuZ2RfZmlsZXMkaXMuZXVbdW5nZF9maWxlcyRDb3VudHJ5PT0gIkFVVCIgJiB1bmdkX2ZpbGVzJFllYXIgPjE5OTRdIDwtIDEKdW5nZF9maWxlcyRpcy5ldVt1bmdkX2ZpbGVzJENvdW50cnk9PSAiRklOIiAmIHVuZ2RfZmlsZXMkWWVhciA+MTk5NF0gPC0gMQp1bmdkX2ZpbGVzJGlzLmV1W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJTV0UiICYgdW5nZF9maWxlcyRZZWFyID4xOTk0XSA8LSAxCgojZmlmdGggd2F2ZQp1bmdkX2ZpbGVzJGlzLmV1W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJDWkUiICYgdW5nZF9maWxlcyRZZWFyID4yMDAzXSA8LSAxCnVuZ2RfZmlsZXMkaXMuZXVbdW5nZF9maWxlcyRDb3VudHJ5PT0gIkhVTiIgJiB1bmdkX2ZpbGVzJFllYXIgPjIwMDNdIDwtIDEKdW5nZF9maWxlcyRpcy5ldVt1bmdkX2ZpbGVzJENvdW50cnk9PSAiUE9MIiAmIHVuZ2RfZmlsZXMkWWVhciA+MjAwM10gPC0gMQp1bmdkX2ZpbGVzJGlzLmV1W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJFU1QiICYgdW5nZF9maWxlcyRZZWFyID4yMDAzXSA8LSAxCnVuZ2RfZmlsZXMkaXMuZXVbdW5nZF9maWxlcyRDb3VudHJ5PT0gIkxWQSIgJiB1bmdkX2ZpbGVzJFllYXIgPjIwMDNdIDwtIDEKdW5nZF9maWxlcyRpcy5ldVt1bmdkX2ZpbGVzJENvdW50cnk9PSAiTFRVIiAmIHVuZ2RfZmlsZXMkWWVhciA+MjAwM10gPC0gMQp1bmdkX2ZpbGVzJGlzLmV1W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJDWVAiICYgdW5nZF9maWxlcyRZZWFyID4yMDAzXSA8LSAxCnVuZ2RfZmlsZXMkaXMuZXVbdW5nZF9maWxlcyRDb3VudHJ5PT0gIk1MVCIgJiB1bmdkX2ZpbGVzJFllYXIgPjIwMDNdIDwtIDEKdW5nZF9maWxlcyRpcy5ldVt1bmdkX2ZpbGVzJENvdW50cnk9PSAiU1ZLIiAmIHVuZ2RfZmlsZXMkWWVhciA+MjAwM10gPC0gMQp1bmdkX2ZpbGVzJGlzLmV1W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJTVk4iICYgdW5nZF9maWxlcyRZZWFyID4yMDAzXSA8LSAxCgojc2l4dGggd2F2ZQp1bmdkX2ZpbGVzJGlzLmV1W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJCR1IiICYgdW5nZF9maWxlcyRZZWFyID4yMDA2XSA8LSAxCnVuZ2RfZmlsZXMkaXMuZXVbdW5nZF9maWxlcyRDb3VudHJ5PT0gIlJPVSIgJiB1bmdkX2ZpbGVzJFllYXIgPjIwMDZdIDwtIDEKCiNzZXZlbnRoIHdhdmUKdW5nZF9maWxlcyRpcy5ldVt1bmdkX2ZpbGVzJENvdW50cnk9PSAiSFJWIiAmIHVuZ2RfZmlsZXMkWWVhciA+MjAxMl0gPC0gMQpgYGAKCgpgYGB7cn0KdW5nZF9maWxlcyA8LSAgbXV0YXRlKHVuZ2RfZmlsZXMsIGV1NiA9IGFzLm51bWVyaWMoQ291bnRyeSAlaW4lIEVVKSkKI3NpbWlsIDwtICBtdXRhdGUoc2ltaWwsIHdhdmUxID0gQ291bnRyeSAlaW4lIHdhdmUxKQojc2ltaWwgPC0gIG11dGF0ZShzaW1pbCwgd2F2ZTIgPSBDb3VudHJ5ICVpbiUgd2F2ZTIpCiNzaW1pbCA8LSAgbXV0YXRlKHNpbWlsLCB3YXZlMyA9IENvdW50cnkgJWluJSB3YXZlMykKI3NpbWlsIDwtICBtdXRhdGUoc2ltaWwsIHdhdmU0ID0gQ291bnRyeSAlaW4lIHdhdmU0KQp1bmdkX2ZpbGVzIDwtICBtdXRhdGUodW5nZF9maWxlcywgZXUxMCA9IGFzLm51bWVyaWMoQ291bnRyeSAlaW4lIHdhdmU1KSkKI3NpbWlsIDwtICBtdXRhdGUoc2ltaWwsIHdhdmU2ID0gQ291bnRyeSAlaW4lIHdhdmU2KQojc2ltaWwgPC0gIG11dGF0ZShzaW1pbCwgd2F2ZTcgPSBDb3VudHJ5ICVpbiUgd2F2ZTcpCmBgYAoKYGBge3J9CnVuZ2RfZmlsZXMgPC0gIG11dGF0ZSh1bmdkX2ZpbGVzLCBldTkgPSBldTYpCnVuZ2RfZmlsZXMkZXU5W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJETksiICYgdW5nZF9maWxlcyRZZWFyID4xOTcyXSA8LSAxCnVuZ2RfZmlsZXMkZXU5W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJJUkwiICYgdW5nZF9maWxlcyRZZWFyID4xOTcyXSA8LSAxCnVuZ2RfZmlsZXMkZXU5W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJHQlIiICYgdW5nZF9maWxlcyRZZWFyID4xOTcyXSA8LSAxCgp1bmdkX2ZpbGVzIDwtICBtdXRhdGUodW5nZF9maWxlcywgZXUxMiA9IGV1OSkKdW5nZF9maWxlcyRldTEyW3VuZ2RfZmlsZXMkQ291bnRyeT09ICJHUkMiICYgdW5nZF9maWxlcyRZZWFyID4xOTgwXSA8LSAxCnVuZ2RfZmlsZXMkZXUxMlt1bmdkX2ZpbGVzJENvdW50cnk9PSAiRVNQIiAmIHVuZ2RfZmlsZXMkWWVhciA+MTk4NV0gPC0gMQp1bmdkX2ZpbGVzJGV1MTJbdW5nZF9maWxlcyRDb3VudHJ5PT0gIlBSVCIgJiB1bmdkX2ZpbGVzJFllYXIgPjE5ODVdIDwtIDEKCnVuZ2RfZmlsZXMgPC0gIG11dGF0ZSh1bmdkX2ZpbGVzLCBldTE1ID0gZXUxMikKdW5nZF9maWxlcyRldTE1W3VuZ2RfZmlsZXMkQ291bnRyeT09ICJBVVQiICYgdW5nZF9maWxlcyRZZWFyID4xOTk0XSA8LSAxCnVuZ2RfZmlsZXMkZXUxNVt1bmdkX2ZpbGVzJENvdW50cnk9PSAiRklOIiAmIHVuZ2RfZmlsZXMkWWVhciA+MTk5NF0gPC0gMQp1bmdkX2ZpbGVzJGV1MTVbdW5nZF9maWxlcyRDb3VudHJ5PT0gIlNXRSIgJiB1bmdkX2ZpbGVzJFllYXIgPjE5OTRdIDwtIDEKCmBgYAoKCgoKCgpgYGB7cn0KdW5nZF9jb3JwdXMgPC0gY29ycHVzKHVuZ2RfZmlsZXMsIHRleHRfZmllbGQgPSAidGV4dCIpCmBgYAoKCmBgYHtyfQp1bmdkX2NvcnB1cy4xMHkyMDA0IDwtIGNvcnB1c19zdWJzZXQodW5nZF9jb3JwdXMsIFllYXI+MTk5MyAmIFllYXI8MjAxNCkKYGBgCgoKIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMgRmlndXJlIDUgKGFuZCBmaWd1cmVzIDE0LTE1IGluIHN1cHBsZW1lbnRhcnkgbWF0ZXJpYWxzKQojIyMjIyMjIyMjIyMjIyMjIwoKYGBge3IgZXUxMCAxMF8yMDA0fQpkZm1fZXUxMF8xMCA8LSBjb3JwdXNfc3Vic2V0KHVuZ2RfY29ycHVzLjEweTIwMDQsIGV1MTA9PTEpICU+JSAKICB0b2tlbnMod2hhdCA9ICJ3b3JkIiwgCiAgICAgICAgIHJlbW92ZV9wdW5jdCA9IFRSVUUsIHJlbW92ZV9udW1iZXJzID0gVFJVRSwgcmVtb3ZlX3N5bWJvbHMgPSBUUlVFKSAlPiUgCiAgdG9rZW5zX3NlbGVjdChzdG9wd29yZHMoImVuZ2xpc2giKSwgc2VsZWN0aW9uID0gInJlbW92ZSIsIHBhZGRpbmcgPSBUUlVFKSAlPiUKICB0b2tlbnMobmdyYW1zID0gYygyKSkgJT4lCiAgZGZtKGdyb3VwcyA9ICJhY2Nlc3Npb24iKQoKI2tleW5lc3MgYW5hbHlzaXMKa2V5bmVzc19ldTEwXzEwIDwtICB0ZXh0c3RhdF9rZXluZXNzKGRmbV9ldTEwXzEwLCB0YXJnZXQgPSAyKQoKI3Bsb3R0aW5nIGtleW5lc3MKa2V5cGxvdCA8LSB0ZXh0cGxvdF9rZXluZXNzKGtleW5lc3NfZXUxMF8xMCwgbWFyZ2luID0gMC4yLCBsYWJlbHNpemUgPSAyLCBjb2xvciA9IGMoInJlZCIsICJkYXJrYmx1ZSIpLCBuID0gMzApICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQoKZ2dzYXZlKGtleXBsb3QsZmlsZW5hbWU9ImtleW5lc3NfZXUxMF8xMHkyMDA0LnBkZiIsIHdpZHRoID0gNywgaGVpZ2h0ID0gNykKCmRmbV9ldTEwXzEwQERpbW5hbWVzJGRvY3MgPC0gYygiMTk5NC0yMDAzIiwgIjIwMDQtMjAxMyIpCgojcGxvdHRpbmcgd29yZGNsb3VkCnBkZigid29yZGNsb3VkX2V1MTBfMTB5MjAwNC5wZGYiLCB3aWR0aCA9IDcsIGhlaWdodCA9IDcpCnRleHRwbG90X3dvcmRjbG91ZChkZm1fZXUxMF8xMCxjb21wYXJpc29uID0gVFJVRSwgbWF4X3dvcmRzID0gMzAwLCBjb2xvciA9IGMoImJsdWUiLCAicmVkIikpCmRldi5vZmYoKQpgYGAKCgoKCiMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIEZpZ3VyZSAxNi0xNyBpbiBzdXBwbGVtZW50YXJ5IG1hdGVyaWFscwojIyMjIyMjIyMjIyMjIyMjIwoKYGBge3IgZXU2IDEwXzIwMDR9CmRmbV9ldTZfMTAgPC0gY29ycHVzX3N1YnNldCh1bmdkX2NvcnB1cy4xMHkyMDA0LCBldTY9PTEpICU+JSAKICB0b2tlbnMod2hhdCA9ICJ3b3JkIiwgCiAgICAgICAgIHJlbW92ZV9wdW5jdCA9IFRSVUUsIHJlbW92ZV9udW1iZXJzID0gVFJVRSwgcmVtb3ZlX3N5bWJvbHMgPSBUUlVFKSAlPiUgCiAgdG9rZW5zX3NlbGVjdChzdG9wd29yZHMoImVuZ2xpc2giKSwgc2VsZWN0aW9uID0gInJlbW92ZSIsIHBhZGRpbmcgPSBUUlVFKSAlPiUKICB0b2tlbnMobmdyYW1zID0gYygyKSkgJT4lCiAgZGZtKGdyb3VwcyA9ICJhY2Nlc3Npb24iKQoKI2tleW5lc3MgYW5hbHlzaXMKa2V5bmVzc19ldTZfMTAgPC0gIHRleHRzdGF0X2tleW5lc3MoZGZtX2V1Nl8xMCwgdGFyZ2V0ID0gMikKCiNwbG90dGluZyBrZXluZXNzCmtleXBsb3QgPC0gdGV4dHBsb3Rfa2V5bmVzcyhrZXluZXNzX2V1Nl8xMCwgbWFyZ2luID0gMC4yLCBsYWJlbHNpemUgPSAyLCBjb2xvciA9IGMoInJlZCIsICJkYXJrYmx1ZSIpLCBuID0gMzApICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQoKZ2dzYXZlKGtleXBsb3QsZmlsZW5hbWU9ImtleW5lc3NfZXU2XzEweTIwMDQucGRmIiwgd2lkdGggPSA3LCBoZWlnaHQgPSA3KQoKZGZtX2V1Nl8xMEBEaW1uYW1lcyRkb2NzIDwtIGMoIjE5OTQtMjAwMyIsICIyMDA0LTIwMTMiKQoKI3Bsb3R0aW5nIHdvcmRjbG91ZApwZGYoIndvcmRjbG91ZF9ldTZfMTB5MjAwNC5wZGYiLCB3aWR0aCA9IDcsIGhlaWdodCA9IDcpCnRleHRwbG90X3dvcmRjbG91ZChkZm1fZXU2XzEwLGNvbXBhcmlzb24gPSBUUlVFLCBtYXhfd29yZHMgPSAzMDAsIGNvbG9yID0gYygiYmx1ZSIsICJyZWQiKSkKZGV2Lm9mZigpCmBgYAoKCgo=