nyt_tweets <- get_timeline("nytimes", n = 5000)
wsj_tweets <- get_timeline("wsj", n = 5000)
wapo_tweets <- get_timeline("washingtonpost", n = 5000)
cnn_tweets <- get_timeline("cnn", n = 5000)
usa_tweets <- get_timeline("usatoday", n = 5000)
fox_tweets <- get_timeline("foxnews", n = 5000)
ap_tweets <- get_timeline("ap", n = 5000)
aje_tweets <- get_timeline("ajenglish", n = 5000)
bbc_tweets <- get_timeline("bbcworld", n = 5000)
reuters_tweets <- get_timeline("reuters", n = 5000)
nyt_words <- nyt_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
wsj_words <- wsj_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
wapo_words <- wapo_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
cnn_words <- cnn_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
usa_words <- usa_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
fox_words <- fox_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
ap_words <- ap_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
aje_words <- aje_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
bbc_words <- bbc_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
reuters_words <- reuters_tweets %>%
unnest_tokens(word, text) %>%
select(screen_name, word, created_at)
First, I pulled 5000 of the most recent tweets from ten news organizations, both local and abroad, and broke them down into their wording in order to correlate the verbiage with their sentiments.
nyt_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
wsj_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
cnn_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
fox_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
wapo_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
usa_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
ap_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
aje_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
bbc_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
reuters_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
These tables show the words used by each news station, organized by count.
news_words <- cnn_words %>%
full_join(fox_words) %>%
full_join(nyt_words) %>%
full_join(usa_words) %>%
full_join(wapo_words) %>%
full_join(wsj_words) %>%
full_join(aje_words) %>%
full_join(ap_words) %>%
full_join(bbc_words) %>%
full_join(reuters_words)
Joining, by = c("screen_name", "word", "created_at")
Joining, by = c("screen_name", "word", "created_at")
Joining, by = c("screen_name", "word", "created_at")
Joining, by = c("screen_name", "word", "created_at")
Joining, by = c("screen_name", "word", "created_at")
Joining, by = c("screen_name", "word", "created_at")
Joining, by = c("screen_name", "word", "created_at")
Joining, by = c("screen_name", "word", "created_at")
Joining, by = c("screen_name", "word", "created_at")
I combined all of the words utilized by the stations into one overarching group in order to analyze them as a whole.
news_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)
Joining, by = "word"
This table shows the most frequently used words, ranked by count. Coronavirus is (unsurprisingly) at the top.
news_words %>%
anti_join(get_stopwords()) %>%
filter(!word == "https") %>%
filter(!word == "t.co") %>%
count(word, sort = T)%>%
top_n(1000) %>%
wordcloud2(size = .6)
Joining, by = "word"
Selecting by n
This word cloud includes the top 1000 words most frequently used by news organizations.
bing_words <- get_sentiments("bing")
news_words %>%
inner_join(bing_words) %>%
filter(!word == "trump") %>%
filter(!word == "like") %>%
count(word, sentiment, sort = TRUE) %>%
group_by(sentiment) %>%
top_n(10) %>%
ungroup() %>%
mutate(word = reorder(word, n)) %>%
ggplot(aes(word, n, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(vars(sentiment), scales = "free") +
labs(y = "Bing Sentiment Contribution by Word (Major News Outlet Tweets)",
x = NULL) +
coord_flip() +
theme_minimal()
Joining, by = "word"
Selecting by n

Here are the top words organized by Bing Sentiment. The pandemic is terrifying. Here is proof.
nrc_words <- get_sentiments("nrc")
nrc_sentiments <- news_words %>%
inner_join(nrc_words) %>%
filter(!word == "trump") %>%
count(word, sentiment, screen_name, sort = TRUE) %>%
group_by(sentiment) %>%
top_n(1000) %>%
ungroup() %>%
mutate(word = reorder(word, n))
Joining, by = "word"
Selecting by n
sentiments_labeled <- nrc_sentiments
number_of_bar <- nrow(sentiments_labeled)
angle <- 90 - 360 * (nrc_sentiments$n-0.5) /number_of_bar
sentiments_labeled$hjust <- ifelse( angle < -90, 1, 0)
sentiments_labeled$angle <- ifelse(angle < -90, angle+180, angle)
nrc_sentiments %>%
ggplot(aes(x = screen_name, y = n , fill = sentiment)) +
geom_bar(position="fill", stat = "identity") +
labs(y = "",
x = "Screen Name",
title = "NRC Sentiment Contribution by Word",
fill = "Sentiments") +
theme_gray() +
scale_fill_brewer(palette="Paired") +
theme(axis.text.x = element_text(angle = 90))

This is a visual representation of the words used and the sentiments they portray across all ten news stations. The most angry and also the most trusting news station is Fox. “Most Watched, Most Trusted”
CNN beats out USA by a close margin for the least angry.
news_words %>%
inner_join(nrc_words) %>%
filter(!word == "trump") %>%
count(word, sentiment, sort = TRUE) %>%
group_by(sentiment) %>%
top_n(5) %>%
ungroup() %>%
mutate(word = reorder(word, n)) %>%
ggplot(aes(word, n, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(vars(sentiment), scales = "free") +
labs(y = "NRC Sentiment Contribution by Word (Major News Network Tweets)",
x = NULL) +
coord_flip() +
theme_minimal()
Joining, by = "word"
Selecting by n

This is a more specific representation of what words are being used across news media.
LS0tCnRpdGxlOiAiU2VudGltZW50cyBvZiBXb3JsZCBOZXdzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7cn0Kbnl0X3R3ZWV0cyA8LSBnZXRfdGltZWxpbmUoIm55dGltZXMiLCBuID0gNTAwMCkKd3NqX3R3ZWV0cyA8LSBnZXRfdGltZWxpbmUoIndzaiIsIG4gPSA1MDAwKQp3YXBvX3R3ZWV0cyA8LSBnZXRfdGltZWxpbmUoIndhc2hpbmd0b25wb3N0IiwgbiA9IDUwMDApCmNubl90d2VldHMgPC0gZ2V0X3RpbWVsaW5lKCJjbm4iLCBuID0gNTAwMCkKdXNhX3R3ZWV0cyA8LSBnZXRfdGltZWxpbmUoInVzYXRvZGF5IiwgbiA9IDUwMDApCmZveF90d2VldHMgPC0gZ2V0X3RpbWVsaW5lKCJmb3huZXdzIiwgbiA9IDUwMDApCmFwX3R3ZWV0cyA8LSBnZXRfdGltZWxpbmUoImFwIiwgbiA9IDUwMDApCmFqZV90d2VldHMgPC0gZ2V0X3RpbWVsaW5lKCJhamVuZ2xpc2giLCBuID0gNTAwMCkKYmJjX3R3ZWV0cyA8LSBnZXRfdGltZWxpbmUoImJiY3dvcmxkIiwgbiA9IDUwMDApCnJldXRlcnNfdHdlZXRzIDwtIGdldF90aW1lbGluZSgicmV1dGVycyIsIG4gPSA1MDAwKQpgYGAKCmBgYHtyfQpueXRfd29yZHMgPC0gbnl0X3R3ZWV0cyAlPiUgCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCB0ZXh0KSAlPiUgCiAgc2VsZWN0KHNjcmVlbl9uYW1lLCB3b3JkLCBjcmVhdGVkX2F0KQp3c2pfd29yZHMgPC0gd3NqX3R3ZWV0cyAlPiUgCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCB0ZXh0KSAlPiUgCiAgc2VsZWN0KHNjcmVlbl9uYW1lLCB3b3JkLCBjcmVhdGVkX2F0KQp3YXBvX3dvcmRzIDwtIHdhcG9fdHdlZXRzICU+JSAKICB1bm5lc3RfdG9rZW5zKHdvcmQsIHRleHQpICU+JSAKICBzZWxlY3Qoc2NyZWVuX25hbWUsIHdvcmQsIGNyZWF0ZWRfYXQpCmNubl93b3JkcyA8LSBjbm5fdHdlZXRzICU+JSAKICB1bm5lc3RfdG9rZW5zKHdvcmQsIHRleHQpICU+JSAKICBzZWxlY3Qoc2NyZWVuX25hbWUsIHdvcmQsIGNyZWF0ZWRfYXQpCnVzYV93b3JkcyA8LSB1c2FfdHdlZXRzICU+JSAKICB1bm5lc3RfdG9rZW5zKHdvcmQsIHRleHQpICU+JSAKICBzZWxlY3Qoc2NyZWVuX25hbWUsIHdvcmQsIGNyZWF0ZWRfYXQpCmZveF93b3JkcyA8LSBmb3hfdHdlZXRzICU+JSAKICB1bm5lc3RfdG9rZW5zKHdvcmQsIHRleHQpICU+JSAKICBzZWxlY3Qoc2NyZWVuX25hbWUsIHdvcmQsIGNyZWF0ZWRfYXQpCmFwX3dvcmRzIDwtIGFwX3R3ZWV0cyAlPiUgCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCB0ZXh0KSAlPiUgCiAgc2VsZWN0KHNjcmVlbl9uYW1lLCB3b3JkLCBjcmVhdGVkX2F0KQphamVfd29yZHMgPC0gYWplX3R3ZWV0cyAlPiUgCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCB0ZXh0KSAlPiUgCiAgc2VsZWN0KHNjcmVlbl9uYW1lLCB3b3JkLCBjcmVhdGVkX2F0KQpiYmNfd29yZHMgPC0gYmJjX3R3ZWV0cyAlPiUgCiAgdW5uZXN0X3Rva2Vucyh3b3JkLCB0ZXh0KSAlPiUgCiAgc2VsZWN0KHNjcmVlbl9uYW1lLCB3b3JkLCBjcmVhdGVkX2F0KQpyZXV0ZXJzX3dvcmRzIDwtIHJldXRlcnNfdHdlZXRzICU+JSAKICB1bm5lc3RfdG9rZW5zKHdvcmQsIHRleHQpICU+JSAKICBzZWxlY3Qoc2NyZWVuX25hbWUsIHdvcmQsIGNyZWF0ZWRfYXQpCgpgYGAKCkZpcnN0LCBJIHB1bGxlZCA1MDAwIG9mIHRoZSBtb3N0IHJlY2VudCB0d2VldHMgZnJvbSB0ZW4gbmV3cyBvcmdhbml6YXRpb25zLCBib3RoIGxvY2FsIGFuZCBhYnJvYWQsIGFuZCBicm9rZSB0aGVtIGRvd24gaW50byB0aGVpciB3b3JkaW5nIGluIG9yZGVyIHRvIGNvcnJlbGF0ZSB0aGUgdmVyYmlhZ2Ugd2l0aCB0aGVpciBzZW50aW1lbnRzLgoKYGBge3J9Cm55dF93b3JkcyAlPiUgCiAgYW50aV9qb2luKGdldF9zdG9wd29yZHMoKSkgJT4lIAogIGZpbHRlcighd29yZCA9PSAiaHR0cHMiKSAlPiUgCiAgZmlsdGVyKCF3b3JkID09ICJ0LmNvIikgJT4lIAogIGNvdW50KHdvcmQsIHNvcnQgPSBUKQp3c2pfd29yZHMgJT4lIAogIGFudGlfam9pbihnZXRfc3RvcHdvcmRzKCkpICU+JSAKICBmaWx0ZXIoIXdvcmQgPT0gImh0dHBzIikgJT4lIAogIGZpbHRlcighd29yZCA9PSAidC5jbyIpICU+JSAKICBjb3VudCh3b3JkLCBzb3J0ID0gVCkKY25uX3dvcmRzICU+JSAKICBhbnRpX2pvaW4oZ2V0X3N0b3B3b3JkcygpKSAlPiUgCiAgZmlsdGVyKCF3b3JkID09ICJodHRwcyIpICU+JSAKICBmaWx0ZXIoIXdvcmQgPT0gInQuY28iKSAlPiUgCiAgY291bnQod29yZCwgc29ydCA9IFQpCmZveF93b3JkcyAlPiUgCiAgYW50aV9qb2luKGdldF9zdG9wd29yZHMoKSkgJT4lIAogIGZpbHRlcighd29yZCA9PSAiaHR0cHMiKSAlPiUgCiAgZmlsdGVyKCF3b3JkID09ICJ0LmNvIikgJT4lIAogIGNvdW50KHdvcmQsIHNvcnQgPSBUKQp3YXBvX3dvcmRzICU+JSAKICBhbnRpX2pvaW4oZ2V0X3N0b3B3b3JkcygpKSAlPiUgCiAgZmlsdGVyKCF3b3JkID09ICJodHRwcyIpICU+JSAKICBmaWx0ZXIoIXdvcmQgPT0gInQuY28iKSAlPiUgCiAgY291bnQod29yZCwgc29ydCA9IFQpCnVzYV93b3JkcyAlPiUgCiAgYW50aV9qb2luKGdldF9zdG9wd29yZHMoKSkgJT4lIAogIGZpbHRlcighd29yZCA9PSAiaHR0cHMiKSAlPiUgCiAgZmlsdGVyKCF3b3JkID09ICJ0LmNvIikgJT4lIAogIGNvdW50KHdvcmQsIHNvcnQgPSBUKQphcF93b3JkcyAlPiUgCiAgYW50aV9qb2luKGdldF9zdG9wd29yZHMoKSkgJT4lIAogIGZpbHRlcighd29yZCA9PSAiaHR0cHMiKSAlPiUgCiAgZmlsdGVyKCF3b3JkID09ICJ0LmNvIikgJT4lIAogIGNvdW50KHdvcmQsIHNvcnQgPSBUKQphamVfd29yZHMgJT4lIAogIGFudGlfam9pbihnZXRfc3RvcHdvcmRzKCkpICU+JSAKICBmaWx0ZXIoIXdvcmQgPT0gImh0dHBzIikgJT4lIAogIGZpbHRlcighd29yZCA9PSAidC5jbyIpICU+JSAKICBjb3VudCh3b3JkLCBzb3J0ID0gVCkKYmJjX3dvcmRzICU+JSAKICBhbnRpX2pvaW4oZ2V0X3N0b3B3b3JkcygpKSAlPiUgCiAgZmlsdGVyKCF3b3JkID09ICJodHRwcyIpICU+JSAKICBmaWx0ZXIoIXdvcmQgPT0gInQuY28iKSAlPiUgCiAgY291bnQod29yZCwgc29ydCA9IFQpCnJldXRlcnNfd29yZHMgJT4lIAogIGFudGlfam9pbihnZXRfc3RvcHdvcmRzKCkpICU+JSAKICBmaWx0ZXIoIXdvcmQgPT0gImh0dHBzIikgJT4lIAogIGZpbHRlcighd29yZCA9PSAidC5jbyIpICU+JSAKICBjb3VudCh3b3JkLCBzb3J0ID0gVCkKYGBgCgpUaGVzZSB0YWJsZXMgc2hvdyB0aGUgd29yZHMgdXNlZCBieSBlYWNoIG5ld3Mgc3RhdGlvbiwgb3JnYW5pemVkIGJ5IGNvdW50LiAgCgpgYGB7cn0KbmV3c193b3JkcyA8LSBjbm5fd29yZHMgJT4lIAogIGZ1bGxfam9pbihmb3hfd29yZHMpICU+JSAKICBmdWxsX2pvaW4obnl0X3dvcmRzKSAlPiUgCiAgZnVsbF9qb2luKHVzYV93b3JkcykgJT4lIAogIGZ1bGxfam9pbih3YXBvX3dvcmRzKSAlPiUgCiAgZnVsbF9qb2luKHdzal93b3JkcykgJT4lIAogIGZ1bGxfam9pbihhamVfd29yZHMpICU+JSAKICBmdWxsX2pvaW4oYXBfd29yZHMpICU+JSAKICBmdWxsX2pvaW4oYmJjX3dvcmRzKSAlPiUgCiAgZnVsbF9qb2luKHJldXRlcnNfd29yZHMpCmBgYAoKSSBjb21iaW5lZCBhbGwgb2YgdGhlIHdvcmRzIHV0aWxpemVkIGJ5IHRoZSBzdGF0aW9ucyBpbnRvIG9uZSBvdmVyYXJjaGluZyBncm91cCBpbiBvcmRlciB0byBhbmFseXplIHRoZW0gYXMgYSB3aG9sZS4gCgpgYGB7cn0KbmV3c193b3JkcyAlPiUgCiAgYW50aV9qb2luKGdldF9zdG9wd29yZHMoKSkgJT4lIAogIGZpbHRlcighd29yZCA9PSAiaHR0cHMiKSAlPiUgCiAgZmlsdGVyKCF3b3JkID09ICJ0LmNvIikgJT4lIAogIGNvdW50KHdvcmQsIHNvcnQgPSBUKQpgYGAKClRoaXMgdGFibGUgc2hvd3MgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIHdvcmRzLCByYW5rZWQgYnkgY291bnQuIENvcm9uYXZpcnVzIGlzICh1bnN1cnByaXNpbmdseSkgYXQgdGhlIHRvcC4gCgpgYGB7cn0KbmV3c193b3JkcyAlPiUgCiAgYW50aV9qb2luKGdldF9zdG9wd29yZHMoKSkgJT4lIAogIGZpbHRlcighd29yZCA9PSAiaHR0cHMiKSAlPiUgCiAgZmlsdGVyKCF3b3JkID09ICJ0LmNvIikgJT4lIAogIGNvdW50KHdvcmQsIHNvcnQgPSBUKSU+JSAKICB0b3BfbigxMDAwKSAlPiUgCiAgd29yZGNsb3VkMihzaXplID0gLjYpCmBgYAoKVGhpcyB3b3JkIGNsb3VkIGluY2x1ZGVzIHRoZSB0b3AgMTAwMCB3b3JkcyBtb3N0IGZyZXF1ZW50bHkgdXNlZCBieSBuZXdzIG9yZ2FuaXphdGlvbnMuIAoKYGBge3J9CmJpbmdfd29yZHMgPC0gZ2V0X3NlbnRpbWVudHMoImJpbmciKQpgYGAKCmBgYHtyfQpuZXdzX3dvcmRzICU+JSAKICBpbm5lcl9qb2luKGJpbmdfd29yZHMpICU+JSAKICBmaWx0ZXIoIXdvcmQgPT0gInRydW1wIikgJT4lIAogIGZpbHRlcighd29yZCA9PSAibGlrZSIpICU+JSAKICBjb3VudCh3b3JkLCBzZW50aW1lbnQsIHNvcnQgPSBUUlVFKSAlPiUgCiAgZ3JvdXBfYnkoc2VudGltZW50KSAlPiUgCiAgdG9wX24oMTApICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIG11dGF0ZSh3b3JkID0gcmVvcmRlcih3b3JkLCBuKSkgJT4lIAogIGdncGxvdChhZXMod29yZCwgbiwgZmlsbCA9IHNlbnRpbWVudCkpICsKICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArIAogIGZhY2V0X3dyYXAodmFycyhzZW50aW1lbnQpLCBzY2FsZXMgPSAiZnJlZSIpICsKICBsYWJzKHkgPSAiQmluZyBTZW50aW1lbnQgQ29udHJpYnV0aW9uIGJ5IFdvcmQgKE1ham9yIE5ld3MgT3V0bGV0IFR3ZWV0cykiLAogICAgICAgeCA9IE5VTEwpICsKICBjb29yZF9mbGlwKCkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCkhlcmUgYXJlIHRoZSB0b3Agd29yZHMgb3JnYW5pemVkIGJ5IEJpbmcgU2VudGltZW50LiBUaGUgcGFuZGVtaWMgaXMgdGVycmlmeWluZy4gSGVyZSBpcyBwcm9vZi4gCgpgYGB7cn0KbnJjX3dvcmRzIDwtIGdldF9zZW50aW1lbnRzKCJucmMiKQpgYGAKCmBgYHtyfQpucmNfc2VudGltZW50cyA8LSBuZXdzX3dvcmRzICU+JSAKICBpbm5lcl9qb2luKG5yY193b3JkcykgJT4lIAogIGZpbHRlcighd29yZCA9PSAidHJ1bXAiKSAlPiUgCiAgY291bnQod29yZCwgc2VudGltZW50LCBzY3JlZW5fbmFtZSwgc29ydCA9IFRSVUUpICU+JSAKICBncm91cF9ieShzZW50aW1lbnQpICU+JQogIHRvcF9uKDEwMDApICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIG11dGF0ZSh3b3JkID0gcmVvcmRlcih3b3JkLCBuKSkKYGBgCgpgYGB7cn0Kc2VudGltZW50c19sYWJlbGVkIDwtIG5yY19zZW50aW1lbnRzCm51bWJlcl9vZl9iYXIgPC0gbnJvdyhzZW50aW1lbnRzX2xhYmVsZWQpCmFuZ2xlIDwtIDkwIC0gMzYwICogKG5yY19zZW50aW1lbnRzJG4tMC41KSAvbnVtYmVyX29mX2JhciAKc2VudGltZW50c19sYWJlbGVkJGhqdXN0IDwtIGlmZWxzZSggYW5nbGUgPCAtOTAsIDEsIDApCnNlbnRpbWVudHNfbGFiZWxlZCRhbmdsZSA8LSBpZmVsc2UoYW5nbGUgPCAtOTAsIGFuZ2xlKzE4MCwgYW5nbGUpCmBgYAoKCmBgYHtyfQpucmNfc2VudGltZW50cyAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gc2NyZWVuX25hbWUsIHkgPSBuICwgZmlsbCA9IHNlbnRpbWVudCkpICsKICBnZW9tX2Jhcihwb3NpdGlvbj0iZmlsbCIsIHN0YXQgPSAiaWRlbnRpdHkiKSArCiAKICBsYWJzKHkgPSAiIiwKICAgICAgIHggPSAiU2NyZWVuIE5hbWUiLAogICAgICAgdGl0bGUgPSAiTlJDIFNlbnRpbWVudCBDb250cmlidXRpb24gYnkgV29yZCIsCiAgICAgICBmaWxsID0gIlNlbnRpbWVudHMiKSArCiAgCiAgdGhlbWVfZ3JheSgpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlPSJQYWlyZWQiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpCmBgYAoKVGhpcyBpcyBhIHZpc3VhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgd29yZHMgdXNlZCBhbmQgdGhlIHNlbnRpbWVudHMgdGhleSBwb3J0cmF5IGFjcm9zcyBhbGwgdGVuIG5ld3Mgc3RhdGlvbnMuIFRoZSBtb3N0IGFuZ3J5IGFuZCBhbHNvIHRoZSBtb3N0IHRydXN0aW5nIG5ld3Mgc3RhdGlvbiBpcyBGb3guICJNb3N0IFdhdGNoZWQsIE1vc3QgVHJ1c3RlZCIKCkNOTiBiZWF0cyBvdXQgVVNBIGJ5IGEgY2xvc2UgbWFyZ2luIGZvciB0aGUgbGVhc3QgYW5ncnkuIAoKYGBge3J9Cm5ld3Nfd29yZHMgJT4lIAppbm5lcl9qb2luKG5yY193b3JkcykgJT4lIAogIGZpbHRlcighd29yZCA9PSAidHJ1bXAiKSAlPiUgCiAgY291bnQod29yZCwgc2VudGltZW50LCBzb3J0ID0gVFJVRSkgJT4lIAogIGdyb3VwX2J5KHNlbnRpbWVudCkgJT4lIAogIHRvcF9uKDUpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIG11dGF0ZSh3b3JkID0gcmVvcmRlcih3b3JkLCBuKSkgJT4lIAogIGdncGxvdChhZXMod29yZCwgbiwgZmlsbCA9IHNlbnRpbWVudCkpICsKICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArIAogIGZhY2V0X3dyYXAodmFycyhzZW50aW1lbnQpLCBzY2FsZXMgPSAiZnJlZSIpICsKICBsYWJzKHkgPSAiTlJDIFNlbnRpbWVudCBDb250cmlidXRpb24gYnkgV29yZCAoTWFqb3IgTmV3cyBOZXR3b3JrIFR3ZWV0cykiLAogICAgICAgeCA9IE5VTEwpICsKICBjb29yZF9mbGlwKCkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKVGhpcyBpcyBhIG1vcmUgc3BlY2lmaWMgcmVwcmVzZW50YXRpb24gb2Ygd2hhdCB3b3JkcyBhcmUgYmVpbmcgdXNlZCBhY3Jvc3MgbmV3cyBtZWRpYS4gCgoK