1 Hypothesis 1

1.1 Student Distress Over Time

We hypothesize that student distress, as represented by mean PHQ-9 score, will have risen significantly over time.

Furthermore, we hypothesize that there will be significant differences in PHQ-9 scores across demographic variables including:

  • Gender
  • Race
  • Sexual orientation
  • Year in education (e.g., freshman, sophomore, etc.)

Specifically, we hypothesize that students with marginalized identities will have higher PHQ-9 scores than their peers.

1.1.1 Score and Time

model=lm(Score~Period, data=data)
summary(model)

Call:
lm(formula = Score ~ Period, data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-14.4902  -4.0158  -0.1107   4.0790  13.4585 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 13.25694    0.24641  53.801  < 2e-16 ***
Period       0.09486    0.02663   3.562 0.000376 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 5.471 on 2411 degrees of freedom
Multiple R-squared:  0.005234,  Adjusted R-squared:  0.004821 
F-statistic: 12.69 on 1 and 2411 DF,  p-value: 0.0003756

At the α = .05 significance level, we reject the null hypothesis that the slope equals zero. There is statistically significant evidence of a linear relationship between PHQ-9 score and Period. The estimated slope of 0.0949 indicates that, on average, PHQ-9 scores increase by approximately 0.095 points per semester. However, the R² value of 0.0052 indicates that Period explains only about 0.5% of the variability in PHQ-9 scores. Thus, while the upward trend over time is statistically significant, the magnitude of the effect is small.

mean_by_period <- data %>%
  group_by(Period) %>%
  summarise(
    mean_score = mean(Score, na.rm = TRUE),
    n = sum(!is.na(Score))
  )

ggplot(mean_by_period, aes(x = Period, y = mean_score)) +
  geom_line() +
  geom_point() +
  labs(
    title = "Mean PHQ-9 Score by Period",
    x = "Period",
    y = "Mean Score"
  )

1.1.2 Score and Gender

model=lm(Score ~ Gender2, data = data)
summary(model)

Call:
lm(formula = Score ~ Gender2, data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-14.0922  -3.8546   0.1454   4.1454  13.1454 

Coefficients:
                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)         14.0922     0.2492  56.554  < 2e-16 ***
Gender2Non-binary    4.0165     0.8402   4.780 1.86e-06 ***
Gender2PNA           4.1459     1.2135   3.417 0.000645 ***
Gender2Trans man     2.4078     1.7389   1.385 0.166300    
Gender2Trans woman   2.9078     2.4466   1.189 0.234754    
Gender2Woman        -0.2376     0.2795  -0.850 0.395210    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 5.442 on 2403 degrees of freedom
  (4 observations deleted due to missingness)
Multiple R-squared:  0.01795,   Adjusted R-squared:  0.01591 
F-statistic: 8.784 on 5 and 2403 DF,  p-value: 2.858e-08

At the α = .05 significance level, we reject the null hypothesis of equal mean PHQ-9 scores across gender groups. The overall F-test indicates that at least one gender group differs significantly in mean PHQ-9 score. Therefore, there is statistically significant evidence that PHQ-9 scores vary by gender. The effect is very small though. If we look at averages, Non-binary and PNA genders have the largest scores.

mean_score_gender <- data %>% 
  group_by(Gender2) %>% 
  summarise(avg_score = mean(Score))

mean_score_gender
# A tibble: 7 × 2
  Gender2     avg_score
  <chr>           <dbl>
1 Man              14.1
2 Non-binary       18.1
3 PNA              18.2
4 Trans man        16.5
5 Trans woman      17  
6 Woman            13.9
7 <NA>             14.8

1.1.3 Score and Race

model=lm(Score ~ Race2, data = data)
summary(model)

Call:
lm(formula = Score ~ Race2, data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-14.9866  -3.7587   0.2413   4.2413  13.2413 

Coefficients:
                                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)                         14.98661    0.36518  41.039  < 2e-16 ***
Race2Arab/ME                         2.32109    1.55922   1.489  0.13672    
Race2Asia/PI                        -0.58661    0.68210  -0.860  0.38988    
Race2DNI                             2.14673    1.45767   1.473  0.14096    
Race2Multi-ethnic                    0.03034    0.62170   0.049  0.96108    
Race2Native American/Alaskan Native -1.22789    0.38715  -3.172  0.00154 ** 
Race2PNA                            -0.79911    0.86930  -0.919  0.35805    
Race2White                          -0.13105    0.68210  -0.192  0.84766    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 5.465 on 2397 degrees of freedom
  (8 observations deleted due to missingness)
Multiple R-squared:  0.0112,    Adjusted R-squared:  0.008313 
F-statistic: 3.879 on 7 and 2397 DF,  p-value: 0.0003296

At the α = .05 significance level, we reject the null hypothesis of equal mean PHQ-9 scores across racial groups. The overall F-test indicates that at least one racial group differs significantly in mean PHQ-9 score. Therefore, there is statistically significant evidence that PHQ-9 scores vary by race. The effect is very small though.

mean_score_race <- data %>% 
  group_by(Race2) %>% 
  summarise(avg_score = mean(Score))

mean_score_race
# A tibble: 9 × 2
  Race2                          avg_score
  <chr>                              <dbl>
1 African/Afro-Caribbean/Black        15.0
2 Arab/ME                             17.3
3 Asia/PI                             14.4
4 DNI                                 17.1
5 Multi-ethnic                        15.0
6 Native American/Alaskan Native      13.8
7 PNA                                 14.2
8 White                               14.9
9 <NA>                                11.4

1.1.4 Score and Sexual Orientation

model=lm(Score ~ Sorient2, data = data)
summary(model)

Call:
lm(formula = Score ~ Sorient2, data = data)

Residuals:
    Min      1Q  Median      3Q     Max 
-15.867  -4.000  -0.336   3.664  13.664 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)          14.16667    0.66257  21.381   <2e-16 ***
Sorient2Bisexual      1.70023    0.73341   2.318   0.0205 *  
Sorient2DNI          -0.09524    1.21399  -0.078   0.9375    
Sorient2Gay/lesbian   1.22013    0.84400   1.446   0.1484    
Sorient2Heterosexual -0.83068    0.67582  -1.229   0.2191    
Sorient2Panromantic  -0.76667    2.49675  -0.307   0.7588    
Sorient2Pansexual     3.21171    1.10547   2.905   0.0037 ** 
Sorient2PNA           0.83333    0.84100   0.991   0.3218    
Sorient2Queer         2.48551    1.03386   2.404   0.0163 *  
Sorient2Questioning   1.23333    0.88310   1.397   0.1627    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 5.383 on 2398 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared:  0.04094,   Adjusted R-squared:  0.03734 
F-statistic: 11.37 on 9 and 2398 DF,  p-value: < 2.2e-16

