Giới Thiệu

Tạp chí Journal of Economics and Development (JED) được xem là tạp chí hàng đầu của Việt Nam trong lĩnh vực kinh tế. Post này chỉ ra một số insights từ dữ liệu về các papers được đăng trên JED.

Data Collection

Thông tin về các papers được đăng trên tạp chí này (tên paper, abstract, tên tác giả, affiliation, số trích dẫn sử dụng cho bài viết, số lần được các tác giả khác trích dẫn…) có thể thu được bằng hàm cr_works() của thư viện rcrossref. Dưới đây là R codes lấy và xử lí sơ bộ dữ liệu:

#===============================
#  Load dữ liệu và xử lí sơ bộ
#===============================

# Load một số packages: 

library(dplyr)
library(ggplot2)
library(stringr)
library(rcrossref)
library(tidytext)
library(topicmodels)
library(SnowballC)
library(kableExtra) 


# Lấy tối đa 500 papers thuộc tạp chí JED từ 2022: 

rm(list = ls())

res <- cr_works(filter = list(container_title = "Journal of Economics and Development"), 
                limit = 500)  

# Xử lí dữ liệu thu được: 

res$data %>% 
  filter(!str_detect(doi, "vi")) %>% 
  filter(!is.na(abstract)) %>% 
  filter(language == "en") %>% 
  mutate(abstract = str_remove_all(abstract, "<jats.*?p>")) %>% 
  mutate(abstract = str_remove_all(abstract, "<jats.*?ec>")) %>% 
  mutate(abstract = str_remove_all(abstract, "</jats.*?ec>")) %>% 
  mutate(abstract = str_remove_all(abstract, "\\n<jats.*?title>\\n")) %>% 
  mutate(abstract = str_remove_all(abstract, "</jats[^\\n]*?\\n")) %>% 
  mutate(abstract = str_remove_all(abstract, "</jats:p>")) %>% 
  mutate(abstract = str_replace_all(abstract, "\n", " ")) %>% 
  mutate(id = 1:nrow(.)) -> papersAbstracts


papersAbstracts %>% 
  mutate(references.count = as.integer(references.count), 
         is.referenced.by.count = as.integer(is.referenced.by.count)) -> papersAbstracts


#==========================================
#  Một số insights về mẫu paper được đăng
#==========================================

papersAbstracts$url -> paperURL

N <- length(paperURL)

dfAuthors <- data.frame()

for (j in 1:N) {
  
  dfAuthors <- bind_rows(papersAbstracts$author[[j]] %>% mutate(url = paperURL[j]), dfAuthors)
  
  
}

# do.call("bind_rows", papersAbstracts$funder) -> dfFunders

dfAuthors %>% 
  mutate(affiliation.name = case_when(str_detect(affiliation.name, "onnal") ~ "National Economics University, Vietnam", 
                                      str_detect(affiliation.name, "ietmam") ~ "National Economics University, Vietnam", 
                                      TRUE ~ affiliation.name)) -> dfAuthors

dfAuthors %>% filter(sequence == "first") -> dfAuthorsFirst

dfAuthorsFirst %>% 
  group_by(affiliation.name) %>% 
  count(sort = TRUE) %>% 
  ungroup() -> dfAffiliation

Some Insights

Có tất cả 293 papers được đăng trên tạp chí này. Trong số đó có 156 papers có đầy đủ thông tin của các tác giả bài viết cũng như affiliation tương ứng. Affiliation tương ứng với first author thì nhiều nhất là NEU (62 bài, 40% tổng số bài), kế tiếp là FTU (11 bài, 7%) và thứ ba là UEH (5 bài, 3%). Các đại học/viên nghiên cứu còn lại số bài đăng là 2 hoặc 1 (Table 1).

dfAffiliation %>% 
  filter(!is.na(affiliation.name)) %>% 
  mutate(per = 100*n / sum(n)) %>% 
  slice(1:10) %>% 
  mutate(per = round(per, 1)) %>% 
  kbl(caption = "Table 1: Paper Publishing by Affiliation (top 10)", escape = TRUE) %>% 
  kable_classic(full_width = TRUE, html_font = "Cambria")
Table 1: Paper Publishing by Affiliation (top 10)
affiliation.name n per
National Economics University, Vietnam 62 39.7
Foreign Trade University, Vietnam 11 7.1
University of Economics Ho Chi Minh City, Vietnam 5 3.2
Can Tho University, Vietnam 3 1.9
Banking University of Ho Chi Minh City, Vietnam 2 1.3
Central Institute for Economic Management, Vietnam 2 1.3
Hanoi University, Vietnam 2 1.3
Madda Walabu University, Ethiopia 2 1.3
Thai Nguyen University of Economics and Business Administration, Vietnam 2 1.3
University of Adelaide, Australia 2 1.3

Số lần được trích dẫn thể hiện ảnh hưởng (và có thể là chất lượng) của các bài viết được đăng. Trung vị số lần được trích dẫn là 3. Tức là một nửa số paper đăng trên JED có số lần được trích dẫn là 3, 2, 1 hoặc 0.

