In this script I extract the coefficients for gender, age and education and put them in a dataset together, to use them as input for the meta-regression. In this script, I only select the coefficients of gender and education, as I use the models without age as a predictor variable.

rm(list=ls())
library(tidyverse)
library(dplyr)
library(gamlss)

ESS

load("./data/final_data/regression_outputs/ess_list_preds_w_new.RData")

# Store the results in a new dataframe
ess_indep_preds_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(ess_list_preds)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(ess_list_preds[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(ess_list_preds[[i]])
  
  # Extract the intercept and standard deviation for mu and sigma
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]
  
  # Put the results 
  ess_indep_preds_df <- rbind(ess_indep_preds_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd,sig_age_est, sig_age_sd))
}

save(ess_indep_preds_df, file="./data/final_data/indep_var/ess_indep_var_df_w_new.RData")

EVS

# Now the same for the EVS
rm(list=ls())
load("./data/final_data/regression_outputs/evs_list_preds_w_new.RData")

# Store the results in a new dataframe
evs_indep_preds_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(evs_list_preds)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(evs_list_preds[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(evs_list_preds[[i]])
  
  # Extract the intercept and standard deviation for mu and sigma
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]

  
  # Put the results 
  evs_indep_preds_df <- rbind(evs_indep_preds_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd,sig_age_est, sig_age_sd))
}

save(evs_indep_preds_df, file="./data/final_data/indep_var/evs_indep_var_df_w_new.RData")
# Now for I&O research
rm(list=ls())
load("./data/final_data/regression_outputs/io_list_preds_w_new.RData")

# Store the results in a new dataframe
io_indep_preds_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(io_list_preds)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(io_list_preds[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(io_list_preds[[i]])
  
  # Extract the intercept and standard deviation for mu and sigma
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]

  
  # Put the results 
  io_indep_preds_df <- rbind(io_indep_preds_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd,sig_age_est, sig_age_sd))
}

save(io_indep_preds_df, file="./data/final_data/indep_var/io_indep_var_df_w_new.RData")

ISSP

# Now for ISSP, which has to happen twice (bc 2 substs based on dependent vars)
rm(list=ls())
load("./data/final_data/regression_outputs/issp_list_preds_w_new.RData")

# Store the results in a new dataframe
issp_indep_preds_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(issp_list_preds)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(issp_list_preds[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(issp_list_preds[[i]])
  
  # Extract the intercept and standard deviatisspn for mu and sigma
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]

  
  # Put the results 
  issp_indep_preds_df <- rbind(issp_indep_preds_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd,sig_age_est, sig_age_sd))
}

save(issp_indep_preds_df, file="./data/final_data/indep_var/issp_indep_var_df_w_new.RData")

# For the other indep vars as well
load("./data/final_data/regression_outputs/issp_list_preds_2_waves_w_new.RData")

# Store the results in a new dataframe
issp_2_indep_preds_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(issp_list_preds_2_waves)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(issp_list_preds_2_waves[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(issp_list_preds_2_waves[[i]])
  
  # Extract the intercept and standard deviatissp_2n for mu and sigma
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]

  
  # Put the results 
  issp_2_indep_preds_df <- rbind(issp_2_indep_preds_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd,sig_age_est, sig_age_sd))
}

save(issp_2_indep_preds_df, file="./data/final_data/indep_var/issp_2_indep_var_df_w_new.RData")

EB

