Basic Data Information

library(tidyverse)
library(lubridate)

neda_nine <- read_rds(here::here(
  "data",
  "NEDA_week_nineteen.rds"
)) %>%
  mutate(data_year = 2019) %>%
  select(-media) %>%
  filter(created_at_tweet %within% interval(ymd("2019-02-25"), ymd("2019-03-04"))) %>%
  mutate(interval_created = int_length(interval(ymd("2019-02-25"), created_at_tweet)))

neda_twenty <- read_rds(here::here(
  "data",
  "NEDA_week_twenty.rds"
)) %>%
  mutate(data_year = 2020) %>%
  filter(created_at_tweet %within% interval("2020-02-24", ymd("2020-03-02"))) %>%
  mutate(interval_created = int_length(interval(ymd("2020-02-24"), created_at_tweet)))


neda <- bind_rows(neda_nine, neda_twenty)

Below are the basic statistics (total number of tweets, number of unique users and date):

library(gt)

total_tweets <- neda %>%
  group_by(data_year) %>%
  count() %>%
  ungroup()

total_tweets
## # A tibble: 2 x 2
##   data_year     n
##       <dbl> <int>
## 1      2019 19432
## 2      2020 16463
unique_users <- neda %>%
  group_by(data_year) %>%
  distinct(name) %>%
  count() %>%
  ungroup()

unique_users
## # A tibble: 2 x 2
##   data_year     n
##       <dbl> <int>
## 1      2019 10773
## 2      2020 10402

2019 NEDA week officialy from 25th to March 3st : 2019-02-25 00:00:03, 2019-03-03 22:00:26

2020 NEDA week from February 24th to March 1st: 2020-02-24 00:02:16, 2020-03-01 22:59:04

Who tweets?

neda %>%
  group_by(data_year) %>%
  count(screen_name, sort = T) %>%
  slice(1:10) %>%
  gt() %>%
  tab_options(
    heading.title.font.size = 13,
    column_labels.font.size = 11,
    table.font.size = 11
  ) %>%
  tab_header(
    title = "# of different tweets by user"
  ) %>%
  fmt_number(
    columns = vars(n),
    decimals = 0
  )
# of different tweets by user
screen_name n
2019
NEDAstaff 375
Dianev44 256
zacharydmallory 224
Grace_Durbin 111
SupermodelEmme 102
KidsMatterOK 77
EDFColorado 69
heavenlysins66 56
JenniSchaefer 56
TheProjectHEAL 56
2020
NEDAstaff 114
uofleatlab 74
CheriLev 66
NaopakSasvim 34
EDCareDenver 33
MentalHealthMil 31
YazzyLaMer 31
EDFColorado 28
KelseyEClark 28
drmuhlheim 26

Accounts with the highest number of users?

neda %>%
  group_by(data_year) %>%
  select(screen_name, followers_count) %>%
  arrange(desc(followers_count)) %>%
  distinct(screen_name, .keep_all = T) %>%
  slice(1:20) %>%
  gt() %>%
  tab_options(
    heading.title.font.size = 13,
    column_labels.font.size = 11,
    table.font.size = 11
  ) %>%
  tab_header(
    title = "Firts 20th users by # of followers"
  ) %>%
  fmt_number(
    columns = vars(followers_count),
    decimals = 0
  )
Firts 20th users by # of followers
screen_name followers_count
2019
instagram 36,665,765
MTV 15,499,665
MTVNEWS 5,160,025
WomensHealthMag 4,581,386
MensHealthMag 4,516,375
TeenVogue 3,340,148
inquirerdotnet 2,792,707
Ginger_Zee 2,340,517
Pinterest 2,337,657
Jimparedes 1,751,509
harpersbazaarus 1,677,033
seventeen 1,359,212
NIMHgov 1,153,600
womenshealth 936,617
HRC 811,703
HHSGov 754,150
dosomething 750,146
ABC7NY 653,570
teddyboylocsin 646,794
Allure_magazine 576,799
2020
instagram 35,993,421
gmanews 5,533,600
parentsmagazine 4,763,121
CNNnews18 4,342,366
GMA 3,707,198
inquirerdotnet 2,938,922
sadierob 1,871,043
DZMMTeleRadyo 1,332,968
NIMHgov 1,163,247
womenshealth 932,087
NYDailyNews 736,888
AlvaroAlvaradoC 652,868
SELFmagazine 507,126
nutribullet 442,739
Xiaxue 374,580
MentalHealthAm 333,155
TrevorProject 290,826
WCVB 287,301
TWLOHA 278,281
raphablueberry 254,924

