Grades were reported for 640 students.
Exam Wrapper Questions
Question 21
- How has your interest in physics changed since the start of the semester?
- I am much less interested in physics than at the beginning of the semester
- I am somewhat less interested in physics than at the beginning of the semester
- My interest in physics has not changed
- I am somewhat more interested in physics than at the beginning of the semester
- I am much more interested in physics than at the beginning of the semester
Question 22
- When you start a new exam problem, what is your first step after reading the question?
- Draw a picture or a diagram of the situation
- Read the answer choices and eliminate obviously wrong choices
- Determine the physics idea(s) relevant to the problem
- Determine the variables and/or equations relevant to the problem
- Compute quantities that I know how to compute immediately
Question 23
- Which statement best completes this statement for you: “I would be doing better in this class if…”?
- … if I had more time to devote to it
- … if I solved more problems
- … if I were more interested in the subject matter
- … if I were assessed with smaller but more numerous assignments
- Nothing, I am doing fine
Question 24
- For the M-Write assignments, M-Write Fellows hold office hours. Have you used these office hours?
- Yes, I have used the M-Write Office Hours and find them helpful
- Yes, I have used the M-Write Office Hours, but they are not helpful
- No, I have not used the M-Write Office Hours because I didn’t have questions on the assignments
- No, I have not used the M-Write Office Hours because I can’t make it at the times they are offered
- No, I have not used the M-Write Office Hours because I was not aware of them
Question 25
- Which of the following changes did you make since Exam 2? (Select all that apply)
- I started studying earlier
- I studied regularly throughout the last month
- I solved more practice problems (from Problem Roulette or from the textbook)
- I used more of the resources available (Physics Help Room, office hours, Piazza, etc)
- I did not change my study strategies in any of the above ways
Relationship Between Prior Prepration and Exam 3 Scores
Exam 1 Question 21
- What is the highest physics course you have taken before this class?
- None
- High school mechanics
- High school electricity and magnetism
- AP mechanics
- AP electricity and magnetism, or above

Exam Wrapper Question 25 - Exam Score Differences