At the α = .05 significance level, we reject the null hypothesis of equal mean PHQ-9 scores across sexual orientation groups. The overall F-test indicates that at least one sexual orientation group differs significantly in mean PHQ-9 score. Therefore, there is statistically significant evidence that PHQ-9 scores vary by sexual orientation. Although the effect is still small, it is larger than the effects observed for gender and race.

mean_score_race <- data %>% 
  group_by(Sorient2) %>% 
  summarise(avg_score = mean(Score))

mean_score_race
# A tibble: 11 × 2
   Sorient2     avg_score
   <chr>            <dbl>
 1 Asexual           14.2
 2 Bisexual          15.9
 3 DNI               14.1
 4 Gay/lesbian       15.4
 5 Heterosexual      13.3
 6 PNA               15  
 7 Panromantic       13.4
 8 Pansexual         17.4
 9 Queer             16.7
10 Questioning       15.4
11 <NA>              14.6

1.1.5 Score and Class

model=lm(Score ~ Class2, data = data)
summary(model)

Call:
lm(formula = Score ~ Class2, data = data)

Residuals:
     Min       1Q   Median       3Q      Max 
-14.4360  -4.0891  -0.0891   3.9109  14.0056 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)     14.08912    0.21197  66.467  < 2e-16 ***
Class2Junior     0.03717    0.31047   0.120   0.9047    
Class2Post bacc  1.61088    0.88800   1.814   0.0698 .  
Class2Senior    -0.03129    0.34148  -0.092   0.9270    
Class2Senior+   -2.09474    0.46048  -4.549 5.66e-06 ***
Class2Sophomore  0.34687    0.31641   1.096   0.2731    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 5.454 on 2406 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.01304,   Adjusted R-squared:  0.01099 
F-statistic: 6.358 on 5 and 2406 DF,  p-value: 7.121e-06

