Introduction
This data set is on the NBA game betting odds and outcomes of the
2014-2015 Season. There is 1230 observations and 17 variables. The
variables in this data set are
- Datenum (categorical)- This is the amount of days since January 1,
1960
- Team (categorical)- Where the home team is from
- Dateslash (numerical)- MM/DD/YYYY
- OppTeam (categorical)- Where the away team is from
- Home (binary reponse)- If the “Team” is the home team (always
is)
- TeamPts (numerical)- Home team points scored
- OppPts (numerical)- Away team points scored
- OT (binary reponse)- If the game went to OT (1 means OT happened, 0
means OT didn’t happen)
- Wins (binary response)- If the home team won (1 means they won, 0
means they lost)
- TeamCov (binary response) - If the home team covered the spread (1
means they covered, 0 means a “push”, and -1 means they didn’t
cover)
- TeamSprd (numerical)- The Vegas point spread for the home team
- OvrUndr (numerical)- The over/under Vegas line for the total points
in the game
- OUCov (binary response)- If the game went over or under the Vegas
line (1 means it went over, 0 means it was exactly the line, and -1
means it went under)
- Team_id (numerical)- Numeric ID for Home Team
- OppTeam_id (numerical)- Numeric ID for Away Team
- TeamDiff (numerical)- Home Points minus Away Points
- TotalPts (numerical)- Home Points plus Away Points
Research
Question
The objective of this assignment is to identify the variables that
contribute to winning.
Exploratory
Analysis
We will make scatter plots to see if there is issues with any
predictor variables.

