Warning: package ‘dplyr’ was built under R version 4.1.2
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
Loading required package: lme4
Loading required package: Matrix
Attaching package: ‘Matrix’
The following objects are masked from ‘package:tidyr’:
expand, pack, unpack
************
Welcome to afex. For support visit: http://afex.singmann.science/
- Functions for ANOVAs: aov_car(), aov_ez(), and aov_4()
- Methods for calculating p-values with mixed(): 'S', 'KR', 'LRT', and 'PB'
- 'afex_aov' and 'mixed' objects can be passed to emmeans() for follow-up tests
- NEWS: emmeans() for ANOVA models now uses model = 'multivariate' as default.
- Get and set global package options with: afex_options()
- Set orthogonal sum-to-zero contrasts globally: set_sum_contrasts()
- For example analyses see: browseVignettes("afex")
************
Attaching package: ‘afex’
The following object is masked from ‘package:lme4’:
lmer
`summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'id', 'condition'. You can override using the `.groups` argument.
`summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
H1: Perceived social controllability will be lower in the PTSD group than the control group (LE and resilient groups)
H2: Perceived social controllability will be different in the resilient group than in the LE group.
There is a significant main effect of condition, where perceived control is higher in the IC condition than the NC condition (averaged across the 3 groups). No significant main effect of group or group x condition interaction, but based on the plots, there’s a tendency for people in the PTSD group to perceive somewhat lower social control in both conditions, and people in the resilient group to perceive somewhat higher social control.
Converting to factor: group
Contrasts set to contr.sum for the following variables: group
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 153830 1 77641 53 105.0092 0.00000000000003555 ***
group 4059 2 77641 53 1.3855 0.259111
condition 2274 1 12428 53 9.6956 0.002977 **
group:condition 614 2 12428 53 1.3084 0.278842
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
condition emmean SE df lower.CL upper.CL
IC 43.0 4.05 53 34.9 51.2
NC 33.7 4.01 53 25.7 41.8
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
IC - NC 9.33 3 53 3.114 0.0030
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
$emmeans
group = Low-exposed:
condition emmean SE df lower.CL upper.CL
IC 45.0 7.32 53 30.3 59.7
NC 29.1 7.25 53 14.5 43.6
group = PTSD:
condition emmean SE df lower.CL upper.CL
IC 33.6 7.83 53 17.9 49.3
NC 30.4 7.75 53 14.8 45.9
group = Resilient:
condition emmean SE df lower.CL upper.CL
IC 50.6 5.75 53 39.1 62.1
NC 41.7 5.69 53 30.3 53.1
Confidence level used: 0.95
$contrasts
group = Low-exposed:
contrast estimate SE df t.ratio p.value
IC - NC 15.94 5.41 53 2.944 0.0048
group = PTSD:
contrast estimate SE df t.ratio p.value
IC - NC 3.21 5.79 53 0.555 0.5810
group = Resilient:
contrast estimate SE df t.ratio p.value
IC - NC 8.85 4.25 53 2.083 0.0421
P value adjustment: holm method for 1 tests
Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

H3: Percent of offers accepted will be higher in the PTSD group than the control group (LE and resilient groups)
There is a significant main effect of condition, where more offers are accepted in the IC condition than the NC condition (averaged across the 3 groups). No significant main effect of group or group x condition interaction, but based on the plots, there’s a tendency for people in the PTSD group to accept more offers (could indicate a less risky strategy - i.e., better to win a small amount than gamble on a big amount and get nothing) and people in the low exposed group to be more choosy about which offers they accept.
I wonder if part of the reason we see more offers on average being accepted in the IC condition is because for people who effectively picked up on their ability to control their “partner’s” offers, their offers got better so they accepted more of them…? Not sure but I feel like the actual offers that people are receiving in the IC condition might make a difference here somehow…
Converting to factor: group
Contrasts set to contr.sum for the following variables: group
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 17.6573 1 9.5218 53 98.2836 0.0000000000001138 ***
group 0.4470 2 9.5218 53 1.2440 0.296515
condition 0.2585 1 1.3248 53 10.3426 0.002217 **
group:condition 0.0347 2 1.3248 53 0.6948 0.503653
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
condition emmean SE df lower.CL upper.CL
IC 0.461 0.0383 53 0.384 0.538
NC 0.361 0.0496 53 0.262 0.461
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
IC - NC 0.0995 0.0309 53 3.216 0.0022
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
$emmeans
group = Low-exposed:
condition emmean SE df lower.CL upper.CL
IC 0.381 0.0691 53 0.2423 0.520
NC 0.258 0.0895 53 0.0787 0.438
group = PTSD:
condition emmean SE df lower.CL upper.CL
IC 0.550 0.0739 53 0.4020 0.698
NC 0.427 0.0957 53 0.2348 0.619
group = Resilient:
condition emmean SE df lower.CL upper.CL
IC 0.452 0.0542 53 0.3431 0.561
NC 0.399 0.0702 53 0.2586 0.540
Confidence level used: 0.95
$contrasts
group = Low-exposed:
contrast estimate SE df t.ratio p.value
IC - NC 0.1227 0.0559 53 2.195 0.0326
group = PTSD:
contrast estimate SE df t.ratio p.value
IC - NC 0.1235 0.0598 53 2.066 0.0437
group = Resilient:
contrast estimate SE df t.ratio p.value
IC - NC 0.0524 0.0438 53 1.195 0.2372
P value adjustment: holm method for 1 tests
Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

H4: Mean offer accepted will be lower in the PTSD group than the control group (LE and resilient groups)
There is a significant main effect of condition, where mean offer amount accepted is lower in the IC condition than the NC condition (averaged across the 3 groups)…see the next section for what I suspect might explain this unexpected result.
No significant main effect of group or group x condition interaction, but based on the plots, there’s a tendency for people in the PTSD group to accept lower offers in general.
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-008, NWTC-011, NWTC-012, NWTC-018, NWTC-019, NWTC-033, NWTC-043, NWTC-045, NWTC-058, NWTC-060, NWTC-074, NWTC-084, NWTC-091
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 3067.42 1 299.305 40 409.9390 < 0.00000000000000022 ***
group 35.26 2 299.305 40 2.3558 0.107839
condition 13.83 1 68.188 40 8.1109 0.006915 **
group:condition 1.05 2 68.188 40 0.3089 0.735954
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
condition emmean SE df lower.CL upper.CL
IC 5.77 0.427 40 4.90 6.63
NC 6.60 0.216 40 6.16 7.03
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
IC - NC -0.83 0.291 40 -2.848 0.0069
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
$emmeans
group = Low-exposed:
condition emmean SE df lower.CL upper.CL
IC 6.78 0.781 40 5.20 8.36
NC 7.38 0.395 40 6.59 8.18
group = PTSD:
condition emmean SE df lower.CL upper.CL
IC 4.75 0.816 40 3.11 6.40
NC 5.92 0.412 40 5.09 6.76
group = Resilient:
condition emmean SE df lower.CL upper.CL
IC 5.76 0.605 40 4.54 6.99
NC 6.48 0.306 40 5.86 7.10
Confidence level used: 0.95
$contrasts
group = Low-exposed:
contrast estimate SE df t.ratio p.value
IC - NC -0.601 0.533 40 -1.128 0.2662
group = PTSD:
contrast estimate SE df t.ratio p.value
IC - NC -1.170 0.557 40 -2.101 0.0420
group = Resilient:
contrast estimate SE df t.ratio p.value
IC - NC -0.720 0.413 40 -1.743 0.0890
P value adjustment: holm method for 1 tests
Warning: `fun.y` is deprecated. Use `fun` instead.
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).

Warning: `fun.y` is deprecated. Use `fun` instead.
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).

Warning: `fun.y` is deprecated. Use `fun` instead.
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).
Warning: Removed 19 rows containing non-finite values (stat_summary).

H4a: Mean offer overall (both accepted & rejected) will be lower in the PTSD group than the control group (LE and resilient groups)
Converting to factor: group
Contrasts set to contr.sum for the following variables: group
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 3068.89 1 165.99 53 979.8673 < 0.0000000000000002 ***
group 8.65 2 165.99 53 1.3808 0.26027
condition 20.60 1 168.53 53 6.4787 0.01386 *
group:condition 7.97 2 168.53 53 1.2539 0.29371
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
condition emmean SE df lower.CL upper.CL
IC 5.87 0.3471 53 5.17 6.56
NC 4.98 0.0206 53 4.94 5.02
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
IC - NC 0.888 0.349 53 2.545 0.0139
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
$emmeans
group = Low-exposed:
condition emmean SE df lower.CL upper.CL
IC 6.61 0.6270 53 5.35 7.87
NC 4.99 0.0372 53 4.91 5.06
group = PTSD:
condition emmean SE df lower.CL upper.CL
IC 5.12 0.6703 53 3.78 6.46
NC 4.96 0.0398 53 4.88 5.04
group = Resilient:
condition emmean SE df lower.CL upper.CL
IC 5.87 0.4918 53 4.88 6.85
NC 4.99 0.0292 53 4.93 5.05
Confidence level used: 0.95
$contrasts
group = Low-exposed:
contrast estimate SE df t.ratio p.value
IC - NC 1.623 0.630 53 2.574 0.0129
group = PTSD:
contrast estimate SE df t.ratio p.value
IC - NC 0.164 0.674 53 0.243 0.8090
group = Resilient:
contrast estimate SE df t.ratio p.value
IC - NC 0.879 0.495 53 1.777 0.0814
P value adjustment: holm method for 1 tests
Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

Warning: `fun.y` is deprecated. Use `fun` instead.

Effect of time (over the 30 trials)
I wanted to look at the offer size across all trials, since I thought the weird-seeming effect of IC being lower than NC (above) might be driven by the fact that people who don’t pick up on their control over the offers keep using the strategy of “something is better than nothing, let’s accept more often”, so their mean offer thus keeps going down…i.e., if they accept a $1 offer, they get $1 offers more frequently, versus in the NC condition, accepting a $1 offer doesn’t change what they’re offered on the next trial.
Indeed, here we see that offers are higher on average in the IC condition vs. NC condition. There is no significant effect of group or interaction effect but the plots illustrate how the PTSD group’s lack of awareness of their ability to control the offers means that their offers do NOT increase in the IC condition, unlike the control groups (whose offers are greater in IC > NC).
Here is what the trajectory (showing the SIZE of the offers they received, over time) looks like:
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

Here is what the trajectory (showing the chance of ACCEPTING offers, over time) looks like:
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

`geom_smooth()` using method = 'loess' and formula 'y ~ x'
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

