0.1 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

0.2 Research Question

The objective of this assignment is to identify the variables that contribute to winning.

0.3 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.

0.4 Building the Multiple Logistic Regression Model

Now we need to build a full model and a reduced model.

Summary of the Full Model
Estimate Std. Error z value Pr(>|z|)
(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
Estimate Std. Error z value Pr(>|z|)
(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
Estimate Std. Error z value Pr(>|z|)
(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
Deviance.residual Null.Deviance.Residual AIC
full.model 4e-07 1677.513 10
reduced.model 4e-07 1677.513 6
final.model 4e-07 1677.513 6

0.5 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
Estimate Std. Error z value Pr(>|z|) odds_ratio
(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.

0.6 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=