Looking at the scatter plots we can see that none look skewed and are
all unimodal besides our binary response variable which is team wins.
This means that we do not need to transform any of our predictor
variables.
Building the Multiple
Logistic Regression Model
Now we need to build a full model and a reduced model.
Summary of the Full Model
| (Intercept) |
4.8375261 |
33488.0687 |
0.0001445 |
0.9998847 |
| TeamPts |
19.2652779 |
1401.6006 |
0.0137452 |
0.9890333 |
| OppPts |
-19.2864565 |
1403.1298 |
-0.0137453 |
0.9890332 |
| TeamSprd |
-0.0296616 |
248.3366 |
-0.0001194 |
0.9999047 |
| OvrUndr |
-0.0135866 |
189.7476 |
-0.0000716 |
0.9999429 |
Summary of the Reduced Model
| (Intercept) |
2.565926 |
11547.884 |
0.0002222 |
0.9998227 |
| TeamPts |
19.281176 |
1399.149 |
0.0137806 |
0.9890050 |
| OppPts |
-19.305376 |
1401.370 |
-0.0137761 |
0.9890086 |
Now we will look at automatic variable selection.
Summary of the Final Model
| (Intercept) |
2.565926 |
11547.884 |
0.0002222 |
0.9998227 |
| TeamPts |
19.281176 |
1399.149 |
0.0137806 |
0.9890050 |
| OppPts |
-19.305376 |
1401.370 |
-0.0137761 |
0.9890086 |
Next we will do a global goodness-of-fit test
Comparison of Global Goodness-of-Fit statistics
| full.model |
4e-07 |
1677.513 |
10 |
| reduced.model |
4e-07 |
1677.513 |
6 |
| final.model |
4e-07 |
1677.513 |
6 |
Final Model
In the exploratory analysis, we looked at all the models and looked
at what variables we needed to take out. We took out TeamSprd and
OvrUndr because they had so significance in winning games.
We will also do the odds ratio for the final model.
Summary Stats of Final Model with Odds Ratios
| (Intercept) |
2.565926 |
11547.884 |
0.0002222 |
0.9998227 |
1.301271e+01 |
| TeamPts |
19.281176 |
1399.149 |
0.0137806 |
0.9890050 |
2.364330e+08 |
| OppPts |
-19.305376 |
1401.370 |
-0.0137761 |
0.9890086 |
0.000000e+00 |
Looking at the odds ratio we can see that the odds of winning
increases when your team scores 19.28 more points than average or when
the other team scores 19.3 less than average. On the other hand, due to
the p-values being so high in this model, the predictor variables are
not significant.
Conclusion
This study focused on the association analysis between a set of
variables that possibly correlate to winning. The initial data set has
17 numerical and categorical variables. We only used 4 for this
assignment due to the other variables being insignificant, categorical,
binary response that we were not using, or is a variable that is a
combination of two others.
After looking over the full model we decided to get rid of TeamSprd
and OvrUndr.
After automatic variable selection, we obtain the final model with 2
factors, TeamPts and OppPts.
LS0tCnRpdGxlOiAiV2VlayA3IEhXIFNUQSAzMjEiCmF1dGhvcjogIlJ5YW4gTGVibyIKZGF0ZTogIjIwMjQtMTAtMjMiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogeWVzCiAgICBmaWdfd2lkdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2NfY29sbGFwc2VkOiB5ZXMKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogeWVzCiAgICBzbW9vdGhfc2Nyb2xsOiB5ZXMKICAgIHRoZW1lOiBsdW1lbgogIHdvcmRfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBrZWVwX21kOiB5ZXMKICBwZGZfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgZmlnX3dpZHRoOiAzCiAgICBmaWdfaGVpZ2h0OiAzCmVkaXRvcl9vcHRpb25zOgogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUKc2x3YXlzX2FsbG93X2h0bWw6IHRydWUKLS0tCgpgYGB7PWh0bWx9Cgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKLyogQ2FzY2FkaW5nIFN0eWxlIFNoZWV0cyAoQ1NTKSBpcyBhIHN0eWxlc2hlZXQgbGFuZ3VhZ2UgdXNlZCB0byBkZXNjcmliZSB0aGUgcHJlc2VudGF0aW9uIG9mIGEgZG9jdW1lbnQgd3JpdHRlbiBpbiBIVE1MIG9yIFhNTC4gaXQgaXMgYSBzaW1wbGUgbWVjaGFuaXNtIGZvciBhZGRpbmcgc3R5bGUgKGUuZy4sIGZvbnRzLCBjb2xvcnMsIHNwYWNpbmcpIHRvIFdlYiBkb2N1bWVudHMuICovCgpoMS50aXRsZSB7ICAvKiBUaXRsZSAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgb2YgdGhlIHJlcG9ydCB0aXRsZSAqLwogIGZvbnQtc2l6ZTogMjRweDsKICBjb2xvcjogRGFya1JlZDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOwp9Cmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gZm9udCBzcGVjaWZpY2F0aW9ucyBmb3IgYXV0aG9ycyAgKi8KICBmb250LXNpemU6IDIwcHg7CiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsKICBjb2xvcjogRGFya1JlZDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gZm9udCBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIGRhdGUgICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMSB7IC8qIEhlYWRlciAxIC0gZm9udCBzcGVjaWZpY2F0aW9ucyBmb3IgbGV2ZWwgMSBzZWN0aW9uIHRpdGxlICAqLwogICAgZm9udC1zaXplOiAyMnB4OwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMiB7IC8qIEhlYWRlciAyIC0gZm9udCBzcGVjaWZpY2F0aW9ucyBmb3IgbGV2ZWwgMiBzZWN0aW9uIHRpdGxlICovCiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDMgeyAvKiBIZWFkZXIgMyAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgb2YgbGV2ZWwgMyBzZWN0aW9uIHRpdGxlICAqLwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmg0IHsgLyogSGVhZGVyIDQgLSBmb250IHNwZWNpZmljYXRpb25zIG9mIGxldmVsIDQgc2VjdGlvbiB0aXRsZSAgKi8KICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IGRhcmtyZWQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9Cgpib2R5IHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQoKLmhpZ2hsaWdodG1lIHsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3c7IH0KCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9Cgo8L3N0eWxlPgpgYGAKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgRGV0ZWN0LCBpbnN0YWxsLCBhbmQgbG9hZCBwYWNrYWdlcyBpZiBuZWVkZWQuCmlmICghcmVxdWlyZSgia25pdHIiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpCiAgIGxpYnJhcnkoa25pdHIpCn0KaWYgKCFyZXF1aXJlKCJsZWFmbGV0IikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZmxldCIpCiAgIGxpYnJhcnkobGVhZmxldCkKfQppZiAoIXJlcXVpcmUoIkVudlN0YXRzIikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygiRW52U3RhdHMiKQogICBsaWJyYXJ5KEVudlN0YXRzKQp9CmlmICghcmVxdWlyZSgiTUFTUyIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoIk1BU1MiKQogICBsaWJyYXJ5KE1BU1MpCn0KaWYgKCFyZXF1aXJlKCJwaHl0b29scyIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoInBoeXRvb2xzIikKICAgbGlicmFyeShwaHl0b29scykKfQppZiAoIXJlcXVpcmUoIm1sYmVuY2giKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJtbGJlbmNoIikKICAgbGlicmFyeShtbGJlbmNoKQp9CmlmICghcmVxdWlyZSgicGFuZGVyIikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygicGFuZGVyIikKICAgbGlicmFyeShwYW5kZXIpCn0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQojCiMgU3BlY2lmaWNhdGlvbnMgb2Ygb3V0cHV0cyBvZiBjb2RlIGluIGNvZGUgY2h1bmtzCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsICAjIGluY2x1ZGUgY29kZSBjaHVuayBpbiB0aGUgb3V0cHV0IGZpbGUKICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgICMgU29tZXRpbWVzLCB5b3VyIGNvZGUgbWF5IHByb2R1Y2UgYSB3YXJuaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1lc3NhZ2VzLCB5b3UgY2FuIGNob29zZSB0byBpbmNsdWRlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3YXJuaW5nIG1lc3NhZ2VzIGluIHRoZSBvdXRwdXQgZmlsZS4gCiAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsICAKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgICMgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBvdXRwdXQgaW4gdGhlIG91dHB1dCBmaWxlLgogICAgICAgICAgICAgICAgICAgY29tbWVudCA9IEZBTFNFICAgIyBTdXBwcmVzcyBoYXNoLXRhZ3MgaW4gdGhlIG91dHB1dCByZXN1bHRzLgogICAgICAgICAgICAgICAgICAgICAgKSAgIApgYGAKCgpgYGB7cn0KYmV0cyA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1J5YW5MZWJvL1NUQS0zMjEvcmVmcy9oZWFkcy9tYWluL1Byb2plY3QlMjAyJTIwRGF0YSIsIGhlYWRlciA9IFRSVUUpCndpbnM8LSBiZXRzJFRlYW1XaW4KbmV3X2RhdGEgPC0gYmV0cyAlPiUKICBzZWxlY3QoLU9ULCAtVGVhbSwgLU9wcFRlYW0sIC1EYXRlbnVtLCAtRGF0ZXNsYXNoLCAtSG9tZSwgLVRlYW1Db3YsIC1PVUNvdiwgLVRlYW1faWQsIC1PcHBUZWFtX2lkKQpgYGAKCiMjIEludHJvZHVjdGlvbgoKVGhpcyBkYXRhIHNldCBpcyBvbiB0aGUgTkJBIGdhbWUgYmV0dGluZyBvZGRzIGFuZCBvdXRjb21lcyBvZiB0aGUgMjAxNC0yMDE1IFNlYXNvbi4gVGhlcmUgaXMgMTIzMCBvYnNlcnZhdGlvbnMgYW5kIDE3IHZhcmlhYmxlcy4gVGhlIHZhcmlhYmxlcyBpbiB0aGlzIGRhdGEgc2V0IGFyZSAKCiogRGF0ZW51bSAoY2F0ZWdvcmljYWwpLSBUaGlzIGlzIHRoZSBhbW91bnQgb2YgZGF5cyBzaW5jZSBKYW51YXJ5IDEsIDE5NjAKKiBUZWFtIChjYXRlZ29yaWNhbCktIFdoZXJlIHRoZSBob21lIHRlYW0gaXMgZnJvbQoqIERhdGVzbGFzaCAobnVtZXJpY2FsKS0gTU0vREQvWVlZWQoqIE9wcFRlYW0gKGNhdGVnb3JpY2FsKS0gV2hlcmUgdGhlIGF3YXkgdGVhbSBpcyBmcm9tCiogSG9tZSAoYmluYXJ5IHJlcG9uc2UpLSBJZiB0aGUgIlRlYW0iIGlzIHRoZSBob21lIHRlYW0gKGFsd2F5cyBpcykKKiBUZWFtUHRzIChudW1lcmljYWwpLSBIb21lIHRlYW0gcG9pbnRzIHNjb3JlZAoqIE9wcFB0cyAobnVtZXJpY2FsKS0gQXdheSB0ZWFtIHBvaW50cyBzY29yZWQKKiBPVCAoYmluYXJ5IHJlcG9uc2UpLSBJZiB0aGUgZ2FtZSB3ZW50IHRvIE9UICgxIG1lYW5zIE9UIGhhcHBlbmVkLCAwIG1lYW5zIE9UIGRpZG4ndCBoYXBwZW4pCiogV2lucyAoYmluYXJ5IHJlc3BvbnNlKS0gSWYgdGhlIGhvbWUgdGVhbSB3b24gKDEgbWVhbnMgdGhleSB3b24sIDAgbWVhbnMgdGhleSBsb3N0KQoqIFRlYW1Db3YgKGJpbmFyeSByZXNwb25zZSkgLSBJZiB0aGUgaG9tZSB0ZWFtIGNvdmVyZWQgdGhlIHNwcmVhZCAoMSBtZWFucyB0aGV5IGNvdmVyZWQsIDAgbWVhbnMgYSAicHVzaCIsIGFuZCAtMSBtZWFucyB0aGV5IGRpZG4ndCBjb3ZlcikKKiBUZWFtU3ByZCAobnVtZXJpY2FsKS0gVGhlIFZlZ2FzIHBvaW50IHNwcmVhZCBmb3IgdGhlIGhvbWUgdGVhbQoqIE92clVuZHIgKG51bWVyaWNhbCktIFRoZSBvdmVyL3VuZGVyIFZlZ2FzIGxpbmUgZm9yIHRoZSB0b3RhbCBwb2ludHMgaW4gdGhlIGdhbWUKKiBPVUNvdiAoYmluYXJ5IHJlc3BvbnNlKS0gSWYgdGhlIGdhbWUgd2VudCBvdmVyIG9yIHVuZGVyIHRoZSBWZWdhcyBsaW5lICgxIG1lYW5zIGl0IHdlbnQgb3ZlciwgMCBtZWFucyBpdCB3YXMgZXhhY3RseSB0aGUgbGluZSwgYW5kIC0xIG1lYW5zIGl0IHdlbnQgdW5kZXIpCiogVGVhbV9pZCAobnVtZXJpY2FsKS0gTnVtZXJpYyBJRCBmb3IgSG9tZSBUZWFtCiogT3BwVGVhbV9pZCAobnVtZXJpY2FsKS0gTnVtZXJpYyBJRCBmb3IgQXdheSBUZWFtCiogVGVhbURpZmYgKG51bWVyaWNhbCktIEhvbWUgUG9pbnRzIG1pbnVzIEF3YXkgUG9pbnRzCiogVG90YWxQdHMgKG51bWVyaWNhbCktIEhvbWUgUG9pbnRzIHBsdXMgQXdheSBQb2ludHMKCgojIyBSZXNlYXJjaCBRdWVzdGlvbgoKVGhlIG9iamVjdGl2ZSBvZiB0aGlzIGFzc2lnbm1lbnQgaXMgdG8gaWRlbnRpZnkgdGhlIHZhcmlhYmxlcyB0aGF0IGNvbnRyaWJ1dGUgdG8gd2lubmluZy4gCgojIyBFeHBsb3JhdG9yeSBBbmFseXNpcwoKV2Ugd2lsbCBtYWtlIHNjYXR0ZXIgcGxvdHMgdG8gc2VlIGlmIHRoZXJlIGlzIGlzc3VlcyB3aXRoIGFueSBwcmVkaWN0b3IgdmFyaWFibGVzLgoKYGBge3IgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcud2lkdGg9NywgZmlnLmhlaWdodD03fQpsaWJyYXJ5KHBzeWNoKQpwYWlycy5wYW5lbHMobmV3X2RhdGFbLC05XSwgCiAgICAgICAgICAgICBtZXRob2QgPSAicGVhcnNvbiIsIAogICAgICAgICAgICAgaGlzdC5jb2wgPSAiIzAwQUZCQiIsCiAgICAgICAgICAgICBkZW5zaXR5ID0gVFJVRSwgIAogICAgICAgICAgICAgZWxsaXBzZXMgPSBUUlVFIAogICAgICAgICAgICAgKQpgYGAKCkxvb2tpbmcgYXQgdGhlIHNjYXR0ZXIgcGxvdHMgd2UgY2FuIHNlZSB0aGF0IG5vbmUgbG9vayBza2V3ZWQgYW5kIGFyZSBhbGwgdW5pbW9kYWwgYmVzaWRlcyBvdXIgYmluYXJ5IHJlc3BvbnNlIHZhcmlhYmxlIHdoaWNoIGlzIHRlYW0gd2lucy4gVGhpcyBtZWFucyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHRyYW5zZm9ybSBhbnkgb2Ygb3VyIHByZWRpY3RvciB2YXJpYWJsZXMuIAoKIyMgQnVpbGRpbmcgdGhlIE11bHRpcGxlIExvZ2lzdGljIFJlZ3Jlc3Npb24gTW9kZWwKCgpOb3cgd2UgbmVlZCB0byBidWlsZCBhIGZ1bGwgbW9kZWwgYW5kIGEgcmVkdWNlZCBtb2RlbC4KCmBgYHtyfQoKZnVsbC5tb2RlbCA9IGdsbSh3aW5zIH5UZWFtUHRzK09wcFB0cytUZWFtU3ByZCtPdnJVbmRyLCAKICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSwgCiAgICAgICAgICBkYXRhID0gIGJldHMpICAKa2FibGUoc3VtbWFyeShmdWxsLm1vZGVsKSRjb2VmLCAKICAgICAgY2FwdGlvbj0iU3VtbWFyeSBvZiB0aGUgRnVsbCBNb2RlbCIpCmBgYAoKCgoKYGBge3J9CnJlZHVjZWQubW9kZWwgPSBnbG0od2lucyB+IFRlYW1QdHMrT3BwUHRzLCAKICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSwgCiAgICAgICAgICBkYXRhID0gYmV0cykgCmthYmxlKHN1bW1hcnkocmVkdWNlZC5tb2RlbCkkY29lZiwgCiAgICAgIGNhcHRpb249IlN1bW1hcnkgb2YgdGhlIFJlZHVjZWQgTW9kZWwiKQpgYGAKCgoKCk5vdyB3ZSB3aWxsIGxvb2sgYXQgYXV0b21hdGljIHZhcmlhYmxlIHNlbGVjdGlvbi4gCgpgYGB7cn0KbGlicmFyeShNQVNTKQpmaW5hbC5tb2RlbC5mb3J3YXJkID0gc3RlcEFJQyhyZWR1Y2VkLm1vZGVsLCAKICAgICAgICAgICAgICAgICAgICAgIHNjb3BlID0gbGlzdChsb3dlcj1mb3JtdWxhKHJlZHVjZWQubW9kZWwpLHVwcGVyPWZvcm11bGEoZnVsbC5tb2RlbCkpLAogICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImZvcndhcmQiLCAgCiAgICAgICAgICAgICAgICAgICAgICB0cmFjZSA9IDAgICAKICAgICAgICAgICAgICAgICAgICAgICkKa2FibGUoc3VtbWFyeShmaW5hbC5tb2RlbC5mb3J3YXJkKSRjb2VmLCAKICAgICAgY2FwdGlvbj0iU3VtbWFyeSBvZiB0aGUgRmluYWwgTW9kZWwiKQpgYGAKCgoKTmV4dCB3ZSB3aWxsIGRvIGEgZ2xvYmFsIGdvb2RuZXNzLW9mLWZpdCB0ZXN0CgpgYGB7cn0KCmdsb2JhbC5tZWFzdXJlPWZ1bmN0aW9uKHMubG9naXQpewpkZXYucmVzaWQgPSBzLmxvZ2l0JGRldmlhbmNlCmRldi4wLnJlc2lkID0gcy5sb2dpdCRudWxsLmRldmlhbmNlCmFpYyA9IHMubG9naXQkYWljCmdvb2RuZXNzID0gY2JpbmQoRGV2aWFuY2UucmVzaWR1YWwgPWRldi5yZXNpZCwgTnVsbC5EZXZpYW5jZS5SZXNpZHVhbCA9IGRldi4wLnJlc2lkLAogICAgICBBSUMgPSBhaWMpCmdvb2RuZXNzCn0KZ29vZG5lc3M9cmJpbmQoZnVsbC5tb2RlbCA9IGdsb2JhbC5tZWFzdXJlKGZ1bGwubW9kZWwpLAogICAgICByZWR1Y2VkLm1vZGVsPWdsb2JhbC5tZWFzdXJlKHJlZHVjZWQubW9kZWwpLAogICAgICBmaW5hbC5tb2RlbD1nbG9iYWwubWVhc3VyZShmaW5hbC5tb2RlbC5mb3J3YXJkKSkKcm93Lm5hbWVzKGdvb2RuZXNzKSA9IGMoImZ1bGwubW9kZWwiLCAicmVkdWNlZC5tb2RlbCIsICJmaW5hbC5tb2RlbCIpCmthYmxlKGdvb2RuZXNzLCBjYXB0aW9uID0iQ29tcGFyaXNvbiBvZiBHbG9iYWwgR29vZG5lc3Mtb2YtRml0IHN0YXRpc3RpY3MiKQpgYGAKCgojIyBGaW5hbCBNb2RlbAoKSW4gdGhlIGV4cGxvcmF0b3J5IGFuYWx5c2lzLCB3ZSBsb29rZWQgYXQgYWxsIHRoZSBtb2RlbHMgYW5kIGxvb2tlZCBhdCB3aGF0IHZhcmlhYmxlcyB3ZSBuZWVkZWQgdG8gdGFrZSBvdXQuIFdlIHRvb2sgb3V0IFRlYW1TcHJkIGFuZCBPdnJVbmRyIGJlY2F1c2UgdGhleSBoYWQgc28gc2lnbmlmaWNhbmNlIGluIHdpbm5pbmcgZ2FtZXMuCgpXZSB3aWxsIGFsc28gZG8gdGhlIG9kZHMgcmF0aW8gZm9yIHRoZSBmaW5hbCBtb2RlbC4KCmBgYHtyfQptb2RlbC5jb2VmLnN0YXRzID0gc3VtbWFyeShmaW5hbC5tb2RlbC5mb3J3YXJkKSRjb2VmCm9kZHNfcmF0aW8gPSBleHAoY29lZihmaW5hbC5tb2RlbC5mb3J3YXJkKSkKb3V0X3N0YXRzID0gY2JpbmQobW9kZWwuY29lZi5zdGF0cywgb2Rkc19yYXRpbyA9IG9kZHNfcmF0aW8pICAgICAgICAgICAgICAgICAKa2FibGUob3V0X3N0YXRzLGNhcHRpb24gPSAiU3VtbWFyeSBTdGF0cyBvZiBGaW5hbCBNb2RlbCB3aXRoIE9kZHMgUmF0aW9zIikKYGBgCgpMb29raW5nIGF0IHRoZSBvZGRzIHJhdGlvIHdlIGNhbiBzZWUgdGhhdCB0aGUgb2RkcyBvZiB3aW5uaW5nIGluY3JlYXNlcyB3aGVuIHlvdXIgdGVhbSBzY29yZXMgMTkuMjggbW9yZSBwb2ludHMgdGhhbiBhdmVyYWdlIG9yIHdoZW4gdGhlIG90aGVyIHRlYW0gc2NvcmVzIDE5LjMgbGVzcyB0aGFuIGF2ZXJhZ2UuIE9uIHRoZSBvdGhlciBoYW5kLCBkdWUgdG8gdGhlIHAtdmFsdWVzIGJlaW5nIHNvIGhpZ2ggaW4gdGhpcyBtb2RlbCwgdGhlIHByZWRpY3RvciB2YXJpYWJsZXMgYXJlIG5vdCBzaWduaWZpY2FudC4KCiMjIENvbmNsdXNpb24KClRoaXMgc3R1ZHkgZm9jdXNlZCBvbiB0aGUgYXNzb2NpYXRpb24gYW5hbHlzaXMgYmV0d2VlbiBhIHNldCBvZiB2YXJpYWJsZXMgdGhhdCBwb3NzaWJseSBjb3JyZWxhdGUgdG8gd2lubmluZy4gVGhlIGluaXRpYWwgZGF0YSBzZXQgaGFzIDE3IG51bWVyaWNhbCBhbmQgY2F0ZWdvcmljYWwgdmFyaWFibGVzLiBXZSBvbmx5IHVzZWQgNCBmb3IgdGhpcyBhc3NpZ25tZW50IGR1ZSB0byB0aGUgb3RoZXIgdmFyaWFibGVzIGJlaW5nIGluc2lnbmlmaWNhbnQsIGNhdGVnb3JpY2FsLCBiaW5hcnkgcmVzcG9uc2UgdGhhdCB3ZSB3ZXJlIG5vdCB1c2luZywgb3IgaXMgYSB2YXJpYWJsZSB0aGF0IGlzIGEgY29tYmluYXRpb24gb2YgdHdvIG90aGVycy4KCkFmdGVyIGxvb2tpbmcgb3ZlciB0aGUgZnVsbCBtb2RlbCB3ZSBkZWNpZGVkIHRvIGdldCByaWQgb2YgVGVhbVNwcmQgYW5kIE92clVuZHIuCgpBZnRlciBhdXRvbWF0aWMgdmFyaWFibGUgc2VsZWN0aW9uLCB3ZSBvYnRhaW4gdGhlIGZpbmFsIG1vZGVsIHdpdGggMiBmYWN0b3JzLCBUZWFtUHRzIGFuZCBPcHBQdHMuCgoKCgoKCgoKCgo=