So this makes me think we should look at the effect of TIME (at some point, not necessarily for the presentation - could be a future direction) since there seem to be some pretty obvious group differences that are obscured when we average all trials together.
Effects of income
Perceived control
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 136319 1 75032 47 85.3900 0.000000000003844 ***
group 3186 2 75032 47 0.9977 0.376386
income 2156 3 75032 47 0.4502 0.718354
condition 1921 1 10130 47 8.9120 0.004487 **
group:condition 670 2 10130 47 1.5544 0.221975
income:condition 1566 3 10130 47 2.4218 0.077648 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income = <=$80k:
condition emmean SE df lower.CL upper.CL
IC 35.8 9.22 47 17.25 54.4
NC 28.3 8.92 47 10.38 46.3
income = $130k+:
condition emmean SE df lower.CL upper.CL
IC 43.7 7.16 47 29.31 58.1
NC 31.6 6.92 47 17.66 45.5
income = $110-130k:
condition emmean SE df lower.CL upper.CL
IC 48.9 9.70 47 29.34 68.4
NC 28.0 9.38 47 9.15 46.9
income = $80-110k:
condition emmean SE df lower.CL upper.CL
IC 44.7 10.06 47 24.51 65.0
NC 48.5 9.73 47 28.88 68.0
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
income = <=$80k:
contrast estimate SE df t.ratio p.value
IC - NC 7.48 6.26 47 1.196 0.2377
income = $130k+:
contrast estimate SE df t.ratio p.value
IC - NC 12.12 4.86 47 2.495 0.0162
income = $110-130k:
contrast estimate SE df t.ratio p.value
IC - NC 20.84 6.58 47 3.165 0.0027
income = $80-110k:
contrast estimate SE df t.ratio p.value
IC - NC -3.70 6.83 47 -0.542 0.5902
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
Percent offers accepted
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 16.6883 1 7.1677 47 109.4290 0.00000000000007333 ***
group 0.1115 2 7.1677 47 0.3656 0.6957257
income 1.8448 3 7.1677 47 4.0323 0.0124164 *
condition 0.3007 1 1.0951 47 12.9046 0.0007817 ***
group:condition 0.0225 2 1.0951 47 0.4838 0.6194837
income:condition 0.0157 3 1.0951 47 0.2250 0.8785391
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Mean offer ($) accepted
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-008, NWTC-011, NWTC-012, NWTC-018, NWTC-019, NWTC-028, NWTC-033, NWTC-034, NWTC-042, NWTC-043, NWTC-045, NWTC-058, NWTC-060, NWTC-074, NWTC-084, NWTC-091
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 2449.02 1 151.054 34 551.2385 < 0.00000000000000022 ***
group 28.00 2 151.054 34 3.1508 0.0555462 .
income 134.41 3 151.054 34 10.0846 0.0000672 ***
condition 18.82 1 45.465 34 14.0776 0.0006551 ***
group:condition 0.74 2 45.465 34 0.2772 0.7596164
income:condition 20.23 3 45.465 34 5.0423 0.0053581 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income = <=$80k:
condition emmean SE df lower.CL upper.CL
IC 5.27 0.700 34 3.848 6.69
NC 6.41 0.375 34 5.648 7.17
income = $130k+:
condition emmean SE df lower.CL upper.CL
IC 7.17 0.616 34 5.916 8.42
NC 7.14 0.330 34 6.468 7.81
income = $110-130k:
condition emmean SE df lower.CL upper.CL
IC 7.10 0.714 34 5.651 8.55
NC 7.37 0.383 34 6.589 8.14
income = $80-110k:
condition emmean SE df lower.CL upper.CL
IC 2.23 0.866 34 0.465 3.99
NC 5.03 0.465 34 4.088 5.98
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
income = <=$80k:
contrast estimate SE df t.ratio p.value
IC - NC -1.1404 0.540 34 -2.111 0.0422
income = $130k+:
contrast estimate SE df t.ratio p.value
IC - NC 0.0282 0.475 34 0.059 0.9531
income = $110-130k:
contrast estimate SE df t.ratio p.value
IC - NC -0.2649 0.551 34 -0.481 0.6338
income = $80-110k:
contrast estimate SE df t.ratio p.value
IC - NC -2.8062 0.669 34 -4.197 0.0002
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
$emmeans
group emmean SE df lower.CL upper.CL
Low-exposed 6.74 0.466 34 5.80 7.69
PTSD 4.95 0.527 34 3.88 6.02
Resilient 6.20 0.359 34 5.47 6.93
Results are averaged over the levels of: income, condition
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
(Low-exposed) - PTSD 1.792 0.719 34 2.490 0.0534
(Low-exposed) - Resilient 0.545 0.576 34 0.946 0.3510
PTSD - Resilient -1.247 0.666 34 -1.873 0.1393
Results are averaged over the levels of: income, condition
P value adjustment: holm method for 3 tests
Mean offer ($) overall
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 2625.40 1 124.52 47 990.9648 < 0.0000000000000002 ***
group 3.08 2 124.52 47 0.5819 0.56283
income 32.11 3 124.52 47 4.0395 0.01232 *
condition 14.18 1 124.67 47 5.3448 0.02521 *
group:condition 2.46 2 124.67 47 0.4637 0.63180
income:condition 32.78 3 124.67 47 4.1190 0.01128 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income = <=$80k:
condition emmean SE df lower.CL upper.CL
IC 5.29 0.6927 47 3.89 6.68
NC 4.99 0.0424 47 4.91 5.08
income = $130k+:
condition emmean SE df lower.CL upper.CL
IC 7.05 0.5377 47 5.97 8.13
NC 4.93 0.0329 47 4.86 4.99
income = $110-130k:
condition emmean SE df lower.CL upper.CL
IC 6.56 0.7288 47 5.09 8.03
NC 5.03 0.0446 47 4.94 5.12
income = $80-110k:
condition emmean SE df lower.CL upper.CL
IC 4.16 0.7557 47 2.64 5.68
NC 4.95 0.0462 47 4.86 5.04
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
income = <=$80k:
contrast estimate SE df t.ratio p.value
IC - NC 0.294 0.694 47 0.423 0.6743
income = $130k+:
contrast estimate SE df t.ratio p.value
IC - NC 2.119 0.539 47 3.933 0.0003
income = $110-130k:
contrast estimate SE df t.ratio p.value
IC - NC 1.532 0.730 47 2.098 0.0413
income = $80-110k:
contrast estimate SE df t.ratio p.value
IC - NC -0.788 0.757 47 -1.041 0.3032
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
Income (low/high categorical variable)
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income_Hi
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 138401 1 77150 49 87.9017 0.000000000001637 ***
group 4290 2 77150 49 1.3623 0.265604
income_Hi 38 1 77150 49 0.0240 0.877484
condition 1920 1 10634 49 8.8483 0.004543 **
group:condition 359 2 10634 49 0.8278 0.443011
income_Hi:condition 1061 1 10634 49 4.8903 0.031704 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income_Hi = 0:
condition emmean SE df lower.CL upper.CL
IC 39.9 6.62 49 26.6 53.2
NC 37.5 6.51 49 24.4 50.6
income_Hi = 1:
condition emmean SE df lower.CL upper.CL
IC 45.3 5.60 49 34.0 56.5
NC 29.7 5.50 49 18.7 40.8
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
income_Hi = 0:
contrast estimate SE df t.ratio p.value
IC - NC 2.42 4.57 49 0.528 0.5997
income_Hi = 1:
contrast estimate SE df t.ratio p.value
IC - NC 15.54 3.86 49 4.023 0.0002
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income_Hi
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 16.5515 1 7.4648 49 108.6458 0.00000000000004992 ***
group 0.0897 2 7.4648 49 0.2945 0.7461861
income_Hi 1.5477 1 7.4648 49 10.1592 0.0025009 **
condition 0.3104 1 1.0985 49 13.8451 0.0005117 ***
group:condition 0.0302 2 1.0985 49 0.6739 0.5143793
income_Hi:condition 0.0123 1 1.0985 49 0.5504 0.4617096
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income_Hi emmean SE df lower.CL upper.CL
0 0.542 0.0606 49 0.420 0.664
1 0.291 0.0512 49 0.189 0.394
Results are averaged over the levels of: group, condition
Confidence level used: 0.95
$contrasts
contrast estimate SE df t.ratio p.value
0 - 1 0.251 0.0786 49 3.187 0.0025
Results are averaged over the levels of: group, condition
P value adjustment: holm method for 1 tests
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-008, NWTC-011, NWTC-012, NWTC-018, NWTC-019, NWTC-028, NWTC-033, NWTC-034, NWTC-042, NWTC-043, NWTC-045, NWTC-058, NWTC-060, NWTC-074, NWTC-084, NWTC-091
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income_Hi
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 2680.62 1 185.433 36 520.4178 < 0.00000000000000022 ***
group 13.56 2 185.433 36 1.3167 0.280625
income_Hi 100.03 1 185.433 36 19.4202 0.00009052 ***
condition 15.56 1 50.871 36 11.0101 0.002081 **
group:condition 0.23 2 50.871 36 0.0800 0.923303
income_Hi:condition 14.82 1 50.871 36 10.4890 0.002583 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income_Hi = 0:
condition emmean SE df lower.CL upper.CL
IC 4.05 0.572 36 2.89 5.20
NC 5.86 0.298 36 5.26 6.47
income_Hi = 1:
condition emmean SE df lower.CL upper.CL
IC 7.24 0.484 36 6.26 8.22
NC 7.28 0.252 36 6.77 7.79
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
income_Hi = 0:
contrast estimate SE df t.ratio p.value
IC - NC -1.8174 0.423 36 -4.296 0.0001
income_Hi = 1:
contrast estimate SE df t.ratio p.value
IC - NC -0.0434 0.358 36 -0.121 0.9043
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
Converting to factor: group
Warning: Missing values for following ID(s):
NWTC-028, NWTC-034, NWTC-042
Removing those cases from the analysis.
Contrasts set to contr.sum for the following variables: group, income_Hi
Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
Sum Sq num Df Error SS den Df F value Pr(>F)
(Intercept) 2783.35 1 128.59 49 1060.5720 < 0.00000000000000022 ***
group 2.17 2 128.59 49 0.4134 0.663661
income_Hi 28.03 1 128.59 49 10.6808 0.001982 **
condition 18.01 1 128.94 49 6.8454 0.011783 *
group:condition 1.89 2 128.94 49 0.3596 0.699773
income_Hi:condition 28.50 1 128.94 49 10.8308 0.001855 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
$emmeans
income_Hi = 0:
condition emmean SE df lower.CL upper.CL
IC 4.77 0.5022 49 3.76 5.78
NC 4.97 0.0313 49 4.91 5.04
income_Hi = 1:
condition emmean SE df lower.CL upper.CL
IC 6.91 0.4242 49 6.06 7.76
NC 4.96 0.0264 49 4.91 5.02
Results are averaged over the levels of: group
Confidence level used: 0.95
$contrasts
income_Hi = 0:
contrast estimate SE df t.ratio p.value
IC - NC -0.206 0.503 49 -0.409 0.6844
income_Hi = 1:
contrast estimate SE df t.ratio p.value
IC - NC 1.945 0.425 49 4.572 <.0001
Results are averaged over the levels of: group
P value adjustment: holm method for 1 tests
Order effects (IC = run 1 or 2) (TBD)
Effects of file version (TBD)
Boxplots
Some people prefer these over bar charts because you can see the actual data points and distribution of the data…
Warning: Removed 19 rows containing non-finite values (stat_boxplot).
Warning: Removed 19 rows containing missing values (geom_point).
Warning: Removed 19 rows containing missing values (geom_point).





Demographics
Sex
n = 56 participants total, of which 9 (16%) are female.
There are 14 in the PTSD group (2 women), 16 Low-exposed (4 women), and 26 Resilient (3 women).
Age
- PTSD: Mean (M) = 54.15, Standard Deviation (SD) = 6.20
- Low-exposed: M = 51.47, SD = 6.21
- PTSD: M = 54.35, SD (SD) = 4.53
Income
- Income (annual) brackets: <
$80k, $80-110k, $110-130k, $130k+
- Original answer choices listed income in ~10k intervals, but not every income level was represented in every group so we condensed them into 4 categories instead of 16
- Groups do not significantly differ on annual income (using the 4 categories above), based on Chi square test data (X-squared = 10.533, p-value >.10)
Pearson's Chi-squared test with simulated p-value (based on 2000 replicates)
data: income$group and income$income
X-squared = 10.533, df = NA, p-value = 0.1099
The table below lists income in each group. We see that 50% of the Low-exposed and 42% of the Resilient group have an annual household income of $130k or more, whereas only 14% of the PTSD group are in that category. Conversely, 43% of the PTSD group have an annual household income of $80k or less.