LS0tCnRpdGxlOiAiRkEgMjAxOCBQaHlzaWNzIDE0MCBNaWR0ZXJtIDMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGJvb3QpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KdGhlbWVfcHViIDwtIAogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSByZWwoMS4yKSwgaGp1c3QgPSAwLjUpLAogICAgICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KCksCiAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAid2hpdGUiKSwKICAgICAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLHNpemUgPSAxNCksCiAgICAgICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT05MCx2anVzdCA9MixzaXplPTEyKSwKICAgICAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHZqdXN0ID0gLTAuMixzaXplPTEyKSwKICAgICAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTApLCAKICAgICAgICAgICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91cj0iYmxhY2siKSwKICAgICAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfbGluZSgpLAogICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91cj0iZ3JleTkwIiksCiAgICAgICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gTkEpLAogICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICAgICAgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwKICAgICAgICAgICAgbGVnZW5kLmtleS5zaXplPSB1bml0KDAuMiwgImNtIiksCiAgICAgICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlPSJpdGFsaWMiKSwKICAgICAgICAgICAgcGxvdC5tYXJnaW49dW5pdChjKDEwLDUsNSw1KSwibW0iKSwKICAgICAgICAgICAgc3RyaXAuYmFja2dyb3VuZD1lbGVtZW50X3JlY3QoY29sb3VyPSIjZjBmMGYwIixmaWxsPSIjZjBmMGYwIiksCiAgICAgICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIpLAogICAgICAgICAgYXNwZWN0LnJhdGlvPS42NQogICAgKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KYW5zd2VycyA8LSByZWFkX2NzdigiTWlkdGVybTNfYW5zd2Vycy5jc3YiKVtjKDE6MzgpXQpjb2xuYW1lcyhhbnN3ZXJzKVtjb2xuYW1lcyhhbnN3ZXJzKSA9PSAic3R1ZGVudF9pZCJdIDwtICJzdHVkZW50SUQiCmNvbG5hbWVzKGFuc3dlcnMpW2NvbG5hbWVzKGFuc3dlcnMpID09ICJzY29yZSJdIDwtICJFeGFtIFNjb3JlIgpjb2xuYW1lcyhhbnN3ZXJzKVtjb2xuYW1lcyhhbnN3ZXJzKSA9PSAicGVyY2VudCJdIDwtICJFeGFtIFBlcmNlbnQiCgpncmFkZXMgPC0gcmVhZF9jc3YoIk1pZHRlcm0zX3Njb3Jlcy5jc3YiKSAlPiUgZmlsdGVyKGZpcnN0X25hbWUgIT0gIjAiKQpncmFkZXMkYWNjb3VudF9pZCA9IGFzLm51bWVyaWMoZ3JhZGVzJHN0dWRlbnRfaWQpCmNvbG5hbWVzKGdyYWRlcylbY29sbmFtZXMoZ3JhZGVzKSA9PSAicmVnIHNjb3JlIl0gPC0gIkV4YW0gU2NvcmUiCmNvbG5hbWVzKGdyYWRlcylbY29sbmFtZXMoZ3JhZGVzKSA9PSAicmVnIHBlcmNlbnQiXSA8LSAiRXhhbSBQZXJjZW50IgoKZGVtb2dyYXBoaWNzIDwtIHJlYWRfY3N2KCJwaHlzaWNzXzE0MF9kZW1vc18yMjEwLmNzdiIpCmNvbG5hbWVzKGRlbW9ncmFwaGljcylbY29sbmFtZXMoZGVtb2dyYXBoaWNzKSA9PSAic2V4Il0gPC0gIkdlbmRlciIKY29sbmFtZXMoZGVtb2dyYXBoaWNzKVtjb2xuYW1lcyhkZW1vZ3JhcGhpY3MpID09ICJwcm50X21heF9lZF9sdmxfZGVzIl0gPC0gIlBhcmVudCBFZCIKY29sbmFtZXMoZGVtb2dyYXBoaWNzKVtjb2xuYW1lcyhkZW1vZ3JhcGhpY3MpID09ICJyYWNlcyJdIDwtICJSYWNlIgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CiMgYWRkIGxlYWRpbmcgemVyb3MgdG8gc3R1ZGVudCBJRCBudW1iZXJzCnN0dWRlbnRfaWQgPC0gYygpCmZvcihpIGluIDE6bnJvdyhkZW1vZ3JhcGhpY3MpKSB7CiAgaWYoY2VpbGluZyhsb2cxMChkZW1vZ3JhcGhpY3MkYWNjb3VudF9pZFtpXSsxKSkgPT0gNikgewogICAgc3R1ZGVudF9pZFtpXSA9IHBhc3RlMCgiMDAiLCBkZW1vZ3JhcGhpY3MkYWNjb3VudF9pZFtpXSkKICB9CiAgZWxzZSBpZiAoY2VpbGluZyhsb2cxMChkZW1vZ3JhcGhpY3MkYWNjb3VudF9pZFtpXSsxKSkgPT0gNykgewogICAgc3R1ZGVudF9pZFtpXSA9IHBhc3RlMCgiMCIsIGRlbW9ncmFwaGljcyRhY2NvdW50X2lkW2ldKQogIH0gZWxzZSB7CiAgICBzdHVkZW50X2lkW2ldID0gZGVtb2dyYXBoaWNzJGFjY291bnRfaWRbaV0KICB9Cn0KYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpkZW1vZ3JhcGhpY3MgPC0gbXV0YXRlKGRlbW9ncmFwaGljcywgc3R1ZGVudElEID0gc3R1ZGVudF9pZCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpGR1N0YXR1cyA8LSBjKCkKZm9yKGkgaW4gMTpucm93KGRlbW9ncmFwaGljcykpIHsKICBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIkJhY2hlbG9yJ3MiKSBGR1N0YXR1c1tpXSA9ICJOb3QgRmlyc3RHZW4iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIk1hc3RlcidzIikgRkdTdGF0dXNbaV0gPSAiTm90IEZpcnN0R2VuIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJGBQYXJlbnQgRWRgW2ldID09ICJQcm9mIERvYyIpIEZHU3RhdHVzW2ldID0gIk5vdCBGaXJzdEdlbiIKICBlbHNlIGlmKGRlbW9ncmFwaGljcyRgUGFyZW50IEVkYFtpXSA9PSAiRG9jdG9yYXRlIikgRkdTdGF0dXNbaV0gPSAiTm90IEZpcnN0R2VuIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJGBQYXJlbnQgRWRgW2ldID09ICJTb21lIENvbGwiKSBGR1N0YXR1c1tpXSA9ICJOb3QgRmlyc3RHZW4iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIkFzc29jaWF0ZSIpIEZHU3RhdHVzW2ldID0gIk5vdCBGaXJzdEdlbiIKICBlbHNlIGlmKGRlbW9ncmFwaGljcyRgUGFyZW50IEVkYFtpXSA9PSAiUHJvZiBEb2MiKSBGR1N0YXR1c1tpXSA9ICJOb3QgRmlyc3RHZW4iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIkhTIGRpcGxvbWEiKSBGR1N0YXR1c1tpXSA9ICJGaXJzdEdlbiIKICBlbHNlIGlmKGRlbW9ncmFwaGljcyRgUGFyZW50IEVkYFtpXSA9PSAiTGVzcyB0aCBIUyIpIEZHU3RhdHVzW2ldID0gIkZpcnN0R2VuIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJGBQYXJlbnQgRWRgW2ldID09ICJFbGVtZW50YXJ5IikgRkdTdGF0dXNbaV0gPSAiRmlyc3RHZW4iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkYFBhcmVudCBFZGBbaV0gPT0gIkRvbid0IEtub3ciKSBGR1N0YXR1c1tpXSA9ICJVbmtub3duIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJGBQYXJlbnQgRWRgW2ldID09ICJOVUxMIikgRkdTdGF0dXNbaV0gPSAiVW5rbm93biIKICBlbHNlIEZHU3RhdHVzW2ldID0gIkVycm9yIgp9CmRlbW9ncmFwaGljcyRGR1N0YXR1cyA9IEZHU3RhdHVzCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KVVJNU3RhdHVzIDwtIGMoKQpmb3IoaSBpbiAxOm5yb3coZGVtb2dyYXBoaWNzKSkgewogIGlmKGRlbW9ncmFwaGljcyRSYWNlW2ldID09ICJ3aGl0ZSIpIFVSTVN0YXR1c1tpXSA9ICJOb3QgVVJNIgogIGVsc2UgaWYoZGVtb2dyYXBoaWNzJFJhY2VbaV0gPT0gImFzaWFuIikgVVJNU3RhdHVzW2ldID0gIk5vdCBVUk0iCiAgZWxzZSBpZihkZW1vZ3JhcGhpY3MkUmFjZVtpXSA9PSAibm9pbmRpYyIpIFVSTVN0YXR1c1tpXSA9ICJVbmtub3duIgogIGVsc2UgVVJNU3RhdHVzW2ldID0gIlVSTSIKfQpkZW1vZ3JhcGhpY3MkVVJNU3RhdHVzID0gVVJNU3RhdHVzCmRlbW9ncmFwaGljcyRVUk1TdGF0dXMgPC0gb3JkZXJlZChkZW1vZ3JhcGhpY3MkVVJNU3RhdHVzLCBsZXZlbHMgPSBjKCJVUk0iLCAiTm90IFVSTSIsICJVbmtub3duIikpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0Kc3R1ZGVudF9pZF9ncmFkZXMgPC0gYygpCmZvcihpIGluIDE6bnJvdyhncmFkZXMpKSB7CiAgaWYoY2VpbGluZyhsb2cxMChncmFkZXMkYWNjb3VudF9pZFtpXSsxKSkgPT0gNikgewogICAgc3R1ZGVudF9pZF9ncmFkZXNbaV0gPSBwYXN0ZTAoIjAwIiwgZ3JhZGVzJGFjY291bnRfaWRbaV0pCiAgfQogIGVsc2UgaWYgKGNlaWxpbmcobG9nMTAoZ3JhZGVzJGFjY291bnRfaWRbaV0rMSkpID09IDcpIHsKICAgIHN0dWRlbnRfaWRfZ3JhZGVzW2ldID0gcGFzdGUwKCIwIiwgZ3JhZGVzJGFjY291bnRfaWRbaV0pCiAgfQogIGVsc2UgaWYgKGNlaWxpbmcobG9nMTAoZ3JhZGVzJGFjY291bnRfaWRbaV0rMSkpID09IDEpIHsKICAgIHN0dWRlbnRfaWRfZ3JhZGVzW2ldID0gcGFzdGUwKCIwMDAwMDAwIiwgZ3JhZGVzJGFjY291bnRfaWRbaV0pCiAgfQogIGVsc2UgewogICAgc3R1ZGVudF9pZF9ncmFkZXNbaV0gPSBncmFkZXMkYWNjb3VudF9pZFtpXQogIH0KfQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdyYWRlcyA8LSBtdXRhdGUoZ3JhZGVzLCBzdHVkZW50SUQgPSBzdHVkZW50X2lkX2dyYWRlcykKYGBgCgojIyMgR3JhZGVzIHdlcmUgcmVwb3J0ZWQgZm9yIDY0MCBzdHVkZW50cy4KCiMjIyBFeGFtIFNjb3JlCiMjIyMgKipNZWFuIGV4YW0gc2NvcmU6KiogMTEuMQoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ3JhZGVzRGVtbyA8LSByaWdodF9qb2luKGRlbW9ncmFwaGljc1tjKDcsMyw0LDgsNSw5KV0sIGdyYWRlc1tjKDQwLDUsNildLCBieSA9ICJzdHVkZW50SUQiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChncmFkZXNEZW1vKSArIGdlb21fYmFyKGFlcyhgRXhhbSBTY29yZWApLCBmaWxsID0gYygiIzU2QjRFOSIpKSArIAogIGdndGl0bGUoIkV4YW0gU2NvcmUgRGlzdHJpYnV0aW9uIC0gUGh5c2ljcyAxNDAgTWlkdGVybSAzIEZBIDIwMTgiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGdyYWRlc0RlbW8gJT4lIAogICAgICAgICBncm91cF9ieShHZW5kZXIsYEV4YW0gU2NvcmVgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKEdlbmRlciA9PSAiRiIgfCBHZW5kZXIgPT0gIk0iKSkgKwogIGdlb21fY29sKGFlcyhgRXhhbSBTY29yZWAsYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gR2VuZGVyKSkgKyAKICBnZ3RpdGxlKCJTY29yZXMgYnkgR2VuZGVyIiwgc3VidGl0bGUgPSAiRiA9IDE5OSwgTSA9IDQ0MCIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsgbGFicyhmaWxsID0gIiIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlBhaXJlZCIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoZ3JhZGVzRGVtbyAlPiUgCiAgICAgICAgIGdyb3VwX2J5KEZHU3RhdHVzLGBFeGFtIFNjb3JlYCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihGR1N0YXR1cyA9PSAiRmlyc3RHZW4iIHwgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpKSArCiAgZ2VvbV9jb2woYWVzKGBFeGFtIFNjb3JlYCxgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBGR1N0YXR1cykpICsgCiAgZ2d0aXRsZSgiU2NvcmVzIGJ5IEZpcnN0IEdlbmVyYXRpb24gU3RhdHVzIiwgc3VidGl0bGUgPSAiRmlyc3RHZW4gPSA1NSwgTm90IEZpcnN0R2VuID0gNTgxIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArIGxhYnMoZmlsbCA9ICIiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJQYWlyZWQiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGdyYWRlc0RlbW8gJT4lIAogICAgICAgICBncm91cF9ieShVUk1TdGF0dXMsYEV4YW0gU2NvcmVgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKFVSTVN0YXR1cyA9PSAiVVJNIiB8IFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpKSArCiAgZ2VvbV9jb2woYWVzKGBFeGFtIFNjb3JlYCxgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBVUk1TdGF0dXMpKSArIAogIGdndGl0bGUoIlNjb3JlcyBieSBVUk0gU3RhdHVzIiwgc3VidGl0bGUgPSAiVVJNID0gMTE0LCBOb3QgVVJNID0gNDkyIikgKwogIGZhY2V0X3dyYXAoflVSTVN0YXR1cykgKyBsYWJzKGZpbGwgPSAiIikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFpcmVkIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyBQZXJmb3JtYW5jZSBEaWZmZXJlbmNlcwpgYGB7ciwgZWNobyA9IEZBTFNFfQpib290ZnVuYyA8LSBmdW5jdGlvbihkLGkpIHsKICBkMSA8LSBkW2ldCiAgcmV0dXJuKG1lYW4oZDEpKQp9CmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZGVtb0Vycm9yIDwtYygpCiMgRmVtYWxlIGVycm9yCmRlbW9FcnJvclsxXSA8LSBzZChib290KGZpbHRlcihncmFkZXNEZW1vLCBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBNYWxlIGVycm9yCmRlbW9FcnJvclsyXSA8LSBzZChib290KGZpbHRlcihncmFkZXNEZW1vLCBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBGRyBlcnJvcgpkZW1vRXJyb3JbM10gPC0gc2QoYm9vdChmaWx0ZXIoZ3JhZGVzRGVtbywgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgTm90IEZHIGVycm9yCmRlbW9FcnJvcls0XSA8LSBzZChib290KGZpbHRlcihncmFkZXNEZW1vLCBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgVVJNIGVycm9yCmRlbW9FcnJvcls1XSA8LSBzZChib290KGZpbHRlcihncmFkZXNEZW1vLCBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIE5vdCBVUk0gZXJyb3IKZGVtb0Vycm9yWzZdIDwtIHNkKGJvb3QoZmlsdGVyKGdyYWRlc0RlbW8sIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm1EaWZmIDwtIGRhdGFfZnJhbWUoYygiRiIsICJNIiwgIkZpcnN0R2VuIiwgIk5vdCBGaXJzdEdlbiIsICJVUk0iLCAiTm90IFVSTSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBjKG1lYW4oZmlsdGVyKGdyYWRlc0RlbW8sIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihncmFkZXNEZW1vLCBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoZ3JhZGVzRGVtbywgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGdyYWRlc0RlbW8sIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoZ3JhZGVzRGVtbywgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoZ3JhZGVzRGVtbywgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgKSksZGVtb0Vycm9yKQpjb2xuYW1lcyhQZXJmb3JtRGlmZikgPC0gYygiR3JvdXAiLCAiTWVhbiBFeGFtIFNjb3JlIiwgIkVycm9yIikKUGVyZm9ybURpZmYkR3JvdXAgPC0gb3JkZXJlZChQZXJmb3JtRGlmZiRHcm91cCwgbGV2ZWxzID0gYygiRiIsICJNIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpcnN0R2VuIiwgIk5vdCBGaXJzdEdlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVSTSIsICJOb3QgVVJNIikpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1EaWZmLCBhZXMoR3JvdXAsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIEV4YW0gU2NvcmVgIC0gRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IGBNZWFuIEV4YW0gU2NvcmVgICsgRXJyb3IpLCB3aWR0aCA9IC4zKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MiIpICsgbGFicyhjb2xvciA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKKioqCiMjIyBFeGFtIFdyYXBwZXIgUXVlc3Rpb25zCmBgYHtyLCBlY2hvID0gRkFMU0V9CmFuc3dlcnNEZW1vIDwtIHJpZ2h0X2pvaW4oZGVtb2dyYXBoaWNzW2MoNywzLDQsOCw1LDkpXSwgYW5zd2Vyc1tjKDEsOSwxMCwzNDozOCldLCBieSA9ICJzdHVkZW50SUQiKQphbnN3ZXJzRGVtbyRgMjFgW2lzLm5hKGFuc3dlcnNEZW1vJGAyMWApXSA8LSAiTm8gQW5zd2VyIgphbnN3ZXJzRGVtbyRgMjJgW2lzLm5hKGFuc3dlcnNEZW1vJGAyMmApXSA8LSAiTm8gQW5zd2VyIgphbnN3ZXJzRGVtbyRgMjNgW2lzLm5hKGFuc3dlcnNEZW1vJGAyM2ApXSA8LSAiTm8gQW5zd2VyIgphbnN3ZXJzRGVtbyRgMjRgW2lzLm5hKGFuc3dlcnNEZW1vJGAyNGApXSA8LSAiTm8gQW5zd2VyIgphbnN3ZXJzRGVtbyRgMjVgW2lzLm5hKGFuc3dlcnNEZW1vJGAyNWApXSA8LSAiTm8gQW5zd2VyIgpgYGAKCiMjIyMgUXVlc3Rpb24gMjEKMjEuIEhvdyBoYXMgeW91ciBpbnRlcmVzdCBpbiBwaHlzaWNzIGNoYW5nZWQgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBzZW1lc3Rlcj8KICBhKSBJIGFtICoqbXVjaCBsZXNzKiogaW50ZXJlc3RlZCBpbiBwaHlzaWNzIHRoYW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VtZXN0ZXIKICBiKSBJIGFtICoqc29tZXdoYXQgbGVzcyoqIGludGVyZXN0ZWQgaW4gcGh5c2ljcyB0aGFuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlbWVzdGVyCiAgYykgTXkgaW50ZXJlc3QgaW4gcGh5c2ljcyBoYXMgKipub3QqKiBjaGFuZ2VkCiAgZCkgSSBhbSAqKnNvbWV3aGF0IG1vcmUqKiBpbnRlcmVzdGVkIGluIHBoeXNpY3MgdGhhbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZW1lc3RlcgogIGUpIEkgYW0gKiptdWNoIG1vcmUqKiBpbnRlcmVzdGVkIGluIHBoeXNpY3MgdGhhbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZW1lc3RlcgogIAojIyMjIyAzNzQgcmVzcG9uc2VzCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyMWAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShgMjFgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkpICsKICBnZW9tX2NvbChhZXMoYDIxYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyMWApKSArCiAgZ2d0aXRsZSgiSW50ZXJlc3QgaW4gUGh5c2ljcyIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmVycm9yMjEgPC1jKCkKIyBBIGVycm9yCmVycm9yMjFbMV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkEiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBCIGVycm9yCmVycm9yMjFbMl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkIiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBDIGVycm9yCmVycm9yMjFbM10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkMiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBEIGVycm9yCmVycm9yMjFbNF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkQiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBFIGVycm9yCmVycm9yMjFbNV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkUiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpQZXJmb3JtMjEgPC0gZGF0YV9mcmFtZShjKCJBIiwgIkIiLCAiQyIsICJEIiwgIkUiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGMobWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkEiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJCIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQyIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkQiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJFIikkYEV4YW0gU2NvcmVgKSksIGVycm9yMjEpCmNvbG5hbWVzKFBlcmZvcm0yMSkgPC0gYygiQW5zd2VyIiwgIk1lYW4gRXhhbSBTY29yZSIsICJFcnJvciIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm0yMSwgYWVzKEFuc3dlciwgYE1lYW4gRXhhbSBTY29yZWAsIGNvbG9yID0gQW5zd2VyKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIEV4YW0gU2NvcmVgIC0gRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IGBNZWFuIEV4YW0gU2NvcmVgICsgRXJyb3IpLCB3aWR0aCA9IC4zKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMgYnkgSW50ZXJlc3QgaW4gUGh5c2ljcyIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjFgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoR2VuZGVyLCBgMjFgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihHZW5kZXIgPT0gIkYiIHwgR2VuZGVyID09ICJNIikpICsKICBnZW9tX2NvbChhZXMoYDIxYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyMWApKSArCiAgZ2d0aXRsZSgiSW50ZXJlc3QgaW4gUGh5c2ljcyIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmVycm9yMjFnIDwtYygpCiMgQSBlcnJvcgplcnJvcjIxZ1sxXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQSIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMWdbMl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkEiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQiBlcnJvcgplcnJvcjIxZ1szXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQiIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMWdbNF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkIiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQyBlcnJvcgplcnJvcjIxZ1s1XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQyIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMWdbNl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkMiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgRCBlcnJvcgplcnJvcjIxZ1s3XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiRCIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMWdbOF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkQiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgRSBlcnJvcgplcnJvcjIxZ1s5XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiRSIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMWdbMTBdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJFIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm0yMWcgPC0gZGF0YV9mcmFtZShjKCJBIiwgIkEiLCAiQiIsICJCIiwgIkMiLCAiQyIsICJEIiwgIkQiLCAiRSIsICJFIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKCJGIiwgIk0iLCJGIiwgIk0iLCJGIiwgIk0iLCJGIiwgIk0iLCJGIiwgIk0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMobWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkEiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkEiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkIiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkIiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkMiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkMiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkQiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkQiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkUiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkUiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSksIGVycm9yMjFnKQpjb2xuYW1lcyhQZXJmb3JtMjFnKSA8LSBjKCJBbnN3ZXIiLCAiR3JvdXAiLCAiTWVhbiBFeGFtIFNjb3JlIiwgIkVycm9yIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybTIxZywgYWVzKEFuc3dlciwgYE1lYW4gRXhhbSBTY29yZWAsIGNvbG9yID0gR3JvdXApKSArCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIEV4YW0gU2NvcmVgIC0gRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IGBNZWFuIEV4YW0gU2NvcmVgICsgRXJyb3IpLCB3aWR0aCA9IC4zLAogICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC4yKSkgKwogIGdndGl0bGUoIlBlcmZvcm1hbmNlIERpZmZlcmVuY2VzIGJ5IEludGVyZXN0IGluIFBoeXNpY3MiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpICsgbGFicyhjb2xvciA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSBmaWx0ZXIoYDIxYCAhPSAiTm8gQW5zd2VyIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KEZHU3RhdHVzLCBgMjFgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihGR1N0YXR1cyA9PSAiRmlyc3RHZW4iIHwgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpKSArCiAgZ2VvbV9jb2woYWVzKGAyMWAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjFgKSkgKwogIGdndGl0bGUoIkludGVyZXN0IGluIFBoeXNpY3MiKSArCiAgZmFjZXRfd3JhcCh+RkdTdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmVycm9yMjFGRyA8LWMoKQojIEEgZXJyb3IKZXJyb3IyMUZHWzFdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJBIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIxRkdbMl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkEiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEIgZXJyb3IKZXJyb3IyMUZHWzNdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJCIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIxRkdbNF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkIiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEMgZXJyb3IKZXJyb3IyMUZHWzVdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJDIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIxRkdbNl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkMiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEQgZXJyb3IKZXJyb3IyMUZHWzddIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJEIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIxRkdbOF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkQiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm0yMUZHIDwtIGRhdGFfZnJhbWUoYygiQSIsICJBIiwgIkIiLCAiQiIsICJDIiwgIkMiLCAiRCIsICJEIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKCJGaXJzdEdlbiIsICJOb3QgRmlyc3RHZW4iLCJGaXJzdEdlbiIsICJOb3QgRmlyc3RHZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiwiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJBIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJBIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQiIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQiIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkMiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkMiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJEIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJEIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApKSwgZXJyb3IyMUZHKQpjb2xuYW1lcyhQZXJmb3JtMjFGRykgPC0gYygiQW5zd2VyIiwgIkdyb3VwIiwgIk1lYW4gRXhhbSBTY29yZSIsICJFcnJvciIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm0yMUZHLCBhZXMoQW5zd2VyLCBgTWVhbiBFeGFtIFNjb3JlYCwgY29sb3IgPSBHcm91cCkpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBTY29yZWAgKyBFcnJvciksIHdpZHRoID0gLjMsCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMgYnkgSW50ZXJlc3QgaW4gUGh5c2ljcyIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSBmaWx0ZXIoYDIxYCAhPSAiTm8gQW5zd2VyIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KFVSTVN0YXR1cywgYDIxYCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApICU+JQogICAgICAgICBmaWx0ZXIoVVJNU3RhdHVzID09ICJVUk0iIHwgVVJNU3RhdHVzID09ICJOb3QgVVJNIikpICsKICBnZW9tX2NvbChhZXMoYDIxYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyMWApKSArCiAgZ2d0aXRsZSgiSW50ZXJlc3QgaW4gUGh5c2ljcyIpICsKICBmYWNldF93cmFwKH5VUk1TdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmVycm9yMjFVUk0gPC1jKCkKIyBBIGVycm9yCmVycm9yMjFVUk1bMV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkEiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMVVSTVsyXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQSIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBCIGVycm9yCmVycm9yMjFVUk1bM10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkIiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMVVSTVs0XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQiIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBDIGVycm9yCmVycm9yMjFVUk1bNV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkMiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMVVSTVs2XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQyIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBEIGVycm9yCmVycm9yMjFVUk1bN10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkQiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMVVSTVs4XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiRCIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBFIGVycm9yCmVycm9yMjFVUk1bOV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkUiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMVVSTVsxMF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkUiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybTIxVVJNIDwtIGRhdGFfZnJhbWUoYygiQSIsICJBIiwgIkIiLCAiQiIsICJDIiwgIkMiLCAiRCIsICJEIiwgIkUiLCAiRSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYygiVVJNIiwgIk5vdCBVUk0iLCJVUk0iLCAiTm90IFVSTSIsIlVSTSIsICJOb3QgVVJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVSTSIsICJOb3QgVVJNIiwiVVJNIiwgIk5vdCBVUk0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMobWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkEiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQSIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiQiIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJCIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJDIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkMiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMWAgPT0gIkQiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiRCIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIxYCA9PSAiRSIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjFgID09ICJFIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCkpLCBlcnJvcjIxVVJNKQpjb2xuYW1lcyhQZXJmb3JtMjFVUk0pIDwtIGMoIkFuc3dlciIsICJHcm91cCIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtMjFVUk0sIGFlcyhBbnN3ZXIsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC4yKSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBFeGFtIFNjb3JlYCAtIEVycm9yLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBgTWVhbiBFeGFtIFNjb3JlYCArIEVycm9yKSwgd2lkdGggPSAuMywKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZ3RpdGxlKCJQZXJmb3JtYW5jZSBEaWZmZXJlbmNlcyBieSBJbnRlcmVzdCBpbiBQaHlzaWNzIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiKSArIGxhYnMoY29sb3IgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCgojIyMjIFF1ZXN0aW9uIDIyCjIyLiBXaGVuIHlvdSBzdGFydCBhIG5ldyBleGFtIHByb2JsZW0sIHdoYXQgaXMgeW91ciBmaXJzdCBzdGVwIGFmdGVyIHJlYWRpbmcgdGhlIHF1ZXN0aW9uPwogIGEpIERyYXcgYSBwaWN0dXJlIG9yIGEgZGlhZ3JhbSBvZiB0aGUgc2l0dWF0aW9uCiAgYikgUmVhZCB0aGUgYW5zd2VyIGNob2ljZXMgYW5kIGVsaW1pbmF0ZSBvYnZpb3VzbHkgd3JvbmcgY2hvaWNlcwogIGMpIERldGVybWluZSB0aGUgcGh5c2ljcyBpZGVhKHMpIHJlbGV2YW50IHRvIHRoZSBwcm9ibGVtCiAgZCkgRGV0ZXJtaW5lIHRoZSB2YXJpYWJsZXMgYW5kL29yIGVxdWF0aW9ucyByZWxldmFudCB0byB0aGUgcHJvYmxlbQogIGUpIENvbXB1dGUgcXVhbnRpdGllcyB0aGF0IEkga25vdyBob3cgdG8gY29tcHV0ZSBpbW1lZGlhdGVseQogIAojIyMjIyAzNzMgcmVzcG9uc2VzCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyMmAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShgMjJgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkpICsKICBnZW9tX2NvbChhZXMoYDIyYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyMmApKSArCiAgZ2d0aXRsZSgiQXBwcm9hY2giKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQplcnJvcjIyIDwtYygpCiMgQSBlcnJvcgplcnJvcjIyWzFdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJBIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQiBlcnJvcgplcnJvcjIyWzJdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJCIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQyBlcnJvcgplcnJvcjIyWzNdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJDIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgRCBlcnJvcgplcnJvcjIyWzRdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJEIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybTIyIDwtIGRhdGFfZnJhbWUoYygiQSIsICJCIiwgIkMiLCAiRCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkIiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJDIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiRCIpJGBFeGFtIFNjb3JlYCkpLCBlcnJvcjIyKQpjb2xuYW1lcyhQZXJmb3JtMjIpIDwtIGMoIkFuc3dlciIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtMjIsIGFlcyhBbnN3ZXIsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEFuc3dlcikpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBFeGFtIFNjb3JlYCAtIEVycm9yLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBgTWVhbiBFeGFtIFNjb3JlYCArIEVycm9yKSwgd2lkdGggPSAuMykgKwogIGdndGl0bGUoIlBlcmZvcm1hbmNlIERpZmZlcmVuY2VzIGJ5IEFwcHJvYWNoIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiKSArIGxhYnMoY29sb3IgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjJgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoR2VuZGVyLCBgMjJgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihHZW5kZXIgPT0gIkYiIHwgR2VuZGVyID09ICJNIikpICsKICBnZW9tX2NvbChhZXMoYDIyYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyMmApKSArCiAgZ2d0aXRsZSgiQXBwcm9hY2giKSArCiAgZmFjZXRfd3JhcCh+R2VuZGVyKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQplcnJvcjIyZyA8LWMoKQojIEEgZXJyb3IKZXJyb3IyMmdbMV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkEiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjJnWzJdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJBIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEIgZXJyb3IKZXJyb3IyMmdbM10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkIiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjJnWzRdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJCIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEMgZXJyb3IKZXJyb3IyMmdbNV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkMiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjJnWzZdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJDIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEQgZXJyb3IKZXJyb3IyMmdbN10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkQiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjJnWzhdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJEIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm0yMmcgPC0gZGF0YV9mcmFtZShjKCJBIiwgIkEiLCAiQiIsICJCIiwgIkMiLCAiQyIsICJEIiwgIkQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMoIkYiLCAiTSIsIkYiLCAiTSIsIkYiLCAiTSIsIkYiLCAiTSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQSIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQSIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQiIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQiIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQyIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQyIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiRCIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiRCIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApKSwgZXJyb3IyMmcpCmNvbG5hbWVzKFBlcmZvcm0yMmcpIDwtIGMoIkFuc3dlciIsICJHcm91cCIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtMjJnLCBhZXMoQW5zd2VyLCBgTWVhbiBFeGFtIFNjb3JlYCwgY29sb3IgPSBHcm91cCkpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBTY29yZWAgKyBFcnJvciksIHdpZHRoID0gLjMsCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMgYnkgQXBwcm9hY2giKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpICsgbGFicyhjb2xvciA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyMmAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShGR1N0YXR1cywgYDIyYCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApICU+JQogICAgICAgICBmaWx0ZXIoRkdTdGF0dXMgPT0gIkZpcnN0R2VuIiB8IEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSkgKwogIGdlb21fY29sKGFlcyhgMjJgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDIyYCkpICsKICBnZ3RpdGxlKCJBcHByb2FjaCIpICsKICBmYWNldF93cmFwKH5GR1N0YXR1cykgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZXJyb3IyMkZHIDwtYygpCiMgQSBlcnJvcgplcnJvcjIyRkdbMV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkEiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjJGR1syXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQSIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQiBlcnJvcgplcnJvcjIyRkdbM10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkIiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjJGR1s0XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQiIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQyBlcnJvcgplcnJvcjIyRkdbNV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkMiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjJGR1s2XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQyIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgRCBlcnJvcgplcnJvcjIyRkdbN10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkQiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjJGR1s4XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiRCIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybTIyRkcgPC0gZGF0YV9mcmFtZShjKCJBIiwgIkEiLCAiQiIsICJCIiwgIkMiLCAiQyIsICJEIiwgIkQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMoIkZpcnN0R2VuIiwgIk5vdCBGaXJzdEdlbiIsIkZpcnN0R2VuIiwgIk5vdCBGaXJzdEdlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJzdEdlbiIsICJOb3QgRmlyc3RHZW4iLCJGaXJzdEdlbiIsICJOb3QgRmlyc3RHZW4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMobWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkEiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkEiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJCIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJCIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQyIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQyIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkQiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkQiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCkpLCBlcnJvcjIyRkcpCmNvbG5hbWVzKFBlcmZvcm0yMkZHKSA8LSBjKCJBbnN3ZXIiLCAiR3JvdXAiLCAiTWVhbiBFeGFtIFNjb3JlIiwgIkVycm9yIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybTIyRkcsIGFlcyhBbnN3ZXIsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC4yKSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBFeGFtIFNjb3JlYCAtIEVycm9yLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBgTWVhbiBFeGFtIFNjb3JlYCArIEVycm9yKSwgd2lkdGggPSAuMywKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZ3RpdGxlKCJQZXJmb3JtYW5jZSBEaWZmZXJlbmNlcyBieSBBcHByb2FjaCIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjJgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoVVJNU3RhdHVzLCBgMjJgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fY29sKGFlcyhgMjJgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDIyYCkpICsKICBnZ3RpdGxlKCJBcHByb2FjaCIpICsKICBmYWNldF93cmFwKH5VUk1TdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmVycm9yMjJVUk0gPC1jKCkKIyBBIGVycm9yCmVycm9yMjJVUk1bMV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkEiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMlVSTVsyXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQSIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBCIGVycm9yCmVycm9yMjJVUk1bM10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkIiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMlVSTVs0XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQiIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBDIGVycm9yCmVycm9yMjJVUk1bNV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkMiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMlVSTVs2XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQyIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBEIGVycm9yCmVycm9yMjJVUk1bN10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkQiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyMlVSTVs4XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiRCIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpQZXJmb3JtMjJVUk0gPC0gZGF0YV9mcmFtZShjKCJBIiwgIkEiLCAiQiIsICJCIiwgIkMiLCAiQyIsICJEIiwgIkQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMoIlVSTSIsICJOb3QgVVJNIiwiVVJNIiwgIk5vdCBVUk0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiVVJNIiwgIk5vdCBVUk0iLCJVUk0iLCAiTm90IFVSTSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQSIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJBIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJCIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkIiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyMmAgPT0gIkMiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiQyIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIyYCA9PSAiRCIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjJgID09ICJEIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCkpLCBlcnJvcjIyVVJNKQpjb2xuYW1lcyhQZXJmb3JtMjJVUk0pIDwtIGMoIkFuc3dlciIsICJHcm91cCIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtMjJVUk0sIGFlcyhBbnN3ZXIsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC4yKSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBFeGFtIFNjb3JlYCAtIEVycm9yLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBgTWVhbiBFeGFtIFNjb3JlYCArIEVycm9yKSwgd2lkdGggPSAuMywKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZ3RpdGxlKCJQZXJmb3JtYW5jZSBEaWZmZXJlbmNlcyBieSBBcHByb2FjaCIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgojIyMjIFF1ZXN0aW9uIDIzCjIzLiBXaGljaCBzdGF0ZW1lbnQgYmVzdCBjb21wbGV0ZXMgdGhpcyBzdGF0ZW1lbnQgZm9yIHlvdTogIkkgd291bGQgYmUgZG9pbmcgYmV0dGVyIGluIHRoaXMgY2xhc3MgaWYuLi4iPwogIGEpIC4uLiBpZiBJIGhhZCBtb3JlIHRpbWUgdG8gZGV2b3RlIHRvIGl0CiAgYikgLi4uIGlmIEkgc29sdmVkIG1vcmUgcHJvYmxlbXMKICBjKSAuLi4gaWYgSSB3ZXJlIG1vcmUgaW50ZXJlc3RlZCBpbiB0aGUgc3ViamVjdCBtYXR0ZXIKICBkKSAuLi4gaWYgSSB3ZXJlIGFzc2Vzc2VkIHdpdGggc21hbGxlciBidXQgbW9yZSBudW1lcm91cyBhc3NpZ25tZW50cwogIGUpIE5vdGhpbmcsIEkgYW0gZG9pbmcgZmluZQogIAojIyMjIyAzNzIgcmVzcG9uc2VzCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyM2AgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShgMjNgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkpICsKICBnZW9tX2NvbChhZXMoYDIzYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyM2ApKSArCiAgZ2d0aXRsZSgiSSB3b3VsZCBiZSBkb2luZyBiZXR0ZXIgaWYuLi4iKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQplcnJvcjIzIDwtYygpCiMgQSBlcnJvcgplcnJvcjIzWzFdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJBIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQiBlcnJvcgplcnJvcjIzWzJdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJCIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQyBlcnJvcgplcnJvcjIzWzNdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJDIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgRCBlcnJvcgplcnJvcjIzWzRdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJEIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgRSBlcnJvcgplcnJvcjIzWzVdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJFIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybTIzIDwtIGRhdGFfZnJhbWUoYygiQSIsICJCIiwgIkMiLCAiRCIsICJFIiksIAogICAgICAgICAgICAgICAgICAgICAgICBjKG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJBIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkMiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJEIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiRSIpJGBFeGFtIFNjb3JlYCkpLCBlcnJvcjIzKQpjb2xuYW1lcyhQZXJmb3JtMjMpIDwtIGMoIkFuc3dlciIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtMjMsIGFlcyhBbnN3ZXIsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEFuc3dlcikpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBFeGFtIFNjb3JlYCAtIEVycm9yLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBgTWVhbiBFeGFtIFNjb3JlYCArIEVycm9yKSwgd2lkdGggPSAuMykgKwogIGdndGl0bGUoIlBlcmZvcm1hbmNlIERpZmZlcmVuY2VzIGJ5IFByZWZlcmVuY2UiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpICsgbGFicyhjb2xvciA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSBmaWx0ZXIoYDIzYCAhPSAiTm8gQW5zd2VyIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KEdlbmRlciwgYDIzYCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApICU+JQogICAgICAgICBmaWx0ZXIoR2VuZGVyID09ICJGIiB8IEdlbmRlciA9PSAiTSIpKSArCiAgZ2VvbV9jb2woYWVzKGAyM2AsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjNgKSkgKwogIGdndGl0bGUoIkkgd291bGQgYmUgZG9pbmcgYmV0dGVyIGlmLi4uIikgKwogIGZhY2V0X3dyYXAofkdlbmRlcikgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZXJyb3IyM2cgPC1jKCkKIyBBIGVycm9yCmVycm9yMjNnWzFdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJBIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIzZ1syXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQSIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBCIGVycm9yCmVycm9yMjNnWzNdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJCIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIzZ1s0XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQiIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBDIGVycm9yCmVycm9yMjNnWzVdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJDIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIzZ1s2XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQyIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBEIGVycm9yCmVycm9yMjNnWzddIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJEIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIzZ1s4XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiRCIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBFIGVycm9yCmVycm9yMjNnWzldIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJFIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIzZ1sxMF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkUiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybTIzZyA8LSBkYXRhX2ZyYW1lKGMoIkEiLCAiQSIsICJCIiwgIkIiLCAiQyIsICJDIiwgIkQiLCAiRCIsICJFIiwgIkUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMoIkYiLCAiTSIsIkYiLCAiTSIsIkYiLCAiTSIsIkYiLCAiTSIsIkYiLCAiTSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQSIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQSIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQiIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQiIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQyIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQyIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiRCIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiRCIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiRSIgJiBHZW5kZXIgPT0gIkYiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiRSIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWApKSwgZXJyb3IyM2cpCmNvbG5hbWVzKFBlcmZvcm0yM2cpIDwtIGMoIkFuc3dlciIsICJHcm91cCIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtMjNnLCBhZXMoQW5zd2VyLCBgTWVhbiBFeGFtIFNjb3JlYCwgY29sb3IgPSBHcm91cCkpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBTY29yZWAgKyBFcnJvciksIHdpZHRoID0gLjMsCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMgYnkgUHJlZmVyZW5jZSIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjNgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoRkdTdGF0dXMsIGAyM2ApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKEZHU3RhdHVzID09ICJGaXJzdEdlbiIgfCBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikpICsKICBnZW9tX2NvbChhZXMoYDIzYCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyM2ApKSArCiAgZ2d0aXRsZSgiSSB3b3VsZCBiZSBkb2luZyBiZXR0ZXIgaWYuLi4iKSArCiAgZmFjZXRfd3JhcCh+RkdTdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmVycm9yMjNGRyA8LWMoKQojIEEgZXJyb3IKZXJyb3IyM0ZHWzFdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJBIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIzRkdbMl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkEiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEIgZXJyb3IKZXJyb3IyM0ZHWzNdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJCIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIzRkdbNF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkIiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEMgZXJyb3IKZXJyb3IyM0ZHWzVdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJDIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIzRkdbNl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkMiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEQgZXJyb3IKZXJyb3IyM0ZHWzddIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJEIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjIzRkdbOF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkQiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm0yM0ZHIDwtIGRhdGFfZnJhbWUoYygiQSIsICJBIiwgIkIiLCAiQiIsICJDIiwgIkMiLCAiRCIsICJEIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKCJGaXJzdEdlbiIsICJOb3QgRmlyc3RHZW4iLCJGaXJzdEdlbiIsICJOb3QgRmlyc3RHZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiwiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJBIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJBIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQiIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQiIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkMiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkMiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJEIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJEIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApKSwgZXJyb3IyM0ZHKQpjb2xuYW1lcyhQZXJmb3JtMjNGRykgPC0gYygiQW5zd2VyIiwgIkdyb3VwIiwgIk1lYW4gRXhhbSBTY29yZSIsICJFcnJvciIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm0yM0ZHLCBhZXMoQW5zd2VyLCBgTWVhbiBFeGFtIFNjb3JlYCwgY29sb3IgPSBHcm91cCkpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBTY29yZWAgKyBFcnJvciksIHdpZHRoID0gLjMsCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMgYnkgUHJlZmVyZW5jZSIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjNgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoVVJNU3RhdHVzLCBgMjNgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fY29sKGFlcyhgMjNgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDIzYCkpICsKICBnZ3RpdGxlKCJJIHdvdWxkIGJlIGRvaW5nIGJldHRlciBpZi4uLiIpICsKICBmYWNldF93cmFwKH5VUk1TdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmVycm9yMjNVUk0gPC1jKCkKIyBBIGVycm9yCmVycm9yMjNVUk1bMV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkEiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyM1VSTVsyXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQSIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBCIGVycm9yCmVycm9yMjNVUk1bM10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkIiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyM1VSTVs0XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQiIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBDIGVycm9yCmVycm9yMjNVUk1bNV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkMiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyM1VSTVs2XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQyIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBEIGVycm9yCmVycm9yMjNVUk1bN10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkQiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyM1VSTVs4XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiRCIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBFIGVycm9yCmVycm9yMjNVUk1bOV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkUiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyM1VSTVsxMF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkUiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybTIzVVJNIDwtIGRhdGFfZnJhbWUoYygiQSIsICJBIiwgIkIiLCAiQiIsICJDIiwgIkMiLCAiRCIsICJEIiwgIkUiLCAiRSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYygiVVJNIiwgIk5vdCBVUk0iLCJVUk0iLCAiTm90IFVSTSIsIlVSTSIsICJOb3QgVVJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVSTSIsICJOb3QgVVJNIiwiVVJNIiwgIk5vdCBVUk0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMobWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkEiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQSIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiQiIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJCIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJDIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkMiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyM2AgPT0gIkQiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiRCIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDIzYCA9PSAiRSIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjNgID09ICJFIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCkpLCBlcnJvcjIzVVJNKQpjb2xuYW1lcyhQZXJmb3JtMjNVUk0pIDwtIGMoIkFuc3dlciIsICJHcm91cCIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtMjNVUk0sIGFlcyhBbnN3ZXIsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC4yKSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBFeGFtIFNjb3JlYCAtIEVycm9yLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBgTWVhbiBFeGFtIFNjb3JlYCArIEVycm9yKSwgd2lkdGggPSAuMywKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZ3RpdGxlKCJQZXJmb3JtYW5jZSBEaWZmZXJlbmNlcyBieSBQcmVmZXJlbmNlIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiKSArIGxhYnMoY29sb3IgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyMgUXVlc3Rpb24gMjQKMjQuIEZvciB0aGUgTS1Xcml0ZSBhc3NpZ25tZW50cywgTS1Xcml0ZSBGZWxsb3dzIGhvbGQgb2ZmaWNlIGhvdXJzLiBIYXZlIHlvdSB1c2VkIHRoZXNlIG9mZmljZSBob3Vycz8KICBhKSBZZXMsIEkgaGF2ZSB1c2VkIHRoZSBNLVdyaXRlIE9mZmljZSBIb3VycyBhbmQgZmluZCB0aGVtIGhlbHBmdWwKICBiKSBZZXMsIEkgaGF2ZSB1c2VkIHRoZSBNLVdyaXRlIE9mZmljZSBIb3VycywgYnV0IHRoZXkgYXJlIG5vdCBoZWxwZnVsCiAgYykgTm8sIEkgaGF2ZSBub3QgdXNlZCB0aGUgTS1Xcml0ZSBPZmZpY2UgSG91cnMgYmVjYXVzZSBJIGRpZG4ndCBoYXZlIHF1ZXN0aW9ucyBvbiB0aGUgYXNzaWdubWVudHMKICBkKSBObywgSSBoYXZlIG5vdCB1c2VkIHRoZSBNLVdyaXRlIE9mZmljZSBIb3VycyBiZWNhdXNlIEkgY2FuJ3QgbWFrZSBpdCBhdCB0aGUgdGltZXMgdGhleSBhcmUgb2ZmZXJlZAogIGUpIE5vLCBJIGhhdmUgbm90IHVzZWQgdGhlIE0tV3JpdGUgT2ZmaWNlIEhvdXJzIGJlY2F1c2UgSSB3YXMgbm90IGF3YXJlIG9mIHRoZW0KICAKIyMjIyMgMzcwIHJlc3BvbnNlcwpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjRgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoYDI0YCkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBSZXNwb25zZXNgID0gY291bnQvc3VtKGNvdW50KSoxMDApKSArCiAgZ2VvbV9jb2woYWVzKGAyNGAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjRgKSkgKwogIGdndGl0bGUoIk0tV3JpdGUgT2ZmaWNlIEhvdXJzIikgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZXJyb3IyNCA8LWMoKQojIEEgZXJyb3IKZXJyb3IyNFsxXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiQSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEIgZXJyb3IKZXJyb3IyNFsyXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiQiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEMgZXJyb3IKZXJyb3IyNFszXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiQyIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEQgZXJyb3IKZXJyb3IyNFs0XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiRCIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEUgZXJyb3IKZXJyb3IyNFs1XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiRSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm0yNCA8LSBkYXRhX2ZyYW1lKGMoIkEiLCAiQiIsICJDIiwgIkQiLCAiRSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiQSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkIiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJDIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiRCIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkUiKSRgRXhhbSBTY29yZWApKSwgZXJyb3IyNCkKY29sbmFtZXMoUGVyZm9ybTI0KSA8LSBjKCJBbnN3ZXIiLCAiTWVhbiBFeGFtIFNjb3JlIiwgIkVycm9yIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybTI0LCBhZXMoQW5zd2VyLCBgTWVhbiBFeGFtIFNjb3JlYCwgY29sb3IgPSBBbnN3ZXIpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBTY29yZWAgKyBFcnJvciksIHdpZHRoID0gLjMpICsKICBnZ3RpdGxlKCJQZXJmb3JtYW5jZSBEaWZmZXJlbmNlcyBieSBNLVdyaXRlIE9mZmljZSBIb3VycyBVc2FnZSIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjRgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoR2VuZGVyLCBgMjRgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihHZW5kZXIgPT0gIkYiIHwgR2VuZGVyID09ICJNIikpICsKICBnZW9tX2NvbChhZXMoYDI0YCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyNGApKSArCiAgZ2d0aXRsZSgiTS1Xcml0ZSBPZmZpY2UgSG91cnMiKSArCiAgZmFjZXRfd3JhcCh+R2VuZGVyKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQplcnJvcjI0ZyA8LWMoKQojIEEgZXJyb3IKZXJyb3IyNGdbMV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkEiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjRnWzJdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJBIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEIgZXJyb3IKZXJyb3IyNGdbM10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkIiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjRnWzRdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJCIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEMgZXJyb3IKZXJyb3IyNGdbNV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkMiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjRnWzZdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJDIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEQgZXJyb3IKZXJyb3IyNGdbN10gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkQiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjRnWzhdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJEIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEUgZXJyb3IKZXJyb3IyNGdbOV0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkUiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjRnWzEwXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiRSIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpQZXJmb3JtMjRnIDwtIGRhdGFfZnJhbWUoYygiQSIsICJBIiwgIkIiLCAiQiIsICJDIiwgIkMiLCAiRCIsICJEIiwgIkUiLCAiRSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYygiRiIsICJNIiwiRiIsICJNIiwiRiIsICJNIiwiRiIsICJNIiwiRiIsICJNIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJBIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJBIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJCIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJCIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJDIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJDIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJEIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJEIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJFIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJFIiAmIEdlbmRlciA9PSAiTSIpJGBFeGFtIFNjb3JlYCkpLCBlcnJvcjI0ZykKY29sbmFtZXMoUGVyZm9ybTI0ZykgPC0gYygiQW5zd2VyIiwgIkdyb3VwIiwgIk1lYW4gRXhhbSBTY29yZSIsICJFcnJvciIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm0yNGcsIGFlcyhBbnN3ZXIsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEdyb3VwKSkgKwogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC4yKSkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBFeGFtIFNjb3JlYCAtIEVycm9yLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBgTWVhbiBFeGFtIFNjb3JlYCArIEVycm9yKSwgd2lkdGggPSAuMywKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZ3RpdGxlKCJQZXJmb3JtYW5jZSBEaWZmZXJlbmNlcyBieSBNLVdyaXRlIE9mZmljZSBIb3VycyBVc2FnZSIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjRgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoRkdTdGF0dXMsIGAyNGApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKEZHU3RhdHVzID09ICJGaXJzdEdlbiIgfCBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikpICsKICBnZW9tX2NvbChhZXMoYDI0YCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyNGApKSArCiAgZ2d0aXRsZSgiTS1Xcml0ZSBPZmZpY2UgSG91cnMiKSArCiAgZmFjZXRfd3JhcCh+RkdTdGF0dXMpICsKICBsYWJzKGZpbGwgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmVycm9yMjRGRyA8LWMoKQojIEEgZXJyb3IKZXJyb3IyNEZHWzFdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJBIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI0RkdbMl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkEiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEIgZXJyb3IKZXJyb3IyNEZHWzNdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJDIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI0RkdbNF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkMiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEMgZXJyb3IKZXJyb3IyNEZHWzVdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJEIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI0RkdbNl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkQiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEQgZXJyb3IKZXJyb3IyNEZHWzddIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJFIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI0RkdbOF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkUiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm0yNEZHIDwtIGRhdGFfZnJhbWUoYygiQSIsICJBIiwgIkMiLCAiQyIsICJEIiwgIkQiLCAiRSIsICJFIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKCJGaXJzdEdlbiIsICJOb3QgRmlyc3RHZW4iLCJGaXJzdEdlbiIsICJOb3QgRmlyc3RHZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiwiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJBIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJBIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiQyIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiQyIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkQiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkQiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJFIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJFIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApKSwgZXJyb3IyNEZHKQpjb2xuYW1lcyhQZXJmb3JtMjRGRykgPC0gYygiQW5zd2VyIiwgIkdyb3VwIiwgIk1lYW4gRXhhbSBTY29yZSIsICJFcnJvciIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm0yNEZHLCBhZXMoQW5zd2VyLCBgTWVhbiBFeGFtIFNjb3JlYCwgY29sb3IgPSBHcm91cCkpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBTY29yZWAgKyBFcnJvciksIHdpZHRoID0gLjMsCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMgYnkgTS1Xcml0ZSBPZmZpY2UgSG91cnMgVXNhZ2UiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiU2V0MSIpICsgCiAgbGFicyhjb2xvciA9ICIiLCBjYXB0aW9uID0gIk9ubHkgMSBGRyBzdHVkZW50IGZvciBFIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChhbnN3ZXJzRGVtbyAlPiUgZmlsdGVyKGAyNGAgIT0gIk5vIEFuc3dlciIpICU+JQogICAgICAgICBncm91cF9ieShVUk1TdGF0dXMsIGAyNGApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKFVSTVN0YXR1cyA9PSAiVVJNIiB8IFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpKSArCiAgZ2VvbV9jb2woYWVzKGAyNGAsIGBQZXJjZW50IG9mIFJlc3BvbnNlc2AsIGZpbGwgPSBgMjRgKSkgKwogIGdndGl0bGUoIk0tV3JpdGUgT2ZmaWNlIEhvdXJzIikgKwogIGZhY2V0X3dyYXAoflVSTVN0YXR1cykgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZXJyb3IyNFVSTSA8LWMoKQojIEEgZXJyb3IKZXJyb3IyNFVSTVsxXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiQSIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI0VVJNWzJdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJBIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEIgZXJyb3IKZXJyb3IyNFVSTVszXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiQyIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI0VVJNWzRdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJDIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEMgZXJyb3IKZXJyb3IyNFVSTVs1XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiRCIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI0VVJNWzZdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJEIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEQgZXJyb3IKZXJyb3IyNFVSTVs3XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiRSIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI0VVJNWzhdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJFIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm0yNFVSTSA8LSBkYXRhX2ZyYW1lKGMoIkEiLCAiQSIsICJDIiwgIkMiLCAiRCIsICJEIiwgIkUiLCAiRSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYygiVVJNIiwgIk5vdCBVUk0iLCJVUk0iLCAiTm90IFVSTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVUk0iLCAiTm90IFVSTSIsIlVSTSIsICJOb3QgVVJNIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJBIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkEiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkMiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiQyIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI0YCA9PSAiRCIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJEIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjRgID09ICJFIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNGAgPT0gIkUiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgKSksIGVycm9yMjRVUk0pCmNvbG5hbWVzKFBlcmZvcm0yNFVSTSkgPC0gYygiQW5zd2VyIiwgIkdyb3VwIiwgIk1lYW4gRXhhbSBTY29yZSIsICJFcnJvciIpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm0yNFVSTSwgYWVzKEFuc3dlciwgYE1lYW4gRXhhbSBTY29yZWAsIGNvbG9yID0gR3JvdXApKSArCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIEV4YW0gU2NvcmVgIC0gRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IGBNZWFuIEV4YW0gU2NvcmVgICsgRXJyb3IpLCB3aWR0aCA9IC4zLAogICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC4yKSkgKwogIGdndGl0bGUoIlBlcmZvcm1hbmNlIERpZmZlcmVuY2VzIGJ5IE0tV3JpdGUgT2ZmaWNlIEhvdXJzIFVzYWdlIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiKSArIGxhYnMoY29sb3IgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyMgUXVlc3Rpb24gMjUKMjUuIFdoaWNoIG9mIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBkaWQgeW91IG1ha2Ugc2luY2UgRXhhbSAyPyAoU2VsZWN0ICoqYWxsKiogdGhhdCBhcHBseSkKICBhKSBJIHN0YXJ0ZWQgc3R1ZHlpbmcgKiplYXJsaWVyKioKICBiKSBJIHN0dWRpZWQgKipyZWd1bGFybHkqKiB0aHJvdWdob3V0IHRoZSBsYXN0IG1vbnRoCiAgYykgSSBzb2x2ZWQgKiptb3JlKiogcHJhY3RpY2UgcHJvYmxlbXMgKGZyb20gUHJvYmxlbSBSb3VsZXR0ZSBvciBmcm9tIHRoZSB0ZXh0Ym9vaykKICBkKSBJIHVzZWQgKiptb3JlKiogb2YgdGhlIHJlc291cmNlcyBhdmFpbGFibGUgKFBoeXNpY3MgSGVscCBSb29tLCBvZmZpY2UgaG91cnMsIFBpYXp6YSwgZXRjKQogIGUpIEkgZGlkICoqbm90KiogY2hhbmdlIG15IHN0dWR5IHN0cmF0ZWdpZXMgaW4gYW55IG9mIHRoZSBhYm92ZSB3YXlzCiAgCiMjIyMjIDM2NiByZXNwb25zZXMKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KGFuc3dlcnNEZW1vICU+JSBmaWx0ZXIoYDI1YCAhPSAiTm8gQW5zd2VyIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KGAyNWApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSkgKwogIGdlb21fY29sKGFlcyhgMjVgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDI1YCkpICsKICBnZ3RpdGxlKCJDaGFuZ2VkIFN0dWR5IFN0cmF0ZWdpZXMiKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQplcnJvcjI1IDwtYygpCiMgQSBlcnJvcgplcnJvcjI1WzFdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJBIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQiBlcnJvcgplcnJvcjI1WzJdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJDIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQyBlcnJvcgplcnJvcjI1WzNdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJEIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgRCBlcnJvcgplcnJvcjI1WzRdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJFIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybTI1IDwtIGRhdGFfZnJhbWUoYygiQSIsICJDIiwgIkQiLCAiRSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiQSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkMiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJEIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiRSIpJGBFeGFtIFNjb3JlYCkpLCBlcnJvcjI1KQpjb2xuYW1lcyhQZXJmb3JtMjUpIDwtIGMoIkFuc3dlciIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtMjUsIGFlcyhBbnN3ZXIsIGBNZWFuIEV4YW0gU2NvcmVgLCBjb2xvciA9IEFuc3dlcikpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBgTWVhbiBFeGFtIFNjb3JlYCAtIEVycm9yLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBgTWVhbiBFeGFtIFNjb3JlYCArIEVycm9yKSwgd2lkdGggPSAuMykgKwogIGdndGl0bGUoIlBlcmZvcm1hbmNlIERpZmZlcmVuY2VzIGJ5IENoYW5nZWQgU3R1ZHkgU3RyYXRlZ2llcyIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjVgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoR2VuZGVyLCBgMjVgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihHZW5kZXIgPT0gIkYiIHwgR2VuZGVyID09ICJNIikpICsKICBnZW9tX2NvbChhZXMoYDI1YCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyNWApKSArCiAgZ2d0aXRsZSgiQ2hhbmdlZCBTdHVkeSBTdHJhdGVnaWVzIikgKwogIGZhY2V0X3dyYXAofkdlbmRlcikgKwogIGxhYnMoZmlsbCA9ICIiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZXJyb3IyNWcgPC1jKCkKIyBBIGVycm9yCmVycm9yMjVnWzFdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJBIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI1Z1syXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiQSIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBCIGVycm9yCmVycm9yMjVnWzNdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJDIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI1Z1s0XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiQyIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBDIGVycm9yCmVycm9yMjVnWzVdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJEIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI1Z1s2XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiRCIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBEIGVycm9yCmVycm9yMjVnWzddIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJFIiAmIEdlbmRlciA9PSAiRiIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQplcnJvcjI1Z1s4XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiRSIgJiBHZW5kZXIgPT0gIk0iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpQZXJmb3JtMjVnIDwtIGRhdGFfZnJhbWUoYygiQSIsICJBIiwgIkMiLCAiQyIsICJEIiwgIkQiLCAiRSIsICJFIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKCJGIiwgIk0iLCJGIiwgIk0iLCJGIiwgIk0iLCJGIiwgIk0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMobWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkEiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkEiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkMiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkMiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkQiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkQiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkUiICYgR2VuZGVyID09ICJGIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkUiICYgR2VuZGVyID09ICJNIikkYEV4YW0gU2NvcmVgKSksIGVycm9yMjVnKQpjb2xuYW1lcyhQZXJmb3JtMjVnKSA8LSBjKCJBbnN3ZXIiLCAiR3JvdXAiLCAiTWVhbiBFeGFtIFNjb3JlIiwgIkVycm9yIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybTI1ZywgYWVzKEFuc3dlciwgYE1lYW4gRXhhbSBTY29yZWAsIGNvbG9yID0gR3JvdXApKSArCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIEV4YW0gU2NvcmVgIC0gRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IGBNZWFuIEV4YW0gU2NvcmVgICsgRXJyb3IpLCB3aWR0aCA9IC4zLAogICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC4yKSkgKwogIGdndGl0bGUoIlBlcmZvcm1hbmNlIERpZmZlcmVuY2VzIGJ5IENoYW5nZWQgU3R1ZHkgU3RyYXRlZ2llcyIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjVgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoRkdTdGF0dXMsIGAyNWApICU+JQogICAgICAgICBzdW1tYXJpc2UoY291bnQgPSBuKCkpICU+JQogICAgICAgICBtdXRhdGUoYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSAlPiUKICAgICAgICAgZmlsdGVyKEZHU3RhdHVzID09ICJGaXJzdEdlbiIgfCBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikpICsKICBnZW9tX2NvbChhZXMoYDI1YCwgYFBlcmNlbnQgb2YgUmVzcG9uc2VzYCwgZmlsbCA9IGAyNWApKSArCiAgZ2d0aXRsZSgiQ2hhbmdlZCBTdHVkeSBTdHJhdGVnaWVzIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQplcnJvcjI1RkcgPC1jKCkKIyBBIGVycm9yCmVycm9yMjVGR1sxXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiQSIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyNUZHWzJdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJBIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBCIGVycm9yCmVycm9yMjVGR1szXSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiQyIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyNUZHWzRdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJDIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBDIGVycm9yCmVycm9yMjVGR1s1XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiRCIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyNUZHWzZdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJEIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBEIGVycm9yCmVycm9yMjVGR1s3XSA8LSBzZChib290KGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiRSIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKZXJyb3IyNUZHWzhdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJFIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpQZXJmb3JtMjVGRyA8LSBkYXRhX2ZyYW1lKGMoIkEiLCAiQSIsICJDIiwgIkMiLCAiRCIsICJEIiwgIkUiLCAiRSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYygiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiwiRmlyc3RHZW4iLCAiTm90IEZpcnN0R2VuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpcnN0R2VuIiwgIk5vdCBGaXJzdEdlbiIsIkZpcnN0R2VuIiwgIk5vdCBGaXJzdEdlbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiQSIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiQSIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkMiICYgRkdTdGF0dXMgPT0gIkZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkMiICYgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJEIiAmIEZHU3RhdHVzID09ICJGaXJzdEdlbiIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJEIiAmIEZHU3RhdHVzID09ICJOb3QgRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiRSIgJiBGR1N0YXR1cyA9PSAiRmlyc3RHZW4iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiRSIgJiBGR1N0YXR1cyA9PSAiTm90IEZpcnN0R2VuIikkYEV4YW0gU2NvcmVgKSksIGVycm9yMjVGRykKY29sbmFtZXMoUGVyZm9ybTI1RkcpIDwtIGMoIkFuc3dlciIsICJHcm91cCIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtMjVGRywgYWVzKEFuc3dlciwgYE1lYW4gRXhhbSBTY29yZWAsIGNvbG9yID0gR3JvdXApKSArCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGBNZWFuIEV4YW0gU2NvcmVgIC0gRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgeW1heCA9IGBNZWFuIEV4YW0gU2NvcmVgICsgRXJyb3IpLCB3aWR0aCA9IC4zLAogICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC4yKSkgKwogIGdndGl0bGUoIlBlcmZvcm1hbmNlIERpZmZlcmVuY2VzIGJ5IENoYW5nZWQgU3R1ZHkgU3RyYXRlZ2llcyIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoYW5zd2Vyc0RlbW8gJT4lIGZpbHRlcihgMjVgICE9ICJObyBBbnN3ZXIiKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoVVJNU3RhdHVzLCBgMjVgKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIFJlc3BvbnNlc2AgPSBjb3VudC9zdW0oY291bnQpKjEwMCkgJT4lCiAgICAgICAgIGZpbHRlcihVUk1TdGF0dXMgPT0gIlVSTSIgfCBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSkgKwogIGdlb21fY29sKGFlcyhgMjVgLCBgUGVyY2VudCBvZiBSZXNwb25zZXNgLCBmaWxsID0gYDI1YCkpICsKICBnZ3RpdGxlKCJDaGFuZ2VkIFN0dWR5IFN0cmF0ZWdpZXMiKSArCiAgZmFjZXRfd3JhcCh+VVJNU3RhdHVzKSArCiAgbGFicyhmaWxsID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQplcnJvcjI1VVJNIDwtYygpCiMgQSBlcnJvcgplcnJvcjI1VVJNWzFdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJBIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjVVUk1bMl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkEiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQiBlcnJvcgplcnJvcjI1VVJNWzNdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJDIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjVVUk1bNF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkMiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQyBlcnJvcgplcnJvcjI1VVJNWzVdIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJEIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjVVUk1bNl0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkQiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgRCBlcnJvcgplcnJvcjI1VVJNWzddIDwtIHNkKGJvb3QoZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJFIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmVycm9yMjVVUk1bOF0gPC0gc2QoYm9vdChmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkUiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybTI1VVJNIDwtIGRhdGFfZnJhbWUoYygiQSIsICJBIiwgIkMiLCAiQyIsICJEIiwgIkQiLCAiRSIsICJFIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBjKCJVUk0iLCAiTm90IFVSTSIsIlVSTSIsICJOb3QgVVJNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVSTSIsICJOb3QgVVJNIiwiVVJNIiwgIk5vdCBVUk0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGMobWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkEiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiQSIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiQyIgJiBVUk1TdGF0dXMgPT0gIlVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJDIiAmIFVSTVN0YXR1cyA9PSAiTm90IFVSTSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKGFuc3dlcnNEZW1vLCBgMjVgID09ICJEIiAmIFVSTVN0YXR1cyA9PSAiVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkQiICYgVVJNU3RhdHVzID09ICJOb3QgVVJNIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoYW5zd2Vyc0RlbW8sIGAyNWAgPT0gIkUiICYgVVJNU3RhdHVzID09ICJVUk0iKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihhbnN3ZXJzRGVtbywgYDI1YCA9PSAiRSIgJiBVUk1TdGF0dXMgPT0gIk5vdCBVUk0iKSRgRXhhbSBTY29yZWApKSwgZXJyb3IyNVVSTSkKY29sbmFtZXMoUGVyZm9ybTI1VVJNKSA8LSBjKCJBbnN3ZXIiLCAiR3JvdXAiLCAiTWVhbiBFeGFtIFNjb3JlIiwgIkVycm9yIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybTI1VVJNLCBhZXMoQW5zd2VyLCBgTWVhbiBFeGFtIFNjb3JlYCwgY29sb3IgPSBHcm91cCkpICsKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuMikpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBTY29yZWAgKyBFcnJvciksIHdpZHRoID0gLjMsCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjIpKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMgYnkgQ2hhbmdlZCBTdHVkeSBTdHJhdGVnaWVzIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiKSArIGxhYnMoY29sb3IgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAKCiMjIyBSZWxhdGlvbnNoaXAgQmV0d2VlbiBQcmlvciBQcmVwcmF0aW9uIGFuZCBFeGFtIDMgU2NvcmVzCiMjIyMgRXhhbSAxIFF1ZXN0aW9uIDIxCjIxLiBXaGF0IGlzIHRoZSBoaWdoZXN0IHBoeXNpY3MgY291cnNlIHlvdSBoYXZlIHRha2VuIGJlZm9yZSB0aGlzIGNsYXNzPwogIGEpIE5vbmUKICBiKSBIaWdoIHNjaG9vbCBtZWNoYW5pY3MKICBjKSBIaWdoIHNjaG9vbCBlbGVjdHJpY2l0eSBhbmQgbWFnbmV0aXNtCiAgZCkgQVAgbWVjaGFuaWNzCiAgZSkgQVAgZWxlY3RyaWNpdHkgYW5kIG1hZ25ldGlzbSwgb3IgYWJvdmUKCmBgYHtyLCBlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRX0KYW5zd2Vyc0UxIDwtIHJlYWRfY3N2KCJNaWR0ZXJtMV9hbnN3ZXJzLmNzdiIpW2MoMSw5LDM0LDM1KV0KY29sbmFtZXMoYW5zd2Vyc0UxKSA8LSBjKCJzdHVkZW50SUQiLCAiRXhhbSAxIFNjb3JlIiwgIlEyMSIsICJRMjIiKQpQcmlvclByZXAgPC0gbGVmdF9qb2luKGFuc3dlcnNFMSwgZ3JhZGVzRGVtbywgYnkgPSAic3R1ZGVudElEIikgJT4lIGZpbHRlcihgRXhhbSBTY29yZWAgPj0gMCkKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQplcnJvclByaW9yUHJlcCA8LWMoKQojIEEgZXJyb3IKZXJyb3JQcmlvclByZXBbMV0gPC0gc2QoYm9vdChmaWx0ZXIoUHJpb3JQcmVwLCBRMjEgPT0gIkEiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBCIGVycm9yCmVycm9yUHJpb3JQcmVwWzJdIDwtIHNkKGJvb3QoZmlsdGVyKFByaW9yUHJlcCwgUTIxID09ICJCIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCiMgQyBlcnJvcgplcnJvclByaW9yUHJlcFszXSA8LSBzZChib290KGZpbHRlcihQcmlvclByZXAsIFEyMSA9PSAiQyIpJGBFeGFtIFNjb3JlYCwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEQgZXJyb3IKZXJyb3JQcmlvclByZXBbNF0gPC0gc2QoYm9vdChmaWx0ZXIoUHJpb3JQcmVwLCBRMjEgPT0gIkQiKSRgRXhhbSBTY29yZWAsIGJvb3RmdW5jLCAxMDAwMCkkdCkKIyBFIGVycm9yCmVycm9yUHJpb3JQcmVwWzVdIDwtIHNkKGJvb3QoZmlsdGVyKFByaW9yUHJlcCwgUTIxID09ICJFIikkYEV4YW0gU2NvcmVgLCBib290ZnVuYywgMTAwMDApJHQpCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KUGVyZm9ybVByaW9yUHJlcCA8LSBkYXRhX2ZyYW1lKGMoIkEiLCAiQiIsICJDIiwgIkQiLCAiRSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgYyhtZWFuKGZpbHRlcihQcmlvclByZXAsIFEyMSA9PSAiQSIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoUHJpb3JQcmVwLCBRMjEgPT0gIkIiKSRgRXhhbSBTY29yZWApLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKFByaW9yUHJlcCwgUTIxID09ICJDIikkYEV4YW0gU2NvcmVgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuKGZpbHRlcihQcmlvclByZXAsIFEyMSA9PSAiRCIpJGBFeGFtIFNjb3JlYCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhbihmaWx0ZXIoUHJpb3JQcmVwLCBRMjEgPT0gIkUiKSRgRXhhbSBTY29yZWApKSwgZXJyb3JQcmlvclByZXApCmNvbG5hbWVzKFBlcmZvcm1QcmlvclByZXApIDwtIGMoIkFuc3dlciIsICJNZWFuIEV4YW0gU2NvcmUiLCAiRXJyb3IiKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtUHJpb3JQcmVwLCBhZXMoQW5zd2VyLCBgTWVhbiBFeGFtIFNjb3JlYCwgY29sb3IgPSBBbnN3ZXIpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gYE1lYW4gRXhhbSBTY29yZWAgLSBFcnJvciwKICAgICAgICAgICAgICAgICAgICB5bWF4ID0gYE1lYW4gRXhhbSBTY29yZWAgKyBFcnJvciksIHdpZHRoID0gLjMpICsKICBnZ3RpdGxlKCJQcmlvciBQaHlzaWNzIENsYXNzZXMgdnMuIEV4YW0gMyBTY29yZSIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJTZXQxIikgKyBsYWJzKGNvbG9yID0gIiIpICsKICB0aGVtZV9wdWIKYGBgCgojIyMgQ2hhbmdlcyBpbiBQZXJmb3JtYW5jZSBmcm9tIEV4YW0gMgpgYGB7ciwgZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0V9CmFuc3dlcnNFMiA8LSByZWFkX2NzdigiTWlkdGVybTJfYW5zd2Vycy5jc3YiKVtjKDEsOSldCmNvbG5hbWVzKGFuc3dlcnNFMikgPC0gYygic3R1ZGVudElEIiwgIkV4YW0gMiBTY29yZSIpClBlcmZvcm1DaGFuZ2VzIDwtIGxlZnRfam9pbihhbnN3ZXJzRGVtbywgYW5zd2Vyc0UyLCBieSA9ICJzdHVkZW50SUQiKSAlPiUKICBtdXRhdGUoRGlmZmVyZW5jZSA9IGBFeGFtIFNjb3JlYCAtIGBFeGFtIDIgU2NvcmVgKQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUKICAgICAgICAgZmlsdGVyKGBFeGFtIDIgU2NvcmVgID49IDApKSArCiAgZ2VvbV9iYXIoYWVzKERpZmZlcmVuY2UpLCBmaWxsID0gYygiI0Q1NUUwMCIpKSArCiAgbGFicyh0aXRsZSA9ICJEaWZmZXJlbmNlIGluIEV4YW0gU2NvcmVzIGZyb20gRXhhbSAyIHRvIEV4YW0gMyIpICsKICB0aGVtZV9wdWIKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybUNoYW5nZXMgJT4lCiAgICAgICAgIGZpbHRlcihgRXhhbSAyIFNjb3JlYCA+PSAwKSAlPiUKICAgICAgICAgZmlsdGVyKEdlbmRlciA9PSAiRiIgfCBHZW5kZXIgPT0gIk0iKSAlPiUKICAgICAgICAgZ3JvdXBfYnkoR2VuZGVyLCBEaWZmZXJlbmNlKSAlPiUKICAgICAgICAgc3VtbWFyaXNlKGNvdW50ID0gbigpKSAlPiUKICAgICAgICAgbXV0YXRlKGBQZXJjZW50IG9mIEdyb3VwYCA9IGNvdW50L3N1bShjb3VudCkqMTAwKSkgKwogIGdlb21fY29sKGFlcyhEaWZmZXJlbmNlLCBgUGVyY2VudCBvZiBHcm91cGAsIGZpbGwgPSBHZW5kZXIpKSArCiAgbGFicyh0aXRsZSA9ICJEaWZmZXJlbmNlIGluIEV4YW0gU2NvcmVzIGJ5IEdlbmRlciIsCiAgICAgICBmaWxsID0gIiIpICsKICBmYWNldF93cmFwKH5HZW5kZXIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIk9yUmQiKSArCiAgdGhlbWVfcHViCmBgYAoKYGBge3IsIGVjaG8gPSBGQUxTRX0KZ2dwbG90KFBlcmZvcm1DaGFuZ2VzICU+JQogICAgICAgICBmaWx0ZXIoYEV4YW0gMiBTY29yZWAgPj0gMCkgJT4lCiAgICAgICAgIGZpbHRlcihGR1N0YXR1cyA9PSAiRmlyc3RHZW4iIHwgRkdTdGF0dXMgPT0gIk5vdCBGaXJzdEdlbiIpICU+JQogICAgICAgICBncm91cF9ieShGR1N0YXR1cywgRGlmZmVyZW5jZSkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkpICsKICBnZW9tX2NvbChhZXMoRGlmZmVyZW5jZSwgYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gRkdTdGF0dXMpKSArCiAgbGFicyh0aXRsZSA9ICJEaWZmZXJlbmNlIGluIEV4YW0gU2NvcmVzIGJ5IEZpcnN0IEdlbmVyYXRpb24gU3RhdHVzIiwKICAgICAgIGZpbGwgPSAiIikgKwogIGZhY2V0X3dyYXAofkZHU3RhdHVzKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJPclJkIikgKwogIHRoZW1lX3B1YgpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9CmdncGxvdChQZXJmb3JtQ2hhbmdlcyAlPiUKICAgICAgICAgZmlsdGVyKGBFeGFtIDIgU2NvcmVgID49IDApICU+JQogICAgICAgICBmaWx0ZXIoVVJNU3RhdHVzID09ICJVUk0iIHwgVVJNU3RhdHVzID09ICJOb3QgVVJNIikgJT4lCiAgICAgICAgIGdyb3VwX2J5KFVSTVN0YXR1cywgRGlmZmVyZW5jZSkgJT4lCiAgICAgICAgIHN1bW1hcmlzZShjb3VudCA9IG4oKSkgJT4lCiAgICAgICAgIG11dGF0ZShgUGVyY2VudCBvZiBHcm91cGAgPSBjb3VudC9zdW0oY291bnQpKjEwMCkpICsKICBnZW9tX2NvbChhZXMoRGlmZmVyZW5jZSwgYFBlcmNlbnQgb2YgR3JvdXBgLCBmaWxsID0gVVJNU3RhdHVzKSkgKwogIGxhYnModGl0bGUgPSAiRGlmZmVyZW5jZSBpbiBFeGFtIFNjb3JlcyBieSBVUk0gU3RhdHVzIiwKICAgICAgIGZpbGwgPSAiIikgKwogIGZhY2V0X3dyYXAoflVSTVN0YXR1cykgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiT3JSZCIpICsKICB0aGVtZV9wdWIKYGBgCgojIyMgRXhhbSBXcmFwcGVyIFF1ZXN0aW9uIDI1IC0gRXhhbSBTY29yZSBEaWZmZXJlbmNlcwpgYGB7ciwgZWNobyA9IEZBTFNFfQplcnJvcjI1ZGlmZiA8LWMoKQojIEEgZXJyb3IKZXJyb3IyNWRpZmZbMV0gPC0gc2QoYm9vdChmaWx0ZXIoUGVyZm9ybUNoYW5nZXMsIGBFeGFtIDIgU2NvcmVgID49IDAgJiBgMjVgID09ICJBIikkRGlmZmVyZW5jZSwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEIgZXJyb3IKZXJyb3IyNWRpZmZbMl0gPC0gc2QoYm9vdChmaWx0ZXIoUGVyZm9ybUNoYW5nZXMsIGBFeGFtIDIgU2NvcmVgID49IDAgJiBgMjVgID09ICJDIikkRGlmZmVyZW5jZSwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEMgZXJyb3IKZXJyb3IyNWRpZmZbM10gPC0gc2QoYm9vdChmaWx0ZXIoUGVyZm9ybUNoYW5nZXMsIGBFeGFtIDIgU2NvcmVgID49IDAgJiBgMjVgID09ICJEIikkRGlmZmVyZW5jZSwgYm9vdGZ1bmMsIDEwMDAwKSR0KQojIEQgZXJyb3IKZXJyb3IyNWRpZmZbNF0gPC0gc2QoYm9vdChmaWx0ZXIoUGVyZm9ybUNoYW5nZXMsIGBFeGFtIDIgU2NvcmVgID49IDAgJiBgMjVgID09ICJFIikkRGlmZmVyZW5jZSwgYm9vdGZ1bmMsIDEwMDAwKSR0KQpgYGAKCmBgYHtyLCBlY2hvID0gRkFMU0V9ClBlcmZvcm0yNWRpZmYgPC0gZGF0YV9mcmFtZShjKCJBIiwgIkMiLCAiRCIsICJFIiksIAogICAgICAgICAgICAgICAgICAgICAgICBjKG1lYW4oZmlsdGVyKFBlcmZvcm1DaGFuZ2VzLCBgRXhhbSAyIFNjb3JlYCA+PSAwICYgYDI1YCA9PSAiQSIpJERpZmZlcmVuY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKFBlcmZvcm1DaGFuZ2VzLCBgRXhhbSAyIFNjb3JlYCA+PSAwICYgYDI1YCA9PSAiQyIpJERpZmZlcmVuY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKFBlcmZvcm1DaGFuZ2VzLCBgRXhhbSAyIFNjb3JlYCA+PSAwICYgYDI1YCA9PSAiRCIpJERpZmZlcmVuY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW4oZmlsdGVyKFBlcmZvcm1DaGFuZ2VzLCBgRXhhbSAyIFNjb3JlYCA+PSAwICYgYDI1YCA9PSAiRSIpJERpZmZlcmVuY2UpKSwgZXJyb3IyNWRpZmYpCmNvbG5hbWVzKFBlcmZvcm0yNWRpZmYpIDwtIGMoIkFuc3dlciIsICJEaWZmZXJlbmNlIiwgIkVycm9yIikKYGBgCgpgYGB7ciwgZWNobyA9IEZBTFNFfQpnZ3Bsb3QoUGVyZm9ybTI1ZGlmZiwgYWVzKEFuc3dlciwgRGlmZmVyZW5jZSwgY29sb3IgPSBBbnN3ZXIpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gRGlmZmVyZW5jZSAtIEVycm9yLAogICAgICAgICAgICAgICAgICAgIHltYXggPSBEaWZmZXJlbmNlICsgRXJyb3IpLCB3aWR0aCA9IC4zKSArCiAgZ2d0aXRsZSgiUGVyZm9ybWFuY2UgRGlmZmVyZW5jZXMgYnkgQ2hhbmdlZCBTdHVkeSBTdHJhdGVnaWVzIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIlNldDEiKSArIGxhYnMoY29sb3IgPSAiIikgKwogIHRoZW1lX3B1YgpgYGAK