As pre-registered, we sought to collect data to attain 642 analyzable responses in total (i.e., 321 participants who passed attention checks for each between-subjects condition).


On the first wave of data collection (N = 706), applying the pre-registered exclusion criteria led to inadequate samples (i.e., Ns < 321) for both between-subjects datasets (Ns = 303 for one condition, 285 for another condition, totaling 588). However, we did not resample to reach our pre-registered Ns because these analyzable Ns (of 303 and 285) still yielded more than 90% power for our focal inferential tests.


Data Cleaning

Before data were loaded into R (below), the following changes were made:

  1. Raw variable names were slightly adjusted to create more intuitive labels than what was originally specified in Qualtrics.

  2. Participants were removed if they did not finish the entire survey.

  3. Duplicate IP addresses were removed. There was only 1 instance of a duplicate IP address, leading to an N = 705.

  4. All other identifying information was removed (e.g., IP addresses, longitude/latitude, etc.).


Loading Data/Packages

Before running this chunk, please load “Stat_Cog_Laypeople_OSF.csv” into the R environment.


options(scipen = 99) # turns off scientific notation
# packages should be loaded in the following order to avoid function conflicts
library(psych) # for describing data
library(effsize) # for mean difference effect sizes
library(sjstats) # for eta-squared effect sizes
library(correlation) # for cleaner correlation test output
library(rmcorr) # for repeated-measures correlation tests
library(cocor) # for comparing dependent correlation coefficients
library(tidyverse) # for data manipulation and plotting
library(rstatix) # for wilcoxon test effect sizes

Data Manipulation

Data Separation/Recombining

Data were separated into two distinct data sets (for each between-subjects condition). Then, a between-subjects variable was created within each dataset. Last, both datasets were recombined.


# creates dataset w/ people who read about simple psych experiment
simple_stat <- Stat_Cog_Laypeople_OSF %>%
  filter(Simple_Attn_Ck != "NA")

# creates dataset w/ people who read about complex psych experiment
complex_stat <- Stat_Cog_Laypeople_OSF %>%
  filter(Complex_Attn_Ck != "NA")

# create between-subjects condition variable
simple_stat$BSs_cond <- rep("Simple", nrow(simple_stat))
complex_stat$BSs_cond <- rep("Complex", nrow(complex_stat))

# recombine between-subjects data
stat_lay_all <- rbind(simple_stat, complex_stat)

stat_lay_all$BSs_cond <- as.factor(stat_lay_all$BSs_cond)
stat_lay_all$BSs_cond <- ordered(stat_lay_all$BSs_cond, levels = c("Simple", "Complex"))

Cleaning Data

stat_lay_clean <- stat_lay_all %>%
  filter(Finished == 1) %>% # finished whole survey
  filter(Complex_Attn_Ck == 1 | Simple_Attn_Ck == 1) # passed attn/comp check

Get Demographics for Clean Data

# gender
stat_lay_clean %>% 
  group_by(Gender) %>% 
  dplyr::summarize(gender = n()) # 0 = female; 1 = male; 2 = non-binary; 3 = other

# ethnicity
stat_lay_clean %>% 
  group_by(Ethnic) %>% 
  dplyr::summarize(ethnicity = n()) # 0 = white; 2 = black; 2 = american indian / alaskan native; 3 = asian; 4 = native hawaiian / pacific islander; 5 = other

# age
mean(stat_lay_clean$Age)
[1] 38.69218
sd(stat_lay_clean$Age)
[1] 11.2912

Creating Analysis Variables

# Main DVs
# create intuitive var names that collapse across between-subj conditions

# e.g., Simple_Q_Prop_0_Response = Simple Design / Empirical Q Prop Estimate / Anchor started at 0

stat_lay_clean$Emp_Prop_Est  <- rowSums(stat_lay_clean[, c("Simple_Q_Prop_0_Response", 
                                                           "Simple_Q_Prop_50_Response",
                                                           "Simple_Q_Prop_100_Response",
                                                           "Complex_Q_Prop_0_Response",
                                                           "Complex_Q_Prop_50_Response",
                                                           "Complex_Q_Prop_100_Response")], na.rm = T)
stat_lay_clean$Theory_Prop_Est  <- rowSums(stat_lay_clean[, c("Simple_T_Prop_0_Response", 
                                                           "Simple_T_Prop_50_Response",
                                                           "Simple_T_Prop_100_Response",
                                                           "Complex_T_Prop_0_Response",
                                                           "Complex_T_Prop_50_Response",
                                                           "Complex_T_Prop_100_Response")], na.rm = T)

stat_lay_clean$Emp_TF_Count  <- rowSums(stat_lay_clean[, c("Simple_Q_TF_Response_1",
                                                       "Simple_Q_TF_Response_2",
                                                       "Simple_Q_TF_Response_3",
                                                       "Simple_Q_TF_Response_4",
                                                       "Simple_Q_TF_Response_5",
                                                       "Simple_Q_TF_Response_6",
                                                       "Complex_Q_TF_Response_1",
                                                       "Complex_Q_TF_Response_2",
                                                       "Complex_Q_TF_Response_3",
                                                       "Complex_Q_TF_Response_4",
                                                       "Complex_Q_TF_Response_5",
                                                       "Complex_Q_TF_Response_6")], na.rm = T)
stat_lay_clean$Theory_TF_Count  <- rowSums(stat_lay_clean[, c("Simple_T_TF_Response_1",
                                                       "Simple_T_TF_Response_2",
                                                       "Simple_T_TF_Response_3",
                                                       "Simple_T_TF_Response_4",
                                                       "Simple_T_TF_Response_5",
                                                       "Simple_T_TF_Response_6",
                                                       "Complex_T_TF_Response_1",
                                                       "Complex_T_TF_Response_2",
                                                       "Complex_T_TF_Response_3",
                                                       "Complex_T_TF_Response_4",
                                                       "Complex_T_TF_Response_5",
                                                       "Complex_T_TF_Response_6")], na.rm = T)