At the α = .05 significance level, we reject the null hypothesis of equal mean PHQ-9 scores across class year groups. The overall F-test indicates that at least one class year differs significantly in mean PHQ-9 score. Therefore, there is statistically significant evidence that PHQ-9 scores vary by year in education. The effect is very small though.

mean_score_race <- data %>% 
  group_by(Class2) %>% 
  summarise(avg_score = mean(Score))

mean_score_race
# A tibble: 7 × 2
  Class2     avg_score
  <chr>          <dbl>
1 First year      14.1
2 Junior          14.1
3 Post bacc       15.7
4 Senior          14.1
5 Senior+         12.0
6 Sophomore       14.4
7 <NA>             8  

1.2 Conclusion

Overall, the mean PHQ-9 score increased significantly over time. We also found significant differences in PHQ-9 scores across demographics such as gender, race, sexual orientation, and year in education. There were cases where marginalized identities, especially within gender and sexual orientation, had higher PHQ-9 scores compared to the reference groups.

However, it is important to note that the sample sizes for each period were relatively small and fluctuated a lot. The survey was also not balanced across demographics. For example, the gender breakdown shows the sample was heavily dominated by women, which may influence the results.

Lastly, the overall mean PHQ-9 score across the study was 14.04. This places the average respondent within the moderate depression range, hinting that students experiencing greater distress were more likely to participate in the survey.

imbalance <- data %>% group_by(Gender2) %>% summarise(counts = n())
imbalance
# A tibble: 7 × 2
  Gender2     counts
  <chr>        <int>
1 Man            477
2 Non-binary      46
3 PNA             21
4 Trans man       10
5 Trans woman      5
6 Woman         1850
7 <NA>             4

2 Hypothesis 2

