Introduction
This data set looks at the Dallas Wings WNBA team’s game data from
the 2025 year. The team did not make it to the playoffs. They won 9
games and lost 31. Below are Tables 1 and 2. Table 1 describes the
overall season results for all teams, while Table 2 describes a summary
of Dallas Wings’s results from the season. Based on the data from this
season, we will try to predict the point score for a “median” game for
the Dallas Wings.
Tables/Season
Summary
#creating summary table for entire league
summary %>%
kbl(caption = "team score summary", digits = 2) %>%
kable_classic(full_width = F)
team score summary
|
team_name
|
mean_score
|
sd_score
|
mean_rebounds
|
sd_rebounds
|
mean_field_goal_pct
|
sd_field_goal_pct
|
mean_3PFGper
|
sd_3PFGper
|
mean_steals
|
sd_steals
|
|
Aces
|
85.52
|
9.56
|
33.78
|
5.88
|
45.27
|
5.82
|
35.27
|
7.08
|
6.80
|
2.67
|
|
Dream
|
76.93
|
10.59
|
35.95
|
4.41
|
41.28
|
6.78
|
30.83
|
9.32
|
7.14
|
2.82
|
|
Fever
|
84.50
|
10.17
|
35.10
|
5.49
|
45.56
|
5.38
|
35.00
|
8.99
|
5.88
|
2.29
|
|
Liberty
|
84.98
|
9.92
|
36.90
|
5.77
|
44.53
|
5.61
|
35.38
|
10.06
|
7.75
|
2.19
|
|
Lynx
|
82.36
|
11.39
|
33.15
|
5.06
|
45.21
|
6.34
|
37.80
|
9.43
|
8.36
|
3.17
|
|
Mercury
|
81.93
|
12.60
|
32.26
|
5.39
|
44.28
|
7.34
|
32.97
|
10.34
|
6.55
|
2.12
|
|
Mystics
|
79.30
|
8.69
|
31.85
|
4.66
|
43.36
|
4.82
|
36.64
|
8.69
|
7.28
|
2.24
|
|
Sky
|
77.40
|
9.62
|
36.60
|
5.57
|
42.44
|
5.22
|
31.74
|
11.62
|
7.00
|
3.30
|
|
Sparks
|
78.40
|
10.57
|
32.67
|
5.52
|
42.63
|
6.15
|
32.09
|
11.00
|
7.30
|
2.78
|
|
Storm
|
82.67
|
9.65
|
34.67
|
6.02
|
43.43
|
5.39
|
28.35
|
9.03
|
9.24
|
3.27
|
|
Sun
|
80.36
|
9.89
|
33.43
|
4.62
|
44.30
|
5.28
|
32.84
|
11.67
|
7.89
|
3.29
|
|
Wings
|
84.20
|
11.47
|
34.75
|
4.65
|
44.47
|
5.24
|
32.06
|
11.75
|
7.12
|
2.95
|
#creating summary table for just wings
my_team_win %>%
kbl(caption = "Wings Win Summary", digits = 2) %>%
kable_classic(full_width = F)
Wings Win Summary
|
team_winner
|
mean
|
sd
|
|
FALSE
|
80.97
|
9.83
|
|
TRUE
|
95.33
|
9.96
|
Box Plots
Below are two boxplots based on the points scored by game result (win
or lose). In both scenarios, there is about equal variation, though the
point range and median for wins is higher than losses. Their minimum
game score was 67 while the highest was 109 for losing games, while
minimum was 84 and maximum was 113 for winning games.
#i refuse to have a 6-7 joke in my coding. you cannot make me
p <- data %>%
ggplot(aes(x=team_score, fill = team_winner)) +
geom_histogram(color = "#e9ecef", alpha=0.6, position = 'identity') +
scale_fill_manual(values=c("#002b5c", "#c4d600"))
boxplot(team_score ~ result, data = df_hist, notch = FALSE,
col = c("#002b5c", "#c4d600"),
main = "Points score by game result",
xlab = "Result", ylab = "Points")