# For all the eurobarometer waves, exactly the same needs to be done each time. Therefore I want to loop over these waves
# For some reason this didn't work anymore later on, so I run them by one by one in the code below
rm(list=ls())
load("./data/final_data/regression_outputs/eb_list_preds_1986_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_2007_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_2008_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_2009_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_2011_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_buyprod_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_cchange2_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_doprot_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_eff_daily_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_pers_imp_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_prsaction_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_quallife_w_new.RData")
load("./data/final_data/regression_outputs/eb_list_preds_doprot_city_w_new.RData")
# Extract the indep vars from the regressions Eurobarometer one by one
eb_indep_preds_1986_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_1986)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_1986[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_1986[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_1986_df <- rbind(eb_indep_preds_1986_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }
# Store the results in a new dataframe
eb_indep_preds_2007_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_2007)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_2007[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_2007[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_2007_df <- rbind(eb_indep_preds_2007_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }
# 2008

  # Store the results in a new dataframe
eb_indep_preds_2008_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_2008)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_2008[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_2008[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_2008_df <- rbind(eb_indep_preds_2008_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }
# Store the results in a new dataframe
eb_indep_preds_2009_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_2009)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_2009[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_2009[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_2009_df <- rbind(eb_indep_preds_2009_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }
# Store the results in a new dataframe
eb_indep_preds_2011_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_2011)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_2011[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_2011[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_2011_df <- rbind(eb_indep_preds_2011_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }
# Store the results in a new dataframe
eb_indep_preds_buyprod_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_buyprod)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_buyprod[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_buyprod[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_buyprod_df <- rbind(eb_indep_preds_buyprod_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }
# Store the results in a new dataframe
eb_indep_preds_cchange2_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_cchange2)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_cchange2[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_cchange2[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_cchange2_df <- rbind(eb_indep_preds_cchange2_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }
# Store the results in a new dataframe
eb_indep_preds_doprot_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_doprot)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_doprot[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_doprot[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_doprot_df <- rbind(eb_indep_preds_doprot_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }
# Store the results in a new dataframe
eb_indep_preds_doprot_city_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_doprot_city)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_doprot_city[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_doprot_city[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_doprot_city_df <- rbind(eb_indep_preds_doprot_city_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }
# Store the results in a new dataframe
eb_indep_preds_eff_daily_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_eff_daily)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_eff_daily[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_eff_daily[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_eff_daily_df <- rbind(eb_indep_preds_eff_daily_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
}
# Store the results in a new dataframe
eb_indep_preds_pers_imp_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_pers_imp)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_pers_imp[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_pers_imp[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_pers_imp_df <- rbind(eb_indep_preds_pers_imp_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }

  # Store the results in a new dataframe
eb_indep_preds_prsaction_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_prsaction)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_prsaction[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_prsaction[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_prsaction_df <- rbind(eb_indep_preds_prsaction_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
}
# Store the results in a new dataframe
eb_indep_preds_quallife_df <- data.frame(dep_var = character())

# Loop over the list 
for (i in seq_along(eb_list_preds_quallife)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(eb_list_preds_quallife[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(eb_list_preds_quallife[[i]])
  
  # Extract info
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]


  # Put the results in a dataframe
  eb_indep_preds_quallife_df <- rbind(eb_indep_preds_quallife_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd, sig_age_est, sig_age_sd))
    }

eb_indep_preds_df <- rbind(eb_indep_preds_1986_df, eb_indep_preds_2007_df, eb_indep_preds_2008_df, eb_indep_preds_2009_df, eb_indep_preds_2011_df, eb_indep_preds_buyprod_df, eb_indep_preds_cchange2_df, eb_indep_preds_doprot_city_df, eb_indep_preds_doprot_df, eb_indep_preds_eff_daily_df, eb_indep_preds_pers_imp_df, eb_indep_preds_prsaction_df, eb_indep_preds_quallife_df)

save(eb_indep_preds_df, file= "./data/final_data/indep_var/eb_indep_var_df_w_new.RData" )

LISS

# Now the same for the LISS
rm(list=ls())
load("./data/final_data/regression_outputs/liss_list_preds_w_new.RData")

# Store the results in a new dataframe
liss_indep_preds_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(liss_list_preds)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(liss_list_preds[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(liss_list_preds[[i]])
  
  # Extract the intercept and standard deviation for mu and sigma
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]

  
  # Put the results 
  liss_indep_preds_df <- rbind(liss_indep_preds_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd,sig_age_est, sig_age_sd))
}

save(liss_indep_preds_df, file="./data/final_data/indep_var/liss_indep_var_df_w_new.RData")
# Now the same for the MOT
rm(list=ls())
load("./data/final_data/regression_outputs/mot_list_preds_w_new.RData")

# Store the results in a new dataframe
mot_indep_preds_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(mot_list_preds)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(mot_list_preds[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(mot_list_preds[[i]])
  
  # Extract the intercept and standard deviation for mu and sigma
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]

  
  # Put the results 
  mot_indep_preds_df <- rbind(mot_indep_preds_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd,sig_age_est, sig_age_sd))
}

save(mot_indep_preds_df, file="./data/final_data/indep_var/mot_indep_var_df_w_new.RData")
# Now the same for the SOCON
rm(list=ls())
load("./data/final_data/regression_outputs/socon_list_preds_w_new.RData")

# Store the results in a new dataframe
socon_indep_preds_df <- data.frame(dep_var = character())

# Loop over the list of models
for (i in seq_along(socon_list_preds)) {

  # Extract the dependent variable so that we know for which dep var the effects are
  dep_var <- as.character(socon_list_preds[[i]]$mu.terms[[2]])
  
    # Summarize the model
  sum <- summary(socon_list_preds[[i]])
  
  # Extract the intercept and standard deviation for mu and sigma
  mu_sex_est <- sum[[3]]
  mu_sex_sd <- sum[[3,2]]
  mu_isced_med_est <- sum[[4]]
  mu_isced_med_sd <- sum[[4,2]]
  mu_isced_high_est <- sum[[5]]
  mu_isced_high_sd <- sum[[5,2]]
  mu_age_est <- sum[[6]]
  mu_age_sd <- sum[[6,2]]

    # Variance
  sig_sex_est <- sum[[9]]
  sig_sex_sd <- sum[[9,2]]
  sig_isced_med_est <- sum[[10]]
  sig_isced_med_sd <- sum[[10,2]]
  sig_isced_high_est <- sum[[11]]
  sig_isced_high_sd <- sum[[11,2]]
  sig_age_est <- sum[[12]]
  sig_age_sd <- sum[[12,2]]

  
  # Put the results 
  socon_indep_preds_df <- rbind(socon_indep_preds_df, data.frame(dep_var = dep_var, mu_sex_est, mu_sex_sd, mu_isced_med_est, mu_isced_med_sd, mu_isced_high_est, mu_isced_high_sd, mu_age_est, mu_age_sd, sig_sex_est, sig_sex_sd, sig_isced_med_est, sig_isced_med_sd, sig_isced_high_est, sig_isced_high_sd,sig_age_est, sig_age_sd))
}

save(socon_indep_preds_df, file="./data/final_data/indep_var/socon_indep_var_df_w_new.RData")
# The final step is to merge all results into one dataframe
rm(list=ls())
load("./data/final_data/indep_var/eb_indep_var_df_w_new.RData")
load("./data/final_data/indep_var/ess_indep_var_df_w_new.RData")
load("./data/final_data/indep_var/evs_indep_var_df_w_new.RData")
load("./data/final_data/indep_var/io_indep_var_df_w_new.RData")
load("./data/final_data/indep_var/issp_2_indep_var_df_w_new.RData")
load("./data/final_data/indep_var/issp_indep_var_df_w_new.RData")
load("./data/final_data/indep_var/liss_indep_var_df_w_new.RData")
load("./data/final_data/indep_var/mot_indep_var_df_w_new.RData")
load("./data/final_data/indep_var/socon_indep_var_df_w_new.RData")

library(plyr) 
library(dplyr)
total_indep_var_results <- rbind.fill(eb_indep_preds_df, ess_indep_preds_df, evs_indep_preds_df, io_indep_preds_df, issp_indep_preds_df, issp_2_indep_preds_df, liss_indep_preds_df, mot_indep_preds_df, socon_indep_preds_df) 

save(total_indep_var_results, file= "./data/meta_analysis/total_indep_var_results_new.RData" )
LS0tDQp0aXRsZTogIkV4dHJhY3QgY29lZmZpY2llbnRzIG9mIGluZGVwZW5kZW50IHZhcmlhYmxlIG1vZGVscyINCmF1dGhvcjogIkFudXNjaGthIFBlZWxlbiINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogaHRtbF9kb2N1bWVudA0KLS0tDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGV2YWwgPSBGQUxTRSkNCmtuaXRyOjpvcHRzX2NodW5rJHNldChudW1iZXJfc2VjdGlvbnMgPSBGQUxTRSkNCm9wdGlvbnMod2lkdGggPSAxMDApDQpjb2xvcml6ZSA8LSBmdW5jdGlvbih4LCBjb2xvcikge3NwcmludGYoIjxzcGFuIHN0eWxlPSdjb2xvcjogJXM7Jz4lczwvc3Bhbj4iLCBjb2xvciwgeCkgfQ0KYGBgDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQpwcmUgew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCn0NCg0KcHJlW2NsYXNzXSB7DQogIG1heC1oZWlnaHQ6IDEwMHB4Ow0KfQ0KYGBgDQoNCkluIHRoaXMgc2NyaXB0IEkgZXh0cmFjdCB0aGUgY29lZmZpY2llbnRzIGZvciBnZW5kZXIsIGFnZSBhbmQgZWR1Y2F0aW9uIGFuZCBwdXQgdGhlbSBpbiBhIGRhdGFzZXQgdG9nZXRoZXIsIHRvIHVzZSB0aGVtIGFzIGlucHV0IGZvciB0aGUgbWV0YS1yZWdyZXNzaW9uLiBJbiB0aGlzIHNjcmlwdCwgSSBvbmx5IHNlbGVjdCB0aGUgY29lZmZpY2llbnRzIG9mIGdlbmRlciBhbmQgZWR1Y2F0aW9uLCBhcyBJIHVzZSB0aGUgbW9kZWxzIHdpdGhvdXQgYWdlIGFzIGEgcHJlZGljdG9yIHZhcmlhYmxlLiANCg0KYGBge3J9DQpybShsaXN0PWxzKCkpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdhbWxzcykNCmBgYA0KDQojIyBFU1Mgey19DQoNCmBgYHtyfQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2Vzc19saXN0X3ByZWRzX3dfbmV3LlJEYXRhIikNCg0KIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmVzc19pbmRlcF9wcmVkc19kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2YgbW9kZWxzDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGVzc19saXN0X3ByZWRzKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZXNzX2xpc3RfcHJlZHNbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoZXNzX2xpc3RfcHJlZHNbW2ldXSkNCiAgDQogICMgRXh0cmFjdCB0aGUgaW50ZXJjZXB0IGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gZm9yIG11IGFuZCBzaWdtYQ0KICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCg0KICAgICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCiAgDQogICMgUHV0IHRoZSByZXN1bHRzIA0KICBlc3NfaW5kZXBfcHJlZHNfZGYgPC0gcmJpbmQoZXNzX2luZGVwX3ByZWRzX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkKSkNCn0NCg0Kc2F2ZShlc3NfaW5kZXBfcHJlZHNfZGYsIGZpbGU9Ii4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9lc3NfaW5kZXBfdmFyX2RmX3dfbmV3LlJEYXRhIikNCg0KYGBgDQoNCiMjIEVWUyB7LX0NCg0KYGBge3J9DQojIE5vdyB0aGUgc2FtZSBmb3IgdGhlIEVWUw0Kcm0obGlzdD1scygpKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2V2c19saXN0X3ByZWRzX3dfbmV3LlJEYXRhIikNCg0KIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmV2c19pbmRlcF9wcmVkc19kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2YgbW9kZWxzDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGV2c19saXN0X3ByZWRzKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZXZzX2xpc3RfcHJlZHNbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoZXZzX2xpc3RfcHJlZHNbW2ldXSkNCiAgDQogICMgRXh0cmFjdCB0aGUgaW50ZXJjZXB0IGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gZm9yIG11IGFuZCBzaWdtYQ0KICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCg0KICAgICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCg0KICANCiAgIyBQdXQgdGhlIHJlc3VsdHMgDQogIGV2c19pbmRlcF9wcmVkc19kZiA8LSByYmluZChldnNfaW5kZXBfcHJlZHNfZGYsIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGRlcF92YXIsIG11X3NleF9lc3QsIG11X3NleF9zZCwgbXVfaXNjZWRfbWVkX2VzdCwgbXVfaXNjZWRfbWVkX3NkLCBtdV9pc2NlZF9oaWdoX2VzdCwgbXVfaXNjZWRfaGlnaF9zZCwgbXVfYWdlX2VzdCwgbXVfYWdlX3NkLCBzaWdfc2V4X2VzdCwgc2lnX3NleF9zZCwgc2lnX2lzY2VkX21lZF9lc3QsIHNpZ19pc2NlZF9tZWRfc2QsIHNpZ19pc2NlZF9oaWdoX2VzdCwgc2lnX2lzY2VkX2hpZ2hfc2Qsc2lnX2FnZV9lc3QsIHNpZ19hZ2Vfc2QpKQ0KfQ0KDQpzYXZlKGV2c19pbmRlcF9wcmVkc19kZiwgZmlsZT0iLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2V2c19pbmRlcF92YXJfZGZfd19uZXcuUkRhdGEiKQ0KYGBgDQoNCg0KYGBge3J9DQojIE5vdyBmb3IgSSZPIHJlc2VhcmNoDQpybShsaXN0PWxzKCkpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9yZWdyZXNzaW9uX291dHB1dHMvaW9fbGlzdF9wcmVkc193X25ldy5SRGF0YSIpDQoNCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQppb19pbmRlcF9wcmVkc19kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2YgbW9kZWxzDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGlvX2xpc3RfcHJlZHMpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3Rlcihpb19saXN0X3ByZWRzW1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGlvX2xpc3RfcHJlZHNbW2ldXSkNCiAgDQogICMgRXh0cmFjdCB0aGUgaW50ZXJjZXB0IGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gZm9yIG11IGFuZCBzaWdtYQ0KICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCg0KICAgICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCg0KICANCiAgIyBQdXQgdGhlIHJlc3VsdHMgDQogIGlvX2luZGVwX3ByZWRzX2RmIDwtIHJiaW5kKGlvX2luZGVwX3ByZWRzX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkKSkNCn0NCg0Kc2F2ZShpb19pbmRlcF9wcmVkc19kZiwgZmlsZT0iLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2lvX2luZGVwX3Zhcl9kZl93X25ldy5SRGF0YSIpDQpgYGANCg0KIyMgSVNTUCB7LX0NCg0KYGBge3J9DQojIE5vdyBmb3IgSVNTUCwgd2hpY2ggaGFzIHRvIGhhcHBlbiB0d2ljZSAoYmMgMiBzdWJzdHMgYmFzZWQgb24gZGVwZW5kZW50IHZhcnMpDQpybShsaXN0PWxzKCkpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9yZWdyZXNzaW9uX291dHB1dHMvaXNzcF9saXN0X3ByZWRzX3dfbmV3LlJEYXRhIikNCg0KIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmlzc3BfaW5kZXBfcHJlZHNfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG1vZGVscw0KZm9yIChpIGluIHNlcV9hbG9uZyhpc3NwX2xpc3RfcHJlZHMpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3Rlcihpc3NwX2xpc3RfcHJlZHNbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoaXNzcF9saXN0X3ByZWRzW1tpXV0pDQogIA0KICAjIEV4dHJhY3QgdGhlIGludGVyY2VwdCBhbmQgc3RhbmRhcmQgZGV2aWF0aXNzcG4gZm9yIG11IGFuZCBzaWdtYQ0KICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCg0KICAgICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCg0KICANCiAgIyBQdXQgdGhlIHJlc3VsdHMgDQogIGlzc3BfaW5kZXBfcHJlZHNfZGYgPC0gcmJpbmQoaXNzcF9pbmRlcF9wcmVkc19kZiwgZGF0YS5mcmFtZShkZXBfdmFyID0gZGVwX3ZhciwgbXVfc2V4X2VzdCwgbXVfc2V4X3NkLCBtdV9pc2NlZF9tZWRfZXN0LCBtdV9pc2NlZF9tZWRfc2QsIG11X2lzY2VkX2hpZ2hfZXN0LCBtdV9pc2NlZF9oaWdoX3NkLCBtdV9hZ2VfZXN0LCBtdV9hZ2Vfc2QsIHNpZ19zZXhfZXN0LCBzaWdfc2V4X3NkLCBzaWdfaXNjZWRfbWVkX2VzdCwgc2lnX2lzY2VkX21lZF9zZCwgc2lnX2lzY2VkX2hpZ2hfZXN0LCBzaWdfaXNjZWRfaGlnaF9zZCxzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQp9DQoNCnNhdmUoaXNzcF9pbmRlcF9wcmVkc19kZiwgZmlsZT0iLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2lzc3BfaW5kZXBfdmFyX2RmX3dfbmV3LlJEYXRhIikNCg0KIyBGb3IgdGhlIG90aGVyIGluZGVwIHZhcnMgYXMgd2VsbA0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2lzc3BfbGlzdF9wcmVkc18yX3dhdmVzX3dfbmV3LlJEYXRhIikNCg0KIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmlzc3BfMl9pbmRlcF9wcmVkc19kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2YgbW9kZWxzDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGlzc3BfbGlzdF9wcmVkc18yX3dhdmVzKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoaXNzcF9saXN0X3ByZWRzXzJfd2F2ZXNbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoaXNzcF9saXN0X3ByZWRzXzJfd2F2ZXNbW2ldXSkNCiAgDQogICMgRXh0cmFjdCB0aGUgaW50ZXJjZXB0IGFuZCBzdGFuZGFyZCBkZXZpYXRpc3NwXzJuIGZvciBtdSBhbmQgc2lnbWENCiAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQoNCiAgICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQoNCiAgDQogICMgUHV0IHRoZSByZXN1bHRzIA0KICBpc3NwXzJfaW5kZXBfcHJlZHNfZGYgPC0gcmJpbmQoaXNzcF8yX2luZGVwX3ByZWRzX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkKSkNCn0NCg0Kc2F2ZShpc3NwXzJfaW5kZXBfcHJlZHNfZGYsIGZpbGU9Ii4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9pc3NwXzJfaW5kZXBfdmFyX2RmX3dfbmV3LlJEYXRhIikNCmBgYA0KDQojIyBFQiB7LX0NCmBgYHtyfQ0KIyBGb3IgYWxsIHRoZSBldXJvYmFyb21ldGVyIHdhdmVzLCBleGFjdGx5IHRoZSBzYW1lIG5lZWRzIHRvIGJlIGRvbmUgZWFjaCB0aW1lLiBUaGVyZWZvcmUgSSB3YW50IHRvIGxvb3Agb3ZlciB0aGVzZSB3YXZlcw0KIyBGb3Igc29tZSByZWFzb24gdGhpcyBkaWRuJ3Qgd29yayBhbnltb3JlIGxhdGVyIG9uLCBzbyBJIHJ1biB0aGVtIGJ5IG9uZSBieSBvbmUgaW4gdGhlIGNvZGUgYmVsb3cNCnJtKGxpc3Q9bHMoKSkNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL3JlZ3Jlc3Npb25fb3V0cHV0cy9lYl9saXN0X3ByZWRzXzE5ODZfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfcHJlZHNfMjAwN193X25ldy5SRGF0YSIpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9yZWdyZXNzaW9uX291dHB1dHMvZWJfbGlzdF9wcmVkc18yMDA4X3dfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL3JlZ3Jlc3Npb25fb3V0cHV0cy9lYl9saXN0X3ByZWRzXzIwMDlfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfcHJlZHNfMjAxMV93X25ldy5SRGF0YSIpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9yZWdyZXNzaW9uX291dHB1dHMvZWJfbGlzdF9wcmVkc19idXlwcm9kX3dfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL3JlZ3Jlc3Npb25fb3V0cHV0cy9lYl9saXN0X3ByZWRzX2NjaGFuZ2UyX3dfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL3JlZ3Jlc3Npb25fb3V0cHV0cy9lYl9saXN0X3ByZWRzX2RvcHJvdF93X25ldy5SRGF0YSIpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9yZWdyZXNzaW9uX291dHB1dHMvZWJfbGlzdF9wcmVkc19lZmZfZGFpbHlfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfcHJlZHNfcGVyc19pbXBfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL2ViX2xpc3RfcHJlZHNfcHJzYWN0aW9uX3dfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL3JlZ3Jlc3Npb25fb3V0cHV0cy9lYl9saXN0X3ByZWRzX3F1YWxsaWZlX3dfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL3JlZ3Jlc3Npb25fb3V0cHV0cy9lYl9saXN0X3ByZWRzX2RvcHJvdF9jaXR5X3dfbmV3LlJEYXRhIikNCmBgYA0KDQoNCmBgYHtyfQ0KIyBFeHRyYWN0IHRoZSBpbmRlcCB2YXJzIGZyb20gdGhlIHJlZ3Jlc3Npb25zIEV1cm9iYXJvbWV0ZXIgb25lIGJ5IG9uZQ0KZWJfaW5kZXBfcHJlZHNfMTk4Nl9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfcHJlZHNfMTk4NikpIHsNCg0KICAjIEV4dHJhY3QgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBzbyB0aGF0IHdlIGtub3cgZm9yIHdoaWNoIGRlcCB2YXIgdGhlIGVmZmVjdHMgYXJlDQogIGRlcF92YXIgPC0gYXMuY2hhcmFjdGVyKGViX2xpc3RfcHJlZHNfMTk4NltbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzXzE5ODZbW2ldXSkNCiAgDQogICMgRXh0cmFjdCBpbmZvDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfcHJlZHNfMTk4Nl9kZiA8LSByYmluZChlYl9pbmRlcF9wcmVkc18xOTg2X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfcHJlZHNfMjAwN19kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfcHJlZHNfMjAwNykpIHsNCg0KICAjIEV4dHJhY3QgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBzbyB0aGF0IHdlIGtub3cgZm9yIHdoaWNoIGRlcCB2YXIgdGhlIGVmZmVjdHMgYXJlDQogIGRlcF92YXIgPC0gYXMuY2hhcmFjdGVyKGViX2xpc3RfcHJlZHNfMjAwN1tbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzXzIwMDdbW2ldXSkNCiAgDQogICMgRXh0cmFjdCBpbmZvDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfcHJlZHNfMjAwN19kZiA8LSByYmluZChlYl9pbmRlcF9wcmVkc18yMDA3X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIDIwMDgNCg0KICAjIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfcHJlZHNfMjAwOF9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfcHJlZHNfMjAwOCkpIHsNCg0KICAjIEV4dHJhY3QgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBzbyB0aGF0IHdlIGtub3cgZm9yIHdoaWNoIGRlcCB2YXIgdGhlIGVmZmVjdHMgYXJlDQogIGRlcF92YXIgPC0gYXMuY2hhcmFjdGVyKGViX2xpc3RfcHJlZHNfMjAwOFtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzXzIwMDhbW2ldXSkNCiAgDQogICMgRXh0cmFjdCBpbmZvDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfcHJlZHNfMjAwOF9kZiA8LSByYmluZChlYl9pbmRlcF9wcmVkc18yMDA4X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfcHJlZHNfMjAwOV9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfcHJlZHNfMjAwOSkpIHsNCg0KICAjIEV4dHJhY3QgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBzbyB0aGF0IHdlIGtub3cgZm9yIHdoaWNoIGRlcCB2YXIgdGhlIGVmZmVjdHMgYXJlDQogIGRlcF92YXIgPC0gYXMuY2hhcmFjdGVyKGViX2xpc3RfcHJlZHNfMjAwOVtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzXzIwMDlbW2ldXSkNCiAgDQogICMgRXh0cmFjdCBpbmZvDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfcHJlZHNfMjAwOV9kZiA8LSByYmluZChlYl9pbmRlcF9wcmVkc18yMDA5X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfcHJlZHNfMjAxMV9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfcHJlZHNfMjAxMSkpIHsNCg0KICAjIEV4dHJhY3QgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBzbyB0aGF0IHdlIGtub3cgZm9yIHdoaWNoIGRlcCB2YXIgdGhlIGVmZmVjdHMgYXJlDQogIGRlcF92YXIgPC0gYXMuY2hhcmFjdGVyKGViX2xpc3RfcHJlZHNfMjAxMVtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzXzIwMTFbW2ldXSkNCiAgDQogICMgRXh0cmFjdCBpbmZvDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfcHJlZHNfMjAxMV9kZiA8LSByYmluZChlYl9pbmRlcF9wcmVkc18yMDExX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfcHJlZHNfYnV5cHJvZF9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfcHJlZHNfYnV5cHJvZCkpIHsNCg0KICAjIEV4dHJhY3QgdGhlIGRlcGVuZGVudCB2YXJpYWJsZSBzbyB0aGF0IHdlIGtub3cgZm9yIHdoaWNoIGRlcCB2YXIgdGhlIGVmZmVjdHMgYXJlDQogIGRlcF92YXIgPC0gYXMuY2hhcmFjdGVyKGViX2xpc3RfcHJlZHNfYnV5cHJvZFtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzX2J1eXByb2RbW2ldXSkNCiAgDQogICMgRXh0cmFjdCBpbmZvDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfcHJlZHNfYnV5cHJvZF9kZiA8LSByYmluZChlYl9pbmRlcF9wcmVkc19idXlwcm9kX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfcHJlZHNfY2NoYW5nZTJfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IA0KZm9yIChpIGluIHNlcV9hbG9uZyhlYl9saXN0X3ByZWRzX2NjaGFuZ2UyKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9wcmVkc19jY2hhbmdlMltbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzX2NjaGFuZ2UyW1tpXV0pDQogIA0KICAjIEV4dHJhY3QgaW5mbw0KICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCg0KICAgICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCg0KDQogICMgUHV0IHRoZSByZXN1bHRzIGluIGEgZGF0YWZyYW1lDQogIGViX2luZGVwX3ByZWRzX2NjaGFuZ2UyX2RmIDwtIHJiaW5kKGViX2luZGVwX3ByZWRzX2NjaGFuZ2UyX2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfcHJlZHNfZG9wcm90X2RmIDwtIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGNoYXJhY3RlcigpKQ0KDQojIExvb3Agb3ZlciB0aGUgbGlzdCANCmZvciAoaSBpbiBzZXFfYWxvbmcoZWJfbGlzdF9wcmVkc19kb3Byb3QpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3RlcihlYl9saXN0X3ByZWRzX2RvcHJvdFtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzX2RvcHJvdFtbaV1dKQ0KICANCiAgIyBFeHRyYWN0IGluZm8NCiAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQoNCiAgICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQoNCg0KICAjIFB1dCB0aGUgcmVzdWx0cyBpbiBhIGRhdGFmcmFtZQ0KICBlYl9pbmRlcF9wcmVkc19kb3Byb3RfZGYgPC0gcmJpbmQoZWJfaW5kZXBfcHJlZHNfZG9wcm90X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfcHJlZHNfZG9wcm90X2NpdHlfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IA0KZm9yIChpIGluIHNlcV9hbG9uZyhlYl9saXN0X3ByZWRzX2RvcHJvdF9jaXR5KSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9wcmVkc19kb3Byb3RfY2l0eVtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzX2RvcHJvdF9jaXR5W1tpXV0pDQogIA0KICAjIEV4dHJhY3QgaW5mbw0KICBtdV9zZXhfZXN0IDwtIHN1bVtbM11dDQogIG11X3NleF9zZCA8LSBzdW1bWzMsMl1dDQogIG11X2lzY2VkX21lZF9lc3QgPC0gc3VtW1s0XV0NCiAgbXVfaXNjZWRfbWVkX3NkIDwtIHN1bVtbNCwyXV0NCiAgbXVfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1s1XV0NCiAgbXVfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzUsMl1dDQogIG11X2FnZV9lc3QgPC0gc3VtW1s2XV0NCiAgbXVfYWdlX3NkIDwtIHN1bVtbNiwyXV0NCg0KICAgICMgVmFyaWFuY2UNCiAgc2lnX3NleF9lc3QgPC0gc3VtW1s5XV0NCiAgc2lnX3NleF9zZCA8LSBzdW1bWzksMl1dDQogIHNpZ19pc2NlZF9tZWRfZXN0IDwtIHN1bVtbMTBdXQ0KICBzaWdfaXNjZWRfbWVkX3NkIDwtIHN1bVtbMTAsMl1dDQogIHNpZ19pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzExXV0NCiAgc2lnX2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1sxMSwyXV0NCiAgc2lnX2FnZV9lc3QgPC0gc3VtW1sxMl1dDQogIHNpZ19hZ2Vfc2QgPC0gc3VtW1sxMiwyXV0NCg0KDQogICMgUHV0IHRoZSByZXN1bHRzIGluIGEgZGF0YWZyYW1lDQogIGViX2luZGVwX3ByZWRzX2RvcHJvdF9jaXR5X2RmIDwtIHJiaW5kKGViX2luZGVwX3ByZWRzX2RvcHJvdF9jaXR5X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQogICAgfQ0KYGBgDQoNCg0KYGBge3J9DQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KZWJfaW5kZXBfcHJlZHNfZWZmX2RhaWx5X2RmIDwtIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGNoYXJhY3RlcigpKQ0KDQojIExvb3Agb3ZlciB0aGUgbGlzdCANCmZvciAoaSBpbiBzZXFfYWxvbmcoZWJfbGlzdF9wcmVkc19lZmZfZGFpbHkpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3RlcihlYl9saXN0X3ByZWRzX2VmZl9kYWlseVtbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShlYl9saXN0X3ByZWRzX2VmZl9kYWlseVtbaV1dKQ0KICANCiAgIyBFeHRyYWN0IGluZm8NCiAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQoNCiAgICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQoNCg0KICAjIFB1dCB0aGUgcmVzdWx0cyBpbiBhIGRhdGFmcmFtZQ0KICBlYl9pbmRlcF9wcmVkc19lZmZfZGFpbHlfZGYgPC0gcmJpbmQoZWJfaW5kZXBfcHJlZHNfZWZmX2RhaWx5X2RmLCBkYXRhLmZyYW1lKGRlcF92YXIgPSBkZXBfdmFyLCBtdV9zZXhfZXN0LCBtdV9zZXhfc2QsIG11X2lzY2VkX21lZF9lc3QsIG11X2lzY2VkX21lZF9zZCwgbXVfaXNjZWRfaGlnaF9lc3QsIG11X2lzY2VkX2hpZ2hfc2QsIG11X2FnZV9lc3QsIG11X2FnZV9zZCwgc2lnX3NleF9lc3QsIHNpZ19zZXhfc2QsIHNpZ19pc2NlZF9tZWRfZXN0LCBzaWdfaXNjZWRfbWVkX3NkLCBzaWdfaXNjZWRfaGlnaF9lc3QsIHNpZ19pc2NlZF9oaWdoX3NkLCBzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQp9DQpgYGANCg0KDQpgYGB7cn0NCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQplYl9pbmRlcF9wcmVkc19wZXJzX2ltcF9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfcHJlZHNfcGVyc19pbXApKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3RlcihlYl9saXN0X3ByZWRzX3BlcnNfaW1wW1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGViX2xpc3RfcHJlZHNfcGVyc19pbXBbW2ldXSkNCiAgDQogICMgRXh0cmFjdCBpbmZvDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfcHJlZHNfcGVyc19pbXBfZGYgPC0gcmJpbmQoZWJfaW5kZXBfcHJlZHNfcGVyc19pbXBfZGYsIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGRlcF92YXIsIG11X3NleF9lc3QsIG11X3NleF9zZCwgbXVfaXNjZWRfbWVkX2VzdCwgbXVfaXNjZWRfbWVkX3NkLCBtdV9pc2NlZF9oaWdoX2VzdCwgbXVfaXNjZWRfaGlnaF9zZCwgbXVfYWdlX2VzdCwgbXVfYWdlX3NkLCBzaWdfc2V4X2VzdCwgc2lnX3NleF9zZCwgc2lnX2lzY2VkX21lZF9lc3QsIHNpZ19pc2NlZF9tZWRfc2QsIHNpZ19pc2NlZF9oaWdoX2VzdCwgc2lnX2lzY2VkX2hpZ2hfc2QsIHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkKSkNCiAgICB9DQoNCiAgIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmViX2luZGVwX3ByZWRzX3Byc2FjdGlvbl9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfcHJlZHNfcHJzYWN0aW9uKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoZWJfbGlzdF9wcmVkc19wcnNhY3Rpb25bW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkoZWJfbGlzdF9wcmVkc19wcnNhY3Rpb25bW2ldXSkNCiAgDQogICMgRXh0cmFjdCBpbmZvDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfcHJlZHNfcHJzYWN0aW9uX2RmIDwtIHJiaW5kKGViX2luZGVwX3ByZWRzX3Byc2FjdGlvbl9kZiwgZGF0YS5mcmFtZShkZXBfdmFyID0gZGVwX3ZhciwgbXVfc2V4X2VzdCwgbXVfc2V4X3NkLCBtdV9pc2NlZF9tZWRfZXN0LCBtdV9pc2NlZF9tZWRfc2QsIG11X2lzY2VkX2hpZ2hfZXN0LCBtdV9pc2NlZF9oaWdoX3NkLCBtdV9hZ2VfZXN0LCBtdV9hZ2Vfc2QsIHNpZ19zZXhfZXN0LCBzaWdfc2V4X3NkLCBzaWdfaXNjZWRfbWVkX2VzdCwgc2lnX2lzY2VkX21lZF9zZCwgc2lnX2lzY2VkX2hpZ2hfZXN0LCBzaWdfaXNjZWRfaGlnaF9zZCwgc2lnX2FnZV9lc3QsIHNpZ19hZ2Vfc2QpKQ0KfQ0KYGBgDQoNCg0KDQpgYGB7cn0NCiMgU3RvcmUgdGhlIHJlc3VsdHMgaW4gYSBuZXcgZGF0YWZyYW1lDQplYl9pbmRlcF9wcmVkc19xdWFsbGlmZV9kZiA8LSBkYXRhLmZyYW1lKGRlcF92YXIgPSBjaGFyYWN0ZXIoKSkNCg0KIyBMb29wIG92ZXIgdGhlIGxpc3QgDQpmb3IgKGkgaW4gc2VxX2Fsb25nKGViX2xpc3RfcHJlZHNfcXVhbGxpZmUpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3RlcihlYl9saXN0X3ByZWRzX3F1YWxsaWZlW1tpXV0kbXUudGVybXNbWzJdXSkNCiAgDQogICAgIyBTdW1tYXJpemUgdGhlIG1vZGVsDQogIHN1bSA8LSBzdW1tYXJ5KGViX2xpc3RfcHJlZHNfcXVhbGxpZmVbW2ldXSkNCiAgDQogICMgRXh0cmFjdCBpbmZvDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQoNCiAgIyBQdXQgdGhlIHJlc3VsdHMgaW4gYSBkYXRhZnJhbWUNCiAgZWJfaW5kZXBfcHJlZHNfcXVhbGxpZmVfZGYgPC0gcmJpbmQoZWJfaW5kZXBfcHJlZHNfcXVhbGxpZmVfZGYsIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGRlcF92YXIsIG11X3NleF9lc3QsIG11X3NleF9zZCwgbXVfaXNjZWRfbWVkX2VzdCwgbXVfaXNjZWRfbWVkX3NkLCBtdV9pc2NlZF9oaWdoX2VzdCwgbXVfaXNjZWRfaGlnaF9zZCwgbXVfYWdlX2VzdCwgbXVfYWdlX3NkLCBzaWdfc2V4X2VzdCwgc2lnX3NleF9zZCwgc2lnX2lzY2VkX21lZF9lc3QsIHNpZ19pc2NlZF9tZWRfc2QsIHNpZ19pc2NlZF9oaWdoX2VzdCwgc2lnX2lzY2VkX2hpZ2hfc2QsIHNpZ19hZ2VfZXN0LCBzaWdfYWdlX3NkKSkNCiAgICB9DQoNCmViX2luZGVwX3ByZWRzX2RmIDwtIHJiaW5kKGViX2luZGVwX3ByZWRzXzE5ODZfZGYsIGViX2luZGVwX3ByZWRzXzIwMDdfZGYsIGViX2luZGVwX3ByZWRzXzIwMDhfZGYsIGViX2luZGVwX3ByZWRzXzIwMDlfZGYsIGViX2luZGVwX3ByZWRzXzIwMTFfZGYsIGViX2luZGVwX3ByZWRzX2J1eXByb2RfZGYsIGViX2luZGVwX3ByZWRzX2NjaGFuZ2UyX2RmLCBlYl9pbmRlcF9wcmVkc19kb3Byb3RfY2l0eV9kZiwgZWJfaW5kZXBfcHJlZHNfZG9wcm90X2RmLCBlYl9pbmRlcF9wcmVkc19lZmZfZGFpbHlfZGYsIGViX2luZGVwX3ByZWRzX3BlcnNfaW1wX2RmLCBlYl9pbmRlcF9wcmVkc19wcnNhY3Rpb25fZGYsIGViX2luZGVwX3ByZWRzX3F1YWxsaWZlX2RmKQ0KDQpzYXZlKGViX2luZGVwX3ByZWRzX2RmLCBmaWxlPSAiLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2ViX2luZGVwX3Zhcl9kZl93X25ldy5SRGF0YSIgKQ0KYGBgDQoNCiMjIExJU1Mgey19DQoNCmBgYHtyfQ0KIyBOb3cgdGhlIHNhbWUgZm9yIHRoZSBMSVNTDQpybShsaXN0PWxzKCkpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9yZWdyZXNzaW9uX291dHB1dHMvbGlzc19saXN0X3ByZWRzX3dfbmV3LlJEYXRhIikNCg0KIyBTdG9yZSB0aGUgcmVzdWx0cyBpbiBhIG5ldyBkYXRhZnJhbWUNCmxpc3NfaW5kZXBfcHJlZHNfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG1vZGVscw0KZm9yIChpIGluIHNlcV9hbG9uZyhsaXNzX2xpc3RfcHJlZHMpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3RlcihsaXNzX2xpc3RfcHJlZHNbW2ldXSRtdS50ZXJtc1tbMl1dKQ0KICANCiAgICAjIFN1bW1hcml6ZSB0aGUgbW9kZWwNCiAgc3VtIDwtIHN1bW1hcnkobGlzc19saXN0X3ByZWRzW1tpXV0pDQogIA0KICAjIEV4dHJhY3QgdGhlIGludGVyY2VwdCBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIGZvciBtdSBhbmQgc2lnbWENCiAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQoNCiAgICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQoNCiAgDQogICMgUHV0IHRoZSByZXN1bHRzIA0KICBsaXNzX2luZGVwX3ByZWRzX2RmIDwtIHJiaW5kKGxpc3NfaW5kZXBfcHJlZHNfZGYsIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGRlcF92YXIsIG11X3NleF9lc3QsIG11X3NleF9zZCwgbXVfaXNjZWRfbWVkX2VzdCwgbXVfaXNjZWRfbWVkX3NkLCBtdV9pc2NlZF9oaWdoX2VzdCwgbXVfaXNjZWRfaGlnaF9zZCwgbXVfYWdlX2VzdCwgbXVfYWdlX3NkLCBzaWdfc2V4X2VzdCwgc2lnX3NleF9zZCwgc2lnX2lzY2VkX21lZF9lc3QsIHNpZ19pc2NlZF9tZWRfc2QsIHNpZ19pc2NlZF9oaWdoX2VzdCwgc2lnX2lzY2VkX2hpZ2hfc2Qsc2lnX2FnZV9lc3QsIHNpZ19hZ2Vfc2QpKQ0KfQ0KDQpzYXZlKGxpc3NfaW5kZXBfcHJlZHNfZGYsIGZpbGU9Ii4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9saXNzX2luZGVwX3Zhcl9kZl93X25ldy5SRGF0YSIpDQoNCmBgYA0KDQpgYGB7cn0NCiMgTm93IHRoZSBzYW1lIGZvciB0aGUgTU9UDQpybShsaXN0PWxzKCkpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9yZWdyZXNzaW9uX291dHB1dHMvbW90X2xpc3RfcHJlZHNfd19uZXcuUkRhdGEiKQ0KDQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0KbW90X2luZGVwX3ByZWRzX2RmIDwtIGRhdGEuZnJhbWUoZGVwX3ZhciA9IGNoYXJhY3RlcigpKQ0KDQojIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBtb2RlbHMNCmZvciAoaSBpbiBzZXFfYWxvbmcobW90X2xpc3RfcHJlZHMpKSB7DQoNCiAgIyBFeHRyYWN0IHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgc28gdGhhdCB3ZSBrbm93IGZvciB3aGljaCBkZXAgdmFyIHRoZSBlZmZlY3RzIGFyZQ0KICBkZXBfdmFyIDwtIGFzLmNoYXJhY3Rlcihtb3RfbGlzdF9wcmVkc1tbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShtb3RfbGlzdF9wcmVkc1tbaV1dKQ0KICANCiAgIyBFeHRyYWN0IHRoZSBpbnRlcmNlcHQgYW5kIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IgbXUgYW5kIHNpZ21hDQogIG11X3NleF9lc3QgPC0gc3VtW1szXV0NCiAgbXVfc2V4X3NkIDwtIHN1bVtbMywyXV0NCiAgbXVfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzRdXQ0KICBtdV9pc2NlZF9tZWRfc2QgPC0gc3VtW1s0LDJdXQ0KICBtdV9pc2NlZF9oaWdoX2VzdCA8LSBzdW1bWzVdXQ0KICBtdV9pc2NlZF9oaWdoX3NkIDwtIHN1bVtbNSwyXV0NCiAgbXVfYWdlX2VzdCA8LSBzdW1bWzZdXQ0KICBtdV9hZ2Vfc2QgPC0gc3VtW1s2LDJdXQ0KDQogICAgIyBWYXJpYW5jZQ0KICBzaWdfc2V4X2VzdCA8LSBzdW1bWzldXQ0KICBzaWdfc2V4X3NkIDwtIHN1bVtbOSwyXV0NCiAgc2lnX2lzY2VkX21lZF9lc3QgPC0gc3VtW1sxMF1dDQogIHNpZ19pc2NlZF9tZWRfc2QgPC0gc3VtW1sxMCwyXV0NCiAgc2lnX2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbMTFdXQ0KICBzaWdfaXNjZWRfaGlnaF9zZCA8LSBzdW1bWzExLDJdXQ0KICBzaWdfYWdlX2VzdCA8LSBzdW1bWzEyXV0NCiAgc2lnX2FnZV9zZCA8LSBzdW1bWzEyLDJdXQ0KDQogIA0KICAjIFB1dCB0aGUgcmVzdWx0cyANCiAgbW90X2luZGVwX3ByZWRzX2RmIDwtIHJiaW5kKG1vdF9pbmRlcF9wcmVkc19kZiwgZGF0YS5mcmFtZShkZXBfdmFyID0gZGVwX3ZhciwgbXVfc2V4X2VzdCwgbXVfc2V4X3NkLCBtdV9pc2NlZF9tZWRfZXN0LCBtdV9pc2NlZF9tZWRfc2QsIG11X2lzY2VkX2hpZ2hfZXN0LCBtdV9pc2NlZF9oaWdoX3NkLCBtdV9hZ2VfZXN0LCBtdV9hZ2Vfc2QsIHNpZ19zZXhfZXN0LCBzaWdfc2V4X3NkLCBzaWdfaXNjZWRfbWVkX2VzdCwgc2lnX2lzY2VkX21lZF9zZCwgc2lnX2lzY2VkX2hpZ2hfZXN0LCBzaWdfaXNjZWRfaGlnaF9zZCxzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQp9DQoNCnNhdmUobW90X2luZGVwX3ByZWRzX2RmLCBmaWxlPSIuL2RhdGEvZmluYWxfZGF0YS9pbmRlcF92YXIvbW90X2luZGVwX3Zhcl9kZl93X25ldy5SRGF0YSIpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KIyBOb3cgdGhlIHNhbWUgZm9yIHRoZSBTT0NPTg0Kcm0obGlzdD1scygpKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvcmVncmVzc2lvbl9vdXRwdXRzL3NvY29uX2xpc3RfcHJlZHNfd19uZXcuUkRhdGEiKQ0KDQojIFN0b3JlIHRoZSByZXN1bHRzIGluIGEgbmV3IGRhdGFmcmFtZQ0Kc29jb25faW5kZXBfcHJlZHNfZGYgPC0gZGF0YS5mcmFtZShkZXBfdmFyID0gY2hhcmFjdGVyKCkpDQoNCiMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG1vZGVscw0KZm9yIChpIGluIHNlcV9hbG9uZyhzb2Nvbl9saXN0X3ByZWRzKSkgew0KDQogICMgRXh0cmFjdCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIHNvIHRoYXQgd2Uga25vdyBmb3Igd2hpY2ggZGVwIHZhciB0aGUgZWZmZWN0cyBhcmUNCiAgZGVwX3ZhciA8LSBhcy5jaGFyYWN0ZXIoc29jb25fbGlzdF9wcmVkc1tbaV1dJG11LnRlcm1zW1syXV0pDQogIA0KICAgICMgU3VtbWFyaXplIHRoZSBtb2RlbA0KICBzdW0gPC0gc3VtbWFyeShzb2Nvbl9saXN0X3ByZWRzW1tpXV0pDQogIA0KICAjIEV4dHJhY3QgdGhlIGludGVyY2VwdCBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIGZvciBtdSBhbmQgc2lnbWENCiAgbXVfc2V4X2VzdCA8LSBzdW1bWzNdXQ0KICBtdV9zZXhfc2QgPC0gc3VtW1szLDJdXQ0KICBtdV9pc2NlZF9tZWRfZXN0IDwtIHN1bVtbNF1dDQogIG11X2lzY2VkX21lZF9zZCA8LSBzdW1bWzQsMl1dDQogIG11X2lzY2VkX2hpZ2hfZXN0IDwtIHN1bVtbNV1dDQogIG11X2lzY2VkX2hpZ2hfc2QgPC0gc3VtW1s1LDJdXQ0KICBtdV9hZ2VfZXN0IDwtIHN1bVtbNl1dDQogIG11X2FnZV9zZCA8LSBzdW1bWzYsMl1dDQoNCiAgICAjIFZhcmlhbmNlDQogIHNpZ19zZXhfZXN0IDwtIHN1bVtbOV1dDQogIHNpZ19zZXhfc2QgPC0gc3VtW1s5LDJdXQ0KICBzaWdfaXNjZWRfbWVkX2VzdCA8LSBzdW1bWzEwXV0NCiAgc2lnX2lzY2VkX21lZF9zZCA8LSBzdW1bWzEwLDJdXQ0KICBzaWdfaXNjZWRfaGlnaF9lc3QgPC0gc3VtW1sxMV1dDQogIHNpZ19pc2NlZF9oaWdoX3NkIDwtIHN1bVtbMTEsMl1dDQogIHNpZ19hZ2VfZXN0IDwtIHN1bVtbMTJdXQ0KICBzaWdfYWdlX3NkIDwtIHN1bVtbMTIsMl1dDQoNCiAgDQogICMgUHV0IHRoZSByZXN1bHRzIA0KICBzb2Nvbl9pbmRlcF9wcmVkc19kZiA8LSByYmluZChzb2Nvbl9pbmRlcF9wcmVkc19kZiwgZGF0YS5mcmFtZShkZXBfdmFyID0gZGVwX3ZhciwgbXVfc2V4X2VzdCwgbXVfc2V4X3NkLCBtdV9pc2NlZF9tZWRfZXN0LCBtdV9pc2NlZF9tZWRfc2QsIG11X2lzY2VkX2hpZ2hfZXN0LCBtdV9pc2NlZF9oaWdoX3NkLCBtdV9hZ2VfZXN0LCBtdV9hZ2Vfc2QsIHNpZ19zZXhfZXN0LCBzaWdfc2V4X3NkLCBzaWdfaXNjZWRfbWVkX2VzdCwgc2lnX2lzY2VkX21lZF9zZCwgc2lnX2lzY2VkX2hpZ2hfZXN0LCBzaWdfaXNjZWRfaGlnaF9zZCxzaWdfYWdlX2VzdCwgc2lnX2FnZV9zZCkpDQp9DQoNCnNhdmUoc29jb25faW5kZXBfcHJlZHNfZGYsIGZpbGU9Ii4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9zb2Nvbl9pbmRlcF92YXJfZGZfd19uZXcuUkRhdGEiKQ0KDQpgYGANCg0KDQoNCmBgYHtyfQ0KIyBUaGUgZmluYWwgc3RlcCBpcyB0byBtZXJnZSBhbGwgcmVzdWx0cyBpbnRvIG9uZSBkYXRhZnJhbWUNCnJtKGxpc3Q9bHMoKSkNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9lYl9pbmRlcF92YXJfZGZfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2Vzc19pbmRlcF92YXJfZGZfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2V2c19pbmRlcF92YXJfZGZfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2lvX2luZGVwX3Zhcl9kZl93X25ldy5SRGF0YSIpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9pbmRlcF92YXIvaXNzcF8yX2luZGVwX3Zhcl9kZl93X25ldy5SRGF0YSIpDQpsb2FkKCIuL2RhdGEvZmluYWxfZGF0YS9pbmRlcF92YXIvaXNzcF9pbmRlcF92YXJfZGZfd19uZXcuUkRhdGEiKQ0KbG9hZCgiLi9kYXRhL2ZpbmFsX2RhdGEvaW5kZXBfdmFyL2xpc3NfaW5kZXBfdmFyX2RmX3dfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9tb3RfaW5kZXBfdmFyX2RmX3dfbmV3LlJEYXRhIikNCmxvYWQoIi4vZGF0YS9maW5hbF9kYXRhL2luZGVwX3Zhci9zb2Nvbl9pbmRlcF92YXJfZGZfd19uZXcuUkRhdGEiKQ0KDQpsaWJyYXJ5KHBseXIpIA0KbGlicmFyeShkcGx5cikNCnRvdGFsX2luZGVwX3Zhcl9yZXN1bHRzIDwtIHJiaW5kLmZpbGwoZWJfaW5kZXBfcHJlZHNfZGYsIGVzc19pbmRlcF9wcmVkc19kZiwgZXZzX2luZGVwX3ByZWRzX2RmLCBpb19pbmRlcF9wcmVkc19kZiwgaXNzcF9pbmRlcF9wcmVkc19kZiwgaXNzcF8yX2luZGVwX3ByZWRzX2RmLCBsaXNzX2luZGVwX3ByZWRzX2RmLCBtb3RfaW5kZXBfcHJlZHNfZGYsIHNvY29uX2luZGVwX3ByZWRzX2RmKSANCg0Kc2F2ZSh0b3RhbF9pbmRlcF92YXJfcmVzdWx0cywgZmlsZT0gIi4vZGF0YS9tZXRhX2FuYWx5c2lzL3RvdGFsX2luZGVwX3Zhcl9yZXN1bHRzX25ldy5SRGF0YSIgKQ0KYGBgDQoNCg==