This document forms the analysis for:

Preliminary analysis

Demographics

# Age by Gender
psychopathy_df %>% group_by(GENDER) %>% summarise_at(vars(AGE, RELATIONSHIP_MONTHS), list(mean = mean, sd = sd), na.rm = TRUE)

# Sexual Orien by Gender
#psychopathy_df %>% group_by(GENDER) %>% count(SEXUAL_PREF)
psychopathy_df %>% group_by(GENDER, SEXUAL_PREF) %>% summarise(n = n()) %>% mutate(percentage = n / 85 * 100)
`summarise()` has grouped output by 'GENDER'. You can override using the `.groups` argument.
# Education by Gender
#psychopathy_df %>% group_by(GENDER) %>% count(EDUCATION)
psychopathy_df %>% group_by(GENDER, EDUCATION) %>% summarise(n = n()) %>% mutate(percentage = n / 85 * 100)
`summarise()` has grouped output by 'GENDER'. You can override using the `.groups` argument.
# Relationship by Gender
#psychopathy_df %>% group_by(GENDER) %>% count(RELATIONSHIP)
psychopathy_df %>% group_by(GENDER, RELATIONSHIP) %>% summarise(n = n()) %>% mutate(percentage = n / 85 * 100)
`summarise()` has grouped output by 'GENDER'. You can override using the `.groups` argument.
# Employment by Gender
#psychopathy_df %>% group_by(GENDER) %>% count(EMPLOYMENT)
psychopathy_df %>% group_by(GENDER, EMPLOYMENT) %>% summarise(n = n()) %>% mutate(percentage = n / 85 * 100)
`summarise()` has grouped output by 'GENDER'. You can override using the `.groups` argument.
# SES by Gender
# psychopathy_df %>% group_by(GENDER) %>% count(SES)
psychopathy_df %>% group_by(GENDER, SES) %>% summarise(n = n()) %>% mutate(percentage = n / 85 * 100)
`summarise()` has grouped output by 'GENDER'. You can override using the `.groups` argument.
# comparisons

t.test(AGE ~ GENDER, psychopathy_df, var.equal = TRUE) # no difference

    Two Sample t-test

data:  AGE by GENDER
t = -1.2146, df = 168, p-value = 0.2262
alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
95 percent confidence interval:
 -3.0269146  0.7210323
sample estimates:
mean in group Female   mean in group Male 
            22.87059             24.02353 
cohen.d(psychopathy_df$AGE, psychopathy_df$GENDER)

Cohen's d

d estimate: -0.1863104 (negligible)
95 percent confidence interval:
     lower      upper 
-0.4897929  0.1171720 

Internal consistency

Descriptive statistics

psychopathy_df_total$GENDER <- factor(psychopathy_df_total$GENDER, ordered = FALSE)
psychopathy_df_total$GENDER <- relevel(psychopathy_df_total$GENDER, ref = "Male")


# Differences in the above
t.test(SRP_SELF_TOTAL ~ GENDER, psychopathy_df_total, var.equal = TRUE) # sig difference, men greater than women

    Two Sample t-test

data:  SRP_SELF_TOTAL by GENDER
t = 3.6182, df = 168, p-value = 0.0003921
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 2.480382 8.437265
sample estimates:
  mean in group Male mean in group Female 
            42.07059             36.61176 
t.test(SRP_PV_TOTAL ~ GENDER, psychopathy_df_total, var.equal = TRUE) # sig difference, women greater than men

    Two Sample t-test

data:  SRP_PV_TOTAL by GENDER
t = -2.0378, df = 168, p-value = 0.04314
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 -6.7401677 -0.1068911
sample estimates:
  mean in group Male mean in group Female 
            33.67059             37.09412 
t.test(BDI_TOTAL ~ GENDER, psychopathy_df_total, var.equal = TRUE) # sig difference, women greater than men

    Two Sample t-test

data:  BDI_TOTAL by GENDER
t = -3.0055, df = 168, p-value = 0.003058
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 -1.9492439 -0.4036973
sample estimates:
  mean in group Male mean in group Female 
            2.329412             3.505882 
t.test(RAS_TOTAL ~ GENDER, psychopathy_df_total, var.equal = TRUE) # no difference

    Two Sample t-test

data:  RAS_TOTAL by GENDER
t = 0.46889, df = 168, p-value = 0.6398
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 -0.8309124  1.3485594
sample estimates:
  mean in group Male mean in group Female 
            31.34118             31.08235 
t.test(SRP_SELF_INTERPERSONAL ~ GENDER, psychopathy_df_total, var.equal = TRUE) # sig difference, men greater than women

    Two Sample t-test

data:  SRP_SELF_INTERPERSONAL by GENDER
t = 2.3218, df = 168, p-value = 0.02144
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 0.2061073 2.5468338
sample estimates:
  mean in group Male mean in group Female 
            12.82353             11.44706 
t.test(SRP_SELF_AFFECTIVE ~ GENDER, psychopathy_df_total, var.equal = TRUE) # sig difference, men greater than women

    Two Sample t-test

data:  SRP_SELF_AFFECTIVE by GENDER
t = 5.3239, df = 168, p-value = 3.217e-07
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 1.924562 4.193085
sample estimates:
  mean in group Male mean in group Female 
            14.29412             11.23529 
t.test(SRP_SELF_LIFESTYLE ~ GENDER, psychopathy_df_total, var.equal = TRUE) # no difference

    Two Sample t-test

data:  SRP_SELF_LIFESTYLE by GENDER
t = 1.6918, df = 168, p-value = 0.09254
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 -0.1708457  2.2179045
sample estimates:
  mean in group Male mean in group Female 
            14.95294             13.92941 
t.test(SRP_PARTNER_INTERPERSONAL ~ GENDER, psychopathy_df_total, var.equal = TRUE) # no difference

    Two Sample t-test

data:  SRP_PARTNER_INTERPERSONAL by GENDER
t = -1.5791, df = 168, p-value = 0.1162
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 -2.3560603  0.2619427
sample estimates:
  mean in group Male mean in group Female 
            10.38824             11.43529 
t.test(SRP_PARTNER_AFFECTIVE ~ GENDER, psychopathy_df_total, var.equal = TRUE) # sig difference, women greater than men

    Two Sample t-test

data:  SRP_PARTNER_AFFECTIVE by GENDER
t = -3.171, df = 168, p-value = 0.001806
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 -3.1306120 -0.7282116
sample estimates:
  mean in group Male mean in group Female 
            10.76471             12.69412 
t.test(SRP_PARTNER_LIFESTYLE ~ GENDER, psychopathy_df_total, var.equal = TRUE) # no difference

    Two Sample t-test

data:  SRP_PARTNER_LIFESTYLE by GENDER
t = -0.66882, df = 168, p-value = 0.5045
alternative hypothesis: true difference in means between group Male and group Female is not equal to 0
95 percent confidence interval:
 -1.7666583  0.8725407
sample estimates:
  mean in group Male mean in group Female 
            12.51765             12.96471 
# Cohen's d

cohen.d(psychopathy_df_total$SRP_SELF_TOTAL, psychopathy_df_total$GENDER)

Cohen's d

d estimate: 0.5550134 (medium)
95 percent confidence interval:
    lower     upper 
0.2464121 0.8636146 
cohen.d(psychopathy_df_total$SRP_PV_TOTAL, psychopathy_df_total$GENDER)

Cohen's d

d estimate: -0.3125859 (small)
95 percent confidence interval:
     lower      upper 
-0.6172558 -0.0079160 
cohen.d(psychopathy_df_total$BDI_TOTAL, psychopathy_df_total$GENDER)

Cohen's d

d estimate: -0.4610228 (small)
95 percent confidence interval:
     lower      upper 
-0.7678453 -0.1542003 
cohen.d(psychopathy_df_total$RAS_TOTAL, psychopathy_df_total$GENDER)

Cohen's d

d estimate: 0.07192435 (negligible)
95 percent confidence interval:
     lower      upper 
-0.2309997  0.3748484 
cohen.d(psychopathy_df_total$SRP_SELF_INTERPERSONAL, psychopathy_df_total$GENDER)

Cohen's d

d estimate: 0.3561555 (small)
95 percent confidence interval:
   lower    upper 
0.050938 0.661373 
cohen.d(psychopathy_df_total$SRP_SELF_AFFECTIVE, psychopathy_df_total$GENDER)

Cohen's d

d estimate: 0.8166476 (large)
95 percent confidence interval:
    lower     upper 
0.5014516 1.1318436 
cohen.d(psychopathy_df_total$SRP_SELF_LIFESTYLE, psychopathy_df_total$GENDER)

Cohen's d

d estimate: 0.2595093 (small)
95 percent confidence interval:
      lower       upper 
-0.04458878  0.56360747 
cohen.d(psychopathy_df_total$SRP_PARTNER_INTERPERSONAL, psychopathy_df_total$GENDER)

Cohen's d

d estimate: -0.242228 (small)
95 percent confidence interval:
      lower       upper 
-0.54616268  0.06170665 
cohen.d(psychopathy_df_total$SRP_PARTNER_AFFECTIVE, psychopathy_df_total$GENDER)

Cohen's d

d estimate: -0.4864105 (small)
95 percent confidence interval:
    lower     upper 
-0.793682 -0.179139 
cohen.d(psychopathy_df_total$SRP_PARTNER_LIFESTYLE, psychopathy_df_total$GENDER)

Cohen's d

d estimate: -0.1025926 (negligible)
95 percent confidence interval:
     lower      upper 
-0.4056179  0.2004327 

Correlations (dyad format):

print(corr, short=FALSE)
Call:corr.test(x = as.matrix(psychopathy_df_dyad))
Correlation matrix 
                                SRP_SELF_TOTAL SRP_PV_TOTAL SRP_SELF_INTERPERSONAL SRP_SELF_AFFECTIVE SRP_SELF_LIFESTYLE SRP_PARTNER_INTERPERSONAL
SRP_SELF_TOTAL                            1.00         0.46                   0.85               0.85               0.83                      0.41
SRP_PV_TOTAL                              0.46         1.00                   0.46               0.43               0.27                      0.87
SRP_SELF_INTERPERSONAL                    0.85         0.46                   1.00               0.61               0.56                      0.44
SRP_SELF_AFFECTIVE                        0.85         0.43                   0.61               1.00               0.54                      0.42
SRP_SELF_LIFESTYLE                        0.83         0.27                   0.56               0.54               1.00                      0.20
SRP_PARTNER_INTERPERSONAL                 0.41         0.87                   0.44               0.42               0.20                      1.00
SRP_PARTNER_AFFECTIVE                     0.40         0.88                   0.38               0.42               0.22                      0.74
SRP_PARTNER_LIFESTYLE                     0.36         0.82                   0.37               0.27               0.28                      0.54
BDI_TOTAL                                 0.43         0.08                   0.28               0.36               0.45                      0.02
RAS_TOTAL                                -0.29        -0.34                  -0.33              -0.22              -0.19                     -0.34
SRP_SELF_TOTAL_women                      0.20         0.42                   0.16               0.21               0.13                      0.30
SRP_PV_TOTAL_women                        0.40         0.25                   0.29               0.29               0.43                      0.21
SRP_SELF_INTERPERSONAL_women              0.17         0.30                   0.18               0.21               0.05                      0.26
SRP_SELF_AFFECTIVE_women                  0.19         0.44                   0.12               0.21               0.15                      0.29
SRP_SELF_LIFESTYLE_women                  0.14         0.36                   0.10               0.13               0.13                      0.23
SRP_PARTNER_INTERPERSONAL_women           0.24         0.18                   0.24               0.13               0.23                      0.14
SRP_PARTNER_AFFECTIVE_women               0.38         0.24                   0.27               0.37               0.33                      0.24
SRP_PARTNER_LIFESTYLE_women               0.43         0.23                   0.24               0.29               0.56                      0.16
BDI_TOTAL_women                           0.18         0.28                   0.11               0.15               0.20                      0.26
RAS_TOTAL_women                          -0.21        -0.31                  -0.23              -0.16              -0.16                     -0.31
                                SRP_PARTNER_AFFECTIVE SRP_PARTNER_LIFESTYLE BDI_TOTAL RAS_TOTAL SRP_SELF_TOTAL_women SRP_PV_TOTAL_women
SRP_SELF_TOTAL                                   0.40                  0.36      0.43     -0.29                 0.20               0.40
SRP_PV_TOTAL                                     0.88                  0.82      0.08     -0.34                 0.42               0.25
SRP_SELF_INTERPERSONAL                           0.38                  0.37      0.28     -0.33                 0.16               0.29
SRP_SELF_AFFECTIVE                               0.42                  0.27      0.36     -0.22                 0.21               0.29
SRP_SELF_LIFESTYLE                               0.22                  0.28      0.45     -0.19                 0.13               0.43
SRP_PARTNER_INTERPERSONAL                        0.74                  0.54      0.02     -0.34                 0.30               0.21
SRP_PARTNER_AFFECTIVE                            1.00                  0.55      0.09     -0.34                 0.39               0.25
SRP_PARTNER_LIFESTYLE                            0.55                  1.00      0.09     -0.19                 0.38               0.18
BDI_TOTAL                                        0.09                  0.09      1.00     -0.22                 0.07               0.22
RAS_TOTAL                                       -0.34                 -0.19     -0.22      1.00                -0.18              -0.22
SRP_SELF_TOTAL_women                             0.39                  0.38      0.07     -0.18                 1.00               0.66
SRP_PV_TOTAL_women                               0.25                  0.18      0.22     -0.22                 0.66               1.00
SRP_SELF_INTERPERSONAL_women                     0.32                  0.20      0.04     -0.28                 0.85               0.61
SRP_SELF_AFFECTIVE_women                         0.50                  0.32      0.12     -0.13                 0.87               0.56
SRP_SELF_LIFESTYLE_women                         0.22                  0.47      0.02     -0.05                 0.87               0.53
SRP_PARTNER_INTERPERSONAL_women                  0.19                  0.12      0.14     -0.19                 0.55               0.88
SRP_PARTNER_AFFECTIVE_women                      0.24                  0.14      0.12     -0.26                 0.59               0.87
SRP_PARTNER_LIFESTYLE_women                      0.22                  0.21      0.31     -0.13                 0.59               0.86
BDI_TOTAL_women                                  0.22                  0.24      0.30     -0.21                 0.54               0.46
RAS_TOTAL_women                                 -0.34                 -0.14     -0.09      0.54                -0.33              -0.31
                                SRP_SELF_INTERPERSONAL_women SRP_SELF_AFFECTIVE_women SRP_SELF_LIFESTYLE_women SRP_PARTNER_INTERPERSONAL_women
SRP_SELF_TOTAL                                          0.17                     0.19                     0.14                            0.24
SRP_PV_TOTAL                                            0.30                     0.44                     0.36                            0.18
SRP_SELF_INTERPERSONAL                                  0.18                     0.12                     0.10                            0.24
SRP_SELF_AFFECTIVE                                      0.21                     0.21                     0.13                            0.13
SRP_SELF_LIFESTYLE                                      0.05                     0.15                     0.13                            0.23
SRP_PARTNER_INTERPERSONAL                               0.26                     0.29                     0.23                            0.14
SRP_PARTNER_AFFECTIVE                                   0.32                     0.50                     0.22                            0.19
SRP_PARTNER_LIFESTYLE                                   0.20                     0.32                     0.47                            0.12
BDI_TOTAL                                               0.04                     0.12                     0.02                            0.14
RAS_TOTAL                                              -0.28                    -0.13                    -0.05                           -0.19
SRP_SELF_TOTAL_women                                    0.85                     0.87                     0.87                            0.55
SRP_PV_TOTAL_women                                      0.61                     0.56                     0.53                            0.88
SRP_SELF_INTERPERSONAL_women                            1.00                     0.62                     0.58                            0.56
SRP_SELF_AFFECTIVE_women                                0.62                     1.00                     0.66                            0.46
SRP_SELF_LIFESTYLE_women                                0.58                     0.66                     1.00                            0.39
SRP_PARTNER_INTERPERSONAL_women                         0.56                     0.46                     0.39                            1.00
SRP_PARTNER_AFFECTIVE_women                             0.54                     0.54                     0.47                            0.68
SRP_PARTNER_LIFESTYLE_women                             0.51                     0.47                     0.54                            0.61
BDI_TOTAL_women                                         0.38                     0.47                     0.55                            0.38
RAS_TOTAL_women                                        -0.33                    -0.30                    -0.22                           -0.30
                                SRP_PARTNER_AFFECTIVE_women SRP_PARTNER_LIFESTYLE_women BDI_TOTAL_women RAS_TOTAL_women
SRP_SELF_TOTAL                                         0.38                        0.43            0.18           -0.21
SRP_PV_TOTAL                                           0.24                        0.23            0.28           -0.31
SRP_SELF_INTERPERSONAL                                 0.27                        0.24            0.11           -0.23
SRP_SELF_AFFECTIVE                                     0.37                        0.29            0.15           -0.16
SRP_SELF_LIFESTYLE                                     0.33                        0.56            0.20           -0.16
SRP_PARTNER_INTERPERSONAL                              0.24                        0.16            0.26           -0.31
SRP_PARTNER_AFFECTIVE                                  0.24                        0.22            0.22           -0.34
SRP_PARTNER_LIFESTYLE                                  0.14                        0.21            0.24           -0.14
BDI_TOTAL                                              0.12                        0.31            0.30           -0.09
RAS_TOTAL                                             -0.26                       -0.13           -0.21            0.54
SRP_SELF_TOTAL_women                                   0.59                        0.59            0.54           -0.33
SRP_PV_TOTAL_women                                     0.87                        0.86            0.46           -0.31
SRP_SELF_INTERPERSONAL_women                           0.54                        0.51            0.38           -0.33
SRP_SELF_AFFECTIVE_women                               0.54                        0.47            0.47           -0.30
SRP_SELF_LIFESTYLE_women                               0.47                        0.54            0.55           -0.22
SRP_PARTNER_INTERPERSONAL_women                        0.68                        0.61            0.38           -0.30
SRP_PARTNER_AFFECTIVE_women                            1.00                        0.64            0.38           -0.25
SRP_PARTNER_LIFESTYLE_women                            0.64                        1.00            0.43           -0.27
BDI_TOTAL_women                                        0.38                        0.43            1.00           -0.34
RAS_TOTAL_women                                       -0.25                       -0.27           -0.34            1.00
Sample Size 
[1] 85
Probability values (Entries above the diagonal are adjusted for multiple tests.) 
                                SRP_SELF_TOTAL SRP_PV_TOTAL SRP_SELF_INTERPERSONAL SRP_SELF_AFFECTIVE SRP_SELF_LIFESTYLE SRP_PARTNER_INTERPERSONAL
SRP_SELF_TOTAL                            0.00         0.00                   0.00               0.00               0.00                      0.01
SRP_PV_TOTAL                              0.00         0.00                   0.00               0.01               0.98                      0.00
SRP_SELF_INTERPERSONAL                    0.00         0.00                   0.00               0.00               0.00                      0.00
SRP_SELF_AFFECTIVE                        0.00         0.00                   0.00               0.00               0.00                      0.01
SRP_SELF_LIFESTYLE                        0.00         0.01                   0.00               0.00               0.00                      1.00
SRP_PARTNER_INTERPERSONAL                 0.00         0.00                   0.00               0.00               0.07                      0.00
SRP_PARTNER_AFFECTIVE                     0.00         0.00                   0.00               0.00               0.04                      0.00
SRP_PARTNER_LIFESTYLE                     0.00         0.00                   0.00               0.01               0.01                      0.00
BDI_TOTAL                                 0.00         0.45                   0.01               0.00               0.00                      0.82
RAS_TOTAL                                 0.01         0.00                   0.00               0.04               0.09                      0.00
SRP_SELF_TOTAL_women                      0.07         0.00                   0.16               0.05               0.25                      0.00
SRP_PV_TOTAL_women                        0.00         0.02                   0.01               0.01               0.00                      0.06
SRP_SELF_INTERPERSONAL_women              0.11         0.01                   0.10               0.05               0.64                      0.02
SRP_SELF_AFFECTIVE_women                  0.08         0.00                   0.29               0.05               0.16                      0.01
SRP_SELF_LIFESTYLE_women                  0.19         0.00                   0.34               0.25               0.24                      0.03
SRP_PARTNER_INTERPERSONAL_women           0.03         0.10                   0.02               0.25               0.03                      0.20
SRP_PARTNER_AFFECTIVE_women               0.00         0.03                   0.01               0.00               0.00                      0.02
SRP_PARTNER_LIFESTYLE_women               0.00         0.03                   0.03               0.01               0.00                      0.14
BDI_TOTAL_women                           0.10         0.01                   0.31               0.17               0.07                      0.02
RAS_TOTAL_women                           0.05         0.00                   0.04               0.14               0.16                      0.00
                                SRP_PARTNER_AFFECTIVE SRP_PARTNER_LIFESTYLE BDI_TOTAL RAS_TOTAL SRP_SELF_TOTAL_women SRP_PV_TOTAL_women
SRP_SELF_TOTAL                                   0.02                  0.07      0.01      0.64                 1.00               0.02
SRP_PV_TOTAL                                     0.00                  0.00      1.00      0.18                 0.01               1.00
SRP_SELF_INTERPERSONAL                           0.04                  0.05      0.85      0.20                 1.00               0.68
SRP_SELF_AFFECTIVE                               0.01                  1.00      0.09      1.00                 1.00               0.62
SRP_SELF_LIFESTYLE                               1.00                  0.81      0.00      1.00                 1.00               0.01
SRP_PARTNER_INTERPERSONAL                        0.00                  0.00      1.00      0.15                 0.46               1.00
SRP_PARTNER_AFFECTIVE                            0.00                  0.00      1.00      0.15                 0.03               1.00
SRP_PARTNER_LIFESTYLE                            0.00                  0.00      1.00      1.00                 0.04               1.00
BDI_TOTAL                                        0.40                  0.40      0.00      1.00                 1.00               1.00
RAS_TOTAL                                        0.00                  0.09      0.05      0.00                 1.00               1.00
SRP_SELF_TOTAL_women                             0.00                  0.00      0.54      0.10                 0.00               0.00
SRP_PV_TOTAL_women                               0.02                  0.10      0.04      0.04                 0.00               0.00
SRP_SELF_INTERPERSONAL_women                     0.00                  0.07      0.68      0.01                 0.00               0.00
SRP_SELF_AFFECTIVE_women                         0.00                  0.00      0.27      0.23                 0.00               0.00
SRP_SELF_LIFESTYLE_women                         0.05                  0.00      0.89      0.68                 0.00               0.00
SRP_PARTNER_INTERPERSONAL_women                  0.08                  0.25      0.19      0.08                 0.00               0.00
SRP_PARTNER_AFFECTIVE_women                      0.03                  0.21      0.28      0.02                 0.00               0.00
SRP_PARTNER_LIFESTYLE_women                      0.04                  0.05      0.00      0.22                 0.00               0.00
BDI_TOTAL_women                                  0.05                  0.03      0.01      0.05                 0.00               0.00
RAS_TOTAL_women                                  0.00                  0.19      0.43      0.00                 0.00               0.00
                                SRP_SELF_INTERPERSONAL_women SRP_SELF_AFFECTIVE_women SRP_SELF_LIFESTYLE_women SRP_PARTNER_INTERPERSONAL_women