Models
\(~\)
After after running all models and reducing models, my final model is
team_score= -12.3047153 + 1.4462277 * field_goal_pct + 0.6871829 *
total_rebounds + 0.2593569 * three_point_field_goal_pct.
This model significantly predicts team score, F(3, 36) = 21.2378708,
p<.0001, 0.6088799.
See table below for results:
|
|
|
|
Dependent variable:
|
|
|
|
|
|
team_score
|
|
|
|
field_goal_pct
|
1.446***
|
|
|
(0.253)
|
|
|
|
|
total_rebounds
|
0.687**
|
|
|
(0.255)
|
|
|
|
|
three_point_field_goal_pct
|
0.259**
|
|
|
(0.112)
|
|
|
|
|
Constant
|
-12.305
|
|
|
(14.869)
|
|
|
|
|
|
|
Observations
|
40
|
|
R2
|
0.639
|
|
Adjusted R2
|
0.609
|
|
Residual Std. Error
|
7.173 (df = 36)
|
|
F Statistic
|
21.238*** (df = 3; 36)
|
|
|
|
Note:
|
p<0.1; p<0.05;
p<0.01
|
Residuals
For our residual analysis, we will start with the residual vs fitted
values plot. There is no distinct shape or pattern that would cause
concern about equal variances. For the histogram, we see a relatively
normal shape, meaning we can accept our assumption of normality. The
studentized residuals plot reveals observation 35 to be an outlier. The
outlier and leverage diagnostic shows us 3 leverage points (29, 39, and
14) and again 35 as an outlier. Observation 29 was a game against
Chicago Sky on 5.18.24, observation 39 was a game against Connecticut
Sun on 6/15/24, observation 14 was a game against New York Liberty on
8/22/24, and observation 35 was a game against Connecticut Sun on
5/31/24.
#residual plots
ols_plot_resid_fit(model4) #versus fit

ols_plot_resid_hist(model4) #histogram

ols_plot_resid_stud(model4) #studentized residuals

ols_plot_resid_lev(model4, threshold = 3) #outlier and leverage diagnostics

ols_plot_cooksd_chart(model4) #cook's d chart

