Divide budget by cost of living

Purchase Power Parity

Source: https://data.worldbank.org/indicator/PA.NUS.PPPC.RF

Price level ratio is the ratio of a purchasing power parity (PPP) conversion factor to an exchange rate. It provides a measure of the differences in price levels between countries by indicating the number of units of the common currency needed to buy the same volume of the aggregation level in each country.

Indicator source: International Comparison Program, World Bank

Adjust prices to 2014 prices

# library(priceR)
# country <- "United States"
# countries_dataframe <- show_countries()
# inflation_dataframe <- retrieve_inflation_data(country, countries_dataframe)
# 
# # Provide a World Bank API URL and `url_all_results` will convert it into one with all results for that indicator
# original_url <- "http://api.worldbank.org/v2/country"
# 
# url_all_results(original_url)
# 
# my_df$budget_const <- adjust_for_inflation(my_df$budget,
#                                                 my_df$year,
#                                                 country,
#                                                 to_date = 2014,
#                                                 inflation_dataframe = inflation_dataframe,
#                                                 countries_dataframe = countries_dataframe)

Regresions

iv <- c("log(pop)",     
        "log(gdp_pc)",
        "polity2",
        "log(us_trade + 1)",
        "log(russia_trade + 1)",
         # "as.factor(post_soviet)",
         "us_same_vote_percent",
         "china_same_vote_percent",
        "log(us_troops + 1)*log(suicide_attacks + 1)")

dv <- "lead(log(budget_2010_adj))"

lm_formula <- as.formula(paste(dv, paste(iv, collapse = " + "), sep = " ~ "))

within_model <- plm(lm_formula, data = pdf,model = "within")
within_time_model <- plm(lm_formula, data = pdf, model = "within", effect = "time")
random_model <- plm(lm_formula, data = pdf, model = "random")
pooled_model <- plm(lm_formula, data = pdf, model = "pooling")

stargazer(within_model, 
          within_time_model,
           random_model,
          column.labels = c("IND FIXED", "TIME FIXED", "RANDOM"),
          covariate.labels = c(
            "population",
            "GDP per capita",
            "Polity",
            "US trade (logged)",
            "Russia trade (logged)",
            "US UNGA votes",
            "China UNGA votes",
            "Troops",
            "Suicide attacks",
            "Troops x suicide attacks"),
          type= "html", header = FALSE)
Dependent variable:
lead(log(budget_2010_adj))
IND FIXED TIME FIXED RANDOM
(1) (2) (3)
population -7.437*** 0.393*** 0.307***
(0.494) (0.028) (0.056)
GDP per capita -0.999*** 0.014 -0.127**
(0.234) (0.033) (0.063)
Polity 0.008 0.011*** 0.007
(0.013) (0.004) (0.008)
US trade (logged) 0.018 0.030 0.139***
(0.052) (0.019) (0.036)
Russia trade (logged) 0.026 0.066*** 0.027
(0.020) (0.010) (0.017)
US UNGA votes 0.135 0.013 0.141
(0.096) (0.114) (0.111)
China UNGA votes 0.104 0.021 0.124
(0.084) (0.094) (0.096)
Troops -0.066** 0.011 0.011
(0.027) (0.012) (0.022)
Suicide attacks -0.284*** -0.241*** -0.271***
(0.066) (0.041) (0.063)
Troops x suicide attacks 0.045*** 0.072*** 0.048***
(0.012) (0.007) (0.011)
Constant 7.928***
(0.945)
Observations 906 906 906
R2 0.319 0.631 0.262
Adjusted R2 0.171 0.625 0.254
F Statistic 34.846*** (df = 10; 743) 152.046*** (df = 10; 890) 236.553***
Note: p<0.1; p<0.05; p<0.01

Choose most suitable model effects

F-test

If the p-value is significantly small, use fixed model rather than pooled OLS

pFtest(within_model, pooled_model)
F test for individual effects

data: lm_formula F = 10.525, df1 = 152, df2 = 743, p-value < 2.2e-16 alternative hypothesis: significant effects

Hausman test

If the p-value is significantly small, use fixed model rather than random.

phtest(within_model, random_model)
Hausman Test

data: lm_formula chisq = 2592.2, df = 10, p-value < 2.2e-16 alternative hypothesis: one model is inconsistent

Lagrange Multiplier Test

If the p-value is significantly small, use time-fixed effects rather than individual.

plmtest(within_time_model, c("time"), type=("bp"))
Lagrange Multiplier Test - time effects (Breusch-Pagan) for unbalanced
panels

data: lm_formula chisq = 4322.2, df = 1, p-value < 2.2e-16 alternative hypothesis: significant effects

Regressions with country (“group”) clustered robust standard errors (HC1)

stargazer(within_model,
          coeftest(within_model,vcov = vcovHC(within_time_model,
                                              type = "HC1", 
                                              cluster = "group")),
          type = "html")
Dependent variable:
lead(log(budget_2010_adj))
panel coefficient
linear test
(1) (2)
log(pop) -7.437*** -7.437***
(0.494) (0.053)
log(gdp_pc) -0.999*** -0.999***
(0.234) (0.062)
polity2 0.008 0.008
(0.013) (0.007)
log(us_trade + 1) 0.018 0.018
(0.052) (0.036)
log(russia_trade + 1) 0.026 0.026
(0.020) (0.019)
us_same_vote_percent 0.135 0.135
(0.096) (0.161)
china_same_vote_percent 0.104 0.104
(0.084) (0.126)
log(us_troops + 1) -0.066** -0.066***
(0.027) (0.021)
log(suicide_attacks + 1) -0.284*** -0.284***
(0.066) (0.087)
log(us_troops + 1):log(suicide_attacks + 1) 0.045*** 0.045***
(0.012) (0.011)
Observations 906
R2 0.319
Adjusted R2 0.171
F Statistic 34.846*** (df = 10; 743)
Note: p<0.1; p<0.05; p<0.01
fh_free <- pdf %>% 
  dplyr::filter(freedom_house == 1)