LS0tCnRpdGxlOiAiTldUQyBzdHVkeSB1bHRpbWF0dW0gZ2FtZSAod2lwKSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSkKa25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiL1VzZXJzL3NhcmVuc2VlbGV5L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lLyIpCm9wdGlvbnMoc2NpcGVuPTk5OSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRX0KI3NldHVwCnJtKGxpc3QgPSBscygpKQoKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KGFmZXgpCmxpYnJhcnkoZW1tZWFucykKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGdncHVicikKZmlsdGVyIDwtIGRwbHlyOjpmaWx0ZXIKc2VsZWN0IDwtIGRwbHlyOjpzZWxlY3QKYWZleF9vcHRpb25zKGVtbWVhbnNfbW9kZWwgPSAibXVsdGl2YXJpYXRlIikKCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgSU1QT1JUIERBVEEKCiMgbG9hZCBiZWhhdmlvcmFsIGRhdGEgKGxvbmcvdHJpYWwtYnktdHJpYWwgZm9ybWF0LCBldmVyeW9uZSBoYXMgNjAgdHJpYWxzIHRvdGFsIGFjcm9zcyAyIGNvbmRpdGlvbnMpCmRhdGE8LXJlYWQuY3N2KCJVR19sb25nX2RhdGEuY3N2Iiwgc3RyaXAud2hpdGU9RkFMU0UsIG5hLnN0cmluZ3M9IiIpCiMgbG9hZCBwYXJ0aWNpcGFudCBncm91cCB2YXJpYWJsZXMKcHB0IDwtcmVhZC5jc3YoIlVHX3BhcnRpY2lwYW50cy5jc3YiLCBzdHJpcC53aGl0ZT1GQUxTRSwgbmEuc3RyaW5ncz0iIikKCgojIChwZW9wbGUgd2l0aCBmaXJzdCB2ZXJzaW9uIG9mIFVHIHJhdGVkIHNldmVyYWwgdGltZXMgZHVyaW5nIGdhbWUgJiBhdCB0aGUgZW5kOwojIHBlb3BsZSB3aG8gZ290IHRoZSBvbmxpbmUvc2Vjb25kIHZlcnNpb24gb2YgVUcgcmF0ZSBvbmx5IGF0IHRoZSBlbmQpCiMgTldUQy0wMjIgcGFydGljaXBhbnQgZGlkIG5vdCB1bmRlcnN0YW5kIHRoZSB0YXNrIApncm91cCA8LSBwcHQgJT4lIHNlbGVjdChyZWNvcmRfaWQsZ3JvdXApICU+JSAgcmVuYW1lKGlkID0gcmVjb3JkX2lkKSAlPiUgZmlsdGVyKCFpZCA9PSAiTldUQy0wMjIiKSAKcHB0IDwtIHBwdCAlPiUgcmVuYW1lKGlkID0gcmVjb3JkX2lkKSAlPiUgc2VsZWN0KC1jKFgpKSAlPiUgZmlsdGVyKCFpZCA9PSAiTldUQy0wMjIiICYgIWlkID09ICJOV1RDLTA0NiIpIApkYXRhIDwtIGRhdGEgJT4lIGZpbHRlcighaWQgPT0gIk5XVEMtMDIyIiAmICFpZCA9PSAiTldUQy0wNDYiKSAlPiUgCiAgcmVuYW1lKHBlcmNlaXZlZF9jb250cm9sID0gdXNlLnBjKSAKCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTE9ORwoKIyBtZXJnZSAyIGRhdGFzZXRzCmRhdGEgPC0gbGVmdF9qb2luKHBwdCxkYXRhLGJ5PSJpZCIpCmRhdGEgPC0gZGF0YSAlPiUgbXV0YXRlKGFjcm9zcyh3aGVyZShpcy5udW1lcmljKSwgcm91bmQsIDMpLAogICAgICAgICAgICAgICAgICAgICAgICB0cmlhbCA9IHJlcCgxOjMwLCBsZW5ndGgub3V0ID0gbnJvdyhkYXRhKSkpCgpwOTU8LXF1YW50aWxlKGRhdGEkUlQsIDAuOTUsbmEucm09VFJVRSkgIyB0b3AgNSUgUlRzCnAwNTwtcXVhbnRpbGUoZGF0YSRSVCwgMC4wNSxuYS5ybT1UUlVFKSAjIGJvdHRvbSA1JSBSVHMKIyBkcm9wIHRvcCBhbmQgYm90dG9tIDUlIG9mIFJUcyAKZXhjbCA8LSBkYXRhICU+JSBmaWx0ZXIoUlQgPj0gcDk1IHwgUlQgPD0gcDA1KSAKZGF0YSA8LSBkYXRhICU+JSBmaWx0ZXIoUlQgPCBwOTUgJiBSVCA+IHAwNSkgCgp0cmlhbHNfbiA8LSBkYXRhICU+JSBzZWxlY3QoaWQsY29uZGl0aW9uKSAlPiUgZ3JvdXBfYnkoaWQsY29uZGl0aW9uKSAlPiUgY291bnQoKSAlPiUgcmVuYW1lKG5fdHJpYWxzID0gbikKZGF0YSA8LSBsZWZ0X2pvaW4oZGF0YSx0cmlhbHNfbiwgYnk9YygiaWQiLCJjb25kaXRpb24iKSkKI3dyaXRlLmNzdihkYXRhLCJVR19kYXRhc2V0X2xvbmcuY3N2IikKCiMjIyBBZGQgQ0FQUyBzeCBhbmQgZGVtb2dyYXBoaWNzCiMgCiBjbGluIDwtIHJlYWRSRFMoIi9Vc2Vycy9zYXJlbnNlZWxleS9Ecm9wYm94L1Bvc3Rkb2Mvbnd0Y19zdHVkeS9kYXRhL19jbGVhbmVkL253dGNfZGF0YV9jbGVhbmVkXzA3LTI1LTIyLnJkcyIpCiBjbGluIDwtIGNsaW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgidG90X21vcyIpfCBzdGFydHNfd2l0aCgiQ0FQUzVfUE1fdG90YWwiKSB8IHN0YXJ0c193aXRoKCJhZ2VfIikgfCBzdGFydHNfd2l0aCgiZ2VuZGVyXzFpc0YiKSB8IHN0YXJ0c193aXRoKCJpbmNvbWVMZXZlbCIpIHwgc3RhcnRzX3dpdGgoInJlY29yZF9pZCIpKSAlPiUgcmVuYW1lKGlkID0gcmVjb3JkX2lkKSAKIGRhdGFMb25nIDwtIGxlZnRfam9pbihkYXRhLGNsaW4sYnk9ImlkIikKd3JpdGUuY3N2KGRhdGFMb25nLCJVR19kYXRhc2V0X2xvbmdlcl9jbGluaWNhbC5jc3YiLCBuYSA9ICIuIikKCm9mZmVyX2FjYyA8LSBkYXRhTG9uZyAlPiUgZmlsdGVyKGNob2ljZT09MSkgJT4lIHNlbGVjdChpZCwgY29uZGl0aW9uLG9mZmVyKSAlPiUgCiAgZ3JvdXBfYnkoaWQsY29uZGl0aW9uKSAlPiUgc3VtbWFyaXplKG1lYW4ob2ZmZXIpKSAlPiUgcmVuYW1lKG1lYW5fb2ZmZXJfYWNjZXB0ID0gJ21lYW4ob2ZmZXIpJykKb2ZmZXJfYWxsIDwtIGRhdGFMb25nICU+JSBzZWxlY3QoaWQsIGNvbmRpdGlvbixvZmZlcikgJT4lIAogIGdyb3VwX2J5KGlkLGNvbmRpdGlvbikgJT4lIHN1bW1hcml6ZShtZWFuKG9mZmVyKSkgJT4lIHJlbmFtZShtZWFuX29mZmVyX2FsbCA9ICdtZWFuKG9mZmVyKScpCmNob2ljZV9hY2MgPC0gZGF0YUxvbmcgJT4lIGdyb3VwX2J5KGlkLCBjb25kaXRpb24pICU+JSBzdW1tYXJpemUoc3VtKGNob2ljZSkvbl90cmlhbHMpICU+JSAKICByZW5hbWUocGVyY2VudF9hY2NlcHQgPSAnc3VtKGNob2ljZSkvbl90cmlhbHMnKSAlPiUgZGlzdGluY3QoaWQsIGNvbmRpdGlvbiwgLmtlZXBfYWxsID0gVFJVRSkKYWRkIDwtIGxlZnRfam9pbihjaG9pY2VfYWNjLG9mZmVyX2FjYywgYnkgPSBjKCJpZCIsImNvbmRpdGlvbiIpKQphZGQgPC0gbGVmdF9qb2luKG9mZmVyX2FsbCxhZGQsIGJ5ID0gYygiaWQiLCJjb25kaXRpb24iKSkKCgpSVCA8LSBkYXRhTG9uZyAlPiUgCiAgZ3JvdXBfYnkoaWQsY29uZGl0aW9uKSAlPiUgc3VtbWFyaXplKG1lYW4oUlQpKSAlPiUgcmVuYW1lKG1lYW5fUlQgPSAnbWVhbihSVCknKQoKZGF0YUxvbmcgPC0gZGF0YUxvbmcgJT4lIHNlbGVjdCgtYyhSVCxwYyxvZmZlcixjaG9pY2UpKSAlPiUgZGlzdGluY3QoaWQsIGNvbmRpdGlvbiwgLmtlZXBfYWxsID0gVFJVRSkKZGF0YUxvbmcyIDwtIGxlZnRfam9pbihhZGQsZGF0YUxvbmcsYnkgPSBjKCJpZCIsImNvbmRpdGlvbiIpKQpkYXRhTG9uZzIgPC0gbGVmdF9qb2luKGRhdGFMb25nMixSVCxieSA9IGMoImlkIiwiY29uZGl0aW9uIikpCgp3cml0ZS5jc3YoZGF0YUxvbmcyLCJVR19kYXRhc2V0X2xvbmdfY2xpbmljYWwuY3N2IiwgbmEgPSAiICIpCmxvbmdfZGF0YSA8LSBkYXRhTG9uZzIKbG9uZ19kYXRhIDwtIGxvbmdfZGF0YSAlPiUgbXV0YXRlKHB0c2RfY3RsID0gaWZfZWxzZShncm91cD09IlBUU0QiLCAxLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29tZSA9IHJlY29kZV9mYWN0b3IoaW5jb21lTGV2ZWwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIjw9JDMwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiPD0kMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICI8PSQzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIiQzMC01MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIiQzMC01MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjYiID0gIiQ1MC04MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjciID0gIiQ1MC04MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjgiID0gIiQ1MC04MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkiID0gIiQ4MC0xMDBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMCIgPSAiJDgwLTEwMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjExIiA9ICIkMTAwLTEzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyIiA9ICIkMTAwLTEzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEzIiA9ICIkMTAwLTEzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE0IiA9ICIkMTMwaysiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjE1IiA9ICIkMTMwaysiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWUgPSByZWNvZGVfZmFjdG9yKGluY29tZUxldmVsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNiIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI3IiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjgiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOSIgPSAiJDgwLTExMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEwIiA9ICIkODAtMTEwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTEiID0gIiQ4MC0xMTBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMiIgPSAiJDExMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMyIgPSAiJDExMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNCIgPSAiJDEzMGsrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNSIgPSAiJDEzMGsrIikpCmBgYAoKCgojIyBIMTogUGVyY2VpdmVkIHNvY2lhbCBjb250cm9sbGFiaWxpdHkgd2lsbCBiZSBsb3dlciBpbiB0aGUgUFRTRCBncm91cCB0aGFuIHRoZSBjb250cm9sIGdyb3VwIChMRSBhbmQgcmVzaWxpZW50IGdyb3VwcykKIyMgSDI6CVBlcmNlaXZlZCBzb2NpYWwgY29udHJvbGxhYmlsaXR5IHdpbGwgYmUgZGlmZmVyZW50IGluIHRoZSByZXNpbGllbnQgZ3JvdXAgdGhhbiBpbiB0aGUgTEUgZ3JvdXAuCgpUaGVyZSBpcyBhIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIGNvbmRpdGlvbiwgd2hlcmUgcGVyY2VpdmVkIGNvbnRyb2wgaXMgaGlnaGVyIGluIHRoZSBJQyBjb25kaXRpb24gdGhhbiB0aGUgTkMgY29uZGl0aW9uIChhdmVyYWdlZCBhY3Jvc3MgdGhlIDMgZ3JvdXBzKS4gTm8gc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2YgZ3JvdXAgb3IgZ3JvdXAgeCBjb25kaXRpb24gaW50ZXJhY3Rpb24sIGJ1dCBiYXNlZCBvbiB0aGUgcGxvdHMsIHRoZXJlJ3MgYSB0ZW5kZW5jeSBmb3IgcGVvcGxlIGluIHRoZSBQVFNEIGdyb3VwIHRvIHBlcmNlaXZlIHNvbWV3aGF0IGxvd2VyIHNvY2lhbCBjb250cm9sIGluIGJvdGggY29uZGl0aW9ucywgYW5kIHBlb3BsZSBpbiB0aGUgcmVzaWxpZW50IGdyb3VwIHRvIHBlcmNlaXZlIHNvbWV3aGF0IGhpZ2hlciBzb2NpYWwgY29udHJvbC4KCgpgYGB7cn0KcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAicGVyY2VpdmVkX2NvbnRyb2wiLCBsb25nX2RhdGEsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCmVtbWVhbnMocTEsIH5jb25kaXRpb24sIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKZW1tZWFucyhxMSwgfmNvbmRpdGlvbnxncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9cGVyY2VpdmVkX2NvbnRyb2wsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoInBlcmNlaXZlZCBjb250cm9sIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmdyb3VwKQpwMQpnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvcGVyY2VpdmVkQ29udHJvbF9iYXJHcm91cC5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyh5PXBlcmNlaXZlZF9jb250cm9sLCB4PWdyb3VwLCBmaWxsPWdyb3VwKSkgKyAKICAgIHN0YXRfc3VtbWFyeShnZW9tID0gImJhciIsIGZ1bi55ID0gbWVhbiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siKSArCiAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiZXJyb3JiYXIiLCBmdW4uZGF0YSA9IG1lYW5fc2UsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC45KSwgd2lkdGggPSAwLjI1LCBjb2xvcj0iYmxhY2siKSArCiAgIHhsYWIoImdyb3VwIikgKyB5bGFiKCJwZXJjZWl2ZWQgY29udHJvbCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5jb25kaXRpb24pCnAxCmdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS9wZXJjZWl2ZWRDb250cm9sX2JhckNvbmRpdGlvbi5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyh5PXBlcmNlaXZlZF9jb250cm9sLCB4PWNvbmRpdGlvbiwgZmlsbD1jb25kaXRpb24pKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCJwZXJjZWl2ZWQgY29udHJvbCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgCnAxCmdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS9wZXJjZWl2ZWRDb250cm9sX2Jhci5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCmBgYAoKCiMjIEgzOiBQZXJjZW50IG9mIG9mZmVycyBhY2NlcHRlZCB3aWxsIGJlIGhpZ2hlciBpbiB0aGUgUFRTRCBncm91cCB0aGFuIHRoZSBjb250cm9sIGdyb3VwIChMRSBhbmQgcmVzaWxpZW50IGdyb3VwcykKClRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2YgY29uZGl0aW9uLCB3aGVyZSBtb3JlIG9mZmVycyBhcmUgYWNjZXB0ZWQgaW4gdGhlIElDIGNvbmRpdGlvbiB0aGFuIHRoZSBOQyBjb25kaXRpb24gKGF2ZXJhZ2VkIGFjcm9zcyB0aGUgMyBncm91cHMpLiBObyBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBncm91cCBvciBncm91cCB4IGNvbmRpdGlvbiBpbnRlcmFjdGlvbiwgYnV0IGJhc2VkIG9uIHRoZSBwbG90cywgdGhlcmUncyBhIHRlbmRlbmN5IGZvciBwZW9wbGUgaW4gdGhlIFBUU0QgZ3JvdXAgdG8gYWNjZXB0IG1vcmUgb2ZmZXJzIChjb3VsZCBpbmRpY2F0ZSBhIGxlc3Mgcmlza3kgc3RyYXRlZ3kgLSBpLmUuLCBiZXR0ZXIgdG8gd2luIGEgc21hbGwgYW1vdW50IHRoYW4gZ2FtYmxlIG9uIGEgYmlnIGFtb3VudCBhbmQgZ2V0IG5vdGhpbmcpIGFuZCBwZW9wbGUgaW4gdGhlIGxvdyBleHBvc2VkIGdyb3VwIHRvIGJlIG1vcmUgY2hvb3N5IGFib3V0IHdoaWNoIG9mZmVycyB0aGV5IGFjY2VwdC4KCkkgd29uZGVyIGlmIHBhcnQgb2YgdGhlIHJlYXNvbiB3ZSBzZWUgbW9yZSBvZmZlcnMgb24gYXZlcmFnZSBiZWluZyBhY2NlcHRlZCBpbiB0aGUgSUMgY29uZGl0aW9uIGlzIGJlY2F1c2UgZm9yIHBlb3BsZSB3aG8gZWZmZWN0aXZlbHkgcGlja2VkIHVwIG9uIHRoZWlyIGFiaWxpdHkgdG8gY29udHJvbCB0aGVpciAicGFydG5lcidzIiBvZmZlcnMsIHRoZWlyIG9mZmVycyBnb3QgYmV0dGVyIHNvIHRoZXkgYWNjZXB0ZWQgbW9yZSBvZiB0aGVtLi4uPyBOb3Qgc3VyZSBidXQgSSBmZWVsIGxpa2UgdGhlIGFjdHVhbCBvZmZlcnMgdGhhdCBwZW9wbGUgYXJlIHJlY2VpdmluZyBpbiB0aGUgSUMgY29uZGl0aW9uIG1pZ2h0IG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUgc29tZWhvdy4uLgoKCmBgYHtyfQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZW50X2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKZW1tZWFucyhxMSwgfmNvbmRpdGlvbiwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGdyb3VwLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCgoKI2VtbWVhbnMocTEsIH5jb25kaXRpb24sIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyh5PXBlcmNlbnRfYWNjZXB0LCB4PWNvbmRpdGlvbiwgZmlsbD1jb25kaXRpb24pKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCJwZXJjZW50IGFjY2VwdCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5ncm91cCkKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL3BlcmNlbnRBY2NlcHRfYmFyR3JvdXAucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9cGVyY2VudF9hY2NlcHQsIHg9Z3JvdXAsIGZpbGw9Z3JvdXApKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiZ3JvdXAiKSArIHlsYWIoInBlcmNlbnQgYWNjZXB0IikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmNvbmRpdGlvbikKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL3BlcmNlbnRBY2NlcHRfYmFyQ29uZGl0aW9uLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9cGVyY2VudF9hY2NlcHQsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoInBlcmNlbnQgYWNjZXB0ZWQgb2ZmZXJzIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSAKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL3BlcmNlbnRBY2NlcHRfYmFyLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKYGBgCgojIyBINDogTWVhbiBvZmZlciBhY2NlcHRlZCB3aWxsIGJlIGxvd2VyIGluIHRoZSBQVFNEIGdyb3VwIHRoYW4gdGhlIGNvbnRyb2wgZ3JvdXAgKExFIGFuZCByZXNpbGllbnQgZ3JvdXBzKQoKVGhlcmUgaXMgYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBjb25kaXRpb24sIHdoZXJlIG1lYW4gb2ZmZXIgYW1vdW50IGFjY2VwdGVkIGlzIGxvd2VyIGluIHRoZSBJQyBjb25kaXRpb24gdGhhbiB0aGUgTkMgY29uZGl0aW9uIChhdmVyYWdlZCBhY3Jvc3MgdGhlIDMgZ3JvdXBzKS4uLnNlZSB0aGUgbmV4dCBzZWN0aW9uIGZvciB3aGF0IEkgc3VzcGVjdCBtaWdodCBleHBsYWluIHRoaXMgdW5leHBlY3RlZCByZXN1bHQuCgpObyBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBncm91cCBvciBncm91cCB4IGNvbmRpdGlvbiBpbnRlcmFjdGlvbiwgYnV0IGJhc2VkIG9uIHRoZSBwbG90cywgdGhlcmUncyBhIHRlbmRlbmN5IGZvciBwZW9wbGUgaW4gdGhlIFBUU0QgZ3JvdXAgdG8gYWNjZXB0IGxvd2VyIG9mZmVycyBpbiBnZW5lcmFsLgoKYGBge3J9CnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQoKCmVtbWVhbnMocTEsIH5jb25kaXRpb24sIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCmVtbWVhbnMocTEsIH5jb25kaXRpb258Z3JvdXAsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1tZWFuX29mZmVyX2FjY2VwdCwgeD1jb25kaXRpb24sIGZpbGw9Y29uZGl0aW9uKSkgKyAKICAgIHN0YXRfc3VtbWFyeShnZW9tID0gImJhciIsIGZ1bi55ID0gbWVhbiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siKSArCiAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiZXJyb3JiYXIiLCBmdW4uZGF0YSA9IG1lYW5fc2UsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC45KSwgd2lkdGggPSAwLjI1LCBjb2xvcj0iYmxhY2siKSArCiAgIHhsYWIoImNvbmRpdGlvbiIpICsgeWxhYigibWVhbiBvZmZlciAkIGFjY2VwdGVkIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmdyb3VwKQpwMQpnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvbWVhbkFjY2VwdF9iYXJHcm91cC5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1tZWFuX29mZmVyX2FjY2VwdCwgeD1ncm91cCwgZmlsbD1ncm91cCkpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJncm91cCIpICsgeWxhYigibWVhbiBvZmZlciAkIGFjY2VwdGVkIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmNvbmRpdGlvbikKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL21lYW5BY2NlcHRfYmFyQ29uZGl0aW9uLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9bWVhbl9vZmZlcl9hY2NlcHQsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoIm1lYW4gb2ZmZXIgJCBhY2NlcHRlZCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgCnAxCmdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS9tZWFuQWNjZXB0X2Jhci5wbmciLCBwbG90ID0gcDEsIGRwaT02MDAsIHdpZHRoID0gOCwgaGVpZ2h0ID0gNikKCgpgYGAKCiMjIyBINGE6IE1lYW4gb2ZmZXIgb3ZlcmFsbCAoYm90aCBhY2NlcHRlZCAmIHJlamVjdGVkKSB3aWxsIGJlIGxvd2VyIGluIHRoZSBQVFNEIGdyb3VwIHRoYW4gdGhlIGNvbnRyb2wgZ3JvdXAgKExFIGFuZCByZXNpbGllbnQgZ3JvdXBzKSAKCmBgYHtyfQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKCmRhdGFfaWMgPC0gbG9uZ19kYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iSUMiKQoKZW1tZWFucyhxMSwgfmNvbmRpdGlvbiwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKZW1tZWFucyhxMSwgfmNvbmRpdGlvbnxncm91cCwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9bWVhbl9vZmZlcl9hbGwsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoIm1lYW4gb2ZmZXIgLSBhbGwgdHJpYWxzIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSArIGZhY2V0X3dyYXAofmdyb3VwKQpwMQpnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvbWVhbk9mZmVyQWxsX2Jhckdyb3VwLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyh5PW1lYW5fb2ZmZXJfYWxsLCB4PWdyb3VwLCBmaWxsPWdyb3VwKSkgKyAKICAgIHN0YXRfc3VtbWFyeShnZW9tID0gImJhciIsIGZ1bi55ID0gbWVhbiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siKSArCiAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiZXJyb3JiYXIiLCBmdW4uZGF0YSA9IG1lYW5fc2UsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC45KSwgd2lkdGggPSAwLjI1LCBjb2xvcj0iYmxhY2siKSArCiAgIHhsYWIoImdyb3VwIikgKyB5bGFiKCJtZWFuIG9mZmVyIC0gYWxsIHRyaWFscyIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5jb25kaXRpb24pCnAxCmdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS9tZWFuT2ZmZXJBbGxfYmFyQ29uZGl0aW9uLnBuZyIsIHBsb3QgPSBwMSwgZHBpPTYwMCwgd2lkdGggPSA4LCBoZWlnaHQgPSA2KQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9bWVhbl9vZmZlcl9hbGwsIHg9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsgCiAgICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJiYXIiLCBmdW4ueSA9IG1lYW4sIHBvc2l0aW9uID0gImRvZGdlIiwgY29sb3I9ImJsYWNrIikgKwogIHN0YXRfc3VtbWFyeShnZW9tID0gImVycm9yYmFyIiwgZnVuLmRhdGEgPSBtZWFuX3NlLCBwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguOSksIHdpZHRoID0gMC4yNSwgY29sb3I9ImJsYWNrIikgKwogICB4bGFiKCJjb25kaXRpb24iKSArIHlsYWIoIm1lYW4gb2ZmZXIgLSBhbGwgdHJpYWxzIikgKyB0aGVtZV9wdWJyKGJhc2Vfc2l6ZSA9IDE0KSAKcDEKZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL21lYW5PZmZlckFsbF9iYXIucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgoKYGBgCgojIyMjIEVmZmVjdCBvZiB0aW1lIChvdmVyIHRoZSAzMCB0cmlhbHMpCgpJIHdhbnRlZCB0byBsb29rIGF0IHRoZSBvZmZlciBzaXplIGFjcm9zcyBhbGwgdHJpYWxzLCBzaW5jZSBJIHRob3VnaHQgdGhlIHdlaXJkLXNlZW1pbmcgZWZmZWN0IG9mIElDIGJlaW5nIGxvd2VyIHRoYW4gTkMgKGFib3ZlKSBtaWdodCBiZSBkcml2ZW4gYnkgdGhlIGZhY3QgdGhhdCBwZW9wbGUgd2hvIGRvbid0IHBpY2sgdXAgb24gdGhlaXIgY29udHJvbCBvdmVyIHRoZSBvZmZlcnMga2VlcCB1c2luZyB0aGUgc3RyYXRlZ3kgb2YgInNvbWV0aGluZyBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nLCBsZXQncyBhY2NlcHQgbW9yZSBvZnRlbiIsIHNvIHRoZWlyIG1lYW4gb2ZmZXIgdGh1cyBrZWVwcyBnb2luZyBkb3duLi4uaS5lLiwgaWYgdGhleSBhY2NlcHQgYSBgJDFgIG9mZmVyLCB0aGV5IGdldCBgJDFgIG9mZmVycyBtb3JlIGZyZXF1ZW50bHksIHZlcnN1cyBpbiB0aGUgTkMgY29uZGl0aW9uLCBhY2NlcHRpbmcgYSBgJDFgIG9mZmVyIGRvZXNuJ3QgY2hhbmdlIHdoYXQgdGhleSdyZSBvZmZlcmVkIG9uIHRoZSBuZXh0IHRyaWFsLgoKSW5kZWVkLCBoZXJlIHdlIHNlZSB0aGF0IG9mZmVycyBhcmUgaGlnaGVyIG9uIGF2ZXJhZ2UgaW4gdGhlIElDIGNvbmRpdGlvbiB2cy4gTkMgY29uZGl0aW9uLiBUaGVyZSBpcyBubyBzaWduaWZpY2FudCBlZmZlY3Qgb2YgZ3JvdXAgb3IgaW50ZXJhY3Rpb24gZWZmZWN0IGJ1dCB0aGUgcGxvdHMgaWxsdXN0cmF0ZSBob3cgdGhlIFBUU0QgZ3JvdXAncyBsYWNrIG9mIGF3YXJlbmVzcyBvZiB0aGVpciBhYmlsaXR5IHRvIGNvbnRyb2wgdGhlIG9mZmVycyBtZWFucyB0aGF0IHRoZWlyIG9mZmVycyBkbyBOT1QgaW5jcmVhc2UgaW4gdGhlIElDIGNvbmRpdGlvbiwgdW5saWtlIHRoZSBjb250cm9sIGdyb3VwcyAod2hvc2Ugb2ZmZXJzIGFyZSBncmVhdGVyIGluIElDID4gTkMpLiAKCkhlcmUgaXMgd2hhdCB0aGUgdHJhamVjdG9yeSAoc2hvd2luZyB0aGUgU0laRSBvZiB0aGUgb2ZmZXJzIHRoZXkgcmVjZWl2ZWQsIG92ZXIgdGltZSkgbG9va3MgbGlrZToKCmBgYHtyfQpwMSA8LSBnZ3Bsb3QoZGF0YSwgYWVzKGNvbG9yPWNvbmRpdGlvbiwgeT1vZmZlciwgeCA9dHJpYWwsIGdyb3VwPWNvbmRpdGlvbikpICsKICAgICAgICBnZW9tX3Ntb290aChzcGFuID0gMC41KSArIGZhY2V0X3dyYXAofmdyb3VwKSArIHRoZW1lX3B1YmNsZWFuKCkKICBwMSAgCiAgZ2dzYXZlKCJ+L0RvY3VtZW50cy9VbHRpbWF0dW1HYW1lL3RyYWplY3Rvcnlfb2ZmZXJfZ3JvdXAucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgogIAogIHAxIDwtIGdncGxvdChkYXRhLCBhZXMoY29sb3I9Z3JvdXAsIHk9b2ZmZXIsIHggPXRyaWFsLCBncm91cD1ncm91cCkpICsKICAgICAgICBnZW9tX3Ntb290aChzcGFuID0gMC41KSArIGZhY2V0X3dyYXAofmNvbmRpdGlvbikgKyB0aGVtZV9wdWJjbGVhbigpCiAgcDEKICBnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvdHJhamVjdG9yeV9vZmZlcl9jb25kaXRpb24ucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgpgYGAKCkhlcmUgaXMgd2hhdCB0aGUgdHJhamVjdG9yeSAoc2hvd2luZyB0aGUgY2hhbmNlIG9mIEFDQ0VQVElORyBvZmZlcnMsIG92ZXIgdGltZSkgbG9va3MgbGlrZToKCmBgYHtyfQpwMSA8LSBnZ3Bsb3QoZGF0YSwgYWVzKGNvbG9yPWNvbmRpdGlvbiwgeT1jaG9pY2UsIHggPXRyaWFsLCBncm91cD1jb25kaXRpb24pKSArCiAgICAgICAgZ2VvbV9zbW9vdGgoc3BhbiA9IDAuNSkgKyBmYWNldF93cmFwKH5ncm91cCkgKyB0aGVtZV9wdWJjbGVhbigpCiAgcDEKICBnZ3NhdmUoIn4vRG9jdW1lbnRzL1VsdGltYXR1bUdhbWUvdHJhamVjdG9yeV9jaG9pY2VfZ3JvdXAucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgoKICBwMSA8LSBnZ3Bsb3QoZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PWNob2ljZSwgeCA9dHJpYWwsIGdyb3VwPWdyb3VwKSkgKwogICAgICAgIGdlb21fc21vb3RoKHNwYW4gPSAwLjUpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKSArIHRoZW1lX3B1YmNsZWFuKCkKICBwMQogIGdnc2F2ZSgifi9Eb2N1bWVudHMvVWx0aW1hdHVtR2FtZS90cmFqZWN0b3J5X2Nob2ljZV9jb25kaXRpb24ucG5nIiwgcGxvdCA9IHAxLCBkcGk9NjAwLCB3aWR0aCA9IDgsIGhlaWdodCA9IDYpCgojZGF0YV9pYyA8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iSUMiKQojcDEgPC0gZ2dwbG90KGRhdGFfaWMsIGFlcyhjb2xvcj1ncm91cCwgeT1vZmZlciwgeCA9dHJpYWwsIGdyb3VwPWdyb3VwKSkgKwojICAgICAgICBnZW9tX3Ntb290aChzcGFuID0gMC41KSArIGZhY2V0X3dyYXAofmNvbmRpdGlvbikgKyB0aGVtZV9wdWJjbGVhbigpCiAjIHAxCiAgCiNwMSA8LSBnZ3Bsb3QoZGF0YV9pYywgYWVzKGNvbG9yPWdyb3VwLCB5PW9mZmVyLCB4ID10cmlhbCwgZ3JvdXA9Z3JvdXApKSArICAgICAgICBnZW9tX3Ntb290aChzcGFuID0gMC41KSArIGZhY2V0X3dyYXAofmZpbGVfdmVyc2lvbikgKyB0aGVtZV9wdWJjbGVhbigpCgogIAojZGF0YV9uYyA8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iTkMiKQojcDEgPC0gZ2dwbG90KGRhdGFfbmMsIGFlcyhjb2xvcj1ncm91cCwgeT1vZmZlciwgeCA9dHJpYWwsIGdyb3VwPWdyb3VwKSkgKyAgICAgICAgCiMgIGdlb21fc21vb3RoKHNwYW4gPSAwLjUpICsgZmFjZXRfd3JhcCh+ZmlsZV92ZXJzaW9uKSArIHRoZW1lX3B1YmNsZWFuKCkKCiAgcDEgPC0gZ2dwbG90KGRhdGEsIGFlcyh4ID10cmlhbCkpICsKICAgIGdlb21fc21vb3RoKGFlcyh5ID0gY2hvaWNlKjUpLHNwYW49LjUpICsgCiAgZ2VvbV9zbW9vdGgoYWVzKHkgPSBvZmZlciksIHNwYW49LjUsIGxpbmV0eXBlPSJ0d29kYXNoIikgKwogICAgICAgICBmYWNldF93cmFwKH5jb25kaXRpb24qZ3JvdXApICsgdGhlbWVfcHViY2xlYW4oKSAgIAogIApwMQpgYGAKClNvIHRoaXMgbWFrZXMgbWUgdGhpbmsgd2Ugc2hvdWxkIGxvb2sgYXQgdGhlIGVmZmVjdCBvZiBUSU1FIChhdCBzb21lIHBvaW50LCBub3QgbmVjZXNzYXJpbHkgZm9yIHRoZSBwcmVzZW50YXRpb24gLSBjb3VsZCBiZSBhIGZ1dHVyZSBkaXJlY3Rpb24pIHNpbmNlIHRoZXJlIHNlZW0gdG8gYmUgc29tZSBwcmV0dHkgb2J2aW91cyBncm91cCBkaWZmZXJlbmNlcyB0aGF0IGFyZSBvYnNjdXJlZCB3aGVuIHdlIGF2ZXJhZ2UgYWxsIHRyaWFscyB0b2dldGhlci4KCgoKCgoKIyMgRWZmZWN0cyBvZiBpbmNvbWUKCiMjIyBQZXJjZWl2ZWQgY29udHJvbApgYGB7cn0KcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAicGVyY2VpdmVkX2NvbnRyb2wiLCBsb25nX2RhdGEsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPWMoImdyb3VwIiksIGNvdmFyaWF0ZT0iaW5jb21lIikKc3VtbWFyeShxMSkKZW1tZWFucyhxMSwgfmNvbmRpdGlvbnxpbmNvbWUsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKYGBgCgojIyMgUGVyY2VudCBvZmZlcnMgYWNjZXB0ZWQKYGBge3J9CnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlbnRfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9ImluY29tZSIpCnN1bW1hcnkocTEpCmBgYAoKIyMjIE1lYW4gb2ZmZXIgKCQpIGFjY2VwdGVkCmBgYHtyfQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJpbmNvbWUiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGluY29tZSwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQplbW1lYW5zKHExLCB+Z3JvdXAsIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKYGBgCiMjIyBNZWFuIG9mZmVyICgkKSBvdmVyYWxsCmBgYHtyfQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJpbmNvbWUiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGluY29tZSwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQpgYGAKCiMjIyBJbmNvbWUgKGxvdy9oaWdoIGNhdGVnb3JpY2FsIHZhcmlhYmxlKQpgYGB7cn0KbG9uZ19kYXRhIDwtIGxvbmdfZGF0YSAlPiUgbXV0YXRlKGluY29tZV9IaSA9IGFzLmZhY3RvcihpZmVsc2UoaW5jb21lID09ICIkMTEwLTEzMGsiIHwgaW5jb21lID09ICIkMTMwaysiLCAxLCAwKSkpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZWl2ZWRfY29udHJvbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJpbmNvbWVfSGkiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGluY29tZV9IaSwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlbnRfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9ImluY29tZV9IaSIpCnN1bW1hcnkocTEpCmVtbWVhbnMocTEsIH5pbmNvbWVfSGksIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9ImluY29tZV9IaSIpCnN1bW1hcnkocTEpCmVtbWVhbnMocTEsIH5jb25kaXRpb258aW5jb21lX0hpLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJpbmNvbWVfSGkiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGluY29tZV9IaSwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKYGBgCgoKCiMjIE9yZGVyIGVmZmVjdHMgKElDID0gcnVuIDEgb3IgMikgKFRCRCkKYGBge3IsIGV2YWw9RkFMU0UsIGVjaG89RkFMU0V9CmxvbmdfZGF0YSA8LSBsb25nX2RhdGEgJT4lIG11dGF0ZShvcmRlciA9IGZhY3RvcihvcmRlciwgbGV2ZWxzID0gYygiMSIsIjIiKSkpCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlaXZlZF9jb250cm9sIiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLGNvdmFyaWF0ZT0ib3JkZXIiKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufG9yZGVyLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZW50X2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSgib3JkZXIiKSkKc3VtbWFyeShxMSkKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9Im9yZGVyIikKc3VtbWFyeShxMSkKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWxsIiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9KCJvcmRlciIpKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufG9yZGVyLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCmBgYAoKIyMgRWZmZWN0cyBvZiBmaWxlIHZlcnNpb24gKFRCRCkKYGBge3IsIGV2YWw9RkFMU0UsIGVjaG89RkFMU0V9CiMgZmlsZSB2ZXJzaW9uCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlaXZlZF9jb250cm9sIiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLGNvdmFyaWF0ZT0iZmlsZV92ZXJzaW9uIikKc3VtbWFyeShxMSkKZW1tZWFucyhxMSwgfmNvbmRpdGlvbnxmaWxlX3ZlcnNpb24sIGNvbnRyID0gInBhaXJ3aXNlIiwgYWRqdXN0PSJob2xtIikKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlbnRfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9KCJmaWxlX3ZlcnNpb24iKSkKc3VtbWFyeShxMSkKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWNjZXB0IiwgbG9uZ19kYXRhLCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpLCBjb3ZhcmlhdGU9ImZpbGVfdmVyc2lvbiIpCnN1bW1hcnkocTEpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSgiZmlsZV92ZXJzaW9uIikpCnN1bW1hcnkocTEpCmVtbWVhbnMocTEsIH5jb25kaXRpb258ZmlsZV92ZXJzaW9uLCBjb250ciA9ICJwYWlyd2lzZSIsIGFkanVzdD0iaG9sbSIpCgoKIyBmaWxlIHZlcnNpb24KbG9uZ19kYXRhX3R4dCA8LSBsb25nX2RhdGEgJT4lIGZpbHRlcihmaWxlX3ZlcnNpb24gPT0gIi50eHQiKQpsb25nX2RhdGFfbWF0IDwtIGxvbmdfZGF0YSAlPiUgZmlsdGVyKGZpbGVfdmVyc2lvbiA9PSAiLm1hdCIpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZWl2ZWRfY29udHJvbCIsIGxvbmdfZGF0YV9tYXQsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlaXZlZF9jb250cm9sIiwgbG9uZ19kYXRhX3R4dCwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gInBlcmNlbnRfYWNjZXB0IiwgbG9uZ19kYXRhX21hdCwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAicGVyY2VudF9hY2NlcHQiLCBsb25nX2RhdGFfdHh0LCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAibWVhbl9vZmZlcl9hY2NlcHQiLCBsb25nX2RhdGFfbWF0LCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj0iZ3JvdXAiKQpzdW1tYXJ5KHExKQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FjY2VwdCIsIGxvbmdfZGF0YV90eHQsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FsbCIsIGxvbmdfZGF0YV9tYXQsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPSJncm91cCIpCnN1bW1hcnkocTEpCnExIDwtIGFvdl9leihpZCA9ICJpZCIsIGR2ID0gIm1lYW5fb2ZmZXJfYWxsIiwgbG9uZ19kYXRhX3R4dCwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49Imdyb3VwIikKc3VtbWFyeShxMSkKCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1wZXJjZWl2ZWRfY29udHJvbCwgeD1jb25kaXRpb24sIGZpbGw9Z3JvdXApKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCJwZXJjZWl2ZWQgY29udHJvbCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5maWxlX3ZlcnNpb24pCnAxCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1wZXJjZW50X2FjY2VwdCwgeD1jb25kaXRpb24sIGZpbGw9Z3JvdXApKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCIlIG9mZmVycyBhY2NlcHRlZCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5maWxlX3ZlcnNpb24pCnAxCgoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKHk9bWVhbl9vZmZlcl9hY2NlcHQsIHg9Y29uZGl0aW9uLCBmaWxsPWdyb3VwKSkgKyAKICAgIHN0YXRfc3VtbWFyeShnZW9tID0gImJhciIsIGZ1bi55ID0gbWVhbiwgcG9zaXRpb24gPSAiZG9kZ2UiLCBjb2xvcj0iYmxhY2siKSArCiAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiZXJyb3JiYXIiLCBmdW4uZGF0YSA9IG1lYW5fc2UsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC45KSwgd2lkdGggPSAwLjI1LCBjb2xvcj0iYmxhY2siKSArCiAgIHhsYWIoImNvbmRpdGlvbiIpICsgeWxhYigibWVhbiBvZmZlciBhY2NlcHRlZCIpICsgdGhlbWVfcHVicihiYXNlX3NpemUgPSAxNCkgKyBmYWNldF93cmFwKH5maWxlX3ZlcnNpb24pCnAxCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoeT1tZWFuX29mZmVyX2FsbCwgeD1jb25kaXRpb24sIGZpbGw9Z3JvdXApKSArIAogICAgc3RhdF9zdW1tYXJ5KGdlb20gPSAiYmFyIiwgZnVuLnkgPSBtZWFuLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG9yPSJibGFjayIpICsKICBzdGF0X3N1bW1hcnkoZ2VvbSA9ICJlcnJvcmJhciIsIGZ1bi5kYXRhID0gbWVhbl9zZSwgcG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjkpLCB3aWR0aCA9IDAuMjUsIGNvbG9yPSJibGFjayIpICsKICAgeGxhYigiY29uZGl0aW9uIikgKyB5bGFiKCJtZWFuIG9mZmVyIG92ZXJhbGwiKSArIHRoZW1lX3B1YnIoYmFzZV9zaXplID0gMTQpICsgZmFjZXRfd3JhcCh+ZmlsZV92ZXJzaW9uKQpwMQoKCgoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAicGVyY2VpdmVkX2NvbnRyb2wiLCBsb25nX2RhdGFfdHh0LCB3aXRoaW4gPSAiY29uZGl0aW9uIiwgYmV0d2Vlbj1jKCJncm91cCIpKQpzdW1tYXJ5KHExKQpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZWl2ZWRfY29udHJvbCIsIGxvbmdfZGF0YV9tYXQsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPWMoImdyb3VwIikpCnN1bW1hcnkocTEpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJwZXJjZW50X2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSgiZmlsZV92ZXJzaW9uIikpCnN1bW1hcnkocTEpCgpxMSA8LSBhb3ZfZXooaWQgPSAiaWQiLCBkdiA9ICJtZWFuX29mZmVyX2FjY2VwdCIsIGxvbmdfZGF0YSwgd2l0aGluID0gImNvbmRpdGlvbiIsIGJldHdlZW49YygiZ3JvdXAiKSwgY292YXJpYXRlPSJmaWxlX3ZlcnNpb24iKQpzdW1tYXJ5KHExKQoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAibWVhbl9vZmZlcl9hbGwiLCBsb25nX2RhdGEsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPWMoImdyb3VwIiksIGNvdmFyaWF0ZT0oImZpbGVfdmVyc2lvbiIpKQpzdW1tYXJ5KHExKQplbW1lYW5zKHExLCB+Y29uZGl0aW9ufGZpbGVfdmVyc2lvbiwgY29udHIgPSAicGFpcndpc2UiLCBhZGp1c3Q9ImhvbG0iKQoKCmBgYAoKCgoKCgoKCgoKCgoKCgpgYGB7ciwgZXZhbD1GQUxTRSwgZWNobz1GQUxTRX0KIyMjIFdJREUKCmRhdGFfaWNfYWNjIDwtIGRhdGEgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gIklDIiAmIGNob2ljZSA9PSAxKSAKZGF0YV9pY19yZWogPC0gZGF0YSAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAiSUMiICYgY2hvaWNlID09IDApCgpkYXRhX25jX2FjYyA8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uID09ICJOQyIgJiBjaG9pY2UgPT0gMSkKZGF0YV9uY19yZWogPC0gZGF0YSAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAiTkMiICYgY2hvaWNlID09IDApCgpkYXRhX2ljX2FjY19SVCA8LSBkYXRhX2ljX2FjYyAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfYWNjZXB0ID0gbWVhbihSVCkpCmRhdGFfaWNfYWNjX29mZmVyIDwtIGRhdGFfaWNfYWNjICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX2FjY2VwdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX2ljX2FjY19jaG9pY2UgPC0gZGF0YV9pY19hY2MgJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19hY2NlcHQgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfYWNjZXB0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9pY19hY2NfcGMgPC0gZGF0YV9pY19hY2MgJT4lIHNlbGVjdChjKGlkLHVzZS5wYykpICU+JSBkaXN0aW5jdCgpCmRhdGFfaWNfYWNjIDwtIGxlZnRfam9pbihkYXRhX2ljX2FjY19SVCxkYXRhX2ljX2FjY19vZmZlciwgYnkgPSAiaWQiKQpkYXRhX2ljX2FjYyA8LSBsZWZ0X2pvaW4oZGF0YV9pY19hY2MsZGF0YV9pY19hY2NfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfaWNfYWNjKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9pY19hY2MpLCJfSUNfYWNjZXB0IikKZGF0YV9pY19hY2MgPC0gZGF0YV9pY19hY2MgJT4lIGRwbHlyOjpyZW5hbWUoaWQgPSBpZF9JQ19hY2NlcHQpCgpkYXRhX2ljX3Jlal9SVCA8LSBkYXRhX2ljX3JlaiAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfcmVqZWN0ID0gbWVhbihSVCkpCmRhdGFfaWNfcmVqX29mZmVyIDwtIGRhdGFfaWNfcmVqICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX3JlamVjdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX2ljX3Jlal9jaG9pY2UgPC0gZGF0YV9pY19yZWogJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19yZWplY3QgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfcmVqZWN0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9pY19yZWpfcGMgPC0gZGF0YV9pY19yZWogJT4lIHNlbGVjdChjKGlkLHVzZS5wYykpICU+JSBkaXN0aW5jdCgpCmRhdGFfaWNfcmVqIDwtIGxlZnRfam9pbihkYXRhX2ljX3Jlal9SVCxkYXRhX2ljX3Jlal9vZmZlciwgYnkgPSAiaWQiKQpkYXRhX2ljX3JlaiA8LSBsZWZ0X2pvaW4oZGF0YV9pY19yZWosZGF0YV9pY19yZWpfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfaWNfcmVqKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9pY19yZWopLCJfSUMiKQpkYXRhX2ljX3JlaiA8LSBkYXRhX2ljX3JlaiAlPiUgZHBseXI6OnJlbmFtZShpZCA9IGlkX0lDKQojIHBlcmNlaXZlZCBjb250cm9sIElDIGNvbmRpdGlvbgpkYXRhX2ljX3BjIDwtIGRhdGEgJT4lIGZpbHRlcihjb25kaXRpb249PSJJQyIpICU+JSBzZWxlY3QoaWQscGVyY2VpdmVkX2NvbnRyb2wsIGNvbmRpdGlvbikgJT4lIGRpc3RpbmN0KCkgCgpkYXRhX25jX2FjY19SVCA8LSBkYXRhX25jX2FjYyAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfYWNjZXB0ID0gbWVhbihSVCkpCmRhdGFfbmNfYWNjX29mZmVyIDwtIGRhdGFfbmNfYWNjICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX2FjY2VwdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX25jX2FjY19jaG9pY2UgPC0gZGF0YV9uY19hY2MgJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19hY2NlcHQgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfYWNjZXB0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9uY19hY2NfcGMgPC0gZGF0YV9uY19hY2MgJT4lIHNlbGVjdChjKGlkLHVzZS5wYykpICU+JSBkaXN0aW5jdCgpCmRhdGFfbmNfYWNjIDwtIGxlZnRfam9pbihkYXRhX25jX2FjY19SVCxkYXRhX25jX2FjY19vZmZlciwgYnkgPSAiaWQiKQpkYXRhX25jX2FjYyA8LSBsZWZ0X2pvaW4oZGF0YV9uY19hY2MsZGF0YV9uY19hY2NfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfbmNfYWNjKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9uY19hY2MpLCJfTkMiKQpkYXRhX25jX2FjYyA8LSBkYXRhX25jX2FjYyAlPiUgcmVuYW1lKGlkID0gaWRfTkMpCgpkYXRhX25jX3Jlal9SVCA8LSBkYXRhX25jX3JlaiAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfcmVqZWN0ID0gbWVhbihSVCkpCmRhdGFfbmNfcmVqX29mZmVyIDwtIGRhdGFfbmNfcmVqICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX3JlamVjdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX25jX3Jlal9jaG9pY2UgPC0gZGF0YV9uY19yZWogJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19yZWplY3QgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfcmVqZWN0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9uY19yZWpfcGMgPC0gZGF0YV9uY19yZWogJT4lIHNlbGVjdChjKGlkLHVzZS5wYykpICU+JSBkaXN0aW5jdCgpCmRhdGFfbmNfcmVqIDwtIGxlZnRfam9pbihkYXRhX25jX3Jlal9SVCxkYXRhX25jX3Jlal9vZmZlciwgYnkgPSAiaWQiKQpkYXRhX25jX3JlaiA8LSBsZWZ0X2pvaW4oZGF0YV9uY19yZWosZGF0YV9uY19yZWpfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfbmNfcmVqKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9uY19yZWopLCJfTkMiKQpkYXRhX25jX3JlaiA8LSBkYXRhX25jX3JlaiAlPiUgZHBseXI6OnJlbmFtZShpZCA9IGlkX05DKQojIHBlcmNlaXZlZCBjb250cm9sIE5DIGNvbmRpdGlvbgpkYXRhX25jX3BjIDwtIGRhdGEgJT4lIGZpbHRlcihjb25kaXRpb249PSJOQyIpICU+JSBzZWxlY3QoaWQscGVyY2VpdmVkX2NvbnRyb2wsIGNvbmRpdGlvbikgJT4lIGRpc3RpbmN0KCkgCgoKZGF0YV9uYyA8LSBmdWxsX2pvaW4oZGF0YV9uY19hY2MsZGF0YV9uY19yZWosYnk9ImlkIikKZGF0YV9uYyA8LSBmdWxsX2pvaW4oZGF0YV9uYywgZGF0YV9uY19wYyxieT0iaWQiKQoKZGF0YV9pYyA8LSBmdWxsX2pvaW4oZGF0YV9pY19hY2MsZGF0YV9pY19yZWosYnk9ImlkIikKZGF0YV9pYyA8LSBmdWxsX2pvaW4oZGF0YV9pYywgZGF0YV9pY19wYyxieT0iaWQiKQoKb3JkZXIgPC0gZGF0YSAlPiUgc2VsZWN0KG9yZGVyLGZpbGVfdmVyc2lvbixpZCkgJT4lIGRpc3RpbmN0KCkKCndpZGUgPC0gZnVsbF9qb2luKGRhdGFfbmMsZGF0YV9pYywgYnk9ImlkIikKd2lkZSA8LSBsZWZ0X2pvaW4od2lkZSxwcHQpICU+JSBzZWxlY3QoIXN0YXJ0c193aXRoKCJjb25kaXRpb24iKSkKd2lkZSA8LSBsZWZ0X2pvaW4od2lkZSxvcmRlcikKd2lkZSA8LSB3aWRlICU+JSBtdXRhdGUoYWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCByb3VuZCwgMykpCgp3cml0ZS5jc3Yod2lkZSwiVUdfZGF0YXNldF93aWRlLmNzdiIsIG5hID0gIiIpCgoKYGBgCgpgYGB7ciwgZXZhbD1GQUxTRSwgZWNobz1GQUxTRX0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgU0lNVUxBVEVEIERBVEEKbGlicmFyeShmYXV4KQoKc2ltX2RhdGFMPC0gZGF0YSAlPiUgc2VsZWN0KHdoZXJlKGlzLm51bWVyaWMpKSAlPiUgc2VsZWN0KC1jKG9yZGVyLHBjLHBlcmNlaXZlZF9jb250cm9sKSkKc2ltX3BjX2wgPC0gZGF0YSAlPiUgc2VsZWN0KHBlcmNlaXZlZF9jb250cm9sKSAlPiUgYXJyYW5nZSgpCnNpbV9wY193IDwtIGRhdGEgJT4lIHNlbGVjdChwZXJjZWl2ZWRfY29udHJvbCxpZCxjb25kaXRpb24pICU+JSBkaXN0aW5jdCgpCnNpbV9kYXRhTCA8LSBzaW1fZGYoc2ltX2RhdGFMLG49MzM1MCkgJT4lIHNlbGVjdCghaWQpICAlPiUgYWJzKCkKc2ltX2RhdGFMMSA8LSBkYXRhICU+JSBzZWxlY3QoIXdoZXJlKGlzLm51bWVyaWMpKSAgCnNpbV9kYXRhX2lkIDwtIHNpbV9kYXRhTDEgJT4lIHNlbGVjdChpZCkgCnNpbV9kYXRhTDEgPC0gc2ltX2RhdGFMMSAlPiUgc2VsZWN0KCFpZCkgCnNpbV9kYXRhX2lkJElEIDwtIHN0cl9zb3J0KHNpbV9kYXRhX2lkJGlkKQpzaW1fZGF0YUxvbmcgPC0gYmluZF9jb2xzKHNpbV9kYXRhX2lkLHNpbV9kYXRhTDEpCnNpbV9kYXRhTG9uZyA8LSBzaW1fZGF0YUxvbmcgJT4lIHNlbGVjdCghc3RhcnRzX3dpdGgoImlkIiwgaWdub3JlLmNhc2UgPSBGQUxTRSkpICU+JSByZW5hbWUoaWQgPSBJRCkKc2ltX2RhdGFMb25nIDwtIGJpbmRfY29scyhzaW1fZGF0YUxvbmcsc2ltX2RhdGFMKSAKc2ltX2RhdGFMb25nIDwtIGJpbmRfY29scyhzaW1fZGF0YUxvbmcsc2ltX3BjX2wpCgojIyMgQWRkIENBUFMgc3ggYW5kIGRlbW9ncmFwaGljcwojIAogY2xpbiA8LSByZWFkUkRTKCIvVXNlcnMvc2FyZW5zZWVsZXkvRHJvcGJveC9Qb3N0ZG9jL253dGNfc3R1ZHkvZGF0YS9fY2xlYW5lZC9ud3RjX2RhdGFfY2xlYW5lZF8wNy0yNS0yMi5yZHMiKQogY2xpbiA8LSBjbGluICU+JSBzZWxlY3Qoc3RhcnRzX3dpdGgoInRvdF9tb3MiKXwgc3RhcnRzX3dpdGgoIkNBUFM1X1BNX3RvdGFsIikgfCBzdGFydHNfd2l0aCgiYWdlXyIpIHwgc3RhcnRzX3dpdGgoImdlbmRlcl8xaXNGIikgfCBzdGFydHNfd2l0aCgiaW5jb21lTGV2ZWwiKSB8IHN0YXJ0c193aXRoKCJyZWNvcmRfaWQiKSkgJT4lIHJlbmFtZShpZCA9IHJlY29yZF9pZCkgCiBzaW1fZGF0YUxvbmcgPC0gbGVmdF9qb2luKHNpbV9kYXRhTG9uZyxjbGluLGJ5PSJpZCIpCiBjaG9pY2UgPC0gYXMuZGF0YS5mcmFtZShyZXAoMDoxLCB0aW1lcz0zMzUwLzIpKQogc2ltX2RhdGFMb25nIDwtIGJpbmRfY29scyhzaW1fZGF0YUxvbmcsY2hvaWNlKQogc2ltX2RhdGFMb25nIDwtIHNpbV9kYXRhTG9uZyAlPiUgbXV0YXRlKGNob2ljZT1gcmVwKDA6MSwgdGltZXMgPSAzMzUwLzIpYCkKd3JpdGUuY3N2KHNpbV9kYXRhTG9uZywiVUdfZGF0YXNldF9sb25nZXJfc2ltdWxhdGVkLmNzdiIsIG5hID0gIi4iKQoKc2ltX2RhdGFMb25nMjwtIHNpbV9kYXRhTG9uZyAlPiUgZ3JvdXBfYnkoaWQsY29uZGl0aW9uKSAlPiUgc3VtbWFyaXplKG1lYW4ob2ZmZXIpLG1lYW4ocmV3YXJkKSxtZWFuKFJUKSxzdW0oY2hvaWNlKS8zMCkKd3JpdGUuY3N2KHNpbV9kYXRhTG9uZzIsIlVHX2RhdGFzZXRfbG9uZ19tZWFuc19zaW11bGF0ZWQuY3N2IiwgbmEgPSAiLiIpCgoKIyBzaW11bGF0ZWQgV0lERSBkYXRhc2V0CmRhdGFfaWNfYWNjIDwtIHNpbV9kYXRhTG9uZyAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAiSUMiICYgY2hvaWNlID09IDEpCmRhdGFfaWNfcmVqIDwtIHNpbV9kYXRhTG9uZyAlPiUgZmlsdGVyKGNvbmRpdGlvbiA9PSAiSUMiICYgY2hvaWNlID09IDApCgpkYXRhX25jX2FjYyA8LSBzaW1fZGF0YUxvbmcgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gIk5DIiAmIGNob2ljZSA9PSAxKQpkYXRhX25jX3JlaiA8LSBzaW1fZGF0YUxvbmcgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gIk5DIiAmIGNob2ljZSA9PSAwKQoKZGF0YV9pY19hY2NfUlQgPC0gZGF0YV9pY19hY2MgJT4lICBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX1JUX2FjY2VwdCA9IG1lYW4oUlQpKQpkYXRhX2ljX2FjY19vZmZlciA8LSBkYXRhX2ljX2FjYyAlPiUgZ3JvdXBfYnkoaWQpICU+JSBzdW1tYXJpc2UobWVhbl9vZmZlcl9hY2NlcHQgPSBtZWFuKG9mZmVyKSkKZGF0YV9pY19hY2NfY2hvaWNlIDwtIGRhdGFfaWNfYWNjICU+JSBzZWxlY3QoYyhpZCxjaG9pY2UpKSAlPiUgZ3JvdXBfYnkoaWQpICU+JSBhZGRfY291bnQoY2hvaWNlKSAlPiUgbXV0YXRlKHBlcmNfYWNjZXB0ID0gbi8zMCkgJT4lIHNlbGVjdChpZCxwZXJjX2FjY2VwdCkgJT4lIGRpc3RpbmN0KCkKI2RhdGFfaWNfYWNjX3BjIDwtIGRhdGFfaWNfYWNjICU+JSBzZWxlY3QoYyhpZCxwZXJjZWl2ZWRfY29udHJvbCkpICU+JSBkaXN0aW5jdCgpCmRhdGFfaWNfYWNjIDwtIGxlZnRfam9pbihkYXRhX2ljX2FjY19SVCxkYXRhX2ljX2FjY19vZmZlciwgYnkgPSAiaWQiKQpkYXRhX2ljX2FjYyA8LSBsZWZ0X2pvaW4oZGF0YV9pY19hY2MsZGF0YV9pY19hY2NfY2hvaWNlLCBieSA9ICJpZCIpCmNvbG5hbWVzKGRhdGFfaWNfYWNjKSA8LSBwYXN0ZTAoY29sbmFtZXMoZGF0YV9pY19hY2MpLCJfSUNfYWNjZXB0IikKZGF0YV9pY19hY2MgPC0gZGF0YV9pY19hY2MgJT4lIGRwbHlyOjpyZW5hbWUoaWQgPSBpZF9JQ19hY2NlcHQpCgpkYXRhX2ljX3Jlal9SVCA8LSBkYXRhX2ljX3JlaiAlPiUgIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fUlRfcmVqZWN0ID0gbWVhbihSVCkpCmRhdGFfaWNfcmVqX29mZmVyIDwtIGRhdGFfaWNfcmVqICU+JSBncm91cF9ieShpZCkgJT4lIHN1bW1hcmlzZShtZWFuX29mZmVyX3JlamVjdCA9IG1lYW4ob2ZmZXIpKQpkYXRhX2ljX3Jlal9jaG9pY2UgPC0gZGF0YV9pY19yZWogJT4lIHNlbGVjdChjKGlkLGNob2ljZSkpICU+JSBncm91cF9ieShpZCkgJT4lIGFkZF9jb3VudChjaG9pY2UpICU+JSBtdXRhdGUocGVyY19yZWplY3QgPSBuLzMwKSAlPiUgc2VsZWN0KGlkLHBlcmNfcmVqZWN0KSAlPiUgZGlzdGluY3QoKQojZGF0YV9pY19yZWpfcGMgPC0gZGF0YV9pY19yZWogJT4lIHNlbGVjdChjKGlkLHBlcmNlaXZlZF9jb250cm9sKSkgJT4lIGRpc3RpbmN0KCkKZGF0YV9pY19yZWogPC0gbGVmdF9qb2luKGRhdGFfaWNfcmVqX1JULGRhdGFfaWNfcmVqX29mZmVyLCBieSA9ICJpZCIpCmRhdGFfaWNfcmVqIDwtIGxlZnRfam9pbihkYXRhX2ljX3JlaixkYXRhX2ljX3Jlal9jaG9pY2UsIGJ5ID0gImlkIikKY29sbmFtZXMoZGF0YV9pY19yZWopIDwtIHBhc3RlMChjb2xuYW1lcyhkYXRhX2ljX3JlaiksIl9JQyIpCmRhdGFfaWNfcmVqIDwtIGRhdGFfaWNfcmVqICU+JSBkcGx5cjo6cmVuYW1lKGlkID0gaWRfSUMpCiMgcGVyY2VpdmVkIGNvbnRyb2wgSUMgY29uZGl0aW9uCmRhdGFfaWNfcGMgPC0gc2ltX3BjX3cgJT4lIGZpbHRlcihjb25kaXRpb249PSJJQyIpICAlPiUgc2VsZWN0KHBlcmNlaXZlZF9jb250cm9sLGlkKSAlPiUgYXJyYW5nZShwZXJjZWl2ZWRfY29udHJvbCkKCmRhdGFfbmNfYWNjX1JUIDwtIGRhdGFfbmNfYWNjICU+JSAgZ3JvdXBfYnkoaWQpICU+JSBzdW1tYXJpc2UobWVhbl9SVF9hY2NlcHQgPSBtZWFuKFJUKSkKZGF0YV9uY19hY2Nfb2ZmZXIgPC0gZGF0YV9uY19hY2MgJT4lIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fb2ZmZXJfYWNjZXB0ID0gbWVhbihvZmZlcikpCmRhdGFfbmNfYWNjX2Nob2ljZSA8LSBkYXRhX25jX2FjYyAlPiUgc2VsZWN0KGMoaWQsY2hvaWNlKSkgJT4lIGdyb3VwX2J5KGlkKSAlPiUgYWRkX2NvdW50KGNob2ljZSkgJT4lIG11dGF0ZShwZXJjX2FjY2VwdCA9IG4vMzApICU+JSBzZWxlY3QoaWQscGVyY19hY2NlcHQpICU+JSBkaXN0aW5jdCgpCiNkYXRhX25jX2FjY19wYyA8LSBkYXRhX25jX2FjYyAlPiUgc2VsZWN0KGMoaWQscGVyY2VpdmVkX2NvbnRyb2wpKSAlPiUgZGlzdGluY3QoKQpkYXRhX25jX2FjYyA8LSBsZWZ0X2pvaW4oZGF0YV9uY19hY2NfUlQsZGF0YV9uY19hY2Nfb2ZmZXIsIGJ5ID0gImlkIikKZGF0YV9uY19hY2MgPC0gbGVmdF9qb2luKGRhdGFfbmNfYWNjLGRhdGFfbmNfYWNjX2Nob2ljZSwgYnkgPSAiaWQiKQpjb2xuYW1lcyhkYXRhX25jX2FjYykgPC0gcGFzdGUwKGNvbG5hbWVzKGRhdGFfbmNfYWNjKSwiX05DIikKZGF0YV9uY19hY2MgPC0gZGF0YV9uY19hY2MgJT4lIGRwbHlyOjpyZW5hbWUoaWQgPSBpZF9OQykKCmRhdGFfbmNfcmVqX1JUIDwtIGRhdGFfbmNfcmVqICU+JSAgZ3JvdXBfYnkoaWQpICU+JSBzdW1tYXJpc2UobWVhbl9SVF9yZWplY3QgPSBtZWFuKFJUKSkKZGF0YV9uY19yZWpfb2ZmZXIgPC0gZGF0YV9uY19yZWogJT4lIGdyb3VwX2J5KGlkKSAlPiUgc3VtbWFyaXNlKG1lYW5fb2ZmZXJfcmVqZWN0ID0gbWVhbihvZmZlcikpCmRhdGFfbmNfcmVqX2Nob2ljZSA8LSBkYXRhX25jX3JlaiAlPiUgc2VsZWN0KGMoaWQsY2hvaWNlKSkgJT4lIGdyb3VwX2J5KGlkKSAlPiUgYWRkX2NvdW50KGNob2ljZSkgJT4lIG11dGF0ZShwZXJjX3JlamVjdCA9IG4vMzApICU+JSBzZWxlY3QoaWQscGVyY19yZWplY3QpICU+JSBkaXN0aW5jdCgpCiNkYXRhX25jX3Jlal9wYyA8LSBkYXRhX25jX3JlaiAlPiUgc2VsZWN0KGMoaWQscGVyY2VpdmVkX2NvbnRyb2wpKSAlPiUgZGlzdGluY3QoKQpkYXRhX25jX3JlaiA8LSBsZWZ0X2pvaW4oZGF0YV9uY19yZWpfUlQsZGF0YV9uY19yZWpfb2ZmZXIsIGJ5ID0gImlkIikKZGF0YV9uY19yZWogPC0gbGVmdF9qb2luKGRhdGFfbmNfcmVqLGRhdGFfbmNfcmVqX2Nob2ljZSwgYnkgPSAiaWQiKQpjb2xuYW1lcyhkYXRhX25jX3JlaikgPC0gcGFzdGUwKGNvbG5hbWVzKGRhdGFfbmNfcmVqKSwiX05DIikKZGF0YV9uY19yZWogPC0gZGF0YV9uY19yZWogJT4lIGRwbHlyOjpyZW5hbWUoaWQgPSBpZF9OQykKIyBwZXJjZWl2ZWQgY29udHJvbCBOQyBjb25kaXRpb24KZGF0YV9uY19wYyA8LSBzaW1fcGNfdyAlPiUgZmlsdGVyKGNvbmRpdGlvbj09Ik5DIikgJT4lIHNlbGVjdChwZXJjZWl2ZWRfY29udHJvbCxpZCkgJT4lIGFycmFuZ2UocGVyY2VpdmVkX2NvbnRyb2wpCgoKCmRhdGFfbmMgPC0gZnVsbF9qb2luKGRhdGFfbmNfYWNjLGRhdGFfbmNfcmVqLGJ5PSJpZCIpCmRhdGFfbmMgPC0gZnVsbF9qb2luKGRhdGFfbmMsIGRhdGFfbmNfcGMsYnk9ImlkIikKCmRhdGFfaWMgPC0gZnVsbF9qb2luKGRhdGFfaWNfYWNjLGRhdGFfaWNfcmVqLGJ5PSJpZCIpCmRhdGFfaWMgPC0gZnVsbF9qb2luKGRhdGFfaWMsIGRhdGFfaWNfcGMsYnk9ImlkIikKCndpZGUgPC0gZnVsbF9qb2luKGRhdGFfbmMsZGF0YV9pYywgYnk9ImlkIikKd2lkZSA8LSBsZWZ0X2pvaW4od2lkZSxwcHQpICU+JSBzZWxlY3QoIXN0YXJ0c193aXRoKCJjb25kaXRpb24iKSkKd2lkZSA8LSB3aWRlICU+JSBtdXRhdGUoYWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCByb3VuZCwgMykpIAoKb3JkZXIgPC0gYXMuZGF0YS5mcmFtZShyZXAoMToyLCB0aW1lcz01Ny8yKSkKb3JkZXJbNTcsXSA8LSAyCndpZGU8LSBiaW5kX2NvbHMod2lkZSxvcmRlcikKd2lkZSA8LSB3aWRlICU+JSByZW5hbWUob3JkZXI9YHJlcCgxOjIsIHRpbWVzID0gNTcvMilgKQoKCgojIyMgQWRkIENBUFMgc3ggYW5kIGRlbW9ncmFwaGljcwoKY2xpbiA8LSByZWFkUkRTKCIvVXNlcnMvc2FyZW5zZWVsZXkvRHJvcGJveC9Qb3N0ZG9jL253dGNfc3R1ZHkvZGF0YS9fY2xlYW5lZC9ud3RjX2RhdGFfY2xlYW5lZF8wNy0yNS0yMi5yZHMiKQpjbGluIDwtIGNsaW4gJT4lIHNlbGVjdChzdGFydHNfd2l0aCgidG90X21vcyIpfCBzdGFydHNfd2l0aCgiQ0FQUzVfUE1fdG90YWwiKSB8IHN0YXJ0c193aXRoKCJhZ2UiKSB8IHN0YXJ0c193aXRoKCJnZW5kZXJfMWlzRiIpIHwgc3RhcnRzX3dpdGgoImluY29tZUxldmVsIikpIAoKc2ltX2NsaW4gPC1jbGluICU+JSBzZWxlY3Qod2hlcmUoaXMubnVtZXJpYykpIApzaW1fY2xpbiA8LSBzaW1fY2xpbiAlPiUgc2xpY2UoMTo1NykgCndpZGU8LWJpbmRfY29scyh3aWRlLHNpbV9jbGluKSAlPiUgYXJyYW5nZShDQVBTNV9QTV90b3RhbCkgCgp3cml0ZS5jc3Yod2lkZSwiVUdfZGF0YXNldF93aWRlX3NpbXVsYXRlZC5jc3YiLCBuYSA9ICIuIikKCiNybShsaXN0ID0gbHMoKSkKYGBgCgoKCgojIyBCb3hwbG90cwpTb21lIHBlb3BsZSBwcmVmZXIgdGhlc2Ugb3ZlciBiYXIgY2hhcnRzIGJlY2F1c2UgeW91IGNhbiBzZWUgdGhlIGFjdHVhbCBkYXRhIHBvaW50cyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBkYXRhLi4uCmBgYHtyfQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PW1lYW5fb2ZmZXJfYWNjZXB0LCB4PWdyb3VwKSkgKyAKICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMSkgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiMwMEJBMzgiLCIjNjE5Q0ZGIiwiI0Y4NzY2RCIpKSArIAogIHlsYWIoIm1lYW4gb2ZmZXIgYWNjZXB0ZWQiKSArIHhsYWIoImdyb3VwIHggY29uZGl0aW9uIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSkgKyB0aGVtZV9wdWJyKCkgKyBmYWNldF93cmFwKH5jb25kaXRpb24pCnAxCgpwMSA8LSBnZ3Bsb3QobG9uZ19kYXRhLCBhZXMoY29sb3I9Z3JvdXAsIHk9bWVhbl9vZmZlcl9hbGwsIHg9Z3JvdXApKSArIAogIGdlb21fYm94cGxvdCgpICsgZ2VvbV9wb2ludCgpICsgIGdlb21faml0dGVyKHdpZHRoID0gMC4xKSArIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiIzAwQkEzOCIsIiM2MTlDRkYiLCIjRjg3NjZEIikpICsgCiAgeWxhYigibWVhbiBvZmZlciBvdmVyYWxsIikgKyB4bGFiKCJncm91cCB4IGNvbmRpdGlvbiIpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpICsgdGhlbWVfcHVicigpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKQpwMQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PXBlcmNlbnRfYWNjZXB0LCB4PWdyb3VwKSkgKyAKICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMSkgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiMwMEJBMzgiLCIjNjE5Q0ZGIiwiI0Y4NzY2RCIpKSArIAogIHlsYWIoIiUgb2ZmZXJzIGFjY2VwdGVkIikgKyB4bGFiKCJncm91cCB4IGNvbmRpdGlvbiIpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpICsgdGhlbWVfcHVicigpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKQpwMQoKcDEgPC0gZ2dwbG90KGxvbmdfZGF0YSwgYWVzKGNvbG9yPWdyb3VwLCB5PXBlcmNlaXZlZF9jb250cm9sLCB4PWdyb3VwKSkgKyAKICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMSkgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiMwMEJBMzgiLCIjNjE5Q0ZGIiwiI0Y4NzY2RCIpKSArIAogIHlsYWIoInBlcmNlaXZlZCBjb250cm9sIikgKyB4bGFiKCJncm91cCB4IGNvbmRpdGlvbiIpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpICsgdGhlbWVfcHVicigpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKSAKcDEKCnAxIDwtIGdncGxvdChsb25nX2RhdGEsIGFlcyhjb2xvcj1ncm91cCwgeT1tZWFuX1JULCB4PWdyb3VwKSkgKyAKICBnZW9tX2JveHBsb3QoKSArIGdlb21fcG9pbnQoKSArICBnZW9tX2ppdHRlcih3aWR0aCA9IDAuMSkgKyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoIiMwMEJBMzgiLCIjNjE5Q0ZGIiwiI0Y4NzY2RCIpKSArIAogIHlsYWIoInJlYWN0aW9uIHRpbWUiKSArIHhsYWIoImNvbmRpdGlvbiIpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpICsgdGhlbWVfcHVicigpICsgZmFjZXRfd3JhcCh+Y29uZGl0aW9uKSAKcDEKCmBgYAojIyBEZW1vZ3JhcGhpY3MKCiMjIyMjIFNleAoKbiA9IDU2IHBhcnRpY2lwYW50cyB0b3RhbCwgb2Ygd2hpY2ggOSAoMTYlKSBhcmUgZmVtYWxlLgoKVGhlcmUgYXJlIDE0IGluIHRoZSBQVFNEIGdyb3VwICgyIHdvbWVuKSwgMTYgTG93LWV4cG9zZWQgKDQgd29tZW4pLCBhbmQgMjYgUmVzaWxpZW50ICgzIHdvbWVuKS4KCiMjIyMjIEFnZQoKKiBQVFNEOiBNZWFuIChNKSA9IDU0LjE1LCBTdGFuZGFyZCBEZXZpYXRpb24gKFNEKSA9IDYuMjAKKiBMb3ctZXhwb3NlZDogTSA9IDUxLjQ3LCBTRCA9IDYuMjEKKiBQVFNEOiBNID0gNTQuMzUsIFNEIChTRCkgPSA0LjUzCgoKIyMjIyBJbmNvbWUKCiogSW5jb21lIChhbm51YWwpIGJyYWNrZXRzOiA8YCQ4MGtgLCBgJDgwLTExMGtgLCBgJDExMC0xMzBrYCwgYCQxMzBrK2AKICAqIE9yaWdpbmFsIGFuc3dlciBjaG9pY2VzIGxpc3RlZCBpbmNvbWUgaW4gfjEwayBpbnRlcnZhbHMsIGJ1dCBub3QgZXZlcnkgaW5jb21lIGxldmVsIHdhcyByZXByZXNlbnRlZCBpbiBldmVyeSBncm91cCBzbyB3ZSBjb25kZW5zZWQgdGhlbSBpbnRvIDQgY2F0ZWdvcmllcyBpbnN0ZWFkIG9mIDE2CgoqIEdyb3VwcyBkbyBub3Qgc2lnbmlmaWNhbnRseSBkaWZmZXIgb24gYW5udWFsIGluY29tZSAodXNpbmcgdGhlIDQgY2F0ZWdvcmllcyBhYm92ZSksIGJhc2VkIG9uIENoaSBzcXVhcmUgdGVzdCBkYXRhIChYLXNxdWFyZWQgPSAxMC41MzMsIHAtdmFsdWUgPi4xMCkKCgpgYGB7cn0KCmxvbmdfZGF0YSAlPiUgZGlzdGluY3QoaWQsIC5rZWVwX2FsbCA9IFRSVUUpICU+JSBncm91cF9ieShncm91cCkgJT4lIGNvdW50KCkKCmxvbmdfZGF0YSAlPiUgZGlzdGluY3QoaWQsIC5rZWVwX2FsbCA9IFRSVUUpICU+JSBncm91cF9ieShncm91cCkgJT4lIHN1bW1hcmlzZShtZWFuKG5hLm9taXQoYWdlX3Zpc2l0MSkpLCBzZChuYS5vbWl0KGFnZV92aXNpdDEpKSwgc3VtKG5hLm9taXQoZ2VuZGVyXzFpc0YpKSkKCmluY29tZSA8LSBsb25nX2RhdGEgJT4lIGRpc3RpbmN0KGlkLCAua2VlcF9hbGwgPSBUUlVFKSAKY2hpc3EudGVzdChpbmNvbWUkZ3JvdXAsaW5jb21lJGluY29tZSwgc2ltdWxhdGUucC52YWx1ZSA9IFRSVUUpCmBgYAoKClRoZSB0YWJsZSBiZWxvdyBsaXN0cyBpbmNvbWUgaW4gZWFjaCBncm91cC4gV2Ugc2VlIHRoYXQgNTAlIG9mIHRoZSBMb3ctZXhwb3NlZCBhbmQgNDIlIG9mIHRoZSBSZXNpbGllbnQgZ3JvdXAgaGF2ZSBhbiBhbm51YWwgaG91c2Vob2xkIGluY29tZSBvZiBgJDEzMGtgIG9yIG1vcmUsIHdoZXJlYXMgb25seSAxNCUgb2YgdGhlIFBUU0QgZ3JvdXAgYXJlIGluIHRoYXQgY2F0ZWdvcnkuIENvbnZlcnNlbHksIDQzJSBvZiB0aGUgUFRTRCBncm91cCBoYXZlIGFuIGFubnVhbCBob3VzZWhvbGQgaW5jb21lIG9mIGAkODBrYCBvciBsZXNzLgoKYGBge3J9CmxpYnJhcnkoZm9yY2F0cykKaW5jb21lIDwtIGxvbmdfZGF0YSAlPiUgZGlzdGluY3QoaWQsIC5rZWVwX2FsbCA9IFRSVUUpIAoKaW5jb21lIDwtaW5jb21lICU+JSBncm91cF9ieShncm91cCkgJT4lIGNvdW50KGluY29tZSkgJT4lCiAgbXV0YXRlKGAoXFwlKWAgPSBwcm9wLnRhYmxlKG4pKjEwMCkgJT4lIG11dGF0ZShpbmNvbWUgPSBmY3RfcmVsZXZlbChpbmNvbWUsIjw9JDgwayIsIiQ4MC0xMTBrIiwgIiQxMTAtMTMwayIsIiQxMzBrKyIpKQoKcDEgPC0gZ2dwbG90KGluY29tZSwgYWVzKGZpbGw9Z3JvdXAsIHk9YChcXCUpYCwgeCA9aW5jb21lKSkgKyAKICBnZW9tX2NvbCgpICsgCnNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiIzAwQkEzOCIsIiM2MTlDRkYiLCIjRjg3NjZEIikpICsgCiAgeWxhYigiJSIpICsgeGxhYigiIikgKyB0aGVtZV9wdWJjbGVhbigpICsgZmFjZXRfZ3JpZCh+Z3JvdXApICsKICB0aGVtZSgKICAgIHBhbmVsLnNwYWNpbmcgPSB1bml0KDAsICdwdCcpLAogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT0xMSxhbmdsZT0yNSx2anVzdD0uNSxmYWNlID0gImJvbGQiKSkgCnAxCgpgYGAKCmBgYHtyIGV2YWw9RkFMU0UsIGVjaG89RkFMU0V9CmRhdGEgPC0gbGVmdF9qb2luKGRhdGEsY2xpbixieT0iaWQiKQpkYXRhIDwtIGRhdGEgJT4lIG11dGF0ZShwdHNkX2N0bCA9IGlmX2Vsc2UoZ3JvdXA9PSJQVFNEIiwgMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbWUgPSByZWNvZGVfZmFjdG9yKGluY29tZUxldmVsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICI8PSQzMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIjw9JDMwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiPD0kMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICIkMzAtNTBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICIkMzAtNTBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI2IiA9ICIkNTAtODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI3IiA9ICIkNTAtODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4IiA9ICIkNTAtODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI5IiA9ICIkODAtMTAwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAiID0gIiQ4MC0xMDBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMSIgPSAiJDEwMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMiIgPSAiJDEwMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMyIgPSAiJDEwMC0xMzBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNCIgPSAiJDEzMGsrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxNSIgPSAiJDEzMGsrIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21lID0gcmVjb2RlX2ZhY3RvcihpbmNvbWVMZXZlbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjYiID0gIjw9JDgwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNyIgPSAiPD0kODBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4IiA9ICI8PSQ4MGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkiID0gIiQ4MC0xMTBrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxMCIgPSAiJDgwLTExMGsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjExIiA9ICIkODAtMTEwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTIiID0gIiQxMTAtMTMwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTMiID0gIiQxMTAtMTMwayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTQiID0gIiQxMzBrKyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTUiID0gIiQxMzBrKyIpKQoKbGlicmFyeShsbWU0KQpsaWJyYXJ5KGxtZXJUZXN0KQptMSA8LSBsbWVyKFJUIH4gZ3JvdXAqY29uZGl0aW9uICsgKDEgfCBpZCksIGRhdGEgPSBkYXRhKQpzdW1tYXJ5KG0xKQooYW92IDwtIGFub3ZhKG0xKSkKCiMjIEluc3BlY3QgdGhlIGNvbnRyYXN0IG1hdHJpeCBmb3IgdGhlIFR5cGUgSUlJIHRlc3Qgb2YgUHJvZHVjdDoKc2hvd190ZXN0cyhhb3YsIGZyYWN0aW9ucyA9IFRSVUUpJGNvbmRpdGlvbgojIyBBbm92YS1saWtlIHRhYmxlIG9mIHJhbmRvbS1lZmZlY3QgdGVybXMgdXNpbmcgbGlrZWxpaG9vZCByYXRpbyB0ZXN0czoKcmFub3ZhKG0xKQoKIyMgRi10ZXN0cyBvZiAnc2luZ2xlIHRlcm0gZGVsZXRpb25zJyBmb3IgYWxsIG1hcmdpbmFsIHRlcm1zOgpkcm9wMShtMSkKCiMjIExlYXN0LVNxdWFyZSBtZWFucyBhbmQgcGFpcndpc2UgZGlmZmVyZW5jZXM6Cihsc20gPC0gbHNfbWVhbnMobTEpKQpsc19tZWFucyhtMSwgd2hpY2ggPSAiY29uZGl0aW9uIiwgcGFpcndpc2UgPSBUUlVFKQoKIyMgbHNfbWVhbnMgYWxzbyBoYXZlIHBsb3QgYW5kIGFzLmRhdGEuZnJhbWUgbWV0aG9kczoKIyMgTm90IHJ1bjogCnBsb3QobHNtLCB3aGljaD1jKCJncm91cCIsICJjb25kaXRpb24iKSkKYXMuZGF0YS5mcmFtZShsc20pCiMjIEluc3BlY3QgdGhlIExTLW1lYW5zIGNvbnRyYXN0czoKc2hvd190ZXN0cyhsc20sIGZyYWN0aW9ucz1UUlVFKSRQcm9kdWN0CgojIyBFbmQoTm90IHJ1bikKCiMjIENvbnRyYXN0IHRlc3QgKGNvbnRlc3QpIHVzaW5nIGEgY3VzdG9tIGNvbnRyYXN0OgojIyBIZXJlIHdlIG1ha2UgdGhlIDItZGYgam9pbnQgdGVzdCBvZiB0aGUgbWFpbiBlZmZlY3RzIG9mIEdlbmRlciBhbmQgSW5mb3JtYXRpb24KKEwgPC0gZGlhZyhsZW5ndGgoZml4ZWYobTEpKSlbMjozLCBdKQpjb250ZXN0KG0xLCBMID0gTCkKCiMjIGJhY2t3YXJkIGVsaW1pbmF0aW9uIG9mIG5vbi1zaWduaWZpY2FudCBlZmZlY3RzOgpzdGVwX3Jlc3VsdCA8LSBzdGVwKG0xKQoKIyMgRWxpbWluYXRpb24gdGFibGVzIGZvciByYW5kb20tIGFuZCBmaXhlZC1lZmZlY3QgdGVybXM6CnN0ZXBfcmVzdWx0CgojIEV4dHJhY3QgdGhlIG1vZGVsIHRoYXQgc3RlcCBmb3VuZDoKZmluYWxfbW9kZWwgPC0gZ2V0X21vZGVsKHN0ZXBfcmVzdWx0KQpzdW1tYXJ5KGZpbmFsX21vZGVsKQoKc3VtbWFyeShtMSkgICAKY29uZmludChtMSkKCiMgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IHRoZSBlbnRpcmUgbW9kZWwgCmZpdHRlZF9tMSA8LSBmaXR0ZWQobTEpCmRhdGFfYmlhcyRmaXR0ZWRfcTNsbWUgPC0gYXMudmVjdG9yKGZpdHRlZF9xM2xtZSkKZm9yUjIgPC0gbG0oZ0FBVF9iaWFzIH4gZml0dGVkX3EzbG1lLCBkYXRhPWRhdGFfYmlhcykKc3VtbWFyeShmb3JSMikgCgptMSA8LSBsbWVyKHBlcmNlaXZlZF9jb250cm9sIH4gcHRzZF9jdGwgKiBjb25kaXRpb24gKyAoMSB8IGlkKSwgZGF0YSA9IGxvbmdfZGF0YSkKc3VtbWFyeShtMSkgICAgIAogICAgICAgICAgIAptMSA8LSBsbWUocGVyY2VpdmVkX2NvbnRyb2wgfiBDQVBTNV9QTV90b3RhbCAqIGNvbmRpdGlvbiArIGluY29tZSwgcmFuZG9tPSB+MXxpZCwgbmEub21pdChkYXRhTG9uZzIpLCBtZXRob2Q9IlJFTUwiKQpzdW1tYXJ5KG0xKQpBbm92YShtMSkKCnBsb3QobG9uZ19kYXRhJENBUFM1X1BNX3RvdGFsLGxvbmdfZGF0YSRwZXJjZWl2ZWRfY29udHJvbCkKcGxvdChsb25nX2RhdGEkQ0FQUzVfUE1fdG90YWwsbG9uZ19kYXRhJHBlcmNlbnRfYWNjZXB0KQpwbG90KGxvbmdfZGF0YSRDQVBTNV9QTV90b3RhbCxsb25nX2RhdGEkbWVhbl9vZmZlcl9hY2NlcHQpCgppbmNfZGF0YSA8LSBsb25nX2RhdGEoKQoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAibWVhbl9vZmZlcl9hY2NlcHQiLCBsb25nX2RhdGEsIHdpdGhpbiA9ICJjb25kaXRpb24iLCBiZXR3ZWVuPWMoImdyb3VwIiksIGNvdmFyaWF0ZSA9ICJpbmNvbWVMZXZlbCIpCnN1bW1hcnkocTEpCiMgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IHRoZSBlbnRpcmUgbW9kZWwgCmZpdHRlZF9xMSA8LSBmaXR0ZWQocTEpCmRhdGFfYmlhcyRmaXR0ZWRfcTNsbWUgPC0gYXMudmVjdG9yKGZpdHRlZF9xM2xtZSkKZm9yUjIgPC0gbG0oZ0FBVF9iaWFzIH4gZml0dGVkX3EzbG1lLCBkYXRhPWRhdGFfYmlhcykKc3VtbWFyeShmb3JSMikgCgoKcTEgPC0gYW92X2V6KGlkID0gImlkIiwgZHYgPSAibWVhbl9vZmZlcl9hY2NlcHQiLCBsb25nX2RhdGEsIHdpdGhpbiA9IGMoImNvbmRpdGlvbiIpLCBiZXR3ZWVuPWMoImdyb3VwIiksIGNvdmFyaWF0ZSA9ICJpbmNvbWVMZXZlbCIpCgojIyBlZmZlY3Qgb2YgdGltZT8/CmRhdGFfaWM8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iSUMiKQpxMSA8LSBsbShvZmZlciB+IGdyb3VwKnRyaWFsLGRhdGFfaWMpCnN1bW1hcnkocTEpCmRhdGFfbmM8LSBkYXRhICU+JSBmaWx0ZXIoY29uZGl0aW9uPT0iTkMiKQpxMSA8LSBsbShvZmZlciB+IGdyb3VwKnRyaWFsLGRhdGFfaWMpCnN1bW1hcnkocTEpCgpxMSA8LSBsbShjaG9pY2UgfiBncm91cCp0cmlhbCxkYXRhX2ljKQpzdW1tYXJ5KHExKQpxMSA8LSBsbShjaG9pY2UgfiBncm91cCp0cmlhbCxkYXRhX2ljKQpzdW1tYXJ5KHExKQoKbGlicmFyeShsbWU0KQpsaWJyYXJ5KGxtZXJUZXN0KQptMSA8LSBsbWVyKFJUIH4gZ3JvdXAqY29uZGl0aW9uKnRyaWFsICsgKDEgfCBpZCksIGRhdGEgPSBkYXRhKQpzdW1tYXJ5KG0xKQooYW92IDwtIGFub3ZhKG0xKSkKYGBgCg==