Which tweets were retweeted the most?

neda %>%
  filter(str_detect(text, "^RT @NEDAstaff")) %>%
  group_by(data_year) %>%
  count(retweeted_status_id, sort = TRUE) %>%
  left_join(neda %>% select(id_tweet, text, created_at_tweet),
    by = c("retweeted_status_id" = "id_tweet")
  ) %>%
  slice(1:10) %>%
  select(-retweeted_status_id, created_at_tweet) %>%
  gt()
n text created_at_tweet
2019
176 Today kicks of #NEDAwareness Week 2019 from Feb 25-Mar 3. Our theme, "Come as You Are", highlights NEDA’s movement… https://t.co/cFJhr1BqJJ 2019-02-25 17:30:07
98 For #NEDAwareness Week, @Instagram and @NEDA have teamed up to let individuals at all stages of body acceptance and… https://t.co/exGloFska1 2019-02-26 17:09:04
92 Thank you to the @EmpireStateBldg for lighting up in blue and green for #NEDAwareness Week! https://t.co/p2SbhcDbMI 2019-02-27 02:24:37
56 #NEDAwareness Week kicks off this Monday and buildings across the country will light up in blue and green to shine… https://t.co/9bscDufL3A 2019-02-25 00:38:00
53 #NEDAwareness Week is Here! https://t.co/GgJEcJOWyB 2019-02-25 17:03:04
45 This #NEDAwareness Week (2/25-3/4), take and share our screening tool - you never know who might need it! https://t.co/dQ0iCIC9L7. 2019-02-25 22:08:00
41 For #NEDAwareness Week, NEDA Ambassadors Ryan Sheldon @BingeConfession and Karla Mosley @karlamosley share how Eat… https://t.co/VZiY65soDw 2019-02-28 16:16:01
36 If you are in a crisis, text 'NEDA' to 741741 to connect with a trained volunteer from Crisis Text Line. #NEDAwareness 2019-02-26 20:59:02
31 #NEDAwareness Week kicks off this Monday and buildings across the country will light up in blue and green to shine… https://t.co/KZMSmrTps1 2019-02-26 04:13:00
22 This #NEDAwareness Week (2/25-3/4), take and share our screening tool - you never know who might need it! https://t.co/dQ0iCIC9L7. 2019-02-27 02:23:00
2020
125 Happy #NEDAwareness Week 2020! 🎉 We encourage everyone to embrace this year’s theme, #ComeAsYouAre: Hindsight is 20… https://t.co/NPU8E1cHNO 2020-02-24 11:41:01
48 Thank you to the @EmpireStateBldg for lighting up in NEDA’s signature blue and green colors tonight! We are proud t… https://t.co/fnnLMtUYRU 2020-02-26 02:56:27
36 In honor of #NEDAwareness Week, #NEDAmbassador, Gina Susanna (@nourishandeat), shares strategies via @i_weigh on ho… https://t.co/D978UGBu3Q 2020-02-26 23:15:02
27 #DYK: 1 in 3 people with an #eatingdisorder identify as male? On the NEDA blog, @DrStuartBMurray and his @USC colle… https://t.co/ygg9zpvEKj 2020-02-25 21:20:03
26 This #NEDAwareness Week, we want to hear about YOUR experience with #eatingdisorders, body image, and/or exercise i… https://t.co/0tgtZTNHJz 2020-02-24 18:27:02
21 NEDA and @instagram teamed up this #NEDAwareness week to encourage you to #ComeAsYouAre and use the social media pl… https://t.co/5a155uZmv3 2020-02-28 16:01:07
20 We love seeing all of the #NEDAwareness Week reflections! To minimize triggers and harmful content, please take a l… https://t.co/YyamTcFxVT 2020-02-24 17:04:01
18 Throughout #NEDAwareness week, monuments and buildings across America will be lighting up in NEDA’s signature blue… https://t.co/jq3VfGCDuP 2020-02-24 21:07:02
17 #NEDAwareness Week starts tomorrow!! Is your school or organization helping to spread awareness about food, body im… https://t.co/vdRaG2yNBB 2020-02-24 00:14:11
17 Come as You Are and join the NEDAwareness Week conversation on social media. Don’t forget to use the official campa… https://t.co/vesASwtlSi 2020-02-24 13:58:01