Prediction
I built this model to predict my team’s points for a game in which
they achieve the median value for each variable. The predicted team
score is 83.908595, with 95% confidence interval (81.5603447,
86.2568453).
LS0tCnRpdGxlOiAiQXNzaWdubWVudCA2IFNUQTMxOSBTcHJpbmcgMjAyNiIKYXV0aG9yOiAiR2FsZWUgR3JlaXNsZXIiCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogeWVzCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMKICAgIHRoZW1lOiBsdW1lbgogIHBkZl9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgZmlnX3dpZHRoOiAzCiAgICBmaWdfaGVpZ2h0OiAzCiAgd29yZF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBrZWVwX21kOiB5ZXMKZWRpdG9yX29wdGlvbnM6IAogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUKLS0tCgpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9CiNUT0M6OmJlZm9yZSB7CiAgY29udGVudDogIlRhYmxlIG9mIENvbnRlbnRzIjsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LXNpemU6IDEuMmVtOwogIGRpc3BsYXk6IGJsb2NrOwogIGNvbG9yOiBuYXZ5OwogIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCgpkaXYjVE9DIGxpIHsgICAgIC8qIHRhYmxlIG9mIGNvbnRlbnQgICovCiAgICBsaXN0LXN0eWxlOnVwcGVyLXJvbWFuOwogICAgYmFja2dyb3VuZC1pbWFnZTpub25lOwogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm9uZTsKICAgIGJhY2tncm91bmQtcG9zaXRpb246MDsKfQoKaDEudGl0bGUgeyAgICAvKiBsZXZlbCAxIGhlYWRlciBvZiB0aXRsZSAgKi8KICBmb250LXNpemU6IDIycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgY29sb3I6IERhcmtSZWQ7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsKfQoKaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICBmb250LXNpemU6IDE1cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsKICBjb2xvcjogbmF2eTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMThweDsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDEgeyAvKiBIZWFkZXIgMSAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAyMHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBkYXJrcmVkOwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIuIjsKCmJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9CgouaGlnaGxpZ2h0bWUgeyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgfQoKcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0KCn0KYGBgCgoKYGBgIHtyIHNldHVwLCBpbmNsdWRlPUZ9CiBzZXR3ZCgifi9EZXNrdG9wL0NvbGxlZ2UvU1RBMzE5IikKCmRhdGE9cmVhZC5jc3YoIldOQkFfMjAyNV9ib3gtc2NvcmVzLmNzdiIsIGhlYWRlcj1UKQoKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGRwbHlyKQojdmlmIGZ1bmN0aW9uIGluIHRoZSBjYXIgcGFja2FnZQpsaWJyYXJ5KGNhcikKbGlicmFyeShvbHNycikKI2thYmxlZXh0cmEgZm9yIG5pY2UgbWFya2Rvd24gdGFibGVzCmxpYnJhcnkoa2FibGVFeHRyYSkKCmBgYAoKCmBgYHtyIHdyYW5nbGluZywgaW5jbHVkZT1GfQpzdW1tYXJ5KGRhdGEpCmxpYnJhcnkoZHBseXIpCgojZmlsdGVyaW5nIG91dCBleHRyYW5lb3VzIG9ic2VydmF0aW9ucywgYWxsIFdOQkEgdGVhbXMgaW5jbHVkZWQsIHJlbW92ZSBzY29yZXMgZnJvbSBBTEwgc3RhcnQgZ2FtZQpkYXRhID0gZGF0YSAlPiUKICBmaWx0ZXIodGVhbV9uYW1lICE9ICJUZWFtIFdOQkEiICYgdGVhbV9uYW1lICE9ICJUZWFtIFVTQSIpCgojZ3JvdXAgZGF0YSBieSB0ZWFtLCBmaW5kIE0gYW5kIFNEIG9mIGFsbCB2YXJpYWJsZXMKc3VtbWFyeSA9IGRhdGEgJT4lCiAgZ3JvdXBfYnkodGVhbV9uYW1lKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZT1tZWFuKHRlYW1fc2NvcmUpLCBzZF9zY29yZT1zZCh0ZWFtX3Njb3JlKSwKICAgICAgICAgICAgbWVhbl9yZWJvdW5kcz1tZWFuKHRvdGFsX3JlYm91bmRzKSwgc2RfcmVib3VuZHM9c2QodG90YWxfcmVib3VuZHMpLAogICAgICAgICAgICBtZWFuX2ZpZWxkX2dvYWxfcGN0PW1lYW4oZmllbGRfZ29hbF9wY3QpLAogICAgICAgICAgICBzZF9maWVsZF9nb2FsX3BjdD1zZChmaWVsZF9nb2FsX3BjdCksCiAgICAgICAgICAgIG1lYW5fM1BGR3Blcj1tZWFuKHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KSwKICAgICAgICAgICAgc2RfM1BGR3Blcj1zZCh0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCksCiAgICAgICAgICAgIG1lYW5fc3RlYWxzPW1lYW4oc3RlYWxzKSwgc2Rfc3RlYWxzPXNkKHN0ZWFscykKICAgICAgICAgICAgKQoKI3NlbGVjdGluZyB2YXJpYWJsZXMgd2UgbmVlZCBhbmQgZmlsdGVyIG15IHRlYW0sIHdpbmdzIGRpZCBOT1QgbWFrZSB0aGUgcGxheW9mZnMsIGIgYW5kIHNvbWUgb2YgZApteV90ZWFtID0gZGF0YSAlPiUgCiAgc2VsZWN0KHRlYW1fc2NvcmUsIGZpZWxkX2dvYWxfcGN0LCB0b3RhbF9yZWJvdW5kcywgCiAgICAgICAgIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0LCBzdGVhbHMsIHRlYW1fbmFtZSwgdGVhbV93aW5uZXIpICU+JSAKICBmaWx0ZXIodGVhbV9uYW1lID09ICJXaW5ncyIpCgojZ3JvdXBzIGNhc2VzIGJ5IHdpbiB2cyBsb3NzCiNzdW1tYXJpemUgYWxsIHZhcmlhYmxlcyB3aXRoIG1lYW4gYW5kIFNECm15X3RlYW1fd2luID0gbXlfdGVhbSAlPiUKICBncm91cF9ieSh0ZWFtX3dpbm5lcikgJT4lCiAgc3VtbWFyaXNlKG1lYW49bWVhbih0ZWFtX3Njb3JlKSwgc2Q9c2QodGVhbV9zY29yZSkpCgojc2VwYXJhdGluZyB3aW5ncyBkYXRhIGJ5IHdpbiBhbmQgbG9zcwpkZl9oaXN0ID0gZGF0YSAlPiUKICBmaWx0ZXIodGVhbV9uYW1lID09ICJXaW5ncyIpJT4lCiAgbXV0YXRlKHJlc3VsdCA9IGNhc2Vfd2hlbih0ZWFtX3dpbm5lcj09VFJVRSB+IldpbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVhbV93aW5uZXI9PUZBTFNFIH4gIkxvc3MiKSkKCiNjcmVhdGluZyBkYXRhZnJhbWUgZm9yIHdpbmdzIHdpbiBhbmQgbG9zcyBkYXRhCmRmX21vZGVsMSA9IGRhdGEgJT4lCiAgZmlsdGVyKHRlYW1fbmFtZSA9PSAiV2luZ3MiKQpgYGAKCiMgSW50cm9kdWN0aW9uClRoaXMgZGF0YSBzZXQgbG9va3MgYXQgdGhlIERhbGxhcyBXaW5ncyBXTkJBIHRlYW0ncyBnYW1lIGRhdGEgZnJvbSB0aGUgMjAyNSB5ZWFyLiBUaGUgdGVhbSBkaWQgbm90IG1ha2UgaXQgdG8gdGhlIHBsYXlvZmZzLiBUaGV5IHdvbiA5IGdhbWVzIGFuZCBsb3N0IDMxLiBCZWxvdyBhcmUgVGFibGVzIDEgYW5kIDIuIFRhYmxlIDEgZGVzY3JpYmVzIHRoZSBvdmVyYWxsIHNlYXNvbiByZXN1bHRzIGZvciBhbGwgdGVhbXMsIHdoaWxlIFRhYmxlIDIgZGVzY3JpYmVzIGEgc3VtbWFyeSBvZiBEYWxsYXMgV2luZ3MncyByZXN1bHRzIGZyb20gdGhlIHNlYXNvbi4gQmFzZWQgb24gdGhlIGRhdGEgZnJvbSB0aGlzIHNlYXNvbiwgd2Ugd2lsbCB0cnkgdG8gcHJlZGljdCB0aGUgcG9pbnQgc2NvcmUgZm9yIGEgIm1lZGlhbiIgZ2FtZSBmb3IgdGhlIERhbGxhcyBXaW5ncy4KCiMgVGFibGVzL1NlYXNvbiBTdW1tYXJ5CgpgYGB7ciB0YWJsZXMsIGluY2x1ZGU9VH0KI2NyZWF0aW5nIHN1bW1hcnkgdGFibGUgZm9yIGVudGlyZSBsZWFndWUKc3VtbWFyeSAlPiUKICBrYmwoY2FwdGlvbiA9ICJ0ZWFtIHNjb3JlIHN1bW1hcnkiLCBkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGKQoKI2NyZWF0aW5nIHN1bW1hcnkgdGFibGUgZm9yIGp1c3Qgd2luZ3MKbXlfdGVhbV93aW4gJT4lCiAga2JsKGNhcHRpb24gPSAiV2luZ3MgV2luIFN1bW1hcnkiLCBkaWdpdHMgPSAyKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGKQoKYGBgCgojIEJveCBQbG90cwpCZWxvdyBhcmUgdHdvIGJveHBsb3RzIGJhc2VkIG9uIHRoZSBwb2ludHMgc2NvcmVkIGJ5IGdhbWUgcmVzdWx0ICh3aW4gb3IgbG9zZSkuIEluIGJvdGggc2NlbmFyaW9zLCB0aGVyZSBpcyBhYm91dCBlcXVhbCB2YXJpYXRpb24sIHRob3VnaCB0aGUgcG9pbnQgcmFuZ2UgYW5kIG1lZGlhbiBmb3Igd2lucyBpcyBoaWdoZXIgdGhhbiBsb3NzZXMuIFRoZWlyIG1pbmltdW0gZ2FtZSBzY29yZSB3YXMgNjcgd2hpbGUgdGhlIGhpZ2hlc3Qgd2FzIDEwOSBmb3IgbG9zaW5nIGdhbWVzLCB3aGlsZSBtaW5pbXVtIHdhcyA4NCBhbmQgbWF4aW11bSB3YXMgMTEzIGZvciB3aW5uaW5nIGdhbWVzLiAKCgpgYGB7ciBncmFwaHMsIGluY2x1ZGU9VCwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9N30KI2kgcmVmdXNlIHRvIGhhdmUgYSA2LTcgam9rZSBpbiBteSBjb2RpbmcuIHlvdSBjYW5ub3QgbWFrZSBtZQpwIDwtIGRhdGEgJT4lCiAgZ2dwbG90KGFlcyh4PXRlYW1fc2NvcmUsIGZpbGwgPSB0ZWFtX3dpbm5lcikpICsKICAgIGdlb21faGlzdG9ncmFtKGNvbG9yID0gIiNlOWVjZWYiLCBhbHBoYT0wLjYsIHBvc2l0aW9uID0gJ2lkZW50aXR5JykgKwogICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoIiMwMDJiNWMiLCAiI2M0ZDYwMCIpKSAKCmJveHBsb3QodGVhbV9zY29yZSB+IHJlc3VsdCwgZGF0YSA9IGRmX2hpc3QsIG5vdGNoID0gRkFMU0UsIAogICAgICAgIGNvbCA9IGMoIiMwMDJiNWMiLCAiI2M0ZDYwMCIpLAogICAgICAgIG1haW4gPSAiUG9pbnRzIHNjb3JlIGJ5IGdhbWUgcmVzdWx0IiwKICAgICAgICB4bGFiID0gIlJlc3VsdCIsIHlsYWIgPSAiUG9pbnRzIikKYGBgCgojIE1vZGVscwoKYGBge3IgRmlyc3QgT3JkZXIgTW9kZWwsIGluY2x1ZGUgPSBGfQoKI2NyZWF0aW5nIG1vZGVsIDEKbW9kZWwxPWxtKHRlYW1fc2NvcmV+ZmllbGRfZ29hbF9wY3QrdG90YWxfcmVib3VuZHMrdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QrCiAgICAgICAgICAgIHN0ZWFscywgZGF0YT1teV90ZWFtKQpzdW1tYXJ5KG1vZGVsMSkKCiNjcmVhdGluZyBjb3JyZWxhdGlvbiBtYXRyaXgKY29yX2RhdGEgPSBteV90ZWFtICU+JQogIHNlbGVjdCh0ZWFtX3Njb3JlLCBmaWVsZF9nb2FsX3BjdCwgdG90YWxfcmVib3VuZHMsIAogICAgICAgICB0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCwgc3RlYWxzKQoKY29yKGNvcl9kYXRhKQoKI2ZpbmRpbmcgdmlmIHZhbHVlcwp2aWYobW9kZWwxKQoKCiNjcmVhdGluZyBtb2RlbCAyLCBzYW1lIGFzIG1vZGVsIDEgZHVlIHRvIG5vIGhpZ2hseSBjb3JyZWxhdGVkIHBhaXJzCm1vZGVsMj1sbSh0ZWFtX3Njb3JlfmZpZWxkX2dvYWxfcGN0K3RvdGFsX3JlYm91bmRzK3RocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0KwogICAgICAgICAgICBzdGVhbHMsIGRhdGE9bXlfdGVhbSkKc3VtbWFyeShtb2RlbDIpCgpgYGAKCgpgYGB7ciBJbnRlcmFjdGlvbiBNb2RlbCwgcmVzdWx0cz0nYXNpcycsIGVjaG89RiwgaW5jbHVkZSA9IEYsIGNvbW1lbnQ9TkF9CiNjcmVhdGluZyBtb2RlbCAzCm1vZGVsMz1sbSh0ZWFtX3Njb3JlfmZpZWxkX2dvYWxfcGN0K3RvdGFsX3JlYm91bmRzK3RocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0ICsgZmllbGRfZ29hbF9wY3QqdG90YWxfcmVib3VuZHMgKyBmaWVsZF9nb2FsX3BjdCp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCt0b3RhbF9yZWJvdW5kcyp0aHJlZV9wb2ludF9maWVsZF9nb2FsX3BjdCwgZGF0YT1teV90ZWFtKQpzdW1tYXJ5KG1vZGVsMykKCiNtb2RlbDMgaGFkIG5vIHNpZ25pZmljYW50IGVmZmVjdHMsIHNvIHRoaXMgaXMgYSByZWR1Y2VkIG1vZGVsIGluY2x1ZGluZyB0aGUgcmVtb3ZhbCBvZiBzdGVhbHMgZHVlIHRvIGl0IG5vdCBiZWluZyBzaWduaWZpY2FudCBldmVuIHdpdGhvdXQgdGhlIGludGVyYWN0aW9uIGVmZmVjdHMKbW9kZWw0PWxtKHRlYW1fc2NvcmV+ZmllbGRfZ29hbF9wY3QrdG90YWxfcmVib3VuZHMrdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QsIGRhdGE9bXlfdGVhbSkKbW9kZWw0c3VtPXN1bW1hcnkobW9kZWw0KQoKCmBgYAoKJH4kCgpBZnRlciBhZnRlciBydW5uaW5nIGFsbCBtb2RlbHMgYW5kIHJlZHVjaW5nIG1vZGVscywgbXkgZmluYWwgbW9kZWwgaXMgdGVhbV9zY29yZT0gYHIgbW9kZWw0JGNvZWZmaWNpZW50c1sxXWAgKyBgciBtb2RlbDQkY29lZmZpY2llbnRzWzJdYCAqIGZpZWxkX2dvYWxfcGN0ICsgYHIgbW9kZWw0JGNvZWZmaWNpZW50c1szXWAgKiB0b3RhbF9yZWJvdW5kcyArIGByIG1vZGVsNCRjb2VmZmljaWVudHNbNF1gICogdGhyZWVfcG9pbnRfZmllbGRfZ29hbF9wY3QuCgpUaGlzIG1vZGVsIHNpZ25pZmljYW50bHkgcHJlZGljdHMgdGVhbSBzY29yZSwgRihgciBtb2RlbDRzdW0kZnN0YXRpc3RpY1syXWAsIGByIG1vZGVsNHN1bSRmc3RhdGlzdGljWzNdYCkgPSBgciBtb2RlbDRzdW0kZnN0YXRpc3RpY1sxXWAsIHA8LjAwMDEsIGByIG1vZGVsNHN1bSRhZGouci5zcXVhcmVkYC4KClNlZSB0YWJsZSBiZWxvdyBmb3IgcmVzdWx0czoKYGBge3IsIGluY2x1ZGU9VCwgZWNobz1GLCByZXN1bHRzPSJhc2lzIiwgbWVzc2FnZT1GfQpsaWJyYXJ5KHN0YXJnYXplcikKc3RhcmdhemVyKG1vZGVsNCwgdHlwZSA9ICJodG1sIikKYGBgCgojIFJlc2lkdWFscwpGb3Igb3VyIHJlc2lkdWFsIGFuYWx5c2lzLCB3ZSB3aWxsIHN0YXJ0IHdpdGggdGhlIHJlc2lkdWFsIHZzIGZpdHRlZCB2YWx1ZXMgcGxvdC4gVGhlcmUgaXMgbm8gZGlzdGluY3Qgc2hhcGUgb3IgcGF0dGVybiB0aGF0IHdvdWxkIGNhdXNlIGNvbmNlcm4gYWJvdXQgZXF1YWwgdmFyaWFuY2VzLiBGb3IgdGhlIGhpc3RvZ3JhbSwgd2Ugc2VlIGEgcmVsYXRpdmVseSBub3JtYWwgc2hhcGUsIG1lYW5pbmcgd2UgY2FuIGFjY2VwdCBvdXIgYXNzdW1wdGlvbiBvZiBub3JtYWxpdHkuIFRoZSBzdHVkZW50aXplZCByZXNpZHVhbHMgcGxvdCByZXZlYWxzIG9ic2VydmF0aW9uIDM1IHRvIGJlIGFuIG91dGxpZXIuIFRoZSBvdXRsaWVyIGFuZCBsZXZlcmFnZSBkaWFnbm9zdGljIHNob3dzIHVzIDMgbGV2ZXJhZ2UgcG9pbnRzICgyOSwgMzksIGFuZCAxNCkgYW5kIGFnYWluIDM1IGFzIGFuIG91dGxpZXIuIE9ic2VydmF0aW9uIDI5IHdhcyBhIGdhbWUgYWdhaW5zdCBDaGljYWdvIFNreSBvbiA1LjE4LjI0LCBvYnNlcnZhdGlvbiAzOSB3YXMgYSBnYW1lIGFnYWluc3QgQ29ubmVjdGljdXQgU3VuIG9uIDYvMTUvMjQsIG9ic2VydmF0aW9uIDE0IHdhcyBhIGdhbWUgYWdhaW5zdCBOZXcgWW9yayBMaWJlcnR5IG9uIDgvMjIvMjQsIGFuZCBvYnNlcnZhdGlvbiAzNSB3YXMgYSBnYW1lIGFnYWluc3QgQ29ubmVjdGljdXQgU3VuIG9uIDUvMzEvMjQuCmBgYHtyIFJlc2lkdWFsc30KI3Jlc2lkdWFsIHBsb3RzIApvbHNfcGxvdF9yZXNpZF9maXQobW9kZWw0KSAjdmVyc3VzIGZpdApvbHNfcGxvdF9yZXNpZF9oaXN0KG1vZGVsNCkgI2hpc3RvZ3JhbQpvbHNfcGxvdF9yZXNpZF9zdHVkKG1vZGVsNCkgI3N0dWRlbnRpemVkIHJlc2lkdWFscwpvbHNfcGxvdF9yZXNpZF9sZXYobW9kZWw0LCB0aHJlc2hvbGQgPSAzKSAjb3V0bGllciBhbmQgbGV2ZXJhZ2UgZGlhZ25vc3RpY3MKb2xzX3Bsb3RfY29va3NkX2NoYXJ0KG1vZGVsNCkgI2Nvb2sncyBkIGNoYXJ0CmBgYAoKIyBQcmVkaWN0aW9uCgpgYGB7ciBQcmVkaWN0aW9uLCBpbmNsdWRlID0gRn0KI2ZvciBmaW5kaW5nIG1lZGlhbiB2YWx1ZXMKc3VtbWFyeShjb3JfZGF0YSkKCiNuZXcgZGF0YSBmcmFtZSBmb3IgdGhlIG1lZGlhbiBnYW1lCm5ld2RhdGE9ZGF0YS5mcmFtZShmaWVsZF9nb2FsX3BjdD00NC40MCwgdG90YWxfcmVib3VuZHM9MzQuMDAsIHRocmVlX3BvaW50X2ZpZWxkX2dvYWxfcGN0PTMzLjMwLCBzdGVhbHM9Ni41MCkKCiNwcmVkaWN0aW5nIG1lZGlhbiBnYW1lCnByZWRpY3Rpb24gPSBwcmVkaWN0KG1vZGVsNCwgbmV3ZGF0YSwgaW50ZXJ2YWwgPSAiY29uZmlkZW5jZSIsIGxldmVsPS45NSkKYGBgCkkgYnVpbHQgdGhpcyBtb2RlbCB0byBwcmVkaWN0IG15IHRlYW0ncyBwb2ludHMgZm9yIGEgZ2FtZSBpbiB3aGljaCB0aGV5IGFjaGlldmUgdGhlIG1lZGlhbiB2YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gVGhlIHByZWRpY3RlZCB0ZWFtIHNjb3JlIGlzIGByIHByZWRpY3Rpb25bMV1gLCB3aXRoIDk1JSBjb25maWRlbmNlIGludGVydmFsIChgciBwcmVkaWN0aW9uWzJdYCwgYHIgcHJlZGljdGlvblszXWApLgoKICAgICA=