papersAbstracts$is.referenced.by.count %>% quantile()
##   0%  25%  50%  75% 100% 
##    0    1    3    7   80

Tuy nhiên cũng có một số bài có số lần được trích dẫn cao. Có 4 bài có số lượt trích dẫn lớn hơn 50, trong đó có hai tác giả đến từ Việt Nam của tác giả Nguyen Thi Tuyet Mai (được trích dẫn 54 lần) và Thi Truc Huong Nguyen (được trihs dẫn 78 lần). Bài Does it pay to be green? An exploratory analysis of wage differentials between green and non-green industries của hai tác giả đến từ University of the West Indies Cave Hill Campus, Bridgetown, Barbados có số lượt được trích dẫn cao nhất là 80.

papersAbstracts %>% 
  filter(is.referenced.by.count >= 50) %>% 
  rename(is.ref = is.referenced.by.count) %>% 
  select(title, is.ref) %>% 
  kbl(caption = "Table 2: The four most frequently cited papers", escape = TRUE) %>% 
  kable_classic(full_width = FALSE, html_font = "Cambria")
Table 2: The four most frequently cited papers
title is.ref
Does it pay to be green? An exploratory analysis of wage differentials between green and non-green industries 80
An investigation into the relationship between materialism and green purchase behavior in Vietnam and Taiwan 54
Threshold effects of public debt on economic growth in Africa: a new evidence 59
Measuring financial inclusion: a composite FI index for the developing countries 78
Financial development and institutional quality among emerging economies 69

Chúng ta có thể phân loại 293 papers được đăng thành 6 nhóm chủ đề con (Sub-topic) bằng Latent Dirichlet Allocation căn cứ vào title của bài viết. Table 3 dưới đây cho thấy số lượng các bài viết thuộc về các chủ đề con cũng như các từ khóa nổi bật nhất.

#-----------------------------------
# Topic Modelling based on title
#-----------------------------------

papersAbstracts %>% 
  mutate(abstract = str_to_lower(abstract)) %>% 
  mutate(title = str_to_lower(title)) %>% 
  select(title, abstract, doi, id) -> dfTitles

tidy_titles <- dfTitles %>%
  unnest_tokens(word, title) %>%
  anti_join(get_stopwords())   

# Create a document-term matrix: 

dtmTitles <- tidy_titles %>%
  count(id, word) %>%
  cast_dtm(document = id, term = word, value = n)

# Fit LDA with 6 topics: 

n_topics <- 6

set.seed(29)
lda <- LDA(dtmTitles, 
           k = n_topics, 
           method = "Gibbs",
           control = list(burnin = 1000, iter = 2000, seed = 29))

# Extract the per-document topic probabilities: 

doc_topics <- tidy(lda, matrix = "gamma")  

# For each document, choose the topic with highest probability: 

assigned_topics <- doc_topics %>%
  group_by(document) %>%
  slice(which.max(gamma)) %>% 
  ungroup() %>%
  mutate(subTopic = paste0("Topic ", topic)) %>%
  select(document, subTopic)

# Inspect top terms per topic (top 5): 

terms(lda, 9) %>%
  t() %>% 
  as.data.frame() %>% 
  mutate(topWords = paste(V1, V2, V3, V4, V5, V6, V7, V8, V9, sep = ", ")) %>% 
  mutate(subTopic = row.names(.)) -> dfKeyWords


assigned_topics %>% 
  full_join(dfKeyWords %>% select(subTopic, topWords)) %>% 
  left_join(papersAbstracts %>% mutate(id = as.character(id)), by = c("document" = "id")) -> paperByTitle



paperByTitle %>% 
  group_by(subTopic, topWords) %>% 
  count() %>% 
  kbl(caption = "Table 3: Sub-topic by LDA", escape = TRUE) %>%
  kable_classic(full_width = FALSE, html_font = "Cambria")
Table 3: Sub-topic by LDA
subTopic topWords n
Topic 1 impact, vietnam, study, performance, analysis, role, listed, institutions, enterprises 68
Topic 2 vietnamese, firm, stock, bank, banks, inequality, investigation, capital, risk 62
Topic 3 market, trade, policy, evidence, analysis, impacts, productivity, corporate, fdi 47
Topic 4 growth, empirical, vietnam, households, economic, emerging, evidence, social, direct 44
Topic 5 vietnam, financial, economic, africa, firms, green, small, asia, governance 24
Topic 6 evidence, case, development, determinants, investment, rural, quality, vietnam, credit 48

Có vẻ như JED khá nổi tiếng với các tác giả ở châu Phi (vùng Hạ Sahara). Table 4 dưới đây chỉ ra danh sách 26 papers mà tác giả hoặc đến từ châu Phi hoặc vấn đề nghiên cứu ở châu Phi:

