Abstract
Introduction
- Relational memory/Latent learning
- Relational memory/Latent learning in time and sleep-dependent consolidations
- What are important moderator variables in time and sleep-dependent consolidation as it pertains to generalization [we don’t know]
- Encoding Strength [Berrens meta] in time and sleep-dependent memory consolidation in general
- Study design
- What are important “quality” measures of latent learning in TI
- Distance (duh) Ellenbogen: yes / Gomez: kinda, close but not significant
- Jointrank (new) ~ two papers (Kao:Greg Jensen lab)
Results
Experiment 1:
Behavioral results
Encoding strength
|
|
Accuracy
|
Accuracy
|
Accuracy
|
Accuracy
|
|
Predictors
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
|
(Intercept)
|
1.29
|
1.00 – 1.66
|
0.053
|
1.39
|
1.06 – 1.82
|
0.016
|
0.05
|
0.03 – 0.11
|
<0.001
|
0.02
|
0.01 – 0.05
|
<0.001
|
|
Hierarchy [Recent]
|
|
|
|
0.86
|
0.74 – 1.00
|
0.045
|
0.55
|
0.46 – 0.65
|
<0.001
|
4.65
|
1.97 – 10.96
|
<0.001
|
|
Encoding strength
|
|
|
|
|
|
|
101.13
|
40.23 – 254.26
|
<0.001
|
315.68
|
112.33 – 887.16
|
<0.001
|
Hierarchy [Recent] × Encoding strength
|
|
|
|
|
|
|
|
|
|
0.06
|
0.02 – 0.18
|
<0.001
|
|
Random Effects
|
|
σ2
|
3.29
|
3.29
|
3.29
|
3.29
|
|
τ00
|
1.08 participant
|
1.08 participant
|
1.45 participant
|
1.44 participant
|
|
ICC
|
0.25
|
0.25
|
0.31
|
0.31
|
|
N
|
70 participant
|
70 participant
|
70 participant
|
70 participant
|
|
Observations
|
3360
|
3360
|
3360
|
3360
|
|
Marginal R2 / Conditional R2
|
0.000 / 0.247
|
0.001 / 0.249
|
0.100 / 0.375
|
0.105 / 0.378
|
Question: With or without scatterplot?
Distance
|
|
Accuracy
|
Accuracy
|
Accuracy
|
Accuracy
|
|
Predictors
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
|
(Intercept)
|
0.02
|
0.01 – 0.05
|
<0.001
|
0.01
|
0.01 – 0.03
|
<0.001
|
0.01
|
0.00 – 0.03
|
<0.001
|
0.03
|
0.00 – 0.28
|
0.003
|
|
Hierarchy [Recent]
|
4.65
|
1.97 – 10.96
|
<0.001
|
4.67
|
1.98 – 11.02
|
<0.001
|
6.15
|
1.97 – 19.24
|
0.002
|
16.26
|
0.40 – 663.23
|
0.140
|
|
Encoding strength
|
315.68
|
112.33 – 887.16
|
<0.001
|
321.91
|
114.47 – 905.28
|
<0.001
|
322.49
|
114.64 – 907.21
|
<0.001
|
106.33
|
3.75 – 3012.65
|
0.006
|
Hierarchy [Recent] × Encoding strength
|
0.06
|
0.02 – 0.18
|
<0.001
|
0.06
|
0.02 – 0.18
|
<0.001
|
0.06
|
0.02 – 0.18
|
<0.001
|
0.02
|
0.00 – 2.47
|
0.112
|
|
Distance
|
|
|
|
1.29
|
1.10 – 1.51
|
0.002
|
1.37
|
1.09 – 1.72
|
0.007
|
0.98
|
0.37 – 2.62
|
0.966
|
Hierarchy [Recent] × Distance
|
|
|
|
|
|
|
0.89
|
0.64 – 1.23
|
0.472
|
0.59
|
0.12 – 2.76
|
0.500
|
Encoding strength × Distance
|
|
|
|
|
|
|
|
|
|
1.62
|
0.41 – 6.37
|
0.493
|
(Hierarchy [Recent] × Encoding strength) × Distance
|
|
|
|
|
|
|
|
|
|
1.59
|
0.21 – 11.92
|
0.651
|
|
Random Effects
|
|
σ2
|
3.29
|
3.29
|
3.29
|
3.29
|
|
τ00
|
1.44 participant
|
1.45 participant
|
1.45 participant
|
1.46 participant
|
|
ICC
|
0.31
|
0.31
|
0.31
|
0.31
|
|
N
|
70 participant
|
70 participant
|
70 participant
|
70 participant
|
|
Observations
|
3360
|
3360
|
3360
|
3360
|
|
Marginal R2 / Conditional R2
|
0.105 / 0.378
|
0.108 / 0.381
|
0.108 / 0.381
|
0.109 / 0.382
|
Jointrank
|
|
Accuracy
|
Accuracy
|
Accuracy
|
Accuracy
|
|
Predictors
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
|
(Intercept)
|
0.02
|
0.01 – 0.05
|
<0.001
|
0.03
|
0.01 – 0.08
|
<0.001
|
0.05
|
0.02 – 0.18
|
<0.001
|
0.05
|
0.00 – 3.07
|
0.157
|
|
Hierarchy [Recent]
|
4.65
|
1.97 – 10.96
|
<0.001
|
4.65
|
1.97 – 10.96
|
<0.001
|
1.45
|
0.31 – 6.86
|
0.637
|
5526.47
|
9.94 – 3073432.49
|
0.008
|
|
Encoding strength
|
315.68
|
112.33 – 887.16
|
<0.001
|
315.92
|
112.43 – 887.70
|
<0.001
|
318.04
|
113.09 – 894.40
|
<0.001
|
313.78
|
1.16 – 85123.18
|
0.044
|
Hierarchy [Recent] × Encoding strength
|
0.06
|
0.02 – 0.18
|
<0.001
|
0.06
|
0.02 – 0.18
|
<0.001
|
0.06
|
0.02 – 0.18
|
<0.001
|
0.00
|
0.00 – 0.01
|
0.002
|
|
Jointrank
|
|
|
|
0.97
|
0.89 – 1.07
|
0.537
|
0.89
|
0.78 – 1.02
|
0.092
|
0.89
|
0.50 – 1.57
|
0.687
|
Hierarchy [Recent] × Jointrank
|
|
|
|
|
|
|
1.18
|
0.98 – 1.42
|
0.078
|
0.36
|
0.15 – 0.89
|
0.027
|
Encoding strength × Jointrank
|
|
|
|
|
|
|
|
|
|
1.00
|
0.46 – 2.21
|
0.991
|
(Hierarchy [Recent] × Encoding strength) × Jointrank
|
|
|
|
|
|
|
|
|
|
4.39
|
1.38 – 14.02
|
0.012
|
|
Random Effects
|
|
σ2
|
3.29
|
3.29
|
3.29
|
3.29
|
|
τ00
|
1.44 participant
|
1.44 participant
|
1.45 participant
|
1.46 participant
|
|
ICC
|
0.31
|
0.31
|
0.31
|
0.31
|
|
N
|
70 participant
|
70 participant
|
70 participant
|
70 participant
|
|
Observations
|
3360
|
3360
|
3360
|
3360
|
|
Marginal R2 / Conditional R2
|
0.105 / 0.378
|
0.105 / 0.378
|
0.106 / 0.379
|
0.109 / 0.383
|
Experiment 2:
Behavioral results
Encoding strength
|
|
Accuracy
|
Accuracy
|
Accuracy
|
Accuracy
|
|
Predictors
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
|
(Intercept)
|
1.53
|
1.00 – 2.34
|
0.049
|
2.04
|
1.14 – 3.67
|
0.017
|
3.99
|
1.75 – 9.07
|
0.001
|
1.05
|
0.38 – 2.91
|
0.932
|
|
Group [Wake]
|
|
|
|
0.56
|
0.25 – 1.28
|
0.170
|
0.57
|
0.24 – 1.35
|
0.199
|
4.98
|
1.28 – 19.30
|
0.020
|
|
Encoding strength
|
|
|
|
|
|
|
0.38
|
0.18 – 0.83
|
0.015
|
2.64
|
0.77 – 8.99
|
0.121
|
Group [Wake] × Encoding strength
|
|
|
|
|
|
|
|
|
|
0.04
|
0.01 – 0.21
|
<0.001
|
|
Random Effects
|
|
σ2
|
3.29
|
3.29
|
3.29
|
3.29
|
|
τ00
|
1.05 participant
|
0.97 participant
|
1.10 participant
|
0.93 participant
|
|
ICC
|
0.24
|
0.23
|
0.25
|
0.22
|
|
N
|
24 participant
|
24 participant
|
24 participant
|
24 participant
|
|
Observations
|
1728
|
1728
|
1728
|
1728
|
|
Marginal R2 / Conditional R2
|
0.000 / 0.241
|
0.019 / 0.242
|
0.028 / 0.271
|
0.050 / 0.258
|
Distance
|
|
Accuracy
|
Accuracy
|
Accuracy
|
Accuracy
|
|
Predictors
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
|
(Intercept)
|
1.05
|
0.38 – 2.91
|
0.932
|
0.96
|
0.30 – 3.01
|
0.941
|
0.47
|
0.13 – 1.69
|
0.249
|
0.12
|
0.01 – 1.95
|
0.137
|
|
Group [Wake]
|
4.98
|
1.28 – 19.30
|
0.020
|
4.98
|
1.28 – 19.29
|
0.020
|
18.94
|
3.42 – 104.79
|
0.001
|
11.72
|
0.30 – 462.62
|
0.189
|
|
Encoding strength
|
2.64
|
0.77 – 8.99
|
0.121
|
2.64
|
0.77 – 8.99
|
0.121
|
2.65
|
0.77 – 9.06
|
0.120
|
20.57
|
0.41 – 1037.19
|
0.131
|
Group [Wake] × Encoding strength
|
0.04
|
0.01 – 0.21
|
<0.001
|
0.04
|
0.01 – 0.21
|
<0.001
|
0.04
|
0.01 – 0.21
|
<0.001
|
0.08
|
0.00 – 12.44
|
0.324
|
|
Distance
|
|
|
|
1.04
|
0.83 – 1.29
|
0.736
|
1.41
|
1.02 – 1.94
|
0.039
|
2.51
|
0.83 – 7.54
|
0.102
|
|
Group [Wake] × Distance
|
|
|
|
|
|
|
0.57
|
0.36 – 0.88
|
0.011
|
0.69
|
0.16 – 3.02
|
0.627
|
Encoding strength × Distance
|
|
|
|
|
|
|
|
|
|
0.41
|
0.08 – 2.05
|
0.280
|
(Group [Wake] × Encoding strength) × Distance
|
|
|
|
|
|
|
|
|
|
0.78
|
0.10 – 6.23
|
0.816
|
|
Random Effects
|
|
σ2
|
3.29
|
3.29
|
3.29
|
3.29
|
|
τ00
|
0.93 participant
|
0.93 participant
|
0.93 participant
|
0.93 participant
|
|
ICC
|
0.22
|
0.22
|
0.22
|
0.22
|
|
N
|
24 participant
|
24 participant
|
24 participant
|
24 participant
|
|
Observations
|
1728
|
1728
|
1728
|
1728
|
|
Marginal R2 / Conditional R2
|
0.050 / 0.258
|
0.050 / 0.258
|
0.054 / 0.263
|
0.056 / 0.265
|
Jointrank
|
|
Accuracy
|
Accuracy
|
Accuracy
|
Accuracy
|
Accuracy
|
|
Predictors
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
Odds Ratios
|
CI
|
p
|
|
(Intercept)
|
1.05
|
0.38 – 2.91
|
0.932
|
1.36
|
0.35 – 5.28
|
0.655
|
2.50
|
0.48 – 13.00
|
0.277
|
0.00
|
0.00 – 0.27
|
0.012
|
0.00
|
0.00 – 0.27
|
0.012
|
|
Group [Wake]
|
4.98
|
1.28 – 19.30
|
0.020
|
4.98
|
1.29 – 19.30
|
0.020
|
1.58
|
0.17 – 14.75
|
0.689
|
415.68
|
0.92 – 188676.08
|
0.053
|
415.68
|
0.92 – 188676.08
|
0.053
|
|
Encoding strength
|
2.64
|
0.77 – 8.99
|
0.121
|
2.64
|
0.77 – 8.99
|
0.121
|
2.64
|
0.77 – 9.02
|
0.121
|
93674.98
|
108.23 – 81079248.72
|
0.001
|
93674.98
|
108.23 – 81079248.72
|
0.001
|
Group [Wake] × Encoding strength
|
0.04
|
0.01 – 0.21
|
<0.001
|
0.04
|
0.01 – 0.21
|
<0.001
|
0.04
|
0.01 – 0.21
|
<0.001
|
0.00
|
0.00 – 0.04
|
0.008
|
0.00
|
0.00 – 0.04
|
0.008
|
|
Jointrank
|
|
|
|
0.96
|
0.85 – 1.09
|
0.560
|
0.88
|
0.73 – 1.06
|
0.187
|
2.35
|
1.23 – 4.47
|
0.009
|
2.35
|
1.23 – 4.47
|
0.009
|
|
Group [Wake] × Jointrank
|
|
|
|
|
|
|
1.18
|
0.91 – 1.52
|
0.205
|
0.53
|
0.23 – 1.25
|
0.147
|
0.53
|
0.23 – 1.25
|
0.147
|
Encoding strength × Jointrank
|
|
|
|
|
|
|
|
|
|
0.22
|
0.09 – 0.58
|
0.002
|
0.22
|
0.09 – 0.58
|
0.002
|
(Group [Wake] × Encoding strength) × Jointrank
|
|
|
|
|
|
|
|
|
|
3.42
|
1.02 – 11.48
|
0.046
|
3.42
|
1.02 – 11.48
|
0.046
|
|
Random Effects
|
|
σ2
|
3.29
|
3.29
|
3.29
|
3.29
|
3.29
|
|
τ00
|
0.93 participant
|
0.93 participant
|
0.93 participant
|
0.96 participant
|
0.96 participant
|
|
ICC
|
0.22
|
0.22
|
0.22
|
0.23
|
0.23
|
|
N
|
24 participant
|
24 participant
|
24 participant
|
24 participant
|
24 participant
|
|
Observations
|
1728
|
1728
|
1728
|
1728
|
1728
|
|
Marginal R2 / Conditional R2
|
0.050 / 0.258
|
0.050 / 0.259
|
0.051 / 0.260
|
0.060 / 0.272
|
0.060 / 0.272
|
Discussion
Materials and Methods
Participants
Procedure
Experiment 1
Experiment 2
Stimuli
Statistical analyses
Behavioral analyses
LS0tDQp0aXRsZTogIkwmTSBtYW51c2NyaXB0Ig0Kb3V0cHV0Og0KICBib29rZG93bjo6aHRtbF9kb2N1bWVudDI6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHRydWUNCiAgICB0YWJsZV9jYXB0aW9uOiB0cnVlDQogICAgdGhlbWU6IHVuaXRlZA0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICBkZl9wcmludDoga2FibGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgY29kZV9leHRlcm5hbDogdHJ1ZQ0KICAgIGtlZXBfbWQ6IHRydWUNCiAgICBrZWVwX3RleDogdHJ1ZQ0KICAgIGNpdGVwcm9jOiB5ZXMNCiAgICBsb2Y6IHllcyANCiAgICBsb3Q6IHllcw0KDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpmaWd1cmVsaXN0OiB5ZXMNCmFsd2F5c19hbGxvd19odG1sOiB0cnVlDQpoZWFkZXItaW5jbHVkZXM6IA0KLSBcdXNlcGFja2FnZVtub3R0b2Nde3RvY2JpYmluZH0gDQotIFx1c2VwYWNrYWdlW3V0Zjhde2lucHV0ZW5jfQ0KLSBcdXNlcGFja2FnZVtUMV17Zm9udGVuY30NCi0gXERlY2xhcmVVbmljb2RlQ2hhcmFjdGVyezAzQzN9e8+DfQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD04LCBmaWcuZnVsbHdpZHRoPVRSVUUsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgY2FjaGUgPSBUUlVFKQ0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZW1tZWFucykNCmxpYnJhcnkoZ2dzdGF0c3Bsb3QpDQpsaWJyYXJ5KHNqUGxvdCkNCmxpYnJhcnkoRFQpDQpyZXF1aXJlKGxtZTQpDQpsaWJyYXJ5KHJlcG9ydCkNCmxpYnJhcnkocGVyZm9ybWFuY2UpDQpsaWJyYXJ5KHBhcGFqYSkNCmxpYnJhcnkoZ2doNHgpDQpsaWJyYXJ5KHNqUGxvdCkNCg0KYGBgDQoNCiMgQWJzdHJhY3QNCg0KIyBJbnRyb2R1Y3Rpb24NCg0KLSAgIFJlbGF0aW9uYWwgbWVtb3J5L0xhdGVudCBsZWFybmluZw0KLSAgIFJlbGF0aW9uYWwgbWVtb3J5L0xhdGVudCBsZWFybmluZyBpbiB0aW1lIGFuZCBzbGVlcC1kZXBlbmRlbnQgY29uc29saWRhdGlvbnMNCi0gICBXaGF0IGFyZSBpbXBvcnRhbnQgbW9kZXJhdG9yIHZhcmlhYmxlcyBpbiB0aW1lIGFuZCBzbGVlcC1kZXBlbmRlbnQgY29uc29saWRhdGlvbiBhcyBpdCBwZXJ0YWlucyB0byBnZW5lcmFsaXphdGlvbiBbd2UgZG9uJ3Qga25vd10NCiAgICAtICAgRW5jb2RpbmcgU3RyZW5ndGggW0JlcnJlbnMgbWV0YV0gaW4gdGltZSBhbmQgc2xlZXAtZGVwZW5kZW50IG1lbW9yeSBjb25zb2xpZGF0aW9uIGluIGdlbmVyYWwNCiAgICAtICAgU3R1ZHkgZGVzaWduDQotICAgV2hhdCBhcmUgaW1wb3J0YW50ICJxdWFsaXR5IiBtZWFzdXJlcyBvZiBsYXRlbnQgbGVhcm5pbmcgaW4gVEkNCiAgICAtICAgRGlzdGFuY2UgKGR1aCkgRWxsZW5ib2dlbjogeWVzIC8gR29tZXo6IGtpbmRhLCBjbG9zZSBidXQgbm90IHNpZ25pZmljYW50DQogICAgLSAgIEpvaW50cmFuayAobmV3KSBcfiB0d28gcGFwZXJzIChLYW86R3JlZyBKZW5zZW4gbGFiKQ0KDQojIFJlc3VsdHMNCg0KIyMgRXhwZXJpbWVudCAxOg0KDQojIyMgQmVoYXZpb3JhbCByZXN1bHRzDQoNCiMjIyMgRW5jb2Rpbmcgc3RyZW5ndGgNCg0KYGBge3IgZXhwMSwgaW5jbHVkZT1GQUxTRX0NCmV4cDEuZmFjZXNjZW5lIDwtIHJlYWRSRFMoImJ5dHJpYWwuZXhwLXdzdGlvbmxpbmVfdmVyLWZhY2VzY2VuZS5yZHMiKQ0KZXhwMS5zY2VuZXMgPC0gcmVhZFJEUygiYnl0cmlhbC5leHAtd3N0aW9ubGluZV92ZXItc2NlbmVzLnJkcyIpDQpleHAxLm9iamVjdHMxIDwtIHJlYWRSRFMoImJ5dHJpYWwuZXhwLXdzdGlvbmxpbmVfdmVyLW9iamVjdHMucmRzIikNCmV4cDEub2JqZWN0czIgPC0gcmVhZFJEUygiYnl0cmlhbC5leHAtd3N0aW9ubGluZV92ZXItb2JqZWN0cy1zaHAucmRzIikNCg0KIyBub3RlIHRvIHNlbGYgLSBmaXggZmVlZGJhY2sgY29sdW1uIGluIGV4cDEub2JqZWN0cw0KZXhwMS5jb21iaW5lZCA8LSBiaW5kX3Jvd3MoZXhwMS5mYWNlc2NlbmUsZXhwMS5zY2VuZXMsZXhwMS5vYmplY3RzMSxleHAxLm9iamVjdHMyKSAlPiUgbXV0YXRlKHBhcnRpY2lwYW50X3UgPSBwYXN0ZShwYXJ0aWNpcGFudCxleHBWZXJzaW9uLCBzZXAgPSAiXyIpLCBjUmFuaz0gcGFzdGUwKHBtaW4oUmFuazEsUmFuazIpLHBtYXgoUmFuazEsUmFuazIpKSwgcGFpclR5cGU9IGlmZWxzZShjUmFuayAlaW4lIGMoIjEyIiwiMjMiLCIzNCIsIjQ1IiwiNTYiKSwicHJlbWlzZSIsIGlmZWxzZShjUmFuayAlaW4lIGMoIjI0IiwiMjUiLCIzNSIpLCAiaW5mZXJlbmNlIiwiYW5jaG9yIikpKSAlPiUgZmlsdGVyKCFwYXJ0aWNpcGFudF91ICVpbiUgYygiQURQT01aX29iamVjdHMiLCJBS09YWVNfb2JqZWN0c19zaHAiKSApDQoNCiMgbm90ZSB0byBzZWxmIC0gZml4IGZlZWRiYWNrIGNvbHVtbiBpbiBleHAxLm9iamVjdHMNCmV4cDEuY29tYmluZWQgPC0gYmluZF9yb3dzKGV4cDEuZmFjZXNjZW5lLGV4cDEuc2NlbmVzLGV4cDEub2JqZWN0czEsZXhwMS5vYmplY3RzMikgJT4lIG11dGF0ZShwYXJ0aWNpcGFudF91ID0gcGFzdGUocGFydGljaXBhbnQsZXhwVmVyc2lvbiwgc2VwID0gIl8iKSwgY1Jhbms9IHBhc3RlMChwbWluKFJhbmsxLFJhbmsyKSxwbWF4KFJhbmsxLFJhbmsyKSksIHBhaXJUeXBlPSBpZmVsc2UoY1JhbmsgJWluJSBjKCIxMiIsIjIzIiwiMzQiLCI0NSIsIjU2IiksInByZW1pc2UiLCBpZmVsc2UoY1JhbmsgJWluJSBjKCIyNCIsIjI1IiwiMzUiKSwgImluZmVyZW5jZSIsImFuY2hvciIpKSkgJT4lIGZpbHRlcighcGFydGljaXBhbnRfdSAlaW4lIGMoIkFEUE9NWl9vYmplY3RzIiwiQUtPWFlTX29iamVjdHNfc2hwIikgKQ0KDQp3cml0ZS5jc3YoZXhwMS5jb21iaW5lZCwiZWxscmVwX3dzLmNzdiIpDQoNCmdsaW1wc2UoZXhwMS5jb21iaW5lZCkNCg0KIyBudW1iZXIgb2YgcGFydGljaXBhbnRzDQpuX2Rpc3RpbmN0KGV4cDEuY29tYmluZWQkcGFydGljaXBhbnRfdSkNCiMgZXhwZXJpbWVudCBzdHJ1Y3R1cmUNCkRUOjpkYXRhdGFibGUoZXhwMS5jb21iaW5lZCAlPiUgZ3JvdXBfYnkocGFydGljaXBhbnRfdSwgc2Vzc2lvbiwgcGFydCkgJT4lIGNvdW50KCkpDQoNCmV4cDEuY29tYmluZWQuaW1BdmcgPC0gZXhwMS5jb21iaW5lZCAlPiUgZmlsdGVyKHBhcnQgPT0gImltbWVkaWF0ZSB0ZXN0aW5nIikgJT4lIGdyb3VwX2J5KHBhcnRpY2lwYW50X3UsIGhpZXJhcmNoeSkgJT4lIHN1bW1hcmlzZShtZWFuUHJlbWlzZVBlcmZvcm1hbmNlID0gbWVhbihjb3JyKSkNCg0KZXhwMS5pbmYgPC0gZXhwMS5jb21iaW5lZCAlPiUgZmlsdGVyKHBhcnQgPT0gImRlbGF5ZWQgdGVzdGluZyIsIHBhaXJUeXBlPT0iaW5mZXJlbmNlIikgJT4lIGxlZnRfam9pbihleHAxLmNvbWJpbmVkLmltQXZnKQ0KDQpncm91cGVkX2dnd2l0aGluc3RhdHMoDQogIGRhdGEgICAgICAgICAgICAgPSBleHAxLmNvbWJpbmVkICU+JSBncm91cF9ieShwYXJ0aWNpcGFudF91LCBwYXJ0LCBwYWlyVHlwZSwgaGllcmFyY2h5KSAlPiUgc3VtbWFyaXNlKG1lYW5QZXJmID0gbWVhbihjb3JyKSkgJT4lIGZpbHRlcihwYWlyVHlwZSAhPSAiYW5jaG9yIiwgcGFydCAhPSAibGVhcm5pbmciKSAlPiUgbXV0YXRlKHBhcnRYcGFpclR5cGUgPSBpbnRlcmFjdGlvbihwYXJ0LCBwYWlyVHlwZSkpLA0KICB4ICAgICAgICAgICAgICAgID0gaGllcmFyY2h5LA0KICB5ICAgICAgICAgICAgICAgID0gbWVhblBlcmYsDQogIGdyb3VwaW5nLnZhciAgICAgPSBwYXJ0WHBhaXJUeXBlLA0KICB0eXBlICAgICAgICAgICAgID0gInAiLA0KICBiZi5tZXNzYWdlID0gRkFMU0UsDQogIHJlc3VsdHMuc3VidGl0bGUgPSBGQUxTRSwNCikNCg0KYGBgDQoNCmBgYHtyIGUxZjEsIGZpZy5jYXAgPSAiRXhwZXJpbWVudCAxOiBCZWhhdmlvdXJhbCBwZXJmb3JtYW5jZSJ9DQoNCiMgQ3JlYXRlIGNvbWJpbmVkIGJveCBhbmQgdmlvbGluIHBsb3Qgd2l0aCBvdmVybGFwIGZvciBjYXRlZ29yeSAyDQpkYXRhIDwtIGV4cDEuY29tYmluZWQgJT4lIGdyb3VwX2J5KHBhcnRpY2lwYW50X3UsIHBhcnQsIHBhaXJUeXBlLCBoaWVyYXJjaHkpICU+JSBzdW1tYXJpc2UobWVhblBlcmYgPSBtZWFuKGNvcnIpKSAlPiUgZmlsdGVyKHBhaXJUeXBlICE9ICJhbmNob3IiLCBwYXJ0ICE9ICJsZWFybmluZyIpICU+JSBtdXRhdGUocGFydFhwYWlyVHlwZSA9IGludGVyYWN0aW9uKHBhcnQsIHBhaXJUeXBlLHNlcCA9ICI6ICIpKSAlPiUgbXV0YXRlKCBoaWVyYXJjaHk9cmVjb2RlKGhpZXJhcmNoeSAsICJIMSIgPSAiUmVtb3RlIiwgIkgyIiA9ICJSZWNlbnQiKSkgJT4lIG11dGF0ZShoaWVyYXJjaHk9ZmFjdG9yKGhpZXJhcmNoeSxsZXZlbHM9YygiUmVtb3RlIiwiUmVjZW50IikpKSAlPiUgbXV0YXRlKHBhaXJUeXBlID0gIGZhY3RvcihzdHJfdG9fdGl0bGUocGFpclR5cGUpLCBsZXZlbHMgPSBjKCJQcmVtaXNlIiwiSW5mZXJlbmNlIikpLCBwYXJ0PWZhY3RvcihzdHJfdG9fdGl0bGUocGFydCksbGV2ZWxzID0gYygiSW1tZWRpYXRlIFRlc3RpbmciLCJEZWxheWVkIFRlc3RpbmciKSkpDQoNCg0KZ2dwbG90KGRhdGEsIGFlcyh4ID0gaGllcmFyY2h5LCB5ID0gbWVhblBlcmYsIGZpbGwgPSBoaWVyYXJjaHkpKSArDQogIGdlb21fdmlvbGluKGFscGhhID0gMC41LCB3aWR0aCA9IDAuNCwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNzUpLCANCiAgICAgICAgICAgICAgdHJpbSA9IEZBTFNFLCBzY2FsZSA9ICJ3aWR0aCIpICsNCiAgZ2VvbV9ib3hwbG90KGFscGhhID0gMC41LCBvdXRsaWVyLnNoYXBlID0gTkEsIHdpZHRoID0gMC4yLCANCiAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjc1KSkgKw0KICBsYWJzKHggPSAiSGllcmFyY2h5IiwgeSA9ICJNZWFuIHBlcmZvcm1hbmNlIiwgZmlsbCA9ICIiKSArDQogIGdndGl0bGUoIlBlcmZvcm1hbmNlIikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MC41LCBsaW5ldHlwZT0iZGFzaGVkIiwgDQogICAgICAgICAgICAgICAgY29sb3IgPSAiZ3JleSIsIHNpemU9MC44KSArIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpKw0KICBzdGF0X3N1bW1hcnkoZnVuID0gbWVhbiwgZ2VvbSA9ICJwb2ludCIsIHNoYXBlPTMsIHNpemUgPSAyLCBjb2xvciA9ICJibGFjayIsIHN0cm9rZSA9IDEsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjc1KSkgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICArIHRoZW1lX2FwYShiYXNlX3NpemUgPSAxNCkgKyAgZmFjZXRfbmVzdGVkKH4gcGFydCArIHBhaXJUeXBlKSArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCJmaXJlYnJpY2siLCAiY29ybmZsb3dlcmJsdWUiKSkNCg0KYGBgDQoNCmBgYHtyIGUxZjIsIGVjaG89RkFMU0UsIGNhcHRpb249Ik1vZGVsIGNvbXBhcmlzb24gbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBIaWVyYXJjaHkgYW5kIEVuY29kaW5nIHN0cmVuZ3RoIn0NCg0KZXhwMS5pbmYgPC0gZXhwMS5pbmYgJT4lIG11dGF0ZShBY2N1cmFjeSA9IGNvcnIpICU+JSBtdXRhdGUoIEhpZXJhcmNoeT1yZWNvZGUoaGllcmFyY2h5ICwgIkgxIiA9ICJSZW1vdGUiLCAiSDIiID0gIlJlY2VudCIpLCBwYXJ0aWNpcGFudCA9IHBhcnRpY2lwYW50X3UsIEVuY29kaW5nX3N0cmVuZ3RoID1tZWFuUHJlbWlzZVBlcmZvcm1hbmNlKSAlPiUgbXV0YXRlKEhpZXJhcmNoeT1mYWN0b3IoSGllcmFyY2h5LGxldmVscz1jKCJSZW1vdGUiLCJSZWNlbnQiKSkpDQoNCm0xIDwtIGdsbWVyKEFjY3VyYWN5IH4gMSArDQogICAgKDEgfCBwYXJ0aWNpcGFudCksIGRhdGEgPSBleHAxLmluZiwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KbTIgPC0gZ2xtZXIoQWNjdXJhY3kgfiBIaWVyYXJjaHkgKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMS5pbmYsIGZhbWlseSA9IGJpbm9taWFsLCBjb250cm9sID0gZ2xtZXJDb250cm9sKG9wdGltaXplciA9ICJib2J5cWEiKSkNCm0zIDwtIGdsbWVyKEFjY3VyYWN5IH4gSGllcmFyY2h5ICsgRW5jb2Rpbmdfc3RyZW5ndGggKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMS5pbmYsIGZhbWlseSA9IGJpbm9taWFsLCBjb250cm9sID0gZ2xtZXJDb250cm9sKG9wdGltaXplciA9ICJib2J5cWEiKSkNCm00IDwtIGdsbWVyKEFjY3VyYWN5IH4gSGllcmFyY2h5ICogRW5jb2Rpbmdfc3RyZW5ndGggKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMS5pbmYsIGZhbWlseSA9IGJpbm9taWFsLCBjb250cm9sID0gZ2xtZXJDb250cm9sKG9wdGltaXplciA9ICJib2J5cWEiKSkNCg0KdGFiX21vZGVsKG0xLG0yLG0zLG00KQ0KI2Fub3ZhKG0xLG0yLG0zLG00KQ0KYGBgDQoNClF1ZXN0aW9uOiBXaXRoIG9yIHdpdGhvdXQgc2NhdHRlcnBsb3Q/DQoNCmBgYHtyIGUxZjMsIGZpZy5jYXA9IlBsb3R0aW5nIG1vZGVsIHByZWRpY3RlZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEhpZXJhcmNoeSBhbmQgRW5jb2Rpbmcgc3RyZW5ndGgifQ0KbGlicmFyeShzalBsb3QpDQoNCiMgcGxvdF9tb2RlbChtNCwgdHlwZSA9ICJlZmYiLCB0ZXJtcyA9IGMoIkVuY29kaW5nX3N0cmVuZ3RoW2FsbF0iLCJIaWVyYXJjaHkiKSwgYXhpcy50aXRsZT1jKCJFbmNvZGluZyBzdHJlbmd0aCIsIkluZmVyZW5jZSBwZXJmb3JtYW5jZSIpLCBjb2xvcnMgPSBjKCJmaXJlYnJpY2siLCAiY29ybmZsb3dlcmJsdWUiKSkgKyB0aGVtZV9hcGEoYmFzZV9zaXplID0gMTQpICsgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKyBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQ9MC41LCBsaW5ldHlwZT0iZGFzaGVkIiwgY29sb3IgPSAiZ3JleSIsIHNpemU9MC44KQ0KDQpleHAxLmluZi5zdW1tYXJ5IDwtIGV4cDEuaW5mICU+JSBncm91cF9ieShwYXJ0aWNpcGFudCxIaWVyYXJjaHksRW5jb2Rpbmdfc3RyZW5ndGgpICU+JSBzdW1tYXJpc2UocHJlZGljdGVkPW1lYW4oY29ycikpICU+JSBtdXRhdGUoeD1FbmNvZGluZ19zdHJlbmd0aCwgZ3JvdXBfY29sPUhpZXJhcmNoeSkNCg0KdG1wIDwtIHRpYmJsZShnZXRfbW9kZWxfZGF0YShtNCwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJFbmNvZGluZ19zdHJlbmd0aFthbGxdIiwiSGllcmFyY2h5IikpKQ0KIyBjcmVhdGUgYSBnZ3Bsb3Qgb2JqZWN0DQojIENyZWF0ZSBnZ3Bsb3Qgb2JqZWN0DQpnZ3Bsb3QodG1wLCBhZXMoeCA9IHgsIHkgPSBwcmVkaWN0ZWQsIGNvbG9yID0gZ3JvdXBfY29sLGZpbGw9Z3JvdXBfY29sKSkgKyANCiAgZ2VvbV9saW5lKCkgKyANCiAgZ2VvbV9yaWJib24oYWVzKHltaW4gPSBjb25mLmxvdywgeW1heCA9IGNvbmYuaGlnaCksIGFscGhhID0gMC4zKSArDQogIHhsYWIoIkVuY29kaW5nIHN0cmVuZ3RoIikgKw0KICB5bGFiKCJJbmZlcmVuY2UgcGVyZm9ybWFuY2UiKSArDQogIGdndGl0bGUoIkVmZmVjdCBvZiBFbmNvZGluZyBzdHJlbmd0aCBvbiBBY2N1cmFjeSBieSBIaWVyYXJjaHkiKSArIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsgZ2VvbV92bGluZSh4aW50ZXJjZXB0PTAuNSwgbGluZXR5cGU9ImRhc2hlZCIsIGNvbG9yID0gImdyZXkiLCBzaXplPTAuOCkgKyBnZW9tX3BvaW50KGRhdGE9ZXhwMS5pbmYuc3VtbWFyeSwgYWVzKHggPSB4LCB5ID0gcHJlZGljdGVkLCBjb2xvciA9IGdyb3VwX2NvbCxmaWxsPWdyb3VwX2NvbCksYWxwaGEgPSAwLjUsIHBvc2l0aW9uPXBvc2l0aW9uX2ppdHRlcihoZWlnaHQ9LjAxLCB3aWR0aD0uMDEpKSAgICsgdGhlbWVfYXBhKGJhc2Vfc2l6ZSA9IDE0KSArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCJmaXJlYnJpY2siLCAiY29ybmZsb3dlcmJsdWUiKSkgKyBsYWJzKGNvbG9yID0gIkhpZXJhcmNoeSIsIGZpbGw9IkhpZXJhcmNoeSIpDQoNCmBgYA0KDQojIyMjIERpc3RhbmNlDQoNCmBgYHtyIGUxZjQsIGNhcHRpb249Ik1vZGVsIGNvbXBhcmlzb24gbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBIaWVyYXJjaHksIEVuY29kaW5nIHN0cmVuZ3RoIGFuZCBEaXN0YW5jZSJ9DQpleHAxLmluZl9tYXAgPC0gZXhwMS5jb21iaW5lZCAlPiUgZmlsdGVyKHBhcnQgPT0gImRlbGF5ZWQgdGVzdGluZyIsIHBhaXJUeXBlPT0iaW5mZXJlbmNlIikgJT4lIGxlZnRfam9pbihleHAxLmNvbWJpbmVkLmltQXZnKSAlPiUgbXV0YXRlKERpc3RhbmNlID0gYWJzKFJhbmsxLVJhbmsyKSwgSm9pbnRyYW5rID0gUmFuazErUmFuazIpICU+JSBtdXRhdGUoQWNjdXJhY3kgPSBjb3JyKSAlPiUgbXV0YXRlKCBIaWVyYXJjaHk9cmVjb2RlKGhpZXJhcmNoeSAsICJIMSIgPSAiUmVtb3RlIiwgIkgyIiA9ICJSZWNlbnQiKSwgcGFydGljaXBhbnQgPSBwYXJ0aWNpcGFudF91LCBFbmNvZGluZ19zdHJlbmd0aCA9bWVhblByZW1pc2VQZXJmb3JtYW5jZSkgJT4lIG11dGF0ZShIaWVyYXJjaHk9ZmFjdG9yKEhpZXJhcmNoeSxsZXZlbHM9YygiUmVtb3RlIiwiUmVjZW50IikpKQ0KDQptMS5kIDwtIGdsbWVyKEFjY3VyYWN5IH4gSGllcmFyY2h5ICogRW5jb2Rpbmdfc3RyZW5ndGggKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMS5pbmZfbWFwLCBmYW1pbHkgPSBiaW5vbWlhbCwgY29udHJvbCA9IGdsbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQoNCm0yLmQgPC0gZ2xtZXIoQWNjdXJhY3kgfiBIaWVyYXJjaHkgKiBFbmNvZGluZ19zdHJlbmd0aCArIERpc3RhbmNlICsNCiAgICAoMSB8IHBhcnRpY2lwYW50KSwgZGF0YSA9IGV4cDEuaW5mX21hcCwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KbTMuZCA8LSBnbG1lcihBY2N1cmFjeSB+IEhpZXJhcmNoeSAqIEVuY29kaW5nX3N0cmVuZ3RoICsgRGlzdGFuY2UgKiBIaWVyYXJjaHkgKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMS5pbmZfbWFwLCBmYW1pbHkgPSBiaW5vbWlhbCwgY29udHJvbCA9IGdsbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQptNC5kIDwtIGdsbWVyKEFjY3VyYWN5IH4gSGllcmFyY2h5ICogRW5jb2Rpbmdfc3RyZW5ndGggKiBEaXN0YW5jZSArDQogICAgKDEgfCBwYXJ0aWNpcGFudCksIGRhdGEgPSBleHAxLmluZl9tYXAsIGZhbWlseSA9IGJpbm9taWFsLCBjb250cm9sID0gZ2xtZXJDb250cm9sKG9wdGltaXplciA9ICJib2J5cWEiKSkNCg0KdGFiX21vZGVsKG0xLmQsbTIuZCxtMy5kLG00LmQpDQojYW5vdmEobTEuZCxtMi5kLG0zLmQsbTQuZCkgIyBtMiB3aW5zDQpgYGANCg0KYGBge3IgZTFmeCwgZXZhbD1GQUxTRX0NCiMgVXNpbmcgYSBtaXhlZCBsb2dpc3RpYyBtb2RlbCB0byBhbmFseXNlIGludGVyYWN0aW9uIGJldHdlZW4gaGllcmFyY2h5IGFuZCBkaXN0YW5jZQ0KDQojY3JlYXRlIHNjYXR0ZXJwbG90DQojcGxvdChleHAxLmluZl9kaXN0JGRpc3RhbmNlLCBleHAxLmluZl9kaXN0JGpvaW50cmFuaywgbWFpbj0gIkpvaW50IHJhbmsgdnMgRGlzdGFuY2UiKQ0KI2FkZCBsYWJlbHMgdG8gZXZlcnkgcG9pbnQNCngjdGV4dChleHAxLmluZl9kaXN0JGRpc3RhbmNlKzAuMDIsZXhwMS5pbmZfZGlzdCRqb2ludHJhbmssIGxhYmVscz1leHAxLmluZl9kaXN0JGNSYW5rKQ0KDQoNCg0KYGBgDQoNCiMjIyMgSm9pbnRyYW5rDQoNCmBgYHtyIGUxZjUsIGNhcHRpb249Ik1vZGVsIGNvbXBhcmlzb24gbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBIaWVyYXJjaHksIEVuY29kaW5nIHN0cmVuZ3RoIGFuZCBKb2ludHJhbmsifQ0KbTEuaiA8LSBnbG1lcihBY2N1cmFjeSB+IEhpZXJhcmNoeSAqIEVuY29kaW5nX3N0cmVuZ3RoICsNCiAgICAoMSB8IHBhcnRpY2lwYW50KSwgZGF0YSA9IGV4cDEuaW5mX21hcCwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KbTIuaiA8LSBnbG1lcihBY2N1cmFjeSB+IEhpZXJhcmNoeSAqIEVuY29kaW5nX3N0cmVuZ3RoICsgSm9pbnRyYW5rICsNCiAgICAoMSB8IHBhcnRpY2lwYW50KSwgZGF0YSA9IGV4cDEuaW5mX21hcCwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KbTMuaiA8LSBnbG1lcihBY2N1cmFjeSB+IEhpZXJhcmNoeSAqIEVuY29kaW5nX3N0cmVuZ3RoICsgSm9pbnRyYW5rICogSGllcmFyY2h5ICsNCiAgICAoMSB8IHBhcnRpY2lwYW50KSwgZGF0YSA9IGV4cDEuaW5mX21hcCwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KbTQuaiA8LSBnbG1lcihBY2N1cmFjeSB+IEhpZXJhcmNoeSAqIEVuY29kaW5nX3N0cmVuZ3RoICogSm9pbnRyYW5rICsNCiAgICAoMSB8IHBhcnRpY2lwYW50KSwgZGF0YSA9IGV4cDEuaW5mX21hcCwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KDQp0YWJfbW9kZWwobTEuaixtMi5qLG0zLmosbTQuaikNCiNhbm92YShtMS5qLG0yLmosbTMuaixtNC5qKSAjbTQgd2lucw0KDQpgYGANCg0KYGBge3IgZTFmNiwgZmlnLmNhcD0iUGxvdHRpbmcgbW9kZWwgcHJlZGljdGVkIGludGVyYWN0aW9uIGJldHdlZW4gSGllcmFyY2h5LCBFbmNvZGluZyBzdHJlbmd0aCBhbmQgSm9pbnRyYW5rIn0NCg0KIyBwbG90X21vZGVsKG0zLmosIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiSm9pbnRyYW5rWzYsNyw4XSIsICJIaWVyYXJjaHkiKSxheGlzLnRpdGxlPWMoIkluZmVyZW5jZSBwZXJmb3JtYW5jZSIpKSAgKyB0aGVtZV9hcGEoYmFzZV9zaXplID0gMTQpICsgZ2d0aXRsZSgiRWZmZWN0IG9mIEpvaW50cmFuayBvbiBBY2N1cmFjeSBieSBIaWVyYXJjaHkiKSArIHNjYWxlX3hfY29udGludW91cyhicmVha3M9c2VxKDYsIDgsIDEpKQ0KDQpwbG90X21vZGVsKG00LmosIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiRW5jb2Rpbmdfc3RyZW5ndGhbYWxsXSIsIkpvaW50cmFuayIsICJIaWVyYXJjaHkiKSwgYXhpcy50aXRsZT1jKCJFbmNvZGluZyBzdHJlbmd0aCIsIkluZmVyZW5jZSBwZXJmb3JtYW5jZSIpICkgICsgdGhlbWVfYXBhKGJhc2Vfc2l6ZSA9IDE0KSArIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsgZ2VvbV92bGluZSh4aW50ZXJjZXB0PTAuNSwgbGluZXR5cGU9ImRhc2hlZCIsIGNvbG9yID0gImdyZXkiLCBzaXplPTAuOCkgKyBnZ3RpdGxlKCJFZmZlY3Qgb2YgRW5jb2Rpbmcgc3RyZW5ndGggb24gQWNjdXJhY3kgYnkgSGllcmFyY2h5IGFuZCBKb2ludHJhbmsiKSAgDQoNCmBgYA0KDQojIyBFeHBlcmltZW50IDI6DQoNCiMjIyBCZWhhdmlvcmFsIHJlc3VsdHMNCg0KYGBge3IgZXhwMiwgaW5jbHVkZT1GQUxTRX0NCmVsbHJlcC5sYWIubGVhcm5pbmcgPC0gcmVhZF9jc3YoImxvcmVuYS10aS1waWxvdC1lbGxyZXAvTGVhcm5pbmdfQmVoMi5jc3YiKSAlPiUgZmlsdGVyKENvbmRpdGlvbj09InByZSIpICU+JSBtdXRhdGUocGFydCA9ICJsZWFybmluZyIsIFJUID0gYXMuY2hhcmFjdGVyKFJUKSkNCg0KZWxscmVwLmxhYi5pbSA8LSByZWFkX2RlbGltKCJsb3JlbmEtdGktcGlsb3QtZWxscmVwL1RfcHJlbWlzZXNfcHJlIC0gY29waWEuY3N2IiwgDQogICAgZGVsaW0gPSAiOyIsIGVzY2FwZV9kb3VibGUgPSBGQUxTRSwgdHJpbV93cyA9IFRSVUUpICU+JSBncm91cF9ieShJRF9TMSxHcm91cF9TMSxTdGltX1MxKQ0KDQoNCmVsbHJlcC5sYWIuaW0uYWdnciA8LSByZWFkX2RlbGltKCJsb3JlbmEtdGktcGlsb3QtZWxscmVwL1RfcHJlbWlzZXNfcHJlIC0gY29waWEuY3N2IiwgDQogICAgZGVsaW0gPSAiOyIsIGVzY2FwZV9kb3VibGUgPSBGQUxTRSwgdHJpbV93cyA9IFRSVUUpICU+JSBncm91cF9ieShJRF9TMSxHcm91cF9TMSxTdGltX1MxKSAlPiUgc3VtbWFyaXNlKG1lYW5JbSA9IG1lYW4oYWNjX1MxKSkNCg0KcmVhZF9jc3YoImxvcmVuYS10aS1waWxvdC1lbGxyZXAvTGVhcm5pbmdfQmVoMi5jc3YiKSAlPiUgZ3JvdXBfYnkoR3JvdXAsQ29uZGl0aW9uKSAlPiUgc3VtbWFyaXNlKG5fZGlzdGluY3QoSUQpKQ0KDQplbGxyZXAubGFiIDwtIHJlYWRfZGVsaW0oImxvcmVuYS10aS1waWxvdC1lbGxyZXAvVF9wcmVtaXNlc19wcmUgLSBjb3BpYS5jc3YiLGRlbGltID0nOycpICU+JSBwaXZvdF9sb25nZXIoDQogICAgY29scyA9IGNvbnRhaW5zKCJfIiksIA0KICAgIG5hbWVzX3RvID0gYygnLnZhbHVlJywgJ3Nlc3Npb24nKSwNCiAgICB2YWx1ZXNfZHJvcF9uYSA9IFRSVUUsDQogICAgbmFtZXNfcGF0dGVybiA9ICcoLiopXFxfKFNcXGQrKScsDQogICAgbmFtZXNfcmVwYWlyID0gInVuaXF1ZSINCiAgKSAlPiUgcmVuYW1lKHNlc3Npb24gPSAic2Vzc2lvbi4uLjEiKSAlPiUgc2VsZWN0KC1zZXNzaW9uLi4uOSkgLT4gZWxscmVwLmxhYi50bXAgDQplbGxyZXAubGFiIDwtIHJiaW5kKGVsbHJlcC5sYWIgLHJlYWRfZGVsaW0oImxvcmVuYS10aS1waWxvdC1lbGxyZXAvVF9pbmZlcmVuY2VzX3ByZSAtIGNvcGlhLmNzdiIsZGVsaW0gPSc7JykscmVhZF9kZWxpbSgibG9yZW5hLXRpLXBpbG90LWVsbHJlcC9UX2FuY2hvcl9wcmUgLSBjb3BpYS5jc3YiLGRlbGltID0nOycpKQ0KDQplbGxyZXAubGFiIDwtIGJpbmRfcm93cyhlbGxyZXAubGFiLGVsbHJlcC5sYWIubGVhcm5pbmcpICU+JSByb3d3aXNlKCkgJT4lIG11dGF0ZShwYXJ0ID0gaWZlbHNlKHNlc3Npb24gPT0gIlMxIiAmJiBpcy5uYShwYXJ0KSwgImltbWVkaWF0ZSB0ZXN0aW5nIixwYXJ0KSkgJT4lIG11dGF0ZShwYXJ0ID0gaWZlbHNlKHNlc3Npb24gPT0gIlMyIiAmJiBpcy5uYShwYXJ0KSwgImRlbGF5ZWQgdGVzdGluZyIscGFydCkpDQoNCiMgU3BsaXQgdGhlICJwYWlyIiBjb2x1bW4gaW50byB0d28gc2VwYXJhdGUgY29sdW1ucw0Kc3BsaXRfZGYgPC0gbGFwcGx5KHN0cnNwbGl0KGVsbHJlcC5sYWIkUGFpciwgIiIpLCBmdW5jdGlvbih4KSB4WzE6Ml0pDQplbGxyZXAubGFiW2MoIlJhbmsxIiwgIlJhbmsyIildIDwtIGRhdGEuZnJhbWUoZG8uY2FsbChyYmluZCwgc3BsaXRfZGYpKQ0KIyBDb252ZXJ0IGVhY2ggbGV0dGVyIHRvIGl0cyBjb3JyZXNwb25kaW5nIHBvc2l0aW9uIGluIHRoZSBhbHBoYWJldA0KZWxscmVwLmxhYiRSYW5rMSA8LSBhcy5udW1lcmljKGNoYXJ0cigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLCAiMTIzNDU2Nzg5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNiIsIGVsbHJlcC5sYWIkUmFuazEpKQ0KZWxscmVwLmxhYiRSYW5rMiA8LSBhcy5udW1lcmljKGNoYXJ0cigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLCAiMTIzNDU2Nzg5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNiIsIGVsbHJlcC5sYWIkUmFuazIpKQ0KDQplbGxyZXAubGFiICU+JSByZW5hbWUocGFydGljaXBhbnQ9SUQsIGdyb3VwPUdyb3VwLCBwYWlyPVBhaXIsIHBhaXJUeXBlPVBhaXJUeXBlLHN0aW1DYXRlZ29yeT1TdGltKSAlPiUgbXV0YXRlKHNlc3Npb24gPSBmYWN0b3IoIHJlYWRyOjpwYXJzZV9udW1iZXIoYXMuY2hhcmFjdGVyKHNlc3Npb24pKSksc3RpbUNhdGVnb3J5ID0gaWZlbHNlKHN0aW1DYXRlZ29yeT09IkYiLCJmYWNlcyIsaWZlbHNlKHN0aW1DYXRlZ29yeT09Ik8iLCJvYmplY3RzIiwic2NlbmVzIikpLCBwYWlyVHlwZT10b2xvd2VyKHBhaXJUeXBlKSwgZ3JvdXA9dG9sb3dlcihncm91cCksIHBhcnRpY2lwYW50PXRvbG93ZXIocGFydGljaXBhbnQpLCBkaXN0YW5jZSA9IGFicyhSYW5rMS1SYW5rMiksIGpvaW50cmFuaz1SYW5rMStSYW5rMikgLT4gZXhwMi5jb21iaW5lZA0KDQpgYGANCg0KYGBge3IgZTJmMSwgZmlnLmNhcCA9ICJFeHBlcmltZW50IDI6IEJlaGF2aW91cmFsIHBlcmZvcm1hbmNlIn0NCg0KZGF0YSA8LSBleHAyLmNvbWJpbmVkICU+JSBncm91cF9ieShwYXJ0aWNpcGFudCwgZ3JvdXAsIHBhaXJUeXBlLCBwYXJ0LCBzdGltQ2F0ZWdvcnkpICU+JSBzdW1tYXJpc2UobWVhblBlcmYgPSBtZWFuKGFjYykpICU+JSBmaWx0ZXIocGFpclR5cGUgIT0gImFuY2hvciIsIHBhcnQgIT0gImxlYXJuaW5nIikgJT4lIG11dGF0ZShwYXJ0WHBhaXJUeXBlID0gZmFjdG9yKGludGVyYWN0aW9uKHBhcnQsIHBhaXJUeXBlKSwgbGV2ZWxzPWMoImltbWVkaWF0ZSB0ZXN0aW5nLnByZW1pc2UiLCAiZGVsYXllZCB0ZXN0aW5nLnByZW1pc2UiLCAiZGVsYXllZCB0ZXN0aW5nLmluZmVyZW5jZSIpKSkgJT4lIG11dGF0ZSggR3JvdXA9cmVjb2RlKGdyb3VwICwgInNsZWVwIiA9ICJTbGVlcCIsICJ3YWtlIiA9ICJXYWtlIikpICU+JSBtdXRhdGUoR3JvdXA9ZmFjdG9yKEdyb3VwLGxldmVscz1jKCJTbGVlcCIsIldha2UiKSkpICU+JSBtdXRhdGUocGFpclR5cGUgPSAgZmFjdG9yKHN0cl90b190aXRsZShwYWlyVHlwZSksIGxldmVscyA9IGMoIlByZW1pc2UiLCJJbmZlcmVuY2UiKSksIHBhcnQ9ZmFjdG9yKHN0cl90b190aXRsZShwYXJ0KSxsZXZlbHMgPSBjKCJJbW1lZGlhdGUgVGVzdGluZyIsIkRlbGF5ZWQgVGVzdGluZyIpKSkNCg0KZ2dwbG90KGRhdGEsIGFlcyh4ID0gR3JvdXAsIHkgPSBtZWFuUGVyZiwgZmlsbCA9IEdyb3VwKSkgKw0KICBnZW9tX3Zpb2xpbihhbHBoYSA9IDAuNSwgd2lkdGggPSAwLjQsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjc1KSwgDQogICAgICAgICAgICAgIHRyaW0gPSBGQUxTRSwgc2NhbGUgPSAid2lkdGgiKSArDQogIGdlb21fYm94cGxvdChhbHBoYSA9IDAuNSwgb3V0bGllci5zaGFwZSA9IE5BLCB3aWR0aCA9IDAuMiwgDQogICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43NSkpICsNCiAgbGFicyh4ID0gIkhpZXJhcmNoeSIsIHkgPSAiTWVhbiBwZXJmb3JtYW5jZSIsIGZpbGwgPSAiIikgKw0KICBnZ3RpdGxlKCJQZXJmb3JtYW5jZSIpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTAuNSwgbGluZXR5cGU9ImRhc2hlZCIsIA0KICAgICAgICAgICAgICAgIGNvbG9yID0gImdyZXkiLCBzaXplPTAuOCkgKyBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSsNCiAgc3RhdF9zdW1tYXJ5KGZ1biA9IG1lYW4sIGdlb20gPSAicG9pbnQiLCBzaGFwZT0zLCBzaXplID0gMiwgY29sb3IgPSAiYmxhY2siLCBzdHJva2UgPSAxLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC43NSkpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSAgKyB0aGVtZV9hcGEoYmFzZV9zaXplID0gMTQpICsgIGZhY2V0X25lc3RlZCh+IHBhcnQgKyBwYWlyVHlwZSkgKyBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiZmlyZWJyaWNrIiwgImNvcm5mbG93ZXJibHVlIikpDQpgYGANCg0KIyMjIyBFbmNvZGluZyBzdHJlbmd0aA0KDQpgYGB7ciBlMmYyLCBjYXB0aW9uID0gIk1vZGVsIGNvbXBhcmlzb24gbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBIaWVyYXJjaHkgYW5kIEVuY29kaW5nIHN0cmVuZ3RoIn0NCmV4cDIuY29tYmluZWQuaW1BdmcgPC0gZXhwMi5jb21iaW5lZCAlPiUgZmlsdGVyKHBhcnQgPT0gImltbWVkaWF0ZSB0ZXN0aW5nIikgJT4lIGdyb3VwX2J5KHBhcnRpY2lwYW50LCBncm91cCwgc3RpbUNhdGVnb3J5KSAlPiUgc3VtbWFyaXNlKG1lYW5QcmVtaXNlUGVyZm9ybWFuY2UgPSBtZWFuKGFjYykpDQoNCmV4cDIuaW5mIDwtIGV4cDIuY29tYmluZWQgJT4lIGZpbHRlcihwYXJ0ID09ICJkZWxheWVkIHRlc3RpbmciLCBwYWlyVHlwZT09ImluZmVyZW5jZSIpICU+JSBsZWZ0X2pvaW4oZXhwMi5jb21iaW5lZC5pbUF2ZykgJT4lIG11dGF0ZShBY2N1cmFjeSA9IGFjYykgJT4lIG11dGF0ZShwYXJ0aWNpcGFudCA9IHBhcnRpY2lwYW50LCBFbmNvZGluZ19zdHJlbmd0aCA9bWVhblByZW1pc2VQZXJmb3JtYW5jZSkgJT4lIG11dGF0ZSggR3JvdXA9cmVjb2RlKGdyb3VwICwgInNsZWVwIiA9ICJTbGVlcCIsICJ3YWtlIiA9ICJXYWtlIikpICU+JSBtdXRhdGUoR3JvdXA9ZmFjdG9yKEdyb3VwLGxldmVscz1jKCJTbGVlcCIsIldha2UiKSkpDQoNCm0xIDwtIGdsbWVyKEFjY3VyYWN5IH4gMSArDQogICAgKDEgfCBwYXJ0aWNpcGFudCksIGRhdGEgPSBleHAyLmluZiwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KbTIgPC0gZ2xtZXIoQWNjdXJhY3kgfiBHcm91cCArDQogICAgKDEgfCBwYXJ0aWNpcGFudCksIGRhdGEgPSBleHAyLmluZiwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KbTMgPC0gZ2xtZXIoQWNjdXJhY3kgfiBHcm91cCArIEVuY29kaW5nX3N0cmVuZ3RoICsNCiAgICAoMSB8IHBhcnRpY2lwYW50KSwgZGF0YSA9IGV4cDIuaW5mLCBmYW1pbHkgPSBiaW5vbWlhbCwgY29udHJvbCA9IGdsbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQptNCA8LSBnbG1lcihBY2N1cmFjeSB+IEdyb3VwICogRW5jb2Rpbmdfc3RyZW5ndGggKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMi5pbmYsIGZhbWlseSA9IGJpbm9taWFsLCBjb250cm9sID0gZ2xtZXJDb250cm9sKG9wdGltaXplciA9ICJib2J5cWEiKSkNCg0KdGFiX21vZGVsKG0xLG0yLG0zLG00KQ0KYGBgDQoNCmBgYHtyIGUyZjMsIGZpZy5jYXA9IlBsb3R0aW5nIG1vZGVsIHByZWRpY3RlZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEhpZXJhcmNoeSBhbmQgRW5jb2Rpbmcgc3RyZW5ndGgifQ0KbGlicmFyeShzalBsb3QpDQoNCnBsb3RfbW9kZWwobTQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiRW5jb2Rpbmdfc3RyZW5ndGhbYWxsXSIsIkdyb3VwIiksIGF4aXMudGl0bGU9YygiRW5jb2Rpbmcgc3RyZW5ndGgiLCJJbmZlcmVuY2UgcGVyZm9ybWFuY2UiKSwgY29sb3JzID0gYygiZmlyZWJyaWNrIiwgImNvcm5mbG93ZXJibHVlIikpICsgdGhlbWVfYXBhKGJhc2Vfc2l6ZSA9IDE0KSArIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsgZ2VvbV92bGluZSh4aW50ZXJjZXB0PTAuNSwgbGluZXR5cGU9ImRhc2hlZCIsIGNvbG9yID0gImdyZXkiLCBzaXplPTAuOCkNCg0KIyBleHAxLmluZi5zdW1tYXJ5IDwtIGV4cDEuaW5mICU+JSBncm91cF9ieShwYXJ0aWNpcGFudCxIaWVyYXJjaHksRW5jb2Rpbmdfc3RyZW5ndGgpICU+JSBzdW1tYXJpc2UocHJlZGljdGVkPW1lYW4oY29ycikpICU+JSBtdXRhdGUoeD1FbmNvZGluZ19zdHJlbmd0aCwgZ3JvdXBfY29sPUhpZXJhcmNoeSkNCg0KIyB0bXAgPC0gdGliYmxlKGdldF9tb2RlbF9kYXRhKG00LCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIkVuY29kaW5nX3N0cmVuZ3RoW2FsbF0iLCJIaWVyYXJjaHkiKSkpDQojICMgY3JlYXRlIGEgZ2dwbG90IG9iamVjdA0KIyAjIENyZWF0ZSBnZ3Bsb3Qgb2JqZWN0DQojIGdncGxvdCh0bXAsIGFlcyh4ID0geCwgeSA9IHByZWRpY3RlZCwgY29sb3IgPSBncm91cF9jb2wsZmlsbD1ncm91cF9jb2wpKSArIA0KIyAgIGdlb21fbGluZSgpICsgDQojICAgZ2VvbV9yaWJib24oYWVzKHltaW4gPSBjb25mLmxvdywgeW1heCA9IGNvbmYuaGlnaCksIGFscGhhID0gMC4zKSArDQojICAgeGxhYigiRW5jb2Rpbmcgc3RyZW5ndGgiKSArDQojICAgeWxhYigiSW5mZXJlbmNlIHBlcmZvcm1hbmNlIikgKw0KIyAgIGdndGl0bGUoIkVmZmVjdCBvZiBFbmNvZGluZyBzdHJlbmd0aCBvbiBBY2N1cmFjeSBieSBIaWVyYXJjaHkiKSArIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsgZ2VvbV92bGluZSh4aW50ZXJjZXB0PTAuNSwgbGluZXR5cGU9ImRhc2hlZCIsIGNvbG9yID0gImdyZXkiLCBzaXplPTAuOCkgKyBnZW9tX3BvaW50KGRhdGE9ZXhwMS5pbmYuc3VtbWFyeSwgYWVzKHggPSB4LCB5ID0gcHJlZGljdGVkLCBjb2xvciA9IGdyb3VwX2NvbCxmaWxsPWdyb3VwX2NvbCksYWxwaGEgPSAwLjUsIHBvc2l0aW9uPXBvc2l0aW9uX2ppdHRlcihoZWlnaHQ9LjAxLCB3aWR0aD0uMDEpKSAgICsgdGhlbWVfYXBhKGJhc2Vfc2l6ZSA9IDE0KSArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCJmaXJlYnJpY2siLCAiY29ybmZsb3dlcmJsdWUiKSkgKyBsYWJzKGNvbG9yID0gIkhpZXJhcmNoeSIsIGZpbGw9IkhpZXJhcmNoeSIpDQoNCmBgYA0KDQojIyMjIERpc3RhbmNlDQoNCmBgYHtyIGUyZjQsIGNhcHRpb249Ik1vZGVsIGNvbXBhcmlzb24gbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBIaWVyYXJjaHksIEVuY29kaW5nIHN0cmVuZ3RoIGFuZCBEaXN0YW5jZSJ9DQpleHAyLmluZl9tYXAgPC0gZXhwMi5jb21iaW5lZCAlPiUgZmlsdGVyKHBhcnQgPT0gImRlbGF5ZWQgdGVzdGluZyIsIHBhaXJUeXBlPT0iaW5mZXJlbmNlIikgJT4lIGxlZnRfam9pbihleHAyLmNvbWJpbmVkLmltQXZnKSAlPiUgbXV0YXRlKEFjY3VyYWN5ID0gYWNjKSAlPiUgbXV0YXRlKHBhcnRpY2lwYW50ID0gcGFydGljaXBhbnQsIEVuY29kaW5nX3N0cmVuZ3RoID1tZWFuUHJlbWlzZVBlcmZvcm1hbmNlKSAlPiUgbXV0YXRlKCBHcm91cD1yZWNvZGUoZ3JvdXAgLCAic2xlZXAiID0gIlNsZWVwIiwgIndha2UiID0gIldha2UiKSkgJT4lIG11dGF0ZShHcm91cD1mYWN0b3IoR3JvdXAsbGV2ZWxzPWMoIlNsZWVwIiwiV2FrZSIpKSkgJT4lIG11dGF0ZShEaXN0YW5jZT1kaXN0YW5jZSwgSm9pbnRyYW5rPWpvaW50cmFuaykNCg0KbTEuZCA8LSBnbG1lcihBY2N1cmFjeSB+IEdyb3VwICogRW5jb2Rpbmdfc3RyZW5ndGggKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMi5pbmZfbWFwLCBmYW1pbHkgPSBiaW5vbWlhbCwgY29udHJvbCA9IGdsbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQoNCm0yLmQgPC0gZ2xtZXIoQWNjdXJhY3kgfiBHcm91cCAqIEVuY29kaW5nX3N0cmVuZ3RoICsgRGlzdGFuY2UgKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMi5pbmZfbWFwLCBmYW1pbHkgPSBiaW5vbWlhbCwgY29udHJvbCA9IGdsbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQptMy5kIDwtIGdsbWVyKEFjY3VyYWN5IH4gR3JvdXAgKiBFbmNvZGluZ19zdHJlbmd0aCArIERpc3RhbmNlICogR3JvdXAgKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMi5pbmZfbWFwLCBmYW1pbHkgPSBiaW5vbWlhbCwgY29udHJvbCA9IGdsbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQptNC5kIDwtIGdsbWVyKEFjY3VyYWN5IH4gR3JvdXAgKiBFbmNvZGluZ19zdHJlbmd0aCAqIERpc3RhbmNlICsNCiAgICAoMSB8IHBhcnRpY2lwYW50KSwgZGF0YSA9IGV4cDIuaW5mX21hcCwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KDQp0YWJfbW9kZWwobTEuZCxtMi5kLG0zLmQsbTQuZCkNCiNhbm92YShtMS5kLG0yLmQsbTMuZCxtNC5kKSAjIG0zIHdpbnMNCmBgYA0KDQpgYGB7ciBlMmY1LCBmaWcuY2FwPSJQbG90dGluZyBtb2RlbCBwcmVkaWN0ZWQgaW50ZXJhY3Rpb24gYmV0d2VlbiBIaWVyYXJjaHkgYW5kIERpc3RhbmNlIn0NCg0KcGxvdF9tb2RlbChtMy5kLHR5cGUgPSAicHJlZCIsdGVybXMgPSBjKCJEaXN0YW5jZSIsIkdyb3VwIikpICArIHRoZW1lX2FwYShiYXNlX3NpemUgPSAxNCkgICsgZ2d0aXRsZSgiRWZmZWN0IG9mIERpc3RhbmNlIG9uIEFjY3VyYWN5IGJ5IEhpZXJhcmNoeSIpICsgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1zZXEoMiwgMywgMSkpDQoNCmBgYA0KDQojIyMjIEpvaW50cmFuaw0KDQpgYGB7ciBlMmY2LCBjYXB0aW9uPSJNb2RlbCBjb21wYXJpc29uIGxvb2tpbmcgYXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gSGllcmFyY2h5LCBFbmNvZGluZyBzdHJlbmd0aCBhbmQgSm9pbnRyYW5rIn0NCm0xLmogPC0gZ2xtZXIoQWNjdXJhY3kgfiBHcm91cCAqIEVuY29kaW5nX3N0cmVuZ3RoICsNCiAgICAoMSB8IHBhcnRpY2lwYW50KSwgZGF0YSA9IGV4cDIuaW5mX21hcCwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KbTIuaiA8LSBnbG1lcihBY2N1cmFjeSB+IEdyb3VwICogRW5jb2Rpbmdfc3RyZW5ndGggKyBKb2ludHJhbmsgKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMi5pbmZfbWFwLCBmYW1pbHkgPSBiaW5vbWlhbCwgY29udHJvbCA9IGdsbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQptMy5qIDwtIGdsbWVyKEFjY3VyYWN5IH4gR3JvdXAgKiBFbmNvZGluZ19zdHJlbmd0aCArIEpvaW50cmFuayAqIEdyb3VwICsNCiAgICAoMSB8IHBhcnRpY2lwYW50KSwgZGF0YSA9IGV4cDIuaW5mX21hcCwgZmFtaWx5ID0gYmlub21pYWwsIGNvbnRyb2wgPSBnbG1lckNvbnRyb2wob3B0aW1pemVyID0gImJvYnlxYSIpKQ0KbTQuaiA8LSBnbG1lcihBY2N1cmFjeSB+IEdyb3VwICogRW5jb2Rpbmdfc3RyZW5ndGggKiBKb2ludHJhbmsgKw0KICAgICgxIHwgcGFydGljaXBhbnQpLCBkYXRhID0gZXhwMi5pbmZfbWFwLCBmYW1pbHkgPSBiaW5vbWlhbCwgY29udHJvbCA9IGdsbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpDQptNS5qIDwtIGdsbWVyKEFjY3VyYWN5IH4gR3JvdXAgKiBFbmNvZGluZ19zdHJlbmd0aCAqIEpvaW50cmFuayArDQogICAgKDEgfCBwYXJ0aWNpcGFudCksIGRhdGEgPSBleHAyLmluZl9tYXAsIGZhbWlseSA9IGJpbm9taWFsLCBjb250cm9sID0gZ2xtZXJDb250cm9sKG9wdGltaXplciA9ICJib2J5cWEiKSkNCg0KdGFiX21vZGVsKG0xLmosbTIuaixtMy5qLG00LmosbTUuaikNCiNhbm92YShtMS5qLG0yLmosbTMuaixtNC5qKSAjbTQgd2lucw0KYGBgDQoNCmBgYHtyIGUyZjcsIGZpZy5jYXA9IlBsb3R0aW5nIG1vZGVsIHByZWRpY3RlZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEhpZXJhcmNoeSwgRW5jb2Rpbmcgc3RyZW5ndGggYW5kIEpvaW50cmFuayJ9DQoNCiMgcGxvdF9tb2RlbChtMy5qLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIkpvaW50cmFua1s2LDcsOF0iLCAiSGllcmFyY2h5IiksYXhpcy50aXRsZT1jKCJJbmZlcmVuY2UgcGVyZm9ybWFuY2UiKSkgICsgdGhlbWVfYXBhKGJhc2Vfc2l6ZSA9IDE0KSArIGdndGl0bGUoIkVmZmVjdCBvZiBKb2ludHJhbmsgb24gQWNjdXJhY3kgYnkgSGllcmFyY2h5IikgKyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPXNlcSg2LCA4LCAxKSkNCg0KcGxvdF9tb2RlbChtNC5qLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIkVuY29kaW5nX3N0cmVuZ3RoW2FsbF0iLCJKb2ludHJhbmsiLCAiR3JvdXAiKSwgYXhpcy50aXRsZT1jKCJFbmNvZGluZyBzdHJlbmd0aCIsIkluZmVyZW5jZSBwZXJmb3JtYW5jZSIpICkgICsgdGhlbWVfYXBhKGJhc2Vfc2l6ZSA9IDE0KSArIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsgZ2VvbV92bGluZSh4aW50ZXJjZXB0PTAuNSwgbGluZXR5cGU9ImRhc2hlZCIsIGNvbG9yID0gImdyZXkiLCBzaXplPTAuOCkgKyBnZ3RpdGxlKCJFZmZlY3Qgb2YgRW5jb2Rpbmcgc3RyZW5ndGggb24gQWNjdXJhY3kgYnkgSGllcmFyY2h5IGFuZCBKb2ludHJhbmsiKSAgDQoNCmBgYA0KDQojIERpc2N1c3Npb24NCg0KIyBNYXRlcmlhbHMgYW5kIE1ldGhvZHMNCg0KIyMgUGFydGljaXBhbnRzDQoNCiMjIFByb2NlZHVyZQ0KDQojIyMgRXhwZXJpbWVudCAxDQoNCiMjIyBFeHBlcmltZW50IDINCg0KIyMgU3RpbXVsaQ0KDQojIyBTdGF0aXN0aWNhbCBhbmFseXNlcw0KDQojIyBCZWhhdmlvcmFsIGFuYWx5c2VzDQo=