SRP_SELF_TOTAL                                          1.00                     1.00                     1.00                            1.00
SRP_PV_TOTAL                                            0.49                     0.00                     0.07                            1.00
SRP_SELF_INTERPERSONAL                                  1.00                     1.00                     1.00                            1.00
SRP_SELF_AFFECTIVE                                      1.00                     1.00                     1.00                            1.00
SRP_SELF_LIFESTYLE                                      1.00                     1.00                     1.00                            1.00
SRP_PARTNER_INTERPERSONAL                               1.00                     0.60                     1.00                            1.00
SRP_PARTNER_AFFECTIVE                                   0.32                     0.00                     1.00                            1.00
SRP_PARTNER_LIFESTYLE                                   1.00                     0.31                     0.00                            1.00
BDI_TOTAL                                               1.00                     1.00                     1.00                            1.00
RAS_TOTAL                                               0.73                     1.00                     1.00                            1.00
SRP_SELF_TOTAL_women                                    0.00                     0.00                     0.00                            0.00
SRP_PV_TOTAL_women                                      0.00                     0.00                     0.00                            0.00
SRP_SELF_INTERPERSONAL_women                            0.00                     0.00                     0.00                            0.00
SRP_SELF_AFFECTIVE_women                                0.00                     0.00                     0.00                            0.00
SRP_SELF_LIFESTYLE_women                                0.00                     0.00                     0.00                            0.03
SRP_PARTNER_INTERPERSONAL_women                         0.00                     0.00                     0.00                            0.00
SRP_PARTNER_AFFECTIVE_women                             0.00                     0.00                     0.00                            0.00
SRP_PARTNER_LIFESTYLE_women                             0.00                     0.00                     0.00                            0.00
BDI_TOTAL_women                                         0.00                     0.00                     0.00                            0.00
RAS_TOTAL_women                                         0.00                     0.01                     0.04                            0.01
                                SRP_PARTNER_AFFECTIVE_women SRP_PARTNER_LIFESTYLE_women BDI_TOTAL_women RAS_TOTAL_women
SRP_SELF_TOTAL                                         0.04                        0.01            1.00            1.00
SRP_PV_TOTAL                                           1.00                        1.00            0.92            0.43
SRP_SELF_INTERPERSONAL                                 0.98                        1.00            1.00            1.00
SRP_SELF_AFFECTIVE                                     0.06                        0.66            1.00            1.00
SRP_SELF_LIFESTYLE                                     0.23                        0.00            1.00            1.00
SRP_PARTNER_INTERPERSONAL                              1.00                        1.00            1.00            0.35
SRP_PARTNER_AFFECTIVE                                  1.00                        1.00            1.00            0.16
SRP_PARTNER_LIFESTYLE                                  1.00                        1.00            1.00            1.00
BDI_TOTAL                                              1.00                        0.43            0.55            1.00
RAS_TOTAL                                              1.00                        1.00            1.00            0.00
SRP_SELF_TOTAL_women                                   0.00                        0.00            0.00            0.22
SRP_PV_TOTAL_women                                     0.00                        0.00            0.00            0.35
SRP_SELF_INTERPERSONAL_women                           0.00                        0.00            0.04            0.21
SRP_SELF_AFFECTIVE_women                               0.00                        0.00            0.00            0.51
SRP_SELF_LIFESTYLE_women                               0.00                        0.00            0.00            1.00
SRP_PARTNER_INTERPERSONAL_women                        0.00                        0.00            0.04            0.52
SRP_PARTNER_AFFECTIVE_women                            0.00                        0.00            0.04            1.00
SRP_PARTNER_LIFESTYLE_women                            0.00                        0.00            0.00            1.00
BDI_TOTAL_women                                        0.00                        0.00            0.00            0.14
RAS_TOTAL_women                                        0.02                        0.01            0.00            0.00

 Confidence intervals based upon normal theory.  To get bootstrapped values, try cor.ci

APIM models

Full APIM (totals)

# Full APIM taking totals
full_apim <- '
              # Regression paths 
              RAS_TOTAL_women   ~ b1*SRP_SELF_TOTAL # Path b1, regressing RAS_women onto SRP_SF_men
              RAS_TOTAL  ~ b2*SRP_SELF_TOTAL_women # Path b2, regressing RAS_men onto SRP_SF_women
              RAS_TOTAL_women   ~ b3*SRP_SELF_TOTAL_women # Path b3, regressing RAS_women onto SRP_SF_women
              RAS_TOTAL  ~ b4*SRP_SELF_TOTAL # Path b4, regressing RAS_men onto SRP_SF_men
              RAS_TOTAL_women   ~ b5*SRP_PV_TOTAL # Path b5, regressing RAS_women onto SRP_PV_men
              RAS_TOTAL  ~ b6*SRP_PV_TOTAL_women # Path b6, regressing RAS_men onto SRP_PV_women
              RAS_TOTAL_women   ~ b7*SRP_PV_TOTAL_women # Path b7, regressing RAS_women onto SRP_PV_women
              RAS_TOTAL  ~ b8*SRP_PV_TOTAL # Path b8, regressing RAS_men onto SRP_PV_men
              # Intercepts
              SRP_SELF_TOTAL ~ a1*1 # Intercept for SRP_SF_men
              SRP_SELF_TOTAL_women ~ a2*1 # Intercept for SRP_SF_women
              RAS_TOTAL_women  ~ a3*1 # Intercept for RAS_women
              RAS_TOTAL ~ a4*1 # Intercept for RAS_men
              SRP_PV_TOTAL ~ a5*1 # Intercept for SRP_PV_men
              SRP_PV_TOTAL_women ~ a6*1 # Intercept for SRP_PV_women
              # Variances
              SRP_SELF_TOTAL ~~ v1*SRP_SELF_TOTAL
              SRP_SELF_TOTAL_women ~~ v2*SRP_SELF_TOTAL_women
              RAS_TOTAL_women  ~~ v3*RAS_TOTAL_women 
              RAS_TOTAL ~~ v4*RAS_TOTAL
              SRP_PV_TOTAL ~~ v5*SRP_PV_TOTAL
              SRP_PV_TOTAL_women ~~ v6*SRP_PV_TOTAL_women
              # Covariances
              SRP_SELF_TOTAL_women ~~ c1*SRP_SELF_TOTAL
              RAS_TOTAL ~~ c2*RAS_TOTAL_women  
              SRP_PV_TOTAL_women ~~ c3*SRP_PV_TOTAL
              SRP_SELF_TOTAL ~~ c4*SRP_PV_TOTAL
              SRP_SELF_TOTAL ~~ c5*SRP_PV_TOTAL_women
              SRP_SELF_TOTAL_women ~~ c6*SRP_PV_TOTAL
              SRP_SELF_TOTAL_women ~~ c7*SRP_PV_TOTAL_women
              # Defined parameters
              # Avg effects
              sf_actor := (b4 + b3)/2
              sf_partner := (b2 + b1)/2
              pv_actor := (b8 + b7)/2
              pv_partner := (b6 + b5)/2
              # Differences
              sf_actor_diff := b4 - b3
              sf_partner_diff := b2 - b1
              pv_actor_diff := b8 - b7
              pv_partner_diff := b6 - b5
