-
Notifications
You must be signed in to change notification settings - Fork 0
/
RedBP.vex
1 lines (1 loc) · 20 KB
/
RedBP.vex
1
./___ThIsisATemPoRaRyFiLE___.json 000666 000000 000000 0000044205 13462437566 017224 0 ustar 00 000000 000000 13462437566 13462437566 {"title":"RedBP","description":"Use this template for all competition code.","version":"0.0.1","icon":"USER000x.bmp","competition":true,"files":{"robot-config.h":"dXNpbmcgbmFtZXNwYWNlIHZleDsKdmV4OjpicmFpbiBCcmFpbjsKdmV4Ojptb3RvciBMZWZ0QmFja0RyaXZlICh2ZXg6OlBPUlQxLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsZmFsc2UpOwp2ZXg6Om1vdG9yIExlZnRGcm9udERyaXZlICh2ZXg6OlBPUlQyLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsdHJ1ZSk7CnZleDo6bW90b3IgRmx5ICh2ZXg6OlBPUlQzLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsZmFsc2UpOwp2ZXg6Om1vdG9yIEludGFrZSAodmV4OjpQT1JUNSwgdmV4OjpnZWFyU2V0dGluZzo6cmF0aW8xOF8xLGZhbHNlKTsKdmV4Ojptb3RvciBGZWVkZXIgKHZleDo6UE9SVDYsIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSxmYWxzZSk7CnZleDo6bW90b3IgUmlnaHRGcm9udERyaXZlICh2ZXg6OlBPUlQ3LCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsZmFsc2UpOwp2ZXg6Om1vdG9yIFJpZ2h0QmFja0RyaXZlICh2ZXg6OlBPUlQ4LCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsdHJ1ZSk7CnZleDo6bW90b3IgU2VjcmV0V2VhcG9uICh2ZXg6OlBPUlQ5LCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsdHJ1ZSk7CnZleDo6Y29udHJvbGxlciBDb250cm9sbGVyMTsKdmV4Ojpjb21wZXRpdGlvbiBDb21wZXRpdGlvbjs=","main.cpp":"LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWVyYWxkIExpdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICBSYW5uZXkgU2Nob29sICAtICAzODE1TSAgLSAgU3BpdGZpcmUgKEJsaXR6IEFsbGlhbmNlKSAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgojaW5jbHVkZSA8cm9ib3QtY29uZmlnLmg+CnVzaW5nIG5hbWVzcGFjZSB2ZXg7CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmV4OjpsaW5lIGxpbmUxKEJyYWluLlRocmVlV2lyZVBvcnQuQSk7CnZleDo6bGluZSBsaW5lMihCcmFpbi5UaHJlZVdpcmVQb3J0LkIpOwoKCnZvaWQgcHJlX2F1dG9uKCB2b2lkICkgeyAgCiAgICAKfQoKCnZvaWQgZm9yd2FyZChpbnQgeCxpbnQgdil7CiAgICBSaWdodEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoeCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoeCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoeCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcih4LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7Cn0Kdm9pZCBiYWNrd2FyZChpbnQgeCxpbnQgdil7CiAgICBSaWdodEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoLXgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIFJpZ2h0QmFja0RyaXZlLnN0YXJ0Um90YXRlRm9yKC14LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcigteCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcigteCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwp9CnZvaWQgdHVyblJpZ2h0KGludCB4LGludCB2KXsKICAgIFJpZ2h0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcigteCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoLXgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnRGcm9udERyaXZlLnN0YXJ0Um90YXRlRm9yKHgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoeCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwp9CnZvaWQgdHVybkxlZnQoaW50IHgsaW50IHYpewogICAgUmlnaHRGcm9udERyaXZlLnN0YXJ0Um90YXRlRm9yKHgscm90YXRpb25Vbml0czo6ZGVnLDY1LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBSaWdodEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcih4LHJvdGF0aW9uVW5pdHM6OmRlZyw2NSx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoLXgscm90YXRpb25Vbml0czo6ZGVnLDY1LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0QmFja0RyaXZlLnN0YXJ0Um90YXRlRm9yKC14LHJvdGF0aW9uVW5pdHM6OmRlZyw2NSx2ZWxvY2l0eVVuaXRzOjpwY3QpOwp9CgoKdm9pZCBhdXRvbm9tb3VzKCB2b2lkICkgewogICAKICAgIEludGFrZS5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsgCiAgICAKICAgIEZseS5zcGluKGRpcmVjdGlvblR5cGU6OnJldiwxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIEludGFrZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIGZvcndhcmQoMTA5MCw2NSk7CiAgICB0YXNrOjpzbGVlcCgyMjAwKTsKICAgIHR1cm5MZWZ0KDI3NSw2NSk7CiAgICB0YXNrOjpzbGVlcCgyMjAwKTsKICAgIEZlZWRlci5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIHRhc2s6OnNsZWVwKDIyMDApOwogICAgIHR1cm5SaWdodCgyNzUsNjUpOwogICAgdGFzazo6c2xlZXAoMjIwMCk7CiAgICBiYWNrd2FyZCgyNjAsNjUpOwogICAgdGFzazo6c2xlZXAoMjIwMCk7CiAgICB0dXJuUmlnaHQoMzAwLDY1KTsKICAgIAogICAgCiAgICB0YXNrOjpzbGVlcCgxMDAwKTsKICAgIAogICAgCiAgIGJhY2t3YXJkKDkwMCw2NSk7CiAgICAvKgogICAgSW50YWtlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgdGFzazo6c2xlZXAoMTIwMCk7CiAgICB0dXJuTGVmdCgzMDUsNjUpOwogICAgdGFzazo6c2xlZXAoMTAwMCk7CiAgICBiYWNrd2FyZCg2NTAsNjUpOwogICAgdGFzazo6c2xlZXAoMTIwMCk7CiAgICBSaWdodEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoMzY3LHJvdGF0aW9uVW5pdHM6OmRlZyw2NSx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoMzY3LHJvdGF0aW9uVW5pdHM6OmRlZyw2NSx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgdGFzazo6c2xlZXAoMTIwMCk7CiAgICBmb3J3YXJkKDI1LDI1KTsKICAgIHRhc2s6OnNsZWVwKDEyMDApOwogICAgRmVlZGVyLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgSW50YWtlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgZm9yd2FyZCgzNzUsNDUpOwogICAgdGFzazo6c2xlZXAoMTIwMCk7CiAgICBSaWdodEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoMjIwLHJvdGF0aW9uVW5pdHM6OmRlZyw2NSx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoMjIwLHJvdGF0aW9uVW5pdHM6OmRlZyw2NSx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgdGFzazo6c2xlZXAoMTIwMCk7CiAgICB0dXJuTGVmdCg2NTAsNjUpOwogICAgdGFzazo6c2xlZXAoMTIwMCk7CiAgICBiYWNrd2FyZCgxMTAwLDEwMCk7CiAgICB0YXNrOjpzbGVlcCgxMjAwKTsKICAgICovCiAgICAKfQoKCi8vVVNFUkNPTlRST0wKdm9pZCB1c2VyY29udHJvbCggdm9pZCApIHsKICAvLyBVc2VyIGNvbnRyb2wgY29kZSBoZXJlLCBpbnNpZGUgdGhlIGxvb3AKICB3aGlsZSAoMSl7CiAgICBSaWdodEZyb250RHJpdmUuc2V0TWF4VG9ycXVlKDEwMCxwZXJjZW50VW5pdHM6OnBjdCk7CiAgICBSaWdodEJhY2tEcml2ZS5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsgCiAgICBMZWZ0RnJvbnREcml2ZS5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsgCiAgICBMZWZ0QmFja0RyaXZlLnNldE1heFRvcnF1ZSgxMDAscGVyY2VudFVuaXRzOjpwY3QpOwogICAgRmx5LnNldE1heFRvcnF1ZSgxMDAscGVyY2VudFVuaXRzOjpwY3QpOyAKICAgIFNlY3JldFdlYXBvbi5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsgCiAgICAgCiAgICAvL0NoYW5nZSBTZW5zaXRpdml0eSBvZiBDb250cm9sbGVyLCBBeGlzMQogICAgaW50IHZhbHVlMT0wOwogICAgaW50IHZhbHVlMz0wOwogICAgICAKICAgIGlmKENvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCk+MCYmQ29udHJvbGxlcjEuQXhpczEudmFsdWUoKTw9MTAwKXsKICAgICAgICB2YWx1ZTE9Q29udHJvbGxlcjEuQXhpczEudmFsdWUoKS8yOwogICAgfQogICAgZWxzZSBpZihDb250cm9sbGVyMS5BeGlzMS52YWx1ZSgpPjEwMCl7CiAgICAgICAgdmFsdWUxPXBvdyhDb250cm9sbGVyMS5BeGlzMS52YWx1ZSgpLDIpLzIwMDsKICAgIH0KICAgIGlmKENvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCk8MCYmQ29udHJvbGxlcjEuQXhpczEudmFsdWUoKT49LTEwMCl7CiAgICAgICAgdmFsdWUxPUNvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCkvMjsKICAgIH0KICAgIGVsc2UgaWYoQ29udHJvbGxlcjEuQXhpczEudmFsdWUoKTwtMTAwKXsKICAgICAgICB2YWx1ZTE9LXBvdyhDb250cm9sbGVyMS5BeGlzMS52YWx1ZSgpLDIpLzIwMDsKICAgIH0gCiAgICAgIAogICAgLy9WYWx1ZSAzIFVuY2hhbmdlZAogICAgdmFsdWUzPShDb250cm9sbGVyMS5BeGlzMy52YWx1ZSgpKTsgCiAgICBMZWZ0RnJvbnREcml2ZS5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkLCh2YWx1ZTErdmFsdWUzKSx2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0QmFja0RyaXZlLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpmd2QsKHZhbHVlMSt2YWx1ZTMpLHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsgCiAgICBSaWdodEZyb250RHJpdmUuc3Bpbih2ZXg6OmRpcmVjdGlvblR5cGU6OnJldiwodmFsdWUxLXZhbHVlMyksdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOyAKICAgIFJpZ2h0QmFja0RyaXZlLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpyZXYsKHZhbHVlMS12YWx1ZTMpLHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsKICAgIAogICAgCiAgICBpZihDb250cm9sbGVyMS5CdXR0b25SMi5wcmVzc2luZygpKQogICAgewogICAgICAgIEludGFrZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgIH0KICAgIGVsc2UgaWYoQ29udHJvbGxlcjEuQnV0dG9uUjEucHJlc3NpbmcoKSkKICAgIHsKICAgICAgICBJbnRha2Uuc3BpbihkaXJlY3Rpb25UeXBlOjpyZXYsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIEludGFrZS5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOwogICAgICAgCiAgICB9CiAgICAgIAogICAgCiAgICAgIGlmKENvbnRyb2xsZXIxLkJ1dHRvbkwxLnByZXNzaW5nKCkpCiAgICB7CiAgICAgICAgRmVlZGVyLnN0YXJ0Um90YXRlRm9yKDIwMCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgSW50YWtlLnN0YXJ0Um90YXRlRm9yKDEwMCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgICB0YXNrOjpzbGVlcCgyMDApOwogICAgICAgICAgUmlnaHRGcm9udERyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDIwMCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgICAgICAgUmlnaHRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgICBMZWZ0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICAgIExlZnRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgICBTZWNyZXRXZWFwb24uc3BpbihkaXJlY3Rpb25UeXBlOjpyZXYsMTAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgdGFzazo6c2xlZXAoMTAwKTsKICAgICAgICBGZWVkZXIuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgSW50YWtlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDIwMCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgICAgIFNlY3JldFdlYXBvbi5zcGluKGRpcmVjdGlvblR5cGU6OnJldiwxMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICB0YXNrOjpzbGVlcCgzMDApOyAKICAgIH0gCiAgICAgIAogICAvL0ZlZWRlciAgCiAgICBpZihDb250cm9sbGVyMS5CdXR0b25MMi5wcmVzc2luZygpKQogICAgewogICAgICAgIEludGFrZS5zdGFydFJvdGF0ZUZvcigyMDAwLHJvdGF0aW9uVW5pdHM6OmRlZywxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBGZWVkZXIucm90YXRlRm9yKDIwMCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CgogICAgfQogICAgZWxzZQogICAgewogICAgICAgIEZlZWRlci5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOwogICAgfQogICAgICAKICAgIC8vU1cgIAogICAgaWYoQ29udHJvbGxlcjEuQnV0dG9uQS5wcmVzc2luZygpKQogICAgewogICAgICAgIFNlY3JldFdlYXBvbi5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwxNzAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgIH0KICAgIGVsc2UgaWYoQ29udHJvbGxlcjEuQnV0dG9uWS5wcmVzc2luZygpKQogICAgewogICAgICAgIFNlY3JldFdlYXBvbi5zcGluKGRpcmVjdGlvblR5cGU6OnJldiwxNzAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgIFNlY3JldFdlYXBvbi5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOwogICAgfSAgCiAgICAgIAogICAgCiAgICAvL0ZseQogICAgaWYoQ29udHJvbGxlcjEuQnV0dG9uVXAucHJlc3NpbmcoKSkKICAgIHsKICAgICAgICBGbHkuc3BpbihkaXJlY3Rpb25UeXBlOjpyZXYsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICB9CiAgICBlbHNlIGlmKENvbnRyb2xsZXIxLkJ1dHRvbkRvd24ucHJlc3NpbmcoKSkKICAgIHsgCiAgICAgICAgRmx5LnN0b3AoYnJha2VUeXBlOjpjb2FzdCk7ICAgCiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgCiAgICB9CiAgICAKICAgCiAgICAgIAogICAgICAKICAgIHZleDo6dGFzazo6c2xlZXAoMjApOwogIH0KfQogICAKCi8vU1RBUlQgUElECmludCBzZ24oZG91YmxlIHZhbCkKewogICAgcmV0dXJuIHZhbCA+IDAgPyAxIDogLTE7Cn0Kdm9pZCB0dXJuVG8oZG91YmxlIGRlZ3JlZXMsIGRvdWJsZSBzcGVlZCA9IDYwKQp7CiAgICBkZWdyZWVzICo9IDk2LjAvOTAuMDsKICAgIGRvdWJsZSBQID0gMCwga3AgPS43OwogICAgZG91YmxlIEkgPSAwLCBraSA9IDAuMDA0OwogICAgZG91YmxlIEQgPSAwLCBrZCA9IDAuMDM7CiAgICBkb3VibGUgZXJyb3IgPSAxMDA7IAogICAgZG91YmxlIGxhc3RFcnJvciA9IDEwMDsKICAgIGRvdWJsZSBtb3RvclBvd2VyID0gMDsKICAgIGludCBpVGhyZXNoID0gMjU7CiAgICB3aGlsZSh0cnVlKQogICAgewogICAgICAgIGxhc3RFcnJvciA9IGVycm9yOwogICAgICAgIC8vZXJyb3IgPSBkZWdyZWVzIC0gR3lybzEudmFsdWUocm90YXRpb25Vbml0czo6ZGVnKTsKCiAgICAgICAgaWYgKGFicyhlcnJvcikgPiAxODApCiAgICAgICAgICAgIGVycm9yID0gIHNnbihlcnJvcikgKiAoMzYwIC0gYWJzKGVycm9yKSk7CgogICAgICAgIFAgPSBlcnJvciAqIGtwOwogICAgICAgIEQgPSBrZCAqIChlcnJvciAtIGxhc3RFcnJvcik7CgogICAgICAgIGlmIChhYnMoZXJyb3IpIDwgaVRocmVzaCkKICAgICAgICAgICAgSSArPSBlcnJvciAqIGtpOwoKICAgICAgICBpZiAoYWJzKEkpID4gMTUpCiAgICAgICAgICBJID0gMTUgKiBzZ24oZXJyb3IpOwoKICAgICAgICBtb3RvclBvd2VyID0gUCArIEkgKyBEOwoKICAgICAgICBpZihhYnMoZXJyb3IpIDw9IDAuMSAmJiBhYnMobGFzdEVycm9yKSA8PSAuMSkgYnJlYWs7IC8vIEJyZWFrIHN0YXRlbWVudAoKICAgICAgICBpZihhYnMobW90b3JQb3dlcikgPiBhYnMoc3BlZWQpKQogICAgICAgICAgICBtb3RvclBvd2VyID0gc3BlZWQgKiBzZ24obW90b3JQb3dlcik7CgogICAgICAgIExlZnRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIG1vdG9yUG93ZXIsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgUmlnaHRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIC1tb3RvclBvd2VyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgLW1vdG9yUG93ZXIsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgTGVmdEZyb250RHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIG1vdG9yUG93ZXIsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CgogICAgICAgIHRhc2s6OnNsZWVwKDEwKTsKICAgIH0KICAgIExlZnRCYWNrRHJpdmUuc3RvcChicmFrZVR5cGU6OmJyYWtlKTsKICAgIFJpZ2h0QmFja0RyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICBSaWdodEZyb250RHJpdmUuc3RvcChicmFrZVR5cGU6OmJyYWtlKTsKICAgIExlZnRGcm9udERyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICB0YXNrOjpzbGVlcCg1MCk7IC8vIFNsZWVwIGhlcmUgc28gd2UgZG8gbm90IGhhdmUgdG8gaW4gdGhlIGF1dG9ub21vdXMgZnVuY3Rpb24KfQoKZG91YmxlIHN0YmxDb25zdCA9IC43OwoKZG91YmxlIHJhbXBVcChkb3VibGUgZGVsdGFWLCBpbnQgY3ljbGVzLCBpbnQgdGltZVNsaWNlLCBkb3VibGUgYW5nbGUgPSAwKQp7CiAgICBkb3VibGUgY3VyclZlbCA9IFJpZ2h0RnJvbnREcml2ZS52ZWxvY2l0eSh2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHRGcm9udERyaXZlLnJlc2V0Um90YXRpb24oKTsKICAgIAogICAgLy8gR3lybyBTdGFiaWxpemF0aW9uIHZhcmlhYmxlcwogICAgZG91YmxlIGxlZnRBZGp1c3RQd3IgPSAwOwogICAgZG91YmxlIGluaXQgPSBhbmdsZTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjeWNsZXM7IGkrKykKICAgIHsKICAgICAgICBjdXJyVmVsICs9IGRlbHRhVi9jeWNsZXM7CiAgICAKICAgICAgICAvL2xlZnRBZGp1c3RQd3IgPSBzdGJsQ29uc3QgKiAoR3lybzEudmFsdWUocm90YXRpb25Vbml0czo6ZGVnKSAtIGluaXQpOyAvLyBUcmFja2luZyBkaWZmZXJlbmNlIGluIGd5cm8gdmFsdWUKCiAgICAgICAgLy8gU2V0dGluZyBtb3RvciBwb3dlcnMKICAgICAgICBMZWZ0QmFja0RyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLCBjdXJyVmVsIC0gbGVmdEFkanVzdFB3ciwgdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBSaWdodEJhY2tEcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgY3VyclZlbCwgdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBSaWdodEZyb250RHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIGN1cnJWZWwsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgTGVmdEZyb250RHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIGN1cnJWZWwgLSBsZWZ0QWRqdXN0UHdyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwoKICAgICAgICB0YXNrOjpzbGVlcCh0aW1lU2xpY2UpOwogICAgfQoKICAgIHJldHVybiBSaWdodEZyb250RHJpdmUucm90YXRpb24ocm90YXRpb25Vbml0czo6cmV2KTsKfQoKdm9pZCBkcml2ZShkb3VibGUgaW5jaGVzLCBkb3VibGUgc3BlZWQsIGludCBjeWNsZXMgPSAxNSwgaW50IHRpbWVTbGljZSA9IDUwLCBkb3VibGUgaGVhZGluZyA9IC0xMjEsIGJvb2wgdHVybiA9IHRydWUpCnsKICAgIC8vIENvbnZlcnRpbmcgaW5jaGVzIHRvIG1vdG9yIHJvdGF0aW9ucwogICAgZG91YmxlIGluaXQgPSAwOwogICAgLy9pZihoZWFkaW5nICE9IC0xMjEpIGluaXQgPSBoZWFkaW5nOwogICAgZG91YmxlIHJvdHMgPSBpbmNoZXMgLyAoNCAqIDMuMTQxNSk7CiAgICByb3RzIC09IHJhbXBVcChzcGVlZCwgY3ljbGVzLCB0aW1lU2xpY2UsIGluaXQpOyAvLyBTdWJ0cmFjdGluZyByYW1waW5nIGRpc3RhbmNlIGZyb20gdG90YWwKCiAgICAvLyBQSUQgVmFyaWFibGVzCiAgICBkb3VibGUgUCA9IDAsIGtwID0gMTUwOyAvLzc1CiAgICBkb3VibGUgSSA9IDAsIGtpID0gLjk1OwogICAgZG91YmxlIEQgPSAwLCBrZCA9IDI1MDsgLy8yMzAKICAgIGRvdWJsZSBlcnJvciA9IDAsIGxFcnJvciA9IDA7CiAgICBkb3VibGUgaVRocmVzaCA9IC41OwogICAgZG91YmxlIG1vdG9yUG93ZXIgPSAwOwoKICAgIC8vIEd5cm8gU3RhYmlsaXphdGlvbiB2YXJpYWJsZXMKICAgIGRvdWJsZSBsZWZ0QWRqdXN0UHdyID0gMDsKCiAgICAvLyBSZXNldCByb3RhdGlvbnMgYmVmb3JlIFBJRCBsb29wCiAgICBSaWdodEZyb250RHJpdmUucmVzZXRSb3RhdGlvbigpOwoKICAgIC8vIFJlc2V0IEJyYWluIFRpbWVyIEJlZm9yZSBQSUQgTG9vcAogICAgQnJhaW4ucmVzZXRUaW1lcigpOwogICAgLy9pbnQgdGhlb3JldGljYWxUaW1lID0gYWJzKHJvdHMgLyAoc3BlZWQgKiAyKSAvIDYwKTsKCiAgICAvLyBQSUQgTG9vcAogICAgd2hpbGUgKGFicyhSaWdodEZyb250RHJpdmUucm90YXRpb24ocm90YXRpb25Vbml0czo6cmV2KSkgPCBhYnMocm90cykvKiAmJiBCcmFpbi50aW1lcih0aW1lVW5pdHM6Om1zZWMpIDwgdGhlb3JldGljYWxUaW1lICsgMTAwMCovKQogICAgewogICAgICAgIC8vIFNldHRpbmcgUElEIFZhcmlhYmxlcwogICAgICAgIGVycm9yID0gcm90cyAtIChSaWdodEZyb250RHJpdmUucm90YXRpb24ocm90YXRpb25Vbml0czo6cmV2KSk7CiAgICAgICAgUCA9IGVycm9yICoga3A7CiAgICAgICAgRCA9IChlcnJvciAtIGxFcnJvcikgKiBrZDsKCiAgICAgICAgaWYgKGFicyhlcnJvcikgPCBpVGhyZXNoKQogICAgICAgICAgICBJICs9IGVycm9yICoga2k7CiAgICAgICAgZWxzZQogICAgICAgICAgICBJID0gMDsKCiAgICAgICAgbW90b3JQb3dlciA9IGFicyhQKSArIGFicyhJKSAtIGFicyhEKTsgLy8gTWFudWFsbHkgc2V0dGluZyBtb3RvciBwb3dlcgoKICAgICAgICBpZiAoYWJzKG1vdG9yUG93ZXIpID4gYWJzKHNwZWVkKSkgLy8gTGltaXRpbmcgbW90b3IgcG93ZXIgdG8gdG9wIHNwZWVkCiAgICAgICAgICAgIG1vdG9yUG93ZXIgPSBhYnMoc3BlZWQpOwoKICAgICAgICBpZihzcGVlZCA8IDApIC8vIEluIGNhc2Ugb2YgZ29pbmcgYmFja3dhcmRzCiAgICAgICAgICAgIG1vdG9yUG93ZXIgKj0gLTE7CgogICAgICAgIC8vbGVmdEFkanVzdFB3ciA9IHN0YmxDb25zdCAqIChHeXJvMS52YWx1ZShyb3RhdGlvblVuaXRzOjpkZWcpIC0gaW5pdCk7IC8vIFRyYWNraW5nIGRpZmZlcmVuY2UgaW4gZ3lybyB2YWx1ZQoKICAgICAgICAvLyBTZXR0aW5nIG1vdG9yIHBvd2VycwogICAgICAgIExlZnRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIG1vdG9yUG93ZXIgLSBsZWZ0QWRqdXN0UHdyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0QmFja0RyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLCBtb3RvclBvd2VyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgbW90b3JQb3dlciwgdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBMZWZ0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgbW90b3JQb3dlciAtIGxlZnRBZGp1c3RQd3IsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CgogICAgICAgIHRhc2s6OnNsZWVwKDUwKTsKICAgICAgICBsRXJyb3IgPSBlcnJvcjsKICAgIH0KCiAgICAvLyBTdG9wcGluZyBtb3RvcnMgYWZ0ZXIgbG9vcCBlbmRzCiAgICBMZWZ0QmFja0RyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICBSaWdodEJhY2tEcml2ZS5zdG9wKGJyYWtlVHlwZTo6YnJha2UpOwogICAgUmlnaHRGcm9udERyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICBMZWZ0RnJvbnREcml2ZS5zdG9wKGJyYWtlVHlwZTo6YnJha2UpOwogICAgLyppZih0dXJuKQogICAgICAgIHR1cm5Ubyhpbml0KTsKICAgICAgICAqLwogICAgLy8gU2xlZXAgaGVyZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byBpbiB0aGUgYXV0b25vbW91cyBmdW5jdGlvbgogICAgaWYgKGFicyhpbmNoZXMpID49IDE2KQogICAgICAgIHRhc2s6OnNsZWVwKDEwMCk7CiAgICBlbHNlCiAgICAgICAgdGFzazo6c2xlZXAoNTApOwp9Ci8vRU5EIFBJRAoKCgppbnQgbWFpbigpIHsKICAgIHByZV9hdXRvbigpOwogICAgQ29tcGV0aXRpb24uYXV0b25vbW91cyggYXV0b25vbW91cyApOwogICAgQ29tcGV0aXRpb24uZHJpdmVyY29udHJvbCggdXNlcmNvbnRyb2wgKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICB3aGlsZSgxKSB7CiAgICAgIHZleDo6dGFzazo6c2xlZXAoMTAwKTsvL1NsZWVwIHRoZSB0YXNrIGZvciBhIHNob3J0IGFtb3VudCBvZiB0aW1lIHRvIHByZXZlbnQgd2FzdGVkIHJlc291cmNlcy4KICAgIH0gICAgCiAgICAgICAKfQ=="},"device":{"slot":3,"type":"vexV5"},"language":{"name":"vc++"},"components":[{"name":"RightFrontDrive","class":"vex::motor","port":"7","left":251,"top":318,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"RightBackDrive","class":"vex::motor","port":"8","left":251,"top":486,"type":"motor","data":{"gears":200,"reversed":true}},{"name":"LeftFrontDrive","class":"vex::motor","port":"2","left":64,"top":476,"type":"motor","data":{"gears":200,"reversed":true}},{"name":"Controller1","class":"vex::controller","left":463,"top":192,"type":"controller"},{"name":"Fly","class":"vex::motor","port":"3","left":368,"top":0,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"Feeder","class":"vex::motor","port":"6","left":553,"top":0,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"Intake","class":"vex::motor","port":"5","left":642,"top":467,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"LeftBackDrive","class":"vex::motor","port":"1","left":62,"top":311,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"SecretWeapon","class":"vex::motor","port":"9","left":663,"top":124,"type":"motor","data":{"gears":200,"reversed":true}}]}