1 Question #10 Body Weight by status

  • N size, % of respondents, mean, SD, median for all respondents and across all menopausal stage.
  • Please conduct an analysis of statistical significance between the three groups (Pre; Peri; Post) for reported value of Body Weight.
  • Between-Group Comparison: Is there a statistically significant difference in the Body Weight value reported between women who are premenopausal, perimenopausal, and postmenopausal?

The weight variable was skewed for all three groups (Shapiro-Wilk p-values all less than .0001). As a result, a Kruskal-Wallis test was used to find differences among the menopausal status groups for the variable WTKG. A statistically significant difference was found among the status groups, X2(df=2)=17.908, p=.00013. The Dunn test was used to evaluate pairwise comparisons, and only perimenopause and postmenopause were found to be statistically significant (adjusted p=.00007).

Descriptive statsitcs of WTKG
mean sd median n
66.18129 10.88626 65 4148
Descriptive statsitcs of WTKG by status
status mean sd median n
pre-menopause 66.54032 12.39984 65 496
peri-menopause 66.85299 10.59572 65 1823
post-menopause 65.41443 10.68849 64 1829
Normality assessment by status
status statistic p_value
pre-menopause 0.8534337 0
peri-menopause 0.9432977 0
post-menopause 0.9336935 0


    Kruskal-Wallis rank sum test

data:  WTKG by status
Kruskal-Wallis chi-squared = 17.908, df = 2, p-value = 0.0001292
                       Comparison         Z       P.unadj         P.adj
1 peri-menopause - post-menopause  4.229002 0.00002347304 0.00007041912
2  peri-menopause - pre-menopause  1.239827 0.21503921122 0.21503921122
3  post-menopause - pre-menopause -1.524382 0.12741336926 0.25482673851

2 Question #20 Are you taking any prescription anti-depressant medications?

  • Analysis of statistical significance between the three groups (Pre; Peri; Post) for the answer ‘Yes’.
  • Between-Group Comparison: Is there a statistically significant difference in the number of ‘Yes’ responses between women who are premenopausal, perimenopausal, and postmenopausal?

A Chi-square test of independence was conducted to assess the relationship between antidepressant use and menopausal status. No statistically significant association was found, X2(df=2)=1.328, p=.5148. Cramer’s V was trivial at V=0.018, 95% CI(0.00, 0.049).


                 Yes                   No         I don't know 
                 462                 3678                    0 
Prefer Not to Answer                 <NA> 
                   7                    1 
     status
dep   pre-menopause peri-menopause post-menopause
  Yes            48            209            205
  No            448           1607           1623
     status
dep   pre-menopause peri-menopause post-menopause
  Yes    0.09677419     0.11508811     0.11214442
  No     0.90322581     0.88491189     0.88785558

    Pearson's Chi-squared test

data:  x
X-squared = 1.328, df = 2, p-value = 0.5148
     status
dep   pre-menopause peri-menopause post-menopause
  Yes      55.35072       202.6551       203.9942
  No      440.64928      1613.3449      1624.0058

    1-sample proportions test with continuity correction

data:  48 out of 48 + 448, null probability 0.5
X-squared = 320.97, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.07288888 0.12709489
sample estimates:
         p 
0.09677419 

    1-sample proportions test with continuity correction

data:  209 out of 209 + 1607, null probability 0.5
X-squared = 1074.7, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.1009565 0.1308752
sample estimates:
        p 
0.1150881 

    1-sample proportions test with continuity correction

data:  205 out of 205 + 1623, null probability 0.5
X-squared = 1098.4, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.09822743 0.12771880
sample estimates:
        p 
0.1121444 

    Pairwise comparisons using Pairwise comparison of proportions 

data:  b$num out of b$den 

  1    2   
2 0.85 -   
3 0.85 0.85

P value adjustment method: holm 

    Two-sided 95% chi-squared confidence interval for the population
    Cramer's V

Sample estimate: 0.01791018 
Confidence interval:
      2.5%      97.5% 
0.00000000 0.04910733 

3 Question #21 Are you taking any prescription sleep medications?

  • Analysis of statistical significance between the three groups (Pre; Peri; Post) for the answer ‘Yes’.
  • Between-Group Comparison: Is there a statistically significant difference in the number of ‘Yes’ responses between women who are premenopausal, perimenopausal, and postmenopausal?

A Chi-square test of independence was conducted to assess the relationship between and menopausal status. A statistically significant association was found, X2(df=2)=6.3055, p=.0427. Cramer’s V was trivial at V=0.039, 95% CI(0.00, 0.071).


                 Yes                   No         I don't know 
                 192                 3950                    4 
Prefer Not to Answer                 <NA> 
                   0                    2 
     status
sleep pre-menopause peri-menopause post-menopause
  Yes            12             88             92
  No            483           1733           1734
     status
sleep pre-menopause peri-menopause post-menopause
  Yes    0.02424242     0.04832510     0.05038335
  No     0.97575758     0.95167490     0.94961665

    Pearson's Chi-squared test

data:  x
X-squared = 6.3055, df = 2, p-value = 0.04274
     status
sleep pre-menopause peri-menopause post-menopause
  Yes      22.94544        84.4114       84.64317
  No      472.05456      1736.5886     1741.35683

    1-sample proportions test with continuity correction

data:  12 out of 12 + 483, null probability 0.5
X-squared = 446.26, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.01318411 0.04315340
sample estimates:
         p 
0.02424242 

    1-sample proportions test with continuity correction

data:  88 out of 88 + 1733, null probability 0.5
X-squared = 1484.2, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.03914314 0.05946140
sample estimates:
        p 
0.0483251 

    1-sample proportions test with continuity correction

data:  92 out of 92 + 1734, null probability 0.5
X-squared = 1474.7, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.04101321 0.06169254
sample estimates:
         p 
0.05038335 

    Pairwise comparisons using Pairwise comparison of proportions 

data:  b$num out of b$den 

  1     2    
2 0.054 -    
3 0.053 0.833

P value adjustment method: holm 

    Two-sided 95% chi-squared confidence interval for the population
    Cramer's V

Sample estimate: 0.03901698 
Confidence interval:
      2.5%      97.5% 
0.00000000 0.07060679 

4 Question #22 Are you taking any prescription weight loss medications?

  • Please conduct an analysis of statistical significance between the three groups (Pre; Peri; Post) for the answer ‘Yes’.
  • Between-Group Comparison: Is there a statistically significant difference in the number of ‘Yes’ responses between women who are premenopausal, perimenopausal, and postmenopausal?

A Chi-square test of independence was conducted to assess the relationship between taking weight loss medication and menopausal status. No statistically significant association was found, X2(df=2)=0.316, p=.8539. Cramer’s V was trivial at V=0.01, 95% CI(0.00, 0.037).


                 Yes                   No         I don't know 
                 203                 3940                    1 
Prefer Not to Answer                 <NA> 
                   0                    4 
     status
WLMED pre-menopause peri-menopause post-menopause
  Yes            23             93             87
  No            471           1727           1742
     status
WLMED pre-menopause peri-menopause post-menopause
  Yes    0.04655870     0.05109890     0.04756698
  No     0.95344130     0.94890110     0.95243302

    Pearson's Chi-squared test

data:  x
X-squared = 0.31585, df = 2, p-value = 0.8539
     status
WLMED pre-menopause peri-menopause post-menopause
  Yes      24.20517       89.17692       89.61791
  No      469.79483     1730.82308     1739.38209

    1-sample proportions test with continuity correction

data:  23 out of 23 + 471, null probability 0.5
X-squared = 404.47, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.03040551 0.07008276
sample estimates:
        p 
0.0465587 

    1-sample proportions test with continuity correction

data:  93 out of 93 + 1727, null probability 0.5
X-squared = 1465.2, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.04164589 0.06249398
sample estimates:
        p 
0.0510989 

    1-sample proportions test with continuity correction

data:  87 out of 87 + 1742, null probability 0.5
X-squared = 1495.7, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.03847846 0.05860485
sample estimates:
         p 
0.04756698 

    Pairwise comparisons using Pairwise comparison of proportions 

data:  b$num out of b$den 

  1 2
2 1 -
3 1 1

P value adjustment method: holm 

    Two-sided 95% chi-squared confidence interval for the population
    Cramer's V

Sample estimate: 0.008731422 
Confidence interval:
      2.5%      97.5% 
0.00000000 0.03747234 

5 Question #31 Body fat percentage by status

  • Analysis of statistical significance between the three groups (Pre; Peri; Post) for self-reported value of Body Fat %.

-Between-Group Comparison: Is there a statistically significant difference in the Body Fat % value reported between women who are premenopausal, perimenopausal, and postmenopausal?

The body fat percentage variable was skewed for all three groups (Shapiro-Wilk p-values all less than .0001). A Kruskal-Wallis test was used to find differences among the menopausal status groups for the variable WTKG. A statistically significant difference was found among the status groups, X2(df=2)=18.167, p=.00011. The Dunn test was used to evaluate pairwise comparisons; perimenopause and postmenopause were found to be statistically significantly different (adjusted p=.0012), as were premenopause and postmenopause (adjusted p=0014).

Normality assessment by status
status statistic p_value
pre-menopause 0.9857073 0.0087803
peri-menopause 0.9903387 0.0000022
post-menopause 0.9914790 0.0000124

    Kruskal-Wallis rank sum test

data:  BFPCT by status
Kruskal-Wallis chi-squared = 18.167, df = 2, p-value = 0.0001135
                       Comparison         Z      P.unadj       P.adj
1 peri-menopause - post-menopause -3.550098 0.0003850884 0.001155265
2  peri-menopause - pre-menopause  1.110993 0.2665715714 0.266571571
3  post-menopause - pre-menopause  3.384328 0.0007135281 0.001427056

6 Question #32 Measure frequencies of body composition measurement tools.

  • Please provide N size and % of respondents for each body composition measurement tool
  • Total values should add up to 100%

                   DEXA                   Other High-quality BIA device 
                    374                     322                     659 
              Skinfolds     Home bathroom scale              Ultrasound 
                    106                     862                       4 
                 BodPod                    <NA> 
                     51                    1770 

                   DEXA                   Other High-quality BIA device 
                  0.090                   0.078                   0.159 
              Skinfolds     Home bathroom scale              Ultrasound 
                  0.026                   0.208                   0.001 
                 BodPod                    <NA> 
                  0.012                   0.427 

7 Question #33 Body Composition Satisfaction

  • Please provide N size, % of respondents who replied yes or no for each menopause stage.
  • Please conduct an analysis of statistical significance between the three groups (Pre; Peri; Post) for Body Composition Satisfaction (‘No’ Responses)
  • Between-Group Comparison: Is there a statistically significant difference in the number of ‘No’ responses between women who are premenopausal, perimenopausal, and postmenopausal?

A Chi-square test of independence was conducted to assess the relationship between BC satisfaction and menopausal status. A statistically significant association was found, X2(df=2)=40.8, p=.000000001. Cramer’s V was small at V=0.1, 95% CI(0.07, 0.13).


 Yes   No <NA> 
1158 2990    0 
       status
bcsatis pre-menopause peri-menopause post-menopause
    Yes           192            521            445
    No            304           1302           1384
       status
bcsatis pre-menopause peri-menopause post-menopause
    Yes     0.3870968      0.2857926      0.2433024
    No      0.6129032      0.7142074      0.7566976

    Pearson's Chi-squared test

data:  x
X-squared = 40.8, df = 2, p-value = 0.000000001381
       status
bcsatis pre-menopause peri-menopause post-menopause
    Yes      138.4687       508.9282       510.6032
    No       357.5313      1314.0718      1318.3968

    1-sample proportions test with continuity correction

data:  304 out of 304 + 192, null probability 0.5
X-squared = 24.841, df = 1, p-value = 0.0000006227
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.5683052 0.6557252
sample estimates:
        p 
0.6129032 

    1-sample proportions test with continuity correction

data:  1302 out of 1302 + 521, null probability 0.5
X-squared = 333.74, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.692755 0.734747
sample estimates:
        p 
0.7142074 

    1-sample proportions test with continuity correction

data:  1384 out of 1384 + 445, null probability 0.5
X-squared = 481.05, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.7362285 0.7760759
sample estimates:
        p 
0.7566976 

    Pairwise comparisons using Pairwise comparison of proportions 

data:  b$num out of b$den 

  1             2     
2 0.00003734913 -     
3 0.00000000083 0.0041

P value adjustment method: holm 

    Two-sided 95% chi-squared confidence interval for the population
    Cramer's V

Sample estimate: 0.09917743 
Confidence interval:
      2.5%      97.5% 
0.07076358 0.13040325 

8 Question #34 Perceived Recent Body Fat Gain

  • Please provide N size, % of respondents who replied Yes’ or ‘No’ or “I do not know”
  • Please conduct an analysis of statistical significance between the three groups (Pre; Peri; Post) for recent body fat gain
  • Between-Group Comparison: Is there a statistically significant difference in the number of ‘Yes’ responses between women who are premenopausal, perimenopausal, and postmenopausal?

A Chi-square test of independence was conducted to assess the relationship between perceived weight gain and menopausal status. A statistically significant association was found, X2(df=4)=60.9, p=.00000000000006. Cramer’s V was small at V=0.12, 95% CI(0.09, 0.15).


 Yes   No 
3012 1019 
      status
wtgain pre-menopause peri-menopause post-menopause
   Yes           287           1353           1372
   No            190            419            410
      status
wtgain pre-menopause peri-menopause post-menopause
   Yes     0.6016771      0.7635440      0.7699214
   No      0.3983229      0.2364560      0.2300786

    Pearson's Chi-squared test

data:  x
X-squared = 60.855, df = 2, p-value = 0.00000000000006103
      status
wtgain pre-menopause peri-menopause post-menopause
   Yes      356.4188      1324.0546      1331.5267
   No       120.5812       447.9454       450.4733

    1-sample proportions test with continuity correction

data:  287 out of 287 + 19 + 190, null probability 0.5
X-squared = 11.954, df = 1, p-value = 0.0005454
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.5337186 0.6223029
sample estimates:
       p 
0.578629 

    1-sample proportions test with continuity correction

data:  1353 out of 1353 + 51 + 419, null probability 0.5
X-squared = 426.73, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.7213279 0.7620061
sample estimates:
        p 
0.7421832 

    1-sample proportions test with continuity correction

data:  1372 out of 1372 + 47 + 410, null probability 0.5
X-squared = 456.75, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.7295053 0.7697051
sample estimates:
        p 
0.7501367 

    Pairwise comparisons using Pairwise comparison of proportions 

data:  b$num out of b$den 

  1                2   
2 0.00000000000380 -   
3 0.00000000000031 0.61

P value adjustment method: holm 

    Two-sided 95% chi-squared confidence interval for the population
    Cramer's V

Sample estimate: 0.1228686 
Confidence interval:
      2.5%      97.5% 
0.09351581 0.15444816 

9 Question #35a-g Factors Contributing to Body Fat Gain

  • For each cell in the table, please provide the n size and the % of respondents

9.1 35a Increased calorie Intake


      Very responsible   Somewhat responsible Not at all responsible 
                   379                   1473                   1160 
                  <NA> 
                  1136 
                        status
cal                      pre-menopause peri-menopause post-menopause
  Very responsible                  53            158            168
  Somewhat responsible             177            649            647
  Not at all responsible            57            546            557
                        status
cal                      pre-menopause peri-menopause post-menopause
  Very responsible               0.185          0.117          0.122
  Somewhat responsible           0.617          0.480          0.472
  Not at all responsible         0.199          0.404          0.406

9.2 35b Changes in Workout Routine


      Very responsible   Somewhat responsible Not at all responsible 
                   245                    988                   1779 
                  <NA> 
                  1136 
                        status