Tweets per hour during neda

library(scales)

neda %>%
  select(
    created_at_tweet, screen_name, retweeted_status_user_screen_name, text,
    interval_created, data_year
  ) %>%
  mutate(rec_screen_name = case_when(
    screen_name != "NEDAstaff" ~ "Others users",
    TRUE ~ "NEDAstaff"
  )) %>%
  mutate(round_created_at_tweet = round_date(created_at_tweet, unit = "hour")) %>%
  count(data_year, round_created_at_tweet, rec_screen_name) %>%
  ggplot(aes(x = round_created_at_tweet, y = n, colour = rec_screen_name)) +
  geom_line() +
  labs(
    title = "",
    colour = "Tweets posted by:",
    x = "NEDAwareness week",
    y = "# of tweets"
  ) +
  scale_x_datetime() +
  facet_wrap(data_year ~ ., ncol = 1, scales = "free_x") +
  theme_light() +
  theme(legend.position = "bottom") +
  scale_color_brewer(palette = "Set1")

Retweets and likes of the content posted by users from other accounts

neda_20_hist <- read_rds(here::here("data", "NEDA_historical_twenty.rds")) %>%
  # filter(screen_name == "NEDAstaff") %>%
  select(id_tweet, created_at_tweet, retweet_count, favorite_count) %>%
  mutate(data_year = 2020) %>%
  arrange(desc(created_at_tweet)) %>%
  group_by(id_tweet) %>%
  slice(1) %>%
  ungroup()

neda_19_hist <- read_rds(here::here("data", "NEDA_historical_nineteen.rds")) %>%
  # filter(screen_name == "NEDAstaff") %>%
  select(id_tweet, created_at_tweet, retweet_count, favorite_count) %>%
  mutate(data_year = 2019) %>%
  arrange(desc(created_at_tweet)) %>%
  group_by(id_tweet) %>%
  slice(1) %>%
  ungroup()

d <- bind_rows(neda_19_hist, neda_20_hist)

d %>%
  mutate(id_tweet = as.character(id_tweet)) %>%
  select(id_tweet, retweet_count, favorite_count, data_year) %>%
  pivot_longer(
    cols = -c(data_year, id_tweet), values_to = "values",
    names_to = "variables"
  ) %>%
  group_by(data_year, variables) %>%
  count(values, name = "number_of_tweets") %>%
  ungroup() %>%
  filter(values > 0) %>%
  mutate(variables = factor(variables,
    level = c(
      "retweet_count",
      "favorite_count"
    ),
    labels = c(
      "Retweets",
      "Likes"
    )
  )) -> dd

dd %>%
  mutate(data_year = as_factor(data_year)) %>%
  ggplot(aes(x = values, y = number_of_tweets, color = data_year)) +
  geom_point() +
  scale_y_log10(breaks = log_breaks()) +
  scale_x_log10(
    breaks = trans_breaks("log10", function(x) 10^x),
    labels = trans_format("log10", math_format(10^.x))
  ) +
  scale_color_brewer(palette = "Set1") +
  theme_light() +
  xlab("# rt/likes from a user in collection") +
  ylab("# Tweets") +
  facet_wrap(. ~ variables)

Gender and LIWC

2019 data:

read_rds(here::here("data", "neda_liwc_gender_nineteen.rds")) %>%
  select(gender, id) %>%
  distinct() %>%
  count(gender, sort = T)
## # A tibble: 3 x 2
##   gender     n
##   <chr>  <int>
## 1 f        762
## 2 u        671
## 3 m        313

2020 data:

read_rds(here::here("data", "neda_liwc_gender_twenty.rds")) %>%
  select(gender, id) %>%
  distinct() %>%
  count(gender, sort = T)