'
# Fit the above model using MLR
fit_apim <- sem(full_apim, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_apim)
parameterestimates(fit_apim, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

Mini APIMs (totals)

# Mini models for totals

# Men rating themselves - women rating their partners
APIM_mini1 <- '
            # Regression paths
            RAS_TOTAL_women  ~ b1*SRP_SELF_TOTAL # Path b1, regressing RAS_women onto SRP_SF_men
            RAS_TOTAL  ~ b2*SRP_SELF_TOTAL # Path b2, regressing RAS_men onto SRP_SF_men
            RAS_TOTAL_women  ~ b3*SRP_PV_TOTAL_women  # Path b3, regressing RAS_women onto SRP_PV_women
            RAS_TOTAL  ~ b4*SRP_PV_TOTAL_women  # Path b4, regressing RAS_men onto SRP_PV_women
            # Intercepts
            SRP_SELF_TOTAL ~ a1*1 # Intercept for SRP_SF_men
            SRP_PV_TOTAL_women  ~ a2*1 # Intercept for SRP_PV_women
            RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
            RAS_TOTAL ~ a4*1 # Intercept for RAS_men
            # Variances
            SRP_SELF_TOTAL ~~ v1*SRP_SELF_TOTAL
            SRP_PV_TOTAL_women  ~~ v2*SRP_PV_TOTAL_women 
            RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
            RAS_TOTAL ~~ v4*RAS_TOTAL
            # Covariances
            RAS_TOTAL ~~ c1*RAS_TOTAL_women
            SRP_SELF_TOTAL ~~ c2*SRP_PV_TOTAL_women 
            
'

fit_mini1 <- sem(APIM_mini1, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini1)
parameterestimates(fit_mini1, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

#  Men rating themselves, women rating themselves
APIM_mini2 <- '
            # Regression paths
            RAS_TOTAL_women  ~ b1*SRP_SELF_TOTAL # Path b1, regressing RAS_women onto SRP_SF_men
            RAS_TOTAL  ~ b2*SRP_SELF_TOTAL # Path b2, regressing RAS_men onto SRP_SF_men
            RAS_TOTAL_women  ~ b3*SRP_SELF_TOTAL_women # Path b3, regressing RAS_women onto SRP_SF_women
            RAS_TOTAL  ~ b4*SRP_SELF_TOTAL_women # Path b4, regressing RAS_men onto SRP_SF_women
            # Intercepts
            SRP_SELF_TOTAL ~ a1*1 # Intercept for SRP_SF_men
            SRP_SELF_TOTAL_women ~ a2*1 # Intercept for SRP_SF_women
            RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
            RAS_TOTAL ~ a4*1 # Intercept for RAS_men
            # Variances
            SRP_SELF_TOTAL ~~ v1*SRP_SELF_TOTAL
            SRP_SELF_TOTAL_women ~~ v2*SRP_SELF_TOTAL_women
            RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
            RAS_TOTAL ~~ v4*RAS_TOTAL
            # Covariances
            RAS_TOTAL ~~ c1*RAS_TOTAL_women
            SRP_SELF_TOTAL ~~ c2*SRP_SELF_TOTAL_women
'

fit_mini2 <- sem(APIM_mini2, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini2)
parameterestimates(fit_mini2, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

# Women rating themselves, men rating their partner
APIM_mini3 <- '
            # Regression paths
            RAS_TOTAL_women  ~ b1*SRP_SELF_TOTAL_women  # Path b1, regressing RAS_women onto SRP_SF_women
            RAS_TOTAL ~ b2*SRP_SELF_TOTAL_women  # Path b2, regressing RAS_men onto SRP_SF_women
            RAS_TOTAL_women  ~ b3*SRP_PV_TOTAL # Path b3, regressing RAS_women onto SRP_PV_men
            RAS_TOTAL ~ b4*SRP_PV_TOTAL # Path b4, regressing RAS_men onto SRP_PV_men
            # Intercepts
            SRP_SELF_TOTAL_women  ~ a1*1 # Intercept for SRP_SF_women
            SRP_PV_TOTAL ~ a2*1 # Intercept for SRP_PV_men
            RAS_TOTAL_women  ~ a3*1 # Intercept for RAS_women
            RAS_TOTAL ~ a4*1 # Intercept for RAS_men
            # Variances
            SRP_SELF_TOTAL_women  ~~ v1*SRP_SELF_TOTAL_women 
            SRP_PV_TOTAL ~~ v2*SRP_PV_TOTAL
            RAS_TOTAL_women  ~~ v3*RAS_TOTAL_women 
            RAS_TOTAL ~~ v4*RAS_TOTAL
            # Covariances
            RAS_TOTAL ~~ c1*RAS_TOTAL_women 
            SRP_SELF_TOTAL_women  ~~ c2*SRP_PV_TOTAL
'

fit_mini3 <- sem(APIM_mini3, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini3)
parameterestimates(fit_mini3, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

# Women rating their partner, men rating their partner
APIM_mini4 <- '
            # Regression paths
            RAS_TOTAL_women ~ b1*SRP_PV_TOTAL  # Path b1, regressing RAS women onto SRP_PV_men
            RAS_TOTAL ~ b2*SRP_PV_TOTAL  # Path b2, regressing RAS_men onto SRP_PV_men
            RAS_TOTAL_women ~ b1*SRP_PV_TOTAL_women # Path b1, regressing RAS women onto SRP_PV_women
            RAS_TOTAL ~ b2*SRP_PV_TOTAL_women # Path b2, regressing RAS_men onto SRP_PV_women
            # Intercepts
            SRP_PV_TOTAL  ~ a1*1 # Intercept for SRP_SF_women
            SRP_PV_TOTAL_women ~ a2*1 # Intercept for SRP_PV_men
            RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
            RAS_TOTAL ~ a4*1 # Intercept for RAS_men
            # Variances
            SRP_PV_TOTAL  ~~ v1*SRP_PV_TOTAL 
            SRP_PV_TOTAL_women ~~ v2*SRP_PV_TOTAL_women
            RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
            RAS_TOTAL ~~ v4*RAS_TOTAL
            # Covariances
            RAS_TOTAL ~~ c1*RAS_TOTAL_women
            SRP_PV_TOTAL  ~~ c2*SRP_PV_TOTAL_women
'
fit_mini4 <- sem(APIM_mini4, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini4)
parameterestimates(fit_mini4, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

Full APIM (interpersonal)

# Full APIM interpersonal

full_apim2 <- '
              # Regression paths 
              RAS_TOTAL_women   ~ b1*SRP_SELF_INTERPERSONAL # Path b1, regressing RAS_women onto SRP_SF_men
              RAS_TOTAL  ~ b2*SRP_SELF_INTERPERSONAL_women # Path b2, regressing RAS_men onto SRP_SF_women
              RAS_TOTAL_women   ~ b3*SRP_SELF_INTERPERSONAL_women # Path b3, regressing RAS_women onto SRP_SF_women
              RAS_TOTAL  ~ b4*SRP_SELF_INTERPERSONAL # Path b4, regressing RAS_men onto SRP_SF_men
              RAS_TOTAL_women   ~ b5*SRP_PARTNER_INTERPERSONAL # Path b5, regressing RAS_women onto SRP_PARTNER_men
              RAS_TOTAL  ~ b6*SRP_PARTNER_INTERPERSONAL_women # Path b6, regressing RAS_men onto SRP_PARTNER_women
              RAS_TOTAL_women   ~ b7*SRP_PARTNER_INTERPERSONAL_women # Path b7, regressing RAS_women onto SRP_PARTNER_women
              RAS_TOTAL  ~ b8*SRP_PARTNER_INTERPERSONAL # Path b8, regressing RAS_men onto SRP_PARTNER_men
              # Intercepts
              SRP_SELF_INTERPERSONAL ~ a1*1 # Intercept for SRP_SF_men
              SRP_SELF_INTERPERSONAL_women ~ a2*1 # Intercept for SRP_SF_women
              RAS_TOTAL_women  ~ a3*1 # Intercept for RAS_women
              RAS_TOTAL ~ a4*1 # Intercept for RAS_men
              SRP_PARTNER_INTERPERSONAL ~ a5*1 # Intercept for SRP_PARTNER_men
              SRP_PARTNER_INTERPERSONAL_women ~ a6*1 # Intercept for SRP_PARTNER_women
              # Variances
              SRP_SELF_INTERPERSONAL ~~ v1*SRP_SELF_INTERPERSONAL
              SRP_SELF_INTERPERSONAL_women ~~ v2*SRP_SELF_INTERPERSONAL_women
              RAS_TOTAL_women  ~~ v3*RAS_TOTAL_women 
              RAS_TOTAL ~~ v4*RAS_TOTAL
              SRP_PARTNER_INTERPERSONAL ~~ v5*SRP_PARTNER_INTERPERSONAL
              SRP_PARTNER_INTERPERSONAL_women ~~ v6*SRP_PARTNER_INTERPERSONAL_women
              # Covariances
              SRP_SELF_INTERPERSONAL_women ~~ c1*SRP_SELF_INTERPERSONAL
              RAS_TOTAL ~~ c2*RAS_TOTAL_women  
              SRP_PARTNER_INTERPERSONAL_women ~~ c3*SRP_PARTNER_INTERPERSONAL
              SRP_SELF_INTERPERSONAL ~~ c4*SRP_PARTNER_INTERPERSONAL
              SRP_SELF_INTERPERSONAL ~~ c5*SRP_PARTNER_INTERPERSONAL_women
              SRP_SELF_INTERPERSONAL_women ~~ c6*SRP_PARTNER_INTERPERSONAL
              SRP_SELF_INTERPERSONAL_women ~~ c7*SRP_PARTNER_INTERPERSONAL_women
              # Defined parameters
              # Avg effects
              sf_actor := (b4 + b3)/2
              sf_partner := (b2 + b1)/2
              pv_actor := (b8 + b7)/2
              pv_partner := (b6 + b5)/2
              # Differences
              sf_actor_diff := b4 - b3
              sf_partner_diff := b2 - b1
              pv_actor_diff := b8 - b7
              pv_partner_diff := b6 - b5
'
# Fit the above model using MLR
fit_apim2 <- sem(full_apim2, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_apim)
parameterestimates(fit_apim2, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

Mini APIM (interpersonal)

# Mini models for interpersonal
# Men rating themselves - women rating their partners
APIM_mini_int1 <- '
                  # Regression paths
                  RAS_TOTAL_women  ~ b1*SRP_SELF_INTERPERSONAL # Path b1, regressing RAS_women onto SRP_SF_men
                  RAS_TOTAL  ~ b2*SRP_SELF_INTERPERSONAL # Path b2, regressing RAS_men onto SRP_SF_men
                  RAS_TOTAL_women  ~ b3*SRP_PARTNER_INTERPERSONAL_women  # Path b3, regressing RAS_women onto SRP_PV_women
                  RAS_TOTAL  ~ b4*SRP_PARTNER_INTERPERSONAL_women  # Path b4, regressing RAS_men onto SRP_PV_women
                  # Intercepts
                  SRP_SELF_INTERPERSONAL ~ a1*1 # Intercept for SRP_SF_men
                  SRP_PARTNER_INTERPERSONAL_women  ~ a2*1 # Intercept for SRP_PV_women
                  RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
                  RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                  # Variances
                  SRP_SELF_INTERPERSONAL ~~ v1*SRP_SELF_INTERPERSONAL
                  SRP_PARTNER_INTERPERSONAL_women  ~~ v2*SRP_PARTNER_INTERPERSONAL_women 
                  RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
                  RAS_TOTAL ~~ v4*RAS_TOTAL
                  # Covariances
                  RAS_TOTAL ~~ c1*RAS_TOTAL_women
                  SRP_SELF_INTERPERSONAL ~~ c2*SRP_PARTNER_INTERPERSONAL_women 
                  
      '

fit_mini_int1 <- sem(APIM_mini_int1, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_int1)
parameterestimates(fit_mini_int1, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

#  Men rating themselves, women rating themselves
APIM_mini_int2 <- '
                  # Regression paths
                  RAS_TOTAL_women  ~ b1*SRP_SELF_INTERPERSONAL # Path b1, regressing RAS_women onto SRP_SF_men
                  RAS_TOTAL  ~ b2*SRP_SELF_INTERPERSONAL # Path b2, regressing RAS_men onto SRP_SF_men
                  RAS_TOTAL_women  ~ b3*SRP_SELF_INTERPERSONAL_women # Path b3, regressing RAS_women onto SRP_SF_women
                  RAS_TOTAL  ~ b4*SRP_SELF_INTERPERSONAL_women # Path b4, regressing RAS_men onto SRP_SF_women
                  # Intercepts
                  SRP_SELF_INTERPERSONAL ~ a1*1 # Intercept for SRP_SF_men
                  SRP_SELF_INTERPERSONAL_women ~ a2*1 # Intercept for SRP_SF_women
                  RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
                  RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                  # Variances
                  SRP_SELF_INTERPERSONAL ~~ v1*SRP_SELF_INTERPERSONAL
                  SRP_SELF_INTERPERSONAL_women ~~ v2*SRP_SELF_INTERPERSONAL_women
                  RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
                  RAS_TOTAL ~~ v4*RAS_TOTAL
                  # Covariances
                  RAS_TOTAL ~~ c1*RAS_TOTAL_women
                  SRP_SELF_INTERPERSONAL ~~ c2*SRP_SELF_INTERPERSONAL_women
      '

fit_mini_int2 <- sem(APIM_mini_int2, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini2)
parameterestimates(fit_mini_int2, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

# Women rating themselves, men rating their partner
APIM_mini_int3 <- '
                  # Regression paths
                  RAS_TOTAL_women  ~ b1*SRP_SELF_INTERPERSONAL_women  # Path b1, regressing RAS_women onto SRP_SF_women
                  RAS_TOTAL ~ b2*SRP_SELF_INTERPERSONAL_women  # Path b2, regressing RAS_men onto SRP_SF_women
                  RAS_TOTAL_women  ~ b3*SRP_PARTNER_INTERPERSONAL # Path b3, regressing RAS_women onto SRP_PV_men
                  RAS_TOTAL ~ b4*SRP_PARTNER_INTERPERSONAL # Path b4, regressing RAS_men onto SRP_PV_men
                  # Intercepts
                  SRP_SELF_INTERPERSONAL_women  ~ a1*1 # Intercept for SRP_SF_women
                  SRP_PARTNER_INTERPERSONAL ~ a2*1 # Intercept for SRP_PV_men
                  RAS_TOTAL_women  ~ a3*1 # Intercept for RAS_women
                  RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                  # Variances
                  SRP_SELF_INTERPERSONAL_women  ~~ v1*SRP_SELF_INTERPERSONAL_women 
                  SRP_PARTNER_INTERPERSONAL ~~ v2*SRP_PARTNER_INTERPERSONAL
                  RAS_TOTAL_women  ~~ v3*RAS_TOTAL_women 
                  RAS_TOTAL ~~ v4*RAS_TOTAL
                  # Covariances
                  RAS_TOTAL ~~ c1*RAS_TOTAL_women 
                  SRP_SELF_INTERPERSONAL_women  ~~ c2*SRP_PARTNER_INTERPERSONAL
      '

fit_mini_int3 <- sem(APIM_mini_int3, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini3)
parameterestimates(fit_mini_int3, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

# Women rating their partner, men rating their partner
APIM_mini_int4 <- '
            # Regression paths
            RAS_TOTAL_women ~ b1*SRP_PARTNER_INTERPERSONAL  # Path b1, regressing RAS women onto SRP_PV_men
            RAS_TOTAL ~ b2*SRP_PARTNER_INTERPERSONAL  # Path b2, regressing RAS_men onto SRP_PV_men
            RAS_TOTAL_women ~ b1*SRP_PARTNER_INTERPERSONAL_women # Path b1, regressing RAS women onto SRP_PV_women
            RAS_TOTAL ~ b2*SRP_PARTNER_INTERPERSONAL_women # Path b2, regressing RAS_men onto SRP_PV_women
            # Intercepts
            SRP_PARTNER_INTERPERSONAL  ~ a1*1 # Intercept for SRP_SF_women
            SRP_PARTNER_INTERPERSONAL_women ~ a2*1 # Intercept for SRP_PV_men
            RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
            RAS_TOTAL ~ a4*1 # Intercept for RAS_men
            # Variances
            SRP_PARTNER_INTERPERSONAL  ~~ v1*SRP_PARTNER_INTERPERSONAL 
            SRP_PARTNER_INTERPERSONAL_women ~~ v2*SRP_PARTNER_INTERPERSONAL_women
            RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
            RAS_TOTAL ~~ v4*RAS_TOTAL
            # Covariances
            RAS_TOTAL ~~ c1*RAS_TOTAL_women
            SRP_PARTNER_INTERPERSONAL  ~~ c2*SRP_PARTNER_INTERPERSONAL_women
'
fit_mini_int4 <- sem(APIM_mini_int4, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_int4)
parameterestimates(fit_mini_int4, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

Full APIM (Affective)

# Full APIM Affective
full_apim3 <- '
              # Regression paths 
              RAS_TOTAL_women   ~ b1*SRP_SELF_AFFECTIVE # Path b1, regressing RAS_women onto SRP_SF_men
              RAS_TOTAL  ~ b2*SRP_SELF_AFFECTIVE_women # Path b2, regressing RAS_men onto SRP_SF_women
              RAS_TOTAL_women   ~ b3*SRP_SELF_AFFECTIVE_women # Path b3, regressing RAS_women onto SRP_SF_women
              RAS_TOTAL  ~ b4*SRP_SELF_AFFECTIVE # Path b4, regressing RAS_men onto SRP_SF_men
              RAS_TOTAL_women   ~ b5*SRP_PARTNER_AFFECTIVE # Path b5, regressing RAS_women onto SRP_PARTNER_men
              RAS_TOTAL  ~ b6*SRP_PARTNER_AFFECTIVE_women # Path b6, regressing RAS_men onto SRP_PARTNER_women
              RAS_TOTAL_women   ~ b7*SRP_PARTNER_AFFECTIVE_women # Path b7, regressing RAS_women onto SRP_PARTNER_women
              RAS_TOTAL  ~ b8*SRP_PARTNER_AFFECTIVE # Path b8, regressing RAS_men onto SRP_PARTNER_men
              # Intercepts
              SRP_SELF_AFFECTIVE ~ a1*1 # Intercept for SRP_SF_men
              SRP_SELF_AFFECTIVE_women ~ a2*1 # Intercept for SRP_SF_women
              RAS_TOTAL_women  ~ a3*1 # Intercept for RAS_women
              RAS_TOTAL ~ a4*1 # Intercept for RAS_men
              SRP_PARTNER_AFFECTIVE ~ a5*1 # Intercept for SRP_PARTNER_men
              SRP_PARTNER_AFFECTIVE_women ~ a6*1 # Intercept for SRP_PARTNER_women
              # Variances
              SRP_SELF_AFFECTIVE ~~ v1*SRP_SELF_AFFECTIVE
              SRP_SELF_AFFECTIVE_women ~~ v2*SRP_SELF_AFFECTIVE_women
              RAS_TOTAL_women  ~~ v3*RAS_TOTAL_women 
              RAS_TOTAL ~~ v4*RAS_TOTAL
              SRP_PARTNER_AFFECTIVE ~~ v5*SRP_PARTNER_AFFECTIVE
              SRP_PARTNER_AFFECTIVE_women ~~ v6*SRP_PARTNER_AFFECTIVE_women
              # Covariances
              SRP_SELF_AFFECTIVE_women ~~ c1*SRP_SELF_AFFECTIVE
              RAS_TOTAL ~~ c2*RAS_TOTAL_women  
              SRP_PARTNER_AFFECTIVE_women ~~ c3*SRP_PARTNER_AFFECTIVE
              SRP_SELF_AFFECTIVE ~~ c4*SRP_PARTNER_AFFECTIVE
              SRP_SELF_AFFECTIVE ~~ c5*SRP_PARTNER_AFFECTIVE_women
              SRP_SELF_AFFECTIVE_women ~~ c6*SRP_PARTNER_AFFECTIVE
              SRP_SELF_AFFECTIVE_women ~~ c7*SRP_PARTNER_AFFECTIVE_women
              # Defined parameters
              # Avg effects
              sf_actor := (b4 + b3)/2
              sf_partner := (b2 + b1)/2
              pv_actor := (b8 + b7)/2
              pv_partner := (b6 + b5)/2
              # Differences
              sf_actor_diff := b4 - b3
              sf_partner_diff := b2 - b1
              pv_actor_diff := b8 - b7
              pv_partner_diff := b6 - b5
'
# Fit the above model using MLR
fit_apim3 <- sem(full_apim3, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_apim)
parameterestimates(fit_apim3, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

Mini APIM (Affective)

# Mini models for Affective

# Men rating themselves - women rating their partners
APIM_mini_aff1 <- '
                  # Regression paths
                  RAS_TOTAL_women  ~ b1*SRP_SELF_AFFECTIVE # Path b1, regressing RAS_women onto SRP_SF_men
                  RAS_TOTAL  ~ b2*SRP_SELF_AFFECTIVE # Path b2, regressing RAS_men onto SRP_SF_men
                  RAS_TOTAL_women  ~ b3*SRP_PARTNER_AFFECTIVE_women  # Path b3, regressing RAS_women onto SRP_PV_women
                  RAS_TOTAL  ~ b4*SRP_PARTNER_AFFECTIVE_women  # Path b4, regressing RAS_men onto SRP_PV_women
                  # Intercepts
                  SRP_SELF_AFFECTIVE ~ a1*1 # Intercept for SRP_SF_men
                  SRP_PARTNER_AFFECTIVE_women  ~ a2*1 # Intercept for SRP_PV_women
                  RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
                  RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                  # Variances
                  SRP_SELF_AFFECTIVE ~~ v1*SRP_SELF_AFFECTIVE
                  SRP_PARTNER_AFFECTIVE_women  ~~ v2*SRP_PARTNER_AFFECTIVE_women 
                  RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
                  RAS_TOTAL ~~ v4*RAS_TOTAL
                  # Covariances
                  RAS_TOTAL ~~ c1*RAS_TOTAL_women
                  SRP_SELF_AFFECTIVE ~~ c2*SRP_PARTNER_AFFECTIVE_women 
                  
      '

fit_mini_aff1 <- sem(APIM_mini_aff1, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_aff1)
parameterestimates(fit_mini_aff1, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

#  Men rating themselves, women rating themselves
APIM_mini_aff2 <- '
                  # Regression paths
                  RAS_TOTAL_women  ~ b1*SRP_SELF_AFFECTIVE # Path b1, regressing RAS_women onto SRP_SF_men
                  RAS_TOTAL  ~ b2*SRP_SELF_AFFECTIVE # Path b2, regressing RAS_men onto SRP_SF_men
                  RAS_TOTAL_women  ~ b3*SRP_SELF_AFFECTIVE_women # Path b3, regressing RAS_women onto SRP_SF_women
                  RAS_TOTAL  ~ b4*SRP_SELF_AFFECTIVE_women # Path b4, regressing RAS_men onto SRP_SF_women
                  # Intercepts
                  SRP_SELF_AFFECTIVE ~ a1*1 # Intercept for SRP_SF_men
                  SRP_SELF_AFFECTIVE_women ~ a2*1 # Intercept for SRP_SF_women
                  RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
                  RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                  # Variances
                  SRP_SELF_AFFECTIVE ~~ v1*SRP_SELF_AFFECTIVE
                  SRP_SELF_AFFECTIVE_women ~~ v2*SRP_SELF_AFFECTIVE_women
                  RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
                  RAS_TOTAL ~~ v4*RAS_TOTAL
                  # Covariances
                  RAS_TOTAL ~~ c1*RAS_TOTAL_women
                  SRP_SELF_AFFECTIVE ~~ c2*SRP_SELF_AFFECTIVE_women
      '

fit_mini_aff2 <- sem(APIM_mini_aff2, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_aff2)
parameterestimates(fit_mini_aff2, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

# Women rating themselves, men rating their partner
APIM_mini_aff3 <- '
                  # Regression paths
                  RAS_TOTAL_women  ~ b1*SRP_SELF_AFFECTIVE_women  # Path b1, regressing RAS_women onto SRP_SF_women
                  RAS_TOTAL ~ b2*SRP_SELF_AFFECTIVE_women  # Path b2, regressing RAS_men onto SRP_SF_women
                  RAS_TOTAL_women  ~ b3*SRP_PARTNER_AFFECTIVE # Path b3, regressing RAS_women onto SRP_PV_men
                  RAS_TOTAL ~ b4*SRP_PARTNER_AFFECTIVE # Path b4, regressing RAS_men onto SRP_PV_men
                  # Intercepts
                  SRP_SELF_AFFECTIVE_women  ~ a1*1 # Intercept for SRP_SF_women
                  SRP_PARTNER_AFFECTIVE ~ a2*1 # Intercept for SRP_PV_men
                  RAS_TOTAL_women  ~ a3*1 # Intercept for RAS_women
                  RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                  # Variances
                  SRP_SELF_AFFECTIVE_women  ~~ v1*SRP_SELF_AFFECTIVE_women 
                  SRP_PARTNER_AFFECTIVE ~~ v2*SRP_PARTNER_AFFECTIVE
                  RAS_TOTAL_women  ~~ v3*RAS_TOTAL_women 
                  RAS_TOTAL ~~ v4*RAS_TOTAL
                  # Covariances
                  RAS_TOTAL ~~ c1*RAS_TOTAL_women 
                  SRP_SELF_AFFECTIVE_women  ~~ c2*SRP_PARTNER_AFFECTIVE
      '

fit_mini_aff3 <- sem(APIM_mini_aff3, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_aff3)
parameterestimates(fit_mini_aff3, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

# Women rating their partner, men rating their partner
APIM_mini_aff4 <- '
                # Regression paths
                RAS_TOTAL_women ~ b1*SRP_PARTNER_AFFECTIVE  # Path b1, regressing RAS women onto SRP_PV_men
                RAS_TOTAL ~ b2*SRP_PARTNER_AFFECTIVE  # Path b2, regressing RAS_men onto SRP_PV_men
                RAS_TOTAL_women ~ b1*SRP_PARTNER_AFFECTIVE_women # Path b1, regressing RAS women onto SRP_PV_women
                RAS_TOTAL ~ b2*SRP_PARTNER_AFFECTIVE_women # Path b2, regressing RAS_men onto SRP_PV_women
                # Intercepts
                SRP_PARTNER_AFFECTIVE  ~ a1*1 # Intercept for SRP_SF_women
                SRP_PARTNER_AFFECTIVE_women ~ a2*1 # Intercept for SRP_PV_men
                RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
                RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                # Variances
                SRP_PARTNER_AFFECTIVE  ~~ v1*SRP_PARTNER_AFFECTIVE 
                SRP_PARTNER_AFFECTIVE_women ~~ v2*SRP_PARTNER_AFFECTIVE_women
                RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
                RAS_TOTAL ~~ v4*RAS_TOTAL
                # Covariances
                RAS_TOTAL ~~ c1*RAS_TOTAL_women
                SRP_PARTNER_AFFECTIVE  ~~ c2*SRP_PARTNER_AFFECTIVE_women
    '
fit_mini_aff4 <- sem(APIM_mini_aff4, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_aff4)
parameterestimates(fit_mini_aff4, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

Full APIM (Lifestyle)

# Full APIM Lifestyle
full_apim4 <- '
              # Regression paths 
              RAS_TOTAL_women   ~ b1*SRP_SELF_LIFESTYLE # Path b1, regressing RAS_women onto SRP_SF_men
              RAS_TOTAL  ~ b2*SRP_SELF_LIFESTYLE_women # Path b2, regressing RAS_men onto SRP_SF_women
              RAS_TOTAL_women   ~ b3*SRP_SELF_LIFESTYLE_women # Path b3, regressing RAS_women onto SRP_SF_women
              RAS_TOTAL  ~ b4*SRP_SELF_LIFESTYLE # Path b4, regressing RAS_men onto SRP_SF_men
              RAS_TOTAL_women   ~ b5*SRP_PARTNER_LIFESTYLE # Path b5, regressing RAS_women onto SRP_PARTNER_men
              RAS_TOTAL  ~ b6*SRP_PARTNER_LIFESTYLE_women # Path b6, regressing RAS_men onto SRP_PARTNER_women
              RAS_TOTAL_women   ~ b7*SRP_PARTNER_LIFESTYLE_women # Path b7, regressing RAS_women onto SRP_PARTNER_women
              RAS_TOTAL  ~ b8*SRP_PARTNER_LIFESTYLE # Path b8, regressing RAS_men onto SRP_PARTNER_men
              # Intercepts
              SRP_SELF_LIFESTYLE ~ a1*1 # Intercept for SRP_SF_men
              SRP_SELF_LIFESTYLE_women ~ a2*1 # Intercept for SRP_SF_women
              RAS_TOTAL_women  ~ a3*1 # Intercept for RAS_women
              RAS_TOTAL ~ a4*1 # Intercept for RAS_men
              SRP_PARTNER_LIFESTYLE ~ a5*1 # Intercept for SRP_PARTNER_men
              SRP_PARTNER_LIFESTYLE_women ~ a6*1 # Intercept for SRP_PARTNER_women
              # Variances
              SRP_SELF_LIFESTYLE ~~ v1*SRP_SELF_LIFESTYLE
              SRP_SELF_LIFESTYLE_women ~~ v2*SRP_SELF_LIFESTYLE_women
              RAS_TOTAL_women  ~~ v3*RAS_TOTAL_women 
              RAS_TOTAL ~~ v4*RAS_TOTAL
              SRP_PARTNER_LIFESTYLE ~~ v5*SRP_PARTNER_LIFESTYLE
              SRP_PARTNER_LIFESTYLE_women ~~ v6*SRP_PARTNER_LIFESTYLE_women
              # Covariances
              SRP_SELF_LIFESTYLE_women ~~ c1*SRP_SELF_LIFESTYLE
              RAS_TOTAL ~~ c2*RAS_TOTAL_women  
              SRP_PARTNER_LIFESTYLE_women ~~ c3*SRP_PARTNER_LIFESTYLE
              SRP_SELF_LIFESTYLE ~~ c4*SRP_PARTNER_LIFESTYLE
              SRP_SELF_LIFESTYLE ~~ c5*SRP_PARTNER_LIFESTYLE_women
              SRP_SELF_LIFESTYLE_women ~~ c6*SRP_PARTNER_LIFESTYLE
              SRP_SELF_LIFESTYLE_women ~~ c7*SRP_PARTNER_LIFESTYLE_women
              # Defined parameters
              # Avg effects
              sf_actor := (b4 + b3)/2
              sf_partner := (b2 + b1)/2
              pv_actor := (b8 + b7)/2
              pv_partner := (b6 + b5)/2
              # Differences
              sf_actor_diff := b4 - b3
              sf_partner_diff := b2 - b1
              pv_actor_diff := b8 - b7
              pv_partner_diff := b6 - b5
'
# Fit the above model using MLR
fit_apim4 <- sem(full_apim4, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_apim)
parameterestimates(fit_apim4, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

Mini APIM (Lifestyle)

# Mini models for Lifestyle

# Men rating themselves - women rating their partners
APIM_mini_lif1 <- '
                  # Regression paths
                  RAS_TOTAL_women  ~ b1*SRP_SELF_LIFESTYLE # Path b1, regressing RAS_women onto SRP_SF_men
                  RAS_TOTAL  ~ b2*SRP_SELF_LIFESTYLE # Path b2, regressing RAS_men onto SRP_SF_men
                  RAS_TOTAL_women  ~ b3*SRP_PARTNER_LIFESTYLE_women  # Path b3, regressing RAS_women onto SRP_PV_women
                  RAS_TOTAL  ~ b4*SRP_PARTNER_LIFESTYLE_women  # Path b4, regressing RAS_men onto SRP_PV_women
                  # Intercepts
                  SRP_SELF_LIFESTYLE ~ a1*1 # Intercept for SRP_SF_men
                  SRP_PARTNER_LIFESTYLE_women  ~ a2*1 # Intercept for SRP_PV_women
                  RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
                  RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                  # Variances
                  SRP_SELF_LIFESTYLE ~~ v1*SRP_SELF_LIFESTYLE
                  SRP_PARTNER_LIFESTYLE_women  ~~ v2*SRP_PARTNER_LIFESTYLE_women 
                  RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
                  RAS_TOTAL ~~ v4*RAS_TOTAL
                  # Covariances
                  RAS_TOTAL ~~ c1*RAS_TOTAL_women
                  SRP_SELF_LIFESTYLE ~~ c2*SRP_PARTNER_LIFESTYLE_women 
                  
      '

fit_mini_lif1 <- sem(APIM_mini_lif1, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_lif1)
parameterestimates(fit_mini_lif1, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

#  Men rating themselves, women rating themselves
APIM_mini_lif2 <- '
                  # Regression paths
                  RAS_TOTAL_women  ~ b1*SRP_SELF_LIFESTYLE # Path b1, regressing RAS_women onto SRP_SF_men
                  RAS_TOTAL  ~ b2*SRP_SELF_LIFESTYLE # Path b2, regressing RAS_men onto SRP_SF_men
                  RAS_TOTAL_women  ~ b3*SRP_SELF_LIFESTYLE_women # Path b3, regressing RAS_women onto SRP_SF_women
                  RAS_TOTAL  ~ b4*SRP_SELF_LIFESTYLE_women # Path b4, regressing RAS_men onto SRP_SF_women
                  # Intercepts
                  SRP_SELF_LIFESTYLE ~ a1*1 # Intercept for SRP_SF_men
                  SRP_SELF_LIFESTYLE_women ~ a2*1 # Intercept for SRP_SF_women
                  RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
                  RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                  # Variances
                  SRP_SELF_LIFESTYLE ~~ v1*SRP_SELF_LIFESTYLE
                  SRP_SELF_LIFESTYLE_women ~~ v2*SRP_SELF_LIFESTYLE_women
                  RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
                  RAS_TOTAL ~~ v4*RAS_TOTAL
                  # Covariances
                  RAS_TOTAL ~~ c1*RAS_TOTAL_women
                  SRP_SELF_LIFESTYLE ~~ c2*SRP_SELF_LIFESTYLE_women
      '

fit_mini_lif2 <- sem(APIM_mini_lif2, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_lif2)
parameterestimates(fit_mini_lif2, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

# Women rating themselves, men rating their partner
APIM_mini_lif3 <- '
                  # Regression paths
                  RAS_TOTAL_women  ~ b1*SRP_SELF_LIFESTYLE_women  # Path b1, regressing RAS_women onto SRP_SF_women
                  RAS_TOTAL ~ b2*SRP_SELF_LIFESTYLE_women  # Path b2, regressing RAS_men onto SRP_SF_women
                  RAS_TOTAL_women  ~ b3*SRP_PARTNER_LIFESTYLE # Path b3, regressing RAS_women onto SRP_PV_men
                  RAS_TOTAL ~ b4*SRP_PARTNER_LIFESTYLE # Path b4, regressing RAS_men onto SRP_PV_men
                  # Intercepts
                  SRP_SELF_LIFESTYLE_women  ~ a1*1 # Intercept for SRP_SF_women
                  SRP_PARTNER_LIFESTYLE ~ a2*1 # Intercept for SRP_PV_men
                  RAS_TOTAL_women  ~ a3*1 # Intercept for RAS_women
                  RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                  # Variances
                  SRP_SELF_LIFESTYLE_women  ~~ v1*SRP_SELF_LIFESTYLE_women 
                  SRP_PARTNER_LIFESTYLE ~~ v2*SRP_PARTNER_LIFESTYLE
                  RAS_TOTAL_women  ~~ v3*RAS_TOTAL_women 
                  RAS_TOTAL ~~ v4*RAS_TOTAL
                  # Covariances
                  RAS_TOTAL ~~ c1*RAS_TOTAL_women 
                  SRP_SELF_LIFESTYLE_women  ~~ c2*SRP_PARTNER_LIFESTYLE
      '

fit_mini_lif3 <- sem(APIM_mini_lif3, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_lif3)
parameterestimates(fit_mini_lif3, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

# Women rating their partner, men rating their partner
APIM_mini_lif4 <- '
                # Regression paths
                RAS_TOTAL_women ~ b1*SRP_PARTNER_LIFESTYLE  # Path b1, regressing RAS women onto SRP_PV_men
                RAS_TOTAL ~ b2*SRP_PARTNER_LIFESTYLE  # Path b2, regressing RAS_men onto SRP_PV_men
                RAS_TOTAL_women ~ b1*SRP_PARTNER_LIFESTYLE_women # Path b1, regressing RAS women onto SRP_PV_women
                RAS_TOTAL ~ b2*SRP_PARTNER_LIFESTYLE_women # Path b2, regressing RAS_men onto SRP_PV_women
                # Intercepts
                SRP_PARTNER_LIFESTYLE  ~ a1*1 # Intercept for SRP_SF_women
                SRP_PARTNER_LIFESTYLE_women ~ a2*1 # Intercept for SRP_PV_men
                RAS_TOTAL_women ~ a3*1 # Intercept for RAS_women
                RAS_TOTAL ~ a4*1 # Intercept for RAS_men
                # Variances
                SRP_PARTNER_LIFESTYLE  ~~ v1*SRP_PARTNER_LIFESTYLE 
                SRP_PARTNER_LIFESTYLE_women ~~ v2*SRP_PARTNER_LIFESTYLE_women
                RAS_TOTAL_women ~~ v3*RAS_TOTAL_women
                RAS_TOTAL ~~ v4*RAS_TOTAL
                # Covariances
                RAS_TOTAL ~~ c1*RAS_TOTAL_women
                SRP_PARTNER_LIFESTYLE  ~~ c2*SRP_PARTNER_LIFESTYLE_women
    '
fit_mini_lif4 <- sem(APIM_mini_lif4, data = psychopathy_df_dyad_stan, estimator = "MLM")
# summary(fit_mini_lif4)
parameterestimates(fit_mini_lif4, boot.ci.type = "bca.simple", standardized = TRUE, rsquare = TRUE)

Hierarchicial regression

library(robustbase)

# Men
m0 <- lmrob(RAS_TOTAL ~ 1, psychopathy_df_dyad_stan)

m1 <- lmrob(RAS_TOTAL ~ BDI_TOTAL, psychopathy_df_dyad_stan)
summary(m1)
cbind(coef(m1),confint(m1, level = 0.95))

m2 <- lmrob(RAS_TOTAL ~ BDI_TOTAL + SRP_SELF_TOTAL, psychopathy_df_dyad_stan)
summary(m2)
cbind(coef(m2),confint(m2, level = 0.95))

m3 <- lmrob(RAS_TOTAL ~ BDI_TOTAL + SRP_SELF_TOTAL + SRP_PV_TOTAL, psychopathy_df_dyad_stan)
summary(m3)
cbind(coef(m3),confint(m3, level = 0.95))

anova(m0, m1, test = "Deviance")
anova(m1, m2, test = "Deviance")
anova(m2, m3, test = "Deviance")


# Women
m0 <- lmrob(RAS_TOTAL_women ~ 1, psychopathy_df_dyad_stan)

m1 <- lmrob(RAS_TOTAL_women ~ BDI_TOTAL_women, psychopathy_df_dyad_stan)
summary(m1)
cbind(coef(m1),confint(m1, level = 0.95))

m2 <- lmrob(RAS_TOTAL_women ~ BDI_TOTAL_women + SRP_SELF_TOTAL_women, psychopathy_df_dyad_stan)
summary(m2)
cbind(coef(m2),confint(m2, level = 0.95))

m3 <- lmrob(RAS_TOTAL_women ~ BDI_TOTAL_women + SRP_SELF_TOTAL_women + SRP_PV_TOTAL_women, psychopathy_df_dyad_stan)
summary(m3)
cbind(coef(m3),confint(m3, level = 0.95))


anova(m0, m1, test = "Deviance")
anova(m1, m2, test = "Deviance")
anova(m2, m3, test = "Deviance")
LS0tDQp0aXRsZTogIlBzeWNocGF0aHkgUGFydG5lcnMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIFRoaXMgZG9jdW1lbnQgZm9ybXMgdGhlIGFuYWx5c2lzIGZvcjogDQoNCg0KDQpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQ0KIyBTZXR1cA0KIyBMb2FkIHBhY2thZ2VzLCByZWNvZGUgdmFyaWFibGVzDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoYXBhVGFibGVzKQ0KbGlicmFyeShwYW5kZXIpDQpsaWJyYXJ5KGxhdmFhbikNCmxpYnJhcnkoTVZOKQ0KbGlicmFyeShwc3ljaCkNCmxpYnJhcnkoZWZmc2l6ZSkNCmxpYnJhcnkodGlkeVNFTSkNCnBzeWNob3BhdGh5X2RmIDwtIHJlYWQuY3N2KCJkYXRhX2NsZWFuZWRfcmVtb3ZlZF9uZXcuY3N2IikNCg0KcHN5Y2hvcGF0aHlfZGYgPC0gcHN5Y2hvcGF0aHlfZGYgJT4lIG11dGF0ZShHRU5ERVIgPSBkcGx5cjo6cmVjb2RlKEdFTkRFUiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJNYWxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIkZlbWFsZSIpKQ0KDQpwc3ljaG9wYXRoeV9kZiA8LSBwc3ljaG9wYXRoeV9kZiAlPiUgbXV0YXRlKEdFTkRFUl9QQVJUTkVSID0gZHBseXI6OnJlY29kZShHRU5ERVJfUEFSVE5FUiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJNYWxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIkZlbWFsZSIpKQ0KDQpwc3ljaG9wYXRoeV9kZiA8LSBwc3ljaG9wYXRoeV9kZiAlPiUgbXV0YXRlKFNFWFVBTF9QUkVGID0gZHBseXI6OnJlY29kZShTRVhVQUxfUFJFRiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJTdHJhaWdodCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJHYXkiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIkJpc2V4dWFsIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICJPdGhlciIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNiIgPSAiUGFuc2V4dWFsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjciID0gIlF1ZWVyIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI4IiA9ICJBc2V4dWFsIikpDQoNCnBzeWNob3BhdGh5X2RmIDwtIHBzeWNob3BhdGh5X2RmICU+JSBtdXRhdGUoU0VYID0gZHBseXI6OnJlY29kZShTRVgsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiTWFsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJGZW1hbGUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIkludGVyc2V4IikpDQoNCnBzeWNob3BhdGh5X2RmIDwtIHBzeWNob3BhdGh5X2RmICU+JSBtdXRhdGUoUkVMQVRJT05TSElQID0gZHBseXI6OnJlY29kZShSRUxBVElPTlNISVAsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiU2luZ2xlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIk1hcnJpZWQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIkVuZ2FnZWQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIkNvaGFiaXRpbmciLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIkRpZmZlcmVudCByZWxhdGlvbnNoaXAgZm9ybSAoZS5nLiwgcG9seWFtb3JvdXMpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjciID0gIlllcywgbGl2ZSBhcGFydCIpKQ0KDQpwc3ljaG9wYXRoeV9kZiA8LSBwc3ljaG9wYXRoeV9kZiAlPiUgbXV0YXRlKEVNUExPWU1FTlQgPSBkcGx5cjo6cmVjb2RlKEVNUExPWU1FTlQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiRW1wbG95ZWQgLSBGdWxsIFRpbWUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiU3R1ZGVudCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiVW5lbXBsb3llZCAtIHNlZWtpbmcgZW1wbG95bWVudCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNiIgPSAiRW1wbG95ZWQgLSBQYXJ0IFRpbWUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNyIgPSAiVW5lbXBsb3llZCAtIG5vdCBzZWVraW5nIGVtcGxveW1lbnQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjgiID0gIlBlcm1hbmVudGx5IHVuYWJsZSB0byB3b3JrIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI5IiA9ICJSZXRpcmVkIikpDQoNCnBzeWNob3BhdGh5X2RmIDwtIHBzeWNob3BhdGh5X2RmICU+JSBtdXRhdGUoU0VTID0gZHBseXI6OnJlY29kZShTRVMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJMb3dlciBtaWRkbGUgY2xhc3MiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIk1pZGRsZSBjbGFzcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAiSGlnaGVyIG1pZGRsZSBjbGFzcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICJVcHBlciBjbGFzcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNyIgPSAiTG93ZXIgY2xhc3MiKSkNCg0KcHN5Y2hvcGF0aHlfZGYgPC0gcHN5Y2hvcGF0aHlfZGYgJT4lIG11dGF0ZShFRFVDQVRJT04gPSBkcGx5cjo6cmVjb2RlKEVEVUNBVElPTiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIk5vIGRpcGxvbWEiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIlByaW1hcnkgZWR1Y2F0aW9uIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJTZWNvbmRhcnkgZWR1Y2F0aW9uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIlZvY2F0aW9uYWwgc2Nob29sIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1IiA9ICJBcHBsaWVkIGNvbGxlZ2UiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjYiID0gIlVuaXZlcnNpdHkiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjciID0gIk90aGVyIikpDQpgYGANCg0KIyMjIFByZWxpbWluYXJ5IGFuYWx5c2lzDQoNCiMjIERlbW9ncmFwaGljcw0KYGBge3J9DQojIEFnZSBieSBHZW5kZXINCnBzeWNob3BhdGh5X2RmICU+JSBncm91cF9ieShHRU5ERVIpICU+JSBzdW1tYXJpc2VfYXQodmFycyhBR0UsIFJFTEFUSU9OU0hJUF9NT05USFMpLCBsaXN0KG1lYW4gPSBtZWFuLCBzZCA9IHNkKSwgbmEucm0gPSBUUlVFKQ0KDQojIFNleHVhbCBPcmllbiBieSBHZW5kZXINCiNwc3ljaG9wYXRoeV9kZiAlPiUgZ3JvdXBfYnkoR0VOREVSKSAlPiUgY291bnQoU0VYVUFMX1BSRUYpDQpwc3ljaG9wYXRoeV9kZiAlPiUgZ3JvdXBfYnkoR0VOREVSLCBTRVhVQUxfUFJFRikgJT4lIHN1bW1hcmlzZShuID0gbigpKSAlPiUgbXV0YXRlKHBlcmNlbnRhZ2UgPSBuIC8gODUgKiAxMDApDQoNCiMgRWR1Y2F0aW9uIGJ5IEdlbmRlcg0KI3BzeWNob3BhdGh5X2RmICU+JSBncm91cF9ieShHRU5ERVIpICU+JSBjb3VudChFRFVDQVRJT04pDQpwc3ljaG9wYXRoeV9kZiAlPiUgZ3JvdXBfYnkoR0VOREVSLCBFRFVDQVRJT04pICU+JSBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIG11dGF0ZShwZXJjZW50YWdlID0gbiAvIDg1ICogMTAwKQ0KDQojIFJlbGF0aW9uc2hpcCBieSBHZW5kZXINCiNwc3ljaG9wYXRoeV9kZiAlPiUgZ3JvdXBfYnkoR0VOREVSKSAlPiUgY291bnQoUkVMQVRJT05TSElQKQ0KcHN5Y2hvcGF0aHlfZGYgJT4lIGdyb3VwX2J5KEdFTkRFUiwgUkVMQVRJT05TSElQKSAlPiUgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSBtdXRhdGUocGVyY2VudGFnZSA9IG4gLyA4NSAqIDEwMCkNCg0KIyBFbXBsb3ltZW50IGJ5IEdlbmRlcg0KI3BzeWNob3BhdGh5X2RmICU+JSBncm91cF9ieShHRU5ERVIpICU+JSBjb3VudChFTVBMT1lNRU5UKQ0KcHN5Y2hvcGF0aHlfZGYgJT4lIGdyb3VwX2J5KEdFTkRFUiwgRU1QTE9ZTUVOVCkgJT4lIHN1bW1hcmlzZShuID0gbigpKSAlPiUgbXV0YXRlKHBlcmNlbnRhZ2UgPSBuIC8gODUgKiAxMDApDQoNCiMgU0VTIGJ5IEdlbmRlcg0KIyBwc3ljaG9wYXRoeV9kZiAlPiUgZ3JvdXBfYnkoR0VOREVSKSAlPiUgY291bnQoU0VTKQ0KcHN5Y2hvcGF0aHlfZGYgJT4lIGdyb3VwX2J5KEdFTkRFUiwgU0VTKSAlPiUgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSBtdXRhdGUocGVyY2VudGFnZSA9IG4gLyA4NSAqIDEwMCkNCg0KIyBjb21wYXJpc29ucw0KDQp0LnRlc3QoQUdFIH4gR0VOREVSLCBwc3ljaG9wYXRoeV9kZiwgdmFyLmVxdWFsID0gVFJVRSkgIyBubyBkaWZmZXJlbmNlDQpjb2hlbi5kKHBzeWNob3BhdGh5X2RmJEFHRSwgcHN5Y2hvcGF0aHlfZGYkR0VOREVSKQ0KDQpgYGANCg0KIyMgSW50ZXJuYWwgY29uc2lzdGVuY3kNCmBgYHtyLCBpbmNsdWRlPSBGQUxTRX0NCiMjIyBJbml0aWFsIGNoZWNrDQoNCiMgVG90YWxzDQpwc3ljaG9wYXRoeV9kZiAlPiUgZHBseXI6OnNlbGVjdChzdGFydHNfd2l0aCgiU1JQX1NGIikpICU+JSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHN5Y2g6OmFscGhhKCkNCg0KcHN5Y2hvcGF0aHlfZGYgJT4lIGRwbHlyOjpzZWxlY3Qoc3RhcnRzX3dpdGgoIlNSUF9QViIpKSAlPiUgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHBzeWNoOjphbHBoYSgpDQoNCiMgQW50aXNvY2lhbCBzdWJzY2FsZXMNCnBzeWNob3BhdGh5X2RmICU+JSBkcGx5cjo6c2VsZWN0KCJTUlBfU0ZfMjAiLCAiU1JQX1NGXzJfUkVWRVJTRUQiLCAiU1JQX1NGXzUiLCAiU1JQX1NGXzYiLCAiU1JQX1NGXzEyIiwgIlNSUF9TRl8yMiIsICJTUlBfU0ZfMjUiLCAiU1JQX1NGXzI5IikgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBwc3ljaDo6YWxwaGEoKQ0KDQpwc3ljaG9wYXRoeV9kZiAlPiUgZHBseXI6OnNlbGVjdCgiU1JQX1BWXzIwIiwgIlNSUF9QVl8yX1JFVkVSU0VEIiwgIlNSUF9QVl81IiwgIlNSUF9QVl82IiwgIlNSUF9QVl8xMiIsICJTUlBfUFZfMjIiLCAiU1JQX1BWXzI1IiwgIlNSUF9QVl8yOSIpICU+JSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHN5Y2g6OmFscGhhKCkNCg0KIyBOT1RFOiBHaXZlbiB0aGUgdmVyeSBsb3cgYWxwaGEgZm9yIHRoZSBhbnRpc29jaWFsIGl0ZW1zLCBpdCB3YXMgZGVjaWRlZCB0byByZW1vdmUgYWxsIGl0ZW1zIGZyb20gdGhlIHN1YnNjYWxlDQoNCiMjIyBBZnRlciByZW1vdmluZyBpdGVtcyAyMCwgMiwgNSwgNiwgMTIsIDIyLCAyNSwgMjkNCg0KcHN5Y2hvcGF0aHlfZGZfc3Vic2V0IDwtIHBzeWNob3BhdGh5X2RmICU+JSANCiAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoKSAlPiUgDQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1jKCJTUlBfU0ZfMjAiLCAiU1JQX1NGXzJfUkVWRVJTRUQiLCAiU1JQX1NGXzUiLCAiU1JQX1NGXzYiLCAiU1JQX1NGXzEyIiwgIlNSUF9TRl8yMiIsICJTUlBfU0ZfMjUiLCAiU1JQX1NGXzI5IiwgIlNSUF9QVl8yMCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTUlBfUFZfMl9SRVZFUlNFRCIsICJTUlBfUFZfNSIsICJTUlBfUFZfNiIsICJTUlBfUFZfMTIiLCAiU1JQX1BWXzIyIiwgIlNSUF9QVl8yNSIsICJTUlBfUFZfMjkiKSkNCmBgYA0KDQpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQ0KDQojIFRvdGFscw0KcHN5Y2hvcGF0aHlfZGZfc3Vic2V0ICU+JSBkcGx5cjo6c2VsZWN0KHN0YXJ0c193aXRoKCJTUlBfU0YiKSkgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHN5Y2g6OmFscGhhKCkNCg0KcHN5Y2hvcGF0aHlfZGZfc3Vic2V0ICU+JSBkcGx5cjo6c2VsZWN0KHN0YXJ0c193aXRoKCJTUlBfUFYiKSkgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHN5Y2g6OmFscGhhKCkNCg0KIyBJbnRlcnBlcnNvbmFsIHN1YnNjYWxlcw0KcHN5Y2hvcGF0aHlfZGZfc3Vic2V0ICU+JSBkcGx5cjo6c2VsZWN0KCJTUlBfU0ZfNyIsICJTUlBfU0ZfOSIsICJTUlBfU0ZfMTAiLCAiU1JQX1NGXzE1IiwgIlNSUF9TRl8xOSIsICJTUlBfU0ZfMjMiLCAiU1JQX1NGXzI2IikgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHN5Y2g6OmFscGhhKCkNCg0KcHN5Y2hvcGF0aHlfZGZfc3Vic2V0ICU+JSBkcGx5cjo6c2VsZWN0KCJTUlBfUFZfNyIsICJTUlBfUFZfOSIsICJTUlBfUFZfMTAiLCAiU1JQX1BWXzE1IiwgIlNSUF9QVl8xOSIsICJTUlBfUFZfMjMiLCAiU1JQX1BWXzI2IikgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHN5Y2g6OmFscGhhKCkNCg0KIyBBZmZlY3RpdmUNCnBzeWNob3BhdGh5X2RmX3N1YnNldCAlPiUgZHBseXI6OnNlbGVjdCgiU1JQX1NGXzMiLCAiU1JQX1NGXzgiLCAiU1JQX1NGXzEzIiwgIlNSUF9TRl8xNiIsICJTUlBfU0ZfMTgiLCAiU1JQX1NGXzI0IiwgIlNSUF9TRl8yOCIpICU+JSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzeWNoOjphbHBoYSgpDQoNCnBzeWNob3BhdGh5X2RmX3N1YnNldCAlPiUgZHBseXI6OnNlbGVjdCgiU1JQX1BWXzMiLCAiU1JQX1BWXzgiLCAiU1JQX1BWXzEzIiwgIlNSUF9QVl8xNiIsICJTUlBfUFZfMTgiLCAiU1JQX1BWXzI0IiwgIlNSUF9QVl8yOCIpICU+JSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzeWNoOjphbHBoYSgpDQoNCiMgTGlmZXN0eWxlDQpwc3ljaG9wYXRoeV9kZl9zdWJzZXQgJT4lIGRwbHlyOjpzZWxlY3QoIlNSUF9TRl8xIiwgIlNSUF9TRl80IiwgIlNSUF9TRl8xMSIsICJTUlBfU0ZfMTQiLCAiU1JQX1NGXzE3IiwgIlNSUF9TRl8yMSIsICJTUlBfU0ZfMjciKSAlPiUgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc3ljaDo6YWxwaGEoKQ0KDQpwc3ljaG9wYXRoeV9kZl9zdWJzZXQgJT4lIGRwbHlyOjpzZWxlY3QoIlNSUF9QVl8xIiwgIlNSUF9QVl80IiwgIlNSUF9QVl8xMSIsICJTUlBfUFZfMTQiLCAiU1JQX1BWXzE3IiwgIlNSUF9QVl8yMSIsICJTUlBfUFZfMjciKSAlPiUgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc3ljaDo6YWxwaGEoKQ0KIyBCREkNCnBzeWNob3BhdGh5X2RmX3N1YnNldCAlPiUgZHBseXI6OnNlbGVjdChzdGFydHNfd2l0aCgiQkRJXyIpKSAlPiUgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc3ljaDo6YWxwaGEoKQ0KDQojIFJBUw0KcHN5Y2hvcGF0aHlfZGZfc3Vic2V0ICU+JSBkcGx5cjo6c2VsZWN0KHN0YXJ0c193aXRoKCJSQVNfIikpICU+JSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzeWNoOjphbHBoYSgpDQpgYGANCg0KDQpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQ0KIyBUb3RhbCBzY29yZXMgZm9yIHZhcmlhYmxlcw0KcHN5Y2hvcGF0aHlfZGZfdG90YWwgPC0gcHN5Y2hvcGF0aHlfZGZfc3Vic2V0ICU+JSBkcGx5cjo6bXV0YXRlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfVE9UQUwgPSByb3dTdW1zKGFjcm9zcyhjKFNSUF9TRl8xOlNSUF9TRl8yOCkpLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BWX1RPVEFMID0gcm93U3VtcyhhY3Jvc3MoYyhTUlBfUFZfMTpTUlBfUFZfMjgpKSwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJESSA9IHJvd1N1bXMoYWNyb3NzKGMoQkRJXzE6QkRJXzEwKSksIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVMgPSByb3dTdW1zKGFjcm9zcyhjKFJBU18xOlJBU183KSksIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfSU5URVJQRVJTT05BTCA9IHJvd1N1bXMoYWNyb3NzKGMoU1JQX1NGXzcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NGXzksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NGXzEwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9TRl8xNSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0ZfMTksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0ZfMjMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NGXzI2KSksIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkUgPSByb3dTdW1zKGFjcm9zcyhjKFNSUF9TRl8zLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NGXzgsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0ZfMTMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0ZfMTYsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0ZfMTgsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0ZfMjQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0ZfMjgpKSwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0xJRkVTVFlMRSA9IHJvd1N1bXMoYWNyb3NzKGMoU1JQX1NGXzEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NGXzQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NGXzExLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9TRl8xNCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0ZfMTcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NGXzIxLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9TRl8yNykpLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTCA9IHJvd1N1bXMoYWNyb3NzKGMoU1JQX1BWXzcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BWXzksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BWXzEwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9QVl8xNSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUFZfMTksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUFZfMjMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BWXzI2KSksIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9BRkZFQ1RJVkUgPSByb3dTdW1zKGFjcm9zcyhjKFNSUF9QVl8zLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BWXzgsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUFZfMTMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUFZfMTYsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUFZfMTgsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUFZfMjQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUFZfMjgpKSwgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0xJRkVTVFlMRSA9IHJvd1N1bXMoYWNyb3NzKGMoU1JQX1BWXzEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BWXzQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BWXzExLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9QVl8xNCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUFZfMTcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BWXzIxLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9QVl8yNykpLCBuYS5ybSA9IFRSVUUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KYGBgDQoNCiMjIERlc2NyaXB0aXZlIHN0YXRpc3RpY3MNCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9DQojIEFsbCB2YXJpYWJsZXMgYnkgZ2VuZGVyDQpwc3ljaG9wYXRoeV9kZl90b3RhbCAlPiUgZ3JvdXBfYnkoR0VOREVSKSAlPiUgc3VtbWFyaXNlX2F0KHZhcnMoU1JQX1NFTEZfVE9UQUwsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9QVl9UT1RBTCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRJX1RPVEFMLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVNfVE9UQUwsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0lOVEVSUEVSU09OQUwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfQUZGRUNUSVZFLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9BRkZFQ1RJVkUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0xJRkVTVFlMRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEUpLCBsaXN0KG1lYW4gPSBtZWFuLCBzZCA9IHNkLCBtaW4gPSBtaW4sIG1heCA9IG1heCksIG5hLnJtID0gVFJVRSkgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLm1hdHJpeCgpDQojIFRvdGFsDQpwc3ljaG9wYXRoeV9kZl90b3RhbCAlPiUgc3VtbWFyaXNlX2F0KHZhcnMoU1JQX1NFTEZfVE9UQUwsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9QVl9UT1RBTCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRJX1RPVEFMLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVNfVE9UQUwsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0lOVEVSUEVSU09OQUwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfQUZGRUNUSVZFLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9BRkZFQ1RJVkUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0xJRkVTVFlMRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEUpLCBsaXN0KG1lYW4gPSBtZWFuLCBzZCA9IHNkLCBtaW4gPSBtaW4sIG1heCA9IG1heCksIG5hLnJtID0gVFJVRSkgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLm1hdHJpeCgpDQpgYGANCg0KYGBge3J9DQpwc3ljaG9wYXRoeV9kZl90b3RhbCRHRU5ERVIgPC0gZmFjdG9yKHBzeWNob3BhdGh5X2RmX3RvdGFsJEdFTkRFUiwgb3JkZXJlZCA9IEZBTFNFKQ0KcHN5Y2hvcGF0aHlfZGZfdG90YWwkR0VOREVSIDwtIHJlbGV2ZWwocHN5Y2hvcGF0aHlfZGZfdG90YWwkR0VOREVSLCByZWYgPSAiTWFsZSIpDQoNCg0KIyBEaWZmZXJlbmNlcyBpbiB0aGUgYWJvdmUNCnQudGVzdChTUlBfU0VMRl9UT1RBTCB+IEdFTkRFUiwgcHN5Y2hvcGF0aHlfZGZfdG90YWwsIHZhci5lcXVhbCA9IFRSVUUpICMgc2lnIGRpZmZlcmVuY2UsIG1lbiBncmVhdGVyIHRoYW4gd29tZW4NCnQudGVzdChTUlBfUFZfVE9UQUwgfiBHRU5ERVIsIHBzeWNob3BhdGh5X2RmX3RvdGFsLCB2YXIuZXF1YWwgPSBUUlVFKSAjIHNpZyBkaWZmZXJlbmNlLCB3b21lbiBncmVhdGVyIHRoYW4gbWVuDQp0LnRlc3QoQkRJX1RPVEFMIH4gR0VOREVSLCBwc3ljaG9wYXRoeV9kZl90b3RhbCwgdmFyLmVxdWFsID0gVFJVRSkgIyBzaWcgZGlmZmVyZW5jZSwgd29tZW4gZ3JlYXRlciB0aGFuIG1lbg0KdC50ZXN0KFJBU19UT1RBTCB+IEdFTkRFUiwgcHN5Y2hvcGF0aHlfZGZfdG90YWwsIHZhci5lcXVhbCA9IFRSVUUpICMgbm8gZGlmZmVyZW5jZQ0KdC50ZXN0KFNSUF9TRUxGX0lOVEVSUEVSU09OQUwgfiBHRU5ERVIsIHBzeWNob3BhdGh5X2RmX3RvdGFsLCB2YXIuZXF1YWwgPSBUUlVFKSAjIHNpZyBkaWZmZXJlbmNlLCBtZW4gZ3JlYXRlciB0aGFuIHdvbWVuDQp0LnRlc3QoU1JQX1NFTEZfQUZGRUNUSVZFIH4gR0VOREVSLCBwc3ljaG9wYXRoeV9kZl90b3RhbCwgdmFyLmVxdWFsID0gVFJVRSkgIyBzaWcgZGlmZmVyZW5jZSwgbWVuIGdyZWF0ZXIgdGhhbiB3b21lbg0KdC50ZXN0KFNSUF9TRUxGX0xJRkVTVFlMRSB+IEdFTkRFUiwgcHN5Y2hvcGF0aHlfZGZfdG90YWwsIHZhci5lcXVhbCA9IFRSVUUpICMgbm8gZGlmZmVyZW5jZQ0KdC50ZXN0KFNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUwgfiBHRU5ERVIsIHBzeWNob3BhdGh5X2RmX3RvdGFsLCB2YXIuZXF1YWwgPSBUUlVFKSAjIG5vIGRpZmZlcmVuY2UNCnQudGVzdChTUlBfUEFSVE5FUl9BRkZFQ1RJVkUgfiBHRU5ERVIsIHBzeWNob3BhdGh5X2RmX3RvdGFsLCB2YXIuZXF1YWwgPSBUUlVFKSAjIHNpZyBkaWZmZXJlbmNlLCB3b21lbiBncmVhdGVyIHRoYW4gbWVuDQp0LnRlc3QoU1JQX1BBUlRORVJfTElGRVNUWUxFIH4gR0VOREVSLCBwc3ljaG9wYXRoeV9kZl90b3RhbCwgdmFyLmVxdWFsID0gVFJVRSkgIyBubyBkaWZmZXJlbmNlDQoNCiMgQ29oZW4ncyBkDQoNCmNvaGVuLmQocHN5Y2hvcGF0aHlfZGZfdG90YWwkU1JQX1NFTEZfVE9UQUwsIHBzeWNob3BhdGh5X2RmX3RvdGFsJEdFTkRFUikNCmNvaGVuLmQocHN5Y2hvcGF0aHlfZGZfdG90YWwkU1JQX1BWX1RPVEFMLCBwc3ljaG9wYXRoeV9kZl90b3RhbCRHRU5ERVIpDQpjb2hlbi5kKHBzeWNob3BhdGh5X2RmX3RvdGFsJEJESV9UT1RBTCwgcHN5Y2hvcGF0aHlfZGZfdG90YWwkR0VOREVSKQ0KY29oZW4uZChwc3ljaG9wYXRoeV9kZl90b3RhbCRSQVNfVE9UQUwsIHBzeWNob3BhdGh5X2RmX3RvdGFsJEdFTkRFUikNCmNvaGVuLmQocHN5Y2hvcGF0aHlfZGZfdG90YWwkU1JQX1NFTEZfSU5URVJQRVJTT05BTCwgcHN5Y2hvcGF0aHlfZGZfdG90YWwkR0VOREVSKQ0KY29oZW4uZChwc3ljaG9wYXRoeV9kZl90b3RhbCRTUlBfU0VMRl9BRkZFQ1RJVkUsIHBzeWNob3BhdGh5X2RmX3RvdGFsJEdFTkRFUikNCmNvaGVuLmQocHN5Y2hvcGF0aHlfZGZfdG90YWwkU1JQX1NFTEZfTElGRVNUWUxFLCBwc3ljaG9wYXRoeV9kZl90b3RhbCRHRU5ERVIpDQpjb2hlbi5kKHBzeWNob3BhdGh5X2RmX3RvdGFsJFNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUwsIHBzeWNob3BhdGh5X2RmX3RvdGFsJEdFTkRFUikNCmNvaGVuLmQocHN5Y2hvcGF0aHlfZGZfdG90YWwkU1JQX1BBUlRORVJfQUZGRUNUSVZFLCBwc3ljaG9wYXRoeV9kZl90b3RhbCRHRU5ERVIpDQpjb2hlbi5kKHBzeWNob3BhdGh5X2RmX3RvdGFsJFNSUF9QQVJUTkVSX0xJRkVTVFlMRSwgcHN5Y2hvcGF0aHlfZGZfdG90YWwkR0VOREVSKQ0KDQoNCmBgYA0KDQpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQ0KIyBTZWxlY3Qgb25seSB0aGUgbnVtZXJpYyB0b3RhbCBzY29yZXMNCiMgU3Vic2V0IGEganVzdCBudW1lcmljIHZlcnNpb24sIHdlJ2xsIGFkZCBiYWNrIGluIEdFTkRFUiBldGMgbGF0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICANCnBzeWNob3BhdGh5X2RmX3RvdGFsX3N1YiA8LSBwc3ljaG9wYXRoeV9kZl90b3RhbCAlPiUgZHBseXI6OnNlbGVjdChTUlBfU0VMRl9UT1RBTCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1BWX1RPVEFMLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0xJRkVTVFlMRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRJX1RPVEFMLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQoNCg0KIyBDYWxjdWxhdGUgZGVzY3JpcHRpdmUgaW5mb3JtYXRpb24NCm12bihwc3ljaG9wYXRoeV9kZl90b3RhbF9zdWIpDQoNCiMgQ29ycmVsYXRpb24gbWF0cml4DQpjb3JyIDwtIGNvcnIudGVzdChhcy5tYXRyaXgocHN5Y2hvcGF0aHlfZGZfdG90YWxfc3ViKSkNCnByaW50KGNvcnIsIHNob3J0PUZBTFNFKQ0KDQpgYGANCg0KDQpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQ0KIyBDcmVhdGUgZHlhZGljIGRhdGEgc3RydWN0dXJlDQoNCiMgU2V0IHVwIGRhdGEgZnJhbWUgZm9yIGFuYWx5c2lzDQojIEluIHRoaXMgc3RlcCB0aGUgZGF0YSBpcyBlc3RhYmxpc2hlZCB0byBiZSBhIGR5YWRpYyBzdHJ1Y3R1cmUuIA0KIyBQbGVhc2Ugbm90ZTogdGhpcyBjb2RlIGlzIHRlcnJpYmxlLCBidXQgaWYgaXQgaXNuJ3QgYnJva2VuIGRvbid0IGZpeCBpdC4uLg0KDQojIEFkZCB0aGUgSUQgYW5kIGdlbmRlciB2YXJpYWJsZXMgYmFjayBpbiBhbiBvcmRlciB0aGUgZGF0YSBieSBJRCANCnBzeWNob3BhdGh5X2RmX3RvdGFsX3N1YiRJRCA8LSBwc3ljaG9wYXRoeV9kZiRORVdfRHlhZF9JRA0KcHN5Y2hvcGF0aHlfZGZfdG90YWxfc3ViJEdlbmRlciA8LSBwc3ljaG9wYXRoeV9kZiRHRU5ERVINCnBzeWNob3BhdGh5X2RmX3RvdGFsX3N1YiA8LSBwc3ljaG9wYXRoeV9kZl90b3RhbF9zdWIgJT4lIGFycmFuZ2UoZGVzYyhJRCkpDQoNCiMgU3BsaXQgYnkgZ2VuZGVyLCByZWNvbWJpbmUgaW50byBkeWFkaWMgc3RydWN0dXJlDQojIHRvdGFsX3Njb3Jlc19zdWJzZXQkR2VuZGVyIDwtIGFzLmZhY3Rvcih0b3RhbF9zY29yZXNfc3Vic2V0JEdFTkRFUikNCnRlbXAgPC0gc3BsaXQocHN5Y2hvcGF0aHlfZGZfdG90YWxfc3ViLCBwc3ljaG9wYXRoeV9kZl90b3RhbF9zdWIkR2VuZGVyKQ0KcHN5Y2hvcGF0aHlfZGZfZHlhZCA8LSBjYmluZCh0ZW1wW1siTWFsZSJdXSwgdGVtcFtbIkZlbWFsZSJdXSkNCnBzeWNob3BhdGh5X2RmX2R5YWQgPC0gc3Vic2V0KHBzeWNob3BhdGh5X2RmX2R5YWQsIHNlbGVjdCA9IC1jKEdlbmRlcikpDQpwc3ljaG9wYXRoeV9kZl9keWFkIDwtIHN1YnNldChwc3ljaG9wYXRoeV9kZl9keWFkLCBzZWxlY3QgPSAtYyhHZW5kZXIpKQ0KcHN5Y2hvcGF0aHlfZGZfZHlhZCA8LSBzdWJzZXQocHN5Y2hvcGF0aHlfZGZfZHlhZCwgc2VsZWN0ID0gLWMoSUQpKQ0KcHN5Y2hvcGF0aHlfZGZfZHlhZCA8LSBzdWJzZXQocHN5Y2hvcGF0aHlfZGZfZHlhZCwgc2VsZWN0ID0gLWMoSUQuMSkpDQoNCiMgUmVuYW1lIHRoZSBmZW1hbGUgY29sdW1ucyBpbnRvIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwgDQpwc3ljaG9wYXRoeV9kZl9keWFkIDwtIHBzeWNob3BhdGh5X2RmX2R5YWQgJT4lIGRwbHlyOjpyZW5hbWUoU1JQX1NFTEZfVE9UQUxfd29tZW4gPSBTUlBfU0VMRl9UT1RBTC4xLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUFZfVE9UQUxfd29tZW4gPSBTUlBfUFZfVE9UQUwuMSAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfSU5URVJQRVJTT05BTF93b21lbiA9IFNSUF9TRUxGX0lOVEVSUEVSU09OQUwuMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkVfd29tZW4gPSBTUlBfU0VMRl9BRkZFQ1RJVkUuMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfU0VMRl9MSUZFU1RZTEVfd29tZW4gPSBTUlBfU0VMRl9MSUZFU1RZTEUuMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMX3dvbWVuID0gU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTC4xLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbiA9IFNSUF9QQVJUTkVSX0FGRkVDVElWRS4xICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4gPSBTUlBfUEFSVE5FUl9MSUZFU1RZTEUuMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRElfVE9UQUxfd29tZW4gPSBCRElfVE9UQUwuMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gPSBSQVNfVE9UQUwuMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCg0KcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuIDwtIHBzeWNob3BhdGh5X2RmX2R5YWQgJT4lIG11dGF0ZV9hbGwofihzY2FsZSguKSAlPiUgYXMudmVjdG9yKSkNCg0KYGBgDQoNCiMjIENvcnJlbGF0aW9ucyAoZHlhZCBmb3JtYXQpOg0KYGBge3J9DQpkcm9wcGVkIDwtIHBzeWNob3BhdGh5X2RmX2R5YWQgJT4lIHNlbGVjdCgtYyhSQVNfVE9UQUwsIFJBU19UT1RBTF93b21lbikpDQpjb3JyIDwtIGNvcnIudGVzdChhcy5tYXRyaXgocHN5Y2hvcGF0aHlfZGZfZHlhZCkpDQpwcmludChjb3JyLCBzaG9ydD1GQUxTRSkNCg0KYGBgDQoNCg0KIyMjIEFQSU0gbW9kZWxzDQoNCiMgRnVsbCBBUElNICh0b3RhbHMpDQpgYGB7cn0NCiMgRnVsbCBBUElNIHRha2luZyB0b3RhbHMNCmZ1bGxfYXBpbSA8LSAnDQogICAgICAgICAgICAgICMgUmVncmVzc2lvbiBwYXRocyANCiAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICAgfiBiMSpTUlBfU0VMRl9UT1RBTCAjIFBhdGggYjEsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjIqU1JQX1NFTEZfVE9UQUxfd29tZW4gIyBQYXRoIGIyLCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICAgfiBiMypTUlBfU0VMRl9UT1RBTF93b21lbiAjIFBhdGggYjMsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiNCpTUlBfU0VMRl9UT1RBTCAjIFBhdGggYjQsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICAgfiBiNSpTUlBfUFZfVE9UQUwgIyBQYXRoIGI1LCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9QVl9tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMICB+IGI2KlNSUF9QVl9UT1RBTF93b21lbiAjIFBhdGggYjYsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9QVl93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gICB+IGI3KlNSUF9QVl9UT1RBTF93b21lbiAjIFBhdGggYjcsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiOCpTUlBfUFZfVE9UQUwgIyBQYXRoIGI4LCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfUFZfbWVuDQogICAgICAgICAgICAgICMgSW50ZXJjZXB0cw0KICAgICAgICAgICAgICBTUlBfU0VMRl9UT1RBTCB+IGExKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgU1JQX1NFTEZfVE9UQUxfd29tZW4gfiBhMioxICMgSW50ZXJjZXB0IGZvciBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+IGEzKjEgIyBJbnRlcmNlcHQgZm9yIFJBU193b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBhNCoxICMgSW50ZXJjZXB0IGZvciBSQVNfbWVuDQogICAgICAgICAgICAgIFNSUF9QVl9UT1RBTCB+IGE1KjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9QVl9tZW4NCiAgICAgICAgICAgICAgU1JQX1BWX1RPVEFMX3dvbWVuIH4gYTYqMSAjIEludGVyY2VwdCBmb3IgU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAgICMgVmFyaWFuY2VzDQogICAgICAgICAgICAgIFNSUF9TRUxGX1RPVEFMIH5+IHYxKlNSUF9TRUxGX1RPVEFMDQogICAgICAgICAgICAgIFNSUF9TRUxGX1RPVEFMX3dvbWVuIH5+IHYyKlNSUF9TRUxGX1RPVEFMX3dvbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfn4gdjMqUkFTX1RPVEFMX3dvbWVuIA0KICAgICAgICAgICAgICBSQVNfVE9UQUwgfn4gdjQqUkFTX1RPVEFMDQogICAgICAgICAgICAgIFNSUF9QVl9UT1RBTCB+fiB2NSpTUlBfUFZfVE9UQUwNCiAgICAgICAgICAgICAgU1JQX1BWX1RPVEFMX3dvbWVuIH5+IHY2KlNSUF9QVl9UT1RBTF93b21lbg0KICAgICAgICAgICAgICAjIENvdmFyaWFuY2VzDQogICAgICAgICAgICAgIFNSUF9TRUxGX1RPVEFMX3dvbWVuIH5+IGMxKlNSUF9TRUxGX1RPVEFMDQogICAgICAgICAgICAgIFJBU19UT1RBTCB+fiBjMipSQVNfVE9UQUxfd29tZW4gIA0KICAgICAgICAgICAgICBTUlBfUFZfVE9UQUxfd29tZW4gfn4gYzMqU1JQX1BWX1RPVEFMDQogICAgICAgICAgICAgIFNSUF9TRUxGX1RPVEFMIH5+IGM0KlNSUF9QVl9UT1RBTA0KICAgICAgICAgICAgICBTUlBfU0VMRl9UT1RBTCB+fiBjNSpTUlBfUFZfVE9UQUxfd29tZW4NCiAgICAgICAgICAgICAgU1JQX1NFTEZfVE9UQUxfd29tZW4gfn4gYzYqU1JQX1BWX1RPVEFMDQogICAgICAgICAgICAgIFNSUF9TRUxGX1RPVEFMX3dvbWVuIH5+IGM3KlNSUF9QVl9UT1RBTF93b21lbg0KICAgICAgICAgICAgICAjIERlZmluZWQgcGFyYW1ldGVycw0KICAgICAgICAgICAgICAjIEF2ZyBlZmZlY3RzDQogICAgICAgICAgICAgIHNmX2FjdG9yIDo9IChiNCArIGIzKS8yDQogICAgICAgICAgICAgIHNmX3BhcnRuZXIgOj0gKGIyICsgYjEpLzINCiAgICAgICAgICAgICAgcHZfYWN0b3IgOj0gKGI4ICsgYjcpLzINCiAgICAgICAgICAgICAgcHZfcGFydG5lciA6PSAoYjYgKyBiNSkvMg0KICAgICAgICAgICAgICAjIERpZmZlcmVuY2VzDQogICAgICAgICAgICAgIHNmX2FjdG9yX2RpZmYgOj0gYjQgLSBiMw0KICAgICAgICAgICAgICBzZl9wYXJ0bmVyX2RpZmYgOj0gYjIgLSBiMQ0KICAgICAgICAgICAgICBwdl9hY3Rvcl9kaWZmIDo9IGI4IC0gYjcNCiAgICAgICAgICAgICAgcHZfcGFydG5lcl9kaWZmIDo9IGI2IC0gYjUNCicNCiMgRml0IHRoZSBhYm92ZSBtb2RlbCB1c2luZyBNTFINCmZpdF9hcGltIDwtIHNlbShmdWxsX2FwaW0sIGRhdGEgPSBwc3ljaG9wYXRoeV9kZl9keWFkX3N0YW4sIGVzdGltYXRvciA9ICJNTE0iKQ0KIyBzdW1tYXJ5KGZpdF9hcGltKQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9hcGltLCBib290LmNpLnR5cGUgPSAiYmNhLnNpbXBsZSIsIHN0YW5kYXJkaXplZCA9IFRSVUUsIHJzcXVhcmUgPSBUUlVFKQ0KDQpgYGANCg0KIyMgTWluaSBBUElNcyAodG90YWxzKQ0KYGBge3J9DQojIE1pbmkgbW9kZWxzIGZvciB0b3RhbHMNCg0KIyBNZW4gcmF0aW5nIHRoZW1zZWx2ZXMgLSB3b21lbiByYXRpbmcgdGhlaXIgcGFydG5lcnMNCkFQSU1fbWluaTEgPC0gJw0KICAgICAgICAgICAgIyBSZWdyZXNzaW9uIHBhdGhzDQogICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYjEqU1JQX1NFTEZfVE9UQUwgIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9TRl9tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiMipTUlBfU0VMRl9UT1RBTCAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl9tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBiMypTUlBfUFZfVE9UQUxfd29tZW4gICMgUGF0aCBiMywgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfUFZfd29tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiNCpTUlBfUFZfVE9UQUxfd29tZW4gICMgUGF0aCBiNCwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAjIEludGVyY2VwdHMNCiAgICAgICAgICAgIFNSUF9TRUxGX1RPVEFMIH4gYTEqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX21lbg0KICAgICAgICAgICAgU1JQX1BWX1RPVEFMX3dvbWVuICB+IGEyKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9QVl93b21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuIH4gYTMqMSAjIEludGVyY2VwdCBmb3IgUkFTX3dvbWVuDQogICAgICAgICAgICBSQVNfVE9UQUwgfiBhNCoxICMgSW50ZXJjZXB0IGZvciBSQVNfbWVuDQogICAgICAgICAgICAjIFZhcmlhbmNlcw0KICAgICAgICAgICAgU1JQX1NFTEZfVE9UQUwgfn4gdjEqU1JQX1NFTEZfVE9UQUwNCiAgICAgICAgICAgIFNSUF9QVl9UT1RBTF93b21lbiAgfn4gdjIqU1JQX1BWX1RPVEFMX3dvbWVuIA0KICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuIH5+IHYzKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMIH5+IHY0KlJBU19UT1RBTA0KICAgICAgICAgICAgIyBDb3ZhcmlhbmNlcw0KICAgICAgICAgICAgUkFTX1RPVEFMIH5+IGMxKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgU1JQX1NFTEZfVE9UQUwgfn4gYzIqU1JQX1BWX1RPVEFMX3dvbWVuIA0KICAgICAgICAgICAgDQonDQoNCmZpdF9taW5pMSA8LSBzZW0oQVBJTV9taW5pMSwgZGF0YSA9IHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbiwgZXN0aW1hdG9yID0gIk1MTSIpDQojIHN1bW1hcnkoZml0X21pbmkxKQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9taW5pMSwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCg0KIyAgTWVuIHJhdGluZyB0aGVtc2VsdmVzLCB3b21lbiByYXRpbmcgdGhlbXNlbHZlcw0KQVBJTV9taW5pMiA8LSAnDQogICAgICAgICAgICAjIFJlZ3Jlc3Npb24gcGF0aHMNCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBiMSpTUlBfU0VMRl9UT1RBTCAjIFBhdGggYjEsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMICB+IGIyKlNSUF9TRUxGX1RPVEFMICMgUGF0aCBiMiwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1NGX21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+IGIzKlNSUF9TRUxGX1RPVEFMX3dvbWVuICMgUGF0aCBiMywgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiNCpTUlBfU0VMRl9UT1RBTF93b21lbiAjIFBhdGggYjQsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgIyBJbnRlcmNlcHRzDQogICAgICAgICAgICBTUlBfU0VMRl9UT1RBTCB+IGExKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl9tZW4NCiAgICAgICAgICAgIFNSUF9TRUxGX1RPVEFMX3dvbWVuIH4gYTIqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX3dvbWVuDQogICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfiBhMyoxICMgSW50ZXJjZXB0IGZvciBSQVNfd29tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTCB+IGE0KjEgIyBJbnRlcmNlcHQgZm9yIFJBU19tZW4NCiAgICAgICAgICAgICMgVmFyaWFuY2VzDQogICAgICAgICAgICBTUlBfU0VMRl9UT1RBTCB+fiB2MSpTUlBfU0VMRl9UT1RBTA0KICAgICAgICAgICAgU1JQX1NFTEZfVE9UQUxfd29tZW4gfn4gdjIqU1JQX1NFTEZfVE9UQUxfd29tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+fiB2MypSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTCB+fiB2NCpSQVNfVE9UQUwNCiAgICAgICAgICAgICMgQ292YXJpYW5jZXMNCiAgICAgICAgICAgIFJBU19UT1RBTCB+fiBjMSpSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgIFNSUF9TRUxGX1RPVEFMIH5+IGMyKlNSUF9TRUxGX1RPVEFMX3dvbWVuDQonDQoNCmZpdF9taW5pMiA8LSBzZW0oQVBJTV9taW5pMiwgZGF0YSA9IHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbiwgZXN0aW1hdG9yID0gIk1MTSIpDQojIHN1bW1hcnkoZml0X21pbmkyKQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9taW5pMiwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCg0KIyBXb21lbiByYXRpbmcgdGhlbXNlbHZlcywgbWVuIHJhdGluZyB0aGVpciBwYXJ0bmVyDQpBUElNX21pbmkzIDwtICcNCiAgICAgICAgICAgICMgUmVncmVzc2lvbiBwYXRocw0KICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+IGIxKlNSUF9TRUxGX1RPVEFMX3dvbWVuICAjIFBhdGggYjEsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX3dvbWVuDQogICAgICAgICAgICBSQVNfVE9UQUwgfiBiMipTUlBfU0VMRl9UT1RBTF93b21lbiAgIyBQYXRoIGIyLCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBiMypTUlBfUFZfVE9UQUwgIyBQYXRoIGIzLCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9QVl9tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTCB+IGI0KlNSUF9QVl9UT1RBTCAjIFBhdGggYjQsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9QVl9tZW4NCiAgICAgICAgICAgICMgSW50ZXJjZXB0cw0KICAgICAgICAgICAgU1JQX1NFTEZfVE9UQUxfd29tZW4gIH4gYTEqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX3dvbWVuDQogICAgICAgICAgICBTUlBfUFZfVE9UQUwgfiBhMioxICMgSW50ZXJjZXB0IGZvciBTUlBfUFZfbWVuDQogICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYTMqMSAjIEludGVyY2VwdCBmb3IgUkFTX3dvbWVuDQogICAgICAgICAgICBSQVNfVE9UQUwgfiBhNCoxICMgSW50ZXJjZXB0IGZvciBSQVNfbWVuDQogICAgICAgICAgICAjIFZhcmlhbmNlcw0KICAgICAgICAgICAgU1JQX1NFTEZfVE9UQUxfd29tZW4gIH5+IHYxKlNSUF9TRUxGX1RPVEFMX3dvbWVuIA0KICAgICAgICAgICAgU1JQX1BWX1RPVEFMIH5+IHYyKlNSUF9QVl9UT1RBTA0KICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+fiB2MypSQVNfVE9UQUxfd29tZW4gDQogICAgICAgICAgICBSQVNfVE9UQUwgfn4gdjQqUkFTX1RPVEFMDQogICAgICAgICAgICAjIENvdmFyaWFuY2VzDQogICAgICAgICAgICBSQVNfVE9UQUwgfn4gYzEqUkFTX1RPVEFMX3dvbWVuIA0KICAgICAgICAgICAgU1JQX1NFTEZfVE9UQUxfd29tZW4gIH5+IGMyKlNSUF9QVl9UT1RBTA0KJw0KDQpmaXRfbWluaTMgPC0gc2VtKEFQSU1fbWluaTMsIGRhdGEgPSBwc3ljaG9wYXRoeV9kZl9keWFkX3N0YW4sIGVzdGltYXRvciA9ICJNTE0iKQ0KIyBzdW1tYXJ5KGZpdF9taW5pMykNCnBhcmFtZXRlcmVzdGltYXRlcyhmaXRfbWluaTMsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIiwgc3RhbmRhcmRpemVkID0gVFJVRSwgcnNxdWFyZSA9IFRSVUUpDQoNCiMgV29tZW4gcmF0aW5nIHRoZWlyIHBhcnRuZXIsIG1lbiByYXRpbmcgdGhlaXIgcGFydG5lcg0KQVBJTV9taW5pNCA8LSAnDQogICAgICAgICAgICAjIFJlZ3Jlc3Npb24gcGF0aHMNCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+IGIxKlNSUF9QVl9UT1RBTCAgIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBUyB3b21lbiBvbnRvIFNSUF9QVl9tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTCB+IGIyKlNSUF9QVl9UT1RBTCAgIyBQYXRoIGIyLCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfUFZfbWVuDQogICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfiBiMSpTUlBfUFZfVE9UQUxfd29tZW4gIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBUyB3b21lbiBvbnRvIFNSUF9QVl93b21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMIH4gYjIqU1JQX1BWX1RPVEFMX3dvbWVuICMgUGF0aCBiMiwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAjIEludGVyY2VwdHMNCiAgICAgICAgICAgIFNSUF9QVl9UT1RBTCAgfiBhMSoxICMgSW50ZXJjZXB0IGZvciBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgIFNSUF9QVl9UT1RBTF93b21lbiB+IGEyKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9QVl9tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+IGEzKjEgIyBJbnRlcmNlcHQgZm9yIFJBU193b21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMIH4gYTQqMSAjIEludGVyY2VwdCBmb3IgUkFTX21lbg0KICAgICAgICAgICAgIyBWYXJpYW5jZXMNCiAgICAgICAgICAgIFNSUF9QVl9UT1RBTCAgfn4gdjEqU1JQX1BWX1RPVEFMIA0KICAgICAgICAgICAgU1JQX1BWX1RPVEFMX3dvbWVuIH5+IHYyKlNSUF9QVl9UT1RBTF93b21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuIH5+IHYzKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMIH5+IHY0KlJBU19UT1RBTA0KICAgICAgICAgICAgIyBDb3ZhcmlhbmNlcw0KICAgICAgICAgICAgUkFTX1RPVEFMIH5+IGMxKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgU1JQX1BWX1RPVEFMICB+fiBjMipTUlBfUFZfVE9UQUxfd29tZW4NCicNCmZpdF9taW5pNCA8LSBzZW0oQVBJTV9taW5pNCwgZGF0YSA9IHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbiwgZXN0aW1hdG9yID0gIk1MTSIpDQojIHN1bW1hcnkoZml0X21pbmk0KQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9taW5pNCwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCg0KYGBgDQoNCg0KIyMgRnVsbCBBUElNIChpbnRlcnBlcnNvbmFsKQ0KYGBge3J9DQojIEZ1bGwgQVBJTSBpbnRlcnBlcnNvbmFsDQoNCmZ1bGxfYXBpbTIgPC0gJw0KICAgICAgICAgICAgICAjIFJlZ3Jlc3Npb24gcGF0aHMgDQogICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgIH4gYjEqU1JQX1NFTEZfSU5URVJQRVJTT05BTCAjIFBhdGggYjEsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjIqU1JQX1NFTEZfSU5URVJQRVJTT05BTF93b21lbiAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gICB+IGIzKlNSUF9TRUxGX0lOVEVSUEVSU09OQUxfd29tZW4gIyBQYXRoIGIzLCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjQqU1JQX1NFTEZfSU5URVJQRVJTT05BTCAjIFBhdGggYjQsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICAgfiBiNSpTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMICMgUGF0aCBiNSwgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfUEFSVE5FUl9tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMICB+IGI2KlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4gIyBQYXRoIGI2LCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfUEFSVE5FUl93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gICB+IGI3KlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4gIyBQYXRoIGI3LCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9QQVJUTkVSX3dvbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiOCpTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMICMgUGF0aCBiOCwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1BBUlRORVJfbWVuDQogICAgICAgICAgICAgICMgSW50ZXJjZXB0cw0KICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMIH4gYTEqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX21lbg0KICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMX3dvbWVuIH4gYTIqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBhMyoxICMgSW50ZXJjZXB0IGZvciBSQVNfd29tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMIH4gYTQqMSAjIEludGVyY2VwdCBmb3IgUkFTX21lbg0KICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMIH4gYTUqMSAjIEludGVyY2VwdCBmb3IgU1JQX1BBUlRORVJfbWVuDQogICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4gfiBhNioxICMgSW50ZXJjZXB0IGZvciBTUlBfUEFSVE5FUl93b21lbg0KICAgICAgICAgICAgICAjIFZhcmlhbmNlcw0KICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMIH5+IHYxKlNSUF9TRUxGX0lOVEVSUEVSU09OQUwNCiAgICAgICAgICAgICAgU1JQX1NFTEZfSU5URVJQRVJTT05BTF93b21lbiB+fiB2MipTUlBfU0VMRl9JTlRFUlBFUlNPTkFMX3dvbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfn4gdjMqUkFTX1RPVEFMX3dvbWVuIA0KICAgICAgICAgICAgICBSQVNfVE9UQUwgfn4gdjQqUkFTX1RPVEFMDQogICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUwgfn4gdjUqU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTA0KICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMX3dvbWVuIH5+IHY2KlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4NCiAgICAgICAgICAgICAgIyBDb3ZhcmlhbmNlcw0KICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMX3dvbWVuIH5+IGMxKlNSUF9TRUxGX0lOVEVSUEVSU09OQUwNCiAgICAgICAgICAgICAgUkFTX1RPVEFMIH5+IGMyKlJBU19UT1RBTF93b21lbiAgDQogICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4gfn4gYzMqU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTA0KICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMIH5+IGM0KlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUwNCiAgICAgICAgICAgICAgU1JQX1NFTEZfSU5URVJQRVJTT05BTCB+fiBjNSpTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMX3dvbWVuDQogICAgICAgICAgICAgIFNSUF9TRUxGX0lOVEVSUEVSU09OQUxfd29tZW4gfn4gYzYqU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTA0KICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMX3dvbWVuIH5+IGM3KlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4NCiAgICAgICAgICAgICAgIyBEZWZpbmVkIHBhcmFtZXRlcnMNCiAgICAgICAgICAgICAgIyBBdmcgZWZmZWN0cw0KICAgICAgICAgICAgICBzZl9hY3RvciA6PSAoYjQgKyBiMykvMg0KICAgICAgICAgICAgICBzZl9wYXJ0bmVyIDo9IChiMiArIGIxKS8yDQogICAgICAgICAgICAgIHB2X2FjdG9yIDo9IChiOCArIGI3KS8yDQogICAgICAgICAgICAgIHB2X3BhcnRuZXIgOj0gKGI2ICsgYjUpLzINCiAgICAgICAgICAgICAgIyBEaWZmZXJlbmNlcw0KICAgICAgICAgICAgICBzZl9hY3Rvcl9kaWZmIDo9IGI0IC0gYjMNCiAgICAgICAgICAgICAgc2ZfcGFydG5lcl9kaWZmIDo9IGIyIC0gYjENCiAgICAgICAgICAgICAgcHZfYWN0b3JfZGlmZiA6PSBiOCAtIGI3DQogICAgICAgICAgICAgIHB2X3BhcnRuZXJfZGlmZiA6PSBiNiAtIGI1DQonDQojIEZpdCB0aGUgYWJvdmUgbW9kZWwgdXNpbmcgTUxSDQpmaXRfYXBpbTIgPC0gc2VtKGZ1bGxfYXBpbTIsIGRhdGEgPSBwc3ljaG9wYXRoeV9kZl9keWFkX3N0YW4sIGVzdGltYXRvciA9ICJNTE0iKQ0KIyBzdW1tYXJ5KGZpdF9hcGltKQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9hcGltMiwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCmBgYA0KDQojIyBNaW5pIEFQSU0gKGludGVycGVyc29uYWwpDQpgYGB7cn0NCiMgTWluaSBtb2RlbHMgZm9yIGludGVycGVyc29uYWwNCiMgTWVuIHJhdGluZyB0aGVtc2VsdmVzIC0gd29tZW4gcmF0aW5nIHRoZWlyIHBhcnRuZXJzDQpBUElNX21pbmlfaW50MSA8LSAnDQogICAgICAgICAgICAgICAgICAjIFJlZ3Jlc3Npb24gcGF0aHMNCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBiMSpTUlBfU0VMRl9JTlRFUlBFUlNPTkFMICMgUGF0aCBiMSwgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfU0ZfbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjIqU1JQX1NFTEZfSU5URVJQRVJTT05BTCAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBiMypTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMX3dvbWVuICAjIFBhdGggYjMsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjQqU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTF93b21lbiAgIyBQYXRoIGI0LCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfUFZfd29tZW4NCiAgICAgICAgICAgICAgICAgICMgSW50ZXJjZXB0cw0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfSU5URVJQRVJTT05BTCB+IGExKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4gIH4gYTIqMSAjIEludGVyY2VwdCBmb3IgU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfiBhMyoxICMgSW50ZXJjZXB0IGZvciBSQVNfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+IGE0KjEgIyBJbnRlcmNlcHQgZm9yIFJBU19tZW4NCiAgICAgICAgICAgICAgICAgICMgVmFyaWFuY2VzDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMIH5+IHYxKlNSUF9TRUxGX0lOVEVSUEVSU09OQUwNCiAgICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4gIH5+IHYyKlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4gDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfn4gdjMqUkFTX1RPVEFMX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfn4gdjQqUkFTX1RPVEFMDQogICAgICAgICAgICAgICAgICAjIENvdmFyaWFuY2VzDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfn4gYzEqUkFTX1RPVEFMX3dvbWVuDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMIH5+IGMyKlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4gDQogICAgICAgICAgICAgICAgICANCiAgICAgICcNCg0KZml0X21pbmlfaW50MSA8LSBzZW0oQVBJTV9taW5pX2ludDEsIGRhdGEgPSBwc3ljaG9wYXRoeV9kZl9keWFkX3N0YW4sIGVzdGltYXRvciA9ICJNTE0iKQ0KIyBzdW1tYXJ5KGZpdF9taW5pX2ludDEpDQpwYXJhbWV0ZXJlc3RpbWF0ZXMoZml0X21pbmlfaW50MSwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCg0KIyAgTWVuIHJhdGluZyB0aGVtc2VsdmVzLCB3b21lbiByYXRpbmcgdGhlbXNlbHZlcw0KQVBJTV9taW5pX2ludDIgPC0gJw0KICAgICAgICAgICAgICAgICAgIyBSZWdyZXNzaW9uIHBhdGhzDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYjEqU1JQX1NFTEZfSU5URVJQRVJTT05BTCAjIFBhdGggYjEsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMICB+IGIyKlNSUF9TRUxGX0lOVEVSUEVSU09OQUwgIyBQYXRoIGIyLCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfU0ZfbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYjMqU1JQX1NFTEZfSU5URVJQRVJTT05BTF93b21lbiAjIFBhdGggYjMsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjQqU1JQX1NFTEZfSU5URVJQRVJTT05BTF93b21lbiAjIFBhdGggYjQsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICAgICAgIyBJbnRlcmNlcHRzDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMIH4gYTEqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX21lbg0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfSU5URVJQRVJTT05BTF93b21lbiB+IGEyKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuIH4gYTMqMSAjIEludGVyY2VwdCBmb3IgUkFTX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBhNCoxICMgSW50ZXJjZXB0IGZvciBSQVNfbWVuDQogICAgICAgICAgICAgICAgICAjIFZhcmlhbmNlcw0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfSU5URVJQRVJTT05BTCB+fiB2MSpTUlBfU0VMRl9JTlRFUlBFUlNPTkFMDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMX3dvbWVuIH5+IHYyKlNSUF9TRUxGX0lOVEVSUEVSU09OQUxfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+fiB2MypSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiB2NCpSQVNfVE9UQUwNCiAgICAgICAgICAgICAgICAgICMgQ292YXJpYW5jZXMNCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiBjMSpSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0lOVEVSUEVSU09OQUwgfn4gYzIqU1JQX1NFTEZfSU5URVJQRVJTT05BTF93b21lbg0KICAgICAgJw0KDQpmaXRfbWluaV9pbnQyIDwtIHNlbShBUElNX21pbmlfaW50MiwgZGF0YSA9IHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbiwgZXN0aW1hdG9yID0gIk1MTSIpDQojIHN1bW1hcnkoZml0X21pbmkyKQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9taW5pX2ludDIsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIiwgc3RhbmRhcmRpemVkID0gVFJVRSwgcnNxdWFyZSA9IFRSVUUpDQoNCiMgV29tZW4gcmF0aW5nIHRoZW1zZWx2ZXMsIG1lbiByYXRpbmcgdGhlaXIgcGFydG5lcg0KQVBJTV9taW5pX2ludDMgPC0gJw0KICAgICAgICAgICAgICAgICAgIyBSZWdyZXNzaW9uIHBhdGhzDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYjEqU1JQX1NFTEZfSU5URVJQRVJTT05BTF93b21lbiAgIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH4gYjIqU1JQX1NFTEZfSU5URVJQRVJTT05BTF93b21lbiAgIyBQYXRoIGIyLCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBiMypTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMICMgUGF0aCBiMywgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfUFZfbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBiNCpTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMICMgUGF0aCBiNCwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1BWX21lbg0KICAgICAgICAgICAgICAgICAgIyBJbnRlcmNlcHRzDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMX3dvbWVuICB+IGExKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICAgICAgU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTCB+IGEyKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9QVl9tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBhMyoxICMgSW50ZXJjZXB0IGZvciBSQVNfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+IGE0KjEgIyBJbnRlcmNlcHQgZm9yIFJBU19tZW4NCiAgICAgICAgICAgICAgICAgICMgVmFyaWFuY2VzDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMX3dvbWVuICB+fiB2MSpTUlBfU0VMRl9JTlRFUlBFUlNPTkFMX3dvbWVuIA0KICAgICAgICAgICAgICAgICAgU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTCB+fiB2MipTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH5+IHYzKlJBU19UT1RBTF93b21lbiANCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiB2NCpSQVNfVE9UQUwNCiAgICAgICAgICAgICAgICAgICMgQ292YXJpYW5jZXMNCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiBjMSpSQVNfVE9UQUxfd29tZW4gDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9JTlRFUlBFUlNPTkFMX3dvbWVuICB+fiBjMipTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMDQogICAgICAnDQoNCmZpdF9taW5pX2ludDMgPC0gc2VtKEFQSU1fbWluaV9pbnQzLCBkYXRhID0gcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuLCBlc3RpbWF0b3IgPSAiTUxNIikNCiMgc3VtbWFyeShmaXRfbWluaTMpDQpwYXJhbWV0ZXJlc3RpbWF0ZXMoZml0X21pbmlfaW50MywgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCg0KIyBXb21lbiByYXRpbmcgdGhlaXIgcGFydG5lciwgbWVuIHJhdGluZyB0aGVpciBwYXJ0bmVyDQpBUElNX21pbmlfaW50NCA8LSAnDQogICAgICAgICAgICAjIFJlZ3Jlc3Npb24gcGF0aHMNCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+IGIxKlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUwgICMgUGF0aCBiMSwgcmVncmVzc2luZyBSQVMgd29tZW4gb250byBTUlBfUFZfbWVuDQogICAgICAgICAgICBSQVNfVE9UQUwgfiBiMipTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMICAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9QVl9tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+IGIxKlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4gIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBUyB3b21lbiBvbnRvIFNSUF9QVl93b21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMIH4gYjIqU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTF93b21lbiAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9QVl93b21lbg0KICAgICAgICAgICAgIyBJbnRlcmNlcHRzDQogICAgICAgICAgICBTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMICB+IGExKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgU1JQX1BBUlRORVJfSU5URVJQRVJTT05BTF93b21lbiB+IGEyKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9QVl9tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+IGEzKjEgIyBJbnRlcmNlcHQgZm9yIFJBU193b21lbg0KICAgICAgICAgICAgUkFTX1RPVEFMIH4gYTQqMSAjIEludGVyY2VwdCBmb3IgUkFTX21lbg0KICAgICAgICAgICAgIyBWYXJpYW5jZXMNCiAgICAgICAgICAgIFNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUwgIH5+IHYxKlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUwgDQogICAgICAgICAgICBTUlBfUEFSVE5FUl9JTlRFUlBFUlNPTkFMX3dvbWVuIH5+IHYyKlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+fiB2MypSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgIFJBU19UT1RBTCB+fiB2NCpSQVNfVE9UQUwNCiAgICAgICAgICAgICMgQ292YXJpYW5jZXMNCiAgICAgICAgICAgIFJBU19UT1RBTCB+fiBjMSpSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgIFNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUwgIH5+IGMyKlNSUF9QQVJUTkVSX0lOVEVSUEVSU09OQUxfd29tZW4NCicNCmZpdF9taW5pX2ludDQgPC0gc2VtKEFQSU1fbWluaV9pbnQ0LCBkYXRhID0gcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuLCBlc3RpbWF0b3IgPSAiTUxNIikNCiMgc3VtbWFyeShmaXRfbWluaV9pbnQ0KQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9taW5pX2ludDQsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIiwgc3RhbmRhcmRpemVkID0gVFJVRSwgcnNxdWFyZSA9IFRSVUUpDQoNCg0KYGBgDQoNCg0KIyMgRnVsbCBBUElNIChBZmZlY3RpdmUpDQpgYGB7cn0NCiMgRnVsbCBBUElNIEFmZmVjdGl2ZQ0KZnVsbF9hcGltMyA8LSAnDQogICAgICAgICAgICAgICMgUmVncmVzc2lvbiBwYXRocyANCiAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICAgfiBiMSpTUlBfU0VMRl9BRkZFQ1RJVkUgIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMICB+IGIyKlNSUF9TRUxGX0FGRkVDVElWRV93b21lbiAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gICB+IGIzKlNSUF9TRUxGX0FGRkVDVElWRV93b21lbiAjIFBhdGggYjMsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiNCpTUlBfU0VMRl9BRkZFQ1RJVkUgIyBQYXRoIGI0LCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfU0ZfbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgIH4gYjUqU1JQX1BBUlRORVJfQUZGRUNUSVZFICMgUGF0aCBiNSwgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfUEFSVE5FUl9tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMICB+IGI2KlNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbiAjIFBhdGggYjYsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9QQVJUTkVSX3dvbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgIH4gYjcqU1JQX1BBUlRORVJfQUZGRUNUSVZFX3dvbWVuICMgUGF0aCBiNywgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfUEFSVE5FUl93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjgqU1JQX1BBUlRORVJfQUZGRUNUSVZFICMgUGF0aCBiOCwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1BBUlRORVJfbWVuDQogICAgICAgICAgICAgICMgSW50ZXJjZXB0cw0KICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkUgfiBhMSoxICMgSW50ZXJjZXB0IGZvciBTUlBfU0ZfbWVuDQogICAgICAgICAgICAgIFNSUF9TRUxGX0FGRkVDVElWRV93b21lbiB+IGEyKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYTMqMSAjIEludGVyY2VwdCBmb3IgUkFTX3dvbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTCB+IGE0KjEgIyBJbnRlcmNlcHQgZm9yIFJBU19tZW4NCiAgICAgICAgICAgICAgU1JQX1BBUlRORVJfQUZGRUNUSVZFIH4gYTUqMSAjIEludGVyY2VwdCBmb3IgU1JQX1BBUlRORVJfbWVuDQogICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbiB+IGE2KjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9QQVJUTkVSX3dvbWVuDQogICAgICAgICAgICAgICMgVmFyaWFuY2VzDQogICAgICAgICAgICAgIFNSUF9TRUxGX0FGRkVDVElWRSB+fiB2MSpTUlBfU0VMRl9BRkZFQ1RJVkUNCiAgICAgICAgICAgICAgU1JQX1NFTEZfQUZGRUNUSVZFX3dvbWVuIH5+IHYyKlNSUF9TRUxGX0FGRkVDVElWRV93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH5+IHYzKlJBU19UT1RBTF93b21lbiANCiAgICAgICAgICAgICAgUkFTX1RPVEFMIH5+IHY0KlJBU19UT1RBTA0KICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9BRkZFQ1RJVkUgfn4gdjUqU1JQX1BBUlRORVJfQUZGRUNUSVZFDQogICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbiB+fiB2NipTUlBfUEFSVE5FUl9BRkZFQ1RJVkVfd29tZW4NCiAgICAgICAgICAgICAgIyBDb3ZhcmlhbmNlcw0KICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkVfd29tZW4gfn4gYzEqU1JQX1NFTEZfQUZGRUNUSVZFDQogICAgICAgICAgICAgIFJBU19UT1RBTCB+fiBjMipSQVNfVE9UQUxfd29tZW4gIA0KICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9BRkZFQ1RJVkVfd29tZW4gfn4gYzMqU1JQX1BBUlRORVJfQUZGRUNUSVZFDQogICAgICAgICAgICAgIFNSUF9TRUxGX0FGRkVDVElWRSB+fiBjNCpTUlBfUEFSVE5FUl9BRkZFQ1RJVkUNCiAgICAgICAgICAgICAgU1JQX1NFTEZfQUZGRUNUSVZFIH5+IGM1KlNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbg0KICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkVfd29tZW4gfn4gYzYqU1JQX1BBUlRORVJfQUZGRUNUSVZFDQogICAgICAgICAgICAgIFNSUF9TRUxGX0FGRkVDVElWRV93b21lbiB+fiBjNypTUlBfUEFSVE5FUl9BRkZFQ1RJVkVfd29tZW4NCiAgICAgICAgICAgICAgIyBEZWZpbmVkIHBhcmFtZXRlcnMNCiAgICAgICAgICAgICAgIyBBdmcgZWZmZWN0cw0KICAgICAgICAgICAgICBzZl9hY3RvciA6PSAoYjQgKyBiMykvMg0KICAgICAgICAgICAgICBzZl9wYXJ0bmVyIDo9IChiMiArIGIxKS8yDQogICAgICAgICAgICAgIHB2X2FjdG9yIDo9IChiOCArIGI3KS8yDQogICAgICAgICAgICAgIHB2X3BhcnRuZXIgOj0gKGI2ICsgYjUpLzINCiAgICAgICAgICAgICAgIyBEaWZmZXJlbmNlcw0KICAgICAgICAgICAgICBzZl9hY3Rvcl9kaWZmIDo9IGI0IC0gYjMNCiAgICAgICAgICAgICAgc2ZfcGFydG5lcl9kaWZmIDo9IGIyIC0gYjENCiAgICAgICAgICAgICAgcHZfYWN0b3JfZGlmZiA6PSBiOCAtIGI3DQogICAgICAgICAgICAgIHB2X3BhcnRuZXJfZGlmZiA6PSBiNiAtIGI1DQonDQojIEZpdCB0aGUgYWJvdmUgbW9kZWwgdXNpbmcgTUxSDQpmaXRfYXBpbTMgPC0gc2VtKGZ1bGxfYXBpbTMsIGRhdGEgPSBwc3ljaG9wYXRoeV9kZl9keWFkX3N0YW4sIGVzdGltYXRvciA9ICJNTE0iKQ0KIyBzdW1tYXJ5KGZpdF9hcGltKQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9hcGltMywgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCg0KYGBgDQoNCiMjIE1pbmkgQVBJTSAoQWZmZWN0aXZlKQ0KYGBge3J9DQojIE1pbmkgbW9kZWxzIGZvciBBZmZlY3RpdmUNCg0KIyBNZW4gcmF0aW5nIHRoZW1zZWx2ZXMgLSB3b21lbiByYXRpbmcgdGhlaXIgcGFydG5lcnMNCkFQSU1fbWluaV9hZmYxIDwtICcNCiAgICAgICAgICAgICAgICAgICMgUmVncmVzc2lvbiBwYXRocw0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+IGIxKlNSUF9TRUxGX0FGRkVDVElWRSAjIFBhdGggYjEsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMICB+IGIyKlNSUF9TRUxGX0FGRkVDVElWRSAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBiMypTUlBfUEFSVE5FUl9BRkZFQ1RJVkVfd29tZW4gICMgUGF0aCBiMywgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfUFZfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiNCpTUlBfUEFSVE5FUl9BRkZFQ1RJVkVfd29tZW4gICMgUGF0aCBiNCwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAgICAgICAjIEludGVyY2VwdHMNCiAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0FGRkVDVElWRSB+IGExKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbiAgfiBhMioxICMgSW50ZXJjZXB0IGZvciBTUlBfUFZfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+IGEzKjEgIyBJbnRlcmNlcHQgZm9yIFJBU193b21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH4gYTQqMSAjIEludGVyY2VwdCBmb3IgUkFTX21lbg0KICAgICAgICAgICAgICAgICAgIyBWYXJpYW5jZXMNCiAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0FGRkVDVElWRSB+fiB2MSpTUlBfU0VMRl9BRkZFQ1RJVkUNCiAgICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbiAgfn4gdjIqU1JQX1BBUlRORVJfQUZGRUNUSVZFX3dvbWVuIA0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuIH5+IHYzKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH5+IHY0KlJBU19UT1RBTA0KICAgICAgICAgICAgICAgICAgIyBDb3ZhcmlhbmNlcw0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH5+IGMxKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfQUZGRUNUSVZFIH5+IGMyKlNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbiANCiAgICAgICAgICAgICAgICAgIA0KICAgICAgJw0KDQpmaXRfbWluaV9hZmYxIDwtIHNlbShBUElNX21pbmlfYWZmMSwgZGF0YSA9IHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbiwgZXN0aW1hdG9yID0gIk1MTSIpDQojIHN1bW1hcnkoZml0X21pbmlfYWZmMSkNCnBhcmFtZXRlcmVzdGltYXRlcyhmaXRfbWluaV9hZmYxLCBib290LmNpLnR5cGUgPSAiYmNhLnNpbXBsZSIsIHN0YW5kYXJkaXplZCA9IFRSVUUsIHJzcXVhcmUgPSBUUlVFKQ0KDQojICBNZW4gcmF0aW5nIHRoZW1zZWx2ZXMsIHdvbWVuIHJhdGluZyB0aGVtc2VsdmVzDQpBUElNX21pbmlfYWZmMiA8LSAnDQogICAgICAgICAgICAgICAgICAjIFJlZ3Jlc3Npb24gcGF0aHMNCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBiMSpTUlBfU0VMRl9BRkZFQ1RJVkUgIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiMipTUlBfU0VMRl9BRkZFQ1RJVkUgIyBQYXRoIGIyLCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfU0ZfbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYjMqU1JQX1NFTEZfQUZGRUNUSVZFX3dvbWVuICMgUGF0aCBiMywgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiNCpTUlBfU0VMRl9BRkZFQ1RJVkVfd29tZW4gIyBQYXRoIGI0LCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgICAgICAgICMgSW50ZXJjZXB0cw0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfQUZGRUNUSVZFIH4gYTEqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX21lbg0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfQUZGRUNUSVZFX3dvbWVuIH4gYTIqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfiBhMyoxICMgSW50ZXJjZXB0IGZvciBSQVNfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+IGE0KjEgIyBJbnRlcmNlcHQgZm9yIFJBU19tZW4NCiAgICAgICAgICAgICAgICAgICMgVmFyaWFuY2VzDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkUgfn4gdjEqU1JQX1NFTEZfQUZGRUNUSVZFDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkVfd29tZW4gfn4gdjIqU1JQX1NFTEZfQUZGRUNUSVZFX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfn4gdjMqUkFTX1RPVEFMX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfn4gdjQqUkFTX1RPVEFMDQogICAgICAgICAgICAgICAgICAjIENvdmFyaWFuY2VzDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfn4gYzEqUkFTX1RPVEFMX3dvbWVuDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkUgfn4gYzIqU1JQX1NFTEZfQUZGRUNUSVZFX3dvbWVuDQogICAgICAnDQoNCmZpdF9taW5pX2FmZjIgPC0gc2VtKEFQSU1fbWluaV9hZmYyLCBkYXRhID0gcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuLCBlc3RpbWF0b3IgPSAiTUxNIikNCiMgc3VtbWFyeShmaXRfbWluaV9hZmYyKQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9taW5pX2FmZjIsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIiwgc3RhbmRhcmRpemVkID0gVFJVRSwgcnNxdWFyZSA9IFRSVUUpDQoNCiMgV29tZW4gcmF0aW5nIHRoZW1zZWx2ZXMsIG1lbiByYXRpbmcgdGhlaXIgcGFydG5lcg0KQVBJTV9taW5pX2FmZjMgPC0gJw0KICAgICAgICAgICAgICAgICAgIyBSZWdyZXNzaW9uIHBhdGhzDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYjEqU1JQX1NFTEZfQUZGRUNUSVZFX3dvbWVuICAjIFBhdGggYjEsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBiMipTUlBfU0VMRl9BRkZFQ1RJVkVfd29tZW4gICMgUGF0aCBiMiwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYjMqU1JQX1BBUlRORVJfQUZGRUNUSVZFICMgUGF0aCBiMywgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfUFZfbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBiNCpTUlBfUEFSVE5FUl9BRkZFQ1RJVkUgIyBQYXRoIGI0LCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfUFZfbWVuDQogICAgICAgICAgICAgICAgICAjIEludGVyY2VwdHMNCiAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0FGRkVDVElWRV93b21lbiAgfiBhMSoxICMgSW50ZXJjZXB0IGZvciBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRSB+IGEyKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9QVl9tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBhMyoxICMgSW50ZXJjZXB0IGZvciBSQVNfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+IGE0KjEgIyBJbnRlcmNlcHQgZm9yIFJBU19tZW4NCiAgICAgICAgICAgICAgICAgICMgVmFyaWFuY2VzDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9BRkZFQ1RJVkVfd29tZW4gIH5+IHYxKlNSUF9TRUxGX0FGRkVDVElWRV93b21lbiANCiAgICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRSB+fiB2MipTUlBfUEFSVE5FUl9BRkZFQ1RJVkUNCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfn4gdjMqUkFTX1RPVEFMX3dvbWVuIA0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH5+IHY0KlJBU19UT1RBTA0KICAgICAgICAgICAgICAgICAgIyBDb3ZhcmlhbmNlcw0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH5+IGMxKlJBU19UT1RBTF93b21lbiANCiAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0FGRkVDVElWRV93b21lbiAgfn4gYzIqU1JQX1BBUlRORVJfQUZGRUNUSVZFDQogICAgICAnDQoNCmZpdF9taW5pX2FmZjMgPC0gc2VtKEFQSU1fbWluaV9hZmYzLCBkYXRhID0gcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuLCBlc3RpbWF0b3IgPSAiTUxNIikNCiMgc3VtbWFyeShmaXRfbWluaV9hZmYzKQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9taW5pX2FmZjMsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIiwgc3RhbmRhcmRpemVkID0gVFJVRSwgcnNxdWFyZSA9IFRSVUUpDQoNCiMgV29tZW4gcmF0aW5nIHRoZWlyIHBhcnRuZXIsIG1lbiByYXRpbmcgdGhlaXIgcGFydG5lcg0KQVBJTV9taW5pX2FmZjQgPC0gJw0KICAgICAgICAgICAgICAgICMgUmVncmVzc2lvbiBwYXRocw0KICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+IGIxKlNSUF9QQVJUTkVSX0FGRkVDVElWRSAgIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBUyB3b21lbiBvbnRvIFNSUF9QVl9tZW4NCiAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBiMipTUlBfUEFSVE5FUl9BRkZFQ1RJVkUgICMgUGF0aCBiMiwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1BWX21lbg0KICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+IGIxKlNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbiAjIFBhdGggYjEsIHJlZ3Jlc3NpbmcgUkFTIHdvbWVuIG9udG8gU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAgICAgUkFTX1RPVEFMIH4gYjIqU1JQX1BBUlRORVJfQUZGRUNUSVZFX3dvbWVuICMgUGF0aCBiMiwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAgICAgIyBJbnRlcmNlcHRzDQogICAgICAgICAgICAgICAgU1JQX1BBUlRORVJfQUZGRUNUSVZFICB+IGExKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRV93b21lbiB+IGEyKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9QVl9tZW4NCiAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfiBhMyoxICMgSW50ZXJjZXB0IGZvciBSQVNfd29tZW4NCiAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBhNCoxICMgSW50ZXJjZXB0IGZvciBSQVNfbWVuDQogICAgICAgICAgICAgICAgIyBWYXJpYW5jZXMNCiAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9BRkZFQ1RJVkUgIH5+IHYxKlNSUF9QQVJUTkVSX0FGRkVDVElWRSANCiAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9BRkZFQ1RJVkVfd29tZW4gfn4gdjIqU1JQX1BBUlRORVJfQUZGRUNUSVZFX3dvbWVuDQogICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuIH5+IHYzKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiB2NCpSQVNfVE9UQUwNCiAgICAgICAgICAgICAgICAjIENvdmFyaWFuY2VzDQogICAgICAgICAgICAgICAgUkFTX1RPVEFMIH5+IGMxKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0FGRkVDVElWRSAgfn4gYzIqU1JQX1BBUlRORVJfQUZGRUNUSVZFX3dvbWVuDQogICAgJw0KZml0X21pbmlfYWZmNCA8LSBzZW0oQVBJTV9taW5pX2FmZjQsIGRhdGEgPSBwc3ljaG9wYXRoeV9kZl9keWFkX3N0YW4sIGVzdGltYXRvciA9ICJNTE0iKQ0KIyBzdW1tYXJ5KGZpdF9taW5pX2FmZjQpDQpwYXJhbWV0ZXJlc3RpbWF0ZXMoZml0X21pbmlfYWZmNCwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCg0KYGBgDQoNCiMjIEZ1bGwgQVBJTSAoTGlmZXN0eWxlKQ0KYGBge3J9DQojIEZ1bGwgQVBJTSBMaWZlc3R5bGUNCmZ1bGxfYXBpbTQgPC0gJw0KICAgICAgICAgICAgICAjIFJlZ3Jlc3Npb24gcGF0aHMgDQogICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgIH4gYjEqU1JQX1NFTEZfTElGRVNUWUxFICMgUGF0aCBiMSwgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfU0ZfbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiMipTUlBfU0VMRl9MSUZFU1RZTEVfd29tZW4gIyBQYXRoIGIyLCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICAgfiBiMypTUlBfU0VMRl9MSUZFU1RZTEVfd29tZW4gIyBQYXRoIGIzLCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjQqU1JQX1NFTEZfTElGRVNUWUxFICMgUGF0aCBiNCwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1NGX21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gICB+IGI1KlNSUF9QQVJUTkVSX0xJRkVTVFlMRSAjIFBhdGggYjUsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1BBUlRORVJfbWVuDQogICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiNipTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4gIyBQYXRoIGI2LCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfUEFSVE5FUl93b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gICB+IGI3KlNSUF9QQVJUTkVSX0xJRkVTVFlMRV93b21lbiAjIFBhdGggYjcsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1BBUlRORVJfd29tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMICB+IGI4KlNSUF9QQVJUTkVSX0xJRkVTVFlMRSAjIFBhdGggYjgsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9QQVJUTkVSX21lbg0KICAgICAgICAgICAgICAjIEludGVyY2VwdHMNCiAgICAgICAgICAgICAgU1JQX1NFTEZfTElGRVNUWUxFIH4gYTEqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX21lbg0KICAgICAgICAgICAgICBTUlBfU0VMRl9MSUZFU1RZTEVfd29tZW4gfiBhMioxICMgSW50ZXJjZXB0IGZvciBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+IGEzKjEgIyBJbnRlcmNlcHQgZm9yIFJBU193b21lbg0KICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBhNCoxICMgSW50ZXJjZXB0IGZvciBSQVNfbWVuDQogICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0xJRkVTVFlMRSB+IGE1KjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9QQVJUTkVSX21lbg0KICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4gfiBhNioxICMgSW50ZXJjZXB0IGZvciBTUlBfUEFSVE5FUl93b21lbg0KICAgICAgICAgICAgICAjIFZhcmlhbmNlcw0KICAgICAgICAgICAgICBTUlBfU0VMRl9MSUZFU1RZTEUgfn4gdjEqU1JQX1NFTEZfTElGRVNUWUxFDQogICAgICAgICAgICAgIFNSUF9TRUxGX0xJRkVTVFlMRV93b21lbiB+fiB2MipTUlBfU0VMRl9MSUZFU1RZTEVfd29tZW4NCiAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+fiB2MypSQVNfVE9UQUxfd29tZW4gDQogICAgICAgICAgICAgIFJBU19UT1RBTCB+fiB2NCpSQVNfVE9UQUwNCiAgICAgICAgICAgICAgU1JQX1BBUlRORVJfTElGRVNUWUxFIH5+IHY1KlNSUF9QQVJUTkVSX0xJRkVTVFlMRQ0KICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4gfn4gdjYqU1JQX1BBUlRORVJfTElGRVNUWUxFX3dvbWVuDQogICAgICAgICAgICAgICMgQ292YXJpYW5jZXMNCiAgICAgICAgICAgICAgU1JQX1NFTEZfTElGRVNUWUxFX3dvbWVuIH5+IGMxKlNSUF9TRUxGX0xJRkVTVFlMRQ0KICAgICAgICAgICAgICBSQVNfVE9UQUwgfn4gYzIqUkFTX1RPVEFMX3dvbWVuICANCiAgICAgICAgICAgICAgU1JQX1BBUlRORVJfTElGRVNUWUxFX3dvbWVuIH5+IGMzKlNSUF9QQVJUTkVSX0xJRkVTVFlMRQ0KICAgICAgICAgICAgICBTUlBfU0VMRl9MSUZFU1RZTEUgfn4gYzQqU1JQX1BBUlRORVJfTElGRVNUWUxFDQogICAgICAgICAgICAgIFNSUF9TRUxGX0xJRkVTVFlMRSB+fiBjNSpTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4NCiAgICAgICAgICAgICAgU1JQX1NFTEZfTElGRVNUWUxFX3dvbWVuIH5+IGM2KlNSUF9QQVJUTkVSX0xJRkVTVFlMRQ0KICAgICAgICAgICAgICBTUlBfU0VMRl9MSUZFU1RZTEVfd29tZW4gfn4gYzcqU1JQX1BBUlRORVJfTElGRVNUWUxFX3dvbWVuDQogICAgICAgICAgICAgICMgRGVmaW5lZCBwYXJhbWV0ZXJzDQogICAgICAgICAgICAgICMgQXZnIGVmZmVjdHMNCiAgICAgICAgICAgICAgc2ZfYWN0b3IgOj0gKGI0ICsgYjMpLzINCiAgICAgICAgICAgICAgc2ZfcGFydG5lciA6PSAoYjIgKyBiMSkvMg0KICAgICAgICAgICAgICBwdl9hY3RvciA6PSAoYjggKyBiNykvMg0KICAgICAgICAgICAgICBwdl9wYXJ0bmVyIDo9IChiNiArIGI1KS8yDQogICAgICAgICAgICAgICMgRGlmZmVyZW5jZXMNCiAgICAgICAgICAgICAgc2ZfYWN0b3JfZGlmZiA6PSBiNCAtIGIzDQogICAgICAgICAgICAgIHNmX3BhcnRuZXJfZGlmZiA6PSBiMiAtIGIxDQogICAgICAgICAgICAgIHB2X2FjdG9yX2RpZmYgOj0gYjggLSBiNw0KICAgICAgICAgICAgICBwdl9wYXJ0bmVyX2RpZmYgOj0gYjYgLSBiNQ0KJw0KIyBGaXQgdGhlIGFib3ZlIG1vZGVsIHVzaW5nIE1MUg0KZml0X2FwaW00IDwtIHNlbShmdWxsX2FwaW00LCBkYXRhID0gcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuLCBlc3RpbWF0b3IgPSAiTUxNIikNCiMgc3VtbWFyeShmaXRfYXBpbSkNCnBhcmFtZXRlcmVzdGltYXRlcyhmaXRfYXBpbTQsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIiwgc3RhbmRhcmRpemVkID0gVFJVRSwgcnNxdWFyZSA9IFRSVUUpDQpgYGANCg0KDQojIyBNaW5pIEFQSU0gKExpZmVzdHlsZSkNCmBgYHtyfQ0KIyBNaW5pIG1vZGVscyBmb3IgTGlmZXN0eWxlDQoNCiMgTWVuIHJhdGluZyB0aGVtc2VsdmVzIC0gd29tZW4gcmF0aW5nIHRoZWlyIHBhcnRuZXJzDQpBUElNX21pbmlfbGlmMSA8LSAnDQogICAgICAgICAgICAgICAgICAjIFJlZ3Jlc3Npb24gcGF0aHMNCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiAgfiBiMSpTUlBfU0VMRl9MSUZFU1RZTEUgIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCAgfiBiMipTUlBfU0VMRl9MSUZFU1RZTEUgIyBQYXRoIGIyLCByZWdyZXNzaW5nIFJBU19tZW4gb250byBTUlBfU0ZfbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYjMqU1JQX1BBUlRORVJfTElGRVNUWUxFX3dvbWVuICAjIFBhdGggYjMsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjQqU1JQX1BBUlRORVJfTElGRVNUWUxFX3dvbWVuICAjIFBhdGggYjQsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9QVl93b21lbg0KICAgICAgICAgICAgICAgICAgIyBJbnRlcmNlcHRzDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9MSUZFU1RZTEUgfiBhMSoxICMgSW50ZXJjZXB0IGZvciBTUlBfU0ZfbWVuDQogICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4gIH4gYTIqMSAjIEludGVyY2VwdCBmb3IgU1JQX1BWX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfiBhMyoxICMgSW50ZXJjZXB0IGZvciBSQVNfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+IGE0KjEgIyBJbnRlcmNlcHQgZm9yIFJBU19tZW4NCiAgICAgICAgICAgICAgICAgICMgVmFyaWFuY2VzDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9MSUZFU1RZTEUgfn4gdjEqU1JQX1NFTEZfTElGRVNUWUxFDQogICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4gIH5+IHYyKlNSUF9QQVJUTkVSX0xJRkVTVFlMRV93b21lbiANCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+fiB2MypSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiB2NCpSQVNfVE9UQUwNCiAgICAgICAgICAgICAgICAgICMgQ292YXJpYW5jZXMNCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiBjMSpSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0xJRkVTVFlMRSB+fiBjMipTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4gDQogICAgICAgICAgICAgICAgICANCiAgICAgICcNCg0KZml0X21pbmlfbGlmMSA8LSBzZW0oQVBJTV9taW5pX2xpZjEsIGRhdGEgPSBwc3ljaG9wYXRoeV9kZl9keWFkX3N0YW4sIGVzdGltYXRvciA9ICJNTE0iKQ0KIyBzdW1tYXJ5KGZpdF9taW5pX2xpZjEpDQpwYXJhbWV0ZXJlc3RpbWF0ZXMoZml0X21pbmlfbGlmMSwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBzdGFuZGFyZGl6ZWQgPSBUUlVFLCByc3F1YXJlID0gVFJVRSkNCg0KIyAgTWVuIHJhdGluZyB0aGVtc2VsdmVzLCB3b21lbiByYXRpbmcgdGhlbXNlbHZlcw0KQVBJTV9taW5pX2xpZjIgPC0gJw0KICAgICAgICAgICAgICAgICAgIyBSZWdyZXNzaW9uIHBhdGhzDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYjEqU1JQX1NFTEZfTElGRVNUWUxFICMgUGF0aCBiMSwgcmVncmVzc2luZyBSQVNfd29tZW4gb250byBTUlBfU0ZfbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjIqU1JQX1NFTEZfTElGRVNUWUxFICMgUGF0aCBiMiwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1NGX21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+IGIzKlNSUF9TRUxGX0xJRkVTVFlMRV93b21lbiAjIFBhdGggYjMsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgIH4gYjQqU1JQX1NFTEZfTElGRVNUWUxFX3dvbWVuICMgUGF0aCBiNCwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgICAgICAjIEludGVyY2VwdHMNCiAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0xJRkVTVFlMRSB+IGExKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl9tZW4NCiAgICAgICAgICAgICAgICAgIFNSUF9TRUxGX0xJRkVTVFlMRV93b21lbiB+IGEyKjEgIyBJbnRlcmNlcHQgZm9yIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuIH4gYTMqMSAjIEludGVyY2VwdCBmb3IgUkFTX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBhNCoxICMgSW50ZXJjZXB0IGZvciBSQVNfbWVuDQogICAgICAgICAgICAgICAgICAjIFZhcmlhbmNlcw0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfTElGRVNUWUxFIH5+IHYxKlNSUF9TRUxGX0xJRkVTVFlMRQ0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfTElGRVNUWUxFX3dvbWVuIH5+IHYyKlNSUF9TRUxGX0xJRkVTVFlMRV93b21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuIH5+IHYzKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH5+IHY0KlJBU19UT1RBTA0KICAgICAgICAgICAgICAgICAgIyBDb3ZhcmlhbmNlcw0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH5+IGMxKlJBU19UT1RBTF93b21lbg0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfTElGRVNUWUxFIH5+IGMyKlNSUF9TRUxGX0xJRkVTVFlMRV93b21lbg0KICAgICAgJw0KDQpmaXRfbWluaV9saWYyIDwtIHNlbShBUElNX21pbmlfbGlmMiwgZGF0YSA9IHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbiwgZXN0aW1hdG9yID0gIk1MTSIpDQojIHN1bW1hcnkoZml0X21pbmlfbGlmMikNCnBhcmFtZXRlcmVzdGltYXRlcyhmaXRfbWluaV9saWYyLCBib290LmNpLnR5cGUgPSAiYmNhLnNpbXBsZSIsIHN0YW5kYXJkaXplZCA9IFRSVUUsIHJzcXVhcmUgPSBUUlVFKQ0KDQojIFdvbWVuIHJhdGluZyB0aGVtc2VsdmVzLCBtZW4gcmF0aW5nIHRoZWlyIHBhcnRuZXINCkFQSU1fbWluaV9saWYzIDwtICcNCiAgICAgICAgICAgICAgICAgICMgUmVncmVzc2lvbiBwYXRocw0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+IGIxKlNSUF9TRUxGX0xJRkVTVFlMRV93b21lbiAgIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBU193b21lbiBvbnRvIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH4gYjIqU1JQX1NFTEZfTElGRVNUWUxFX3dvbWVuICAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9TRl93b21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuICB+IGIzKlNSUF9QQVJUTkVSX0xJRkVTVFlMRSAjIFBhdGggYjMsIHJlZ3Jlc3NpbmcgUkFTX3dvbWVuIG9udG8gU1JQX1BWX21lbg0KICAgICAgICAgICAgICAgICAgUkFTX1RPVEFMIH4gYjQqU1JQX1BBUlRORVJfTElGRVNUWUxFICMgUGF0aCBiNCwgcmVncmVzc2luZyBSQVNfbWVuIG9udG8gU1JQX1BWX21lbg0KICAgICAgICAgICAgICAgICAgIyBJbnRlcmNlcHRzDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9MSUZFU1RZTEVfd29tZW4gIH4gYTEqMSAjIEludGVyY2VwdCBmb3IgU1JQX1NGX3dvbWVuDQogICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEUgfiBhMioxICMgSW50ZXJjZXB0IGZvciBTUlBfUFZfbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH4gYTMqMSAjIEludGVyY2VwdCBmb3IgUkFTX3dvbWVuDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfiBhNCoxICMgSW50ZXJjZXB0IGZvciBSQVNfbWVuDQogICAgICAgICAgICAgICAgICAjIFZhcmlhbmNlcw0KICAgICAgICAgICAgICAgICAgU1JQX1NFTEZfTElGRVNUWUxFX3dvbWVuICB+fiB2MSpTUlBfU0VMRl9MSUZFU1RZTEVfd29tZW4gDQogICAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEUgfn4gdjIqU1JQX1BBUlRORVJfTElGRVNUWUxFDQogICAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gIH5+IHYzKlJBU19UT1RBTF93b21lbiANCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiB2NCpSQVNfVE9UQUwNCiAgICAgICAgICAgICAgICAgICMgQ292YXJpYW5jZXMNCiAgICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiBjMSpSQVNfVE9UQUxfd29tZW4gDQogICAgICAgICAgICAgICAgICBTUlBfU0VMRl9MSUZFU1RZTEVfd29tZW4gIH5+IGMyKlNSUF9QQVJUTkVSX0xJRkVTVFlMRQ0KICAgICAgJw0KDQpmaXRfbWluaV9saWYzIDwtIHNlbShBUElNX21pbmlfbGlmMywgZGF0YSA9IHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbiwgZXN0aW1hdG9yID0gIk1MTSIpDQojIHN1bW1hcnkoZml0X21pbmlfbGlmMykNCnBhcmFtZXRlcmVzdGltYXRlcyhmaXRfbWluaV9saWYzLCBib290LmNpLnR5cGUgPSAiYmNhLnNpbXBsZSIsIHN0YW5kYXJkaXplZCA9IFRSVUUsIHJzcXVhcmUgPSBUUlVFKQ0KDQojIFdvbWVuIHJhdGluZyB0aGVpciBwYXJ0bmVyLCBtZW4gcmF0aW5nIHRoZWlyIHBhcnRuZXINCkFQSU1fbWluaV9saWY0IDwtICcNCiAgICAgICAgICAgICAgICAjIFJlZ3Jlc3Npb24gcGF0aHMNCiAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfiBiMSpTUlBfUEFSVE5FUl9MSUZFU1RZTEUgICMgUGF0aCBiMSwgcmVncmVzc2luZyBSQVMgd29tZW4gb250byBTUlBfUFZfbWVuDQogICAgICAgICAgICAgICAgUkFTX1RPVEFMIH4gYjIqU1JQX1BBUlRORVJfTElGRVNUWUxFICAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9QVl9tZW4NCiAgICAgICAgICAgICAgICBSQVNfVE9UQUxfd29tZW4gfiBiMSpTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4gIyBQYXRoIGIxLCByZWdyZXNzaW5nIFJBUyB3b21lbiBvbnRvIFNSUF9QVl93b21lbg0KICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+IGIyKlNSUF9QQVJUTkVSX0xJRkVTVFlMRV93b21lbiAjIFBhdGggYjIsIHJlZ3Jlc3NpbmcgUkFTX21lbiBvbnRvIFNSUF9QVl93b21lbg0KICAgICAgICAgICAgICAgICMgSW50ZXJjZXB0cw0KICAgICAgICAgICAgICAgIFNSUF9QQVJUTkVSX0xJRkVTVFlMRSAgfiBhMSoxICMgSW50ZXJjZXB0IGZvciBTUlBfU0Zfd29tZW4NCiAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEVfd29tZW4gfiBhMioxICMgSW50ZXJjZXB0IGZvciBTUlBfUFZfbWVuDQogICAgICAgICAgICAgICAgUkFTX1RPVEFMX3dvbWVuIH4gYTMqMSAjIEludGVyY2VwdCBmb3IgUkFTX3dvbWVuDQogICAgICAgICAgICAgICAgUkFTX1RPVEFMIH4gYTQqMSAjIEludGVyY2VwdCBmb3IgUkFTX21lbg0KICAgICAgICAgICAgICAgICMgVmFyaWFuY2VzDQogICAgICAgICAgICAgICAgU1JQX1BBUlRORVJfTElGRVNUWUxFICB+fiB2MSpTUlBfUEFSVE5FUl9MSUZFU1RZTEUgDQogICAgICAgICAgICAgICAgU1JQX1BBUlRORVJfTElGRVNUWUxFX3dvbWVuIH5+IHYyKlNSUF9QQVJUTkVSX0xJRkVTVFlMRV93b21lbg0KICAgICAgICAgICAgICAgIFJBU19UT1RBTF93b21lbiB+fiB2MypSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgICAgICBSQVNfVE9UQUwgfn4gdjQqUkFTX1RPVEFMDQogICAgICAgICAgICAgICAgIyBDb3ZhcmlhbmNlcw0KICAgICAgICAgICAgICAgIFJBU19UT1RBTCB+fiBjMSpSQVNfVE9UQUxfd29tZW4NCiAgICAgICAgICAgICAgICBTUlBfUEFSVE5FUl9MSUZFU1RZTEUgIH5+IGMyKlNSUF9QQVJUTkVSX0xJRkVTVFlMRV93b21lbg0KICAgICcNCmZpdF9taW5pX2xpZjQgPC0gc2VtKEFQSU1fbWluaV9saWY0LCBkYXRhID0gcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuLCBlc3RpbWF0b3IgPSAiTUxNIikNCiMgc3VtbWFyeShmaXRfbWluaV9saWY0KQ0KcGFyYW1ldGVyZXN0aW1hdGVzKGZpdF9taW5pX2xpZjQsIGJvb3QuY2kudHlwZSA9ICJiY2Euc2ltcGxlIiwgc3RhbmRhcmRpemVkID0gVFJVRSwgcnNxdWFyZSA9IFRSVUUpDQoNCmBgYA0KDQoNCiMjIyBIaWVyYXJjaGljaWFsIHJlZ3Jlc3Npb24NCmBgYHtyfQ0KbGlicmFyeShyb2J1c3RiYXNlKQ0KDQojIE1lbg0KbTAgPC0gbG1yb2IoUkFTX1RPVEFMIH4gMSwgcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuKQ0KDQptMSA8LSBsbXJvYihSQVNfVE9UQUwgfiBCRElfVE9UQUwsIHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbikNCnN1bW1hcnkobTEpDQpjYmluZChjb2VmKG0xKSxjb25maW50KG0xLCBsZXZlbCA9IDAuOTUpKQ0KDQptMiA8LSBsbXJvYihSQVNfVE9UQUwgfiBCRElfVE9UQUwgKyBTUlBfU0VMRl9UT1RBTCwgcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuKQ0Kc3VtbWFyeShtMikNCmNiaW5kKGNvZWYobTIpLGNvbmZpbnQobTIsIGxldmVsID0gMC45NSkpDQoNCm0zIDwtIGxtcm9iKFJBU19UT1RBTCB+IEJESV9UT1RBTCArIFNSUF9TRUxGX1RPVEFMICsgU1JQX1BWX1RPVEFMLCBwc3ljaG9wYXRoeV9kZl9keWFkX3N0YW4pDQpzdW1tYXJ5KG0zKQ0KY2JpbmQoY29lZihtMyksY29uZmludChtMywgbGV2ZWwgPSAwLjk1KSkNCg0KYW5vdmEobTAsIG0xLCB0ZXN0ID0gIkRldmlhbmNlIikNCmFub3ZhKG0xLCBtMiwgdGVzdCA9ICJEZXZpYW5jZSIpDQphbm92YShtMiwgbTMsIHRlc3QgPSAiRGV2aWFuY2UiKQ0KDQoNCiMgV29tZW4NCm0wIDwtIGxtcm9iKFJBU19UT1RBTF93b21lbiB+IDEsIHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbikNCg0KbTEgPC0gbG1yb2IoUkFTX1RPVEFMX3dvbWVuIH4gQkRJX1RPVEFMX3dvbWVuLCBwc3ljaG9wYXRoeV9kZl9keWFkX3N0YW4pDQpzdW1tYXJ5KG0xKQ0KY2JpbmQoY29lZihtMSksY29uZmludChtMSwgbGV2ZWwgPSAwLjk1KSkNCg0KbTIgPC0gbG1yb2IoUkFTX1RPVEFMX3dvbWVuIH4gQkRJX1RPVEFMX3dvbWVuICsgU1JQX1NFTEZfVE9UQUxfd29tZW4sIHBzeWNob3BhdGh5X2RmX2R5YWRfc3RhbikNCnN1bW1hcnkobTIpDQpjYmluZChjb2VmKG0yKSxjb25maW50KG0yLCBsZXZlbCA9IDAuOTUpKQ0KDQptMyA8LSBsbXJvYihSQVNfVE9UQUxfd29tZW4gfiBCRElfVE9UQUxfd29tZW4gKyBTUlBfU0VMRl9UT1RBTF93b21lbiArIFNSUF9QVl9UT1RBTF93b21lbiwgcHN5Y2hvcGF0aHlfZGZfZHlhZF9zdGFuKQ0Kc3VtbWFyeShtMykNCmNiaW5kKGNvZWYobTMpLGNvbmZpbnQobTMsIGxldmVsID0gMC45NSkpDQoNCg0KYW5vdmEobTAsIG0xLCB0ZXN0ID0gIkRldmlhbmNlIikNCmFub3ZhKG0xLCBtMiwgdGVzdCA9ICJEZXZpYW5jZSIpDQphbm92YShtMiwgbTMsIHRlc3QgPSAiRGV2aWFuY2UiKQ0KDQpgYGANCg0KDQpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQ0KIyBQbG90cw0KZ3JhcGhfZGF0YSA8LSBmaXRfYXBpbSAlPiUgDQogICAgICAgICAgICAgIGdldF9lZGdlcyhsYWJlbCA9IHBhc3RlKGVzdCkpICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIob3AgPT0gIn4iKSAlPiUgDQogICAgICAgICAgICAgIG11dGF0ZShsYWJlbCA9ICIiKSAlPiUgDQogICAgICAgICAgICAgIHByZXBhcmVfZ3JhcGgobGF5b3V0ID1nZXRfbGF5b3V0KCJTUlBfU0VMRl9NZW4iLCAiIiwgIiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTUlBfUGFydG5lcl9NZW4iLCAiIiwgIlJBU19NZW4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1JQX1NFTEZfV29tZW4iLCAiIiwgIlJBU19Xb21lbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTUlAgUGFydG5lciBXb21lbiIsICIiLCAiIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MgPSA0KSkNCg0Kbm9kZXMoZ3JhcGhfZGF0YSkgPC0gbm9kZXMoZ3JhcGhfZGF0YSkgJT4lDQogICAgICAgICAgICAgICAgICAgICBtdXRhdGUobGFiZWwgPSBpZl9lbHNlKGxhYmVsID09ICJTUlBfU0VMRl9NZW4iLCAiU1JQLVNGIFxuTWVuIiwgbGFiZWwpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gaWZfZWxzZShsYWJlbCA9PSAiU1JQX1BhcnRuZXJfTWVuIiwgIlNSUC1QViBcbk1lbiIsIGxhYmVsKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IGlmX2Vsc2UobGFiZWwgPT0gIlNSUF9TRUxGX1dvbWVuIiwgIlNSUC1TRiBcbldvbWVuIiwgbGFiZWwpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gaWZfZWxzZShsYWJlbCA9PSAiU1JQIFBhcnRuZXIgV29tZW4iLCAiU1JQLVBWIFxuV29tZW4iLCBsYWJlbCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBpZl9lbHNlKGxhYmVsID09ICJSQVNfTWVuIiwgIlJlbGF0aW9uc2hpcCBcbnNhdGlzZmFjdGlvbiBcbk1lbiIsIGxhYmVsKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IGlmX2Vsc2UobGFiZWwgPT0gIlJBU19Xb21lbiIsICJSZWxhdGlvbnNoaXAgXG5zYXRpc2ZhY3Rpb24gXG5Xb21lbiIsIGxhYmVsKSkNCg0KDQplZGdlcyhncmFwaF9kYXRhKSRjb25uZWN0X3RvWzJdIDwtICJsZWZ0Ig0KZWRnZXMoZ3JhcGhfZGF0YSkkY3VydmF0dXJlWzVdIDwtIDQwDQoNCiMgbWFrZSBzdXJlIGFsbCBsaW5lcyBhcmUgc29saWQgbGluZXMgKGN1cnZlZCBhcnJvdyBhcmUgc2V0IHRvIGRvdHRlZCBieSBkZWZhdWx0KQ0KZ3JhcGhfZGF0YSA8LSBncmFwaF9kYXRhICU+JQ0KICBlZGl0X2dyYXBoKHsgbGluZXR5cGUgPSAxIH0pDQoNCnBsb3QoZ3JhcGhfZGF0YSkgKw0KdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIGZhbWlseSA9ICJzZXJpZiIpKQ0KDQoNCnByZXBhcmVfZ3JhcGgoZml0X2FwaW0pICU+JQ0KICBlZGl0X2dyYXBoKHsgbGFiZWwgPSBwYXN0ZShlc3QpIH0pICU+JQ0KICBwbG90KCkNCg0Kbm9kZXMoZ3JhcGhfZGF0YSkgPC0gbm9kZXMoZ3JhcGhfZGF0YSkgJT4lDQogIG11dGF0ZShsYWJlbCA9IHN0cl90b190aXRsZShsYWJlbCkpDQoNCg0KZ3JhcGhfZGF0YSA8LSBmaXRfYXBpbSAlPiUgZ2V0X2VkZ2VzKCkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUoY29ubmVjdF9mcm9tID0gcmVwbGFjZShjb25uZWN0X2Zyb20sIGlzLm5hKGN1cnZhdHVyZSksICJyaWdodCIpKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShjb25uZWN0X3RvID0gcmVwbGFjZShjb25uZWN0X3RvLCBpcy5uYShjdXJ2YXR1cmUpLCAibGVmdCIpKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihvcCA9PSAifiIpICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZV9ncmFwaChsYXlvdXQgPSBnZXRfbGF5b3V0KCJTUlBfU0VMRl9UT1RBTCIsICIiLCAiUkFTX1RPVEFMIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1JQX1BWX1RPVEFMIiwgIiIsICIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTUlBfU0VMRl9UT1RBTF93b21lbiIsICIiLCAiIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1JQX1BWX1RPVEFMX3dvbWVuIiwgIiIsICJSQVNfVE9UQUxfd29tZW4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzID0gNCkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICANCm5vZGVzKGdyYXBoX2RhdGEpIDwtIG5vZGVzKGdyYXBoX2RhdGEpICU+JQ0KICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGxhYmVsID0gaWZfZWxzZShsYWJlbCA9PSAiU1JQX1NFTEZfVE9UQUwiLCAiU1JQLVNGIFxuTWVuIiwgbGFiZWwpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gaWZfZWxzZShsYWJlbCA9PSAiU1JQX1BWX1RPVEFMIiwgIlNSUC1QViBcbk1lbiIsIGxhYmVsKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IGlmX2Vsc2UobGFiZWwgPT0gIlNSUF9TRUxGX1RPVEFMX3dvbWVuIiwgIlNSUC1TRiBcbldvbWVuIiwgbGFiZWwpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gaWZfZWxzZShsYWJlbCA9PSAiU1JQX1BWX1RPVEFMX3dvbWVuIiwgIlNSUC1QViBcbldvbWVuIiwgbGFiZWwpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gaWZfZWxzZShsYWJlbCA9PSAiUkFTX1RPVEFMIiwgIlJlbGF0aW9uc2hpcCBcbnNhdGlzZmFjdGlvbiBcbk1lbiIsIGxhYmVsKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IGlmX2Vsc2UobGFiZWwgPT0gIlJBU19UT1RBTF93b21lbiIsICJSZWxhdGlvbnNoaXAgXG5zYXRpc2ZhY3Rpb24gXG5Xb21lbiIsIGxhYmVsKSkNCg0KZWRnZXMoZ3JhcGhfZGF0YSkgJT4lDQogICAgICAgICAgICAgICAgICBtdXRhdGUoY29ubmVjdF9mcm9tID0gcmVwbGFjZShjb25uZWN0X2Zyb20sIGlzLm5hKGN1cnZhdHVyZSksICJyaWdodCIpKSAlPiUNCiAgICAgICAgICAgICAgICAgIG11dGF0ZShjb25uZWN0X3RvID0gcmVwbGFjZShjb25uZWN0X3RvLCBpcy5uYShjdXJ2YXR1cmUpLCAibGVmdCIpKQ0KDQpwbG90KGdyYXBoX2RhdGEpDQoNCg0KDQpoaXN0KHBzeWNob3BhdGh5X2RmX2R5YWQkU1JQX1NFTEZfVE9UQUwsIGNvbD0ncmVkJywgeGxpbT1jKC0zNSwgMTAwKSkNCmhpc3QocHN5Y2hvcGF0aHlfZGZfZHlhZCRTUlBfU0VMRl9MSUZFU1RZTEUsIGNvbD0nZ3JlZW4nKQ0KaGlzdChwc3ljaG9wYXRoeV9kZl9keWFkJFNSUF9TRUxGX0FGRkVDVElWRSwgY29sPSdibHVlJykNCmhpc3QocHN5Y2hvcGF0aHlfZGZfZHlhZCRTUlBfU0VMRl9JTlRFUlBFUlNPTkFMLCBjb2w9J3B1cnBsZScpDQoNCmhpc3QocHN5Y2hvcGF0aHlfZGZfZHlhZCRTUlBfU0VMRl9UT1RBTF93b21lbiwgY29sPSdyZWQnLCB4bGltPWMoLTM1LCAxMDApKQ0KaGlzdChwc3ljaG9wYXRoeV9kZl9keWFkJFNSUF9TRUxGX0xJRkVTVFlMRV93b21lbiwgY29sPSdncmVlbicpDQpoaXN0KHBzeWNob3BhdGh5X2RmX2R5YWQkU1JQX1NFTEZfQUZGRUNUSVZFX3dvbWVuLCBjb2w9J2JsdWUnKQ0KaGlzdChwc3ljaG9wYXRoeV9kZl9keWFkJFNSUF9TRUxGX0lOVEVSUEVSU09OQUxfd29tZW4sIGNvbD0ncHVycGxlJykNCmBgYA0KDQo=