change                   pre-menopause peri-menopause post-menopause
  Very responsible                  35             88            122
  Somewhat responsible             100            412            476
  Not at all responsible           152            853            774
                        status
change                   pre-menopause peri-menopause post-menopause
  Very responsible               0.122          0.065          0.089
  Somewhat responsible           0.348          0.305          0.347
  Not at all responsible         0.530          0.630          0.564

9.3 35c Sleep Depravation


  Somewhat responsible       Very responsible Not at all responsible 
                  1454                    597                    961 
                  <NA> 
                  1136 
                        status
sleep                    pre-menopause peri-menopause post-menopause
  Somewhat responsible             141            627            686
  Very responsible                  45            273            279
  Not at all responsible           101            453            407
                        status
sleep                    pre-menopause peri-menopause post-menopause
  Somewhat responsible           0.491          0.463          0.500
  Very responsible               0.157          0.202          0.203
  Not at all responsible         0.352          0.335          0.297

9.4 35d Stress


  Somewhat responsible       Very responsible Not at all responsible 
                  1542                    731                    739 
                  <NA> 
                  1136 
                        status
stress                   pre-menopause peri-menopause post-menopause
  Somewhat responsible             149            711            682
  Very responsible                  77            345            309
  Not at all responsible            61            297            381
                        status
stress                   pre-menopause peri-menopause post-menopause
  Somewhat responsible           0.519          0.525          0.497
  Very responsible               0.268          0.255          0.225
  Not at all responsible         0.213          0.220          0.278

9.5 35e Fatigue or Lack of Energy


  Somewhat responsible       Very responsible Not at all responsible 
                  1460                    677                    875 
                  <NA> 
                  1136 
                        status
low                      pre-menopause peri-menopause post-menopause
  Somewhat responsible             157            684            619
  Very responsible                  59            320            298
  Not at all responsible            71            349            455
                        status
low                      pre-menopause peri-menopause post-menopause
  Somewhat responsible           0.547          0.506          0.451
  Very responsible               0.206          0.237          0.217
  Not at all responsible         0.247          0.258          0.332

9.6 35f Hormonal Changes


      Very responsible   Somewhat responsible Not at all responsible 
                  1717                   1108                    187 
                  <NA> 
                  1136 
                        status
hormone                  pre-menopause peri-menopause post-menopause
  Very responsible                  83            843            791
  Somewhat responsible             168            465            475
  Not at all responsible            36             45            106
                        status
hormone                  pre-menopause peri-menopause post-menopause
  Very responsible               0.289          0.623          0.577
  Somewhat responsible           0.585          0.344          0.346
  Not at all responsible         0.125          0.033          0.077

9.7 35g Reduced Daily Activities/Movement


      Very responsible   Somewhat responsible Not at all responsible 
                   298                   1041                   1673 
                  <NA> 
                  1136 
                        status
move                     pre-menopause peri-menopause post-menopause
  Very responsible                  32            124            142
  Somewhat responsible             105            442            494
  Not at all responsible           150            787            736
                        status
move                     pre-menopause peri-menopause post-menopause
  Very responsible               0.111          0.092          0.103
  Somewhat responsible           0.366          0.327          0.360
  Not at all responsible         0.523          0.582          0.536
stage Pre Pre Pre Peri Peri Peri Post Post Post
Response Not at all somewhat very Not at all somewhat very Not at all somewhat very
Item Increased calorie intake 57 177 53 546 649 158 557 647 168
Ppn Increased calorie intake 0.199 0.617 0.185 0.404 0.48 0.117 0.406 0.472 0.122
Item Changes in Workout 152 100 35 853 412 88 774 476 122
Ppn Changes in Workout 0.53 0.348 0.122 0.63 0.305 0.065 0.564 0.347 0.089
Item Sleep 101 45 141 453 273 627 407 279 686
Ppn Sleep 0.352 0.157 0.491 0.335 0.202 0.463 0.297 0.203 0.5
Item Stress 61 77 149 297 345 711 381 309 682
Ppn Stress 0.213 0.268 0.519 0.22 0.255 0.525 0.278 0.225 0.497
Item Fatigue 71 59 157 349 320 684 455 298 619
Ppn Fatigue 0.247 0.206 0.547 0.258 0.237 0.506 0.332 0.217 0.451
Item Hormonal changes 36 168 83 45 465 843 106 475 791
Ppn Hormonal changes 0.125 0.585 0.289 0.033 0.344 0.623 0.077 0.346 0.577
Item Reduced activities 150 105 32 787 442 124 736 494 142
Ppn Reduced activities 0.523 0.366 0.111 0.582 0.327 0.092 0.536 0.36 0.103

10 Question #36 Weight loss resistance

  • Please conduct an analysis of statistical significance between the three groups (Pre; Peri; Post) currently experiencing weight loss resistance Between-Group Comparison:
  • Is there a statistically significant difference in the number of ‘Yes’ responses between women who are premenopausal, perimenopausal, and postmenopausal?

A Chi-square test of independence was conducted to assess the relationship between perceived weight gain and menopausal status. A statistically significant association was found, X2(df=6)=60.554, p=.00000000003. Cramer’s V was small at V=0.09, 95% CI(0.07, 0.11).


           Yes             No   I don't know Does Not Apply           <NA> 
          2361            804            362            621              0 
                status
wlr              pre-menopause peri-menopause post-menopause
  Yes                      212           1032           1117
  No                       132            366            306
  I don't know              67            151            144
  Does Not Apply            85            274            262
                status
wlr              pre-menopause peri-menopause post-menopause
  Yes               0.42741935     0.56609984     0.61071624
  No                0.26612903     0.20076796     0.16730454
  I don't know      0.13508065     0.08283050     0.07873155
  Does Not Apply    0.17137097     0.15030170     0.14324768

    Pearson's Chi-squared test

data:  x
X-squared = 60.554, df = 6, p-value = 0.00000000003472
                status
wlr              pre-menopause peri-menopause post-menopause
  Yes                282.31823      1037.6333      1041.0485
  No                  96.13886       353.3491       354.5121
  I don't know        43.28640       159.0950       159.6186
  Does Not Apply      74.25651       272.9226       273.8209

    1-sample proportions test with continuity correction

data:  212 out of 212 + 132 + 67 + 85, null probability 0.5
X-squared = 10.163, df = 1, p-value = 0.001433
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.3836174 0.4723626
sample estimates:
        p 
0.4274194 

    1-sample proportions test with continuity correction

data:  1032 out of 1032 + 274 + 151 + 366, null probability 0.5
X-squared = 31.596, df = 1, p-value = 0.00000001898
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.5429582 0.5889601
sample estimates:
        p 
0.5660998 

    1-sample proportions test with continuity correction

data:  1117 out of 1117 + 262 + 144 + 306, null probability 0.5
X-squared = 89.238, df = 1, p-value < 0.00000000000000022
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
 0.5878851 0.6330776
sample estimates:
        p 
0.6107162 

    Pairwise comparisons using Pairwise comparison of proportions 

data:  b$num out of b$den 

  1               2     
2 0.0000001061716 -     
3 0.0000000000011 0.0068

P value adjustment method: holm 

    Two-sided 95% chi-squared confidence interval for the population
    Cramer's V

Sample estimate: 0.08543557 
Confidence interval:
     2.5%     97.5% 
0.0654849 0.1071792 

11 Question #37a-f Factors contributing to WLR

11.1 37a Changes in Workout Routine

  • For each cell in the table, please provide the n size and the % of respondents

  Somewhat responsible Not at all responsible       Very responsible 
                   729                   1502                    130 
                  <NA> 
                  1787 
                        status
change                   pre-menopause peri-menopause post-menopause
  Somewhat responsible              69            282            378
  Not at all responsible           132            693            677
  Very responsible                  11             57             62
                        status
change                   pre-menopause peri-menopause post-menopause
  Somewhat responsible           0.325          0.273          0.338
  Not at all responsible         0.623          0.672          0.606
  Very responsible               0.052          0.055          0.056

11.2 37b Sleep Depravation


Not at all responsible   Somewhat responsible       Very responsible 
                   796                   1101                    464 
                  <NA> 
                  1787 
                        status
sleep                    pre-menopause peri-menopause post-menopause
  Not at all responsible            76            362            358
  Somewhat responsible             102            460            539
  Very responsible                  34            210            220
                        status
sleep                    pre-menopause peri-menopause post-menopause
  Not at all responsible         0.358          0.351          0.321
  Somewhat responsible           0.481          0.446          0.483
  Very responsible               0.160          0.203          0.197

11.3 37c Stress


  Somewhat responsible       Very responsible Not at all responsible 
                  1173                    570                    618 
                  <NA> 
                  1787 
                        status
stress                   pre-menopause peri-menopause post-menopause
  Somewhat responsible             103            527            543
  Very responsible                  67            254            249
  Not at all responsible            42            251            325
                        status
stress                   pre-menopause peri-menopause post-menopause
  Somewhat responsible           0.486          0.511          0.486
  Very responsible               0.316          0.246          0.223
  Not at all responsible         0.198          0.243          0.291

11.4 37d Fatigue or Lack of Energy


  Somewhat responsible Not at all responsible       Very responsible 
                  1130                    757                    474 
                  <NA> 
                  1787 
                        status
low                      pre-menopause peri-menopause post-menopause
  Somewhat responsible             100            504            526
  Not at all responsible            68            304            385
  Very responsible                  44            224            206
                        status
low                      pre-menopause peri-menopause post-menopause
  Somewhat responsible           0.472          0.488          0.471
  Not at all responsible         0.321          0.295          0.345
  Very responsible               0.208          0.217          0.184

11.5 37e Hormonal Changes


      Very responsible   Somewhat responsible Not at all responsible 
                  1475                    765                    121 
                  <NA> 
                  1787 
                        status
hormone                  pre-menopause peri-menopause post-menopause
  Very responsible                  69            717            689
  Somewhat responsible             130            289            346
  Not at all responsible            13             26             82
                        status
hormone                  pre-menopause peri-menopause post-menopause
  Very responsible               0.325          0.695          0.617
  Somewhat responsible           0.613          0.280          0.310
  Not at all responsible         0.061          0.025          0.073

11.6 37f Reduced Daily Activities/Movement


  Somewhat responsible Not at all responsible       Very responsible 
                   772                   1396                    193 
                  <NA> 
                  1787 
                        status
move                     pre-menopause peri-menopause post-menopause
  Somewhat responsible              72            297            403
  Not at all responsible           123            646            627
  Very responsible                  17             89             87
                        status
move                     pre-menopause peri-menopause post-menopause
  Somewhat responsible           0.340          0.288          0.361
  Not at all responsible         0.580          0.626          0.561
  Very responsible               0.080          0.086          0.078