LS0tCnRpdGxlOiAiSVNQIFByb2plY3QgSHlwb3RoZXNlcyIKYXV0aG9yOiAiIgpkYXRlOiAiIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvY19jb2xsYXBzZWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHNtb290aF9zY3JvbGw6IHllcwogICAgdGhlbWU6IGx1bWVuCiAgcGRmX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICBmaWdfd2lkdGg6IDMKICAgIGZpZ19oZWlnaHQ6IDMKICB3b3JkX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGtlZXBfbWQ6IHllcwplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0KI1RPQzo6YmVmb3JlIHsKICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtc2l6ZTogMS4yZW07CiAgZGlzcGxheTogYmxvY2s7CiAgY29sb3I6IG5hdnk7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47CiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOwp9CgpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLwogIGZvbnQtc2l6ZTogMjJweDsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogRGFya1JlZDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOwp9CgpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LWZhbWlseTogc3lzdGVtLXVpOwogIGNvbG9yOiBuYXZ5OwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsKICBjb2xvcjogRGFya0JsdWU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpoMSB7IC8qIEhlYWRlciAxIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IGRhcmtyZWQ7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmgyIHsgLyogSGVhZGVyIDIgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmgzIHsgLyogSGVhZGVyIDMgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmg0IHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IGRhcmtyZWQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgovKiBBZGQgZG90cyBhZnRlciBudW1iZXJlZCBoZWFkZXJzICovCi5oZWFkZXItc2VjdGlvbi1udW1iZXI6OmFmdGVyIHsKICBjb250ZW50OiAiLiI7Cgpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQoKLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0KCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9Cgp9CmBgYAoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCAKIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuCmlmICghcmVxdWlyZSgia25pdHIiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpCiAgIGxpYnJhcnkoa25pdHIpCn0KaWYgKCFyZXF1aXJlKCJwYW5kZXIiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJwYW5kZXIiKQogICBsaWJyYXJ5KHBhbmRlcikKfQppZiAoIXJlcXVpcmUoImdncGxvdDIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQogIGxpYnJhcnkoZ2dwbG90MikKfQppZiAoIXJlcXVpcmUoInRpZHl2ZXJzZSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQoKaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgewogIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIpCiAgbGlicmFyeShwbG90bHkpCn0KCmlmICghcmVxdWlyZSgiZHBseXIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikKICBsaWJyYXJ5KGRwbHlyKQp9CgppZiAoIXJlcXVpcmUoIm9sc3JyIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJvbHNyciIpCiAgbGlicmFyeShwbG90bHkpCn0KCmlmICghcmVxdWlyZSgiZ3Bsb3RzIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJncGxvdHMiKQogIGxpYnJhcnkoZ3Bsb3RzKQp9CgojIyBsaWJyYXJ5KGxlYXBzKQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgICMgaW5jbHVkZSBjb2RlIGNodW5rIGluIHRoZSBvdXRwdXQgZmlsZQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgICMgc29tZXRpbWVzLCB5b3UgY29kZSBtYXkgcHJvZHVjZSB3YXJuaW5nIG1lc3NhZ2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgeW91IGNhbiBjaG9vc2UgdG8gaW5jbHVkZSB0aGUgd2FybmluZyBtZXNzYWdlcyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIG91dHB1dCBmaWxlLiAKICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgICAjIHlvdSBjYW4gYWxzbyBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluIHRoZSBvdXRwdXQgZmlsZS4KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQQogICAgICAgICAgICAgICAgICAgICAgKSAgCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0KZGF0YSA8LSByZWFkLmNzdigiRnVsbERhdGFSZXBvcnREZWlkZW50aWZpZWRDbGVhbi5jc3YiKQpgYGAKCiMgSHlwb3RoZXNpcyAxCgojIyBTdHVkZW50IERpc3RyZXNzIE92ZXIgVGltZQoKV2UgaHlwb3RoZXNpemUgdGhhdCBzdHVkZW50IGRpc3RyZXNzLCBhcyByZXByZXNlbnRlZCBieSAqKm1lYW4gUEhRLTkgc2NvcmUqKiwgd2lsbCBoYXZlIHJpc2VuIHNpZ25pZmljYW50bHkgb3ZlciB0aW1lLgoKRnVydGhlcm1vcmUsIHdlIGh5cG90aGVzaXplIHRoYXQgdGhlcmUgd2lsbCBiZSBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBpbiBQSFEtOSBzY29yZXMgYWNyb3NzIGRlbW9ncmFwaGljIHZhcmlhYmxlcyBpbmNsdWRpbmc6CgotIEdlbmRlciAgCi0gUmFjZSAgCi0gU2V4dWFsIG9yaWVudGF0aW9uICAKLSBZZWFyIGluIGVkdWNhdGlvbiAoZS5nLiwgZnJlc2htYW4sIHNvcGhvbW9yZSwgZXRjLikKClNwZWNpZmljYWxseSwgd2UgaHlwb3RoZXNpemUgdGhhdCBzdHVkZW50cyB3aXRoIG1hcmdpbmFsaXplZCBpZGVudGl0aWVzIHdpbGwgaGF2ZSBoaWdoZXIgUEhRLTkgc2NvcmVzIHRoYW4gdGhlaXIgcGVlcnMuCgojIyMgU2NvcmUgYW5kIFRpbWUKYGBge3J9Cm1vZGVsPWxtKFNjb3JlflBlcmlvZCwgZGF0YT1kYXRhKQpzdW1tYXJ5KG1vZGVsKQpgYGAKQXQgdGhlIM6xID0gLjA1IHNpZ25pZmljYW5jZSBsZXZlbCwgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgdGhhdCB0aGUgc2xvcGUgZXF1YWxzIHplcm8uIFRoZXJlIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZXZpZGVuY2Ugb2YgYSBsaW5lYXIgcmVsYXRpb25zaGlwIGJldHdlZW4gUEhRLTkgc2NvcmUgYW5kIFBlcmlvZC4gVGhlIGVzdGltYXRlZCBzbG9wZSBvZiAwLjA5NDkgaW5kaWNhdGVzIHRoYXQsIG9uIGF2ZXJhZ2UsIFBIUS05IHNjb3JlcyBpbmNyZWFzZSBieSBhcHByb3hpbWF0ZWx5IDAuMDk1IHBvaW50cyBwZXIgc2VtZXN0ZXIuIEhvd2V2ZXIsIHRoZSBSwrIgdmFsdWUgb2YgMC4wMDUyIGluZGljYXRlcyB0aGF0IFBlcmlvZCBleHBsYWlucyBvbmx5IGFib3V0IDAuNSUgb2YgdGhlIHZhcmlhYmlsaXR5IGluIFBIUS05IHNjb3Jlcy4gVGh1cywgd2hpbGUgdGhlIHVwd2FyZCB0cmVuZCBvdmVyIHRpbWUgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCwgdGhlIG1hZ25pdHVkZSBvZiB0aGUgZWZmZWN0IGlzIHNtYWxsLgpgYGB7cn0KbWVhbl9ieV9wZXJpb2QgPC0gZGF0YSAlPiUKICBncm91cF9ieShQZXJpb2QpICU+JQogIHN1bW1hcmlzZSgKICAgIG1lYW5fc2NvcmUgPSBtZWFuKFNjb3JlLCBuYS5ybSA9IFRSVUUpLAogICAgbiA9IHN1bSghaXMubmEoU2NvcmUpKQogICkKCmdncGxvdChtZWFuX2J5X3BlcmlvZCwgYWVzKHggPSBQZXJpb2QsIHkgPSBtZWFuX3Njb3JlKSkgKwogIGdlb21fbGluZSgpICsKICBnZW9tX3BvaW50KCkgKwogIGxhYnMoCiAgICB0aXRsZSA9ICJNZWFuIFBIUS05IFNjb3JlIGJ5IFBlcmlvZCIsCiAgICB4ID0gIlBlcmlvZCIsCiAgICB5ID0gIk1lYW4gU2NvcmUiCiAgKQpgYGAKCiMjIyBTY29yZSBhbmQgR2VuZGVyCmBgYHtyfQptb2RlbD1sbShTY29yZSB+IEdlbmRlcjIsIGRhdGEgPSBkYXRhKQpzdW1tYXJ5KG1vZGVsKQpgYGAKQXQgdGhlIM6xID0gLjA1IHNpZ25pZmljYW5jZSBsZXZlbCwgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgb2YgZXF1YWwgbWVhbiBQSFEtOSBzY29yZXMgYWNyb3NzIGdlbmRlciBncm91cHMuIFRoZSBvdmVyYWxsIEYtdGVzdCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgZ2VuZGVyIGdyb3VwIGRpZmZlcnMgc2lnbmlmaWNhbnRseSBpbiBtZWFuIFBIUS05IHNjb3JlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZXZpZGVuY2UgdGhhdCBQSFEtOSBzY29yZXMgdmFyeSBieSBnZW5kZXIuIFRoZSBlZmZlY3QgaXMgdmVyeSBzbWFsbCB0aG91Z2guIElmIHdlIGxvb2sgYXQgYXZlcmFnZXMsIE5vbi1iaW5hcnkgYW5kIFBOQSBnZW5kZXJzIGhhdmUgdGhlIGxhcmdlc3Qgc2NvcmVzLgpgYGB7cn0KbWVhbl9zY29yZV9nZW5kZXIgPC0gZGF0YSAlPiUgCiAgZ3JvdXBfYnkoR2VuZGVyMikgJT4lIAogIHN1bW1hcmlzZShhdmdfc2NvcmUgPSBtZWFuKFNjb3JlKSkKCm1lYW5fc2NvcmVfZ2VuZGVyCmBgYAojIyMgU2NvcmUgYW5kIFJhY2UKYGBge3J9Cm1vZGVsPWxtKFNjb3JlIH4gUmFjZTIsIGRhdGEgPSBkYXRhKQpzdW1tYXJ5KG1vZGVsKQpgYGAKQXQgdGhlIM6xID0gLjA1IHNpZ25pZmljYW5jZSBsZXZlbCwgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgb2YgZXF1YWwgbWVhbiBQSFEtOSBzY29yZXMgYWNyb3NzIHJhY2lhbCBncm91cHMuIFRoZSBvdmVyYWxsIEYtdGVzdCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgcmFjaWFsIGdyb3VwIGRpZmZlcnMgc2lnbmlmaWNhbnRseSBpbiBtZWFuIFBIUS05IHNjb3JlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZXZpZGVuY2UgdGhhdCBQSFEtOSBzY29yZXMgdmFyeSBieSByYWNlLiBUaGUgZWZmZWN0IGlzIHZlcnkgc21hbGwgdGhvdWdoLgpgYGB7cn0KbWVhbl9zY29yZV9yYWNlIDwtIGRhdGEgJT4lIAogIGdyb3VwX2J5KFJhY2UyKSAlPiUgCiAgc3VtbWFyaXNlKGF2Z19zY29yZSA9IG1lYW4oU2NvcmUpKQoKbWVhbl9zY29yZV9yYWNlCmBgYAojIyMgU2NvcmUgYW5kIFNleHVhbCBPcmllbnRhdGlvbgpgYGB7cn0KbW9kZWw9bG0oU2NvcmUgfiBTb3JpZW50MiwgZGF0YSA9IGRhdGEpCnN1bW1hcnkobW9kZWwpCmBgYApBdCB0aGUgzrEgPSAuMDUgc2lnbmlmaWNhbmNlIGxldmVsLCB3ZSByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcyBvZiBlcXVhbCBtZWFuIFBIUS05IHNjb3JlcyBhY3Jvc3Mgc2V4dWFsIG9yaWVudGF0aW9uIGdyb3Vwcy4gVGhlIG92ZXJhbGwgRi10ZXN0IGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBzZXh1YWwgb3JpZW50YXRpb24gZ3JvdXAgZGlmZmVycyBzaWduaWZpY2FudGx5IGluIG1lYW4gUEhRLTkgc2NvcmUuIFRoZXJlZm9yZSwgdGhlcmUgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBldmlkZW5jZSB0aGF0IFBIUS05IHNjb3JlcyB2YXJ5IGJ5IHNleHVhbCBvcmllbnRhdGlvbi4gQWx0aG91Z2ggdGhlIGVmZmVjdCBpcyBzdGlsbCBzbWFsbCwgaXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGVmZmVjdHMgb2JzZXJ2ZWQgZm9yIGdlbmRlciBhbmQgcmFjZS4KCmBgYHtyfQptZWFuX3Njb3JlX3JhY2UgPC0gZGF0YSAlPiUgCiAgZ3JvdXBfYnkoU29yaWVudDIpICU+JSAKICBzdW1tYXJpc2UoYXZnX3Njb3JlID0gbWVhbihTY29yZSkpCgptZWFuX3Njb3JlX3JhY2UKYGBgCiMjIyBTY29yZSBhbmQgQ2xhc3MKYGBge3J9Cm1vZGVsPWxtKFNjb3JlIH4gQ2xhc3MyLCBkYXRhID0gZGF0YSkKc3VtbWFyeShtb2RlbCkKYGBgCkF0IHRoZSDOsSA9IC4wNSBzaWduaWZpY2FuY2UgbGV2ZWwsIHdlIHJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzIG9mIGVxdWFsIG1lYW4gUEhRLTkgc2NvcmVzIGFjcm9zcyBjbGFzcyB5ZWFyIGdyb3Vwcy4gVGhlIG92ZXJhbGwgRi10ZXN0IGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBjbGFzcyB5ZWFyIGRpZmZlcnMgc2lnbmlmaWNhbnRseSBpbiBtZWFuIFBIUS05IHNjb3JlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgZXZpZGVuY2UgdGhhdCBQSFEtOSBzY29yZXMgdmFyeSBieSB5ZWFyIGluIGVkdWNhdGlvbi4gVGhlIGVmZmVjdCBpcyB2ZXJ5IHNtYWxsIHRob3VnaC4KCmBgYHtyfQptZWFuX3Njb3JlX3JhY2UgPC0gZGF0YSAlPiUgCiAgZ3JvdXBfYnkoQ2xhc3MyKSAlPiUgCiAgc3VtbWFyaXNlKGF2Z19zY29yZSA9IG1lYW4oU2NvcmUpKQoKbWVhbl9zY29yZV9yYWNlCmBgYAoKIyMgQ29uY2x1c2lvbgpPdmVyYWxsLCB0aGUgbWVhbiBQSFEtOSBzY29yZSBpbmNyZWFzZWQgc2lnbmlmaWNhbnRseSBvdmVyIHRpbWUuIFdlIGFsc28gZm91bmQgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZXMgaW4gUEhRLTkgc2NvcmVzIGFjcm9zcyBkZW1vZ3JhcGhpY3Mgc3VjaCBhcyBnZW5kZXIsIHJhY2UsIHNleHVhbCBvcmllbnRhdGlvbiwgYW5kIHllYXIgaW4gZWR1Y2F0aW9uLiBUaGVyZSB3ZXJlIGNhc2VzIHdoZXJlIG1hcmdpbmFsaXplZCBpZGVudGl0aWVzLCBlc3BlY2lhbGx5IHdpdGhpbiBnZW5kZXIgYW5kIHNleHVhbCBvcmllbnRhdGlvbiwgaGFkIGhpZ2hlciBQSFEtOSBzY29yZXMgY29tcGFyZWQgdG8gdGhlIHJlZmVyZW5jZSBncm91cHMuCgpIb3dldmVyLCBpdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBzYW1wbGUgc2l6ZXMgZm9yIGVhY2ggcGVyaW9kIHdlcmUgcmVsYXRpdmVseSBzbWFsbCBhbmQgZmx1Y3R1YXRlZCBhIGxvdC4gVGhlIHN1cnZleSB3YXMgYWxzbyBub3QgYmFsYW5jZWQgYWNyb3NzIGRlbW9ncmFwaGljcy4gRm9yIGV4YW1wbGUsIHRoZSBnZW5kZXIgYnJlYWtkb3duIHNob3dzIHRoZSBzYW1wbGUgd2FzIGhlYXZpbHkgZG9taW5hdGVkIGJ5IHdvbWVuLCB3aGljaCBtYXkgaW5mbHVlbmNlIHRoZSByZXN1bHRzLgoKTGFzdGx5LCB0aGUgb3ZlcmFsbCBtZWFuIFBIUS05IHNjb3JlIGFjcm9zcyB0aGUgc3R1ZHkgd2FzIDE0LjA0LiBUaGlzIHBsYWNlcyB0aGUgYXZlcmFnZSByZXNwb25kZW50IHdpdGhpbiB0aGUgbW9kZXJhdGUgZGVwcmVzc2lvbiByYW5nZSwgaGludGluZyB0aGF0IHN0dWRlbnRzIGV4cGVyaWVuY2luZyBncmVhdGVyIGRpc3RyZXNzIHdlcmUgbW9yZSBsaWtlbHkgdG8gcGFydGljaXBhdGUgaW4gdGhlIHN1cnZleS4KYGBge3J9CmltYmFsYW5jZSA8LSBkYXRhICU+JSBncm91cF9ieShHZW5kZXIyKSAlPiUgc3VtbWFyaXNlKGNvdW50cyA9IG4oKSkKaW1iYWxhbmNlCmBgYAotLS0KCiMgSHlwb3RoZXNpcyAyCgojIyBQc3ljaG9sb2dpY2FsIFJpc2sgRmFjdG9ycyBhbmQgUEhRLTkgVHJlbmRzCgpCYXNlZCBvbiB0aGUgSW50ZXJwZXJzb25hbC1Qc3ljaG9sb2dpY2FsIFRoZW9yeSBvZiBTdWljaWRlIEJlaGF2aW9yIChKb2luZXLigJlzIHRoZW9yeSkgYW5kIGVzdGFibGlzaGVkIHRyZW5kcyBvZiBpbmNyZWFzaW5nIHN1aWNpZGUgcmlzayBhbW9uZyBjb2xsZWdlLWFnZWQgeW91bmcgYWR1bHRzLCB3ZSBoeXBvdGhlc2l6ZSB0aGF0IGluY3JlYXNlcyBpbiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBvdmVyIHRpbWUgd2lsbCBjb3JyZXNwb25kIHRvIGluY3JlYXNlcyBpbiAqKm1lYW4gUEhRLTkgc2NvcmVzKio6CgoxLiBMb25lbGluZXNzICAKMi4gSG9wZWxlc3NuZXNzICAKMy4gRGVzcGVyYXRlIGZlZWxpbmdzICAKNC4gT3V0LW9mLWNvbnRyb2wgZmVlbGluZ3MgIAo1LiBEcmlua2luZyBtb3JlICAKNi4gRHJpbmtpbmcgdG9vIG11Y2ggIAo3LiBEcnVnIHVzZSAgCjguIFN1aWNpZGFsIHRob3VnaHRzIGluIHRoZSBsYXN0IHR3byB3ZWVrcyAgCjkuIFN1aWNpZGUgcGxhbnMgaW4gdGhlIGxhc3QgdHdvIHdlZWtzICAKMTAuIFN1aWNpZGUgYWN0aW9ucyBpbiB0aGUgbGFzdCB0d28gd2Vla3MgIAoxMS4gU3VpY2lkZSBhdHRlbXB0cyBvdmVyIGxpZmV0aW1lICAKCldlIGV4cGVjdCBwb3NpdGl2ZSBhc3NvY2lhdGlvbnMgYmV0d2VlbiB0aGVzZSB2YXJpYWJsZXMgYW5kIFBIUS05IHNjb3JlcyBvdmVyIHRpbWUuCg==