LS0gJElkOiB0ZXN0ZXMvc3RyaW5ncy5sdWEgJAotLSBTZWUgQ29weXJpZ2h0IE5vdGljZSBpbiBmaWxlIGFsbC5sdWEKCnByaW50KCd0ZXN0aW5nIHN0cmluZ3MgYW5kIHN0cmluZyBsaWJyYXJ5JykKCmxvY2FsIG1heGksIG1pbmkgPSBtYXRoLm1heGludGVnZXIsIG1hdGgubWluaW50ZWdlcgoKCmxvY2FsIGZ1bmN0aW9uIGNoZWNrZXJyb3IgKG1zZywgZiwgLi4uKQogIGxvY2FsIHMsIGVyciA9IHBjYWxsKGYsIC4uLikKICBhc3NlcnQobm90IHMgYW5kIHN0cmluZy5maW5kKGVyciwgbXNnKSkKZW5kCgoKLS0gdGVzdGluZyBzdHJpbmcgY29tcGFyaXNvbnMKYXNzZXJ0KCdhbG8nIDwgJ2FsbzEnKQphc3NlcnQoJycgPCAnYScpCmFzc2VydCgnYWxvXDBhbG8nIDwgJ2Fsb1wwYicpCmFzc2VydCgnYWxvXDBhbG9cMFwwJyA+ICdhbG9cMGFsb1wwJykKYXNzZXJ0KCdhbG8nIDwgJ2Fsb1wwJykKYXNzZXJ0KCdhbG9cMCcgPiAnYWxvJykKYXNzZXJ0KCdcMCcgPCAnXDEnKQphc3NlcnQoJ1wwXDAnIDwgJ1wwXDEnKQphc3NlcnQoJ1wxXDBhXDBhJyA8PSAnXDFcMGFcMGEnKQphc3NlcnQobm90ICgnXDFcMGFcMGInIDw9ICdcMVwwYVwwYScpKQphc3NlcnQoJ1wwXDBcMCcgPCAnXDBcMFwwXDAnKQphc3NlcnQobm90KCdcMFwwXDBcMCcgPCAnXDBcMFwwJykpCmFzc2VydCgnXDBcMFwwJyA8PSAnXDBcMFwwXDAnKQphc3NlcnQobm90KCdcMFwwXDBcMCcgPD0gJ1wwXDBcMCcpKQphc3NlcnQoJ1wwXDBcMCcgPD0gJ1wwXDBcMCcpCmFzc2VydCgnXDBcMFwwJyA+PSAnXDBcMFwwJykKYXNzZXJ0KG5vdCAoJ1wwXDBiJyA8ICdcMFwwYVwwJykpCgotLSB0ZXN0aW5nIHN0cmluZy5zdWIKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsMiw0KSA9PSAiMjM0IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsNykgPT0gIjc4OSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDcsNikgPT0gIiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDcsNykgPT0gIjciKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5IiwwLDApID09ICIiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5IiwtMTAsMTApID09ICIxMjM0NTY3ODkiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5IiwxLDkpID09ICIxMjM0NTY3ODkiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5IiwtMTAsLTIwKSA9PSAiIikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTEpID09ICI5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTQpID09ICI2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTYsIC00KSA9PSAiNDU2IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsIG1pbmksIC00KSA9PSAiMTIzNDU2IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsIG1pbmksIG1heGkpID09ICIxMjM0NTY3ODkiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5IiwgbWluaSwgbWluaSkgPT0gIiIpCmFzc2VydChzdHJpbmcuc3ViKCJcMDAwMTIzNDU2Nzg5IiwzLDUpID09ICIyMzQiKQphc3NlcnQoKCJcMDAwMTIzNDU2Nzg5Iik6c3ViKDgpID09ICI3ODkiKQoKLS0gdGVzdGluZyBzdHJpbmcuZmluZAphc3NlcnQoc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OSIsICIzNDUiKSA9PSAzKQphLGIgPSBzdHJpbmcuZmluZCgiMTIzNDU2Nzg5IiwgIjM0NSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLCBhLCBiKSA9PSAiMzQ1IikKYXNzZXJ0KHN0cmluZy5maW5kKCIxMjM0NTY3ODkwMTIzNDU2Nzg5IiwgIjM0NSIsIDMpID09IDMpCmFzc2VydChzdHJpbmcuZmluZCgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIsICIzNDUiLCA0KSA9PSAxMykKYXNzZXJ0KHN0cmluZy5maW5kKCIxMjM0NTY3ODkwMTIzNDU2Nzg5IiwgIjM0NiIsIDQpID09IG5pbCkKYXNzZXJ0KHN0cmluZy5maW5kKCIxMjM0NTY3ODkwMTIzNDU2Nzg5IiwgIi40NSIsIC05KSA9PSAxMykKYXNzZXJ0KHN0cmluZy5maW5kKCJhYmNkZWZnIiwgIlwwIiwgNSwgMSkgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmZpbmQoIiIsICIiKSA9PSAxKQphc3NlcnQoc3RyaW5nLmZpbmQoIiIsICIiLCAxKSA9PSAxKQphc3NlcnQobm90IHN0cmluZy5maW5kKCIiLCAiIiwgMikpCmFzc2VydChzdHJpbmcuZmluZCgnJywgJ2FhYScsIDEpID09IG5pbCkKYXNzZXJ0KCgnYWxvKC4pYWxvJyk6ZmluZCgnKC4pJywgMSwgMSkgPT0gNCkKCmFzc2VydChzdHJpbmcubGVuKCIiKSA9PSAwKQphc3NlcnQoc3RyaW5nLmxlbigiXDBcMFwwIikgPT0gMykKYXNzZXJ0KHN0cmluZy5sZW4oIjEyMzQ1Njc4OTAiKSA9PSAxMCkKCmFzc2VydCgjIiIgPT0gMCkKYXNzZXJ0KCMiXDBcMFwwIiA9PSAzKQphc3NlcnQoIyIxMjM0NTY3ODkwIiA9PSAxMCkKCi0tIHRlc3Rpbmcgc3RyaW5nLmJ5dGUvc3RyaW5nLmNoYXIKYXNzZXJ0KHN0cmluZy5ieXRlKCJhIikgPT0gOTcpCmFzc2VydChzdHJpbmcuYnl0ZSgiXHhlNCIpID4gMTI3KQphc3NlcnQoc3RyaW5nLmJ5dGUoc3RyaW5nLmNoYXIoMjU1KSkgPT0gMjU1KQphc3NlcnQoc3RyaW5nLmJ5dGUoc3RyaW5nLmNoYXIoMCkpID09IDApCmFzc2VydChzdHJpbmcuYnl0ZSgiXDAiKSA9PSAwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIlwwXDBhbG9cMHgiLCAtMSkgPT0gc3RyaW5nLmJ5dGUoJ3gnKSkKYXNzZXJ0KHN0cmluZy5ieXRlKCJiYSIsIDIpID09IDk3KQphc3NlcnQoc3RyaW5nLmJ5dGUoIlxuXG4iLCAyLCAtMSkgPT0gMTApCmFzc2VydChzdHJpbmcuYnl0ZSgiXG5cbiIsIDIsIDIpID09IDEwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIiIpID09IG5pbCkKYXNzZXJ0KHN0cmluZy5ieXRlKCJoaSIsIC0zKSA9PSBuaWwpCmFzc2VydChzdHJpbmcuYnl0ZSgiaGkiLCAzKSA9PSBuaWwpCmFzc2VydChzdHJpbmcuYnl0ZSgiaGkiLCA5LCAxMCkgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmJ5dGUoImhpIiwgMiwgMSkgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmNoYXIoKSA9PSAiIikKYXNzZXJ0KHN0cmluZy5jaGFyKDAsIDI1NSwgMCkgPT0gIlwwXDI1NVwwIikKYXNzZXJ0KHN0cmluZy5jaGFyKDAsIHN0cmluZy5ieXRlKCJceGU0IiksIDApID09ICJcMFx4ZTRcMCIpCmFzc2VydChzdHJpbmcuY2hhcihzdHJpbmcuYnl0ZSgiXHhlNGxcMPN1IiwgMSwgLTEpKSA9PSAiXHhlNGxcMPN1IikKYXNzZXJ0KHN0cmluZy5jaGFyKHN0cmluZy5ieXRlKCJceGU0bFww83UiLCAxLCAwKSkgPT0gIiIpCmFzc2VydChzdHJpbmcuY2hhcihzdHJpbmcuYnl0ZSgiXHhlNGxcMPN1IiwgLTEwLCAxMDApKSA9PSAiXHhlNGxcMPN1IikKCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCAyNTYpCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCAtMSkKY2hlY2tlcnJvcigib3V0IG9mIHJhbmdlIiwgc3RyaW5nLmNoYXIsIG1hdGgubWF4aW50ZWdlcikKY2hlY2tlcnJvcigib3V0IG9mIHJhbmdlIiwgc3RyaW5nLmNoYXIsIG1hdGgubWluaW50ZWdlcikKCmFzc2VydChzdHJpbmcudXBwZXIoImFiXDBjIikgPT0gIkFCXDBDIikKYXNzZXJ0KHN0cmluZy5sb3dlcigiXDBBQkNjJSQiKSA9PSAiXDBhYmNjJSQiKQphc3NlcnQoc3RyaW5nLnJlcCgndGVzdGUnLCAwKSA9PSAnJykKYXNzZXJ0KHN0cmluZy5yZXAoJ3Tpc1wwMHTqJywgMikgPT0gJ3Tpc1wwdOp06XNcMDAwdOonKQphc3NlcnQoc3RyaW5nLnJlcCgnJywgMTApID09ICcnKQoKaWYgc3RyaW5nLnBhY2tzaXplKCJpIikgPT0gNCB0aGVuCiAgLS0gcmVzdWx0IGxlbmd0aCB3b3VsZCBiZSAyXjMxIChpbnQgb3ZlcmZsb3cpCiAgY2hlY2tlcnJvcigidG9vIGxhcmdlIiwgc3RyaW5nLnJlcCwgJ2FhJywgKDEgPDwgMzApKQogIGNoZWNrZXJyb3IoInRvbyBsYXJnZSIsIHN0cmluZy5yZXAsICdhJywgKDEgPDwgMzApLCAnLCcpCmVuZAoKLS0gcmVwZXRpdGlvbnMgd2l0aCBzZXBhcmF0b3IKYXNzZXJ0KHN0cmluZy5yZXAoJ3Rlc3RlJywgMCwgJ3h1eHUnKSA9PSAnJykKYXNzZXJ0KHN0cmluZy5yZXAoJ3Rlc3RlJywgMSwgJ3h1eHUnKSA9PSAndGVzdGUnKQphc3NlcnQoc3RyaW5nLnJlcCgnXDFcMFwxJywgMiwgJ1wwXDAnKSA9PSAnXDFcMFwxXDBcMFwxXDBcMScpCmFzc2VydChzdHJpbmcucmVwKCcnLCAxMCwgJy4nKSA9PSBzdHJpbmcucmVwKCcuJywgOSkpCmFzc2VydChub3QgcGNhbGwoc3RyaW5nLnJlcCwgImFhIiwgbWF4aSAvLyAyICsgMTApKQphc3NlcnQobm90IHBjYWxsKHN0cmluZy5yZXAsICIiLCBtYXhpIC8vIDIgKyAxMCwgImFhIikpCgphc3NlcnQoc3RyaW5nLnJldmVyc2UiIiA9PSAiIikKYXNzZXJ0KHN0cmluZy5yZXZlcnNlIlwwXDFcMlwzIiA9PSAiXDNcMlwxXDAiKQphc3NlcnQoc3RyaW5nLnJldmVyc2UiXDAwMDEyMzQiID09ICI0MzIxXDAiKQoKZm9yIGk9MCwzMCBkbyBhc3NlcnQoc3RyaW5nLmxlbihzdHJpbmcucmVwKCdhJywgaSkpID09IGkpIGVuZAoKYXNzZXJ0KHR5cGUodG9zdHJpbmcobmlsKSkgPT0gJ3N0cmluZycpCmFzc2VydCh0eXBlKHRvc3RyaW5nKDEyKSkgPT0gJ3N0cmluZycpCmFzc2VydChzdHJpbmcuZmluZCh0b3N0cmluZ3t9LCAndGFibGU6JykpCmFzc2VydChzdHJpbmcuZmluZCh0b3N0cmluZyhwcmludCksICdmdW5jdGlvbjonKSkKYXNzZXJ0KCN0b3N0cmluZygnXDAnKSA9PSAxKQphc3NlcnQodG9zdHJpbmcodHJ1ZSkgPT0gInRydWUiKQphc3NlcnQodG9zdHJpbmcoZmFsc2UpID09ICJmYWxzZSIpCmFzc2VydCh0b3N0cmluZygtMTIwMykgPT0gIi0xMjAzIikKYXNzZXJ0KHRvc3RyaW5nKDEyMDMuMTI1KSA9PSAiMTIwMy4xMjUiKQphc3NlcnQodG9zdHJpbmcoLTAuNSkgPT0gIi0wLjUiKQphc3NlcnQodG9zdHJpbmcoLTMyNzY3KSA9PSAiLTMyNzY3IikKaWYgbWF0aC50b2ludGVnZXIoMjE0NzQ4MzY0NykgdGhlbiAgIC0tIG5vIG92ZXJmbG93PyAoMzIgYml0cykKICBhc3NlcnQodG9zdHJpbmcoLTIxNDc0ODM2NDcpID09ICItMjE0NzQ4MzY0NyIpCmVuZAppZiBtYXRoLnRvaW50ZWdlcig0NjExNjg2MDE4NDI3Mzg3OTA0KSB0aGVuICAgLS0gbm8gb3ZlcmZsb3c/ICg2NCBiaXRzKQogIGFzc2VydCh0b3N0cmluZyg0NjExNjg2MDE4NDI3Mzg3OTA0KSA9PSAiNDYxMTY4NjAxODQyNzM4NzkwNCIpCiAgYXNzZXJ0KHRvc3RyaW5nKC00NjExNjg2MDE4NDI3Mzg3OTA0KSA9PSAiLTQ2MTE2ODYwMTg0MjczODc5MDQiKQplbmQKCmlmIHRvc3RyaW5nKDAuMCkgPT0gIjAuMCIgdGhlbiAgIC0tICJzdGFuZGFyZCIgY29lcmNpb24gZmxvYXQtPnN0cmluZwogIGFzc2VydCgnJyAuLiAxMiA9PSAnMTInIGFuZCAxMi4wIC4uICcnID09ICcxMi4wJykKICBhc3NlcnQodG9zdHJpbmcoLTEyMDMgKyAwLjApID09ICItMTIwMy4wIikKZWxzZSAgIC0tIGNvbXBhdGlibGUgY29lcmNpb24KICBhc3NlcnQodG9zdHJpbmcoMC4wKSA9PSAiMCIpCiAgYXNzZXJ0KCcnIC4uIDEyID09ICcxMicgYW5kIDEyLjAgLi4gJycgPT0gJzEyJykKICBhc3NlcnQodG9zdHJpbmcoLTEyMDMgKyAwLjApID09ICItMTIwMyIpCmVuZAoKZG8gIC0tIHRlc3RzIGZvciAnJXAnIGZvcm1hdAogIC0tIG5vdCBtdWNoIHRvIHRlc3QsIGFzIEMgZG9lcyBub3Qgc3BlY2lmeSB3aGF0ICclcCcgZG9lcy4KICAtLSAoIlRoZSB2YWx1ZSBvZiB0aGUgcG9pbnRlciBpcyBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZSBvZiBwcmludGluZwogIC0tIGNoYXJhY3RlcnMsIGluIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWFubmVyLiIpCiAgbG9jYWwgbnVsbCA9IHN0cmluZy5mb3JtYXQoIiVwIiwgbmlsKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIHt9KSB+PSBudWxsKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIDQpID09IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgcHJpbnQpIH49IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgY29yb3V0aW5lLnJ1bm5pbmcoKSkgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCB7fSkgfj0gc3RyaW5nLmZvcm1hdCgiJXAiLCB7fSkpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgc3RyaW5nLnJlcCgiYSIsIDEwKSkgPT0KICAgICAgICAgc3RyaW5nLmZvcm1hdCgiJXAiLCBzdHJpbmcucmVwKCJhIiwgMTApKSkgICAgIC0tIHNob3J0IHN0cmluZ3MKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBzdHJpbmcucmVwKCJhIiwgMzAwKSkgfj0KICAgICAgICAgc3RyaW5nLmZvcm1hdCgiJXAiLCBzdHJpbmcucmVwKCJhIiwgMzAwKSkpICAgICAtLSBsb25nIHN0cmluZ3MKICBhc3NlcnQoI3N0cmluZy5mb3JtYXQoIiU5MHAiLCB7fSkgPT0gOTApCmVuZAoKeCA9ICci7WxvIlxuXFwnCmFzc2VydChzdHJpbmcuZm9ybWF0KCclcSVzJywgeCwgeCkgPT0gJyJcXCLtbG9cXCJcXFxuXFxcXCIi7WxvIlxuXFwnKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgnJXEnLCAiXDAiKSA9PSBbWyJcMCJdXSkKYXNzZXJ0KGxvYWQoc3RyaW5nLmZvcm1hdCgncmV0dXJuICVxJywgeCkpKCkgPT0geCkKeCA9ICJcMFwxXDAwMjNcNVwwMDA5Igphc3NlcnQobG9hZChzdHJpbmcuZm9ybWF0KCdyZXR1cm4gJXEnLCB4KSkoKSA9PSB4KQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiXDAlY1wwJWMleFwwIiwgc3RyaW5nLmJ5dGUoIlx4ZTQiKSwgc3RyaW5nLmJ5dGUoImIiKSwgMTQwKSA9PQogICAgICAgICAgICAgICJcMFx4ZTRcMGI4Y1wwIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoJycpID09ICIiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJWMiLDM0KS4uc3RyaW5nLmZvcm1hdCgiJWMiLDQ4KS4uc3RyaW5nLmZvcm1hdCgiJWMiLDkwKS4uc3RyaW5nLmZvcm1hdCgiJWMiLDEwMCkgPT0KICAgICAgIHN0cmluZy5mb3JtYXQoIiVjJWMlYyVjIiwgMzQsIDQ4LCA5MCwgMTAwKSkKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzXDAgaXMgbm90IFwwJXMiLCAnbm90IGJlJywgJ2JlJykgPT0gJ25vdCBiZVwwIGlzIG5vdCBcMGJlJykKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUlJWQgJTAxMGQiLCAxMCwgMjMpID09ICIlMTAgMDAwMDAwMDAyMyIpCmFzc2VydCh0b251bWJlcihzdHJpbmcuZm9ybWF0KCIlZiIsIDEwLjMpKSA9PSAxMC4zKQp4ID0gc3RyaW5nLmZvcm1hdCgnIiUtNTBzIicsICdhJykKYXNzZXJ0KCN4ID09IDUyKQphc3NlcnQoc3RyaW5nLnN1Yih4LCAxLCA0KSA9PSAnImEgICcpCgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiLSUuMjBzLjIwcyIsIHN0cmluZy5yZXAoIiUiLCAyMDAwKSkgPT0KICAgICAgICAgICAgICAgICAgICAgIi0iLi5zdHJpbmcucmVwKCIlIiwgMjApLi4iLjIwcyIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCciLSUyMHMuMjBzIicsIHN0cmluZy5yZXAoIiUiLCAyMDAwKSkgPT0KICAgICAgIHN0cmluZy5mb3JtYXQoIiVxIiwgIi0iLi5zdHJpbmcucmVwKCIlIiwgMjAwMCkuLiIuMjBzIikpCgpkbwogIGxvY2FsIGZ1bmN0aW9uIGNoZWNrUSAodikKICAgIGxvY2FsIHMgPSBzdHJpbmcuZm9ybWF0KCIlcSIsIHYpCiAgICBsb2NhbCBudiA9IGxvYWQoInJldHVybiAiIC4uIHMpKCkKICAgIGFzc2VydCh2ID09IG52IGFuZCBtYXRoLnR5cGUodikgPT0gbWF0aC50eXBlKG52KSkKICBlbmQKICBjaGVja1EoIlwwXDBcMVwyNTVcdXsyMzR9IikKICBjaGVja1EobWF0aC5tYXhpbnRlZ2VyKQogIGNoZWNrUShtYXRoLm1pbmludGVnZXIpCiAgY2hlY2tRKG1hdGgucGkpCiAgY2hlY2tRKDAuMSkKICBjaGVja1EodHJ1ZSkKICBjaGVja1EobmlsKQogIGNoZWNrUShmYWxzZSkKICBjaGVja1EobWF0aC5odWdlKQogIGNoZWNrUSgtbWF0aC5odWdlKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcSIsIDAvMCkgPT0gIigwLzApIikgICAtLSBOYU4KICBjaGVja2Vycm9yKCJubyBsaXRlcmFsIiwgc3RyaW5nLmZvcm1hdCwgIiVxIiwge30pCmVuZAoKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIlwwJXNcMCIsICJcMFwwXDEiKSA9PSAiXDBcMFwwXDFcMCIpCmNoZWNrZXJyb3IoImNvbnRhaW5zIHplcm9zIiwgc3RyaW5nLmZvcm1hdCwgIiUxMHMiLCAiXDAiKQpjaGVja2Vycm9yKCJjYW5ub3QgaGF2ZSBtb2RpZmllcnMiLCBzdHJpbmcuZm9ybWF0LCAiJTEwcSIsICIxIikKCi0tIGZvcm1hdCB4IHRvc3RyaW5nCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlcyAlcyIsIG5pbCwgdHJ1ZSkgPT0gIm5pbCB0cnVlIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzICUuNHMiLCBmYWxzZSwgdHJ1ZSkgPT0gImZhbHNlIHRydWUiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJS4zcyAlLjNzIiwgZmFsc2UsIHRydWUpID09ICJmYWwgdHJ1IikKbG9jYWwgbSA9IHNldG1ldGF0YWJsZSh7fSwge19fdG9zdHJpbmcgPSBmdW5jdGlvbiAoKSByZXR1cm4gImhlbGxvIiBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25hbWUgPSAiaGkifSkKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzICUuMTBzIiwgbSwgbSkgPT0gImhlbGxvIGhlbGxvIikKZ2V0bWV0YXRhYmxlKG0pLl9fdG9zdHJpbmcgPSBuaWwgICAtLSB3aWxsIHVzZSAnX19uYW1lJyBmcm9tIG5vdyBvbgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJS40cyIsIG0pID09ICJoaTogIikKCmdldG1ldGF0YWJsZShtKS5fX3Rvc3RyaW5nID0gZnVuY3Rpb24gKCkgcmV0dXJuIHt9IGVuZApjaGVja2Vycm9yKCInX190b3N0cmluZycgbXVzdCByZXR1cm4gYSBzdHJpbmciLCB0b3N0cmluZywgbSkKCgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCAwLjApID09ICIwIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUwMngiLCAwLjApID09ICIwMCIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlMDhYIiwgMHhGRkZGRkZGRikgPT0gIkZGRkZGRkZGIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUrMDhkIiwgMzE1MDEpID09ICIrMDAzMTUwMSIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlKzA4ZCIsIC0zMDkyNykgPT0gIi0wMDMwOTI3IikKCgpkbyAgICAtLSBsb25nZXN0IG51bWJlciB0aGF0IGNhbiBiZSBmb3JtYXR0ZWQKICBsb2NhbCBpID0gMQogIGxvY2FsIGogPSAxMDAwMAogIHdoaWxlIGkgKyAxIDwgaiBkbyAgIC0tIGJpbmFyeSBzZWFyY2ggZm9yIG1heGltdW0gZmluaXRlIGZsb2F0CiAgICBsb2NhbCBtID0gKGkgKyBqKSAvLyAyCiAgICBpZiAxMF5tIDwgbWF0aC5odWdlIHRoZW4gaSA9IG0gZWxzZSBqID0gbSBlbmQKICBlbmQKICBhc3NlcnQoMTBeaSA8IG1hdGguaHVnZSBhbmQgMTBeaiA9PSBtYXRoLmh1Z2UpCiAgbG9jYWwgcyA9IHN0cmluZy5mb3JtYXQoJyUuOTlmJywgLSgxMF5pKSkKICBhc3NlcnQoc3RyaW5nLmxlbihzKSA+PSBpICsgMTAxKQogIGFzc2VydCh0b251bWJlcihzKSA9PSAtKDEwXmkpKQplbmQKCgotLSB0ZXN0aW5nIGxhcmdlIG51bWJlcnMgZm9yIGZvcm1hdApkbyAgIC0tIGFzc3VtZSBhdCBsZWFzdCAzMiBiaXRzCiAgbG9jYWwgbWF4LCBtaW4gPSAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCAgICAtLSAibGFyZ2UiIGZvciAzMiBiaXRzCiAgYXNzZXJ0KHN0cmluZy5zdWIoc3RyaW5nLmZvcm1hdCgiJTh4IiwgLTEpLCAtOCkgPT0gImZmZmZmZmZmIikKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCBtYXgpID09ICI3ZmZmZmZmZiIpCiAgYXNzZXJ0KHN0cmluZy5zdWIoc3RyaW5nLmZvcm1hdCgiJXgiLCBtaW4pLCAtOCkgPT0gIjgwMDAwMDAwIikKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJWQiLCBtYXgpID09ICAiMjE0NzQ4MzY0NyIpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgbWluKSA9PSAiLTIxNDc0ODM2NDgiKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIldSIsIDB4ZmZmZmZmZmYpID09ICI0Mjk0OTY3Mjk1IikKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJW8iLCAweEFCQ0QpID09ICIxMjU3MTUiKQoKICBtYXgsIG1pbiA9IDB4N2ZmZmZmZmZmZmZmZmZmZiwgLTB4ODAwMDAwMDAwMDAwMDAwMAogIGlmIG1heCA+IDIuMF41MyB0aGVuICAtLSBvbmx5IGZvciA2NCBiaXRzCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCAoMl41MiB8IDApIC0gMSkgPT0gImZmZmZmZmZmZmZmZmYiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIjB4JThYIiwgMHg4ZjAwMDAwMykgPT0gIjB4OEYwMDAwMDMiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgMl41MykgPT0gIjkwMDcxOTkyNTQ3NDA5OTIiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVpIiwgLTJeNTMpID09ICItOTAwNzE5OTI1NDc0MDk5MiIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXgiLCBtYXgpID09ICI3ZmZmZmZmZmZmZmZmZmZmIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIleCIsIG1pbikgPT0gIjgwMDAwMDAwMDAwMDAwMDAiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgbWF4KSA9PSAgIjkyMjMzNzIwMzY4NTQ3NzU4MDciKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVkIiwgbWluKSA9PSAiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV1IiwgfigtMSA8PCA2NCkpID09ICIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpCiAgICBhc3NlcnQodG9zdHJpbmcoMTIzNDU2Nzg5MDEyMykgPT0gJzEyMzQ1Njc4OTAxMjMnKQogIGVuZAplbmQKCgpkbyBwcmludCgidGVzdGluZyAnZm9ybWF0ICVhICVBJyIpCiAgbG9jYWwgZnVuY3Rpb24gbWF0Y2hoZXhhIChuKQogICAgbG9jYWwgcyA9IHN0cmluZy5mb3JtYXQoIiVhIiwgbikKICAgIC0tIHJlc3VsdCBtYXRjaGVzIElTTyBDIHJlcXVpcmVtZW50cwogICAgYXNzZXJ0KHN0cmluZy5maW5kKHMsICJeJS0/MHhbMS05YS1mXSUuP1swLTlhLWZdKnBbLStdPyVkKyQiKSkKICAgIGFzc2VydCh0b251bWJlcihzKSA9PSBuKSAgLS0gYW5kIGhhcyBmdWxsIHByZWNpc2lvbgogICAgcyA9IHN0cmluZy5mb3JtYXQoIiVBIiwgbikKICAgIGFzc2VydChzdHJpbmcuZmluZChzLCAiXiUtPzBYWzEtOUEtRl0lLj9bMC05QS1GXSpQWy0rXT8lZCskIikpCiAgICBhc3NlcnQodG9udW1iZXIocykgPT0gbikKICBlbmQKICBmb3IgXywgbiBpbiBpcGFpcnN7MC4xLCAtMC4xLCAxLzMsIC0xLzMsIDFlMzAsIC0xZTMwLAogICAgICAgICAgICAgICAgICAgICAtNDUvMjQ3LCAxLCAtMSwgMiwgLTIsIDNlLTIwLCAtM2UtMjB9IGRvCiAgICBtYXRjaGhleGEobikKICBlbmQKCiAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVBIiwgMC4wKSwgIl4wWDAlLj8wP1AlKz8wJCIpKQogIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlYSIsIC0wLjApLCAiXiUtMHgwJS4/MD9wJSs/MCQiKSkKCiAgaWYgbm90IF9wb3J0IHRoZW4gICAtLSB0ZXN0IGluZiwgLWluZiwgTmFOLCBhbmQgLTAuMAogICAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVhIiwgMS8wKSwgIl5pbmYiKSkKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlQSIsIC0xLzApLCAiXiUtSU5GIikpCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJWEiLCAwLzApLCAiXiUtP25hbiIpKQogICAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVhIiwgLTAuMCksICJeJS0weDAiKSkKICBlbmQKICAKICBpZiBub3QgcGNhbGwoc3RyaW5nLmZvcm1hdCwgIiUuM2EiLCAwKSB0aGVuCiAgICAoTWVzc2FnZSBvciBwcmludCkoIlxuID4+PiBtb2RpZmllcnMgZm9yIGZvcm1hdCAnJWEnIG5vdCBhdmFpbGFibGUgPDw8XG4iKQogIGVsc2UKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlKy4yQSIsIDEyKSwgIl4lKzBYJXglLiV4MFAlKz8lZCQiKSkKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlLjRBIiwgLTEyKSwgIl4lLTBYJXglLiV4MDAwUCUrPyVkJCIpKQogIGVuZAplbmQKCgotLSBlcnJvcnMgaW4gZm9ybWF0Cgpsb2NhbCBmdW5jdGlvbiBjaGVjayAoZm10LCBtc2cpCiAgY2hlY2tlcnJvcihtc2csIHN0cmluZy5mb3JtYXQsIGZtdCwgMTApCmVuZAoKbG9jYWwgYXV4ID0gc3RyaW5nLnJlcCgnMCcsIDYwMCkKY2hlY2soIiUxMDAuM2QiLCAidG9vIGxvbmciKQpjaGVjaygiJTEiLi5hdXguLiIuM2QiLCAidG9vIGxvbmciKQpjaGVjaygiJTEuMTAwZCIsICJ0b28gbG9uZyIpCmNoZWNrKCIlMTAuMSIuLmF1eC4uIjAwNGQiLCAidG9vIGxvbmciKQpjaGVjaygiJXQiLCAiaW52YWxpZCBjb252ZXJzaW9uIikKY2hlY2soIiUiLi5hdXguLiJkIiwgInJlcGVhdGVkIGZsYWdzIikKY2hlY2soIiVkICVkIiwgIm5vIHZhbHVlIikKCgphc3NlcnQobG9hZCgicmV0dXJuIDFcbi0tY29tbWVudCB3aXRob3V0IGVuZGluZyBFT0wiKSgpID09IDEpCgoKY2hlY2tlcnJvcigidGFibGUgZXhwZWN0ZWQiLCB0YWJsZS5jb25jYXQsIDMpCmFzc2VydCh0YWJsZS5jb25jYXR7fSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7fSwgJ3gnKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7J1wwJywgJ1wwXDEnLCAnXDBcMVwyJ30sICcuXDAuJykgPT0gIlwwLlwwLlwwXDEuXDAuXDBcMVwyIikKbG9jYWwgYSA9IHt9OyBmb3IgaT0xLDMwMCBkbyBhW2ldID0gInh1eHUiIGVuZAphc3NlcnQodGFibGUuY29uY2F0KGEsICIxMjMiKS4uIjEyMyIgPT0gc3RyaW5nLnJlcCgieHV4dTEyMyIsIDMwMCkpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgImIiLCAyMCwgMjApID09ICJ4dXh1IikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiIiwgMjAsIDIxKSA9PSAieHV4dXh1eHUiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICJ4IiwgMjIsIDIxKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiMyIsIDI5OSkgPT0gInh1eHUzeHV4dSIpCmFzc2VydCh0YWJsZS5jb25jYXQoe30sICJ4IiwgbWF4aSwgbWF4aSAtIDEpID09ICIiKQphc3NlcnQodGFibGUuY29uY2F0KHt9LCAieCIsIG1pbmkgKyAxLCBtaW5pKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7fSwgIngiLCBtYXhpLCBtaW5pKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7W21heGldID0gImFsbyJ9LCAieCIsIG1heGksIG1heGkpID09ICJhbG8iKQphc3NlcnQodGFibGUuY29uY2F0KHtbbWF4aV0gPSAiYWxvIiwgW21heGkgLSAxXSA9ICJ5In0sICItIiwgbWF4aSAtIDEsIG1heGkpCiAgICAgICA9PSAieS1hbG8iKQoKYXNzZXJ0KG5vdCBwY2FsbCh0YWJsZS5jb25jYXQsIHsiYSIsICJiIiwge319KSkKCmEgPSB7ImEiLCJiIiwiYyJ9CmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCAxLCAwKSA9PSAiIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDEsIDEpID09ICJhIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDEsIDIpID09ICJhLGIiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICIsIiwgMikgPT0gImIsYyIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCAzKSA9PSAiYyIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCA0KSA9PSAiIikKCmlmIG5vdCBfcG9ydCB0aGVuCgogIGxvY2FsIGxvY2FsZXMgPSB7ICJwdGIiLCAicHRfQlIuaXNvODg1OTEiLCAiSVNPLTg4NTktMSIgfQogIGxvY2FsIGZ1bmN0aW9uIHRyeWxvY2FsZSAodykKICAgIGZvciBpID0gMSwgI2xvY2FsZXMgZG8KICAgICAgaWYgb3Muc2V0bG9jYWxlKGxvY2FsZXNbaV0sIHcpIHRoZW4KICAgICAgICBwcmludChzdHJpbmcuZm9ybWF0KCInJXMnIGxvY2FsZSBzZXQgdG8gJyVzJyIsIHcsIGxvY2FsZXNbaV0pKQogICAgICAgIHJldHVybiBsb2NhbGVzW2ldCiAgICAgIGVuZAogICAgZW5kCiAgICBwcmludChzdHJpbmcuZm9ybWF0KCInJXMnIGxvY2FsZSBub3QgZm91bmQiLCB3KSkKICAgIHJldHVybiBmYWxzZQogIGVuZAoKICBpZiB0cnlsb2NhbGUoImNvbGxhdGUiKSAgdGhlbgogICAgYXNzZXJ0KCJhbG8iIDwgIuFsbyIgYW5kICLhbG8iIDwgImFtbyIpCiAgZW5kCgogIGlmIHRyeWxvY2FsZSgiY3R5cGUiKSB0aGVuCiAgICBhc3NlcnQoc3RyaW5nLmdzdWIoIuHp7fP6IiwgIiVhIiwgIngiKSA9PSAieHh4eHgiKQogICAgYXNzZXJ0KHN0cmluZy5nc3ViKCLhwenJIiwgIiVsIiwgIngiKSA9PSAieMF4ySIpCiAgICBhc3NlcnQoc3RyaW5nLmdzdWIoIuHB6ckiLCAiJXUiLCAieCIpID09ICLheOl4IikKICAgIGFzc2VydChzdHJpbmcudXBwZXIi4cHpe3h1eHV95+NvIiA9PSAiwcHJe1hVWFV9x8NPIikKICBlbmQKCiAgb3Muc2V0bG9jYWxlKCJDIikKICBhc3NlcnQob3Muc2V0bG9jYWxlKCkgPT0gJ0MnKQogIGFzc2VydChvcy5zZXRsb2NhbGUobmlsLCAibnVtZXJpYyIpID09ICdDJykKCmVuZAoKCi0tIGJ1ZyBpbiBMdWEgNS4zLjIKLS0gJ2dtYXRjaCcgaXRlcmF0b3IgZG9lcyBub3Qgd29yayBhY3Jvc3MgY29yb3V0aW5lcwpkbwogIGxvY2FsIGYgPSBzdHJpbmcuZ21hdGNoKCIxIDIgMyA0IDUiLCAiJWQrIikKICBhc3NlcnQoZigpID09ICIxIikKICBjbyA9IGNvcm91dGluZS53cmFwKGYpCiAgYXNzZXJ0KGNvKCkgPT0gIjIiKQplbmQKCnByaW50KCdPSycpCgo=