papersAbstracts %>% 
  filter(str_detect(title, "frica|aharan|igeria|imbabwe|hana")) %>% 
  select(title) %>% 
  mutate(ID =1:nrow(.)) %>% 
  kbl(caption = "Table 4: Papers from Africa", escape = TRUE) %>%
  kable_classic(full_width = FALSE, html_font = "Cambria")
Table 4: Papers from Africa
title ID
Modelling the synergy between fiscal incentives and foreign direct investment in Ghana 1
Financial integration and macroeconomic volatility in Zimbabwe 2
Threshold effects of public debt on economic growth in Africa: a new evidence 3
The effects of financial inclusion on agricultural productivity in Nigeria 4
Export of Services and Economic Growth in Nigeria 5
Education and inclusive growth in West Africa 6
Institutional quality and economic growth in Sub-Saharan Africa: a panel data approach 7
Remittances and corruption in Nigeria 8
Multidimensional Poverty among Households in Southwest Nigeria 9
Monetary policies and bank lending in developing countries: evidence from Sub-Sahara Africa 10
Economic growth, international trade, and environmental degradation in Sub-Saharan Africa 11
Remittances, institutions and human development in Sub-Saharan Africa 12
The interplay between technological innovation and human capital development in driving industrial productivity and competitiveness in Africa 13
Population growth, income growth and savings in Ghana 14
Infrastructure development and industrial sector productivity in Sub-Saharan Africa 15
Comparative effect of short-term credit granted to agriculture on agricultural added value in the West African countries 16
Role of institutional quality in the public education financing–educational quality nexus: evidence from Sub-Saharan Africa 17
Farmers’ coping strategies to artisanal small-scale mining activities: welfare improvement or deterioration in Asutifi North District of Ghana? 18
Does regional trade promote economic growth? Evidence from Economic Community of West African States (ECOWAS) 19
Investors’ attention: does it impact the Nigerian stock market activities? 20
Economic growth effect of private capital inflows: a structural VAR approach for Nigeria 21
Spillover effects of the US monetary policy normalization on African stock markets 22
Effect of health outcome on economic growth in sub-Saharan Africa: a system generalized method of moment approach 23
The Knowledge Creation Organization: The Case of Alphana 24
Mineral rents, conflict, population and economic growth in selected economies: empirical focus on Sub-Saharan Africa 25
The effect of government expenditure and free maternal health care policy (FMHC) on household consumption in Ghana 26

Là một tạp chí ở NEU nên không ngạc nhiên khi gần 50% các bài đăng (142 trong tổng số 293 bài) có từ “Vietnam” hoặc “Vietnamese”. Table 5 dưới đây list 10 bài ngẫu nhiên trong số 142 bài này:

papersAbstracts %>% 
  filter(str_detect(title, "Vietnam|Vietnamese")) %>% 
  select(title, author, doi) -> papersVietnam

papersVietnam %>% 
  sample_n(10) %>% 
  select(title) %>% 
  mutate(ID =1:nrow(.)) %>% 
  kbl(caption = "Table 5: Vietnam or Vietnamese", escape = TRUE) %>%
  kable_classic(full_width = FALSE, html_font = "Cambria")
