履修者数の推移

LS0tCnRpdGxlOiAi5a6H5a6Z5Zyw55CD5o6I5qWt6KmV5L6hIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwotLS0KCmBgYHtyIHNldHVwLCBlY2hvPUZBTFNFLCBjYWNoZT1GLCByZXN1bHRzPSJoaWRlIiwgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShrbml0cikKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgY2FjaGU9RkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgZHBpPTYwMCwgZmlnLnBvcz0iaCIsIGVuZ2luZS5wYXRoID0gJy9ob21lL2RvaS9taW5pY29uZGEzL2Jpbi9weXRob24nKQpwa2dzIDwtIGMoInJlYWR4bCIsIm1hZ3JpdHRyIiwicGx5ciIsInRpZHl2ZXJzZSIsInBsb3RseSIsInRleHRyZWFkciIsIkRUIiwicm1hcmtkb3duIikKbGFwcGx5KHBrZ3MsIHJlcXVpcmUsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkKb3B0aW9ucyh4dGFibGUuY29tbWVudCA9IEZBTFNFKQpgYGAKCmBgYHtyIGRhdGFfaW5wdXQsIGluY2x1ZGU9RkFMU0V9CmRhdGEuZGlyIDwtICIvaG9tZS9kb2kvZG9jcy9oeW91a2EvZGF0YS8iCmxpc3QuZmlsZXMoZGF0YS5kaXIpIC0+IHRlcm0KCmthbW9rdSA8LSBrYWl0b3UgPC0gY29tbWVudCA8LSBkYXRhLmZyYW1lKDApCmZvcihpIGluIDE6bGVuZ3RoKHRlcm0pKXsKICBwYXN0ZTAoZGF0YS5kaXIsdGVybVtpXSwiL+enkeebruODh+ODvOOCvyIpICU+JSBsaXN0LmZpbGVzICU+JSBwYXN0ZTAoZGF0YS5kaXIsdGVybVtpXSwiL+enkeebruODh+ODvOOCvy8iLC4pICU+JSByZWFkX2V4Y2VsIC0+IGthbW9rdS50CiAgaWYoa2Ftb2t1LnQgJT4lIG5hbWVzICU+JSBtYXRjaCgn5bGl5L+u5Lq65pWwJywuKSAlPiUgaXMubmEgJT4lICchJyguKSkKICAgIGthbW9rdS50ICU8PiUgcmVuYW1lKOWxpeS/ruiAheaVsD3lsaXkv67kurrmlbApCiAgaWYoa2Ftb2t1LnQgJT4lIG5hbWVzICU+JSBtYXRjaCgn56eR55uu44Kz44O844OJJywuKSAlPiUgaXMubmEgJT4lICchJyguKSkKICAgIGthbW9rdS50ICU8PiUgcmVuYW1lKOenkeebrueVquWPtz3np5Hnm67jgrPjg7zjg4kpCiAgaWYoa2Ftb2t1LnQgJT4lIG5hbWVzICU+JSBtYXRjaCgn5pWZ5a6Y5ZCNJywuKSAlPiUgaXMubmEgJT4lICchJyguKSkKICAgIGthbW9rdS50ICU8PiUgcmVuYW1lKOaVmeWToeawj+WQjT3mlZnlrpjlkI0pCiAga2Ftb2t1LnQgJTw+JSBtdXRhdGUo5Zue5Y+O5pWwPWFzLm51bWVyaWMo5Zue5Y+O5pWwKSznp5Hnm67nlarlj7c9YXMubnVtZXJpYyjnp5Hnm67nlarlj7cpLOizquWVj+elqD1hcy5udW1lcmljKOizquWVj+elqCkpICU+JQogICAgbXV0YXRlKOWtpuacnz10ZXJtW2ldKQogIGlmKGthbW9rdS50ICU+JSBuYW1lcyAlPiUgbWF0Y2goJ+aOiOalre+8qe+8pCcsLikgJT4lIGlzLm5hICU+JSAnIScoLikpCiAgICBrYW1va3UudCAlPD4lIHJlbmFtZSjmjojmpa1JRD3mjojmpa3vvKnvvKQpCiAga2Ftb2t1LnQgJTw+JSBtdXRhdGUo5o6I5qWtSUQ9YXMubnVtZXJpYyjmjojmpa1JRCkpCiAgaWYoa2Ftb2t1LnQgJT4lIG5hbWVzICU+JSBtYXRjaCgn5pWZ5a6Y55Wq5Y+3JywuKSAlPiUgaXMubmEgJT4lICchJyguKSkKICAgIGthbW9rdS50ICU8PiUgbXV0YXRlKOaVmeWToeeVquWPtz1hcy5udW1lcmljKOaVmeWumOeVquWPtykpICU+JSBzZWxlY3QoLeaVmeWumOeVquWPtykKICBpZihrYW1va3UudCAlPiUgbmFtZXMgJT4lIG1hdGNoKCfmlZnlk6HljLrliIYnLC4pICU+JSBpcy5uYSAlPiUgJyEnKC4pKQogICAga2Ftb2t1LnQgJTw+JSBtdXRhdGUo5pWZ5ZOh5Yy65YiGPWFzLmNoYXJhY3RlcijmlZnlk6HljLrliIYpKQogIGlmKGthbW9rdS50ICU+JSBuYW1lcyAlPiUgbWF0Y2goJ+aVmeWumOWMuuWIhicsLikgJT4lIGlzLm5hICU+JSAnIScoLikpCiAgICBrYW1va3UudCAlPD4lIG11dGF0ZSjmlZnlk6HljLrliIY9YXMuY2hhcmFjdGVyKOaVmeWumOWMuuWIhikpICU+JSBzZWxlY3QoLeaVmeWumOWMuuWIhikKICBpZihrYW1va3UudCAlPiUgbmFtZXMgJT4lIG1hdGNoKCfmlZnlk6HjgrPjg7zjg4knLC4pICU+JSBpcy5uYSAlPiUgJyEnKC4pKQogICAga2Ftb2t1LnQgJTw+JSBtdXRhdGUo5pWZ5ZOh44Kz44O844OJPWFzLm51bWVyaWMo5pWZ5ZOh44Kz44O844OJKSkKICBpZihrYW1va3UudCAlPiUgbmFtZXMgJT4lIG1hdGNoKCflsaXkv67ogIXmlbAnLC4pICU+JSBpcy5uYSAlPiUgJyEnKC4pKQogICAga2Ftb2t1LnQgJTw+JSBtdXRhdGUo5bGl5L+u6ICF5pWwPWFzLm51bWVyaWMo5bGl5L+u6ICF5pWwKSkKICBrYW1va3UudCAlPD4lCiAgICBtdXRhdGUo6YOo5Lya55Wq5Y+3PWFzLm51bWVyaWMo6YOo5Lya55Wq5Y+3KSkKICBrYW1va3UudCAlPD4lIC5bIWlzLm5hKGthbW9rdS50JOmDqOS8muWQjSksXQogIGthbW9rdSAlPD4lIGJpbmRfcm93cyhrYW1va3UudCkKICBwYXN0ZTAoZGF0YS5kaXIsdGVybVtpXSwiL+WbnuetlOODh+ODvOOCvyIpICU+JSBsaXN0LmZpbGVzICU+JSBwYXN0ZTAoZGF0YS5kaXIsdGVybVtpXSwiL+WbnuetlOODh+ODvOOCvy8iLC4pICU+JSByZWFkX2V4Y2VsICU+JQogICAgbXV0YXRlKOWtpuacnz10ZXJtW2ldLOmDqOS8mueVquWPtz1hcy5udW1lcmljKOmDqOS8mueVquWPtykpICU+JSBmaWx0ZXIo6YOo5Lya55Wq5Y+3ID09IDIzKSAlPiUgc2VsZWN0KC1udW1fcmFuZ2UocHJlZml4PSIiLHJhbmdlPTE6MTAwMCx3aWR0aD0xKSkgLT4ga2FpdG91LnQKICB0cnkoa2FpdG91LnQgJTw+JSBzZWxlY3QoLVhfXzUpLHNpbGVudD1UUlVFKQogIHRyeShrYWl0b3UudCAlPD4lIHNlbGVjdCgtJzE1NV9fMScpLHNpbGVudD1UUlVFKQogIHRyeShrYWl0b3UudCAlPD4lIHNlbGVjdCgtJzE1Nl9fMScpLHNpbGVudD1UUlVFKQogIHRyeShrYWl0b3UudCAlPD4lIHNlbGVjdCgtJzE1N19fMScpLHNpbGVudD1UUlVFKQogIHRyeShrYWl0b3UudCAlPD4lIHNlbGVjdCgtJzE1OF9fMScpLHNpbGVudD1UUlVFKQogIGlmKGk9PTEpewogICAga2FpdG91IDwtIGthaXRvdS50CiAgfWVsc2V7CiAgICBrYWl0b3UgJTw+JSBiaW5kX3Jvd3Moa2FpdG91LnQpCiAgfQogIHBhc3RlMChkYXRhLmRpcix0ZXJtW2ldLCIv6Ieq55Sx5Zue562UIikgJT4lIGxpc3QuZmlsZXMgJT4lIHBhc3RlMChkYXRhLmRpcix0ZXJtW2ldLCIv6Ieq55Sx5Zue562ULyIsLikgJT4lIHJlYWRfZXhjZWwgLT4gY29tbWVudC50CiAgI+aVmeWumOWQjeOBquOBl+OBquOCiQogIGlmKGNvbW1lbnQudCAlPiUgbmFtZXMgJT4lIG1hdGNoKCfmlZnlrpjlkI0nLC4pICU+JSBpcy5uYSl7CiAgICBjb21tZW50LnQgJTw+JSBsZWZ0X2pvaW4oa2Ftb2t1LnQlPiVzZWxlY3Qo5o6I5qWtSUQs5pWZ5ZOh5rCP5ZCNLOmDqOS8muWQjSzpg6jkvJrnlarlj7cs56eR55uu5ZCNKSwgYnkgPSAi5o6I5qWtSUQiKSAlPiUKICAgICAgZmlsdGVyKCFpcy5uYSjmlZnlk6HmsI/lkI0pKSAlPiUKICAgICAgcmVuYW1lKOaVmeWumOWQjSA9IOaVmeWToeawj+WQjSkKICB9CiAgIyLlhoXlrrkiLCLoh6rnlLHlm57nrZQi44KSIuWbnuetlCLjgavlpInmm7QKICBpZihjb21tZW50LnQgJT4lIG5hbWVzICU+JSBtYXRjaCgn5YaF5a65JywuKSAlPiUgaXMubmEgJT4lICchJyguKSkKICAgIGNvbW1lbnQudCAlPD4lIHJlbmFtZSjlm57nrZQ95YaF5a65KQogIGlmKGNvbW1lbnQudCAlPiUgbmFtZXMgJT4lIG1hdGNoKCfoh6rnlLHlm57nrZQnLC4pICU+JSBpcy5uYSAlPiUgJyEnKC4pKQogICAgY29tbWVudC50ICU8PiUgcmVuYW1lKOWbnuetlD3oh6rnlLHlm57nrZQpCiAgY29tbWVudC50ICU+JQogICAgbXV0YXRlKOmDqOS8muWQjT1hcy5mYWN0b3Io6YOo5Lya5ZCNKSzpg6jkvJrnlarlj7c9YXMubnVtZXJpYyjpg6jkvJrnlarlj7cpKSAlPiUgLlsuJOmDqOS8muWQjT09IuWuh+WumeWcsOeQgyIsXSAlPiUKICAgIG11dGF0ZSjlrabmnJ89dGVybVtpXSkgJT4lCiAgICBiaW5kX3Jvd3MoY29tbWVudCkgLT4gY29tbWVudAp9Cgoj56eR55uu44OH44O844K/44Gu44Kv44Oq44O844OL44Oz44KwCmthbW9rdSAlPD4lIC5bIWlzLm5hKGthbW9rdSTpg6jkvJrlkI0pLF0gJT4lIHNlbGVjdCgtWDApCmthbW9rdSTmlZnlk6HmsI/lkI0gJTw+JSBzdWIoIuOAgCIsICIgIiwgLikKa2Ftb2t1JOenkeebruWQjSAlPD4lIHN1Yigi77yIIiwgIigiLCAuKQprYW1va3Uk56eR55uu5ZCNICU8PiUgc3ViKCLvvIkiLCAiKSIsIC4pCmthbW9rdVtrYW1va3Uk56eR55uu5ZCNPT0n5a6H5a6Z56eR5a2m4oWgJyZrYW1va3Uk5pWZ5ZOh5rCP5ZCNPT0n5rGf6YeM5Y+jIOiJr+ayuycsJ+enkeebruWQjSddIDwtICflroflrpnnp5HlrabihaAo5paH56eR55SfKScKa2Ftb2t1W2thbW9rdSTnp5Hnm67lkI09PSfmg5HmmJ/lnLDnkIPnp5HlrabihaAnJmthbW9rdSTmlZnlk6HmsI/lkI09PSflsI/msrMg5q2j5Z+6JyZrYW1va3Uk5a2m5pyfPT0iJzAz5aSPIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoCjmlofnp5HnlJ8pJwprYW1va3Vba2Ftb2t1JOenkeebruWQjT09J+aDkeaYn+WcsOeQg+enkeWtpuKFoCcma2Ftb2t1JOaVmeWToeawj+WQjT09J+ejr+W0jiDooYzpm4QnJmthbW9rdSTlrabmnJ89PSInMDPlhqwiLCfnp5Hnm67lkI0nXSA8LSAn5oOR5pif5Zyw55CD56eR5a2m4oWgKOaWh+enkeeUnyknCmthbW9rdVtrYW1va3Uk56eR55uu5ZCNPT0n5oOR5pif5Zyw55CD56eR5a2m4oWgJyZrYW1va3Uk5pWZ5ZOh5rCP5ZCNPT0n5bCP5rKzIOato+Wfuicma2Ftb2t1JOWtpuacnz09IicwNOWkjyIsJ+enkeebruWQjSddIDwtICfmg5HmmJ/lnLDnkIPnp5HlrabihaAo5paH56eR55SfKScKa2Ftb2t1W2thbW9rdSTnp5Hnm67lkI09PSfmg5HmmJ/lnLDnkIPnp5HlrabihaAnJmthbW9rdSTmlZnlk6HmsI/lkI09PSfno6/ltI4g6KGM6ZuEJyZrYW1va3Uk5a2m5pyfPT0iJzA05YasIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoCjmlofnp5HnlJ8pJwprYW1va3Vba2Ftb2t1JOenkeebruWQjT09J+aDkeaYn+WcsOeQg+enkeWtpuKFoCcma2Ftb2t1JOaVmeWToeawj+WQjT09J+Wwj+aysyDmraPln7onJmthbW9rdSTlrabmnJ89PSInMDXlpI8iLCfnp5Hnm67lkI0nXSA8LSAn5oOR5pif5Zyw55CD56eR5a2m4oWgKOaWh+enkeeUnyknCmthbW9rdVtrYW1va3Uk56eR55uu5ZCNPT0n5oOR5pif5Zyw55CD56eR5a2m4oWgJyZrYW1va3Uk5pWZ5ZOh5rCP5ZCNPT0n5bCP5rKzIOato+Wfuicma2Ftb2t1JOWtpuacnz09IicwN+WkjyIsJ+enkeebruWQjSddIDwtICfmg5HmmJ/lnLDnkIPnp5HlrabihaAo5paH56eR55SfKScKa2Ftb2t1W2thbW9rdSTnp5Hnm67lkI09PSfmg5HmmJ/lnLDnkIPnp5HlrabihaEnJmthbW9rdSTmlZnlk6HmsI/lkI09PSfno6/ltI4g6KGM6ZuEJyZrYW1va3Uk5a2m5pyfPT0iJzA15YasIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoSjmlofnp5HnlJ8pJwprYW1va3Uk56eR55uu5ZCNICU+JSB1bmlxdWUgJT4lIGdyZXAoIueQhuenkeeUnyIsLikgLT4gcmlrYQprYW1va3Uk56eR55uu5ZCNICU+JSB1bmlxdWUgJT4lIC5bcmlrYV0gLT4gcmlrYQojKOeQhuenkeeUnynjga7ku5jjgYTjgabjgYTjgarjgYTnp5Hnm67lkI3jgavjga/liqDjgYjjgosKZm9yKGkgaW4gMTpsZW5ndGgocmlrYSkpewogIHJpa2FbaV0gJT4lIHN0cnNwbGl0KCJcXCjnkIbnp5HnlJ9cXCkiKSAlPiUgdW5saXN0ICU+JSAuWzFdICU+JQogICAgbWF0Y2goa2Ftb2t1JOenkeebruWQjSwuKSAlPiUgaXMubmEgJT4lIGAhYCAtPiByZXBsCiAga2Ftb2t1JOenkeebruWQjVtyZXBsXSA8LSByaWthW2ldCn0KCiPlm57nrZTjg4fjg7zjgr/jga7jgq/jg6rjg7zjg4vjg7PjgrAKa2FpdG91ICU8PiUgcmVuYW1lKOenkeebruOCs+ODvOODiT3np5Hnm67nlarlj7cpICU+JSBtdXRhdGUo56eR55uu44Kz44O844OJPWFzLm51bWVyaWMo56eR55uu44Kz44O844OJKSkKI+WbnuetlOODh+ODvOOCv+OCkuWvvuW/nOOBmeOCi+WbnuetlOODhuOCreOCueODiOOBq+WFpeOCjOabv+OBiApmb3IoaSBpbiAxOmxlbmd0aCh0ZXJtKSl7CiAgcGFzdGUwKGRhdGEuZGlyLHRlcm1baV0sIi/os6rllY/npagiKSAlPiUgbGlzdC5maWxlcyAlPiUgcGFzdGUwKGRhdGEuZGlyLHRlcm1baV0sIi/os6rllY/npagvIiwuKSAlPiUgcmVhZF9kb2N1bWVudCAlPiUgc3Ryc3BsaXQoJ1xuJykgJT4lIHVubGlzdCAtPiBlbnF1aXJ5CiAgZW5xdWlyeSAlPiUgZ3JlcCgnXFxbKDF8MnwzfDR8NXw2fDd8OHw5fDApK1xcXScsLikgLT4gc2hpdHN1bW9uCiAgZW5xdWlyeVtzaGl0c3Vtb25dICU+JSBncmVwKCdcXFs1XFxdJywuKSAtPiBzaGl0c3Vtb24uc3QKICBzaGl0c3Vtb24gJTw+JSAuW3NoaXRzdW1vbi5zdDpsZW5ndGgoc2hpdHN1bW9uKV0gJT4lIGMobGVuZ3RoKGVucXVpcnkpKQogIHNoaXRzdW1vbi50ZXh0IDwtIGNoYXJhY3RlcihsZW5ndGgoc2hpdHN1bW9uKS0xKQogIG9mZnNldCA8LSAwCiAga2FpdG91LnRleHQgPC0gbGlzdCgwKQogIHBhc3RlMChkYXRhLmRpcix0ZXJtW2ldLCIv5Zue562U44OH44O844K/IikgJT4lIGxpc3QuZmlsZXMgJT4lIHBhc3RlMChkYXRhLmRpcix0ZXJtW2ldLCIv5Zue562U44OH44O844K/LyIsLikgJT4lIHJlYWRfZXhjZWwgJT4lIHNlbGVjdCgtbnVtX3JhbmdlKHByZWZpeD0iIixyYW5nZT0xOjEwMDAsd2lkdGg9MSkpICU+JSBuYW1lcyAtPiBzaGl0c3Vtb24uaXRlbQogIG1hdGNoKGMoJ+mDqOS8mueVquWPtycsJ+izquWVj+elqCcsJ+aOiOalrUlEJywn56eR55uu55Wq5Y+3Jywn5pWZ5a6Y55Wq5Y+3JywnWF9fNScsJzE1NV9fMScsJzE1Nl9fMScsJzE1N19fMScsJzE1OF9fMScpLHNoaXRzdW1vbi5pdGVtKSAtPiBleGMuaXRlbQogIGV4Yy5pdGVtIDwtIGV4Yy5pdGVtWyFpcy5uYShleGMuaXRlbSldCiAgc2hpdHN1bW9uLml0ZW0gPC0gc2hpdHN1bW9uLml0ZW1bISgxOmxlbmd0aChzaGl0c3Vtb24uaXRlbSkgJWluJSBleGMuaXRlbSldCiAgc2hpdHN1bW9uLml0ZW0gJT4lIAogICAgbWF0Y2goYygnWF9fMScsJ1hfXzInLCdYX18zJywnWF9fNCcpLC4pIC0+IGV4Yy5pdGVtCiAgZXhjLml0ZW0gPC0gZXhjLml0ZW1bIWlzLm5hKGV4Yy5pdGVtKV0KICBzaGl0c3Vtb24ubmFtZSA8LSBzaGl0c3Vtb24uaXRlbVshKDE6bGVuZ3RoKHNoaXRzdW1vbi5pdGVtKSAlaW4lIGV4Yy5pdGVtKV0KICAgIAogIGZvcihqIGluIDE6KGxlbmd0aChzaGl0c3Vtb24pLTEpKXsKICAgIHNoaXRzdW1vbi50ZXh0W2pdIDwtIGVucXVpcnlbc2hpdHN1bW9uW2pdXQogICAgZm9yKGsgaW4gKHNoaXRzdW1vbltqXSsxKTooc2hpdHN1bW9uW2orMV0tMSkpewogICAgICBpZihlbnF1aXJ5W2tdPT0iIiZyZWdleHByKCcxLScsc2hpdHN1bW9uLnRleHRbal0pPjApIGJyZWFrCiAgICAgIHNoaXRzdW1vbi50ZXh0W2pdICU8PiUgcGFzdGUwKGVucXVpcnlba10pCiAgICB9CiAgICBzaGl0c3Vtb24udGV4dFtqXSAlPD4lIHN1YnN0ciguLHJlZ2V4cHIoJ1xcXScsLikrMSxuY2hhciguKSkKICAgIGlmKHJlZ2V4cHIoJyAnLHNoaXRzdW1vbi50ZXh0W2pdKT09MSkgc2hpdHN1bW9uLnRleHRbal0gJTw+JSBzdWJzdHIoLiwyLG5jaGFyKC4pKQogICAgCiAgICBrYWl0b3UuaXRlbSA8LSBudW1lcmljKDApCiAgICBmb3IoayBpbiAxOjkpewogICAgICBzaGl0c3Vtb24udGV4dFtqXSAlPiUgcmVnZXhwcihwYXN0ZTAoaywnLScpLC4pICU+JSBjKGthaXRvdS5pdGVtLC4pIC0+IGthaXRvdS5pdGVtCiAgICAgIGlmKGthaXRvdS5pdGVtW2tdPT0tMSl7CiAgICAgICAga2FpdG91Lml0ZW1ba10gPC0gbmNoYXIoc2hpdHN1bW9uLnRleHRbal0pKzEKICAgICAgICBicmVhawogICAgICB9CiAgICB9CiAgICBrYWl0b3UudG1wIDwtIGNoYXJhY3RlcihsZW5ndGgoa2FpdG91Lml0ZW0pLTEpCiAgICBmb3IoayBpbiAxOihsZW5ndGgoa2FpdG91Lml0ZW0pLTEpKXsKICAgICAgc2hpdHN1bW9uLnRleHRbal0gJT4lIHN1YnN0cihrYWl0b3UuaXRlbVtrXSsyLGthaXRvdS5pdGVtW2srMV0tMSkgJT4lIGdzdWIoIiAiLCIiLC4pICU+JSBnc3ViKCLjgIAiLCIiLC4pIC0+IGthaXRvdS50bXBba10KICAgICAgaWYocmVnZXhlYygn4peGJyxrYWl0b3UudG1wW2tdKSA+IDEpewogICAgICAgIGthaXRvdS50bXBba10gJTw+JSBzdWJzdHIoMSxyZWdleGVjKCfil4YnLGthaXRvdS50bXBba10pW1sxXV0tMSkKICAgICAgfQogICAgICBpZighaXMubmEoc2hpdHN1bW9uLm5hbWVbal0gJT4lIG1hdGNoKCLmjojmpa3mmYLplpMiKSkpewogICAgICAgIG9mZnNldCA8LSBrLTEKICAgICAgICBrYWl0b3Vba2FpdG91JOWtpuacnz09dGVybVtpXSAmICFpcy5uYShrYWl0b3VbLHNoaXRzdW1vbi5pdGVtW2orb2Zmc2V0XV0pICYga2FpdG91WyxzaGl0c3Vtb24uaXRlbVtqK29mZnNldF1dPT0xLHNoaXRzdW1vbi5pdGVtW2orb2Zmc2V0XV0gPC0ga2FpdG91LnRtcFtrXQogICAgICB9ZWxzZXsKICAgICAgICBrYWl0b3Vba2FpdG91JOWtpuacnz09dGVybVtpXSAmICFpcy5uYShrYWl0b3VbLHNoaXRzdW1vbi5pdGVtW2orb2Zmc2V0XV0pICYga2FpdG91WyxzaGl0c3Vtb24uaXRlbVtqK29mZnNldF1dPT1rLHNoaXRzdW1vbi5pdGVtW2orb2Zmc2V0XV0gPC0ga2FpdG91LnRtcFtrXQogICAgICB9CiAgICB9CiAgICBrYWl0b3UudGV4dFtbal1dIDwtIGthaXRvdS50bXAKICAgIHNoaXRzdW1vbi50ZXh0W2pdICU8PiUgc3Vic3RyKDEscmVnZXhwcignMS0nLC4pLTEpICU+JSBnc3ViKCIgIiwiIiwuKSAlPiUgZ3N1Yigi44CAIiwiIiwuKQogIH0KICBpZihpPT0xKXsKICAgIHNoaXRzdW1vbi5saXN0IDwtIGxpc3Qo6aGM5ZCNPXNoaXRzdW1vbi5uYW1lLOWGheWuuT1zaGl0c3Vtb24udGV4dCzlm57nrZQ9a2FpdG91LnRleHQpCiAgfWVsc2V7CiAgICBmb3IoaiBpbiAxOmxlbmd0aChzaGl0c3Vtb24ubmFtZSkpewogICAgICBzaGl0c3Vtb24ubGlzdCTlm57nrZRbW2dyZXAoc2hpdHN1bW9uLm5hbWVbal0sc2hpdHN1bW9uLmxpc3Qk6aGM5ZCNKV1dICU8PiUgY2JpbmQoa2FpdG91LnRleHRbW2dyZXAoc2hpdHN1bW9uLm5hbWVbal0sc2hpdHN1bW9uLm5hbWUpXV0pCiAgICB9CiAgfQp9Cgoj6Ieq55Sx6KiY6L+w5Zue562U44Gu44Kv44Oq44O844OL44Oz44KwCmNvbW1lbnQgJTw+JSAuWyFpcy5uYShjb21tZW50JOmDqOS8muWQjSksXSAlPiUgc2VsZWN0KC1YMCkKY29tbWVudCTmlZnlrpjlkI0gJTw+JSBzdWIoIuOAgCIsICIgIiwgLikKY29tbWVudCTnp5Hnm67lkI0gJTw+JSBzdWIoIu+8iCIsICIoIiwgLikKY29tbWVudCTnp5Hnm67lkI0gJTw+JSBzdWIoIu+8iSIsICIpIiwgLikKY29tbWVudFtjb21tZW50JOenkeebruWQjT09J+Wuh+WumeenkeWtpuKFoCcmY29tbWVudCTmlZnlrpjlkI09PSfmsZ/ph4zlj6Mg6Imv5rK7Jywn56eR55uu5ZCNJ10gPC0gJ+Wuh+WumeenkeWtpuKFoCjmlofnp5HnlJ8pJwpjb21tZW50W2NvbW1lbnQk56eR55uu5ZCNPT0n5oOR5pif5Zyw55CD56eR5a2m4oWgJyZjb21tZW50JOaVmeWumOWQjT09J+Wwj+aysyDmraPln7onJmNvbW1lbnQk5a2m5pyfPT0iJzAz5aSPIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoCjmlofnp5HnlJ8pJwpjb21tZW50W2NvbW1lbnQk56eR55uu5ZCNPT0n5oOR5pif5Zyw55CD56eR5a2m4oWgJyZjb21tZW50JOaVmeWumOWQjT09J+ejr+W0jiDooYzpm4QnJmNvbW1lbnQk5a2m5pyfPT0iJzAz5YasIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoCjmlofnp5HnlJ8pJwpjb21tZW50W2NvbW1lbnQk56eR55uu5ZCNPT0n5oOR5pif5Zyw55CD56eR5a2m4oWgJyZjb21tZW50JOaVmeWumOWQjT09J+Wwj+aysyDmraPln7onJmNvbW1lbnQk5a2m5pyfPT0iJzA05aSPIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoCjmlofnp5HnlJ8pJwpjb21tZW50W2NvbW1lbnQk56eR55uu5ZCNPT0n5oOR5pif5Zyw55CD56eR5a2m4oWgJyZjb21tZW50JOaVmeWumOWQjT09J+ejr+W0jiDooYzpm4QnJmNvbW1lbnQk5a2m5pyfPT0iJzA05YasIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoCjmlofnp5HnlJ8pJwpjb21tZW50W2NvbW1lbnQk56eR55uu5ZCNPT0n5oOR5pif5Zyw55CD56eR5a2m4oWgJyZjb21tZW50JOaVmeWumOWQjT09J+Wwj+aysyDmraPln7onJmNvbW1lbnQk5a2m5pyfPT0iJzA15aSPIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoCjmlofnp5HnlJ8pJwpjb21tZW50W2NvbW1lbnQk56eR55uu5ZCNPT0n5oOR5pif5Zyw55CD56eR5a2m4oWgJyZjb21tZW50JOaVmeWumOWQjT09J+Wwj+aysyDmraPln7onJmNvbW1lbnQk5a2m5pyfPT0iJzA35aSPIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoCjmlofnp5HnlJ8pJwpjb21tZW50W2NvbW1lbnQk56eR55uu5ZCNPT0n5oOR5pif5Zyw55CD56eR5a2m4oWhJyZjb21tZW50JOaVmeWumOWQjT09J+ejr+W0jiDooYzpm4QnJmNvbW1lbnQk5a2m5pyfPT0iJzA15YasIiwn56eR55uu5ZCNJ10gPC0gJ+aDkeaYn+WcsOeQg+enkeWtpuKFoSjmlofnp5HnlJ8pJwpjb21tZW50JOenkeebruWQjSAlPiUgdW5pcXVlICU+JSBncmVwKCLnkIbnp5HnlJ8iLC4pIC0+IHJpa2EKY29tbWVudCTnp5Hnm67lkI0gJT4lIHVuaXF1ZSAlPiUgLltyaWthXSAtPiByaWthCiMo55CG56eR55SfKeOBruS7mOOBhOOBpuOBhOOBquOBhOenkeebruWQjeOBq+OBr+WKoOOBiOOCiwpmb3IoaSBpbiAxOmxlbmd0aChyaWthKSl7CiAgcmlrYVtpXSAlPiUgc3Ryc3BsaXQoIlxcKOeQhuenkeeUn1xcKSIpICU+JSB1bmxpc3QgJT4lIC5bMV0gJT4lCiAgICBtYXRjaChjb21tZW50JOenkeebruWQjSwuKSAlPiUgaXMubmEgJT4lIGAhYCAtPiByZXBsCiAgY29tbWVudCTnp5Hnm67lkI1bcmVwbF0gPC0gcmlrYVtpXQp9CgojIGthaXRvdSDmlZnlk6HmsI/lkI3jgIHnp5Hnm67lkI3ov73liqDjgIHopIfmlbDmlZnlk6Hjga7loLTlkIgn5a2m5pyfYScsJ+Wtpuacn2InLi4u562J44Go44GZ44KLCmthaXRvdSAlPD4lIG11dGF0ZSjmlZnlk6HmsI/lkI09TkEs56eR55uu5ZCNPU5BKQpmb3IoaSBpbiAxOmRpbShrYWl0b3UpWzFdKXsKICBrYW1va3Vba2Ftb2t1JOaOiOalrUlEPT1rYWl0b3Uk5o6I5qWtSURbaV0ma2Ftb2t1JOWtpuacnz09a2FpdG91JOWtpuacn1tpXSxdICU+JSBzZWxlY3Qo5pWZ5ZOh5rCP5ZCNLOenkeebruWQjSkgLT4ga2Ftb2t1LnNlbAogIGthaXRvdSTmlZnlk6HmsI/lkI1baV0gPC0ga2Ftb2t1LnNlbCTmlZnlk6HmsI/lkI0KICBrYWl0b3Uk56eR55uu5ZCNW2ldIDwtIGthbW9rdS5zZWwk56eR55uu5ZCNCn0KCiMg6KSH5pWw5ZCN5ouF5b2T5pWZ5ZOh44Oq44K544OI5L2c5oiQCmthbW9rdSAlPiUgZGlzdGluY3Qo56eR55uu5ZCNLOWtpuacnykgLT4ga3lvaW4ubGlzdApreW9pbi5saXN0ICU8PiUgbXV0YXRlKOaVmeWToT1OQSkKc3VmZml4IDwtIGMoJ2EnLCdiJywnYycsJ2QnLCdlJywnZicsJ2cnKQpmb3IoaSBpbiAxOmRpbShreW9pbi5saXN0KVsxXSl7CiAga3lvaW4ubGlzdFtpLF0gJT4lIGxlZnRfam9pbihrYW1va3UlPiVzZWxlY3Qo56eR55uu5ZCNLOWtpuacnyzmlZnlk6HmsI/lkI0pLCBieSA9IGMoIuenkeebruWQjSIsICLlrabmnJ8iKSkgJT4lIHNlbGVjdCjmlZnlk6HmsI/lkI0pICU+JSB1bmlxdWUgJSQlIOaVmeWToeawj+WQjSAtPiBreW9pbgogIGlmKGxlbmd0aChreW9pbilbMV0+MSl7CiAgICBrYWl0b3Uk5a2m5pyfW2thaXRvdSTmlZnlk6HmsI/lkI09PWt5b2luWzFdJmthaXRvdSTlrabmnJ89PWt5b2luLmxpc3Qk5a2m5pyfW2ldXSAgPC0gcGFzdGUwKGt5b2luLmxpc3Qk5a2m5pyfW2ldLHN1ZmZpeFsxXSkKICAgIGZvcihqIGluIDI6bGVuZ3RoKGt5b2luKVsxXSl7CiAgICAgIGt5b2luWzFdICU8PiUgcGFzdGUwKCIrIixreW9pbltqXSkKICAgICAga2FpdG91JOWtpuacn1trYWl0b3Uk5pWZ5ZOh5rCP5ZCNPT1reW9pbltqXSZrYWl0b3Uk5a2m5pyfPT1reW9pbi5saXN0JOWtpuacn1tpXV0gIDwtIHBhc3RlMChreW9pbi5saXN0JOWtpuacn1tpXSxzdWZmaXhbal0pCiAgICB9CiAgfQogIGt5b2luLmxpc3Qk5pWZ5ZOhW2ldIDwtIGt5b2luWzFdCn0KCnNhdmUoa2FpdG91LGZpbGU9ImthaXRvdS5kYXQiKTtzYXZlKGthbW9rdSxmaWxlPSJrYW1va3UuZGF0Iik7c2F2ZShjb21tZW50LGZpbGU9ImNvbW1lbnQuZGF0Iik7c2F2ZShzaGl0c3Vtb24ubGlzdCxmaWxlPSJzaGl0c3Vtb24ubGlzdC5kYXQiKQpgYGAKCiMg5bGl5L+u6ICF5pWw44Gu5o6o56e7CgpgYGB7ciBmaWcud2lkdGg9OH0KIyBhZ2dyZWdhdGUoa2Ftb2t1ICU+JSBzZWxlY3Qo5bGl5L+u6ICF5pWwLOWbnuWPjuaVsCksYnk9bGlzdCjnp5Hnm67lkI0gPSBrYW1va3Uk56eR55uu5ZCNLOWtpuacnyA9IGthbW9rdSTlrabmnJ8s5pWZ5ZOh5rCP5ZCNID0ga2Ftb2t1JOaVmeWToeawj+WQjSksRlVOPXN1bSkgJT4lCiAgIyBsZWZ0X2pvaW4oa2Ftb2t1JT4lc2VsZWN0KOenkeebruWQjSzlrabmnJ8s5pWZ5ZOh5rCP5ZCNKSxieSA9IGMoIuenkeebruWQjSIsICLlrabmnJ8iLCAi5pWZ5ZOh5rCP5ZCNIikpICU+JSBhcnJhbmdlKOenkeebruWQjSzlrabmnJ8pIC0+IHBsb3QuZGF0YQphZ2dyZWdhdGUoa2Ftb2t1ICU+JSBzZWxlY3Qo5bGl5L+u6ICF5pWwLOWbnuWPjuaVsCksYnk9bGlzdCjnp5Hnm67lkI0gPSBrYW1va3Uk56eR55uu5ZCNLOWtpuacnyA9IGthbW9rdSTlrabmnJ8pLEZVTj1zdW0pICU+JQogIGxlZnRfam9pbihreW9pbi5saXN0LGJ5ID0gYygi56eR55uu5ZCNIiwgIuWtpuacnyIpKSAlPiUgYXJyYW5nZSjnp5Hnm67lkI0s5a2m5pyfKSAtPiBwbG90LmRhdGEKcGxvdC5kYXRhJOenkeebruWQjSU+JXVuaXF1ZSU+JXNvcnQgLT4ga2Ftb2t1Lmxpc3QKa2Ftb2t1Lmxpc3QgJT4lIGdyZXAoIuWuh+WumSIsLikgLT4gdWNodQprYW1va3UubGlzdCAlPiUgZ3JlcCgi5Zyw55CDIiwuKSAtPiBjaGlreXUKa2Ftb2t1Lmxpc3QgPC0gYyhrYW1va3UubGlzdFtjKHVjaHUsY2hpa3l1KV0sCiAgICAgICAgICAgICAgIGthbW9rdS5saXN0WyFjKDE6bGVuZ3RoKGthbW9rdS5saXN0KSklaW4lYyh1Y2h1LGNoaWt5dSldKQpwIDwtIHBsb3RfbHkocGxvdC5kYXRhW3Bsb3QuZGF0YSTnp5Hnm67lkI09PWthbW9rdS5saXN0WzFdLF0sIHggPSB+5a2m5pyfLCB5ID0gfuWxpeS/ruiAheaVsCwgbmFtZSA9IGthbW9rdS5saXN0WzFdLCB0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ2xpbmVzK21hcmtlcnMnLGhvdmVyaW5mbz0ndGV4dCcsdGV4dD13aXRoKHBsb3QuZGF0YVtwbG90LmRhdGEk56eR55uu5ZCNPT1rYW1va3UubGlzdFsxXSxdLHBhc3RlMCjnp5Hnm67lkI0sJ1xuJyzmlZnlk6EsJ1xuJyzlsaXkv67ogIXmlbAsJyDlkI0nKSkpCmZvcihpIGluIDI6bGVuZ3RoKGthbW9rdS5saXN0KSl7CiAgcCAlPD4lIGFkZF90cmFjZShkYXRhPXBsb3QuZGF0YVtwbG90LmRhdGEk56eR55uu5ZCNPT1rYW1va3UubGlzdFtpXSxdLCB4ID0gfuWtpuacnywgeSA9IH7lsaXkv67ogIXmlbAsIG5hbWUgPSBrYW1va3UubGlzdFtpXSwgbW9kZSA9ICdsaW5lcyttYXJrZXJzJyxob3ZlcmluZm89J3RleHQnLHRleHQ9d2l0aChwbG90LmRhdGFbcGxvdC5kYXRhJOenkeebruWQjT09a2Ftb2t1Lmxpc3RbaV0sXSxwYXN0ZTAo56eR55uu5ZCNLCdcbics5pWZ5ZOhLCdcbics5bGl5L+u6ICF5pWwLCcg5ZCNJykpKQp9CnAgJTw+JSBsYXlvdXQoeGF4aXMgPSBsaXN0KHRpdGxlPU5BKSwgeWF4aXMgPSBsaXN0KHR5cGUgPSAibG9nIiksIGZvbnQgPSBsaXN0KHNpemUgPSAxNiksIGxlZ2VuZCA9IGxpc3Qob3JpZW50YXRpb24gPSAnaCcpKQpwCmBgYAoKYGBge3IgZGF0YV9wbG90fQpkYXRhX3Bsb3QgPC0gZnVuY3Rpb24oaT0xKXsKICBkYXRhLmRpciA8LSAnL2hvbWUvZG9pL2RvY3MvaHlvdWthL2RhdGEvJwogIHN1ZmZpeCA8LSBjKCdhJywnYicsJ2MnLCdkJywnZScsJ2YnLCdnJykKICBsaXN0LmZpbGVzKGRhdGEuZGlyKSAtPiB0ZXJtCiAgbG9hZCgnL2hvbWUvZG9pL2RvY3MvaHlvdWthL2thaXRvdS5kYXQnKTtsb2FkKCcvaG9tZS9kb2kvZG9jcy9oeW91a2Eva2Ftb2t1LmRhdCcpO2xvYWQoJy9ob21lL2RvaS9kb2NzL2h5b3VrYS9jb21tZW50LmRhdCcpO2xvYWQoJy9ob21lL2RvaS9kb2NzL2h5b3VrYS9zaGl0c3Vtb24ubGlzdC5kYXQnKQoKICBrYW1va3Uk56eR55uu5ZCNICU+JSB1bmlxdWUgJT4lIHNvcnQgLT4ga2Ftb2t1bWVpCiAga2Ftb2t1bWVpICU+JSBncmVwKCflroflrpknLC4pIC0+IHVjaHUKICBrYW1va3VtZWkgJT4lIGdyZXAoJ+WcsOeQgycsLikgLT4gY2hpa3l1CiAga2Ftb2t1bWVpIDwtIGMoa2Ftb2t1bWVpW2ModWNodSxjaGlreXUpXSwKICAgICAgICAgICAgICAgICBrYW1va3VtZWlbIWMoMTpsZW5ndGgoa2Ftb2t1bWVpKSklaW4lYyh1Y2h1LGNoaWt5dSldKQoKICBmb3IoaiBpbiAxOmxlbmd0aChzaGl0c3Vtb24ubGlzdCTpoYzlkI0pKXsKICAgIGthaXRvdSAlPiUgc2VsZWN0KHNoaXRzdW1vbi5saXN0JOmhjOWQjVtqXSwn5a2m5pyfJywn5pWZ5ZOh5rCP5ZCNJywn56eR55uu5ZCNJykgLT4gdG1wLmRhdGEKICAgIHBsb3QuZGF0YSA8LSB0bXAuZGF0YVt0bXAuZGF0YSTnp5Hnm67lkI09PWthbW9rdW1laVtpXSxdCiAgICBwbG90LmRhdGEgJTw+JSBjb3VudCAlPiUgYXJyYW5nZSjlrabmnJ8pCiAgICB0aXRsZS50eHQgPC0gc2hpdHN1bW9uLmxpc3Qk6aGM5ZCNW2pdCiAgICBpZih0aXRsZS50eHQgPT0gJ+aOiOalreaZgumWkycpewogICAgICBqeXVneW91LmV4dHJhIDwtIGMoJ1hfXzEnLCdYX18yJywnWF9fMycsJ1hfXzQnKQogICAgICBmb3IoayBpbiAxOmxlbmd0aChqeXVneW91LmV4dHJhKSl7CiAgICAgICAga2FpdG91ICU+JSBzZWxlY3Qoanl1Z3lvdS5leHRyYVtrXSwn5a2m5pyfJywn5pWZ5ZOh5rCP5ZCNJywn56eR55uu5ZCNJykgLT4gdG1wLmRhdGEKICAgICAgICBwbG90LmRhdGEyIDwtIHRtcC5kYXRhW3RtcC5kYXRhJOenkeebruWQjT09a2Ftb2t1bWVpW2ldLF0KICAgICAgICBwbG90LmRhdGEyICU8PiUgY291bnQgJT4lIGFycmFuZ2Uo5a2m5pyfKQogICAgICAgIG5hbWVzKHBsb3QuZGF0YTIpWzFdIDwtIG5hbWVzKHBsb3QuZGF0YSlbMV0KICAgICAgICBwbG90LmRhdGEgJTw+JSBiaW5kX3Jvd3MocGxvdC5kYXRhMikKICAgICAgfQogICAgfQogICAgcGxvdC5kYXRhWyFpcy5uYShwbG90LmRhdGFbLDFdKSxdIC0+IHBsb3QuZGF0YQogICAgcGxvdC5kYXRhW3Bsb3QuZGF0YVssMV0hPTk5LF0gLT4gcGxvdC5kYXRhCiAgICBpZihkaW0ocGxvdC5kYXRhKVsxXT4wKXsKICAgIHBsb3QuZGF0YSAlPD4lIHVuaXF1ZQogICAgcGxvdC5kYXRhICU8PiUgbGVmdF9qb2luKGFnZ3JlZ2F0ZShwbG90LmRhdGEgJT4lIHNlbGVjdChmcmVxKSxieT1saXN0KOWtpuacnz1wbG90LmRhdGEk5a2m5pyfKSxGVU49c3VtKSAlPiUgcmVuYW1lKHRvdGFsPWZyZXEpLCBieSA9ICflrabmnJ8nKQogICAgcGxvdC5kYXRhICU8PiUgbXV0YXRlKHBlcmNlbnQ9ZnJlcS90b3RhbCoxMDApCiAgICAKICAgICPlhaXlrablubTluqbjga7jgb/lhajpoIXnm67jgpLjg6rjgrnjg4jjgZfjgablh7rlipsKICAgIGlmKHRpdGxlLnR4dCA9PSAn5YWl5a2m5bm05bqmJyl7CiAgICAgIG5lbmRvLmxpc3QgPC0gcGxvdC5kYXRhWywxXSAlPiUgdW5pcXVlICU+JSBzb3J0KGRlY3JlYXNpbmcgPSBUUlVFKQogICAgICBwZGF0YSA8LSBwbG90LmRhdGFbcGxvdC5kYXRhWywxXT09bmVuZG8ubGlzdFsxXSxdICU+JSBhcnJhbmdlKOWtpuacnykKICAgICAgcCA8LSBwbG90X2x5KHBkYXRhLCB4PX7lrabmnJ8sIHk9fnBlcmNlbnQsIG5hbWUgPSBuZW5kby5saXN0WzFdLCB0eXBlID0gJ2JhcicsICN0eXBlID0gJ3NjYXR0ZXInLCBtb2RlPSdsaW5lcyttYXJrZXJzJywKICAgICAgICAgICAgICAgICBob3ZlcmluZm89J3RleHQnLCB0ZXh0PXdpdGgocGRhdGEscGFzdGUwKOaVmeWToeawj+WQjSwnXG4nLG5lbmRvLmxpc3RbMV0sJ1xuJyxmcmVxLCcg5ZCNJykpKQogICAgICBmb3IoayBpbiAyOmxlbmd0aChuZW5kby5saXN0KSl7CiAgICAgICAgcGRhdGEgPC0gcGxvdC5kYXRhW3Bsb3QuZGF0YVssMV09PW5lbmRvLmxpc3Rba10sXSAlPiUgYXJyYW5nZSjlrabmnJ8pCiAgICAgICAgcCAlPD4lIGFkZF90cmFjZShkYXRhPXBkYXRhLCB4ID0gfuWtpuacnywgeSA9IH5wZXJjZW50LCBuYW1lID0gbmVuZG8ubGlzdFtrXSwgI21vZGUgPSAnbGluZXMrbWFya2VycycsCiAgICAgICAgICAgICAgICAgICAgICAgICBob3ZlcmluZm89J3RleHQnLCB0ZXh0PXdpdGgocGRhdGEscGFzdGUwKOaVmeWToeawj+WQjSwnXG4nLG5lbmRvLmxpc3Rba10sJ1xuJyxmcmVxLCcg5ZCNJykpKQogICAgICB9CiAgICB9ZWxzZXsKICAgICPos6rllY/poIXnm67jgYzlpInjgo/jgaPjgZ/lhoXlrrnjgavjgaTjgYTjgabnqY3nrpfjgZfjgablh7rlipsKICAgICAga3N0IDwtIEZBTFNFCiAgICAgIGtzdC5udW0gPC0gc2hpdHN1bW9uLmxpc3Qk5Zue562UW1tqXV0gJT4lIGRpbSAlPiUgLlsxXQogICAgICBmb3IoayBpbiAoc2hpdHN1bW9uLmxpc3Qk5Zue562UW1tqXV0gJT4lIGRpbSAlPiUgLlsxXSk6MSl7CiAgICAgICAga2FpdG91Lmxpc3QgPC0gc2hpdHN1bW9uLmxpc3Qk5Zue562UW1tqXV0gJT4lIC5bayxdCiAgICAgICAga2FpdG91Lmxpc3RpIDwtIHVuaXF1ZShrYWl0b3UubGlzdCkKICAgICAgICBwZGF0YSA8LSBwbG90LmRhdGFbcGxvdC5kYXRhWywxXT09a2FpdG91Lmxpc3RpW2xlbmd0aChrYWl0b3UubGlzdGkpXSxdICU+JSBhcnJhbmdlKOWtpuacnykKICAgICAgICB3aGlsZSgha3N0ICYgZGltKHBkYXRhKVsxXT09MCl7CiAgICAgICAgICBrICU8PiUgJy0nKDEpCiAgICAgICAgICBpZihrIDwgMSkKICAgICAgICAgICAgYnJlYWsKICAgICAgICAgIGthaXRvdS5saXN0IDwtIHNoaXRzdW1vbi5saXN0JOWbnuetlFtbal1dICU+JSAuW2ssXQogICAgICAgICAga2FpdG91Lmxpc3RpIDwtIHVuaXF1ZShrYWl0b3UubGlzdCkKICAgICAgICAgIHBkYXRhIDwtIHBsb3QuZGF0YVtwbG90LmRhdGFbLDFdPT1rYWl0b3UubGlzdGlbbGVuZ3RoKGthaXRvdS5saXN0aSldLF0gJT4lIGFycmFuZ2Uo5a2m5pyfKQogICAgICAgICAga3N0Lm51bSA8LSBrCiAgICAgICAgfQogICAgICAgIGtzdCA8LSBUUlVFCiAgICAgICAgaWYobGVuZ3RoKGthaXRvdS5saXN0aSk+MSl7CiAgICAgICAgICBmb3IobCBpbiAxOihsZW5ndGgoa2FpdG91Lmxpc3RpKS0xKSl7CiAgICAgICAgICAgIHBkYXRhICU8PiUgYmluZF9yb3dzKHBsb3QuZGF0YVtwbG90LmRhdGFbLDFdPT1rYWl0b3UubGlzdGlbbF0sXSkKICAgICAgICAgIH0KICAgICAgICAgIHBkYXRhICU8PiUgYXJyYW5nZSjlrabmnJ8pCiAgICAgICAgfQogICAgICAgIGlmKGsgPT0ga3N0Lm51bSl7CiAgICAgICAgICBrYWl0b3UubGlzdCAlPD4lIGRhdGEuZnJhbWUoCiAgICAgICAgICAgIOWbnuetlD1rYWl0b3UubGlzdCwKICAgICAgICAgICAg5a2m5pyfPWModGVybVsxOmxlbmd0aChrYWl0b3UubGlzdCldLHBhc3RlMCh0ZXJtWzE6bGVuZ3RoKGthaXRvdS5saXN0KV0sc3VmZml4WzFdKSxwYXN0ZTAodGVybVsxOmxlbmd0aChrYWl0b3UubGlzdCldLHN1ZmZpeFsyXSkscGFzdGUwKHRlcm1bMTpsZW5ndGgoa2FpdG91Lmxpc3QpXSxzdWZmaXhbM10pLHBhc3RlMCh0ZXJtWzE6bGVuZ3RoKGthaXRvdS5saXN0KV0sc3VmZml4WzRdKSxwYXN0ZTAodGVybVsxOmxlbmd0aChrYWl0b3UubGlzdCldLHN1ZmZpeFs1XSkscGFzdGUwKHRlcm1bMTpsZW5ndGgoa2FpdG91Lmxpc3QpXSxzdWZmaXhbNl0pKSkgJT4lCiAgICAgICAgICAgIHJpZ2h0X2pvaW4ocGRhdGEgJT4lIHNlbGVjdCjlrabmnJ8pLGJ5PSflrabmnJ8nKSAlPiUgc2VsZWN0KOWbnuetlCkgJSQlIOWbnuetlCAlPiUgYXMuY2hhcmFjdGVyCiAgICAgICAgICBwIDwtIHBsb3RfbHkocGRhdGEsIHg9fuWtpuacnywgeT1+cGVyY2VudCwgbmFtZSA9IGthaXRvdS5saXN0W2xlbmd0aChrYWl0b3UubGlzdCldLCB0eXBlID0gJ2JhcicsICN0eXBlID0gJ3NjYXR0ZXInLCBtb2RlPSdsaW5lcyttYXJrZXJzJywKICAgICAgICAgICAgICAgICAgICAgICBob3ZlcmluZm89J3RleHQnLCB0ZXh0PXdpdGgocGRhdGEscGFzdGUwKOaVmeWToeawj+WQjSwnXG4nLGthaXRvdS5saXN0LCdcbicsZnJlcSwnIOWQjScpKSkKICAgICAgICB9ZWxzZXsKICAgICAgICAgIGlmKGRpbShwZGF0YSlbMV0+MCl7CiAgICAgICAgICAgIGthaXRvdS5saXN0ICU8PiUgZGF0YS5mcmFtZSgKICAgICAgICAgICAgICDlm57nrZQ9a2FpdG91Lmxpc3QsCiAgICAgICAgICAgICAg5a2m5pyfPWModGVybVsxOmxlbmd0aChrYWl0b3UubGlzdCldLHBhc3RlMCh0ZXJtWzE6bGVuZ3RoKGthaXRvdS5saXN0KV0sc3VmZml4WzFdKSxwYXN0ZTAodGVybVsxOmxlbmd0aChrYWl0b3UubGlzdCldLHN1ZmZpeFsyXSkscGFzdGUwKHRlcm1bMTpsZW5ndGgoa2FpdG91Lmxpc3QpXSxzdWZmaXhbM10pLHBhc3RlMCh0ZXJtWzE6bGVuZ3RoKGthaXRvdS5saXN0KV0sc3VmZml4WzRdKSxwYXN0ZTAodGVybVsxOmxlbmd0aChrYWl0b3UubGlzdCldLHN1ZmZpeFs1XSkscGFzdGUwKHRlcm1bMTpsZW5ndGgoa2FpdG91Lmxpc3QpXSxzdWZmaXhbNl0pKSkgJT4lCiAgICAgICAgICAgICAgcmlnaHRfam9pbihwZGF0YSAlPiUgc2VsZWN0KOWtpuacnyksYnk9J+WtpuacnycpICU+JSBzZWxlY3Qo5Zue562UKSAlJCUg5Zue562UICU+JSBhcy5jaGFyYWN0ZXIKICAgICAgICAgICAgcCAlPD4lIGFkZF90cmFjZShkYXRhPXBkYXRhLCB4ID0gfuWtpuacnywgeSA9IH5wZXJjZW50LCBuYW1lID0ga2FpdG91Lmxpc3RbbGVuZ3RoKGthaXRvdS5saXN0KV0sICNtb2RlID0gJ2xpbmVzK21hcmtlcnMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyaW5mbz0ndGV4dCcsIHRleHQ9d2l0aChwZGF0YSxwYXN0ZTAo5pWZ5ZOh5rCP5ZCNLCdcbicsa2FpdG91Lmxpc3QsJ1xuJyxmcmVxLCcg5ZCNJykpKQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcCAlPD4lIGxheW91dCh4YXhpcyA9IGxpc3QodGl0bGU9TkEpLCB5YXhpcyA9IGxpc3QodGl0bGU9cGFzdGUodGl0bGUudHh0LCdbJV0nKSksIGZvbnQgPSBsaXN0KHNpemUgPSAxNiksIGxlZ2VuZCA9IGxpc3Qob3JpZW50YXRpb24gPSAnaCcpLCBiYXJtb2RlID0gJ3N0YWNrJykKICAgIHBhc3RlMCgnIyAnLHNoaXRzdW1vbi5saXN0JOmhjOWQjVtqXSwnXG5cbicsc2hpdHN1bW9uLmxpc3Qk5YaF5a65W2pdLCdcblxuJykgJT4lIGNhdAogICAgcHJpbnQocCkKICAgIGNhdCgnXG5cbicpCiAgICB9CiAgfQoKICBjYXQoJyMg6Ieq55Sx5Zue562UXG5cbicpCiAgY29tbWVudFtjb21tZW50JOenkeebruWQjSA9PSBrYW1va3VtZWlbaV0sXSAlPiUKICAgIHNlbGVjdCjlrabmnJ8s5pWZ5a6Y5ZCNLOWbnuetlCkgJT4lCiAgICBtdXRhdGUo5a2m5pyfPWFzLmZhY3RvcijlrabmnJ8pLOaVmeWumOWQjT1hcy5mYWN0b3Io5pWZ5a6Y5ZCNKSkgJT4lCiAgICBhcnJhbmdlKOWtpuacnykgJT4lCiAgICBkYXRhdGFibGUoZmlsdGVyID0gJ3RvcCcsCiAgICAgICAgICAgICAgZXh0ZW5zaW9ucyA9ICdTY3JvbGxlcicsCiAgICAgICAgICAgICAgb3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aD01MCxzY3JvbGxZID0gNTAwLHNjcm9sbENvbGxhcHNlID0gVFJVRSxkb209J2x0aXByJykpICU+JQogICAgcHJpbnQKICBjYXQoJ1xuXG4nKQogIAojICBjYXQoJyMg44OI44OD44OX44Oa44O844K444Gr5oi744KLXG5cblvjg4jjg4Pjg5fjg5rjg7zjgrjjga7jg6rjg7Pjgq9dKGh0dHA6Ly9ha2FyaS5jLnUtdG9reW8uYWMuanAvfmRvaS9oeW91a2EvaHlvdWthLm5iLmh0bWwpJykKICBjYXQoJyMg44OI44OD44OX44Oa44O844K444Gr5oi744KLXG5cblvjg4jjg4Pjg5fjg5rjg7zjgrjjga7jg6rjg7Pjgq9dKGh0dHA6Ly9lYS5jLnUtdG9reW8uYWMuanAvaHlvdWthLm5iLmh0bWwpJykKfQpzYXZlKGRhdGFfcGxvdCxmaWxlPSJkYXRhX3Bsb3QuZGF0IikKYGBgCmBgYHtyIGRpc3BfcmVzdWx0LCByZXN1bHRzPSdhc2lzJ30Ka2Ftb2t1JOenkeebruWQjSAlPiUgdW5pcXVlICU+JSBzb3J0IC0+IGthbW9rdW1laQprYW1va3VtZWkgJT4lIGdyZXAoIuWuh+WumSIsLikgLT4gdWNodQprYW1va3VtZWkgJT4lIGdyZXAoIuWcsOeQgyIsLikgLT4gY2hpa3l1CmthbW9rdW1laSA8LSBjKGthbW9rdW1laVtjKHVjaHUsY2hpa3l1KV0sCiAgICAgICAgICAgICAgIGthbW9rdW1laVshYygxOmxlbmd0aChrYW1va3VtZWkpKSVpbiVjKHVjaHUsY2hpa3l1KV0pCgpjYXQoJyMg5YCL5Yil56eR55uu44OH44O844K/XG5cbicpCmZvcihpIGluIDE6bGVuZ3RoKGthbW9rdW1laSkpewogICMgcGFzdGUwKCcjIyBbJyxrYW1va3VtZWlbaV0sJ10oaHR0cDovL2FrYXJpLmMudS10b2t5by5hYy5qcC9+ZG9pL2h5b3VrYS9oeW91a2FfJyxpLCcubmIuaHRtbClcblxuJykgJT4lIGNhdAogIHBhc3RlMCgnIyMgWycsa2Ftb2t1bWVpW2ldLCddKGh0dHA6Ly9lYS5jLnUtdG9reW8uYWMuanAva2Ftb2t1L2h5b3VrYV8nLGksJy5uYi5odG1sKVxuXG4nKSAlPiUgY2F0CgogIG91dC5maWxlLm5hbWUgPC0gcGFzdGUwKCIvaG9tZS9kb2kvZG9jcy9oeW91a2Eva2Ftb2t1L2h5b3VrYV8iLGksIi5SbWQiKQogIG91dC5maWxlIDwtICItLS0KdGl0bGU6ICciCiAgb3V0LmZpbGUgJTw+JSBwYXN0ZTAoa2Ftb2t1bWVpW2ldKQogIG91dC5maWxlICU8PiUgcGFzdGUwKCInCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCi0tLQoKXGBcYFxge3Igc2V0dXAsIGVjaG89RkFMU0UsIGNhY2hlPUYsIHJlc3VsdHM9J2hpZGUnLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KGtuaXRyKQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBjYWNoZT1GQUxTRSwgd2FybmluZyA9IEZBTFNFLCBkcGk9NjAwLCBmaWcucG9zPSdoJywgZW5naW5lLnBhdGggPSAnL2hvbWUvZG9pL21pbmljb25kYTMvYmluL3B5dGhvbicpCnBrZ3MgPC0gYygncmVhZHhsJywnbWFncml0dHInLCdwbHlyJywndGlkeXZlcnNlJywncGxvdGx5JywndGV4dHJlYWRyJywnRFQnKQpsYXBwbHkocGtncywgcmVxdWlyZSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQpvcHRpb25zKHh0YWJsZS5jb21tZW50ID0gRkFMU0UpClxgXGBcYAoKXGBcYFxge3IgZGlzcF9yZXN1bHQsIGZpZy53aWR0aD04LCBvdXQud2lkdGg9JzEwMCUnLCByZXN1bHRzPSdhc2lzJ30KbG9hZCgnL2hvbWUvZG9pL2RvY3MvaHlvdWthL2RhdGFfcGxvdC5kYXQnKQpkYXRhX3Bsb3QoIikKICBvdXQuZmlsZSAlPD4lIHBhc3RlMChpKQogIG91dC5maWxlICU8PiUgcGFzdGUwKCIpClxgXGBcYAoiKQogIHdyaXRlLnRhYmxlKG91dC5maWxlLGZpbGU9b3V0LmZpbGUubmFtZSxxdW90ZT1GLHJvdy5uYW1lcz1GLGNvbC5uYW1lcz1GKQp9CmBgYApgYGB7ciByZW5kZXIsIGV2YWw9RkFMU0V9CmZvcihpIGluIDE6bGVuZ3RoKGthbW9rdW1laSkpewojIGZvcihpIGluIDEpewogIG91dC5maWxlLm5hbWUgPC0gcGFzdGUwKCJoeW91a2FfIixpLCIuUm1kIikKICByZW5kZXIob3V0LmZpbGUubmFtZSkKfQpgYGAKCg==