fh_partly_free <- pdf %>% 
  dplyr::filter(freedom_house == 2)

fh_not_free <- pdf %>% 
  dplyr::filter(freedom_house == 3)
free_within_time_model <- plm(lm_formula, data = fh_free, model = "within", effect = "time")
partly_free_within_time_model <- plm(lm_formula, data = fh_partly_free, model = "within", effect = "time")
not_free_within_time_model <- plm(lm_formula, data = fh_not_free, model = "within", effect = "time")

stargazer(free_within_time_model, 
          partly_free_within_time_model,
           not_free_within_time_model,
          column.labels = c("FREE", "PARTLY", "NOT FREE"),
          covariate.labels = c(
            "population",
            "GDP per capita",
            "Polity",
            "US trade (logged)",
            "Russia trade (logged)",
            "US UNGA votes",
            "China UNGA votes",
            "Troops",
            "Suicide attacks",
            "Troops x suicide attacks"),
          header = FALSE,
          type= "html")
Dependent variable:
lead(log(budget_2010_adj))
FREE PARTLY NOT FREE
(1) (2) (3)
population 0.479*** 0.319*** 0.299***
(0.053) (0.065) (0.073)
GDP per capita 0.085 0.078 -0.070
(0.064) (0.078) (0.086)
Polity -0.009 0.015 0.009
(0.032) (0.013) (0.014)
US trade (logged) 0.009 -0.007 0.121**
(0.035) (0.040) (0.050)
Russia trade (logged) -0.014 0.121*** 0.084***
(0.017) (0.022) (0.022)
US UNGA votes 0.202 -0.086 0.347
(0.166) (0.258) (0.312)
China UNGA votes -0.068 -0.245 -0.056
(0.173) (0.219) (0.194)
Troops 0.029 -0.028 0.011
(0.020) (0.033) (0.024)
Suicide attacks 0.064 -0.330* -0.304***
(0.331) (0.180) (0.058)
Troops x suicide attacks -0.041 0.144*** 0.074***
(0.072) (0.046) (0.009)
Observations 347 300 247
R2 0.654 0.482 0.645
Adjusted R2 0.634 0.447 0.615
F Statistic 61.767*** (df = 10; 327) 26.095*** (df = 10; 280) 41.195*** (df = 10; 227)
Note: p<0.1; p<0.05; p<0.01
similar_liberal_unga_voting <- pdf %>% 
  dplyr::filter(ideal_point_distance < 2)

dissimilar_liberal_unga_voting <- pdf %>% 
  dplyr::filter(ideal_point_distance > 2)

# pdf %>% 
#   filter(year == 2018) %>% 
#   select(country_name, ideal_point_distance) %>% 
#   arrange(desc(ideal_point_distance)) %>% 
#   print(n = 50)
similar_liberal_unga_voting <- plm(lm_formula, data = similar_liberal_unga_voting, model = "within", effect = "time")
dissimilar_liberal_unga_voting <- plm(lm_formula, data = dissimilar_liberal_unga_voting, model = "within", effect = "time")

stargazer(similar_liberal_unga_voting, 
          dissimilar_liberal_unga_voting,
          column.labels = c("Similar", "Dissimilar"),
          covariate.labels = c(
            "population",
            "GDP per capita",
            "Polity",
            "US trade (logged)",
            "Russia trade (logged)",
            "US UNGA votes",
            "China UNGA votes",
            "Troops",
            "Suicide attacks",
            "Troops x suicide attacks"),

          style = "qje",
          type = "text")

=========================================================================== lead(log(budget_2010_adj))
Similar Dissimilar
(1) (2)
————————————————————————— population 0.395*** 0.486***
(0.065) (0.035)

GDP per capita -0.086 0.150***
(0.082) (0.044)

Polity -0.177*** 0.033***
(0.033) (0.005)

US trade (logged) -0.022 -0.007
(0.045) (0.025)

Russia trade (logged) -0.036* 0.052***
(0.021) (0.013)

US UNGA votes 0.356** 0.002
(0.144) (0.161)

China UNGA votes -0.118 0.028
(0.173) (0.117)

Troops 0.058*** 0.007
(0.020) (0.016)

Suicide attacks 0.513 -0.314***
(0.368) (0.044)

Troops x suicide attacks -0.159*** 0.077***
(0.053) (0.008)

N 246 660
R2 0.664 0.640
Adjusted R2 0.636 0.629
F Statistic 44.729*** (df = 10; 226) 113.795*** (df = 10; 640) =========================================================================== Notes: Significant at the 1 percent level. Significant at the 5 percent level. Significant at the 10 percent level.

?stargazer
## starting httpd help server ... done

Compare Public Diplomacy budget to USAID spending

mil_aid_dv <- "lead(log(military_aid + 1))"
human_aid_dv <- "lead(log(humanitarian_aid + 1))"

