LS0gJElkOiB0ZXN0ZXMvcG0ubHVhICQKLS0gU2VlIENvcHlyaWdodCBOb3RpY2UgaW4gZmlsZSBhbGwubHVhCgpwcmludCgndGVzdGluZyBwYXR0ZXJuIG1hdGNoaW5nJykKCmxvY2FsIGZ1bmN0aW9uIGNoZWNrZXJyb3IgKG1zZywgZiwgLi4uKQogIGxvY2FsIHMsIGVyciA9IHBjYWxsKGYsIC4uLikKICBhc3NlcnQobm90IHMgYW5kIHN0cmluZy5maW5kKGVyciwgbXNnKSkKZW5kCgoKZnVuY3Rpb24gZihzLCBwKQogIGxvY2FsIGksZSA9IHN0cmluZy5maW5kKHMsIHApCiAgaWYgaSB0aGVuIHJldHVybiBzdHJpbmcuc3ViKHMsIGksIGUpIGVuZAplbmQKCmEsYiA9IHN0cmluZy5maW5kKCcnLCAnJykgICAgLS0gZW1wdHkgcGF0dGVybnMgYXJlIHRyaWNreQphc3NlcnQoYSA9PSAxIGFuZCBiID09IDApOwphLGIgPSBzdHJpbmcuZmluZCgnYWxvJywgJycpCmFzc2VydChhID09IDEgYW5kIGIgPT0gMCkKYSxiID0gc3RyaW5nLmZpbmQoJ2FcMG8gYVwwbyBhXDBvJywgJ2EnLCAxKSAgIC0tIGZpcnN0IHBvc2l0aW9uCmFzc2VydChhID09IDEgYW5kIGIgPT0gMSkKYSxiID0gc3RyaW5nLmZpbmQoJ2FcMG8gYVwwbyBhXDBvJywgJ2FcMG8nLCAyKSAgIC0tIHN0YXJ0cyBpbiB0aGUgbWlkbGUKYXNzZXJ0KGEgPT0gNSBhbmQgYiA9PSA3KQphLGIgPSBzdHJpbmcuZmluZCgnYVwwbyBhXDBvIGFcMG8nLCAnYVwwbycsIDkpICAgLS0gc3RhcnRzIGluIHRoZSBtaWRsZQphc3NlcnQoYSA9PSA5IGFuZCBiID09IDExKQphLGIgPSBzdHJpbmcuZmluZCgnYVwwYVwwYVwwYVwwXDBhYicsICdcMGFiJywgMik7ICAtLSBmaW5kcyBhdCB0aGUgZW5kCmFzc2VydChhID09IDkgYW5kIGIgPT0gMTEpOwphLGIgPSBzdHJpbmcuZmluZCgnYVwwYVwwYVwwYVwwXDBhYicsICdiJykgICAgLS0gbGFzdCBwb3NpdGlvbgphc3NlcnQoYSA9PSAxMSBhbmQgYiA9PSAxMSkKYXNzZXJ0KG5vdCBzdHJpbmcuZmluZCgnYVwwYVwwYVwwYVwwXDBhYicsICdiXDAnKSkgICAtLSBjaGVjayBlbmRpbmcKYXNzZXJ0KG5vdCBzdHJpbmcuZmluZCgnJywgJ1wwJykpCmFzc2VydChzdHJpbmcuZmluZCgnYWxvMTIzYWxvJywgJzEyJykgPT0gNCkKYXNzZXJ0KG5vdCBzdHJpbmcuZmluZCgnYWxvMTIzYWxvJywgJ14xMicpKQoKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWFhYiIsICIuKmIiKSA9PSAiYWFhYiIpCmFzc2VydChzdHJpbmcubWF0Y2goImFhYSIsICIuKmEiKSA9PSAiYWFhIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYiIsICIuKmIiKSA9PSAiYiIpCgphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYWFiIiwgIi4rYiIpID09ICJhYWFiIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWFhIiwgIi4rYSIpID09ICJhYWEiKQphc3NlcnQobm90IHN0cmluZy5tYXRjaCgiYiIsICIuK2IiKSkKCmFzc2VydChzdHJpbmcubWF0Y2goImFhYWIiLCAiLj9iIikgPT0gImFiIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWFhIiwgIi4/YSIpID09ICJhYSIpCmFzc2VydChzdHJpbmcubWF0Y2goImIiLCAiLj9iIikgPT0gImIiKQoKYXNzZXJ0KGYoJ2Fsb0FMTycsICclbConKSA9PSAnYWxvJykKYXNzZXJ0KGYoJ2FMb19BTE8nLCAnJWEqJykgPT0gJ2FMbycpCgphc3NlcnQoZigiICBcblxyKiZcblxyICAgeHV4dSAgXG5cbiIsICIlZyVnJWcrIikgPT0gInh1eHUiKQoKYXNzZXJ0KGYoJ2FhYWInLCAnYSonKSA9PSAnYWFhJyk7CmFzc2VydChmKCdhYWEnLCAnXi4qJCcpID09ICdhYWEnKTsKYXNzZXJ0KGYoJ2FhYScsICdiKicpID09ICcnKTsKYXNzZXJ0KGYoJ2FhYScsICdhYiphJykgPT0gJ2FhJykKYXNzZXJ0KGYoJ2FiYScsICdhYiphJykgPT0gJ2FiYScpCmFzc2VydChmKCdhYWFiJywgJ2ErJykgPT0gJ2FhYScpCmFzc2VydChmKCdhYWEnLCAnXi4rJCcpID09ICdhYWEnKQphc3NlcnQobm90IGYoJ2FhYScsICdiKycpKQphc3NlcnQobm90IGYoJ2FhYScsICdhYithJykpCmFzc2VydChmKCdhYmEnLCAnYWIrYScpID09ICdhYmEnKQphc3NlcnQoZignYSRhJywgJy4kJykgPT0gJ2EnKQphc3NlcnQoZignYSRhJywgJy4lJCcpID09ICdhJCcpCmFzc2VydChmKCdhJGEnLCAnLiQuJykgPT0gJ2EkYScpCmFzc2VydChub3QgZignYSRhJywgJyQkJykpCmFzc2VydChub3QgZignYSRiJywgJ2EkJykpCmFzc2VydChmKCdhJGEnLCAnJCcpID09ICcnKQphc3NlcnQoZignJywgJ2IqJykgPT0gJycpCmFzc2VydChub3QgZignYWFhJywgJ2JiKicpKQphc3NlcnQoZignYWFhYicsICdhLScpID09ICcnKQphc3NlcnQoZignYWFhJywgJ14uLSQnKSA9PSAnYWFhJykKYXNzZXJ0KGYoJ2FhYmFhYWJhYWFiYWFhYmEnLCAnYi4qYicpID09ICdiYWFhYmFhYWJhYWFiJykKYXNzZXJ0KGYoJ2FhYmFhYWJhYWFiYWFhYmEnLCAnYi4tYicpID09ICdiYWFhYicpCmFzc2VydChmKCdhbG8geG8nLCAnLm8kJykgPT0gJ3hvJykKYXNzZXJ0KGYoJyBcbiBpc3RvIOkgYXNzaW0nLCAnJVMlUyonKSA9PSAnaXN0bycpCmFzc2VydChmKCcgXG4gaXN0byDpIGFzc2ltJywgJyVTKiQnKSA9PSAnYXNzaW0nKQphc3NlcnQoZignIFxuIGlzdG8g6SBhc3NpbScsICdbYS16XSokJykgPT0gJ2Fzc2ltJykKYXNzZXJ0KGYoJ3VtIGNhcmFjdGVyID8gZXh0cmEnLCAnW14lc2Etel0nKSA9PSAnPycpCmFzc2VydChmKCcnLCAnYT8nKSA9PSAnJykKYXNzZXJ0KGYoJ+EnLCAn4T8nKSA9PSAn4ScpCmFzc2VydChmKCfhYmwnLCAn4T9iP2w/JykgPT0gJ+FibCcpCmFzc2VydChmKCcgIOFibCcsICfhP2I/bD8nKSA9PSAnJykKYXNzZXJ0KGYoJ2FhJywgJ15hYT9hP2EnKSA9PSAnYWEnKQphc3NlcnQoZignXV1d4WInLCAnW15dXScpID09ICfhJykKYXNzZXJ0KGYoIjBhbG8gYWxvIiwgIiV4KiIpID09ICIwYSIpCmFzc2VydChmKCJhbG8gYWxvIiwgIiVDKyIpID09ICJhbG8gYWxvIikKcHJpbnQoJysnKQoKCmZ1bmN0aW9uIGYxKHMsIHApCiAgcCA9IHN0cmluZy5nc3ViKHAsICIlJShbMC05XSkiLCBmdW5jdGlvbiAocykKICAgICAgICByZXR1cm4gIiUiIC4uICh0b251bWJlcihzKSsxKQogICAgICAgZW5kKQogIHAgPSBzdHJpbmcuZ3N1YihwLCAiXihePykiLCAiJTEoKSIsIDEpCiAgcCA9IHN0cmluZy5nc3ViKHAsICIoJD8pJCIsICIoKSUxIiwgMSkKICBsb2NhbCB0ID0ge3N0cmluZy5tYXRjaChzLCBwKX0KICByZXR1cm4gc3RyaW5nLnN1YihzLCB0WzFdLCB0WyN0XSAtIDEpCmVuZAoKYXNzZXJ0KGYxKCdhbG8gYWx4IDEyMyBiXDBvIGJcMG8nLCAnKC4uKikgJTEnKSA9PSAiYlwwbyBiXDBvIikKYXNzZXJ0KGYxKCdheHoxMjM9IDQ9IDQgMzQnLCAnKC4rKT0oLiopPSUyICUxJykgPT0gJzM9IDQ9IDQgMycpCmFzc2VydChmMSgnPT09PT09PScsICdeKD0qKT0lMSQnKSA9PSAnPT09PT09PScpCmFzc2VydChub3Qgc3RyaW5nLm1hdGNoKCc9PT09PT09PT09JywgJ14oWz1dKik9JTEkJykpCgpsb2NhbCBmdW5jdGlvbiByYW5nZSAoaSwgaikKICBpZiBpIDw9IGogdGhlbgogICAgcmV0dXJuIGksIHJhbmdlKGkrMSwgaikKICBlbmQKZW5kCgpsb2NhbCBhYmMgPSBzdHJpbmcuY2hhcihyYW5nZSgwLCAxMjcpKSAuLiBzdHJpbmcuY2hhcihyYW5nZSgxMjgsIDI1NSkpOwoKYXNzZXJ0KHN0cmluZy5sZW4oYWJjKSA9PSAyNTYpCgpmdW5jdGlvbiBzdHJzZXQgKHApCiAgbG9jYWwgcmVzID0ge3M9Jyd9CiAgc3RyaW5nLmdzdWIoYWJjLCBwLCBmdW5jdGlvbiAoYykgcmVzLnMgPSByZXMucyAuLiBjIGVuZCkKICByZXR1cm4gcmVzLnMKZW5kOwoKYXNzZXJ0KHN0cmluZy5sZW4oc3Ryc2V0KCdbXDIwMC1cMjEwXScpKSA9PSAxMSkKCmFzc2VydChzdHJzZXQoJ1thLXpdJykgPT0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IikKYXNzZXJ0KHN0cnNldCgnW2EteiVkXScpID09IHN0cnNldCgnWyVkYS11dS16XScpKQphc3NlcnQoc3Ryc2V0KCdbYS1dJykgPT0gIi1hIikKYXNzZXJ0KHN0cnNldCgnW14lV10nKSA9PSBzdHJzZXQoJ1sld10nKSkKYXNzZXJ0KHN0cnNldCgnW10lJV0nKSA9PSAnJV0nKQphc3NlcnQoc3Ryc2V0KCdbYSUtel0nKSA9PSAnLWF6JykKYXNzZXJ0KHN0cnNldCgnWyVeJVslLWElXSUtYl0nKSA9PSAnLVtdXmFiJykKYXNzZXJ0KHN0cnNldCgnJVonKSA9PSBzdHJzZXQoJ1tcMS1cMjU1XScpKQphc3NlcnQoc3Ryc2V0KCcuJykgPT0gc3Ryc2V0KCdbXDEtXDI1NSV6XScpKQpwcmludCgnKycpOwoKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWxvIHh5eksiLCAiKCV3KylLIikgPT0gInh5eiIpCmFzc2VydChzdHJpbmcubWF0Y2goIjI1NCBLIiwgIiglZCopSyIpID09ICIiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhbG8gIiwgIigldyopJCIpID09ICIiKQphc3NlcnQobm90IHN0cmluZy5tYXRjaCgiYWxvICIsICIoJXcrKSQiKSkKYXNzZXJ0KHN0cmluZy5maW5kKCIo4WxvKSIsICIlKOEiKSA9PSAxKQpsb2NhbCBhLCBiLCBjLCBkLCBlID0gc3RyaW5nLm1hdGNoKCLibG8gYWxvIiwgIl4oKCguKS4pLiogKCV3KikpJCIpCmFzc2VydChhID09ICfibG8gYWxvJyBhbmQgYiA9PSAn4mwnIGFuZCBjID09ICfiJyBhbmQgZCA9PSAnYWxvJyBhbmQgZSA9PSBuaWwpCmEsIGIsIGMsIGQgID0gc3RyaW5nLm1hdGNoKCcwMTIzNDU2Nzg5JywgJyguKyguPykoKSknKQphc3NlcnQoYSA9PSAnMDEyMzQ1Njc4OScgYW5kIGIgPT0gJycgYW5kIGMgPT0gMTEgYW5kIGQgPT0gbmlsKQpwcmludCgnKycpCgphc3NlcnQoc3RyaW5nLmdzdWIoJ/xsbyD8bG8nLCAn/CcsICd4JykgPT0gJ3hsbyB4bG8nKQphc3NlcnQoc3RyaW5nLmdzdWIoJ2FsbyD6bG8gICcsICcgKyQnLCAnJykgPT0gJ2FsbyD6bG8nKSAgLS0gdHJpbQphc3NlcnQoc3RyaW5nLmdzdWIoJyAgYWxvIGFsbyAgJywgJ14lcyooLi0pJXMqJCcsICclMScpID09ICdhbG8gYWxvJykgIC0tIGRvdWJsZSB0cmltCmFzc2VydChzdHJpbmcuZ3N1YignYWxvICBhbG8gIFxuIDEyM1xuICcsICclcysnLCAnICcpID09ICdhbG8gYWxvIDEyMyAnKQp0ID0gImFi5yBkIgphLCBiID0gc3RyaW5nLmdzdWIodCwgJyguKScsICclMUAnKQphc3NlcnQoJ0AnLi5hID09IHN0cmluZy5nc3ViKHQsICcnLCAnQCcpIGFuZCBiID09IDUpCmEsIGIgPSBzdHJpbmcuZ3N1YignYWLnZCcsICcoLiknLCAnJTBAJywgMikKYXNzZXJ0KGEgPT0gJ2FAYkDnZCcgYW5kIGIgPT0gMikKYXNzZXJ0KHN0cmluZy5nc3ViKCdhbG8gYWxvJywgJygpW2FsXScsICclMScpID09ICcxMm8gNTZvJykKYXNzZXJ0KHN0cmluZy5nc3ViKCJhYmM9eHl6IiwgIigldyopKCVwKSgldyspIiwgIiUzJTIlMS0lMCIpID09CiAgICAgICAgICAgICAgInh5ej1hYmMtYWJjPXh5eiIpCmFzc2VydChzdHJpbmcuZ3N1YigiYWJjIiwgIiV3IiwgIiUxJTAiKSA9PSAiYWFiYmNjIikKYXNzZXJ0KHN0cmluZy5nc3ViKCJhYmMiLCAiJXcrIiwgIiUwJTEiKSA9PSAiYWJjYWJjIikKYXNzZXJ0KHN0cmluZy5nc3ViKCfh6e0nLCAnJCcsICdcMPP6JykgPT0gJ+Hp7Vww8/onKQphc3NlcnQoc3RyaW5nLmdzdWIoJycsICdeJywgJ3InKSA9PSAncicpCmFzc2VydChzdHJpbmcuZ3N1YignJywgJyQnLCAncicpID09ICdyJykKcHJpbnQoJysnKQoKCmRvICAgLS0gbmV3ICg1LjMuMykgc2VtYW50aWNzIGZvciBlbXB0eSBtYXRjaGVzCiAgYXNzZXJ0KHN0cmluZy5nc3ViKCJhIGIgY2QiLCAiICoiLCAiLSIpID09ICItYS1iLWMtZC0iKQoKICBsb2NhbCByZXMgPSAiIgogIGxvY2FsIHN1YiA9ICJhICBcbmJjXHRcdGQiCiAgbG9jYWwgaSA9IDEKICBmb3IgcCwgZSBpbiBzdHJpbmcuZ21hdGNoKHN1YiwgIigpJXMqKCkiKSBkbwogICAgcmVzID0gcmVzIC4uIHN0cmluZy5zdWIoc3ViLCBpLCBwIC0gMSkgLi4gIi0iCiAgICBpID0gZQogIGVuZAogIGFzc2VydChyZXMgPT0gIi1hLWItYy1kLSIpCmVuZAoKCmFzc2VydChzdHJpbmcuZ3N1YigidW0gKGRvaXMpIHRyZXMgKHF1YXRybykiLCAiKCUoJXcrJSkpIiwgc3RyaW5nLnVwcGVyKSA9PQogICAgICAgICAgICAidW0gKERPSVMpIHRyZXMgKFFVQVRSTykiKQoKZG8KICBsb2NhbCBmdW5jdGlvbiBzZXRnbG9iYWwgKG4sdikgcmF3c2V0KF9HLCBuLCB2KSBlbmQKICBzdHJpbmcuZ3N1YigiYT1yb2JlcnRvLHJvYmVydG89YSIsICIoJXcrKT0oJXcldyopIiwgc2V0Z2xvYmFsKQogIGFzc2VydChfRy5hPT0icm9iZXJ0byIgYW5kIF9HLnJvYmVydG89PSJhIikKZW5kCgpmdW5jdGlvbiBmKGEsYikgcmV0dXJuIHN0cmluZy5nc3ViKGEsJy4nLGIpIGVuZAphc3NlcnQoc3RyaW5nLmdzdWIoInRyb2NhciB0dWRvIGVtIHx0ZXN0ZXxifCDpIHxiZWxlemF8YWx8IiwgInwoW158XSopfChbXnxdKil8IiwgZikgPT0KICAgICAgICAgICAgInRyb2NhciB0dWRvIGVtIGJiYmJiIOkgYWxhbGFsYWxhbGFsIikKCmxvY2FsIGZ1bmN0aW9uIGRvc3RyaW5nIChzKSByZXR1cm4gbG9hZChzLCAiIikoKSBvciAiIiBlbmQKYXNzZXJ0KHN0cmluZy5nc3ViKCJhbG8gJGE9J3gnJCBub3ZhbWVudGUgJHJldHVybiBhJCIsCiAgICAgICAgICAgICAgICAgICAiJChbXiRdKiklJCIsCiAgICAgICAgICAgICAgICAgICBkb3N0cmluZykgPT0gImFsbyAgbm92YW1lbnRlIHgiKQoKeCA9IHN0cmluZy5nc3ViKCIkeD1zdHJpbmcuZ3N1YignYWxvJywgJy4nLCBzdHJpbmcudXBwZXIpJCBhc3NpbSB2YWkgcGFyYSAkcmV0dXJuIHgkIiwKICAgICAgICAgIiQoW14kXSopJSQiLCBkb3N0cmluZykKYXNzZXJ0KHggPT0gJyBhc3NpbSB2YWkgcGFyYSBBTE8nKQoKdCA9IHt9CnMgPSAnYSBhbG8gam9zZSAgam9hbycKciA9IHN0cmluZy5nc3ViKHMsICcoKSgldyspKCknLCBmdW5jdGlvbiAoYSx3LGIpCiAgICAgIGFzc2VydChzdHJpbmcubGVuKHcpID09IGItYSk7CiAgICAgIHRbYV0gPSBiLWE7CiAgICBlbmQpCmFzc2VydChzID09IHIgYW5kIHRbMV0gPT0gMSBhbmQgdFszXSA9PSAzIGFuZCB0WzddID09IDQgYW5kIHRbMTNdID09IDQpCgoKZnVuY3Rpb24gaXNiYWxhbmNlZCAocykKICByZXR1cm4gbm90IHN0cmluZy5maW5kKHN0cmluZy5nc3ViKHMsICIlYigpIiwgIiIpLCAiWygpXSIpCmVuZAoKYXNzZXJ0KGlzYmFsYW5jZWQoIig5ICgoOCkpKFwwKSA3KSBcMFwwIGEgYiAoKShjKSgpIGEiKSkKYXNzZXJ0KG5vdCBpc2JhbGFuY2VkKCIoOSAoKDgpIDcpIGEgYiAoXDAgYykgYSIpKQphc3NlcnQoc3RyaW5nLmdzdWIoImFsbyAnb2knIGFsbyIsICIlYicnIiwgJyInKSA9PSAnYWxvICIgYWxvJykKCgpsb2NhbCB0ID0geyJhcHBsZSIsICJvcmFuZ2UiLCAibGltZSI7IG49MH0KYXNzZXJ0KHN0cmluZy5nc3ViKCJ4IGFuZCB4IGFuZCB4IiwgIngiLCBmdW5jdGlvbiAoKSB0Lm49dC5uKzE7IHJldHVybiB0W3Qubl0gZW5kKQogICAgICAgID09ICJhcHBsZSBhbmQgb3JhbmdlIGFuZCBsaW1lIikKCnQgPSB7bj0wfQpzdHJpbmcuZ3N1YigiZmlyc3Qgc2Vjb25kIHdvcmQiLCAiJXcldyoiLCBmdW5jdGlvbiAodykgdC5uPXQubisxOyB0W3Qubl0gPSB3IGVuZCkKYXNzZXJ0KHRbMV0gPT0gImZpcnN0IiBhbmQgdFsyXSA9PSAic2Vjb25kIiBhbmQgdFszXSA9PSAid29yZCIgYW5kIHQubiA9PSAzKQoKdCA9IHtuPTB9CmFzc2VydChzdHJpbmcuZ3N1YigiZmlyc3Qgc2Vjb25kIHdvcmQiLCAiJXcrIiwKICAgICAgICAgZnVuY3Rpb24gKHcpIHQubj10Lm4rMTsgdFt0Lm5dID0gdyBlbmQsIDIpID09ICJmaXJzdCBzZWNvbmQgd29yZCIpCmFzc2VydCh0WzFdID09ICJmaXJzdCIgYW5kIHRbMl0gPT0gInNlY29uZCIgYW5kIHRbM10gPT0gdW5kZWYpCgpjaGVja2Vycm9yKCJpbnZhbGlkIHJlcGxhY2VtZW50IHZhbHVlICUoYSB0YWJsZSUpIiwKICAgICAgICAgICAgc3RyaW5nLmdzdWIsICJhbG8iLCAiLiIsIHthID0ge319KQpjaGVja2Vycm9yKCJpbnZhbGlkIGNhcHR1cmUgaW5kZXggJSUyIiwgc3RyaW5nLmdzdWIsICJhbG8iLCAiLiIsICIlMiIpCmNoZWNrZXJyb3IoImludmFsaWQgY2FwdHVyZSBpbmRleCAlJTAiLCBzdHJpbmcuZ3N1YiwgImFsbyIsICIoJTApIiwgImEiKQpjaGVja2Vycm9yKCJpbnZhbGlkIGNhcHR1cmUgaW5kZXggJSUxIiwgc3RyaW5nLmdzdWIsICJhbG8iLCAiKCUxKSIsICJhIikKY2hlY2tlcnJvcigiaW52YWxpZCB1c2Ugb2YgJyUlJyIsIHN0cmluZy5nc3ViLCAiYWxvIiwgIi4iLCAiJXgiKQoKCmlmIG5vdCBfc29mdCB0aGVuCiAgcHJpbnQoImJpZyBzdHJpbmdzIikKICBsb2NhbCBhID0gc3RyaW5nLnJlcCgnYScsIDMwMDAwMCkKICBhc3NlcnQoc3RyaW5nLmZpbmQoYSwgJ15hKi4/JCcpKQogIGFzc2VydChub3Qgc3RyaW5nLmZpbmQoYSwgJ15hKi4/YiQnKSkKICBhc3NlcnQoc3RyaW5nLmZpbmQoYSwgJ15hLS4/JCcpKQoKICAtLSBidWcgaW4gNS4xLjIKICBhID0gc3RyaW5nLnJlcCgnYScsIDEwMDAwKSAuLiBzdHJpbmcucmVwKCdiJywgMTAwMDApCiAgYXNzZXJ0KG5vdCBwY2FsbChzdHJpbmcuZ3N1YiwgYSwgJ2InKSkKZW5kCgotLSByZWN1cnNpdmUgbmVzdCBvZiBnc3VicwpmdW5jdGlvbiByZXYgKHMpCiAgcmV0dXJuIHN0cmluZy5nc3ViKHMsICIoLikoLispIiwgZnVuY3Rpb24gKGMsczEpIHJldHVybiByZXYoczEpLi5jIGVuZCkKZW5kCgpsb2NhbCB4ID0gImFiY2RlZiIKYXNzZXJ0KHJldihyZXYoeCkpID09IHgpCgoKLS0gZ3N1YiB3aXRoIHRhYmxlcwphc3NlcnQoc3RyaW5nLmdzdWIoImFsbyBhbG8iLCAiLiIsIHt9KSA9PSAiYWxvIGFsbyIpCmFzc2VydChzdHJpbmcuZ3N1YigiYWxvIGFsbyIsICIoLikiLCB7YT0iQUEiLCBsPSIifSkgPT0gIkFBbyBBQW8iKQphc3NlcnQoc3RyaW5nLmdzdWIoImFsbyBhbG8iLCAiKC4pLiIsIHthPSJBQSIsIGw9IksifSkgPT0gIkFBbyBBQW8iKQphc3NlcnQoc3RyaW5nLmdzdWIoImFsbyBhbG8iLCAiKCguKSguPykpIiwge2FsPSJBQSIsIG89ZmFsc2V9KSA9PSAiQUFvIEFBbyIpCgphc3NlcnQoc3RyaW5nLmdzdWIoImFsbyBhbG8iLCAiKCkuIiwgeyd4JywneXknLCd6enonfSkgPT0gInh5eXp6eiBhbG8iKQoKdCA9IHt9OyBzZXRtZXRhdGFibGUodCwge19faW5kZXggPSBmdW5jdGlvbiAodCxzKSByZXR1cm4gc3RyaW5nLnVwcGVyKHMpIGVuZH0pCmFzc2VydChzdHJpbmcuZ3N1YigiYSBhbG8gYiBoaSIsICIldyV3KyIsIHQpID09ICJhIEFMTyBiIEhJIikKCgotLSB0ZXN0cyBmb3IgZ21hdGNoCmxvY2FsIGEgPSAwCmZvciBpIGluIHN0cmluZy5nbWF0Y2goJ2FiY2RlJywgJygpJykgZG8gYXNzZXJ0KGkgPT0gYSsxKTsgYT1pIGVuZAphc3NlcnQoYT09NikKCnQgPSB7bj0wfQpmb3IgdyBpbiBzdHJpbmcuZ21hdGNoKCJmaXJzdCBzZWNvbmQgd29yZCIsICIldysiKSBkbwogICAgICB0Lm49dC5uKzE7IHRbdC5uXSA9IHcKZW5kCmFzc2VydCh0WzFdID09ICJmaXJzdCIgYW5kIHRbMl0gPT0gInNlY29uZCIgYW5kIHRbM10gPT0gIndvcmQiKQoKdCA9IHszLCA2LCA5fQpmb3IgaSBpbiBzdHJpbmcuZ21hdGNoICgieHV4eCB1dSBwcGFyIHIiLCAiKCkoLiklMiIpIGRvCiAgYXNzZXJ0KGkgPT0gdGFibGUucmVtb3ZlKHQsIDEpKQplbmQKYXNzZXJ0KCN0ID09IDApCgp0ID0ge30KZm9yIGksaiBpbiBzdHJpbmcuZ21hdGNoKCIxMyAxNCAxMCA9IDExLCAxNT0gMTYsIDIyPTIzIiwgIiglZCspJXMqPSVzKiglZCspIikgZG8KICB0W3RvbnVtYmVyKGkpXSA9IHRvbnVtYmVyKGopCmVuZAphID0gMApmb3Igayx2IGluIHBhaXJzKHQpIGRvIGFzc2VydChrKzEgPT0gdiswKTsgYT1hKzEgZW5kCmFzc2VydChhID09IDMpCgoKZG8gICAtLSBpbml0IHBhcmFtZXRlciBpbiBnbWF0Y2gKICBsb2NhbCBzID0gMAogIGZvciBrIGluIHN0cmluZy5nbWF0Y2goIjEwIDIwIDMwIiwgIiVkKyIsIDMpIGRvCiAgICBzID0gcyArIHRvbnVtYmVyKGspCiAgZW5kCiAgYXNzZXJ0KHMgPT0gNTApCgogIHMgPSAwCiAgZm9yIGsgaW4gc3RyaW5nLmdtYXRjaCgiMTEgMjEgMzEiLCAiJWQrIiwgLTQpIGRvCiAgICBzID0gcyArIHRvbnVtYmVyKGspCiAgZW5kCiAgYXNzZXJ0KHMgPT0gMzIpCgogIC0tIHRoZXJlIGlzIGFuIGVtcHR5IHN0cmluZyBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0CiAgcyA9IDAKICBmb3IgayBpbiBzdHJpbmcuZ21hdGNoKCIxMSAyMSAzMSIsICIldyoiLCA5KSBkbwogICAgcyA9IHMgKyAxCiAgZW5kCiAgYXNzZXJ0KHMgPT0gMSkKCiAgLS0gdGhlcmUgYXJlIG5vIGVtcHR5IHN0cmluZ3MgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3ViamVjdAogIHMgPSAwCiAgZm9yIGsgaW4gc3RyaW5nLmdtYXRjaCgiMTEgMjEgMzEiLCAiJXcqIiwgMTApIGRvCiAgICBzID0gcyArIDEKICBlbmQKICBhc3NlcnQocyA9PSAwKQplbmQKCgotLSB0ZXN0cyBmb3IgYCVmJyAoYGZyb250aWVycycpCgphc3NlcnQoc3RyaW5nLmdzdWIoImFhYSBhYSBhIGFhYSBhIiwgIiVmWyV3XWEiLCAieCIpID09ICJ4YWEgeGEgeCB4YWEgeCIpCmFzc2VydChzdHJpbmcuZ3N1YigiW1tdXSBbXVtdIFtbW1siLCAiJWZbW10uIiwgIngiKSA9PSAieFtdXSB4XXhdIHhbW1siKQphc3NlcnQoc3RyaW5nLmdzdWIoIjAxYWJjNDVkZTMiLCAiJWZbJWRdIiwgIi4iKSA9PSAiLjAxYWJjLjQ1ZGUuMyIpCmFzc2VydChzdHJpbmcuZ3N1YigiMDFhYmM0NSBkZTN4IiwgIiVmWyVEXSV3IiwgIi4iKSA9PSAiMDEuYmM0NSBkZTMuIikKYXNzZXJ0KHN0cmluZy5nc3ViKCJmdW5jdGlvbiIsICIlZltcMS1cMjU1XSV3IiwgIi4iKSA9PSAiLnVuY3Rpb24iKQphc3NlcnQoc3RyaW5nLmdzdWIoImZ1bmN0aW9uIiwgIiVmW15cMS1cMjU1XSIsICIuIikgPT0gImZ1bmN0aW9uLiIpCgphc3NlcnQoc3RyaW5nLmZpbmQoImEiLCAiJWZbYV0iKSA9PSAxKQphc3NlcnQoc3RyaW5nLmZpbmQoImEiLCAiJWZbXiV6XSIpID09IDEpCmFzc2VydChzdHJpbmcuZmluZCgiYSIsICIlZlteJWxdIikgPT0gMikKYXNzZXJ0KHN0cmluZy5maW5kKCJhYmEiLCAiJWZbYSV6XSIpID09IDMpCmFzc2VydChzdHJpbmcuZmluZCgiYWJhIiwgIiVmWyV6XSIpID09IDQpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoImFiYSIsICIlZlslbCV6XSIpKQphc3NlcnQobm90IHN0cmluZy5maW5kKCJhYmEiLCAiJWZbXiVsJXpdIikpCgpsb2NhbCBpLCBlID0gc3RyaW5nLmZpbmQoIiBhbG8gYWFsbyBhbGxvIiwgIiVmWyVTXS4tJWZbJXNdLi0lZlslU10iKQphc3NlcnQoaSA9PSAyIGFuZCBlID09IDUpCmxvY2FsIGsgPSBzdHJpbmcubWF0Y2goIiBhbG8gYWFsbyBhbGxvIiwgIiVmWyVTXSguLSVmWyVzXS4tJWZbJVNdKSIpCmFzc2VydChrID09ICdhbG8gJykKCmxvY2FsIGEgPSB7MSwgNSwgOSwgMTQsIDE3LH0KZm9yIGsgaW4gc3RyaW5nLmdtYXRjaCgiYWxvIGFsbyB0aDAyIGlzIDFoYXQiLCAiKCklZlsldyVkXSIpIGRvCiAgYXNzZXJ0KHRhYmxlLnJlbW92ZShhLCAxKSA9PSBrKQplbmQKYXNzZXJ0KCNhID09IDApCgoKLS0gbWFsZm9ybWVkIHBhdHRlcm5zCmxvY2FsIGZ1bmN0aW9uIG1hbGZvcm0gKHAsIG0pCiAgbSA9IG0gb3IgIm1hbGZvcm1lZCIKICBsb2NhbCByLCBtc2cgPSBwY2FsbChzdHJpbmcuZmluZCwgImEiLCBwKQogIGFzc2VydChub3QgciBhbmQgc3RyaW5nLmZpbmQobXNnLCBtKSkKZW5kCgptYWxmb3JtKCIoLiIsICJ1bmZpbmlzaGVkIGNhcHR1cmUiKQptYWxmb3JtKCIuKSIsICJpbnZhbGlkIHBhdHRlcm4gY2FwdHVyZSIpCm1hbGZvcm0oIlthIikKbWFsZm9ybSgiW10iKQptYWxmb3JtKCJbXl0iKQptYWxmb3JtKCJbYSVdIikKbWFsZm9ybSgiW2ElIikKbWFsZm9ybSgiJWIiKQptYWxmb3JtKCIlYmEiKQptYWxmb3JtKCIlIikKbWFsZm9ybSgiJWYiLCAibWlzc2luZyIpCgotLSBcMCBpbiBwYXR0ZXJucwphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYlwwXDFcMmMiLCAiW1wwLVwyXSsiKSA9PSAiXDBcMVwyIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWJcMFwxXDJjIiwgIltcMC1cMF0rIikgPT0gIlwwIikKYXNzZXJ0KHN0cmluZy5maW5kKCJiJGEiLCAiJFwwPyIpID09IDIpCmFzc2VydChzdHJpbmcuZmluZCgiYWJjXDBlZmciLCAiJVwwIikgPT0gNCkKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWJjXDBlZmdcMFwxZVwxZyIsICIlYlwwXDEiKSA9PSAiXDBlZmdcMFwxZVwxIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWJjXDBcMFwwIiwgIiVcMCsiKSA9PSAiXDBcMFwwIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWJjXDBcMFwwIiwgIiVcMCVcMD8iKSA9PSAiXDBcMCIpCgotLSBtYWdpYyBjaGFyIGFmdGVyIFwwCmFzc2VydChzdHJpbmcuZmluZCgiYWJjXDBcMCIsIlwwLiIpID09IDQpCmFzc2VydChzdHJpbmcuZmluZCgiYWJjeFwwXDBhYmNcMGFiYyIsInhcMFwwYWJjXDBhLiIpID09IDQpCgoKZG8gICAtLSB0ZXN0IHJldXNlIG9mIG9yaWdpbmFsIHN0cmluZyBpbiBnc3ViCiAgbG9jYWwgcyA9IHN0cmluZy5yZXAoImEiLCAxMDApCiAgbG9jYWwgciA9IHN0cmluZy5nc3ViKHMsICJiIiwgImMiKSAgIC0tIG5vIG1hdGNoCiAgYXNzZXJ0KHN0cmluZy5mb3JtYXQoIiVwIiwgcykgPT0gc3RyaW5nLmZvcm1hdCgiJXAiLCByKSkKCiAgciA9IHN0cmluZy5nc3ViKHMsICIuIiwge3ggPSAieSJ9KSAgIC0tIG5vIHN1YnN0aXR1dGlvbnMKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBzKSA9PSBzdHJpbmcuZm9ybWF0KCIlcCIsIHIpKQoKICBsb2NhbCBjb3VudCA9IDAKICByID0gc3RyaW5nLmdzdWIocywgIi4iLCBmdW5jdGlvbiAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh4ID09ICJhIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmlsICAgIC0tIG5vIHN1YnN0aXR1dGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCkKICByID0gc3RyaW5nLmdzdWIociwgIi4iLCB7YiA9ICd4J30pICAgLS0gImEiIGlzIG5vdCBhIGtleTsgbm8gc3Vic3QuCiAgYXNzZXJ0KGNvdW50ID09IDEwMCkKICBhc3NlcnQoc3RyaW5nLmZvcm1hdCgiJXAiLCBzKSA9PSBzdHJpbmcuZm9ybWF0KCIlcCIsIHIpKQoKICBjb3VudCA9IDAKICByID0gc3RyaW5nLmdzdWIocywgIi4iLCBmdW5jdGlvbiAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh4ID09ICJhIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geCAgICAtLSBzdWJzdGl0dXRpb24uLi4KICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQpCiAgYXNzZXJ0KGNvdW50ID09IDEwMCkKICAtLSBubyByZXVzZSBpbiB0aGlzIGNhc2UKICBhc3NlcnQociA9PSBzIGFuZCBzdHJpbmcuZm9ybWF0KCIlcCIsIHMpIH49IHN0cmluZy5mb3JtYXQoIiVwIiwgcikpCmVuZAoKcHJpbnQoJ09LJykKCg==