stage Pre Pre Pre Peri Peri Peri Post Post Post
Response Not at all somewhat very Not at all somewhat very Not at all somewhat very
Item Workoutchanges 11 132 69 57 693 282 62 677 378
Ppn Workoutchanges 0.052 0.623 0.325 0.055 0.672 0.273 0.056 0.606 0.338
Item Sleep 34 102 76 210 460 362 220 539 358
Ppn Sleep 0.16 0.481 0.358 0.203 0.446 0.351 0.197 0.483 0.321
Item Stress 42 67 103 251 254 527 325 249 543
Ppn Stress 0.198 0.316 0.486 0.243 0.246 0.511 0.291 0.223 0.486
Item Fatigue 44 68 100 224 304 504 206 385 526
Ppn Fatigue 0.208 0.321 0.472 0.217 0.295 0.488 0.184 0.345 0.471
Item Hormonal changes 13 130 69 26 289 717 82 346 689
Ppn Hormonal changes 0.061 0.613 0.325 0.025 0.28 0.695 0.073 0.31 0.617
Item Reduced activites 17 123 72 89 646 297 87 627 403
Ppn Reduced activities 0.08 0.58 0.34 0.086 0.626 0.288 0.078 0.561 0.361
LS0tDQp0aXRsZTogIkZGTVMgTWFudXNjcmlwdCAyIFN0YXRpc3RpY2FsIEFuYWx5c2lzIg0KYXV0aG9yOiAiIg0KZGF0ZTogIiINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdG9jX2NvbGxhcHNlZDogeWVzDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgc21vb3RoX3Njcm9sbDogeWVzDQogICAgdGhlbWU6IGx1bWVuDQogIHBkZl9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICBmaWdfY2FwdGlvbjogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICBmaWdfd2lkdGg6IDMNCiAgICBmaWdfaGVpZ2h0OiAzDQogIHdvcmRfZG9jdW1lbnQ6IA0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX2NhcHRpb246IHllcw0KICAgIGtlZXBfbWQ6IHllcw0KZWRpdG9yX29wdGlvbnM6IA0KICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lDQotLS0NCg0KYGBge2NzcywgZWNobyA9IEZBTFNFfQ0KI1RPQzo6YmVmb3JlIHsNCiAgY29udGVudDogIlRhYmxlIG9mIENvbnRlbnRzIjsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtc2l6ZTogMS4yZW07DQogIGRpc3BsYXk6IGJsb2NrOw0KICBjb2xvcjogbmF2eTsNCiAgbWFyZ2luLWJvdHRvbTogMTBweDsNCn0NCg0KDQpkaXYjVE9DIGxpIHsgICAgIC8qIHRhYmxlIG9mIGNvbnRlbnQgICovDQogICAgbGlzdC1zdHlsZTp1cHBlci1yb21hbjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7DQp9DQoNCmgxLnRpdGxlIHsgICAgLyogbGV2ZWwgMSBoZWFkZXIgb2YgdGl0bGUgICovDQogIGZvbnQtc2l6ZTogMjJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGNvbG9yOiBEYXJrUmVkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCn0NCg0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgZm9udC1zaXplOiAxNXB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsNCiAgY29sb3I6IG5hdnk7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsNCiAgY29sb3I6IERhcmtCbHVlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDIwcHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogICAgY29sb3I6IGRhcmtyZWQ7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLw0KICAgIGZvbnQtc2l6ZTogMThweDsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQpoMyB7IC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogICAgZm9udC1zaXplOiAxNnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmg0IHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE0cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8NCi5oZWFkZXItc2VjdGlvbi1udW1iZXI6OmFmdGVyIHsNCiAgY29udGVudDogIi4iOw0KDQpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQ0KDQouaGlnaGxpZ2h0bWUgeyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgfQ0KDQpwIHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQ0KDQp9DQpgYGANCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9Rn0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGLCBjb21tZW50PU5BLCB3YXJuaW5nPUYsIHJlc3VsdHM9VCwgbWVzc2FnZT1GKQ0KDQpzZXR3ZCgiQzovVXNlcnMvNzVMUFlPVFQvT25lRHJpdmUgLSBXZXN0IENoZXN0ZXIgVW5pdmVyc2l0eSBvZiBQQS9GRk1TIikNCg0KbGlicmFyeShGU0EpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShzcGxpdHN0YWNrc2hhcGUpDQpsaWJyYXJ5KHN1bW1hcnl0b29scykNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoVklNKQ0KbGlicmFyeSh6b28pDQpsaWJyYXJ5KGp0b29scykNCmxpYnJhcnkoYnJvb20pDQpsaWJyYXJ5KHZjZCkNCmxpYnJhcnkodmlzZGF0KQ0KbGlicmFyeShza2ltcikNCmxpYnJhcnkoamFuaXRvcikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ21vZGVscykNCmxpYnJhcnkoZHVubi50ZXN0KQ0KbGlicmFyeShyc3RhdGl4KQ0KbGlicmFyeShEZXNjVG9vbHMpDQpsaWJyYXJ5KGVmZmVjdHNpemUpDQpsaWJyYXJ5KGNvbmZpbnRyKQ0KbGlicmFyeShjaGlzcXVhcmUpDQpsaWJyYXJ5KGZvcmNhdHMpDQpvcHRpb25zKHNjaXBlbj05OTkpDQoNCiN3cmFuZ2xpbmcNCg0KZmlyc3QuZGF0YT1yZWFkLmNzdigiRkZNUyBkZW1vZyB2YXJzLmNzdiIsIGhlYWRlcj1UKQ0KDQpmaXJzdC5kYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgZmlsdGVyKFdUS0c8MTgwKQ0KDQpmaXJzdC5kYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgbXV0YXRlKHN0YXR1cz1jYXNlX3doZW4oTUVOT1NUQVRVUz09MX4icHJlLW1lbm9wYXVzZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBNRU5PU1RBVFVTPT0yfiJwZXJpLW1lbm9wYXVzZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBNRU5PU1RBVFVTPT0zfiJwb3N0LW1lbm9wYXVzZSIsIFRSVUV+TkEpKQ0KDQpmaXJzdC5kYXRhJHN0YXR1cz1mY3RfaW5vcmRlcihmaXJzdC5kYXRhJHN0YXR1cykNCmBgYA0KDQojIFF1ZXN0aW9uICMxMCBCb2R5IFdlaWdodCBieSBzdGF0dXMNCg0KLSAgIE4gc2l6ZSwgJSBvZiByZXNwb25kZW50cywgbWVhbiwgU0QsIG1lZGlhbiBmb3IgYWxsIHJlc3BvbmRlbnRzIGFuZCBhY3Jvc3MgYWxsIG1lbm9wYXVzYWwgc3RhZ2UuXA0KLSAgIFBsZWFzZSBjb25kdWN0IGFuIGFuYWx5c2lzIG9mIHN0YXRpc3RpY2FsIHNpZ25pZmljYW5jZSBiZXR3ZWVuIHRoZSB0aHJlZSBncm91cHMgKFByZTsgUGVyaTsgUG9zdCkgZm9yIHJlcG9ydGVkIHZhbHVlIG9mIEJvZHkgV2VpZ2h0Lg0KLSAgIEJldHdlZW4tR3JvdXAgQ29tcGFyaXNvbjogSXMgdGhlcmUgYSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gdGhlIEJvZHkgV2VpZ2h0IHZhbHVlIHJlcG9ydGVkIGJldHdlZW4gd29tZW4gd2hvIGFyZSBwcmVtZW5vcGF1c2FsLCBwZXJpbWVub3BhdXNhbCwgYW5kIHBvc3RtZW5vcGF1c2FsPw0KDQoqVGhlIHdlaWdodCB2YXJpYWJsZSB3YXMgc2tld2VkIGZvciBhbGwgdGhyZWUgZ3JvdXBzIChTaGFwaXJvLVdpbGsgcC12YWx1ZXMgYWxsIGxlc3MgdGhhbiAuMDAwMSkuIEFzIGEgcmVzdWx0LCBhIEtydXNrYWwtV2FsbGlzIHRlc3Qgd2FzIHVzZWQgdG8gZmluZCBkaWZmZXJlbmNlcyBhbW9uZyB0aGUgbWVub3BhdXNhbCBzdGF0dXMgZ3JvdXBzIGZvciB0aGUgdmFyaWFibGUgV1RLRy4gQSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGRpZmZlcmVuY2Ugd2FzIGZvdW5kIGFtb25nIHRoZSBzdGF0dXMgZ3JvdXBzLCBYMihkZj0yKT0xNy45MDgsIHA9LjAwMDEzLiBUaGUgRHVubiB0ZXN0IHdhcyB1c2VkIHRvIGV2YWx1YXRlIHBhaXJ3aXNlIGNvbXBhcmlzb25zLCBhbmQgb25seSBwZXJpbWVub3BhdXNlIGFuZCBwb3N0bWVub3BhdXNlIHdlcmUgZm91bmQgdG8gYmUgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCAoYWRqdXN0ZWQgcD0uMDAwMDcpLioNCg0KYGBge3IgUTEwLCBpbmNsdWRlPVR9DQoNCnN1bW1hcnlfb3ZlcmFsbCA9IGZpcnN0LmRhdGEgJT4lDQogIHN1bW1hcmlzZShtZWFuPW1lYW4oV1RLRyksIHNkPXNkKFdUS0cpLCBtZWRpYW49bWVkaWFuKFdUS0cpLCBuPW4oKSkNCg0Kc3VtbWFyeV9ieXN0YXR1cyA9IGZpcnN0LmRhdGEgJT4lDQogIGdyb3VwX2J5KHN0YXR1cykgJT4lDQogIHN1bW1hcmlzZShtZWFuPW1lYW4oV1RLRyksIHNkPXNkKFdUS0cpLCBtZWRpYW49bWVkaWFuKFdUS0cpLCBuPW4oKSkNCg0Ka2FibGUoc3VtbWFyeV9vdmVyYWxsLCBmb3JtYXQ9Imh0bWwiLCBjYXB0aW9uPSJEZXNjcmlwdGl2ZSBzdGF0c2l0Y3Mgb2YgV1RLRyIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRikNCg0Ka2FibGUoc3VtbWFyeV9ieXN0YXR1cywgZm9ybWF0PSJodG1sIiwgY2FwdGlvbj0iRGVzY3JpcHRpdmUgc3RhdHNpdGNzIG9mIFdUS0cgYnkgc3RhdHVzIikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIGZ1bGxfd2lkdGggPSBGKQ0KDQojbW9kZWw9bG0oV1RLR35zdGF0dXMsIGRhdGE9Zmlyc3QuZGF0YSkNCiAjc3VtbWFyeShtb2RlbCkNCiANCiNlcHNpbG9uX3NxdWFyZWQobW9kZWwpDQogDQpyZXN1bHRzIDwtIGZpcnN0LmRhdGEgJT4lDQogIGdyb3VwX2J5KHN0YXR1cykgJT4lDQogIHN1bW1hcmlzZShzaGFwaXJvX3Rlc3QgPSBsaXN0KHNoYXBpcm8udGVzdChXVEtHKSkpICU+JQ0KICBtdXRhdGUoc3RhdGlzdGljID0gc2FwcGx5KHNoYXBpcm9fdGVzdCwgZnVuY3Rpb24oeCkgeCRzdGF0aXN0aWMpLA0KICAgICAgICAgcF92YWx1ZSA9IHNhcHBseShzaGFwaXJvX3Rlc3QsIGZ1bmN0aW9uKHgpIHgkcC52YWx1ZSkpICU+JQ0KICBzZWxlY3Qoc3RhdHVzLCBzdGF0aXN0aWMsIHBfdmFsdWUpDQoNCg0Ka2FibGUocmVzdWx0cywgZm9ybWF0PSJodG1sIiwgY2FwdGlvbj0iTm9ybWFsaXR5IGFzc2Vzc21lbnQgYnkgc3RhdHVzIikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIGZ1bGxfd2lkdGggPSBGKQ0KDQpnZ3Bsb3QoZmlyc3QuZGF0YSwgYWVzKHggPSBXVEtHKSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgpICsNCiAgZmFjZXRfd3JhcCh+IHN0YXR1cykgKyANCiAgbGFicyh0aXRsZSA9ICJXZWlnaHQgYnkgbWVub3BhdXNlIHN0YXR1cyIsDQogICAgICAgeCA9ICJraWxncmFtcyIsDQogICAgICAgeSA9ICJGcmVxdWVuY3kiKQ0KDQprcnVza2FsLnRlc3QoV1RLR35zdGF0dXMsIGRhdGE9Zmlyc3QuZGF0YSkNCmR1bm5UZXN0KFdUS0d+c3RhdHVzLCBkYXRhPWZpcnN0LmRhdGEpDQoNCmBgYA0KDQojIFF1ZXN0aW9uICMyMCBBcmUgeW91IHRha2luZyBhbnkgcHJlc2NyaXB0aW9uIGFudGktZGVwcmVzc2FudCBtZWRpY2F0aW9ucz8NCg0KLSAgIEFuYWx5c2lzIG9mIHN0YXRpc3RpY2FsIHNpZ25pZmljYW5jZSBiZXR3ZWVuIHRoZSB0aHJlZSBncm91cHMgKFByZTsgUGVyaTsgUG9zdCkgZm9yIHRoZSBhbnN3ZXIgJ1llcycuDQotICAgQmV0d2Vlbi1Hcm91cCBDb21wYXJpc29uOiBJcyB0aGVyZSBhIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiB0aGUgbnVtYmVyIG9mICdZZXMnIHJlc3BvbnNlcyBiZXR3ZWVuIHdvbWVuIHdobyBhcmUgcHJlbWVub3BhdXNhbCwgcGVyaW1lbm9wYXVzYWwsIGFuZCBwb3N0bWVub3BhdXNhbD8NCg0KKkEgQ2hpLXNxdWFyZSB0ZXN0IG9mIGluZGVwZW5kZW5jZSB3YXMgY29uZHVjdGVkIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYW50aWRlcHJlc3NhbnQgdXNlIGFuZCBtZW5vcGF1c2FsIHN0YXR1cy4gTm8gc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBhc3NvY2lhdGlvbiB3YXMgZm91bmQsIFgyKGRmPTIpPTEuMzI4LCBwPS41MTQ4LiBDcmFtZXIncyBWIHdhcyB0cml2aWFsIGF0IFY9MC4wMTgsIDk1JSBDSSgwLjAwLCAwLjA0OSkuKg0KDQpgYGB7ciBRMjAsIGluY2x1ZGU9VH0NCg0KZmlyc3QuZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogICAgbXV0YXRlKGRlcHJlc3Npb249Y2FzZV93aGVuKEFOVERFUD09MX4iWWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQU5UREVQPT0yfiJObyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBBTlRERVA9PTN+IkkgZG9uJ3Qga25vdyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIEFOVERFUD09NH4iUHJlZmVyIE5vdCB0byBBbnN3ZXIiLCBUUlVFfk5BKSkNCmZpcnN0LmRhdGEkZGVwcmVzc2lvbiA8LSBmYWN0b3IoZmlyc3QuZGF0YSRkZXByZXNzaW9uLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiWWVzIiwgIk5vIiwgIkkgZG9uJ3Qga25vdyIsICJQcmVmZXIgTm90IHRvIEFuc3dlciIpKQ0KdGFibGUoZmlyc3QuZGF0YSRkZXByZXNzaW9uLCB1c2VOQSA9ICJhbHdheXMiKQ0KDQojUmVtb3ZlIGV2ZXJ5b25lIGV4Y2VwdCB5ZXMgb3Igbm8gYW5kIG1pc3NpbmcsIG9ubHkgOA0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIGZpbHRlcihBTlRERVA8MykNCg0KZGF0YSA9IGRhdGEgJT4lDQogIG11dGF0ZShkZXA9Y2FzZV93aGVuKEFOVERFUD09MX4iWWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQU5UREVQPT0yfiJObyIsIFRSVUV+TkEpKQ0KZGF0YSRkZXAgPC0gZmFjdG9yKGRhdGEkZGVwLCBsZXZlbHMgPSBjKCJZZXMiLCAiTm8iKSkNCg0KeD14dGFicyh+ZGVwK3N0YXR1cywgZGF0YT1kYXRhKQ0KeA0KcHJvcC50YWJsZSh4LDIpDQpyZXN1bHQ9Y2hpc3EudGVzdCh4KQ0KcmVzdWx0DQpyZXN1bHQkZXhwZWN0ZWQNCiNwcmUNCnByb3AudGVzdCg0OCwgNDgrNDQ4KQ0KI3BlcmkNCnByb3AudGVzdCgyMDksIDIwOSsxNjA3KQ0KI3Bvc3QNCnByb3AudGVzdCgyMDUsIDIwNSsxNjIzKQ0KDQpiPWRhdGEuZnJhbWUoDQpudW09Yyg0OCwgMjA5LCAyMDUpLA0KZGVuPWMoNDgrNDQ4LCAyMDkrMTYwNywgMjA1KzE2MjMpLA0Kc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpDQopDQoNCnBhaXJ3aXNlLnByb3AudGVzdCh4PWIkbnVtLCBuPWIkZGVuLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIpDQoNCmNpX2NyYW1lcnN2KHJlc3VsdCkNCg0KDQpkZiA8LSBkYXRhLmZyYW1lKA0KICB4ID0gYygiUHJlIiwgIlBlcmkiLCAiUG9zdCIpLA0KICB5ID0gYyguMDk3LCAuMTE1LCAuMTEyKSwNCiAgeW1pbiA9IGMoLjA3MywgLjEwMSwgLjA5OCksDQogIHltYXggPSBjKC4xMjcsIC4xMzEsIC4xMjgpDQopDQoNCmRmJHg9ZmN0X2lub3JkZXIoZGYkeCkNCg0KI2dncGxvdChkZiwgYWVzKHggPSB4LCB5ID0geSkpICsNCiAjIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwgZmlsbCA9ICJibHVlIikgKw0KICMgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHltaW4sIHltYXggPSB5bWF4KSwNCiAjICAgICAgICAgICAgICAgd2lkdGggPSAwLjEwLCAgIyBXaWR0aCBvZiB0aGUgZXJyb3IgYmFyIGNhcHMNCiMgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSkpICsNCiMgIHNjYWxlX2ZpbGxfZ3JleSgpICsNCiMgIGxhYnModGl0bGUgPSAiWWVzIHRvIEFudGlkZXByZXNzYW50IFVzZSB3Lzk1JSBDSSIsDQogIyAgICAgIHggPSAiTWVub3BhdXNhbCBTdGF0dXMiLA0KICMgICAgICB5ID0gIlByb3BvcnRpb24iKSArDQogIyB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQojIFF1ZXN0aW9uICMyMSBBcmUgeW91IHRha2luZyBhbnkgcHJlc2NyaXB0aW9uIHNsZWVwIG1lZGljYXRpb25zPw0KDQotICAgQW5hbHlzaXMgb2Ygc3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlIGJldHdlZW4gdGhlIHRocmVlIGdyb3VwcyAoUHJlOyBQZXJpOyBQb3N0KSBmb3IgdGhlIGFuc3dlciAnWWVzJy4NCi0gICBCZXR3ZWVuLUdyb3VwIENvbXBhcmlzb246IElzIHRoZXJlIGEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIHRoZSBudW1iZXIgb2YgJ1llcycgcmVzcG9uc2VzIGJldHdlZW4gd29tZW4gd2hvIGFyZSBwcmVtZW5vcGF1c2FsLCBwZXJpbWVub3BhdXNhbCwgYW5kIHBvc3RtZW5vcGF1c2FsPw0KDQoqQSBDaGktc3F1YXJlIHRlc3Qgb2YgaW5kZXBlbmRlbmNlIHdhcyBjb25kdWN0ZWQgdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbmQgbWVub3BhdXNhbCBzdGF0dXMuIEEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBhc3NvY2lhdGlvbiB3YXMgZm91bmQsIFgyKGRmPTIpPTYuMzA1NSwgcD0uMDQyNy4gQ3JhbWVyJ3MgViB3YXMgdHJpdmlhbCBhdCBWPTAuMDM5LCA5NSUgQ0koMC4wMCwgMC4wNzEpLioNCg0KYGBge3IgUTIxLCBpbmNsdWRlPVR9DQoNCmZpcnN0LmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUoc2xwPWNhc2Vfd2hlbihTTEVFUE1FRD09MX4iWWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgU0xFRVBNRUQ9PTJ+Ik5vIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIFNMRUVQTUVEPT0zfiJJIGRvbid0IGtub3ciLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgU0xFRVBNRUQ9PTR+IlByZWZlciBub3QgdG8gYW5zd2VyIiwgVFJVRX5OQSkpDQpmaXJzdC5kYXRhJHNscCA8LSBmYWN0b3IoZmlyc3QuZGF0YSRzbHAsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJZZXMiLCAiTm8iLCAiSSBkb24ndCBrbm93IiwgIlByZWZlciBOb3QgdG8gQW5zd2VyIikpDQp0YWJsZShmaXJzdC5kYXRhJHNscCwgdXNlTkEgPSAiYWx3YXlzIikNCiNSZW1vdmUgZXZlcnlvbmUgZXhjZXB0IHllcyBvciBubyBhbmQgbWlzc2luZywgb25seSA2DQpkYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgZmlsdGVyKFNMRUVQTUVEPDMpDQoNCmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUoc2xlZXA9Y2FzZV93aGVuKFNMRUVQTUVEPT0xfiJZZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBTTEVFUE1FRD09Mn4iTm8iLCBUUlVFfk5BKSkNCg0KZGF0YSRzbGVlcCA8LSBmYWN0b3IoZGF0YSRzbGVlcCwgbGV2ZWxzID0gYygiWWVzIiwgIk5vIikpDQoNCng9eHRhYnMofnNsZWVwK3N0YXR1cywgZGF0YT1kYXRhKQ0KeA0KcHJvcC50YWJsZSh4LDIpDQpyZXN1bHQ9Y2hpc3EudGVzdCh4KQ0KcmVzdWx0DQpyZXN1bHQkZXhwZWN0ZWQNCiNwcmUNCnByb3AudGVzdCgxMiwgMTIrNDgzKQ0KI3BlcmkNCnByb3AudGVzdCg4OCwgODgrMTczMykNCiNwb3N0DQpwcm9wLnRlc3QoOTIsIDkyKzE3MzQpDQogICAgICAgICAgDQpiPWRhdGEuZnJhbWUoDQpudW09YygxMiwgODgsIDkyKSwNCmRlbj1jKDEyKzQ4MywgODgrMTczMywgOTIrMTczNCksDQpzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IikNCikNCg0KcGFpcndpc2UucHJvcC50ZXN0KHg9YiRudW0sIG49YiRkZW4sIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIikNCg0KY2lfY3JhbWVyc3YocmVzdWx0KQ0KDQpkZiA8LSBkYXRhLmZyYW1lKA0KICB4ID0gYygiUHJlIiwgIlBlcmkiLCAiUG9zdCIpLA0KICB5ID0gYyguMDI0LCAuMDQ4LCAuMDUwKSwNCiAgeW1pbiA9IGMoLjAxMywgLjAzOSwgLjA0MSksDQogIHltYXggPSBjKC4wNDMsIC4wNTksIC4wNjIpDQopDQoNCmRmJHg9ZmN0X2lub3JkZXIoZGYkeCkNCg0KI2dncGxvdChkZiwgYWVzKHggPSB4LCB5ID0geSkpICsNCiMgIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwgZmlsbCA9ICJibHVlIikgKw0KIyAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHltaW4sIHltYXggPSB5bWF4KSwNCiMgICAgICAgICAgICAgICAgd2lkdGggPSAwLjEwLCAgIyBXaWR0aCBvZiB0aGUgZXJyb3IgYmFyIGNhcHMNCiMgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSkpICsNCiMgIHNjYWxlX2ZpbGxfZ3JleSgpICsNCiMgIGxhYnModGl0bGUgPSAiWWVzIHRvIFNsZWVwIE1lZHMgdy85NSUgQ0kiLA0KIyAgICAgICB4ID0gIk1lbm9wYXVzYWwgU3RhdHVzIiwNCiMgICAgICAgeSA9ICJQcm9wb3J0aW9uIikgKw0KIyAgdGhlbWVfY2xhc3NpYygpDQpgYGANCg0KIyBRdWVzdGlvbiAjMjIgQXJlIHlvdSB0YWtpbmcgYW55IHByZXNjcmlwdGlvbiB3ZWlnaHQgbG9zcyBtZWRpY2F0aW9ucz8NCg0KLSAgIFBsZWFzZSBjb25kdWN0IGFuIGFuYWx5c2lzIG9mIHN0YXRpc3RpY2FsIHNpZ25pZmljYW5jZSBiZXR3ZWVuIHRoZSB0aHJlZSBncm91cHMgKFByZTsgUGVyaTsgUG9zdCkgZm9yIHRoZSBhbnN3ZXIgJ1llcycuDQotICAgQmV0d2Vlbi1Hcm91cCBDb21wYXJpc29uOiBJcyB0aGVyZSBhIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiB0aGUgbnVtYmVyIG9mICdZZXMnIHJlc3BvbnNlcyBiZXR3ZWVuIHdvbWVuIHdobyBhcmUgcHJlbWVub3BhdXNhbCwgcGVyaW1lbm9wYXVzYWwsIGFuZCBwb3N0bWVub3BhdXNhbD8NCg0KKkEgQ2hpLXNxdWFyZSB0ZXN0IG9mIGluZGVwZW5kZW5jZSB3YXMgY29uZHVjdGVkIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGFraW5nIHdlaWdodCBsb3NzIG1lZGljYXRpb24gYW5kIG1lbm9wYXVzYWwgc3RhdHVzLiBObyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGFzc29jaWF0aW9uIHdhcyBmb3VuZCwgWDIoZGY9Mik9MC4zMTYsIHA9Ljg1MzkuIENyYW1lcidzIFYgd2FzIHRyaXZpYWwgYXQgVj0wLjAxLCA5NSUgQ0koMC4wMCwgMC4wMzcpLioNCg0KYGBge3IgUTIyLCBpbmNsdWRlPVR9DQoNCmZpcnN0LmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUod2xtPWNhc2Vfd2hlbihXVExPU1NNRUQ9PTF+IlllcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIFdUTE9TU01FRD09Mn4iTm8iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgV1RMT1NTTUVEPT0zfiJJIGRvbid0IGtub3ciLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgV1RMT1NTTUVEPT00fiJQcmVmZXIgbm90IHRvIGFuc3dlciIsIFRSVUV+TkEpKQ0KZmlyc3QuZGF0YSR3bG0gPC0gZmFjdG9yKGZpcnN0LmRhdGEkd2xtLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiWWVzIiwgIk5vIiwgIkkgZG9uJ3Qga25vdyIsICJQcmVmZXIgTm90IHRvIEFuc3dlciIpKQ0KdGFibGUoZmlyc3QuZGF0YSR3bG0sIHVzZU5BID0gImFsd2F5cyIpDQoNCiNSZW1vdmUgZXZlcnlvbmUgZXhjZXB0IHllcyBvciBubyBhbmQgbWlzc2luZywgb25seSA1DQpkYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgZmlsdGVyKFdUTE9TU01FRDwzKQ0KDQpkYXRhID0gZGF0YSAlPiUNCiAgbXV0YXRlKFdMTUVEPWNhc2Vfd2hlbihXVExPU1NNRUQ9PTF+IlllcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIFdUTE9TU01FRD09Mn4iTm8iLCBUUlVFfk5BKSkNCg0KZGF0YSRXTE1FRCA8LSBmYWN0b3IoZGF0YSRXTE1FRCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlllcyIsICJObyIpKQ0KeD14dGFicyh+V0xNRUQrc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQpwcm9wLnRhYmxlKHgsMikNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQpyZXN1bHQNCnJlc3VsdCRleHBlY3RlZA0KI3ByZQ0KcHJvcC50ZXN0KDIzLCAyMys0NzEpDQojcGVyaQ0KcHJvcC50ZXN0KDkzLCA5MysxNzI3KQ0KI3Bvc3QNCnByb3AudGVzdCg4NywgODcrMTc0MikNCiAgICAgICAgICANCmI9ZGF0YS5mcmFtZSgNCm51bT1jKDIzLCA5MywgODcpLA0KZGVuPWMoMjMrNDcxLCA5MysxNzI3LCA4NysxNzQyKSwNCnN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKQ0KKQ0KDQpwYWlyd2lzZS5wcm9wLnRlc3QoeD1iJG51bSwgbj1iJGRlbiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iKQ0KDQpjaV9jcmFtZXJzdihyZXN1bHQpDQoNCmRmIDwtIGRhdGEuZnJhbWUoDQogIHggPSBjKCJQcmUiLCAiUGVyaSIsICJQb3N0IiksDQogIHkgPSBjKC4wNDcsIC4wNTEsIC4wNDgpLA0KICB5bWluID0gYyguMDMwLCAuMDQyLCAuMDM4KSwNCiAgeW1heCA9IGMoLjA3MCwgLjA2MiwgLjA1OSkNCikNCg0KZGYkeD1mY3RfaW5vcmRlcihkZiR4KQ0KDQojZ2dwbG90KGRmLCBhZXMoeCA9IHgsIHkgPSB5KSkgKw0KIyAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLCBmaWxsID0gImJsdWUiKSArDQogIyBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0geW1pbiwgeW1heCA9IHltYXgpLA0KICAjICAgICAgICAgICAgICB3aWR0aCA9IDAuMTAsICAjIFdpZHRoIG9mIHRoZSBlcnJvciBiYXIgY2Fwcw0KICAgIyAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSkgKw0KICAjc2NhbGVfZmlsbF9ncmV5KCkgKw0KICAjbGFicyh0aXRsZSA9ICJZZXMgdG8gUHJlc2NyaXB0aW9uIFd0IExvc3MgTWVkcyB3LzUlIENJIiwNCiAgICMgICAgeCA9ICJNZW5vcGF1c2FsIFN0YXR1cyIsDQogICAgIyAgIHkgPSAiUHJvcG9ydGlvbiIpICsNCiMgIHRoZW1lX2NsYXNzaWMoKQ0KYGBgDQoNCiMgUXVlc3Rpb24gIzMxIEJvZHkgZmF0IHBlcmNlbnRhZ2UgYnkgc3RhdHVzDQoNCi0gICBBbmFseXNpcyBvZiBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2UgYmV0d2VlbiB0aGUgdGhyZWUgZ3JvdXBzIChQcmU7IFBlcmk7IFBvc3QpIGZvciBzZWxmLXJlcG9ydGVkIHZhbHVlIG9mIEJvZHkgRmF0ICUuDQoNCi1CZXR3ZWVuLUdyb3VwIENvbXBhcmlzb246IElzIHRoZXJlIGEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIHRoZSBCb2R5IEZhdCAlIHZhbHVlIHJlcG9ydGVkIGJldHdlZW4gd29tZW4gd2hvIGFyZSBwcmVtZW5vcGF1c2FsLCBwZXJpbWVub3BhdXNhbCwgYW5kIHBvc3RtZW5vcGF1c2FsPw0KDQoqVGhlIGJvZHkgZmF0IHBlcmNlbnRhZ2UgdmFyaWFibGUgd2FzIHNrZXdlZCBmb3IgYWxsIHRocmVlIGdyb3VwcyAoU2hhcGlyby1XaWxrIHAtdmFsdWVzIGFsbCBsZXNzIHRoYW4gLjAwMDEpLiBBIEtydXNrYWwtV2FsbGlzIHRlc3Qgd2FzIHVzZWQgdG8gZmluZCBkaWZmZXJlbmNlcyBhbW9uZyB0aGUgbWVub3BhdXNhbCBzdGF0dXMgZ3JvdXBzIGZvciB0aGUgdmFyaWFibGUgV1RLRy4gQSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGRpZmZlcmVuY2Ugd2FzIGZvdW5kIGFtb25nIHRoZSBzdGF0dXMgZ3JvdXBzLCBYMihkZj0yKT0xOC4xNjcsIHA9LjAwMDExLiBUaGUgRHVubiB0ZXN0IHdhcyB1c2VkIHRvIGV2YWx1YXRlIHBhaXJ3aXNlIGNvbXBhcmlzb25zOyBwZXJpbWVub3BhdXNlIGFuZCBwb3N0bWVub3BhdXNlIHdlcmUgZm91bmQgdG8gYmUgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudGx5IGRpZmZlcmVudCAoYWRqdXN0ZWQgcD0uMDAxMiksIGFzIHdlcmUgcHJlbWVub3BhdXNlIGFuZCBwb3N0bWVub3BhdXNlIChhZGp1c3RlZCBwPTAwMTQpLioNCg0KYGBge3IgUTMxfQ0KDQojZmlsdGVyIHZhbHVlcyBvZiAxLCAyLCBhbmQgOTkNCmRhdGE9Zmlyc3QuZGF0YSAlPiUNCiAgZmlsdGVyKEJGUENUPjIgJiBCRlBDVDw5OSkNCg0KDQojbW9kZWw9bG0oQkZQQ1R+c3RhdHVzLCBkYXRhPWRhdGEpDQojIHN1bW1hcnkobW9kZWwpDQoNCiANCmdncGxvdChkYXRhLCBhZXMoeCA9IEJGUENUKSkgKw0KICBnZW9tX2hpc3RvZ3JhbSgpICsNCiAgZmFjZXRfd3JhcCh+IHN0YXR1cykgKyANCiAgbGFicyh0aXRsZSA9ICJXZWlnaHQgYnkgbWVub3BhdXNlIHN0YXR1cyIsDQogICAgICAgeCA9ICJraWxncmFtcyIsDQogICAgICAgeSA9ICJGcmVxdWVuY3kiKQ0KDQpyZXN1bHRzIDwtIGRhdGEgJT4lDQogIGdyb3VwX2J5KHN0YXR1cykgJT4lDQogIHN1bW1hcmlzZShzaGFwaXJvX3Rlc3QgPSBsaXN0KHNoYXBpcm8udGVzdChCRlBDVCkpKSAlPiUNCiAgbXV0YXRlKHN0YXRpc3RpYyA9IHNhcHBseShzaGFwaXJvX3Rlc3QsIGZ1bmN0aW9uKHgpIHgkc3RhdGlzdGljKSwNCiAgICAgICAgIHBfdmFsdWUgPSBzYXBwbHkoc2hhcGlyb190ZXN0LCBmdW5jdGlvbih4KSB4JHAudmFsdWUpKSAlPiUNCiAgc2VsZWN0KHN0YXR1cywgc3RhdGlzdGljLCBwX3ZhbHVlKQ0KDQprYWJsZShyZXN1bHRzLCBmb3JtYXQ9Imh0bWwiLCBjYXB0aW9uPSJOb3JtYWxpdHkgYXNzZXNzbWVudCBieSBzdGF0dXMiKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYpDQoNCmtydXNrYWwudGVzdChCRlBDVH5zdGF0dXMsIGRhdGE9ZGF0YSkNCmR1bm5UZXN0KEJGUENUfnN0YXR1cywgZGF0YT1kYXRhKQ0KDQoNCmBgYA0KDQojIFF1ZXN0aW9uICMzMiBNZWFzdXJlIGZyZXF1ZW5jaWVzIG9mIGJvZHkgY29tcG9zaXRpb24gbWVhc3VyZW1lbnQgdG9vbHMuDQoNCi0gICBQbGVhc2UgcHJvdmlkZSBOIHNpemUgYW5kICUgb2YgcmVzcG9uZGVudHMgZm9yIGVhY2ggYm9keSBjb21wb3NpdGlvbiBtZWFzdXJlbWVudCB0b29sDQotICAgVG90YWwgdmFsdWVzIHNob3VsZCBhZGQgdXAgdG8gMTAwJQ0KDQpgYGB7ciBRMzIsIGluY2x1ZGU9VH0NCg0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShpbnN0PWNhc2Vfd2hlbihCRklOU1RSPT0xfiJERVhBIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJGSU5TVFI9PTJ+IkJvZFBvZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBCRklOU1RSPT0zfiJTa2luZm9sZHMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJGSU5TVFI9PTR+IlVsdHJhc291bmQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgQkZJTlNUUj09NX4iSG9tZSBiYXRocm9vbSBzY2FsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBCRklOU1RSPT02fiJIaWdoLXF1YWxpdHkgQklBIGRldmljZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgQkZJTlNUUj09N34iT3RoZXIiLCBUUlVFfk5BKSkNCg0KZGF0YSRpbnN0PWZjdF9pbm9yZGVyKGRhdGEkaW5zdCkNCng9dGFibGUoZGF0YSRpbnN0LCB1c2VOQSA9ICJhbHdheXMiKQ0KeA0Kcm91bmQocHJvcC50YWJsZSh0YWJsZShkYXRhJGluc3QsIHVzZU5BID0gImFsd2F5cyIpKSwgMykNCg0KYGBgDQoNCiMgUXVlc3Rpb24gIzMzIEJvZHkgQ29tcG9zaXRpb24gU2F0aXNmYWN0aW9uDQoNCi0gICBQbGVhc2UgcHJvdmlkZSBOIHNpemUsICUgb2YgcmVzcG9uZGVudHMgd2hvIHJlcGxpZWQgeWVzIG9yIG5vIGZvciBlYWNoIG1lbm9wYXVzZSBzdGFnZS4NCi0gICBQbGVhc2UgY29uZHVjdCBhbiBhbmFseXNpcyBvZiBzdGF0aXN0aWNhbCBzaWduaWZpY2FuY2UgYmV0d2VlbiB0aGUgdGhyZWUgZ3JvdXBzIChQcmU7IFBlcmk7IFBvc3QpIGZvciBCb2R5IENvbXBvc2l0aW9uIFNhdGlzZmFjdGlvbiAoJ05vJyBSZXNwb25zZXMpDQotICAgQmV0d2Vlbi1Hcm91cCBDb21wYXJpc29uOiBJcyB0aGVyZSBhIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiB0aGUgbnVtYmVyIG9mICdObycgcmVzcG9uc2VzIGJldHdlZW4gd29tZW4gd2hvIGFyZSBwcmVtZW5vcGF1c2FsLCBwZXJpbWVub3BhdXNhbCwgYW5kIHBvc3RtZW5vcGF1c2FsPw0KDQoqQSBDaGktc3F1YXJlIHRlc3Qgb2YgaW5kZXBlbmRlbmNlIHdhcyBjb25kdWN0ZWQgdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBCQyBzYXRpc2ZhY3Rpb24gYW5kIG1lbm9wYXVzYWwgc3RhdHVzLiBBIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24gd2FzIGZvdW5kLCBYMihkZj0yKT00MC44LCBwPS4wMDAwMDAwMDEuIENyYW1lcidzIFYgd2FzIHNtYWxsIGF0IFY9MC4xLCA5NSUgQ0koMC4wNywgMC4xMykuKg0KDQpgYGB7ciBRMzMsIGluY2x1ZGU9VH0NCg0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShiY3NhdGlzPWNhc2Vfd2hlbihCQ1NBVElTPT0xfiJZZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJDU0FUSVM9PTJ+Ik5vIiwgVFJVRX5OQSkpDQoNCmRhdGEkYmNzYXRpcyA8LSBmYWN0b3IoZGF0YSRiY3NhdGlzLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiWWVzIiwgIk5vIikpDQp0YWJsZShkYXRhJGJjc2F0aXMsIHVzZU5BID0gImFsd2F5cyIpDQp4PXh0YWJzKH5iY3NhdGlzK3N0YXR1cywgZGF0YT1kYXRhKQ0KeA0KcHJvcC50YWJsZSh4LDIpDQpyZXN1bHQ9Y2hpc3EudGVzdCh4KQ0KcmVzdWx0DQpyZXN1bHQkZXhwZWN0ZWQNCiNwcmUNCnByb3AudGVzdCgzMDQsIDMwNCsxOTIpDQojcGVyaQ0KcHJvcC50ZXN0KDEzMDIsIDEzMDIrNTIxKQ0KI3Bvc3QNCnByb3AudGVzdCgxMzg0LCAxMzg0KzQ0NSkNCiAgICAgICAgICANCmI9ZGF0YS5mcmFtZSgNCm51bT1jKDMwNCwgMTMwMiwgMTM4NCksDQpkZW49YygzMDQrMTkyLCAxMzAyKzUyMSwgMTM4NCs0NDUpLA0Kc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpDQopDQoNCnBhaXJ3aXNlLnByb3AudGVzdCh4PWIkbnVtLCBuPWIkZGVuLCBwLmFkanVzdC5tZXRob2QgPSAiaG9sbSIpDQoNCmNpX2NyYW1lcnN2KHJlc3VsdCkNCiMgQ3JlYXRlIGEgc2FtcGxlIGRhdGEgZnJhbWUgDQojIEVuc3VyZSB5b3VyIGRhdGEgZnJhbWUgaGFzIGNvbHVtbnMgZm9yIHRoZSB4LWF4aXMgdmFyaWFibGUsIHRoZSBncm91cGluZyB2YXJpYWJsZSwgDQojIHRoZSBtZWFuIHZhbHVlLCBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbi9lcnJvci4NCmRmIDwtIGRhdGEuZnJhbWUoDQogIHggPSBjKCJQcmUiLCAiUGVyaSIsICJQb3N0IiksDQogIHkgPSBjKC42MTMsIC43MTQsIC43NTcpLA0KICB5bWluID0gYyguNTY4LCAuNjkzLCAuNzM2KSwNCiAgeW1heCA9IGMoLjY1NiwgLjczNSwgLjc3NikNCikNCg0KZGYkeD1mY3RfaW5vcmRlcihkZiR4KQ0KDQojZ2dwbG90KGRmLCBhZXMoeCA9IHgsIHkgPSB5KSkgKw0KICMgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLCBmaWxsID0gImJsdWUiKSArDQogICNnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0geW1pbiwgeW1heCA9IHltYXgpLA0KICAgIyAgICAgICAgICAgICB3aWR0aCA9IDAuMTAsICAjIFdpZHRoIG9mIHRoZSBlcnJvciBiYXIgY2Fwcw0KICAgICMgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSkgKw0KIyAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiRGVwcmVzc2lvbiIgPSAiYmxhY2siLCAiTm9uLWRlcHJlc3Npb24iID0gImJsYWNrIikpKw0KIyAgc2NhbGVfZmlsbF9ncmV5KCkgKw0KICMgbGFicyh0aXRsZSA9ICJObyB0byBCb2R5IENvbXBvc2l0aW9uIFNhdGlzZmFjdGlvbiB3Lzk1JSBDSSIsDQogICMgICAgIHggPSAiTWVub3BhdXNhbCBTdGF0dXMiLA0KICAgIyAgICB5ID0gIlByb3BvcnRpb24iKSArDQojICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQojIFF1ZXN0aW9uICMzNCBQZXJjZWl2ZWQgUmVjZW50IEJvZHkgRmF0IEdhaW4NCg0KLSAgIFBsZWFzZSBwcm92aWRlIE4gc2l6ZSwgJSBvZiByZXNwb25kZW50cyB3aG8gcmVwbGllZCBZZXMnIG9yICdObycgb3IgIkkgZG8gbm90IGtub3ciDQotICAgUGxlYXNlIGNvbmR1Y3QgYW4gYW5hbHlzaXMgb2Ygc3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlIGJldHdlZW4gdGhlIHRocmVlIGdyb3VwcyAoUHJlOyBQZXJpOyBQb3N0KSBmb3IgcmVjZW50IGJvZHkgZmF0IGdhaW4NCi0gICBCZXR3ZWVuLUdyb3VwIENvbXBhcmlzb246IElzIHRoZXJlIGEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIHRoZSBudW1iZXIgb2YgJ1llcycgcmVzcG9uc2VzIGJldHdlZW4gd29tZW4gd2hvIGFyZSBwcmVtZW5vcGF1c2FsLCBwZXJpbWVub3BhdXNhbCwgYW5kIHBvc3RtZW5vcGF1c2FsPw0KDQoqQSBDaGktc3F1YXJlIHRlc3Qgb2YgaW5kZXBlbmRlbmNlIHdhcyBjb25kdWN0ZWQgdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwZXJjZWl2ZWQgd2VpZ2h0IGdhaW4gYW5kIG1lbm9wYXVzYWwgc3RhdHVzLiBBIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24gd2FzIGZvdW5kLCBYMihkZj00KT02MC45LCBwPS4wMDAwMDAwMDAwMDAwNi4gQ3JhbWVyJ3MgViB3YXMgc21hbGwgYXQgVj0wLjEyLCA5NSUgQ0koMC4wOSwgMC4xNSkuKg0KDQpgYGB7ciBRMzQsIGluY2x1ZGU9VH0NCg0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZSh3dGdhaW49Y2FzZV93aGVuKFdUR0FJTj09MX4iWWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgV1RHQUlOPT0yfiJObyIsIFRSVUV+TkEpKQ0KDQpkYXRhJHd0Z2FpbiA8LSBmYWN0b3IoZGF0YSR3dGdhaW4sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJZZXMiLCAiTm8iKSkNCnRhYmxlKGRhdGEkd3RnYWluKQ0KeD14dGFicyh+d3RnYWluK3N0YXR1cywgZGF0YT1kYXRhKQ0KeA0KcHJvcC50YWJsZSh4LDIpDQpyZXN1bHQ9Y2hpc3EudGVzdCh4KQ0KcmVzdWx0DQpyZXN1bHQkZXhwZWN0ZWQNCiNwcmUNCnByb3AudGVzdCgyODcsIDI4NysxOSsxOTApDQojcGVyaQ0KcHJvcC50ZXN0KDEzNTMsIDEzNTMrNTErNDE5KQ0KI3Bvc3QNCnByb3AudGVzdCgxMzcyLCAxMzcyKzQ3KzQxMCkNCiAgICAgICAgICANCmI9ZGF0YS5mcmFtZSgNCm51bT1jKDI4NywgMTM1MywgMTM3MiksDQpkZW49YygyODcrMTkrMTkwLDEzNTMrNTErNDE5LDEzNzIrNDcrNDEwKSwNCnN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKQ0KKQ0KDQpwYWlyd2lzZS5wcm9wLnRlc3QoeD1iJG51bSwgbj1iJGRlbiwgcC5hZGp1c3QubWV0aG9kID0gImhvbG0iKQ0KDQpjaV9jcmFtZXJzdihyZXN1bHQpDQoNCiMgQ3JlYXRlIGEgc2FtcGxlIGRhdGEgZnJhbWUgDQojIEVuc3VyZSB5b3VyIGRhdGEgZnJhbWUgaGFzIGNvbHVtbnMgZm9yIHRoZSB4LWF4aXMgdmFyaWFibGUsIHRoZSBncm91cGluZyB2YXJpYWJsZSwgDQojIHRoZSBtZWFuIHZhbHVlLCBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbi9lcnJvci4NCmRmIDwtIGRhdGEuZnJhbWUoDQogIHggPSBjKCJQcmUiLCAiUGVyaSIsICJQb3N0IiksDQogIHkgPSBjKC41NzksIC43NDIsIC43NTApLA0KICB5bWluID0gYyguNTM0LCAuNzIxLCAuNzMwKSwNCiAgeW1heCA9IGMoLjYyMiwgLjc2MiwgLjc3MCkNCikNCg0KZGYkeD1mY3RfaW5vcmRlcihkZiR4KQ0KDQojZ2dwbG90KGRmLCBhZXMoeCA9IHgsIHkgPSB5KSkgKw0KICMgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLCBmaWxsID0gImJsdWUiKSArDQogICNnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0geW1pbiwgeW1heCA9IHltYXgpLA0KICAgIyAgICAgICAgICAgICB3aWR0aCA9IDAuMTAsICAjIFdpZHRoIG9mIHRoZSBlcnJvciBiYXIgY2Fwcw0KICAgICMgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSkgKw0KIyAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiRGVwcmVzc2lvbiIgPSAiYmxhY2siLCAiTm9uLWRlcHJlc3Npb24iID0gImJsYWNrIikpKw0KICAjc2NhbGVfZmlsbF9ncmV5KCkgKw0KICAjbGFicyh0aXRsZSA9ICJZZXMgdG8gUGVyY2VpdmVkIFJlY2VuZXQgQm9keSBGYXQgR2FpbiB3Lzk1JSBDSSIsDQogICAjICAgIHggPSAiTWVub3BhdXNhbCBTdGF0dXMiLA0KICAgICMgICB5ID0gIlByb3BvcnRpb24iKSArDQogICN0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQojIFF1ZXN0aW9uICMzNWEtZyBGYWN0b3JzIENvbnRyaWJ1dGluZyB0byBCb2R5IEZhdCBHYWluDQoNCi0gICBGb3IgZWFjaCBjZWxsIGluIHRoZSB0YWJsZSwgcGxlYXNlIHByb3ZpZGUgdGhlIG4gc2l6ZSBhbmQgdGhlICUgb2YgcmVzcG9uZGVudHMNCg0KIyMgMzVhIEluY3JlYXNlZCBjYWxvcmllIEludGFrZQ0KDQpgYGB7ciBRMzVhfQ0KDQpkYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgbXV0YXRlKGNhbD1jYXNlX3doZW4oQ0FMSU5DPT0xfiJOb3QgYXQgYWxsIHJlc3BvbnNpYmxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FMSU5DPT0yfiJTb21ld2hhdCByZXNwb25zaWJsZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBDQUxJTkM9PTN+IlZlcnkgcmVzcG9uc2libGUiLCBUUlVFfk5BKSkNCmRhdGEkY2FsPWZjdF9pbm9yZGVyKGRhdGEkY2FsKQ0KdGFibGUoZGF0YSRjYWwsIHVzZU5BID0gImFsd2F5cyIpDQoNCng9eHRhYnMofmNhbCtzdGF0dXMsIGRhdGE9ZGF0YSkNCngNCnk9cm91bmQocHJvcC50YWJsZSh4LDIpLCAzKQ0KeQ0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCg0Kbm90PWRhdGEuZnJhbWUoDQogIHN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKSwNCiAgY291bnQ9Yyh4WzMsMV0sIHhbMywyXSwgeFszLDNdKSwNCiAgcHBuPWMoeVszLDFdLCB5WzMsMl0sIHlbMywzXSkNCikNCm5vdCRleHRlbnQ9YygiTm90IGF0IGFsbCIpDQoNCnNvbWV3aGF0PWRhdGEuZnJhbWUoDQogIHN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKSwNCiAgY291bnQ9Yyh4WzIsMV0sIHhbMiwyXSwgeFsyLDNdKSwNCiAgcHBuPWMoeVsyLDFdLCB5WzIsMl0sIHlbMiwzXSkNCikNCnNvbWV3aGF0JGV4dGVudD1jKCJTb21ld2hhdCIpDQoNCg0KdmVyeT1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsxLDFdLCB4WzEsMl0sIHhbMSwzXSksDQogIHBwbj1jKHlbMSwxXSwgeVsxLDJdLCB5WzEsM10pDQopDQp2ZXJ5JGV4dGVudD1jKCJWZXJ5IikNCg0KY2hhbmdlc190YWJsZT1hcy5kYXRhLmZyYW1lKHJiaW5kKG5vdCwgc29tZXdoYXQsIHZlcnkpKQ0KDQpzdGFnZT1jKCIgICAiLCAiUHJlIiwgIlByZSIsICJQcmUiLCAiUGVyaSIsICJQZXJpIiwiUGVyaSIsIlBvc3QiLCJQb3N0IiwiUG9zdCIpDQpSZXNwb25zZT1jKCIgICIsICJOb3QgYXQgYWxsIiwgInNvbWV3aGF0IiwgInZlcnkiLCAiTm90IGF0IGFsbCIsICJzb21ld2hhdCIsICJ2ZXJ5IiwgIk5vdCBhdCBhbGwiLCAic29tZXdoYXQiLCAidmVyeSIgKQ0KSXRlbT1jKCJJbmNyZWFzZWQgY2Fsb3JpZSBpbnRha2UiLCB4WzMsMV0sIHhbMiwxXSx4WzEsMV0sIHhbMywyXSx4WzIsMl0seFsxLDJdLHhbMywzXSx4WzIsM10seFsxLDNdKQ0KUHBuPWMoIkluY3JlYXNlZCBjYWxvcmllIGludGFrZSIsIHlbMywxXSwgeVsyLDFdLCB5WzEsMV0sIHlbMywyXSx5WzIsMl0seVsxLDJdLHlbMywzXSx5WzIsM10seVsxLDNdKQ0KUTM1YT1yYmluZChzdGFnZSwgUmVzcG9uc2UsIEl0ZW0sIFBwbikNCmBgYA0KDQojIyAzNWIgQ2hhbmdlcyBpbiBXb3Jrb3V0IFJvdXRpbmUNCg0KYGBge3IgUTM1Yn0NCg0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShjaGFuZ2U9Y2FzZV93aGVuKEJGX1dLVENIQU5HRT09MX4iTm90IGF0IGFsbCByZXNwb25zaWJsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIEJGX1dLVENIQU5HRT09Mn4iU29tZXdoYXQgcmVzcG9uc2libGUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgQkZfV0tUQ0hBTkdFPT0zfiJWZXJ5IHJlc3BvbnNpYmxlIiwgVFJVRX5OQSkpDQpkYXRhJGNoYW5nZT1mY3RfaW5vcmRlcihkYXRhJGNoYW5nZSkNCnRhYmxlKGRhdGEkY2hhbmdlLCB1c2VOQSA9ICJhbHdheXMiKQ0KDQp4PXh0YWJzKH5jaGFuZ2Urc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQp5PXJvdW5kKHByb3AudGFibGUoeCwyKSwgMykNCnkNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQoNCm5vdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFszLDFdLCB4WzMsMl0sIHhbMywzXSksDQogIHBwbj1jKHlbMywxXSwgeVszLDJdLCB5WzMsM10pDQopDQpub3QkZXh0ZW50PWMoIk5vdCBhdCBhbGwiKQ0KDQpzb21ld2hhdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsyLDFdLCB4WzIsMl0sIHhbMiwzXSksDQogIHBwbj1jKHlbMiwxXSwgeVsyLDJdLCB5WzIsM10pDQopDQpzb21ld2hhdCRleHRlbnQ9YygiU29tZXdoYXQiKQ0KDQoNCnZlcnk9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMSwxXSwgeFsxLDJdLCB4WzEsM10pLA0KICBwcG49Yyh5WzEsMV0sIHlbMSwyXSwgeVsxLDNdKQ0KKQ0KdmVyeSRleHRlbnQ9YygiVmVyeSIpDQoNCmNoYW5nZXNfdGFibGU9YXMuZGF0YS5mcmFtZShyYmluZChub3QsIHNvbWV3aGF0LCB2ZXJ5KSkNCg0KI2thYmxlKGNoYW5nZXNfdGFibGUsIGZvcm1hdD0iaHRtbCIsIGNhcHRpb249IkNoYW5nZXMgaW4gd29ya291dCByb3V0aW5lIikgJT4lDQogIyBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRikNCg0KSXRlbT1jKCJDaGFuZ2VzIGluIFdvcmtvdXQiLCB4WzMsMV0sIHhbMiwxXSx4WzEsMV0sIHhbMywyXSx4WzIsMl0seFsxLDJdLHhbMywzXSx4WzIsM10seFsxLDNdKQ0KUHBuPWMoIkNoYW5nZXMgaW4gV29ya291dCIsIHlbMywxXSwgeVsyLDFdLCB5WzEsMV0sIHlbMywyXSx5WzIsMl0seVsxLDJdLHlbMywzXSx5WzIsM10seVsxLDNdKQ0KUTM1Yj1yYmluZChJdGVtLCBQcG4pDQpgYGANCg0KIyMgMzVjIFNsZWVwIERlcHJhdmF0aW9uDQoNCmBgYHtyIFEzNWN9DQpkYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgbXV0YXRlKHNsZWVwPWNhc2Vfd2hlbihCRl9TTEVFUERFUD09MX4iTm90IGF0IGFsbCByZXNwb25zaWJsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIEJGX1NMRUVQREVQPT0yfiJTb21ld2hhdCByZXNwb25zaWJsZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBCRl9TTEVFUERFUD09M34iVmVyeSByZXNwb25zaWJsZSIsIFRSVUV+TkEpKQ0KZGF0YSRzbGVlcD1mY3RfaW5vcmRlcihkYXRhJHNsZWVwKQ0KdGFibGUoZGF0YSRzbGVlcCwgdXNlTkEgPSAiYWx3YXlzIikNCg0KeD14dGFicyh+c2xlZXArc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQp5PXJvdW5kKHByb3AudGFibGUoeCwyKSwgMykNCnkNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQoNCm5vdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFszLDFdLCB4WzMsMl0sIHhbMywzXSksDQogIHBwbj1jKHlbMywxXSwgeVszLDJdLCB5WzMsM10pDQopDQpub3QkZXh0ZW50PWMoIk5vdCBhdCBhbGwiKQ0KDQpzb21ld2hhdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsyLDFdLCB4WzIsMl0sIHhbMiwzXSksDQogIHBwbj1jKHlbMiwxXSwgeVsyLDJdLCB5WzIsM10pDQopDQpzb21ld2hhdCRleHRlbnQ9YygiU29tZXdoYXQiKQ0KDQoNCnZlcnk9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMSwxXSwgeFsxLDJdLCB4WzEsM10pLA0KICBwcG49Yyh5WzEsMV0sIHlbMSwyXSwgeVsxLDNdKQ0KKQ0KdmVyeSRleHRlbnQ9YygiVmVyeSIpDQoNCmNoYW5nZXNfdGFibGU9YXMuZGF0YS5mcmFtZShyYmluZChub3QsIHNvbWV3aGF0LCB2ZXJ5KSkNCg0KI2thYmxlKGNoYW5nZXNfdGFibGUsIGZvcm1hdD0iaHRtbCIsIGNhcHRpb249IlNsZWVwIERlcHJhdmF0aW9uIikgJT4lDQogIyBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRikNCg0KSXRlbT1jKCJTbGVlcCIsIHhbMywxXSwgeFsyLDFdLHhbMSwxXSwgeFszLDJdLHhbMiwyXSx4WzEsMl0seFszLDNdLHhbMiwzXSx4WzEsM10pDQpQcG49YygiU2xlZXAiLCB5WzMsMV0sIHlbMiwxXSwgeVsxLDFdLCB5WzMsMl0seVsyLDJdLHlbMSwyXSx5WzMsM10seVsyLDNdLHlbMSwzXSkNClEzNWM9cmJpbmQoSXRlbSwgUHBuKQ0KYGBgDQoNCiMjIDM1ZCBTdHJlc3MNCg0KYGBge3IgUTM1ZH0NCg0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShzdHJlc3M9Y2FzZV93aGVuKEJGX1NUUkVTUz09MX4iTm90IGF0IGFsbCByZXNwb25zaWJsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIEJGX1NUUkVTUz09Mn4iU29tZXdoYXQgcmVzcG9uc2libGUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgQkZfU1RSRVNTPT0zfiJWZXJ5IHJlc3BvbnNpYmxlIiwgVFJVRX5OQSkpDQpkYXRhJHN0cmVzcz1mY3RfaW5vcmRlcihkYXRhJHN0cmVzcykNCnRhYmxlKGRhdGEkc3RyZXNzLCB1c2VOQSA9ICJhbHdheXMiKQ0KDQp4PXh0YWJzKH5zdHJlc3Mrc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQp5PXJvdW5kKHByb3AudGFibGUoeCwyKSwgMykNCnkNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQoNCm5vdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFszLDFdLCB4WzMsMl0sIHhbMywzXSksDQogIHBwbj1jKHlbMywxXSwgeVszLDJdLCB5WzMsM10pDQopDQpub3QkZXh0ZW50PWMoIk5vdCBhdCBhbGwiKQ0KDQpzb21ld2hhdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsyLDFdLCB4WzIsMl0sIHhbMiwzXSksDQogIHBwbj1jKHlbMiwxXSwgeVsyLDJdLCB5WzIsM10pDQopDQpzb21ld2hhdCRleHRlbnQ9YygiU29tZXdoYXQiKQ0KDQoNCnZlcnk9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMSwxXSwgeFsxLDJdLCB4WzEsM10pLA0KICBwcG49Yyh5WzEsMV0sIHlbMSwyXSwgeVsxLDNdKQ0KKQ0KdmVyeSRleHRlbnQ9YygiVmVyeSIpDQoNCmNoYW5nZXNfdGFibGU9YXMuZGF0YS5mcmFtZShyYmluZChub3QsIHNvbWV3aGF0LCB2ZXJ5KSkNCg0KI2thYmxlKGNoYW5nZXNfdGFibGUsIGZvcm1hdD0iaHRtbCIsIGNhcHRpb249IkNoYW5nZXMgaW4gd29ya291dCByb3V0aW5lIikgJT4lDQogIyBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRikNCg0KSXRlbT1jKCJTdHJlc3MiLCB4WzMsMV0sIHhbMiwxXSx4WzEsMV0sIHhbMywyXSx4WzIsMl0seFsxLDJdLHhbMywzXSx4WzIsM10seFsxLDNdKQ0KUHBuPWMoIlN0cmVzcyIsIHlbMywxXSwgeVsyLDFdLCB5WzEsMV0sIHlbMywyXSx5WzIsMl0seVsxLDJdLHlbMywzXSx5WzIsM10seVsxLDNdKQ0KUTM1ZD1yYmluZChJdGVtLCBQcG4pDQpgYGANCg0KIyMgMzVlIEZhdGlndWUgb3IgTGFjayBvZiBFbmVyZ3kNCg0KYGBge3IgUTM1ZX0NCg0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShsb3c9Y2FzZV93aGVuKEJGX0xPV0VORVJHPT0xfiJOb3QgYXQgYWxsIHJlc3BvbnNpYmxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQkZfTE9XRU5FUkc9PTJ+IlNvbWV3aGF0IHJlc3BvbnNpYmxlIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIEJGX0xPV0VORVJHPT0zfiJWZXJ5IHJlc3BvbnNpYmxlIiwgVFJVRX5OQSkpDQpkYXRhJGxvdz1mY3RfaW5vcmRlcihkYXRhJGxvdykNCnRhYmxlKGRhdGEkbG93LCB1c2VOQSA9ICJhbHdheXMiKQ0KDQp4PXh0YWJzKH5sb3crc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQp5PXJvdW5kKHByb3AudGFibGUoeCwyKSwgMykNCnkNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQoNCm5vdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFszLDFdLCB4WzMsMl0sIHhbMywzXSksDQogIHBwbj1jKHlbMywxXSwgeVszLDJdLCB5WzMsM10pDQopDQpub3QkZXh0ZW50PWMoIk5vdCBhdCBhbGwiKQ0KDQpzb21ld2hhdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsyLDFdLCB4WzIsMl0sIHhbMiwzXSksDQogIHBwbj1jKHlbMiwxXSwgeVsyLDJdLCB5WzIsM10pDQopDQpzb21ld2hhdCRleHRlbnQ9YygiU29tZXdoYXQiKQ0KDQoNCnZlcnk9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMSwxXSwgeFsxLDJdLCB4WzEsM10pLA0KICBwcG49Yyh5WzEsMV0sIHlbMSwyXSwgeVsxLDNdKQ0KKQ0KdmVyeSRleHRlbnQ9YygiVmVyeSIpDQoNCmNoYW5nZXNfdGFibGU9YXMuZGF0YS5mcmFtZShyYmluZChub3QsIHNvbWV3aGF0LCB2ZXJ5KSkNCg0KI2thYmxlKGNoYW5nZXNfdGFibGUsIGZvcm1hdD0iaHRtbCIsIGNhcHRpb249IkNGYXRpcXVlIG9yIExvdyBFbmVyZ3kiKSAlPiUNCiAjIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIGZ1bGxfd2lkdGggPSBGKQ0KDQpJdGVtPWMoIkZhdGlndWUiLCB4WzMsMV0sIHhbMiwxXSx4WzEsMV0sIHhbMywyXSx4WzIsMl0seFsxLDJdLHhbMywzXSx4WzIsM10seFsxLDNdKQ0KUHBuPWMoIkZhdGlndWUiLCB5WzMsMV0sIHlbMiwxXSwgeVsxLDFdLCB5WzMsMl0seVsyLDJdLHlbMSwyXSx5WzMsM10seVsyLDNdLHlbMSwzXSkNClEzNWU9cmJpbmQoSXRlbSwgUHBuKQ0KYGBgDQoNCiMjIDM1ZiBIb3Jtb25hbCBDaGFuZ2VzDQoNCmBgYHtyIFEzNWZ9DQoNCmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUoaG9ybW9uZT1jYXNlX3doZW4oQkZfSFJNQ0hBTkdFPT0xfiJOb3QgYXQgYWxsIHJlc3BvbnNpYmxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQkZfSFJNQ0hBTkdFPT0yfiJTb21ld2hhdCByZXNwb25zaWJsZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBCRl9IUk1DSEFOR0U9PTN+IlZlcnkgcmVzcG9uc2libGUiLCBUUlVFfk5BKSkNCmRhdGEkaG9ybW9uZT1mY3RfaW5vcmRlcihkYXRhJGhvcm1vbmUpDQp0YWJsZShkYXRhJGhvcm1vbmUsIHVzZU5BID0gImFsd2F5cyIpDQoNCng9eHRhYnMofmhvcm1vbmUrc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQp5PXJvdW5kKHByb3AudGFibGUoeCwyKSwgMykNCnkNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQoNCm5vdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFszLDFdLCB4WzMsMl0sIHhbMywzXSksDQogIHBwbj1jKHlbMywxXSwgeVszLDJdLCB5WzMsM10pDQopDQpub3QkZXh0ZW50PWMoIk5vdCBhdCBhbGwiKQ0KDQpzb21ld2hhdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsyLDFdLCB4WzIsMl0sIHhbMiwzXSksDQogIHBwbj1jKHlbMiwxXSwgeVsyLDJdLCB5WzIsM10pDQopDQpzb21ld2hhdCRleHRlbnQ9YygiU29tZXdoYXQiKQ0KDQoNCnZlcnk9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMSwxXSwgeFsxLDJdLCB4WzEsM10pLA0KICBwcG49Yyh5WzEsMV0sIHlbMSwyXSwgeVsxLDNdKQ0KKQ0KdmVyeSRleHRlbnQ9YygiVmVyeSIpDQoNCmNoYW5nZXNfdGFibGU9YXMuZGF0YS5mcmFtZShyYmluZChub3QsIHNvbWV3aGF0LCB2ZXJ5KSkNCg0KI2thYmxlKGNoYW5nZXNfdGFibGUsIGZvcm1hdD0iaHRtbCIsIGNhcHRpb249Ikhvcm1vbmFsIENoYW5nZXMiKSAlPiUNCiAjIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIGZ1bGxfd2lkdGggPSBGKQ0KDQpJdGVtPWMoIkhvcm1vbmFsIGNoYW5nZXMiLCB4WzMsMV0sIHhbMiwxXSx4WzEsMV0sIHhbMywyXSx4WzIsMl0seFsxLDJdLHhbMywzXSx4WzIsM10seFsxLDNdKQ0KUHBuPWMoIkhvcm1vbmFsIGNoYW5nZXMiLCB5WzMsMV0sIHlbMiwxXSwgeVsxLDFdLCB5WzMsMl0seVsyLDJdLHlbMSwyXSx5WzMsM10seVsyLDNdLHlbMSwzXSkNClEzNWY9cmJpbmQoSXRlbSwgUHBuKQ0KYGBgDQoNCiMjIDM1ZyBSZWR1Y2VkIERhaWx5IEFjdGl2aXRpZXMvTW92ZW1lbnQNCg0KYGBge3IgUTM1Z30NCg0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShtb3ZlPWNhc2Vfd2hlbihCRl9NT1ZFTEVTUz09MX4iTm90IGF0IGFsbCByZXNwb25zaWJsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIEJGX01PVkVMRVNTPT0yfiJTb21ld2hhdCByZXNwb25zaWJsZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBCRl9NT1ZFTEVTUz09M34iVmVyeSByZXNwb25zaWJsZSIsIFRSVUV+TkEpKQ0KZGF0YSRtb3ZlPWZjdF9pbm9yZGVyKGRhdGEkbW92ZSkNCnRhYmxlKGRhdGEkbW92ZSwgdXNlTkEgPSAiYWx3YXlzIikNCg0KeD14dGFicyh+bW92ZStzdGF0dXMsIGRhdGE9ZGF0YSkNCngNCnk9cm91bmQocHJvcC50YWJsZSh4LDIpLCAzKQ0KeQ0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCg0Kbm90PWRhdGEuZnJhbWUoDQogIHN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKSwNCiAgY291bnQ9Yyh4WzMsMV0sIHhbMywyXSwgeFszLDNdKSwNCiAgcHBuPWMoeVszLDFdLCB5WzMsMl0sIHlbMywzXSkNCikNCm5vdCRleHRlbnQ9YygiTm90IGF0IGFsbCIpDQoNCnNvbWV3aGF0PWRhdGEuZnJhbWUoDQogIHN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKSwNCiAgY291bnQ9Yyh4WzIsMV0sIHhbMiwyXSwgeFsyLDNdKSwNCiAgcHBuPWMoeVsyLDFdLCB5WzIsMl0sIHlbMiwzXSkNCikNCnNvbWV3aGF0JGV4dGVudD1jKCJTb21ld2hhdCIpDQoNCg0KdmVyeT1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsxLDFdLCB4WzEsMl0sIHhbMSwzXSksDQogIHBwbj1jKHlbMSwxXSwgeVsxLDJdLCB5WzEsM10pDQopDQp2ZXJ5JGV4dGVudD1jKCJWZXJ5IikNCg0KY2hhbmdlc190YWJsZT1hcy5kYXRhLmZyYW1lKHJiaW5kKG5vdCwgc29tZXdoYXQsIHZlcnkpKQ0KDQoja2FibGUoY2hhbmdlc190YWJsZSwgZm9ybWF0PSJodG1sIiwgY2FwdGlvbj0iUmVkdWNlZCBEYWlseSBBY3Rpdml0aWVzL01vdmVtZW50IikgJT4lDQogIyBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRikNCg0KSXRlbT1jKCJSZWR1Y2VkIGFjdGl2aXRpZXMiLCB4WzMsMV0sIHhbMiwxXSx4WzEsMV0sIHhbMywyXSx4WzIsMl0seFsxLDJdLHhbMywzXSx4WzIsM10seFsxLDNdKQ0KUHBuPWMoIlJlZHVjZWQgYWN0aXZpdGllcyIsIHlbMywxXSwgeVsyLDFdLCB5WzEsMV0sIHlbMywyXSx5WzIsMl0seVsxLDJdLHlbMywzXSx5WzIsM10seVsxLDNdKQ0KUTM1Zz1yYmluZChJdGVtLCBQcG4pDQpgYGANCg0KYGBgIHtyfQ0KdGFiPXJiaW5kKFEzNWEsIFEzNWIsIFEzNWMsIFEzNWQsIFEzNWUsIFEzNWYsIFEzNWcpDQoNCmthYmxlKHRhYikNCmBgYA0KDQoNCg0KDQojIFF1ZXN0aW9uICMzNiBXZWlnaHQgbG9zcyByZXNpc3RhbmNlDQotIFBsZWFzZSBjb25kdWN0IGFuIGFuYWx5c2lzIG9mIHN0YXRpc3RpY2FsIHNpZ25pZmljYW5jZSBiZXR3ZWVuIHRoZSB0aHJlZSBncm91cHMgKFByZTsgUGVyaTsgUG9zdCkgY3VycmVudGx5IGV4cGVyaWVuY2luZyB3ZWlnaHQgbG9zcyByZXNpc3RhbmNlIEJldHdlZW4tR3JvdXAgQ29tcGFyaXNvbjogDQotIElzIHRoZXJlIGEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIHRoZSBudW1iZXIgb2Yg4oCYWWVz4oCZIHJlc3BvbnNlcyBiZXR3ZWVuIHdvbWVuIHdobyBhcmUgcHJlbWVub3BhdXNhbCwgcGVyaW1lbm9wYXVzYWwsIGFuZCBwb3N0bWVub3BhdXNhbD8gDQoNCipBIENoaS1zcXVhcmUgdGVzdCBvZiBpbmRlcGVuZGVuY2Ugd2FzIGNvbmR1Y3RlZCB0byBhc3Nlc3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBlcmNlaXZlZCB3ZWlnaHQgZ2FpbiBhbmQgbWVub3BhdXNhbCBzdGF0dXMuIEEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBhc3NvY2lhdGlvbiB3YXMgZm91bmQsIFgyKGRmPTYpPTYwLjU1NCwgcD0uMDAwMDAwMDAwMDMuIENyYW1lcidzIFYgd2FzIHNtYWxsIGF0IFY9MC4wOSwgOTUlIENJKDAuMDcsIDAuMTEpLiAqDQoNCmBgYHtyIFEzNiwgaW5jbHVkZT1UfQ0KDQoNCg0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZSh3bHI9Y2FzZV93aGVuKFdMUj09MX4iWWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTFI9PTJ+Ik5vIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICBXTFI9PTN+IkkgZG9uJ3Qga25vdyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBXTFI9PTR+IkRvZXMgTm90IEFwcGx5IiwgVFJVRX5OQSkpDQoNCmRhdGEkd2xyIDwtIGZhY3RvcihkYXRhJHdsciwgbGV2ZWxzID0gYygiWWVzIiwgIk5vIiwgIkkgZG9uJ3Qga25vdyIsICJEb2VzIE5vdCBBcHBseSIpKQ0KdGFibGUoZGF0YSR3bHIsIHVzZU5BID0gImFsd2F5cyIpDQp4PXh0YWJzKH53bHIrc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQpwcm9wLnRhYmxlKHgsMikNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQpyZXN1bHQNCnJlc3VsdCRleHBlY3RlZA0KI3ByZQ0KcHJvcC50ZXN0KDIxMiwgMjEyKzEzMis2Nys4NSkNCiNwZXJpDQpwcm9wLnRlc3QoMTAzMiwgMTAzMisyNzQrMTUxKzM2NikNCiNwb3N0DQpwcm9wLnRlc3QoMTExNywgMTExNysyNjIrMTQ0KzMwNikNCiAgICAgICAgICANCmI9ZGF0YS5mcmFtZSgNCm51bT1jKDIxMiwgMTAzMiwgMTExNyksDQpkZW49YygyMTIrMTMyKzY3Kzg1LCAxMDMyKzI3NCsxNTErMzY2LCAxMTE3KzI2MisxNDQrMzA2KSwNCnN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKQ0KKQ0KcGFpcndpc2UucHJvcC50ZXN0KHg9YiRudW0sIG49YiRkZW4sIHAuYWRqdXN0Lm1ldGhvZCA9ICJob2xtIikNCmNpX2NyYW1lcnN2KHJlc3VsdCkNCiMgQ3JlYXRlIGEgc2FtcGxlIGRhdGEgZnJhbWUgDQojIEVuc3VyZSB5b3VyIGRhdGEgZnJhbWUgaGFzIGNvbHVtbnMgZm9yIHRoZSB4LWF4aXMgdmFyaWFibGUsIHRoZSBncm91cGluZyB2YXJpYWJsZSwgDQojIHRoZSBtZWFuIHZhbHVlLCBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbi9lcnJvci4NCmRmIDwtIGRhdGEuZnJhbWUoDQogIHggPSBjKCJQcmUiLCAiUGVyaSIsICJQb3N0IiksDQogIHkgPSBjKC40MjcsIC41NjYsIC42MTEpLA0KICB5bWluID0gYyguMzg0LCAuNTIzLCAuNTg4KSwNCiAgeW1heCA9IGMoLjQ3MiwgLjU4OSwgLjYzMykNCikNCg0KZGYkeD1mY3RfaW5vcmRlcihkZiR4KQ0KI2dncGxvdChkZiwgYWVzKHggPSB4LCB5ID0geSkpICsNCiAjIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC45KSwgZmlsbCA9ICJibHVlIikgKw0KICAjZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHltaW4sIHltYXggPSB5bWF4KSwNCiAgICMgICAgICAgICAgICAgd2lkdGggPSAwLjEwLCAgIyBXaWR0aCBvZiB0aGUgZXJyb3IgYmFyIGNhcHMNCiAgICAjICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSkpICsNCiMgIHNjYWxlX2ZpbGxfZ3JleSgpICsNCiAjIGxhYnModGl0bGUgPSAiV2VpZ2h0IExvc3MgcmVzaXN0YW5jZSIsDQogICMgICAgIHggPSAiTWVub3BhdXNhbCBTdGF0dXMiLA0KICAgIyAgICB5ID0gIlByb3BvcnRpb24iKSArDQojICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQojIFF1ZXN0aW9uICMzN2EtZiBGYWN0b3JzIGNvbnRyaWJ1dGluZyB0byBXTFINCg0KIyMgMzdhIENoYW5nZXMgaW4gV29ya291dCBSb3V0aW5lDQoNCi0gICBGb3IgZWFjaCBjZWxsIGluIHRoZSB0YWJsZSwgcGxlYXNlIHByb3ZpZGUgdGhlIG4gc2l6ZSBhbmQgdGhlICUgb2YgcmVzcG9uZGVudHMNCg0KYGBge3IgUTM3YX0NCg0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShjaGFuZ2U9Y2FzZV93aGVuKFdMUl9XS1RDSEFOR0U9PTF+Ik5vdCBhdCBhbGwgcmVzcG9uc2libGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBXTFJfV0tUQ0hBTkdFPT0yfiJTb21ld2hhdCByZXNwb25zaWJsZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBXTFJfV0tUQ0hBTkdFPT0zfiJWZXJ5IHJlc3BvbnNpYmxlIiwgVFJVRX5OQSkpDQpkYXRhJGNoYW5nZT1mY3RfaW5vcmRlcihkYXRhJGNoYW5nZSkNCnRhYmxlKGRhdGEkY2hhbmdlLCB1c2VOQSA9ICJhbHdheXMiKQ0KDQp4PXh0YWJzKH5jaGFuZ2Urc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQp5PXJvdW5kKHByb3AudGFibGUoeCwyKSwgMykNCnkNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQoNCm5vdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFszLDFdLCB4WzMsMl0sIHhbMywzXSksDQogIHBwbj1jKHlbMywxXSwgeVszLDJdLCB5WzMsM10pDQopDQpub3QkZXh0ZW50PWMoIk5vdCBhdCBhbGwiKQ0KDQpzb21ld2hhdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsyLDFdLCB4WzIsMl0sIHhbMiwzXSksDQogIHBwbj1jKHlbMiwxXSwgeVsyLDJdLCB5WzIsM10pDQopDQpzb21ld2hhdCRleHRlbnQ9YygiU29tZXdoYXQiKQ0KDQoNCnZlcnk9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMSwxXSwgeFsxLDJdLCB4WzEsM10pLA0KICBwcG49Yyh5WzEsMV0sIHlbMSwyXSwgeVsxLDNdKQ0KKQ0KdmVyeSRleHRlbnQ9YygiVmVyeSIpDQoNCmNoYW5nZXNfdGFibGU9YXMuZGF0YS5mcmFtZShyYmluZChub3QsIHNvbWV3aGF0LCB2ZXJ5KSkNCg0KI2thYmxlKGNoYW5nZXNfdGFibGUsIGZvcm1hdD0iaHRtbCIsIGNhcHRpb249IkNoYW5nZXMgaW4gd29ya291dCByb3V0aW5lIikgJT4lDQogIyBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRikNCg0Kc3RhZ2U9YygiICAgIiwgIlByZSIsICJQcmUiLCAiUHJlIiwgIlBlcmkiLCAiUGVyaSIsIlBlcmkiLCJQb3N0IiwiUG9zdCIsIlBvc3QiKQ0KUmVzcG9uc2U9YygiICAiLCAiTm90IGF0IGFsbCIsICJzb21ld2hhdCIsICJ2ZXJ5IiwgIk5vdCBhdCBhbGwiLCAic29tZXdoYXQiLCAidmVyeSIsICJOb3QgYXQgYWxsIiwgInNvbWV3aGF0IiwgInZlcnkiICkNCkl0ZW09YygiV29ya291dGNoYW5nZXMiLCB4WzMsMV0sIHhbMiwxXSx4WzEsMV0sIHhbMywyXSx4WzIsMl0seFsxLDJdLHhbMywzXSx4WzIsM10seFsxLDNdKQ0KUHBuPWMoIldvcmtvdXRjaGFuZ2VzIiwgeVszLDFdLCB5WzIsMV0sIHlbMSwxXSwgeVszLDJdLHlbMiwyXSx5WzEsMl0seVszLDNdLHlbMiwzXSx5WzEsM10pDQpRMzdhPXJiaW5kKHN0YWdlLCBSZXNwb25zZSwgSXRlbSwgUHBuKQ0KYGBgDQoNCiMjIDM3YiBTbGVlcCBEZXByYXZhdGlvbg0KDQpgYGB7ciBRMzdifQ0KZGF0YSA9IGZpcnN0LmRhdGEgJT4lDQogIG11dGF0ZShzbGVlcD1jYXNlX3doZW4oV0xSX1NMUD09MX4iTm90IGF0IGFsbCByZXNwb25zaWJsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIFdMUl9TTFA9PTJ+IlNvbWV3aGF0IHJlc3BvbnNpYmxlIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIFdMUl9TTFA9PTN+IlZlcnkgcmVzcG9uc2libGUiLCBUUlVFfk5BKSkNCmRhdGEkc2xlZXA9ZmN0X2lub3JkZXIoZGF0YSRzbGVlcCkNCnRhYmxlKGRhdGEkc2xlZXAsIHVzZU5BID0gImFsd2F5cyIpDQoNCng9eHRhYnMofnNsZWVwK3N0YXR1cywgZGF0YT1kYXRhKQ0KeA0KeT1yb3VuZChwcm9wLnRhYmxlKHgsMiksIDMpDQp5DQpyZXN1bHQ9Y2hpc3EudGVzdCh4KQ0KDQpub3Q9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMywxXSwgeFszLDJdLCB4WzMsM10pLA0KICBwcG49Yyh5WzMsMV0sIHlbMywyXSwgeVszLDNdKQ0KKQ0Kbm90JGV4dGVudD1jKCJOb3QgYXQgYWxsIikNCg0Kc29tZXdoYXQ9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMiwxXSwgeFsyLDJdLCB4WzIsM10pLA0KICBwcG49Yyh5WzIsMV0sIHlbMiwyXSwgeVsyLDNdKQ0KKQ0Kc29tZXdoYXQkZXh0ZW50PWMoIlNvbWV3aGF0IikNCg0KDQp2ZXJ5PWRhdGEuZnJhbWUoDQogIHN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKSwNCiAgY291bnQ9Yyh4WzEsMV0sIHhbMSwyXSwgeFsxLDNdKSwNCiAgcHBuPWMoeVsxLDFdLCB5WzEsMl0sIHlbMSwzXSkNCikNCnZlcnkkZXh0ZW50PWMoIlZlcnkiKQ0KDQpjaGFuZ2VzX3RhYmxlPWFzLmRhdGEuZnJhbWUocmJpbmQobm90LCBzb21ld2hhdCwgdmVyeSkpDQoNCiNrYWJsZShjaGFuZ2VzX3RhYmxlLCBmb3JtYXQ9Imh0bWwiLCBjYXB0aW9uPSJTbGVlcCBEZXByYXZhdGlvbiIpICU+JQ0KICMga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYpDQoNCg0KSXRlbT1jKCJTbGVlcCIsIHhbMywxXSwgeFsyLDFdLHhbMSwxXSx4WzMsMl0seFsyLDJdLHhbMSwyXSx4WzMsM10seFsyLDNdLHhbMSwzXSkNClBwbj1jKCJTbGVlcCIsIHlbMywxXSwgeVsyLDFdLCB5WzEsMV0sIHlbMywyXSx5WzIsMl0seVsxLDJdLHlbMywzXSx5WzIsM10seVsxLDNdKQ0KUTM3Yj1yYmluZChJdGVtLCBQcG4pDQpgYGANCg0KIyMgMzdjIFN0cmVzcw0KDQpgYGB7ciBRMzdjfQ0KDQpkYXRhID0gZmlyc3QuZGF0YSAlPiUNCiAgbXV0YXRlKHN0cmVzcz1jYXNlX3doZW4oV0xSX1NUUkVTUz09MX4iTm90IGF0IGFsbCByZXNwb25zaWJsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIFdMUl9TVFJFU1M9PTJ+IlNvbWV3aGF0IHJlc3BvbnNpYmxlIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIFdMUl9TVFJFU1M9PTN+IlZlcnkgcmVzcG9uc2libGUiLCBUUlVFfk5BKSkNCmRhdGEkc3RyZXNzPWZjdF9pbm9yZGVyKGRhdGEkc3RyZXNzKQ0KdGFibGUoZGF0YSRzdHJlc3MsIHVzZU5BID0gImFsd2F5cyIpDQoNCng9eHRhYnMofnN0cmVzcytzdGF0dXMsIGRhdGE9ZGF0YSkNCngNCnk9cm91bmQocHJvcC50YWJsZSh4LDIpLCAzKQ0KeQ0KcmVzdWx0PWNoaXNxLnRlc3QoeCkNCg0Kbm90PWRhdGEuZnJhbWUoDQogIHN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKSwNCiAgY291bnQ9Yyh4WzMsMV0sIHhbMywyXSwgeFszLDNdKSwNCiAgcHBuPWMoeVszLDFdLCB5WzMsMl0sIHlbMywzXSkNCikNCm5vdCRleHRlbnQ9YygiTm90IGF0IGFsbCIpDQoNCnNvbWV3aGF0PWRhdGEuZnJhbWUoDQogIHN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKSwNCiAgY291bnQ9Yyh4WzIsMV0sIHhbMiwyXSwgeFsyLDNdKSwNCiAgcHBuPWMoeVsyLDFdLCB5WzIsMl0sIHlbMiwzXSkNCikNCnNvbWV3aGF0JGV4dGVudD1jKCJTb21ld2hhdCIpDQoNCg0KdmVyeT1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsxLDFdLCB4WzEsMl0sIHhbMSwzXSksDQogIHBwbj1jKHlbMSwxXSwgeVsxLDJdLCB5WzEsM10pDQopDQp2ZXJ5JGV4dGVudD1jKCJWZXJ5IikNCg0KY2hhbmdlc190YWJsZT1hcy5kYXRhLmZyYW1lKHJiaW5kKG5vdCwgc29tZXdoYXQsIHZlcnkpKQ0KDQoja2FibGUoY2hhbmdlc190YWJsZSwgZm9ybWF0PSJodG1sIiwgY2FwdGlvbj0iQ2hhbmdlcyBpbiB3b3Jrb3V0IHJvdXRpbmUiKSAlPiUNCiAjIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIGZ1bGxfd2lkdGggPSBGKQ0KDQpJdGVtPWMoIlN0cmVzcyIsIHhbMywxXSwgeFsyLDFdLHhbMSwxXSx4WzMsMl0seFsyLDJdLHhbMSwyXSx4WzMsM10seFsyLDNdLHhbMSwzXSkNClBwbj1jKCJTdHJlc3MiLCB5WzMsMV0sIHlbMiwxXSwgeVsxLDFdLCB5WzMsMl0seVsyLDJdLHlbMSwyXSx5WzMsM10seVsyLDNdLHlbMSwzXSkNClEzN2M9cmJpbmQoSXRlbSwgUHBuKQ0KYGBgDQoNCiMjIDM3ZCBGYXRpZ3VlIG9yIExhY2sgb2YgRW5lcmd5DQoNCmBgYHtyIFEzN2R9DQoNCmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUobG93PWNhc2Vfd2hlbihXTFJfTE9XRU5FUkc9PTF+Ik5vdCBhdCBhbGwgcmVzcG9uc2libGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBXTFJfTE9XRU5FUkc9PTJ+IlNvbWV3aGF0IHJlc3BvbnNpYmxlIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIFdMUl9MT1dFTkVSRz09M34iVmVyeSByZXNwb25zaWJsZSIsIFRSVUV+TkEpKQ0KZGF0YSRsb3c9ZmN0X2lub3JkZXIoZGF0YSRsb3cpDQp0YWJsZShkYXRhJGxvdywgdXNlTkEgPSAiYWx3YXlzIikNCg0KeD14dGFicyh+bG93K3N0YXR1cywgZGF0YT1kYXRhKQ0KeA0KeT1yb3VuZChwcm9wLnRhYmxlKHgsMiksIDMpDQp5DQpyZXN1bHQ9Y2hpc3EudGVzdCh4KQ0KDQpub3Q9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMywxXSwgeFszLDJdLCB4WzMsM10pLA0KICBwcG49Yyh5WzMsMV0sIHlbMywyXSwgeVszLDNdKQ0KKQ0Kbm90JGV4dGVudD1jKCJOb3QgYXQgYWxsIikNCg0Kc29tZXdoYXQ9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMiwxXSwgeFsyLDJdLCB4WzIsM10pLA0KICBwcG49Yyh5WzIsMV0sIHlbMiwyXSwgeVsyLDNdKQ0KKQ0Kc29tZXdoYXQkZXh0ZW50PWMoIlNvbWV3aGF0IikNCg0KDQp2ZXJ5PWRhdGEuZnJhbWUoDQogIHN0YWdlPWMoInByZSIsICJwZXJpIiwgInBvc3QiKSwNCiAgY291bnQ9Yyh4WzEsMV0sIHhbMSwyXSwgeFsxLDNdKSwNCiAgcHBuPWMoeVsxLDFdLCB5WzEsMl0sIHlbMSwzXSkNCikNCnZlcnkkZXh0ZW50PWMoIlZlcnkiKQ0KDQpjaGFuZ2VzX3RhYmxlPWFzLmRhdGEuZnJhbWUocmJpbmQobm90LCBzb21ld2hhdCwgdmVyeSkpDQoNCiNrYWJsZShjaGFuZ2VzX3RhYmxlLCBmb3JtYXQ9Imh0bWwiLCBjYXB0aW9uPSJDRmF0aXF1ZSBvciBMb3cgRW5lcmd5IikgJT4lDQogIyBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRikNCg0KSXRlbT1jKCJGYXRpZ3VlIiwgeFszLDFdLCB4WzIsMV0seFsxLDFdLHhbMywyXSx4WzIsMl0seFsxLDJdLHhbMywzXSx4WzIsM10seFsxLDNdKQ0KUHBuPWMoIkZhdGlndWUiLCB5WzMsMV0sIHlbMiwxXSwgeVsxLDFdLCB5WzMsMl0seVsyLDJdLHlbMSwyXSx5WzMsM10seVsyLDNdLHlbMSwzXSkNClEzN2Q9cmJpbmQoSXRlbSwgUHBuKQ0KYGBgDQoNCiMjIDM3ZSBIb3Jtb25hbCBDaGFuZ2VzDQoNCmBgYHtyIFEzN2V9DQoNCmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUoaG9ybW9uZT1jYXNlX3doZW4oV0xSX0hSTUNIQU5HRT09MX4iTm90IGF0IGFsbCByZXNwb25zaWJsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIFdMUl9IUk1DSEFOR0U9PTJ+IlNvbWV3aGF0IHJlc3BvbnNpYmxlIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIFdMUl9IUk1DSEFOR0U9PTN+IlZlcnkgcmVzcG9uc2libGUiLCBUUlVFfk5BKSkNCmRhdGEkaG9ybW9uZT1mY3RfaW5vcmRlcihkYXRhJGhvcm1vbmUpDQp0YWJsZShkYXRhJGhvcm1vbmUsIHVzZU5BID0gImFsd2F5cyIpDQoNCng9eHRhYnMofmhvcm1vbmUrc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQp5PXJvdW5kKHByb3AudGFibGUoeCwyKSwgMykNCnkNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQoNCm5vdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFszLDFdLCB4WzMsMl0sIHhbMywzXSksDQogIHBwbj1jKHlbMywxXSwgeVszLDJdLCB5WzMsM10pDQopDQpub3QkZXh0ZW50PWMoIk5vdCBhdCBhbGwiKQ0KDQpzb21ld2hhdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsyLDFdLCB4WzIsMl0sIHhbMiwzXSksDQogIHBwbj1jKHlbMiwxXSwgeVsyLDJdLCB5WzIsM10pDQopDQpzb21ld2hhdCRleHRlbnQ9YygiU29tZXdoYXQiKQ0KDQoNCnZlcnk9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMSwxXSwgeFsxLDJdLCB4WzEsM10pLA0KICBwcG49Yyh5WzEsMV0sIHlbMSwyXSwgeVsxLDNdKQ0KKQ0KdmVyeSRleHRlbnQ9YygiVmVyeSIpDQoNCmNoYW5nZXNfdGFibGU9YXMuZGF0YS5mcmFtZShyYmluZChub3QsIHNvbWV3aGF0LCB2ZXJ5KSkNCg0KI2thYmxlKGNoYW5nZXNfdGFibGUsIGZvcm1hdD0iaHRtbCIsIGNhcHRpb249Ikhvcm1vbmFsIENoYW5nZXMiKSAlPiUNCiAjIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiksIGZ1bGxfd2lkdGggPSBGKQ0KDQoNCkl0ZW09YygiSG9ybW9uYWwgY2hhbmdlcyIsIHhbMywxXSwgeFsyLDFdLHhbMSwxXSx4WzMsMl0seFsyLDJdLHhbMSwyXSx4WzMsM10seFsyLDNdLHhbMSwzXSkNClBwbj1jKCJIb3Jtb25hbCBjaGFuZ2VzIiwgeVszLDFdLCB5WzIsMV0sIHlbMSwxXSwgeVszLDJdLHlbMiwyXSx5WzEsMl0seVszLDNdLHlbMiwzXSx5WzEsM10pDQpRMzdlPXJiaW5kKEl0ZW0sIFBwbikNCmBgYA0KDQojIyAzN2YgUmVkdWNlZCBEYWlseSBBY3Rpdml0aWVzL01vdmVtZW50DQoNCmBgYHtyIFEzN2Z9DQoNCmRhdGEgPSBmaXJzdC5kYXRhICU+JQ0KICBtdXRhdGUobW92ZT1jYXNlX3doZW4oV0xSX01PVkVMRVNTPT0xfiJOb3QgYXQgYWxsIHJlc3BvbnNpYmxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgV0xSX01PVkVMRVNTPT0yfiJTb21ld2hhdCByZXNwb25zaWJsZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBXTFJfTU9WRUxFU1M9PTN+IlZlcnkgcmVzcG9uc2libGUiLCBUUlVFfk5BKSkNCmRhdGEkbW92ZT1mY3RfaW5vcmRlcihkYXRhJG1vdmUpDQp0YWJsZShkYXRhJG1vdmUsIHVzZU5BID0gImFsd2F5cyIpDQoNCng9eHRhYnMofm1vdmUrc3RhdHVzLCBkYXRhPWRhdGEpDQp4DQp5PXJvdW5kKHByb3AudGFibGUoeCwyKSwgMykNCnkNCnJlc3VsdD1jaGlzcS50ZXN0KHgpDQoNCm5vdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFszLDFdLCB4WzMsMl0sIHhbMywzXSksDQogIHBwbj1jKHlbMywxXSwgeVszLDJdLCB5WzMsM10pDQopDQpub3QkZXh0ZW50PWMoIk5vdCBhdCBhbGwiKQ0KDQpzb21ld2hhdD1kYXRhLmZyYW1lKA0KICBzdGFnZT1jKCJwcmUiLCAicGVyaSIsICJwb3N0IiksDQogIGNvdW50PWMoeFsyLDFdLCB4WzIsMl0sIHhbMiwzXSksDQogIHBwbj1jKHlbMiwxXSwgeVsyLDJdLCB5WzIsM10pDQopDQpzb21ld2hhdCRleHRlbnQ9YygiU29tZXdoYXQiKQ0KDQoNCnZlcnk9ZGF0YS5mcmFtZSgNCiAgc3RhZ2U9YygicHJlIiwgInBlcmkiLCAicG9zdCIpLA0KICBjb3VudD1jKHhbMSwxXSwgeFsxLDJdLCB4WzEsM10pLA0KICBwcG49Yyh5WzEsMV0sIHlbMSwyXSwgeVsxLDNdKQ0KKQ0KdmVyeSRleHRlbnQ9YygiVmVyeSIpDQoNCmNoYW5nZXNfdGFibGU9YXMuZGF0YS5mcmFtZShyYmluZChub3QsIHNvbWV3aGF0LCB2ZXJ5KSkNCg0KI2thYmxlKGNoYW5nZXNfdGFibGUsIGZvcm1hdD0iaHRtbCIsIGNhcHRpb249IlJlZHVjZWQgRGFpbHkgQWN0aXZpdGllcy9Nb3ZlbWVudCIpICU+JQ0KICAja2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYpDQoNCg0KSXRlbT1jKCJSZWR1Y2VkIGFjdGl2aXRlcyIsIHhbMywxXSwgeFsyLDFdLHhbMSwxXSx4WzMsMl0seFsyLDJdLHhbMSwyXSx4WzMsM10seFsyLDNdLHhbMSwzXSkNClBwbj1jKCJSZWR1Y2VkIGFjdGl2aXRpZXMiLCB5WzMsMV0sIHlbMiwxXSwgeVsxLDFdLCB5WzMsMl0seVsyLDJdLHlbMSwyXSx5WzMsM10seVsyLDNdLHlbMSwzXSkNClEzN2Y9cmJpbmQoSXRlbSwgUHBuKQ0KYGBgDQoNCg0KYGBgIHtyfQ0KdGFiPXJiaW5kKFEzN2EsIFEzN2IsIFEzN2MsIFEzN2QsIFEzN2UsIFEzN2YpDQoNCmthYmxlKHRhYikNCmBgYA0KDQpgYGAge3IgYmFycGxvdHMsIGluY2x1ZGU9Rn0=