# Pre-registered Cut-off Scores
# i.e., whether prop estimates are at 51% or higher
stat_lay_clean <- stat_lay_clean %>%
  mutate(Emp_Prop_Cutoff = case_when(
    Emp_Prop_Est >= 51 ~ "Simple Majority or Greater",
    Emp_Prop_Est < 51 ~ "Less than Simple Majority")) %>%
  mutate(Theory_Prop_Cutoff = case_when(
    Theory_Prop_Est >= 51 ~ "Simple Majority or Greater",
    Theory_Prop_Est < 51 ~ "Less than Simple Majority"))

# select only relevant data
stat_lay_clean <- stat_lay_clean %>%
  select(ResponseId,
         BSs_cond,
         Emp_Prop_Est:Theory_Prop_Cutoff,
         Data:Data_Length)

Descriptive Stats

Proportion Estimates

Empirical Distribution

describeBy(stat_lay_clean$Emp_Prop_Est, list(stat_lay_clean$BSs_cond), mat = T)

Empirical Cut-Off

table(stat_lay_clean$BSs_cond, stat_lay_clean$Emp_Prop_Cutoff)
         
          Less than Simple Majority Simple Majority or Greater
  Simple                         59                        244
  Complex                        33                        252

Theoretical Distribution

describeBy(stat_lay_clean$Theory_Prop_Est, list(stat_lay_clean$BSs_cond), mat = T)

Theoretical Cut-Off

table(stat_lay_clean$BSs_cond, stat_lay_clean$Theory_Prop_Cutoff)
         
          Less than Simple Majority Simple Majority or Greater
  Simple                         21                        282
  Complex                        22                        263

T/F Counts

Empirical T/F Counts

table(stat_lay_clean$BSs_cond, stat_lay_clean$Emp_TF_Count) # number of times t/f was marked true by a participant (out of 6 t/f statements where all statements were technically false; see OSF Qualtrics file)
         
           0  1  2  3  4  5  6
  Simple  13 26 41 70 71 76  6
  Complex  4 19 35 62 67 80 18

Theoretical T/F Counts

table(stat_lay_clean$BSs_cond, stat_lay_clean$Theory_TF_Count) # number of times t/f was marked true by a participant (out of 6 t/f statements where all statements were technically false; see OSF Qualtrics file)
         
           0  1  2  3  4  5  6
  Simple   8  7 23 48 74 83 60
  Complex  3 13 14 49 55 88 63

Plotting Proportion Estimates

Empirical Estimates

print(emp_prop_plot <- ggplot(stat_lay_clean, aes(Emp_Prop_Est)) +
  geom_histogram(binwidth = 1) +
  coord_cartesian(ylim = c(0,50), xlim = c(0,100)) +
        facet_wrap(~BSs_cond, nrow = 2) +
        geom_vline(xintercept = 50, linetype = "dashed", color = "black") +
        theme(legend.position = "right") +
        theme_classic() +
        xlab("Empirical Proportion Estimates") +
        ylab("Participant Count") + 
        theme(axis.title.x = element_text(size = 14), 
              axis.title.y = element_text(size = 14),
              axis.text.x = element_text(color = "black", size = 12), 
              axis.text.y = element_text(color = "black", size = 12),
              legend.position = "right",
              legend.title = element_text(color = "black", size = 14),
              legend.text = element_text(color = "black", size = 12)))

Theoretical Estimates

print(theory_prop_plot <- ggplot(stat_lay_clean, aes(Theory_Prop_Est)) +
  geom_histogram(binwidth = 1) +
  coord_cartesian(ylim = c(0,50), xlim = c(0,100)) +
        facet_wrap(~BSs_cond, nrow = 2) +
        geom_vline(xintercept = 50, linetype = "dashed", color = "black") +
        theme(legend.position = "right") +
        theme_classic() +
        xlab("Theoretical Proportion Estimates") +
        ylab("Participant Count") + 
        theme(axis.title.x = element_text(size = 14), 
              axis.title.y = element_text(size = 14),
              axis.text.x = element_text(color = "black", size = 12), 
              axis.text.y = element_text(color = "black", size = 12),
              legend.position = "right",
              legend.title = element_text(color = "black", size = 14),
              legend.text = element_text(color = "black", size = 12)))

Binomial Tests

Simple

Empirical Proportion

# using estimates from descriptive stats section
binom.test(x = 244, n = 303, p = 0.5, alternative = "greater", conf.level = 0.90)

    Exact binomial test

data:  244 and 303
number of successes = 244, number of trials = 303, p-value < 0.00000000000000022
alternative hypothesis: true probability of success is greater than 0.5
90 percent confidence interval:
 0.7729972 1.0000000
sample estimates:
probability of success 
             0.8052805 

Theoretical Proportion

# using estimates from descriptive stats section
binom.test(x = 282, n = 303, p = 0.5, alternative = "greater", conf.level = .90)

    Exact binomial test

data:  282 and 303
number of successes = 282, number of trials = 303, p-value < 0.00000000000000022
alternative hypothesis: true probability of success is greater than 0.5
90 percent confidence interval:
 0.9080944 1.0000000
sample estimates:
probability of success 
             0.9306931 

Complex

Empirical Proportion

# using estimates from descriptive stats section
binom.test(x = 252, n = 285, p = 0.5, alternative = "greater", conf.level = 0.90)

    Exact binomial test

data:  252 and 285
number of successes = 252, number of trials = 285, p-value < 0.00000000000000022
alternative hypothesis: true probability of success is greater than 0.5
90 percent confidence interval:
 0.8561042 1.0000000
sample estimates:
probability of success 
             0.8842105 

Theoretical Proportion

