Analysis plan
For all studies we conduct exploratory factor analyses using Pearson correlations to find minimum residual solutions.
For each study, we first examine maximal unrotated and rotated solutions. To determine the maximum number of factors to extract, we use the following rule of thumb: With \(p\) observations per participant, we can extract a maximum of \(k\) factors, where \((p-k)*2 > p+k\), i.e., \(k < p/3\). Thus, with 40 mental capacity items, we can extract a maximum of 13 factors.
To determine how many factors to retain, we use the following preset retention criteria, considering the unrotated maximal solution (unless otherwise noted):
- Each factor must have an eigenvalue >1.0.
- Each factor must individually account for >5% of the total variance in the maximal model.
- After rotation, each factor must be the dominant factor (i.e., the factor with the highest factor loading) for ≥1 mental capacity item.
We then examine and interpret varimax-rotated solutions, extracting only the number of factors that meet these criteria.
Note: For Studies 1-2, we initially planned to conduct dimension reduction analyses for each condition (beetle vs. robot) separately. However, we now consider this analysis plan to have been fundamentally flawed: Each of these separate analyses is only capable of surfacing factors that highlight substantial disagreement among participants within that condition thus failing to capture key differences in attributions of mental capacities to beetles vs. robots, with no formal means of synthesizing results across conditions. Nonetheless, the results of these analyses are generally consistent with the findings reported here: The most prominent and reliable finding within each condition is that participants distinguish between emotional and perceptual varieties of experience. See https://osf.io/zd3mu for the preregistered analyses, including analysis scripts.
Study 1
Design: 2 conditions (beetle, robot), between-subjects Date conducted: 2015-12-15
Demographics
NAs introduced by coercion
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector
back to TOC
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d1_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.85 -0.08 -0.12 0.07 -0.21 0.09 -0.10 0.09 -0.03 0.00 0.01
depressed 0.80 0.04 -0.32 0.16 -0.13 -0.11 -0.06 -0.02 0.01 -0.04 -0.09
fear 0.76 -0.38 0.20 0.02 0.03 -0.01 0.10 0.02 -0.07 -0.09 0.11
angry 0.80 -0.13 -0.07 0.11 -0.11 -0.07 -0.02 0.03 0.02 -0.05 0.08
calm 0.77 -0.16 0.11 -0.02 -0.10 0.13 0.10 -0.07 -0.01 -0.04 -0.03
sounds 0.17 0.39 0.48 0.32 -0.05 0.23 -0.04 0.01 0.10 -0.05 0.05
seeing 0.35 0.20 0.60 0.17 0.14 -0.09 -0.08 0.03 -0.05 0.03 -0.02
temperature 0.27 0.33 0.59 0.19 0.08 0.03 0.03 0.22 0.11 -0.03 -0.02
odors 0.41 0.03 0.50 0.23 0.13 0.05 -0.09 -0.10 -0.02 -0.02 -0.20
depth 0.31 0.41 0.38 0.07 0.01 -0.01 -0.04 0.01 0.07 0.11 0.12
computations -0.25 0.83 -0.14 0.05 -0.15 -0.01 0.06 0.06 0.05 -0.01 0.07
thoughts 0.78 0.03 -0.02 -0.17 -0.02 0.04 -0.15 0.00 -0.03 0.08 0.00
reasoning 0.44 0.61 0.02 -0.17 0.02 -0.02 -0.10 0.04 -0.10 0.04 -0.04
remembering 0.18 0.69 0.28 -0.04 -0.14 -0.01 0.12 0.03 -0.07 -0.07 -0.04
beliefs 0.63 0.28 -0.37 0.00 0.21 0.02 0.01 0.03 0.03 0.04 -0.04
hungry 0.60 -0.62 0.33 0.03 0.17 -0.01 -0.02 0.00 -0.02 0.00 -0.03
tired 0.74 -0.37 0.25 0.00 0.01 -0.06 0.05 -0.03 0.08 -0.04 0.08
pain 0.69 -0.53 0.32 0.02 0.13 -0.02 -0.02 0.01 -0.07 0.02 0.08
nauseated 0.81 -0.19 0.01 0.15 -0.21 -0.03 0.08 -0.19 0.01 0.07 -0.05
safe 0.76 -0.23 0.14 -0.03 -0.07 0.19 0.26 0.06 -0.16 -0.02 -0.01
love 0.82 0.07 -0.32 0.09 -0.05 0.01 -0.06 0.12 -0.01 0.01 -0.01
recognizing 0.20 0.78 0.15 0.05 -0.10 -0.02 0.02 -0.15 -0.08 0.03 0.04
communicating 0.29 0.55 0.28 0.00 0.03 -0.05 0.09 -0.12 -0.16 0.11 0.13
guilt 0.73 0.11 -0.39 0.13 0.08 -0.01 0.00 -0.06 0.04 -0.01 -0.09
disrespected 0.72 0.13 -0.37 0.20 0.08 -0.17 0.18 -0.08 0.06 -0.12 -0.01
free_will 0.75 -0.26 0.11 -0.12 -0.05 0.00 -0.04 0.09 -0.06 -0.07 -0.12
choices 0.46 0.35 0.37 -0.28 0.00 -0.13 0.06 0.10 -0.12 -0.04 -0.16
self_restraint 0.63 0.26 -0.08 -0.16 0.07 0.16 0.02 -0.23 0.07 -0.12 -0.07
intentions 0.68 -0.03 0.16 -0.29 -0.03 0.01 0.11 0.07 0.29 -0.03 0.03
goal 0.35 0.44 0.34 -0.15 -0.04 -0.27 -0.02 -0.03 0.14 -0.01 -0.07
conscious 0.76 -0.23 0.13 -0.06 0.02 0.07 -0.05 -0.09 0.04 0.10 0.01
self_aware 0.74 -0.01 0.03 -0.11 0.01 0.01 -0.11 -0.08 0.05 0.05 0.05
desires 0.78 -0.22 0.09 -0.17 -0.02 -0.08 0.01 -0.02 0.02 0.08 0.05
embarrassed 0.71 0.16 -0.49 0.15 0.17 -0.10 0.10 0.13 -0.04 0.05 0.01
emo_recog 0.61 0.41 -0.25 -0.05 0.21 0.05 -0.07 -0.04 0.01 0.10 0.05
joy 0.86 -0.03 -0.17 0.02 -0.23 0.07 -0.16 0.08 0.00 0.09 -0.05
morality 0.48 0.47 -0.22 -0.15 0.14 0.28 0.09 0.07 0.04 0.04 -0.01
personality 0.70 0.31 -0.15 -0.07 0.06 -0.01 -0.21 -0.01 -0.09 -0.33 0.17
pleasure 0.82 -0.25 0.10 -0.03 -0.07 -0.11 0.04 0.04 0.01 0.07 0.10
pride 0.79 0.14 -0.39 0.11 0.04 -0.05 0.05 0.05 -0.03 0.07 -0.02
MR12 MR13 h2 u2 com
happy 0.06 -0.15 0.84 0.16 1.4
depressed -0.05 -0.03 0.81 0.19 1.6
fear 0.02 0.06 0.80 0.20 1.8
angry 0.02 0.08 0.71 0.29 1.2
calm 0.01 0.06 0.68 0.32 1.3
sounds 0.04 0.10 0.60 0.40 3.9
seeing 0.02 -0.04 0.59 0.41 2.3
temperature -0.06 0.04 0.64 0.36 2.9
odors 0.06 0.02 0.55 0.45 3.2
depth -0.08 -0.15 0.48 0.52 3.8
computations 0.01 0.04 0.80 0.20 1.4
thoughts 0.03 0.11 0.69 0.31 1.2
reasoning -0.11 0.04 0.63 0.37 2.3
remembering -0.03 -0.02 0.62 0.38 1.7
beliefs -0.03 0.05 0.67 0.33 2.4
hungry -0.03 -0.07 0.90 0.10 2.7
tired -0.06 -0.09 0.78 0.22 1.9
pain -0.03 0.00 0.89 0.11 2.5
nauseated -0.28 0.06 0.90 0.10 1.8
safe 0.03 -0.05 0.79 0.21 1.8
love 0.07 -0.06 0.82 0.18 1.4
recognizing 0.04 0.05 0.71 0.29 1.4
communicating 0.14 -0.04 0.57 0.43 3.0
guilt 0.08 -0.07 0.75 0.25 1.8
disrespected 0.07 0.00 0.81 0.19 2.2
free_will 0.08 0.16 0.73 0.27 1.6
choices -0.06 -0.06 0.63 0.37 4.6
self_restraint 0.02 -0.10 0.62 0.38 2.3
intentions 0.02 0.03 0.68 0.32 2.0
goal 0.06 -0.03 0.56 0.44 4.3
conscious 0.01 0.00 0.67 0.33 1.4
self_aware 0.10 0.02 0.60 0.40 1.2
desires 0.01 0.07 0.71 0.29 1.4
embarrassed -0.04 -0.01 0.86 0.14 2.4
emo_recog -0.07 0.05 0.68 0.32 2.7
joy 0.01 -0.08 0.87 0.13 1.4
morality -0.04 -0.04 0.64 0.36 3.7
personality -0.09 -0.01 0.81 0.19 2.5
pleasure 0.04 0.00 0.79 0.21 1.3
pride 0.02 0.07 0.82 0.18 1.7
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 16.55 5.24 3.42 0.75 0.51 0.42 0.35 0.31 0.28 0.26 0.24 0.21
Proportion Var 0.41 0.13 0.09 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var 0.41 0.54 0.63 0.65 0.66 0.67 0.68 0.69 0.70 0.70 0.71 0.71
Proportion Explained 0.58 0.18 0.12 0.03 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion 0.58 0.76 0.88 0.90 0.92 0.94 0.95 0.96 0.97 0.98 0.99 0.99
MR13
SS loadings 0.18
Proportion Var 0.00
Cumulative Var 0.72
Proportion Explained 0.01
Cumulative Proportion 1.00
Mean item complexity = 2.2
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 36.39 with Chi Square of 14185
The degrees of freedom for the model are 338 and the objective function was 1.03
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.01
The harmonic number of observations is 405 with the empirical chi square 57.84 with prob < 1
The total number of observations was 405 with Likelihood Chi Square = 390.74 with prob < 0.025
Tucker Lewis Index of factoring reliability = 0.991
RMSEA index = 0.024 and the 90 % confidence intervals are 0.008 0.028
BIC = -1638.58
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 0.99 0.98 0.96 0.84 0.85 0.76 0.78
Multiple R square of scores with factors 0.99 0.95 0.92 0.71 0.72 0.58 0.61
Minimum correlation of possible factor scores 0.97 0.90 0.85 0.41 0.44 0.17 0.22
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.74 0.69 0.73 0.68 0.72 0.65
Multiple R square of scores with factors 0.55 0.48 0.53 0.46 0.52 0.42
Minimum correlation of possible factor scores 0.10 -0.04 0.06 -0.09 0.04 -0.17
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d1_all, nfactors = nfactors_d1_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 h2 u2 com
happy 0.57 0.63 0.09 0.74 0.26 2.0
depressed 0.39 0.76 0.03 0.73 0.27 1.5
fear 0.83 0.26 0.06 0.76 0.24 1.2
angry 0.60 0.55 0.08 0.67 0.33 2.0
calm 0.66 0.40 0.17 0.63 0.37 1.8
sounds 0.06 -0.05 0.61 0.38 0.62 1.0
seeing 0.35 -0.08 0.63 0.52 0.48 1.6
temperature 0.21 -0.07 0.68 0.51 0.49 1.2
odors 0.45 -0.02 0.45 0.40 0.60 2.0
depth 0.10 0.11 0.62 0.41 0.59 1.1
computations -0.73 0.21 0.42 0.76 0.24 1.8
thoughts 0.51 0.55 0.21 0.61 0.39 2.3
reasoning -0.07 0.49 0.56 0.55 0.45 2.0
remembering -0.20 0.18 0.71 0.58 0.42 1.3
beliefs 0.11 0.77 0.12 0.61 0.39 1.1
hungry 0.92 -0.01 -0.06 0.86 0.14 1.0
tired 0.83 0.22 0.10 0.75 0.25 1.2
pain 0.92 0.09 0.02 0.86 0.14 1.0
nauseated 0.67 0.48 0.09 0.68 0.32 1.9
safe 0.70 0.35 0.13 0.63 0.37 1.5
love 0.39 0.79 0.06 0.78 0.22 1.5
recognizing -0.28 0.31 0.70 0.66 0.34 1.7
communicating -0.03 0.21 0.64 0.46 0.54 1.2
guilt 0.27 0.79 0.01 0.70 0.30 1.2
disrespected 0.27 0.77 0.04 0.66 0.34 1.3
free_will 0.71 0.35 0.09 0.64 0.36 1.5
choices 0.24 0.20 0.60 0.45 0.55 1.6
self_restraint 0.24 0.57 0.30 0.47 0.53 1.9
intentions 0.54 0.35 0.26 0.48 0.52 2.2
goal 0.09 0.17 0.62 0.42 0.58 1.2
conscious 0.71 0.36 0.12 0.64 0.36 1.6
self_aware 0.53 0.48 0.21 0.55 0.45 2.3
desires 0.70 0.40 0.11 0.66 0.34 1.6
embarrassed 0.20 0.85 -0.02 0.76 0.24 1.1
emo_recog 0.06 0.72 0.28 0.60 0.40 1.3
joy 0.53 0.68 0.10 0.75 0.25 1.9
morality -0.04 0.62 0.31 0.48 0.52 1.5
personality 0.23 0.67 0.30 0.59 0.41 1.6
pleasure 0.75 0.41 0.11 0.75 0.25 1.6
pride 0.29 0.84 0.05 0.79 0.21 1.3
MR1 MR2 MR3
SS loadings 10.13 9.69 5.12
Proportion Var 0.25 0.24 0.13
Cumulative Var 0.25 0.50 0.62
Proportion Explained 0.41 0.39 0.21
Cumulative Proportion 0.41 0.79 1.00
Mean item complexity = 1.5
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 36.39 with Chi Square of 14185
The degrees of freedom for the model are 663 and the objective function was 3.83
The root mean square of the residuals (RMSR) is 0.03
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 405 with the empirical chi square 479.29 with prob < 1
The total number of observations was 405 with Likelihood Chi Square = 1486.88 with prob < 4.2e-65
Tucker Lewis Index of factoring reliability = 0.927
RMSEA index = 0.058 and the 90 % confidence intervals are 0.052 0.059
BIC = -2493.69
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3
Correlation of scores with factors 0.98 0.97 0.95
Multiple R square of scores with factors 0.97 0.95 0.90
Minimum correlation of possible factor scores 0.93 0.90 0.81
back to TOC
Study 2
Design: 2 conditions (beetle, robot), between-subjects (replication of Study 1) Date conducted: 2016-01-12
Demographics
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector
back to TOC
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d2_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.83 -0.08 -0.18 -0.18 0.15 -0.04 -0.04 0.01 -0.08 0.02 0.00
depressed 0.76 -0.01 -0.37 -0.02 0.13 0.04 -0.01 0.15 0.00 0.02 -0.12
fear 0.76 -0.36 0.21 0.04 0.05 -0.03 -0.06 0.00 0.03 0.00 0.08
angry 0.77 -0.17 -0.06 -0.05 0.19 0.02 -0.06 -0.13 0.13 -0.23 -0.07
calm 0.74 -0.05 0.08 -0.23 0.04 -0.08 -0.03 -0.04 -0.14 0.01 0.03
sounds 0.23 0.46 0.50 -0.11 0.13 0.12 0.02 0.05 0.05 -0.03 0.14
seeing 0.45 0.24 0.55 0.08 -0.05 0.13 -0.12 -0.07 0.01 0.07 0.04
temperature 0.32 0.28 0.53 0.16 0.16 0.02 -0.10 0.11 -0.10 -0.02 -0.08
odors 0.48 0.10 0.51 0.34 0.09 -0.02 -0.16 0.13 -0.16 -0.06 -0.10
depth 0.26 0.47 0.35 0.33 0.25 -0.38 0.34 0.01 0.06 0.02 0.04
computations -0.26 0.83 -0.12 -0.13 0.13 0.02 0.06 0.08 0.02 0.00 -0.01
thoughts 0.77 0.00 -0.01 -0.11 -0.23 -0.10 0.12 0.07 -0.08 0.01 -0.05
reasoning 0.36 0.59 -0.04 0.03 -0.21 -0.08 -0.03 0.00 -0.08 0.06 -0.07
remembering 0.19 0.69 0.24 -0.19 -0.01 0.08 0.00 0.06 -0.01 0.06 0.10
beliefs 0.53 0.26 -0.33 0.07 -0.08 0.20 0.16 0.00 -0.24 0.06 0.01
hungry 0.61 -0.62 0.31 0.19 -0.02 0.08 -0.04 0.00 -0.02 0.07 0.01
tired 0.73 -0.40 0.26 0.02 0.03 0.04 0.04 -0.08 0.06 0.02 0.04
pain 0.67 -0.52 0.28 0.11 -0.01 0.04 -0.02 0.01 0.07 0.09 -0.01
nauseated 0.70 -0.20 -0.02 0.00 0.12 0.03 0.00 -0.02 0.02 0.13 0.05
safe 0.75 -0.22 0.13 -0.05 -0.02 -0.09 -0.03 -0.14 -0.18 -0.06 0.22
love 0.74 0.00 -0.34 -0.05 0.08 0.09 0.05 0.14 0.02 0.06 -0.05
recognizing 0.20 0.74 0.04 -0.08 0.11 0.02 -0.02 0.02 0.00 -0.02 0.09
communicating 0.36 0.51 0.38 -0.05 0.04 0.20 -0.02 0.02 0.12 0.03 -0.02
guilt 0.64 0.14 -0.55 0.15 0.07 0.10 -0.01 0.01 -0.02 -0.02 0.02
disrespected 0.64 0.09 -0.43 0.17 0.04 0.03 -0.07 0.01 0.09 -0.14 0.09
free_will 0.66 -0.28 0.23 -0.01 -0.17 0.10 0.05 0.16 0.19 0.03 -0.03
choices 0.47 0.43 0.35 -0.10 -0.11 0.05 0.03 -0.04 0.08 0.07 -0.01
self_restraint 0.49 0.35 -0.15 0.09 -0.22 -0.05 0.03 -0.03 -0.04 -0.09 -0.07
intentions 0.67 0.00 0.25 0.00 -0.22 0.12 0.25 -0.13 0.04 -0.15 -0.04
goal 0.40 0.44 0.38 -0.05 -0.02 0.09 -0.03 -0.16 -0.08 -0.15 -0.14
conscious 0.72 -0.27 0.21 -0.10 -0.19 -0.11 0.02 0.14 -0.06 -0.04 0.13
self_aware 0.73 0.06 -0.03 -0.08 -0.20 -0.19 -0.07 0.27 0.08 -0.12 0.02
desires 0.79 -0.16 0.03 -0.02 0.02 0.01 0.18 -0.12 0.02 0.09 -0.12
embarrassed 0.61 0.12 -0.53 0.15 0.06 0.16 0.05 0.08 -0.06 -0.01 0.03
emo_recog 0.57 0.42 -0.27 0.14 -0.08 -0.12 -0.11 -0.14 0.07 0.14 0.03
joy 0.82 -0.07 -0.14 -0.22 0.20 -0.11 -0.08 -0.07 -0.01 -0.02 -0.04
morality 0.40 0.52 -0.27 0.19 -0.21 -0.11 -0.22 -0.12 0.09 0.07 0.01
personality 0.64 0.31 -0.16 -0.14 0.03 -0.13 -0.06 -0.05 0.09 0.03 -0.05
pleasure 0.81 -0.24 0.03 -0.17 0.09 -0.09 -0.01 0.00 -0.01 0.11 -0.12
pride 0.70 0.09 -0.47 0.15 0.03 0.13 0.06 -0.01 0.06 -0.04 0.12
MR12 MR13 h2 u2 com
happy -0.02 -0.04 0.80 0.203 1.3
depressed -0.03 0.01 0.76 0.240 1.7
fear 0.05 0.09 0.77 0.226 1.7
angry 0.08 0.16 0.79 0.214 1.8
calm -0.04 0.04 0.65 0.353 1.4
sounds 0.11 -0.08 0.61 0.392 3.2
seeing -0.11 0.05 0.63 0.374 2.9
temperature 0.06 -0.05 0.55 0.448 3.2
odors 0.03 -0.05 0.71 0.294 3.7
depth -0.08 0.01 0.86 0.141 6.2
computations 0.07 -0.02 0.82 0.179 1.4
thoughts 0.05 -0.04 0.71 0.290 1.4
reasoning 0.10 -0.02 0.56 0.441 2.2
remembering -0.05 -0.01 0.63 0.375 1.7
beliefs 0.02 0.16 0.61 0.385 3.7
hungry -0.05 0.00 0.90 0.099 2.8
tired -0.02 0.04 0.78 0.219 1.9
pain 0.01 0.05 0.83 0.169 2.4
nauseated 0.08 0.05 0.58 0.419 1.4
safe -0.02 -0.08 0.75 0.254 1.7
love 0.03 -0.02 0.70 0.299 1.6
recognizing 0.03 0.13 0.63 0.369 1.3
communicating -0.10 0.09 0.61 0.389 3.5
guilt -0.14 0.00 0.80 0.204 2.4
disrespected 0.10 -0.06 0.69 0.309 2.3
free_will -0.06 -0.11 0.69 0.308 2.3
choices 0.04 -0.04 0.56 0.435 3.3
self_restraint -0.09 0.12 0.49 0.513 3.0
intentions -0.04 -0.07 0.68 0.320 2.2
goal -0.02 -0.07 0.59 0.409 4.0
conscious 0.01 0.03 0.74 0.258 2.0
self_aware 0.02 0.08 0.72 0.277 1.8
desires 0.19 -0.01 0.76 0.244 1.5
embarrassed -0.08 -0.08 0.74 0.257 2.5
emo_recog 0.02 0.02 0.68 0.319 3.1
joy -0.08 -0.12 0.84 0.160 1.5
morality 0.06 -0.05 0.67 0.328 4.2
personality -0.16 -0.03 0.61 0.390 2.1
pleasure 0.01 0.02 0.78 0.217 1.4
pride 0.06 -0.08 0.79 0.211 2.2
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 14.94 5.37 3.77 0.79 0.68 0.52 0.41 0.36 0.31 0.26 0.25 0.22
Proportion Var 0.37 0.13 0.09 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var 0.37 0.51 0.60 0.62 0.64 0.65 0.66 0.67 0.68 0.69 0.69 0.70
Proportion Explained 0.53 0.19 0.13 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion 0.53 0.72 0.86 0.89 0.91 0.93 0.94 0.96 0.97 0.98 0.99 0.99
MR13
SS loadings 0.20
Proportion Var 0.00
Cumulative Var 0.70
Proportion Explained 0.01
Cumulative Proportion 1.00
Mean item complexity = 2.4
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 33.07 with Chi Square of 12924.08
The degrees of freedom for the model are 338 and the objective function was 1.02
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic number of observations is 406 with the empirical chi square 64.06 with prob < 1
The total number of observations was 406 with Likelihood Chi Square = 390.7 with prob < 0.025
Tucker Lewis Index of factoring reliability = 0.99
RMSEA index = 0.024 and the 90 % confidence intervals are 0.008 0.028
BIC = -1639.45
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 0.99 0.98 0.96 0.88 0.84 0.82 0.79
Multiple R square of scores with factors 0.98 0.95 0.93 0.77 0.71 0.68 0.62
Minimum correlation of possible factor scores 0.97 0.90 0.86 0.54 0.42 0.36 0.24
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.75 0.71 0.69 0.68 0.66 0.64
Multiple R square of scores with factors 0.56 0.50 0.48 0.46 0.44 0.40
Minimum correlation of possible factor scores 0.12 0.00 -0.04 -0.07 -0.12 -0.19
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d2_all, nfactors = nfactors_d2_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 h2 u2 com
happy 0.57 0.63 0.08 0.73 0.27 2.0
depressed 0.41 0.73 0.00 0.70 0.30 1.6
fear 0.83 0.21 0.09 0.75 0.25 1.2
angry 0.62 0.47 0.08 0.61 0.39 1.9
calm 0.59 0.39 0.24 0.56 0.44 2.1
sounds 0.07 -0.06 0.71 0.51 0.49 1.0
seeing 0.37 -0.02 0.65 0.56 0.44 1.6
temperature 0.25 -0.07 0.61 0.44 0.56 1.4
odors 0.45 -0.01 0.51 0.46 0.54 2.0
depth 0.03 0.08 0.58 0.34 0.66 1.0
computations -0.73 0.19 0.45 0.77 0.23 1.8
thoughts 0.55 0.49 0.23 0.60 0.40 2.3
reasoning -0.11 0.44 0.52 0.48 0.52 2.1
remembering -0.19 0.18 0.70 0.56 0.44 1.3
beliefs 0.11 0.64 0.15 0.44 0.56 1.2
hungry 0.91 -0.04 -0.07 0.84 0.16 1.0
tired 0.86 0.14 0.09 0.77 0.23 1.1
pain 0.90 0.05 0.00 0.81 0.19 1.0
nauseated 0.62 0.39 0.06 0.54 0.46 1.7
safe 0.71 0.31 0.15 0.62 0.38 1.5
love 0.41 0.70 0.02 0.66 0.34 1.6
recognizing -0.28 0.34 0.62 0.59 0.41 2.0
communicating 0.09 0.12 0.71 0.53 0.47 1.1
guilt 0.18 0.84 -0.04 0.73 0.27 1.1
disrespected 0.25 0.73 -0.01 0.60 0.40 1.2
free_will 0.72 0.17 0.14 0.56 0.44 1.2
choices 0.21 0.18 0.67 0.53 0.47 1.3
self_restraint 0.09 0.53 0.31 0.38 0.62 1.7
intentions 0.56 0.25 0.35 0.50 0.50 2.1
goal 0.16 0.13 0.67 0.50 0.50 1.2
conscious 0.75 0.22 0.15 0.63 0.37 1.3
self_aware 0.47 0.49 0.25 0.52 0.48 2.5
desires 0.67 0.42 0.14 0.64 0.36 1.8
embarrassed 0.17 0.79 -0.05 0.66 0.34 1.1
emo_recog 0.06 0.69 0.31 0.57 0.43 1.4
joy 0.58 0.59 0.11 0.69 0.31 2.1
morality -0.11 0.60 0.33 0.47 0.53 1.6
personality 0.21 0.61 0.32 0.52 0.48 1.8
pleasure 0.73 0.41 0.09 0.71 0.29 1.6
pride 0.27 0.80 -0.01 0.71 0.29 1.2
MR1 MR2 MR3
SS loadings 9.98 8.28 5.52
Proportion Var 0.25 0.21 0.14
Cumulative Var 0.25 0.46 0.59
Proportion Explained 0.42 0.35 0.23
Cumulative Proportion 0.42 0.77 1.00
Mean item complexity = 1.5
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 33.07 with Chi Square of 12924.08
The degrees of freedom for the model are 663 and the objective function was 3.95
The root mean square of the residuals (RMSR) is 0.03
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 406 with the empirical chi square 586.55 with prob < 0.98
The total number of observations was 406 with Likelihood Chi Square = 1534.4 with prob < 6.4e-71
Tucker Lewis Index of factoring reliability = 0.915
RMSEA index = 0.059 and the 90 % confidence intervals are 0.053 0.061
BIC = -2447.81
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy
MR1 MR2 MR3
Correlation of scores with factors 0.98 0.97 0.96
Multiple R square of scores with factors 0.96 0.94 0.91
Minimum correlation of possible factor scores 0.93 0.88 0.83
back to TOC
Study 3
Design: 2 conditions (beetle, robot), within-subjects Date conducted: 2016-01-10
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d3_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.86 0.00 -0.16 0.06 -0.13 -0.12 -0.03 -0.09 -0.09 0.12 -0.12
depressed 0.75 0.07 -0.33 0.20 -0.08 0.02 -0.05 -0.05 0.08 -0.05 0.07
fear 0.80 -0.33 0.09 -0.04 -0.08 0.01 -0.03 -0.04 0.03 0.06 0.00
angry 0.81 -0.08 -0.15 0.03 -0.16 0.01 0.03 0.02 -0.09 0.08 -0.02
calm 0.81 -0.07 0.04 -0.07 -0.12 -0.08 -0.04 -0.13 0.05 0.03 -0.09
sounds 0.32 0.29 0.57 0.24 0.00 -0.19 0.17 -0.13 -0.18 -0.06 0.00
seeing 0.40 0.11 0.52 0.11 0.07 -0.16 -0.01 -0.07 -0.10 -0.08 0.00
temperature 0.42 0.11 0.59 0.21 0.04 0.07 0.05 0.08 0.07 0.17 0.04
odors 0.53 -0.06 0.45 0.20 0.21 -0.05 -0.05 0.14 0.02 0.07 -0.04
depth 0.39 0.30 0.40 0.17 0.03 0.14 0.15 0.01 0.23 -0.14 -0.04
computations -0.40 0.73 -0.13 -0.03 -0.16 0.03 0.12 0.04 0.10 0.06 -0.02
thoughts 0.81 0.06 0.02 -0.20 -0.05 -0.17 0.11 0.02 0.03 -0.03 0.04
reasoning 0.38 0.63 0.06 -0.14 -0.07 -0.08 -0.04 -0.06 0.09 -0.05 0.11
remembering 0.24 0.60 0.27 0.00 -0.15 0.14 -0.03 0.06 -0.11 -0.02 0.08
beliefs 0.55 0.27 -0.31 0.03 0.23 0.19 0.16 -0.05 -0.09 0.03 -0.07
hungry 0.67 -0.60 0.21 0.07 0.12 0.03 -0.11 -0.03 0.04 -0.01 0.05
tired 0.77 -0.40 0.09 0.04 0.01 0.08 -0.09 -0.06 0.10 0.00 -0.04
pain 0.71 -0.53 0.20 0.05 0.06 0.00 -0.05 0.02 -0.01 -0.06 0.03
nauseated 0.78 -0.22 -0.06 0.12 -0.15 0.08 -0.01 -0.04 0.14 -0.14 0.05
safe 0.75 -0.24 0.10 -0.06 0.00 -0.08 -0.11 -0.02 -0.07 0.05 0.09
love 0.80 0.06 -0.22 0.08 -0.08 0.05 -0.04 -0.03 -0.07 -0.13 0.10
recognizing 0.22 0.71 0.17 0.03 -0.13 -0.18 -0.06 -0.02 0.07 0.00 -0.03
communicating 0.22 0.54 0.26 0.00 -0.01 0.05 -0.18 0.01 0.01 0.03 -0.03
guilt 0.66 0.19 -0.39 0.18 0.06 -0.04 0.02 0.07 0.01 0.07 0.17
disrespected 0.67 0.18 -0.38 0.19 0.07 0.08 0.07 0.01 -0.07 0.00 0.09
free_will 0.79 -0.21 0.07 -0.22 0.10 -0.02 0.11 -0.03 -0.06 -0.08 0.01
choices 0.52 0.29 0.34 -0.25 0.03 0.04 -0.07 -0.04 0.08 0.16 0.09
self_restraint 0.60 0.25 -0.14 -0.14 0.00 0.16 -0.01 -0.20 -0.04 -0.03 0.03
intentions 0.70 -0.02 0.18 -0.28 0.00 0.11 0.05 0.13 -0.06 0.01 0.09
goal 0.43 0.36 0.30 -0.02 -0.10 0.30 -0.11 0.10 -0.15 -0.07 -0.12
conscious 0.80 -0.19 0.08 -0.15 0.06 -0.05 0.10 0.02 0.04 -0.04 0.02
self_aware 0.74 0.00 0.00 -0.19 0.04 -0.12 0.11 0.08 0.08 -0.03 -0.13
desires 0.84 -0.22 0.08 -0.11 -0.06 0.10 0.11 0.12 -0.02 0.03 -0.01
embarrassed 0.63 0.16 -0.42 0.15 0.05 -0.14 0.02 0.17 -0.01 0.05 0.02
emo_recog 0.59 0.40 -0.16 -0.09 0.24 -0.11 -0.13 0.04 0.00 -0.04 -0.01
joy 0.84 -0.01 -0.19 0.10 -0.18 -0.03 0.05 -0.04 0.01 0.12 -0.06
morality 0.40 0.53 -0.15 -0.04 0.37 0.08 0.01 -0.17 0.05 0.08 -0.04
personality 0.68 0.32 -0.09 -0.08 0.00 -0.13 -0.07 0.14 -0.04 -0.12 -0.06
pleasure 0.84 -0.22 -0.02 0.02 -0.12 0.10 0.05 -0.02 0.00 0.06 -0.07
pride 0.71 0.17 -0.39 0.08 0.07 0.01 -0.12 0.07 0.03 -0.07 -0.14
MR12 MR13 h2 u2 com
happy 0.10 -0.06 0.86 0.14 1.3
depressed -0.05 0.00 0.75 0.25 1.7
fear 0.01 0.06 0.77 0.23 1.4
angry -0.01 0.02 0.73 0.27 1.2
calm -0.06 0.01 0.72 0.28 1.2
sounds 0.02 0.06 0.70 0.30 3.7
seeing -0.04 0.04 0.50 0.50 2.6
temperature 0.10 0.07 0.65 0.35 2.7
odors -0.01 -0.03 0.60 0.40 2.9
depth -0.01 -0.06 0.56 0.44 4.9
computations 0.15 0.07 0.80 0.20 2.0
thoughts -0.03 -0.03 0.76 0.24 1.3
reasoning 0.04 -0.03 0.60 0.40 2.0
remembering -0.07 -0.03 0.56 0.44 2.2
beliefs 0.00 0.02 0.60 0.40 3.2
hungry -0.01 -0.05 0.90 0.10 2.4
tired 0.06 0.05 0.81 0.19 1.7
pain 0.00 -0.05 0.84 0.16 2.1
nauseated 0.04 0.07 0.76 0.24 1.5
safe -0.03 0.06 0.68 0.32 1.4
love 0.14 -0.02 0.77 0.23 1.4
recognizing -0.10 -0.03 0.66 0.34 1.6
communicating -0.03 -0.01 0.44 0.56 2.2
guilt -0.04 -0.07 0.71 0.29 2.3
disrespected -0.14 0.06 0.71 0.29 2.3
free_will 0.12 0.09 0.78 0.22 1.5
choices -0.01 0.12 0.59 0.41 3.6
self_restraint -0.04 0.02 0.53 0.47 2.1
intentions -0.02 0.02 0.64 0.36 1.7
goal 0.01 -0.05 0.57 0.43 4.7
conscious 0.03 -0.11 0.75 0.25 1.3
self_aware -0.16 0.04 0.67 0.33 1.5
desires 0.01 -0.03 0.82 0.18 1.3
embarrassed 0.00 0.04 0.68 0.32 2.4
emo_recog 0.09 -0.08 0.66 0.34 2.8
joy 0.07 -0.11 0.83 0.17 1.3
morality 0.01 -0.06 0.66 0.34 3.4
personality 0.06 -0.01 0.64 0.36 1.8
pleasure -0.10 -0.06 0.81 0.19 1.3
pride 0.00 0.20 0.77 0.23 2.2
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 16.94 4.54 2.90 0.73 0.58 0.49 0.31 0.28 0.27 0.23 0.20 0.19
Proportion Var 0.42 0.11 0.07 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.00
Cumulative Var 0.42 0.54 0.61 0.63 0.64 0.65 0.66 0.67 0.68 0.68 0.69 0.69
Proportion Explained 0.61 0.16 0.10 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Proportion 0.61 0.77 0.88 0.90 0.92 0.94 0.95 0.96 0.97 0.98 0.99 0.99
MR13
SS loadings 0.17
Proportion Var 0.00
Cumulative Var 0.70
Proportion Explained 0.01
Cumulative Proportion 1.00
Mean item complexity = 2.2
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 34.22 with Chi Square of 13170.85
The degrees of freedom for the model are 338 and the objective function was 1.01
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic number of observations is 400 with the empirical chi square 61.88 with prob < 1
The total number of observations was 400 with Likelihood Chi Square = 381 with prob < 0.053
Tucker Lewis Index of factoring reliability = 0.992
RMSEA index = 0.022 and the 90 % confidence intervals are 0 0.027
BIC = -1644.12
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 0.99 0.97 0.95 0.84 0.82 0.77 0.72
Multiple R square of scores with factors 0.99 0.94 0.90 0.71 0.67 0.59 0.51
Minimum correlation of possible factor scores 0.97 0.88 0.80 0.41 0.34 0.18 0.02
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.68 0.68 0.67 0.65 0.65 0.63
Multiple R square of scores with factors 0.47 0.46 0.45 0.42 0.43 0.40
Minimum correlation of possible factor scores -0.06 -0.07 -0.10 -0.16 -0.14 -0.20
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d3_all, nfactors = nfactors_d3_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR3 MR1 MR2 h2 u2 com
happy 0.54 0.66 0.17 0.76 0.24 2.1
depressed 0.37 0.73 0.06 0.68 0.32 1.5
fear 0.79 0.34 0.10 0.76 0.24 1.4
angry 0.56 0.60 0.11 0.69 0.31 2.1
calm 0.61 0.48 0.24 0.66 0.34 2.2
sounds 0.20 -0.04 0.65 0.47 0.53 1.2
seeing 0.36 -0.04 0.55 0.44 0.56 1.7
temperature 0.39 -0.07 0.60 0.52 0.48 1.8
odors 0.53 0.03 0.43 0.47 0.53 1.9
depth 0.19 0.11 0.59 0.39 0.61 1.3
computations -0.79 0.10 0.26 0.70 0.30 1.2
thoughts 0.52 0.55 0.31 0.66 0.34 2.6
reasoning -0.13 0.43 0.57 0.54 0.46 2.0
remembering -0.15 0.20 0.65 0.49 0.51 1.3
beliefs 0.11 0.65 0.14 0.46 0.54 1.2
hungry 0.92 0.08 -0.03 0.86 0.14 1.0
tired 0.83 0.30 0.05 0.77 0.23 1.3
pain 0.90 0.14 0.02 0.83 0.17 1.0
nauseated 0.66 0.47 0.07 0.66 0.34 1.8
safe 0.70 0.34 0.16 0.63 0.37 1.6
love 0.44 0.69 0.15 0.69 0.31 1.8
recognizing -0.26 0.30 0.65 0.58 0.42 1.8
communicating -0.12 0.17 0.60 0.41 0.59 1.3
guilt 0.21 0.76 0.07 0.63 0.37 1.2
disrespected 0.23 0.75 0.08 0.62 0.38 1.2
free_will 0.70 0.39 0.17 0.67 0.33 1.7
choices 0.27 0.23 0.58 0.46 0.54 1.8
self_restraint 0.20 0.57 0.26 0.44 0.56 1.7
intentions 0.54 0.33 0.33 0.52 0.48 2.4
goal 0.15 0.22 0.57 0.39 0.61 1.5
conscious 0.70 0.40 0.19 0.69 0.31 1.8
self_aware 0.50 0.48 0.24 0.54 0.46 2.4
desires 0.74 0.42 0.18 0.76 0.24 1.7
embarrassed 0.19 0.74 0.02 0.59 0.41 1.1
emo_recog 0.10 0.64 0.34 0.53 0.47 1.6
joy 0.52 0.67 0.14 0.74 0.26 2.0
morality -0.11 0.54 0.37 0.44 0.56 1.8
personality 0.23 0.62 0.36 0.57 0.43 1.9
pleasure 0.71 0.48 0.11 0.76 0.24 1.8
pride 0.25 0.77 0.07 0.67 0.33 1.2
MR3 MR1 MR2
SS loadings 10.13 9.03 4.92
Proportion Var 0.25 0.23 0.12
Cumulative Var 0.25 0.48 0.60
Proportion Explained 0.42 0.38 0.20
Cumulative Proportion 0.42 0.80 1.00
Mean item complexity = 1.6
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 34.22 with Chi Square of 13170.85
The degrees of freedom for the model are 663 and the objective function was 3.61
The root mean square of the residuals (RMSR) is 0.03
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 400 with the empirical chi square 508.77 with prob < 1
The total number of observations was 400 with Likelihood Chi Square = 1380.26 with prob < 1.3e-52
Tucker Lewis Index of factoring reliability = 0.932
RMSEA index = 0.054 and the 90 % confidence intervals are 0.048 0.056
BIC = -2592.08
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR3 MR1 MR2
Correlation of scores with factors 0.98 0.96 0.94
Multiple R square of scores with factors 0.96 0.93 0.88
Minimum correlation of possible factor scores 0.92 0.86 0.76
back to TOC
Study 4
Design: 21 conditions, between-subjects Date conducted: 2016-01-14
Demographics
Joining, by = c("condition", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `condition` joining factor and character vector, coercing into character vector
back to TOC
Exploratory factor analysis
Step 1: Run maximal EFA (without and with rotation)
Factor Analysis using method = minres
Call: fa(r = d4_all, nfactors = 13, rotate = "none", fm = "minres",
cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11
happy 0.88 -0.07 -0.25 0.15 -0.15 0.05 -0.03 0.07 -0.03 0.09 0.05
depressed 0.81 0.17 -0.16 0.15 0.03 -0.24 0.00 -0.06 0.02 -0.07 -0.01
fear 0.84 -0.37 -0.13 -0.07 0.10 -0.01 0.00 0.04 -0.05 -0.01 0.00
angry 0.86 -0.07 -0.15 0.12 -0.04 -0.09 -0.06 -0.05 0.06 -0.07 -0.04
calm 0.85 -0.20 -0.15 -0.03 -0.02 0.03 -0.02 0.11 -0.08 0.09 0.00
sounds 0.71 -0.32 0.41 0.14 0.13 0.13 0.00 0.03 0.03 0.01 0.02
seeing 0.77 -0.33 0.28 0.07 0.12 0.04 -0.05 -0.01 0.03 -0.01 -0.01
temperature 0.65 -0.31 0.41 0.05 0.18 0.05 0.03 0.04 -0.01 0.02 -0.07
odors 0.79 -0.25 0.17 0.03 0.16 -0.04 0.05 -0.15 0.05 -0.02 -0.08
depth 0.71 -0.03 0.39 -0.11 0.03 -0.04 -0.10 0.03 0.11 0.08 -0.05
computations 0.22 0.57 0.46 0.16 0.03 0.06 -0.06 0.06 0.05 0.09 0.05
thoughts 0.85 0.00 -0.10 -0.08 -0.14 0.14 0.21 -0.21 0.05 -0.03 0.01
reasoning 0.73 0.36 0.22 -0.13 -0.10 0.01 0.07 -0.10 0.01 0.05 -0.01
remembering 0.75 0.06 0.42 0.12 -0.12 -0.10 -0.06 -0.08 0.04 0.01 0.02
beliefs 0.66 0.54 -0.11 -0.12 0.07 0.16 0.07 0.00 0.05 0.07 -0.02
hungry 0.78 -0.44 -0.15 -0.13 0.16 0.03 -0.02 -0.02 -0.02 -0.02 0.06
tired 0.85 -0.37 -0.15 0.03 0.06 -0.03 0.00 -0.02 -0.04 0.01 0.03
pain 0.81 -0.43 -0.17 -0.02 0.19 0.03 0.01 -0.08 -0.03 -0.05 0.07
nauseated 0.82 -0.12 -0.18 0.10 0.03 -0.13 -0.02 -0.04 0.05 0.10 -0.03
safe 0.85 -0.22 -0.11 -0.08 -0.04 0.02 0.03 0.21 -0.06 0.04 0.00
love 0.84 0.05 -0.26 0.15 -0.12 0.09 -0.03 0.02 0.00 -0.03 -0.01
recognizing 0.79 -0.04 0.24 0.33 -0.09 0.05 -0.01 -0.02 -0.01 0.02 0.09
communicating 0.75 -0.08 0.40 0.13 -0.15 0.03 0.12 0.12 -0.13 -0.18 -0.01
guilt 0.74 0.47 -0.18 0.09 0.14 -0.03 0.04 0.00 0.05 0.01 0.09
disrespected 0.73 0.43 -0.12 0.02 0.18 -0.04 0.01 0.07 -0.05 -0.11 0.01
free_will 0.82 -0.07 -0.04 -0.28 -0.07 0.02 -0.14 -0.02 0.04 -0.06 -0.04
choices 0.79 -0.03 0.33 -0.16 -0.07 -0.07 -0.08 0.01 -0.04 0.00 0.00
self_restraint 0.75 0.38 0.10 -0.09 0.05 -0.21 0.00 -0.06 -0.23 0.08 0.10
intentions 0.81 0.03 0.06 -0.26 -0.04 -0.07 0.00 0.11 0.13 0.01 -0.01
goal 0.67 0.10 0.32 -0.24 -0.09 -0.11 0.21 0.05 0.01 -0.05 0.05
conscious 0.82 -0.15 -0.06 -0.13 -0.03 0.10 0.08 -0.01 -0.04 0.02 0.06
self_aware 0.77 0.21 0.02 -0.24 -0.07 0.13 -0.23 -0.08 -0.01 -0.07 0.15
desires 0.87 -0.10 -0.12 -0.09 -0.08 -0.08 0.09 0.06 0.06 0.05 -0.10
embarrassed 0.70 0.50 -0.20 0.08 0.21 0.02 0.09 0.11 0.15 -0.03 0.09
emo_recog 0.77 0.34 -0.02 0.09 0.02 0.01 -0.09 -0.01 -0.04 -0.12 -0.05
joy 0.89 -0.04 -0.23 0.14 -0.15 0.02 0.02 -0.01 -0.03 0.10 0.00
morality 0.70 0.53 -0.01 -0.02 0.12 0.11 0.00 -0.08 -0.19 0.07 -0.19
personality 0.89 0.00 -0.12 0.14 -0.17 0.04 -0.02 -0.02 0.04 -0.07 -0.05
pleasure 0.90 -0.22 -0.15 0.03 -0.04 -0.04 -0.03 -0.03 0.05 0.07 0.01
pride 0.81 0.32 -0.16 -0.03 -0.03 0.01 -0.08 0.08 0.03 -0.08 -0.12
MR12 MR13 h2 u2 com
happy 0.01 -0.05 0.91 0.090 1.4
depressed 0.07 0.11 0.82 0.183 1.5
fear -0.03 0.06 0.88 0.117 1.5
angry -0.08 -0.08 0.82 0.181 1.2
calm 0.02 0.08 0.83 0.175 1.3
sounds -0.04 0.04 0.83 0.170 2.4
seeing -0.09 -0.06 0.82 0.183 1.8
temperature 0.18 -0.03 0.77 0.229 2.7
odors 0.00 -0.03 0.79 0.213 1.5
depth 0.11 -0.02 0.71 0.290 1.9
computations 0.02 0.05 0.64 0.360 2.6
thoughts 0.03 0.13 0.88 0.116 1.5
reasoning -0.05 -0.08 0.76 0.241 1.9
remembering -0.07 0.14 0.82 0.180 1.9
beliefs 0.02 0.01 0.81 0.193 2.3
hungry -0.05 0.00 0.88 0.120 1.9
tired -0.01 -0.04 0.90 0.104 1.5
pain 0.01 0.01 0.92 0.078 1.8
nauseated 0.08 -0.01 0.77 0.233 1.3
safe 0.00 0.13 0.86 0.141 1.4
love 0.06 -0.08 0.83 0.167 1.4
recognizing -0.05 -0.05 0.82 0.180 1.7
communicating 0.00 -0.02 0.85 0.153 2.1
guilt -0.04 0.01 0.84 0.163 2.0
disrespected -0.04 -0.06 0.80 0.204 2.0
free_will -0.03 0.07 0.79 0.206 1.4
choices -0.12 0.02 0.79 0.213 1.6
self_restraint 0.06 -0.01 0.85 0.153 2.1
intentions -0.07 -0.04 0.77 0.230 1.4
goal 0.04 -0.07 0.70 0.297 2.3
conscious 0.04 -0.05 0.73 0.266 1.2
self_aware 0.08 -0.04 0.82 0.185 1.8
desires -0.01 -0.07 0.84 0.163 1.2
embarrassed -0.04 0.03 0.89 0.109 2.5
emo_recog 0.07 0.00 0.75 0.250 1.6
joy -0.05 -0.03 0.90 0.103 1.3
morality -0.09 0.01 0.88 0.117 2.5
personality 0.06 0.03 0.86 0.135 1.2
pleasure -0.01 -0.02 0.89 0.113 1.2
pride 0.02 0.00 0.81 0.189 1.5
MR1 MR2 MR3 MR4 MR5 MR6 MR7 MR8 MR9 MR10 MR11 MR12
SS loadings 24.49 3.38 2.06 0.74 0.48 0.31 0.27 0.24 0.21 0.17 0.16 0.15
Proportion Var 0.61 0.08 0.05 0.02 0.01 0.01 0.01 0.01 0.01 0.00 0.00 0.00
Cumulative Var 0.61 0.70 0.75 0.77 0.78 0.79 0.79 0.80 0.80 0.81 0.81 0.82
Proportion Explained 0.75 0.10 0.06 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.00
Cumulative Proportion 0.75 0.85 0.91 0.93 0.95 0.96 0.97 0.97 0.98 0.99 0.99 1.00
MR13
SS loadings 0.14
Proportion Var 0.00
Cumulative Var 0.82
Proportion Explained 0.00
Cumulative Proportion 1.00
Mean item complexity = 1.7
Test of the hypothesis that 13 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 52.07 with Chi Square of 21651.8
The degrees of freedom for the model are 338 and the objective function was 1.29
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.01
The harmonic number of observations is 431 with the empirical chi square 34.49 with prob < 1
The total number of observations was 431 with Likelihood Chi Square = 526.8 with prob < 2e-10
Tucker Lewis Index of factoring reliability = 0.979
RMSEA index = 0.039 and the 90 % confidence intervals are 0.03 0.042
BIC = -1523.55
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3 MR4 MR5 MR6 MR7
Correlation of scores with factors 1.00 0.98 0.96 0.89 0.88 0.80 0.77
Multiple R square of scores with factors 0.99 0.96 0.92 0.80 0.77 0.64 0.60
Minimum correlation of possible factor scores 0.99 0.91 0.83 0.60 0.55 0.28 0.19
MR8 MR9 MR10 MR11 MR12 MR13
Correlation of scores with factors 0.79 0.76 0.71 0.72 0.66 0.67
Multiple R square of scores with factors 0.62 0.59 0.51 0.51 0.44 0.45
Minimum correlation of possible factor scores 0.24 0.17 0.01 0.03 -0.12 -0.10
[1] 3
Step 2: Run EFA with varimax rotation
Factor Analysis using method = minres
Call: fa(r = d4_all, nfactors = nfactors_d4_all, rotate = chosenRotType,
fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
MR1 MR2 MR3 h2 u2 com
happy 0.74 0.48 0.23 0.84 0.16 1.9
depressed 0.52 0.62 0.23 0.70 0.30 2.2
fear 0.83 0.20 0.37 0.86 0.14 1.5
angry 0.68 0.46 0.31 0.76 0.24 2.2
calm 0.75 0.35 0.32 0.79 0.21 1.8
sounds 0.45 0.08 0.75 0.76 0.24 1.7
seeing 0.56 0.13 0.67 0.78 0.22 2.0
temperature 0.40 0.06 0.71 0.68 0.32 1.6
odors 0.58 0.22 0.58 0.72 0.28 2.3
depth 0.29 0.32 0.68 0.65 0.35 1.8
computations -0.40 0.51 0.39 0.58 0.42 2.8
thoughts 0.60 0.49 0.33 0.72 0.28 2.5
reasoning 0.17 0.66 0.48 0.70 0.30 2.0
remembering 0.26 0.41 0.71 0.74 0.26 1.9
beliefs 0.19 0.83 0.14 0.74 0.26 1.2
hungry 0.84 0.11 0.33 0.83 0.17 1.3
tired 0.85 0.21 0.36 0.89 0.11 1.5
pain 0.86 0.14 0.33 0.87 0.13 1.3
nauseated 0.70 0.40 0.27 0.71 0.29 1.9
safe 0.74 0.32 0.36 0.78 0.22 1.9
love 0.65 0.56 0.18 0.77 0.23 2.1
recognizing 0.43 0.38 0.59 0.67 0.33 2.6
communicating 0.35 0.30 0.71 0.71 0.29 1.8
guilt 0.31 0.82 0.13 0.79 0.21 1.3
disrespected 0.30 0.78 0.18 0.73 0.27 1.4
free_will 0.60 0.42 0.38 0.68 0.32 2.6
choices 0.38 0.37 0.67 0.73 0.27 2.2
self_restraint 0.24 0.71 0.38 0.70 0.30 1.8
intentions 0.49 0.47 0.44 0.66 0.34 3.0
goal 0.23 0.41 0.57 0.55 0.45 2.2
conscious 0.65 0.35 0.38 0.69 0.31 2.2
self_aware 0.38 0.60 0.35 0.63 0.37 2.4
desires 0.69 0.43 0.34 0.78 0.22 2.2
embarrassed 0.29 0.82 0.09 0.77 0.23 1.3
emo_recog 0.33 0.72 0.30 0.71 0.29 1.8
joy 0.72 0.51 0.25 0.84 0.16 2.1
morality 0.17 0.81 0.25 0.74 0.26 1.3
personality 0.64 0.52 0.33 0.80 0.20 2.5
pleasure 0.79 0.35 0.35 0.87 0.13 1.8
pride 0.43 0.74 0.20 0.78 0.22 1.8
MR1 MR2 MR3
SS loadings 12.24 10.06 7.40
Proportion Var 0.31 0.25 0.19
Cumulative Var 0.31 0.56 0.74
Proportion Explained 0.41 0.34 0.25
Cumulative Proportion 0.41 0.75 1.00
Mean item complexity = 1.9
Test of the hypothesis that 3 factors are sufficient.
The degrees of freedom for the null model are 780 and the objective function was 52.07 with Chi Square of 21651.8
The degrees of freedom for the model are 663 and the objective function was 5.44
The root mean square of the residuals (RMSR) is 0.02
The df corrected root mean square of the residuals is 0.03
The harmonic number of observations is 431 with the empirical chi square 406.4 with prob < 1
The total number of observations was 431 with Likelihood Chi Square = 2251.71 with prob < 1e-171
Tucker Lewis Index of factoring reliability = 0.91
RMSEA index = 0.077 and the 90 % confidence intervals are 0.071 0.078
BIC = -1770.12
Fit based upon off diagonal values = 1
Measures of factor score adequacy
MR1 MR2 MR3
Correlation of scores with factors 0.98 0.97 0.95
Multiple R square of scores with factors 0.95 0.95 0.91
Minimum correlation of possible factor scores 0.91 0.90 0.81
back to TOC
Big factor loadings table for all studies (Studies 1-4)
Joining, by = "mc"
Joining, by = "mc"
Joining, by = "mc"
LS0tCnRpdGxlOiAiQm9keSwgSGVhcnQsICYgTWluZCAoV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgc3VibWl0dGVkKSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICB0b2M6IHllcwogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgojIFNldHVwCgpgYGB7ciB3b3Jrc3BhY2Ugc2V0dXAsIGluY2x1ZGUgPSBGfQojIGxvYWQgbGlicmFyaWVzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KGxhbmdjb2cpICMgc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vbGFuZ2NvZy9sYW5nY29nCmxpYnJhcnkocm1zKQpsaWJyYXJ5KHNjYXR0ZXJwbG90M2QpCmxpYnJhcnkobGF0dGljZSkKbGlicmFyeShkaXJlY3RsYWJlbHMpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKCiMgY2xlYXIgd29ya3NwYWNlCiMgcm0obGlzdCA9IGxzKGFsbCA9IFQpKQojIGdyYXBoaWNzLm9mZigpCmBgYAoKYGBge3IgZnVuY3Rpb25zLCBpbmNsdWRlID0gRn0KIyBtYWtlIHJvdW5kaW5nIGZ1bmN0aW9uCnJvdW5kMiA8LSBmdW5jdGlvbih4KSB7Zm9ybWF0KHJvdW5kKHgsIDIpLCBuc21hbGwgPSAyKX0KCiMgbWFrZSBjbGVhbnVwIGZ1bmN0aW9uCmNsZWFudXAgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiKSkgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZF9yYXdfc3R1ZHkxfQogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZF9yYXdfc3R1ZHkyfQogICAgCiAgICAjIGVuYWN0IGV4Y2x1c2lvbmFyeSBjcml0ZXJpYQogICAgZF9jbGVhbl8xIDwtIGQgJT4lCiAgICAgIG11dGF0ZShmaW5pc2hlZF9tb2QgPSBpZmVsc2UoaXMubmEoQ0FUQ0gpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmaW5pc2hlZCA9PSAxLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSCA9PSAxLCAjIGV4Y2x1ZGUgUHMgd2hvIGZhaWwgY2F0Y2ggdHJpYWxzIAogICAgICAgICAgICAgZmluaXNoZWRfbW9kICE9IDApICU+JSAjIGV4Y2x1ZGUgUHMgd2hvIGRpZCBub3QgY29tcGxldGUgdGFzawogICAgICBtdXRhdGUoeW9iX2NvcnJlY3QgPSBhcy5udW1lcmljKAogICAgICAgIGlmZWxzZShhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA+IDE5MDAgJiAKICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA8IDIwMDAsIAogICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSwgTkEpKSwgIyBjb3JyZWN0IGZvcm1hdHRpbmcgaW4geW9iCiAgICAgICAgYWdlX2FwcHJveCA9IDIwMTYgLSB5b2JfY29ycmVjdCkgJT4lICMgY2FsY3VsYXRlIGFwcHJveGltYXRlIGFnZQogICAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxLCAyLCAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibSIsICJmIiwgIm90aGVyIikpKSAlPiUKICAgICAgZmlsdGVyKGFnZV9hcHByb3ggPj0gMTgpICMgZXhjbHVkZSBQcyB3aG8gYXJlIHlvdW5nZXIgdGhhbiAxOCB5ZWFycwogICAgCiAgICAjIHJlY29kZSBiYWNrZ3JvdW5kIGFuZCBkZW1vZ3JhcGhpYyB2YXJpYWJsZXMKICAgIGRfY2xlYW4gPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IG51bWJlcgogICAgICAgIHN0dWR5ID0gZmFjdG9yKHN0dWR5KSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgZHVyYXRpb24KICAgICAgICBkdXJhdGlvbiA9IGFzLm51bWVyaWMoZGlmZnRpbWUoc3RycHRpbWUoZW5kX3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJwdGltZShzdGFydF90aW1lLCAiJUk6JU06JVMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMgPSAibWlucyIpKSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmFjZQogICAgICAgIHJhY2VfYXNpYW5fZWFzdCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX2Vhc3QpLCAiIiwgImFzaWFuX2Vhc3QgIikpLAogICAgICAgIHJhY2VfYXNpYW5fc291dGggPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9zb3V0aCksICIiLCAiYXNpYW5fc291dGggIikpLAogICAgICAgIHJhY2VfYXNpYW5fb3RoZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9vdGhlciksICIiLCAiYXNpYW5fb3RoZXIgIikpLAogICAgICAgIHJhY2VfYmxhY2sgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9ibGFjayksICIiLCAiYmxhY2sgIikpLAogICAgICAgIHJhY2VfaGlzcGFuaWMgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9oaXNwYW5pYyksICIiLCAiaGlzcGFuaWMgIikpLAogICAgICAgIHJhY2VfbWlkZGxlX2Vhc3Rlcm4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9taWRkbGVfZWFzdGVybiksICIiLCAibWlkZGxlX2Vhc3Rlcm4gIikpLAogICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfbmF0aXZlX2FtZXJpY2FuKSwgIiIsICJuYXRpdmVfYW1lcmljYW4gIikpLAogICAgICAgIHJhY2VfcGFjX2lzbGFuZGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfcGFjX2lzbGFuZGVyKSwgIiIsICJwYWNfaXNsYW5kZXIgIikpLAogICAgICAgIHJhY2Vfd2hpdGUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV93aGl0ZSksICIiLCAid2hpdGUgIikpLAogICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2Vfb3RoZXJfcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJhY2VfY2F0ID0gcGFzdGUwKHJhY2VfYXNpYW5fZWFzdCwgcmFjZV9hc2lhbl9zb3V0aCwgcmFjZV9hc2lhbl9vdGhlciwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX2JsYWNrLCByYWNlX2hpc3BhbmljLCByYWNlX21pZGRsZV9lYXN0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuLCByYWNlX3BhY19pc2xhbmRlciwgcmFjZV93aGl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX290aGVyX3ByZWZubyksCiAgICAgICAgcmFjZV9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJhY2VfY2F0KSksCiAgICAgICAgcmFjZV9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJhY2VfY2F0MikgPT0gVCwgIm11bHRpcmFjaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihyYWNlX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5LCBzdWJpZDplbmRfdGltZSwgZHVyYXRpb24sIGZpbmlzaGVkOmdlbmRlciwgCiAgICAgICAgICAgICByZWxpZ2lvbl9idWRkaGlzbTphZ2VfYXBwcm94LCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJlbGlnaW9uCiAgICAgICAgcmVsaWdpb25fYnVkZGhpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fYnVkZGhpc20pLCAiIiwgImJ1ZGRoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9jaHJpc3RpYW5pdHkgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fY2hyaXN0aWFuaXR5KSwgIiIsICJjaHJpc3RpYW5pdHkgIikpLAogICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2hpbmR1aXNtKSwgIiIsICJoaW5kdWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25faXNsYW0gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faXNsYW0pLCAiIiwgImlzbGFtICIpKSwKICAgICAgICByZWxpZ2lvbl9qYWluaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2phaW5pc20pLCAiIiwgImphaW5pc20gIikpLAogICAgICAgIHJlbGlnaW9uX2p1ZGFpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fanVkYWlzbSksICIiLCAianVkYWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fc2lraGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9zaWtoaXNtKSwgIiIsICJzaWtoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9vdGhlciksICIiLCAib3RoZXIgIikpLAogICAgICAgIHJlbGlnaW9uX25vbmUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fbm9uZSksICIiLCAibm9uZSAiKSksCiAgICAgICAgcmVsaWdpb25fcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3ByZWZubyksICIiLCAib3RoZXJfcHJlZm5vICIpKSwKICAgICAgICByZWxpZ2lvbl9jYXQgPSBwYXN0ZTAocmVsaWdpb25fYnVkZGhpc20sIHJlbGlnaW9uX2NocmlzdGlhbml0eSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtLCByZWxpZ2lvbl9pc2xhbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2phaW5pc20sIHJlbGlnaW9uX2p1ZGFpc20sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZ2lvbl9zaWtoaXNtLCByZWxpZ2lvbl9vdGhlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX25vbmUsIHJlbGlnaW9uX3ByZWZubyksCiAgICAgICAgcmVsaWdpb25fY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCByZWxpZ2lvbl9jYXQpKSwKICAgICAgICByZWxpZ2lvbl9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJlbGlnaW9uX2NhdDIpID09IFQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXJlbGlnaW91cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJlbGlnaW9uX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OmdlbmRlciwgZmVlZGJhY2s6cmFjZV9jYXQsIHJlbGlnaW9uX2NhdDMpICU+JQogICAgICByZW5hbWUocmVsaWdpb25fY2F0ID0gcmVsaWdpb25fY2F0MykKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgZCA8LSBkX3Jhd19zdHVkeTMKICAgIAogICAgIyBlbmFjdCBleGNsdXNpb25hcnkgY3JpdGVyaWEKICAgIGRfY2xlYW5fMSA8LSBkICU+JQogICAgICBtdXRhdGUoZmluaXNoZWRfbW9kID0gaWZlbHNlKGlzLm5hKENBVENILi5jaGFyYWN0ZXJMKSB8IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMubmEoQ0FUQ0guLmNoYXJhY3RlclIpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmaW5pc2hlZCA9PSAxLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSC4uY2hhcmFjdGVyTCA9PSA1LCAjIGV4Y2x1ZGUgUHMgd2hvIGZhaWwgY2F0Y2ggdHJpYWxzIAogICAgICAgICAgICAgQ0FUQ0guLmNoYXJhY3RlclIgPT0gNSwKICAgICAgICAgICAgIGZpbmlzaGVkX21vZCAhPSAwKSAlPiUgIyBleGNsdWRlIFBzIHdobyBkaWQgbm90IGNvbXBsZXRlIHRhc2sKICAgICAgbXV0YXRlKHlvYl9jb3JyZWN0ID0gYXMubnVtZXJpYygKICAgICAgICBpZmVsc2UoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPiAxOTAwICYgCiAgICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPCAyMDAwLCAKICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSksIE5BKSksICMgY29ycmVjdCBmb3JtYXR0aW5nIGluIHlvYgogICAgICAgIGFnZV9hcHByb3ggPSAyMDE2IC0geW9iX2NvcnJlY3QpICU+JSAjIGNhbGN1bGF0ZSBhcHByb3hpbWF0ZSBhZ2UKICAgICAgbXV0YXRlKGdlbmRlciA9IGZhY3RvcihnZW5kZXIsIGxldmVscyA9IGMoMSwgMiwgMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIm0iLCAiZiIsICJvdGhlciIpKSkgJT4lCiAgICAgIGZpbHRlcihhZ2VfYXBwcm94ID49IDE4KSAjIGV4Y2x1ZGUgUHMgd2hvIGFyZSB5b3VuZ2VyIHRoYW4gMTggeWVhcnMKICAgIAogICAgIyByZWNvZGUgYmFja2dyb3VuZCBhbmQgZGVtb2dyYXBoaWMgdmFyaWFibGVzCiAgICBkX2NsZWFuXzIgPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IG51bWJlcgogICAgICAgIHN0dWR5ID0gZmFjdG9yKHN0dWR5KSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgZHVyYXRpb24KICAgICAgICBkdXJhdGlvbiA9IGFzLm51bWVyaWMoZGlmZnRpbWUoc3RycHRpbWUoZW5kX3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJwdGltZShzdGFydF90aW1lLCAiJUk6JU06JVMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMgPSAibWlucyIpKSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmFjZQogICAgICAgIHJhY2VfYXNpYW5fZWFzdCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX2Vhc3QpLCAiIiwgImFzaWFuX2Vhc3QgIikpLAogICAgICAgIHJhY2VfYXNpYW5fc291dGggPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9zb3V0aCksICIiLCAiYXNpYW5fc291dGggIikpLAogICAgICAgIHJhY2VfYXNpYW5fb3RoZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9vdGhlciksICIiLCAiYXNpYW5fb3RoZXIgIikpLAogICAgICAgIHJhY2VfYmxhY2sgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9ibGFjayksICIiLCAiYmxhY2sgIikpLAogICAgICAgIHJhY2VfaGlzcGFuaWMgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9oaXNwYW5pYyksICIiLCAiaGlzcGFuaWMgIikpLAogICAgICAgIHJhY2VfbWlkZGxlX2Vhc3Rlcm4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9taWRkbGVfZWFzdGVybiksICIiLCAibWlkZGxlX2Vhc3Rlcm4gIikpLAogICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfbmF0aXZlX2FtZXJpY2FuKSwgIiIsICJuYXRpdmVfYW1lcmljYW4gIikpLAogICAgICAgIHJhY2VfcGFjX2lzbGFuZGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfcGFjX2lzbGFuZGVyKSwgIiIsICJwYWNfaXNsYW5kZXIgIikpLAogICAgICAgIHJhY2Vfd2hpdGUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV93aGl0ZSksICIiLCAid2hpdGUgIikpLAogICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2Vfb3RoZXJfcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJhY2VfY2F0ID0gcGFzdGUwKHJhY2VfYXNpYW5fZWFzdCwgcmFjZV9hc2lhbl9zb3V0aCwgcmFjZV9hc2lhbl9vdGhlciwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX2JsYWNrLCByYWNlX2hpc3BhbmljLCByYWNlX21pZGRsZV9lYXN0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuLCByYWNlX3BhY19pc2xhbmRlciwgcmFjZV93aGl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX290aGVyX3ByZWZubyksCiAgICAgICAgcmFjZV9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJhY2VfY2F0KSksCiAgICAgICAgcmFjZV9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJhY2VfY2F0MikgPT0gVCwgIm11bHRpcmFjaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihyYWNlX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5LCBzdWJpZDplbmRfdGltZSwgZHVyYXRpb24sIGZpbmlzaGVkOmdlbmRlciwgCiAgICAgICAgICAgICByZWxpZ2lvbl9idWRkaGlzbTphZ2VfYXBwcm94LCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJlbGlnaW9uCiAgICAgICAgcmVsaWdpb25fYnVkZGhpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fYnVkZGhpc20pLCAiIiwgImJ1ZGRoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9jaHJpc3RpYW5pdHkgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fY2hyaXN0aWFuaXR5KSwgIiIsICJjaHJpc3RpYW5pdHkgIikpLAogICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2hpbmR1aXNtKSwgIiIsICJoaW5kdWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25faXNsYW0gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faXNsYW0pLCAiIiwgImlzbGFtICIpKSwKICAgICAgICByZWxpZ2lvbl9qYWluaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2phaW5pc20pLCAiIiwgImphaW5pc20gIikpLAogICAgICAgIHJlbGlnaW9uX2p1ZGFpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fanVkYWlzbSksICIiLCAianVkYWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fc2lraGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9zaWtoaXNtKSwgIiIsICJzaWtoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9vdGhlciksICIiLCAib3RoZXIgIikpLAogICAgICAgIHJlbGlnaW9uX25vbmUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fbm9uZSksICIiLCAibm9uZSAiKSksCiAgICAgICAgcmVsaWdpb25fcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3ByZWZubyksICIiLCAib3RoZXJfcHJlZm5vICIpKSwKICAgICAgICByZWxpZ2lvbl9jYXQgPSBwYXN0ZTAocmVsaWdpb25fYnVkZGhpc20sIHJlbGlnaW9uX2NocmlzdGlhbml0eSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtLCByZWxpZ2lvbl9pc2xhbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2phaW5pc20sIHJlbGlnaW9uX2p1ZGFpc20sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZ2lvbl9zaWtoaXNtLCByZWxpZ2lvbl9vdGhlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX25vbmUsIHJlbGlnaW9uX3ByZWZubyksCiAgICAgICAgcmVsaWdpb25fY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCByZWxpZ2lvbl9jYXQpKSwKICAgICAgICByZWxpZ2lvbl9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJlbGlnaW9uX2NhdDIpID09IFQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXJlbGlnaW91cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJlbGlnaW9uX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OmdlbmRlciwgZmVlZGJhY2s6cmFjZV9jYXQsIHJlbGlnaW9uX2NhdDMpICU+JQogICAgICByZW5hbWUocmVsaWdpb25fY2F0ID0gcmVsaWdpb25fY2F0MykKICAgIAogICAgIyByZW5hbWUgcmVzcG9uc2UgdmFyaWFibGVzCiAgICBkX2NsZWFuXzMgPC0gZF9jbGVhbl8yCiAgICBuYW1lcyhkX2NsZWFuXzMpIDwtIGdzdWIoImdldCIsICIiLCBuYW1lcyhkX2NsZWFuXzMpKQogICAgbmFtZXMoZF9jbGVhbl8zKSA8LSBnc3ViKCJcXC4iLCAiIiwgbmFtZXMoZF9jbGVhbl8zKSkKICAgIG5hbWVzKGRfY2xlYW5fMykgPC0gZ3N1YigiY2hhciIsICJfY2hhciIsIG5hbWVzKGRfY2xlYW5fMykpCiAgICBuYW1lcyhkX2NsZWFuXzMpW25hbWVzKGRfY2xlYW5fMykgJWluJSBjKCJfY2hhcmFjdGVyTCIsICJfY2hhcmFjdGVyUiIpXSA8LSAKICAgICAgYygiY2hhcmFjdGVyTCIsICJjaGFyYWN0ZXJSIikKICAgIAogICAgIyByZWNvZGUgcmVzcG9uc2UgdmFyaWFibGVzIChjZW50ZXIpCiAgICBkX2NsZWFuXzQgPC0gZF9jbGVhbl8zCiAgICBmb3IoaSBpbiAxMTo5MikgewogICAgICBkX2NsZWFuXzRbLGldIDwtIGRfY2xlYW5fNFssaV0gLSA0ICMgdHJhbnNmb3JtIGZyb20gMSB0byA3IC0tPiAtMyB0byAzCiAgICB9CiAgICAKICAgICMgcmVjb2RlIGNoYXJhY3RlckwgdnMuIGNoYXJhY3RlclIgYXMgYmVldGxlIHZzLiByb2JvdAogICAgZF9jbGVhbl81X2RlbW8gPC0gZF9jbGVhbl80ICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OmNvbmRpdGlvbiwgeW9iOnJlbGlnaW9uX2NhdCkKICAgIAogICAgZF9jbGVhbl81X2NoYXJhY3RlckwgPC0gZF9jbGVhbl80ICU+JQogICAgICBtdXRhdGUodGFyZ2V0ID0gY2hhcmFjdGVyTCkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkLCB0YXJnZXQsIGhhcHB5X2NoYXJhY3Rlckw6Q0FUQ0hfY2hhcmFjdGVyTCkKICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJMKSA8LSBnc3ViKCJfY2hhcmFjdGVyTCIsICIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJMKSkKICAgIAogICAgZF9jbGVhbl81X2NoYXJhY3RlclIgPC0gZF9jbGVhbl80ICU+JQogICAgICBtdXRhdGUodGFyZ2V0ID0gY2hhcmFjdGVyUikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkLCB0YXJnZXQsIGhhcHB5X2NoYXJhY3RlclI6Q0FUQ0hfY2hhcmFjdGVyUikKICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJSKSA8LSBnc3ViKCJfY2hhcmFjdGVyUiIsICIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJSKSkKICAgIAogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzVfY2hhcmFjdGVyTCAlPiUKICAgICAgZnVsbF9qb2luKGRfY2xlYW5fNV9jaGFyYWN0ZXJSKSAlPiUKICAgICAgZnVsbF9qb2luKGRfY2xlYW5fNV9kZW1vKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQsIGRhdGU6cmVsaWdpb25fY2F0LCB0YXJnZXQ6Q0FUQ0gpCiAgICAKICAgICMgcmVtb3ZlIGV4dHJhbmVvdXMgZGZzIGFuZCB2YXJpYWJsZXMKICAgIHJtKGQsIGRfY2xlYW5fMSwgZF9jbGVhbl8yLCBkX2NsZWFuXzMsIGRfY2xlYW5fNCwgZF9jbGVhbl81X2NoYXJhY3RlckwsIAogICAgICAgZF9jbGVhbl81X2NoYXJhY3RlclIsIGRfY2xlYW5fNV9kZW1vLCBpKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0IikgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgZCA8LSBkX3Jhd19zdHVkeTQKCiAgICAgICAgIyBlbmFjdCBleGNsdXNpb25hcnkgY3JpdGVyaWEKICAgIGRfY2xlYW5fMSA8LSBkICU+JQogICAgICBtdXRhdGUoZmluaXNoZWRfbW9kID0gaWZlbHNlKGlzLm5hKENBVENIKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZmluaXNoZWQgPT0gMSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41KSkpICU+JQogICAgICBmaWx0ZXIoQ0FUQ0ggPT0gMSwgIyBleGNsdWRlIFBzIHdobyBmYWlsIGNhdGNoIHRyaWFscyAKICAgICAgICAgICAgIGZpbmlzaGVkX21vZCAhPSAwKSAlPiUgIyBleGNsdWRlIFBzIHdobyBkaWQgbm90IGNvbXBsZXRlIHRhc2sKICAgICAgbXV0YXRlKHlvYl9jb3JyZWN0ID0gYXMubnVtZXJpYygKICAgICAgICBpZmVsc2UoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPiAxOTAwICYgCiAgICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPCAyMDAwLCAKICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSksIE5BKSksICMgY29ycmVjdCBmb3JtYXR0aW5nIGluIHlvYgogICAgICAgIGFnZV9hcHByb3ggPSAyMDE2IC0geW9iX2NvcnJlY3QpICU+JSAjIGNhbGN1bGF0ZSBhcHByb3hpbWF0ZSBhZ2UKICAgICAgbXV0YXRlKGdlbmRlciA9IGZhY3RvcihnZW5kZXIsIGxldmVscyA9IGMoMSwgMiwgMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIm0iLCAiZiIsICJvdGhlciIpKSkgJT4lCiAgICAgIGZpbHRlcihhZ2VfYXBwcm94ID49IDE4KSAjIGV4Y2x1ZGUgUHMgd2hvIGFyZSB5b3VuZ2VyIHRoYW4gMTggeWVhcnMKICAgIAogICAgIyByZWNvZGUgb25lIGNoYXJhY3RlcgogICAgZF9jbGVhbl8yIDwtIGRfY2xlYW5fMSAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3RvcihpZmVsc2UoCiAgICAgICAgZ3JlcGwoInZlZ2V0YXRpdmUiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksICJwdnMiLAogICAgICAgIGlmZWxzZShncmVwbCgiYmx1ZSIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwgImJsdWVqYXkiLAogICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoImNoaW1wIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLCAiY2hpbXAiLAogICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpKSkpKQoKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzIgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBkdXJhdGlvbgogICAgICAgIGR1cmF0aW9uID0gYXMubnVtZXJpYyhkaWZmdGltZShzdHJwdGltZShlbmRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnB0aW1lKHN0YXJ0X3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJtaW5zIikpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9hc2lhbl9lYXN0ID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fZWFzdCksICIiLCAiYXNpYW5fZWFzdCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9zb3V0aCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX3NvdXRoKSwgIiIsICJhc2lhbl9zb3V0aCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX290aGVyKSwgIiIsICJhc2lhbl9vdGhlciAiKSksCiAgICAgICAgcmFjZV9ibGFjayA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2JsYWNrKSwgIiIsICJibGFjayAiKSksCiAgICAgICAgcmFjZV9oaXNwYW5pYyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2hpc3BhbmljKSwgIiIsICJoaXNwYW5pYyAiKSksCiAgICAgICAgcmFjZV9taWRkbGVfZWFzdGVybiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX21pZGRsZV9lYXN0ZXJuKSwgIiIsICJtaWRkbGVfZWFzdGVybiAiKSksCiAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9uYXRpdmVfYW1lcmljYW4pLCAiIiwgIm5hdGl2ZV9hbWVyaWNhbiAiKSksCiAgICAgICAgcmFjZV9wYWNfaXNsYW5kZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9wYWNfaXNsYW5kZXIpLCAiIiwgInBhY19pc2xhbmRlciAiKSksCiAgICAgICAgcmFjZV93aGl0ZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3doaXRlKSwgIiIsICJ3aGl0ZSAiKSksCiAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9vdGhlcl9wcmVmbm8pLCAiIiwgIm90aGVyX3ByZWZubyAiKSksCiAgICAgICAgcmFjZV9jYXQgPSBwYXN0ZTAocmFjZV9hc2lhbl9lYXN0LCByYWNlX2FzaWFuX3NvdXRoLCByYWNlX2FzaWFuX290aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfYmxhY2ssIHJhY2VfaGlzcGFuaWMsIHJhY2VfbWlkZGxlX2Vhc3Rlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4sIHJhY2VfcGFjX2lzbGFuZGVyLCByYWNlX3doaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vKSwKICAgICAgICByYWNlX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmFjZV9jYXQpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmVuZF90aW1lLCBkdXJhdGlvbiwgZmluaXNoZWQ6Z2VuZGVyLCAKICAgICAgICAgICAgIGVkdWNhdGlvbjphZ2VfYXBwcm94LCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpCiAgICAKICAgICMgZmlsdGVyIGNvbmRpdGlvbnMgaWYgZGVzaXJlZAogICAgaWYoaXMuZWxlbWVudCgibm9uZSIsIGNob3NlbkV4Y2x1ZGUpKSB7fSBlbHNlIHsKICAgICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICAgIGZpbHRlcighY29uZGl0aW9uICVpbiUgY2hvc2VuRXhjbHVkZSkKICAgIH0KICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xLCBkX2NsZWFuXzIpCiAgfQogIAojICAgIyB0cmFuc2Zvcm0gdG8gMCB0byA2IHNjYWxlCiMgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiMgICAgIGdhdGhlcihtYywgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKIyAgICAgbXV0YXRlKHNjb3JlID0gc2NvcmUgKyAzKSAlPiUgIyB0cmFuc2Zvcm0gZnJvbSAtMyB0byAzIC0tPiAwIHRvIDYKIyAgICAgc3ByZWFkKG1jLCBzY29yZSkKICAKICAjIHJlbW92ZSBvdXRsaWVycwogIGlmKGNob3Nlbk91dGxpZXJIYW5kbGluZyA9PSAicmVtb3ZlIikgewogICAgCiAgICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgICBnYXRoZXIobWMsIHNjb3JlLCBoYXBweTpwcmlkZSkgJT4lCiAgICAgICAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYykgJT4lCiAgICAgICAgZmlsdGVyKCFzY29yZSAlaW4lIGJveHBsb3Quc3RhdHMoc2NvcmUsIDIuNSkkb3V0KSAlPiUKICAgICAgICBzcHJlYWQobWMsIHNjb3JlKSAlPiUKICAgICAgICBhcnJhbmdlKGNvbmRpdGlvbiwgc3ViaWQpCiAgICB9CiAgICAKICAgIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgICBnYXRoZXIobWMsIHNjb3JlLCBoYXBweTpwcmlkZSkgJT4lCiAgICAgICAgZ3JvdXBfYnkodGFyZ2V0LCBtYykgJT4lCiAgICAgICAgZmlsdGVyKCFzY29yZSAlaW4lIGJveHBsb3Quc3RhdHMoc2NvcmUsIDIuNSkkb3V0KSAlPiUKICAgICAgICBzcHJlYWQobWMsIHNjb3JlKSAlPiUKICAgICAgICBhcnJhbmdlKHRhcmdldCwgc3ViaWQpCiAgICB9CiAgICAKICB9CiAgCiAgIyBmaWx0ZXIgaXRlbXMgaWYgZGVzaXJlZAogIGlmKGlzLmVsZW1lbnQoIm5vbmUiLCBjaG9zZW5FeGNsdWRlSXRlbSkpIHt9IGVsc2UgewogICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICBkcGx5cjo6c2VsZWN0KC1jb250YWlucyhjaG9zZW5FeGNsdWRlSXRlbSkpCiAgfQoKICAjIHJldHVybiBjbGVhbmVkIGRhdGFzZXQKICByZXR1cm4oZF9jbGVhbikKfQoKIyBtYWtlIGZ1bmN0aW9uIGZvciBleGFtaW5pbmcgZXhjbHVzaW9uIG9mIHBhcnRpY2lwYW50cwpleGNsdWRlZENvdW50cyA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CiAgCiAgIyBzZXQgZGF0YXNvdXJjZQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXsKICAgIGQgPC0gZDEKICAgIGRfcmF3IDwtIGRfcmF3X3N0dWR5MQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7CiAgICBkIDwtIGQyCiAgICBkX3JhdyA8LSBkX3Jhd19zdHVkeTIKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgZCA8LSBkMwogICAgZF9yYXcgPC0gZF9yYXdfc3R1ZHkzCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXsKICAgIGQgPC0gZDQKICAgIGRfcmF3IDwtIGRfcmF3X3N0dWR5NAogIH0KICAKICAjIGdldCBzdWJpZHMgb2Ygc3VjY2Vzc2Z1bCBwYXJ0aWNpcGFudHMKICBkX3N1YmlkcyA8LSBsZXZlbHMoZmFjdG9yKGFzLmNoYXJhY3RlcihkJHN1YmlkKSkpCiAgCiAgIyBnZXQgc3ViaWRzIG9mIGV4Y2x1ZGVkIHBhcnRpY2lwYW50cwogIGRfZXhjbHVkZWQgPC0gZF9yYXcgJT4lCiAgICBmaWx0ZXIoaXMuZWxlbWVudChzdWJpZCwgZF9zdWJpZHMpID09IEZBTFNFKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCBzdWJpZCwgZmluaXNoZWQsIHN0YXJ0c193aXRoKCJDQVRDSCIpLCB5b2IpCgogICMgY291bnQgZXhjbHVkZWQgcGFydGljaXBhbnRzCiAgZF9leGNsdWRlZF9uIDwtIGxlbmd0aChkX2V4Y2x1ZGVkJHN1YmlkKQogIAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZGlkIG5vdCBmaW5pc2gKICAgIGRfZXhjbHVkZWRfdW5maW5pc2hlZCA8LSBkX2V4Y2x1ZGVkICU+JQogICAgICBmaWx0ZXIoaXMubmEoQ0FUQ0gpID09IFQsCiAgICAgICAgICAgICBmaW5pc2hlZCAhPSAxKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogICAgCiAgICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQsIGJ1dCBmYWlsZWQgY2F0Y2ggdHJpYWwKICAgIGRfZXhjbHVkZWRfQ0FUQ0ggPC0gZF9leGNsdWRlZCAlPiUKICAgICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgICBmaWx0ZXIoQ0FUQ0ggIT0gMSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgICBjKCkKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgICMgY291bnQgcGFydGljaXBhbnRzIHdobyBkaWQgbm90IGZpbmlzaAogICAgZF9leGNsdWRlZF91bmZpbmlzaGVkIDwtIGRfZXhjbHVkZWQgJT4lCiAgICAgIGZpbHRlcihpcy5uYShDQVRDSC4uY2hhcmFjdGVyTCkgPT0gVCwKICAgICAgICAgICAgIGlzLm5hKENBVENILi5jaGFyYWN0ZXJSKSA9PSBULAogICAgICAgICAgICAgZmluaXNoZWQgIT0gMSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgICBjKCkKICAgIAogICAgIyBjb3VudCBwYXJ0aWNpcGFudHMgd2hvIGZpbmlzaGVkLCBidXQgZmFpbGVkIGNhdGNoIHRyaWFsCiAgICBkX2V4Y2x1ZGVkX0NBVENIIDwtIGRfZXhjbHVkZWQgJT4lCiAgICAgIGZpbHRlcihpcy5lbGVtZW50KHN1YmlkLCBkX2V4Y2x1ZGVkX3VuZmluaXNoZWQkc3ViaWQpID09IEZBTFNFKSAlPiUKICAgICAgZmlsdGVyKENBVENILi5jaGFyYWN0ZXJMICE9IDUgfCBDQVRDSC4uY2hhcmFjdGVyUiAhPSA1KSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogIH0KICAKICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQgYW5kIHBhc3NlZCBjYXRjaCB0cmlhbCwgCiAgIyBidXQgZGlkIG5vdCBwcm92aWRlIHllYXIgb2YgYmlydGgKICBkX2V4Y2x1ZGVkX25vX3lvYiA8LSBkX2V4Y2x1ZGVkICU+JQogICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UsCiAgICAgICAgICAgaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF9DQVRDSCRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgbXV0YXRlKHlvYiA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpKSAlPiUKICAgIGZpbHRlcihpcy5uYSh5b2IpIHwgeW9iIDwgMTg5OSB8IG5jaGFyKGFzLmNoYXJhY3Rlcih5b2IpKSAhPSA0KSAlPiUKICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgYygpCiAgCiAgIyBjb3VudCBwYXJ0aWNpcGFudHMgd2hvIGZpbmlzaGVkIGFuZCBwYXNzZWQgY2F0Y2ggdHJpYWwsIAogICMgYnV0IGRpZCBub3QgcHJvdmlkZSB5ZWFyIG9mIGJpcnRoCiAgZF9leGNsdWRlZF95b3VuZyA8LSBkX2V4Y2x1ZGVkICU+JQogICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UsCiAgICAgICAgICAgaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF9DQVRDSCRzdWJpZCkgPT0gRkFMU0UsCiAgICAgICAgICAgaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF9ub195b2Ikc3ViaWQpID09IEZBTFNFKSAlPiUKICAgIG11dGF0ZSh5b2IgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSkgJT4lCiAgICBmaWx0ZXIoaXMubmEoeW9iKSB8IDIwMTYgLSB5b2IgPCAxOCkgJT4lCiAgICBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUKICAgIGMoKQogIAogICMgc3VtIHVwIGV4Y2x1ZGVkIHBhcnRpY2lwYW50cyBieSBjYXRlZ29yeQogIHRvdGFsIDwtIHN1bShsZW5ndGgoZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSwKICAgICAgICAgICAgICAgbGVuZ3RoKGRfZXhjbHVkZWRfQ0FUQ0gkc3ViaWQpLAogICAgICAgICAgICAgICBsZW5ndGgoZF9leGNsdWRlZF9ub195b2Ikc3ViaWQpLAogICAgICAgICAgICAgICBsZW5ndGgoZF9leGNsdWRlZF95b3VuZyRzdWJpZCkpCiAgCiAgIyBjYWxjdWxhdGUgY291bnRzCiAgZXhjbHVkZWRfY291bnRzIDwtIAogICAgZGF0YS5mcmFtZSgiZGlkX25vdF9maW5pc2giID0gbGVuZ3RoKGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCksCiAgICAgICAgICAgICAgICJmYWlsZWRfY2F0Y2hfdHJpYWwiID0gbGVuZ3RoKGRfZXhjbHVkZWRfQ0FUQ0gkc3ViaWQpLAogICAgICAgICAgICAgICAiZGlkX25vdF9wcm92aWRlX3lvYiIgPSBsZW5ndGgoZF9leGNsdWRlZF9ub195b2Ikc3ViaWQpLAogICAgICAgICAgICAgICAidG9vX3lvdW5nIiA9IGxlbmd0aChkX2V4Y2x1ZGVkX3lvdW5nJHN1YmlkKSwKICAgICAgICAgICAgICAgIlRPVEFMX2V4Y2x1ZGVkIiA9IHRvdGFsLAogICAgICAgICAgICAgICAiVE9UQUxfcGFydGljaXBhdGVkIiA9IGxlbmd0aChkJHN1YmlkKSwKICAgICAgICAgICAgICAgIk9WRVJBTExfVE9UQUwiID0gc3VtKHRvdGFsLCBsZW5ndGgoZCRzdWJpZCkpKQogIAogIGlmKHRvdGFsICE9IGRfZXhjbHVkZWRfbikgewogICAgc3RvcCgiRXJyb3I6IDQgc291cmNlcyBvZiBleGNsdXNpb24gZG8gbm90IGFkZCB1cCB0byB0b3RhbC4iKQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuKGV4Y2x1ZGVkX2NvdW50cykKICAgIH0KfQoKIyBtYWtlIGZ1bmN0aW9uIGZvciBzdHJpcHBpbmcgZGF0YWZyYW1lcyBmb3IgZGltZW5zaW9uIHJlZHVjYXRpb24KbWFrZURSREYgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSwgY2hvc2VuQ29uZGl0aW9uKSB7CiAgCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7CiAgICAjIHJlbmFtZSB2YXJpYWJsZXMgZm9yIGVhc2Ugb2YgZnVuY3Rpb24gYXBwbHBpY2F0aW9uCiAgICBkIDwtIGQzICU+JQogICAgICByZW5hbWUob3JkZXIgPSBjb25kaXRpb24sCiAgICAgICAgICAgICBjb25kaXRpb24gPSB0YXJnZXQpCiAgICAKICAgICMgcmVuYW1lIHN1YmlkcyBieSBjb25kaXRpb24gaWYgY29sbGFwc2VzIGFjcm9zcyBjb25kaXRpb25zCiAgICBkIDwtIGQgJT4lCiAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKGNvbmRpdGlvbiwgc3ViaWQsIHNlcCA9ICJfIikpCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQogIAogICMgZmlsdGVyIGJ5IGNvbmRpdGlvbiBpZiBzcGVjaWZpZWQKICBpZihjaG9zZW5Db25kaXRpb24gJWluJSBjKCJiZWV0bGUiLCAicm9ib3QiKSkgewogICAgZCA8LSBkICU+JSBmaWx0ZXIoY29uZGl0aW9uID09IGNob3NlbkNvbmRpdGlvbikKICB9CiAgCiAgIyBtYWtlIHN0cmlwcGVkIGRhdGFmcmFtZSBmb3IgZGltZW5zaW9uIHJlZHVjYXRpb24gYW5hbHlzZXMKICBkX3N0cmlwIDwtIGQgJT4lCiAgICBkcGx5cjo6c2VsZWN0KHN1YmlkLCBoYXBweTpwcmlkZSkKICBkX3N0cmlwIDwtIGRhdGEuZnJhbWUoZF9zdHJpcFssLTFdLCByb3cubmFtZXMgPSBkX3N0cmlwJHN1YmlkKQogIAogICMgcmV0dXJuIHN0cmlwcGVkIGRhdGFmcmFtZQogIHJldHVybihkX3N0cmlwKQp9CgojIG1ha2UgZGVtb2dyYXBoaWNzIGZ1bmN0aW9ucwpkZW1vU2FtcGxlU2l6ZSA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgIyByZW5hbWUgdmFyaWFibGVzIGZvciBlYXNlIG9mIGZ1bmN0aW9uIGFwcGxwaWNhdGlvbgogICAgZCA8LSBkMyAlPiUKICAgICAgcmVuYW1lKG9yZGVyID0gY29uZGl0aW9uLAogICAgICAgICAgICAgY29uZGl0aW9uID0gdGFyZ2V0KQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNvbmRpdGlvbgogIHNhbXBsZV9zaXplIDwtIHZlY3RvcigpCiAgZm9yKGkgaW4gbGV2ZWxzKGQkY29uZGl0aW9uKSkgewogICAgc2FtcGxlX3NpemVbYXMuY2hhcmFjdGVyKGkpXSA8LSAKICAgICAgYXMubnVtZXJpYyhkICU+JSBmaWx0ZXIoY29uZGl0aW9uID09IGkpICU+JSBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUgCiAgICAgICAgICAgICAgICAgICB1bmlxdWUoKSAlPiUgY291bnQoKSkKICB9CgogICMgYWRkIHRvdGFsIHNhbXBsZSBzaXplICAKICBzYW1wbGVfc2l6ZVsiYWxsIl0gPC0gYXMubnVtZXJpYyhkICU+JSBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUoKSAlPiUgY291bnQoKSkKICAKICAjIG1ha2UgaW50byBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgc2FtcGxlX3NpemUgPC0gZGF0YS5mcmFtZShzYW1wbGVfc2l6ZSkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oKSAlPiUKICAgIHJlbmFtZShjb25kaXRpb24gPSByb3duYW1lLAogICAgICAgICAgIG4gPSBzYW1wbGVfc2l6ZSkKICAKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKHNhbXBsZV9zaXplKQp9CmRlbW9EdXJhdGlvbiA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgIyByZWNvZGUgdmFyaWFibGVzIGZvciBlYXNlIG9mIGZ1bmN0aW9uIGFwcGxwaWNhdGlvbgogICAgZCA8LSBkMyAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJ3aXRoaW4tc3ViamVjdHMiKQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNvbmRpdGlvbgogIGR1cmF0aW9uIDwtIGQgJT4lCiAgICBncm91cF9ieShjb25kaXRpb24pICU+JQogICAgc3VtbWFyaXNlKG1pbl9kdXJhdGlvbiA9IG1pbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgbWF4X2R1cmF0aW9uID0gbWF4KGR1cmF0aW9uKSwKICAgICAgICAgICAgICBtZWRpYW5fZHVyYXRpb24gPSBtZWRpYW4oZHVyYXRpb24pLAogICAgICAgICAgICAgIG1lYW5fZHVyYXRpb24gPSBtZWFuKGR1cmF0aW9uKSwKICAgICAgICAgICAgICBzZF9kdXJhdGlvbiA9IHNkKGR1cmF0aW9uKSkKCiAgIyBhZGQgdG90YWwgZHVyYXRpb24KICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgYWxsIDwtIGQgJT4lCiAgICAgIHN1bW1hcmlzZShtaW5fZHVyYXRpb24gPSBtaW4oZHVyYXRpb24pLAogICAgICAgICAgICAgICAgbWF4X2R1cmF0aW9uID0gbWF4KGR1cmF0aW9uKSwKICAgICAgICAgICAgICAgIG1lZGlhbl9kdXJhdGlvbiA9IG1lZGlhbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgICBtZWFuX2R1cmF0aW9uID0gbWVhbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgICBzZF9kdXJhdGlvbiA9IHNkKGR1cmF0aW9uKSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiYWxsIikKICAgIGR1cmF0aW9uIDwtIHJiaW5kKGR1cmF0aW9uLCBhbGwpICMgbm90IHN1cmUgd2h5IGZ1bGxfam9pbiBkb2Vzbid0IHdvcmsgICAgCiAgfQoKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKGR1cmF0aW9uKQp9CmRlbW9BZ2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXsKICAgICMgcmVjb2RlIHZhcmlhYmxlcyBmb3IgZWFzZSBvZiBmdW5jdGlvbiBhcHBscGljYXRpb24KICAgIGQgPC0gZDMgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAid2l0aGluLXN1YmplY3RzIikKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CgogICMgZ2V0IHNhbXBsZSBzaXplIHBlciBjb25kaXRpb24KICBhZ2UgPC0gZCAlPiUKICAgIGdyb3VwX2J5KGNvbmRpdGlvbikgJT4lCiAgICBzdW1tYXJpc2UobWluX2FnZSA9IG1pbihhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICBtYXhfYWdlID0gbWF4KGFnZV9hcHByb3gpLAogICAgICAgICAgICAgIG1lZGlhbl9hZ2UgPSBtZWRpYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgbWVhbl9hZ2UgPSBtZWFuKGFnZV9hcHByb3gpLAogICAgICAgICAgICAgIHNkX2FnZSA9IHNkKGFnZV9hcHByb3gpKQoKICAjIGFkZCB0b3RhbCBhZ2UKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgYWxsIDwtIGQgJT4lCiAgICAgIHN1bW1hcmlzZShtaW5fYWdlID0gbWluKGFnZV9hcHByb3gpLAogICAgICAgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICAgIG1lZGlhbl9hZ2UgPSBtZWRpYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgICBzZF9hZ2UgPSBzZChhZ2VfYXBwcm94KSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiYWxsIikKICAgIGFnZSA8LSBmdWxsX2pvaW4oYWdlLCBhbGwpCiAgfQoKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKGFnZSkKfQpkZW1vR2VuZGVyIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgZ2VuZGVyIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgZ2VuZGVyIDwtIGRhdGEuZnJhbWUoYWRkbWFyZ2lucyh3aXRoKGQsIHRhYmxlKGNvbmRpdGlvbiwgZ2VuZGVyKSkpKSAlPiUKICAgICAgZmlsdGVyKGdlbmRlciAhPSAiU3VtIikgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgIGdlbmRlciA8LSBkYXRhLmZyYW1lKHdpdGgoZCwgdGFibGUoZ2VuZGVyKSkpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gIlN1bSIpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KGNvbmRpdGlvbiwgZ2VuZGVyLCBuKQogIH0KICAKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSkgewogICAgZ2VuZGVyIDwtIGdlbmRlciAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJiZWV0bGUiLCAicm9ib3QiLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCBnZW5kZXIpICU+JQogICAgc3ByZWFkKGdlbmRlciwgbikKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpIHsKICAgIGdlbmRlciA8LSBnZW5kZXIgJT4lCiAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhsZXZlbHMoZCRjb25kaXRpb24pLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCBnZW5kZXIpICU+JQogICAgc3ByZWFkKGdlbmRlciwgbikKICB9CiAgCiAgIyByZXR1cm4gZGF0YWZyYW1lIGZvciB1c2luZyBrYWJsZQogIHJldHVybihnZW5kZXIpCn0KZGVtb1JhY2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCByYWNlIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgcmFjZSA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkLCB0YWJsZShjb25kaXRpb24sIHJhY2VfY2F0KSkpKSAlPiUKICAgICAgZmlsdGVyKHJhY2VfY2F0ICE9ICJTdW0iKSAlPiUKICAgICAgcmVuYW1lKG4gPSBGcmVxKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgcmFjZSA8LSBkYXRhLmZyYW1lKHdpdGgoZCwgdGFibGUocmFjZV9jYXQpKSkgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiU3VtIikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCByYWNlX2NhdCwgbikKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIsICJzdHVkeSAzIikpIHsKICAgIHJhY2UgPC0gcmFjZSAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJiZWV0bGUiLCAicm9ib3QiLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCByYWNlX2NhdCkgJT4lCiAgICBzcHJlYWQocmFjZV9jYXQsIG4pCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKSB7CiAgICByYWNlIDwtIHJhY2UgJT4lCiAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhsZXZlbHMoZCRjb25kaXRpb24pLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCByYWNlX2NhdCkgJT4lCiAgICBzcHJlYWQocmFjZV9jYXQsIG4pCiAgfQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICByZXR1cm4ocmFjZSkKfQpkZW1vUmVsaWdpb24gPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQoKICAjIGdldCByZWxpZ2lvbiBwZXIgY29uZGl0aW9uIGFuZCBvdmVyYWxsCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIpKSB7CiAgICByZWxpZ2lvbiA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkLCB0YWJsZShjb25kaXRpb24sIHJlbGlnaW9uX2NhdCkpKSkgJT4lCiAgICAgIGZpbHRlcihyZWxpZ2lvbl9jYXQgIT0gIlN1bSIpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICByZWxpZ2lvbiA8LSBkYXRhLmZyYW1lKHdpdGgoZCwgdGFibGUocmVsaWdpb25fY2F0KSkpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gIlN1bSIpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KGNvbmRpdGlvbiwgcmVsaWdpb25fY2F0LCBuKQogIH0KICAKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSkgewogICAgcmVsaWdpb24gPC0gcmVsaWdpb24gJT4lCiAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiYmVldGxlIiwgInJvYm90IiwgImFsbCIpKSkgJT4lCiAgICBhcnJhbmdlKGNvbmRpdGlvbiwgcmVsaWdpb25fY2F0KSAlPiUKICAgIHNwcmVhZChyZWxpZ2lvbl9jYXQsIG4pCiAgfQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7CiAgICBzdG9wKCJSZWxpZ2lvbiBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlIGZvciBTdHVkeSA0IikKICB9IGVsc2Uge3JldHVybihyZWxpZ2lvbil9Cn0KZGVtb0VkdWNhdGlvbiA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CiAgCiAgIyBnZXQgZWR1Y2F0aW9uIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0IikgewogICAgZWR1Y2F0aW9uIDwtIAogICAgICBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkLCB0YWJsZShjb25kaXRpb24sIGVkdWNhdGlvbikpKSkgJT4lCiAgICAgIGZpbHRlcihlZHVjYXRpb24gIT0gIlN1bSIpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhsZXZlbHMoZCRjb25kaXRpb24pLCAiYWxsIikpLAogICAgICAgICAgICAgZWR1Y2F0aW9uID0gZmFjdG9yKGVkdWNhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDE6NywgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygic29tZV9IUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFNfZGlwbG9tYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29tZV9jb2xsZWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc3NvY2lhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNoZWxvcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvbWVfZ3JhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlZl9ubyIpKSkgJT4lCiAgICAgIGFycmFuZ2UoY29uZGl0aW9uLCBlZHVjYXRpb24pICU+JQogICAgICBzcHJlYWQoZWR1Y2F0aW9uLCBuKQogIH0KICAKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIsICJzdHVkeSAzIikpewogICAgc3RvcCgiRWR1Y2F0aW9uIGluZm9ybWF0aW9uIG5vdCBhdmFpbGFibGUgZm9yIFN0dWRpZXMgMS0zIikKICB9IGVsc2Uge3JldHVybihlZHVjYXRpb24pfQp9CgojIHBsb3R0aW5nIGZ1bmN0aW9ucwptYWtlRmFjZXRMYWJzIDwtIGZ1bmN0aW9uKGRmX3Bsb3R0aW5nKSB7CiAgZmFjZXRfbGFiZWxzIDwtIGFycmF5KCkKICBkZl9wbG90dGluZyA8LSBkZl9wbG90dGluZyAlPiUgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24pKQogIGZvcihpIGluIDE6bGVuZ3RoKGxldmVscyhkZl9wbG90dGluZyRjb25kaXRpb24pKSkgewogICAgZGYgPC0gZGZfcGxvdHRpbmcgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gbGV2ZWxzKGRmX3Bsb3R0aW5nJGNvbmRpdGlvbilbaV0pICU+JQogICAgICBzZWxlY3QoY29uZGl0aW9uLCBuKSAlPiUgdW5pcXVlKCkKICAgIGZhY2V0X2xhYmVsc1tpXSA8LSBwYXN0ZTAoZGYkY29uZGl0aW9uLCAiIChuID0gIiwgZGYkbiwgIikiKQogIH0KICBuYW1lcyhmYWNldF9sYWJlbHMpIDwtIGxldmVscyhkZl9wbG90dGluZyRjb25kaXRpb24pCiAgcmV0dXJuKGZhY2V0X2xhYmVscykKfQpgYGAKCmBgYHtyIG1vZGVsaW5nIGRlY2lzaW9uc30KIyByZW1vdmUgb3V0bGllcnM/CmNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAia2VlcCIKIyBjaG9zZW5PdXRsaWVySGFuZGxpbmcgPC0gInJlbW92ZSIKCiMgZXhjbHVkZSBhbnkgY29uZGl0aW9ucyBpbiBzdHVkeSA0PwpjaG9zZW5FeGNsdWRlIDwtICJub25lIgojIGNob3NlbkV4Y2x1ZGUgPC0gYygic3RhcGxlciIsICJjYXIiLCAiY29tcHV0ZXIiKQoKIyBleGNsdWRlIGFueSBpdGVtcz8KY2hvc2VuRXhjbHVkZUl0ZW0gPC0gIm5vbmUiCiMgY2hvc2VuRXhjbHVkZUl0ZW0gPC0gImNvbXB1dGF0aW9ucyIKCiMgTk9URTogYWx3YXlzIGNob29zZSBtaW5pbWFsIHJlc2lkdWFsIChmbSA9ICJtaW5yZXMiKSBpbnN0ZWFkIG9mIE1MIGJlY2F1c2Ugb2Ygbm9uLW5vcm1hbGl0eQoKIyBmb3IgRUZBcywgd2hhdCBraW5kIG9mIGNvcnJlbGF0aW9uPwpjaG9zZW5Db3JUeXBlIDwtICJjb3IiICMgcGVhcnNvbiBjb3JyZWxhdGlvbgojIGNob3NlbkNvclR5cGUgPC0gInBvbHkiICMgcG9seWNob3JpYyBjb3JyZWxhdGlvbgoKIyBmb3IgRUZBcywgd2hhdCBraW5kIG9mIHJvdGF0aW9uPwpjaG9zZW5Sb3RUeXBlIDwtICJ2YXJpbWF4IiAjIHZhcmltYXggcm90YXRpb24KIyBjaG9zZW5Sb3RUeXBlIDwtICJvYmxpbWluIiAjIG9ibGltaW4gcm90YXRpb24KIyBjaG9zZW5Sb3RUeXBlIDwtICJub25lIiAjIG5vIHJvdGF0aW9uCgpkYXRhLmZyYW1lKCJjb25kaXRpb25zRXhjbHVkZWQiID0gY2hvc2VuRXhjbHVkZSwKICAgICAgICAgICAib3V0bGllckhhbmRsaW5nIiA9IGNob3Nlbk91dGxpZXJIYW5kbGluZywKICAgICAgICAgICAiRUZBX2NvcnJlbGF0aW9uIiA9IGNob3NlbkNvclR5cGUsCiAgICAgICAgICAgIkVGQV9yb3RhdGlvbiIgPSBjaG9zZW5Sb3RUeXBlKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIERhdGEgcHJlcGFyYXRpb24KCmBgYHtyIGRhdGEgdXBsb2FkLCBpbmNsdWRlID0gRn0KIyBzdHVkeSAxICgyMDE1LTEyLTE1LCAyIGNvbmRpdGlvbnMsIGJldHdlZW4tc3ViamVjdHMpCmRfcmF3X3N0dWR5MSA8LSByZWFkLmNzdigiaHR0cHM6Ly9vc2YuaW8vMjl2bmcvZG93bmxvYWQiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMSIpCgojIHN0dWR5IDIgKDIwMTYtMDEtMTIsIDIgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cyAtIFJFUExJQ0FUSU9OKQpkX3Jhd19zdHVkeTIgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvL2c3NmhqL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDIiKQoKIyBzdHVkeSAzICgyMDE2LTAxLTEwLCAyIGNvbmRpdGlvbnMsIHdpdGhpbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHkzIDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9lcHlrZi9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAzIikKCiMgc3R1ZHkgNCAoMjAxNi0wMS0xNCwgMjEgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHk0IDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby9rZHpnZS9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSA0IikKYGBgCgpgYGB7ciBkYXRhIGNsZWFudXAsIGluY2x1ZGUgPSBGLCB3YXJuaW5ncyA9IEYsIGVjaG8gPSBGfQojIGNsZWFuIHVwIGRhdGFzZXRzCmQxIDwtIGNsZWFudXAoInN0dWR5IDEiKQpkMiA8LSBjbGVhbnVwKCJzdHVkeSAyIikKZDMgPC0gY2xlYW51cCgic3R1ZHkgMyIpCmQ0IDwtIGNsZWFudXAoInN0dWR5IDQiKQpgYGAKCmBgYHtyIGRhdGFmcmFtZXMgZm9yIGRpbWVuc2lvbiByZWR1Y2F0aW9uLCBpbmNsdWRlID0gRn0KIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHMxCiMgZDFfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAxIiwgImJlZXRsZSIpCiMgZDFfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDEiLCAicm9ib3QiKQpkMV9hbGwgPC0gbWFrZURSREYoInN0dWR5IDEiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSAyCiMgZDJfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAyIiwgImJlZXRsZSIpCiMgZDJfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDIiLCAicm9ib3QiKQpkMl9hbGwgPC0gbWFrZURSREYoInN0dWR5IDIiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSAzCiMgZDNfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgImJlZXRsZSIpCiMgZDNfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDMiLCAicm9ib3QiKQpkM19hbGwgPC0gbWFrZURSREYoInN0dWR5IDMiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSA0CmQ0X2FsbCA8LSBtYWtlRFJERigic3R1ZHkgNCIsICJhbGwiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIEFuYWx5c2lzIHBsYW4KCkZvciBhbGwgc3R1ZGllcyB3ZSBjb25kdWN0IGV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNlcyB1c2luZyBQZWFyc29uIGNvcnJlbGF0aW9ucyB0byBmaW5kIG1pbmltdW0gcmVzaWR1YWwgc29sdXRpb25zLiAKCkZvciBlYWNoIHN0dWR5LCB3ZSBmaXJzdCBleGFtaW5lIG1heGltYWwgdW5yb3RhdGVkIGFuZCByb3RhdGVkIHNvbHV0aW9ucy4gVG8gZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmYWN0b3JzIHRvIGV4dHJhY3QsIHdlIHVzZSB0aGUgZm9sbG93aW5nIHJ1bGUgb2YgdGh1bWI6IFdpdGggJHAkIG9ic2VydmF0aW9ucyBwZXIgcGFydGljaXBhbnQsIHdlIGNhbiBleHRyYWN0IGEgbWF4aW11bSBvZiAkayQgZmFjdG9ycywgd2hlcmUgJChwLWspKjIgPiBwK2skLCBpLmUuLCAkayA8IHAvMyQuIFRodXMsIHdpdGggNDAgbWVudGFsIGNhcGFjaXR5IGl0ZW1zLCB3ZSBjYW4gZXh0cmFjdCBhIG1heGltdW0gb2YgMTMgZmFjdG9ycy4KClRvIGRldGVybWluZSBob3cgbWFueSBmYWN0b3JzIHRvIHJldGFpbiwgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlc2V0IHJldGVudGlvbiBjcml0ZXJpYSwgY29uc2lkZXJpbmcgdGhlIHVucm90YXRlZCBtYXhpbWFsIHNvbHV0aW9uICh1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkKToKCiAgLSBFYWNoIGZhY3RvciBtdXN0IGhhdmUgYW4gZWlnZW52YWx1ZSA+MS4wLgogIC0gRWFjaCBmYWN0b3IgbXVzdCBpbmRpdmlkdWFsbHkgYWNjb3VudCBmb3IgPjUlIG9mIHRoZSB0b3RhbCB2YXJpYW5jZSBpbiB0aGUgbWF4aW1hbCBtb2RlbC4KICAtIEFmdGVyIHJvdGF0aW9uLCBlYWNoIGZhY3RvciBtdXN0IGJlIHRoZSBkb21pbmFudCBmYWN0b3IgKGkuZS4sIHRoZSBmYWN0b3Igd2l0aCB0aGUgaGlnaGVzdCBmYWN0b3IgbG9hZGluZykgZm9yIOKJpTEgbWVudGFsIGNhcGFjaXR5IGl0ZW0uCgpXZSB0aGVuIGV4YW1pbmUgYW5kIGludGVycHJldCB2YXJpbWF4LXJvdGF0ZWQgc29sdXRpb25zLCBleHRyYWN0aW5nIG9ubHkgdGhlIG51bWJlciBvZiBmYWN0b3JzIHRoYXQgbWVldCB0aGVzZSBjcml0ZXJpYS4KCipOb3RlKjogRm9yIFN0dWRpZXMgMS0yLCB3ZSBpbml0aWFsbHkgcGxhbm5lZCB0byBjb25kdWN0IGRpbWVuc2lvbiByZWR1Y3Rpb24gYW5hbHlzZXMgZm9yIGVhY2ggY29uZGl0aW9uIChiZWV0bGUgdnMuIHJvYm90KSBzZXBhcmF0ZWx5LiBIb3dldmVyLCB3ZSBub3cgY29uc2lkZXIgdGhpcyBhbmFseXNpcyBwbGFuIHRvIGhhdmUgYmVlbiBmdW5kYW1lbnRhbGx5IGZsYXdlZDogRWFjaCBvZiB0aGVzZSBzZXBhcmF0ZSBhbmFseXNlcyBpcyBvbmx5IGNhcGFibGUgb2Ygc3VyZmFjaW5nIGZhY3RvcnMgdGhhdCBoaWdobGlnaHQgc3Vic3RhbnRpYWwgZGlzYWdyZWVtZW50IGFtb25nIHBhcnRpY2lwYW50cyB3aXRoaW4gdGhhdCBjb25kaXRpb24gdGh1cyBmYWlsaW5nIHRvIGNhcHR1cmUga2V5IGRpZmZlcmVuY2VzIGluIGF0dHJpYnV0aW9ucyBvZiBtZW50YWwgY2FwYWNpdGllcyB0byBiZWV0bGVzIHZzLiByb2JvdHMsIHdpdGggbm8gZm9ybWFsIG1lYW5zIG9mIHN5bnRoZXNpemluZyByZXN1bHRzIGFjcm9zcyBjb25kaXRpb25zLiBOb25ldGhlbGVzcywgdGhlIHJlc3VsdHMgb2YgdGhlc2UgYW5hbHlzZXMgYXJlIGdlbmVyYWxseSBjb25zaXN0ZW50IHdpdGggdGhlIGZpbmRpbmdzIHJlcG9ydGVkIGhlcmU6IFRoZSBtb3N0IHByb21pbmVudCBhbmQgcmVsaWFibGUgZmluZGluZyB3aXRoaW4gZWFjaCBjb25kaXRpb24gaXMgdGhhdCBwYXJ0aWNpcGFudHMgZGlzdGluZ3Vpc2ggYmV0d2VlbiBlbW90aW9uYWwgYW5kIHBlcmNlcHR1YWwgdmFyaWV0aWVzIG9mIGV4cGVyaWVuY2UuIFNlZSA8YSBocmVmPSJodHRwczovL29zZi5pby96ZDNtdSIsIHRhcmdldD0iYmxhbmsiPmh0dHBzOi8vb3NmLmlvL3pkM211PC9hPiBmb3IgdGhlIHByZXJlZ2lzdGVyZWQgYW5hbHlzZXMsIGluY2x1ZGluZyBhbmFseXNpcyBzY3JpcHRzLgoKIyBTdHVkeSAxCgpEZXNpZ246IDIgY29uZGl0aW9ucyAoYmVldGxlLCByb2JvdCksIGJldHdlZW4tc3ViamVjdHMKRGF0ZSBjb25kdWN0ZWQ6IDIwMTUtMTItMTUKCiMjIERlbW9ncmFwaGljcwoKYGBge3IgczEgZGVtb2dyYXBoaWNzfQojIGV4YW1pbmUgZXhjbHVzaW9uCmV4Y2x1ZGVkQ291bnRzKCJzdHVkeSAxIikKCiMgbWFrZSBkZW1vZ3JhcGhpY3MgdGFibGVzCmRlbW9TYW1wbGVTaXplKCJzdHVkeSAxIikKZGVtb0R1cmF0aW9uKCJzdHVkeSAxIikKZGVtb0FnZSgic3R1ZHkgMSIpCmRlbW9HZW5kZXIoInN0dWR5IDEiKQpkZW1vUmFjZSgic3R1ZHkgMSIpCmRlbW9SZWxpZ2lvbigic3R1ZHkgMSIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKIyMjIFN0ZXAgMTogUnVuIG1heGltYWwgRUZBICh3aXRob3V0IGFuZCB3aXRoIHJvdGF0aW9uKQoKYGBge3IgczEgYWxsIG5vIHJvdGF0aW9ufQojIGV4YW1pbmUgc2NyZWUgcGxvdAojIGZhLnBhcmFsbGVsKGQxX2FsbCkKCiMgcnVuIEVGQSB3aXRob3V0IHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMV9hbGxfdW5yb3RhdGVkIDwtIGZhKGQxX2FsbCwgMTMsIHJvdGF0ZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QxX2FsbF91bnJvdGF0ZWQpCmBgYAoKYGBge3IgczEgaG93IG1hbnkgZmFjdG9ycywgaW5jbHVkZSA9IEZ9CiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9kMV9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9kMV9hbGxfdW5yb3RhdGVkKSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2QxX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMgPC0gZWZhX2QxX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfZDFfYWxsX3Vucm90YXRlZF9uZmFjdG9ycwpgYGAKCmBgYHtyIHMxIGFsbCByb3RhdGlvbn0KZWZhX2QxX2FsbF9yb3RhdGVkX21heCA8LSBmYShkMV9hbGwsIDEzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKZWZhX2QxX2FsbF9yb3RhdGVkIDwtIGZhKGQxX2FsbCwgZWZhX2QxX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgojIGNoZWNrIHRoYXQgZWFjaCBvZiB0aGVzZSBmYWN0b3JzIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfZDFfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgPC0gZmEuc29ydChsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWQpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUobG9hZGluZ19hYnMgPSBhYnMobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nX2FicykgJT4lCiAgdW5ncm91cCgpCmVmYV9kMV9hbGxfcm90YXRlZF9sb2FkaW5ncwoKIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCmVmYV9kMV9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKQoKIyBzZXQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdApuZmFjdG9yc19kMV9hbGwgPC0gZWZhX2QxX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApICU+JQogIG5yb3coKQpuZmFjdG9yc19kMV9hbGwKYGBgCgojIyMgU3RlcCAyOiBSdW4gRUZBIHdpdGggdmFyaW1heCByb3RhdGlvbgoKYGBge3IgczEgYWxsIHZhcmltYXggcm90YXRpb259CiMgcnVuIEVGQSB3aXRoIHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMV9hbGxfcm90YXRlZE4gPC0gZmEoZDFfYWxsLCBuZmFjdG9yc19kMV9hbGwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kMV9hbGxfcm90YXRlZE4pCgojIGdldCBsb2FkaW5ncyBmb3IgZWFjaCBmYWN0b3IKZWZhX2QxX2FsbF9yb3RhdGVkTl9sb2FkaW5ncyA8LSBsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIyMgRmFjdG9yIGxvYWRpbmdzIHRhYmxlCgpgYGB7ciBzMSBsb2FkaW5ncyB0YWJsZX0KZGF0YS5mcmFtZShsb2FkaW5ncyhmYS5zb3J0KGVmYV9kMV9hbGxfcm90YXRlZE4pKVtdKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk0iKSksIGZ1bnMocm91bmQyKSkKYGBgCgojIFN0dWR5IDIKCkRlc2lnbjogMiBjb25kaXRpb25zIChiZWV0bGUsIHJvYm90KSwgYmV0d2Vlbi1zdWJqZWN0cyAocmVwbGljYXRpb24gb2YgU3R1ZHkgMSkKRGF0ZSBjb25kdWN0ZWQ6IDIwMTYtMDEtMTIKCiMjIERlbW9ncmFwaGljcwoKYGBge3IgczIgZGVtb2dyYXBoaWNzfQojIGV4YW1pbmUgZXhjbHVzaW9uCmV4Y2x1ZGVkQ291bnRzKCJzdHVkeSAyIikKCiMgbWFrZSBkZW1vZ3JhcGhpY3MgdGFibGVzCmRlbW9TYW1wbGVTaXplKCJzdHVkeSAyIikKZGVtb0R1cmF0aW9uKCJzdHVkeSAyIikKZGVtb0FnZSgic3R1ZHkgMiIpCmRlbW9HZW5kZXIoInN0dWR5IDIiKQpkZW1vUmFjZSgic3R1ZHkgMiIpCmRlbW9SZWxpZ2lvbigic3R1ZHkgMiIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKIyMjIFN0ZXAgMTogUnVuIG1heGltYWwgRUZBICh3aXRob3V0IGFuZCB3aXRoIHJvdGF0aW9uKQoKYGBge3IgczIgYWxsIG5vIHJvdGF0aW9ufQojIGV4YW1pbmUgc2NyZWUgcGxvdAojIGZhLnBhcmFsbGVsKGQyX2FsbCkKCiMgcnVuIEVGQSB3aXRob3V0IHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMl9hbGxfdW5yb3RhdGVkIDwtIGZhKGQyX2FsbCwgMTMsIHJvdGF0ZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QyX2FsbF91bnJvdGF0ZWQpCmBgYAoKYGBge3IgczIgaG93IG1hbnkgZmFjdG9ycywgaW5jbHVkZSA9IEZ9CiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9kMl9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9kMl9hbGxfdW5yb3RhdGVkKSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2QyX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMgPC0gZWZhX2QyX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfZDJfYWxsX3Vucm90YXRlZF9uZmFjdG9ycwpgYGAKCmBgYHtyIHMyIGFsbCByb3RhdGlvbn0KZWZhX2QyX2FsbF9yb3RhdGVkX21heCA8LSBmYShkMl9hbGwsIDEzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKZWZhX2QyX2FsbF9yb3RhdGVkIDwtIGZhKGQyX2FsbCwgZWZhX2QyX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgojIGNoZWNrIHRoYXQgZWFjaCBvZiB0aGVzZSBmYWN0b3JzIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfZDJfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgPC0gZmEuc29ydChsb2FkaW5ncyhlZmFfZDJfYWxsX3JvdGF0ZWQpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUobG9hZGluZ19hYnMgPSBhYnMobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nX2FicykgJT4lCiAgdW5ncm91cCgpCmVmYV9kMl9hbGxfcm90YXRlZF9sb2FkaW5ncwoKIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCmVmYV9kMl9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKQoKIyBzZXQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdApuZmFjdG9yc19kMl9hbGwgPC0gZWZhX2QyX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApICU+JQogIG5yb3coKQpuZmFjdG9yc19kMl9hbGwKYGBgCgojIyMgU3RlcCAyOiBSdW4gRUZBIHdpdGggdmFyaW1heCByb3RhdGlvbgoKYGBge3IgczIgYWxsIHZhcmltYXggcm90YXRpb259CiMgcnVuIEVGQSB3aXRoIHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMl9hbGxfcm90YXRlZE4gPC0gZmEoZDJfYWxsLCBuZmFjdG9yc19kMl9hbGwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kMl9hbGxfcm90YXRlZE4pCgojIGdldCBsb2FkaW5ncyBmb3IgZWFjaCBmYWN0b3IKZWZhX2QyX2FsbF9yb3RhdGVkTl9sb2FkaW5ncyA8LSBsb2FkaW5ncyhlZmFfZDJfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIyMgRmFjdG9yIGxvYWRpbmdzIHRhYmxlCgpgYGB7ciBzMiBsb2FkaW5ncyB0YWJsZX0KZGF0YS5mcmFtZShsb2FkaW5ncyhmYS5zb3J0KGVmYV9kMl9hbGxfcm90YXRlZE4pKVtdKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk0iKSksIGZ1bnMocm91bmQyKSkKYGBgCgojIFN0dWR5IDMgCgpEZXNpZ246IDIgY29uZGl0aW9ucyAoYmVldGxlLCByb2JvdCksIHdpdGhpbi1zdWJqZWN0cwpEYXRlIGNvbmR1Y3RlZDogMjAxNi0wMS0xMAoKIyMgRGVtb2dyYXBoaWNzCgpgYGB7ciBzMyBkZW1vZ3JhcGhpY3N9CiMgZXhhbWluZSBleGNsdXNpb24KZXhjbHVkZWRDb3VudHMoInN0dWR5IDMiKQoKIyBtYWtlIGRlbW9ncmFwaGljcyB0YWJsZXMKZGVtb1NhbXBsZVNpemUoInN0dWR5IDMiKQpkZW1vRHVyYXRpb24oInN0dWR5IDMiKQpkZW1vQWdlKCJzdHVkeSAzIikKZGVtb0dlbmRlcigic3R1ZHkgMyIpCmRlbW9SYWNlKCJzdHVkeSAzIikKZGVtb1JlbGlnaW9uKCJzdHVkeSAzIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgU3RlcCAxOiBSdW4gbWF4aW1hbCBFRkEgKHdpdGhvdXQgYW5kIHdpdGggcm90YXRpb24pCgpgYGB7ciBzMyBhbGwgbm8gcm90YXRpb259CiMgZXhhbWluZSBzY3JlZSBwbG90CiMgZmEucGFyYWxsZWwoZDNfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QzX2FsbF91bnJvdGF0ZWQgPC0gZmEoZDNfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDNfYWxsX3Vucm90YXRlZCkKYGBgCgpgYGB7ciBzMyBob3cgbWFueSBmYWN0b3JzLCBpbmNsdWRlID0gRn0KIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2QzX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2QzX2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDNfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDNfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kM19hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczMgYWxsIHJvdGF0aW9ufQplZmFfZDNfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQzX2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDNfYWxsX3JvdGF0ZWQgPC0gZmEoZDNfYWxsLCBlZmFfZDNfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kM19hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kM19hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2QzX2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2QzX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2QzX2FsbCA8LSBlZmFfZDNfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2QzX2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzMyBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QzX2FsbF9yb3RhdGVkTiA8LSBmYShkM19hbGwsIG5mYWN0b3JzX2QzX2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QzX2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDNfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kM19hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHMzIGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QzX2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMgU3R1ZHkgNAoKRGVzaWduOiAyMSBjb25kaXRpb25zLCBiZXR3ZWVuLXN1YmplY3RzCkRhdGUgY29uZHVjdGVkOiAyMDE2LTAxLTE0CgojIyBEZW1vZ3JhcGhpY3MKCmBgYHtyIHM0IGRlbW9ncmFwaGljc30KIyBleGFtaW5lIGV4Y2x1c2lvbgpleGNsdWRlZENvdW50cygic3R1ZHkgNCIpCgojIG1ha2UgZGVtb2dyYXBoaWNzIHRhYmxlcwpkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgNCIpCmRlbW9EdXJhdGlvbigic3R1ZHkgNCIpCmRlbW9BZ2UoInN0dWR5IDQiKQpkZW1vR2VuZGVyKCJzdHVkeSA0IikKZGVtb1JhY2UoInN0dWR5IDQiKQpkZW1vRWR1Y2F0aW9uKCJzdHVkeSA0IikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgU3RlcCAxOiBSdW4gbWF4aW1hbCBFRkEgKHdpdGhvdXQgYW5kIHdpdGggcm90YXRpb24pCgpgYGB7ciBzNCBhbGwgbm8gcm90YXRpb259CiMgZXhhbWluZSBzY3JlZSBwbG90CiMgZmEucGFyYWxsZWwoZDRfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2Q0X2FsbF91bnJvdGF0ZWQgPC0gZmEoZDRfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDRfYWxsX3Vucm90YXRlZCkKYGBgCgpgYGB7ciBzNCBob3cgbWFueSBmYWN0b3JzLCBpbmNsdWRlID0gRn0KIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2Q0X2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2Q0X2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDRfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDRfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kNF9hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczQgYWxsIHJvdGF0aW9ufQplZmFfZDRfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQ0X2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDRfYWxsX3JvdGF0ZWQgPC0gZmEoZDRfYWxsLCBlZmFfZDRfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kNF9hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kNF9hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2Q0X2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2Q0X2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2Q0X2FsbCA8LSBlZmFfZDRfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2Q0X2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzNCBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2Q0X2FsbF9yb3RhdGVkTiA8LSBmYShkNF9hbGwsIG5mYWN0b3JzX2Q0X2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2Q0X2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDRfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kNF9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm1jIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHM0IGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2Q0X2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMgQmlnIGZhY3RvciBsb2FkaW5ncyB0YWJsZSBmb3IgYWxsIHN0dWRpZXMgKFN0dWRpZXMgMS00KQoKYGBge3IgYWxsIHN0dWRpZXMgbG9hZGluZ3MgdGFibGV9Cm9yZGVyX3MxIDwtIGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QxX2FsbF9yb3RhdGVkTikpW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAibWMiKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm9yZGVyMSIpICU+JQogIHJlbmFtZShzMV9NUjEgPSBNUjEsIHMxX01SMiA9IE1SMiwgczFfTVIzID0gTVIzKQoKb3JkZXJfczIgPC0gbG9hZGluZ3MoZmEuc29ydChlZmFfZDJfYWxsX3JvdGF0ZWROKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpICU+JQogIHJlbmFtZShzMl9NUjEgPSBNUjEsIHMyX01SMiA9IE1SMiwgczJfTVIzID0gTVIzKQoKb3JkZXJfczMgPC0gbG9hZGluZ3MoZmEuc29ydChlZmFfZDNfYWxsX3JvdGF0ZWROKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJtYyIpICU+JQogIHJlbmFtZShzM19NUjEgPSBNUjMsIHMzX01SMiA9IE1SMSwgczNfTVIzID0gTVIyKSAjIG5vdGUgZGlzY3JlcGFuY3kKCm9yZGVyX3M0IDwtIGxvYWRpbmdzKGZhLnNvcnQoZWZhX2Q0X2FsbF9yb3RhdGVkTikpW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAibWMiKSAlPiUKICByZW5hbWUoczRfTVIxID0gTVIxLCBzNF9NUjIgPSBNUjIsIHM0X01SMyA9IE1SMykKCmJpZ1RhYmxlIDwtIG9yZGVyX3MxICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMikgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3MzKSAlPiUKICBmdWxsX2pvaW4ob3JkZXJfczQpICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJzIikpLCBmdW5zKHJvdW5kMikpICU+JQogIHNlbGVjdChvcmRlcjEsIG1jLCBlbmRzX3dpdGgoIk1SMSIpLCBlbmRzX3dpdGgoIk1SMiIpLCBlbmRzX3dpdGgoIk1SMyIpKQoKYmlnVGFibGUKYGBgCgojIEZpZ3VyZXMKCmBgYHtyIHBsb3R0aW5nIHNldHVwIGNoYXJhY3RlciBtZWFucywgaW5jbHVkZSA9IEZ9CiMgYm9vdHN0cmFwIDk1JSBDSXMgZm9yIHJhdGluZ3MgYnkgY2hhcmFjdGVyIChub25wYXJhbWV0cmljKQojIHN0dWR5IDEKY2hhcl9wbG90dGluZ19yYXRpbmdzX3MxIDwtIGQxICU+JSAKICBzZWxlY3QoY29uZGl0aW9uLCBzdWJpZCwgaGFwcHk6cHJpZGUpICU+JQogIGdhdGhlcihtYywgcmVzcG9uc2UsIC1zdWJpZCwgLWNvbmRpdGlvbikgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gYXMubnVtZXJpYyhyZXNwb25zZSkpICU+JQogIGdyb3VwX2J5KGNvbmRpdGlvbiwgbWMpICU+JQogIGRvKGRhdGEuZnJhbWUocmJpbmQoc21lYW4uY2wuYm9vdCguJHJlc3BvbnNlKSkpKSAlPiUKICBmdWxsX2pvaW4oZGVtb1NhbXBsZVNpemUoInN0dWR5IDEiKSAlPiUgZmlsdGVyKGNvbmRpdGlvbiAhPSAiYWxsIikpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxIikKCiMgc3R1ZHkgMgpjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczIgPC0gZDIgJT4lIAogIHNlbGVjdChjb25kaXRpb24sIHN1YmlkLCBoYXBweTpwcmlkZSkgJT4lCiAgZ2F0aGVyKG1jLCByZXNwb25zZSwgLXN1YmlkLCAtY29uZGl0aW9uKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYykgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kcmVzcG9uc2UpKSkpICU+JQogIGZ1bGxfam9pbihkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgMiIpICU+JSBmaWx0ZXIoY29uZGl0aW9uICE9ICJhbGwiKSkgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDIiKQoKCiMgc3R1ZHkgMwpjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczMgPC0gZDMgJT4lIAogIHNlbGVjdCh0YXJnZXQsIHN1YmlkLCBoYXBweTpwcmlkZSkgJT4lCiAgcmVuYW1lKGNvbmRpdGlvbiA9IHRhcmdldCkgJT4lCiAgZ2F0aGVyKG1jLCByZXNwb25zZSwgLXN1YmlkLCAtY29uZGl0aW9uKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYykgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kcmVzcG9uc2UpKSkpICU+JQogIGZ1bGxfam9pbihkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgMyIpICU+JSBmaWx0ZXIoY29uZGl0aW9uICE9ICJhbGwiKSkgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDMiKQoKIyBzdHVkeSA0CmNoYXJfcGxvdHRpbmdfcmF0aW5nc19zNCA8LSBkNCAlPiUgCiAgc2VsZWN0KGNvbmRpdGlvbiwgc3ViaWQsIGhhcHB5OnByaWRlKSAlPiUKICBnYXRoZXIobWMsIHJlc3BvbnNlLCAtc3ViaWQsIC1jb25kaXRpb24pICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGFzLm51bWVyaWMocmVzcG9uc2UpKSAlPiUKICBncm91cF9ieShjb25kaXRpb24sIG1jKSAlPiUKICBkbyhkYXRhLmZyYW1lKHJiaW5kKHNtZWFuLmNsLmJvb3QoLiRyZXNwb25zZSkpKSkgJT4lCiAgZnVsbF9qb2luKGRlbW9TYW1wbGVTaXplKCJzdHVkeSA0IikgJT4lIGZpbHRlcihjb25kaXRpb24gIT0gImFsbCIpKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgNCIpCmBgYAoKYGBge3IgcGxvdHRpbmcgc2V0dXAgY2hhcmFjdGVyIG1lYW5zIG1lcmdlLCBpbmNsdWRlID0gRn0KY2hhcl9wbG90dGluZ19yYXRpbmdzX2FsbCA8LSBjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczEgJT4lCiAgZnVsbF9qb2luKGNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMikgJT4lCiAgZnVsbF9qb2luKGNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMykgJT4lCiAgZnVsbF9qb2luKGNoYXJfcGxvdHRpbmdfcmF0aW5nc19zNCkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZShzdHVkeSA9IGZhY3RvcihzdHVkeSksCiAgICAgICAgIGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJzdGFwbGVyIiwgImNhciIsICJjb21wdXRlciIsICJyb2JvdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JlIiwgImJlZXRsZSIsICJmaXNoIiwgImJsdWVqYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvZyIsICJtb3VzZSIsICJnb2F0IiwgImRvZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWFyIiwgImRvbHBoaW4iLCAiZWxlcGhhbnQiLCAiY2hpbXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmV0dXMiLCAicHZzIiwgImluZmFudCIsICJjaGlsZCIsICJhZHVsdCIpKSkKYGBgCgpgYGB7ciBwbG90dGluZyBzZXR1cCBjYXBhY2l0eSB3b3JkaW5ncywgaW5jbHVkZSA9IEZ9CmNoYXJfcGxvdHRpbmdfd29yZGluZ3MgPC0gY2hhcl9wbG90dGluZ19yYXRpbmdzX2FsbCAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KG1jKSAlPiUKICBkaXN0aW5jdCgpICU+JSAKICBtdXRhdGUod29yZGluZyA9IGZhY3RvcigKICAgIHJlY29kZShtYywKICAgICAgICAgICBodW5ncnkgPSAiZ2V0dGluZyBodW5ncnkiLCBwYWluID0gImV4cGVyaWVuY2luZyBwYWluIiwKICAgICAgICAgICB0aXJlZCA9ICJmZWVsaW5nIHRpcmVkIiwgZmVhciA9ICJleHBlcmllbmNpbmcgZmVhciIsCiAgICAgICAgICAgY29tcHV0YXRpb25zID0gImRvaW5nIGNvbXB1dGF0aW9ucyIsIHBsZWFzdXJlID0gImV4cGVyaWVuY2luZyBwbGVhc3VyZSIsCiAgICAgICAgICAgY29uc2Npb3VzID0gImJlaW5nIGNvbnNjaW91cyIsIGZyZWVfd2lsbCA9ICJoYXZpbmcgZnJlZSB3aWxsIiwKICAgICAgICAgICBzYWZlID0gImZlZWxpbmcgc2FmZSIsIGRlc2lyZXMgPSAiaGF2aW5nIGRlc2lyZXMiLAogICAgICAgICAgIGNhbG0gPSAiZmVlbGluZyBjYWxtIiwgbmF1c2VhdGVkID0gImZlZWxpbmcgbmF1c2VhdGVkIiwKICAgICAgICAgICBhbmdyeSA9ICJnZXR0aW5nIGFuZ3J5IiwgaW50ZW50aW9ucyA9ICJoYXZpbmcgaW50ZW50aW9ucyIsCiAgICAgICAgICAgc2VsZl9hd2FyZSA9ICJiZWluZyBzZWxmLWF3YXJlIiwgb2RvcnMgPSAiZGV0ZWN0aW5nIG9kb3JzIiwKICAgICAgICAgICBlbWJhcnJhc3NlZCA9ICJmZWVsaW5nIGVtYmFycmFzc2VkIiwgcHJpZGUgPSAiZXhwZXJpZW5jaW5nIHByaWRlIiwKICAgICAgICAgICBsb3ZlID0gImZlZWxpbmcgbG92ZSIsIGd1aWx0ID0gImV4cGVyaWVuY2luZyBndWlsdCIsCiAgICAgICAgICAgZGVwcmVzc2VkID0gImZlZWxpbmcgZGVwcmVzc2VkIiwgZGlzcmVzcGVjdGVkID0gImZlZWxpbmcgZGlzcmVzcGVjdGVkIiwKICAgICAgICAgICBiZWxpZWZzID0gImhvbGRpbmcgYmVsaWVmcyIsIGVtb19yZWNvZyA9ICJ1bmRlcnN0YW5kaW5nIC4uLiBmZWVsaW5nIiwKICAgICAgICAgICBqb3kgPSAiZXhwZXJpZW5jaW5nIGpveSIsIHBlcnNvbmFsaXR5ID0gImhhdmluZyBhIHBlcnNvbmFsaXR5IiwKICAgICAgICAgICBoYXBweSA9ICJmZWVsaW5nIGhhcHB5IiwgbW9yYWxpdHkgPSAidGVsbGluZyByaWdodCBmcm9tIHdyb25nIiwKICAgICAgICAgICB0aG91Z2h0cyA9ICJoYXZpbmcgdGhvdWdodHMiLCBzZWxmX3Jlc3RyYWludCA9ICJleGVyY2lzaW5nIHNlbGYtcmVzdHJhaW50IiwKICAgICAgICAgICByZW1lbWJlcmluZyA9ICJyZW1lbWJlcmluZyB0aGluZ3MiLCByZWNvZ25pemluZyA9ICJyZWNvZ25pemluZyBvdGhlcnMiLAogICAgICAgICAgIHRlbXBlcmF0dXJlID0gInNlbnNpbmcgdGVtcGVyYXR1cmVzIiwgY29tbXVuaWNhdGluZyA9ICJjb21tdW5pY2F0aW5nIC4uLiIsCiAgICAgICAgICAgZ29hbCA9ICJ3b3JraW5nIHRvd2FyZCBhIGdvYWwiLCBkZXB0aCA9ICJwZXJjZWl2aW5nIGRlcHRoIiwKICAgICAgICAgICBzb3VuZHMgPSAiZGV0ZWN0aW5nIHNvdW5kcyIsIHNlZWluZyA9ICJzZWVpbmcgdGhpbmdzIiwKICAgICAgICAgICBjaG9pY2VzID0gIm1ha2luZyBjaG9pY2VzIiwgcmVhc29uaW5nID0gInJlYXNvbmluZyBhYm91dCB0aGluZ3MiKSkpCmBgYAoKYGBge3IgcGxvdHRpbmcgc2V0dXAgbG9hZGluZ3MsIGluY2x1ZGUgPSBGfQojIG1lcmdlIHdpdGggbG9hZGluZ3MsIG9yZGVyaW5ncywgYW5kIGRvbWluYW50IGZhY3RvcnMgZnJvbSBlYWNoIHN0dWR5IApjaGFyX3Bsb3R0aW5nIDwtIGNoYXJfcGxvdHRpbmdfcmF0aW5nc19hbGwgJT4lCiAgZnVsbF9qb2luKGNoYXJfcGxvdHRpbmdfd29yZGluZ3MpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMSAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczFfTVIxX2FicyA9IGFicyhzMV9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzMV9NUjJfYWJzID0gYWJzKHMxX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMxX01SM19hYnMgPSBhYnMoczFfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczFfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMxX01SMV9hYnMgPiBzMV9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMV9NUjFfYWJzID4gczFfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczFfTVIyX2FicyA+IHMxX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMV9NUjJfYWJzID4gczFfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMV9NUjNfYWJzID4gczFfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMV9NUjNfYWJzID4gczFfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzMV9jb2xvciA9IHJlY29kZShzMV9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSwKICAgICAgICAgICAgICAgICAgICAgczFfb3JkZXIgPSBhcy5udW1lcmljKG9yZGVyMSkpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtczFfTVIxX2FicywgLXMxX01SMl9hYnMsIC1zMV9NUjNfYWJzKSkgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3MyICU+JQogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczJfTVIxX2FicyA9IGFicyhzMl9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzMl9NUjJfYWJzID0gYWJzKHMyX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMyX01SM19hYnMgPSBhYnMoczJfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczJfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMyX01SMV9hYnMgPiBzMl9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjFfYWJzID4gczJfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczJfTVIyX2FicyA+IHMyX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjJfYWJzID4gczJfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMl9NUjNfYWJzID4gczJfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjNfYWJzID4gczJfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzMl9jb2xvciA9IHJlY29kZShzMl9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzMl9vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzMl9vcmRlciA9IGFzLm51bWVyaWMoczJfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXMyX01SMV9hYnMsIC1zMl9NUjJfYWJzLCAtczJfTVIzX2FicykpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMyAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczNfTVIxX2FicyA9IGFicyhzM19NUjEpLAogICAgICAgICAgICAgICAgICAgICBzM19NUjJfYWJzID0gYWJzKHMzX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMzX01SM19hYnMgPSBhYnMoczNfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczNfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMzX01SMV9hYnMgPiBzM19NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19NUjFfYWJzID4gczNfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczNfTVIyX2FicyA+IHMzX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19NUjJfYWJzID4gczNfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzM19NUjNfYWJzID4gczNfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19NUjNfYWJzID4gczNfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzM19jb2xvciA9IHJlY29kZShzM19mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzM19vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzM19vcmRlciA9IGFzLm51bWVyaWMoczNfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXMzX01SMV9hYnMsIC1zM19NUjJfYWJzLCAtczNfTVIzX2FicykpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zNCAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczRfTVIxX2FicyA9IGFicyhzNF9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzNF9NUjJfYWJzID0gYWJzKHM0X01SMiksCiAgICAgICAgICAgICAgICAgICAgIHM0X01SM19hYnMgPSBhYnMoczRfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczRfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHM0X01SMV9hYnMgPiBzNF9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNF9NUjFfYWJzID4gczRfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczRfTVIyX2FicyA+IHM0X01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNF9NUjJfYWJzID4gczRfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzNF9NUjNfYWJzID4gczRfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzNF9NUjNfYWJzID4gczRfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzNF9jb2xvciA9IHJlY29kZShzNF9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiNFNDFBMUMiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzNF9vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzNF9vcmRlciA9IGFzLm51bWVyaWMoczRfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXM0X01SMV9hYnMsIC1zNF9NUjJfYWJzLCAtczRfTVIzX2FicykpCgojIGNvbmZpZ3VyZSBwbG90IGxhYmVscwpsYWJlbF9kZl9zMSA8LSBjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDEiKSAlPiUgc2VsZWN0KGNvbmRpdGlvbiwgbikgJT4lIHVuaXF1ZSgpCmxhYmVsX2RmX3MyIDwtIGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMiIpICU+JSBzZWxlY3QoY29uZGl0aW9uLCBuKSAlPiUgdW5pcXVlKCkKbGFiZWxfZGZfczMgPC0gY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAzIikgJT4lIHNlbGVjdChjb25kaXRpb24sIG4pICU+JSB1bmlxdWUoKQpsYWJlbF9kZl9zNCA8LSBjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDQiKSAlPiUgc2VsZWN0KGNvbmRpdGlvbiwgbikgJT4lIHVuaXF1ZSgpCgpmYWNldExhYnNfczEgPC0gZ3N1YigiIFxcKCIsICJcbigiLCBtYWtlRmFjZXRMYWJzKGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMSIpKSkKZmFjZXRMYWJzX3MyIDwtIGdzdWIoIiBcXCgiLCAiXG4oIiwgbWFrZUZhY2V0TGFicyhjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDIiKSkpCmZhY2V0TGFic19zMyA8LSBnc3ViKCIgXFwoIiwgIlxuKCIsIG1ha2VGYWNldExhYnMoY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAzIikpKQpmYWNldExhYnNfczQgPC0gZ3N1YigiIFxcKCIsICJcbigiLCBtYWtlRmFjZXRMYWJzKGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgNCIpKSkKCiMgY29uZmlndXJlIGN1c3RvbSBwYWxldHRlCm15UGFsZXR0ZSA8LSBicmV3ZXIucGFsKDMsICJTZXQxIik7IG5hbWVzKG15UGFsZXR0ZSkgPC0gYygiQk9EWSIsICJIRUFSVCIsICJNSU5EIikKCnBhbGV0dGVfYmFzZSA8LSBjaGFyX3Bsb3R0aW5nICU+JSAKICBzZWxlY3QobWMsIGVuZHNfd2l0aCgiX2ZhY3RvciIpKSAlPiUKICBkaXN0aW5jdCgpCnBhbGV0dGVfczEgPC0gYyhyZXAobXlQYWxldHRlWyJNSU5EIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMxX2ZhY3RvciA9PSAiTUlORCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkhFQVJUIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMxX2ZhY3RvciA9PSAiSEVBUlQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJCT0RZIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMxX2ZhY3RvciA9PSAiQk9EWSIpICU+JSBjb3VudCgpKSkKcGFsZXR0ZV9zMiA8LSBjKHJlcChteVBhbGV0dGVbIk1JTkQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczJfZmFjdG9yID09ICJNSU5EIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiSEVBUlQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczJfZmFjdG9yID09ICJIRUFSVCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkJPRFkiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczJfZmFjdG9yID09ICJCT0RZIikgJT4lIGNvdW50KCkpKQpwYWxldHRlX3MzIDwtIGMocmVwKG15UGFsZXR0ZVsiTUlORCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzM19mYWN0b3IgPT0gIk1JTkQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJIRUFSVCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzM19mYWN0b3IgPT0gIkhFQVJUIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiQk9EWSJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzM19mYWN0b3IgPT0gIkJPRFkiKSAlPiUgY291bnQoKSkpCnBhbGV0dGVfczQgPC0gYyhyZXAobXlQYWxldHRlWyJNSU5EIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiTUlORCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkhFQVJUIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiSEVBUlQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJCT0RZIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiQk9EWSIpICU+JSBjb3VudCgpKSkKYGBgCgojIyBGaWd1cmUgMQoKTWVhbiByYXRpbmdzIG9mIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciBhIHN1YnNldCBvZiB0aGUgMjEgZW50aXRpZXMgaW5jbHVkZWQgaW4gU3R1ZHkgNC4gKFNlZSBGaWcuIFM1IGZvciBtZWFuIHJhdGluZ3MgZm9yIHRoZSBmdWxsIHNldCBvZiBlbnRpdGllcy4pIFBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSBzY2FsZSBmcm9tIDAgKE5vdCBhdCBhbGwgY2FwYWJsZSkgdG8gNiAoSGlnaGx5IGNhcGFibGUpLiBFcnJvciBiYXJzIGFyZSBub25wYXJhbWV0cmljIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1lbnRhbCBjYXBhY2l0aWVzIGFyZSBncm91cGVkIGFjY29yZGluZyB0byB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZyBpbiBTdHVkeSAxLiAqRG9pbmcgY29tcHV0YXRpb25zKiB3YXMgdGhlIG9ubHkgaXRlbSB0byBsb2FkIG5lZ2F0aXZlbHkgb24gaXRzIGRvbWluYW50IGZhY3RvciBpbiBhbnkgc3R1ZHkgKGFuZCBkaWQgc28gaW4gU3R1ZGllcyAxLTMpOyBpbiBTdHVkeSA0LCBpdCBsb2FkZWQgcG9zaXRpdmVseSBvbiBpdHMgZG9taW5hbnQgZmFjdG9yIChGYWN0b3IgMiwg4oCcaGVhcnTigJ0pLgoKYGBge3IgZmlndXJlIDEsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSA2fQojIG1ha2UgZGF0YWZyYW1lCnM0X3N1YnNldF9wbG90dGluZyA8LSBjaGFyX3Bsb3R0aW5nICU+JSAKICBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDQiLAogICAgICAgICBjb25kaXRpb24gJWluJSBjKCJzdGFwbGVyIiwgInJvYm90IiwgImJlZXRsZSIsICJnb2F0IiwgImVsZXBoYW50IiwgImFkdWx0IikpICU+JQogIGRpc3RpbmN0KCkKCiMgcGxvdCEgKG9yZGVyZWQgYnkgc3R1ZHkgMSBmYWN0b3IgbG9hZGluZ3MpCnM0X3N1YnNldCA8LSBnZ3Bsb3QoczRfc3Vic2V0X3Bsb3R0aW5nLCAKICAgICAgICAgICAgICAgYWVzKHggPSBNZWFuLCB5ID0gcmVvcmRlcih3b3JkaW5nLCBkZXNjKHMxX29yZGVyKSksIGNvbG91ciA9IHMxX2NvbG9yKSkgKwogIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDQpICsKICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyLCB4bWF4ID0gVXBwZXIpLCBoZWlnaHQgPSAwLCBzaXplID0gMSkgKwogIGZhY2V0X3dyYXAofiBjb25kaXRpb24sIG5jb2wgPSA2LAogICAgICAgICAgICAgbGFiZWxsZXIgPSBsYWJlbGxlcihjb25kaXRpb24gPSBmYWNldExhYnNfczQpKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChmYWNlID0gIml0YWxpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gcGFsZXR0ZV9zMSksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJcbk1lYW4gcmF0aW5nIiwKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMywgMyksCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgtMywgMywgMSksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IHNlcSgwLCA2LCAxKSkgKwogIHNjYWxlX2NvbG91cl9icmV3ZXIobmFtZSA9ICJGYWN0b3I6IiwKICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAicXVhbCIsIHBhbGV0dGUgPSA2KQoKczRfc3Vic2V0CmBgYAoKIyMgRmlndXJlIFMxIChzdXBwb3J0aW5nIG1hdGVyaWFscykKCkZhY3RvciBsb2FkaW5ncyBmb3IgdGhlIDQwIG1lbnRhbCBjYXBhY2l0aWVzIG9uIHRoZSB0aHJlZSByb3RhdGVkIGZhY3RvcnMgaW4gU3R1ZHkgMS4gSXRlbXMgYXJlIGNvbG9yZWQgYnkgdGhlaXIgZG9taW5hbnQgZmFjdG9yIGxvYWRpbmc6IEl0ZW1zIHRoYXQgbG9hZGVkIG1vc3Qgc3Ryb25nbHkgb24gdGhlIGJvZHkgZmFjdG9yIChwaHlzaW9sb2dpY2FsIHN0YXRlcyBhbmQgd2lsbCkgYXJlIGluIHJlZDsgaXRlbXMgdGhhdCBsb2FkZWQgbW9zdCBzdHJvbmdseSBvbiB0aGUgaGVhcnQgZmFjdG9yIChzb2NpYWwtZW1vdGlvbmFsIGV4cGVyaWVuY2VzIGFuZCBtb3JhbGl0eSkgYXJlIGluIGJsdWU7IGFuZCBpdGVtcyB0aGF0IGxvYWRlZCBtb3N0IHN0cm9uZ2x5IG9uIHRoZSBtaW5kIGZhY3RvciAocGVyY2VwdHVhbC1jb2duaXRpdmUgYWJpbGl0aWVzIGFuZCBnb2FsIHB1cnN1aXQpIGFyZSBpbiBncmVlbi4KCmBgYHtyIGZpZ3VyZSBTMSwgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA2fQojIHNldCB1cCBsYWJlbHMgZm9yIHBsb3QgKHNob3J0ZW5lZCB2ZXJzaW9uIG9mIG1lbnRhbCBjYXBhY2l0eSBpdGVtcykKd29yZGluZyA8LSBsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIml0ZW0iKSAlPiUKICBzZWxlY3QoaXRlbSkgJT4lCiAgbXV0YXRlKHdvcmRpbmcgPSBjKCJmZWVsaW5nIGhhcHB5IiwgImZlZWxpbmcgZGVwcmVzc2VkIiwgImV4cGVyaWVuY2luZyBmZWFyIiwKICAgICAgICAgICAgICAgICAgICAgImdldHRpbmcgYW5ncnkiLCAiZmVlbGluZyBjYWxtIiwgImRldGVjdGluZyBzb3VuZHMiLAogICAgICAgICAgICAgICAgICAgICAic2VlaW5nIHRoaW5ncyIsICJzZW5zaW5nIHRlbXBlcmF0dXJlcyIsICJkZXRlY3Rpbmcgb2RvcnMiLAogICAgICAgICAgICAgICAgICAgICAicGVyY2VpdmluZyBkZXB0aCIsICJkb2luZyBjb21wdXRhdGlvbnMiLCAiaGF2aW5nIHRob3VnaHRzIiwKICAgICAgICAgICAgICAgICAgICAgInJlYXNvbmluZyBhYm91dCB0aGluZ3MiLCAicmVtZW1iZXJpbmcgdGhpbmdzIiwgImhvbGRpbmcgYmVsaWVmcyIsCiAgICAgICAgICAgICAgICAgICAgICJnZXR0aW5nIGh1bmdyeSIsICJmZWVsaW5nIHRpcmVkIiwgImV4cGVyaWVuY2luZyBwYWluIiwKICAgICAgICAgICAgICAgICAgICAgImZlZWxpbmcgbmF1c2VhdGVkIiwgImZlZWxpbmcgc2FmZSIsICJmZWVsaW5nIGxvdmUiLAogICAgICAgICAgICAgICAgICAgICAicmVjb2duaXppbmcgc29tZW9uZSIsICJjb21tdW5pY2F0aW5nIHdpdGggb3RoZXJzIiwgImV4cGVyaWVuY2luZyBndWlsdCIsCiAgICAgICAgICAgICAgICAgICAgICJmZWVsaW5nIGRpc3Jlc3BlY3RlZCIsICJoYXZpbmcgZnJlZSB3aWxsIiwgIm1ha2luZyBjaG9pY2VzIiwKICAgICAgICAgICAgICAgICAgICAgImV4ZXJjaXNpbmcgc2VsZi1yZXN0cmFpbnQiLCAiaGF2aW5nIGludGVudGlvbnMiLCAid29ya2luZyB0b3dhcmQgYSBnb2FsIiwKICAgICAgICAgICAgICAgICAgICAgImJlaW5nIGNvbnNjaW91cyIsICJiZWluZyBzZWxmLWF3YXJlIiwgImhhdmluZyBkZXNpcmVzIiwKICAgICAgICAgICAgICAgICAgICAgImZlZWxpbmcgZW1iYXJyYXNzZWQiLCAidW5kZXJzdGFuZGluZyBob3cgb3RoZXJzIGFyZSBmZWVsaW5nIiwgCiAgICAgICAgICAgICAgICAgICAgICJleHBlcmllbmNpbmcgam95IiwgInRlbGxpbmcgcmlnaHQgZnJvbSB3cm9uZyIsICJoYXZpbmcgYSBwZXJzb25hbGl0eSIsCiAgICAgICAgICAgICAgICAgICAgICJleHBlcmllbmNpbmcgcGxlYXN1cmUiLCAiZXhwZXJpZW5jaW5nIHByaWRlIiksCiAgICAgICAgIHNob3J0ID0gYygiaGFwcGluZXNzIiwgImRlcHJlc3Npb24iLCAiZmVhciIsCiAgICAgICAgICAgICAgICAgICAiYW5nZXIiLCAiY2FsbSIsICJzb3VuZCIsCiAgICAgICAgICAgICAgICAgICAic2lnaHQiLCAidGVtcGVyYXR1cmUiLCAib2RvciIsCiAgICAgICAgICAgICAgICAgICAiZGVwdGgiLCAiY29tcHV0YXRpb24iLCAidGhvdWdodCIsCiAgICAgICAgICAgICAgICAgICAicmVhc29uaW5nIiwgIm1lbW9yeSIsICJiZWxpZWYiLAogICAgICAgICAgICAgICAgICAgImh1bmdlciIsICJ0aXJlZG5lc3MiLCAicGFpbiIsCiAgICAgICAgICAgICAgICAgICAibmF1c2VhIiwgInNhZmV0eSIsICJsb3ZlIiwKICAgICAgICAgICAgICAgICAgICJyZWNvZ25pdGlvbiIsICJjb21tdW5pY2F0aW9uIiwgImd1aWx0IiwKICAgICAgICAgICAgICAgICAgICJkaXNyZXNwZWN0IiwgImZyZWUgd2lsbCIsICJjaG9pY2UiLAogICAgICAgICAgICAgICAgICAgInNlbGYtcmVzdHJhaW50IiwgImludGVudGlvbiIsICJnb2FsIiwKICAgICAgICAgICAgICAgICAgICJjb25zY2lvdXNuZXNzIiwgInNlbGYtYXdhcmVuZXNzIiwgImRlc2lyZSIsCiAgICAgICAgICAgICAgICAgICAiZW1iYXJyYXNzbWVudCIsICJlbXBhdGh5IiwgCiAgICAgICAgICAgICAgICAgICAiam95IiwgIm1vcmFsaXR5IiwgInBlcnNvbmFsaXR5IiwKICAgICAgICAgICAgICAgICAgICJwbGVhc3VyZSIsICJwcmlkZSIpKQoKIyBtYWtlIGRhdGFmcmFtZSBmb3IgcGxvdHRpbmcKc2NhdHRlcl9wbG90dGluZyA8LSBsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIml0ZW0iKSAlPiUKICByZW5hbWUoQk9EWSA9IE1SMSwKICAgICAgICAgSEVBUlQgPSBNUjIsCiAgICAgICAgIE1JTkQgPSBNUjMpICU+JQogIGZ1bGxfam9pbih3b3JkaW5nKSAlPiUKICBtdXRhdGUoZG9taW5hbnQgPSBmYWN0b3IoCiAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEJPRFkpLCAiQk9EWSIsCiAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhIRUFSVCksICJIRUFSVCIsCiAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoTUlORCksICJNSU5EIiwKICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSwKICAgIHNpemUgPSBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEJPRFkpLCBhYnMoQk9EWSksCiAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoSEVBUlQpLCBhYnMoSEVBUlQpLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhNSU5EKSwgYWJzKE1JTkQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgY29sb3IgPSBpZmVsc2UoZG9taW5hbnQgPT0gIkJPRFkiLCAiI2U0MWExYyIsCiAgICAgICAgICAgICAgICAgICBpZmVsc2UoZG9taW5hbnQgPT0gIkhFQVJUIiwgIiMzNzdlYjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkb21pbmFudCA9PSAiTUlORCIsICIjNGRhZjRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpCgojIHBsb3QhCmZpZ1MxIDwtIHBsb3RfbHkoZGF0YSA9IHNjYXR0ZXJfcGxvdHRpbmcsCiAgICAgICAgICAgICAgICAgeCA9IH5IRUFSVCwgeSA9IH5CT0RZLCB6ID0gfk1JTkQsCiAgICAgICAgICAgICAgICAgdHlwZSA9ICdzY2F0dGVyM2QnLAogICAgICAgICAgICAgICAgIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChvcGFjaXR5ID0gMC44LCBzaXplID0gNiksCiAgICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLAogICAgICAgICAgICAgICAgIGNvbG9yID0gfmRvbWluYW50LCBjb2xvcnMgPSBjKCIjZTQxYTFjIiwgIiMzNzdlYjgiLCAiIzRkYWY0YSIpLAogICAgICAgICAgICAgICAgIHRleHQgPSB+d29yZGluZykKZmlnUzEKYGBgCgojIyBGaWd1cmUgUzIgKHN1cHBvcnRpbmcgbWF0ZXJpYWxzKQoKTWVhbiByYXRpbmdzIG9mIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciB0aGUgMiBlbnRpdGllcyBpbmNsdWRlZCBpbiBTdHVkaWVzIDEtMy4gUGFydGljaXBhbnRzIHJlc3BvbmRlZCBvbiBhIHNjYWxlIGZyb20gMCAoTm90IGF0IGFsbCBjYXBhYmxlKSB0byA2IChIaWdobHkgY2FwYWJsZSkuIEVycm9yIGJhcnMgYXJlIG5vbnBhcmFtZXRyaWMgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscy4gTWVudGFsIGNhcGFjaXRpZXMgYXJlIGdyb3VwZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGRvbWluYW50IGZhY3RvciBsb2FkaW5nIGluIFN0dWR5IDEuCgpgYGB7ciBmaWd1cmUgUzIsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSAxMn0KIyBtYWtlIGRhdGFmcmFtZQpzMTIzX3Bsb3R0aW5nIDwtIGNoYXJfcGxvdHRpbmcgJT4lIAogIGZpbHRlcihzdHVkeSAhPSAic3R1ZHkgNCIpICU+JQogIGRpc3RpbmN0KCkKCiMgcGxvdCEgKG9yZGVyZWQgYnkgc3R1ZHkgMyBmYWN0b3IgbG9hZGluZ3MpCnMxMjMgPC0gZ2dwbG90KHMxMjNfcGxvdHRpbmcsIAogICAgICAgICAgICAgICBhZXMoeSA9IE1lYW4sIHggPSByZW9yZGVyKHdvcmRpbmcsIGRlc2MoczFfb3JkZXIpKSwgY29sb3VyID0gczFfY29sb3IsCiAgICAgICAgICAgICAgICAgICBzaGFwZSA9IHN0dWR5KSkgKwogIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpLCBzaXplID0gNCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyKSwgd2lkdGggPSAwLCBzaXplID0gMSwKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjgpKSArCiAgZmFjZXRfd3JhcCh+IGNvbmRpdGlvbikgKwogIHRoZW1lX2J3KCkgKwogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlxuTWVhbiByYXRpbmciLAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0zLCAzKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKC0zLCAzLCAxKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gc2VxKDAsIDYsIDEpKSArCiAgc2NhbGVfc2hhcGVfZGlzY3JldGUobmFtZSA9ICJTdHVkeToiKSArCiAgc2NhbGVfY29sb3VyX2JyZXdlcihuYW1lID0gIkZhY3RvcjoiLAogICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJxdWFsIiwgcGFsZXR0ZSA9IDYsCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IEZBTFNFKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksCiAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJpdGFsaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSBwYWxldHRlX3MxKSwKICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpCgpzMTIzCmBgYAoKIyMgRmlndXJlIFMzIChzdXBwb3J0aW5nIG1hdGVyaWFscykKCk1lYW4gcmF0aW5ncyBvZiA0MCBtZW50YWwgY2FwYWNpdGllcyBmb3IgYWxsIDIxIGVudGl0aWVzIGluY2x1ZGVkIGluIFN0dWR5IDQuIFBhcnRpY2lwYW50cyByZXNwb25kZWQgb24gYSBzY2FsZSBmcm9tIDAgKE5vdCBhdCBhbGwgY2FwYWJsZSkgdG8gNiAoSGlnaGx5IGNhcGFibGUpLiBFcnJvciBiYXJzIGFyZSBub25wYXJhbWV0cmljIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1lbnRhbCBjYXBhY2l0aWVzIGFyZSBncm91cGVkIGFjY29yZGluZyB0byB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZyBpbiBTdHVkeSA0LgoKYGBge3IgZmlndXJlIFMzLCBmaWcud2lkdGggPSAxOCwgZmlnLmhlaWdodCA9IDZ9CiMgbWFrZSBkYXRhZnJhbWUKczRfcGxvdHRpbmcgPC0gY2hhcl9wbG90dGluZyAlPiUgCiAgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSA0IikgJT4lCiAgZGlzdGluY3QoKQoKIyBwbG90ISAob3JkZXJlZCBieSBzdHVkeSA0IGZhY3RvciBsb2FkaW5ncykKczQgPC0gZ2dwbG90KHM0X3Bsb3R0aW5nLCAKICAgICAgICAgICAgICAgYWVzKHggPSBNZWFuLCB5ID0gcmVvcmRlcih3b3JkaW5nLCBkZXNjKHM0X29yZGVyKSksIGNvbG91ciA9IHM0X2NvbG9yKSkgKwogIGdlb21fcG9pbnQoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDQpICsKICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IExvd2VyLCB4bWF4ID0gVXBwZXIpLCBoZWlnaHQgPSAwLCBzaXplID0gMSkgKwogIGZhY2V0X3dyYXAofiBjb25kaXRpb24sIG5jb2wgPSAyMSwKICAgICAgICAgICAgIGxhYmVsbGVyID0gbGFiZWxsZXIoY29uZGl0aW9uID0gZmFjZXRMYWJzX3M0KSkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJpdGFsaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9IHBhbGV0dGVfczQpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiXG5NZWFuIHJhdGluZyIsCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTMsIDMpLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzZXEoLTMsIDMsIDEpLAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBzZXEoMCwgNiwgMSkpICsKICBzY2FsZV9jb2xvdXJfYnJld2VyKG5hbWUgPSAiRmFjdG9yOiIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gInF1YWwiLCBwYWxldHRlID0gNikKCnM0CmBgYAoK