LS0gJElkOiB0ZXN0ZXMvc3RyaW5ncy5sdWEgJAotLSBTZWUgQ29weXJpZ2h0IE5vdGljZSBpbiBmaWxlIGFsbC5sdWEKCnByaW50KCd0ZXN0aW5nIHN0cmluZ3MgYW5kIHN0cmluZyBsaWJyYXJ5JykKCmxvY2FsIG1heGkgPGNvbnN0PiA9IG1hdGgubWF4aW50ZWdlcgpsb2NhbCBtaW5pIDxjb25zdD4gPSBtYXRoLm1pbmludGVnZXIKCgpsb2NhbCBmdW5jdGlvbiBjaGVja2Vycm9yIChtc2csIGYsIC4uLikKICBsb2NhbCBzLCBlcnIgPSBwY2FsbChmLCAuLi4pCiAgYXNzZXJ0KG5vdCBzIGFuZCBzdHJpbmcuZmluZChlcnIsIG1zZykpCmVuZAoKCi0tIHRlc3Rpbmcgc3RyaW5nIGNvbXBhcmlzb25zCmFzc2VydCgnYWxvJyA8ICdhbG8xJykKYXNzZXJ0KCcnIDwgJ2EnKQphc3NlcnQoJ2Fsb1wwYWxvJyA8ICdhbG9cMGInKQphc3NlcnQoJ2Fsb1wwYWxvXDBcMCcgPiAnYWxvXDBhbG9cMCcpCmFzc2VydCgnYWxvJyA8ICdhbG9cMCcpCmFzc2VydCgnYWxvXDAnID4gJ2FsbycpCmFzc2VydCgnXDAnIDwgJ1wxJykKYXNzZXJ0KCdcMFwwJyA8ICdcMFwxJykKYXNzZXJ0KCdcMVwwYVwwYScgPD0gJ1wxXDBhXDBhJykKYXNzZXJ0KG5vdCAoJ1wxXDBhXDBiJyA8PSAnXDFcMGFcMGEnKSkKYXNzZXJ0KCdcMFwwXDAnIDwgJ1wwXDBcMFwwJykKYXNzZXJ0KG5vdCgnXDBcMFwwXDAnIDwgJ1wwXDBcMCcpKQphc3NlcnQoJ1wwXDBcMCcgPD0gJ1wwXDBcMFwwJykKYXNzZXJ0KG5vdCgnXDBcMFwwXDAnIDw9ICdcMFwwXDAnKSkKYXNzZXJ0KCdcMFwwXDAnIDw9ICdcMFwwXDAnKQphc3NlcnQoJ1wwXDBcMCcgPj0gJ1wwXDBcMCcpCmFzc2VydChub3QgKCdcMFwwYicgPCAnXDBcMGFcMCcpKQoKLS0gdGVzdGluZyBzdHJpbmcuc3ViCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDIsNCkgPT0gIjIzNCIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLDcpID09ICI3ODkiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5Iiw3LDYpID09ICIiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5Iiw3LDcpID09ICI3IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsMCwwKSA9PSAiIikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTEwLDEwKSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsMSw5KSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsLTEwLC0yMCkgPT0gIiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC0xKSA9PSAiOSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC00KSA9PSAiNjc4OSIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLC02LCAtNCkgPT0gIjQ1NiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLCBtaW5pLCAtNCkgPT0gIjEyMzQ1NiIpCmFzc2VydChzdHJpbmcuc3ViKCIxMjM0NTY3ODkiLCBtaW5pLCBtYXhpKSA9PSAiMTIzNDU2Nzg5IikKYXNzZXJ0KHN0cmluZy5zdWIoIjEyMzQ1Njc4OSIsIG1pbmksIG1pbmkpID09ICIiKQphc3NlcnQoc3RyaW5nLnN1YigiXDAwMDEyMzQ1Njc4OSIsMyw1KSA9PSAiMjM0IikKYXNzZXJ0KCgiXDAwMDEyMzQ1Njc4OSIpOnN1Yig4KSA9PSAiNzg5IikKCi0tIHRlc3Rpbmcgc3RyaW5nLmZpbmQKYXNzZXJ0KHN0cmluZy5maW5kKCIxMjM0NTY3ODkiLCAiMzQ1IikgPT0gMykKYSxiID0gc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OSIsICIzNDUiKQphc3NlcnQoc3RyaW5nLnN1YigiMTIzNDU2Nzg5IiwgYSwgYikgPT0gIjM0NSIpCmFzc2VydChzdHJpbmcuZmluZCgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIsICIzNDUiLCAzKSA9PSAzKQphc3NlcnQoc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OTAxMjM0NTY3ODkiLCAiMzQ1IiwgNCkgPT0gMTMpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoIjEyMzQ1Njc4OTAxMjM0NTY3ODkiLCAiMzQ2IiwgNCkpCmFzc2VydChzdHJpbmcuZmluZCgiMTIzNDU2Nzg5MDEyMzQ1Njc4OSIsICIuNDUiLCAtOSkgPT0gMTMpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoImFiY2RlZmciLCAiXDAiLCA1LCAxKSkKYXNzZXJ0KHN0cmluZy5maW5kKCIiLCAiIikgPT0gMSkKYXNzZXJ0KHN0cmluZy5maW5kKCIiLCAiIiwgMSkgPT0gMSkKYXNzZXJ0KG5vdCBzdHJpbmcuZmluZCgiIiwgIiIsIDIpKQphc3NlcnQobm90IHN0cmluZy5maW5kKCcnLCAnYWFhJywgMSkpCmFzc2VydCgoJ2FsbyguKWFsbycpOmZpbmQoJyguKScsIDEsIDEpID09IDQpCgphc3NlcnQoc3RyaW5nLmxlbigiIikgPT0gMCkKYXNzZXJ0KHN0cmluZy5sZW4oIlwwXDBcMCIpID09IDMpCmFzc2VydChzdHJpbmcubGVuKCIxMjM0NTY3ODkwIikgPT0gMTApCgphc3NlcnQoIyIiID09IDApCmFzc2VydCgjIlwwXDBcMCIgPT0gMykKYXNzZXJ0KCMiMTIzNDU2Nzg5MCIgPT0gMTApCgotLSB0ZXN0aW5nIHN0cmluZy5ieXRlL3N0cmluZy5jaGFyCmFzc2VydChzdHJpbmcuYnl0ZSgiYSIpID09IDk3KQphc3NlcnQoc3RyaW5nLmJ5dGUoIlx4ZTQiKSA+IDEyNykKYXNzZXJ0KHN0cmluZy5ieXRlKHN0cmluZy5jaGFyKDI1NSkpID09IDI1NSkKYXNzZXJ0KHN0cmluZy5ieXRlKHN0cmluZy5jaGFyKDApKSA9PSAwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIlwwIikgPT0gMCkKYXNzZXJ0KHN0cmluZy5ieXRlKCJcMFwwYWxvXDB4IiwgLTEpID09IHN0cmluZy5ieXRlKCd4JykpCmFzc2VydChzdHJpbmcuYnl0ZSgiYmEiLCAyKSA9PSA5NykKYXNzZXJ0KHN0cmluZy5ieXRlKCJcblxuIiwgMiwgLTEpID09IDEwKQphc3NlcnQoc3RyaW5nLmJ5dGUoIlxuXG4iLCAyLCAyKSA9PSAxMCkKYXNzZXJ0KHN0cmluZy5ieXRlKCIiKSA9PSBuaWwpCmFzc2VydChzdHJpbmcuYnl0ZSgiaGkiLCAtMykgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmJ5dGUoImhpIiwgMykgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmJ5dGUoImhpIiwgOSwgMTApID09IG5pbCkKYXNzZXJ0KHN0cmluZy5ieXRlKCJoaSIsIDIsIDEpID09IG5pbCkKYXNzZXJ0KHN0cmluZy5jaGFyKCkgPT0gIiIpCmFzc2VydChzdHJpbmcuY2hhcigwLCAyNTUsIDApID09ICJcMFwyNTVcMCIpCmFzc2VydChzdHJpbmcuY2hhcigwLCBzdHJpbmcuYnl0ZSgiXHhlNCIpLCAwKSA9PSAiXDBceGU0XDAiKQphc3NlcnQoc3RyaW5nLmNoYXIoc3RyaW5nLmJ5dGUoIlx4ZTRsXDDzdSIsIDEsIC0xKSkgPT0gIlx4ZTRsXDDzdSIpCmFzc2VydChzdHJpbmcuY2hhcihzdHJpbmcuYnl0ZSgiXHhlNGxcMPN1IiwgMSwgMCkpID09ICIiKQphc3NlcnQoc3RyaW5nLmNoYXIoc3RyaW5nLmJ5dGUoIlx4ZTRsXDDzdSIsIC0xMCwgMTAwKSkgPT0gIlx4ZTRsXDDzdSIpCgpjaGVja2Vycm9yKCJvdXQgb2YgcmFuZ2UiLCBzdHJpbmcuY2hhciwgMjU2KQpjaGVja2Vycm9yKCJvdXQgb2YgcmFuZ2UiLCBzdHJpbmcuY2hhciwgLTEpCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCBtYXRoLm1heGludGVnZXIpCmNoZWNrZXJyb3IoIm91dCBvZiByYW5nZSIsIHN0cmluZy5jaGFyLCBtYXRoLm1pbmludGVnZXIpCgphc3NlcnQoc3RyaW5nLnVwcGVyKCJhYlwwYyIpID09ICJBQlwwQyIpCmFzc2VydChzdHJpbmcubG93ZXIoIlwwQUJDYyUkIikgPT0gIlwwYWJjYyUkIikKYXNzZXJ0KHN0cmluZy5yZXAoJ3Rlc3RlJywgMCkgPT0gJycpCmFzc2VydChzdHJpbmcucmVwKCd06XNcMDB06icsIDIpID09ICd06XNcMHTqdOlzXDAwMHTqJykKYXNzZXJ0KHN0cmluZy5yZXAoJycsIDEwKSA9PSAnJykKCmlmIHN0cmluZy5wYWNrc2l6ZSgiaSIpID09IDQgdGhlbgogIC0tIHJlc3VsdCBsZW5ndGggd291bGQgYmUgMl4zMSAoaW50IG92ZXJmbG93KQogIGNoZWNrZXJyb3IoInRvbyBsYXJnZSIsIHN0cmluZy5yZXAsICdhYScsICgxIDw8IDMwKSkKICBjaGVja2Vycm9yKCJ0b28gbGFyZ2UiLCBzdHJpbmcucmVwLCAnYScsICgxIDw8IDMwKSwgJywnKQplbmQKCi0tIHJlcGV0aXRpb25zIHdpdGggc2VwYXJhdG9yCmFzc2VydChzdHJpbmcucmVwKCd0ZXN0ZScsIDAsICd4dXh1JykgPT0gJycpCmFzc2VydChzdHJpbmcucmVwKCd0ZXN0ZScsIDEsICd4dXh1JykgPT0gJ3Rlc3RlJykKYXNzZXJ0KHN0cmluZy5yZXAoJ1wxXDBcMScsIDIsICdcMFwwJykgPT0gJ1wxXDBcMVwwXDBcMVwwXDEnKQphc3NlcnQoc3RyaW5nLnJlcCgnJywgMTAsICcuJykgPT0gc3RyaW5nLnJlcCgnLicsIDkpKQphc3NlcnQobm90IHBjYWxsKHN0cmluZy5yZXAsICJhYSIsIG1heGkgLy8gMiArIDEwKSkKYXNzZXJ0KG5vdCBwY2FsbChzdHJpbmcucmVwLCAiIiwgbWF4aSAvLyAyICsgMTAsICJhYSIpKQoKYXNzZXJ0KHN0cmluZy5yZXZlcnNlIiIgPT0gIiIpCmFzc2VydChzdHJpbmcucmV2ZXJzZSJcMFwxXDJcMyIgPT0gIlwzXDJcMVwwIikKYXNzZXJ0KHN0cmluZy5yZXZlcnNlIlwwMDAxMjM0IiA9PSAiNDMyMVwwIikKCmZvciBpPTAsMzAgZG8gYXNzZXJ0KHN0cmluZy5sZW4oc3RyaW5nLnJlcCgnYScsIGkpKSA9PSBpKSBlbmQKCmFzc2VydCh0eXBlKHRvc3RyaW5nKG5pbCkpID09ICdzdHJpbmcnKQphc3NlcnQodHlwZSh0b3N0cmluZygxMikpID09ICdzdHJpbmcnKQphc3NlcnQoc3RyaW5nLmZpbmQodG9zdHJpbmd7fSwgJ3RhYmxlOicpKQphc3NlcnQoc3RyaW5nLmZpbmQodG9zdHJpbmcocHJpbnQpLCAnZnVuY3Rpb246JykpCmFzc2VydCgjdG9zdHJpbmcoJ1wwJykgPT0gMSkKYXNzZXJ0KHRvc3RyaW5nKHRydWUpID09ICJ0cnVlIikKYXNzZXJ0KHRvc3RyaW5nKGZhbHNlKSA9PSAiZmFsc2UiKQphc3NlcnQodG9zdHJpbmcoLTEyMDMpID09ICItMTIwMyIpCmFzc2VydCh0b3N0cmluZygxMjAzLjEyNSkgPT0gIjEyMDMuMTI1IikKYXNzZXJ0KHRvc3RyaW5nKC0wLjUpID09ICItMC41IikKYXNzZXJ0KHRvc3RyaW5nKC0zMjc2NykgPT0gIi0zMjc2NyIpCmlmIG1hdGgudG9pbnRlZ2VyKDIxNDc0ODM2NDcpIHRoZW4gICAtLSBubyBvdmVyZmxvdz8gKDMyIGJpdHMpCiAgYXNzZXJ0KHRvc3RyaW5nKC0yMTQ3NDgzNjQ3KSA9PSAiLTIxNDc0ODM2NDciKQplbmQKaWYgbWF0aC50b2ludGVnZXIoNDYxMTY4NjAxODQyNzM4NzkwNCkgdGhlbiAgIC0tIG5vIG92ZXJmbG93PyAoNjQgYml0cykKICBhc3NlcnQodG9zdHJpbmcoNDYxMTY4NjAxODQyNzM4NzkwNCkgPT0gIjQ2MTE2ODYwMTg0MjczODc5MDQiKQogIGFzc2VydCh0b3N0cmluZygtNDYxMTY4NjAxODQyNzM4NzkwNCkgPT0gIi00NjExNjg2MDE4NDI3Mzg3OTA0IikKZW5kCgppZiB0b3N0cmluZygwLjApID09ICIwLjAiIHRoZW4gICAtLSAic3RhbmRhcmQiIGNvZXJjaW9uIGZsb2F0LT5zdHJpbmcKICBhc3NlcnQoJycgLi4gMTIgPT0gJzEyJyBhbmQgMTIuMCAuLiAnJyA9PSAnMTIuMCcpCiAgYXNzZXJ0KHRvc3RyaW5nKC0xMjAzICsgMC4wKSA9PSAiLTEyMDMuMCIpCmVsc2UgICAtLSBjb21wYXRpYmxlIGNvZXJjaW9uCiAgYXNzZXJ0KHRvc3RyaW5nKDAuMCkgPT0gIjAiKQogIGFzc2VydCgnJyAuLiAxMiA9PSAnMTInIGFuZCAxMi4wIC4uICcnID09ICcxMicpCiAgYXNzZXJ0KHRvc3RyaW5nKC0xMjAzICsgMC4wKSA9PSAiLTEyMDMiKQplbmQKCmRvICAtLSB0ZXN0cyBmb3IgJyVwJyBmb3JtYXQKICAtLSBub3QgbXVjaCB0byB0ZXN0LCBhcyBDIGRvZXMgbm90IHNwZWNpZnkgd2hhdCAnJXAnIGRvZXMuCiAgLS0gKCJUaGUgdmFsdWUgb2YgdGhlIHBvaW50ZXIgaXMgY29udmVydGVkIHRvIGEgc2VxdWVuY2Ugb2YgcHJpbnRpbmcKICAtLSBjaGFyYWN0ZXJzLCBpbiBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIG1hbm5lci4iKQogIGxvY2FsIG51bGwgPSAiKG51bGwpIiAgICAtLSBudWxscyBhcmUgZm9ybWF0dGVkIGJ5IEx1YQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIDQpID09IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgdHJ1ZSkgPT0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBuaWwpID09IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwge30pIH49IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgcHJpbnQpIH49IG51bGwpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgY29yb3V0aW5lLnJ1bm5pbmcoKSkgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBpby5zdGRpbikgfj0gbnVsbCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBpby5zdGRpbikgPT0gc3RyaW5nLmZvcm1hdCgiJXAiLCBpby5zdGRpbikpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgcHJpbnQpID09IHN0cmluZy5mb3JtYXQoIiVwIiwgcHJpbnQpKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIHByaW50KSB+PSBzdHJpbmcuZm9ybWF0KCIlcCIsIGFzc2VydCkpCgogIGFzc2VydCgjc3RyaW5nLmZvcm1hdCgiJTkwcCIsIHt9KSA9PSA5MCkKICBhc3NlcnQoI3N0cmluZy5mb3JtYXQoIiUtNjBwIiwge30pID09IDYwKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlMTBwIiwgZmFsc2UpID09IHN0cmluZy5yZXAoIiAiLCAxMCAtICNudWxsKSAuLiBudWxsKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlLTEycCIsIDEuNSkgPT0gbnVsbCAuLiBzdHJpbmcucmVwKCIgIiwgMTIgLSAjbnVsbCkpCgogIGRvCiAgICBsb2NhbCB0MSA9IHt9OyBsb2NhbCB0MiA9IHt9CiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCB0MSkgfj0gc3RyaW5nLmZvcm1hdCgiJXAiLCB0MikpCiAgZW5kCgogIGRvICAgICAtLSBzaG9ydCBzdHJpbmdzIGFyZSBpbnRlcm5hbGl6ZWQKICAgIGxvY2FsIHMxID0gc3RyaW5nLnJlcCgiYSIsIDEwKQogICAgbG9jYWwgczIgPSBzdHJpbmcucmVwKCJhYSIsIDUpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgczEpID09IHN0cmluZy5mb3JtYXQoIiVwIiwgczIpKQogIGVuZAoKICBkbyAgICAgLS0gbG9uZyBzdHJpbmdzIGFyZW4ndCBpbnRlcm5hbGl6ZWQKICAgIGxvY2FsIHMxID0gc3RyaW5nLnJlcCgiYSIsIDMwMCk7IGxvY2FsIHMyID0gc3RyaW5nLnJlcCgiYSIsIDMwMCkKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlcCIsIHMxKSB+PSBzdHJpbmcuZm9ybWF0KCIlcCIsIHMyKSkKICBlbmQKZW5kCgp4ID0gJyLtbG8iXG5cXCcKYXNzZXJ0KHN0cmluZy5mb3JtYXQoJyVxJXMnLCB4LCB4KSA9PSAnIlxcIu1sb1xcIlxcXG5cXFxcIiLtbG8iXG5cXCcpCmFzc2VydChzdHJpbmcuZm9ybWF0KCclcScsICJcMCIpID09IFtbIlwwIl1dKQphc3NlcnQobG9hZChzdHJpbmcuZm9ybWF0KCdyZXR1cm4gJXEnLCB4KSkoKSA9PSB4KQp4ID0gIlwwXDFcMDAyM1w1XDAwMDkiCmFzc2VydChsb2FkKHN0cmluZy5mb3JtYXQoJ3JldHVybiAlcScsIHgpKSgpID09IHgpCmFzc2VydChzdHJpbmcuZm9ybWF0KCJcMCVjXDAlYyV4XDAiLCBzdHJpbmcuYnl0ZSgiXHhlNCIpLCBzdHJpbmcuYnl0ZSgiYiIpLCAxNDApID09CiAgICAgICAgICAgICAgIlwwXHhlNFwwYjhjXDAiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgnJykgPT0gIiIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlYyIsMzQpLi5zdHJpbmcuZm9ybWF0KCIlYyIsNDgpLi5zdHJpbmcuZm9ybWF0KCIlYyIsOTApLi5zdHJpbmcuZm9ybWF0KCIlYyIsMTAwKSA9PQogICAgICAgc3RyaW5nLmZvcm1hdCgiJTFjJS1jJS0xYyVjIiwgMzQsIDQ4LCA5MCwgMTAwKSkKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVzXDAgaXMgbm90IFwwJXMiLCAnbm90IGJlJywgJ2JlJykgPT0gJ25vdCBiZVwwIGlzIG5vdCBcMGJlJykKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUlJWQgJTAxMGQiLCAxMCwgMjMpID09ICIlMTAgMDAwMDAwMDAyMyIpCmFzc2VydCh0b251bWJlcihzdHJpbmcuZm9ybWF0KCIlZiIsIDEwLjMpKSA9PSAxMC4zKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgnIiUtNTBzIicsICdhJykgPT0gJyJhJyAuLiBzdHJpbmcucmVwKCcgJywgNDkpIC4uICciJykKCmFzc2VydChzdHJpbmcuZm9ybWF0KCItJS4yMHMuMjBzIiwgc3RyaW5nLnJlcCgiJSIsIDIwMDApKSA9PQogICAgICAgICAgICAgICAgICAgICAiLSIuLnN0cmluZy5yZXAoIiUiLCAyMCkuLiIuMjBzIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoJyItJTIwcy4yMHMiJywgc3RyaW5nLnJlcCgiJSIsIDIwMDApKSA9PQogICAgICAgc3RyaW5nLmZvcm1hdCgiJXEiLCAiLSIuLnN0cmluZy5yZXAoIiUiLCAyMDAwKS4uIi4yMHMiKSkKCmRvCiAgbG9jYWwgZnVuY3Rpb24gY2hlY2tRICh2KQogICAgbG9jYWwgcyA9IHN0cmluZy5mb3JtYXQoIiVxIiwgdikKICAgIGxvY2FsIG52ID0gbG9hZCgicmV0dXJuICIgLi4gcykoKQogICAgYXNzZXJ0KHYgPT0gbnYgYW5kIG1hdGgudHlwZSh2KSA9PSBtYXRoLnR5cGUobnYpKQogIGVuZAogIGNoZWNrUSgiXDBcMFwxXDI1NVx1ezIzNH0iKQogIGNoZWNrUShtYXRoLm1heGludGVnZXIpCiAgY2hlY2tRKG1hdGgubWluaW50ZWdlcikKICBjaGVja1EobWF0aC5waSkKICBjaGVja1EoMC4xKQogIGNoZWNrUSh0cnVlKQogIGNoZWNrUShuaWwpCiAgY2hlY2tRKGZhbHNlKQogIGNoZWNrUShtYXRoLmh1Z2UpCiAgY2hlY2tRKC1tYXRoLmh1Z2UpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVxIiwgMC8wKSA9PSAiKDAvMCkiKSAgIC0tIE5hTgogIGNoZWNrZXJyb3IoIm5vIGxpdGVyYWwiLCBzdHJpbmcuZm9ybWF0LCAiJXEiLCB7fSkKZW5kCgphc3NlcnQoc3RyaW5nLmZvcm1hdCgiXDAlc1wwIiwgIlwwXDBcMSIpID09ICJcMFwwXDBcMVwwIikKY2hlY2tlcnJvcigiY29udGFpbnMgemVyb3MiLCBzdHJpbmcuZm9ybWF0LCAiJTEwcyIsICJcMCIpCgotLSBmb3JtYXQgeCB0b3N0cmluZwphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXMgJXMiLCBuaWwsIHRydWUpID09ICJuaWwgdHJ1ZSIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlcyAlLjRzIiwgZmFsc2UsIHRydWUpID09ICJmYWxzZSB0cnVlIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUuM3MgJS4zcyIsIGZhbHNlLCB0cnVlKSA9PSAiZmFsIHRydSIpCmxvY2FsIG0gPSBzZXRtZXRhdGFibGUoe30sIHtfX3Rvc3RyaW5nID0gZnVuY3Rpb24gKCkgcmV0dXJuICJoZWxsbyIgZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uYW1lID0gImhpIn0pCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlcyAlLjEwcyIsIG0sIG0pID09ICJoZWxsbyBoZWxsbyIpCmdldG1ldGF0YWJsZShtKS5fX3Rvc3RyaW5nID0gbmlsICAgLS0gd2lsbCB1c2UgJ19fbmFtZScgZnJvbSBub3cgb24KYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUuNHMiLCBtKSA9PSAiaGk6ICIpCgpnZXRtZXRhdGFibGUobSkuX190b3N0cmluZyA9IGZ1bmN0aW9uICgpIHJldHVybiB7fSBlbmQKY2hlY2tlcnJvcigiJ19fdG9zdHJpbmcnIG11c3QgcmV0dXJuIGEgc3RyaW5nIiwgdG9zdHJpbmcsIG0pCgoKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV4IiwgMC4wKSA9PSAiMCIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlMDJ4IiwgMC4wKSA9PSAiMDAiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJTA4WCIsIDB4RkZGRkZGRkYpID09ICJGRkZGRkZGRiIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlKzA4ZCIsIDMxNTAxKSA9PSAiKzAwMzE1MDEiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJSswOGQiLCAtMzA5MjcpID09ICItMDAzMDkyNyIpCgoKZG8gICAgLS0gbG9uZ2VzdCBudW1iZXIgdGhhdCBjYW4gYmUgZm9ybWF0dGVkCiAgbG9jYWwgaSA9IDEKICBsb2NhbCBqID0gMTAwMDAKICB3aGlsZSBpICsgMSA8IGogZG8gICAtLSBiaW5hcnkgc2VhcmNoIGZvciBtYXhpbXVtIGZpbml0ZSBmbG9hdAogICAgbG9jYWwgbSA9IChpICsgaikgLy8gMgogICAgaWYgMTBebSA8IG1hdGguaHVnZSB0aGVuIGkgPSBtIGVsc2UgaiA9IG0gZW5kCiAgZW5kCiAgYXNzZXJ0KDEwXmkgPCBtYXRoLmh1Z2UgYW5kIDEwXmogPT0gbWF0aC5odWdlKQogIGxvY2FsIHMgPSBzdHJpbmcuZm9ybWF0KCclLjk5ZicsIC0oMTBeaSkpCiAgYXNzZXJ0KHN0cmluZy5sZW4ocykgPj0gaSArIDEwMSkKICBhc3NlcnQodG9udW1iZXIocykgPT0gLSgxMF5pKSkKCiAgLS0gbGltaXQgZm9yIGZsb2F0cwogIGFzc2VydCgxMF4zOCA8IG1hdGguaHVnZSkKICBsb2NhbCBzID0gc3RyaW5nLmZvcm1hdCgnJS45OWYnLCAtKDEwXjM4KSkKICBhc3NlcnQoc3RyaW5nLmxlbihzKSA+PSAzOCArIDEwMSkKICBhc3NlcnQodG9udW1iZXIocykgPT0gLSgxMF4zOCkpCmVuZAoKCi0tIHRlc3RpbmcgbGFyZ2UgbnVtYmVycyBmb3IgZm9ybWF0CmRvICAgLS0gYXNzdW1lIGF0IGxlYXN0IDMyIGJpdHMKICBsb2NhbCBtYXgsIG1pbiA9IDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwICAgIC0tICJsYXJnZSIgZm9yIDMyIGJpdHMKICBhc3NlcnQoc3RyaW5nLnN1YihzdHJpbmcuZm9ybWF0KCIlOHgiLCAtMSksIC04KSA9PSAiZmZmZmZmZmYiKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIleCIsIG1heCkgPT0gIjdmZmZmZmZmIikKICBhc3NlcnQoc3RyaW5nLnN1YihzdHJpbmcuZm9ybWF0KCIleCIsIG1pbiksIC04KSA9PSAiODAwMDAwMDAiKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlZCIsIG1heCkgPT0gICIyMTQ3NDgzNjQ3IikKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJWQiLCBtaW4pID09ICItMjE0NzQ4MzY0OCIpCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV1IiwgMHhmZmZmZmZmZikgPT0gIjQyOTQ5NjcyOTUiKQogIGFzc2VydChzdHJpbmcuZm9ybWF0KCIlbyIsIDB4QUJDRCkgPT0gIjEyNTcxNSIpCgogIG1heCwgbWluID0gMHg3ZmZmZmZmZmZmZmZmZmZmLCAtMHg4MDAwMDAwMDAwMDAwMDAwCiAgaWYgbWF4ID4gMi4wXjUzIHRoZW4gIC0tIG9ubHkgZm9yIDY0IGJpdHMKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIleCIsICgyXjUyIHwgMCkgLSAxKSA9PSAiZmZmZmZmZmZmZmZmZiIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiMHglOFgiLCAweDhmMDAwMDAzKSA9PSAiMHg4RjAwMDAwMyIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJWQiLCAyXjUzKSA9PSAiOTAwNzE5OTI1NDc0MDk5MiIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJWkiLCAtMl41MykgPT0gIi05MDA3MTk5MjU0NzQwOTkyIikKICAgIGFzc2VydChzdHJpbmcuZm9ybWF0KCIleCIsIG1heCkgPT0gIjdmZmZmZmZmZmZmZmZmZmYiKQogICAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiV4IiwgbWluKSA9PSAiODAwMDAwMDAwMDAwMDAwMCIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJWQiLCBtYXgpID09ICAiOTIyMzM3MjAzNjg1NDc3NTgwNyIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJWQiLCBtaW4pID09ICItOTIyMzM3MjAzNjg1NDc3NTgwOCIpCiAgICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXUiLCB+KC0xIDw8IDY0KSkgPT0gIjE4NDQ2NzQ0MDczNzA5NTUxNjE1IikKICAgIGFzc2VydCh0b3N0cmluZygxMjM0NTY3ODkwMTIzKSA9PSAnMTIzNDU2Nzg5MDEyMycpCiAgZW5kCmVuZAoKCmRvIHByaW50KCJ0ZXN0aW5nICdmb3JtYXQgJWEgJUEnIikKICBsb2NhbCBmdW5jdGlvbiBtYXRjaGhleGEgKG4pCiAgICBsb2NhbCBzID0gc3RyaW5nLmZvcm1hdCgiJWEiLCBuKQogICAgLS0gcmVzdWx0IG1hdGNoZXMgSVNPIEMgcmVxdWlyZW1lbnRzCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQocywgIl4lLT8weFsxLTlhLWZdJS4/WzAtOWEtZl0qcFstK10/JWQrJCIpKQogICAgYXNzZXJ0KHRvbnVtYmVyKHMpID09IG4pICAtLSBhbmQgaGFzIGZ1bGwgcHJlY2lzaW9uCiAgICBzID0gc3RyaW5nLmZvcm1hdCgiJUEiLCBuKQogICAgYXNzZXJ0KHN0cmluZy5maW5kKHMsICJeJS0/MFhbMS05QS1GXSUuP1swLTlBLUZdKlBbLStdPyVkKyQiKSkKICAgIGFzc2VydCh0b251bWJlcihzKSA9PSBuKQogIGVuZAogIGZvciBfLCBuIGluIGlwYWlyc3swLjEsIC0wLjEsIDEvMywgLTEvMywgMWUzMCwgLTFlMzAsCiAgICAgICAgICAgICAgICAgICAgIC00NS8yNDcsIDEsIC0xLCAyLCAtMiwgM2UtMjAsIC0zZS0yMH0gZG8KICAgIG1hdGNoaGV4YShuKQogIGVuZAoKICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJUEiLCAwLjApLCAiXjBYMCUuPzAqUCUrPzAkIikpCiAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVhIiwgLTAuMCksICJeJS0weDAlLj8wKnAlKz8wJCIpKQoKICBpZiBub3QgX3BvcnQgdGhlbiAgIC0tIHRlc3QgaW5mLCAtaW5mLCBOYU4sIGFuZCAtMC4wCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJWEiLCAxLzApLCAiXmluZiIpKQogICAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiVBIiwgLTEvMCksICJeJS1JTkYiKSkKICAgIGFzc2VydChzdHJpbmcuZmluZChzdHJpbmcuZm9ybWF0KCIlYSIsIDAvMCksICJeJS0/bmFuIikpCiAgICBhc3NlcnQoc3RyaW5nLmZpbmQoc3RyaW5nLmZvcm1hdCgiJWEiLCAtMC4wKSwgIl4lLTB4MCIpKQogIGVuZAogIAogIGlmIG5vdCBwY2FsbChzdHJpbmcuZm9ybWF0LCAiJS4zYSIsIDApIHRoZW4KICAgIChNZXNzYWdlIG9yIHByaW50KSgiXG4gPj4+IG1vZGlmaWVycyBmb3IgZm9ybWF0ICclYScgbm90IGF2YWlsYWJsZSA8PDxcbiIpCiAgZWxzZQogICAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiUrLjJBIiwgMTIpLCAiXiUrMFgleCUuJXgwUCUrPyVkJCIpKQogICAgYXNzZXJ0KHN0cmluZy5maW5kKHN0cmluZy5mb3JtYXQoIiUuNEEiLCAtMTIpLCAiXiUtMFgleCUuJXgwMDBQJSs/JWQkIikpCiAgZW5kCmVuZAoKCi0tIHRlc3Rpbmcgc29tZSBmbGFncyAgKGFsbCB0aGVzZSByZXN1bHRzIGFyZSByZXF1aXJlZCBieSBJU08gQykKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUjMTJvIiwgMTApID09ICIgICAgICAgICAwMTIiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJSMxMHgiLCAxMDApID09ICIgICAgICAweDY0IikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUjLTE3WCIsIDEwMCkgPT0gIjBYNjQgICAgICAgICAgICAgIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUwMTNpIiwgLTEwMCkgPT0gIi0wMDAwMDAwMDAxMDAiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJTIuNWQiLCAtMTAwKSA9PSAiLTAwMTAwIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUudSIsIDApID09ICIiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJSsjMDE0LjBmIiwgMTAwKSA9PSAiKzAwMDAwMDAwMDEwMC4iKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJSAxLjBFIiwgMTAwKSA9PSAiIDFFKzAyIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUtMTZjIiwgOTcpID09ICJhICAgICAgICAgICAgICAgIikKYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiUrLjNHIiwgMS41KSA9PSAiKzEuNSIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlIC4xZyIsIDJeMTApID09ICIgMWUrMDMiKQphc3NlcnQoc3RyaW5nLmZvcm1hdCgiJS4wcyIsICJhbG8iKSAgPT0gIiIpCmFzc2VydChzdHJpbmcuZm9ybWF0KCIlLnMiLCAiYWxvIikgID09ICIiKQoKLS0gZXJyb3JzIGluIGZvcm1hdAoKbG9jYWwgZnVuY3Rpb24gY2hlY2sgKGZtdCwgbXNnKQogIGNoZWNrZXJyb3IobXNnLCBzdHJpbmcuZm9ybWF0LCBmbXQsIDEwKQplbmQKCmxvY2FsIGF1eCA9IHN0cmluZy5yZXAoJzAnLCA2MDApCmNoZWNrKCIlMTAwLjNkIiwgImludmFsaWQgY29udmVyc2lvbiIpCmNoZWNrKCIlMSIuLmF1eC4uIi4zZCIsICJ0b28gbG9uZyIpCmNoZWNrKCIlMS4xMDBkIiwgImludmFsaWQgY29udmVyc2lvbiIpCmNoZWNrKCIlMTAuMSIuLmF1eC4uIjAwNGQiLCAidG9vIGxvbmciKQpjaGVjaygiJXQiLCAiaW52YWxpZCBjb252ZXJzaW9uIikKY2hlY2soIiUiLi5hdXguLiJkIiwgInRvbyBsb25nIikKY2hlY2soIiVkICVkIiwgIm5vIHZhbHVlIikKY2hlY2soIiUwMTBjIiwgImludmFsaWQgY29udmVyc2lvbiIpCmNoZWNrKCIlLjEwYyIsICJpbnZhbGlkIGNvbnZlcnNpb24iKQpjaGVjaygiJTAuMzRzIiwgImludmFsaWQgY29udmVyc2lvbiIpCmNoZWNrKCIlI2kiLCAiaW52YWxpZCBjb252ZXJzaW9uIikKY2hlY2soIiUzLjFwIiwgImludmFsaWQgY29udmVyc2lvbiIpCmNoZWNrKCIlMC5zIiwgImludmFsaWQgY29udmVyc2lvbiIpCmNoZWNrKCIlMTBxIiwgImNhbm5vdCBoYXZlIG1vZGlmaWVycyIpCmNoZWNrKCIlRiIsICJpbnZhbGlkIGNvbnZlcnNpb24iKSAgIC0tIHVzZWxlc3MgYW5kIG5vdCBpbiBDODkKCgphc3NlcnQobG9hZCgicmV0dXJuIDFcbi0tY29tbWVudCB3aXRob3V0IGVuZGluZyBFT0wiKSgpID09IDEpCgoKY2hlY2tlcnJvcigidGFibGUgZXhwZWN0ZWQiLCB0YWJsZS5jb25jYXQsIDMpCmNoZWNrZXJyb3IoImF0IGluZGV4ICIgLi4gbWF4aSwgdGFibGUuY29uY2F0LCB7fSwgIiAiLCBtYXhpLCBtYXhpKQotLSAnJScgZXNjYXBlcyBmb2xsb3dpbmcgbWludXMgc2lnbmFsCmNoZWNrZXJyb3IoImF0IGluZGV4ICUiIC4uIG1pbmksIHRhYmxlLmNvbmNhdCwge30sICIgIiwgbWluaSwgbWluaSkKYXNzZXJ0KHRhYmxlLmNvbmNhdHt9ID09ICIiKQphc3NlcnQodGFibGUuY29uY2F0KHt9LCAneCcpID09ICIiKQphc3NlcnQodGFibGUuY29uY2F0KHsnXDAnLCAnXDBcMScsICdcMFwxXDInfSwgJy5cMC4nKSA9PSAiXDAuXDAuXDBcMS5cMC5cMFwxXDIiKQpsb2NhbCBhID0ge307IGZvciBpPTEsMzAwIGRvIGFbaV0gPSAieHV4dSIgZW5kCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIjEyMyIpLi4iMTIzIiA9PSBzdHJpbmcucmVwKCJ4dXh1MTIzIiwgMzAwKSkKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiYiIsIDIwLCAyMCkgPT0gInh1eHUiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICIiLCAyMCwgMjEpID09ICJ4dXh1eHV4dSIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIngiLCAyMiwgMjEpID09ICIiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICIzIiwgMjk5KSA9PSAieHV4dTN4dXh1IikKYXNzZXJ0KHRhYmxlLmNvbmNhdCh7fSwgIngiLCBtYXhpLCBtYXhpIC0gMSkgPT0gIiIpCmFzc2VydCh0YWJsZS5jb25jYXQoe30sICJ4IiwgbWluaSArIDEsIG1pbmkpID09ICIiKQphc3NlcnQodGFibGUuY29uY2F0KHt9LCAieCIsIG1heGksIG1pbmkpID09ICIiKQphc3NlcnQodGFibGUuY29uY2F0KHtbbWF4aV0gPSAiYWxvIn0sICJ4IiwgbWF4aSwgbWF4aSkgPT0gImFsbyIpCmFzc2VydCh0YWJsZS5jb25jYXQoe1ttYXhpXSA9ICJhbG8iLCBbbWF4aSAtIDFdID0gInkifSwgIi0iLCBtYXhpIC0gMSwgbWF4aSkKICAgICAgID09ICJ5LWFsbyIpCgphc3NlcnQobm90IHBjYWxsKHRhYmxlLmNvbmNhdCwgeyJhIiwgImIiLCB7fX0pKQoKYSA9IHsiYSIsImIiLCJjIn0KYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDEsIDApID09ICIiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICIsIiwgMSwgMSkgPT0gImEiKQphc3NlcnQodGFibGUuY29uY2F0KGEsICIsIiwgMSwgMikgPT0gImEsYiIpCmFzc2VydCh0YWJsZS5jb25jYXQoYSwgIiwiLCAyKSA9PSAiYixjIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDMpID09ICJjIikKYXNzZXJ0KHRhYmxlLmNvbmNhdChhLCAiLCIsIDQpID09ICIiKQoKaWYgbm90IF9wb3J0IHRoZW4KCiAgbG9jYWwgbG9jYWxlcyA9IHsgInB0YiIsICJwdF9CUi5pc284ODU5MSIsICJJU08tODg1OS0xIiB9CiAgbG9jYWwgZnVuY3Rpb24gdHJ5bG9jYWxlICh3KQogICAgZm9yIGkgPSAxLCAjbG9jYWxlcyBkbwogICAgICBpZiBvcy5zZXRsb2NhbGUobG9jYWxlc1tpXSwgdykgdGhlbgogICAgICAgIHByaW50KHN0cmluZy5mb3JtYXQoIiclcycgbG9jYWxlIHNldCB0byAnJXMnIiwgdywgbG9jYWxlc1tpXSkpCiAgICAgICAgcmV0dXJuIGxvY2FsZXNbaV0KICAgICAgZW5kCiAgICBlbmQKICAgIHByaW50KHN0cmluZy5mb3JtYXQoIiclcycgbG9jYWxlIG5vdCBmb3VuZCIsIHcpKQogICAgcmV0dXJuIGZhbHNlCiAgZW5kCgogIGlmIHRyeWxvY2FsZSgiY29sbGF0ZSIpICB0aGVuCiAgICBhc3NlcnQoImFsbyIgPCAi4WxvIiBhbmQgIuFsbyIgPCAiYW1vIikKICBlbmQKCiAgaWYgdHJ5bG9jYWxlKCJjdHlwZSIpIHRoZW4KICAgIGFzc2VydChzdHJpbmcuZ3N1Yigi4ent8/oiLCAiJWEiLCAieCIpID09ICJ4eHh4eCIpCiAgICBhc3NlcnQoc3RyaW5nLmdzdWIoIuHB6ckiLCAiJWwiLCAieCIpID09ICJ4wXjJIikKICAgIGFzc2VydChzdHJpbmcuZ3N1Yigi4cHpySIsICIldSIsICJ4IikgPT0gIuF46XgiKQogICAgYXNzZXJ0KHN0cmluZy51cHBlciLhwel7eHV4dX3n428iID09ICLBwcl7WFVYVX3Hw08iKQogIGVuZAoKICBvcy5zZXRsb2NhbGUoIkMiKQogIGFzc2VydChvcy5zZXRsb2NhbGUoKSA9PSAnQycpCiAgYXNzZXJ0KG9zLnNldGxvY2FsZShuaWwsICJudW1lcmljIikgPT0gJ0MnKQoKZW5kCgoKLS0gYnVnIGluIEx1YSA1LjMuMgotLSAnZ21hdGNoJyBpdGVyYXRvciBkb2VzIG5vdCB3b3JrIGFjcm9zcyBjb3JvdXRpbmVzCmRvCiAgbG9jYWwgZiA9IHN0cmluZy5nbWF0Y2goIjEgMiAzIDQgNSIsICIlZCsiKQogIGFzc2VydChmKCkgPT0gIjEiKQogIGNvID0gY29yb3V0aW5lLndyYXAoZikKICBhc3NlcnQoY28oKSA9PSAiMiIpCmVuZAoKCmlmIFQ9PW5pbCB0aGVuCiAgKE1lc3NhZ2Ugb3IgcHJpbnQpCiAgICAgKCJcbiA+Pj4gdGVzdEMgbm90IGFjdGl2ZTogc2tpcHBpbmcgJ3B1c2hmc3RyaW5nJyB0ZXN0cyA8PDxcbiIpCmVsc2UKCiAgcHJpbnQidGVzdGluZyAncHVzaGZzdHJpbmcnIgoKICAtLSBmb3JtYXRzICVVLCAlZiwgJUkgYWxyZWFkeSB0ZXN0ZWQgZWxzZXdoZXJlCgogIGxvY2FsIGJsZW4gPSAyMDAgICAgLS0gaW50ZXJuYWwgYnVmZmVyIGxlbmd0aCBpbiAnbHVhT19wdXNoZnN0cmluZycKCiAgbG9jYWwgZnVuY3Rpb24gY2FsbHBmcyAob3AsIGZtdCwgbikKICAgIGxvY2FsIHggPSB7VC50ZXN0QygicHVzaGZzdHJpbmciIC4uIG9wIC4uICI7IHJldHVybiAqIiwgZm10LCBuKX0KICAgIC0tIHN0YWNrIGhhcyBjb2RlLCAnZm10JywgJ24nLCBhbmQgcmVzdWx0IGZyb20gb3BlcmF0aW9uCiAgICBhc3NlcnQoI3ggPT0gNCkgIC0tIG1ha2Ugc3VyZSBub3RoaW5nIGVsc2Ugd2FzIGxlZnQgaW4gdGhlIHN0YWNrCiAgICByZXR1cm4geFs0XQogIGVuZAoKICBsb2NhbCBmdW5jdGlvbiB0ZXN0cGZzIChvcCwgZm10LCBuKQogICAgYXNzZXJ0KGNhbGxwZnMob3AsIGZtdCwgbikgPT0gc3RyaW5nLmZvcm1hdChmbXQsIG4pKQogIGVuZAoKICB0ZXN0cGZzKCJJIiwgIiIsIDApCiAgdGVzdHBmcygiSSIsIHN0cmluZy5yZXAoImEiLCBibGVuIC0gMSksIDApCiAgdGVzdHBmcygiSSIsIHN0cmluZy5yZXAoImEiLCBibGVuKSwgMCkKICB0ZXN0cGZzKCJJIiwgc3RyaW5nLnJlcCgiYSIsIGJsZW4gKyAxKSwgMCkKCiAgbG9jYWwgc3RyID0gc3RyaW5nLnJlcCgiYWIiLCBibGVuKSAuLiAiJWQiIC4uIHN0cmluZy5yZXAoImQiLCBibGVuIC8gMikKICB0ZXN0cGZzKCJJIiwgc3RyLCAyXjE0KQogIHRlc3RwZnMoIkkiLCBzdHIsIC0yXjE1KQoKICBzdHIgPSAiJWQiIC4uIHN0cmluZy5yZXAoImNkIiwgYmxlbikKICB0ZXN0cGZzKCJJIiwgc3RyLCAyXjE0KQogIHRlc3RwZnMoIkkiLCBzdHIsIC0yXjE1KQoKICBzdHIgPSBzdHJpbmcucmVwKCJjIiwgYmxlbiAtIDIpIC4uICIlZCIKICB0ZXN0cGZzKCJJIiwgc3RyLCAyXjE0KQogIHRlc3RwZnMoIkkiLCBzdHIsIC0yXjE1KQoKICBmb3IgbCA9IDEyLCAxNCBkbwogICAgbG9jYWwgc3RyMSA9IHN0cmluZy5yZXAoImEiLCBsKQogICAgZm9yIGkgPSAwLCA1MDAsIDEzIGRvCiAgICAgIGZvciBqID0gMCwgNTAwLCAxMyBkbwogICAgICAgIHN0ciA9IHN0cmluZy5yZXAoImEiLCBpKSAuLiAiJXMiIC4uIHN0cmluZy5yZXAoImQiLCBqKQogICAgICAgIHRlc3RwZnMoIlMiLCBzdHIsIHN0cjEpCiAgICAgICAgdGVzdHBmcygiUyIsIHN0ciwgc3RyKQogICAgICBlbmQKICAgIGVuZAogIGVuZAoKICBzdHIgPSAiYWJjICVjIGRlZiIKICB0ZXN0cGZzKCJJIiwgc3RyLCBzdHJpbmcuYnl0ZSgiQSIpKQogIHRlc3RwZnMoIkkiLCBzdHIsIDI1NSkKCiAgc3RyID0gc3RyaW5nLnJlcCgiYSIsIGJsZW4gLSAxKSAuLiAiJXAiIC4uIHN0cmluZy5yZXAoImNkIiwgYmxlbikKICB0ZXN0cGZzKCJQIiwgc3RyLCB7fSkKCiAgc3RyID0gc3RyaW5nLnJlcCgiJSUiLCAzICogYmxlbikgLi4gIiVwIiAuLiBzdHJpbmcucmVwKCIlJSIsIDIgKiBibGVuKQogIHRlc3RwZnMoIlAiLCBzdHIsIHt9KQplbmQKCgpwcmludCgnT0snKQoK