# using estimates from descriptive stats section
binom.test(x = 263, n = 285, p = 0.5, alternative = "greater", conf.level = 0.90)

    Exact binomial test

data:  263 and 285
number of successes = 263, number of trials = 285, p-value < 0.00000000000000022
alternative hypothesis: true probability of success is greater than 0.5
90 percent confidence interval:
 0.8984556 1.0000000
sample estimates:
probability of success 
              0.922807 

Additional Analyses

Data Experience

Breakdown

stat_lay_clean <- stat_lay_clean %>%
  mutate(Data_Exp = case_when(
    Data == 1 ~ "No",
    Data == 2 ~ "Yes",
    TRUE ~ "Other"))

stat_lay_clean$Data_Exp <- as.factor(stat_lay_clean$Data_Exp)
stat_lay_clean$Data_Exp <- ordered(stat_lay_clean$Data_Exp, 
                                        levels = c("No",
                                                   "Yes"))

table(stat_lay_clean$BSs_cond, stat_lay_clean$Data_Exp)
         
           No Yes
  Simple  198 105
  Complex 183 102

Empirical Proportion Plot

print(emp_prop_plot_dataexp <- ggplot(stat_lay_clean, aes(Emp_Prop_Est,
                                                              fill = Data_Exp)) +
  geom_histogram(binwidth = 1) +
  coord_cartesian(ylim = c(0,50), xlim = c(0,100)) +
        facet_wrap(~BSs_cond, nrow = 2) +
        geom_vline(xintercept = 50, linetype = "dashed", color = "black") +
        scale_fill_grey() +
        theme(legend.position = "right") +
        theme_classic() +
        xlab("Empirical Proportion Estimates") +
        ylab("Participant Count") + 
        theme(axis.title.x = element_text(size = 14), 
              axis.title.y = element_text(size = 14),
              axis.text.x = element_text(color = "black", size = 12), 
              axis.text.y = element_text(color = "black", size = 12),
              legend.position = "right",
              legend.title = element_text(color = "black", size = 14),
              legend.text = element_text(color = "black", size = 12)))

Theoretical Proportion Plot

print(theory_prop_plot_dataexp <- ggplot(stat_lay_clean, aes(Theory_Prop_Est,
                                                              fill = Data_Exp)) +
  geom_histogram(binwidth = 1) +
  coord_cartesian(ylim = c(0,50), xlim = c(0,100)) +
        facet_wrap(~BSs_cond, nrow = 2) +
        geom_vline(xintercept = 50, linetype = "dashed", color = "black") +
       scale_fill_grey() +
        theme(legend.position = "right") +
        theme_classic() +
        xlab("Theoertical Proportion Estimates") +
        ylab("Participant Count") + 
        theme(axis.title.x = element_text(size = 14), 
              axis.title.y = element_text(size = 14),
              axis.text.x = element_text(color = "black", size = 12), 
              axis.text.y = element_text(color = "black", size = 12),
              legend.position = "right",
              legend.title = element_text(color = "black", size = 14),
              legend.text = element_text(color = "black", size = 12)))