Table 5: Vietnam or Vietnamese
title ID
Credit composition and income inequality in Vietnam: an empirical analysis 1
Strategic Knowledge Management, Innovation and Firm Performance: An Empirical Study in Vietnamese Firms 2
Using PLS-SEM to analyze challenges hindering success of green building projects in Vietnam 3
Regional Determinants of FDI Location in Vietnam 4
Residents’ preferred measures and willingness-to-pay for improving urban air quality: A case study of Hanoi city, Vietnam 5
Electricity Consumption and Economic Growth in Vietnam: A Cointegration and Causality Analysis 6
Productivity growth and job reallocation in the Vietnamese manufacturing sector 7
Patterns and Dynamics of Vietnam’s Revealed Comparative Advantage and Export Specialization 8
Qualification mismatch in the labor market and the impact on earnings: evidence from Vietnam 9
Does organizational innovation always lead to better performance? A study of firms in Vietnam 10
LS0tDQp0aXRsZTogIlRvcGljIE1vZGVsbGluZzogQSBSZWFsLVdvcmxkIEFwcGxpY2F0aW9uIiAgDQphdXRob3I6ICJOZ3V5ZW4gQ2hpIER1bmciDQpzdWJ0aXRsZTogIlIgRGF0YSBTY2llbmNlIFNlcmllcyINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGhpZ2hsaWdodDogemVuYnVybg0KICAgICMgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0aGVtZTogImZsYXRseSINCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQpgYGB7ciBzZXR1cCxpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgY2FjaGU9VFJVRSkNCmBgYA0KDQojIEdp4bubaSBUaGnhu4d1DQoNClThuqFwIGNow60gW0pvdXJuYWwgb2YgRWNvbm9taWNzIGFuZCBEZXZlbG9wbWVudCAoSkVEKV0oaHR0cHM6Ly93d3cuZW1lcmFsZGdyb3VwcHVibGlzaGluZy5jb20vam91cm5hbC9qZWQpIMSRxrDhu6NjIHhlbSBsw6AgdOG6oXAgY2jDrSBow6BuZyDEkeG6p3UgY+G7p2EgVmnhu4d0IE5hbSB0cm9uZyBsxKluaCB24buxYyBraW5oIHThur8uIFBvc3QgbsOgeSBjaOG7iSByYSBt4buZdCBz4buRIGluc2lnaHRzIHThu6sgZOG7ryBsaeG7h3UgduG7gSBjw6FjIHBhcGVycyDEkcaw4bujYyDEkcSDbmcgdHLDqm4gSkVELiANCg0KIyBEYXRhIENvbGxlY3Rpb24NCg0KVGjDtG5nIHRpbiB24buBIGPDoWMgcGFwZXJzIMSRxrDhu6NjIMSRxINuZyB0csOqbiB04bqhcCBjaMOtIG7DoHkgKHTDqm4gcGFwZXIsIGFic3RyYWN0LCB0w6puIHTDoWMgZ2nhuqMsIGFmZmlsaWF0aW9uLCBz4buRIHRyw61jaCBk4bqrbiBz4butIGThu6VuZyBjaG8gYsOgaSB2aeG6v3QsIHPhu5EgbOG6p24gxJHGsOG7o2MgY8OhYyB0w6FjIGdp4bqjIGtow6FjIHRyw61jaCBk4bqrbi4uLikgY8OzIHRo4buDIHRodSDEkcaw4bujYyBi4bqxbmcgaMOgbSBgY3Jfd29ya3MoKWAgY+G7p2EgdGjGsCB2aeG7h24gW3Jjcm9zc3JlZl0oaHR0cHM6Ly9naXRodWIuY29tL3JvcGVuc2NpL3Jjcm9zc3JlZikuIETGsOG7m2kgxJHDonkgbMOgIFIgY29kZXMgbOG6pXkgdsOgIHjhu60gbMOtIHPGoSBi4buZIGThu68gbGnhu4d1OiANCg0KDQpgYGB7cn0NCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojICBMb2FkIGThu68gbGnhu4d1IHbDoCB44butIGzDrSBzxqEgYuG7mQ0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KIyBMb2FkIG3hu5l0IHPhu5EgcGFja2FnZXM6IA0KDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShzdHJpbmdyKQ0KbGlicmFyeShyY3Jvc3NyZWYpDQpsaWJyYXJ5KHRpZHl0ZXh0KQ0KbGlicmFyeSh0b3BpY21vZGVscykNCmxpYnJhcnkoU25vd2JhbGxDKQ0KbGlicmFyeShrYWJsZUV4dHJhKSANCg0KDQojIEzhuqV5IHThu5FpIMSRYSA1MDAgcGFwZXJzIHRodeG7mWMgdOG6oXAgY2jDrSBKRUQgdOG7qyAyMDIyOiANCg0Kcm0obGlzdCA9IGxzKCkpDQoNCnJlcyA8LSBjcl93b3JrcyhmaWx0ZXIgPSBsaXN0KGNvbnRhaW5lcl90aXRsZSA9ICJKb3VybmFsIG9mIEVjb25vbWljcyBhbmQgRGV2ZWxvcG1lbnQiKSwgDQogICAgICAgICAgICAgICAgbGltaXQgPSA1MDApICANCg0KIyBY4butIGzDrSBk4buvIGxp4buHdSB0aHUgxJHGsOG7o2M6IA0KDQpyZXMkZGF0YSAlPiUgDQogIGZpbHRlcighc3RyX2RldGVjdChkb2ksICJ2aSIpKSAlPiUgDQogIGZpbHRlcighaXMubmEoYWJzdHJhY3QpKSAlPiUgDQogIGZpbHRlcihsYW5ndWFnZSA9PSAiZW4iKSAlPiUgDQogIG11dGF0ZShhYnN0cmFjdCA9IHN0cl9yZW1vdmVfYWxsKGFic3RyYWN0LCAiPGphdHMuKj9wPiIpKSAlPiUgDQogIG11dGF0ZShhYnN0cmFjdCA9IHN0cl9yZW1vdmVfYWxsKGFic3RyYWN0LCAiPGphdHMuKj9lYz4iKSkgJT4lIA0KICBtdXRhdGUoYWJzdHJhY3QgPSBzdHJfcmVtb3ZlX2FsbChhYnN0cmFjdCwgIjwvamF0cy4qP2VjPiIpKSAlPiUgDQogIG11dGF0ZShhYnN0cmFjdCA9IHN0cl9yZW1vdmVfYWxsKGFic3RyYWN0LCAiXFxuPGphdHMuKj90aXRsZT5cXG4iKSkgJT4lIA0KICBtdXRhdGUoYWJzdHJhY3QgPSBzdHJfcmVtb3ZlX2FsbChhYnN0cmFjdCwgIjwvamF0c1teXFxuXSo/XFxuIikpICU+JSANCiAgbXV0YXRlKGFic3RyYWN0ID0gc3RyX3JlbW92ZV9hbGwoYWJzdHJhY3QsICI8L2phdHM6cD4iKSkgJT4lIA0KICBtdXRhdGUoYWJzdHJhY3QgPSBzdHJfcmVwbGFjZV9hbGwoYWJzdHJhY3QsICJcbiIsICIgIikpICU+JSANCiAgbXV0YXRlKGlkID0gMTpucm93KC4pKSAtPiBwYXBlcnNBYnN0cmFjdHMNCg0KDQpwYXBlcnNBYnN0cmFjdHMgJT4lIA0KICBtdXRhdGUocmVmZXJlbmNlcy5jb3VudCA9IGFzLmludGVnZXIocmVmZXJlbmNlcy5jb3VudCksIA0KICAgICAgICAgaXMucmVmZXJlbmNlZC5ieS5jb3VudCA9IGFzLmludGVnZXIoaXMucmVmZXJlbmNlZC5ieS5jb3VudCkpIC0+IHBhcGVyc0Fic3RyYWN0cw0KDQoNCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgIE3hu5l0IHPhu5EgaW5zaWdodHMgduG7gSBt4bqrdSBwYXBlciDEkcaw4bujYyDEkcSDbmcNCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KcGFwZXJzQWJzdHJhY3RzJHVybCAtPiBwYXBlclVSTA0KDQpOIDwtIGxlbmd0aChwYXBlclVSTCkNCg0KZGZBdXRob3JzIDwtIGRhdGEuZnJhbWUoKQ0KDQpmb3IgKGogaW4gMTpOKSB7DQogIA0KICBkZkF1dGhvcnMgPC0gYmluZF9yb3dzKHBhcGVyc0Fic3RyYWN0cyRhdXRob3JbW2pdXSAlPiUgbXV0YXRlKHVybCA9IHBhcGVyVVJMW2pdKSwgZGZBdXRob3JzKQ0KICANCiAgDQp9DQoNCiMgZG8uY2FsbCgiYmluZF9yb3dzIiwgcGFwZXJzQWJzdHJhY3RzJGZ1bmRlcikgLT4gZGZGdW5kZXJzDQoNCmRmQXV0aG9ycyAlPiUgDQogIG11dGF0ZShhZmZpbGlhdGlvbi5uYW1lID0gY2FzZV93aGVuKHN0cl9kZXRlY3QoYWZmaWxpYXRpb24ubmFtZSwgIm9ubmFsIikgfiAiTmF0aW9uYWwgRWNvbm9taWNzIFVuaXZlcnNpdHksIFZpZXRuYW0iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChhZmZpbGlhdGlvbi5uYW1lLCAiaWV0bWFtIikgfiAiTmF0aW9uYWwgRWNvbm9taWNzIFVuaXZlcnNpdHksIFZpZXRuYW0iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGFmZmlsaWF0aW9uLm5hbWUpKSAtPiBkZkF1dGhvcnMNCg0KZGZBdXRob3JzICU+JSBmaWx0ZXIoc2VxdWVuY2UgPT0gImZpcnN0IikgLT4gZGZBdXRob3JzRmlyc3QNCg0KZGZBdXRob3JzRmlyc3QgJT4lIA0KICBncm91cF9ieShhZmZpbGlhdGlvbi5uYW1lKSAlPiUgDQogIGNvdW50KHNvcnQgPSBUUlVFKSAlPiUgDQogIHVuZ3JvdXAoKSAtPiBkZkFmZmlsaWF0aW9uDQpgYGANCg0KIyBTb21lIEluc2lnaHRzDQoNCkPDsyB04bqldCBj4bqjIDI5MyBwYXBlcnMgxJHGsOG7o2MgxJHEg25nIHRyw6puIHThuqFwIGNow60gbsOgeS4gVHJvbmcgc+G7kSDEkcOzIGPDsyAxNTYgcGFwZXJzIGPDsyDEkeG6p3kgxJHhu6cgdGjDtG5nIHRpbiBj4bunYSBjw6FjIHTDoWMgZ2nhuqMgYsOgaSB2aeG6v3QgY8WpbmcgbmjGsCBhZmZpbGlhdGlvbiB0xrDGoW5nIOG7qW5nLiBBZmZpbGlhdGlvbiB0xrDGoW5nIOG7qW5nIHbhu5tpIGZpcnN0IGF1dGhvciB0aMOsIG5oaeG7gXUgbmjhuqV0IGzDoCBORVUgKDYyIGLDoGksIDQwJSB04buVbmcgc+G7kSBiw6BpKSwga+G6vyB0aeG6v3AgbMOgIEZUVSAoMTEgYsOgaSwgNyUpIHbDoCB0aOG7qSBiYSBsw6AgVUVIICg1IGLDoGksIDMlKS4gQ8OhYyDEkeG6oWkgaOG7jWMvdmnDqm4gbmdoacOqbiBj4bupdSBjw7JuIGzhuqFpIHPhu5EgYsOgaSDEkcSDbmcgbMOgIDIgaG/hurdjIDEgKFRhYmxlIDEpLiAgDQoNCg0KYGBge3J9DQpkZkFmZmlsaWF0aW9uICU+JSANCiAgZmlsdGVyKCFpcy5uYShhZmZpbGlhdGlvbi5uYW1lKSkgJT4lIA0KICBtdXRhdGUocGVyID0gMTAwKm4gLyBzdW0obikpICU+JSANCiAgc2xpY2UoMToxMCkgJT4lIA0KICBtdXRhdGUocGVyID0gcm91bmQocGVyLCAxKSkgJT4lIA0KICBrYmwoY2FwdGlvbiA9ICJUYWJsZSAxOiBQYXBlciBQdWJsaXNoaW5nIGJ5IEFmZmlsaWF0aW9uICh0b3AgMTApIiwgZXNjYXBlID0gVFJVRSkgJT4lIA0KICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBUUlVFLCBodG1sX2ZvbnQgPSAiQ2FtYnJpYSIpDQpgYGANCg0KU+G7kSBs4bqnbiDEkcaw4bujYyB0csOtY2ggZOG6q24gdGjhu4MgaGnhu4duIOG6o25oIGjGsOG7n25nICh2w6AgY8OzIHRo4buDIGzDoCBjaOG6pXQgbMaw4bujbmcpIGPhu6dhIGPDoWMgYsOgaSB2aeG6v3QgxJHGsOG7o2MgxJHEg25nLiBUcnVuZyB24buLIHPhu5EgbOG6p24gxJHGsOG7o2MgdHLDrWNoIGThuqtuIGzDoCAzLiBU4bupYyBsw6AgbeG7mXQgbuG7rWEgc+G7kSBwYXBlciDEkcSDbmcgdHLDqm4gSkVEIGPDsyBz4buRIGzhuqduIMSRxrDhu6NjIHRyw61jaCBk4bqrbiBsw6AgMywgMiwgMSBob+G6t2MgMC4gDQoNCg0KYGBge3J9DQpwYXBlcnNBYnN0cmFjdHMkaXMucmVmZXJlbmNlZC5ieS5jb3VudCAlPiUgcXVhbnRpbGUoKQ0KYGBgDQoNClR1eSBuaGnDqm4gY8WpbmcgY8OzIG3hu5l0IHPhu5EgYsOgaSBjw7Mgc+G7kSBs4bqnbiDEkcaw4bujYyB0csOtY2ggZOG6q24gY2FvLiBDw7MgNCBiw6BpIGPDsyBz4buRIGzGsOG7o3QgdHLDrWNoIGThuqtuIGzhu5tuIGjGoW4gNTAsIHRyb25nIMSRw7MgY8OzIGhhaSB0w6FjIGdp4bqjIMSR4bq/biB04burIFZp4buHdCBOYW0gY+G7p2EgdMOhYyBnaeG6oyBOZ3V5ZW4gVGhpIFR1eWV0IE1haSAoxJHGsOG7o2MgdHLDrWNoIGThuqtuIDU0IGzhuqduKSB2w6AgVGhpIFRydWMgSHVvbmcgTmd1eWVuICjEkcaw4bujYyB0cmlocyBk4bqrbiA3OCBs4bqnbikuIELDoGkgW0RvZXMgaXQgcGF5IHRvIGJlIGdyZWVuPyBBbiBleHBsb3JhdG9yeSBhbmFseXNpcyBvZiB3YWdlIGRpZmZlcmVudGlhbHMgYmV0d2VlbiBncmVlbiBhbmQgbm9uLWdyZWVuIGluZHVzdHJpZXNdKGh0dHBzOi8vd3d3LmVtZXJhbGQuY29tL2plZC9hcnRpY2xlLzIzLzMvMjg0LzE5NzIwOS9Eb2VzLWl0LXBheS10by1iZS1ncmVlbi1Bbi1leHBsb3JhdG9yeS1hbmFseXNpcy1vZikgY+G7p2EgaGFpIHTDoWMgZ2nhuqMgxJHhur9uIHThu6sgVW5pdmVyc2l0eSBvZiB0aGUgV2VzdCBJbmRpZXMgQ2F2ZSBIaWxsIENhbXB1cywgQnJpZGdldG93biwgQmFyYmFkb3MgY8OzIHPhu5EgbMaw4bujdCDEkcaw4bujYyB0csOtY2ggZOG6q24gY2FvIG5o4bqldCBsw6AgODAuIA0KDQoNCmBgYHtyfQ0KcGFwZXJzQWJzdHJhY3RzICU+JSANCiAgZmlsdGVyKGlzLnJlZmVyZW5jZWQuYnkuY291bnQgPj0gNTApICU+JSANCiAgcmVuYW1lKGlzLnJlZiA9IGlzLnJlZmVyZW5jZWQuYnkuY291bnQpICU+JSANCiAgc2VsZWN0KHRpdGxlLCBpcy5yZWYpICU+JSANCiAga2JsKGNhcHRpb24gPSAiVGFibGUgMjogVGhlIGZvdXIgbW9zdCBmcmVxdWVudGx5IGNpdGVkIHBhcGVycyIsIGVzY2FwZSA9IFRSVUUpICU+JSANCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRkFMU0UsIGh0bWxfZm9udCA9ICJDYW1icmlhIikNCmBgYA0KDQpDaMO6bmcgdGEgY8OzIHRo4buDIHBow6JuIGxv4bqhaSAyOTMgcGFwZXJzIMSRxrDhu6NjIMSRxINuZyB0aMOgbmggNiBuaMOzbSBjaOG7pyDEkeG7gSBjb24gKFN1Yi10b3BpYykgYuG6sW5nIFtMYXRlbnQgRGlyaWNobGV0IEFsbG9jYXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGVudF9EaXJpY2hsZXRfYWxsb2NhdGlvbikgY8SDbiBj4bupIHbDoG8gdGl0bGUgY+G7p2EgYsOgaSB2aeG6v3QuIFRhYmxlIDMgZMaw4bubaSDEkcOieSBjaG8gdGjhuqV5IHPhu5EgbMaw4bujbmcgY8OhYyBiw6BpIHZp4bq/dCB0aHXhu5ljIHbhu4EgY8OhYyBjaOG7pyDEkeG7gSBjb24gY8WpbmcgbmjGsCBjw6FjIHThu6sga2jDs2EgbuG7lWkgYuG6rXQgbmjhuqV0LiANCg0KDQpgYGB7cn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUb3BpYyBNb2RlbGxpbmcgYmFzZWQgb24gdGl0bGUNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpwYXBlcnNBYnN0cmFjdHMgJT4lIA0KICBtdXRhdGUoYWJzdHJhY3QgPSBzdHJfdG9fbG93ZXIoYWJzdHJhY3QpKSAlPiUgDQogIG11dGF0ZSh0aXRsZSA9IHN0cl90b19sb3dlcih0aXRsZSkpICU+JSANCiAgc2VsZWN0KHRpdGxlLCBhYnN0cmFjdCwgZG9pLCBpZCkgLT4gZGZUaXRsZXMNCg0KdGlkeV90aXRsZXMgPC0gZGZUaXRsZXMgJT4lDQogIHVubmVzdF90b2tlbnMod29yZCwgdGl0bGUpICU+JQ0KICBhbnRpX2pvaW4oZ2V0X3N0b3B3b3JkcygpKSAgIA0KDQojIENyZWF0ZSBhIGRvY3VtZW50LXRlcm0gbWF0cml4OiANCg0KZHRtVGl0bGVzIDwtIHRpZHlfdGl0bGVzICU+JQ0KICBjb3VudChpZCwgd29yZCkgJT4lDQogIGNhc3RfZHRtKGRvY3VtZW50ID0gaWQsIHRlcm0gPSB3b3JkLCB2YWx1ZSA9IG4pDQoNCiMgRml0IExEQSB3aXRoIDYgdG9waWNzOiANCg0Kbl90b3BpY3MgPC0gNg0KDQpzZXQuc2VlZCgyOSkNCmxkYSA8LSBMREEoZHRtVGl0bGVzLCANCiAgICAgICAgICAgayA9IG5fdG9waWNzLCANCiAgICAgICAgICAgbWV0aG9kID0gIkdpYmJzIiwNCiAgICAgICAgICAgY29udHJvbCA9IGxpc3QoYnVybmluID0gMTAwMCwgaXRlciA9IDIwMDAsIHNlZWQgPSAyOSkpDQoNCiMgRXh0cmFjdCB0aGUgcGVyLWRvY3VtZW50IHRvcGljIHByb2JhYmlsaXRpZXM6IA0KDQpkb2NfdG9waWNzIDwtIHRpZHkobGRhLCBtYXRyaXggPSAiZ2FtbWEiKSAgDQoNCiMgRm9yIGVhY2ggZG9jdW1lbnQsIGNob29zZSB0aGUgdG9waWMgd2l0aCBoaWdoZXN0IHByb2JhYmlsaXR5OiANCg0KYXNzaWduZWRfdG9waWNzIDwtIGRvY190b3BpY3MgJT4lDQogIGdyb3VwX2J5KGRvY3VtZW50KSAlPiUNCiAgc2xpY2Uod2hpY2gubWF4KGdhbW1hKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lDQogIG11dGF0ZShzdWJUb3BpYyA9IHBhc3RlMCgiVG9waWMgIiwgdG9waWMpKSAlPiUNCiAgc2VsZWN0KGRvY3VtZW50LCBzdWJUb3BpYykNCg0KIyBJbnNwZWN0IHRvcCB0ZXJtcyBwZXIgdG9waWMgKHRvcCA1KTogDQoNCnRlcm1zKGxkYSwgOSkgJT4lDQogIHQoKSAlPiUgDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUgDQogIG11dGF0ZSh0b3BXb3JkcyA9IHBhc3RlKFYxLCBWMiwgVjMsIFY0LCBWNSwgVjYsIFY3LCBWOCwgVjksIHNlcCA9ICIsICIpKSAlPiUgDQogIG11dGF0ZShzdWJUb3BpYyA9IHJvdy5uYW1lcyguKSkgLT4gZGZLZXlXb3Jkcw0KDQoNCmFzc2lnbmVkX3RvcGljcyAlPiUgDQogIGZ1bGxfam9pbihkZktleVdvcmRzICU+JSBzZWxlY3Qoc3ViVG9waWMsIHRvcFdvcmRzKSkgJT4lIA0KICBsZWZ0X2pvaW4ocGFwZXJzQWJzdHJhY3RzICU+JSBtdXRhdGUoaWQgPSBhcy5jaGFyYWN0ZXIoaWQpKSwgYnkgPSBjKCJkb2N1bWVudCIgPSAiaWQiKSkgLT4gcGFwZXJCeVRpdGxlDQoNCg0KDQpwYXBlckJ5VGl0bGUgJT4lIA0KICBncm91cF9ieShzdWJUb3BpYywgdG9wV29yZHMpICU+JSANCiAgY291bnQoKSAlPiUgDQogIGtibChjYXB0aW9uID0gIlRhYmxlIDM6IFN1Yi10b3BpYyBieSBMREEiLCBlc2NhcGUgPSBUUlVFKSAlPiUNCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRkFMU0UsIGh0bWxfZm9udCA9ICJDYW1icmlhIikNCmBgYA0KDQpDw7MgduG6uyBuaMawIEpFRCBraMOhIG7hu5VpIHRp4bq/bmcgduG7m2kgY8OhYyB0w6FjIGdp4bqjIOG7nyBjaMOidSBQaGkgKHbDuW5nIEjhuqEgU2FoYXJhKS4gVGFibGUgNCBkxrDhu5tpIMSRw6J5IGNo4buJIHJhIGRhbmggc8OhY2ggMjYgcGFwZXJzIG3DoCB0w6FjIGdp4bqjIGhv4bq3YyDEkeG6v24gdOG7qyBjaMOidSBQaGkgaG/hurdjIHbhuqVuIMSR4buBIG5naGnDqm4gY+G7qXUg4bufIGNow6J1IFBoaTogDQoNCg0KYGBge3J9DQpwYXBlcnNBYnN0cmFjdHMgJT4lIA0KICBmaWx0ZXIoc3RyX2RldGVjdCh0aXRsZSwgImZyaWNhfGFoYXJhbnxpZ2VyaWF8aW1iYWJ3ZXxoYW5hIikpICU+JSANCiAgc2VsZWN0KHRpdGxlKSAlPiUgDQogIG11dGF0ZShJRCA9MTpucm93KC4pKSAlPiUgDQogIGtibChjYXB0aW9uID0gIlRhYmxlIDQ6IFBhcGVycyBmcm9tIEFmcmljYSIsIGVzY2FwZSA9IFRSVUUpICU+JQ0KICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGQUxTRSwgaHRtbF9mb250ID0gIkNhbWJyaWEiKQ0KYGBgDQoNCkzDoCBt4buZdCB04bqhcCBjaMOtIOG7nyBORVUgbsOqbiBraMO0bmcgbmfhuqFjIG5oacOqbiBraGkgZ+G6p24gNTAlIGPDoWMgYsOgaSDEkcSDbmcgKDE0MiB0cm9uZyB04buVbmcgc+G7kSAyOTMgYsOgaSkgY8OzIHThu6sgIlZpZXRuYW0iIGhv4bq3YyAiVmlldG5hbWVzZSIuIFRhYmxlIDUgZMaw4bubaSDEkcOieSBsaXN0IDEwIGLDoGkgbmfhuqt1IG5oacOqbiB0cm9uZyBz4buRIDE0MiBiw6BpIG7DoHk6ICANCg0KDQpgYGB7cn0NCnBhcGVyc0Fic3RyYWN0cyAlPiUgDQogIGZpbHRlcihzdHJfZGV0ZWN0KHRpdGxlLCAiVmlldG5hbXxWaWV0bmFtZXNlIikpICU+JSANCiAgc2VsZWN0KHRpdGxlLCBhdXRob3IsIGRvaSkgLT4gcGFwZXJzVmlldG5hbQ0KDQpwYXBlcnNWaWV0bmFtICU+JSANCiAgc2FtcGxlX24oMTApICU+JSANCiAgc2VsZWN0KHRpdGxlKSAlPiUgDQogIG11dGF0ZShJRCA9MTpucm93KC4pKSAlPiUgDQogIGtibChjYXB0aW9uID0gIlRhYmxlIDU6IFZpZXRuYW0gb3IgVmlldG5hbWVzZSIsIGVzY2FwZSA9IFRSVUUpICU+JQ0KICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGQUxTRSwgaHRtbF9mb250ID0gIkNhbWJyaWEiKQ0KDQoNCmBgYA0KDQo=