## # A tibble: 3 x 2
##   gender     n
##   <chr>  <int>
## 1 u        193
## 2 f        173
## 3 m         65
LS0tCnRpdGxlOiBEZXNjcmlwdGl2ZSBhbmFseXNpcyAKY2xlYW46IHRydWUKb3V0cHV0OgogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoKICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiBmYWxzZQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoCgllY2hvID0gVFJVRSwKCW1lc3NhZ2UgPSBGQUxTRSwKCXdhcm5pbmcgPSBGQUxTRSwKCXRpZHkgPSAic3R5bGVyIgopCmBgYAoKIyMgQmFzaWMgRGF0YSBJbmZvcm1hdGlvbgoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKCm5lZGFfbmluZSA8LSByZWFkX3JkcyhoZXJlOjpoZXJlKCJkYXRhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJORURBX3dlZWtfbmluZXRlZW4ucmRzIikpICU+JSAKICBtdXRhdGUoZGF0YV95ZWFyID0gMjAxOSkgJT4lIAogIHNlbGVjdCgtbWVkaWEpICU+JSAgIAogIGZpbHRlcihjcmVhdGVkX2F0X3R3ZWV0ICV3aXRoaW4lIGludGVydmFsKHltZCgiMjAxOS0wMi0yNSIpLCB5bWQoIjIwMTktMDMtMDQiKSkpICU+JSAKICBtdXRhdGUoaW50ZXJ2YWxfY3JlYXRlZCA9IGludF9sZW5ndGgoaW50ZXJ2YWwoeW1kKCIyMDE5LTAyLTI1IiksIGNyZWF0ZWRfYXRfdHdlZXQpKSkKCm5lZGFfdHdlbnR5IDwtIHJlYWRfcmRzKGhlcmU6OmhlcmUoImRhdGEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTkVEQV93ZWVrX3R3ZW50eS5yZHMiKSkgJT4lCiAgbXV0YXRlKGRhdGFfeWVhciA9IDIwMjApICU+JSAKICBmaWx0ZXIoY3JlYXRlZF9hdF90d2VldCAld2l0aGluJSBpbnRlcnZhbCgiMjAyMC0wMi0yNCIsIHltZCgiMjAyMC0wMy0wMiIpKSkgJT4lIAogIG11dGF0ZShpbnRlcnZhbF9jcmVhdGVkID0gaW50X2xlbmd0aChpbnRlcnZhbCh5bWQoIjIwMjAtMDItMjQiKSwgY3JlYXRlZF9hdF90d2VldCkpKQoKCm5lZGEgPC0gYmluZF9yb3dzKG5lZGFfbmluZSwgbmVkYV90d2VudHkpCmBgYAoKQmVsb3cgYXJlIHRoZSBiYXNpYyBzdGF0aXN0aWNzICh0b3RhbCBudW1iZXIgb2YgdHdlZXRzLCBudW1iZXIgb2YgdW5pcXVlIHVzZXJzIGFuZCBkYXRlKToKCisgTnVtYmVyIG9mIHRvdGFsIHR3ZWV0czoKYGBge3J9CmxpYnJhcnkoZ3QpCgp0b3RhbF90d2VldHMgPC0gbmVkYSAlPiUKICBncm91cF9ieShkYXRhX3llYXIpICU+JSAKICBjb3VudCgpICU+JSAKICB1bmdyb3VwKCkKCnRvdGFsX3R3ZWV0cwpgYGAKCisgTnVtYmVyIG9mIHVuaXF1ZSB1c2VyczoKYGBge3J9CnVuaXF1ZV91c2VycyA8LSBuZWRhICU+JQogIGdyb3VwX2J5KGRhdGFfeWVhcikgJT4lIAogIGRpc3RpbmN0KG5hbWUpICU+JSAKICBjb3VudCgpICU+JSAKICB1bmdyb3VwKCkKCnVuaXF1ZV91c2VycwpgYGAKCisgRGF0ZSBmcm9tOgoKMjAxOSBORURBIHdlZWsgb2ZmaWNpYWx5IGZyb20gMjV0aCB0byBNYXJjaCAzc3QgOiAKX19gciByYW5nZShuZWRhX25pbmUkY3JlYXRlZF9hdF90d2VldClgX18KCjIwMjAgTkVEQSB3ZWVrIGZyb20gRmVicnVhcnkgMjR0aCB0byBNYXJjaCAxc3Q6IApfX2ByIHJhbmdlKG5lZGFfdHdlbnR5JGNyZWF0ZWRfYXRfdHdlZXQpYF9fCgojIyMgV2hvIHR3ZWV0cz8KCmBgYHtyfQpuZWRhICU+JSAKICBncm91cF9ieShkYXRhX3llYXIpICU+JSAKICBjb3VudChzY3JlZW5fbmFtZSwgc29ydCA9IFQpICU+JQogIHNsaWNlKDE6MTApICU+JQogIGd0KCkgJT4lIAogICAgdGFiX29wdGlvbnMoCiAgICBoZWFkaW5nLnRpdGxlLmZvbnQuc2l6ZSA9IDEzLAogICAgY29sdW1uX2xhYmVscy5mb250LnNpemUgPSAxMSwKICAgIHRhYmxlLmZvbnQuc2l6ZSA9IDExCiAgKSAlPiUKICAgIHRhYl9oZWFkZXIoCiAgICB0aXRsZSA9ICIjIG9mIGRpZmZlcmVudCB0d2VldHMgYnkgdXNlciIKICApICU+JSAKICBmbXRfbnVtYmVyKAogICAgY29sdW1ucyA9IHZhcnMobiksCiAgICBkZWNpbWFscyA9IDAKICApCmBgYAoKIyMjIEFjY291bnRzIHdpdGggdGhlIGhpZ2hlc3QgbnVtYmVyIG9mIHVzZXJzPwoKYGBge3IgcmVtZWR5MDR9Cm5lZGEgJT4lIAogIGdyb3VwX2J5KGRhdGFfeWVhcikgJT4lIAogIHNlbGVjdChzY3JlZW5fbmFtZSwgZm9sbG93ZXJzX2NvdW50KSAlPiUgCiAgYXJyYW5nZShkZXNjKGZvbGxvd2Vyc19jb3VudCkpICU+JQogIGRpc3RpbmN0KHNjcmVlbl9uYW1lLCAua2VlcF9hbGwgPSBUKSAlPiUgCiAgc2xpY2UoMToyMCkgJT4lIAogIGd0KCkgJT4lIAogICAgdGFiX29wdGlvbnMoCiAgICBoZWFkaW5nLnRpdGxlLmZvbnQuc2l6ZSA9IDEzLAogICAgY29sdW1uX2xhYmVscy5mb250LnNpemUgPSAxMSwKICAgIHRhYmxlLmZvbnQuc2l6ZSA9IDExCiAgKSAlPiUKICB0YWJfaGVhZGVyKAogICAgdGl0bGUgPSAiRmlydHMgMjB0aCB1c2VycyBieSAjIG9mIGZvbGxvd2VycyIKICApICU+JSAKICBmbXRfbnVtYmVyKAogICAgY29sdW1ucyA9IHZhcnMoZm9sbG93ZXJzX2NvdW50KSwKICAgIGRlY2ltYWxzID0gMAogICkKYGBgCgojIyMgV2hpY2ggdHdlZXRzIHdlcmUgcmV0d2VldGVkIHRoZSBtb3N0PwoKYGBge3J9Cm5lZGEgJT4lIAogIGZpbHRlcihzdHJfZGV0ZWN0KHRleHQsICJeUlQgQE5FREFzdGFmZiIpKSAlPiUKICBncm91cF9ieShkYXRhX3llYXIpICU+JSAKICBjb3VudChyZXR3ZWV0ZWRfc3RhdHVzX2lkLCBzb3J0ID0gVFJVRSkgJT4lIAogIGxlZnRfam9pbihuZWRhICU+JSBzZWxlY3QoaWRfdHdlZXQsIHRleHQsIGNyZWF0ZWRfYXRfdHdlZXQpLCAKICAgICAgICAgICAgYnkgPSBjKCJyZXR3ZWV0ZWRfc3RhdHVzX2lkIiA9ICJpZF90d2VldCIpKSAlPiUgCiAgc2xpY2UoMToxMCkgJT4lCiAgc2VsZWN0KC1yZXR3ZWV0ZWRfc3RhdHVzX2lkLCBjcmVhdGVkX2F0X3R3ZWV0KSAlPiUgCiAgZ3QoKQpgYGAKCiMjIyBUd2VldHMgcGVyIGhvdXIgZHVyaW5nIG5lZGEKCmBgYHtyfQpsaWJyYXJ5KHNjYWxlcykKCm5lZGEgJT4lIAogIHNlbGVjdChjcmVhdGVkX2F0X3R3ZWV0LCBzY3JlZW5fbmFtZSwgcmV0d2VldGVkX3N0YXR1c191c2VyX3NjcmVlbl9uYW1lLCB0ZXh0LAogICAgICAgICBpbnRlcnZhbF9jcmVhdGVkLCBkYXRhX3llYXIpICU+JSAKICBtdXRhdGUocmVjX3NjcmVlbl9uYW1lID0gY2FzZV93aGVuKHNjcmVlbl9uYW1lICE9ICJORURBc3RhZmYiIH4gIk90aGVycyB1c2VycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJORURBc3RhZmYiKSkgJT4lICAKICBtdXRhdGUocm91bmRfY3JlYXRlZF9hdF90d2VldCA9IHJvdW5kX2RhdGUoY3JlYXRlZF9hdF90d2VldCwgdW5pdCA9ICJob3VyIikpICU+JQogIGNvdW50KGRhdGFfeWVhciwgcm91bmRfY3JlYXRlZF9hdF90d2VldCwgcmVjX3NjcmVlbl9uYW1lKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByb3VuZF9jcmVhdGVkX2F0X3R3ZWV0LCB5ID0gbiwgY29sb3VyID0gcmVjX3NjcmVlbl9uYW1lKSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIiIsIAogICAgICAgY29sb3VyID0gIlR3ZWV0cyBwb3N0ZWQgYnk6IiwgCiAgICAgICB4ID0gIk5FREF3YXJlbmVzcyB3ZWVrIiwKICAgICAgIHkgPSAiIyBvZiB0d2VldHMiKSArCiAgc2NhbGVfeF9kYXRldGltZSgpICsKICBmYWNldF93cmFwKGRhdGFfeWVhciB+IC4sIG5jb2wgPSAxLCBzY2FsZXMgPSAiZnJlZV94IikgKwogIHRoZW1lX2xpZ2h0KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpCmBgYAoKIyMgUmV0d2VldHMgYW5kIGxpa2VzIG9mIHRoZSBjb250ZW50IHBvc3RlZCBieSB1c2VycyBmcm9tIG90aGVyIGFjY291bnRzCgpgYGB7ciB9Cm5lZGFfMjBfaGlzdCA8LSByZWFkX3JkcyhoZXJlOjpoZXJlKCJkYXRhIiwgIk5FREFfaGlzdG9yaWNhbF90d2VudHkucmRzIikpICU+JSAKICAjIGZpbHRlcihzY3JlZW5fbmFtZSA9PSAiTkVEQXN0YWZmIikgJT4lIAogIHNlbGVjdChpZF90d2VldCwgY3JlYXRlZF9hdF90d2VldCwgcmV0d2VldF9jb3VudCwgZmF2b3JpdGVfY291bnQpICU+JQogIG11dGF0ZShkYXRhX3llYXIgPSAyMDIwKSAlPiUgCiAgYXJyYW5nZShkZXNjKGNyZWF0ZWRfYXRfdHdlZXQpKSAlPiUKICBncm91cF9ieShpZF90d2VldCkgJT4lIAogIHNsaWNlKDEpICU+JSAKICB1bmdyb3VwKCkKCm5lZGFfMTlfaGlzdCA8LSByZWFkX3JkcyhoZXJlOjpoZXJlKCJkYXRhIiwgIk5FREFfaGlzdG9yaWNhbF9uaW5ldGVlbi5yZHMiKSkgJT4lCiAgIyBmaWx0ZXIoc2NyZWVuX25hbWUgPT0gIk5FREFzdGFmZiIpICU+JSAKICBzZWxlY3QoaWRfdHdlZXQsIGNyZWF0ZWRfYXRfdHdlZXQsIHJldHdlZXRfY291bnQsIGZhdm9yaXRlX2NvdW50KSAlPiUgCiAgbXV0YXRlKGRhdGFfeWVhciA9IDIwMTkpICU+JSAKICBhcnJhbmdlKGRlc2MoY3JlYXRlZF9hdF90d2VldCkpICU+JQogIGdyb3VwX2J5KGlkX3R3ZWV0KSAlPiUgCiAgc2xpY2UoMSkgJT4lIAogIHVuZ3JvdXAoKQoKZCA8LSBiaW5kX3Jvd3MobmVkYV8xOV9oaXN0LCBuZWRhXzIwX2hpc3QpCgpkICU+JSAKICBtdXRhdGUoaWRfdHdlZXQgPSBhcy5jaGFyYWN0ZXIoaWRfdHdlZXQpKSAlPiUKICBzZWxlY3QoaWRfdHdlZXQsIHJldHdlZXRfY291bnQsIGZhdm9yaXRlX2NvdW50LCBkYXRhX3llYXIpICU+JSAKICBwaXZvdF9sb25nZXIoY29scyA9IC1jKGRhdGFfeWVhciwgaWRfdHdlZXQpLCB2YWx1ZXNfdG8gPSAidmFsdWVzIiwgCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gInZhcmlhYmxlcyIpICU+JSAKICBncm91cF9ieShkYXRhX3llYXIsIHZhcmlhYmxlcykgJT4lIAogIGNvdW50KHZhbHVlcywgbmFtZSA9ICJudW1iZXJfb2ZfdHdlZXRzIikgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgZmlsdGVyKHZhbHVlcyA+IDApICU+JSAKICBtdXRhdGUodmFyaWFibGVzID0gZmFjdG9yKHZhcmlhYmxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gYygicmV0d2VldF9jb3VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhdm9yaXRlX2NvdW50IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJSZXR3ZWV0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMaWtlcyIpKSkgLT4gZGQKCmRkICU+JSAKICBtdXRhdGUoZGF0YV95ZWFyID0gYXNfZmFjdG9yKGRhdGFfeWVhcikpICU+JSAKICAgIGdncGxvdChhZXMoeCA9IHZhbHVlcywgeSA9IG51bWJlcl9vZl90d2VldHMsIGNvbG9yID0gZGF0YV95ZWFyKSkgKwogIGdlb21fcG9pbnQoKSArCiAgc2NhbGVfeV9sb2cxMChicmVha3MgPSBsb2dfYnJlYWtzKCkpICsKICBzY2FsZV94X2xvZzEwKGJyZWFrcyA9IHRyYW5zX2JyZWFrcygibG9nMTAiLCBmdW5jdGlvbih4KSAxMF54KSwKICAgICAgICAgICAgICAgIGxhYmVscyA9IHRyYW5zX2Zvcm1hdCgibG9nMTAiLCBtYXRoX2Zvcm1hdCgxMF4ueCkpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpICsKICB0aGVtZV9saWdodCgpICsKICB4bGFiKCIjIHJ0L2xpa2VzIGZyb20gYSB1c2VyIGluIGNvbGxlY3Rpb24iKSArCiAgeWxhYigiIyBUd2VldHMiKSArCiAgZmFjZXRfd3JhcCgufnZhcmlhYmxlcykKYGBgCgojIyBHZW5kZXIgYW5kIExJV0MKCjIwMTkgZGF0YToKYGBge3J9CnJlYWRfcmRzKGhlcmU6OmhlcmUoImRhdGEiLCAibmVkYV9saXdjX2dlbmRlcl9uaW5ldGVlbi5yZHMiKSkgJT4lIAogIHNlbGVjdChnZW5kZXIsIGlkKSAlPiUgCiAgZGlzdGluY3QoKSAlPiUgCiAgY291bnQoZ2VuZGVyLCBzb3J0ID0gVCkKYGBgCgoyMDIwIGRhdGE6CmBgYHtyfQpyZWFkX3JkcyhoZXJlOjpoZXJlKCJkYXRhIiwgIm5lZGFfbGl3Y19nZW5kZXJfdHdlbnR5LnJkcyIpKSAlPiUgCiAgc2VsZWN0KGdlbmRlciwgaWQpICU+JSAKICBkaXN0aW5jdCgpICU+JSAKICBjb3VudChnZW5kZXIsIHNvcnQgPSBUKQpgYGAKCgoKCg==