Data Source: ptt
Period: 2013/01/01 - 2018/12/31
Encoding to UTF-8
Sys.setlocale(category = "LC_ALL", locale = "zh_TW.UTF-8")
[1] "zh_TW.UTF-8/zh_TW.UTF-8/zh_TW.UTF-8/C/zh_TW.UTF-8/zh_TW.UTF-8"
Install essential package
packages = c("dplyr", "tidytext", "stringr", "wordcloud2", "ggplot2",'readr','data.table','reshape2','wordcloud','tidyr','scales','rvest','magrittr','RCurl','XML')
existing = as.character(installed.packages()[,1])
for(pkg in packages[!(packages %in% existing)]) install.packages(pkg)
Loading library
library(dplyr)
library(magrittr)
library(ggplot2)
library(wordcloud)
Loading data (ptt, 2013-2018)
MH = read.csv("MoveHouse_artWordFreq_2013_2018.csv",encoding = 'UTF-8')
MH$artDate = MH$artDate %>% as.Date("%Y/%m/%d")
str(MH)
'data.frame': 5997 obs. of 6 variables:
$ artTitle: Factor w/ 1141 levels "《17》播性愛 黃立成遭境管",..: 617 617 617 762 762 762 431 431 431 147 ...
$ artDate : Date, format: "2013-04-05" "2013-04-05" "2013-04-05" ...
$ artTime : Factor w/ 1 level "16:00:00": 1 1 1 1 1 1 1 1 1 1 ...
$ artUrl : Factor w/ 1202 levels "http://home.appledaily.com.tw/article/index/20130406/34935067/news/",..: 454 454 454 455 455 455 456 456 456 457 ...
$ word : Factor w/ 2658 levels "阿畢","阿伯",..: 1350 552 1321 442 1687 1330 1584 2361 1175 463 ...
$ count : int 19 8 5 18 7 5 8 8 7 7 ...
Select artDate, artUrl column
data = MH %>% select(artDate, artUrl) %>%
distinct()
Grouping date
data <- data %>%
group_by(artDate) %>%
summarise(count = n())
Line graph of articles
plot_date <- data %>% ggplot(aes(x = artDate, y = count)) +
geom_line(color = "#00AFBB", size = 2) +
scale_x_date(labels = date_format("%Y")) +
ggtitle("搬家 討論文章數") +
xlab("Year") +
ylab("Count") +
theme(text = element_text(family = "Heiti TC Light"))
plot_date

Word Cloud
data <- MH %>%
group_by(word) %>%
summarise(sum = sum(count)) %>%
arrange(desc(sum)) %>%
filter(word!='萬元')
head(data)
require(wordcloud2)
data %>% wordcloud2()
LIWC dict (positive, negative)
p <- read_file("/Volumes/GoogleDrive/Team\ Drives/THESIS/案例構思/巨力搬家/Data\ Collection/爬蟲資料/ptt/dict/game_company_positive.txt")
n <- read_file("/Volumes/GoogleDrive/Team\ Drives/THESIS/案例構思/巨力搬家/Data\ Collection/爬蟲資料/ptt/dict/game_company_negative.txt")
positive <- strsplit(p, "[,]")[[1]]
negative <- strsplit(n, "[,]")[[1]]
positive <- data.frame(word = positive, sentiments = "positive")
negative <- data.frame(word = negative, sentiemtns = "negative")
colnames(negative) = c("word","sentiment")
colnames(positive) = c("word","sentiment")
LIWC_ch <- rbind(positive, negative) %>% distinct()
LIWC_ch
Count for the amount of words in corpus
word_count <- MH %>%
select(word, count) %>%
group_by(word) %>%
summarise(count = sum(count)) %>%
filter(count > 3)
word_count
Join corpus with LIWC (ot make sure the word is belongs to positive or negative)
word_count %>% inner_join(LIWC_ch)
Joining, by = "word"
Column `word` joining factors with different levels, coercing to character vector
data %>%
select(word) %>%
inner_join(LIWC_ch)
Joining, by = "word"
Column `word` joining factors with different levels, coercing to character vector
Find out date in all time period
all_dates <-
expand.grid(seq(as.Date(min(MH$artDate)), as.Date(max(MH$artDate)), by="day"), c("positive", "negative"))
plot_table <- MH %>%
select(artDate,word,count) %>%
inner_join(LIWC_ch) %>%
group_by(artDate,sentiment) %>%
summarise(count = sum(count))
Joining, by = "word"
Column `word` joining factors with different levels, coercing to character vector
Line chart of sentiment (positive, negative)
plot_table %>%
ggplot() +
geom_line(aes(x = artDate, y = count, colour = sentiment)) +
scale_x_date(labels = date_format("20%y")) +
xlab("Year") + ylab("Count")