LS0tDQp0aXRsZTogIlBlcnNvbi1MZXZlbCBTdGF0aXN0aWNhbCBDb2duaXRpb24gLSBMYXlwZW9wbGUiDQphdXRob3I6ICJSeWFuIE0uIE1jTWFudXMiDQpkYXRlOiAnYHIgZm9ybWF0KFN5cy50aW1lKCksICIlQiAlZCwgJVkiKWAnDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICB0aGVtZTogZGFya2x5DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDUNCiAgICB0b2NfZmxvYXQ6IHllcw0KLS0tDQoNCjxicj4NCg0KQXMgcHJlLXJlZ2lzdGVyZWQsIHdlIHNvdWdodCB0byBjb2xsZWN0IGRhdGEgdG8gYXR0YWluIDY0MiBhbmFseXphYmxlIHJlc3BvbnNlcyBpbiB0b3RhbCAoaS5lLiwgMzIxIHBhcnRpY2lwYW50cyB3aG8gcGFzc2VkIGF0dGVudGlvbiBjaGVja3MgZm9yIGVhY2ggYmV0d2Vlbi1zdWJqZWN0cyBjb25kaXRpb24pLiANCg0KPGJyPg0KDQpPbiB0aGUgZmlyc3Qgd2F2ZSBvZiBkYXRhIGNvbGxlY3Rpb24gKE4gPSA3MDYpLCBhcHBseWluZyB0aGUgcHJlLXJlZ2lzdGVyZWQgZXhjbHVzaW9uIGNyaXRlcmlhIGxlZCB0byBpbmFkZXF1YXRlIHNhbXBsZXMgKGkuZS4sIE5zIDwgMzIxKSBmb3IgYm90aCBiZXR3ZWVuLXN1YmplY3RzIGRhdGFzZXRzIChOcyA9IDMwMyBmb3Igb25lIGNvbmRpdGlvbiwgMjg1IGZvciBhbm90aGVyIGNvbmRpdGlvbiwgdG90YWxpbmcgNTg4KS4gSG93ZXZlciwgd2UgZGlkIG5vdCByZXNhbXBsZSB0byByZWFjaCBvdXIgcHJlLXJlZ2lzdGVyZWQgTnMgYmVjYXVzZSB0aGVzZSBhbmFseXphYmxlIE5zIChvZiAzMDMgYW5kIDI4NSkgc3RpbGwgeWllbGRlZCBtb3JlIHRoYW4gOTAlIHBvd2VyIGZvciBvdXIgZm9jYWwgaW5mZXJlbnRpYWwgdGVzdHMuDQoNCjxicj4NCg0KIyBEYXRhIENsZWFuaW5nDQoNCkJlZm9yZSBkYXRhIHdlcmUgbG9hZGVkIGludG8gUiAoYmVsb3cpLCB0aGUgZm9sbG93aW5nIGNoYW5nZXMgd2VyZSBtYWRlOg0KDQooMSkgUmF3IHZhcmlhYmxlIG5hbWVzIHdlcmUgc2xpZ2h0bHkgYWRqdXN0ZWQgdG8gY3JlYXRlIG1vcmUgaW50dWl0aXZlIGxhYmVscyB0aGFuIHdoYXQgd2FzIG9yaWdpbmFsbHkgc3BlY2lmaWVkIGluIFF1YWx0cmljcy4NCg0KKDIpIFBhcnRpY2lwYW50cyB3ZXJlIHJlbW92ZWQgaWYgdGhleSBkaWQgbm90IGZpbmlzaCB0aGUgZW50aXJlIHN1cnZleS4NCg0KKDMpIER1cGxpY2F0ZSBJUCBhZGRyZXNzZXMgd2VyZSByZW1vdmVkLiBUaGVyZSB3YXMgb25seSAxIGluc3RhbmNlIG9mIGEgZHVwbGljYXRlIElQIGFkZHJlc3MsIGxlYWRpbmcgdG8gYW4gTiA9IDcwNS4NCg0KKDQpIEFsbCBvdGhlciBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiB3YXMgcmVtb3ZlZCAoZS5nLiwgSVAgYWRkcmVzc2VzLCBsb25naXR1ZGUvbGF0aXR1ZGUsIGV0Yy4pLg0KDQo8YnI+DQoNCiMjIExvYWRpbmcgRGF0YS9QYWNrYWdlcw0KDQpCZWZvcmUgcnVubmluZyB0aGlzIGNodW5rLCBwbGVhc2UgbG9hZCAiU3RhdF9Db2dfTGF5cGVvcGxlX09TRi5jc3YiIGludG8gdGhlIFIgZW52aXJvbm1lbnQuDQoNCjxicj4NCmBgYHtyfQ0Kb3B0aW9ucyhzY2lwZW4gPSA5OSkgIyB0dXJucyBvZmYgc2NpZW50aWZpYyBub3RhdGlvbg0KIyBwYWNrYWdlcyBzaG91bGQgYmUgbG9hZGVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgdG8gYXZvaWQgZnVuY3Rpb24gY29uZmxpY3RzDQpsaWJyYXJ5KHBzeWNoKSAjIGZvciBkZXNjcmliaW5nIGRhdGENCmxpYnJhcnkoZWZmc2l6ZSkgIyBmb3IgbWVhbiBkaWZmZXJlbmNlIGVmZmVjdCBzaXplcw0KbGlicmFyeShzanN0YXRzKSAjIGZvciBldGEtc3F1YXJlZCBlZmZlY3Qgc2l6ZXMNCmxpYnJhcnkoY29ycmVsYXRpb24pICMgZm9yIGNsZWFuZXIgY29ycmVsYXRpb24gdGVzdCBvdXRwdXQNCmxpYnJhcnkocm1jb3JyKSAjIGZvciByZXBlYXRlZC1tZWFzdXJlcyBjb3JyZWxhdGlvbiB0ZXN0cw0KbGlicmFyeShjb2NvcikgIyBmb3IgY29tcGFyaW5nIGRlcGVuZGVudCBjb3JyZWxhdGlvbiBjb2VmZmljaWVudHMNCmxpYnJhcnkodGlkeXZlcnNlKSAjIGZvciBkYXRhIG1hbmlwdWxhdGlvbiBhbmQgcGxvdHRpbmcNCmxpYnJhcnkocnN0YXRpeCkgIyBmb3Igd2lsY294b24gdGVzdCBlZmZlY3Qgc2l6ZXMNCmBgYA0KDQojIERhdGEgTWFuaXB1bGF0aW9uDQoNCiMjIERhdGEgU2VwYXJhdGlvbi9SZWNvbWJpbmluZw0KDQpEYXRhIHdlcmUgc2VwYXJhdGVkIGludG8gdHdvIGRpc3RpbmN0IGRhdGEgc2V0cyAoZm9yIGVhY2ggYmV0d2Vlbi1zdWJqZWN0cyBjb25kaXRpb24pLiBUaGVuLCBhIGJldHdlZW4tc3ViamVjdHMgdmFyaWFibGUgd2FzIGNyZWF0ZWQgd2l0aGluIGVhY2ggZGF0YXNldC4gTGFzdCwgYm90aCBkYXRhc2V0cyB3ZXJlIHJlY29tYmluZWQuDQoNCjxicj4NCmBgYHtyfQ0KIyBjcmVhdGVzIGRhdGFzZXQgdy8gcGVvcGxlIHdobyByZWFkIGFib3V0IHNpbXBsZSBwc3ljaCBleHBlcmltZW50DQpzaW1wbGVfc3RhdCA8LSBTdGF0X0NvZ19MYXlwZW9wbGVfT1NGICU+JQ0KICBmaWx0ZXIoU2ltcGxlX0F0dG5fQ2sgIT0gIk5BIikNCg0KIyBjcmVhdGVzIGRhdGFzZXQgdy8gcGVvcGxlIHdobyByZWFkIGFib3V0IGNvbXBsZXggcHN5Y2ggZXhwZXJpbWVudA0KY29tcGxleF9zdGF0IDwtIFN0YXRfQ29nX0xheXBlb3BsZV9PU0YgJT4lDQogIGZpbHRlcihDb21wbGV4X0F0dG5fQ2sgIT0gIk5BIikNCg0KIyBjcmVhdGUgYmV0d2Vlbi1zdWJqZWN0cyBjb25kaXRpb24gdmFyaWFibGUNCnNpbXBsZV9zdGF0JEJTc19jb25kIDwtIHJlcCgiU2ltcGxlIiwgbnJvdyhzaW1wbGVfc3RhdCkpDQpjb21wbGV4X3N0YXQkQlNzX2NvbmQgPC0gcmVwKCJDb21wbGV4IiwgbnJvdyhjb21wbGV4X3N0YXQpKQ0KDQojIHJlY29tYmluZSBiZXR3ZWVuLXN1YmplY3RzIGRhdGENCnN0YXRfbGF5X2FsbCA8LSByYmluZChzaW1wbGVfc3RhdCwgY29tcGxleF9zdGF0KQ0KDQpzdGF0X2xheV9hbGwkQlNzX2NvbmQgPC0gYXMuZmFjdG9yKHN0YXRfbGF5X2FsbCRCU3NfY29uZCkNCnN0YXRfbGF5X2FsbCRCU3NfY29uZCA8LSBvcmRlcmVkKHN0YXRfbGF5X2FsbCRCU3NfY29uZCwgbGV2ZWxzID0gYygiU2ltcGxlIiwgIkNvbXBsZXgiKSkNCmBgYA0KDQojIyBDbGVhbmluZyBEYXRhDQpgYGB7cn0NCnN0YXRfbGF5X2NsZWFuIDwtIHN0YXRfbGF5X2FsbCAlPiUNCiAgZmlsdGVyKEZpbmlzaGVkID09IDEpICU+JSAjIGZpbmlzaGVkIHdob2xlIHN1cnZleQ0KICBmaWx0ZXIoQ29tcGxleF9BdHRuX0NrID09IDEgfCBTaW1wbGVfQXR0bl9DayA9PSAxKSAjIHBhc3NlZCBhdHRuL2NvbXAgY2hlY2sNCmBgYA0KDQojIyBHZXQgRGVtb2dyYXBoaWNzIGZvciBDbGVhbiBEYXRhDQpgYGB7cn0NCiMgZ2VuZGVyDQpzdGF0X2xheV9jbGVhbiAlPiUgDQogIGdyb3VwX2J5KEdlbmRlcikgJT4lIA0KICBkcGx5cjo6c3VtbWFyaXplKGdlbmRlciA9IG4oKSkgIyAwID0gZmVtYWxlOyAxID0gbWFsZTsgMiA9IG5vbi1iaW5hcnk7IDMgPSBvdGhlcg0KDQojIGV0aG5pY2l0eQ0Kc3RhdF9sYXlfY2xlYW4gJT4lIA0KICBncm91cF9ieShFdGhuaWMpICU+JSANCiAgZHBseXI6OnN1bW1hcml6ZShldGhuaWNpdHkgPSBuKCkpICMgMCA9IHdoaXRlOyAyID0gYmxhY2s7IDIgPSBhbWVyaWNhbiBpbmRpYW4gLyBhbGFza2FuIG5hdGl2ZTsgMyA9IGFzaWFuOyA0ID0gbmF0aXZlIGhhd2FpaWFuIC8gcGFjaWZpYyBpc2xhbmRlcjsgNSA9IG90aGVyDQoNCiMgYWdlDQptZWFuKHN0YXRfbGF5X2NsZWFuJEFnZSkNCnNkKHN0YXRfbGF5X2NsZWFuJEFnZSkNCmBgYA0KDQojIyBDcmVhdGluZyBBbmFseXNpcyBWYXJpYWJsZXMNCmBgYHtyfQ0KIyBNYWluIERWcw0KIyBjcmVhdGUgaW50dWl0aXZlIHZhciBuYW1lcyB0aGF0IGNvbGxhcHNlIGFjcm9zcyBiZXR3ZWVuLXN1YmogY29uZGl0aW9ucw0KDQojIGUuZy4sIFNpbXBsZV9RX1Byb3BfMF9SZXNwb25zZSA9IFNpbXBsZSBEZXNpZ24gLyBFbXBpcmljYWwgUSBQcm9wIEVzdGltYXRlIC8gQW5jaG9yIHN0YXJ0ZWQgYXQgMA0KDQpzdGF0X2xheV9jbGVhbiRFbXBfUHJvcF9Fc3QgIDwtIHJvd1N1bXMoc3RhdF9sYXlfY2xlYW5bLCBjKCJTaW1wbGVfUV9Qcm9wXzBfUmVzcG9uc2UiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNpbXBsZV9RX1Byb3BfNTBfUmVzcG9uc2UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2ltcGxlX1FfUHJvcF8xMDBfUmVzcG9uc2UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGxleF9RX1Byb3BfMF9SZXNwb25zZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wbGV4X1FfUHJvcF81MF9SZXNwb25zZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wbGV4X1FfUHJvcF8xMDBfUmVzcG9uc2UiKV0sIG5hLnJtID0gVCkNCnN0YXRfbGF5X2NsZWFuJFRoZW9yeV9Qcm9wX0VzdCAgPC0gcm93U3VtcyhzdGF0X2xheV9jbGVhblssIGMoIlNpbXBsZV9UX1Byb3BfMF9SZXNwb25zZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2ltcGxlX1RfUHJvcF81MF9SZXNwb25zZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaW1wbGVfVF9Qcm9wXzEwMF9SZXNwb25zZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wbGV4X1RfUHJvcF8wX1Jlc3BvbnNlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBsZXhfVF9Qcm9wXzUwX1Jlc3BvbnNlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBsZXhfVF9Qcm9wXzEwMF9SZXNwb25zZSIpXSwgbmEucm0gPSBUKQ0KDQpzdGF0X2xheV9jbGVhbiRFbXBfVEZfQ291bnQgIDwtIHJvd1N1bXMoc3RhdF9sYXlfY2xlYW5bLCBjKCJTaW1wbGVfUV9URl9SZXNwb25zZV8xIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2ltcGxlX1FfVEZfUmVzcG9uc2VfMiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNpbXBsZV9RX1RGX1Jlc3BvbnNlXzMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaW1wbGVfUV9URl9SZXNwb25zZV80IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2ltcGxlX1FfVEZfUmVzcG9uc2VfNSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNpbXBsZV9RX1RGX1Jlc3BvbnNlXzYiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wbGV4X1FfVEZfUmVzcG9uc2VfMSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBsZXhfUV9URl9SZXNwb25zZV8yIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGxleF9RX1RGX1Jlc3BvbnNlXzMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wbGV4X1FfVEZfUmVzcG9uc2VfNCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBsZXhfUV9URl9SZXNwb25zZV81IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGxleF9RX1RGX1Jlc3BvbnNlXzYiKV0sIG5hLnJtID0gVCkNCnN0YXRfbGF5X2NsZWFuJFRoZW9yeV9URl9Db3VudCAgPC0gcm93U3VtcyhzdGF0X2xheV9jbGVhblssIGMoIlNpbXBsZV9UX1RGX1Jlc3BvbnNlXzEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaW1wbGVfVF9URl9SZXNwb25zZV8yIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2ltcGxlX1RfVEZfUmVzcG9uc2VfMyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNpbXBsZV9UX1RGX1Jlc3BvbnNlXzQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaW1wbGVfVF9URl9SZXNwb25zZV81IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2ltcGxlX1RfVEZfUmVzcG9uc2VfNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBsZXhfVF9URl9SZXNwb25zZV8xIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGxleF9UX1RGX1Jlc3BvbnNlXzIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wbGV4X1RfVEZfUmVzcG9uc2VfMyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBsZXhfVF9URl9SZXNwb25zZV80IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGxleF9UX1RGX1Jlc3BvbnNlXzUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wbGV4X1RfVEZfUmVzcG9uc2VfNiIpXSwgbmEucm0gPSBUKQ0KDQoNCiMgUHJlLXJlZ2lzdGVyZWQgQ3V0LW9mZiBTY29yZXMNCiMgaS5lLiwgd2hldGhlciBwcm9wIGVzdGltYXRlcyBhcmUgYXQgNTElIG9yIGhpZ2hlcg0Kc3RhdF9sYXlfY2xlYW4gPC0gc3RhdF9sYXlfY2xlYW4gJT4lDQogIG11dGF0ZShFbXBfUHJvcF9DdXRvZmYgPSBjYXNlX3doZW4oDQogICAgRW1wX1Byb3BfRXN0ID49IDUxIH4gIlNpbXBsZSBNYWpvcml0eSBvciBHcmVhdGVyIiwNCiAgICBFbXBfUHJvcF9Fc3QgPCA1MSB+ICJMZXNzIHRoYW4gU2ltcGxlIE1ham9yaXR5IikpICU+JQ0KICBtdXRhdGUoVGhlb3J5X1Byb3BfQ3V0b2ZmID0gY2FzZV93aGVuKA0KICAgIFRoZW9yeV9Qcm9wX0VzdCA+PSA1MSB+ICJTaW1wbGUgTWFqb3JpdHkgb3IgR3JlYXRlciIsDQogICAgVGhlb3J5X1Byb3BfRXN0IDwgNTEgfiAiTGVzcyB0aGFuIFNpbXBsZSBNYWpvcml0eSIpKQ0KDQojIHNlbGVjdCBvbmx5IHJlbGV2YW50IGRhdGENCnN0YXRfbGF5X2NsZWFuIDwtIHN0YXRfbGF5X2NsZWFuICU+JQ0KICBzZWxlY3QoUmVzcG9uc2VJZCwNCiAgICAgICAgIEJTc19jb25kLA0KICAgICAgICAgRW1wX1Byb3BfRXN0OlRoZW9yeV9Qcm9wX0N1dG9mZiwNCiAgICAgICAgIERhdGE6RGF0YV9MZW5ndGgpDQpgYGANCg0KDQojIERlc2NyaXB0aXZlIFN0YXRzIHsudGFic2V0fQ0KDQojIyBQcm9wb3J0aW9uIEVzdGltYXRlcyB7LnRhYnNldH0NCg0KIyMjIEVtcGlyaWNhbCBEaXN0cmlidXRpb24NCmBgYHtyfQ0KZGVzY3JpYmVCeShzdGF0X2xheV9jbGVhbiRFbXBfUHJvcF9Fc3QsIGxpc3Qoc3RhdF9sYXlfY2xlYW4kQlNzX2NvbmQpLCBtYXQgPSBUKQ0KYGBgDQojIyMgRW1waXJpY2FsIEN1dC1PZmYNCmBgYHtyfQ0KdGFibGUoc3RhdF9sYXlfY2xlYW4kQlNzX2NvbmQsIHN0YXRfbGF5X2NsZWFuJEVtcF9Qcm9wX0N1dG9mZikNCmBgYA0KDQojIyMgVGhlb3JldGljYWwgRGlzdHJpYnV0aW9uDQpgYGB7cn0NCmRlc2NyaWJlQnkoc3RhdF9sYXlfY2xlYW4kVGhlb3J5X1Byb3BfRXN0LCBsaXN0KHN0YXRfbGF5X2NsZWFuJEJTc19jb25kKSwgbWF0ID0gVCkNCmBgYA0KIyMjIFRoZW9yZXRpY2FsIEN1dC1PZmYNCmBgYHtyfQ0KdGFibGUoc3RhdF9sYXlfY2xlYW4kQlNzX2NvbmQsIHN0YXRfbGF5X2NsZWFuJFRoZW9yeV9Qcm9wX0N1dG9mZikNCmBgYA0KDQojIyBUL0YgQ291bnRzIHsudGFic2V0fQ0KDQojIyMgRW1waXJpY2FsIFQvRiBDb3VudHMNCmBgYHtyfQ0KdGFibGUoc3RhdF9sYXlfY2xlYW4kQlNzX2NvbmQsIHN0YXRfbGF5X2NsZWFuJEVtcF9URl9Db3VudCkgIyBudW1iZXIgb2YgdGltZXMgdC9mIHdhcyBtYXJrZWQgdHJ1ZSBieSBhIHBhcnRpY2lwYW50IChvdXQgb2YgNiB0L2Ygc3RhdGVtZW50cyB3aGVyZSBhbGwgc3RhdGVtZW50cyB3ZXJlIHRlY2huaWNhbGx5IGZhbHNlOyBzZWUgT1NGIFF1YWx0cmljcyBmaWxlKQ0KYGBgDQojIyMgVGhlb3JldGljYWwgVC9GIENvdW50cw0KYGBge3J9DQp0YWJsZShzdGF0X2xheV9jbGVhbiRCU3NfY29uZCwgc3RhdF9sYXlfY2xlYW4kVGhlb3J5X1RGX0NvdW50KSAjIG51bWJlciBvZiB0aW1lcyB0L2Ygd2FzIG1hcmtlZCB0cnVlIGJ5IGEgcGFydGljaXBhbnQgKG91dCBvZiA2IHQvZiBzdGF0ZW1lbnRzIHdoZXJlIGFsbCBzdGF0ZW1lbnRzIHdlcmUgdGVjaG5pY2FsbHkgZmFsc2U7IHNlZSBPU0YgUXVhbHRyaWNzIGZpbGUpDQpgYGANCg0KDQojIFBsb3R0aW5nIFByb3BvcnRpb24gRXN0aW1hdGVzIHsudGFic2V0fQ0KDQojIyBFbXBpcmljYWwgRXN0aW1hdGVzDQpgYGB7ciwgZmlnLndpZHRoID0gMTQsIGZpZy5oZWlnaHQgPSA5LCBvdXQud2lkdGggPSAiNzUlIiwgb3V0LmhlaWdodCA9ICI3NSUifQ0KcHJpbnQoZW1wX3Byb3BfcGxvdCA8LSBnZ3Bsb3Qoc3RhdF9sYXlfY2xlYW4sIGFlcyhFbXBfUHJvcF9Fc3QpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMSkgKw0KICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCw1MCksIHhsaW0gPSBjKDAsMTAwKSkgKw0KICAgICAgICBmYWNldF93cmFwKH5CU3NfY29uZCwgbnJvdyA9IDIpICsNCiAgICAgICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gNTAsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gImJsYWNrIikgKw0KICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKSArDQogICAgICAgIHRoZW1lX2NsYXNzaWMoKSArDQogICAgICAgIHhsYWIoIkVtcGlyaWNhbCBQcm9wb3J0aW9uIEVzdGltYXRlcyIpICsNCiAgICAgICAgeWxhYigiUGFydGljaXBhbnQgQ291bnQiKSArIA0KICAgICAgICB0aGVtZShheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwgDQogICAgICAgICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLA0KICAgICAgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxMiksIA0KICAgICAgICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxMiksDQogICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIsDQogICAgICAgICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxNCksDQogICAgICAgICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEyKSkpDQoNCmBgYA0KIyMgVGhlb3JldGljYWwgRXN0aW1hdGVzDQpgYGB7ciwgZmlnLndpZHRoID0gMTQsIGZpZy5oZWlnaHQgPSA5LCBvdXQud2lkdGggPSAiNzUlIiwgb3V0LmhlaWdodCA9ICI3NSUifQ0KcHJpbnQodGhlb3J5X3Byb3BfcGxvdCA8LSBnZ3Bsb3Qoc3RhdF9sYXlfY2xlYW4sIGFlcyhUaGVvcnlfUHJvcF9Fc3QpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMSkgKw0KICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCw1MCksIHhsaW0gPSBjKDAsMTAwKSkgKw0KICAgICAgICBmYWNldF93cmFwKH5CU3NfY29uZCwgbnJvdyA9IDIpICsNCiAgICAgICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gNTAsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gImJsYWNrIikgKw0KICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKSArDQogICAgICAgIHRoZW1lX2NsYXNzaWMoKSArDQogICAgICAgIHhsYWIoIlRoZW9yZXRpY2FsIFByb3BvcnRpb24gRXN0aW1hdGVzIikgKw0KICAgICAgICB5bGFiKCJQYXJ0aWNpcGFudCBDb3VudCIpICsgDQogICAgICAgIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLCANCiAgICAgICAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCksDQogICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEyKSwgDQogICAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEyKSwNCiAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IiwNCiAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0KSwNCiAgICAgICAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTIpKSkNCg0KYGBgDQoNCiMgQmlub21pYWwgVGVzdHMgey50YWJzZXR9DQoNCiMjIFNpbXBsZSB7LnRhYnNldH0NCg0KIyMjIEVtcGlyaWNhbCBQcm9wb3J0aW9uDQpgYGB7cn0NCiMgdXNpbmcgZXN0aW1hdGVzIGZyb20gZGVzY3JpcHRpdmUgc3RhdHMgc2VjdGlvbg0KYmlub20udGVzdCh4ID0gMjQ0LCBuID0gMzAzLCBwID0gMC41LCBhbHRlcm5hdGl2ZSA9ICJncmVhdGVyIiwgY29uZi5sZXZlbCA9IDAuOTApDQpgYGANCiMjIyBUaGVvcmV0aWNhbCBQcm9wb3J0aW9uDQpgYGB7cn0NCiMgdXNpbmcgZXN0aW1hdGVzIGZyb20gZGVzY3JpcHRpdmUgc3RhdHMgc2VjdGlvbg0KYmlub20udGVzdCh4ID0gMjgyLCBuID0gMzAzLCBwID0gMC41LCBhbHRlcm5hdGl2ZSA9ICJncmVhdGVyIiwgY29uZi5sZXZlbCA9IDAuOTApDQpgYGANCg0KIyMgQ29tcGxleCB7LnRhYnNldH0NCg0KIyMjIEVtcGlyaWNhbCBQcm9wb3J0aW9uDQpgYGB7cn0NCiMgdXNpbmcgZXN0aW1hdGVzIGZyb20gZGVzY3JpcHRpdmUgc3RhdHMgc2VjdGlvbg0KYmlub20udGVzdCh4ID0gMjUyLCBuID0gMjg1LCBwID0gMC41LCBhbHRlcm5hdGl2ZSA9ICJncmVhdGVyIiwgY29uZi5sZXZlbCA9IDAuOTApDQpgYGANCiMjIyBUaGVvcmV0aWNhbCBQcm9wb3J0aW9uDQpgYGB7cn0NCiMgdXNpbmcgZXN0aW1hdGVzIGZyb20gZGVzY3JpcHRpdmUgc3RhdHMgc2VjdGlvbg0KYmlub20udGVzdCh4ID0gMjYzLCBuID0gMjg1LCBwID0gMC41LCBhbHRlcm5hdGl2ZSA9ICJncmVhdGVyIiwgY29uZi5sZXZlbCA9IDAuOTApDQpgYGANCg0KIyBBZGRpdGlvbmFsIEFuYWx5c2VzDQoNCiMjIERhdGEgRXhwZXJpZW5jZSB7LnRhYnNldH0NCg0KIyMjIEJyZWFrZG93bg0KYGBge3J9DQpzdGF0X2xheV9jbGVhbiA8LSBzdGF0X2xheV9jbGVhbiAlPiUNCiAgbXV0YXRlKERhdGFfRXhwID0gY2FzZV93aGVuKA0KICAgIERhdGEgPT0gMSB+ICJObyIsDQogICAgRGF0YSA9PSAyIH4gIlllcyIsDQogICAgVFJVRSB+ICJPdGhlciIpKQ0KDQpzdGF0X2xheV9jbGVhbiREYXRhX0V4cCA8LSBhcy5mYWN0b3Ioc3RhdF9sYXlfY2xlYW4kRGF0YV9FeHApDQpzdGF0X2xheV9jbGVhbiREYXRhX0V4cCA8LSBvcmRlcmVkKHN0YXRfbGF5X2NsZWFuJERhdGFfRXhwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJObyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWVzIikpDQoNCnRhYmxlKHN0YXRfbGF5X2NsZWFuJEJTc19jb25kLCBzdGF0X2xheV9jbGVhbiREYXRhX0V4cCkNCmBgYA0KIyMjIEVtcGlyaWNhbCBQcm9wb3J0aW9uIFBsb3QNCmBgYHtyLCBmaWcud2lkdGggPSAxNCwgZmlnLmhlaWdodCA9IDksIG91dC53aWR0aCA9ICI3NSUiLCBvdXQuaGVpZ2h0ID0gIjc1JSJ9DQpwcmludChlbXBfcHJvcF9wbG90X2RhdGFleHAgPC0gZ2dwbG90KHN0YXRfbGF5X2NsZWFuLCBhZXMoRW1wX1Byb3BfRXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsID0gRGF0YV9FeHApKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMSkgKw0KICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCw1MCksIHhsaW0gPSBjKDAsMTAwKSkgKw0KICAgICAgICBmYWNldF93cmFwKH5CU3NfY29uZCwgbnJvdyA9IDIpICsNCiAgICAgICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gNTAsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gImJsYWNrIikgKw0KICAgICAgICBzY2FsZV9maWxsX2dyZXkoKSArDQogICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpICsNCiAgICAgICAgdGhlbWVfY2xhc3NpYygpICsNCiAgICAgICAgeGxhYigiRW1waXJpY2FsIFByb3BvcnRpb24gRXN0aW1hdGVzIikgKw0KICAgICAgICB5bGFiKCJQYXJ0aWNpcGFudCBDb3VudCIpICsgDQogICAgICAgIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLCANCiAgICAgICAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCksDQogICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEyKSwgDQogICAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEyKSwNCiAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IiwNCiAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0KSwNCiAgICAgICAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTIpKSkNCmBgYA0KIyMjIFRoZW9yZXRpY2FsIFByb3BvcnRpb24gUGxvdA0KYGBge3IsIGZpZy53aWR0aCA9IDE0LCBmaWcuaGVpZ2h0ID0gOSwgb3V0LndpZHRoID0gIjc1JSIsIG91dC5oZWlnaHQgPSAiNzUlIn0NCnByaW50KHRoZW9yeV9wcm9wX3Bsb3RfZGF0YWV4cCA8LSBnZ3Bsb3Qoc3RhdF9sYXlfY2xlYW4sIGFlcyhUaGVvcnlfUHJvcF9Fc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBEYXRhX0V4cCkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxKSArDQogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLDUwKSwgeGxpbSA9IGMoMCwxMDApKSArDQogICAgICAgIGZhY2V0X3dyYXAofkJTc19jb25kLCBucm93ID0gMikgKw0KICAgICAgICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSA1MCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAiYmxhY2siKSArDQogICAgICAgc2NhbGVfZmlsbF9ncmV5KCkgKw0KICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKSArDQogICAgICAgIHRoZW1lX2NsYXNzaWMoKSArDQogICAgICAgIHhsYWIoIlRoZW9lcnRpY2FsIFByb3BvcnRpb24gRXN0aW1hdGVzIikgKw0KICAgICAgICB5bGFiKCJQYXJ0aWNpcGFudCBDb3VudCIpICsgDQogICAgICAgIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLCANCiAgICAgICAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCksDQogICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEyKSwgDQogICAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEyKSwNCiAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IiwNCiAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE0KSwNCiAgICAgICAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTIpKSkNCmBgYA0K