EFA

Factor Analysis using method =  minres
Call: fa(r = plum_cor, nfactors = 4)
Standardized loadings (pattern matrix) based upon correlation matrix

                       MR1  MR2  MR3  MR4
SS loadings           4.38 4.29 4.09 1.78
Proportion Var        0.12 0.12 0.11 0.05
Cumulative Var        0.12 0.24 0.35 0.40
Proportion Explained  0.30 0.30 0.28 0.12
Cumulative Proportion 0.30 0.60 0.88 1.00

 With factor correlations of 
     MR1  MR2  MR3  MR4
MR1 1.00 0.18 0.30 0.14
MR2 0.18 1.00 0.28 0.15
MR3 0.30 0.28 1.00 0.12
MR4 0.14 0.15 0.12 1.00

Mean item complexity =  1.6
Test of the hypothesis that 4 factors are sufficient.

The degrees of freedom for the null model are  630  and the objective function was  21.73
The degrees of freedom for the model are 492  and the objective function was  9.7 

The root mean square of the residuals (RMSR) is  0.07 
The df corrected root mean square of the residuals is  0.08 

Fit based upon off diagonal values = 0.92
Measures of factor score adequacy             
                                                   MR1  MR2  MR3  MR4
Correlation of (regression) scores with factors   0.94 0.95 0.93 0.87
Multiple R square of scores with factors          0.89 0.91 0.87 0.76
Minimum correlation of possible factor scores     0.78 0.82 0.74 0.51
Parallel analysis suggests that the number of factors =  6  and the number of components =  NA 

PCA

Importance of components:
                           PC1     PC2     PC3     PC4     PC5     PC6     PC7     PC8     PC9    PC10   PC11    PC12    PC13    PC14
Standard deviation     49.0891 20.1417 5.40648 5.07352 3.14555 2.82367 2.43179 2.38572 2.17792 1.93975 1.8778 1.68028 1.56905 1.51507
Proportion of Variance  0.8176  0.1376 0.00992 0.00873 0.00336 0.00271 0.00201 0.00193 0.00161 0.00128 0.0012 0.00096 0.00084 0.00078
Cumulative Proportion   0.8176  0.9553 0.96518 0.97391 0.97727 0.97997 0.98198 0.98391 0.98552 0.98679 0.9880 0.98895 0.98978 0.99056
                          PC15    PC16    PC17    PC18    PC19    PC20    PC21    PC22    PC23    PC24    PC25    PC26   PC27    PC28
Standard deviation     1.46909 1.40629 1.37205 1.27208 1.25723 1.19713 1.15261 1.13884 1.06005 1.02259 1.00513 0.97460 0.9478 0.88023
Proportion of Variance 0.00073 0.00067 0.00064 0.00055 0.00054 0.00049 0.00045 0.00044 0.00038 0.00035 0.00034 0.00032 0.0003 0.00026
Cumulative Proportion  0.99130 0.99197 0.99261 0.99315 0.99369 0.99418 0.99463 0.99507 0.99545 0.99580 0.99615 0.99647 0.9968 0.99704
                          PC29    PC30    PC31   PC32    PC33    PC34    PC35    PC36    PC37    PC38    PC39    PC40    PC41   PC42
Standard deviation     0.85058 0.80869 0.79384 0.7688 0.75557 0.71912 0.69644 0.65401 0.62493 0.61721 0.59043 0.56837 0.55934 0.5381
Proportion of Variance 0.00025 0.00022 0.00021 0.0002 0.00019 0.00018 0.00016 0.00015 0.00013 0.00013 0.00012 0.00011 0.00011 0.0001
Cumulative Proportion  0.99728 0.99750 0.99772 0.9979 0.99811 0.99829 0.99845 0.99860 0.99873 0.99886 0.99898 0.99909 0.99919 0.9993
                          PC43    PC44    PC45    PC46    PC47    PC48    PC49    PC50    PC51    PC52    PC53    PC54    PC55    PC56
Standard deviation     0.52265 0.50614 0.49239 0.45483 0.43310 0.40325 0.36761 0.34850 0.33233 0.30021 0.29238 0.25897 0.24243 0.22553
Proportion of Variance 0.00009 0.00009 0.00008 0.00007 0.00006 0.00006 0.00005 0.00004 0.00004 0.00003 0.00003 0.00002 0.00002 0.00002
Cumulative Proportion  0.99938 0.99947 0.99955 0.99962 0.99969 0.99974 0.99979 0.99983 0.99987 0.99990 0.99993 0.99995 0.99997 0.99999
                          PC57
Standard deviation     0.20352
Proportion of Variance 0.00001
Cumulative Proportion  1.00000

Visualizations

age vs. vocab (all)

age vs. seed vocab

age vs. control vocab

language use vs. seed vocab

language use vs. total vocab

language use vs. age

Correlation table of vocab by category

Regression models to predict language use

Age


Call:
lm(formula = LangUse_4factor ~ childAge_years, data = LangUse_analyze)

Residuals:
     Min       1Q   Median       3Q      Max 
-13.3997  -5.5136  -0.3472   5.6669  15.7096 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)      27.330      4.589   5.956 9.02e-08 ***
childAge_years    1.186      1.342   0.884     0.38    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.237 on 71 degrees of freedom
Multiple R-squared:  0.01088,   Adjusted R-squared:  -0.003055 
F-statistic: 0.7807 on 1 and 71 DF,  p-value: 0.3799

Seed and control word knowledge


Call:
lm(formula = LangUse_4factor ~ control, data = LangUse_analyze)

Residuals:
     Min       1Q   Median       3Q      Max 
-16.3406  -5.3905  -0.3428   5.3760  14.8794 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 26.17734    2.61621   10.01 3.35e-15 ***
control      0.04535    0.02191    2.07   0.0421 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.067 on 71 degrees of freedom
Multiple R-squared:  0.05691,   Adjusted R-squared:  0.04363 
F-statistic: 4.285 on 1 and 71 DF,  p-value: 0.04209


Call:
lm(formula = LangUse_4factor ~ seed, data = LangUse_analyze)

Residuals:
     Min       1Q   Median       3Q      Max 
-14.8801  -5.1264  -0.6617   5.5953  15.1798 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 24.64030    3.32435   7.412 2.05e-10 ***
seed         0.15846    0.07644   2.073   0.0418 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.066 on 71 degrees of freedom
Multiple R-squared:  0.05707,   Adjusted R-squared:  0.04379 
F-statistic: 4.297 on 1 and 71 DF,  p-value: 0.0418

Total vocabulary


Call:
lm(formula = LangUse_4factor ~ total, data = LangUse_analyze)

Residuals:
     Min       1Q   Median       3Q      Max 
-16.0826  -5.2520  -0.4236   5.6130  14.9563 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 25.62494    2.81743   9.095 1.57e-13 ***
total        0.03661    0.01733   2.112   0.0382 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.059 on 71 degrees of freedom
Multiple R-squared:  0.05914,   Adjusted R-squared:  0.04588 
F-statistic: 4.463 on 1 and 71 DF,  p-value: 0.03816

Total vocabulary + age


Call:
lm(formula = LangUse_4factor ~ childAge_years + total, data = LangUse_analyze)

Residuals:
     Min       1Q   Median       3Q      Max 
-15.9882  -5.1796  -0.5872   5.5589  15.3959 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)    24.13589    4.79551   5.033 3.59e-06 ***
childAge_years  0.52372    1.36050   0.385    0.701    
total           0.03487    0.01802   1.936    0.057 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.101 on 70 degrees of freedom
Multiple R-squared:  0.06112,   Adjusted R-squared:  0.0343 
F-statistic: 2.279 on 2 and 70 DF,  p-value: 0.11

Total vocabulary + age + surgency


Call:
lm(formula = LangUse_4factor ~ childAge_years + surgency_score + 
    total, data = LangUse_analyze)

Residuals:
    Min      1Q  Median      3Q     Max 
-15.945  -5.088  -0.675   5.539  15.423 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)   
(Intercept)    25.53452    7.94428   3.214   0.0020 **
childAge_years  0.49650    1.37742   0.360   0.7196   
surgency_score -0.18902    1.31971  -0.143   0.8865   
total           0.03251    0.01842   1.764   0.0821 . 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.168 on 68 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.05314,   Adjusted R-squared:  0.01137 
F-statistic: 1.272 on 3 and 68 DF,  p-value: 0.2909

Total vocabulary + age + surgency + parent ed


Call:
lm(formula = LangUse_4factor ~ childAge_years + surgency_score + 
    parentEd_centered + total, data = LangUse_analyze)

Residuals:
     Min       1Q   Median       3Q      Max 
-15.8423  -5.0746  -0.5968   5.2946  16.0468 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)   
(Intercept)       25.97131    8.12565   3.196  0.00213 **
childAge_years     0.34082    1.47809   0.231  0.81834   
surgency_score    -0.19078    1.32862  -0.144  0.88626   
parentEd_centered  0.30799    1.01225   0.304  0.76187   
total              0.03310    0.01865   1.775  0.08045 . 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.216 on 67 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.05445,   Adjusted R-squared:  -0.002002 
F-statistic: 0.9645 on 4 and 67 DF,  p-value: 0.4328

Predict vocab from language use and age


Call:
lm(formula = total ~ childAge_years + LangUse_4factor, data = LangUse_analyze)

Residuals:
     Min       1Q   Median       3Q      Max 
-104.872  -31.394    1.235   30.175   93.755 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
(Intercept)      51.7906    35.6395   1.453   0.1506  
childAge_years   17.2586     8.5581   2.017   0.0476 *
LangUse_4factor   1.4568     0.7527   1.936   0.0570 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 45.9 on 70 degrees of freedom
Multiple R-squared:  0.1108,    Adjusted R-squared:  0.08539 
F-statistic: 4.361 on 2 and 70 DF,  p-value: 0.01641

Individual correlations (language use vs. vocab category)


    Pearson's product-moment correlation

data:  LangUse_analyze$childAge_years and LangUse_analyze$total
t = 2.1887, df = 71, p-value = 0.03191
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.02265559 0.45515285
sample estimates:
      cor 
0.2514124 


    Pearson's product-moment correlation

data:  LangUse_analyze$childAge_years and LangUse_analyze$LangUse_4factor
t = 0.88357, df = 71, p-value = 0.3799
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.1288711  0.3265212
sample estimates:
      cor 
0.1042882 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$total
t = 2.1125, df = 71, p-value = 0.03816
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.01388879 0.44817217
sample estimates:
     cor 
0.243179 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$seed
t = 2.073, df = 71, p-value = 0.0418
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.009344621 0.444532853
sample estimates:
      cor 
0.2388983 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$control
t = 2.07, df = 71, p-value = 0.04209
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.008993928 0.444251393
sample estimates:
      cor 
0.2385676 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$surgency_score
t = -0.15788, df = 70, p-value = 0.875
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.2494449  0.2137361
sample estimates:
        cor 
-0.01886661 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$abstractConcepts
t = 2.3137, df = 71, p-value = 0.02358
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.03697461 0.46644137
sample estimates:
      cor 
0.2647894 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$actionWords
t = 2.2315, df = 71, p-value = 0.02881
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.02756213 0.45903669
sample estimates:
     cor 
0.256006 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$bodyParts
t = 2.0689, df = 71, p-value = 0.0422
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.00886688 0.44414941
sample estimates:
      cor 
0.2384477 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$clothing
t = 1.6664, df = 71, p-value = 0.1
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.03774066  0.40595827
sample estimates:
      cor 
0.1940112 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$descWords
t = 2.2388, df = 71, p-value = 0.02831
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.02839409 0.45969360
sample estimates:
      cor 
0.2567839 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$foodDrink
t = 1.2849, df = 71, p-value = 0.203
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.08217466  0.36804563
sample estimates:
      cor 
0.1507425 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$furniture
t = 1.2948, df = 71, p-value = 0.1996
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.08101511  0.36905439
sample estimates:
      cor 
0.1518831 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$games
t = 1.8656, df = 71, p-value = 0.06622
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.01461903  0.42510030
sample estimates:
      cor 
0.2161753 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$mentalStates
t = 1.8313, df = 71, p-value = 0.07125
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.01859971  0.42183254
sample estimates:
      cor 
0.2123764 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$numbers
t = 2.6613, df = 71, p-value = 0.00962
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.07639491 0.49681244
sample estimates:
      cor 
0.3011689 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$outsideThings
t = 2.5173, df = 71, p-value = 0.01409
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.06013736 0.48441047
sample estimates:
      cor 
0.2862443 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$people
t = 1.4837, df = 71, p-value = 0.1423
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.05900622  0.38800232
sample estimates:
      cor 
0.1734152 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$places
t = 2.2996, df = 71, p-value = 0.02442
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.03535614 0.46517241
sample estimates:
      cor 
0.2632818 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$preps
t = 1.5148, df = 71, p-value = 0.1343
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.05538278  0.39108601
sample estimates:
     cor 
0.176939 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$articles
t = 1.7318, df = 71, p-value = 0.08765
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.03014411  0.41229056
sample estimates:
      cor 
0.2013193 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$householdItems
t = 1.6389, df = 71, p-value = 0.1056
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.04093618  0.40328177
sample estimates:
      cor 
0.1909293 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$sounds
t = 1.6233, df = 71, p-value = 0.109
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.04275395  0.40175584
sample estimates:
      cor 
0.1891741 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$time
t = 2.2104, df = 71, p-value = 0.0303
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.02513627 0.45711853
sample estimates:
      cor 
0.2537362 


    Pearson's product-moment correlation

data:  LangUse_analyze$LangUse_4factor and LangUse_analyze$toys
t = 0.5223, df = 71, p-value = 0.6031
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.1706288  0.2878375
sample estimates:
       cor 
0.06186714 
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShzcGxpdHN0YWNrc2hhcGUpDQpsaWJyYXJ5KGdnYWx0KQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShjb3JycGxvdCkNCg0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9DQpMVU1fcmF3IDwtIHJlYWQuY3N2KCJMVU1fVGVtcGVyYW1lbnRfTlJTQS5jc3YiKSAlPiUgDQogIHJlbmFtZShwYXJlbnRFZD1XaGF0LmlzLnRoZS5oaWdoZXN0LmxldmVsLm9mLmVkdWNhdGlvbi55b3UuaGF2ZS5jb21wbGV0ZWQuLA0KICAgICAgICAgY2hpbGRHZW5kZXI9V2hhdC5pcy55b3VyLmNoaWxkLnMuZ2VuZGVyLiwNCiAgICAgICAgIGNoaWxkU2libGluZ3MgPSBIb3cubWFueS5zaWJsaW5ncy5kb2VzLnRoZS5jaGlsZC5oYXZlLiwNCiAgICAgICAgIGNoaWxkQmlydGhPcmRlcj1XaGF0LmlzLnRoZS5jaGlsZC5zLmJpcnRoLm9yZGVyLi4uMS5pZi50aGUub2xkZXN0Lm9yLm9ubHkuY2hpbGQuLjIuaWYudGhlLnNlY29uZC5vbGRlc3QuLmV0Yy4uLA0KICAgICAgICAgY2hpbGRET0I9UGxlYXNlLmVudGVyLnRoZS5iaXJ0aGRhdGUub2YueW91ci5jaGlsZC4uc28ud2Uua25vdy5leGFjdGx5Lmhvdy5vbGQudGhlLmNoaWxkLmlzLmF0LnRoZS50aW1lLnlvdS5jb21wbGV0ZWQudGhpcy5xdWVzdGlvbm5haXJlLi4ubW0uZGQueXl5eS4pDQoNCnZvY2FiX3NpemUgPC0gcmVhZC5jc3YoInByb2R1Y3RpdmVfdm9jYWIuY3N2IikNCg0Kdm9jYWJfY2F0ZWdvcmllcyA8LSByZWFkLmNzdigicHJvZHVjdGl2ZV92b2NhYl9ieV9jYXRlZ29yeS5jc3YiKQ0KDQpMVU1fZ3JpZHF1ZXN0aW9ucyA8LSBjKCJ3YW50c19sb29rIiwid2FudHNfcG9pbnQiLCJ3YW50c19sb29rTWUiLCJ3YW50c19wdWxsSGFuZCIsDQogICAgICAgICAgICAgICAgICAgICAgICJyb29tX2xvb2siLCJyb29tX3BvaW50Iiwicm9vbV9sb29rTWUiLCJyb29tX3B1bGxIYW5kIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIm5vdGljZV9sb29rIiwibm90aWNlX3BvaW50Iiwibm90aWNlX2xvb2tNZSIsIm5vdGljZV9KQSIsDQogICAgICAgICAgICAgICAgICAgICAgICJ0dXJuX2xvb2siLCJ0dXJuX3BvaW50IiwidHVybl90YWtlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgImJyb2tlbl9sb29rIiwiYnJva2VuX3BvaW50IiwiYnJva2VuX2xvb2tNZSIsImJyb2tlbl91aG9oIikNCg0KY29tYmluZWQxIDwtIGlubmVyX2pvaW4oTFVNX3Jhdywgdm9jYWJfc2l6ZSwgYnk9YygiRmlyc3ROYW1lIiwiRW1haWwiLCAiY2hpbGRHZW5kZXIiKSkgJT4lDQogIGlubmVyX2pvaW4odm9jYWJfY2F0ZWdvcmllcywgYnk9Yygic3ViakNvZGUiLCJGaXJzdE5hbWUiLCJFbWFpbCIsImNoaWxkR2VuZGVyIikpICU+JSANCiAgc2VsZWN0KC1BcmUueW91LnRoZS5jaGlsZC5zLi4sIC1Jcy50aGVyZS5hbnl0aGluZy5lbHNlLnlvdS5kLmxpa2UudG8udGVsbC51cy5hYm91dC55b3VyLmNoaWxkLiwgLVE5MSkgJT4lIA0KICBtdXRhdGUoY2hpbGRBZ2VfbW9udGhzID0gY2hpbGRBZ2VfZGF5cy8zMCkgJT4lIA0KICByZW5hbWUocmVhZFNlbGYgPSBXaGVuLm15LmNoaWxkLnJlYWRzLmJvb2tzLi50aGV5LnJlYWQub3V0LmxvdWQudG8udGhlbXNlbHZlcy4sDQogICAgICAgICByZWFkT3RoZXIgPSBXaGVuLm15LmNoaWxkLnJlYWRzLmJvb2tzLi50aGV5LnJlYWQub3V0LmxvdWQudG8ub3RoZXJzLiwNCiAgICAgICAgIG91dHNpZGUgPQlXaGVuLm15LmNoaWxkLnBsYXlzLm91dHNpZGUuLnRoZXkudGFsay50by50aGVtc2VsdmVzLmFzLnRoZXkucnVuLmFyb3VuZC4sDQogICAgICAgICB0dlNlbGYJPVdoZW4ubXkuY2hpbGQud2F0Y2hlcy5UVi4udGhleS50YWxrLnRvLnRoZW1zZWx2ZXMuLA0KICAgICAgICAgdHZUVgk9V2hlbi5teS5jaGlsZC53YXRjaGVzLlRWLi50aGV5LnRhbGsudG8udGhlLlRWLiwNCiAgICAgICAgIHRveXNFYWNoT3RoZXIgPSBXaGVuLm15LmNoaWxkLnBsYXlzLndpdGgudG95cy4udGhleS5oYXZlLnRoZS50b3lzLnRhbGsudG8uZWFjaC5vdGhlci4sDQogICAgICAgICB0b3lzVGFsa1RvCT1XaGVuLm15LmNoaWxkLnBsYXlzLndpdGgudG95cy4udGhleS50YWxrLnRvLnRoZS50b3lzLiwNCiAgICAgICAgIGFsb25lID1XaGVuLm15LmNoaWxkLnBsYXlzLmFsb25lLi50aGV5LnRhbGsudG8udGhlbXNlbHZlcy4sDQogICAgICAgICBkcmF3aW5nU2VsZiA9V2hlbi5teS5jaGlsZC5pcy5kcmF3aW5nLi50aGV5LnRhbGsuYWJvdXQudGhlLnBpY3R1cmUuYXMudGhleS5kcmF3Lml0LiwNCiAgICAgICAgIGJ1aWxkaW5nU2VsZgk9V2hlbi5teS5jaGlsZC5pcy5idWlsZGluZy5zb21ldGhpbmcuLmZvci5leGFtcGxlLi53aXRoLmJsb2Nrcy4uLnRoZXkubmFycmF0ZS50by50aGVtc2VsdmVzLndoYXQudGhleS5yZS5kb2luZy4sDQogICAgICAgICByZWd1bGF0aW9uU2VsZj1XaGVuLm15LmNoaWxkLmlzLnRyeWluZy50by5yZW1lbWJlci50by5mb2xsb3cuYS5ydWxlLi50aGV5LnNheS50aGUucnVsZS50by50aGVtc2VsdmVzLi5mb3IuZXhhbXBsZS4uLnVzZS55b3VyLndhbGtpbmcuZmVldC4ud2hlbi50cnlpbmcubm90LnRvLnJ1bi5pbmRvb3JzLi4sCQ0KICAgICAgICAgc2xlZXBTZWxmCT1XaGVuLm15LmNoaWxkLmlzLmZhbGxpbmcuYXNsZWVwLi50aGV5LnRhbGsudG8udGhlbXNlbHZlcy4sDQogICAgICAgICBqb2tlRnJlcQk9IE15LmNoaWxkLnRlbGxzLmpva2VzLi4uc3RydWN0dXJlLmh1bW9yLmRvZXNuLnQubWF0dGVyLiwNCiAgICAgICAgIHN0b3J5RnJlcT0JTXkuY2hpbGQudGVsbHMuc3Rvcmllcy4uLnN0cnVjdHVyZS5kb2Vzbi50Lm1hdHRlci4sDQogICAgICAgICBwYXN0RnJlcQk9TXkuY2hpbGQudGFsa3MuYWJvdXQucGFzdC5ldmVudHMuLA0KICAgICAgICAgYWJzZW50UGVvcGxlRnJlcQk9TXkuY2hpbGQudGFsa3MuYWJvdXQucGVvcGxlLndoby5hcmUubm90LnByZXNlbnQuLA0KICAgICAgICAgYWJzZW50T2JqRnJlcQk9TXkuY2hpbGQudGFsa3MuYWJvdXQub2JqZWN0cy50aGF0LmFyZS5ub3QucHJlc2VudC4sDQogICAgICAgICBmdXR1cmVGcmVxCT1NeS5jaGlsZC50YWxrcy5hYm91dC50aGluZ3MudGhhdC53aWxsLmhhcHBlbi5pbi50aGUuZnV0dXJlLi5mb3IuZXhhbXBsZS4uYW4udXBjb21pbmcuYmlydGhkYXkucGFydHkub3IudHJpcC50by50aGUuYmVhY2guLiwNCiAgICAgICAgIHNpbmdGcmVxCT1NeS5jaGlsZC5zaW5ncy5tYWRlLnVwLnNvbmdzLnRvLnRoZW1zZWx2ZXMuLA0KICAgICAgICAgbmV3V29yZEZyZXEJPU15LmNoaWxkLmludmVudHMubmV3LndvcmRzLiwNCiAgICAgICAgIHJlcGVhdFJoeW1lRnJlcT1NeS5jaGlsZC5yZXBlYXRzLnJoeW1lcy5pbi5wb2Vtcy5vci5zb25ncy4pICU+JSANCiAgbXV0YXRlKFN1cmdlbmN5X3F1aWV0X3JlY29kZWQgPSA4IC0gU3VyZ2VuY3lfcl9xdWlldCwNCiAgICAgICAgIFN1cmdlbmN5X3Nsb3dBcHByb2FjaF9yZWNvZGVkID0gOCAtIFN1cmdlbmN5X3Jfc2xvd0FwcHJvYWNoLA0KICAgICAgICAgU3VyZ2VuY3lfc2h5RmFtaWxpYXJfcmVjb2RlZCA9IDggLSBTdXJnZW5jeV9yX3NoeUZhbWlsaWFyLA0KICAgICAgICAgU3VyZ2VuY3lfdW5odXJyaWVkX3JlY29kZWQgPSA4IC0gU3VyZ2VuY3lfcl91bmh1cnJpZWQsDQogICAgICAgICBTdXJnZW5jeV9zaHlOZXdfcmVjb2RlZCA9IDggLSBTdXJnZW5jeV9yX3NoeU5ldykgJT4lIA0KICBtdXRhdGUoc3VyZ2VuY3lfc2NvcmUgPSAoU3VyZ2VuY3lfaHVycnkrU3VyZ2VuY3lfc2xpZGVzK1N1cmdlbmN5X3J1c2hTaXR1YXRpb24rU3VyZ2VuY3lfZWFzZStTdXJnZW5jeV9zd2luZytTdXJnZW5jeV9lbmVyZ3krDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VyZ2VuY3lfcm93ZHkrU3VyZ2VuY3lfcXVpZXRfcmVjb2RlZCtTdXJnZW5jeV9zbG93QXBwcm9hY2hfcmVjb2RlZCtTdXJnZW5jeV9zaHlGYW1pbGlhcl9yZWNvZGVkKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cmdlbmN5X3VuaHVycmllZF9yZWNvZGVkK1N1cmdlbmN5X3NoeU5ld19yZWNvZGVkKS8xMikNCg0Kc3VyZ2VuY3lfdmFycyA8LSBjKCJTdXJnZW5jeV9odXJyeSIsIlN1cmdlbmN5X3NsaWRlcyIsIlN1cmdlbmN5X3J1c2hTaXR1YXRpb24iLCJTdXJnZW5jeV9lYXNlIiwiU3VyZ2VuY3lfc3dpbmciLCJTdXJnZW5jeV9lbmVyZ3kiLA0KICAgICAgICAgICAgICAgICAgICJTdXJnZW5jeV9yb3dkeSIsIlN1cmdlbmN5X3F1aWV0X3JlY29kZWQiLCJTdXJnZW5jeV9zbG93QXBwcm9hY2hfcmVjb2RlZCIsIlN1cmdlbmN5X3NoeUZhbWlsaWFyX3JlY29kZWQiLA0KICAgICAgICAgICAgICAgICAgICJTdXJnZW5jeV91bmh1cnJpZWRfcmVjb2RlZCIsIlN1cmdlbmN5X3NoeU5ld19yZWNvZGVkIiwiU3VyZ2VuY3lfcl9zbG93QXBwcm9hY2giLCJTdXJnZW5jeV9yX3NoeUZhbWlsaWFyIiwNCiAgICAgICAgICAgICAgICAgICAiU3VyZ2VuY3lfcl91bmh1cnJpZWQiLCJTdXJnZW5jeV9yX3NoeU5ldyIsIlN1cmdlbmN5X3JfcXVpZXQiKQ0KDQpjb21iaW5lZF9jbGVhbiA8LSBjb21iaW5lZDEgJT4lIA0KICBzZWxlY3QoLUxVTV9ncmlkcXVlc3Rpb25zLCAtc3VyZ2VuY3lfdmFycywtUmVjb3JkZWREYXRlLCAtRmlyc3ROYW1lLCAtRW1haWwsIC1jaGlsZEJpcnRoT3JkZXIsIC1jaGlsZERPQiwgLVBhcmVudEFnZSkNCmBgYA0KDQojIyBFRkENCmBgYHtyfQ0KTFVNX0VGQSA8LSBjb21iaW5lZF9jbGVhbiAlPiUgDQogIHNlbGVjdCgtY2hpbGRHZW5kZXIsIC1jaGlsZEFnZV9kYXlzLCAtc3ViakNvZGUsIC10b3RhbCwgLXNlZWQsIC1jb250cm9sLCAtY2hpbGRBZ2VfbW9udGhzLCAtc3VyZ2VuY3lfc2NvcmUsIC1wYXJlbnRFZCwgLWNoaWxkU2libGluZ3MsIC1YLCAtc3ViakNvZGUsIC1hYnN0cmFjdENvbmNlcHRzLCAtYWN0aW9uV29yZHMsIC1ib2R5UGFydHMsIC1jbG90aGluZywgLWRlc2NXb3JkcywgLWZvb2REcmluaywgLWZ1cm5pdHVyZSwgLWdhbWVzLA0KICAgICAgICAgLW1lbnRhbFN0YXRlcywgLW51bWJlcnMsIC1vdXRzaWRlVGhpbmdzLCAtcGVvcGxlLCAtcGxhY2VzLCAtcHJlcHMsIC1hcnRpY2xlcywgLWhvdXNlaG9sZEl0ZW1zLCAtc291bmRzLCAtdG95cywgLXRpbWUsDQogICAgICAgICAtb3RoZXIsIC1jaGlsZEFnZV9tb250aHMsIC1zdXJnZW5jeV9zY29yZSkNCg0KTFVNX2ZvckNvcnIgPC0gTFVNX0VGQVtjb21wbGV0ZS5jYXNlcyhMVU1fRUZBKSxdDQoNCnBsdW1fY29yIDwtIGNvcihMVU1fZm9yQ29ycikNCg0KZmExIDwtIGZhKHIgPSBwbHVtX2NvciwgbmZhY3RvcnM9NCkNCmZhMQ0KDQpwYXJhbGxlbCA8LSBmYS5wYXJhbGxlbChMVU1fZm9yQ29yciwgZmE9J2ZhJykNCiNzdWdnZXN0cyB1c2luZyA1IGZhY3RvcnM7IDQgd291bGQgYmUgb2sgZnJvbSBzY3JlZSBwbG90DQpgYGANCg0KIyMgUENBDQpgYGB7cn0NCnBjYV9maXJzdCA8LSBwcmNvbXAoTFVNX2ZvckNvcnIpDQpzdW1tYXJ5KHBjYV9maXJzdCkNCg0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KI21ha2UgZGY7IGhhZCBpbmNsdWRlZCB0aGVzZSB2YXJzIGJ1dCBkb24ndCB3YW50IHJpZ2h0IG5vdzogDQojIE1SNF80ZmFjdG9yX3N1bSA9IHJlZ3VsYXRpb25TZWxmK3R2VFYrYnVpbGRpbmdTZWxmK3R2U2VsZit0b3lzVGFsa1RvK3NsZWVwU2VsZithbG9uZStuZXdXb3JkRnJlcStvdXRzaWRlLA0KIyBNUjFfNGZhY3Rvcl9zdW0gPSByZWFkT3RoZXIrcmVhZFNlbGYrcmVwZWF0Umh5bWVGcmVxK2RyYXdpbmdTZWxmK3R2VFYrdG95c0VhY2hPdGhlcitidWlsZGluZ1NlbGYNCg0KI0xhbmdVc2UgaXMgbWlzc2luZyByZWFkU2VsZiBiZWNhdXNlIGxvYWRpbmcgd2FzIDwuMw0KTGFuZ1VzZV9hbmFseXplIDwtIGNvbWJpbmVkX2NsZWFuICU+JSANCiAgbXV0YXRlKExhbmdVc2VfNGZhY3RvciA9IHRveXNUYWxrVG8rdHZTZWxmK3R2VFYrb3V0c2lkZStidWlsZGluZ1NlbGYrYWxvbmUrc2xlZXBTZWxmK3JlZ3VsYXRpb25TZWxmK3JlYWRPdGhlcit0b3lzRWFjaE90aGVyK2RyYXdpbmdTZWxmLA0KICAgICAgICAgTGFuZ1VzZV9hbGwgPSBzZWxlY3QoLiwgcmVhZFNlbGY6YnJva2VuX2FzaykgJT4lIHJvd1N1bXMobmEucm09VFJVRSksDQogICAgICAgICBjaGlsZEFnZV95ZWFycyA9IGNoaWxkQWdlX21vbnRocy8xMikgJT4lIA0KICBmaWx0ZXIoY2hpbGRBZ2VfeWVhcnMgPCA0LjUgJiBjaGlsZEFnZV95ZWFycz4yICYgdG90YWwgPjUwKQ0KYGBgDQojIyBWaXN1YWxpemF0aW9ucyB7LnRhYnNldH0NCiMjIyBhZ2UgdnMuIHZvY2FiIChhbGwpDQpgYGB7cn0NCmdncGxvdChMYW5nVXNlX2FuYWx5emUsIGFlcyh0b3RhbCxjaGlsZEFnZV95ZWFycykpKw0KICBnZW9tX3BvaW50KHNpemU9MykrDQogIHlsYWIoIkNoaWxkIEFnZSIpICsgeGxhYigiVm9jYWJ1bGFyeSIpKw0KICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIikgKw0KICB0aGVtZV9jbGFzc2ljKCkNCg0KI2Jhc2Vfc2l6ZT0zMA0KYGBgDQojIyMgYWdlIHZzLiBzZWVkIHZvY2FiDQpgYGB7cn0NCmdncGxvdChMYW5nVXNlX2FuYWx5emUsIGFlcyhzZWVkLGNoaWxkQWdlX3llYXJzKSkrDQogIGdlb21fcG9pbnQoc2l6ZT0zKSsNCiAgeWxhYigiQ2hpbGQgQWdlIikgKyB4bGFiKCJTZWVkIFZvY2FidWxhcnkiKSsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIpKw0KICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KIyMjIGFnZSB2cy4gY29udHJvbCB2b2NhYg0KYGBge3J9DQpnZ3Bsb3QoTGFuZ1VzZV9hbmFseXplLCBhZXMoY29udHJvbCxjaGlsZEFnZV95ZWFycykpKw0KICBnZW9tX3BvaW50KHNpemU9MykrDQogIHlsYWIoIkNoaWxkIEFnZSIpICsgeGxhYigiQ29udHJvbCBWb2NhYnVsYXJ5IikrDQogIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iKSsNCiAgdGhlbWVfY2xhc3NpYygpDQpgYGANCg0KIyMjIGxhbmd1YWdlIHVzZSB2cy4gc2VlZCB2b2NhYg0KYGBge3J9DQpnZ3Bsb3QoTGFuZ1VzZV9hbmFseXplLCBhZXMoTGFuZ1VzZV80ZmFjdG9yLHNlZWQpKSsNCiAgZ2VvbV9wb2ludChzaXplPTMpKw0KICB4bGFiKCJMYW5ndWFnZSBVc2UiKSArIHlsYWIoIlNlZWQgVm9jYWJ1bGFyeSIpKw0KICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIikrDQogIHRoZW1lX2NsYXNzaWMoKQ0KYGBgDQoNCiMjIyBsYW5ndWFnZSB1c2UgdnMuIHRvdGFsIHZvY2FiDQpgYGB7cn0NCmdncGxvdChMYW5nVXNlX2FuYWx5emUsIGFlcyhMYW5nVXNlXzRmYWN0b3IsdG90YWwpKSsNCiAgZ2VvbV9wb2ludChzaXplPTMpKw0KICB4bGFiKCJMYW5ndWFnZSBVc2UiKSArIHlsYWIoIlZvY2FidWxhcnkiKSsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIpKw0KICB0aGVtZV9jbGFzc2ljKCkgIA0KYGBgDQoNCiMjIyBsYW5ndWFnZSB1c2UgdnMuIGFnZQ0KYGBge3J9DQpnZ3Bsb3QoTGFuZ1VzZV9hbmFseXplLCBhZXMoTGFuZ1VzZV80ZmFjdG9yLGNoaWxkQWdlX3llYXJzKSkrDQogIGdlb21fcG9pbnQoc2l6ZT0zKSsNCiAgeGxhYigiTGFuZ3VhZ2UgVXNlIikgKyB5bGFiKCJDaGlsZCBBZ2UiKSsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIpKw0KICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQojIyBDb3JyZWxhdGlvbiB0YWJsZSBvZiB2b2NhYiBieSBjYXRlZ29yeQ0KYGBge3J9DQpsYW5ndWFnZV91c2VfY29ycnMgPC0gc2VsZWN0KExhbmdVc2VfYW5hbHl6ZSwgYWJzdHJhY3RDb25jZXB0cywgYWN0aW9uV29yZHMsIGJvZHlQYXJ0cywgY2xvdGhpbmcsIGRlc2NXb3JkcywgZm9vZERyaW5rLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXJuaXR1cmUsIGdhbWVzLCBtZW50YWxTdGF0ZXMsIG51bWJlcnMsIG91dHNpZGVUaGluZ3MsIHBlb3BsZSwgcGxhY2VzLCBwcmVwcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJ0aWNsZXMsIHNvdW5kcywgdGltZSwgaG91c2Vob2xkSXRlbXMsIHRveXMsIHRvdGFsLCBzdXJnZW5jeV9zY29yZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ1VzZV80ZmFjdG9yLCBMYW5nVXNlX2FsbCwgY2hpbGRBZ2VfeWVhcnMpICU+JSANCiAgY29yKHVzZT0icGFpcndpc2UuY29tcGxldGUub2JzIiwgbWV0aG9kPSJwZWFyc29uIikNCnAubWF0X2NoaWxkIDwtIGNvci5tdGVzdChsYW5ndWFnZV91c2VfY29ycnMpDQpwTWF0cml4X2NoaWxkIDwtIHAubWF0X2NoaWxkJHANCg0KY29ycnBsb3QobGFuZ3VhZ2VfdXNlX2NvcnJzLCBtZXRob2QgPSAnY29sb3InLCB0eXBlPSdsb3dlcicsIGRpYWcgPSBGQUxTRSwgYWRkQ29lZi5jb2wgPSAiYmxhY2siLA0KICAgICAgICAgdGwuY29sID0gImJsYWNrIiwgbnVtYmVyLmZvbnQ9MiwgbnVtYmVyLmNleD0uNSwgcC5tYXQ9cE1hdHJpeF9jaGlsZCwgc2lnLmxldmVsID0gMC4wNSwgaW5zaWcgPSAiYmxhbmsiKQ0KYGBgDQoNCmBgYHtyfQ0KIyMjIGNlbnRlcmluZyBmdW5jdGlvbg0KbXlDZW50ZXI9IGZ1bmN0aW9uKHgpIHsNCiAgaWYgKGlzLm51bWVyaWMoeCkpIHsgcmV0dXJuKHggLSBtZWFuKHgsIG5hLnJtPVQpKSB9DQogIGlmIChpcy5mYWN0b3IoeCkpIHsNCiAgICB4PSBhcy5udW1lcmljKHgpDQogICAgcmV0dXJuKHggLSBtZWFuKHgsIG5hLnJtPVQpKQ0KICB9DQogIGlmIChpcy5kYXRhLmZyYW1lKHgpIHx8IGlzLm1hdHJpeCh4KSkgew0KICAgIG09IG1hdHJpeChucm93PW5yb3coeCksIG5jb2w9bmNvbCh4KSkNCiAgICBjb2xuYW1lcyhtKT0gcGFzdGUoImMiLCBjb2xuYW1lcyh4KSwgc2VwPSIiKQ0KICAgIGZvciAoaSBpbiAxOm5jb2woeCkpIHsNCiAgICAgIG1bLGldPSBteUNlbnRlcih4WyxpXSkNCiAgICB9DQogICAgcmV0dXJuKGFzLmRhdGEuZnJhbWUobSkpDQogIH0NCn0NCg0KTGFuZ1VzZV9hbmFseXplJHBhcmVudEVkX2NlbnRlcmVkIDwtIG15Q2VudGVyKExhbmdVc2VfYW5hbHl6ZSRwYXJlbnRFZCkNCmBgYA0KDQojIyBSZWdyZXNzaW9uIG1vZGVscyB0byBwcmVkaWN0IGxhbmd1YWdlIHVzZSB7LnRhYnNldH0NCiMjIyBBZ2UNCmBgYHtyfQ0KI0FnZSBkb2Vzbid0IHByZWRpY3QgbGFuZ3VhZ2UgdXNlDQptb2RBZ2UgPC0gbG0oTGFuZ1VzZV80ZmFjdG9yIH4gY2hpbGRBZ2VfeWVhcnMsIExhbmdVc2VfYW5hbHl6ZSkNCnN1bW1hcnkobW9kQWdlKQ0KYGBgDQoNCiMjIyBTZWVkIGFuZCBjb250cm9sIHdvcmQga25vd2xlZGdlDQpgYGB7cn0NCm1vZENvbnRyb2wgPC0gbG0oTGFuZ1VzZV80ZmFjdG9yIH4gY29udHJvbCwgTGFuZ1VzZV9hbmFseXplKQ0Kc3VtbWFyeShtb2RDb250cm9sKQ0KbW9kU2VlZCA8LSBsbShMYW5nVXNlXzRmYWN0b3IgfiBzZWVkLCBMYW5nVXNlX2FuYWx5emUpDQpzdW1tYXJ5KG1vZFNlZWQpDQpgYGANCg0KIyMjIFRvdGFsIHZvY2FidWxhcnkNCmBgYHtyfQ0KbW9kVm9jYWJPbmx5IDwtIGxtKExhbmdVc2VfNGZhY3RvciB+IHRvdGFsLCBMYW5nVXNlX2FuYWx5emUpDQpzdW1tYXJ5KG1vZFZvY2FiT25seSkNCmBgYA0KDQojIyMgVG90YWwgdm9jYWJ1bGFyeSArIGFnZQ0KYGBge3J9DQojVG90YWwgaHlwZXJueW1zIHZvY2FiIGRvZXMgcHJlZGljdCBsYW5ndWFnZSB1c2UgKHAgPSAuMDU3KQ0KbW9kVG90YWwgPC0gbG0oTGFuZ1VzZV80ZmFjdG9yIH4gY2hpbGRBZ2VfeWVhcnMgKyB0b3RhbCwgTGFuZ1VzZV9hbmFseXplKQ0Kc3VtbWFyeShtb2RUb3RhbCkNCmBgYA0KDQojIyMgVG90YWwgdm9jYWJ1bGFyeSArIGFnZSArIHN1cmdlbmN5DQpgYGB7cn0NCm1vZEZ1bGwgPC0gbG0oTGFuZ1VzZV80ZmFjdG9yIH4gY2hpbGRBZ2VfeWVhcnMgKyBzdXJnZW5jeV9zY29yZSArIHRvdGFsLCBMYW5nVXNlX2FuYWx5emUpDQpzdW1tYXJ5KG1vZEZ1bGwpDQpgYGANCg0KIyMjIFRvdGFsIHZvY2FidWxhcnkgKyBhZ2UgKyBzdXJnZW5jeSArIHBhcmVudCBlZA0KYGBge3J9DQptb2RFZCA8LSBsbShMYW5nVXNlXzRmYWN0b3IgfiBjaGlsZEFnZV95ZWFycyArIHN1cmdlbmN5X3Njb3JlICsgcGFyZW50RWRfY2VudGVyZWQgKyB0b3RhbCwgTGFuZ1VzZV9hbmFseXplKQ0Kc3VtbWFyeShtb2RFZCkNCmBgYA0KIyMjIFByZWRpY3Qgdm9jYWIgZnJvbSBsYW5ndWFnZSB1c2UgYW5kIGFnZQ0KYGBge3J9DQpwcmVkaWN0Vm9jYWIgPC0gbG0odG90YWwgfiBjaGlsZEFnZV95ZWFycyArIExhbmdVc2VfNGZhY3RvciwgTGFuZ1VzZV9hbmFseXplKQ0Kc3VtbWFyeShwcmVkaWN0Vm9jYWIpDQoNCmBgYA0KDQoNCiMjIEluZGl2aWR1YWwgY29ycmVsYXRpb25zIChsYW5ndWFnZSB1c2UgdnMuIHZvY2FiIGNhdGVnb3J5KQ0KYGBge3J9DQpjb3IudGVzdChMYW5nVXNlX2FuYWx5emUkY2hpbGRBZ2VfeWVhcnMsTGFuZ1VzZV9hbmFseXplJHRvdGFsLCBtZXRob2Q9InBlYXJzb24iKSAgICAgICAgICAgICAgICNzaWduaWZpY2FudA0KY29yLnRlc3QoTGFuZ1VzZV9hbmFseXplJGNoaWxkQWdlX3llYXJzLExhbmdVc2VfYW5hbHl6ZSRMYW5nVXNlXzRmYWN0b3IsIG1ldGhvZD0icGVhcnNvbiIsIG5hLnJtPVRSVUUpICAjbnMNCmNvci50ZXN0KExhbmdVc2VfYW5hbHl6ZSRMYW5nVXNlXzRmYWN0b3IsTGFuZ1VzZV9hbmFseXplJHRvdGFsLCBtZXRob2Q9InBlYXJzb24iKSAgICAgICAgICAgICAgI3NpZ25pZmljYW50DQpjb3IudGVzdChMYW5nVXNlX2FuYWx5emUkTGFuZ1VzZV80ZmFjdG9yLExhbmdVc2VfYW5hbHl6ZSRzZWVkLCBtZXRob2Q9InBlYXJzb24iKSAgICAgICAgICAgICAgICNzaWduaWZpY2FudA0KY29yLnRlc3QoTGFuZ1VzZV9hbmFseXplJExhbmdVc2VfNGZhY3RvcixMYW5nVXNlX2FuYWx5emUkY29udHJvbCwgbWV0aG9kPSJwZWFyc29uIikgICAgICAgICAgICAjc2lnbmlmaWNhbnQNCmNvci50ZXN0KExhbmdVc2VfYW5hbHl6ZSRMYW5nVXNlXzRmYWN0b3IsIExhbmdVc2VfYW5hbHl6ZSRzdXJnZW5jeV9zY29yZSwgbWV0aG9kPSJwZWFyc29uIikgICAgI25zDQpjb3IudGVzdChMYW5nVXNlX2FuYWx5emUkTGFuZ1VzZV80ZmFjdG9yLCBMYW5nVXNlX2FuYWx5emUkYWJzdHJhY3RDb25jZXB0cywgbWV0aG9kPSJwZWFyc29uIikgICNzaWduaWZpY2FudA0KY29yLnRlc3QoTGFuZ1VzZV9hbmFseXplJExhbmdVc2VfNGZhY3RvciwgTGFuZ1VzZV9hbmFseXplJGFjdGlvbldvcmRzLCBtZXRob2Q9InBlYXJzb24iKSAgICAgICAjc2lnbmlmaWNhbnQNCmNvci50ZXN0KExhbmdVc2VfYW5hbHl6ZSRMYW5nVXNlXzRmYWN0b3IsIExhbmdVc2VfYW5hbHl6ZSRib2R5UGFydHMsIG1ldGhvZD0icGVhcnNvbiIpICAgICAgICAgI3NpZ25pZmljYW50DQpjb3IudGVzdChMYW5nVXNlX2FuYWx5emUkTGFuZ1VzZV80ZmFjdG9yLCBMYW5nVXNlX2FuYWx5emUkY2xvdGhpbmcsIG1ldGhvZD0icGVhcnNvbiIpICAgICAgICAgICNucw0KY29yLnRlc3QoTGFuZ1VzZV9hbmFseXplJExhbmdVc2VfNGZhY3RvciwgTGFuZ1VzZV9hbmFseXplJGRlc2NXb3JkcywgbWV0aG9kPSJwZWFyc29uIikgICAgICAgICAjc2lnbmlmaWNhbnQNCmNvci50ZXN0KExhbmdVc2VfYW5hbHl6ZSRMYW5nVXNlXzRmYWN0b3IsIExhbmdVc2VfYW5hbHl6ZSRmb29kRHJpbmssIG1ldGhvZD0icGVhcnNvbiIpICAgICAgICAgI25zDQpjb3IudGVzdChMYW5nVXNlX2FuYWx5emUkTGFuZ1VzZV80ZmFjdG9yLCBMYW5nVXNlX2FuYWx5emUkZnVybml0dXJlLCBtZXRob2Q9InBlYXJzb24iKSAgICAgICAgICNucw0KY29yLnRlc3QoTGFuZ1VzZV9hbmFseXplJExhbmdVc2VfNGZhY3RvciwgTGFuZ1VzZV9hbmFseXplJGdhbWVzLCBtZXRob2Q9InBlYXJzb24iKSAgICAgICAgICAgICAjbnMNCmNvci50ZXN0KExhbmdVc2VfYW5hbHl6ZSRMYW5nVXNlXzRmYWN0b3IsIExhbmdVc2VfYW5hbHl6ZSRtZW50YWxTdGF0ZXMsIG1ldGhvZD0icGVhcnNvbiIpICAgICAgI25zDQpjb3IudGVzdChMYW5nVXNlX2FuYWx5emUkTGFuZ1VzZV80ZmFjdG9yLCBMYW5nVXNlX2FuYWx5emUkbnVtYmVycywgbWV0aG9kPSJwZWFyc29uIikgICAgICAgICAgICNzaWduaWZpY2FudA0KY29yLnRlc3QoTGFuZ1VzZV9hbmFseXplJExhbmdVc2VfNGZhY3RvciwgTGFuZ1VzZV9hbmFseXplJG91dHNpZGVUaGluZ3MsIG1ldGhvZD0icGVhcnNvbiIpICAgICAjc2lnbmlmaWNhbnQNCmNvci50ZXN0KExhbmdVc2VfYW5hbHl6ZSRMYW5nVXNlXzRmYWN0b3IsIExhbmdVc2VfYW5hbHl6ZSRwZW9wbGUsIG1ldGhvZD0icGVhcnNvbiIpICAgICAgICAgICAgI25zDQpjb3IudGVzdChMYW5nVXNlX2FuYWx5emUkTGFuZ1VzZV80ZmFjdG9yLCBMYW5nVXNlX2FuYWx5emUkcGxhY2VzLCBtZXRob2Q9InBlYXJzb24iKSAgICAgICAgICAgICNzaWduaWZpY2FudA0KY29yLnRlc3QoTGFuZ1VzZV9hbmFseXplJExhbmdVc2VfNGZhY3RvciwgTGFuZ1VzZV9hbmFseXplJHByZXBzLCBtZXRob2Q9InBlYXJzb24iKSAgICAgICAgICAgICAjbnMNCmNvci50ZXN0KExhbmdVc2VfYW5hbHl6ZSRMYW5nVXNlXzRmYWN0b3IsIExhbmdVc2VfYW5hbHl6ZSRhcnRpY2xlcywgbWV0aG9kPSJwZWFyc29uIikgICAgICAgICAgI25zDQpjb3IudGVzdChMYW5nVXNlX2FuYWx5emUkTGFuZ1VzZV80ZmFjdG9yLCBMYW5nVXNlX2FuYWx5emUkaG91c2Vob2xkSXRlbXMsIG1ldGhvZD0icGVhcnNvbiIpICAgICNucw0KY29yLnRlc3QoTGFuZ1VzZV9hbmFseXplJExhbmdVc2VfNGZhY3RvciwgTGFuZ1VzZV9hbmFseXplJHNvdW5kcywgbWV0aG9kPSJwZWFyc29uIikgICAgICAgICAgICAjbnMNCmNvci50ZXN0KExhbmdVc2VfYW5hbHl6ZSRMYW5nVXNlXzRmYWN0b3IsIExhbmdVc2VfYW5hbHl6ZSR0aW1lLCBtZXRob2Q9InBlYXJzb24iKSAgICAgICAgICAgICAgI3NpZ25pZmljYW50DQpjb3IudGVzdChMYW5nVXNlX2FuYWx5emUkTGFuZ1VzZV80ZmFjdG9yLCBMYW5nVXNlX2FuYWx5emUkdG95cywgbWV0aG9kPSJwZWFyc29uIikgICAgICAgICAgICAgICNucw0KDQpgYGANCg0KPCEtLSAjIE1vcmUgcGxvdHMgZm9yIHByb3Bvc2FsIC0tPg0KPCEtLSBgYGB7cn0gLS0+DQo8IS0tIGdncGxvdChmaWx0ZXIoTGFuZ1VzZV9hbmFseXplLCBjaGlsZEFnZTw0LjUpLCBhZXMoc2xlZXBTZWxmKSkrIC0tPg0KPCEtLSAgIGdlb21fYmFyKCkrIC0tPg0KPCEtLSAgIHlsYWIoIk51bWJlciBvZiBSZXNwb25zZXMiKSArIHhsYWIoIidNeSBjaGlsZCB0YWxrcyB0byB0aGVtc2VsdmVzIGFzIHRoZXkncmUgZmFsbGluZyBhc2xlZXAuJyIpKyAtLT4NCjwhLS0gICB0aGVtZV9jbGFzc2ljKCkrIC0tPg0KPCEtLSAgIGNvb3JkX2NhcnRlc2lhbih5bGltPWMoMCwxMCkpKyAtLT4NCjwhLS0gICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPXNlcSgwLDEwLDEpKSsgLS0+DQo8IS0tICAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1zZXEoMSw1LDEpLCBsYWJlbHM9YygiTmV2ZXIiLCJTb21ldGltZXMiLCJBYm91dCBoYWxmIHRoZSB0aW1lIiwiTW9zdCBvZiB0aGUgdGltZSIsIkFsd2F5cyIpKSAtLT4NCg0KPCEtLSAjaW1wb3J0IGZha2UgZGF0YSBmb3Igc2NoZW1hdGljIC0tPg0KPCEtLSBmYWtlIDwtIHJlYWQuY3N2KCJmYWtlZGF0YV9zY2hlbWF0aWMuY3N2IikgLS0+DQo8IS0tIGdncGxvdChmYWtlLCBhZXMoVm9jYWJ1bGFyeS5TaXplLCBMYW5ndWFnZS5Vc2UsIGNvbG9yPUNoaWxkKSkrIC0tPg0KPCEtLSAgIHlsYWIoIkxhbmd1YWdlIFVzZSIpICsgeGxhYigiVm9jYWJ1bGFyeSBTaXplIikrIC0tPg0KPCEtLSAgIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iLCBzZT1GQUxTRSwgc2l6ZT0yKSsgLS0+DQo8IS0tICAgY29vcmRfY2FydGVzaWFuKHlsaW09YygwLDUwKSkrIC0tPg0KPCEtLSAgIHRoZW1lX2NsYXNzaWMoYmFzZV9zaXplPTMwKSAtLT4NCg0KDQo8IS0tIGdncGxvdChMYW5nVXNlX2FuYWx5emUsIGFlcyhMYW5nVXNlXzRmYWN0b3IsY2hpbGRBZ2VfeWVhcnMpKSsgLS0+DQo8IS0tICAgZ2VvbV9wb2ludChzaXplPTMpKyAtLT4NCjwhLS0gICB4bGFiKCJMYW5ndWFnZSBVc2UiKSArIHlsYWIoIkNoaWxkIEFnZSIpKyAtLT4NCjwhLS0gICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIikrIC0tPg0KPCEtLSAgIHRoZW1lX2NsYXNzaWMoYmFzZV9zaXplPTMwKSAtLT4NCjwhLS0gYGBgIC0tPg0K