Histogram of sentiment (positive, negative)
senti_by_date_LIWC <- MH %>%
inner_join(LIWC_ch) %>%
group_by(artDate, sentiment) %>%
summarise(n=sum(count)) %>%
spread(sentiment, n, fill = 0) %>%
mutate(sentiment = positive - negative) %>%
mutate(method='LIWC')
Joining, by = "word"
Column `word` joining factors with different levels, coercing to character vector
senti_by_date_LIWC %>%
ggplot(aes(x = artDate,y=sentiment,fill = method)) +
geom_col(show.legend = FALSE) +
scale_x_date(labels = date_format("20%y")) +
facet_wrap(~method, ncol = 1, scales = "fixed") +
geom_text(aes(label = sentiment))

Common sentiment words in LIWC dict (positive, negative)
word_count %>%
inner_join(LIWC_ch) %>%
group_by(sentiment) %>%
top_n(10, wt = count) %>%
ungroup() %>%
mutate(word = reorder(word, count)) %>%
ggplot(aes(word, count, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~sentiment, scales = "free_y") +
labs(y = "Contribution to sentiment",
x = NULL) +
theme(text=element_text(size=14)) +
coord_flip() +
theme(text = element_text(family = "Heiti TC Light"))
Joining, by = "word"
Column `word` joining factors with different levels, coercing to character vector

Revised sentiment words in LIWC dict (positive, negative)
word_count %>%
inner_join(LIWC_ch) %>%
group_by(sentiment) %>%
top_n(10, wt = count) %>%
ungroup() %>%
mutate(word = reorder(word, count)) %>%
ggplot(aes(word, count, fill = sentiment)) +
geom_col(show.legend = FALSE) +
facet_wrap(~sentiment, scales = "free_y") +
labs(y = "Contribution to sentiment",
x = NULL) +
theme(text=element_text(size=14)) +
coord_flip() +
theme(text = element_text(family = "Heiti TC Light"))
Joining, by = "word"
Column `word` joining factors with different levels, coercing to character vector

LS0tCnRpdGxlOiAi5Y+w54Gj5pCs5a6255Si5qWt5oOF57eS5YiG5p6Q77yIcHR077yJLyBTZW50aW1lbnQgQW5hbHlzaXMgb2YgTW92aW5nIEluZHVzdHJ5IGluIFRhaXdhbiIKYXV0aG9yOiAiS2FyZW4gWWFuZyDmpYrlh7HlgKsiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCjxicj4KCioqRGF0YSBTb3VyY2U6IHB0dCoqCgoqKlBlcmlvZDogMjAxMy8wMS8wMSAtIDIwMTgvMTIvMzEqKgoKPGJyPgo8YnI+CgojIyMjIyBFbmNvZGluZyB0byBVVEYtOApgYGB7cn0KU3lzLnNldGxvY2FsZShjYXRlZ29yeSA9ICJMQ19BTEwiLCBsb2NhbGUgPSAiemhfVFcuVVRGLTgiKQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgSW5zdGFsbCBlc3NlbnRpYWwgcGFja2FnZQpgYGB7cn0KcGFja2FnZXMgPSBjKCJkcGx5ciIsICJ0aWR5dGV4dCIsICJzdHJpbmdyIiwgIndvcmRjbG91ZDIiLCAiZ2dwbG90MiIsJ3JlYWRyJywnZGF0YS50YWJsZScsJ3Jlc2hhcGUyJywnd29yZGNsb3VkJywndGlkeXInLCdzY2FsZXMnLCdydmVzdCcsJ21hZ3JpdHRyJywnUkN1cmwnLCdYTUwnKQpleGlzdGluZyA9IGFzLmNoYXJhY3RlcihpbnN0YWxsZWQucGFja2FnZXMoKVssMV0pCmZvcihwa2cgaW4gcGFja2FnZXNbIShwYWNrYWdlcyAlaW4lIGV4aXN0aW5nKV0pIGluc3RhbGwucGFja2FnZXMocGtnKQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgTG9hZGluZyBsaWJyYXJ5CmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KG1hZ3JpdHRyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkod29yZGNsb3VkKQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgTG9hZGluZyBkYXRhIChwdHQsIDIwMTMtMjAxOCkKYGBge3J9Ck1IID0gcmVhZC5jc3YoIk1vdmVIb3VzZV9hcnRXb3JkRnJlcV8yMDEzXzIwMTguY3N2IixlbmNvZGluZyA9ICdVVEYtOCcpCk1IJGFydERhdGUgPSBNSCRhcnREYXRlICU+JSBhcy5EYXRlKCIlWS8lbS8lZCIpCnN0cihNSCkKYGBgCgo8YnI+Cjxicj4KCiMjIyMjIFNlbGVjdCBhcnREYXRlLCBhcnRVcmwgY29sdW1uCmBgYHtyfQpkYXRhID0gTUggJT4lIHNlbGVjdChhcnREYXRlLCBhcnRVcmwpICU+JSAKICBkaXN0aW5jdCgpCmBgYAoKPGJyPgo8YnI+CgojIyMjIyBDaGFuZ2UgZm9ybWF0CmBgYHtyfQpkYXRhJGFydERhdGU9IGRhdGEkYXJ0RGF0ZSAlPiUgYXMuRGF0ZSgiJVkvJW0vJWQiKQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgR3JvdXBpbmcgZGF0ZQpgYGB7cn0KZGF0YSA8LSBkYXRhICU+JSAKICBncm91cF9ieShhcnREYXRlKSAlPiUgCiAgc3VtbWFyaXNlKGNvdW50ID0gbigpKQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgTGluZSBncmFwaCBvZiBhcnRpY2xlcwpgYGB7cn0KcGxvdF9kYXRlIDwtIGRhdGEgJT4lIGdncGxvdChhZXMoeCA9IGFydERhdGUsIHkgPSBjb3VudCkpICsKICBnZW9tX2xpbmUoY29sb3IgPSAiIzAwQUZCQiIsIHNpemUgPSAyKSArIAogIHNjYWxlX3hfZGF0ZShsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJVkiKSkgKwogIGdndGl0bGUoIuaQrOWutiDoqI7oq5bmlofnq6DmlbgiKSArIAogIHhsYWIoIlllYXIiKSArIAogIHlsYWIoIkNvdW50IikgKyAKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJIZWl0aSBUQyBMaWdodCIpKSAKCnBsb3RfZGF0ZQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgV29yZCBDbG91ZApgYGB7cn0KZGF0YSA8LSBNSCAlPiUgCiAgZ3JvdXBfYnkod29yZCkgJT4lIAogIHN1bW1hcmlzZShzdW0gPSBzdW0oY291bnQpKSAlPiUgCiAgYXJyYW5nZShkZXNjKHN1bSkpICU+JSAKICBmaWx0ZXIod29yZCE9J+iQrOWFgycpCgpoZWFkKGRhdGEpCgpyZXF1aXJlKHdvcmRjbG91ZDIpCmRhdGEgJT4lIHdvcmRjbG91ZDIoKQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgTElXQyBkaWN0IChwb3NpdGl2ZSwgbmVnYXRpdmUpCmBgYHtyfQpwIDwtIHJlYWRfZmlsZSgiL1ZvbHVtZXMvR29vZ2xlRHJpdmUvVGVhbVwgRHJpdmVzL1RIRVNJUy/moYjkvovmp4vmgJ0v5beo5Yqb5pCs5a62L0RhdGFcIENvbGxlY3Rpb24v54is6J+y6LOH5paZL3B0dC9kaWN0L2dhbWVfY29tcGFueV9wb3NpdGl2ZS50eHQiKQpuIDwtIHJlYWRfZmlsZSgiL1ZvbHVtZXMvR29vZ2xlRHJpdmUvVGVhbVwgRHJpdmVzL1RIRVNJUy/moYjkvovmp4vmgJ0v5beo5Yqb5pCs5a62L0RhdGFcIENvbGxlY3Rpb24v54is6J+y6LOH5paZL3B0dC9kaWN0L2dhbWVfY29tcGFueV9uZWdhdGl2ZS50eHQiKQpwb3NpdGl2ZSA8LSBzdHJzcGxpdChwLCAiWyxdIilbWzFdXSAKbmVnYXRpdmUgPC0gc3Ryc3BsaXQobiwgIlssXSIpW1sxXV0KcG9zaXRpdmUgPC0gZGF0YS5mcmFtZSh3b3JkID0gcG9zaXRpdmUsIHNlbnRpbWVudHMgPSAicG9zaXRpdmUiKQpuZWdhdGl2ZSA8LSBkYXRhLmZyYW1lKHdvcmQgPSBuZWdhdGl2ZSwgc2VudGllbXRucyA9ICJuZWdhdGl2ZSIpCmNvbG5hbWVzKG5lZ2F0aXZlKSA9IGMoIndvcmQiLCJzZW50aW1lbnQiKQpjb2xuYW1lcyhwb3NpdGl2ZSkgPSBjKCJ3b3JkIiwic2VudGltZW50IikKTElXQ19jaCA8LSByYmluZChwb3NpdGl2ZSwgbmVnYXRpdmUpICU+JSBkaXN0aW5jdCgpCgpMSVdDX2NoCmBgYAoKPGJyPgo8YnI+CgojIyMjIyBDb3VudCBmb3IgdGhlIGFtb3VudCBvZiB3b3JkcyBpbiBjb3JwdXMKYGBge3J9CndvcmRfY291bnQgPC0gTUggJT4lCiAgc2VsZWN0KHdvcmQsIGNvdW50KSAlPiUgCiAgZ3JvdXBfYnkod29yZCkgJT4lIAogIHN1bW1hcmlzZShjb3VudCA9IHN1bShjb3VudCkpICU+JQogIGZpbHRlcihjb3VudCA+IDMpCgp3b3JkX2NvdW50CmBgYAoKPGJyPgo8YnI+CgojIyMjIyBKb2luIGNvcnB1cyB3aXRoIExJV0MgKG90IG1ha2Ugc3VyZSB0aGUgd29yZCBpcyBiZWxvbmdzIHRvIHBvc2l0aXZlIG9yIG5lZ2F0aXZlKQpgYGB7cn0Kd29yZF9jb3VudCAlPiUgaW5uZXJfam9pbihMSVdDX2NoKQoKZGF0YSAlPiUgCiAgc2VsZWN0KHdvcmQpICU+JQogIGlubmVyX2pvaW4oTElXQ19jaCkKCmBgYAoKPGJyPgo8YnI+CgojIyMjIyBGaW5kIG91dCBkYXRlIGluIGFsbCB0aW1lIHBlcmlvZApgYGB7cn0KYWxsX2RhdGVzIDwtIAogIGV4cGFuZC5ncmlkKHNlcShhcy5EYXRlKG1pbihNSCRhcnREYXRlKSksIGFzLkRhdGUobWF4KE1IJGFydERhdGUpKSwgYnk9ImRheSIpLCBjKCJwb3NpdGl2ZSIsICJuZWdhdGl2ZSIpKQoKcGxvdF90YWJsZSA8LSBNSCAlPiUKICBzZWxlY3QoYXJ0RGF0ZSx3b3JkLGNvdW50KSAlPiUKICBpbm5lcl9qb2luKExJV0NfY2gpICU+JSAKICBncm91cF9ieShhcnREYXRlLHNlbnRpbWVudCkgJT4lCiAgc3VtbWFyaXNlKGNvdW50ID0gc3VtKGNvdW50KSkgIApgYGAKCjxicj4KPGJyPgoKIyMjIyMgTGluZSBjaGFydCBvZiBzZW50aW1lbnQgKHBvc2l0aXZlLCBuZWdhdGl2ZSkKYGBge3J9CnBsb3RfdGFibGUgJT4lCiAgZ2dwbG90KCkgKwogIGdlb21fbGluZShhZXMoeCA9IGFydERhdGUsIHkgPSBjb3VudCwgY29sb3VyID0gc2VudGltZW50KSkgKwogIHNjYWxlX3hfZGF0ZShsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiMjAleSIpKSArCiAgeGxhYigiWWVhciIpICsgeWxhYigiQ291bnQiKQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgSGlzdG9ncmFtIG9mIHNlbnRpbWVudCAocG9zaXRpdmUsIG5lZ2F0aXZlKQpgYGB7cn0Kc2VudGlfYnlfZGF0ZV9MSVdDIDwtIE1IICU+JSAKICBpbm5lcl9qb2luKExJV0NfY2gpICU+JQogIGdyb3VwX2J5KGFydERhdGUsIHNlbnRpbWVudCkgJT4lCiAgc3VtbWFyaXNlKG49c3VtKGNvdW50KSkgJT4lCiAgc3ByZWFkKHNlbnRpbWVudCwgbiwgZmlsbCA9IDApICU+JQogIG11dGF0ZShzZW50aW1lbnQgPSBwb3NpdGl2ZSAtIG5lZ2F0aXZlKSAlPiUKICBtdXRhdGUobWV0aG9kPSdMSVdDJykgCgpzZW50aV9ieV9kYXRlX0xJV0MgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYXJ0RGF0ZSx5PXNlbnRpbWVudCxmaWxsID0gbWV0aG9kKSkgKwogIGdlb21fY29sKHNob3cubGVnZW5kID0gRkFMU0UpICsKICBzY2FsZV94X2RhdGUobGFiZWxzID0gZGF0ZV9mb3JtYXQoIjIwJXkiKSkgKwogIGZhY2V0X3dyYXAofm1ldGhvZCwgbmNvbCA9IDEsIHNjYWxlcyA9ICJmaXhlZCIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2VudGltZW50KSkKYGBgCgo8YnI+Cjxicj4KCiMjIyMjIENvbW1vbiBzZW50aW1lbnQgd29yZHMgaW4gTElXQyBkaWN0IChwb3NpdGl2ZSwgbmVnYXRpdmUpCmBgYHtyfQp3b3JkX2NvdW50ICU+JSAKICBpbm5lcl9qb2luKExJV0NfY2gpICU+JQogIGdyb3VwX2J5KHNlbnRpbWVudCkgJT4lCiAgdG9wX24oMTAsIHd0ID0gY291bnQpICU+JQogIHVuZ3JvdXAoKSAlPiUgCiAgbXV0YXRlKHdvcmQgPSByZW9yZGVyKHdvcmQsIGNvdW50KSkgJT4lCiAgZ2dwbG90KGFlcyh3b3JkLCBjb3VudCwgZmlsbCA9IHNlbnRpbWVudCkpICsKICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiAgZmFjZXRfd3JhcCh+c2VudGltZW50LCBzY2FsZXMgPSAiZnJlZV95IikgKwogIGxhYnMoeSA9ICJDb250cmlidXRpb24gdG8gc2VudGltZW50IiwKICAgICAgIHggPSBOVUxMKSArCiAgdGhlbWUodGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xNCkpICsKICBjb29yZF9mbGlwKCkgKyAKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJIZWl0aSBUQyBMaWdodCIpKSAKYGBgCgo8YnI+Cjxicj4KCiMjIyMjIERlbGV0ZSB1bnJlbGF0ZWQgd29yZHMKYGBge3J9CndvcmRfY291bnQgPC0gd29yZF9jb3VudCAlPiUgZmlsdGVyKHdvcmQhPSfmipXos4cnKQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgUmV2aXNlZCBzZW50aW1lbnQgd29yZHMgaW4gTElXQyBkaWN0IChwb3NpdGl2ZSwgbmVnYXRpdmUpCmBgYHtyfQp3b3JkX2NvdW50ICU+JSAKICBpbm5lcl9qb2luKExJV0NfY2gpICU+JQogIGdyb3VwX2J5KHNlbnRpbWVudCkgJT4lCiAgdG9wX24oMTAsIHd0ID0gY291bnQpICU+JQogIHVuZ3JvdXAoKSAlPiUgCiAgbXV0YXRlKHdvcmQgPSByZW9yZGVyKHdvcmQsIGNvdW50KSkgJT4lCiAgZ2dwbG90KGFlcyh3b3JkLCBjb3VudCwgZmlsbCA9IHNlbnRpbWVudCkpICsKICBnZW9tX2NvbChzaG93LmxlZ2VuZCA9IEZBTFNFKSArCiAgZmFjZXRfd3JhcCh+c2VudGltZW50LCBzY2FsZXMgPSAiZnJlZV95IikgKwogIGxhYnMoeSA9ICJDb250cmlidXRpb24gdG8gc2VudGltZW50IiwKICAgICAgIHggPSBOVUxMKSArCiAgdGhlbWUodGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xNCkpICsKICBjb29yZF9mbGlwKCkgKyAKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJIZWl0aSBUQyBMaWdodCIpKSAKYGBgCgoKCjxzdHlsZT4KLmNhcHRpb24gewogIG1hcmdpbi10b3A6IDEwcHg7Cn0KcCBjb2RlIHsKICB3aGl0ZS1zcGFjZTogaW5oZXJpdDsKfQpwcmUgewogIHdvcmQtYnJlYWs6IG5vcm1hbDsKICB3b3JkLXdyYXA6IG5vcm1hbDsKICBsaW5lLWhlaWdodDogMTsKfQpwcmUgY29kZSB7CiAgd2hpdGUtc3BhY2U6IGluaGVyaXQ7Cn0KcCxsaSB7CiAgZm9udC1mYW1pbHk6ICJUcmVidWNoZXQgTVMiLCAi5b6u6Luf5q2j6buR6auUIiwgIk1pY3Jvc29mdCBKaGVuZ0hlaSI7Cn0KCi5yewogIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCmJvZHl7CiAgZm9udC1mYW1pbHk6ICJUcmVidWNoZXQgTVMiLCAi5b6u6Luf5q2j6buR6auUIiwgIk1pY3Jvc29mdCBKaGVuZ0hlaSI7Cn0KCmgxLGgyLGgzLGg0LGg1ewogIGNvbG9yOiAjNDQ0NDQ0OwogIGZvbnQtZmFtaWx5OiAiVHJlYnVjaGV0IE1TIiwgIuW+rui7n+ato+m7kemrlCIsICJNaWNyb3NvZnQgSmhlbmdIZWkiOwp9CgpoM3sKICBjb2xvcjogIzQ2ODI4NDsKICBiYWNrZ3JvdW5kOiAjZmZlMGIzOwogIGxpbmUtaGVpZ2h0OiAyOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgpoNXsKICBjb2xvcjogIzQ2ODI4NDsKICBiYWNrZ3JvdW5kOiAjZmZmZmUwOwogIGxpbmUtaGVpZ2h0OiAyOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgplbXsKICBjb2xvcjogIzQ2ODI4NDsKICB9Cgo8L3N0eWxlPgo=