mil_lm_formula <- as.formula(paste(mil_aid_dv, paste(iv, collapse = " + "), sep = " ~ "))
human_lm_formula <- as.formula(paste(human_aid_dv, paste(iv, collapse = " + "), sep = " ~ "))

mil_within_time_model <- plm(mil_lm_formula, data = pdf, model = "within", effect = "time")
human_within_time_model <- plm(human_lm_formula, data = pdf, model = "within", effect = "time")

stargazer(within_time_model, 
          mil_within_time_model, 
          human_within_time_model,
          column.labels = c("PD SPENDING", "MILITARY AID", "HUMANITARIAN AID"),
          covariate.labels = c(
            "population",
            "GDP per capita",
            "Polity",
            "US trade (logged)",
            "Russia trade (logged)",
            "US UNGA votes",
            "China UNGA votes",
            "Troops",
            "Suicide attacks",
            "Troops x suicide attacks"),
          header = FALSE,
          type= "html")
Dependent variable:
lead(log(budget_2010_adj)) lead(log(military_aid + 1)) lead(log(humanitarian_aid + 1))
PD SPENDING MILITARY AID HUMANITARIAN AID
(1) (2) (3)
population 0.393*** -1.121*** 0.240
(0.028) (0.152) (0.197)
GDP per capita 0.014 -2.995*** -4.160***
(0.033) (0.174) (0.226)
Polity 0.011*** 0.091*** 0.048
(0.004) (0.023) (0.030)
US trade (logged) 0.030 0.801*** 0.880***
(0.019) (0.104) (0.135)
Russia trade (logged) 0.066*** 0.516*** -0.049
(0.010) (0.051) (0.066)
US UNGA votes 0.013 -0.234 -0.462
(0.114) (0.626) (0.813)
China UNGA votes 0.021 -0.261 1.225*
(0.094) (0.525) (0.683)
Troops 0.011 0.096 0.159*
(0.012) (0.063) (0.082)
Suicide attacks -0.241*** 0.829*** 1.990***
(0.041) (0.251) (0.327)
Troops x suicide attacks 0.072*** -0.001 -0.153***
(0.007) (0.040) (0.052)
Observations 906 1,225 1,225
R2 0.631 0.308 0.529
Adjusted R2 0.625 0.299 0.522
F Statistic 152.046*** (df = 10; 890) 53.824*** (df = 10; 1207) 135.336*** (df = 10; 1207)
Note: p<0.1; p<0.05; p<0.01
LS0tDQp0aXRsZTogIkZpbmFsIFJtYXJrZG93biAoaG9wZWZ1bGx5IG5vdCB0b28gb3B0aW1pc3RpYykiDQphdXRob3I6ICJQYXVsYSINCmRhdGU6ICI4LzE5LzIwMjEiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdGhlbWU6IGZsYXRseQ0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICB0b2NfZGVwdGg6IDUNCiAgICANCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQoNCnRib2R5IHRyOm50aC1jaGlsZChvZGQpIHtiYWNrZ3JvdW5kOiAjZWVlO30NCiMgICAgIA0KIyBoMSwgaDIsIGgzIHt0ZXh0LWFsaWduOiBjZW50ZXI7fQ0KDQpgYGANCg0KYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCg0KbGlicmFyeShwbG0pDQpsaWJyYXJ5KHN0YXJnYXplcikNCmxpYnJhcnkobG10ZXN0KQ0KbGlicmFyeShzYW5kd2ljaCkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkod2VzYW5kZXJzb24pDQpsaWJyYXJ5KGNvdW50cnljb2RlKQ0KbGlicmFyeShza2ltcikNCmxpYnJhcnkocHJpY2VSKQ0KbGlicmFyeShrbml0cikgDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KGphbml0b3IpDQpsaWJyYXJ5KHJuYXR1cmFsZWFydGgpDQpsaWJyYXJ5KHNmKQ0KbGlicmFyeShydmVzdCkNCmxpYnJhcnkoaGF2ZW4pDQpsaWJyYXJ5KFJDb2xvckJyZXdlcikNCmxpYnJhcnkoanNvbmxpdGUpDQpsaWJyYXJ5KHByaWNlUikNCmxpYnJhcnkoY2FyKQ0KDQpteV9kZiA8LSByZWFkLmNzdigifi9wdWJfMV8xMV8yMDIyLmNzdiIpDQoNCiMgdGhlX2RmJHJlZ2lvbl82IDwtIGNhcjo6cmVjb2RlKHRoZV9kZiRyZWdpb25fcG9saXRpY2FsNiwgDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEgPSAnUG9zdCBTb3ZpZXQnOyANCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gJ0xhdGluIEFtZXJpY2EgQ2FyaWJiZWFuJzsNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzID0gJ01FTkEnOw0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPSAnU3ViLVNhaGFyYSc7IA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgPSAnV2VzdCc7DQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiA9ICdBc2lhIGFuZCBQYWNpZmljJyIpDQoNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgd2FybmluZyA9IEZBTFNFLCByZXN1bHRzID0gImFzaXMiLCBvdXQud2lkdGggPSAiNDAwJSIpDQoNCnBhbF92YWx1ZXMgPSBjKCIjMDAxMjE5IiwgIiMwYTkzOTYiLCAiI2VlOWIwMCIsICIjY2E2NzAyIiwiI2JiM2UwMyIsICIjMDA1ZjczIiwgIiM5NGQyYmQiLCAiI2FlMjAxMiIsICIjOWIyMjI2IikNCg0KYGBgDQoNCg0KIyMgRGl2aWRlIGJ1ZGdldCBieSBjb3N0IG9mIGxpdmluZw0KDQpgYGB7ciBpbmNsdWRlID0gRkFMU0UsIGVjaG8gPSBGQUxTRX0NCg0KIyB1cmwgPC0gImh0dHBzOi8vd3d3Lm51bWJlby5jb20vY29zdC1vZi1saXZpbmcvcmFua2luZ3NfYnlfY291bnRyeS5qc3A/dGl0bGU9MjAxOSINCiMgQ291bnRyaWVzIHdpdGggbm8gSU5ERVgNCiMgY29sX3VybCA8LSByZWFkX2h0bWwodXJsKQ0KIyBjb2xfdGFibGUgPC0gY29sX3VybCAlPiUgaHRtbF90YWJsZShoZWFkZXIgPSBUUlVFLCBmaWxsID0gVFJVRSkNCiMgY29sXzE5IDwtIGNvbF90YWJsZVtbMl1dDQojIGNvbF8xOSR5ZWFyIDwtIHJlcGxpY2F0ZSgxMTksIDIwMTkpDQojIGNvbF8xOSRyYW5rIDwtIE5VTEwNCiMgY29sXzE5ICU8PiUgDQojICAgY2xlYW5fbmFtZXMoKQ0KIyBjb2xfMTkkY293X2NvZGUgPC0gY291bnRyeWNvZGUoY29sXzE5JGNvdW50cnksICJjb3VudHJ5Lm5hbWUiLCAiY293biIpDQojIGNvbF8xOSAlPD4lIGRwbHlyOjptdXRhdGUoY293X2NvZGUgPSBpZmVsc2UoY291bnRyeSA9PSAiUGFsZXN0aW5lIiwgNjY2NiwgDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoY291bnRyeSA9PSAiU2VyYmlhIiwgMzQ1LCANCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGNvdW50cnkgPT0gIkhvbmcgS29uZyIsIDk5NywgY293X2NvZGUpKSkpDQojIGNvbF8xOSAlPiUgDQojICAgYXJyYW5nZShkZXNjKGNvc3Rfb2ZfbGl2aW5nX2luZGV4KSkgJT4lIA0KIyAgIGZpbHRlcihjb3N0X29mX2xpdmluZ19pbmRleCA+IDY1KSAlPiUgDQojICAgaGVhZCgpICU+JSANCiMgICBrYmwoKSAlPiUNCiMgICBrYWJsZV9wYXBlcigic3RyaXBlZCIsDQojICAgICAgICAgICAgICAgZnVsbF93aWR0aCA9IEYpDQoNCmBgYA0KDQoNCiMjIFB1cmNoYXNlIFBvd2VyIFBhcml0eQ0KIA0KU291cmNlOiBodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvUEEuTlVTLlBQUEMuUkYNCg0KUHJpY2UgbGV2ZWwgcmF0aW8gaXMgdGhlIHJhdGlvIG9mIGEgcHVyY2hhc2luZyBwb3dlciBwYXJpdHkgKFBQUCkgY29udmVyc2lvbiBmYWN0b3IgdG8gYW4gZXhjaGFuZ2UgcmF0ZS4gSXQgcHJvdmlkZXMgYSBtZWFzdXJlIG9mIHRoZSBkaWZmZXJlbmNlcyBpbiBwcmljZSBsZXZlbHMgYmV0d2VlbiBjb3VudHJpZXMgYnkgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIHVuaXRzIG9mIHRoZSBjb21tb24gY3VycmVuY3kgbmVlZGVkIHRvIGJ1eSB0aGUgc2FtZSB2b2x1bWUgb2YgdGhlIGFnZ3JlZ2F0aW9uIGxldmVsIGluIGVhY2ggY291bnRyeS4NCg0KSW5kaWNhdG9yIHNvdXJjZTogDQpJbnRlcm5hdGlvbmFsIENvbXBhcmlzb24gUHJvZ3JhbSwgV29ybGQgQmFuaw0KDQoNCmBgYHtyIGluY2x1ZGUgPSBGQUxTRSwgZWNobyA9IEZBTFNFfQ0KIA0KIyBsaWJyYXJ5KFdESSkNCiMgcHBwID0gV0RJKGluZGljYXRvcj0nUEEuTlVTLlBQUEMuUkYnLCBjb3VudHJ5PSJhbGwiLCBzdGFydD0yMDE5LCBlbmQ9MjAxOSkNCiMgcHBwJHBwcCA8LSBwcHAkUEEuTlVTLlBQUEMuUkYNCiMgcHBwJFBBLk5VUy5QUFBDLlJGIDwtIE5VTEwNCiMgcHBwJGNvd19jb2RlIDwtIGNvdW50cnljb2RlKHBwcCRpc28yYywgImlzbzJjIiwgImNvd24iKQ0KIyBwcHAgJTw+JSANCiMgZHBseXI6Om11dGF0ZShjb3dfY29kZSA9IGlmZWxzZShjb3VudHJ5ID09ICJXZXN0IEJhbmsgYW5kIEdhemEiLCA2NjY2LCANCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoY291bnRyeSA9PSAiU2VyYmlhIiwgMzQ1LCANCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGNvdW50cnkgPT0gIkhvbmcgS29uZyBTQVIsIENoaW5hIiwgOTk3LCBjb3dfY29kZSkpKSkNCiMgDQojIHBwcCRjb3VudHJ5IDwtIE5VTEwNCg0KYGBgDQoNCg0KIyMgQWRqdXN0IHByaWNlcyB0byAyMDE0IHByaWNlcw0KDQpgYGB7ciBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0NCg0KIyBsaWJyYXJ5KHByaWNlUikNCiMgY291bnRyeSA8LSAiVW5pdGVkIFN0YXRlcyINCiMgY291bnRyaWVzX2RhdGFmcmFtZSA8LSBzaG93X2NvdW50cmllcygpDQojIGluZmxhdGlvbl9kYXRhZnJhbWUgPC0gcmV0cmlldmVfaW5mbGF0aW9uX2RhdGEoY291bnRyeSwgY291bnRyaWVzX2RhdGFmcmFtZSkNCiMgDQojICMgUHJvdmlkZSBhIFdvcmxkIEJhbmsgQVBJIFVSTCBhbmQgYHVybF9hbGxfcmVzdWx0c2Agd2lsbCBjb252ZXJ0IGl0IGludG8gb25lIHdpdGggYWxsIHJlc3VsdHMgZm9yIHRoYXQgaW5kaWNhdG9yDQojIG9yaWdpbmFsX3VybCA8LSAiaHR0cDovL2FwaS53b3JsZGJhbmsub3JnL3YyL2NvdW50cnkiDQojIA0KIyB1cmxfYWxsX3Jlc3VsdHMob3JpZ2luYWxfdXJsKQ0KIyANCiMgbXlfZGYkYnVkZ2V0X2NvbnN0IDwtIGFkanVzdF9mb3JfaW5mbGF0aW9uKG15X2RmJGJ1ZGdldCwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlfZGYkeWVhciwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeSwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fZGF0ZSA9IDIwMTQsDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmxhdGlvbl9kYXRhZnJhbWUgPSBpbmZsYXRpb25fZGF0YWZyYW1lLA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJpZXNfZGF0YWZyYW1lID0gY291bnRyaWVzX2RhdGFmcmFtZSkNCg0KYGBgDQoNCg0KYGBge3IgaW5jbHVkZSA9IEZBTFNFLCBlY2hvID0gRkFMU0V9DQoNCm15X2RmICU8PiUgDQogICAgbXV0YXRlKHRydW1wX2R1bW15ID0gaWZlbHNlKHByZXNpZGVudCA9PSAiVHJ1bXAiLCAxLCAwKSkNCg0KIyBteV9kZiRidWRnZXRfY29uc3RfcHBwXzIgPC0gbXlfZGYkYnVkZ2V0X2NvbnN0Km15X2RmJHBwcA0KDQpteV9kZiAlPiUgDQogIHNlbGVjdChjb3dfY29kZSwgY291bnRyeV9uYW1lLA0KICAgICAgICAgZnJlZWRvbV9ob3VzZSwNCiAgICAgICAgIHBvbHlhcmNoeV92ZGVtLA0KICAgICAgICAgY29udGFpbnMoImJ1ZGdldCIpLA0KICAgICAgICAgeWVhciwgcG9wLCBnZHBfMjAxNSwgZ2RwX3BjLCBwb2xpdHkyLCANCiAgICAgICAgIHVzX3RyYWRlID0gdXNfcmVwb3J0ZWRfdHJhZGVmbG93X2NvbXRyYWRlLCANCiAgICAgICAgIHJ1c3NpYV90cmFkZSA9IHJ1c3NpYV9yZXBvcnRlZF90cmFkZWZsb3dfY29tdHJhZGUsDQogICAgICAgICBjaGluYV90cmFkZSA9IGNoaW5hX3JlcG9ydGVkX3RyYWRlZmxvd19pbWYsDQogICAgICAgICBwb3N0X3NvdmlldCwgDQogICAgICAgICB1c19zYW1lX3ZvdGVfcGVyY2VudCwNCiAgICAgICAgIHJ1c3NpYV9zYW1lX3ZvdGVfcGVyY2VudCwNCiAgICAgICAgIGNoaW5hX3NhbWVfdm90ZV9wZXJjZW50LCANCiAgICAgICAgIGhyX3VzX3NhbWVfcGVyY2VudCwNCiAgICAgICAgIGhyX2NoaV9zYW1lX3BlcmNlbnQsDQogICAgICAgICBpZGVhbF9wb2ludF9kaXN0YW5jZSwNCiAgICAgICAgIHRydW1wX2R1bW15LA0KICAgICAgICAgdXNfdHJvb3BzLA0KICAgICAgICAgc3VpY2lkZV9hdHRhY2tzID0gc3VpY2lkZV9hdHRhY2tzX3RvdGFsLA0KICAgICAgICAgY29udGFpbnMoInJlZ2lvbiIpLCANCiAgICAgICAgIGNvbnRpbmVudCwgDQogICAgICAgICBpbmNvbWVfZ3JvdXBfbmFtZSwgDQogICAgICAgICBuYXRvX21lbWJlciwgDQogICAgICAgICBzZW5hdGVfbWFqOnByZXNpZGVudF9wYXJ0eSwNCiAgICAgICAgIGNvbnRhaW5zKCJhaWQiKSkgLT4gZGZfc3Vic2V0DQoNCnBkZiA8LSBwZGF0YS5mcmFtZShkZl9zdWJzZXQsIGluZGV4ID0gYygiY293X2NvZGUiLCAieWVhciIpKQ0KDQpgYGANCg0KDQoNCiMjIyBSZWdyZXNpb25zIA0KDQpgYGB7ciwgcmVncmVzc2lvbiBvdXRwdXQsIHJlc3VsdHMgPSAnYXNpcyd9DQoNCml2IDwtIGMoImxvZyhwb3ApIiwgICAgIA0KICAgICAgICAibG9nKGdkcF9wYykiLA0KICAgICAgICAicG9saXR5MiIsDQogICAgICAgICJsb2codXNfdHJhZGUgKyAxKSIsDQogICAgICAgICJsb2cocnVzc2lhX3RyYWRlICsgMSkiLA0KICAgICAgICAgIyAiYXMuZmFjdG9yKHBvc3Rfc292aWV0KSIsDQogICAgICAgICAidXNfc2FtZV92b3RlX3BlcmNlbnQiLA0KICAgICAgICAgImNoaW5hX3NhbWVfdm90ZV9wZXJjZW50IiwNCiAgICAgICAgImxvZyh1c190cm9vcHMgKyAxKSpsb2coc3VpY2lkZV9hdHRhY2tzICsgMSkiKQ0KDQpkdiA8LSAibGVhZChsb2coYnVkZ2V0XzIwMTBfYWRqKSkiDQoNCmxtX2Zvcm11bGEgPC0gYXMuZm9ybXVsYShwYXN0ZShkdiwgcGFzdGUoaXYsIGNvbGxhcHNlID0gIiArICIpLCBzZXAgPSAiIH4gIikpDQoNCndpdGhpbl9tb2RlbCA8LSBwbG0obG1fZm9ybXVsYSwgZGF0YSA9IHBkZixtb2RlbCA9ICJ3aXRoaW4iKQ0Kd2l0aGluX3RpbWVfbW9kZWwgPC0gcGxtKGxtX2Zvcm11bGEsIGRhdGEgPSBwZGYsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCnJhbmRvbV9tb2RlbCA8LSBwbG0obG1fZm9ybXVsYSwgZGF0YSA9IHBkZiwgbW9kZWwgPSAicmFuZG9tIikNCnBvb2xlZF9tb2RlbCA8LSBwbG0obG1fZm9ybXVsYSwgZGF0YSA9IHBkZiwgbW9kZWwgPSAicG9vbGluZyIpDQoNCnN0YXJnYXplcih3aXRoaW5fbW9kZWwsIA0KICAgICAgICAgIHdpdGhpbl90aW1lX21vZGVsLA0KICAgICAgICAgICByYW5kb21fbW9kZWwsDQogICAgICAgICAgY29sdW1uLmxhYmVscyA9IGMoIklORCBGSVhFRCIsICJUSU1FIEZJWEVEIiwgIlJBTkRPTSIpLA0KICAgICAgICAgIGNvdmFyaWF0ZS5sYWJlbHMgPSBjKA0KICAgICAgICAgICAgInBvcHVsYXRpb24iLA0KICAgICAgICAgICAgIkdEUCBwZXIgY2FwaXRhIiwNCiAgICAgICAgICAgICJQb2xpdHkiLA0KICAgICAgICAgICAgIlVTIHRyYWRlIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJSdXNzaWEgdHJhZGUgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlVTIFVOR0Egdm90ZXMiLA0KICAgICAgICAgICAgIkNoaW5hIFVOR0Egdm90ZXMiLA0KICAgICAgICAgICAgIlRyb29wcyIsDQogICAgICAgICAgICAiU3VpY2lkZSBhdHRhY2tzIiwNCiAgICAgICAgICAgICJUcm9vcHMgeCBzdWljaWRlIGF0dGFja3MiKSwNCiAgICAgICAgICB0eXBlPSAiaHRtbCIsIGhlYWRlciA9IEZBTFNFKQ0KDQpgYGANCg0KIyBDaG9vc2UgbW9zdCBzdWl0YWJsZSBtb2RlbCBlZmZlY3RzDQoNCiMjIEYtdGVzdA0KDQpJZiB0aGUgcC12YWx1ZSBpcyBzaWduaWZpY2FudGx5IHNtYWxsLCB1c2UgZml4ZWQgbW9kZWwgcmF0aGVyIHRoYW4gcG9vbGVkIE9MUyANCg0KYGBge3IsIEYtdGVzdH0NCg0KcEZ0ZXN0KHdpdGhpbl9tb2RlbCwgcG9vbGVkX21vZGVsKQ0KDQoNCmBgYA0KDQojIyBIYXVzbWFuIHRlc3QgDQoNCklmIHRoZSBwLXZhbHVlIGlzIHNpZ25pZmljYW50bHkgc21hbGwsIHVzZSBmaXhlZCBtb2RlbCByYXRoZXIgdGhhbiByYW5kb20uDQoNCmBgYHtyLCBIYXVzbWFuIHRlc3R9DQoNCnBodGVzdCh3aXRoaW5fbW9kZWwsIHJhbmRvbV9tb2RlbCkNCg0KYGBgDQoNCiMjIExhZ3JhbmdlIE11bHRpcGxpZXIgVGVzdA0KDQpJZiB0aGUgcC12YWx1ZSBpcyBzaWduaWZpY2FudGx5IHNtYWxsLCB1c2UgdGltZS1maXhlZCBlZmZlY3RzIHJhdGhlciB0aGFuIGluZGl2aWR1YWwuDQoNCmBgYHtyLCByZXN1bHRzID0gImFzaXMifQ0KDQpwbG10ZXN0KHdpdGhpbl90aW1lX21vZGVsLCBjKCJ0aW1lIiksIHR5cGU9KCJicCIpKQ0KDQpgYGANCg0KIyMgUmVncmVzc2lvbnMgd2l0aCBjb3VudHJ5ICgiZ3JvdXAiKSBjbHVzdGVyZWQgcm9idXN0IHN0YW5kYXJkIGVycm9ycyAgKEhDMSkNCg0KYGBge3J9DQoNCnN0YXJnYXplcih3aXRoaW5fbW9kZWwsDQogICAgICAgICAgY29lZnRlc3Qod2l0aGluX21vZGVsLHZjb3YgPSB2Y292SEMod2l0aGluX3RpbWVfbW9kZWwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJIQzEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyID0gImdyb3VwIikpLA0KICAgICAgICAgIHR5cGUgPSAiaHRtbCIpDQoNCmBgYA0KDQpgYGB7cn0NCg0KZmhfZnJlZSA8LSBwZGYgJT4lIA0KICBkcGx5cjo6ZmlsdGVyKGZyZWVkb21faG91c2UgPT0gMSkNCg0KZmhfcGFydGx5X2ZyZWUgPC0gcGRmICU+JSANCiAgZHBseXI6OmZpbHRlcihmcmVlZG9tX2hvdXNlID09IDIpDQoNCmZoX25vdF9mcmVlIDwtIHBkZiAlPiUgDQogIGRwbHlyOjpmaWx0ZXIoZnJlZWRvbV9ob3VzZSA9PSAzKQ0KDQpgYGANCg0KYGBge3IsIHJlc3VsdHMgPSAnYXNpcyd9DQoNCmZyZWVfd2l0aGluX3RpbWVfbW9kZWwgPC0gcGxtKGxtX2Zvcm11bGEsIGRhdGEgPSBmaF9mcmVlLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpwYXJ0bHlfZnJlZV93aXRoaW5fdGltZV9tb2RlbCA8LSBwbG0obG1fZm9ybXVsYSwgZGF0YSA9IGZoX3BhcnRseV9mcmVlLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpub3RfZnJlZV93aXRoaW5fdGltZV9tb2RlbCA8LSBwbG0obG1fZm9ybXVsYSwgZGF0YSA9IGZoX25vdF9mcmVlLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQoNCnN0YXJnYXplcihmcmVlX3dpdGhpbl90aW1lX21vZGVsLCANCiAgICAgICAgICBwYXJ0bHlfZnJlZV93aXRoaW5fdGltZV9tb2RlbCwNCiAgICAgICAgICAgbm90X2ZyZWVfd2l0aGluX3RpbWVfbW9kZWwsDQogICAgICAgICAgY29sdW1uLmxhYmVscyA9IGMoIkZSRUUiLCAiUEFSVExZIiwgIk5PVCBGUkVFIiksDQogICAgICAgICAgY292YXJpYXRlLmxhYmVscyA9IGMoDQogICAgICAgICAgICAicG9wdWxhdGlvbiIsDQogICAgICAgICAgICAiR0RQIHBlciBjYXBpdGEiLA0KICAgICAgICAgICAgIlBvbGl0eSIsDQogICAgICAgICAgICAiVVMgdHJhZGUgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlJ1c3NpYSB0cmFkZSAobG9nZ2VkKSIsDQogICAgICAgICAgICAiVVMgVU5HQSB2b3RlcyIsDQogICAgICAgICAgICAiQ2hpbmEgVU5HQSB2b3RlcyIsDQogICAgICAgICAgICAiVHJvb3BzIiwNCiAgICAgICAgICAgICJTdWljaWRlIGF0dGFja3MiLA0KICAgICAgICAgICAgIlRyb29wcyB4IHN1aWNpZGUgYXR0YWNrcyIpLA0KICAgICAgICAgIGhlYWRlciA9IEZBTFNFLA0KICAgICAgICAgIHR5cGU9ICJodG1sIikNCg0KYGBgDQoNCmBgYHtyfQ0KDQpzaW1pbGFyX2xpYmVyYWxfdW5nYV92b3RpbmcgPC0gcGRmICU+JSANCiAgZHBseXI6OmZpbHRlcihpZGVhbF9wb2ludF9kaXN0YW5jZSA8IDIpDQoNCmRpc3NpbWlsYXJfbGliZXJhbF91bmdhX3ZvdGluZyA8LSBwZGYgJT4lIA0KICBkcGx5cjo6ZmlsdGVyKGlkZWFsX3BvaW50X2Rpc3RhbmNlID4gMikNCg0KIyBwZGYgJT4lIA0KIyAgIGZpbHRlcih5ZWFyID09IDIwMTgpICU+JSANCiMgICBzZWxlY3QoY291bnRyeV9uYW1lLCBpZGVhbF9wb2ludF9kaXN0YW5jZSkgJT4lIA0KIyAgIGFycmFuZ2UoZGVzYyhpZGVhbF9wb2ludF9kaXN0YW5jZSkpICU+JSANCiMgICBwcmludChuID0gNTApDQoNCmBgYA0KDQpgYGB7ciwgcmVzdWx0cyA9ICdhc2lzJ30NCg0Kc2ltaWxhcl9saWJlcmFsX3VuZ2Ffdm90aW5nIDwtIHBsbShsbV9mb3JtdWxhLCBkYXRhID0gc2ltaWxhcl9saWJlcmFsX3VuZ2Ffdm90aW5nLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpkaXNzaW1pbGFyX2xpYmVyYWxfdW5nYV92b3RpbmcgPC0gcGxtKGxtX2Zvcm11bGEsIGRhdGEgPSBkaXNzaW1pbGFyX2xpYmVyYWxfdW5nYV92b3RpbmcsIG1vZGVsID0gIndpdGhpbiIsIGVmZmVjdCA9ICJ0aW1lIikNCg0Kc3RhcmdhemVyKHNpbWlsYXJfbGliZXJhbF91bmdhX3ZvdGluZywgDQogICAgICAgICAgZGlzc2ltaWxhcl9saWJlcmFsX3VuZ2Ffdm90aW5nLA0KICAgICAgICAgIGNvbHVtbi5sYWJlbHMgPSBjKCJTaW1pbGFyIiwgIkRpc3NpbWlsYXIiKSwNCiAgICAgICAgICBjb3ZhcmlhdGUubGFiZWxzID0gYygNCiAgICAgICAgICAgICJwb3B1bGF0aW9uIiwNCiAgICAgICAgICAgICJHRFAgcGVyIGNhcGl0YSIsDQogICAgICAgICAgICAiUG9saXR5IiwNCiAgICAgICAgICAgICJVUyB0cmFkZSAobG9nZ2VkKSIsDQogICAgICAgICAgICAiUnVzc2lhIHRyYWRlIChsb2dnZWQpIiwNCiAgICAgICAgICAgICJVUyBVTkdBIHZvdGVzIiwNCiAgICAgICAgICAgICJDaGluYSBVTkdBIHZvdGVzIiwNCiAgICAgICAgICAgICJUcm9vcHMiLA0KICAgICAgICAgICAgIlN1aWNpZGUgYXR0YWNrcyIsDQogICAgICAgICAgICAiVHJvb3BzIHggc3VpY2lkZSBhdHRhY2tzIiksDQoNCiAgICAgICAgICBzdHlsZSA9ICJxamUiLA0KICAgICAgICAgIHR5cGUgPSAidGV4dCIpDQoNCj9zdGFyZ2F6ZXINCg0KYGBgDQoNCkNvbXBhcmUgUHVibGljIERpcGxvbWFjeSBidWRnZXQgdG8gVVNBSUQgc3BlbmRpbmcNCg0KYGBge3IsIHJlc3VsdHMgPSAnYXNpcyd9DQoNCm1pbF9haWRfZHYgPC0gImxlYWQobG9nKG1pbGl0YXJ5X2FpZCArIDEpKSINCmh1bWFuX2FpZF9kdiA8LSAibGVhZChsb2coaHVtYW5pdGFyaWFuX2FpZCArIDEpKSINCg0KbWlsX2xtX2Zvcm11bGEgPC0gYXMuZm9ybXVsYShwYXN0ZShtaWxfYWlkX2R2LCBwYXN0ZShpdiwgY29sbGFwc2UgPSAiICsgIiksIHNlcCA9ICIgfiAiKSkNCmh1bWFuX2xtX2Zvcm11bGEgPC0gYXMuZm9ybXVsYShwYXN0ZShodW1hbl9haWRfZHYsIHBhc3RlKGl2LCBjb2xsYXBzZSA9ICIgKyAiKSwgc2VwID0gIiB+ICIpKQ0KDQptaWxfd2l0aGluX3RpbWVfbW9kZWwgPC0gcGxtKG1pbF9sbV9mb3JtdWxhLCBkYXRhID0gcGRmLCBtb2RlbCA9ICJ3aXRoaW4iLCBlZmZlY3QgPSAidGltZSIpDQpodW1hbl93aXRoaW5fdGltZV9tb2RlbCA8LSBwbG0oaHVtYW5fbG1fZm9ybXVsYSwgZGF0YSA9IHBkZiwgbW9kZWwgPSAid2l0aGluIiwgZWZmZWN0ID0gInRpbWUiKQ0KDQpzdGFyZ2F6ZXIod2l0aGluX3RpbWVfbW9kZWwsIA0KICAgICAgICAgIG1pbF93aXRoaW5fdGltZV9tb2RlbCwgDQogICAgICAgICAgaHVtYW5fd2l0aGluX3RpbWVfbW9kZWwsDQogICAgICAgICAgY29sdW1uLmxhYmVscyA9IGMoIlBEIFNQRU5ESU5HIiwgIk1JTElUQVJZIEFJRCIsICJIVU1BTklUQVJJQU4gQUlEIiksDQogICAgICAgICAgY292YXJpYXRlLmxhYmVscyA9IGMoDQogICAgICAgICAgICAicG9wdWxhdGlvbiIsDQogICAgICAgICAgICAiR0RQIHBlciBjYXBpdGEiLA0KICAgICAgICAgICAgIlBvbGl0eSIsDQogICAgICAgICAgICAiVVMgdHJhZGUgKGxvZ2dlZCkiLA0KICAgICAgICAgICAgIlJ1c3NpYSB0cmFkZSAobG9nZ2VkKSIsDQogICAgICAgICAgICAiVVMgVU5HQSB2b3RlcyIsDQogICAgICAgICAgICAiQ2hpbmEgVU5HQSB2b3RlcyIsDQogICAgICAgICAgICAiVHJvb3BzIiwNCiAgICAgICAgICAgICJTdWljaWRlIGF0dGFja3MiLA0KICAgICAgICAgICAgIlRyb29wcyB4IHN1aWNpZGUgYXR0YWNrcyIpLA0KICAgICAgICAgIGhlYWRlciA9IEZBTFNFLA0KICAgICAgICAgIHR5cGU9ICJodG1sIikNCg0KYGBgDQoNCg==