@vtj/pro 0.8.91 → 0.8.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/@vtj/materials/assets/antdv/index.umd.js +2 -2
  2. package/dist/@vtj/materials/assets/charts/index.umd.js +2 -2
  3. package/dist/@vtj/materials/assets/element/index.umd.js +2 -2
  4. package/dist/@vtj/materials/assets/ui/index.umd.js +2 -2
  5. package/dist/@vtj/materials/deps/@vtj/charts/index.umd.js +2 -2
  6. package/dist/@vtj/materials/deps/@vtj/icons/index.umd.js +2 -2
  7. package/dist/@vtj/materials/deps/@vtj/ui/index.umd.js +3 -3
  8. package/dist/@vtj/materials/deps/@vtj/utils/index.umd.js +19 -19
  9. package/dist/@vtj/materials/deps/vue/vue.global.prod.js +6 -6
  10. package/dist/assets/{@element-plus-DOIBKHWA.js → @element-plus-Cgg_PG6o.js} +1 -1
  11. package/dist/assets/@vue-BMgKlbMt.js +29 -0
  12. package/dist/assets/{@vueuse-Cpfo139p.js → @vueuse-Da6sINV5.js} +1 -1
  13. package/dist/assets/{Editor-DjXowHju-DZgD7aKd.js → Editor-Dtm2GYTx-BAttFuUH.js} +1 -1
  14. package/dist/assets/{css.worker-DsXsg0f9-CEcCZxtT.js → css.worker-CR2iVKPT-BaTqWy85.js} +1 -1
  15. package/dist/assets/{editor.worker-C6rtsk95-XsdejOxF.js → editor.worker-B3qW_3p_-B11RYRPo.js} +1 -1
  16. package/dist/assets/{element-plus-CBB2HTOK.js → element-plus-CJN-gD58.js} +1 -1
  17. package/dist/assets/{extension-CS9YvITT.js → extension-nTnTqQUl.js} +49 -49
  18. package/dist/assets/{html.worker-DOZaicN7-Dzznz_ni.js → html.worker-LqL7r0rA-3U9Bjz6a.js} +1 -1
  19. package/dist/assets/{index-CJLWo3b0.js → index-BatgCnAt.js} +2 -2
  20. package/dist/assets/{index-hVRl253k.js → index-bTb23IoD.js} +1 -1
  21. package/dist/assets/{json.worker-Bm0JMgNu-DV_Vc8JJ.js → json.worker-CIGjlMXB-odpG_8-U.js} +1 -1
  22. package/dist/assets/{preview-BOSHGJxr.js → preview-DP4a059W.js} +2 -2
  23. package/dist/assets/{ts.worker-CdTDJbmm-BhFdT8k5.js → ts.worker-CJ90jexB-BCB1mae0.js} +1 -1
  24. package/dist/assets/{vue-BEpF3lV5.js → vue-C1-U25CX.js} +2 -2
  25. package/dist/assets/{vue-router-CbemHIRz.js → vue-router-Bq8aHj2u.js} +1 -1
  26. package/dist/index.html +6 -6
  27. package/package.json +11 -11
  28. package/dist/assets/@vue-CBNdbwf4.js +0 -29
@@ -1 +1 @@
1
- const d="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NsYXNzIHBze2NvbnN0cnVjdG9yKCl7dGhpcy5saXN0ZW5lcnM9W10sdGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyPWZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyB0LnN0YWNrP3J0LmlzRXJyb3JOb1RlbGVtZXRyeSh0KT9uZXcgcnQodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6bmV3IEVycm9yKHQubWVzc2FnZStgCgpgK3Quc3RhY2spOnR9LDApfX1lbWl0KHQpe3RoaXMubGlzdGVuZXJzLmZvckVhY2gobj0+e24odCl9KX1vblVuZXhwZWN0ZWRFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCksdGhpcy5lbWl0KHQpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IodCl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKHQpfX1jb25zdCBncz1uZXcgcHM7ZnVuY3Rpb24gbWkoZSl7YnMoZSl8fGdzLm9uVW5leHBlY3RlZEVycm9yKGUpfWZ1bmN0aW9uIGZpKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3R7bmFtZTp0LG1lc3NhZ2U6bn09ZSxpPWUuc3RhY2t0cmFjZXx8ZS5zdGFjaztyZXR1cm57JGlzRXJyb3I6ITAsbmFtZTp0LG1lc3NhZ2U6bixzdGFjazppLG5vVGVsZW1ldHJ5OnJ0LmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3QgYm49IkNhbmNlbGVkIjtmdW5jdGlvbiBicyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHZzPyEwOmUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09Ym4mJmUubWVzc2FnZT09PWJufWNsYXNzIHZzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcihibiksdGhpcy5uYW1lPXRoaXMubWVzc2FnZX19Y2xhc3MgcnQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkNvZGVFeHBlY3RlZEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQpe2lmKHQgaW5zdGFuY2VvZiBydClyZXR1cm4gdDtjb25zdCBuPW5ldyBydDtyZXR1cm4gbi5tZXNzYWdlPXQubWVzc2FnZSxuLnN0YWNrPXQuc3RhY2ssbn1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KHQpe3JldHVybiB0Lm5hbWU9PT0iQ29kZUV4cGVjdGVkRXJyb3IifX1jbGFzcyBVZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHR8fCJBbiB1bmV4cGVjdGVkIGJ1ZyBvY2N1cnJlZC4iKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxVZS5wcm90b3R5cGUpfX1mdW5jdGlvbiBfcyhlLHQpe2NvbnN0IG49dGhpcztsZXQgaT0hMSxyO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfHwoaT0hMCxyPWUuYXBwbHkobixhcmd1bWVudHMpKSxyfX12YXIgV3Q7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoeSl7cmV0dXJuIHkmJnR5cGVvZiB5PT0ib2JqZWN0IiYmdHlwZW9mIHlbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1lLmlzPXQ7Y29uc3Qgbj1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBpKCl7cmV0dXJuIG59ZS5lbXB0eT1pO2Z1bmN0aW9uKnIoeSl7eWllbGQgeX1lLnNpbmdsZT1yO2Z1bmN0aW9uIGEoeSl7cmV0dXJuIHQoeSk/eTpyKHkpfWUud3JhcD1hO2Z1bmN0aW9uIHMoeSl7cmV0dXJuIHl8fG59ZS5mcm9tPXM7ZnVuY3Rpb24qbyh5KXtmb3IobGV0IEU9eS5sZW5ndGgtMTtFPj0wO0UtLSl5aWVsZCB5W0VdfWUucmV2ZXJzZT1vO2Z1bmN0aW9uIGwoeSl7cmV0dXJuIXl8fHlbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lPT09ITB9ZS5pc0VtcHR5PWw7ZnVuY3Rpb24gdSh5KXtyZXR1cm4geVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfWUuZmlyc3Q9dTtmdW5jdGlvbiBjKHksRSl7Zm9yKGNvbnN0IFIgb2YgeSlpZihFKFIpKXJldHVybiEwO3JldHVybiExfWUuc29tZT1jO2Z1bmN0aW9uIGQoeSxFKXtmb3IoY29uc3QgUiBvZiB5KWlmKEUoUikpcmV0dXJuIFJ9ZS5maW5kPWQ7ZnVuY3Rpb24qbSh5LEUpe2Zvcihjb25zdCBSIG9mIHkpRShSKSYmKHlpZWxkIFIpfWUuZmlsdGVyPW07ZnVuY3Rpb24qZih5LEUpe2xldCBSPTA7Zm9yKGNvbnN0IFAgb2YgeSl5aWVsZCBFKFAsUisrKX1lLm1hcD1mO2Z1bmN0aW9uKmIoLi4ueSl7Zm9yKGNvbnN0IEUgb2YgeSl5aWVsZCpFfWUuY29uY2F0PWI7ZnVuY3Rpb24gcCh5LEUsUil7bGV0IFA9Ujtmb3IoY29uc3QgdiBvZiB5KVA9RShQLHYpO3JldHVybiBQfWUucmVkdWNlPXA7ZnVuY3Rpb24qdyh5LEUsUj15Lmxlbmd0aCl7Zm9yKEU8MCYmKEUrPXkubGVuZ3RoKSxSPDA/Uis9eS5sZW5ndGg6Uj55Lmxlbmd0aCYmKFI9eS5sZW5ndGgpO0U8UjtFKyspeWllbGQgeVtFXX1lLnNsaWNlPXc7ZnVuY3Rpb24geCh5LEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXtjb25zdCBSPVtdO2lmKEU9PT0wKXJldHVybltSLHldO2NvbnN0IFA9eVtTeW1ib2wuaXRlcmF0b3JdKCk7Zm9yKGxldCB2PTA7djxFO3YrKyl7Y29uc3QgZz1QLm5leHQoKTtpZihnLmRvbmUpcmV0dXJuW1IsZS5lbXB0eSgpXTtSLnB1c2goZy52YWx1ZSl9cmV0dXJuW1Ise1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIFB9fV19ZS5jb25zdW1lPXg7YXN5bmMgZnVuY3Rpb24gXyh5KXtjb25zdCBFPVtdO2ZvciBhd2FpdChjb25zdCBSIG9mIHkpRS5wdXNoKFIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoRSl9ZS5hc3luY1RvQXJyYXk9X30pKFd0fHwoV3Q9e30pKTtmdW5jdGlvbiBzYyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBvYyhlLHQpe31mdW5jdGlvbiBwaShlKXtpZihXdC5pcyhlKSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKWlmKG4pdHJ5e24uZGlzcG9zZSgpfWNhdGNoKGkpe3QucHVzaChpKX1pZih0Lmxlbmd0aD09PTEpdGhyb3cgdFswXTtpZih0Lmxlbmd0aD4xKXRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcih0LCJFbmNvdW50ZXJlZCBlcnJvcnMgd2hpbGUgZGlzcG9zaW5nIG9mIHN0b3JlIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/W106ZX1lbHNlIGlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gd3MoLi4uZSl7cmV0dXJuIEZ0KCgpPT5waShlKSl9ZnVuY3Rpb24gRnQoZSl7cmV0dXJue2Rpc3Bvc2U6X3MoKCk9PntlKCl9KX19Y2xhc3MgYXR7Y29uc3RydWN0b3IoKXt0aGlzLl90b0Rpc3Bvc2U9bmV3IFNldCx0aGlzLl9pc0Rpc3Bvc2VkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5faXNEaXNwb3NlZD0hMCx0aGlzLmNsZWFyKCkpfWdldCBpc0Rpc3Bvc2VkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWR9Y2xlYXIoKXtpZih0aGlzLl90b0Rpc3Bvc2Uuc2l6ZSE9PTApdHJ5e3BpKHRoaXMuX3RvRGlzcG9zZSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKHQpe2lmKCF0KXJldHVybiB0O2lmKHQ9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/YXQuRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HfHxjb25zb2xlLndhcm4obmV3IEVycm9yKCJUcnlpbmcgdG8gYWRkIGEgZGlzcG9zYWJsZSB0byBhIERpc3Bvc2FibGVTdG9yZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuIFRoZSBhZGRlZCBvYmplY3Qgd2lsbCBiZSBsZWFrZWQhIikuc3RhY2spOnRoaXMuX3RvRGlzcG9zZS5hZGQodCksdH1kZWxldGVBbmRMZWFrKHQpe3QmJnRoaXMuX3RvRGlzcG9zZS5oYXModCkmJnRoaXMuX3RvRGlzcG9zZS5kZWxldGUodCl9fWF0LkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyB5dHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyBhdCx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3Rlcih0KXtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQodCl9fXl0Lk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtsZXQgdGU9Y2xhc3MgaGl7Y29uc3RydWN0b3IodCl7dGhpcy5lbGVtZW50PXQsdGhpcy5uZXh0PWhpLlVuZGVmaW5lZCx0aGlzLnByZXY9aGkuVW5kZWZpbmVkfX07dGUuVW5kZWZpbmVkPW5ldyB0ZSh2b2lkIDApO2NsYXNzIHlze2NvbnN0cnVjdG9yKCl7dGhpcy5fZmlyc3Q9dGUuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9dGUuVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT10ZS5VbmRlZmluZWR9Y2xlYXIoKXtsZXQgdD10aGlzLl9maXJzdDtmb3IoO3QhPT10ZS5VbmRlZmluZWQ7KXtjb25zdCBuPXQubmV4dDt0LnByZXY9dGUuVW5kZWZpbmVkLHQubmV4dD10ZS5VbmRlZmluZWQsdD1ufXRoaXMuX2ZpcnN0PXRlLlVuZGVmaW5lZCx0aGlzLl9sYXN0PXRlLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITEpfXB1c2godCl7cmV0dXJuIHRoaXMuX2luc2VydCh0LCEwKX1faW5zZXJ0KHQsbil7Y29uc3QgaT1uZXcgdGUodCk7aWYodGhpcy5fZmlyc3Q9PT10ZS5VbmRlZmluZWQpdGhpcy5fZmlyc3Q9aSx0aGlzLl9sYXN0PWk7ZWxzZSBpZihuKXtjb25zdCBhPXRoaXMuX2xhc3Q7dGhpcy5fbGFzdD1pLGkucHJldj1hLGEubmV4dD1pfWVsc2V7Y29uc3QgYT10aGlzLl9maXJzdDt0aGlzLl9maXJzdD1pLGkubmV4dD1hLGEucHJldj1pfXRoaXMuX3NpemUrPTE7bGV0IHI9ITE7cmV0dXJuKCk9PntyfHwocj0hMCx0aGlzLl9yZW1vdmUoaSkpfX1zaGlmdCgpe2lmKHRoaXMuX2ZpcnN0IT09dGUuVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksdH19cG9wKCl7aWYodGhpcy5fbGFzdCE9PXRlLlVuZGVmaW5lZCl7Y29uc3QgdD10aGlzLl9sYXN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9sYXN0KSx0fX1fcmVtb3ZlKHQpe2lmKHQucHJldiE9PXRlLlVuZGVmaW5lZCYmdC5uZXh0IT09dGUuVW5kZWZpbmVkKXtjb25zdCBuPXQucHJldjtuLm5leHQ9dC5uZXh0LHQubmV4dC5wcmV2PW59ZWxzZSB0LnByZXY9PT10ZS5VbmRlZmluZWQmJnQubmV4dD09PXRlLlVuZGVmaW5lZD8odGhpcy5fZmlyc3Q9dGUuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9dGUuVW5kZWZpbmVkKTp0Lm5leHQ9PT10ZS5VbmRlZmluZWQ/KHRoaXMuX2xhc3Q9dGhpcy5fbGFzdC5wcmV2LHRoaXMuX2xhc3QubmV4dD10ZS5VbmRlZmluZWQpOnQucHJldj09PXRlLlVuZGVmaW5lZCYmKHRoaXMuX2ZpcnN0PXRoaXMuX2ZpcnN0Lm5leHQsdGhpcy5fZmlyc3QucHJldj10ZS5VbmRlZmluZWQpO3RoaXMuX3NpemUtPTF9KltTeW1ib2wuaXRlcmF0b3JdKCl7bGV0IHQ9dGhpcy5fZmlyc3Q7Zm9yKDt0IT09dGUuVW5kZWZpbmVkOyl5aWVsZCB0LmVsZW1lbnQsdD10Lm5leHR9fWNvbnN0IHhzPWdsb2JhbFRoaXMucGVyZm9ybWFuY2UmJnR5cGVvZiBnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIjtjbGFzcyBQdHtzdGF0aWMgY3JlYXRlKHQpe3JldHVybiBuZXcgUHQodCl9Y29uc3RydWN0b3IodCl7dGhpcy5fbm93PXhzJiZ0PT09ITE/RGF0ZS5ub3c6Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZS5ub3cuYmluZChnbG9iYWxUaGlzLnBlcmZvcm1hbmNlKSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfXJlc2V0KCl7dGhpcy5fc3RhcnRUaW1lPXRoaXMuX25vdygpLHRoaXMuX3N0b3BUaW1lPS0xfWVsYXBzZWQoKXtyZXR1cm4gdGhpcy5fc3RvcFRpbWUhPT0tMT90aGlzLl9zdG9wVGltZS10aGlzLl9zdGFydFRpbWU6dGhpcy5fbm93KCktdGhpcy5fc3RhcnRUaW1lfX12YXIgdm47KGZ1bmN0aW9uKGUpe2UuTm9uZT0oKT0+eXQuTm9uZTtmdW5jdGlvbiB0KFMsayl7cmV0dXJuIGQoUywoKT0+e30sMCx2b2lkIDAsITAsdm9pZCAwLGspfWUuZGVmZXI9dDtmdW5jdGlvbiBuKFMpe3JldHVybihrLE49bnVsbCxEKT0+e2xldCBIPSExLEY7cmV0dXJuIEY9UyhMPT57aWYoIUgpcmV0dXJuIEY/Ri5kaXNwb3NlKCk6SD0hMCxrLmNhbGwoTixMKX0sbnVsbCxEKSxIJiZGLmRpc3Bvc2UoKSxGfX1lLm9uY2U9bjtmdW5jdGlvbiBpKFMsayxOKXtyZXR1cm4gdSgoRCxIPW51bGwsRik9PlMoTD0+RC5jYWxsKEgsayhMKSksbnVsbCxGKSxOKX1lLm1hcD1pO2Z1bmN0aW9uIHIoUyxrLE4pe3JldHVybiB1KChELEg9bnVsbCxGKT0+UyhMPT57ayhMKSxELmNhbGwoSCxMKX0sbnVsbCxGKSxOKX1lLmZvckVhY2g9cjtmdW5jdGlvbiBhKFMsayxOKXtyZXR1cm4gdSgoRCxIPW51bGwsRik9PlMoTD0+ayhMKSYmRC5jYWxsKEgsTCksbnVsbCxGKSxOKX1lLmZpbHRlcj1hO2Z1bmN0aW9uIHMoUyl7cmV0dXJuIFN9ZS5zaWduYWw9cztmdW5jdGlvbiBvKC4uLlMpe3JldHVybihrLE49bnVsbCxEKT0+e2NvbnN0IEg9d3MoLi4uUy5tYXAoRj0+RihMPT5rLmNhbGwoTixMKSkpKTtyZXR1cm4gYyhILEQpfX1lLmFueT1vO2Z1bmN0aW9uIGwoUyxrLE4sRCl7bGV0IEg9TjtyZXR1cm4gaShTLEY9PihIPWsoSCxGKSxIKSxEKX1lLnJlZHVjZT1sO2Z1bmN0aW9uIHUoUyxrKXtsZXQgTjtjb25zdCBEPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7Tj1TKEguZmlyZSxIKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtOPy5kaXNwb3NlKCl9fSxIPW5ldyBBZShEKTtyZXR1cm4gaz8uYWRkKEgpLEguZXZlbnR9ZnVuY3Rpb24gYyhTLGspe3JldHVybiBrIGluc3RhbmNlb2YgQXJyYXk/ay5wdXNoKFMpOmsmJmsuYWRkKFMpLFN9ZnVuY3Rpb24gZChTLGssTj0xMDAsRD0hMSxIPSExLEYsTCl7bGV0IEEsTSxXLEk9MCx6O2NvbnN0IEI9e2xlYWtXYXJuaW5nVGhyZXNob2xkOkYsb25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe0E9UyhRPT57SSsrLE09ayhNLFEpLEQmJiFXJiYoWC5maXJlKE0pLE09dm9pZCAwKSx6PSgpPT57Y29uc3QgSj1NO009dm9pZCAwLFc9dm9pZCAwLCghRHx8ST4xKSYmWC5maXJlKEopLEk9MH0sdHlwZW9mIE49PSJudW1iZXIiPyhjbGVhclRpbWVvdXQoVyksVz1zZXRUaW1lb3V0KHosTikpOlc9PT12b2lkIDAmJihXPTAscXVldWVNaWNyb3Rhc2soeikpfSl9LG9uV2lsbFJlbW92ZUxpc3RlbmVyKCl7SCYmST4wJiZ6Py4oKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXt6PXZvaWQgMCxBLmRpc3Bvc2UoKX19LFg9bmV3IEFlKEIpO3JldHVybiBMPy5hZGQoWCksWC5ldmVudH1lLmRlYm91bmNlPWQ7ZnVuY3Rpb24gbShTLGs9MCxOKXtyZXR1cm4gZS5kZWJvdW5jZShTLChELEgpPT5EPyhELnB1c2goSCksRCk6W0hdLGssdm9pZCAwLCEwLHZvaWQgMCxOKX1lLmFjY3VtdWxhdGU9bTtmdW5jdGlvbiBmKFMsaz0oRCxIKT0+RD09PUgsTil7bGV0IEQ9ITAsSDtyZXR1cm4gYShTLEY9Pntjb25zdCBMPUR8fCFrKEYsSCk7cmV0dXJuIEQ9ITEsSD1GLEx9LE4pfWUubGF0Y2g9ZjtmdW5jdGlvbiBiKFMsayxOKXtyZXR1cm5bZS5maWx0ZXIoUyxrLE4pLGUuZmlsdGVyKFMsRD0+IWsoRCksTildfWUuc3BsaXQ9YjtmdW5jdGlvbiBwKFMsaz0hMSxOPVtdLEQpe2xldCBIPU4uc2xpY2UoKSxGPVMoTT0+e0g/SC5wdXNoKE0pOkEuZmlyZShNKX0pO0QmJkQuYWRkKEYpO2NvbnN0IEw9KCk9PntIPy5mb3JFYWNoKE09PkEuZmlyZShNKSksSD1udWxsfSxBPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe0Z8fChGPVMoTT0+QS5maXJlKE0pKSxEJiZELmFkZChGKSl9LG9uRGlkQWRkRmlyc3RMaXN0ZW5lcigpe0gmJihrP3NldFRpbWVvdXQoTCk6TCgpKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtGJiZGLmRpc3Bvc2UoKSxGPW51bGx9fSk7cmV0dXJuIEQmJkQuYWRkKEEpLEEuZXZlbnR9ZS5idWZmZXI9cDtmdW5jdGlvbiB3KFMsayl7cmV0dXJuKEQsSCxGKT0+e2NvbnN0IEw9ayhuZXcgXyk7cmV0dXJuIFMoZnVuY3Rpb24oQSl7Y29uc3QgTT1MLmV2YWx1YXRlKEEpO00hPT14JiZELmNhbGwoSCxNKX0sdm9pZCAwLEYpfX1lLmNoYWluPXc7Y29uc3QgeD1TeW1ib2woIkhhbHRDaGFpbmFibGUiKTtjbGFzcyBfe2NvbnN0cnVjdG9yKCl7dGhpcy5zdGVwcz1bXX1tYXAoayl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChrKSx0aGlzfWZvckVhY2goayl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChOPT4oayhOKSxOKSksdGhpc31maWx0ZXIoayl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChOPT5rKE4pP046eCksdGhpc31yZWR1Y2UoayxOKXtsZXQgRD1OO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goSD0+KEQ9ayhELEgpLEQpKSx0aGlzfWxhdGNoKGs9KE4sRCk9Pk49PT1EKXtsZXQgTj0hMCxEO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goSD0+e2NvbnN0IEY9Tnx8IWsoSCxEKTtyZXR1cm4gTj0hMSxEPUgsRj9IOnh9KSx0aGlzfWV2YWx1YXRlKGspe2Zvcihjb25zdCBOIG9mIHRoaXMuc3RlcHMpaWYoaz1OKGspLGs9PT14KWJyZWFrO3JldHVybiBrfX1mdW5jdGlvbiB5KFMsayxOPUQ9PkQpe2NvbnN0IEQ9KC4uLkEpPT5MLmZpcmUoTiguLi5BKSksSD0oKT0+Uy5vbihrLEQpLEY9KCk9PlMucmVtb3ZlTGlzdGVuZXIoayxEKSxMPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjpILG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOkZ9KTtyZXR1cm4gTC5ldmVudH1lLmZyb21Ob2RlRXZlbnRFbWl0dGVyPXk7ZnVuY3Rpb24gRShTLGssTj1EPT5EKXtjb25zdCBEPSguLi5BKT0+TC5maXJlKE4oLi4uQSkpLEg9KCk9PlMuYWRkRXZlbnRMaXN0ZW5lcihrLEQpLEY9KCk9PlMucmVtb3ZlRXZlbnRMaXN0ZW5lcihrLEQpLEw9bmV3IEFlKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOkgsb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6Rn0pO3JldHVybiBMLmV2ZW50fWUuZnJvbURPTUV2ZW50RW1pdHRlcj1FO2Z1bmN0aW9uIFIoUyl7cmV0dXJuIG5ldyBQcm9taXNlKGs9Pm4oUykoaykpfWUudG9Qcm9taXNlPVI7ZnVuY3Rpb24gUChTKXtjb25zdCBrPW5ldyBBZTtyZXR1cm4gUy50aGVuKE49PntrLmZpcmUoTil9LCgpPT57ay5maXJlKHZvaWQgMCl9KS5maW5hbGx5KCgpPT57ay5kaXNwb3NlKCl9KSxrLmV2ZW50fWUuZnJvbVByb21pc2U9UDtmdW5jdGlvbiB2KFMsayxOKXtyZXR1cm4gayhOKSxTKEQ9PmsoRCkpfWUucnVuQW5kU3Vic2NyaWJlPXY7Y2xhc3MgZ3tjb25zdHJ1Y3RvcihrLE4pe3RoaXMuX29ic2VydmFibGU9ayx0aGlzLl9jb3VudGVyPTAsdGhpcy5faGFzQ2hhbmdlZD0hMTtjb25zdCBEPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT57ay5hZGRPYnNlcnZlcih0aGlzKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9PntrLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBBZShEKSxOJiZOLmFkZCh0aGlzLmVtaXR0ZXIpfWJlZ2luVXBkYXRlKGspe3RoaXMuX2NvdW50ZXIrK31oYW5kbGVQb3NzaWJsZUNoYW5nZShrKXt9aGFuZGxlQ2hhbmdlKGssTil7dGhpcy5faGFzQ2hhbmdlZD0hMH1lbmRVcGRhdGUoayl7dGhpcy5fY291bnRlci0tLHRoaXMuX2NvdW50ZXI9PT0wJiYodGhpcy5fb2JzZXJ2YWJsZS5yZXBvcnRDaGFuZ2VzKCksdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5fb2JzZXJ2YWJsZS5nZXQoKSkpKX19ZnVuY3Rpb24gVChTLGspe3JldHVybiBuZXcgZyhTLGspLmVtaXR0ZXIuZXZlbnR9ZS5mcm9tT2JzZXJ2YWJsZT1UO2Z1bmN0aW9uIHEoUyl7cmV0dXJuKGssTixEKT0+e2xldCBIPTAsRj0hMTtjb25zdCBMPXtiZWdpblVwZGF0ZSgpe0grK30sZW5kVXBkYXRlKCl7SC0tLEg9PT0wJiYoUy5yZXBvcnRDaGFuZ2VzKCksRiYmKEY9ITEsay5jYWxsKE4pKSl9LGhhbmRsZVBvc3NpYmxlQ2hhbmdlKCl7fSxoYW5kbGVDaGFuZ2UoKXtGPSEwfX07Uy5hZGRPYnNlcnZlcihMKSxTLnJlcG9ydENoYW5nZXMoKTtjb25zdCBBPXtkaXNwb3NlKCl7Uy5yZW1vdmVPYnNlcnZlcihMKX19O3JldHVybiBEIGluc3RhbmNlb2YgYXQ/RC5hZGQoQSk6QXJyYXkuaXNBcnJheShEKSYmRC5wdXNoKEEpLEF9fWUuZnJvbU9ic2VydmFibGVMaWdodD1xfSkodm58fCh2bj17fSkpO2NsYXNzIHN0e2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXJDb3VudD0wLHRoaXMuaW52b2NhdGlvbkNvdW50PTAsdGhpcy5lbGFwc2VkT3ZlcmFsbD0wLHRoaXMuZHVyYXRpb25zPVtdLHRoaXMubmFtZT1gJHt0fV8ke3N0Ll9pZFBvb2wrK31gLHN0LmFsbC5hZGQodGhpcyl9c3RhcnQodCl7dGhpcy5fc3RvcFdhdGNoPW5ldyBQdCx0aGlzLmxpc3RlbmVyQ291bnQ9dH1zdG9wKCl7aWYodGhpcy5fc3RvcFdhdGNoKXtjb25zdCB0PXRoaXMuX3N0b3BXYXRjaC5lbGFwc2VkKCk7dGhpcy5kdXJhdGlvbnMucHVzaCh0KSx0aGlzLmVsYXBzZWRPdmVyYWxsKz10LHRoaXMuaW52b2NhdGlvbkNvdW50Kz0xLHRoaXMuX3N0b3BXYXRjaD12b2lkIDB9fX1zdC5hbGw9bmV3IFNldCxzdC5faWRQb29sPTA7bGV0IFRzPS0xO2NsYXNzIGtze2NvbnN0cnVjdG9yKHQsbj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE4KS5zbGljZSgyLDUpKXt0aGlzLnRocmVzaG9sZD10LHRoaXMubmFtZT1uLHRoaXMuX3dhcm5Db3VudGRvd249MH1kaXNwb3NlKCl7dmFyIHQ7KHQ9dGhpcy5fc3RhY2tzKT09PW51bGx8fHQ9PT12b2lkIDB8fHQuY2xlYXIoKX1jaGVjayh0LG4pe2NvbnN0IGk9dGhpcy50aHJlc2hvbGQ7aWYoaTw9MHx8bjxpKXJldHVybjt0aGlzLl9zdGFja3N8fCh0aGlzLl9zdGFja3M9bmV3IE1hcCk7Y29uc3Qgcj10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO2lmKHRoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxyKzEpLHRoaXMuX3dhcm5Db3VudGRvd24tPTEsdGhpcy5fd2FybkNvdW50ZG93bjw9MCl7dGhpcy5fd2FybkNvdW50ZG93bj1pKi41O2xldCBhLHM9MDtmb3IoY29uc3RbbyxsXW9mIHRoaXMuX3N0YWNrcykoIWF8fHM8bCkmJihhPW8scz1sKTtjb25zb2xlLndhcm4oYFske3RoaXMubmFtZX1dIHBvdGVudGlhbCBsaXN0ZW5lciBMRUFLIGRldGVjdGVkLCBoYXZpbmcgJHtufSBsaXN0ZW5lcnMgYWxyZWFkeS4gTU9TVCBmcmVxdWVudCBsaXN0ZW5lciAoJHtzfSk6YCksY29uc29sZS53YXJuKGEpfXJldHVybigpPT57Y29uc3QgYT10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO3RoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxhLTEpfX19Y2xhc3MgX257c3RhdGljIGNyZWF0ZSgpe3ZhciB0O3JldHVybiBuZXcgX24oKHQ9bmV3IEVycm9yKCkuc3RhY2spIT09bnVsbCYmdCE9PXZvaWQgMD90OiIiKX1jb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXR9cHJpbnQoKXtjb25zb2xlLndhcm4odGhpcy52YWx1ZS5zcGxpdChgCmApLnNsaWNlKDIpLmpvaW4oYApgKSl9fWNsYXNzIHdue2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH19Y29uc3QgQXM9MjtjbGFzcyBBZXtjb25zdHJ1Y3Rvcih0KXt2YXIgbixpLHIsYSxzO3RoaXMuX3NpemU9MCx0aGlzLl9vcHRpb25zPXQsdGhpcy5fbGVha2FnZU1vbj0hKChuPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8bj09PXZvaWQgMCkmJm4ubGVha1dhcm5pbmdUaHJlc2hvbGQ/bmV3IGtzKChyPShpPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5sZWFrV2FybmluZ1RocmVzaG9sZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6VHMpOnZvaWQgMCx0aGlzLl9wZXJmTW9uPSEoKGE9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxhPT09dm9pZCAwKSYmYS5fcHJvZk5hbWU/bmV3IHN0KHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT0ocz10aGlzLl9vcHRpb25zKT09PW51bGx8fHM9PT12b2lkIDA/dm9pZCAwOnMuZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIHQsbixpLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCwoKHQ9dGhpcy5fZGVsaXZlcnlRdWV1ZSk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LmN1cnJlbnQpPT09dGhpcyYmdGhpcy5fZGVsaXZlcnlRdWV1ZS5yZXNldCgpLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz12b2lkIDAsdGhpcy5fc2l6ZT0wKSwoaT0obj10aGlzLl9vcHRpb25zKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4ub25EaWRSZW1vdmVMYXN0TGlzdGVuZXIpPT09bnVsbHx8aT09PXZvaWQgMHx8aS5jYWxsKG4pLChyPXRoaXMuX2xlYWthZ2VNb24pPT09bnVsbHx8cj09PXZvaWQgMHx8ci5kaXNwb3NlKCkpfWdldCBldmVudCgpe3ZhciB0O3JldHVybih0PXRoaXMuX2V2ZW50KSE9PW51bGwmJnQhPT12b2lkIDB8fCh0aGlzLl9ldmVudD0obixpLHIpPT57dmFyIGEscyxvLGwsdTtpZih0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKjMpcmV0dXJuIGNvbnNvbGUud2FybihgWyR7dGhpcy5fbGVha2FnZU1vbi5uYW1lfV0gUkVGVVNFUyB0byBhY2NlcHQgbmV3IGxpc3RlbmVycyBiZWNhdXNlIGl0IGV4Y2VlZGVkIGl0cyB0aHJlc2hvbGQgYnkgZmFyYCkseXQuTm9uZTtpZih0aGlzLl9kaXNwb3NlZClyZXR1cm4geXQuTm9uZTtpJiYobj1uLmJpbmQoaSkpO2NvbnN0IGM9bmV3IHduKG4pO2xldCBkO3RoaXMuX2xlYWthZ2VNb24mJnRoaXMuX3NpemU+PU1hdGguY2VpbCh0aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZCouMikmJihjLnN0YWNrPV9uLmNyZWF0ZSgpLGQ9dGhpcy5fbGVha2FnZU1vbi5jaGVjayhjLnN0YWNrLHRoaXMuX3NpemUrMSkpLHRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiB3bj8oKHU9dGhpcy5fZGVsaXZlcnlRdWV1ZSkhPT1udWxsJiZ1IT09dm9pZCAwfHwodGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgU3MpLHRoaXMuX2xpc3RlbmVycz1bdGhpcy5fbGlzdGVuZXJzLGNdKTp0aGlzLl9saXN0ZW5lcnMucHVzaChjKTooKHM9KGE9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLm9uV2lsbEFkZEZpcnN0TGlzdGVuZXIpPT09bnVsbHx8cz09PXZvaWQgMHx8cy5jYWxsKGEsdGhpcyksdGhpcy5fbGlzdGVuZXJzPWMsKGw9KG89dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxvPT09dm9pZCAwP3ZvaWQgMDpvLm9uRGlkQWRkRmlyc3RMaXN0ZW5lcik9PT1udWxsfHxsPT09dm9pZCAwfHxsLmNhbGwobyx0aGlzKSksdGhpcy5fc2l6ZSsrO2NvbnN0IG09RnQoKCk9PntkPy4oKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcihjKX0pO3JldHVybiByIGluc3RhbmNlb2YgYXQ/ci5hZGQobSk6QXJyYXkuaXNBcnJheShyKSYmci5wdXNoKG0pLG19KSx0aGlzLl9ldmVudH1fcmVtb3ZlTGlzdGVuZXIodCl7dmFyIG4saSxyLGE7aWYoKGk9KG49dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLm9uV2lsbFJlbW92ZUxpc3RlbmVyKT09PW51bGx8fGk9PT12b2lkIDB8fGkuY2FsbChuLHRoaXMpLCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2lmKHRoaXMuX3NpemU9PT0xKXt0aGlzLl9saXN0ZW5lcnM9dm9pZCAwLChhPShyPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcik9PT1udWxsfHxhPT09dm9pZCAwfHxhLmNhbGwocix0aGlzKSx0aGlzLl9zaXplPTA7cmV0dXJufWNvbnN0IHM9dGhpcy5fbGlzdGVuZXJzLG89cy5pbmRleE9mKHQpO2lmKG89PT0tMSl0aHJvdyBjb25zb2xlLmxvZygiZGlzcG9zZWQ/Iix0aGlzLl9kaXNwb3NlZCksY29uc29sZS5sb2coInNpemU/Iix0aGlzLl9zaXplKSxjb25zb2xlLmxvZygiYXJyPyIsSlNPTi5zdHJpbmdpZnkodGhpcy5fbGlzdGVuZXJzKSksbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gZGlzcG9zZSB1bmtub3duIGxpc3RlbmVyIik7dGhpcy5fc2l6ZS0tLHNbb109dm9pZCAwO2NvbnN0IGw9dGhpcy5fZGVsaXZlcnlRdWV1ZS5jdXJyZW50PT09dGhpcztpZih0aGlzLl9zaXplKkFzPD1zLmxlbmd0aCl7bGV0IHU9MDtmb3IobGV0IGM9MDtjPHMubGVuZ3RoO2MrKylzW2NdP3NbdSsrXT1zW2NdOmwmJih0aGlzLl9kZWxpdmVyeVF1ZXVlLmVuZC0tLHU8dGhpcy5fZGVsaXZlcnlRdWV1ZS5pJiZ0aGlzLl9kZWxpdmVyeVF1ZXVlLmktLSk7cy5sZW5ndGg9dX19X2RlbGl2ZXIodCxuKXt2YXIgaTtpZighdClyZXR1cm47Y29uc3Qgcj0oKGk9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLm9uTGlzdGVuZXJFcnJvcil8fG1pO2lmKCFyKXt0LnZhbHVlKG4pO3JldHVybn10cnl7dC52YWx1ZShuKX1jYXRjaChhKXtyKGEpfX1fZGVsaXZlclF1ZXVlKHQpe2NvbnN0IG49dC5jdXJyZW50Ll9saXN0ZW5lcnM7Zm9yKDt0Lmk8dC5lbmQ7KXRoaXMuX2RlbGl2ZXIoblt0LmkrK10sdC52YWx1ZSk7dC5yZXNldCgpfWZpcmUodCl7dmFyIG4saSxyLGE7aWYoISgobj10aGlzLl9kZWxpdmVyeVF1ZXVlKT09PW51bGx8fG49PT12b2lkIDApJiZuLmN1cnJlbnQmJih0aGlzLl9kZWxpdmVyUXVldWUodGhpcy5fZGVsaXZlcnlRdWV1ZSksKGk9dGhpcy5fcGVyZk1vbik9PT1udWxsfHxpPT09dm9pZCAwfHxpLnN0b3AoKSksKHI9dGhpcy5fcGVyZk1vbik9PT1udWxsfHxyPT09dm9pZCAwfHxyLnN0YXJ0KHRoaXMuX3NpemUpLHRoaXMuX2xpc3RlbmVycylpZih0aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiB3bil0aGlzLl9kZWxpdmVyKHRoaXMuX2xpc3RlbmVycyx0KTtlbHNle2NvbnN0IHM9dGhpcy5fZGVsaXZlcnlRdWV1ZTtzLmVucXVldWUodGhpcyx0LHRoaXMuX2xpc3RlbmVycy5sZW5ndGgpLHRoaXMuX2RlbGl2ZXJRdWV1ZShzKX0oYT10aGlzLl9wZXJmTW9uKT09PW51bGx8fGE9PT12b2lkIDB8fGEuc3RvcCgpfWhhc0xpc3RlbmVycygpe3JldHVybiB0aGlzLl9zaXplPjB9fWNsYXNzIFNze2NvbnN0cnVjdG9yKCl7dGhpcy5pPS0xLHRoaXMuZW5kPTB9ZW5xdWV1ZSh0LG4saSl7dGhpcy5pPTAsdGhpcy5lbmQ9aSx0aGlzLmN1cnJlbnQ9dCx0aGlzLnZhbHVlPW59cmVzZXQoKXt0aGlzLmk9dGhpcy5lbmQsdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLnZhbHVlPXZvaWQgMH19ZnVuY3Rpb24gTHMoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1mdW5jdGlvbiBDcyhlKXtsZXQgdD1bXTtmb3IoO09iamVjdC5wcm90b3R5cGUhPT1lOyl0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gdH1mdW5jdGlvbiB5bihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIENzKGUpKXR5cGVvZiBlW25dPT0iZnVuY3Rpb24iJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gRXMoZSx0KXtjb25zdCBuPXI9PmZ1bmN0aW9uKCl7Y29uc3QgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQocixhKX0saT17fTtmb3IoY29uc3QgciBvZiBlKWlbcl09bihyKTtyZXR1cm4gaX1sZXQgUnM9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQubG9jYXRpb24mJmRvY3VtZW50LmxvY2F0aW9uLmhhc2guaW5kZXhPZigicHNldWRvPXRydWUiKT49MDtmdW5jdGlvbiBNcyhlLHQpe2xldCBuO3JldHVybiB0Lmxlbmd0aD09PTA/bj1lOm49ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoaSxyKT0+e2NvbnN0IGE9clswXSxzPXRbYV07bGV0IG89aTtyZXR1cm4gdHlwZW9mIHM9PSJzdHJpbmciP289czoodHlwZW9mIHM9PSJudW1iZXIifHx0eXBlb2Ygcz09ImJvb2xlYW4ifHxzPT09dm9pZCAwfHxzPT09bnVsbCkmJihvPVN0cmluZyhzKSksb30pLFJzJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKSxufWZ1bmN0aW9uIEsoZSx0LC4uLm4pe3JldHVybiBNcyh0LG4pfWZ1bmN0aW9uIGxjKGUpe312YXIgeG4sVG47Y29uc3Qgb3Q9ImVuIjtsZXQga249ITEsQW49ITEsU249ITEsQnQsTG49b3QsZ2k9b3QsRHMsU2U7Y29uc3QgWmU9Z2xvYmFsVGhpcztsZXQgaGU7dHlwZW9mIFplLnZzY29kZTwidSImJnR5cGVvZiBaZS52c2NvZGUucHJvY2VzczwidSI/aGU9WmUudnNjb2RlLnByb2Nlc3M6dHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YoKHhuPXByb2Nlc3M9PW51bGw/dm9pZCAwOnByb2Nlc3MudmVyc2lvbnMpPT09bnVsbHx8eG49PT12b2lkIDA/dm9pZCAwOnhuLm5vZGUpPT0ic3RyaW5nIiYmKGhlPXByb2Nlc3MpO2NvbnN0IE5zPXR5cGVvZigoVG49aGU/LnZlcnNpb25zKT09PW51bGx8fFRuPT09dm9pZCAwP3ZvaWQgMDpUbi5lbGVjdHJvbik9PSJzdHJpbmciJiZoZT8udHlwZT09PSJyZW5kZXJlciI7aWYodHlwZW9mIGhlPT0ib2JqZWN0Iil7a249aGUucGxhdGZvcm09PT0id2luMzIiLEFuPWhlLnBsYXRmb3JtPT09ImRhcndpbiIsU249aGUucGxhdGZvcm09PT0ibGludXgiLFNuJiZoZS5lbnYuU05BUCYmaGUuZW52LlNOQVBfUkVWSVNJT04saGUuZW52LkNJfHxoZS5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLEJ0PW90LExuPW90O2NvbnN0IGU9aGUuZW52LlZTQ09ERV9OTFNfQ09ORklHO2lmKGUpdHJ5e2NvbnN0IHQ9SlNPTi5wYXJzZShlKSxuPXQuYXZhaWxhYmxlTGFuZ3VhZ2VzWyIqIl07QnQ9dC5sb2NhbGUsZ2k9dC5vc0xvY2FsZSxMbj1ufHxvdCxEcz10Ll90cmFuc2xhdGlvbnNDb25maWdGaWxlfWNhdGNoe319ZWxzZSB0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmIU5zPyhTZT1uYXZpZ2F0b3IudXNlckFnZW50LGtuPVNlLmluZGV4T2YoIldpbmRvd3MiKT49MCxBbj1TZS5pbmRleE9mKCJNYWNpbnRvc2giKT49MCwoU2UuaW5kZXhPZigiTWFjaW50b3NoIik+PTB8fFNlLmluZGV4T2YoImlQYWQiKT49MHx8U2UuaW5kZXhPZigiaVBob25lIik+PTApJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4wLFNuPVNlLmluZGV4T2YoIkxpbnV4Iik+PTAsU2U/LmluZGV4T2YoIk1vYmkiKT49MCxLKHtrZXk6ImVuc3VyZUxvYWRlclBsdWdpbklzTG9hZGVkIixjb21tZW50Olsie0xvY2tlZH0iXX0sIl8iKSxCdD1vdCxMbj1CdCxnaT1uYXZpZ2F0b3IubGFuZ3VhZ2UpOmNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2NvbnN0IHh0PWtuLElzPUFuLERlPVNlLHpzPXR5cGVvZiBaZS5wb3N0TWVzc2FnZT09ImZ1bmN0aW9uIiYmIVplLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoenMpe2NvbnN0IGU9W107WmUuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbj0+e2lmKG4uZGF0YSYmbi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKWZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyl7Y29uc3QgYT1lW2ldO2lmKGEuaWQ9PT1uLmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspe2Uuc3BsaWNlKGksMSksYS5jYWxsYmFjaygpO3JldHVybn19fSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IGk9Kyt0O2UucHVzaCh7aWQ6aSxjYWxsYmFjazpufSksWmUucG9zdE1lc3NhZ2Uoe3ZzY29kZVNjaGVkdWxlQXN5bmNXb3JrOml9LCIqIil9fXJldHVybiBlPT5zZXRUaW1lb3V0KGUpfSkoKTtjb25zdCBIcz0hIShEZSYmRGUuaW5kZXhPZigiQ2hyb21lIik+PTApO0RlJiZEZS5pbmRleE9mKCJGaXJlZm94Iik+PTAsIUhzJiZEZSYmRGUuaW5kZXhPZigiU2FmYXJpIik+PTAsRGUmJkRlLmluZGV4T2YoIkVkZy8iKT49MCxEZSYmRGUuaW5kZXhPZigiQW5kcm9pZCIpPj0wO2NsYXNzIFVze2NvbnN0cnVjdG9yKHQsbj1KU09OLnN0cmluZ2lmeSl7dGhpcy5mbj10LHRoaXMuX2NvbXB1dGVLZXk9bix0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQodCl7Y29uc3Qgbj10aGlzLl9jb21wdXRlS2V5KHQpO3JldHVybiB0aGlzLmxhc3RBcmdLZXkhPT1uJiYodGhpcy5sYXN0QXJnS2V5PW4sdGhpcy5sYXN0Q2FjaGU9dGhpcy5mbih0KSksdGhpcy5sYXN0Q2FjaGV9fWNsYXNzIGJpe2NvbnN0cnVjdG9yKHQpe3RoaXMuZXhlY3V0b3I9dCx0aGlzLl9kaWRSdW49ITF9Z2V0IHZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKHQpe3RoaXMuX2Vycm9yPXR9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19dmFyIGx0O2Z1bmN0aW9uIFdzKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9ZnVuY3Rpb24gRnMoZSl7cmV0dXJuIGUuc3BsaXQoL1xyXG58XHJ8XG4vKX1mdW5jdGlvbiBQcyhlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KHQpO2lmKGkhPT0zMiYmaSE9PTkpcmV0dXJuIHR9cmV0dXJuLTF9ZnVuY3Rpb24gQnMoZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCBpPWUuY2hhckNvZGVBdChuKTtpZihpIT09MzImJmkhPT05KXJldHVybiBufXJldHVybi0xfWZ1bmN0aW9uIHZpKGUpe3JldHVybiBlPj02NSYmZTw9OTB9ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBxcyhlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfWZ1bmN0aW9uIE9zKGUsdCl7cmV0dXJuKGUtNTUyOTY8PDEwKSsodC01NjMyMCkrNjU1MzZ9ZnVuY3Rpb24gVnMoZSx0LG4pe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KG4pO2lmKENuKGkpJiZuKzE8dCl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobisxKTtpZihxcyhyKSlyZXR1cm4gT3MoaSxyKX1yZXR1cm4gaX1jb25zdCBqcz0vXltcdFxuXHJceDIwLVx4N0VdKiQvO2Z1bmN0aW9uIEdzKGUpe3JldHVybiBqcy50ZXN0KGUpfWNsYXNzIEtle3N0YXRpYyBnZXRJbnN0YW5jZSh0KXtyZXR1cm4gbHQuY2FjaGUuZ2V0KEFycmF5LmZyb20odCkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIGx0Ll9sb2NhbGVzLnZhbHVlfWNvbnN0cnVjdG9yKHQpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9dH1pc0FtYmlndW91cyh0KXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXModCl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUodCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KHQpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1sdD1LZSxLZS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyBiaSgoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1LDExOTg0NiwxMDldLCJfZGVmYXVsdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJjcyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZGUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImVzIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImZyIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sIml0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJqYSI6WzgyMTEsNDUsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MjkyLDQ0LDY1MzA3LDU5XSwia28iOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInBsIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInB0LUJSIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInFwcy1wbG9jIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInJ1IjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywzMDUsMTA1LDkyMSw3MywxMDA5LDExMiwyMTUsMTIwLDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwidHIiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiemgtaGFucyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4OCw0MCw2NTI4OSw0MV0sInpoLWhhbnQiOls4MjExLDQ1LDY1Mzc0LDEyNiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUzMDcsNTldfScpKSxLZS5jYWNoZT1uZXcgVXMoZT0+e2Z1bmN0aW9uIHQodSl7Y29uc3QgYz1uZXcgTWFwO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCs9MiljLnNldCh1W2RdLHVbZCsxXSk7cmV0dXJuIGN9ZnVuY3Rpb24gbih1LGMpe2NvbnN0IGQ9bmV3IE1hcCh1KTtmb3IoY29uc3RbbSxmXW9mIGMpZC5zZXQobSxmKTtyZXR1cm4gZH1mdW5jdGlvbiBpKHUsYyl7aWYoIXUpcmV0dXJuIGM7Y29uc3QgZD1uZXcgTWFwO2Zvcihjb25zdFttLGZdb2YgdSljLmhhcyhtKSYmZC5zZXQobSxmKTtyZXR1cm4gZH1jb25zdCByPWx0LmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWU7bGV0IGE9ZS5maWx0ZXIodT0+IXUuc3RhcnRzV2l0aCgiXyIpJiZ1IGluIHIpO2EubGVuZ3RoPT09MCYmKGE9WyJfZGVmYXVsdCJdKTtsZXQgcztmb3IoY29uc3QgdSBvZiBhKXtjb25zdCBjPXQoclt1XSk7cz1pKHMsYyl9Y29uc3Qgbz10KHIuX2NvbW1vbiksbD1uKG8scyk7cmV0dXJuIG5ldyBsdChsKX0pLEtlLl9sb2NhbGVzPW5ldyBiaSgoKT0+T2JqZWN0LmtleXMobHQuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS52YWx1ZSkuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpO2NsYXNzIFBle3N0YXRpYyBnZXRSYXdEYXRhKCl7cmV0dXJuIEpTT04ucGFyc2UoIls5LDEwLDExLDEyLDEzLDMyLDEyNywxNjAsMTczLDg0NywxNTY0LDQ0NDcsNDQ0OCw2MDY4LDYwNjksNjE1NSw2MTU2LDYxNTcsNjE1OCw3MzU1LDczNTYsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4MjM0LDgyMzUsODIzNiw4MjM3LDgyMzgsODIzOSw4Mjg3LDgyODgsODI4OSw4MjkwLDgyOTEsODI5Miw4MjkzLDgyOTQsODI5NSw4Mjk2LDgyOTcsODI5OCw4Mjk5LDgzMDAsODMwMSw4MzAyLDgzMDMsMTAyNDAsMTIyODgsMTI2NDQsNjUwMjQsNjUwMjUsNjUwMjYsNjUwMjcsNjUwMjgsNjUwMjksNjUwMzAsNjUwMzEsNjUwMzIsNjUwMzMsNjUwMzQsNjUwMzUsNjUwMzYsNjUwMzcsNjUwMzgsNjUwMzksNjUyNzksNjU0NDAsNjU1MjAsNjU1MjEsNjU1MjIsNjU1MjMsNjU1MjQsNjU1MjUsNjU1MjYsNjU1MjcsNjU1MjgsNjU1MzIsNzg4NDQsMTE5MTU1LDExOTE1NiwxMTkxNTcsMTE5MTU4LDExOTE1OSwxMTkxNjAsMTE5MTYxLDExOTE2Miw5MTc1MDQsOTE3NTA1LDkxNzUwNiw5MTc1MDcsOTE3NTA4LDkxNzUwOSw5MTc1MTAsOTE3NTExLDkxNzUxMiw5MTc1MTMsOTE3NTE0LDkxNzUxNSw5MTc1MTYsOTE3NTE3LDkxNzUxOCw5MTc1MTksOTE3NTIwLDkxNzUyMSw5MTc1MjIsOTE3NTIzLDkxNzUyNCw5MTc1MjUsOTE3NTI2LDkxNzUyNyw5MTc1MjgsOTE3NTI5LDkxNzUzMCw5MTc1MzEsOTE3NTMyLDkxNzUzMyw5MTc1MzQsOTE3NTM1LDkxNzUzNiw5MTc1MzcsOTE3NTM4LDkxNzUzOSw5MTc1NDAsOTE3NTQxLDkxNzU0Miw5MTc1NDMsOTE3NTQ0LDkxNzU0NSw5MTc1NDYsOTE3NTQ3LDkxNzU0OCw5MTc1NDksOTE3NTUwLDkxNzU1MSw5MTc1NTIsOTE3NTUzLDkxNzU1NCw5MTc1NTUsOTE3NTU2LDkxNzU1Nyw5MTc1NTgsOTE3NTU5LDkxNzU2MCw5MTc1NjEsOTE3NTYyLDkxNzU2Myw5MTc1NjQsOTE3NTY1LDkxNzU2Niw5MTc1NjcsOTE3NTY4LDkxNzU2OSw5MTc1NzAsOTE3NTcxLDkxNzU3Miw5MTc1NzMsOTE3NTc0LDkxNzU3NSw5MTc1NzYsOTE3NTc3LDkxNzU3OCw5MTc1NzksOTE3NTgwLDkxNzU4MSw5MTc1ODIsOTE3NTgzLDkxNzU4NCw5MTc1ODUsOTE3NTg2LDkxNzU4Nyw5MTc1ODgsOTE3NTg5LDkxNzU5MCw5MTc1OTEsOTE3NTkyLDkxNzU5Myw5MTc1OTQsOTE3NTk1LDkxNzU5Niw5MTc1OTcsOTE3NTk4LDkxNzU5OSw5MTc2MDAsOTE3NjAxLDkxNzYwMiw5MTc2MDMsOTE3NjA0LDkxNzYwNSw5MTc2MDYsOTE3NjA3LDkxNzYwOCw5MTc2MDksOTE3NjEwLDkxNzYxMSw5MTc2MTIsOTE3NjEzLDkxNzYxNCw5MTc2MTUsOTE3NjE2LDkxNzYxNyw5MTc2MTgsOTE3NjE5LDkxNzYyMCw5MTc2MjEsOTE3NjIyLDkxNzYyMyw5MTc2MjQsOTE3NjI1LDkxNzYyNiw5MTc2MjcsOTE3NjI4LDkxNzYyOSw5MTc2MzAsOTE3NjMxLDkxNzc2MCw5MTc3NjEsOTE3NzYyLDkxNzc2Myw5MTc3NjQsOTE3NzY1LDkxNzc2Niw5MTc3NjcsOTE3NzY4LDkxNzc2OSw5MTc3NzAsOTE3NzcxLDkxNzc3Miw5MTc3NzMsOTE3Nzc0LDkxNzc3NSw5MTc3NzYsOTE3Nzc3LDkxNzc3OCw5MTc3NzksOTE3NzgwLDkxNzc4MSw5MTc3ODIsOTE3NzgzLDkxNzc4NCw5MTc3ODUsOTE3Nzg2LDkxNzc4Nyw5MTc3ODgsOTE3Nzg5LDkxNzc5MCw5MTc3OTEsOTE3NzkyLDkxNzc5Myw5MTc3OTQsOTE3Nzk1LDkxNzc5Niw5MTc3OTcsOTE3Nzk4LDkxNzc5OSw5MTc4MDAsOTE3ODAxLDkxNzgwMiw5MTc4MDMsOTE3ODA0LDkxNzgwNSw5MTc4MDYsOTE3ODA3LDkxNzgwOCw5MTc4MDksOTE3ODEwLDkxNzgxMSw5MTc4MTIsOTE3ODEzLDkxNzgxNCw5MTc4MTUsOTE3ODE2LDkxNzgxNyw5MTc4MTgsOTE3ODE5LDkxNzgyMCw5MTc4MjEsOTE3ODIyLDkxNzgyMyw5MTc4MjQsOTE3ODI1LDkxNzgyNiw5MTc4MjcsOTE3ODI4LDkxNzgyOSw5MTc4MzAsOTE3ODMxLDkxNzgzMiw5MTc4MzMsOTE3ODM0LDkxNzgzNSw5MTc4MzYsOTE3ODM3LDkxNzgzOCw5MTc4MzksOTE3ODQwLDkxNzg0MSw5MTc4NDIsOTE3ODQzLDkxNzg0NCw5MTc4NDUsOTE3ODQ2LDkxNzg0Nyw5MTc4NDgsOTE3ODQ5LDkxNzg1MCw5MTc4NTEsOTE3ODUyLDkxNzg1Myw5MTc4NTQsOTE3ODU1LDkxNzg1Niw5MTc4NTcsOTE3ODU4LDkxNzg1OSw5MTc4NjAsOTE3ODYxLDkxNzg2Miw5MTc4NjMsOTE3ODY0LDkxNzg2NSw5MTc4NjYsOTE3ODY3LDkxNzg2OCw5MTc4NjksOTE3ODcwLDkxNzg3MSw5MTc4NzIsOTE3ODczLDkxNzg3NCw5MTc4NzUsOTE3ODc2LDkxNzg3Nyw5MTc4NzgsOTE3ODc5LDkxNzg4MCw5MTc4ODEsOTE3ODgyLDkxNzg4Myw5MTc4ODQsOTE3ODg1LDkxNzg4Niw5MTc4ODcsOTE3ODg4LDkxNzg4OSw5MTc4OTAsOTE3ODkxLDkxNzg5Miw5MTc4OTMsOTE3ODk0LDkxNzg5NSw5MTc4OTYsOTE3ODk3LDkxNzg5OCw5MTc4OTksOTE3OTAwLDkxNzkwMSw5MTc5MDIsOTE3OTAzLDkxNzkwNCw5MTc5MDUsOTE3OTA2LDkxNzkwNyw5MTc5MDgsOTE3OTA5LDkxNzkxMCw5MTc5MTEsOTE3OTEyLDkxNzkxMyw5MTc5MTQsOTE3OTE1LDkxNzkxNiw5MTc5MTcsOTE3OTE4LDkxNzkxOSw5MTc5MjAsOTE3OTIxLDkxNzkyMiw5MTc5MjMsOTE3OTI0LDkxNzkyNSw5MTc5MjYsOTE3OTI3LDkxNzkyOCw5MTc5MjksOTE3OTMwLDkxNzkzMSw5MTc5MzIsOTE3OTMzLDkxNzkzNCw5MTc5MzUsOTE3OTM2LDkxNzkzNyw5MTc5MzgsOTE3OTM5LDkxNzk0MCw5MTc5NDEsOTE3OTQyLDkxNzk0Myw5MTc5NDQsOTE3OTQ1LDkxNzk0Niw5MTc5NDcsOTE3OTQ4LDkxNzk0OSw5MTc5NTAsOTE3OTUxLDkxNzk1Miw5MTc5NTMsOTE3OTU0LDkxNzk1NSw5MTc5NTYsOTE3OTU3LDkxNzk1OCw5MTc5NTksOTE3OTYwLDkxNzk2MSw5MTc5NjIsOTE3OTYzLDkxNzk2NCw5MTc5NjUsOTE3OTY2LDkxNzk2Nyw5MTc5NjgsOTE3OTY5LDkxNzk3MCw5MTc5NzEsOTE3OTcyLDkxNzk3Myw5MTc5NzQsOTE3OTc1LDkxNzk3Niw5MTc5NzcsOTE3OTc4LDkxNzk3OSw5MTc5ODAsOTE3OTgxLDkxNzk4Miw5MTc5ODMsOTE3OTg0LDkxNzk4NSw5MTc5ODYsOTE3OTg3LDkxNzk4OCw5MTc5ODksOTE3OTkwLDkxNzk5MSw5MTc5OTIsOTE3OTkzLDkxNzk5NCw5MTc5OTUsOTE3OTk2LDkxNzk5Nyw5MTc5OTgsOTE3OTk5XSIpfXN0YXRpYyBnZXREYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF8fCh0aGlzLl9kYXRhPW5ldyBTZXQoUGUuZ2V0UmF3RGF0YSgpKSksdGhpcy5fZGF0YX1zdGF0aWMgaXNJbnZpc2libGVDaGFyYWN0ZXIodCl7cmV0dXJuIFBlLmdldERhdGEoKS5oYXModCl9c3RhdGljIGdldCBjb2RlUG9pbnRzKCl7cmV0dXJuIFBlLmdldERhdGEoKX19UGUuX2RhdGE9dm9pZCAwO2NvbnN0ICRzPSIkaW5pdGlhbGl6ZSI7Y2xhc3MgWHN7Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy5tZXRob2Q9aSx0aGlzLmFyZ3M9cix0aGlzLnR5cGU9MH19Y2xhc3MgX2l7Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy52c1dvcmtlcj10LHRoaXMuc2VxPW4sdGhpcy5yZXM9aSx0aGlzLmVycj1yLHRoaXMudHlwZT0xfX1jbGFzcyBKc3tjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50TmFtZT1pLHRoaXMuYXJnPXIsdGhpcy50eXBlPTJ9fWNsYXNzIFFze2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50PWksdGhpcy50eXBlPTN9fWNsYXNzIFlze2NvbnN0cnVjdG9yKHQsbil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy50eXBlPTR9fWNsYXNzIFpze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9dCx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKHQpe3RoaXMuX3dvcmtlcklkPXR9c2VuZE1lc3NhZ2UodCxuKXtjb25zdCBpPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKHIsYSk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tpXT17cmVzb2x2ZTpyLHJlamVjdDphfSx0aGlzLl9zZW5kKG5ldyBYcyh0aGlzLl93b3JrZXJJZCxpLHQsbikpfSl9bGlzdGVuKHQsbil7bGV0IGk9bnVsbDtjb25zdCByPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e2k9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQoaSxyKSx0aGlzLl9zZW5kKG5ldyBKcyh0aGlzLl93b3JrZXJJZCxpLHQsbikpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e3RoaXMuX3BlbmRpbmdFbWl0dGVycy5kZWxldGUoaSksdGhpcy5fc2VuZChuZXcgWXModGhpcy5fd29ya2VySWQsaSkpLGk9bnVsbH19KTtyZXR1cm4gci5ldmVudH1oYW5kbGVNZXNzYWdlKHQpeyF0fHwhdC52c1dvcmtlcnx8dGhpcy5fd29ya2VySWQhPT0tMSYmdC52c1dvcmtlciE9PXRoaXMuX3dvcmtlcklkfHx0aGlzLl9oYW5kbGVNZXNzYWdlKHQpfV9oYW5kbGVNZXNzYWdlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKHQpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UodCk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UodCk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KX19X2hhbmRsZVJlcGx5TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdKXtjb25zb2xlLndhcm4oIkdvdCByZXBseSB0byB1bmtub3duIHNlcSIpO3JldHVybn1jb25zdCBuPXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdLHQuZXJyKXtsZXQgaT10LmVycjt0LmVyci4kaXNFcnJvciYmKGk9bmV3IEVycm9yLGkubmFtZT10LmVyci5uYW1lLGkubWVzc2FnZT10LmVyci5tZXNzYWdlLGkuc3RhY2s9dC5lcnIuc3RhY2spLG4ucmVqZWN0KGkpO3JldHVybn1uLnJlc29sdmUodC5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZSh0Lm1ldGhvZCx0LmFyZ3MpLnRoZW4ocj0+e3RoaXMuX3NlbmQobmV3IF9pKHRoaXMuX3dvcmtlcklkLG4scix2b2lkIDApKX0scj0+e3IuZGV0YWlsIGluc3RhbmNlb2YgRXJyb3ImJihyLmRldGFpbD1maShyLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IF9pKHRoaXMuX3dvcmtlcklkLG4sdm9pZCAwLGZpKHIpKSl9KX1faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKHQpe2NvbnN0IG49dC5yZXEsaT10aGlzLl9oYW5kbGVyLmhhbmRsZUV2ZW50KHQuZXZlbnROYW1lLHQuYXJnKShyPT57dGhpcy5fc2VuZChuZXcgUXModGhpcy5fd29ya2VySWQsbixyKSl9KTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldChuLGkpfV9oYW5kbGVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFbWl0dGVycy5oYXModC5yZXEpKXtjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKTtyZXR1cm59dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldCh0LnJlcSkuZmlyZSh0LmV2ZW50KX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFdmVudHMuaGFzKHQucmVxKSl7Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIik7cmV0dXJufXRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KHQucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUodC5yZXEpfV9zZW5kKHQpe2NvbnN0IG49W107aWYodC50eXBlPT09MClmb3IobGV0IGk9MDtpPHQuYXJncy5sZW5ndGg7aSsrKXQuYXJnc1tpXWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJm4ucHVzaCh0LmFyZ3NbaV0pO2Vsc2UgdC50eXBlPT09MSYmdC5yZXMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmbi5wdXNoKHQucmVzKTt0aGlzLl9oYW5kbGVyLnNlbmRNZXNzYWdlKHQsbil9fWZ1bmN0aW9uIHdpKGUpe3JldHVybiBlWzBdPT09Im8iJiZlWzFdPT09Im4iJiZ2aShlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIHlpKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZ2aShlLmNoYXJDb2RlQXQoOSkpfWZ1bmN0aW9uIEtzKGUsdCxuKXtjb25zdCBpPXM9PmZ1bmN0aW9uKCl7Y29uc3Qgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQocyxvKX0scj1zPT5mdW5jdGlvbihvKXtyZXR1cm4gbihzLG8pfSxhPXt9O2Zvcihjb25zdCBzIG9mIGUpe2lmKHlpKHMpKXthW3NdPXIocyk7Y29udGludWV9aWYod2kocykpe2Fbc109bihzLHZvaWQgMCk7Y29udGludWV9YVtzXT1pKHMpfXJldHVybiBhfWNsYXNzIGVve2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5PW4sdGhpcy5fcmVxdWVzdEhhbmRsZXI9bnVsbCx0aGlzLl9wcm90b2NvbD1uZXcgWnMoe3NlbmRNZXNzYWdlOihpLHIpPT57dChpLHIpfSxoYW5kbGVNZXNzYWdlOihpLHIpPT50aGlzLl9oYW5kbGVNZXNzYWdlKGksciksaGFuZGxlRXZlbnQ6KGkscik9PnRoaXMuX2hhbmRsZUV2ZW50KGkscil9KX1vbm1lc3NhZ2UodCl7dGhpcy5fcHJvdG9jb2wuaGFuZGxlTWVzc2FnZSh0KX1faGFuZGxlTWVzc2FnZSh0LG4pe2lmKHQ9PT0kcylyZXR1cm4gdGhpcy5pbml0aWFsaXplKG5bMF0sblsxXSxuWzJdLG5bM10pO2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcnx8dHlwZW9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyW3RdIT0iZnVuY3Rpb24iKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK3QpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9yZXF1ZXN0SGFuZGxlclt0XS5hcHBseSh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKSl9Y2F0Y2goaSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGkpfX1faGFuZGxlRXZlbnQodCxuKXtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIik7aWYoeWkodCkpe2NvbnN0IGk9dGhpcy5fcmVxdWVzdEhhbmRsZXJbdF0uY2FsbCh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKTtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZHluYW1pYyBldmVudCAke3R9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gaX1pZih3aSh0KSl7Y29uc3QgaT10aGlzLl9yZXF1ZXN0SGFuZGxlclt0XTtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZXZlbnQgJHt0fSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIGl9dGhyb3cgbmV3IEVycm9yKGBNYWxmb3JtZWQgZXZlbnQgbmFtZSAke3R9YCl9aW5pdGlhbGl6ZSh0LG4saSxyKXt0aGlzLl9wcm90b2NvbC5zZXRXb3JrZXJJZCh0KTtjb25zdCBvPUtzKHIsKGwsdSk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKGwsdSksKGwsdSk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihsLHUpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkobyksUHJvbWlzZS5yZXNvbHZlKHluKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOihuJiYodHlwZW9mIG4uYmFzZVVybDwidSImJmRlbGV0ZSBuLmJhc2VVcmwsdHlwZW9mIG4ucGF0aHM8InUiJiZ0eXBlb2Ygbi5wYXRocy52czwidSImJmRlbGV0ZSBuLnBhdGhzLnZzLHR5cGVvZiBuLnRydXN0ZWRUeXBlc1BvbGljeTwidSImJmRlbGV0ZSBuLnRydXN0ZWRUeXBlc1BvbGljeSxuLmNhdGNoRXJyb3I9ITAsZ2xvYmFsVGhpcy5yZXF1aXJlLmNvbmZpZyhuKSksbmV3IFByb21pc2UoKGwsdSk9Pntjb25zdCBjPWdsb2JhbFRoaXMucmVxdWlyZTtjKFtpXSxkPT57aWYodGhpcy5fcmVxdWVzdEhhbmRsZXI9ZC5jcmVhdGUobyksIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXt1KG5ldyBFcnJvcigiTm8gUmVxdWVzdEhhbmRsZXIhIikpO3JldHVybn1sKHluKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSl9LHUpfSkpfX1jbGFzcyBCZXtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLm9yaWdpbmFsU3RhcnQ9dCx0aGlzLm9yaWdpbmFsTGVuZ3RoPW4sdGhpcy5tb2RpZmllZFN0YXJ0PWksdGhpcy5tb2RpZmllZExlbmd0aD1yfWdldE9yaWdpbmFsRW5kKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxTdGFydCt0aGlzLm9yaWdpbmFsTGVuZ3RofWdldE1vZGlmaWVkRW5kKCl7cmV0dXJuIHRoaXMubW9kaWZpZWRTdGFydCt0aGlzLm1vZGlmaWVkTGVuZ3RofX1mdW5jdGlvbiB4aShlLHQpe3JldHVybih0PDw1KS10K2V8MH1mdW5jdGlvbiB0byhlLHQpe3Q9eGkoMTQ5NDE3LHQpO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyl0PXhpKGUuY2hhckNvZGVBdChuKSx0KTtyZXR1cm4gdH1jbGFzcyBUaXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnNvdXJjZT10fWdldEVsZW1lbnRzKCl7Y29uc3QgdD10aGlzLnNvdXJjZSxuPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspbltpXT10LmNoYXJDb2RlQXQoaSk7cmV0dXJuIG59fWZ1bmN0aW9uIG5vKGUsdCxuKXtyZXR1cm4gbmV3IHFlKG5ldyBUaShlKSxuZXcgVGkodCkpLkNvbXB1dGVEaWZmKG4pLmNoYW5nZXN9Y2xhc3MgdXR7c3RhdGljIEFzc2VydCh0LG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcihuKX19Y2xhc3MgY3R7c3RhdGljIENvcHkodCxuLGkscixhKXtmb3IobGV0IHM9MDtzPGE7cysrKWlbcitzXT10W24rc119c3RhdGljIENvcHkyKHQsbixpLHIsYSl7Zm9yKGxldCBzPTA7czxhO3MrKylpW3Irc109dFtuK3NdfX1jbGFzcyBraXtjb25zdHJ1Y3Rvcigpe3RoaXMubV9jaGFuZ2VzPVtdLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTB9TWFya05leHRDaGFuZ2UoKXsodGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMubV9jaGFuZ2VzLnB1c2gobmV3IEJlKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHRoaXMubV9vcmlnaW5hbENvdW50LHRoaXMubV9tb2RpZmllZFN0YXJ0LHRoaXMubV9tb2RpZmllZENvdW50KSksdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNH1BZGRPcmlnaW5hbEVsZW1lbnQodCxuKXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCxuKSx0aGlzLm1fb3JpZ2luYWxDb3VudCsrfUFkZE1vZGlmaWVkRWxlbWVudCh0LG4pe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHQpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LG4pLHRoaXMubV9tb2RpZmllZENvdW50Kyt9Z2V0Q2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzfWdldFJldmVyc2VDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXMucmV2ZXJzZSgpLHRoaXMubV9jaGFuZ2VzfX1jbGFzcyBxZXtjb25zdHJ1Y3Rvcih0LG4saT1udWxsKXt0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZT1pLHRoaXMuX29yaWdpbmFsU2VxdWVuY2U9dCx0aGlzLl9tb2RpZmllZFNlcXVlbmNlPW47Y29uc3RbcixhLHNdPXFlLl9nZXRFbGVtZW50cyh0KSxbbyxsLHVdPXFlLl9nZXRFbGVtZW50cyhuKTt0aGlzLl9oYXNTdHJpbmdzPXMmJnUsdGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50cz1yLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2g9YSx0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzPW8sdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaD1sLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W119c3RhdGljIF9pc1N0cmluZ0FycmF5KHQpe3JldHVybiB0Lmxlbmd0aD4wJiZ0eXBlb2YgdFswXT09InN0cmluZyJ9c3RhdGljIF9nZXRFbGVtZW50cyh0KXtjb25zdCBuPXQuZ2V0RWxlbWVudHMoKTtpZihxZS5faXNTdHJpbmdBcnJheShuKSl7Y29uc3QgaT1uZXcgSW50MzJBcnJheShuLmxlbmd0aCk7Zm9yKGxldCByPTAsYT1uLmxlbmd0aDtyPGE7cisrKWlbcl09dG8obltyXSwwKTtyZXR1cm5bbixpLCEwXX1yZXR1cm4gbiBpbnN0YW5jZW9mIEludDMyQXJyYXk/W1tdLG4sITFdOltbXSxuZXcgSW50MzJBcnJheShuKSwhMV19RWxlbWVudHNBcmVFcXVhbCh0LG4pe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdIT09dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtuXT8hMTp0aGlzLl9oYXNTdHJpbmdzP3RoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW25dOiEwfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwodCxuKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsbikpcmV0dXJuITE7Y29uc3QgaT1xZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLHQpLHI9cWUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSxuKTtyZXR1cm4gaT09PXJ9c3RhdGljIF9nZXRTdHJpY3RFbGVtZW50KHQsbil7cmV0dXJuIHR5cGVvZiB0LmdldFN0cmljdEVsZW1lbnQ9PSJmdW5jdGlvbiI/dC5nZXRTdHJpY3RFbGVtZW50KG4pOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbbl06ITB9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbbl06ITB9Q29tcHV0ZURpZmYodCl7cmV0dXJuIHRoaXMuX0NvbXB1dGVEaWZmKDAsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMSwwLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsdCl9X0NvbXB1dGVEaWZmKHQsbixpLHIsYSl7Y29uc3Qgcz1bITFdO2xldCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCxuLGkscixzKTtyZXR1cm4gYSYmKG89dGhpcy5QcmV0dGlmeUNoYW5nZXMobykpLHtxdWl0RWFybHk6c1swXSxjaGFuZ2VzOm99fUNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsbixpLHIsYSl7Zm9yKGFbMF09ITE7dDw9biYmaTw9ciYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsaSk7KXQrKyxpKys7Zm9yKDtuPj10JiZyPj1pJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobixyKTspbi0tLHItLTtpZih0Pm58fGk+cil7bGV0IGQ7cmV0dXJuIGk8PXI/KHV0LkFzc2VydCh0PT09bisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxkPVtuZXcgQmUodCwwLGksci1pKzEpXSk6dDw9bj8odXQuQXNzZXJ0KGk9PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGQ9W25ldyBCZSh0LG4tdCsxLGksMCldKToodXQuQXNzZXJ0KHQ9PT1uKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLHV0LkFzc2VydChpPT09cisxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxkPVtdKSxkfWNvbnN0IHM9WzBdLG89WzBdLGw9dGhpcy5Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLGkscixzLG8sYSksdT1zWzBdLGM9b1swXTtpZihsIT09bnVsbClyZXR1cm4gbDtpZighYVswXSl7Y29uc3QgZD10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsdSxpLGMsYSk7bGV0IG09W107cmV0dXJuIGFbMF0/bT1bbmV3IEJlKHUrMSxuLSh1KzEpKzEsYysxLHItKGMrMSkrMSldOm09dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh1KzEsbixjKzEscixhKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhkLG0pfXJldHVybltuZXcgQmUodCxuLXQrMSxpLHItaSsxKV19V0FMS1RSQUNFKHQsbixpLHIsYSxzLG8sbCx1LGMsZCxtLGYsYixwLHcseCxfKXtsZXQgeT1udWxsLEU9bnVsbCxSPW5ldyBraSxQPW4sdj1pLGc9ZlswXS13WzBdLXIsVD0tMTA3Mzc0MTgyNCxxPXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCBTPWcrdDtTPT09UHx8Uzx2JiZ1W1MtMV08dVtTKzFdPyhkPXVbUysxXSxiPWQtZy1yLGQ8VCYmUi5NYXJrTmV4dENoYW5nZSgpLFQ9ZCxSLkFkZE1vZGlmaWVkRWxlbWVudChkKzEsYiksZz1TKzEtdCk6KGQ9dVtTLTFdKzEsYj1kLWctcixkPFQmJlIuTWFya05leHRDaGFuZ2UoKSxUPWQtMSxSLkFkZE9yaWdpbmFsRWxlbWVudChkLGIrMSksZz1TLTEtdCkscT49MCYmKHU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W3FdLHQ9dVswXSxQPTEsdj11Lmxlbmd0aC0xKX13aGlsZSgtLXE+PS0xKTtpZih5PVIuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxfWzBdKXtsZXQgUz1mWzBdKzEsaz13WzBdKzE7aWYoeSE9PW51bGwmJnkubGVuZ3RoPjApe2NvbnN0IE49eVt5Lmxlbmd0aC0xXTtTPU1hdGgubWF4KFMsTi5nZXRPcmlnaW5hbEVuZCgpKSxrPU1hdGgubWF4KGssTi5nZXRNb2RpZmllZEVuZCgpKX1FPVtuZXcgQmUoUyxtLVMrMSxrLHAtaysxKV19ZWxzZXtSPW5ldyBraSxQPXMsdj1vLGc9ZlswXS13WzBdLWwsVD0xMDczNzQxODI0LHE9eD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IFM9ZythO1M9PT1QfHxTPHYmJmNbUy0xXT49Y1tTKzFdPyhkPWNbUysxXS0xLGI9ZC1nLWwsZD5UJiZSLk1hcmtOZXh0Q2hhbmdlKCksVD1kKzEsUi5BZGRPcmlnaW5hbEVsZW1lbnQoZCsxLGIrMSksZz1TKzEtYSk6KGQ9Y1tTLTFdLGI9ZC1nLWwsZD5UJiZSLk1hcmtOZXh0Q2hhbmdlKCksVD1kLFIuQWRkTW9kaWZpZWRFbGVtZW50KGQrMSxiKzEpLGc9Uy0xLWEpLHE+PTAmJihjPXRoaXMubV9yZXZlcnNlSGlzdG9yeVtxXSxhPWNbMF0sUD0xLHY9Yy5sZW5ndGgtMSl9d2hpbGUoLS1xPj0tMSk7RT1SLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoeSxFKX1Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLGkscixhLHMsbyl7bGV0IGw9MCx1PTAsYz0wLGQ9MCxtPTAsZj0wO3QtLSxpLS0sYVswXT0wLHNbMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IGI9bi10KyhyLWkpLHA9YisxLHc9bmV3IEludDMyQXJyYXkocCkseD1uZXcgSW50MzJBcnJheShwKSxfPXItaSx5PW4tdCxFPXQtaSxSPW4tcix2PSh5LV8pJTI9PT0wO3dbX109dCx4W3ldPW4sb1swXT0hMTtmb3IobGV0IGc9MTtnPD1iLzIrMTtnKyspe2xldCBUPTAscT0wO2M9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChfLWcsZyxfLHApLGQ9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChfK2csZyxfLHApO2ZvcihsZXQgaz1jO2s8PWQ7ays9Mil7az09PWN8fGs8ZCYmd1trLTFdPHdbaysxXT9sPXdbaysxXTpsPXdbay0xXSsxLHU9bC0oay1fKS1FO2NvbnN0IE49bDtmb3IoO2w8biYmdTxyJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobCsxLHUrMSk7KWwrKyx1Kys7aWYod1trXT1sLGwrdT5UK3EmJihUPWwscT11KSwhdiYmTWF0aC5hYnMoay15KTw9Zy0xJiZsPj14W2tdKXJldHVybiBhWzBdPWwsc1swXT11LE48PXhba10mJmc8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoXyxjLGQsRSx5LG0sZixSLHcseCxsLG4sYSx1LHIscyx2LG8pOm51bGx9Y29uc3QgUz0oVC10KyhxLWkpLWcpLzI7aWYodGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUhPT1udWxsJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoVCxTKSlyZXR1cm4gb1swXT0hMCxhWzBdPVQsc1swXT1xLFM+MCYmZzw9MTQ0OD90aGlzLldBTEtUUkFDRShfLGMsZCxFLHksbSxmLFIsdyx4LGwsbixhLHUscixzLHYsbyk6KHQrKyxpKyssW25ldyBCZSh0LG4tdCsxLGksci1pKzEpXSk7bT10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHktZyxnLHkscCksZj10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHkrZyxnLHkscCk7Zm9yKGxldCBrPW07azw9ZjtrKz0yKXtrPT09bXx8azxmJiZ4W2stMV0+PXhbaysxXT9sPXhbaysxXS0xOmw9eFtrLTFdLHU9bC0oay15KS1SO2NvbnN0IE49bDtmb3IoO2w+dCYmdT5pJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobCx1KTspbC0tLHUtLTtpZih4W2tdPWwsdiYmTWF0aC5hYnMoay1fKTw9ZyYmbDw9d1trXSlyZXR1cm4gYVswXT1sLHNbMF09dSxOPj13W2tdJiZnPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKF8sYyxkLEUseSxtLGYsUix3LHgsbCxuLGEsdSxyLHMsdixvKTpudWxsfWlmKGc8PTE0NDcpe2xldCBrPW5ldyBJbnQzMkFycmF5KGQtYysyKTtrWzBdPV8tYysxLGN0LkNvcHkyKHcsYyxrLDEsZC1jKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKGspLGs9bmV3IEludDMyQXJyYXkoZi1tKzIpLGtbMF09eS1tKzEsY3QuQ29weTIoeCxtLGssMSxmLW0rMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2goayl9fXJldHVybiB0aGlzLldBTEtUUkFDRShfLGMsZCxFLHksbSxmLFIsdyx4LGwsbixhLHUscixzLHYsbyl9UHJldHRpZnlDaGFuZ2VzKHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBpPXRbbl0scj1uPHQubGVuZ3RoLTE/dFtuKzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsYT1uPHQubGVuZ3RoLTE/dFtuKzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgscz1pLm9yaWdpbmFsTGVuZ3RoPjAsbz1pLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtpLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aDxyJiZpLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aDxhJiYoIXN8fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGkub3JpZ2luYWxTdGFydCxpLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aCkpJiYoIW98fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGkubW9kaWZpZWRTdGFydCxpLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgdT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoaS5vcmlnaW5hbFN0YXJ0LGkubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKGkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RoLGkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoKSYmIXUpYnJlYWs7aS5vcmlnaW5hbFN0YXJ0KyssaS5tb2RpZmllZFN0YXJ0Kyt9Y29uc3QgbD1bbnVsbF07aWYobjx0Lmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKHRbbl0sdFtuKzFdLGwpKXt0W25dPWxbMF0sdC5zcGxpY2UobisxLDEpLG4tLTtjb250aW51ZX19Zm9yKGxldCBuPXQubGVuZ3RoLTE7bj49MDtuLS0pe2NvbnN0IGk9dFtuXTtsZXQgcj0wLGE9MDtpZihuPjApe2NvbnN0IGQ9dFtuLTFdO3I9ZC5vcmlnaW5hbFN0YXJ0K2Qub3JpZ2luYWxMZW5ndGgsYT1kLm1vZGlmaWVkU3RhcnQrZC5tb2RpZmllZExlbmd0aH1jb25zdCBzPWkub3JpZ2luYWxMZW5ndGg+MCxvPWkubW9kaWZpZWRMZW5ndGg+MDtsZXQgbD0wLHU9dGhpcy5fYm91bmRhcnlTY29yZShpLm9yaWdpbmFsU3RhcnQsaS5vcmlnaW5hbExlbmd0aCxpLm1vZGlmaWVkU3RhcnQsaS5tb2RpZmllZExlbmd0aCk7Zm9yKGxldCBkPTE7O2QrKyl7Y29uc3QgbT1pLm9yaWdpbmFsU3RhcnQtZCxmPWkubW9kaWZpZWRTdGFydC1kO2lmKG08cnx8ZjxhfHxzJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwobSxtK2kub3JpZ2luYWxMZW5ndGgpfHxvJiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoZixmK2kubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2NvbnN0IHA9KG09PT1yJiZmPT09YT81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUobSxpLm9yaWdpbmFsTGVuZ3RoLGYsaS5tb2RpZmllZExlbmd0aCk7cD51JiYodT1wLGw9ZCl9aS5vcmlnaW5hbFN0YXJ0LT1sLGkubW9kaWZpZWRTdGFydC09bDtjb25zdCBjPVtudWxsXTtpZihuPjAmJnRoaXMuQ2hhbmdlc092ZXJsYXAodFtuLTFdLHRbbl0sYykpe3Rbbi0xXT1jWzBdLHQuc3BsaWNlKG4sMSksbisrO2NvbnRpbnVlfX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgbj0xLGk9dC5sZW5ndGg7bjxpO24rKyl7Y29uc3Qgcj10W24tMV0sYT10W25dLHM9YS5vcmlnaW5hbFN0YXJ0LXIub3JpZ2luYWxTdGFydC1yLm9yaWdpbmFsTGVuZ3RoLG89ci5vcmlnaW5hbFN0YXJ0LGw9YS5vcmlnaW5hbFN0YXJ0K2Eub3JpZ2luYWxMZW5ndGgsdT1sLW8sYz1yLm1vZGlmaWVkU3RhcnQsZD1hLm1vZGlmaWVkU3RhcnQrYS5tb2RpZmllZExlbmd0aCxtPWQtYztpZihzPDUmJnU8MjAmJm08MjApe2NvbnN0IGY9dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShvLHUsYyxtLHMpO2lmKGYpe2NvbnN0W2IscF09ZjsoYiE9PXIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RofHxwIT09ci5tb2RpZmllZFN0YXJ0K3IubW9kaWZpZWRMZW5ndGgpJiYoci5vcmlnaW5hbExlbmd0aD1iLXIub3JpZ2luYWxTdGFydCxyLm1vZGlmaWVkTGVuZ3RoPXAtci5tb2RpZmllZFN0YXJ0LGEub3JpZ2luYWxTdGFydD1iK3MsYS5tb2RpZmllZFN0YXJ0PXArcyxhLm9yaWdpbmFsTGVuZ3RoPWwtYS5vcmlnaW5hbFN0YXJ0LGEubW9kaWZpZWRMZW5ndGg9ZC1hLm1vZGlmaWVkU3RhcnQpfX19cmV0dXJuIHR9X2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UodCxuLGkscixhKXtpZihuPGF8fHI8YSlyZXR1cm4gbnVsbDtjb25zdCBzPXQrbi1hKzEsbz1pK3ItYSsxO2xldCBsPTAsdT0wLGM9MDtmb3IobGV0IGQ9dDtkPHM7ZCsrKWZvcihsZXQgbT1pO208bzttKyspe2NvbnN0IGY9dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUoZCxtLGEpO2Y+MCYmZj5sJiYobD1mLHU9ZCxjPW0pfXJldHVybiBsPjA/W3UsY106bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxuLGkpe2xldCByPTA7Zm9yKGxldCBhPTA7YTxpO2ErKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0K2EsbithKSlyZXR1cm4gMDtyKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3QrYV0ubGVuZ3RofXJldHVybiByfV9PcmlnaW5hbElzQm91bmRhcnkodCl7cmV0dXJuIHQ8PTB8fHQ+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTE/ITA6dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF0pfV9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKXtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkodCl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeSh0LTEpKXJldHVybiEwO2lmKG4+MCl7Y29uc3QgaT10K247aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGktMSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShpKSlyZXR1cm4hMH1yZXR1cm4hMX1fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpe3JldHVybiB0PD0wfHx0Pj10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xPyEwOnRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KHQsbil7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkodC0xKSlyZXR1cm4hMDtpZihuPjApe2NvbnN0IGk9dCtuO2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShpLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoaSkpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUodCxuLGkscil7Y29uc3QgYT10aGlzLl9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKT8xOjAscz10aGlzLl9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkoaSxyKT8xOjA7cmV0dXJuIGErc31Db25jYXRlbmF0ZUNoYW5nZXModCxuKXtjb25zdCBpPVtdO2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBuLmxlbmd0aD4wP246dDtpZih0aGlzLkNoYW5nZXNPdmVybGFwKHRbdC5sZW5ndGgtMV0sblswXSxpKSl7Y29uc3Qgcj1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgtMSk7cmV0dXJuIGN0LkNvcHkodCwwLHIsMCx0Lmxlbmd0aC0xKSxyW3QubGVuZ3RoLTFdPWlbMF0sY3QuQ29weShuLDEscix0Lmxlbmd0aCxuLmxlbmd0aC0xKSxyfWVsc2V7Y29uc3Qgcj1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgpO3JldHVybiBjdC5Db3B5KHQsMCxyLDAsdC5sZW5ndGgpLGN0LkNvcHkobiwwLHIsdC5sZW5ndGgsbi5sZW5ndGgpLHJ9fUNoYW5nZXNPdmVybGFwKHQsbixpKXtpZih1dC5Bc3NlcnQodC5vcmlnaW5hbFN0YXJ0PD1uLm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksdXQuQXNzZXJ0KHQubW9kaWZpZWRTdGFydDw9bi5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoPj1uLm9yaWdpbmFsU3RhcnR8fHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoPj1uLm1vZGlmaWVkU3RhcnQpe2NvbnN0IHI9dC5vcmlnaW5hbFN0YXJ0O2xldCBhPXQub3JpZ2luYWxMZW5ndGg7Y29uc3Qgcz10Lm1vZGlmaWVkU3RhcnQ7bGV0IG89dC5tb2RpZmllZExlbmd0aDtyZXR1cm4gdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydCYmKGE9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtdC5vcmlnaW5hbFN0YXJ0KSx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0JiYobz1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC10Lm1vZGlmaWVkU3RhcnQpLGlbMF09bmV3IEJlKHIsYSxzLG8pLCEwfWVsc2UgcmV0dXJuIGlbMF09bnVsbCwhMX1DbGlwRGlhZ29uYWxCb3VuZCh0LG4saSxyKXtpZih0Pj0wJiZ0PHIpcmV0dXJuIHQ7Y29uc3QgYT1pLHM9ci1pLTEsbz1uJTI9PT0wO2lmKHQ8MCl7Y29uc3QgbD1hJTI9PT0wO3JldHVybiBvPT09bD8wOjF9ZWxzZXtjb25zdCBsPXMlMj09PTA7cmV0dXJuIG89PT1sP3ItMTpyLTJ9fX12YXIgQWk9e0VOVl9UWVBFOiJsb2NhbCIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifTtsZXQgaHQ7Y29uc3QgRW49Z2xvYmFsVGhpcy52c2NvZGU7aWYodHlwZW9mIEVuPCJ1IiYmdHlwZW9mIEVuLnByb2Nlc3M8InUiKXtjb25zdCBlPUVuLnByb2Nlc3M7aHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZCgpe3JldHVybiBlLmN3ZCgpfX19ZWxzZSB0eXBlb2YgcHJvY2VzczwidSI/aHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gQWl9LGN3ZCgpe3JldHVybiBBaS5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06aHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiB4dD8id2luMzIiOklzPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZCgpe3JldHVybiIvIn19O2NvbnN0IHF0PWh0LmN3ZCxpbz1odC5lbnYscm89aHQucGxhdGZvcm0sYW89NjUsc289OTcsb289OTAsbG89MTIyLE9lPTQ2LHVlPTQ3LHBlPTkyLFZlPTU4LHVvPTYzO2NsYXNzIFNpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLGkpe2xldCByO3R5cGVvZiBuPT0ic3RyaW5nIiYmbi5pbmRleE9mKCJub3QgIik9PT0wPyhyPSJtdXN0IG5vdCBiZSIsbj1uLnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IGE9dC5pbmRleE9mKCIuIikhPT0tMT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IHM9YFRoZSAiJHt0fSIgJHthfSAke3J9IG9mIHR5cGUgJHtufWA7cys9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBpfWAsc3VwZXIocyksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIGNvKGUsdCl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgU2kodCwiT2JqZWN0IixlKX1mdW5jdGlvbiBpZShlLHQpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgU2kodCwic3RyaW5nIixlKX1jb25zdCBqZT1ybz09PSJ3aW4zMiI7ZnVuY3Rpb24gaihlKXtyZXR1cm4gZT09PXVlfHxlPT09cGV9ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGU9PT11ZX1mdW5jdGlvbiBHZShlKXtyZXR1cm4gZT49YW8mJmU8PW9vfHxlPj1zbyYmZTw9bG99ZnVuY3Rpb24gT3QoZSx0LG4saSl7bGV0IHI9IiIsYT0wLHM9LTEsbz0wLGw9MDtmb3IobGV0IHU9MDt1PD1lLmxlbmd0aDsrK3Upe2lmKHU8ZS5sZW5ndGgpbD1lLmNoYXJDb2RlQXQodSk7ZWxzZXtpZihpKGwpKWJyZWFrO2w9dWV9aWYoaShsKSl7aWYoIShzPT09dS0xfHxvPT09MSkpaWYobz09PTIpe2lmKHIubGVuZ3RoPDJ8fGEhPT0yfHxyLmNoYXJDb2RlQXQoci5sZW5ndGgtMSkhPT1PZXx8ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTIpIT09T2Upe2lmKHIubGVuZ3RoPjIpe2NvbnN0IGM9ci5sYXN0SW5kZXhPZihuKTtjPT09LTE/KHI9IiIsYT0wKToocj1yLnNsaWNlKDAsYyksYT1yLmxlbmd0aC0xLXIubGFzdEluZGV4T2YobikpLHM9dSxvPTA7Y29udGludWV9ZWxzZSBpZihyLmxlbmd0aCE9PTApe3I9IiIsYT0wLHM9dSxvPTA7Y29udGludWV9fXQmJihyKz1yLmxlbmd0aD4wP2Ake259Li5gOiIuLiIsYT0yKX1lbHNlIHIubGVuZ3RoPjA/cis9YCR7bn0ke2Uuc2xpY2UocysxLHUpfWA6cj1lLnNsaWNlKHMrMSx1KSxhPXUtcy0xO3M9dSxvPTB9ZWxzZSBsPT09T2UmJm8hPT0tMT8rK286bz0tMX1yZXR1cm4gcn1mdW5jdGlvbiBMaShlLHQpe2NvKHQsInBhdGhPYmplY3QiKTtjb25zdCBuPXQuZGlyfHx0LnJvb3QsaT10LmJhc2V8fGAke3QubmFtZXx8IiJ9JHt0LmV4dHx8IiJ9YDtyZXR1cm4gbj9uPT09dC5yb290P2Ake259JHtpfWA6YCR7bn0ke2V9JHtpfWA6aX1jb25zdCBtZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSIiLGk9ITE7Zm9yKGxldCByPWUubGVuZ3RoLTE7cj49LTE7ci0tKXtsZXQgYTtpZihyPj0wKXtpZihhPWVbcl0saWUoYSwicGF0aCIpLGEubGVuZ3RoPT09MCljb250aW51ZX1lbHNlIHQubGVuZ3RoPT09MD9hPXF0KCk6KGE9aW9bYD0ke3R9YF18fHF0KCksKGE9PT12b2lkIDB8fGEuc2xpY2UoMCwyKS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpJiZhLmNoYXJDb2RlQXQoMik9PT1wZSkmJihhPWAke3R9XFxgKSk7Y29uc3Qgcz1hLmxlbmd0aDtsZXQgbz0wLGw9IiIsdT0hMTtjb25zdCBjPWEuY2hhckNvZGVBdCgwKTtpZihzPT09MSlqKGMpJiYobz0xLHU9ITApO2Vsc2UgaWYoaihjKSlpZih1PSEwLGooYS5jaGFyQ29kZUF0KDEpKSl7bGV0IGQ9MixtPWQ7Zm9yKDtkPHMmJiFqKGEuY2hhckNvZGVBdChkKSk7KWQrKztpZihkPHMmJmQhPT1tKXtjb25zdCBmPWEuc2xpY2UobSxkKTtmb3IobT1kO2Q8cyYmaihhLmNoYXJDb2RlQXQoZCkpOylkKys7aWYoZDxzJiZkIT09bSl7Zm9yKG09ZDtkPHMmJiFqKGEuY2hhckNvZGVBdChkKSk7KWQrKzsoZD09PXN8fGQhPT1tKSYmKGw9YFxcXFwke2Z9XFwke2Euc2xpY2UobSxkKX1gLG89ZCl9fX1lbHNlIG89MTtlbHNlIEdlKGMpJiZhLmNoYXJDb2RlQXQoMSk9PT1WZSYmKGw9YS5zbGljZSgwLDIpLG89MixzPjImJmooYS5jaGFyQ29kZUF0KDIpKSYmKHU9ITAsbz0zKSk7aWYobC5sZW5ndGg+MClpZih0Lmxlbmd0aD4wKXtpZihsLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSB0PWw7aWYoaSl7aWYodC5sZW5ndGg+MClicmVha31lbHNlIGlmKG49YCR7YS5zbGljZShvKX1cXCR7bn1gLGk9dSx1JiZ0Lmxlbmd0aD4wKWJyZWFrfXJldHVybiBuPU90KG4sIWksIlxcIixqKSxpP2Ake3R9XFwke259YDpgJHt0fSR7bn1gfHwiLiJ9LG5vcm1hbGl6ZShlKXtpZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49MCxpLHI9ITE7Y29uc3QgYT1lLmNoYXJDb2RlQXQoMCk7aWYodD09PTEpcmV0dXJuIFJuKGEpPyJcXCI6ZTtpZihqKGEpKWlmKHI9ITAsaihlLmNoYXJDb2RlQXQoMSkpKXtsZXQgbz0yLGw9bztmb3IoO288dCYmIWooZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG88dCYmbyE9PWwpe2NvbnN0IHU9ZS5zbGljZShsLG8pO2ZvcihsPW87bzx0JiZqKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT1sKXtmb3IobD1vO288dCYmIWooZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG89PT10KXJldHVybmBcXFxcJHt1fVxcJHtlLnNsaWNlKGwpfVxcYDtvIT09bCYmKGk9YFxcXFwke3V9XFwke2Uuc2xpY2UobCxvKX1gLG49byl9fX1lbHNlIG49MTtlbHNlIEdlKGEpJiZlLmNoYXJDb2RlQXQoMSk9PT1WZSYmKGk9ZS5zbGljZSgwLDIpLG49Mix0PjImJmooZS5jaGFyQ29kZUF0KDIpKSYmKHI9ITAsbj0zKSk7bGV0IHM9bjx0P090KGUuc2xpY2UobiksIXIsIlxcIixqKToiIjtyZXR1cm4gcy5sZW5ndGg9PT0wJiYhciYmKHM9Ii4iKSxzLmxlbmd0aD4wJiZqKGUuY2hhckNvZGVBdCh0LTEpKSYmKHMrPSJcXCIpLGk9PT12b2lkIDA/cj9gXFwke3N9YDpzOnI/YCR7aX1cXCR7c31gOmAke2l9JHtzfWB9LGlzQWJzb2x1dGUoZSl7aWUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIGoobil8fHQ+MiYmR2UobikmJmUuY2hhckNvZGVBdCgxKT09PVZlJiZqKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdCxuO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7KythKXtjb25zdCBzPWVbYV07aWUocywicGF0aCIpLHMubGVuZ3RoPjAmJih0PT09dm9pZCAwP3Q9bj1zOnQrPWBcXCR7c31gKX1pZih0PT09dm9pZCAwKXJldHVybiIuIjtsZXQgaT0hMCxyPTA7aWYodHlwZW9mIG49PSJzdHJpbmciJiZqKG4uY2hhckNvZGVBdCgwKSkpeysrcjtjb25zdCBhPW4ubGVuZ3RoO2E+MSYmaihuLmNoYXJDb2RlQXQoMSkpJiYoKytyLGE+MiYmKGoobi5jaGFyQ29kZUF0KDIpKT8rK3I6aT0hMSkpfWlmKGkpe2Zvcig7cjx0Lmxlbmd0aCYmaih0LmNoYXJDb2RlQXQocikpOylyKys7cj49MiYmKHQ9YFxcJHt0LnNsaWNlKHIpfWApfXJldHVybiBtZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoaWUoZSwiZnJvbSIpLGllKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1tZS5yZXNvbHZlKGUpLGk9bWUucmVzb2x2ZSh0KTtpZihuPT09aXx8KGU9bi50b0xvd2VyQ2FzZSgpLHQ9aS50b0xvd2VyQ2FzZSgpLGU9PT10KSlyZXR1cm4iIjtsZXQgcj0wO2Zvcig7cjxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KHIpPT09cGU7KXIrKztsZXQgYT1lLmxlbmd0aDtmb3IoO2EtMT5yJiZlLmNoYXJDb2RlQXQoYS0xKT09PXBlOylhLS07Y29uc3Qgcz1hLXI7bGV0IG89MDtmb3IoO288dC5sZW5ndGgmJnQuY2hhckNvZGVBdChvKT09PXBlOylvKys7bGV0IGw9dC5sZW5ndGg7Zm9yKDtsLTE+byYmdC5jaGFyQ29kZUF0KGwtMSk9PT1wZTspbC0tO2NvbnN0IHU9bC1vLGM9czx1P3M6dTtsZXQgZD0tMSxtPTA7Zm9yKDttPGM7bSsrKXtjb25zdCBiPWUuY2hhckNvZGVBdChyK20pO2lmKGIhPT10LmNoYXJDb2RlQXQobyttKSlicmVhaztiPT09cGUmJihkPW0pfWlmKG0hPT1jKXtpZihkPT09LTEpcmV0dXJuIGl9ZWxzZXtpZih1PmMpe2lmKHQuY2hhckNvZGVBdChvK20pPT09cGUpcmV0dXJuIGkuc2xpY2UobyttKzEpO2lmKG09PT0yKXJldHVybiBpLnNsaWNlKG8rbSl9cz5jJiYoZS5jaGFyQ29kZUF0KHIrbSk9PT1wZT9kPW06bT09PTImJihkPTMpKSxkPT09LTEmJihkPTApfWxldCBmPSIiO2ZvcihtPXIrZCsxO208PWE7KyttKShtPT09YXx8ZS5jaGFyQ29kZUF0KG0pPT09cGUpJiYoZis9Zi5sZW5ndGg9PT0wPyIuLiI6IlxcLi4iKTtyZXR1cm4gbys9ZCxmLmxlbmd0aD4wP2Ake2Z9JHtpLnNsaWNlKG8sbCl9YDooaS5jaGFyQ29kZUF0KG8pPT09cGUmJisrbyxpLnNsaWNlKG8sbCkpfSx0b05hbWVzcGFjZWRQYXRoKGUpe2lmKHR5cGVvZiBlIT0ic3RyaW5nInx8ZS5sZW5ndGg9PT0wKXJldHVybiBlO2NvbnN0IHQ9bWUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1wZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09cGUpe2NvbnN0IG49dC5jaGFyQ29kZUF0KDIpO2lmKG4hPT11byYmbiE9PU9lKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihHZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT1WZSYmdC5jaGFyQ29kZUF0KDIpPT09cGUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtpZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49LTEsaT0wO2NvbnN0IHI9ZS5jaGFyQ29kZUF0KDApO2lmKHQ9PT0xKXJldHVybiBqKHIpP2U6Ii4iO2lmKGoocikpe2lmKG49aT0xLGooZS5jaGFyQ29kZUF0KDEpKSl7bGV0IG89MixsPW87Zm9yKDtvPHQmJiFqKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT1sKXtmb3IobD1vO288dCYmaihlLmNoYXJDb2RlQXQobykpOylvKys7aWYobzx0JiZvIT09bCl7Zm9yKGw9bztvPHQmJiFqKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPT09dClyZXR1cm4gZTtvIT09bCYmKG49aT1vKzEpfX19fWVsc2UgR2UocikmJmUuY2hhckNvZGVBdCgxKT09PVZlJiYobj10PjImJmooZS5jaGFyQ29kZUF0KDIpKT8zOjIsaT1uKTtsZXQgYT0tMSxzPSEwO2ZvcihsZXQgbz10LTE7bz49aTstLW8paWYoaihlLmNoYXJDb2RlQXQobykpKXtpZighcyl7YT1vO2JyZWFrfX1lbHNlIHM9ITE7aWYoYT09PS0xKXtpZihuPT09LTEpcmV0dXJuIi4iO2E9bn1yZXR1cm4gZS5zbGljZSgwLGEpfSxiYXNlbmFtZShlLHQpe3QhPT12b2lkIDAmJmllKHQsImV4dCIpLGllKGUsInBhdGgiKTtsZXQgbj0wLGk9LTEscj0hMCxhO2lmKGUubGVuZ3RoPj0yJiZHZShlLmNoYXJDb2RlQXQoMCkpJiZlLmNoYXJDb2RlQXQoMSk9PT1WZSYmKG49MiksdCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgcz10Lmxlbmd0aC0xLG89LTE7Zm9yKGE9ZS5sZW5ndGgtMTthPj1uOy0tYSl7Y29uc3QgbD1lLmNoYXJDb2RlQXQoYSk7aWYoaihsKSl7aWYoIXIpe249YSsxO2JyZWFrfX1lbHNlIG89PT0tMSYmKHI9ITEsbz1hKzEpLHM+PTAmJihsPT09dC5jaGFyQ29kZUF0KHMpPy0tcz09PS0xJiYoaT1hKToocz0tMSxpPW8pKX1yZXR1cm4gbj09PWk/aT1vOmk9PT0tMSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UobixpKX1mb3IoYT1lLmxlbmd0aC0xO2E+PW47LS1hKWlmKGooZS5jaGFyQ29kZUF0KGEpKSl7aWYoIXIpe249YSsxO2JyZWFrfX1lbHNlIGk9PT0tMSYmKHI9ITEsaT1hKzEpO3JldHVybiBpPT09LTE/IiI6ZS5zbGljZShuLGkpfSxleHRuYW1lKGUpe2llKGUsInBhdGgiKTtsZXQgdD0wLG49LTEsaT0wLHI9LTEsYT0hMCxzPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PVZlJiZHZShlLmNoYXJDb2RlQXQoMCkpJiYodD1pPTIpO2ZvcihsZXQgbz1lLmxlbmd0aC0xO28+PXQ7LS1vKXtjb25zdCBsPWUuY2hhckNvZGVBdChvKTtpZihqKGwpKXtpZighYSl7aT1vKzE7YnJlYWt9Y29udGludWV9cj09PS0xJiYoYT0hMSxyPW8rMSksbD09PU9lP249PT0tMT9uPW86cyE9PTEmJihzPTEpOm4hPT0tMSYmKHM9LTEpfXJldHVybiBuPT09LTF8fHI9PT0tMXx8cz09PTB8fHM9PT0xJiZuPT09ci0xJiZuPT09aSsxPyIiOmUuc2xpY2UobixyKX0sZm9ybWF0OkxpLmJpbmQobnVsbCwiXFwiKSxwYXJzZShlKXtpZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5sZW5ndGg7bGV0IGk9MCxyPWUuY2hhckNvZGVBdCgwKTtpZihuPT09MSlyZXR1cm4gaihyKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihqKHIpKXtpZihpPTEsaihlLmNoYXJDb2RlQXQoMSkpKXtsZXQgZD0yLG09ZDtmb3IoO2Q8biYmIWooZS5jaGFyQ29kZUF0KGQpKTspZCsrO2lmKGQ8biYmZCE9PW0pe2ZvcihtPWQ7ZDxuJiZqKGUuY2hhckNvZGVBdChkKSk7KWQrKztpZihkPG4mJmQhPT1tKXtmb3IobT1kO2Q8biYmIWooZS5jaGFyQ29kZUF0KGQpKTspZCsrO2Q9PT1uP2k9ZDpkIT09bSYmKGk9ZCsxKX19fX1lbHNlIGlmKEdlKHIpJiZlLmNoYXJDb2RlQXQoMSk9PT1WZSl7aWYobjw9MilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpZihpPTIsaihlLmNoYXJDb2RlQXQoMikpKXtpZihuPT09MylyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpPTN9fWk+MCYmKHQucm9vdD1lLnNsaWNlKDAsaSkpO2xldCBhPS0xLHM9aSxvPS0xLGw9ITAsdT1lLmxlbmd0aC0xLGM9MDtmb3IoO3U+PWk7LS11KXtpZihyPWUuY2hhckNvZGVBdCh1KSxqKHIpKXtpZighbCl7cz11KzE7YnJlYWt9Y29udGludWV9bz09PS0xJiYobD0hMSxvPXUrMSkscj09PU9lP2E9PT0tMT9hPXU6YyE9PTEmJihjPTEpOmEhPT0tMSYmKGM9LTEpfXJldHVybiBvIT09LTEmJihhPT09LTF8fGM9PT0wfHxjPT09MSYmYT09PW8tMSYmYT09PXMrMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocyxvKToodC5uYW1lPWUuc2xpY2UocyxhKSx0LmJhc2U9ZS5zbGljZShzLG8pLHQuZXh0PWUuc2xpY2UoYSxvKSkpLHM+MCYmcyE9PWk/dC5kaXI9ZS5zbGljZSgwLHMtMSk6dC5kaXI9dC5yb290LHR9LHNlcDoiXFwiLGRlbGltaXRlcjoiOyIsd2luMzI6bnVsbCxwb3NpeDpudWxsfSxobz0oKCk9PntpZihqZSl7Y29uc3QgZT0vXFwvZztyZXR1cm4oKT0+e2NvbnN0IHQ9cXQoKS5yZXBsYWNlKGUsIi8iKTtyZXR1cm4gdC5zbGljZSh0LmluZGV4T2YoIi8iKSl9fXJldHVybigpPT5xdCgpfSkoKSxnZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSExO2ZvcihsZXQgaT1lLmxlbmd0aC0xO2k+PS0xJiYhbjtpLS0pe2NvbnN0IHI9aT49MD9lW2ldOmhvKCk7aWUociwicGF0aCIpLHIubGVuZ3RoIT09MCYmKHQ9YCR7cn0vJHt0fWAsbj1yLmNoYXJDb2RlQXQoMCk9PT11ZSl9cmV0dXJuIHQ9T3QodCwhbiwiLyIsUm4pLG4/YC8ke3R9YDp0Lmxlbmd0aD4wP3Q6Ii4ifSxub3JtYWxpemUoZSl7aWYoaWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT11ZSxuPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKT09PXVlO3JldHVybiBlPU90KGUsIXQsIi8iLFJuKSxlLmxlbmd0aD09PTA/dD8iLyI6bj8iLi8iOiIuIjoobiYmKGUrPSIvIiksdD9gLyR7ZX1gOmUpfSxpc0Fic29sdXRlKGUpe3JldHVybiBpZShlLCJwYXRoIiksZS5sZW5ndGg+MCYmZS5jaGFyQ29kZUF0KDApPT09dWV9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbil7Y29uc3QgaT1lW25dO2llKGksInBhdGgiKSxpLmxlbmd0aD4wJiYodD09PXZvaWQgMD90PWk6dCs9YC8ke2l9YCl9cmV0dXJuIHQ9PT12b2lkIDA/Ii4iOmdlLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihpZShlLCJmcm9tIiksaWUodCwidG8iKSxlPT09dHx8KGU9Z2UucmVzb2x2ZShlKSx0PWdlLnJlc29sdmUodCksZT09PXQpKXJldHVybiIiO2NvbnN0IG49MSxpPWUubGVuZ3RoLHI9aS1uLGE9MSxzPXQubGVuZ3RoLWEsbz1yPHM/cjpzO2xldCBsPS0xLHU9MDtmb3IoO3U8bzt1Kyspe2NvbnN0IGQ9ZS5jaGFyQ29kZUF0KG4rdSk7aWYoZCE9PXQuY2hhckNvZGVBdChhK3UpKWJyZWFrO2Q9PT11ZSYmKGw9dSl9aWYodT09PW8paWYocz5vKXtpZih0LmNoYXJDb2RlQXQoYSt1KT09PXVlKXJldHVybiB0LnNsaWNlKGErdSsxKTtpZih1PT09MClyZXR1cm4gdC5zbGljZShhK3UpfWVsc2Ugcj5vJiYoZS5jaGFyQ29kZUF0KG4rdSk9PT11ZT9sPXU6dT09PTAmJihsPTApKTtsZXQgYz0iIjtmb3IodT1uK2wrMTt1PD1pOysrdSkodT09PWl8fGUuY2hhckNvZGVBdCh1KT09PXVlKSYmKGMrPWMubGVuZ3RoPT09MD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtjfSR7dC5zbGljZShhK2wpfWB9LHRvTmFtZXNwYWNlZFBhdGgoZSl7cmV0dXJuIGV9LGRpcm5hbWUoZSl7aWYoaWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT11ZTtsZXQgbj0tMSxpPSEwO2ZvcihsZXQgcj1lLmxlbmd0aC0xO3I+PTE7LS1yKWlmKGUuY2hhckNvZGVBdChyKT09PXVlKXtpZighaSl7bj1yO2JyZWFrfX1lbHNlIGk9ITE7cmV0dXJuIG49PT0tMT90PyIvIjoiLiI6dCYmbj09PTE/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dCE9PXZvaWQgMCYmaWUodCwiZXh0IiksaWUoZSwicGF0aCIpO2xldCBuPTAsaT0tMSxyPSEwLGE7aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgcz10Lmxlbmd0aC0xLG89LTE7Zm9yKGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3QgbD1lLmNoYXJDb2RlQXQoYSk7aWYobD09PXVlKXtpZighcil7bj1hKzE7YnJlYWt9fWVsc2Ugbz09PS0xJiYocj0hMSxvPWErMSkscz49MCYmKGw9PT10LmNoYXJDb2RlQXQocyk/LS1zPT09LTEmJihpPWEpOihzPS0xLGk9bykpfXJldHVybiBuPT09aT9pPW86aT09PS0xJiYoaT1lLmxlbmd0aCksZS5zbGljZShuLGkpfWZvcihhPWUubGVuZ3RoLTE7YT49MDstLWEpaWYoZS5jaGFyQ29kZUF0KGEpPT09dWUpe2lmKCFyKXtuPWErMTticmVha319ZWxzZSBpPT09LTEmJihyPSExLGk9YSsxKTtyZXR1cm4gaT09PS0xPyIiOmUuc2xpY2UobixpKX0sZXh0bmFtZShlKXtpZShlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLGk9LTEscj0hMCxhPTA7Zm9yKGxldCBzPWUubGVuZ3RoLTE7cz49MDstLXMpe2NvbnN0IG89ZS5jaGFyQ29kZUF0KHMpO2lmKG89PT11ZSl7aWYoIXIpe249cysxO2JyZWFrfWNvbnRpbnVlfWk9PT0tMSYmKHI9ITEsaT1zKzEpLG89PT1PZT90PT09LTE/dD1zOmEhPT0xJiYoYT0xKTp0IT09LTEmJihhPS0xKX1yZXR1cm4gdD09PS0xfHxpPT09LTF8fGE9PT0wfHxhPT09MSYmdD09PWktMSYmdD09PW4rMT8iIjplLnNsaWNlKHQsaSl9LGZvcm1hdDpMaS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtpZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09dWU7bGV0IGk7bj8odC5yb290PSIvIixpPTEpOmk9MDtsZXQgcj0tMSxhPTAscz0tMSxvPSEwLGw9ZS5sZW5ndGgtMSx1PTA7Zm9yKDtsPj1pOy0tbCl7Y29uc3QgYz1lLmNoYXJDb2RlQXQobCk7aWYoYz09PXVlKXtpZighbyl7YT1sKzE7YnJlYWt9Y29udGludWV9cz09PS0xJiYobz0hMSxzPWwrMSksYz09PU9lP3I9PT0tMT9yPWw6dSE9PTEmJih1PTEpOnIhPT0tMSYmKHU9LTEpfWlmKHMhPT0tMSl7Y29uc3QgYz1hPT09MCYmbj8xOmE7cj09PS0xfHx1PT09MHx8dT09PTEmJnI9PT1zLTEmJnI9PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGMscyk6KHQubmFtZT1lLnNsaWNlKGMsciksdC5iYXNlPWUuc2xpY2UoYyxzKSx0LmV4dD1lLnNsaWNlKHIscykpfXJldHVybiBhPjA/dC5kaXI9ZS5zbGljZSgwLGEtMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07Z2Uud2luMzI9bWUud2luMzI9bWUsZ2UucG9zaXg9bWUucG9zaXg9Z2UsamU/bWUubm9ybWFsaXplOmdlLm5vcm1hbGl6ZSxqZT9tZS5yZXNvbHZlOmdlLnJlc29sdmUsamU/bWUucmVsYXRpdmU6Z2UucmVsYXRpdmUsamU/bWUuZGlybmFtZTpnZS5kaXJuYW1lLGplP21lLmJhc2VuYW1lOmdlLmJhc2VuYW1lLGplP21lLmV4dG5hbWU6Z2UuZXh0bmFtZSxqZT9tZS5zZXA6Z2Uuc2VwO2NvbnN0IG1vPS9eXHdbXHdcZCsuLV0qJC8sZm89L15cLy8scG89L15cL1wvLztmdW5jdGlvbiBnbyhlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIW1vLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpe2lmKGUuYXV0aG9yaXR5KXtpZighZm8udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYocG8udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1mdW5jdGlvbiBibyhlLHQpe3JldHVybiFlJiYhdD8iZmlsZSI6ZX1mdW5jdGlvbiB2byhlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09TGUmJih0PUxlK3QpOnQ9TGU7YnJlYWt9cmV0dXJuIHR9Y29uc3QgZWU9IiIsTGU9Ii8iLF9vPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2xldCBNbj1jbGFzcyBnbntzdGF0aWMgaXNVcmkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBnbj8hMDp0P3R5cGVvZiB0LmF1dGhvcml0eT09InN0cmluZyImJnR5cGVvZiB0LmZyYWdtZW50PT0ic3RyaW5nIiYmdHlwZW9mIHQucGF0aD09InN0cmluZyImJnR5cGVvZiB0LnF1ZXJ5PT0ic3RyaW5nIiYmdHlwZW9mIHQuc2NoZW1lPT0ic3RyaW5nIiYmdHlwZW9mIHQuZnNQYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHQud2l0aD09ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmc9PSJmdW5jdGlvbiI6ITF9Y29uc3RydWN0b3IodCxuLGkscixhLHM9ITEpe3R5cGVvZiB0PT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9dC5zY2hlbWV8fGVlLHRoaXMuYXV0aG9yaXR5PXQuYXV0aG9yaXR5fHxlZSx0aGlzLnBhdGg9dC5wYXRofHxlZSx0aGlzLnF1ZXJ5PXQucXVlcnl8fGVlLHRoaXMuZnJhZ21lbnQ9dC5mcmFnbWVudHx8ZWUpOih0aGlzLnNjaGVtZT1ibyh0LHMpLHRoaXMuYXV0aG9yaXR5PW58fGVlLHRoaXMucGF0aD12byh0aGlzLnNjaGVtZSxpfHxlZSksdGhpcy5xdWVyeT1yfHxlZSx0aGlzLmZyYWdtZW50PWF8fGVlLGdvKHRoaXMscykpfWdldCBmc1BhdGgoKXtyZXR1cm4gRG4odGhpcywhMSl9d2l0aCh0KXtpZighdClyZXR1cm4gdGhpcztsZXR7c2NoZW1lOm4sYXV0aG9yaXR5OmkscGF0aDpyLHF1ZXJ5OmEsZnJhZ21lbnQ6c309dDtyZXR1cm4gbj09PXZvaWQgMD9uPXRoaXMuc2NoZW1lOm49PT1udWxsJiYobj1lZSksaT09PXZvaWQgMD9pPXRoaXMuYXV0aG9yaXR5Omk9PT1udWxsJiYoaT1lZSkscj09PXZvaWQgMD9yPXRoaXMucGF0aDpyPT09bnVsbCYmKHI9ZWUpLGE9PT12b2lkIDA/YT10aGlzLnF1ZXJ5OmE9PT1udWxsJiYoYT1lZSkscz09PXZvaWQgMD9zPXRoaXMuZnJhZ21lbnQ6cz09PW51bGwmJihzPWVlKSxuPT09dGhpcy5zY2hlbWUmJmk9PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmYT09PXRoaXMucXVlcnkmJnM9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGR0KG4saSxyLGEscyl9c3RhdGljIHBhcnNlKHQsbj0hMSl7Y29uc3QgaT1fby5leGVjKHQpO3JldHVybiBpP25ldyBkdChpWzJdfHxlZSxWdChpWzRdfHxlZSksVnQoaVs1XXx8ZWUpLFZ0KGlbN118fGVlKSxWdChpWzldfHxlZSksbik6bmV3IGR0KGVlLGVlLGVlLGVlLGVlKX1zdGF0aWMgZmlsZSh0KXtsZXQgbj1lZTtpZih4dCYmKHQ9dC5yZXBsYWNlKC9cXC9nLExlKSksdFswXT09PUxlJiZ0WzFdPT09TGUpe2NvbnN0IGk9dC5pbmRleE9mKExlLDIpO2k9PT0tMT8obj10LnN1YnN0cmluZygyKSx0PUxlKToobj10LnN1YnN0cmluZygyLGkpLHQ9dC5zdWJzdHJpbmcoaSl8fExlKX1yZXR1cm4gbmV3IGR0KCJmaWxlIixuLHQsZWUsZWUpfXN0YXRpYyBmcm9tKHQsbil7cmV0dXJuIG5ldyBkdCh0LnNjaGVtZSx0LmF1dGhvcml0eSx0LnBhdGgsdC5xdWVyeSx0LmZyYWdtZW50LG4pfXN0YXRpYyBqb2luUGF0aCh0LC4uLm4pe2lmKCF0LnBhdGgpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBjYW5ub3QgY2FsbCBqb2luUGF0aCBvbiBVUkkgd2l0aG91dCBwYXRoIik7bGV0IGk7cmV0dXJuIHh0JiZ0LnNjaGVtZT09PSJmaWxlIj9pPWduLmZpbGUobWUuam9pbihEbih0LCEwKSwuLi5uKSkucGF0aDppPWdlLmpvaW4odC5wYXRoLC4uLm4pLHQud2l0aCh7cGF0aDppfSl9dG9TdHJpbmcodD0hMSl7cmV0dXJuIE5uKHRoaXMsdCl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZSh0KXt2YXIgbixpO2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBnbilyZXR1cm4gdDt7Y29uc3Qgcj1uZXcgZHQodCk7cmV0dXJuIHIuX2Zvcm1hdHRlZD0obj10LmV4dGVybmFsKSE9PW51bGwmJm4hPT12b2lkIDA/bjpudWxsLHIuX2ZzUGF0aD10Ll9zZXA9PT1DaSYmKGk9dC5mc1BhdGgpIT09bnVsbCYmaSE9PXZvaWQgMD9pOm51bGwscn19ZWxzZSByZXR1cm4gdH19O2NvbnN0IENpPXh0PzE6dm9pZCAwO2NsYXNzIGR0IGV4dGVuZHMgTW57Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Zvcm1hdHRlZD1udWxsLHRoaXMuX2ZzUGF0aD1udWxsfWdldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPURuKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcodD0hMSl7cmV0dXJuIHQ/Tm4odGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1Obih0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCB0PXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJih0LmZzUGF0aD10aGlzLl9mc1BhdGgsdC5fc2VwPUNpKSx0aGlzLl9mb3JtYXR0ZWQmJih0LmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYodC5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJih0LnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJih0LmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKHQucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKHQuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksdH19Y29uc3QgRWk9ezU4OiIlM0EiLDQ3OiIlMkYiLDYzOiIlM0YiLDM1OiIlMjMiLDkxOiIlNUIiLDkzOiIlNUQiLDY0OiIlNDAiLDMzOiIlMjEiLDM2OiIlMjQiLDM4OiIlMjYiLDM5OiIlMjciLDQwOiIlMjgiLDQxOiIlMjkiLDQyOiIlMkEiLDQzOiIlMkIiLDQ0OiIlMkMiLDU5OiIlM0IiLDYxOiIlM0QiLDMyOiIlMjAifTtmdW5jdGlvbiBSaShlLHQsbil7bGV0IGkscj0tMTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7aWYocz49OTcmJnM8PTEyMnx8cz49NjUmJnM8PTkwfHxzPj00OCYmczw9NTd8fHM9PT00NXx8cz09PTQ2fHxzPT09OTV8fHM9PT0xMjZ8fHQmJnM9PT00N3x8biYmcz09PTkxfHxuJiZzPT09OTN8fG4mJnM9PT01OClyIT09LTEmJihpKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixhKSkscj0tMSksaSE9PXZvaWQgMCYmKGkrPWUuY2hhckF0KGEpKTtlbHNle2k9PT12b2lkIDAmJihpPWUuc3Vic3RyKDAsYSkpO2NvbnN0IG89RWlbc107byE9PXZvaWQgMD8ociE9PS0xJiYoaSs9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsYSkpLHI9LTEpLGkrPW8pOnI9PT0tMSYmKHI9YSl9fXJldHVybiByIT09LTEmJihpKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocikpKSxpIT09dm9pZCAwP2k6ZX1mdW5jdGlvbiB3byhlKXtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3QgaT1lLmNoYXJDb2RlQXQobik7aT09PTM1fHxpPT09NjM/KHQ9PT12b2lkIDAmJih0PWUuc3Vic3RyKDAsbikpLHQrPUVpW2ldKTp0IT09dm9pZCAwJiYodCs9ZVtuXSl9cmV0dXJuIHQhPT12b2lkIDA/dDplfWZ1bmN0aW9uIERuKGUsdCl7bGV0IG47cmV0dXJuIGUuYXV0aG9yaXR5JiZlLnBhdGgubGVuZ3RoPjEmJmUuc2NoZW1lPT09ImZpbGUiP249YC8vJHtlLmF1dGhvcml0eX0ke2UucGF0aH1gOmUucGF0aC5jaGFyQ29kZUF0KDApPT09NDcmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmZS5wYXRoLmNoYXJDb2RlQXQoMik9PT01OD90P249ZS5wYXRoLnN1YnN0cigxKTpuPWUucGF0aFsxXS50b0xvd2VyQ2FzZSgpK2UucGF0aC5zdWJzdHIoMik6bj1lLnBhdGgseHQmJihuPW4ucmVwbGFjZSgvXC8vZywiXFwiKSksbn1mdW5jdGlvbiBObihlLHQpe2NvbnN0IG49dD93bzpSaTtsZXQgaT0iIix7c2NoZW1lOnIsYXV0aG9yaXR5OmEscGF0aDpzLHF1ZXJ5Om8sZnJhZ21lbnQ6bH09ZTtpZihyJiYoaSs9cixpKz0iOiIpLChhfHxyPT09ImZpbGUiKSYmKGkrPUxlLGkrPUxlKSxhKXtsZXQgdT1hLmluZGV4T2YoIkAiKTtpZih1IT09LTEpe2NvbnN0IGM9YS5zdWJzdHIoMCx1KTthPWEuc3Vic3RyKHUrMSksdT1jLmxhc3RJbmRleE9mKCI6IiksdT09PS0xP2krPW4oYywhMSwhMSk6KGkrPW4oYy5zdWJzdHIoMCx1KSwhMSwhMSksaSs9IjoiLGkrPW4oYy5zdWJzdHIodSsxKSwhMSwhMCkpLGkrPSJAIn1hPWEudG9Mb3dlckNhc2UoKSx1PWEubGFzdEluZGV4T2YoIjoiKSx1PT09LTE/aSs9bihhLCExLCEwKTooaSs9bihhLnN1YnN0cigwLHUpLCExLCEwKSxpKz1hLnN1YnN0cih1KSl9aWYocyl7aWYocy5sZW5ndGg+PTMmJnMuY2hhckNvZGVBdCgwKT09PTQ3JiZzLmNoYXJDb2RlQXQoMik9PT01OCl7Y29uc3QgdT1zLmNoYXJDb2RlQXQoMSk7dT49NjUmJnU8PTkwJiYocz1gLyR7U3RyaW5nLmZyb21DaGFyQ29kZSh1KzMyKX06JHtzLnN1YnN0cigzKX1gKX1lbHNlIGlmKHMubGVuZ3RoPj0yJiZzLmNoYXJDb2RlQXQoMSk9PT01OCl7Y29uc3QgdT1zLmNoYXJDb2RlQXQoMCk7dT49NjUmJnU8PTkwJiYocz1gJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHUrMzIpfToke3Muc3Vic3RyKDIpfWApfWkrPW4ocywhMCwhMSl9cmV0dXJuIG8mJihpKz0iPyIsaSs9bihvLCExLCExKSksbCYmKGkrPSIjIixpKz10P2w6UmkobCwhMSwhMSkpLGl9ZnVuY3Rpb24gTWkoZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2h7cmV0dXJuIGUubGVuZ3RoPjM/ZS5zdWJzdHIoMCwzKStNaShlLnN1YnN0cigzKSk6ZX19Y29uc3QgRGk9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIGUubWF0Y2goRGkpP2UucmVwbGFjZShEaSx0PT5NaSh0KSk6ZX1sZXQgTmU9Y2xhc3MgaXR7Y29uc3RydWN0b3IodCxuKXt0aGlzLmxpbmVOdW1iZXI9dCx0aGlzLmNvbHVtbj1ufXdpdGgodD10aGlzLmxpbmVOdW1iZXIsbj10aGlzLmNvbHVtbil7cmV0dXJuIHQ9PT10aGlzLmxpbmVOdW1iZXImJm49PT10aGlzLmNvbHVtbj90aGlzOm5ldyBpdCh0LG4pfWRlbHRhKHQ9MCxuPTApe3JldHVybiB0aGlzLndpdGgodGhpcy5saW5lTnVtYmVyK3QsdGhpcy5jb2x1bW4rbil9ZXF1YWxzKHQpe3JldHVybiBpdC5lcXVhbHModGhpcyx0KX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIXQmJiFuPyEwOiEhdCYmISFuJiZ0LmxpbmVOdW1iZXI9PT1uLmxpbmVOdW1iZXImJnQuY29sdW1uPT09bi5jb2x1bW59aXNCZWZvcmUodCl7cmV0dXJuIGl0LmlzQmVmb3JlKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlKHQsbil7cmV0dXJuIHQubGluZU51bWJlcjxuLmxpbmVOdW1iZXI/ITA6bi5saW5lTnVtYmVyPHQubGluZU51bWJlcj8hMTp0LmNvbHVtbjxuLmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwodCl7cmV0dXJuIGl0LmlzQmVmb3JlT3JFcXVhbCh0aGlzLHQpfXN0YXRpYyBpc0JlZm9yZU9yRXF1YWwodCxuKXtyZXR1cm4gdC5saW5lTnVtYmVyPG4ubGluZU51bWJlcj8hMDpuLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyPyExOnQuY29sdW1uPD1uLmNvbHVtbn1zdGF0aWMgY29tcGFyZSh0LG4pe2NvbnN0IGk9dC5saW5lTnVtYmVyfDAscj1uLmxpbmVOdW1iZXJ8MDtpZihpPT09cil7Y29uc3QgYT10LmNvbHVtbnwwLHM9bi5jb2x1bW58MDtyZXR1cm4gYS1zfXJldHVybiBpLXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IGl0KHRoaXMubGluZU51bWJlcix0aGlzLmNvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5saW5lTnVtYmVyKyIsIit0aGlzLmNvbHVtbisiKSJ9c3RhdGljIGxpZnQodCl7cmV0dXJuIG5ldyBpdCh0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBpc0lQb3NpdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIHQubGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LmNvbHVtbj09Im51bWJlciJ9dG9KU09OKCl7cmV0dXJue2xpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmNvbHVtbn19fSxvZT1jbGFzcyByZXtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0Pml8fHQ9PT1pJiZuPnI/KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWksdGhpcy5zdGFydENvbHVtbj1yLHRoaXMuZW5kTGluZU51bWJlcj10LHRoaXMuZW5kQ29sdW1uPW4pOih0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuc3RhcnRDb2x1bW49bix0aGlzLmVuZExpbmVOdW1iZXI9aSx0aGlzLmVuZENvbHVtbj1yKX1pc0VtcHR5KCl7cmV0dXJuIHJlLmlzRW1wdHkodGhpcyl9c3RhdGljIGlzRW1wdHkodCl7cmV0dXJuIHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW59Y29udGFpbnNQb3NpdGlvbih0KXtyZXR1cm4gcmUuY29udGFpbnNQb3NpdGlvbih0aGlzLHQpfXN0YXRpYyBjb250YWluc1Bvc2l0aW9uKHQsbil7cmV0dXJuIShuLmxpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmNvbHVtbjx0LnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uY29sdW1uPnQuZW5kQ29sdW1uKX1zdGF0aWMgc3RyaWN0Q29udGFpbnNQb3NpdGlvbih0LG4pe3JldHVybiEobi5saW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5jb2x1bW48PXQuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5jb2x1bW4+PXQuZW5kQ29sdW1uKX1jb250YWluc1JhbmdlKHQpe3JldHVybiByZS5jb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjx0LnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPnQuZW5kQ29sdW1uKX1zdHJpY3RDb250YWluc1JhbmdlKHQpe3JldHVybiByZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjw9dC5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbj49dC5lbmRDb2x1bW4pfXBsdXNSYW5nZSh0KXtyZXR1cm4gcmUucGx1c1JhbmdlKHRoaXMsdCl9c3RhdGljIHBsdXNSYW5nZSh0LG4pe2xldCBpLHIsYSxzO3JldHVybiBuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcj8oaT1uLnN0YXJ0TGluZU51bWJlcixyPW4uc3RhcnRDb2x1bW4pOm4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/KGk9bi5zdGFydExpbmVOdW1iZXIscj1NYXRoLm1pbihuLnN0YXJ0Q29sdW1uLHQuc3RhcnRDb2x1bW4pKTooaT10LnN0YXJ0TGluZU51bWJlcixyPXQuc3RhcnRDb2x1bW4pLG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXI/KGE9bi5lbmRMaW5lTnVtYmVyLHM9bi5lbmRDb2x1bW4pOm4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj8oYT1uLmVuZExpbmVOdW1iZXIscz1NYXRoLm1heChuLmVuZENvbHVtbix0LmVuZENvbHVtbikpOihhPXQuZW5kTGluZU51bWJlcixzPXQuZW5kQ29sdW1uKSxuZXcgcmUoaSxyLGEscyl9aW50ZXJzZWN0UmFuZ2VzKHQpe3JldHVybiByZS5pbnRlcnNlY3RSYW5nZXModGhpcyx0KX1zdGF0aWMgaW50ZXJzZWN0UmFuZ2VzKHQsbil7bGV0IGk9dC5zdGFydExpbmVOdW1iZXIscj10LnN0YXJ0Q29sdW1uLGE9dC5lbmRMaW5lTnVtYmVyLHM9dC5lbmRDb2x1bW47Y29uc3Qgbz1uLnN0YXJ0TGluZU51bWJlcixsPW4uc3RhcnRDb2x1bW4sdT1uLmVuZExpbmVOdW1iZXIsYz1uLmVuZENvbHVtbjtyZXR1cm4gaTxvPyhpPW8scj1sKTppPT09byYmKHI9TWF0aC5tYXgocixsKSksYT51PyhhPXUscz1jKTphPT09dSYmKHM9TWF0aC5taW4ocyxjKSksaT5hfHxpPT09YSYmcj5zP251bGw6bmV3IHJlKGkscixhLHMpfWVxdWFsc1JhbmdlKHQpe3JldHVybiByZS5lcXVhbHNSYW5nZSh0aGlzLHQpfXN0YXRpYyBlcXVhbHNSYW5nZSh0LG4pe3JldHVybiF0JiYhbj8hMDohIXQmJiEhbiYmdC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbj09PW4uc3RhcnRDb2x1bW4mJnQuZW5kTGluZU51bWJlcj09PW4uZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW49PT1uLmVuZENvbHVtbn1nZXRFbmRQb3NpdGlvbigpe3JldHVybiByZS5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24odCl7cmV0dXJuIG5ldyBOZSh0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pfWdldFN0YXJ0UG9zaXRpb24oKXtyZXR1cm4gcmUuZ2V0U3RhcnRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0U3RhcnRQb3NpdGlvbih0KXtyZXR1cm4gbmV3IE5lKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLmVuZExpbmVOdW1iZXIrIiwiK3RoaXMuZW5kQ29sdW1uKyJdIn1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgcmUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbix0LG4pfXNldFN0YXJ0UG9zaXRpb24odCxuKXtyZXR1cm4gbmV3IHJlKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiByZS5jb2xsYXBzZVRvU3RhcnQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9TdGFydCh0KXtyZXR1cm4gbmV3IHJlKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9Y29sbGFwc2VUb0VuZCgpe3JldHVybiByZS5jb2xsYXBzZVRvRW5kKHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvRW5kKHQpe3JldHVybiBuZXcgcmUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9ZGVsdGEodCl7cmV0dXJuIG5ldyByZSh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuc3RhcnRDb2x1bW4sdGhpcy5lbmRMaW5lTnVtYmVyK3QsdGhpcy5lbmRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IHJlKHQubGluZU51bWJlcix0LmNvbHVtbixuLmxpbmVOdW1iZXIsbi5jb2x1bW4pfXN0YXRpYyBsaWZ0KHQpe3JldHVybiB0P25ldyByZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UodCl7cmV0dXJuIHQmJnR5cGVvZiB0LnN0YXJ0TGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnN0YXJ0Q29sdW1uPT0ibnVtYmVyIiYmdHlwZW9mIHQuZW5kTGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LmVuZENvbHVtbj09Im51bWJlciJ9c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPG4uc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPD1uLnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyh0LG4pe2lmKHQmJm4pe2NvbnN0IGE9dC5zdGFydExpbmVOdW1iZXJ8MCxzPW4uc3RhcnRMaW5lTnVtYmVyfDA7aWYoYT09PXMpe2NvbnN0IG89dC5zdGFydENvbHVtbnwwLGw9bi5zdGFydENvbHVtbnwwO2lmKG89PT1sKXtjb25zdCB1PXQuZW5kTGluZU51bWJlcnwwLGM9bi5lbmRMaW5lTnVtYmVyfDA7aWYodT09PWMpe2NvbnN0IGQ9dC5lbmRDb2x1bW58MCxtPW4uZW5kQ29sdW1ufDA7cmV0dXJuIGQtbX1yZXR1cm4gdS1jfXJldHVybiBvLWx9cmV0dXJuIGEtc31yZXR1cm4odD8xOjApLShuPzE6MCl9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ0VuZHModCxuKXtyZXR1cm4gdC5lbmRMaW5lTnVtYmVyPT09bi5lbmRMaW5lTnVtYmVyP3QuZW5kQ29sdW1uPT09bi5lbmRDb2x1bW4/dC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlcj90LnN0YXJ0Q29sdW1uLW4uc3RhcnRDb2x1bW46dC5zdGFydExpbmVOdW1iZXItbi5zdGFydExpbmVOdW1iZXI6dC5lbmRDb2x1bW4tbi5lbmRDb2x1bW46dC5lbmRMaW5lTnVtYmVyLW4uZW5kTGluZU51bWJlcn1zdGF0aWMgc3BhbnNNdWx0aXBsZUxpbmVzKHQpe3JldHVybiB0LmVuZExpbmVOdW1iZXI+dC5zdGFydExpbmVOdW1iZXJ9dG9KU09OKCl7cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiB5byhlLHQsbj0oaSxyKT0+aT09PXIpe2lmKGU9PT10KXJldHVybiEwO2lmKCFlfHwhdHx8ZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspaWYoIW4oZVtpXSx0W2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbip4byhlLHQpe2xldCBuLGk7Zm9yKGNvbnN0IHIgb2YgZSlpIT09dm9pZCAwJiZ0KGkscik/bi5wdXNoKHIpOihuJiYoeWllbGQgbiksbj1bcl0pLGk9cjtuJiYoeWllbGQgbil9ZnVuY3Rpb24gVG8oZSx0KXtmb3IobGV0IG49MDtuPD1lLmxlbmd0aDtuKyspdChuPT09MD92b2lkIDA6ZVtuLTFdLG49PT1lLmxlbmd0aD92b2lkIDA6ZVtuXSl9ZnVuY3Rpb24ga28oZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0KG49PT0wP3ZvaWQgMDplW24tMV0sZVtuXSxuKzE9PT1lLmxlbmd0aD92b2lkIDA6ZVtuKzFdKX1mdW5jdGlvbiBBbyhlLHQpe2Zvcihjb25zdCBuIG9mIHQpZS5wdXNoKG4pfXZhciBOaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChhKXtyZXR1cm4gYTwwfWUuaXNMZXNzVGhhbj10O2Z1bmN0aW9uIG4oYSl7cmV0dXJuIGE8PTB9ZS5pc0xlc3NUaGFuT3JFcXVhbD1uO2Z1bmN0aW9uIGkoYSl7cmV0dXJuIGE+MH1lLmlzR3JlYXRlclRoYW49aTtmdW5jdGlvbiByKGEpe3JldHVybiBhPT09MH1lLmlzTmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPXIsZS5ncmVhdGVyVGhhbj0xLGUubGVzc1RoYW49LTEsZS5uZWl0aGVyTGVzc09yR3JlYXRlclRoYW49MH0pKE5pfHwoTmk9e30pKTtmdW5jdGlvbiBqdChlLHQpe3JldHVybihuLGkpPT50KGUobiksZShpKSl9Y29uc3QgR3Q9KGUsdCk9PmUtdDtmdW5jdGlvbiBTbyhlKXtyZXR1cm4odCxuKT0+LWUodCxuKX1mdW5jdGlvbiBJaShlKXtyZXR1cm4gZTwwPzA6ZT4yNTU/MjU1OmV8MH1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZTwwPzA6ZT40Mjk0OTY3Mjk1PzQyOTQ5NjcyOTU6ZXwwfWNsYXNzIExve2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWVzPXQsdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHQubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXg9bmV3IEludDMyQXJyYXkoMSksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPS0xfWluc2VydFZhbHVlcyh0LG4pe3Q9bXQodCk7Y29uc3QgaT10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtLGE9bi5sZW5ndGg7cmV0dXJuIGE9PT0wPyExOih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkoaS5sZW5ndGgrYSksdGhpcy52YWx1ZXMuc2V0KGkuc3ViYXJyYXkoMCx0KSwwKSx0aGlzLnZhbHVlcy5zZXQoaS5zdWJhcnJheSh0KSx0K2EpLHRoaXMudmFsdWVzLnNldChuLHQpLHQtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09dC0xKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9c2V0VmFsdWUodCxuKXtyZXR1cm4gdD1tdCh0KSxuPW10KG4pLHRoaXMudmFsdWVzW3RdPT09bj8hMToodGhpcy52YWx1ZXNbdF09bix0LTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPXQtMSksITApfXJlbW92ZVZhbHVlcyh0LG4pe3Q9bXQodCksbj1tdChuKTtjb25zdCBpPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW07aWYodD49aS5sZW5ndGgpcmV0dXJuITE7Y29uc3QgYT1pLmxlbmd0aC10O3JldHVybiBuPj1hJiYobj1hKSxuPT09MD8hMToodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KGkubGVuZ3RoLW4pLHRoaXMudmFsdWVzLnNldChpLnN1YmFycmF5KDAsdCksMCksdGhpcy52YWx1ZXMuc2V0KGkuc3ViYXJyYXkodCtuKSx0KSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSx0LTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPXQtMSksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoci5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfWdldFRvdGFsU3VtKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aD09PTA/MDp0aGlzLl9nZXRQcmVmaXhTdW0odGhpcy52YWx1ZXMubGVuZ3RoLTEpfWdldFByZWZpeFN1bSh0KXtyZXR1cm4gdDwwPzA6KHQ9bXQodCksdGhpcy5fZ2V0UHJlZml4U3VtKHQpKX1fZ2V0UHJlZml4U3VtKHQpe2lmKHQ8PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSlyZXR1cm4gdGhpcy5wcmVmaXhTdW1bdF07bGV0IG49dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzE7bj09PTAmJih0aGlzLnByZWZpeFN1bVswXT10aGlzLnZhbHVlc1swXSxuKyspLHQ+PXRoaXMudmFsdWVzLmxlbmd0aCYmKHQ9dGhpcy52YWx1ZXMubGVuZ3RoLTEpO2ZvcihsZXQgaT1uO2k8PXQ7aSsrKXRoaXMucHJlZml4U3VtW2ldPXRoaXMucHJlZml4U3VtW2ktMV0rdGhpcy52YWx1ZXNbaV07cmV0dXJuIHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1NYXRoLm1heCh0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0sdCksdGhpcy5wcmVmaXhTdW1bdF19Z2V0SW5kZXhPZih0KXt0PU1hdGguZmxvb3IodCksdGhpcy5nZXRUb3RhbFN1bSgpO2xldCBuPTAsaT10aGlzLnZhbHVlcy5sZW5ndGgtMSxyPTAsYT0wLHM9MDtmb3IoO248PWk7KWlmKHI9bisoaS1uKS8yfDAsYT10aGlzLnByZWZpeFN1bVtyXSxzPWEtdGhpcy52YWx1ZXNbcl0sdDxzKWk9ci0xO2Vsc2UgaWYodD49YSluPXIrMTtlbHNlIGJyZWFrO3JldHVybiBuZXcgQ28ocix0LXMpfX1jbGFzcyBDb3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaW5kZXg9dCx0aGlzLnJlbWFpbmRlcj1uLHRoaXMuX3ByZWZpeFN1bUluZGV4T2ZSZXN1bHRCcmFuZD12b2lkIDAsdGhpcy5pbmRleD10LHRoaXMucmVtYWluZGVyPW59fWNsYXNzIEVve2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMuX3VyaT10LHRoaXMuX2xpbmVzPW4sdGhpcy5fZW9sPWksdGhpcy5fdmVyc2lvbklkPXIsdGhpcy5fbGluZVN0YXJ0cz1udWxsLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9saW5lcy5sZW5ndGg9MH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9uSWR9Z2V0VGV4dCgpe3JldHVybiB0aGlzLl9jYWNoZWRUZXh0VmFsdWU9PT1udWxsJiYodGhpcy5fY2FjaGVkVGV4dFZhbHVlPXRoaXMuX2xpbmVzLmpvaW4odGhpcy5fZW9sKSksdGhpcy5fY2FjaGVkVGV4dFZhbHVlfW9uRXZlbnRzKHQpe3QuZW9sJiZ0LmVvbCE9PXRoaXMuX2VvbCYmKHRoaXMuX2VvbD10LmVvbCx0aGlzLl9saW5lU3RhcnRzPW51bGwpO2NvbnN0IG49dC5jaGFuZ2VzO2Zvcihjb25zdCBpIG9mIG4pdGhpcy5fYWNjZXB0RGVsZXRlUmFuZ2UoaS5yYW5nZSksdGhpcy5fYWNjZXB0SW5zZXJ0VGV4dChuZXcgTmUoaS5yYW5nZS5zdGFydExpbmVOdW1iZXIsaS5yYW5nZS5zdGFydENvbHVtbiksaS50ZXh0KTt0aGlzLl92ZXJzaW9uSWQ9dC52ZXJzaW9uSWQsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9X2Vuc3VyZUxpbmVTdGFydHMoKXtpZighdGhpcy5fbGluZVN0YXJ0cyl7Y29uc3QgdD10aGlzLl9lb2wubGVuZ3RoLG49dGhpcy5fbGluZXMubGVuZ3RoLGk9bmV3IFVpbnQzMkFycmF5KG4pO2ZvcihsZXQgcj0wO3I8bjtyKyspaVtyXT10aGlzLl9saW5lc1tyXS5sZW5ndGgrdDt0aGlzLl9saW5lU3RhcnRzPW5ldyBMbyhpKX19X3NldExpbmVUZXh0KHQsbil7dGhpcy5fbGluZXNbdF09bix0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnNldFZhbHVlKHQsdGhpcy5fbGluZXNbdF0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGgpfV9hY2NlcHREZWxldGVSYW5nZSh0KXtpZih0LnN0YXJ0TGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcil7aWYodC5zdGFydENvbHVtbj09PXQuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dCh0LnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuZW5kQ29sdW1uLTEpKTtyZXR1cm59dGhpcy5fc2V0TGluZVRleHQodC5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW3QuZW5kTGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5lbmRDb2x1bW4tMSkpLHRoaXMuX2xpbmVzLnNwbGljZSh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXIpLHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMucmVtb3ZlVmFsdWVzKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlcil9X2FjY2VwdEluc2VydFRleHQodCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IGk9RnMobik7aWYoaS5sZW5ndGg9PT0xKXt0aGlzLl9zZXRMaW5lVGV4dCh0LmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5jb2x1bW4tMSkraVswXSt0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuY29sdW1uLTEpKTtyZXR1cm59aVtpLmxlbmd0aC0xXSs9dGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSx0aGlzLl9zZXRMaW5lVGV4dCh0LmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5jb2x1bW4tMSkraVswXSk7Y29uc3Qgcj1uZXcgVWludDMyQXJyYXkoaS5sZW5ndGgtMSk7Zm9yKGxldCBhPTE7YTxpLmxlbmd0aDthKyspdGhpcy5fbGluZXMuc3BsaWNlKHQubGluZU51bWJlcithLTEsMCxpW2FdKSxyW2EtMV09aVthXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aDt0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLmluc2VydFZhbHVlcyh0LmxpbmVOdW1iZXIscil9fWNvbnN0IFJvPSJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iO2Z1bmN0aW9uIE1vKGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgbiBvZiBSbyllLmluZGV4T2Yobik+PTB8fCh0Kz0iXFwiK24pO3JldHVybiB0Kz0iXFxzXSspIixuZXcgUmVnRXhwKHQsImciKX1jb25zdCB6aT1NbygpO2Z1bmN0aW9uIEhpKGUpe2xldCB0PXppO2lmKGUmJmUgaW5zdGFuY2VvZiBSZWdFeHApaWYoZS5nbG9iYWwpdD1lO2Vsc2V7bGV0IG49ImciO2UuaWdub3JlQ2FzZSYmKG4rPSJpIiksZS5tdWx0aWxpbmUmJihuKz0ibSIpLGUudW5pY29kZSYmKG4rPSJ1IiksdD1uZXcgUmVnRXhwKGUuc291cmNlLG4pfXJldHVybiB0Lmxhc3RJbmRleD0wLHR9Y29uc3QgVWk9bmV3IHlzO1VpLnVuc2hpZnQoe21heExlbjoxZTMsd2luZG93U2l6ZToxNSx0aW1lQnVkZ2V0OjE1MH0pO2Z1bmN0aW9uIEluKGUsdCxuLGkscil7aWYodD1IaSh0KSxyfHwocj1XdC5maXJzdChVaSkpLG4ubGVuZ3RoPnIubWF4TGVuKXtsZXQgdT1lLXIubWF4TGVuLzI7cmV0dXJuIHU8MD91PTA6aSs9dSxuPW4uc3Vic3RyaW5nKHUsZStyLm1heExlbi8yKSxJbihlLHQsbixpLHIpfWNvbnN0IGE9RGF0ZS5ub3coKSxzPWUtMS1pO2xldCBvPS0xLGw9bnVsbDtmb3IobGV0IHU9MTshKERhdGUubm93KCktYT49ci50aW1lQnVkZ2V0KTt1Kyspe2NvbnN0IGM9cy1yLndpbmRvd1NpemUqdTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLGMpO2NvbnN0IGQ9RG8odCxuLHMsbyk7aWYoIWQmJmx8fChsPWQsYzw9MCkpYnJlYWs7bz1jfWlmKGwpe2NvbnN0IHU9e3dvcmQ6bFswXSxzdGFydENvbHVtbjppKzErbC5pbmRleCxlbmRDb2x1bW46aSsxK2wuaW5kZXgrbFswXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLHV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRG8oZSx0LG4saSl7bGV0IHI7Zm9yKDtyPWUuZXhlYyh0KTspe2NvbnN0IGE9ci5pbmRleHx8MDtpZihhPD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gcjtpZihpPjAmJmE+aSlyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH1jbGFzcyB6bntjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPUlpKHQpO3RoaXMuX2RlZmF1bHRWYWx1ZT1uLHRoaXMuX2FzY2lpTWFwPXpuLl9jcmVhdGVBc2NpaU1hcChuKSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKHQpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMjU2KTtyZXR1cm4gbi5maWxsKHQpLG59c2V0KHQsbil7Y29uc3QgaT1JaShuKTt0Pj0wJiZ0PDI1Nj90aGlzLl9hc2NpaU1hcFt0XT1pOnRoaXMuX21hcC5zZXQodCxpKX1nZXQodCl7cmV0dXJuIHQ+PTAmJnQ8MjU2P3RoaXMuX2FzY2lpTWFwW3RdOnRoaXMuX21hcC5nZXQodCl8fHRoaXMuX2RlZmF1bHRWYWx1ZX1jbGVhcigpe3RoaXMuX2FzY2lpTWFwLmZpbGwodGhpcy5fZGVmYXVsdFZhbHVlKSx0aGlzLl9tYXAuY2xlYXIoKX19Y2xhc3MgTm97Y29uc3RydWN0b3IodCxuLGkpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkodCpuKTtmb3IobGV0IGE9MCxzPXQqbjthPHM7YSsrKXJbYV09aTt0aGlzLl9kYXRhPXIsdGhpcy5yb3dzPXQsdGhpcy5jb2xzPW59Z2V0KHQsbil7cmV0dXJuIHRoaXMuX2RhdGFbdCp0aGlzLmNvbHMrbl19c2V0KHQsbixpKXt0aGlzLl9kYXRhW3QqdGhpcy5jb2xzK25dPWl9fWNsYXNzIElve2NvbnN0cnVjdG9yKHQpe2xldCBuPTAsaT0wO2ZvcihsZXQgYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7Y29uc3RbbyxsLHVdPXRbYV07bD5uJiYobj1sKSxvPmkmJihpPW8pLHU+aSYmKGk9dSl9bisrLGkrKztjb25zdCByPW5ldyBObyhpLG4sMCk7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtjb25zdFtvLGwsdV09dFthXTtyLnNldChvLGwsdSl9dGhpcy5fc3RhdGVzPXIsdGhpcy5fbWF4Q2hhckNvZGU9bn1uZXh0U3RhdGUodCxuKXtyZXR1cm4gbjwwfHxuPj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQodCxuKX19bGV0IEhuPW51bGw7ZnVuY3Rpb24gem8oKXtyZXR1cm4gSG49PT1udWxsJiYoSG49bmV3IElvKFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pKSxIbn1sZXQgVHQ9bnVsbDtmdW5jdGlvbiBIbygpe2lmKFR0PT09bnVsbCl7VHQ9bmV3IHpuKDApO2NvbnN0IGU9YCAJPD4nIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApmA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspVHQuc2V0KGUuY2hhckNvZGVBdChuKSwxKTtjb25zdCB0PSIuLDs6Ijtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylUdC5zZXQodC5jaGFyQ29kZUF0KG4pLDIpfXJldHVybiBUdH1jbGFzcyAkdHtzdGF0aWMgX2NyZWF0ZUxpbmsodCxuLGkscixhKXtsZXQgcz1hLTE7ZG97Y29uc3Qgbz1uLmNoYXJDb2RlQXQocyk7aWYodC5nZXQobykhPT0yKWJyZWFrO3MtLX13aGlsZShzPnIpO2lmKHI+MCl7Y29uc3Qgbz1uLmNoYXJDb2RlQXQoci0xKSxsPW4uY2hhckNvZGVBdChzKTsobz09PTQwJiZsPT09NDF8fG89PT05MSYmbD09PTkzfHxvPT09MTIzJiZsPT09MTI1KSYmcy0tfXJldHVybntyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOmksc3RhcnRDb2x1bW46cisxLGVuZExpbmVOdW1iZXI6aSxlbmRDb2x1bW46cysyfSx1cmw6bi5zdWJzdHJpbmcocixzKzEpfX1zdGF0aWMgY29tcHV0ZUxpbmtzKHQsbj16bygpKXtjb25zdCBpPUhvKCkscj1bXTtmb3IobGV0IGE9MSxzPXQuZ2V0TGluZUNvdW50KCk7YTw9czthKyspe2NvbnN0IG89dC5nZXRMaW5lQ29udGVudChhKSxsPW8ubGVuZ3RoO2xldCB1PTAsYz0wLGQ9MCxtPTEsZj0hMSxiPSExLHA9ITEsdz0hMTtmb3IoO3U8bDspe2xldCB4PSExO2NvbnN0IF89by5jaGFyQ29kZUF0KHUpO2lmKG09PT0xMyl7bGV0IHk7c3dpdGNoKF8pe2Nhc2UgNDA6Zj0hMCx5PTA7YnJlYWs7Y2FzZSA0MTp5PWY/MDoxO2JyZWFrO2Nhc2UgOTE6cD0hMCxiPSEwLHk9MDticmVhaztjYXNlIDkzOnA9ITEseT1iPzA6MTticmVhaztjYXNlIDEyMzp3PSEwLHk9MDticmVhaztjYXNlIDEyNTp5PXc/MDoxO2JyZWFrO2Nhc2UgMzk6Y2FzZSAzNDpjYXNlIDk2OmQ9PT1fP3k9MTpkPT09Mzl8fGQ9PT0zNHx8ZD09PTk2P3k9MDp5PTE7YnJlYWs7Y2FzZSA0Mjp5PWQ9PT00Mj8xOjA7YnJlYWs7Y2FzZSAxMjQ6eT1kPT09MTI0PzE6MDticmVhaztjYXNlIDMyOnk9cD8wOjE7YnJlYWs7ZGVmYXVsdDp5PWkuZ2V0KF8pfXk9PT0xJiYoci5wdXNoKCR0Ll9jcmVhdGVMaW5rKGksbyxhLGMsdSkpLHg9ITApfWVsc2UgaWYobT09PTEyKXtsZXQgeTtfPT09OTE/KGI9ITAseT0wKTp5PWkuZ2V0KF8pLHk9PT0xP3g9ITA6bT0xM31lbHNlIG09bi5uZXh0U3RhdGUobSxfKSxtPT09MCYmKHg9ITApO3gmJihtPTEsZj0hMSxiPSExLHc9ITEsYz11KzEsZD1fKSx1Kyt9bT09PTEzJiZyLnB1c2goJHQuX2NyZWF0ZUxpbmsoaSxvLGEsYyxsKSl9cmV0dXJuIHJ9fWZ1bmN0aW9uIFVvKGUpe3JldHVybiFlfHx0eXBlb2YgZS5nZXRMaW5lQ291bnQhPSJmdW5jdGlvbiJ8fHR5cGVvZiBlLmdldExpbmVDb250ZW50IT0iZnVuY3Rpb24iP1tdOiR0LmNvbXB1dGVMaW5rcyhlKX1jbGFzcyBVbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWYWx1ZVNldD1bWyJ0cnVlIiwiZmFsc2UiXSxbIlRydWUiLCJGYWxzZSJdLFsiUHJpdmF0ZSIsIlB1YmxpYyIsIkZyaWVuZCIsIlJlYWRPbmx5IiwiUGFydGlhbCIsIlByb3RlY3RlZCIsIldyaXRlT25seSJdLFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdXX1uYXZpZ2F0ZVZhbHVlU2V0KHQsbixpLHIsYSl7aWYodCYmbil7Y29uc3Qgcz10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChuLGEpO2lmKHMpcmV0dXJue3JhbmdlOnQsdmFsdWU6c319aWYoaSYmcil7Y29uc3Qgcz10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChyLGEpO2lmKHMpcmV0dXJue3JhbmdlOmksdmFsdWU6c319cmV0dXJuIG51bGx9ZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsbil7Y29uc3QgaT10aGlzLm51bWJlclJlcGxhY2UodCxuKTtyZXR1cm4gaSE9PW51bGw/aTp0aGlzLnRleHRSZXBsYWNlKHQsbil9bnVtYmVyUmVwbGFjZSh0LG4pe2NvbnN0IGk9TWF0aC5wb3coMTAsdC5sZW5ndGgtKHQubGFzdEluZGV4T2YoIi4iKSsxKSk7bGV0IHI9TnVtYmVyKHQpO2NvbnN0IGE9cGFyc2VGbG9hdCh0KTtyZXR1cm4haXNOYU4ocikmJiFpc05hTihhKSYmcj09PWE/cj09PTAmJiFuP251bGw6KHI9TWF0aC5mbG9vcihyKmkpLHIrPW4/aTotaSxTdHJpbmcoci9pKSk6bnVsbH10ZXh0UmVwbGFjZSh0LG4pe3JldHVybiB0aGlzLnZhbHVlU2V0c1JlcGxhY2UodGhpcy5fZGVmYXVsdFZhbHVlU2V0LHQsbil9dmFsdWVTZXRzUmVwbGFjZSh0LG4saSl7bGV0IHI9bnVsbDtmb3IobGV0IGE9MCxzPXQubGVuZ3RoO3I9PT1udWxsJiZhPHM7YSsrKXI9dGhpcy52YWx1ZVNldFJlcGxhY2UodFthXSxuLGkpO3JldHVybiByfXZhbHVlU2V0UmVwbGFjZSh0LG4saSl7bGV0IHI9dC5pbmRleE9mKG4pO3JldHVybiByPj0wPyhyKz1pPzE6LTEscjwwP3I9dC5sZW5ndGgtMTpyJT10Lmxlbmd0aCx0W3JdKTpudWxsfX1Vbi5JTlNUQU5DRT1uZXcgVW47Y29uc3QgV2k9T2JqZWN0LmZyZWV6ZShmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pO3ZhciBYdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4gbj09PWUuTm9uZXx8bj09PWUuQ2FuY2VsbGVkfHxuIGluc3RhbmNlb2YgSnQ/ITA6IW58fHR5cGVvZiBuIT0ib2JqZWN0Ij8hMTp0eXBlb2Ygbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZD09ImJvb2xlYW4iJiZ0eXBlb2Ygbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZD09ImZ1bmN0aW9uIn1lLmlzQ2FuY2VsbGF0aW9uVG9rZW49dCxlLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6dm4uTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOldpfSl9KShYdHx8KFh0PXt9KSk7Y2xhc3MgSnR7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP1dpOih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgQWUpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj1udWxsKX19Y2xhc3MgV297Y29uc3RydWN0b3IodCl7dGhpcy5fdG9rZW49dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj10JiZ0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKHRoaXMuY2FuY2VsLHRoaXMpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyBKdCksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBKdCYmdGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49WHQuQ2FuY2VsbGVkfWRpc3Bvc2UodD0hMSl7dmFyIG47dCYmdGhpcy5jYW5jZWwoKSwobj10aGlzLl9wYXJlbnRMaXN0ZW5lcik9PT1udWxsfHxuPT09dm9pZCAwfHxuLmRpc3Bvc2UoKSx0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIEp0JiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49WHQuTm9uZX19Y2xhc3MgV257Y29uc3RydWN0b3IoKXt0aGlzLl9rZXlDb2RlVG9TdHI9W10sdGhpcy5fc3RyVG9LZXlDb2RlPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVmaW5lKHQsbil7dGhpcy5fa2V5Q29kZVRvU3RyW3RdPW4sdGhpcy5fc3RyVG9LZXlDb2RlW24udG9Mb3dlckNhc2UoKV09dH1rZXlDb2RlVG9TdHIodCl7cmV0dXJuIHRoaXMuX2tleUNvZGVUb1N0clt0XX1zdHJUb0tleUNvZGUodCl7cmV0dXJuIHRoaXMuX3N0clRvS2V5Q29kZVt0LnRvTG93ZXJDYXNlKCldfHwwfX1jb25zdCBRdD1uZXcgV24sRm49bmV3IFduLFBuPW5ldyBXbixGbz1uZXcgQXJyYXkoMjMwKSxQbz1PYmplY3QuY3JlYXRlKG51bGwpLEJvPU9iamVjdC5jcmVhdGUobnVsbCk7KGZ1bmN0aW9uKCl7Y29uc3QgZT0iIix0PVtbMSwwLCJOb25lIiwwLCJ1bmtub3duIiwwLCJWS19VTktOT1dOIixlLGVdLFsxLDEsIkh5cGVyIiwwLGUsMCxlLGUsZV0sWzEsMiwiU3VwZXIiLDAsZSwwLGUsZSxlXSxbMSwzLCJGbiIsMCxlLDAsZSxlLGVdLFsxLDQsIkZuTG9jayIsMCxlLDAsZSxlLGVdLFsxLDUsIlN1c3BlbmQiLDAsZSwwLGUsZSxlXSxbMSw2LCJSZXN1bWUiLDAsZSwwLGUsZSxlXSxbMSw3LCJUdXJibyIsMCxlLDAsZSxlLGVdLFsxLDgsIlNsZWVwIiwwLGUsMCwiVktfU0xFRVAiLGUsZV0sWzEsOSwiV2FrZVVwIiwwLGUsMCxlLGUsZV0sWzAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsZSxlXSxbMCwxMSwiS2V5QiIsMzIsIkIiLDY2LCJWS19CIixlLGVdLFswLDEyLCJLZXlDIiwzMywiQyIsNjcsIlZLX0MiLGUsZV0sWzAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsZSxlXSxbMCwxNCwiS2V5RSIsMzUsIkUiLDY5LCJWS19FIixlLGVdLFswLDE1LCJLZXlGIiwzNiwiRiIsNzAsIlZLX0YiLGUsZV0sWzAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsZSxlXSxbMCwxNywiS2V5SCIsMzgsIkgiLDcyLCJWS19IIixlLGVdLFswLDE4LCJLZXlJIiwzOSwiSSIsNzMsIlZLX0kiLGUsZV0sWzAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsZSxlXSxbMCwyMCwiS2V5SyIsNDEsIksiLDc1LCJWS19LIixlLGVdLFswLDIxLCJLZXlMIiw0MiwiTCIsNzYsIlZLX0wiLGUsZV0sWzAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsZSxlXSxbMCwyMywiS2V5TiIsNDQsIk4iLDc4LCJWS19OIixlLGVdLFswLDI0LCJLZXlPIiw0NSwiTyIsNzksIlZLX08iLGUsZV0sWzAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsZSxlXSxbMCwyNiwiS2V5USIsNDcsIlEiLDgxLCJWS19RIixlLGVdLFswLDI3LCJLZXlSIiw0OCwiUiIsODIsIlZLX1IiLGUsZV0sWzAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsZSxlXSxbMCwyOSwiS2V5VCIsNTAsIlQiLDg0LCJWS19UIixlLGVdLFswLDMwLCJLZXlVIiw1MSwiVSIsODUsIlZLX1UiLGUsZV0sWzAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsZSxlXSxbMCwzMiwiS2V5VyIsNTMsIlciLDg3LCJWS19XIixlLGVdLFswLDMzLCJLZXlYIiw1NCwiWCIsODgsIlZLX1giLGUsZV0sWzAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsZSxlXSxbMCwzNSwiS2V5WiIsNTYsIloiLDkwLCJWS19aIixlLGVdLFswLDM2LCJEaWdpdDEiLDIyLCIxIiw0OSwiVktfMSIsZSxlXSxbMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLGUsZV0sWzAsMzgsIkRpZ2l0MyIsMjQsIjMiLDUxLCJWS18zIixlLGVdLFswLDM5LCJEaWdpdDQiLDI1LCI0Iiw1MiwiVktfNCIsZSxlXSxbMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLGUsZV0sWzAsNDEsIkRpZ2l0NiIsMjcsIjYiLDU0LCJWS182IixlLGVdLFswLDQyLCJEaWdpdDciLDI4LCI3Iiw1NSwiVktfNyIsZSxlXSxbMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLGUsZV0sWzAsNDQsIkRpZ2l0OSIsMzAsIjkiLDU3LCJWS185IixlLGVdLFswLDQ1LCJEaWdpdDAiLDIxLCIwIiw0OCwiVktfMCIsZSxlXSxbMSw0NiwiRW50ZXIiLDMsIkVudGVyIiwxMywiVktfUkVUVVJOIixlLGVdLFsxLDQ3LCJFc2NhcGUiLDksIkVzY2FwZSIsMjcsIlZLX0VTQ0FQRSIsZSxlXSxbMSw0OCwiQmFja3NwYWNlIiwxLCJCYWNrc3BhY2UiLDgsIlZLX0JBQ0siLGUsZV0sWzEsNDksIlRhYiIsMiwiVGFiIiw5LCJWS19UQUIiLGUsZV0sWzEsNTAsIlNwYWNlIiwxMCwiU3BhY2UiLDMyLCJWS19TUEFDRSIsZSxlXSxbMCw1MSwiTWludXMiLDg4LCItIiwxODksIlZLX09FTV9NSU5VUyIsIi0iLCJPRU1fTUlOVVMiXSxbMCw1MiwiRXF1YWwiLDg2LCI9IiwxODcsIlZLX09FTV9QTFVTIiwiPSIsIk9FTV9QTFVTIl0sWzAsNTMsIkJyYWNrZXRMZWZ0Iiw5MiwiWyIsMjE5LCJWS19PRU1fNCIsIlsiLCJPRU1fNCJdLFswLDU0LCJCcmFja2V0UmlnaHQiLDk0LCJdIiwyMjEsIlZLX09FTV82IiwiXSIsIk9FTV82Il0sWzAsNTUsIkJhY2tzbGFzaCIsOTMsIlxcIiwyMjAsIlZLX09FTV81IiwiXFwiLCJPRU1fNSJdLFswLDU2LCJJbnRsSGFzaCIsMCxlLDAsZSxlLGVdLFswLDU3LCJTZW1pY29sb24iLDg1LCI7IiwxODYsIlZLX09FTV8xIiwiOyIsIk9FTV8xIl0sWzAsNTgsIlF1b3RlIiw5NSwiJyIsMjIyLCJWS19PRU1fNyIsIiciLCJPRU1fNyJdLFswLDU5LCJCYWNrcXVvdGUiLDkxLCJgIiwxOTIsIlZLX09FTV8zIiwiYCIsIk9FTV8zIl0sWzAsNjAsIkNvbW1hIiw4NywiLCIsMTg4LCJWS19PRU1fQ09NTUEiLCIsIiwiT0VNX0NPTU1BIl0sWzAsNjEsIlBlcmlvZCIsODksIi4iLDE5MCwiVktfT0VNX1BFUklPRCIsIi4iLCJPRU1fUEVSSU9EIl0sWzAsNjIsIlNsYXNoIiw5MCwiLyIsMTkxLCJWS19PRU1fMiIsIi8iLCJPRU1fMiJdLFsxLDYzLCJDYXBzTG9jayIsOCwiQ2Fwc0xvY2siLDIwLCJWS19DQVBJVEFMIixlLGVdLFsxLDY0LCJGMSIsNTksIkYxIiwxMTIsIlZLX0YxIixlLGVdLFsxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIixlLGVdLFsxLDY2LCJGMyIsNjEsIkYzIiwxMTQsIlZLX0YzIixlLGVdLFsxLDY3LCJGNCIsNjIsIkY0IiwxMTUsIlZLX0Y0IixlLGVdLFsxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IixlLGVdLFsxLDY5LCJGNiIsNjQsIkY2IiwxMTcsIlZLX0Y2IixlLGVdLFsxLDcwLCJGNyIsNjUsIkY3IiwxMTgsIlZLX0Y3IixlLGVdLFsxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IixlLGVdLFsxLDcyLCJGOSIsNjcsIkY5IiwxMjAsIlZLX0Y5IixlLGVdLFsxLDczLCJGMTAiLDY4LCJGMTAiLDEyMSwiVktfRjEwIixlLGVdLFsxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIixlLGVdLFsxLDc1LCJGMTIiLDcwLCJGMTIiLDEyMywiVktfRjEyIixlLGVdLFsxLDc2LCJQcmludFNjcmVlbiIsMCxlLDAsZSxlLGVdLFsxLDc3LCJTY3JvbGxMb2NrIiw4NCwiU2Nyb2xsTG9jayIsMTQ1LCJWS19TQ1JPTEwiLGUsZV0sWzEsNzgsIlBhdXNlIiw3LCJQYXVzZUJyZWFrIiwxOSwiVktfUEFVU0UiLGUsZV0sWzEsNzksIkluc2VydCIsMTksIkluc2VydCIsNDUsIlZLX0lOU0VSVCIsZSxlXSxbMSw4MCwiSG9tZSIsMTQsIkhvbWUiLDM2LCJWS19IT01FIixlLGVdLFsxLDgxLCJQYWdlVXAiLDExLCJQYWdlVXAiLDMzLCJWS19QUklPUiIsZSxlXSxbMSw4MiwiRGVsZXRlIiwyMCwiRGVsZXRlIiw0NiwiVktfREVMRVRFIixlLGVdLFsxLDgzLCJFbmQiLDEzLCJFbmQiLDM1LCJWS19FTkQiLGUsZV0sWzEsODQsIlBhZ2VEb3duIiwxMiwiUGFnZURvd24iLDM0LCJWS19ORVhUIixlLGVdLFsxLDg1LCJBcnJvd1JpZ2h0IiwxNywiUmlnaHRBcnJvdyIsMzksIlZLX1JJR0hUIiwiUmlnaHQiLGVdLFsxLDg2LCJBcnJvd0xlZnQiLDE1LCJMZWZ0QXJyb3ciLDM3LCJWS19MRUZUIiwiTGVmdCIsZV0sWzEsODcsIkFycm93RG93biIsMTgsIkRvd25BcnJvdyIsNDAsIlZLX0RPV04iLCJEb3duIixlXSxbMSw4OCwiQXJyb3dVcCIsMTYsIlVwQXJyb3ciLDM4LCJWS19VUCIsIlVwIixlXSxbMSw4OSwiTnVtTG9jayIsODMsIk51bUxvY2siLDE0NCwiVktfTlVNTE9DSyIsZSxlXSxbMSw5MCwiTnVtcGFkRGl2aWRlIiwxMTMsIk51bVBhZF9EaXZpZGUiLDExMSwiVktfRElWSURFIixlLGVdLFsxLDkxLCJOdW1wYWRNdWx0aXBseSIsMTA4LCJOdW1QYWRfTXVsdGlwbHkiLDEwNiwiVktfTVVMVElQTFkiLGUsZV0sWzEsOTIsIk51bXBhZFN1YnRyYWN0IiwxMTEsIk51bVBhZF9TdWJ0cmFjdCIsMTA5LCJWS19TVUJUUkFDVCIsZSxlXSxbMSw5MywiTnVtcGFkQWRkIiwxMDksIk51bVBhZF9BZGQiLDEwNywiVktfQUREIixlLGVdLFsxLDk0LCJOdW1wYWRFbnRlciIsMyxlLDAsZSxlLGVdLFsxLDk1LCJOdW1wYWQxIiw5OSwiTnVtUGFkMSIsOTcsIlZLX05VTVBBRDEiLGUsZV0sWzEsOTYsIk51bXBhZDIiLDEwMCwiTnVtUGFkMiIsOTgsIlZLX05VTVBBRDIiLGUsZV0sWzEsOTcsIk51bXBhZDMiLDEwMSwiTnVtUGFkMyIsOTksIlZLX05VTVBBRDMiLGUsZV0sWzEsOTgsIk51bXBhZDQiLDEwMiwiTnVtUGFkNCIsMTAwLCJWS19OVU1QQUQ0IixlLGVdLFsxLDk5LCJOdW1wYWQ1IiwxMDMsIk51bVBhZDUiLDEwMSwiVktfTlVNUEFENSIsZSxlXSxbMSwxMDAsIk51bXBhZDYiLDEwNCwiTnVtUGFkNiIsMTAyLCJWS19OVU1QQUQ2IixlLGVdLFsxLDEwMSwiTnVtcGFkNyIsMTA1LCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLGUsZV0sWzEsMTAyLCJOdW1wYWQ4IiwxMDYsIk51bVBhZDgiLDEwNCwiVktfTlVNUEFEOCIsZSxlXSxbMSwxMDMsIk51bXBhZDkiLDEwNywiTnVtUGFkOSIsMTA1LCJWS19OVU1QQUQ5IixlLGVdLFsxLDEwNCwiTnVtcGFkMCIsOTgsIk51bVBhZDAiLDk2LCJWS19OVU1QQUQwIixlLGVdLFsxLDEwNSwiTnVtcGFkRGVjaW1hbCIsMTEyLCJOdW1QYWRfRGVjaW1hbCIsMTEwLCJWS19ERUNJTUFMIixlLGVdLFswLDEwNiwiSW50bEJhY2tzbGFzaCIsOTcsIk9FTV8xMDIiLDIyNiwiVktfT0VNXzEwMiIsZSxlXSxbMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLGUsZSxlXSxbMSwxMDgsIlBvd2VyIiwwLGUsMCxlLGUsZV0sWzEsMTA5LCJOdW1wYWRFcXVhbCIsMCxlLDAsZSxlLGVdLFsxLDExMCwiRjEzIiw3MSwiRjEzIiwxMjQsIlZLX0YxMyIsZSxlXSxbMSwxMTEsIkYxNCIsNzIsIkYxNCIsMTI1LCJWS19GMTQiLGUsZV0sWzEsMTEyLCJGMTUiLDczLCJGMTUiLDEyNiwiVktfRjE1IixlLGVdLFsxLDExMywiRjE2Iiw3NCwiRjE2IiwxMjcsIlZLX0YxNiIsZSxlXSxbMSwxMTQsIkYxNyIsNzUsIkYxNyIsMTI4LCJWS19GMTciLGUsZV0sWzEsMTE1LCJGMTgiLDc2LCJGMTgiLDEyOSwiVktfRjE4IixlLGVdLFsxLDExNiwiRjE5Iiw3NywiRjE5IiwxMzAsIlZLX0YxOSIsZSxlXSxbMSwxMTcsIkYyMCIsNzgsIkYyMCIsMTMxLCJWS19GMjAiLGUsZV0sWzEsMTE4LCJGMjEiLDc5LCJGMjEiLDEzMiwiVktfRjIxIixlLGVdLFsxLDExOSwiRjIyIiw4MCwiRjIyIiwxMzMsIlZLX0YyMiIsZSxlXSxbMSwxMjAsIkYyMyIsODEsIkYyMyIsMTM0LCJWS19GMjMiLGUsZV0sWzEsMTIxLCJGMjQiLDgyLCJGMjQiLDEzNSwiVktfRjI0IixlLGVdLFsxLDEyMiwiT3BlbiIsMCxlLDAsZSxlLGVdLFsxLDEyMywiSGVscCIsMCxlLDAsZSxlLGVdLFsxLDEyNCwiU2VsZWN0IiwwLGUsMCxlLGUsZV0sWzEsMTI1LCJBZ2FpbiIsMCxlLDAsZSxlLGVdLFsxLDEyNiwiVW5kbyIsMCxlLDAsZSxlLGVdLFsxLDEyNywiQ3V0IiwwLGUsMCxlLGUsZV0sWzEsMTI4LCJDb3B5IiwwLGUsMCxlLGUsZV0sWzEsMTI5LCJQYXN0ZSIsMCxlLDAsZSxlLGVdLFsxLDEzMCwiRmluZCIsMCxlLDAsZSxlLGVdLFsxLDEzMSwiQXVkaW9Wb2x1bWVNdXRlIiwxMTcsIkF1ZGlvVm9sdW1lTXV0ZSIsMTczLCJWS19WT0xVTUVfTVVURSIsZSxlXSxbMSwxMzIsIkF1ZGlvVm9sdW1lVXAiLDExOCwiQXVkaW9Wb2x1bWVVcCIsMTc1LCJWS19WT0xVTUVfVVAiLGUsZV0sWzEsMTMzLCJBdWRpb1ZvbHVtZURvd24iLDExOSwiQXVkaW9Wb2x1bWVEb3duIiwxNzQsIlZLX1ZPTFVNRV9ET1dOIixlLGVdLFsxLDEzNCwiTnVtcGFkQ29tbWEiLDExMCwiTnVtUGFkX1NlcGFyYXRvciIsMTA4LCJWS19TRVBBUkFUT1IiLGUsZV0sWzAsMTM1LCJJbnRsUm8iLDExNSwiQUJOVF9DMSIsMTkzLCJWS19BQk5UX0MxIixlLGVdLFsxLDEzNiwiS2FuYU1vZGUiLDAsZSwwLGUsZSxlXSxbMCwxMzcsIkludGxZZW4iLDAsZSwwLGUsZSxlXSxbMSwxMzgsIkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMSwxMzksIk5vbkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMSwxNDAsIkxhbmcxIiwwLGUsMCxlLGUsZV0sWzEsMTQxLCJMYW5nMiIsMCxlLDAsZSxlLGVdLFsxLDE0MiwiTGFuZzMiLDAsZSwwLGUsZSxlXSxbMSwxNDMsIkxhbmc0IiwwLGUsMCxlLGUsZV0sWzEsMTQ0LCJMYW5nNSIsMCxlLDAsZSxlLGVdLFsxLDE0NSwiQWJvcnQiLDAsZSwwLGUsZSxlXSxbMSwxNDYsIlByb3BzIiwwLGUsMCxlLGUsZV0sWzEsMTQ3LCJOdW1wYWRQYXJlbkxlZnQiLDAsZSwwLGUsZSxlXSxbMSwxNDgsIk51bXBhZFBhcmVuUmlnaHQiLDAsZSwwLGUsZSxlXSxbMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCxlLDAsZSxlLGVdLFsxLDE1MCwiTnVtcGFkTWVtb3J5U3RvcmUiLDAsZSwwLGUsZSxlXSxbMSwxNTEsIk51bXBhZE1lbW9yeVJlY2FsbCIsMCxlLDAsZSxlLGVdLFsxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsZSwwLGUsZSxlXSxbMSwxNTMsIk51bXBhZE1lbW9yeUFkZCIsMCxlLDAsZSxlLGVdLFsxLDE1NCwiTnVtcGFkTWVtb3J5U3VidHJhY3QiLDAsZSwwLGUsZSxlXSxbMSwxNTUsIk51bXBhZENsZWFyIiwxMzEsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLGUsZV0sWzEsMTU2LCJOdW1wYWRDbGVhckVudHJ5IiwwLGUsMCxlLGUsZV0sWzEsMCxlLDUsIkN0cmwiLDE3LCJWS19DT05UUk9MIixlLGVdLFsxLDAsZSw0LCJTaGlmdCIsMTYsIlZLX1NISUZUIixlLGVdLFsxLDAsZSw2LCJBbHQiLDE4LCJWS19NRU5VIixlLGVdLFsxLDAsZSw1NywiTWV0YSIsOTEsIlZLX0NPTU1BTkQiLGUsZV0sWzEsMTU3LCJDb250cm9sTGVmdCIsNSxlLDAsIlZLX0xDT05UUk9MIixlLGVdLFsxLDE1OCwiU2hpZnRMZWZ0Iiw0LGUsMCwiVktfTFNISUZUIixlLGVdLFsxLDE1OSwiQWx0TGVmdCIsNixlLDAsIlZLX0xNRU5VIixlLGVdLFsxLDE2MCwiTWV0YUxlZnQiLDU3LGUsMCwiVktfTFdJTiIsZSxlXSxbMSwxNjEsIkNvbnRyb2xSaWdodCIsNSxlLDAsIlZLX1JDT05UUk9MIixlLGVdLFsxLDE2MiwiU2hpZnRSaWdodCIsNCxlLDAsIlZLX1JTSElGVCIsZSxlXSxbMSwxNjMsIkFsdFJpZ2h0Iiw2LGUsMCwiVktfUk1FTlUiLGUsZV0sWzEsMTY0LCJNZXRhUmlnaHQiLDU3LGUsMCwiVktfUldJTiIsZSxlXSxbMSwxNjUsIkJyaWdodG5lc3NVcCIsMCxlLDAsZSxlLGVdLFsxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsZSwwLGUsZSxlXSxbMSwxNjcsIk1lZGlhUGxheSIsMCxlLDAsZSxlLGVdLFsxLDE2OCwiTWVkaWFSZWNvcmQiLDAsZSwwLGUsZSxlXSxbMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxNzAsIk1lZGlhUmV3aW5kIiwwLGUsMCxlLGUsZV0sWzEsMTcxLCJNZWRpYVRyYWNrTmV4dCIsMTI0LCJNZWRpYVRyYWNrTmV4dCIsMTc2LCJWS19NRURJQV9ORVhUX1RSQUNLIixlLGVdLFsxLDE3MiwiTWVkaWFUcmFja1ByZXZpb3VzIiwxMjUsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTc3LCJWS19NRURJQV9QUkVWX1RSQUNLIixlLGVdLFsxLDE3MywiTWVkaWFTdG9wIiwxMjYsIk1lZGlhU3RvcCIsMTc4LCJWS19NRURJQV9TVE9QIixlLGVdLFsxLDE3NCwiRWplY3QiLDAsZSwwLGUsZSxlXSxbMSwxNzUsIk1lZGlhUGxheVBhdXNlIiwxMjcsIk1lZGlhUGxheVBhdXNlIiwxNzksIlZLX01FRElBX1BMQVlfUEFVU0UiLGUsZV0sWzEsMTc2LCJNZWRpYVNlbGVjdCIsMTI4LCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIixlLGVdLFsxLDE3NywiTGF1bmNoTWFpbCIsMTI5LCJMYXVuY2hNYWlsIiwxODAsIlZLX01FRElBX0xBVU5DSF9NQUlMIixlLGVdLFsxLDE3OCwiTGF1bmNoQXBwMiIsMTMwLCJMYXVuY2hBcHAyIiwxODMsIlZLX01FRElBX0xBVU5DSF9BUFAyIixlLGVdLFsxLDE3OSwiTGF1bmNoQXBwMSIsMCxlLDAsIlZLX01FRElBX0xBVU5DSF9BUFAxIixlLGVdLFsxLDE4MCwiU2VsZWN0VGFzayIsMCxlLDAsZSxlLGVdLFsxLDE4MSwiTGF1bmNoU2NyZWVuU2F2ZXIiLDAsZSwwLGUsZSxlXSxbMSwxODIsIkJyb3dzZXJTZWFyY2giLDEyMCwiQnJvd3NlclNlYXJjaCIsMTcwLCJWS19CUk9XU0VSX1NFQVJDSCIsZSxlXSxbMSwxODMsIkJyb3dzZXJIb21lIiwxMjEsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsZSxlXSxbMSwxODQsIkJyb3dzZXJCYWNrIiwxMjIsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsZSxlXSxbMSwxODUsIkJyb3dzZXJGb3J3YXJkIiwxMjMsIkJyb3dzZXJGb3J3YXJkIiwxNjcsIlZLX0JST1dTRVJfRk9SV0FSRCIsZSxlXSxbMSwxODYsIkJyb3dzZXJTdG9wIiwwLGUsMCwiVktfQlJPV1NFUl9TVE9QIixlLGVdLFsxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsZSwwLCJWS19CUk9XU0VSX1JFRlJFU0giLGUsZV0sWzEsMTg4LCJCcm93c2VyRmF2b3JpdGVzIiwwLGUsMCwiVktfQlJPV1NFUl9GQVZPUklURVMiLGUsZV0sWzEsMTg5LCJab29tVG9nZ2xlIiwwLGUsMCxlLGUsZV0sWzEsMTkwLCJNYWlsUmVwbHkiLDAsZSwwLGUsZSxlXSxbMSwxOTEsIk1haWxGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzEsMTkyLCJNYWlsU2VuZCIsMCxlLDAsZSxlLGVdLFsxLDAsZSwxMTQsIktleUluQ29tcG9zaXRpb24iLDIyOSxlLGUsZV0sWzEsMCxlLDExNiwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIixlLGVdLFsxLDAsZSw5NiwiT0VNXzgiLDIyMywiVktfT0VNXzgiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5BIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOR1VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSlVOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19GSU5BTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hBTkpBIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfS0FOSkkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQ09OVkVSVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FDQ0VQVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX01PREVDSEFOR0UiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19TRUxFQ1QiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUklOVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VYRUNVVEUiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19TTkFQU0hPVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hFTFAiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BUFBTIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUFJPQ0VTU0tFWSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BBQ0tFVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0RCRV9TQkNTQ0hBUiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0RCRV9EQkNTQ0hBUiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FUVE4iLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19DUlNFTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VYU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVJFT0YiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QTEFZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfWk9PTSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX05PTkFNRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BBMSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX09FTV9DTEVBUiIsZSxlXV0sbj1bXSxpPVtdO2Zvcihjb25zdCByIG9mIHQpe2NvbnN0W2EscyxvLGwsdSxjLGQsbSxmXT1yO2lmKGlbc118fChpW3NdPSEwLFBvW29dPXMsQm9bby50b0xvd2VyQ2FzZSgpXT1zKSwhbltsXSl7aWYobltsXT0hMCwhdSl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke2x9IGFyb3VuZCBzY2FuIGNvZGUgJHtvfWApO1F0LmRlZmluZShsLHUpLEZuLmRlZmluZShsLG18fHUpLFBuLmRlZmluZShsLGZ8fG18fHUpfWMmJihGb1tjXT1sKX19KSgpO3ZhciBGaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChvKXtyZXR1cm4gUXQua2V5Q29kZVRvU3RyKG8pfWUudG9TdHJpbmc9dDtmdW5jdGlvbiBuKG8pe3JldHVybiBRdC5zdHJUb0tleUNvZGUobyl9ZS5mcm9tU3RyaW5nPW47ZnVuY3Rpb24gaShvKXtyZXR1cm4gRm4ua2V5Q29kZVRvU3RyKG8pfWUudG9Vc2VyU2V0dGluZ3NVUz1pO2Z1bmN0aW9uIHIobyl7cmV0dXJuIFBuLmtleUNvZGVUb1N0cihvKX1lLnRvVXNlclNldHRpbmdzR2VuZXJhbD1yO2Z1bmN0aW9uIGEobyl7cmV0dXJuIEZuLnN0clRvS2V5Q29kZShvKXx8UG4uc3RyVG9LZXlDb2RlKG8pfWUuZnJvbVVzZXJTZXR0aW5ncz1hO2Z1bmN0aW9uIHMobyl7aWYobz49OTgmJm88PTExMylyZXR1cm4gbnVsbDtzd2l0Y2gobyl7Y2FzZSAxNjpyZXR1cm4iVXAiO2Nhc2UgMTg6cmV0dXJuIkRvd24iO2Nhc2UgMTU6cmV0dXJuIkxlZnQiO2Nhc2UgMTc6cmV0dXJuIlJpZ2h0In1yZXR1cm4gUXQua2V5Q29kZVRvU3RyKG8pfWUudG9FbGVjdHJvbkFjY2VsZXJhdG9yPXN9KShGaXx8KEZpPXt9KSk7ZnVuY3Rpb24gcW8oZSx0KXtjb25zdCBuPSh0JjY1NTM1KTw8MTY+Pj4wO3JldHVybihlfG4pPj4+MH1jbGFzcyB2ZSBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsbixpLHIpe3N1cGVyKHQsbixpLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj1uLHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPWksdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKHQpe3JldHVybiB2ZS5zZWxlY3Rpb25zRXF1YWwodGhpcyx0KX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKHQsbil7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09bi5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJnQuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT1uLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZ0LnBvc2l0aW9uTGluZU51bWJlcj09PW4ucG9zaXRpb25MaW5lTnVtYmVyJiZ0LnBvc2l0aW9uQ29sdW1uPT09bi5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIHRoaXMuZ2V0RGlyZWN0aW9uKCk9PT0wP25ldyB2ZSh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLHQsbik6bmV3IHZlKHQsbix0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgTmUodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IE5lKHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24odCxuKXtyZXR1cm4gdGhpcy5nZXREaXJlY3Rpb24oKT09PTA/bmV3IHZlKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyB2ZSh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sdCxuKX1zdGF0aWMgZnJvbVBvc2l0aW9ucyh0LG49dCl7cmV0dXJuIG5ldyB2ZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sbi5saW5lTnVtYmVyLG4uY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKHQsbil7cmV0dXJuIG49PT0wP25ldyB2ZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bmV3IHZlKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbix0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbih0KXtyZXR1cm4gbmV3IHZlKHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHQuc2VsZWN0aW9uU3RhcnRDb2x1bW4sdC5wb3NpdGlvbkxpbmVOdW1iZXIsdC5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbCh0LG4pe2lmKHQmJiFufHwhdCYmbilyZXR1cm4hMTtpZighdCYmIW4pcmV0dXJuITA7aWYodC5sZW5ndGghPT1uLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKHRbaV0sbltpXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuc2VsZWN0aW9uU3RhcnRDb2x1bW49PSJudW1iZXIiJiZ0eXBlb2YgdC5wb3NpdGlvbkxpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5wb3NpdGlvbkNvbHVtbj09Im51bWJlciJ9c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24odCxuLGkscixhKXtyZXR1cm4gYT09PTA/bmV3IHZlKHQsbixpLHIpOm5ldyB2ZShpLHIsdCxuKX19Y29uc3QgUGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBoKGUsdCl7aWYoTHModCkpe2NvbnN0IG49UGlbdF07aWYobj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcmVmZXJlbmNlcyBhbiB1bmtub3duIGNvZGljb246ICR7dH1gKTt0PW59cmV0dXJuIFBpW2VdPXQse2lkOmV9fWNvbnN0IE9vPXthZGQ6aCgiYWRkIiw2ZTQpLHBsdXM6aCgicGx1cyIsNmU0KSxnaXN0TmV3OmgoImdpc3QtbmV3Iiw2ZTQpLHJlcG9DcmVhdGU6aCgicmVwby1jcmVhdGUiLDZlNCksbGlnaHRidWxiOmgoImxpZ2h0YnVsYiIsNjAwMDEpLGxpZ2h0QnVsYjpoKCJsaWdodC1idWxiIiw2MDAwMSkscmVwbzpoKCJyZXBvIiw2MDAwMikscmVwb0RlbGV0ZTpoKCJyZXBvLWRlbGV0ZSIsNjAwMDIpLGdpc3RGb3JrOmgoImdpc3QtZm9yayIsNjAwMDMpLHJlcG9Gb3JrZWQ6aCgicmVwby1mb3JrZWQiLDYwMDAzKSxnaXRQdWxsUmVxdWVzdDpoKCJnaXQtcHVsbC1yZXF1ZXN0Iiw2MDAwNCksZ2l0UHVsbFJlcXVlc3RBYmFuZG9uZWQ6aCgiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLDYwMDA0KSxyZWNvcmRLZXlzOmgoInJlY29yZC1rZXlzIiw2MDAwNSksa2V5Ym9hcmQ6aCgia2V5Ym9hcmQiLDYwMDA1KSx0YWc6aCgidGFnIiw2MDAwNiksZ2l0UHVsbFJlcXVlc3RMYWJlbDpoKCJnaXQtcHVsbC1yZXF1ZXN0LWxhYmVsIiw2MDAwNiksdGFnQWRkOmgoInRhZy1hZGQiLDYwMDA2KSx0YWdSZW1vdmU6aCgidGFnLXJlbW92ZSIsNjAwMDYpLHBlcnNvbjpoKCJwZXJzb24iLDYwMDA3KSxwZXJzb25Gb2xsb3c6aCgicGVyc29uLWZvbGxvdyIsNjAwMDcpLHBlcnNvbk91dGxpbmU6aCgicGVyc29uLW91dGxpbmUiLDYwMDA3KSxwZXJzb25GaWxsZWQ6aCgicGVyc29uLWZpbGxlZCIsNjAwMDcpLGdpdEJyYW5jaDpoKCJnaXQtYnJhbmNoIiw2MDAwOCksZ2l0QnJhbmNoQ3JlYXRlOmgoImdpdC1icmFuY2gtY3JlYXRlIiw2MDAwOCksZ2l0QnJhbmNoRGVsZXRlOmgoImdpdC1icmFuY2gtZGVsZXRlIiw2MDAwOCksc291cmNlQ29udHJvbDpoKCJzb3VyY2UtY29udHJvbCIsNjAwMDgpLG1pcnJvcjpoKCJtaXJyb3IiLDYwMDA5KSxtaXJyb3JQdWJsaWM6aCgibWlycm9yLXB1YmxpYyIsNjAwMDkpLHN0YXI6aCgic3RhciIsNjAwMTApLHN0YXJBZGQ6aCgic3Rhci1hZGQiLDYwMDEwKSxzdGFyRGVsZXRlOmgoInN0YXItZGVsZXRlIiw2MDAxMCksc3RhckVtcHR5OmgoInN0YXItZW1wdHkiLDYwMDEwKSxjb21tZW50OmgoImNvbW1lbnQiLDYwMDExKSxjb21tZW50QWRkOmgoImNvbW1lbnQtYWRkIiw2MDAxMSksYWxlcnQ6aCgiYWxlcnQiLDYwMDEyKSx3YXJuaW5nOmgoIndhcm5pbmciLDYwMDEyKSxzZWFyY2g6aCgic2VhcmNoIiw2MDAxMyksc2VhcmNoU2F2ZTpoKCJzZWFyY2gtc2F2ZSIsNjAwMTMpLGxvZ091dDpoKCJsb2ctb3V0Iiw2MDAxNCksc2lnbk91dDpoKCJzaWduLW91dCIsNjAwMTQpLGxvZ0luOmgoImxvZy1pbiIsNjAwMTUpLHNpZ25JbjpoKCJzaWduLWluIiw2MDAxNSksZXllOmgoImV5ZSIsNjAwMTYpLGV5ZVVud2F0Y2g6aCgiZXllLXVud2F0Y2giLDYwMDE2KSxleWVXYXRjaDpoKCJleWUtd2F0Y2giLDYwMDE2KSxjaXJjbGVGaWxsZWQ6aCgiY2lyY2xlLWZpbGxlZCIsNjAwMTcpLHByaW1pdGl2ZURvdDpoKCJwcmltaXRpdmUtZG90Iiw2MDAxNyksY2xvc2VEaXJ0eTpoKCJjbG9zZS1kaXJ0eSIsNjAwMTcpLGRlYnVnQnJlYWtwb2ludDpoKCJkZWJ1Zy1icmVha3BvaW50Iiw2MDAxNyksZGVidWdCcmVha3BvaW50RGlzYWJsZWQ6aCgiZGVidWctYnJlYWtwb2ludC1kaXNhYmxlZCIsNjAwMTcpLGRlYnVnSGludDpoKCJkZWJ1Zy1oaW50Iiw2MDAxNyksdGVybWluYWxEZWNvcmF0aW9uU3VjY2VzczpoKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLXN1Y2Nlc3MiLDYwMDE3KSxwcmltaXRpdmVTcXVhcmU6aCgicHJpbWl0aXZlLXNxdWFyZSIsNjAwMTgpLGVkaXQ6aCgiZWRpdCIsNjAwMTkpLHBlbmNpbDpoKCJwZW5jaWwiLDYwMDE5KSxpbmZvOmgoImluZm8iLDYwMDIwKSxpc3N1ZU9wZW5lZDpoKCJpc3N1ZS1vcGVuZWQiLDYwMDIwKSxnaXN0UHJpdmF0ZTpoKCJnaXN0LXByaXZhdGUiLDYwMDIxKSxnaXRGb3JrUHJpdmF0ZTpoKCJnaXQtZm9yay1wcml2YXRlIiw2MDAyMSksbG9jazpoKCJsb2NrIiw2MDAyMSksbWlycm9yUHJpdmF0ZTpoKCJtaXJyb3ItcHJpdmF0ZSIsNjAwMjEpLGNsb3NlOmgoImNsb3NlIiw2MDAyMikscmVtb3ZlQ2xvc2U6aCgicmVtb3ZlLWNsb3NlIiw2MDAyMikseDpoKCJ4Iiw2MDAyMikscmVwb1N5bmM6aCgicmVwby1zeW5jIiw2MDAyMyksc3luYzpoKCJzeW5jIiw2MDAyMyksY2xvbmU6aCgiY2xvbmUiLDYwMDI0KSxkZXNrdG9wRG93bmxvYWQ6aCgiZGVza3RvcC1kb3dubG9hZCIsNjAwMjQpLGJlYWtlcjpoKCJiZWFrZXIiLDYwMDI1KSxtaWNyb3Njb3BlOmgoIm1pY3Jvc2NvcGUiLDYwMDI1KSx2bTpoKCJ2bSIsNjAwMjYpLGRldmljZURlc2t0b3A6aCgiZGV2aWNlLWRlc2t0b3AiLDYwMDI2KSxmaWxlOmgoImZpbGUiLDYwMDI3KSxmaWxlVGV4dDpoKCJmaWxlLXRleHQiLDYwMDI3KSxtb3JlOmgoIm1vcmUiLDYwMDI4KSxlbGxpcHNpczpoKCJlbGxpcHNpcyIsNjAwMjgpLGtlYmFiSG9yaXpvbnRhbDpoKCJrZWJhYi1ob3Jpem9udGFsIiw2MDAyOCksbWFpbFJlcGx5OmgoIm1haWwtcmVwbHkiLDYwMDI5KSxyZXBseTpoKCJyZXBseSIsNjAwMjkpLG9yZ2FuaXphdGlvbjpoKCJvcmdhbml6YXRpb24iLDYwMDMwKSxvcmdhbml6YXRpb25GaWxsZWQ6aCgib3JnYW5pemF0aW9uLWZpbGxlZCIsNjAwMzApLG9yZ2FuaXphdGlvbk91dGxpbmU6aCgib3JnYW5pemF0aW9uLW91dGxpbmUiLDYwMDMwKSxuZXdGaWxlOmgoIm5ldy1maWxlIiw2MDAzMSksZmlsZUFkZDpoKCJmaWxlLWFkZCIsNjAwMzEpLG5ld0ZvbGRlcjpoKCJuZXctZm9sZGVyIiw2MDAzMiksZmlsZURpcmVjdG9yeUNyZWF0ZTpoKCJmaWxlLWRpcmVjdG9yeS1jcmVhdGUiLDYwMDMyKSx0cmFzaDpoKCJ0cmFzaCIsNjAwMzMpLHRyYXNoY2FuOmgoInRyYXNoY2FuIiw2MDAzMyksaGlzdG9yeTpoKCJoaXN0b3J5Iiw2MDAzNCksY2xvY2s6aCgiY2xvY2siLDYwMDM0KSxmb2xkZXI6aCgiZm9sZGVyIiw2MDAzNSksZmlsZURpcmVjdG9yeTpoKCJmaWxlLWRpcmVjdG9yeSIsNjAwMzUpLHN5bWJvbEZvbGRlcjpoKCJzeW1ib2wtZm9sZGVyIiw2MDAzNSksbG9nb0dpdGh1YjpoKCJsb2dvLWdpdGh1YiIsNjAwMzYpLG1hcmtHaXRodWI6aCgibWFyay1naXRodWIiLDYwMDM2KSxnaXRodWI6aCgiZ2l0aHViIiw2MDAzNiksdGVybWluYWw6aCgidGVybWluYWwiLDYwMDM3KSxjb25zb2xlOmgoImNvbnNvbGUiLDYwMDM3KSxyZXBsOmgoInJlcGwiLDYwMDM3KSx6YXA6aCgiemFwIiw2MDAzOCksc3ltYm9sRXZlbnQ6aCgic3ltYm9sLWV2ZW50Iiw2MDAzOCksZXJyb3I6aCgiZXJyb3IiLDYwMDM5KSxzdG9wOmgoInN0b3AiLDYwMDM5KSx2YXJpYWJsZTpoKCJ2YXJpYWJsZSIsNjAwNDApLHN5bWJvbFZhcmlhYmxlOmgoInN5bWJvbC12YXJpYWJsZSIsNjAwNDApLGFycmF5OmgoImFycmF5Iiw2MDA0Miksc3ltYm9sQXJyYXk6aCgic3ltYm9sLWFycmF5Iiw2MDA0Miksc3ltYm9sTW9kdWxlOmgoInN5bWJvbC1tb2R1bGUiLDYwMDQzKSxzeW1ib2xQYWNrYWdlOmgoInN5bWJvbC1wYWNrYWdlIiw2MDA0Myksc3ltYm9sTmFtZXNwYWNlOmgoInN5bWJvbC1uYW1lc3BhY2UiLDYwMDQzKSxzeW1ib2xPYmplY3Q6aCgic3ltYm9sLW9iamVjdCIsNjAwNDMpLHN5bWJvbE1ldGhvZDpoKCJzeW1ib2wtbWV0aG9kIiw2MDA0NCksc3ltYm9sRnVuY3Rpb246aCgic3ltYm9sLWZ1bmN0aW9uIiw2MDA0NCksc3ltYm9sQ29uc3RydWN0b3I6aCgic3ltYm9sLWNvbnN0cnVjdG9yIiw2MDA0NCksc3ltYm9sQm9vbGVhbjpoKCJzeW1ib2wtYm9vbGVhbiIsNjAwNDcpLHN5bWJvbE51bGw6aCgic3ltYm9sLW51bGwiLDYwMDQ3KSxzeW1ib2xOdW1lcmljOmgoInN5bWJvbC1udW1lcmljIiw2MDA0OCksc3ltYm9sTnVtYmVyOmgoInN5bWJvbC1udW1iZXIiLDYwMDQ4KSxzeW1ib2xTdHJ1Y3R1cmU6aCgic3ltYm9sLXN0cnVjdHVyZSIsNjAwNDkpLHN5bWJvbFN0cnVjdDpoKCJzeW1ib2wtc3RydWN0Iiw2MDA0OSksc3ltYm9sUGFyYW1ldGVyOmgoInN5bWJvbC1wYXJhbWV0ZXIiLDYwMDUwKSxzeW1ib2xUeXBlUGFyYW1ldGVyOmgoInN5bWJvbC10eXBlLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbEtleTpoKCJzeW1ib2wta2V5Iiw2MDA1MSksc3ltYm9sVGV4dDpoKCJzeW1ib2wtdGV4dCIsNjAwNTEpLHN5bWJvbFJlZmVyZW5jZTpoKCJzeW1ib2wtcmVmZXJlbmNlIiw2MDA1MiksZ29Ub0ZpbGU6aCgiZ28tdG8tZmlsZSIsNjAwNTIpLHN5bWJvbEVudW06aCgic3ltYm9sLWVudW0iLDYwMDUzKSxzeW1ib2xWYWx1ZTpoKCJzeW1ib2wtdmFsdWUiLDYwMDUzKSxzeW1ib2xSdWxlcjpoKCJzeW1ib2wtcnVsZXIiLDYwMDU0KSxzeW1ib2xVbml0OmgoInN5bWJvbC11bml0Iiw2MDA1NCksYWN0aXZhdGVCcmVha3BvaW50czpoKCJhY3RpdmF0ZS1icmVha3BvaW50cyIsNjAwNTUpLGFyY2hpdmU6aCgiYXJjaGl2ZSIsNjAwNTYpLGFycm93Qm90aDpoKCJhcnJvdy1ib3RoIiw2MDA1NyksYXJyb3dEb3duOmgoImFycm93LWRvd24iLDYwMDU4KSxhcnJvd0xlZnQ6aCgiYXJyb3ctbGVmdCIsNjAwNTkpLGFycm93UmlnaHQ6aCgiYXJyb3ctcmlnaHQiLDYwMDYwKSxhcnJvd1NtYWxsRG93bjpoKCJhcnJvdy1zbWFsbC1kb3duIiw2MDA2MSksYXJyb3dTbWFsbExlZnQ6aCgiYXJyb3ctc21hbGwtbGVmdCIsNjAwNjIpLGFycm93U21hbGxSaWdodDpoKCJhcnJvdy1zbWFsbC1yaWdodCIsNjAwNjMpLGFycm93U21hbGxVcDpoKCJhcnJvdy1zbWFsbC11cCIsNjAwNjQpLGFycm93VXA6aCgiYXJyb3ctdXAiLDYwMDY1KSxiZWxsOmgoImJlbGwiLDYwMDY2KSxib2xkOmgoImJvbGQiLDYwMDY3KSxib29rOmgoImJvb2siLDYwMDY4KSxib29rbWFyazpoKCJib29rbWFyayIsNjAwNjkpLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsVW52ZXJpZmllZDpoKCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLXVudmVyaWZpZWQiLDYwMDcwKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbDpoKCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsIiw2MDA3MSksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxEaXNhYmxlZDpoKCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLWRpc2FibGVkIiw2MDA3MSksZGVidWdCcmVha3BvaW50RGF0YVVudmVyaWZpZWQ6aCgiZGVidWctYnJlYWtwb2ludC1kYXRhLXVudmVyaWZpZWQiLDYwMDcyKSxkZWJ1Z0JyZWFrcG9pbnREYXRhOmgoImRlYnVnLWJyZWFrcG9pbnQtZGF0YSIsNjAwNzMpLGRlYnVnQnJlYWtwb2ludERhdGFEaXNhYmxlZDpoKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtZGlzYWJsZWQiLDYwMDczKSxkZWJ1Z0JyZWFrcG9pbnRMb2dVbnZlcmlmaWVkOmgoImRlYnVnLWJyZWFrcG9pbnQtbG9nLXVudmVyaWZpZWQiLDYwMDc0KSxkZWJ1Z0JyZWFrcG9pbnRMb2c6aCgiZGVidWctYnJlYWtwb2ludC1sb2ciLDYwMDc1KSxkZWJ1Z0JyZWFrcG9pbnRMb2dEaXNhYmxlZDpoKCJkZWJ1Zy1icmVha3BvaW50LWxvZy1kaXNhYmxlZCIsNjAwNzUpLGJyaWVmY2FzZTpoKCJicmllZmNhc2UiLDYwMDc2KSxicm9hZGNhc3Q6aCgiYnJvYWRjYXN0Iiw2MDA3NyksYnJvd3NlcjpoKCJicm93c2VyIiw2MDA3OCksYnVnOmgoImJ1ZyIsNjAwNzkpLGNhbGVuZGFyOmgoImNhbGVuZGFyIiw2MDA4MCksY2FzZVNlbnNpdGl2ZTpoKCJjYXNlLXNlbnNpdGl2ZSIsNjAwODEpLGNoZWNrOmgoImNoZWNrIiw2MDA4MiksY2hlY2tsaXN0OmgoImNoZWNrbGlzdCIsNjAwODMpLGNoZXZyb25Eb3duOmgoImNoZXZyb24tZG93biIsNjAwODQpLGNoZXZyb25MZWZ0OmgoImNoZXZyb24tbGVmdCIsNjAwODUpLGNoZXZyb25SaWdodDpoKCJjaGV2cm9uLXJpZ2h0Iiw2MDA4NiksY2hldnJvblVwOmgoImNoZXZyb24tdXAiLDYwMDg3KSxjaHJvbWVDbG9zZTpoKCJjaHJvbWUtY2xvc2UiLDYwMDg4KSxjaHJvbWVNYXhpbWl6ZTpoKCJjaHJvbWUtbWF4aW1pemUiLDYwMDg5KSxjaHJvbWVNaW5pbWl6ZTpoKCJjaHJvbWUtbWluaW1pemUiLDYwMDkwKSxjaHJvbWVSZXN0b3JlOmgoImNocm9tZS1yZXN0b3JlIiw2MDA5MSksY2lyY2xlT3V0bGluZTpoKCJjaXJjbGUtb3V0bGluZSIsNjAwOTIpLGNpcmNsZTpoKCJjaXJjbGUiLDYwMDkyKSxkZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkOmgoImRlYnVnLWJyZWFrcG9pbnQtdW52ZXJpZmllZCIsNjAwOTIpLHRlcm1pbmFsRGVjb3JhdGlvbkluY29tcGxldGU6aCgidGVybWluYWwtZGVjb3JhdGlvbi1pbmNvbXBsZXRlIiw2MDA5MiksY2lyY2xlU2xhc2g6aCgiY2lyY2xlLXNsYXNoIiw2MDA5MyksY2lyY3VpdEJvYXJkOmgoImNpcmN1aXQtYm9hcmQiLDYwMDk0KSxjbGVhckFsbDpoKCJjbGVhci1hbGwiLDYwMDk1KSxjbGlwcHk6aCgiY2xpcHB5Iiw2MDA5NiksY2xvc2VBbGw6aCgiY2xvc2UtYWxsIiw2MDA5NyksY2xvdWREb3dubG9hZDpoKCJjbG91ZC1kb3dubG9hZCIsNjAwOTgpLGNsb3VkVXBsb2FkOmgoImNsb3VkLXVwbG9hZCIsNjAwOTkpLGNvZGU6aCgiY29kZSIsNjAxMDApLGNvbGxhcHNlQWxsOmgoImNvbGxhcHNlLWFsbCIsNjAxMDEpLGNvbG9yTW9kZTpoKCJjb2xvci1tb2RlIiw2MDEwMiksY29tbWVudERpc2N1c3Npb246aCgiY29tbWVudC1kaXNjdXNzaW9uIiw2MDEwMyksY3JlZGl0Q2FyZDpoKCJjcmVkaXQtY2FyZCIsNjAxMDUpLGRhc2g6aCgiZGFzaCIsNjAxMDgpLGRhc2hib2FyZDpoKCJkYXNoYm9hcmQiLDYwMTA5KSxkYXRhYmFzZTpoKCJkYXRhYmFzZSIsNjAxMTApLGRlYnVnQ29udGludWU6aCgiZGVidWctY29udGludWUiLDYwMTExKSxkZWJ1Z0Rpc2Nvbm5lY3Q6aCgiZGVidWctZGlzY29ubmVjdCIsNjAxMTIpLGRlYnVnUGF1c2U6aCgiZGVidWctcGF1c2UiLDYwMTEzKSxkZWJ1Z1Jlc3RhcnQ6aCgiZGVidWctcmVzdGFydCIsNjAxMTQpLGRlYnVnU3RhcnQ6aCgiZGVidWctc3RhcnQiLDYwMTE1KSxkZWJ1Z1N0ZXBJbnRvOmgoImRlYnVnLXN0ZXAtaW50byIsNjAxMTYpLGRlYnVnU3RlcE91dDpoKCJkZWJ1Zy1zdGVwLW91dCIsNjAxMTcpLGRlYnVnU3RlcE92ZXI6aCgiZGVidWctc3RlcC1vdmVyIiw2MDExOCksZGVidWdTdG9wOmgoImRlYnVnLXN0b3AiLDYwMTE5KSxkZWJ1ZzpoKCJkZWJ1ZyIsNjAxMjApLGRldmljZUNhbWVyYVZpZGVvOmgoImRldmljZS1jYW1lcmEtdmlkZW8iLDYwMTIxKSxkZXZpY2VDYW1lcmE6aCgiZGV2aWNlLWNhbWVyYSIsNjAxMjIpLGRldmljZU1vYmlsZTpoKCJkZXZpY2UtbW9iaWxlIiw2MDEyMyksZGlmZkFkZGVkOmgoImRpZmYtYWRkZWQiLDYwMTI0KSxkaWZmSWdub3JlZDpoKCJkaWZmLWlnbm9yZWQiLDYwMTI1KSxkaWZmTW9kaWZpZWQ6aCgiZGlmZi1tb2RpZmllZCIsNjAxMjYpLGRpZmZSZW1vdmVkOmgoImRpZmYtcmVtb3ZlZCIsNjAxMjcpLGRpZmZSZW5hbWVkOmgoImRpZmYtcmVuYW1lZCIsNjAxMjgpLGRpZmY6aCgiZGlmZiIsNjAxMjkpLGRpZmZTaWRlYnlzaWRlOmgoImRpZmYtc2lkZWJ5c2lkZSIsNjAxMjkpLGRpc2NhcmQ6aCgiZGlzY2FyZCIsNjAxMzApLGVkaXRvckxheW91dDpoKCJlZGl0b3ItbGF5b3V0Iiw2MDEzMSksZW1wdHlXaW5kb3c6aCgiZW1wdHktd2luZG93Iiw2MDEzMiksZXhjbHVkZTpoKCJleGNsdWRlIiw2MDEzMyksZXh0ZW5zaW9uczpoKCJleHRlbnNpb25zIiw2MDEzNCksZXllQ2xvc2VkOmgoImV5ZS1jbG9zZWQiLDYwMTM1KSxmaWxlQmluYXJ5OmgoImZpbGUtYmluYXJ5Iiw2MDEzNiksZmlsZUNvZGU6aCgiZmlsZS1jb2RlIiw2MDEzNyksZmlsZU1lZGlhOmgoImZpbGUtbWVkaWEiLDYwMTM4KSxmaWxlUGRmOmgoImZpbGUtcGRmIiw2MDEzOSksZmlsZVN1Ym1vZHVsZTpoKCJmaWxlLXN1Ym1vZHVsZSIsNjAxNDApLGZpbGVTeW1saW5rRGlyZWN0b3J5OmgoImZpbGUtc3ltbGluay1kaXJlY3RvcnkiLDYwMTQxKSxmaWxlU3ltbGlua0ZpbGU6aCgiZmlsZS1zeW1saW5rLWZpbGUiLDYwMTQyKSxmaWxlWmlwOmgoImZpbGUtemlwIiw2MDE0MyksZmlsZXM6aCgiZmlsZXMiLDYwMTQ0KSxmaWx0ZXI6aCgiZmlsdGVyIiw2MDE0NSksZmxhbWU6aCgiZmxhbWUiLDYwMTQ2KSxmb2xkRG93bjpoKCJmb2xkLWRvd24iLDYwMTQ3KSxmb2xkVXA6aCgiZm9sZC11cCIsNjAxNDgpLGZvbGQ6aCgiZm9sZCIsNjAxNDkpLGZvbGRlckFjdGl2ZTpoKCJmb2xkZXItYWN0aXZlIiw2MDE1MCksZm9sZGVyT3BlbmVkOmgoImZvbGRlci1vcGVuZWQiLDYwMTUxKSxnZWFyOmgoImdlYXIiLDYwMTUyKSxnaWZ0OmgoImdpZnQiLDYwMTUzKSxnaXN0U2VjcmV0OmgoImdpc3Qtc2VjcmV0Iiw2MDE1NCksZ2lzdDpoKCJnaXN0Iiw2MDE1NSksZ2l0Q29tbWl0OmgoImdpdC1jb21taXQiLDYwMTU2KSxnaXRDb21wYXJlOmgoImdpdC1jb21wYXJlIiw2MDE1NyksY29tcGFyZUNoYW5nZXM6aCgiY29tcGFyZS1jaGFuZ2VzIiw2MDE1NyksZ2l0TWVyZ2U6aCgiZ2l0LW1lcmdlIiw2MDE1OCksZ2l0aHViQWN0aW9uOmgoImdpdGh1Yi1hY3Rpb24iLDYwMTU5KSxnaXRodWJBbHQ6aCgiZ2l0aHViLWFsdCIsNjAxNjApLGdsb2JlOmgoImdsb2JlIiw2MDE2MSksZ3JhYmJlcjpoKCJncmFiYmVyIiw2MDE2MiksZ3JhcGg6aCgiZ3JhcGgiLDYwMTYzKSxncmlwcGVyOmgoImdyaXBwZXIiLDYwMTY0KSxoZWFydDpoKCJoZWFydCIsNjAxNjUpLGhvbWU6aCgiaG9tZSIsNjAxNjYpLGhvcml6b250YWxSdWxlOmgoImhvcml6b250YWwtcnVsZSIsNjAxNjcpLGh1Ym90OmgoImh1Ym90Iiw2MDE2OCksaW5ib3g6aCgiaW5ib3giLDYwMTY5KSxpc3N1ZVJlb3BlbmVkOmgoImlzc3VlLXJlb3BlbmVkIiw2MDE3MSksaXNzdWVzOmgoImlzc3VlcyIsNjAxNzIpLGl0YWxpYzpoKCJpdGFsaWMiLDYwMTczKSxqZXJzZXk6aCgiamVyc2V5Iiw2MDE3NCksanNvbjpoKCJqc29uIiw2MDE3NSksa2ViYWJWZXJ0aWNhbDpoKCJrZWJhYi12ZXJ0aWNhbCIsNjAxNzYpLGtleTpoKCJrZXkiLDYwMTc3KSxsYXc6aCgibGF3Iiw2MDE3OCksbGlnaHRidWxiQXV0b2ZpeDpoKCJsaWdodGJ1bGItYXV0b2ZpeCIsNjAxNzkpLGxpbmtFeHRlcm5hbDpoKCJsaW5rLWV4dGVybmFsIiw2MDE4MCksbGluazpoKCJsaW5rIiw2MDE4MSksbGlzdE9yZGVyZWQ6aCgibGlzdC1vcmRlcmVkIiw2MDE4MiksbGlzdFVub3JkZXJlZDpoKCJsaXN0LXVub3JkZXJlZCIsNjAxODMpLGxpdmVTaGFyZTpoKCJsaXZlLXNoYXJlIiw2MDE4NCksbG9hZGluZzpoKCJsb2FkaW5nIiw2MDE4NSksbG9jYXRpb246aCgibG9jYXRpb24iLDYwMTg2KSxtYWlsUmVhZDpoKCJtYWlsLXJlYWQiLDYwMTg3KSxtYWlsOmgoIm1haWwiLDYwMTg4KSxtYXJrZG93bjpoKCJtYXJrZG93biIsNjAxODkpLG1lZ2FwaG9uZTpoKCJtZWdhcGhvbmUiLDYwMTkwKSxtZW50aW9uOmgoIm1lbnRpb24iLDYwMTkxKSxtaWxlc3RvbmU6aCgibWlsZXN0b25lIiw2MDE5MiksZ2l0UHVsbFJlcXVlc3RNaWxlc3RvbmU6aCgiZ2l0LXB1bGwtcmVxdWVzdC1taWxlc3RvbmUiLDYwMTkyKSxtb3J0YXJCb2FyZDpoKCJtb3J0YXItYm9hcmQiLDYwMTkzKSxtb3ZlOmgoIm1vdmUiLDYwMTk0KSxtdWx0aXBsZVdpbmRvd3M6aCgibXVsdGlwbGUtd2luZG93cyIsNjAxOTUpLG11dGU6aCgibXV0ZSIsNjAxOTYpLG5vTmV3bGluZTpoKCJuby1uZXdsaW5lIiw2MDE5Nyksbm90ZTpoKCJub3RlIiw2MDE5OCksb2N0b2ZhY2U6aCgib2N0b2ZhY2UiLDYwMTk5KSxvcGVuUHJldmlldzpoKCJvcGVuLXByZXZpZXciLDYwMjAwKSxwYWNrYWdlOmgoInBhY2thZ2UiLDYwMjAxKSxwYWludGNhbjpoKCJwYWludGNhbiIsNjAyMDIpLHBpbjpoKCJwaW4iLDYwMjAzKSxwbGF5OmgoInBsYXkiLDYwMjA0KSxydW46aCgicnVuIiw2MDIwNCkscGx1ZzpoKCJwbHVnIiw2MDIwNSkscHJlc2VydmVDYXNlOmgoInByZXNlcnZlLWNhc2UiLDYwMjA2KSxwcmV2aWV3OmgoInByZXZpZXciLDYwMjA3KSxwcm9qZWN0OmgoInByb2plY3QiLDYwMjA4KSxwdWxzZTpoKCJwdWxzZSIsNjAyMDkpLHF1ZXN0aW9uOmgoInF1ZXN0aW9uIiw2MDIxMCkscXVvdGU6aCgicXVvdGUiLDYwMjExKSxyYWRpb1Rvd2VyOmgoInJhZGlvLXRvd2VyIiw2MDIxMikscmVhY3Rpb25zOmgoInJlYWN0aW9ucyIsNjAyMTMpLHJlZmVyZW5jZXM6aCgicmVmZXJlbmNlcyIsNjAyMTQpLHJlZnJlc2g6aCgicmVmcmVzaCIsNjAyMTUpLHJlZ2V4OmgoInJlZ2V4Iiw2MDIxNikscmVtb3RlRXhwbG9yZXI6aCgicmVtb3RlLWV4cGxvcmVyIiw2MDIxNykscmVtb3RlOmgoInJlbW90ZSIsNjAyMTgpLHJlbW92ZTpoKCJyZW1vdmUiLDYwMjE5KSxyZXBsYWNlQWxsOmgoInJlcGxhY2UtYWxsIiw2MDIyMCkscmVwbGFjZTpoKCJyZXBsYWNlIiw2MDIyMSkscmVwb0Nsb25lOmgoInJlcG8tY2xvbmUiLDYwMjIyKSxyZXBvRm9yY2VQdXNoOmgoInJlcG8tZm9yY2UtcHVzaCIsNjAyMjMpLHJlcG9QdWxsOmgoInJlcG8tcHVsbCIsNjAyMjQpLHJlcG9QdXNoOmgoInJlcG8tcHVzaCIsNjAyMjUpLHJlcG9ydDpoKCJyZXBvcnQiLDYwMjI2KSxyZXF1ZXN0Q2hhbmdlczpoKCJyZXF1ZXN0LWNoYW5nZXMiLDYwMjI3KSxyb2NrZXQ6aCgicm9ja2V0Iiw2MDIyOCkscm9vdEZvbGRlck9wZW5lZDpoKCJyb290LWZvbGRlci1vcGVuZWQiLDYwMjI5KSxyb290Rm9sZGVyOmgoInJvb3QtZm9sZGVyIiw2MDIzMCkscnNzOmgoInJzcyIsNjAyMzEpLHJ1Ynk6aCgicnVieSIsNjAyMzIpLHNhdmVBbGw6aCgic2F2ZS1hbGwiLDYwMjMzKSxzYXZlQXM6aCgic2F2ZS1hcyIsNjAyMzQpLHNhdmU6aCgic2F2ZSIsNjAyMzUpLHNjcmVlbkZ1bGw6aCgic2NyZWVuLWZ1bGwiLDYwMjM2KSxzY3JlZW5Ob3JtYWw6aCgic2NyZWVuLW5vcm1hbCIsNjAyMzcpLHNlYXJjaFN0b3A6aCgic2VhcmNoLXN0b3AiLDYwMjM4KSxzZXJ2ZXI6aCgic2VydmVyIiw2MDI0MCksc2V0dGluZ3NHZWFyOmgoInNldHRpbmdzLWdlYXIiLDYwMjQxKSxzZXR0aW5nczpoKCJzZXR0aW5ncyIsNjAyNDIpLHNoaWVsZDpoKCJzaGllbGQiLDYwMjQzKSxzbWlsZXk6aCgic21pbGV5Iiw2MDI0NCksc29ydFByZWNlZGVuY2U6aCgic29ydC1wcmVjZWRlbmNlIiw2MDI0NSksc3BsaXRIb3Jpem9udGFsOmgoInNwbGl0LWhvcml6b250YWwiLDYwMjQ2KSxzcGxpdFZlcnRpY2FsOmgoInNwbGl0LXZlcnRpY2FsIiw2MDI0Nyksc3F1aXJyZWw6aCgic3F1aXJyZWwiLDYwMjQ4KSxzdGFyRnVsbDpoKCJzdGFyLWZ1bGwiLDYwMjQ5KSxzdGFySGFsZjpoKCJzdGFyLWhhbGYiLDYwMjUwKSxzeW1ib2xDbGFzczpoKCJzeW1ib2wtY2xhc3MiLDYwMjUxKSxzeW1ib2xDb2xvcjpoKCJzeW1ib2wtY29sb3IiLDYwMjUyKSxzeW1ib2xDb25zdGFudDpoKCJzeW1ib2wtY29uc3RhbnQiLDYwMjUzKSxzeW1ib2xFbnVtTWVtYmVyOmgoInN5bWJvbC1lbnVtLW1lbWJlciIsNjAyNTQpLHN5bWJvbEZpZWxkOmgoInN5bWJvbC1maWVsZCIsNjAyNTUpLHN5bWJvbEZpbGU6aCgic3ltYm9sLWZpbGUiLDYwMjU2KSxzeW1ib2xJbnRlcmZhY2U6aCgic3ltYm9sLWludGVyZmFjZSIsNjAyNTcpLHN5bWJvbEtleXdvcmQ6aCgic3ltYm9sLWtleXdvcmQiLDYwMjU4KSxzeW1ib2xNaXNjOmgoInN5bWJvbC1taXNjIiw2MDI1OSksc3ltYm9sT3BlcmF0b3I6aCgic3ltYm9sLW9wZXJhdG9yIiw2MDI2MCksc3ltYm9sUHJvcGVydHk6aCgic3ltYm9sLXByb3BlcnR5Iiw2MDI2MSksd3JlbmNoOmgoIndyZW5jaCIsNjAyNjEpLHdyZW5jaFN1YmFjdGlvbjpoKCJ3cmVuY2gtc3ViYWN0aW9uIiw2MDI2MSksc3ltYm9sU25pcHBldDpoKCJzeW1ib2wtc25pcHBldCIsNjAyNjIpLHRhc2tsaXN0OmgoInRhc2tsaXN0Iiw2MDI2MyksdGVsZXNjb3BlOmgoInRlbGVzY29wZSIsNjAyNjQpLHRleHRTaXplOmgoInRleHQtc2l6ZSIsNjAyNjUpLHRocmVlQmFyczpoKCJ0aHJlZS1iYXJzIiw2MDI2NiksdGh1bWJzZG93bjpoKCJ0aHVtYnNkb3duIiw2MDI2NyksdGh1bWJzdXA6aCgidGh1bWJzdXAiLDYwMjY4KSx0b29sczpoKCJ0b29scyIsNjAyNjkpLHRyaWFuZ2xlRG93bjpoKCJ0cmlhbmdsZS1kb3duIiw2MDI3MCksdHJpYW5nbGVMZWZ0OmgoInRyaWFuZ2xlLWxlZnQiLDYwMjcxKSx0cmlhbmdsZVJpZ2h0OmgoInRyaWFuZ2xlLXJpZ2h0Iiw2MDI3MiksdHJpYW5nbGVVcDpoKCJ0cmlhbmdsZS11cCIsNjAyNzMpLHR3aXR0ZXI6aCgidHdpdHRlciIsNjAyNzQpLHVuZm9sZDpoKCJ1bmZvbGQiLDYwMjc1KSx1bmxvY2s6aCgidW5sb2NrIiw2MDI3NiksdW5tdXRlOmgoInVubXV0ZSIsNjAyNzcpLHVudmVyaWZpZWQ6aCgidW52ZXJpZmllZCIsNjAyNzgpLHZlcmlmaWVkOmgoInZlcmlmaWVkIiw2MDI3OSksdmVyc2lvbnM6aCgidmVyc2lvbnMiLDYwMjgwKSx2bUFjdGl2ZTpoKCJ2bS1hY3RpdmUiLDYwMjgxKSx2bU91dGxpbmU6aCgidm0tb3V0bGluZSIsNjAyODIpLHZtUnVubmluZzpoKCJ2bS1ydW5uaW5nIiw2MDI4Myksd2F0Y2g6aCgid2F0Y2giLDYwMjg0KSx3aGl0ZXNwYWNlOmgoIndoaXRlc3BhY2UiLDYwMjg1KSx3aG9sZVdvcmQ6aCgid2hvbGUtd29yZCIsNjAyODYpLHdpbmRvdzpoKCJ3aW5kb3ciLDYwMjg3KSx3b3JkV3JhcDpoKCJ3b3JkLXdyYXAiLDYwMjg4KSx6b29tSW46aCgiem9vbS1pbiIsNjAyODkpLHpvb21PdXQ6aCgiem9vbS1vdXQiLDYwMjkwKSxsaXN0RmlsdGVyOmgoImxpc3QtZmlsdGVyIiw2MDI5MSksbGlzdEZsYXQ6aCgibGlzdC1mbGF0Iiw2MDI5MiksbGlzdFNlbGVjdGlvbjpoKCJsaXN0LXNlbGVjdGlvbiIsNjAyOTMpLHNlbGVjdGlvbjpoKCJzZWxlY3Rpb24iLDYwMjkzKSxsaXN0VHJlZTpoKCJsaXN0LXRyZWUiLDYwMjk0KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvblVudmVyaWZpZWQ6aCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi11bnZlcmlmaWVkIiw2MDI5NSksZGVidWdCcmVha3BvaW50RnVuY3Rpb246aCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbiIsNjAyOTYpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ6aCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi1kaXNhYmxlZCIsNjAyOTYpLGRlYnVnU3RhY2tmcmFtZUFjdGl2ZTpoKCJkZWJ1Zy1zdGFja2ZyYW1lLWFjdGl2ZSIsNjAyOTcpLGNpcmNsZVNtYWxsRmlsbGVkOmgoImNpcmNsZS1zbWFsbC1maWxsZWQiLDYwMjk4KSxkZWJ1Z1N0YWNrZnJhbWVEb3Q6aCgiZGVidWctc3RhY2tmcmFtZS1kb3QiLDYwMjk4KSx0ZXJtaW5hbERlY29yYXRpb25NYXJrOmgoInRlcm1pbmFsLWRlY29yYXRpb24tbWFyayIsNjAyOTgpLGRlYnVnU3RhY2tmcmFtZTpoKCJkZWJ1Zy1zdGFja2ZyYW1lIiw2MDI5OSksZGVidWdTdGFja2ZyYW1lRm9jdXNlZDpoKCJkZWJ1Zy1zdGFja2ZyYW1lLWZvY3VzZWQiLDYwMjk5KSxkZWJ1Z0JyZWFrcG9pbnRVbnN1cHBvcnRlZDpoKCJkZWJ1Zy1icmVha3BvaW50LXVuc3VwcG9ydGVkIiw2MDMwMCksc3ltYm9sU3RyaW5nOmgoInN5bWJvbC1zdHJpbmciLDYwMzAxKSxkZWJ1Z1JldmVyc2VDb250aW51ZTpoKCJkZWJ1Zy1yZXZlcnNlLWNvbnRpbnVlIiw2MDMwMiksZGVidWdTdGVwQmFjazpoKCJkZWJ1Zy1zdGVwLWJhY2siLDYwMzAzKSxkZWJ1Z1Jlc3RhcnRGcmFtZTpoKCJkZWJ1Zy1yZXN0YXJ0LWZyYW1lIiw2MDMwNCksZGVidWdBbHQ6aCgiZGVidWctYWx0Iiw2MDMwNSksY2FsbEluY29taW5nOmgoImNhbGwtaW5jb21pbmciLDYwMzA2KSxjYWxsT3V0Z29pbmc6aCgiY2FsbC1vdXRnb2luZyIsNjAzMDcpLG1lbnU6aCgibWVudSIsNjAzMDgpLGV4cGFuZEFsbDpoKCJleHBhbmQtYWxsIiw2MDMwOSksZmVlZGJhY2s6aCgiZmVlZGJhY2siLDYwMzEwKSxnaXRQdWxsUmVxdWVzdFJldmlld2VyOmgoImdpdC1wdWxsLXJlcXVlc3QtcmV2aWV3ZXIiLDYwMzEwKSxncm91cEJ5UmVmVHlwZTpoKCJncm91cC1ieS1yZWYtdHlwZSIsNjAzMTEpLHVuZ3JvdXBCeVJlZlR5cGU6aCgidW5ncm91cC1ieS1yZWYtdHlwZSIsNjAzMTIpLGFjY291bnQ6aCgiYWNjb3VudCIsNjAzMTMpLGdpdFB1bGxSZXF1ZXN0QXNzaWduZWU6aCgiZ2l0LXB1bGwtcmVxdWVzdC1hc3NpZ25lZSIsNjAzMTMpLGJlbGxEb3Q6aCgiYmVsbC1kb3QiLDYwMzE0KSxkZWJ1Z0NvbnNvbGU6aCgiZGVidWctY29uc29sZSIsNjAzMTUpLGxpYnJhcnk6aCgibGlicmFyeSIsNjAzMTYpLG91dHB1dDpoKCJvdXRwdXQiLDYwMzE3KSxydW5BbGw6aCgicnVuLWFsbCIsNjAzMTgpLHN5bmNJZ25vcmVkOmgoInN5bmMtaWdub3JlZCIsNjAzMTkpLHBpbm5lZDpoKCJwaW5uZWQiLDYwMzIwKSxnaXRodWJJbnZlcnRlZDpoKCJnaXRodWItaW52ZXJ0ZWQiLDYwMzIxKSxzZXJ2ZXJQcm9jZXNzOmgoInNlcnZlci1wcm9jZXNzIiw2MDMyMiksc2VydmVyRW52aXJvbm1lbnQ6aCgic2VydmVyLWVudmlyb25tZW50Iiw2MDMyMykscGFzczpoKCJwYXNzIiw2MDMyNCksaXNzdWVDbG9zZWQ6aCgiaXNzdWUtY2xvc2VkIiw2MDMyNCksc3RvcENpcmNsZTpoKCJzdG9wLWNpcmNsZSIsNjAzMjUpLHBsYXlDaXJjbGU6aCgicGxheS1jaXJjbGUiLDYwMzI2KSxyZWNvcmQ6aCgicmVjb3JkIiw2MDMyNyksZGVidWdBbHRTbWFsbDpoKCJkZWJ1Zy1hbHQtc21hbGwiLDYwMzI4KSx2bUNvbm5lY3Q6aCgidm0tY29ubmVjdCIsNjAzMjkpLGNsb3VkOmgoImNsb3VkIiw2MDMzMCksbWVyZ2U6aCgibWVyZ2UiLDYwMzMxKSxleHBvcnQ6aCgiZXhwb3J0Iiw2MDMzMiksZ3JhcGhMZWZ0OmgoImdyYXBoLWxlZnQiLDYwMzMzKSxtYWduZXQ6aCgibWFnbmV0Iiw2MDMzNCksbm90ZWJvb2s6aCgibm90ZWJvb2siLDYwMzM1KSxyZWRvOmgoInJlZG8iLDYwMzM2KSxjaGVja0FsbDpoKCJjaGVjay1hbGwiLDYwMzM3KSxwaW5uZWREaXJ0eTpoKCJwaW5uZWQtZGlydHkiLDYwMzM4KSxwYXNzRmlsbGVkOmgoInBhc3MtZmlsbGVkIiw2MDMzOSksY2lyY2xlTGFyZ2VGaWxsZWQ6aCgiY2lyY2xlLWxhcmdlLWZpbGxlZCIsNjAzNDApLGNpcmNsZUxhcmdlOmgoImNpcmNsZS1sYXJnZSIsNjAzNDEpLGNpcmNsZUxhcmdlT3V0bGluZTpoKCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIsNjAzNDEpLGNvbWJpbmU6aCgiY29tYmluZSIsNjAzNDIpLGdhdGhlcjpoKCJnYXRoZXIiLDYwMzQyKSx0YWJsZTpoKCJ0YWJsZSIsNjAzNDMpLHZhcmlhYmxlR3JvdXA6aCgidmFyaWFibGUtZ3JvdXAiLDYwMzQ0KSx0eXBlSGllcmFyY2h5OmgoInR5cGUtaGllcmFyY2h5Iiw2MDM0NSksdHlwZUhpZXJhcmNoeVN1YjpoKCJ0eXBlLWhpZXJhcmNoeS1zdWIiLDYwMzQ2KSx0eXBlSGllcmFyY2h5U3VwZXI6aCgidHlwZS1oaWVyYXJjaHktc3VwZXIiLDYwMzQ3KSxnaXRQdWxsUmVxdWVzdENyZWF0ZTpoKCJnaXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZSIsNjAzNDgpLHJ1bkFib3ZlOmgoInJ1bi1hYm92ZSIsNjAzNDkpLHJ1bkJlbG93OmgoInJ1bi1iZWxvdyIsNjAzNTApLG5vdGVib29rVGVtcGxhdGU6aCgibm90ZWJvb2stdGVtcGxhdGUiLDYwMzUxKSxkZWJ1Z1JlcnVuOmgoImRlYnVnLXJlcnVuIiw2MDM1Miksd29ya3NwYWNlVHJ1c3RlZDpoKCJ3b3Jrc3BhY2UtdHJ1c3RlZCIsNjAzNTMpLHdvcmtzcGFjZVVudHJ1c3RlZDpoKCJ3b3Jrc3BhY2UtdW50cnVzdGVkIiw2MDM1NCksd29ya3NwYWNlVW5rbm93bjpoKCJ3b3Jrc3BhY2UtdW5rbm93biIsNjAzNTUpLHRlcm1pbmFsQ21kOmgoInRlcm1pbmFsLWNtZCIsNjAzNTYpLHRlcm1pbmFsRGViaWFuOmgoInRlcm1pbmFsLWRlYmlhbiIsNjAzNTcpLHRlcm1pbmFsTGludXg6aCgidGVybWluYWwtbGludXgiLDYwMzU4KSx0ZXJtaW5hbFBvd2Vyc2hlbGw6aCgidGVybWluYWwtcG93ZXJzaGVsbCIsNjAzNTkpLHRlcm1pbmFsVG11eDpoKCJ0ZXJtaW5hbC10bXV4Iiw2MDM2MCksdGVybWluYWxVYnVudHU6aCgidGVybWluYWwtdWJ1bnR1Iiw2MDM2MSksdGVybWluYWxCYXNoOmgoInRlcm1pbmFsLWJhc2giLDYwMzYyKSxhcnJvd1N3YXA6aCgiYXJyb3ctc3dhcCIsNjAzNjMpLGNvcHk6aCgiY29weSIsNjAzNjQpLHBlcnNvbkFkZDpoKCJwZXJzb24tYWRkIiw2MDM2NSksZmlsdGVyRmlsbGVkOmgoImZpbHRlci1maWxsZWQiLDYwMzY2KSx3YW5kOmgoIndhbmQiLDYwMzY3KSxkZWJ1Z0xpbmVCeUxpbmU6aCgiZGVidWctbGluZS1ieS1saW5lIiw2MDM2OCksaW5zcGVjdDpoKCJpbnNwZWN0Iiw2MDM2OSksbGF5ZXJzOmgoImxheWVycyIsNjAzNzApLGxheWVyc0RvdDpoKCJsYXllcnMtZG90Iiw2MDM3MSksbGF5ZXJzQWN0aXZlOmgoImxheWVycy1hY3RpdmUiLDYwMzcyKSxjb21wYXNzOmgoImNvbXBhc3MiLDYwMzczKSxjb21wYXNzRG90OmgoImNvbXBhc3MtZG90Iiw2MDM3NCksY29tcGFzc0FjdGl2ZTpoKCJjb21wYXNzLWFjdGl2ZSIsNjAzNzUpLGF6dXJlOmgoImF6dXJlIiw2MDM3NiksaXNzdWVEcmFmdDpoKCJpc3N1ZS1kcmFmdCIsNjAzNzcpLGdpdFB1bGxSZXF1ZXN0Q2xvc2VkOmgoImdpdC1wdWxsLXJlcXVlc3QtY2xvc2VkIiw2MDM3OCksZ2l0UHVsbFJlcXVlc3REcmFmdDpoKCJnaXQtcHVsbC1yZXF1ZXN0LWRyYWZ0Iiw2MDM3OSksZGVidWdBbGw6aCgiZGVidWctYWxsIiw2MDM4MCksZGVidWdDb3ZlcmFnZTpoKCJkZWJ1Zy1jb3ZlcmFnZSIsNjAzODEpLHJ1bkVycm9yczpoKCJydW4tZXJyb3JzIiw2MDM4MiksZm9sZGVyTGlicmFyeTpoKCJmb2xkZXItbGlicmFyeSIsNjAzODMpLGRlYnVnQ29udGludWVTbWFsbDpoKCJkZWJ1Zy1jb250aW51ZS1zbWFsbCIsNjAzODQpLGJlYWtlclN0b3A6aCgiYmVha2VyLXN0b3AiLDYwMzg1KSxncmFwaExpbmU6aCgiZ3JhcGgtbGluZSIsNjAzODYpLGdyYXBoU2NhdHRlcjpoKCJncmFwaC1zY2F0dGVyIiw2MDM4NykscGllQ2hhcnQ6aCgicGllLWNoYXJ0Iiw2MDM4OCksYnJhY2tldDpoKCJicmFja2V0Iiw2MDE3NSksYnJhY2tldERvdDpoKCJicmFja2V0LWRvdCIsNjAzODkpLGJyYWNrZXRFcnJvcjpoKCJicmFja2V0LWVycm9yIiw2MDM5MCksbG9ja1NtYWxsOmgoImxvY2stc21hbGwiLDYwMzkxKSxhenVyZURldm9wczpoKCJhenVyZS1kZXZvcHMiLDYwMzkyKSx2ZXJpZmllZEZpbGxlZDpoKCJ2ZXJpZmllZC1maWxsZWQiLDYwMzkzKSxuZXdsaW5lOmgoIm5ld2xpbmUiLDYwMzk0KSxsYXlvdXQ6aCgibGF5b3V0Iiw2MDM5NSksbGF5b3V0QWN0aXZpdHliYXJMZWZ0OmgoImxheW91dC1hY3Rpdml0eWJhci1sZWZ0Iiw2MDM5NiksbGF5b3V0QWN0aXZpdHliYXJSaWdodDpoKCJsYXlvdXQtYWN0aXZpdHliYXItcmlnaHQiLDYwMzk3KSxsYXlvdXRQYW5lbExlZnQ6aCgibGF5b3V0LXBhbmVsLWxlZnQiLDYwMzk4KSxsYXlvdXRQYW5lbENlbnRlcjpoKCJsYXlvdXQtcGFuZWwtY2VudGVyIiw2MDM5OSksbGF5b3V0UGFuZWxKdXN0aWZ5OmgoImxheW91dC1wYW5lbC1qdXN0aWZ5Iiw2MDQwMCksbGF5b3V0UGFuZWxSaWdodDpoKCJsYXlvdXQtcGFuZWwtcmlnaHQiLDYwNDAxKSxsYXlvdXRQYW5lbDpoKCJsYXlvdXQtcGFuZWwiLDYwNDAyKSxsYXlvdXRTaWRlYmFyTGVmdDpoKCJsYXlvdXQtc2lkZWJhci1sZWZ0Iiw2MDQwMyksbGF5b3V0U2lkZWJhclJpZ2h0OmgoImxheW91dC1zaWRlYmFyLXJpZ2h0Iiw2MDQwNCksbGF5b3V0U3RhdHVzYmFyOmgoImxheW91dC1zdGF0dXNiYXIiLDYwNDA1KSxsYXlvdXRNZW51YmFyOmgoImxheW91dC1tZW51YmFyIiw2MDQwNiksbGF5b3V0Q2VudGVyZWQ6aCgibGF5b3V0LWNlbnRlcmVkIiw2MDQwNyksdGFyZ2V0OmgoInRhcmdldCIsNjA0MDgpLGluZGVudDpoKCJpbmRlbnQiLDYwNDA5KSxyZWNvcmRTbWFsbDpoKCJyZWNvcmQtc21hbGwiLDYwNDEwKSxlcnJvclNtYWxsOmgoImVycm9yLXNtYWxsIiw2MDQxMSksdGVybWluYWxEZWNvcmF0aW9uRXJyb3I6aCgidGVybWluYWwtZGVjb3JhdGlvbi1lcnJvciIsNjA0MTEpLGFycm93Q2lyY2xlRG93bjpoKCJhcnJvdy1jaXJjbGUtZG93biIsNjA0MTIpLGFycm93Q2lyY2xlTGVmdDpoKCJhcnJvdy1jaXJjbGUtbGVmdCIsNjA0MTMpLGFycm93Q2lyY2xlUmlnaHQ6aCgiYXJyb3ctY2lyY2xlLXJpZ2h0Iiw2MDQxNCksYXJyb3dDaXJjbGVVcDpoKCJhcnJvdy1jaXJjbGUtdXAiLDYwNDE1KSxsYXlvdXRTaWRlYmFyUmlnaHRPZmY6aCgibGF5b3V0LXNpZGViYXItcmlnaHQtb2ZmIiw2MDQxNiksbGF5b3V0UGFuZWxPZmY6aCgibGF5b3V0LXBhbmVsLW9mZiIsNjA0MTcpLGxheW91dFNpZGViYXJMZWZ0T2ZmOmgoImxheW91dC1zaWRlYmFyLWxlZnQtb2ZmIiw2MDQxOCksYmxhbms6aCgiYmxhbmsiLDYwNDE5KSxoZWFydEZpbGxlZDpoKCJoZWFydC1maWxsZWQiLDYwNDIwKSxtYXA6aCgibWFwIiw2MDQyMSksbWFwSG9yaXpvbnRhbDpoKCJtYXAtaG9yaXpvbnRhbCIsNjA0MjEpLGZvbGRIb3Jpem9udGFsOmgoImZvbGQtaG9yaXpvbnRhbCIsNjA0MjEpLG1hcEZpbGxlZDpoKCJtYXAtZmlsbGVkIiw2MDQyMiksbWFwSG9yaXpvbnRhbEZpbGxlZDpoKCJtYXAtaG9yaXpvbnRhbC1maWxsZWQiLDYwNDIyKSxmb2xkSG9yaXpvbnRhbEZpbGxlZDpoKCJmb2xkLWhvcml6b250YWwtZmlsbGVkIiw2MDQyMiksY2lyY2xlU21hbGw6aCgiY2lyY2xlLXNtYWxsIiw2MDQyMyksYmVsbFNsYXNoOmgoImJlbGwtc2xhc2giLDYwNDI0KSxiZWxsU2xhc2hEb3Q6aCgiYmVsbC1zbGFzaC1kb3QiLDYwNDI1KSxjb21tZW50VW5yZXNvbHZlZDpoKCJjb21tZW50LXVucmVzb2x2ZWQiLDYwNDI2KSxnaXRQdWxsUmVxdWVzdEdvVG9DaGFuZ2VzOmgoImdpdC1wdWxsLXJlcXVlc3QtZ28tdG8tY2hhbmdlcyIsNjA0MjcpLGdpdFB1bGxSZXF1ZXN0TmV3Q2hhbmdlczpoKCJnaXQtcHVsbC1yZXF1ZXN0LW5ldy1jaGFuZ2VzIiw2MDQyOCksc2VhcmNoRnV6enk6aCgic2VhcmNoLWZ1enp5Iiw2MDQyOSksY29tbWVudERyYWZ0OmgoImNvbW1lbnQtZHJhZnQiLDYwNDMwKSxzZW5kOmgoInNlbmQiLDYwNDMxKSxzcGFya2xlOmgoInNwYXJrbGUiLDYwNDMyKSxpbnNlcnQ6aCgiaW5zZXJ0Iiw2MDQzMyksbWljOmgoIm1pYyIsNjA0MzQpLHRodW1ic2Rvd25GaWxsZWQ6aCgidGh1bWJzZG93bi1maWxsZWQiLDYwNDM1KSx0aHVtYnN1cEZpbGxlZDpoKCJ0aHVtYnN1cC1maWxsZWQiLDYwNDM2KSxjb2ZmZWU6aCgiY29mZmVlIiw2MDQzNyksc25ha2U6aCgic25ha2UiLDYwNDM4KSxnYW1lOmgoImdhbWUiLDYwNDM5KSx2cjpoKCJ2ciIsNjA0NDApLGNoaXA6aCgiY2hpcCIsNjA0NDEpLHBpYW5vOmgoInBpYW5vIiw2MDQ0MiksbXVzaWM6aCgibXVzaWMiLDYwNDQzKSxtaWNGaWxsZWQ6aCgibWljLWZpbGxlZCIsNjA0NDQpLHJlcG9GZXRjaDpoKCJyZXBvLWZldGNoIiw2MDQ0NSksY29waWxvdDpoKCJjb3BpbG90Iiw2MDQ0NiksbGlnaHRidWxiU3BhcmtsZTpoKCJsaWdodGJ1bGItc3BhcmtsZSIsNjA0NDcpLHJvYm90OmgoInJvYm90Iiw2MDQ0OCksc3BhcmtsZUZpbGxlZDpoKCJzcGFya2xlLWZpbGxlZCIsNjA0NDkpLGRpZmZTaW5nbGU6aCgiZGlmZi1zaW5nbGUiLDYwNDUwKSxkaWZmTXVsdGlwbGU6aCgiZGlmZi1tdWx0aXBsZSIsNjA0NTEpLHN1cnJvdW5kV2l0aDpoKCJzdXJyb3VuZC13aXRoIiw2MDQ1Miksc2hhcmU6aCgic2hhcmUiLDYwNDUzKSxnaXRTdGFzaDpoKCJnaXQtc3Rhc2giLDYwNDU0KSxnaXRTdGFzaEFwcGx5OmgoImdpdC1zdGFzaC1hcHBseSIsNjA0NTUpLGdpdFN0YXNoUG9wOmgoImdpdC1zdGFzaC1wb3AiLDYwNDU2KSx2c2NvZGU6aCgidnNjb2RlIiw2MDQ1NyksdnNjb2RlSW5zaWRlcnM6aCgidnNjb2RlLWluc2lkZXJzIiw2MDQ1OCksY29kZU9zczpoKCJjb2RlLW9zcyIsNjA0NTkpLHJ1bkNvdmVyYWdlOmgoInJ1bi1jb3ZlcmFnZSIsNjA0NjApLHJ1bkFsbENvdmVyYWdlOmgoInJ1bi1hbGwtY292ZXJhZ2UiLDYwNDYxKSxjb3ZlcmFnZTpoKCJjb3ZlcmFnZSIsNjA0NjIpLGdpdGh1YlByb2plY3Q6aCgiZ2l0aHViLXByb2plY3QiLDYwNDYzKSxtYXBWZXJ0aWNhbDpoKCJtYXAtdmVydGljYWwiLDYwNDY0KSxmb2xkVmVydGljYWw6aCgiZm9sZC12ZXJ0aWNhbCIsNjA0NjQpLG1hcFZlcnRpY2FsRmlsbGVkOmgoIm1hcC12ZXJ0aWNhbC1maWxsZWQiLDYwNDY1KSxmb2xkVmVydGljYWxGaWxsZWQ6aCgiZm9sZC12ZXJ0aWNhbC1maWxsZWQiLDYwNDY1KX0sVm89e2RpYWxvZ0Vycm9yOmgoImRpYWxvZy1lcnJvciIsImVycm9yIiksZGlhbG9nV2FybmluZzpoKCJkaWFsb2ctd2FybmluZyIsIndhcm5pbmciKSxkaWFsb2dJbmZvOmgoImRpYWxvZy1pbmZvIiwiaW5mbyIpLGRpYWxvZ0Nsb3NlOmgoImRpYWxvZy1jbG9zZSIsImNsb3NlIiksdHJlZUl0ZW1FeHBhbmRlZDpoKCJ0cmVlLWl0ZW0tZXhwYW5kZWQiLCJjaGV2cm9uLWRvd24iKSx0cmVlRmlsdGVyT25UeXBlT246aCgidHJlZS1maWx0ZXItb24tdHlwZS1vbiIsImxpc3QtZmlsdGVyIiksdHJlZUZpbHRlck9uVHlwZU9mZjpoKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9mZiIsImxpc3Qtc2VsZWN0aW9uIiksdHJlZUZpbHRlckNsZWFyOmgoInRyZWUtZmlsdGVyLWNsZWFyIiwiY2xvc2UiKSx0cmVlSXRlbUxvYWRpbmc6aCgidHJlZS1pdGVtLWxvYWRpbmciLCJsb2FkaW5nIiksbWVudVNlbGVjdGlvbjpoKCJtZW51LXNlbGVjdGlvbiIsImNoZWNrIiksbWVudVN1Ym1lbnU6aCgibWVudS1zdWJtZW51IiwiY2hldnJvbi1yaWdodCIpLG1lbnVCYXJNb3JlOmgoIm1lbnViYXItbW9yZSIsIm1vcmUiKSxzY3JvbGxiYXJCdXR0b25MZWZ0OmgoInNjcm9sbGJhci1idXR0b24tbGVmdCIsInRyaWFuZ2xlLWxlZnQiKSxzY3JvbGxiYXJCdXR0b25SaWdodDpoKCJzY3JvbGxiYXItYnV0dG9uLXJpZ2h0IiwidHJpYW5nbGUtcmlnaHQiKSxzY3JvbGxiYXJCdXR0b25VcDpoKCJzY3JvbGxiYXItYnV0dG9uLXVwIiwidHJpYW5nbGUtdXAiKSxzY3JvbGxiYXJCdXR0b25Eb3duOmgoInNjcm9sbGJhci1idXR0b24tZG93biIsInRyaWFuZ2xlLWRvd24iKSx0b29sQmFyTW9yZTpoKCJ0b29sYmFyLW1vcmUiLCJtb3JlIikscXVpY2tJbnB1dEJhY2s6aCgicXVpY2staW5wdXQtYmFjayIsImFycm93LWxlZnQiKSxkcm9wRG93bkJ1dHRvbjpoKCJkcm9wLWRvd24tYnV0dG9uIiw2MDA4NCksc3ltYm9sQ3VzdG9tQ29sb3I6aCgic3ltYm9sLWN1c3RvbWNvbG9yIiw2MDI1MiksZXhwb3J0SWNvbjpoKCJleHBvcnQiLDYwMzMyKSx3b3Jrc3BhY2VVbnNwZWNpZmllZDpoKCJ3b3Jrc3BhY2UtdW5zcGVjaWZpZWQiLDYwMzU1KSxuZXdMaW5lOmgoIm5ld2xpbmUiLDYwMzk0KSx0aHVtYnNEb3duRmlsbGVkOmgoInRodW1ic2Rvd24tZmlsbGVkIiw2MDQzNSksdGh1bWJzVXBGaWxsZWQ6aCgidGh1bWJzdXAtZmlsbGVkIiw2MDQzNiksZ2l0RmV0Y2g6aCgiZ2l0LWZldGNoIiw2MDQ0NSksbGlnaHRidWxiU3BhcmtsZUF1dG9maXg6aCgibGlnaHRidWxiLXNwYXJrbGUtYXV0b2ZpeCIsNjA0NDcpLGRlYnVnQnJlYWtwb2ludFBlbmRpbmc6aCgiZGVidWctYnJlYWtwb2ludC1wZW5kaW5nIiw2MDM3Nyl9LE89ey4uLk9vLC4uLlZvfTtjbGFzcyBqb3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzPW5ldyBNYXAsdGhpcy5fZmFjdG9yaWVzPW5ldyBNYXAsdGhpcy5fb25EaWRDaGFuZ2U9bmV3IEFlLHRoaXMub25EaWRDaGFuZ2U9dGhpcy5fb25EaWRDaGFuZ2UuZXZlbnQsdGhpcy5fY29sb3JNYXA9bnVsbH1oYW5kbGVDaGFuZ2UodCl7dGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczp0LGNoYW5nZWRDb2xvck1hcDohMX0pfXJlZ2lzdGVyKHQsbil7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLnNldCh0LG4pLHRoaXMuaGFuZGxlQ2hhbmdlKFt0XSksRnQoKCk9Pnt0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5nZXQodCk9PT1uJiYodGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZGVsZXRlKHQpLHRoaXMuaGFuZGxlQ2hhbmdlKFt0XSkpfSl9Z2V0KHQpe3JldHVybiB0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5nZXQodCl8fG51bGx9cmVnaXN0ZXJGYWN0b3J5KHQsbil7dmFyIGk7KGk9dGhpcy5fZmFjdG9yaWVzLmdldCh0KSk9PT1udWxsfHxpPT09dm9pZCAwfHxpLmRpc3Bvc2UoKTtjb25zdCByPW5ldyBHbyh0aGlzLHQsbik7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQodCxyKSxGdCgoKT0+e2NvbnN0IGE9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTshYXx8YSE9PXJ8fCh0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKHQpLGEuZGlzcG9zZSgpKX0pfWFzeW5jIGdldE9yQ3JlYXRlKHQpe2NvbnN0IG49dGhpcy5nZXQodCk7aWYobilyZXR1cm4gbjtjb25zdCBpPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuIWl8fGkuaXNSZXNvbHZlZD9udWxsOihhd2FpdCBpLnJlc29sdmUoKSx0aGlzLmdldCh0KSl9aXNSZXNvbHZlZCh0KXtpZih0aGlzLmdldCh0KSlyZXR1cm4hMDtjb25zdCBpPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuISEoIWl8fGkuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAodCl7dGhpcy5fY29sb3JNYXA9dCx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19Y2xhc3MgR28gZXh0ZW5kcyB5dHtnZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWNvbnN0cnVjdG9yKHQsbixpKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PXQsdGhpcy5fbGFuZ3VhZ2VJZD1uLHRoaXMuX2ZhY3Rvcnk9aSx0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMCxzdXBlci5kaXNwb3NlKCl9YXN5bmMgcmVzb2x2ZSgpe3JldHVybiB0aGlzLl9yZXNvbHZlUHJvbWlzZXx8KHRoaXMuX3Jlc29sdmVQcm9taXNlPXRoaXMuX2NyZWF0ZSgpKSx0aGlzLl9yZXNvbHZlUHJvbWlzZX1hc3luYyBfY3JlYXRlKCl7Y29uc3QgdD1hd2FpdCB0aGlzLl9mYWN0b3J5LnRva2VuaXphdGlvblN1cHBvcnQ7dGhpcy5faXNSZXNvbHZlZD0hMCx0JiYhdGhpcy5faXNEaXNwb3NlZCYmdGhpcy5fcmVnaXN0ZXIodGhpcy5fcmVnaXN0cnkucmVnaXN0ZXIodGhpcy5fbGFuZ3VhZ2VJZCx0KSl9fWNsYXNzICRve2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLm9mZnNldD10LHRoaXMudHlwZT1uLHRoaXMubGFuZ3VhZ2U9aSx0aGlzLl90b2tlbkJyYW5kPXZvaWQgMH10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fXZhciBCaTsoZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsTy5zeW1ib2xNZXRob2QpLHQuc2V0KDEsTy5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixPLnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCgzLE8uc3ltYm9sRmllbGQpLHQuc2V0KDQsTy5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxPLnN5bWJvbENsYXNzKSx0LnNldCg2LE8uc3ltYm9sU3RydWN0KSx0LnNldCg3LE8uc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LE8uc3ltYm9sTW9kdWxlKSx0LnNldCg5LE8uc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLE8uc3ltYm9sRXZlbnQpLHQuc2V0KDExLE8uc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDEyLE8uc3ltYm9sVW5pdCksdC5zZXQoMTMsTy5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsTy5zeW1ib2xFbnVtKSx0LnNldCgxNCxPLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSxPLnN5bWJvbEVudW0pLHQuc2V0KDE2LE8uc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMTcsTy5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyxPLnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LE8uc3ltYm9sVGV4dCksdC5zZXQoMTksTy5zeW1ib2xDb2xvciksdC5zZXQoMjAsTy5zeW1ib2xGaWxlKSx0LnNldCgyMSxPLnN5bWJvbFJlZmVyZW5jZSksdC5zZXQoMjIsTy5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsTy5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LE8uc3ltYm9sVHlwZVBhcmFtZXRlciksdC5zZXQoMjUsTy5hY2NvdW50KSx0LnNldCgyNixPLmlzc3Vlcyk7ZnVuY3Rpb24gbihhKXtsZXQgcz10LmdldChhKTtyZXR1cm4gc3x8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgQ29tcGxldGlvbkl0ZW1LaW5kICIrYSkscz1PLnN5bWJvbFByb3BlcnR5KSxzfWUudG9JY29uPW47Y29uc3QgaT1uZXcgTWFwO2kuc2V0KCJtZXRob2QiLDApLGkuc2V0KCJmdW5jdGlvbiIsMSksaS5zZXQoImNvbnN0cnVjdG9yIiwyKSxpLnNldCgiZmllbGQiLDMpLGkuc2V0KCJ2YXJpYWJsZSIsNCksaS5zZXQoImNsYXNzIiw1KSxpLnNldCgic3RydWN0Iiw2KSxpLnNldCgiaW50ZXJmYWNlIiw3KSxpLnNldCgibW9kdWxlIiw4KSxpLnNldCgicHJvcGVydHkiLDkpLGkuc2V0KCJldmVudCIsMTApLGkuc2V0KCJvcGVyYXRvciIsMTEpLGkuc2V0KCJ1bml0IiwxMiksaS5zZXQoInZhbHVlIiwxMyksaS5zZXQoImNvbnN0YW50IiwxNCksaS5zZXQoImVudW0iLDE1KSxpLnNldCgiZW51bS1tZW1iZXIiLDE2KSxpLnNldCgiZW51bU1lbWJlciIsMTYpLGkuc2V0KCJrZXl3b3JkIiwxNyksaS5zZXQoInNuaXBwZXQiLDI3KSxpLnNldCgidGV4dCIsMTgpLGkuc2V0KCJjb2xvciIsMTkpLGkuc2V0KCJmaWxlIiwyMCksaS5zZXQoInJlZmVyZW5jZSIsMjEpLGkuc2V0KCJjdXN0b21jb2xvciIsMjIpLGkuc2V0KCJmb2xkZXIiLDIzKSxpLnNldCgidHlwZS1wYXJhbWV0ZXIiLDI0KSxpLnNldCgidHlwZVBhcmFtZXRlciIsMjQpLGkuc2V0KCJhY2NvdW50IiwyNSksaS5zZXQoImlzc3VlIiwyNik7ZnVuY3Rpb24gcihhLHMpe2xldCBvPWkuZ2V0KGEpO3JldHVybiB0eXBlb2Ygbz4idSImJiFzJiYobz05KSxvfWUuZnJvbVN0cmluZz1yfSkoQml8fChCaT17fSkpO3ZhciBxaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0pKHFpfHwocWk9e30pKTt2YXIgT2k7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLlBhc3RlQXM9MV09IlBhc3RlQXMifSkoT2l8fChPaT17fSkpO3ZhciBWaTsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifSkoVml8fChWaT17fSkpO3ZhciBqaTsoZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0pKGppfHwoamk9e30pKSxLKCJBcnJheSIsImFycmF5IiksSygiQm9vbGVhbiIsImJvb2xlYW4iKSxLKCJDbGFzcyIsImNsYXNzIiksSygiQ29uc3RhbnQiLCJjb25zdGFudCIpLEsoIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiKSxLKCJFbnVtIiwiZW51bWVyYXRpb24iKSxLKCJFbnVtTWVtYmVyIiwiZW51bWVyYXRpb24gbWVtYmVyIiksSygiRXZlbnQiLCJldmVudCIpLEsoIkZpZWxkIiwiZmllbGQiKSxLKCJGaWxlIiwiZmlsZSIpLEsoIkZ1bmN0aW9uIiwiZnVuY3Rpb24iKSxLKCJJbnRlcmZhY2UiLCJpbnRlcmZhY2UiKSxLKCJLZXkiLCJrZXkiKSxLKCJNZXRob2QiLCJtZXRob2QiKSxLKCJNb2R1bGUiLCJtb2R1bGUiKSxLKCJOYW1lc3BhY2UiLCJuYW1lc3BhY2UiKSxLKCJOdWxsIiwibnVsbCIpLEsoIk51bWJlciIsIm51bWJlciIpLEsoIk9iamVjdCIsIm9iamVjdCIpLEsoIk9wZXJhdG9yIiwib3BlcmF0b3IiKSxLKCJQYWNrYWdlIiwicGFja2FnZSIpLEsoIlByb3BlcnR5IiwicHJvcGVydHkiKSxLKCJTdHJpbmciLCJzdHJpbmciKSxLKCJTdHJ1Y3QiLCJzdHJ1Y3QiKSxLKCJUeXBlUGFyYW1ldGVyIiwidHlwZSBwYXJhbWV0ZXIiKSxLKCJWYXJpYWJsZSIsInZhcmlhYmxlIik7dmFyIEdpOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxPLnN5bWJvbEZpbGUpLHQuc2V0KDEsTy5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsTy5zeW1ib2xOYW1lc3BhY2UpLHQuc2V0KDMsTy5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LE8uc3ltYm9sQ2xhc3MpLHQuc2V0KDUsTy5zeW1ib2xNZXRob2QpLHQuc2V0KDYsTy5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyxPLnN5bWJvbEZpZWxkKSx0LnNldCg4LE8uc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDksTy5zeW1ib2xFbnVtKSx0LnNldCgxMCxPLnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsTy5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMTIsTy5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsTy5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsTy5zeW1ib2xTdHJpbmcpLHQuc2V0KDE1LE8uc3ltYm9sTnVtYmVyKSx0LnNldCgxNixPLnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LE8uc3ltYm9sQXJyYXkpLHQuc2V0KDE4LE8uc3ltYm9sT2JqZWN0KSx0LnNldCgxOSxPLnN5bWJvbEtleSksdC5zZXQoMjAsTy5zeW1ib2xOdWxsKSx0LnNldCgyMSxPLnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLE8uc3ltYm9sU3RydWN0KSx0LnNldCgyMyxPLnN5bWJvbEV2ZW50KSx0LnNldCgyNCxPLnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSxPLnN5bWJvbFR5cGVQYXJhbWV0ZXIpO2Z1bmN0aW9uIG4oaSl7bGV0IHI9dC5nZXQoaSk7cmV0dXJuIHJ8fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIFN5bWJvbEtpbmQgIitpKSxyPU8uc3ltYm9sUHJvcGVydHkpLHJ9ZS50b0ljb249bn0pKEdpfHwoR2k9e30pKTt2YXIgJGk7KGZ1bmN0aW9uKGUpe2VbZS5BSUdlbmVyYXRlZD0xXT0iQUlHZW5lcmF0ZWQifSkoJGl8fCgkaT17fSkpO3ZhciBYaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4hbnx8dHlwZW9mIG4hPSJvYmplY3QiPyExOnR5cGVvZiBuLmlkPT0ic3RyaW5nIiYmdHlwZW9mIG4udGl0bGU9PSJzdHJpbmcifWUuaXM9dH0pKFhpfHwoWGk9e30pKTt2YXIgSmk7KGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSkoSml8fChKaT17fSkpLG5ldyBqbzt2YXIgUWk7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLkF1dG9tYXRpYz0xXT0iQXV0b21hdGljIn0pKFFpfHwoUWk9e30pKTt2YXIgWWk7KGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRGlzYWJsZWQ9MV09IkRpc2FibGVkIixlW2UuRW5hYmxlZD0yXT0iRW5hYmxlZCJ9KShZaXx8KFlpPXt9KSk7dmFyIFppOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5BdXRvPTJdPSJBdXRvIn0pKFppfHwoWmk9e30pKTt2YXIgS2k7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifSkoS2l8fChLaT17fSkpO3ZhciBlcjsoZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KShlcnx8KGVyPXt9KSk7dmFyIHRyOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KSh0cnx8KHRyPXt9KSk7dmFyIG5yOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KShucnx8KG5yPXt9KSk7dmFyIGlyOyhmdW5jdGlvbihlKXtlW2UuRVhBQ1Q9MF09IkVYQUNUIixlW2UuQUJPVkU9MV09IkFCT1ZFIixlW2UuQkVMT1c9Ml09IkJFTE9XIn0pKGlyfHwoaXI9e30pKTt2YXIgcnI7KGZ1bmN0aW9uKGUpe2VbZS5Ob3RTZXQ9MF09Ik5vdFNldCIsZVtlLkNvbnRlbnRGbHVzaD0xXT0iQ29udGVudEZsdXNoIixlW2UuUmVjb3ZlckZyb21NYXJrZXJzPTJdPSJSZWNvdmVyRnJvbU1hcmtlcnMiLGVbZS5FeHBsaWNpdD0zXT0iRXhwbGljaXQiLGVbZS5QYXN0ZT00XT0iUGFzdGUiLGVbZS5VbmRvPTVdPSJVbmRvIixlW2UuUmVkbz02XT0iUmVkbyJ9KShycnx8KHJyPXt9KSk7dmFyIGFyOyhmdW5jdGlvbihlKXtlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KShhcnx8KGFyPXt9KSk7dmFyIHNyOyhmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifSkoc3J8fChzcj17fSkpO3ZhciBvcjsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwPTFdPSJLZWVwIixlW2UuQnJhY2tldHM9Ml09IkJyYWNrZXRzIixlW2UuQWR2YW5jZWQ9M109IkFkdmFuY2VkIixlW2UuRnVsbD00XT0iRnVsbCJ9KShvcnx8KG9yPXt9KSk7dmFyIGxyOyhmdW5jdGlvbihlKXtlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyPTBdPSJhY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXIiLGVbZS5hY2NlcHRTdWdnZXN0aW9uT25FbnRlcj0xXT0iYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXIiLGVbZS5hY2Nlc3NpYmlsaXR5U3VwcG9ydD0yXT0iYWNjZXNzaWJpbGl0eVN1cHBvcnQiLGVbZS5hY2Nlc3NpYmlsaXR5UGFnZVNpemU9M109ImFjY2Vzc2liaWxpdHlQYWdlU2l6ZSIsZVtlLmFyaWFMYWJlbD00XT0iYXJpYUxhYmVsIixlW2UuYXJpYVJlcXVpcmVkPTVdPSJhcmlhUmVxdWlyZWQiLGVbZS5hdXRvQ2xvc2luZ0JyYWNrZXRzPTZdPSJhdXRvQ2xvc2luZ0JyYWNrZXRzIixlW2UuYXV0b0Nsb3NpbmdDb21tZW50cz03XT0iYXV0b0Nsb3NpbmdDb21tZW50cyIsZVtlLnNjcmVlblJlYWRlckFubm91bmNlSW5saW5lU3VnZ2VzdGlvbj04XT0ic2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9OV09ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT0xMF09ImF1dG9DbG9zaW5nT3ZlcnR5cGUiLGVbZS5hdXRvQ2xvc2luZ1F1b3Rlcz0xMV09ImF1dG9DbG9zaW5nUXVvdGVzIixlW2UuYXV0b0luZGVudD0xMl09ImF1dG9JbmRlbnQiLGVbZS5hdXRvbWF0aWNMYXlvdXQ9MTNdPSJhdXRvbWF0aWNMYXlvdXQiLGVbZS5hdXRvU3Vycm91bmQ9MTRdPSJhdXRvU3Vycm91bmQiLGVbZS5icmFja2V0UGFpckNvbG9yaXphdGlvbj0xNV09ImJyYWNrZXRQYWlyQ29sb3JpemF0aW9uIixlW2UuZ3VpZGVzPTE2XT0iZ3VpZGVzIixlW2UuY29kZUxlbnM9MTddPSJjb2RlTGVucyIsZVtlLmNvZGVMZW5zRm9udEZhbWlseT0xOF09ImNvZGVMZW5zRm9udEZhbWlseSIsZVtlLmNvZGVMZW5zRm9udFNpemU9MTldPSJjb2RlTGVuc0ZvbnRTaXplIixlW2UuY29sb3JEZWNvcmF0b3JzPTIwXT0iY29sb3JEZWNvcmF0b3JzIixlW2UuY29sb3JEZWNvcmF0b3JzTGltaXQ9MjFdPSJjb2xvckRlY29yYXRvcnNMaW1pdCIsZVtlLmNvbHVtblNlbGVjdGlvbj0yMl09ImNvbHVtblNlbGVjdGlvbiIsZVtlLmNvbW1lbnRzPTIzXT0iY29tbWVudHMiLGVbZS5jb250ZXh0bWVudT0yNF09ImNvbnRleHRtZW51IixlW2UuY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmc9MjVdPSJjb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZyIsZVtlLmN1cnNvckJsaW5raW5nPTI2XT0iY3Vyc29yQmxpbmtpbmciLGVbZS5jdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbj0yN109ImN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uIixlW2UuY3Vyc29yU3R5bGU9MjhdPSJjdXJzb3JTdHlsZSIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXM9MjldPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlPTMwXT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlIixlW2UuY3Vyc29yV2lkdGg9MzFdPSJjdXJzb3JXaWR0aCIsZVtlLmRpc2FibGVMYXllckhpbnRpbmc9MzJdPSJkaXNhYmxlTGF5ZXJIaW50aW5nIixlW2UuZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnM9MzNdPSJkaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucyIsZVtlLmRvbVJlYWRPbmx5PTM0XT0iZG9tUmVhZE9ubHkiLGVbZS5kcmFnQW5kRHJvcD0zNV09ImRyYWdBbmREcm9wIixlW2UuZHJvcEludG9FZGl0b3I9MzZdPSJkcm9wSW50b0VkaXRvciIsZVtlLmVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkPTM3XT0iZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5leHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nPTM4XT0iZXhwZXJpbWVudGFsV2hpdGVzcGFjZVJlbmRlcmluZyIsZVtlLmV4dHJhRWRpdG9yQ2xhc3NOYW1lPTM5XT0iZXh0cmFFZGl0b3JDbGFzc05hbWUiLGVbZS5mYXN0U2Nyb2xsU2Vuc2l0aXZpdHk9NDBdPSJmYXN0U2Nyb2xsU2Vuc2l0aXZpdHkiLGVbZS5maW5kPTQxXT0iZmluZCIsZVtlLmZpeGVkT3ZlcmZsb3dXaWRnZXRzPTQyXT0iZml4ZWRPdmVyZmxvd1dpZGdldHMiLGVbZS5mb2xkaW5nPTQzXT0iZm9sZGluZyIsZVtlLmZvbGRpbmdTdHJhdGVneT00NF09ImZvbGRpbmdTdHJhdGVneSIsZVtlLmZvbGRpbmdIaWdobGlnaHQ9NDVdPSJmb2xkaW5nSGlnaGxpZ2h0IixlW2UuZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQ9NDZdPSJmb2xkaW5nSW1wb3J0c0J5RGVmYXVsdCIsZVtlLmZvbGRpbmdNYXhpbXVtUmVnaW9ucz00N109ImZvbGRpbmdNYXhpbXVtUmVnaW9ucyIsZVtlLnVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZT00OF09InVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZSIsZVtlLmZvbnRGYW1pbHk9NDldPSJmb250RmFtaWx5IixlW2UuZm9udEluZm89NTBdPSJmb250SW5mbyIsZVtlLmZvbnRMaWdhdHVyZXM9NTFdPSJmb250TGlnYXR1cmVzIixlW2UuZm9udFNpemU9NTJdPSJmb250U2l6ZSIsZVtlLmZvbnRXZWlnaHQ9NTNdPSJmb250V2VpZ2h0IixlW2UuZm9udFZhcmlhdGlvbnM9NTRdPSJmb250VmFyaWF0aW9ucyIsZVtlLmZvcm1hdE9uUGFzdGU9NTVdPSJmb3JtYXRPblBhc3RlIixlW2UuZm9ybWF0T25UeXBlPTU2XT0iZm9ybWF0T25UeXBlIixlW2UuZ2x5cGhNYXJnaW49NTddPSJnbHlwaE1hcmdpbiIsZVtlLmdvdG9Mb2NhdGlvbj01OF09ImdvdG9Mb2NhdGlvbiIsZVtlLmhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXI9NTldPSJoaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyIixlW2UuaG92ZXI9NjBdPSJob3ZlciIsZVtlLmluRGlmZkVkaXRvcj02MV09ImluRGlmZkVkaXRvciIsZVtlLmlubGluZVN1Z2dlc3Q9NjJdPSJpbmxpbmVTdWdnZXN0IixlW2UuaW5saW5lRWRpdD02M109ImlubGluZUVkaXQiLGVbZS5sZXR0ZXJTcGFjaW5nPTY0XT0ibGV0dGVyU3BhY2luZyIsZVtlLmxpZ2h0YnVsYj02NV09ImxpZ2h0YnVsYiIsZVtlLmxpbmVEZWNvcmF0aW9uc1dpZHRoPTY2XT0ibGluZURlY29yYXRpb25zV2lkdGgiLGVbZS5saW5lSGVpZ2h0PTY3XT0ibGluZUhlaWdodCIsZVtlLmxpbmVOdW1iZXJzPTY4XT0ibGluZU51bWJlcnMiLGVbZS5saW5lTnVtYmVyc01pbkNoYXJzPTY5XT0ibGluZU51bWJlcnNNaW5DaGFycyIsZVtlLmxpbmtlZEVkaXRpbmc9NzBdPSJsaW5rZWRFZGl0aW5nIixlW2UubGlua3M9NzFdPSJsaW5rcyIsZVtlLm1hdGNoQnJhY2tldHM9NzJdPSJtYXRjaEJyYWNrZXRzIixlW2UubWluaW1hcD03M109Im1pbmltYXAiLGVbZS5tb3VzZVN0eWxlPTc0XT0ibW91c2VTdHlsZSIsZVtlLm1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eT03NV09Im1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eSIsZVtlLm1vdXNlV2hlZWxab29tPTc2XT0ibW91c2VXaGVlbFpvb20iLGVbZS5tdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmc9NzddPSJtdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmciLGVbZS5tdWx0aUN1cnNvck1vZGlmaWVyPTc4XT0ibXVsdGlDdXJzb3JNb2RpZmllciIsZVtlLm11bHRpQ3Vyc29yUGFzdGU9NzldPSJtdWx0aUN1cnNvclBhc3RlIixlW2UubXVsdGlDdXJzb3JMaW1pdD04MF09Im11bHRpQ3Vyc29yTGltaXQiLGVbZS5vY2N1cnJlbmNlc0hpZ2hsaWdodD04MV09Im9jY3VycmVuY2VzSGlnaGxpZ2h0IixlW2Uub3ZlcnZpZXdSdWxlckJvcmRlcj04Ml09Im92ZXJ2aWV3UnVsZXJCb3JkZXIiLGVbZS5vdmVydmlld1J1bGVyTGFuZXM9ODNdPSJvdmVydmlld1J1bGVyTGFuZXMiLGVbZS5wYWRkaW5nPTg0XT0icGFkZGluZyIsZVtlLnBhc3RlQXM9ODVdPSJwYXN0ZUFzIixlW2UucGFyYW1ldGVySGludHM9ODZdPSJwYXJhbWV0ZXJIaW50cyIsZVtlLnBlZWtXaWRnZXREZWZhdWx0Rm9jdXM9ODddPSJwZWVrV2lkZ2V0RGVmYXVsdEZvY3VzIixlW2UuZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlaz04OF09ImRlZmluaXRpb25MaW5rT3BlbnNJblBlZWsiLGVbZS5xdWlja1N1Z2dlc3Rpb25zPTg5XT0icXVpY2tTdWdnZXN0aW9ucyIsZVtlLnF1aWNrU3VnZ2VzdGlvbnNEZWxheT05MF09InF1aWNrU3VnZ2VzdGlvbnNEZWxheSIsZVtlLnJlYWRPbmx5PTkxXT0icmVhZE9ubHkiLGVbZS5yZWFkT25seU1lc3NhZ2U9OTJdPSJyZWFkT25seU1lc3NhZ2UiLGVbZS5yZW5hbWVPblR5cGU9OTNdPSJyZW5hbWVPblR5cGUiLGVbZS5yZW5kZXJDb250cm9sQ2hhcmFjdGVycz05NF09InJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzIixlW2UucmVuZGVyRmluYWxOZXdsaW5lPTk1XT0icmVuZGVyRmluYWxOZXdsaW5lIixlW2UucmVuZGVyTGluZUhpZ2hsaWdodD05Nl09InJlbmRlckxpbmVIaWdobGlnaHQiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cz05N109InJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzIixlW2UucmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zPTk4XT0icmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zIixlW2UucmVuZGVyV2hpdGVzcGFjZT05OV09InJlbmRlcldoaXRlc3BhY2UiLGVbZS5yZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nPTEwMF09InJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmciLGVbZS5yb3VuZGVkU2VsZWN0aW9uPTEwMV09InJvdW5kZWRTZWxlY3Rpb24iLGVbZS5ydWxlcnM9MTAyXT0icnVsZXJzIixlW2Uuc2Nyb2xsYmFyPTEwM109InNjcm9sbGJhciIsZVtlLnNjcm9sbEJleW9uZExhc3RDb2x1bW49MTA0XT0ic2Nyb2xsQmV5b25kTGFzdENvbHVtbiIsZVtlLnNjcm9sbEJleW9uZExhc3RMaW5lPTEwNV09InNjcm9sbEJleW9uZExhc3RMaW5lIixlW2Uuc2Nyb2xsUHJlZG9taW5hbnRBeGlzPTEwNl09InNjcm9sbFByZWRvbWluYW50QXhpcyIsZVtlLnNlbGVjdGlvbkNsaXBib2FyZD0xMDddPSJzZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5zZWxlY3Rpb25IaWdobGlnaHQ9MTA4XT0ic2VsZWN0aW9uSGlnaGxpZ2h0IixlW2Uuc2VsZWN0T25MaW5lTnVtYmVycz0xMDldPSJzZWxlY3RPbkxpbmVOdW1iZXJzIixlW2Uuc2hvd0ZvbGRpbmdDb250cm9scz0xMTBdPSJzaG93Rm9sZGluZ0NvbnRyb2xzIixlW2Uuc2hvd1VudXNlZD0xMTFdPSJzaG93VW51c2VkIixlW2Uuc25pcHBldFN1Z2dlc3Rpb25zPTExMl09InNuaXBwZXRTdWdnZXN0aW9ucyIsZVtlLnNtYXJ0U2VsZWN0PTExM109InNtYXJ0U2VsZWN0IixlW2Uuc21vb3RoU2Nyb2xsaW5nPTExNF09InNtb290aFNjcm9sbGluZyIsZVtlLnN0aWNreVNjcm9sbD0xMTVdPSJzdGlja3lTY3JvbGwiLGVbZS5zdGlja3lUYWJTdG9wcz0xMTZdPSJzdGlja3lUYWJTdG9wcyIsZVtlLnN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXI9MTE3XT0ic3RvcFJlbmRlcmluZ0xpbmVBZnRlciIsZVtlLnN1Z2dlc3Q9MTE4XT0ic3VnZ2VzdCIsZVtlLnN1Z2dlc3RGb250U2l6ZT0xMTldPSJzdWdnZXN0Rm9udFNpemUiLGVbZS5zdWdnZXN0TGluZUhlaWdodD0xMjBdPSJzdWdnZXN0TGluZUhlaWdodCIsZVtlLnN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzPTEyMV09InN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzIixlW2Uuc3VnZ2VzdFNlbGVjdGlvbj0xMjJdPSJzdWdnZXN0U2VsZWN0aW9uIixlW2UudGFiQ29tcGxldGlvbj0xMjNdPSJ0YWJDb21wbGV0aW9uIixlW2UudGFiSW5kZXg9MTI0XT0idGFiSW5kZXgiLGVbZS51bmljb2RlSGlnaGxpZ2h0aW5nPTEyNV09InVuaWNvZGVIaWdobGlnaHRpbmciLGVbZS51bnVzdWFsTGluZVRlcm1pbmF0b3JzPTEyNl09InVudXN1YWxMaW5lVGVybWluYXRvcnMiLGVbZS51c2VTaGFkb3dET009MTI3XT0idXNlU2hhZG93RE9NIixlW2UudXNlVGFiU3RvcHM9MTI4XT0idXNlVGFiU3RvcHMiLGVbZS53b3JkQnJlYWs9MTI5XT0id29yZEJyZWFrIixlW2Uud29yZFNlZ21lbnRlckxvY2FsZXM9MTMwXT0id29yZFNlZ21lbnRlckxvY2FsZXMiLGVbZS53b3JkU2VwYXJhdG9ycz0xMzFdPSJ3b3JkU2VwYXJhdG9ycyIsZVtlLndvcmRXcmFwPTEzMl09IndvcmRXcmFwIixlW2Uud29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycz0xMzNdPSJ3b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnM9MTM0XT0id29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcENvbHVtbj0xMzVdPSJ3b3JkV3JhcENvbHVtbiIsZVtlLndvcmRXcmFwT3ZlcnJpZGUxPTEzNl09IndvcmRXcmFwT3ZlcnJpZGUxIixlW2Uud29yZFdyYXBPdmVycmlkZTI9MTM3XT0id29yZFdyYXBPdmVycmlkZTIiLGVbZS53cmFwcGluZ0luZGVudD0xMzhdPSJ3cmFwcGluZ0luZGVudCIsZVtlLndyYXBwaW5nU3RyYXRlZ3k9MTM5XT0id3JhcHBpbmdTdHJhdGVneSIsZVtlLnNob3dEZXByZWNhdGVkPTE0MF09InNob3dEZXByZWNhdGVkIixlW2UuaW5sYXlIaW50cz0xNDFdPSJpbmxheUhpbnRzIixlW2UuZWRpdG9yQ2xhc3NOYW1lPTE0Ml09ImVkaXRvckNsYXNzTmFtZSIsZVtlLnBpeGVsUmF0aW89MTQzXT0icGl4ZWxSYXRpbyIsZVtlLnRhYkZvY3VzTW9kZT0xNDRdPSJ0YWJGb2N1c01vZGUiLGVbZS5sYXlvdXRJbmZvPTE0NV09ImxheW91dEluZm8iLGVbZS53cmFwcGluZ0luZm89MTQ2XT0id3JhcHBpbmdJbmZvIixlW2UuZGVmYXVsdENvbG9yRGVjb3JhdG9ycz0xNDddPSJkZWZhdWx0Q29sb3JEZWNvcmF0b3JzIixlW2UuY29sb3JEZWNvcmF0b3JzQWN0aXZhdGVkT249MTQ4XT0iY29sb3JEZWNvcmF0b3JzQWN0aXZhdGVkT24iLGVbZS5pbmxpbmVDb21wbGV0aW9uc0FjY2Vzc2liaWxpdHlWZXJib3NlPTE0OV09ImlubGluZUNvbXBsZXRpb25zQWNjZXNzaWJpbGl0eVZlcmJvc2UifSkobHJ8fChscj17fSkpO3ZhciB1cjsoZnVuY3Rpb24oZSl7ZVtlLlRleHREZWZpbmVkPTBdPSJUZXh0RGVmaW5lZCIsZVtlLkxGPTFdPSJMRiIsZVtlLkNSTEY9Ml09IkNSTEYifSkodXJ8fCh1cj17fSkpO3ZhciBjcjsoZnVuY3Rpb24oZSl7ZVtlLkxGPTBdPSJMRiIsZVtlLkNSTEY9MV09IkNSTEYifSkoY3J8fChjcj17fSkpO3ZhciBocjsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTNdPSJSaWdodCJ9KShocnx8KGhyPXt9KSk7dmFyIGRyOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkluZGVudD0xXT0iSW5kZW50IixlW2UuSW5kZW50T3V0ZGVudD0yXT0iSW5kZW50T3V0ZGVudCIsZVtlLk91dGRlbnQ9M109Ik91dGRlbnQifSkoZHJ8fChkcj17fSkpO3ZhciBtcjsoZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KShtcnx8KG1yPXt9KSk7dmFyIGZyOyhmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0pKGZyfHwoZnI9e30pKTt2YXIgcHI7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KShwcnx8KHByPXt9KSk7dmFyIGdyOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KShncnx8KGdyPXt9KSk7dmFyIEJuOyhmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIsZVtlLlRhYj0yXT0iVGFiIixlW2UuRW50ZXI9M109IkVudGVyIixlW2UuU2hpZnQ9NF09IlNoaWZ0IixlW2UuQ3RybD01XT0iQ3RybCIsZVtlLkFsdD02XT0iQWx0IixlW2UuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIsZVtlLkNhcHNMb2NrPThdPSJDYXBzTG9jayIsZVtlLkVzY2FwZT05XT0iRXNjYXBlIixlW2UuU3BhY2U9MTBdPSJTcGFjZSIsZVtlLlBhZ2VVcD0xMV09IlBhZ2VVcCIsZVtlLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLGVbZS5FbmQ9MTNdPSJFbmQiLGVbZS5Ib21lPTE0XT0iSG9tZSIsZVtlLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIsZVtlLlVwQXJyb3c9MTZdPSJVcEFycm93IixlW2UuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLGVbZS5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLGVbZS5JbnNlcnQ9MTldPSJJbnNlcnQiLGVbZS5EZWxldGU9MjBdPSJEZWxldGUiLGVbZS5EaWdpdDA9MjFdPSJEaWdpdDAiLGVbZS5EaWdpdDE9MjJdPSJEaWdpdDEiLGVbZS5EaWdpdDI9MjNdPSJEaWdpdDIiLGVbZS5EaWdpdDM9MjRdPSJEaWdpdDMiLGVbZS5EaWdpdDQ9MjVdPSJEaWdpdDQiLGVbZS5EaWdpdDU9MjZdPSJEaWdpdDUiLGVbZS5EaWdpdDY9MjddPSJEaWdpdDYiLGVbZS5EaWdpdDc9MjhdPSJEaWdpdDciLGVbZS5EaWdpdDg9MjldPSJEaWdpdDgiLGVbZS5EaWdpdDk9MzBdPSJEaWdpdDkiLGVbZS5LZXlBPTMxXT0iS2V5QSIsZVtlLktleUI9MzJdPSJLZXlCIixlW2UuS2V5Qz0zM109IktleUMiLGVbZS5LZXlEPTM0XT0iS2V5RCIsZVtlLktleUU9MzVdPSJLZXlFIixlW2UuS2V5Rj0zNl09IktleUYiLGVbZS5LZXlHPTM3XT0iS2V5RyIsZVtlLktleUg9MzhdPSJLZXlIIixlW2UuS2V5ST0zOV09IktleUkiLGVbZS5LZXlKPTQwXT0iS2V5SiIsZVtlLktleUs9NDFdPSJLZXlLIixlW2UuS2V5TD00Ml09IktleUwiLGVbZS5LZXlNPTQzXT0iS2V5TSIsZVtlLktleU49NDRdPSJLZXlOIixlW2UuS2V5Tz00NV09IktleU8iLGVbZS5LZXlQPTQ2XT0iS2V5UCIsZVtlLktleVE9NDddPSJLZXlRIixlW2UuS2V5Uj00OF09IktleVIiLGVbZS5LZXlTPTQ5XT0iS2V5UyIsZVtlLktleVQ9NTBdPSJLZXlUIixlW2UuS2V5VT01MV09IktleVUiLGVbZS5LZXlWPTUyXT0iS2V5ViIsZVtlLktleVc9NTNdPSJLZXlXIixlW2UuS2V5WD01NF09IktleVgiLGVbZS5LZXlZPTU1XT0iS2V5WSIsZVtlLktleVo9NTZdPSJLZXlaIixlW2UuTWV0YT01N109Ik1ldGEiLGVbZS5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixlW2UuRjE9NTldPSJGMSIsZVtlLkYyPTYwXT0iRjIiLGVbZS5GMz02MV09IkYzIixlW2UuRjQ9NjJdPSJGNCIsZVtlLkY1PTYzXT0iRjUiLGVbZS5GNj02NF09IkY2IixlW2UuRjc9NjVdPSJGNyIsZVtlLkY4PTY2XT0iRjgiLGVbZS5GOT02N109IkY5IixlW2UuRjEwPTY4XT0iRjEwIixlW2UuRjExPTY5XT0iRjExIixlW2UuRjEyPTcwXT0iRjEyIixlW2UuRjEzPTcxXT0iRjEzIixlW2UuRjE0PTcyXT0iRjE0IixlW2UuRjE1PTczXT0iRjE1IixlW2UuRjE2PTc0XT0iRjE2IixlW2UuRjE3PTc1XT0iRjE3IixlW2UuRjE4PTc2XT0iRjE4IixlW2UuRjE5PTc3XT0iRjE5IixlW2UuRjIwPTc4XT0iRjIwIixlW2UuRjIxPTc5XT0iRjIxIixlW2UuRjIyPTgwXT0iRjIyIixlW2UuRjIzPTgxXT0iRjIzIixlW2UuRjI0PTgyXT0iRjI0IixlW2UuTnVtTG9jaz04M109Ik51bUxvY2siLGVbZS5TY3JvbGxMb2NrPTg0XT0iU2Nyb2xsTG9jayIsZVtlLlNlbWljb2xvbj04NV09IlNlbWljb2xvbiIsZVtlLkVxdWFsPTg2XT0iRXF1YWwiLGVbZS5Db21tYT04N109IkNvbW1hIixlW2UuTWludXM9ODhdPSJNaW51cyIsZVtlLlBlcmlvZD04OV09IlBlcmlvZCIsZVtlLlNsYXNoPTkwXT0iU2xhc2giLGVbZS5CYWNrcXVvdGU9OTFdPSJCYWNrcXVvdGUiLGVbZS5CcmFja2V0TGVmdD05Ml09IkJyYWNrZXRMZWZ0IixlW2UuQmFja3NsYXNoPTkzXT0iQmFja3NsYXNoIixlW2UuQnJhY2tldFJpZ2h0PTk0XT0iQnJhY2tldFJpZ2h0IixlW2UuUXVvdGU9OTVdPSJRdW90ZSIsZVtlLk9FTV84PTk2XT0iT0VNXzgiLGVbZS5JbnRsQmFja3NsYXNoPTk3XT0iSW50bEJhY2tzbGFzaCIsZVtlLk51bXBhZDA9OThdPSJOdW1wYWQwIixlW2UuTnVtcGFkMT05OV09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTEwMF09Ik51bXBhZDIiLGVbZS5OdW1wYWQzPTEwMV09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTEwMl09Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTEwM109Ik51bXBhZDUiLGVbZS5OdW1wYWQ2PTEwNF09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwNV09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwNl09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwN109Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDhdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDldPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTExMF09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMTFdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTEyXT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMTNdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTE0XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTVdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTZdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExN109IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTE4XT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTldPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTEyMF09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMjFdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTEyMl09IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTIzXT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMjRdPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjVdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTI2XT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTI3XT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjhdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI5XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTMwXT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEzMV09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEzMl09Ik1BWF9WQUxVRSJ9KShCbnx8KEJuPXt9KSk7dmFyIHFuOyhmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0pKHFufHwocW49e30pKTt2YXIgT247KGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0pKE9ufHwoT249e30pKTt2YXIgYnI7KGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0pKGJyfHwoYnI9e30pKTt2YXIgdnI7KGZ1bmN0aW9uKGUpe2VbZS5Ob3JtYWw9MV09Ik5vcm1hbCIsZVtlLlVuZGVybGluZWQ9Ml09IlVuZGVybGluZWQifSkodnJ8fCh2cj17fSkpO3ZhciBfcjsoZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09IlVOS05PV04iLGVbZS5URVhUQVJFQT0xXT0iVEVYVEFSRUEiLGVbZS5HVVRURVJfR0xZUEhfTUFSR0lOPTJdPSJHVVRURVJfR0xZUEhfTUFSR0lOIixlW2UuR1VUVEVSX0xJTkVfTlVNQkVSUz0zXT0iR1VUVEVSX0xJTkVfTlVNQkVSUyIsZVtlLkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TPTRdPSJHVVRURVJfTElORV9ERUNPUkFUSU9OUyIsZVtlLkdVVFRFUl9WSUVXX1pPTkU9NV09IkdVVFRFUl9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1RFWFQ9Nl09IkNPTlRFTlRfVEVYVCIsZVtlLkNPTlRFTlRfRU1QVFk9N109IkNPTlRFTlRfRU1QVFkiLGVbZS5DT05URU5UX1ZJRVdfWk9ORT04XT0iQ09OVEVOVF9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1dJREdFVD05XT0iQ09OVEVOVF9XSURHRVQiLGVbZS5PVkVSVklFV19SVUxFUj0xMF09Ik9WRVJWSUVXX1JVTEVSIixlW2UuU0NST0xMQkFSPTExXT0iU0NST0xMQkFSIixlW2UuT1ZFUkxBWV9XSURHRVQ9MTJdPSJPVkVSTEFZX1dJREdFVCIsZVtlLk9VVFNJREVfRURJVE9SPTEzXT0iT1VUU0lERV9FRElUT1IifSkoX3J8fChfcj17fSkpO3ZhciB3cjsoZnVuY3Rpb24oZSl7ZVtlLkFJR2VuZXJhdGVkPTFdPSJBSUdlbmVyYXRlZCJ9KSh3cnx8KHdyPXt9KSk7dmFyIHlyOyhmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0pKHlyfHwoeXI9e30pKTt2YXIgeHI7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0pKHhyfHwoeHI9e30pKTt2YXIgVHI7KGZ1bmN0aW9uKGUpe2VbZS5Xb3JkPTBdPSJXb3JkIixlW2UuTGluZT0xXT0iTGluZSIsZVtlLlN1Z2dlc3Q9Ml09IlN1Z2dlc3QifSkoVHJ8fChUcj17fSkpO3ZhciBrcjsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MF09IkxlZnQiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5Ob25lPTJdPSJOb25lIixlW2UuTGVmdE9mSW5qZWN0ZWRUZXh0PTNdPSJMZWZ0T2ZJbmplY3RlZFRleHQiLGVbZS5SaWdodE9mSW5qZWN0ZWRUZXh0PTRdPSJSaWdodE9mSW5qZWN0ZWRUZXh0In0pKGtyfHwoa3I9e30pKTt2YXIgQXI7KGZ1bmN0aW9uKGUpe2VbZS5PZmY9MF09Ik9mZiIsZVtlLk9uPTFdPSJPbiIsZVtlLlJlbGF0aXZlPTJdPSJSZWxhdGl2ZSIsZVtlLkludGVydmFsPTNdPSJJbnRlcnZhbCIsZVtlLkN1c3RvbT00XT0iQ3VzdG9tIn0pKEFyfHwoQXI9e30pKTt2YXIgU3I7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuVGV4dD0xXT0iVGV4dCIsZVtlLkJsb2Nrcz0yXT0iQmxvY2tzIn0pKFNyfHwoU3I9e30pKTt2YXIgTHI7KGZ1bmN0aW9uKGUpe2VbZS5TbW9vdGg9MF09IlNtb290aCIsZVtlLkltbWVkaWF0ZT0xXT0iSW1tZWRpYXRlIn0pKExyfHwoTHI9e30pKTt2YXIgQ3I7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvPTFdPSJBdXRvIixlW2UuSGlkZGVuPTJdPSJIaWRkZW4iLGVbZS5WaXNpYmxlPTNdPSJWaXNpYmxlIn0pKENyfHwoQ3I9e30pKTt2YXIgVm47KGZ1bmN0aW9uKGUpe2VbZS5MVFI9MF09IkxUUiIsZVtlLlJUTD0xXT0iUlRMIn0pKFZufHwoVm49e30pKTt2YXIgRXI7KGZ1bmN0aW9uKGUpe2UuT2ZmPSJvZmYiLGUuT25Db2RlPSJvbkNvZGUiLGUuT249Im9uIn0pKEVyfHwoRXI9e30pKTt2YXIgUnI7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0pKFJyfHwoUnI9e30pKTt2YXIgTXI7KGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KShNcnx8KE1yPXt9KSk7dmFyIERyOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KShEcnx8KERyPXt9KSk7dmFyIE5yOyhmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0pKE5yfHwoTnI9e30pKTt2YXIgSXI7KGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifSkoSXJ8fChJcj17fSkpO3ZhciB6cjsoZnVuY3Rpb24oZSl7ZVtlLkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXM9MF09IkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5OZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXM9MV09Ik5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmU9Ml09Ikdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmUiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXI9M109Ikdyb3dzT25seVdoZW5UeXBpbmdBZnRlciJ9KSh6cnx8KHpyPXt9KSk7dmFyIEhyOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlNhbWU9MV09IlNhbWUiLGVbZS5JbmRlbnQ9Ml09IkluZGVudCIsZVtlLkRlZXBJbmRlbnQ9M109IkRlZXBJbmRlbnQifSkoSHJ8fChIcj17fSkpO2NsYXNzIGt0e3N0YXRpYyBjaG9yZCh0LG4pe3JldHVybiBxbyh0LG4pfX1rdC5DdHJsQ21kPTIwNDgsa3QuU2hpZnQ9MTAyNCxrdC5BbHQ9NTEyLGt0LldpbkN0cmw9MjU2O2Z1bmN0aW9uIFhvKCl7cmV0dXJue2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTpXbyxFbWl0dGVyOkFlLEtleUNvZGU6Qm4sS2V5TW9kOmt0LFBvc2l0aW9uOk5lLFJhbmdlOm9lLFNlbGVjdGlvbjp2ZSxTZWxlY3Rpb25EaXJlY3Rpb246Vm4sTWFya2VyU2V2ZXJpdHk6cW4sTWFya2VyVGFnOk9uLFVyaTpNbixUb2tlbjokb319dmFyIFVyO2NsYXNzIEpve2NvbnN0cnVjdG9yKCl7dGhpc1tVcl09IkxpbmtlZE1hcCIsdGhpcy5fbWFwPW5ldyBNYXAsdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDAsdGhpcy5fc2l6ZT0wLHRoaXMuX3N0YXRlPTB9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKSx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGUrK31pc0VtcHR5KCl7cmV0dXJuIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9Z2V0IGZpcnN0KCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5faGVhZCk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LnZhbHVlfWdldCBsYXN0KCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5fdGFpbCk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LnZhbHVlfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX1nZXQodCxuPTApe2NvbnN0IGk9dGhpcy5fbWFwLmdldCh0KTtpZihpKXJldHVybiBuIT09MCYmdGhpcy50b3VjaChpLG4pLGkudmFsdWV9c2V0KHQsbixpPTApe2xldCByPXRoaXMuX21hcC5nZXQodCk7aWYocilyLnZhbHVlPW4saSE9PTAmJnRoaXMudG91Y2gocixpKTtlbHNle3N3aXRjaChyPXtrZXk6dCx2YWx1ZTpuLG5leHQ6dm9pZCAwLHByZXZpb3VzOnZvaWQgMH0saSl7Y2FzZSAwOnRoaXMuYWRkSXRlbUxhc3Qocik7YnJlYWs7Y2FzZSAxOnRoaXMuYWRkSXRlbUZpcnN0KHIpO2JyZWFrO2Nhc2UgMjp0aGlzLmFkZEl0ZW1MYXN0KHIpO2JyZWFrO2RlZmF1bHQ6dGhpcy5hZGRJdGVtTGFzdChyKTticmVha310aGlzLl9tYXAuc2V0KHQsciksdGhpcy5fc2l6ZSsrfXJldHVybiB0aGlzfWRlbGV0ZSh0KXtyZXR1cm4hIXRoaXMucmVtb3ZlKHQpfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7aWYobilyZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZSh0KSx0aGlzLnJlbW92ZUl0ZW0obiksdGhpcy5fc2l6ZS0tLG4udmFsdWV9c2hpZnQoKXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpcmV0dXJuO2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2NvbnN0IHQ9dGhpcy5faGVhZDtyZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZSh0LmtleSksdGhpcy5yZW1vdmVJdGVtKHQpLHRoaXMuX3NpemUtLSx0LnZhbHVlfWZvckVhY2godCxuKXtjb25zdCBpPXRoaXMuX3N0YXRlO2xldCByPXRoaXMuX2hlYWQ7Zm9yKDtyOyl7aWYobj90LmJpbmQobikoci52YWx1ZSxyLmtleSx0aGlzKTp0KHIudmFsdWUsci5rZXksdGhpcyksdGhpcy5fc3RhdGUhPT1pKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO3I9ci5uZXh0fX1rZXlzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IGk9dGhpcy5faGVhZDtjb25zdCByPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiByfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKGkpe2NvbnN0IGE9e3ZhbHVlOmkua2V5LGRvbmU6ITF9O3JldHVybiBpPWkubmV4dCxhfWVsc2UgcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfXZhbHVlcygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCBpPXRoaXMuX2hlYWQ7Y29uc3Qgcj17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gcn0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihpKXtjb25zdCBhPXt2YWx1ZTppLnZhbHVlLGRvbmU6ITF9O3JldHVybiBpPWkubmV4dCxhfWVsc2UgcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfWVudHJpZXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgaT10aGlzLl9oZWFkO2NvbnN0IHI9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHJ9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYoaSl7Y29uc3QgYT17dmFsdWU6W2kua2V5LGkudmFsdWVdLGRvbmU6ITF9O3JldHVybiBpPWkubmV4dCxhfWVsc2UgcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfVsoVXI9U3ltYm9sLnRvU3RyaW5nVGFnLFN5bWJvbC5pdGVyYXRvcildKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfXRyaW1PbGQodCl7aWYodD49dGhpcy5zaXplKXJldHVybjtpZih0PT09MCl7dGhpcy5jbGVhcigpO3JldHVybn1sZXQgbj10aGlzLl9oZWFkLGk9dGhpcy5zaXplO2Zvcig7biYmaT50Oyl0aGlzLl9tYXAuZGVsZXRlKG4ua2V5KSxuPW4ubmV4dCxpLS07dGhpcy5faGVhZD1uLHRoaXMuX3NpemU9aSxuJiYobi5wcmV2aW91cz12b2lkIDApLHRoaXMuX3N0YXRlKyt9YWRkSXRlbUZpcnN0KHQpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbCl0aGlzLl90YWlsPXQ7ZWxzZSBpZih0aGlzLl9oZWFkKXQubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9dDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dGhpcy5faGVhZD10LHRoaXMuX3N0YXRlKyt9YWRkSXRlbUxhc3QodCl7aWYoIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsKXRoaXMuX2hlYWQ9dDtlbHNlIGlmKHRoaXMuX3RhaWwpdC5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD10O2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0aGlzLl90YWlsPXQsdGhpcy5fc3RhdGUrK31yZW1vdmVJdGVtKHQpe2lmKHQ9PT10aGlzLl9oZWFkJiZ0PT09dGhpcy5fdGFpbCl0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMDtlbHNlIGlmKHQ9PT10aGlzLl9oZWFkKXtpZighdC5uZXh0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dC5uZXh0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPXQubmV4dH1lbHNlIGlmKHQ9PT10aGlzLl90YWlsKXtpZighdC5wcmV2aW91cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3QucHJldmlvdXMubmV4dD12b2lkIDAsdGhpcy5fdGFpbD10LnByZXZpb3VzfWVsc2V7Y29uc3Qgbj10Lm5leHQsaT10LnByZXZpb3VzO2lmKCFufHwhaSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO24ucHJldmlvdXM9aSxpLm5leHQ9bn10Lm5leHQ9dm9pZCAwLHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX3N0YXRlKyt9dG91Y2godCxuKXtpZighdGhpcy5faGVhZHx8IXRoaXMuX3RhaWwpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtpZighKG4hPT0xJiZuIT09Mikpe2lmKG49PT0xKXtpZih0PT09dGhpcy5faGVhZClyZXR1cm47Y29uc3QgaT10Lm5leHQscj10LnByZXZpb3VzO3Q9PT10aGlzLl90YWlsPyhyLm5leHQ9dm9pZCAwLHRoaXMuX3RhaWw9cik6KGkucHJldmlvdXM9cixyLm5leHQ9aSksdC5wcmV2aW91cz12b2lkIDAsdC5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz10LHRoaXMuX2hlYWQ9dCx0aGlzLl9zdGF0ZSsrfWVsc2UgaWYobj09PTIpe2lmKHQ9PT10aGlzLl90YWlsKXJldHVybjtjb25zdCBpPXQubmV4dCxyPXQucHJldmlvdXM7dD09PXRoaXMuX2hlYWQ/KGkucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9aSk6KGkucHJldmlvdXM9cixyLm5leHQ9aSksdC5uZXh0PXZvaWQgMCx0LnByZXZpb3VzPXRoaXMuX3RhaWwsdGhpcy5fdGFpbC5uZXh0PXQsdGhpcy5fdGFpbD10LHRoaXMuX3N0YXRlKyt9fX10b0pTT04oKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKG4saSk9Pnt0LnB1c2goW2ksbl0pfSksdH1mcm9tSlNPTih0KXt0aGlzLmNsZWFyKCk7Zm9yKGNvbnN0W24saV1vZiB0KXRoaXMuc2V0KG4saSl9fWNsYXNzIFFvIGV4dGVuZHMgSm97Y29uc3RydWN0b3IodCxuPTEpe3N1cGVyKCksdGhpcy5fbGltaXQ9dCx0aGlzLl9yYXRpbz1NYXRoLm1pbihNYXRoLm1heCgwLG4pLDEpfWdldCBsaW1pdCgpe3JldHVybiB0aGlzLl9saW1pdH1zZXQgbGltaXQodCl7dGhpcy5fbGltaXQ9dCx0aGlzLmNoZWNrVHJpbSgpfWdldCh0LG49Mil7cmV0dXJuIHN1cGVyLmdldCh0LG4pfXBlZWsodCl7cmV0dXJuIHN1cGVyLmdldCh0LDApfXNldCh0LG4pe3JldHVybiBzdXBlci5zZXQodCxuLDIpLHRoaXMuY2hlY2tUcmltKCksdGhpc31jaGVja1RyaW0oKXt0aGlzLnNpemU+dGhpcy5fbGltaXQmJnRoaXMudHJpbU9sZChNYXRoLnJvdW5kKHRoaXMuX2xpbWl0KnRoaXMuX3JhdGlvKSl9fWNsYXNzIFlve2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1hZGQodCxuKXtsZXQgaT10aGlzLm1hcC5nZXQodCk7aXx8KGk9bmV3IFNldCx0aGlzLm1hcC5zZXQodCxpKSksaS5hZGQobil9ZGVsZXRlKHQsbil7Y29uc3QgaT10aGlzLm1hcC5nZXQodCk7aSYmKGkuZGVsZXRlKG4pLGkuc2l6ZT09PTAmJnRoaXMubWFwLmRlbGV0ZSh0KSl9Zm9yRWFjaCh0LG4pe2NvbnN0IGk9dGhpcy5tYXAuZ2V0KHQpO2kmJmkuZm9yRWFjaChuKX1nZXQodCl7Y29uc3Qgbj10aGlzLm1hcC5nZXQodCk7cmV0dXJuIG58fG5ldyBTZXR9fW5ldyBRbygxMCk7dmFyIFdyOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KShXcnx8KFdyPXt9KSk7dmFyIEZyOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9M109IlJpZ2h0In0pKEZyfHwoRnI9e30pKTt2YXIgUHI7KGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifSkoUHJ8fChQcj17fSkpO2Z1bmN0aW9uIFpvKGUsdCxuLGkscil7aWYoaT09PTApcmV0dXJuITA7Y29uc3QgYT10LmNoYXJDb2RlQXQoaS0xKTtpZihlLmdldChhKSE9PTB8fGE9PT0xM3x8YT09PTEwKXJldHVybiEwO2lmKHI+MCl7Y29uc3Qgcz10LmNoYXJDb2RlQXQoaSk7aWYoZS5nZXQocykhPT0wKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEtvKGUsdCxuLGkscil7aWYoaStyPT09bilyZXR1cm4hMDtjb25zdCBhPXQuY2hhckNvZGVBdChpK3IpO2lmKGUuZ2V0KGEpIT09MHx8YT09PTEzfHxhPT09MTApcmV0dXJuITA7aWYocj4wKXtjb25zdCBzPXQuY2hhckNvZGVBdChpK3ItMSk7aWYoZS5nZXQocykhPT0wKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGVsKGUsdCxuLGkscil7cmV0dXJuIFpvKGUsdCxuLGkscikmJktvKGUsdCxuLGkscil9Y2xhc3MgdGx7Y29uc3RydWN0b3IodCxuKXt0aGlzLl93b3JkU2VwYXJhdG9ycz10LHRoaXMuX3NlYXJjaFJlZ2V4PW4sdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1yZXNldCh0KXt0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfW5leHQodCl7Y29uc3Qgbj10Lmxlbmd0aDtsZXQgaTtkb3tpZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4K3RoaXMuX3ByZXZNYXRjaExlbmd0aD09PW58fChpPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWModCksIWkpKXJldHVybiBudWxsO2NvbnN0IHI9aS5pbmRleCxhPWlbMF0ubGVuZ3RoO2lmKHI9PT10aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4JiZhPT09dGhpcy5fcHJldk1hdGNoTGVuZ3RoKXtpZihhPT09MCl7VnModCxuLHRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCk+NjU1MzU/dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0yOnRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9MTtjb250aW51ZX1yZXR1cm4gbnVsbH1pZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PXIsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPWEsIXRoaXMuX3dvcmRTZXBhcmF0b3JzfHxlbCh0aGlzLl93b3JkU2VwYXJhdG9ycyx0LG4scixhKSlyZXR1cm4gaX13aGlsZShpKTtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbmwoZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBZdChlKXtpZighZSgpKXtkZWJ1Z2dlcjtlKCksbWkobmV3IFVlKCJBc3NlcnRpb24gRmFpbGVkIikpfX1mdW5jdGlvbiBCcihlLHQpe2xldCBuPTA7Zm9yKDtuPGUubGVuZ3RoLTE7KXtjb25zdCBpPWVbbl0scj1lW24rMV07aWYoIXQoaSxyKSlyZXR1cm4hMTtuKyt9cmV0dXJuITB9Y2xhc3MgaWx7c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyh0LG4saSl7Y29uc3Qgcj1pP2kuc3RhcnRMaW5lTnVtYmVyOjEsYT1pP2kuZW5kTGluZU51bWJlcjp0LmdldExpbmVDb3VudCgpLHM9bmV3IHFyKG4pLG89cy5nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCk7bGV0IGw7bz09PSJhbGxOb25CYXNpY0FzY2lpIj9sPW5ldyBSZWdFeHAoIlteXFx0XFxuXFxyXFx4MjAtXFx4N0VdIiwiZyIpOmw9bmV3IFJlZ0V4cChgJHtybChBcnJheS5mcm9tKG8pKX1gLCJnIik7Y29uc3QgdT1uZXcgdGwobnVsbCxsKSxjPVtdO2xldCBkPSExLG0sZj0wLGI9MCxwPTA7ZTpmb3IobGV0IHc9cix4PWE7dzw9eDt3Kyspe2NvbnN0IF89dC5nZXRMaW5lQ29udGVudCh3KSx5PV8ubGVuZ3RoO3UucmVzZXQoMCk7ZG8gaWYobT11Lm5leHQoXyksbSl7bGV0IEU9bS5pbmRleCxSPW0uaW5kZXgrbVswXS5sZW5ndGg7aWYoRT4wKXtjb25zdCBUPV8uY2hhckNvZGVBdChFLTEpO0NuKFQpJiZFLS19aWYoUisxPHkpe2NvbnN0IFQ9Xy5jaGFyQ29kZUF0KFItMSk7Q24oVCkmJlIrK31jb25zdCBQPV8uc3Vic3RyaW5nKEUsUik7bGV0IHY9SW4oRSsxLHppLF8sMCk7diYmdi5lbmRDb2x1bW48PUUrMSYmKHY9bnVsbCk7Y29uc3QgZz1zLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoUCx2P3Yud29yZDpudWxsKTtpZihnIT09MCl7aWYoZz09PTM/ZisrOmc9PT0yP2IrKzpnPT09MT9wKys6bmwoKSxjLmxlbmd0aD49MWUzKXtkPSEwO2JyZWFrIGV9Yy5wdXNoKG5ldyBvZSh3LEUrMSx3LFIrMSkpfX13aGlsZShtKX1yZXR1cm57cmFuZ2VzOmMsaGFzTW9yZTpkLGFtYmlndW91c0NoYXJhY3RlckNvdW50OmYsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6Yixub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6cH19c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKHQsbil7Y29uc3QgaT1uZXcgcXIobik7c3dpdGNoKGkuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3QgYT10LmNvZGVQb2ludEF0KDApLHM9aS5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKGEpLG89S2UuZ2V0TG9jYWxlcygpLmZpbHRlcihsPT4hS2UuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4ubi5hbGxvd2VkTG9jYWxlcyxsXSkpLmlzQW1iaWd1b3VzKGEpKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KHMpLG5vdEFtYmlndW91c0luTG9jYWxlczpvfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX1mdW5jdGlvbiBybChlLHQpe3JldHVybmBbJHtXcyhlLm1hcChpPT5TdHJpbmcuZnJvbUNvZGVQb2ludChpKSkuam9pbigiIikpfV1gfWNsYXNzIHFye2NvbnN0cnVjdG9yKHQpe3RoaXMub3B0aW9ucz10LHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldCh0LmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9S2UuZ2V0SW5zdGFuY2UobmV3IFNldCh0LmFsbG93ZWRMb2NhbGVzKSl9Z2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpe2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiJhbGxOb25CYXNpY0FzY2lpIjtjb25zdCB0PW5ldyBTZXQ7aWYodGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMpZm9yKGNvbnN0IG4gb2YgUGUuY29kZVBvaW50cylPcihTdHJpbmcuZnJvbUNvZGVQb2ludChuKSl8fHQuYWRkKG4pO2lmKHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzKWZvcihjb25zdCBuIG9mIHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpKXQuYWRkKG4pO2Zvcihjb25zdCBuIG9mIHRoaXMuYWxsb3dlZENvZGVQb2ludHMpdC5kZWxldGUobik7cmV0dXJuIHR9c2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG4pe2NvbnN0IGk9dC5jb2RlUG9pbnRBdCgwKTtpZih0aGlzLmFsbG93ZWRDb2RlUG9pbnRzLmhhcyhpKSlyZXR1cm4gMDtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4gMTtsZXQgcj0hMSxhPSExO2lmKG4pZm9yKGNvbnN0IHMgb2Ygbil7Y29uc3Qgbz1zLmNvZGVQb2ludEF0KDApLGw9R3Mocyk7cj1yfHxsLCFsJiYhdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKG8pJiYhUGUuaXNJbnZpc2libGVDaGFyYWN0ZXIobykmJihhPSEwKX1yZXR1cm4hciYmYT8wOnRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzJiYhT3IodCkmJlBlLmlzSW52aXNpYmxlQ2hhcmFjdGVyKGkpPzI6dGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMmJnRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhpKT8zOjB9fWZ1bmN0aW9uIE9yKGUpe3JldHVybiBlPT09IiAifHxlPT09YApgfHxlPT09IgkifWNsYXNzIFp0e2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLmNoYW5nZXM9dCx0aGlzLm1vdmVzPW4sdGhpcy5oaXRUaW1lb3V0PWl9fWNsYXNzIGFse2NvbnN0cnVjdG9yKHQsbil7dGhpcy5saW5lUmFuZ2VNYXBwaW5nPXQsdGhpcy5jaGFuZ2VzPW59fWNsYXNzICR7c3RhdGljIGFkZFJhbmdlKHQsbil7bGV0IGk9MDtmb3IoO2k8bi5sZW5ndGgmJm5baV0uZW5kRXhjbHVzaXZlPHQuc3RhcnQ7KWkrKztsZXQgcj1pO2Zvcig7cjxuLmxlbmd0aCYmbltyXS5zdGFydDw9dC5lbmRFeGNsdXNpdmU7KXIrKztpZihpPT09ciluLnNwbGljZShpLDAsdCk7ZWxzZXtjb25zdCBhPU1hdGgubWluKHQuc3RhcnQsbltpXS5zdGFydCkscz1NYXRoLm1heCh0LmVuZEV4Y2x1c2l2ZSxuW3ItMV0uZW5kRXhjbHVzaXZlKTtuLnNwbGljZShpLHItaSxuZXcgJChhLHMpKX19c3RhdGljIHRyeUNyZWF0ZSh0LG4pe2lmKCEodD5uKSlyZXR1cm4gbmV3ICQodCxuKX1zdGF0aWMgb2ZMZW5ndGgodCl7cmV0dXJuIG5ldyAkKDAsdCl9c3RhdGljIG9mU3RhcnRBbmRMZW5ndGgodCxuKXtyZXR1cm4gbmV3ICQodCx0K24pfWNvbnN0cnVjdG9yKHQsbil7aWYodGhpcy5zdGFydD10LHRoaXMuZW5kRXhjbHVzaXZlPW4sdD5uKXRocm93IG5ldyBVZShgSW52YWxpZCByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCl9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydD09PXRoaXMuZW5kRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgJCh0aGlzLnN0YXJ0K3QsdGhpcy5lbmRFeGNsdXNpdmUrdCl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydCt0LHRoaXMuZW5kRXhjbHVzaXZlKX1kZWx0YUVuZCh0KXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSt0KX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kRXhjbHVzaXZlLXRoaXMuc3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydH0sICR7dGhpcy5lbmRFeGNsdXNpdmV9KWB9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuc3RhcnQ8PXQmJnQ8dGhpcy5lbmRFeGNsdXNpdmV9am9pbih0KXtyZXR1cm4gbmV3ICQoTWF0aC5taW4odGhpcy5zdGFydCx0LnN0YXJ0KSxNYXRoLm1heCh0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSkpfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnQsdC5zdGFydCksaT1NYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSk7aWYobjw9aSlyZXR1cm4gbmV3ICQobixpKX1pbnRlcnNlY3RzKHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydCx0LnN0YXJ0KSxpPU1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLHQuZW5kRXhjbHVzaXZlKTtyZXR1cm4gbjxpfWlzQmVmb3JlKHQpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZTw9dC5zdGFydH1pc0FmdGVyKHQpe3JldHVybiB0aGlzLnN0YXJ0Pj10LmVuZEV4Y2x1c2l2ZX1zbGljZSh0KXtyZXR1cm4gdC5zbGljZSh0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlKX1zdWJzdHJpbmcodCl7cmV0dXJuIHQuc3Vic3RyaW5nKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUpfWNsaXAodCl7aWYodGhpcy5pc0VtcHR5KXRocm93IG5ldyBVZShgSW52YWxpZCBjbGlwcGluZyByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCk7cmV0dXJuIE1hdGgubWF4KHRoaXMuc3RhcnQsTWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUtMSx0KSl9Y2xpcEN5Y2xpYyh0KXtpZih0aGlzLmlzRW1wdHkpdGhyb3cgbmV3IFVlKGBJbnZhbGlkIGNsaXBwaW5nIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKTtyZXR1cm4gdDx0aGlzLnN0YXJ0P3RoaXMuZW5kRXhjbHVzaXZlLSh0aGlzLnN0YXJ0LXQpJXRoaXMubGVuZ3RoOnQ+PXRoaXMuZW5kRXhjbHVzaXZlP3RoaXMuc3RhcnQrKHQtdGhpcy5zdGFydCkldGhpcy5sZW5ndGg6dH1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0O248dGhpcy5lbmRFeGNsdXNpdmU7bisrKXQobil9fWZ1bmN0aW9uIGZ0KGUsdCl7Y29uc3Qgbj1BdChlLHQpO3JldHVybiBuPT09LTE/dm9pZCAwOmVbbl19ZnVuY3Rpb24gQXQoZSx0LG49MCxpPWUubGVuZ3RoKXtsZXQgcj1uLGE9aTtmb3IoO3I8YTspe2NvbnN0IHM9TWF0aC5mbG9vcigocithKS8yKTt0KGVbc10pP3I9cysxOmE9c31yZXR1cm4gci0xfWZ1bmN0aW9uIHNsKGUsdCl7Y29uc3Qgbj1qbihlLHQpO3JldHVybiBuPT09ZS5sZW5ndGg/dm9pZCAwOmVbbl19ZnVuY3Rpb24gam4oZSx0LG49MCxpPWUubGVuZ3RoKXtsZXQgcj1uLGE9aTtmb3IoO3I8YTspe2NvbnN0IHM9TWF0aC5mbG9vcigocithKS8yKTt0KGVbc10pP2E9czpyPXMrMX1yZXR1cm4gcn1jbGFzcyBTdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9hcnJheT10LHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9MH1maW5kTGFzdE1vbm90b25vdXModCl7aWYoU3QuYXNzZXJ0SW52YXJpYW50cyl7aWYodGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlKXtmb3IoY29uc3QgaSBvZiB0aGlzLl9hcnJheSlpZih0aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGUoaSkmJiF0KGkpKXRocm93IG5ldyBFcnJvcigiTW9ub3Rvbm91c0FycmF5OiBjdXJyZW50IHByZWRpY2F0ZSBtdXN0IGJlIHdlYWtlciB0aGFuIChvciBlcXVhbCB0bykgdGhlIHByZXZpb3VzIHByZWRpY2F0ZS4iKX10aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGU9dH1jb25zdCBuPUF0KHRoaXMuX2FycmF5LHQsdGhpcy5fZmluZExhc3RNb25vdG9ub3VzTGFzdElkeCk7cmV0dXJuIHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9bisxLG49PT0tMT92b2lkIDA6dGhpcy5fYXJyYXlbbl19fVN0LmFzc2VydEludmFyaWFudHM9ITE7Y2xhc3MgR3tzdGF0aWMgZnJvbVJhbmdlSW5jbHVzaXZlKHQpe3JldHVybiBuZXcgRyh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXIrMSl9c3RhdGljIGpvaW5NYW55KHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgbj1uZXcgSWUodFswXS5zbGljZSgpKTtmb3IobGV0IGk9MTtpPHQubGVuZ3RoO2krKyluPW4uZ2V0VW5pb24obmV3IEllKHRbaV0uc2xpY2UoKSkpO3JldHVybiBuLnJhbmdlc31zdGF0aWMgam9pbih0KXtpZih0Lmxlbmd0aD09PTApdGhyb3cgbmV3IFVlKCJsaW5lUmFuZ2VzIGNhbm5vdCBiZSBlbXB0eSIpO2xldCBuPXRbMF0uc3RhcnRMaW5lTnVtYmVyLGk9dFswXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO2ZvcihsZXQgcj0xO3I8dC5sZW5ndGg7cisrKW49TWF0aC5taW4obix0W3JdLnN0YXJ0TGluZU51bWJlciksaT1NYXRoLm1heChpLHRbcl0uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuIG5ldyBHKG4saSl9c3RhdGljIG9mTGVuZ3RoKHQsbil7cmV0dXJuIG5ldyBHKHQsdCtuKX1zdGF0aWMgZGVzZXJpYWxpemUodCl7cmV0dXJuIG5ldyBHKHRbMF0sdFsxXSl9Y29uc3RydWN0b3IodCxuKXtpZih0Pm4pdGhyb3cgbmV3IFVlKGBzdGFydExpbmVOdW1iZXIgJHt0fSBjYW5ub3QgYmUgYWZ0ZXIgZW5kTGluZU51bWJlckV4Y2x1c2l2ZSAke259YCk7dGhpcy5zdGFydExpbmVOdW1iZXI9dCx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9bn1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgRyh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSt0KX1kZWx0YUxlbmd0aCh0KXtyZXR1cm4gbmV3IEcodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLXRoaXMuc3RhcnRMaW5lTnVtYmVyfWpvaW4odCl7cmV0dXJuIG5ldyBHKE1hdGgubWluKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxNYXRoLm1heCh0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsdC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSl9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydExpbmVOdW1iZXJ9LCR7dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfSlgfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxpPU1hdGgubWluKHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpO2lmKG48PWkpcmV0dXJuIG5ldyBHKG4saSl9aW50ZXJzZWN0c1N0cmljdCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZ0LnN0YXJ0TGluZU51bWJlcjx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9b3ZlcmxhcE9yVG91Y2godCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPD10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZXF1YWxzKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9dG9JbmNsdXNpdmVSYW5nZSgpe3JldHVybiB0aGlzLmlzRW1wdHk/bnVsbDpuZXcgb2UodGhpcy5zdGFydExpbmVOdW1iZXIsMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUil9dG9FeGNsdXNpdmVSYW5nZSgpe3JldHVybiBuZXcgb2UodGhpcy5zdGFydExpbmVOdW1iZXIsMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSl9bWFwVG9MaW5lQXJyYXkodCl7Y29uc3Qgbj1bXTtmb3IobGV0IGk9dGhpcy5zdGFydExpbmVOdW1iZXI7aTx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aSsrKW4ucHVzaCh0KGkpKTtyZXR1cm4gbn1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0TGluZU51bWJlcjtuPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTtuKyspdChuKX1zZXJpYWxpemUoKXtyZXR1cm5bdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlXX1pbmNsdWRlcyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfXRvT2Zmc2V0UmFuZ2UoKXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydExpbmVOdW1iZXItMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSl9fWNsYXNzIElle2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMuX25vcm1hbGl6ZWRSYW5nZXM9dH1nZXQgcmFuZ2VzKCl7cmV0dXJuIHRoaXMuX25vcm1hbGl6ZWRSYW5nZXN9YWRkUmFuZ2UodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBuPWpuKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscj0+ci5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj10LnN0YXJ0TGluZU51bWJlciksaT1BdCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHI9PnIuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKzE7aWYobj09PWkpdGhpcy5fbm9ybWFsaXplZFJhbmdlcy5zcGxpY2UobiwwLHQpO2Vsc2UgaWYobj09PWktMSl7Y29uc3Qgcj10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXNbbl09ci5qb2luKHQpfWVsc2V7Y29uc3Qgcj10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dLmpvaW4odGhpcy5fbm9ybWFsaXplZFJhbmdlc1tpLTFdKS5qb2luKHQpO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXMuc3BsaWNlKG4saS1uLHIpfX1jb250YWlucyh0KXtjb25zdCBuPWZ0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsaT0+aS5zdGFydExpbmVOdW1iZXI8PXQpO3JldHVybiEhbiYmbi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnR9aW50ZXJzZWN0cyh0KXtjb25zdCBuPWZ0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsaT0+aS5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4hIW4mJm4uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT50LnN0YXJ0TGluZU51bWJlcn1nZXRVbmlvbih0KXtpZih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD09PTApcmV0dXJuIHQ7aWYodC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg9PT0wKXJldHVybiB0aGlzO2NvbnN0IG49W107bGV0IGk9MCxyPTAsYT1udWxsO2Zvcig7aTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aHx8cjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aDspe2xldCBzPW51bGw7aWYoaTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCYmcjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCl7Y29uc3Qgbz10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2ldLGw9dC5fbm9ybWFsaXplZFJhbmdlc1tyXTtvLnN0YXJ0TGluZU51bWJlcjxsLnN0YXJ0TGluZU51bWJlcj8ocz1vLGkrKyk6KHM9bCxyKyspfWVsc2UgaTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD8ocz10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2ldLGkrKyk6KHM9dC5fbm9ybWFsaXplZFJhbmdlc1tyXSxyKyspO2E9PT1udWxsP2E9czphLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PXMuc3RhcnRMaW5lTnVtYmVyP2E9bmV3IEcoYS5zdGFydExpbmVOdW1iZXIsTWF0aC5tYXgoYS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpOihuLnB1c2goYSksYT1zKX1yZXR1cm4gYSE9PW51bGwmJm4ucHVzaChhKSxuZXcgSWUobil9c3VidHJhY3RGcm9tKHQpe2NvbnN0IG49am4odGhpcy5fbm9ybWFsaXplZFJhbmdlcyxzPT5zLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PXQuc3RhcnRMaW5lTnVtYmVyKSxpPUF0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscz0+cy5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkrMTtpZihuPT09aSlyZXR1cm4gbmV3IEllKFt0XSk7Y29uc3Qgcj1bXTtsZXQgYT10LnN0YXJ0TGluZU51bWJlcjtmb3IobGV0IHM9bjtzPGk7cysrKXtjb25zdCBvPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbc107by5zdGFydExpbmVOdW1iZXI+YSYmci5wdXNoKG5ldyBHKGEsby5zdGFydExpbmVOdW1iZXIpKSxhPW8uZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1yZXR1cm4gYTx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnIucHVzaChuZXcgRyhhLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpLG5ldyBJZShyKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcCh0PT50LnRvU3RyaW5nKCkpLmpvaW4oIiwgIil9Z2V0SW50ZXJzZWN0aW9uKHQpe2NvbnN0IG49W107bGV0IGk9MCxyPTA7Zm9yKDtpPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoJiZyPHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoOyl7Y29uc3QgYT10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2ldLHM9dC5fbm9ybWFsaXplZFJhbmdlc1tyXSxvPWEuaW50ZXJzZWN0KHMpO28mJiFvLmlzRW1wdHkmJm4ucHVzaChvKSxhLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8cy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlP2krKzpyKyt9cmV0dXJuIG5ldyBJZShuKX1nZXRXaXRoRGVsdGEodCl7cmV0dXJuIG5ldyBJZSh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcChuPT5uLmRlbHRhKHQpKSl9fWNsYXNzIENle3N0YXRpYyBpbnZlcnNlKHQsbixpKXtjb25zdCByPVtdO2xldCBhPTEscz0xO2Zvcihjb25zdCBsIG9mIHQpe2NvbnN0IHU9bmV3IENlKG5ldyBHKGEsbC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpLG5ldyBHKHMsbC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKTt1Lm1vZGlmaWVkLmlzRW1wdHl8fHIucHVzaCh1KSxhPWwub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxzPWwubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1jb25zdCBvPW5ldyBDZShuZXcgRyhhLG4rMSksbmV3IEcocyxpKzEpKTtyZXR1cm4gby5tb2RpZmllZC5pc0VtcHR5fHxyLnB1c2gobykscn1zdGF0aWMgY2xpcCh0LG4saSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgYSBvZiB0KXtjb25zdCBzPWEub3JpZ2luYWwuaW50ZXJzZWN0KG4pLG89YS5tb2RpZmllZC5pbnRlcnNlY3QoaSk7cyYmIXMuaXNFbXB0eSYmbyYmIW8uaXNFbXB0eSYmci5wdXNoKG5ldyBDZShzLG8pKX1yZXR1cm4gcn1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMub3JpZ2luYWw9dCx0aGlzLm1vZGlmaWVkPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbC50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkLnRvU3RyaW5nKCl9fWB9ZmxpcCgpe3JldHVybiBuZXcgQ2UodGhpcy5tb2RpZmllZCx0aGlzLm9yaWdpbmFsKX1qb2luKHQpe3JldHVybiBuZXcgQ2UodGhpcy5vcmlnaW5hbC5qb2luKHQub3JpZ2luYWwpLHRoaXMubW9kaWZpZWQuam9pbih0Lm1vZGlmaWVkKSl9fWNsYXNzIFdlIGV4dGVuZHMgQ2V7c3RhdGljIGZyb21SYW5nZU1hcHBpbmdzKHQpe2NvbnN0IG49Ry5qb2luKHQubWFwKHI9PkcuZnJvbVJhbmdlSW5jbHVzaXZlKHIub3JpZ2luYWxSYW5nZSkpKSxpPUcuam9pbih0Lm1hcChyPT5HLmZyb21SYW5nZUluY2x1c2l2ZShyLm1vZGlmaWVkUmFuZ2UpKSk7cmV0dXJuIG5ldyBXZShuLGksdCl9Y29uc3RydWN0b3IodCxuLGkpe3N1cGVyKHQsbiksdGhpcy5pbm5lckNoYW5nZXM9aX1mbGlwKCl7dmFyIHQ7cmV0dXJuIG5ldyBXZSh0aGlzLm1vZGlmaWVkLHRoaXMub3JpZ2luYWwsKHQ9dGhpcy5pbm5lckNoYW5nZXMpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dC5tYXAobj0+bi5mbGlwKCkpKX13aXRoSW5uZXJDaGFuZ2VzRnJvbUxpbmVSYW5nZXMoKXtyZXR1cm4gbmV3IFdlKHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCxbbmV3IHB0KHRoaXMub3JpZ2luYWwudG9FeGNsdXNpdmVSYW5nZSgpLHRoaXMubW9kaWZpZWQudG9FeGNsdXNpdmVSYW5nZSgpKV0pfX1jbGFzcyBwdHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMub3JpZ2luYWxSYW5nZT10LHRoaXMubW9kaWZpZWRSYW5nZT1ufXRvU3RyaW5nKCl7cmV0dXJuYHske3RoaXMub3JpZ2luYWxSYW5nZS50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkUmFuZ2UudG9TdHJpbmcoKX19YH1mbGlwKCl7cmV0dXJuIG5ldyBwdCh0aGlzLm1vZGlmaWVkUmFuZ2UsdGhpcy5vcmlnaW5hbFJhbmdlKX19Y29uc3Qgb2w9MztjbGFzcyBsbHtjb21wdXRlRGlmZih0LG4saSl7dmFyIHI7Y29uc3Qgcz1uZXcgaGwodCxuLHttYXhDb21wdXRhdGlvblRpbWU6aS5tYXhDb21wdXRhdGlvblRpbWVNcyxzaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZTppLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLHNob3VsZENvbXB1dGVDaGFyQ2hhbmdlczohMCxzaG91bGRNYWtlUHJldHR5RGlmZjohMCxzaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzOiEwfSkuY29tcHV0ZURpZmYoKSxvPVtdO2xldCBsPW51bGw7Zm9yKGNvbnN0IHUgb2Ygcy5jaGFuZ2VzKXtsZXQgYzt1Lm9yaWdpbmFsRW5kTGluZU51bWJlcj09PTA/Yz1uZXcgRyh1Lm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyKzEsdS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcisxKTpjPW5ldyBHKHUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsdS5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMSk7bGV0IGQ7dS5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT0wP2Q9bmV3IEcodS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcisxLHUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIrMSk6ZD1uZXcgRyh1Lm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyLHUubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzEpO2xldCBtPW5ldyBXZShjLGQsKHI9dS5jaGFyQ2hhbmdlcyk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm1hcChmPT5uZXcgcHQobmV3IG9lKGYub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsZi5vcmlnaW5hbFN0YXJ0Q29sdW1uLGYub3JpZ2luYWxFbmRMaW5lTnVtYmVyLGYub3JpZ2luYWxFbmRDb2x1bW4pLG5ldyBvZShmLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyLGYubW9kaWZpZWRTdGFydENvbHVtbixmLm1vZGlmaWVkRW5kTGluZU51bWJlcixmLm1vZGlmaWVkRW5kQ29sdW1uKSkpKTtsJiYobC5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09bS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXJ8fGwub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PW0ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyKSYmKG09bmV3IFdlKGwub3JpZ2luYWwuam9pbihtLm9yaWdpbmFsKSxsLm1vZGlmaWVkLmpvaW4obS5tb2RpZmllZCksbC5pbm5lckNoYW5nZXMmJm0uaW5uZXJDaGFuZ2VzP2wuaW5uZXJDaGFuZ2VzLmNvbmNhdChtLmlubmVyQ2hhbmdlcyk6dm9pZCAwKSxvLnBvcCgpKSxvLnB1c2gobSksbD1tfXJldHVybiBZdCgoKT0+QnIobywodSxjKT0+Yy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItdS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09Yy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItdS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZ1Lm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8Yy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXImJnUubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxjLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpLG5ldyBadChvLFtdLHMucXVpdEVhcmx5KX19ZnVuY3Rpb24gVnIoZSx0LG4saSl7cmV0dXJuIG5ldyBxZShlLHQsbikuQ29tcHV0ZURpZmYoaSl9bGV0IGpyPWNsYXNze2NvbnN0cnVjdG9yKHQpe2NvbnN0IG49W10saT1bXTtmb3IobGV0IHI9MCxhPXQubGVuZ3RoO3I8YTtyKyspbltyXT1Hbih0W3JdLDEpLGlbcl09JG4odFtyXSwxKTt0aGlzLmxpbmVzPXQsdGhpcy5fc3RhcnRDb2x1bW5zPW4sdGhpcy5fZW5kQ29sdW1ucz1pfWdldEVsZW1lbnRzKCl7Y29uc3QgdD1bXTtmb3IobGV0IG49MCxpPXRoaXMubGluZXMubGVuZ3RoO248aTtuKyspdFtuXT10aGlzLmxpbmVzW25dLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbbl0tMSx0aGlzLl9lbmRDb2x1bW5zW25dLTEpO3JldHVybiB0fWdldFN0cmljdEVsZW1lbnQodCl7cmV0dXJuIHRoaXMubGluZXNbdF19Z2V0U3RhcnRMaW5lTnVtYmVyKHQpe3JldHVybiB0KzF9Z2V0RW5kTGluZU51bWJlcih0KXtyZXR1cm4gdCsxfWNyZWF0ZUNoYXJTZXF1ZW5jZSh0LG4saSl7Y29uc3Qgcj1bXSxhPVtdLHM9W107bGV0IG89MDtmb3IobGV0IGw9bjtsPD1pO2wrKyl7Y29uc3QgdT10aGlzLmxpbmVzW2xdLGM9dD90aGlzLl9zdGFydENvbHVtbnNbbF06MSxkPXQ/dGhpcy5fZW5kQ29sdW1uc1tsXTp1Lmxlbmd0aCsxO2ZvcihsZXQgbT1jO208ZDttKyspcltvXT11LmNoYXJDb2RlQXQobS0xKSxhW29dPWwrMSxzW29dPW0sbysrOyF0JiZsPGkmJihyW29dPTEwLGFbb109bCsxLHNbb109dS5sZW5ndGgrMSxvKyspfXJldHVybiBuZXcgdWwocixhLHMpfX07Y2xhc3MgdWx7Y29uc3RydWN0b3IodCxuLGkpe3RoaXMuX2NoYXJDb2Rlcz10LHRoaXMuX2xpbmVOdW1iZXJzPW4sdGhpcy5fY29sdW1ucz1pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuX2NoYXJDb2Rlcy5tYXAoKHQsbik9Pih0PT09MTA/IlxcbiI6U3RyaW5nLmZyb21DaGFyQ29kZSh0KSkrYC0oJHt0aGlzLl9saW5lTnVtYmVyc1tuXX0sJHt0aGlzLl9jb2x1bW5zW25dfSlgKS5qb2luKCIsICIpKyJdIn1fYXNzZXJ0SW5kZXgodCxuKXtpZih0PDB8fHQ+PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBpbmRleCIpfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuX2NoYXJDb2Rlc31nZXRTdGFydExpbmVOdW1iZXIodCl7cmV0dXJuIHQ+MCYmdD09PXRoaXMuX2xpbmVOdW1iZXJzLmxlbmd0aD90aGlzLmdldEVuZExpbmVOdW1iZXIodC0xKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9saW5lTnVtYmVycyksdGhpcy5fbGluZU51bWJlcnNbdF0pfWdldEVuZExpbmVOdW1iZXIodCl7cmV0dXJuIHQ9PT0tMT90aGlzLmdldFN0YXJ0TGluZU51bWJlcih0KzEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9jaGFyQ29kZXNbdF09PT0xMD90aGlzLl9saW5lTnVtYmVyc1t0XSsxOnRoaXMuX2xpbmVOdW1iZXJzW3RdKX1nZXRTdGFydENvbHVtbih0KXtyZXR1cm4gdD4wJiZ0PT09dGhpcy5fY29sdW1ucy5sZW5ndGg/dGhpcy5nZXRFbmRDb2x1bW4odC0xKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jb2x1bW5zW3RdKX1nZXRFbmRDb2x1bW4odCl7cmV0dXJuIHQ9PT0tMT90aGlzLmdldFN0YXJ0Q29sdW1uKHQrMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fY29sdW1ucyksdGhpcy5fY2hhckNvZGVzW3RdPT09MTA/MTp0aGlzLl9jb2x1bW5zW3RdKzEpfX1jbGFzcyBndHtjb25zdHJ1Y3Rvcih0LG4saSxyLGEscyxvLGwpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9dCx0aGlzLm9yaWdpbmFsU3RhcnRDb2x1bW49bix0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1pLHRoaXMub3JpZ2luYWxFbmRDb2x1bW49cix0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPWEsdGhpcy5tb2RpZmllZFN0YXJ0Q29sdW1uPXMsdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9byx0aGlzLm1vZGlmaWVkRW5kQ29sdW1uPWx9c3RhdGljIGNyZWF0ZUZyb21EaWZmQ2hhbmdlKHQsbixpKXtjb25zdCByPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCksYT1uLmdldFN0YXJ0Q29sdW1uKHQub3JpZ2luYWxTdGFydCkscz1uLmdldEVuZExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSksbz1uLmdldEVuZENvbHVtbih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxsPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCksdT1pLmdldFN0YXJ0Q29sdW1uKHQubW9kaWZpZWRTdGFydCksYz1pLmdldEVuZExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSksZD1pLmdldEVuZENvbHVtbih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKTtyZXR1cm4gbmV3IGd0KHIsYSxzLG8sbCx1LGMsZCl9fWZ1bmN0aW9uIGNsKGUpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IHQ9W2VbMF1dO2xldCBuPXRbMF07Zm9yKGxldCBpPTEscj1lLmxlbmd0aDtpPHI7aSsrKXtjb25zdCBhPWVbaV0scz1hLm9yaWdpbmFsU3RhcnQtKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoKSxvPWEubW9kaWZpZWRTdGFydC0obi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpO01hdGgubWluKHMsbyk8b2w/KG4ub3JpZ2luYWxMZW5ndGg9YS5vcmlnaW5hbFN0YXJ0K2Eub3JpZ2luYWxMZW5ndGgtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9YS5tb2RpZmllZFN0YXJ0K2EubW9kaWZpZWRMZW5ndGgtbi5tb2RpZmllZFN0YXJ0KToodC5wdXNoKGEpLG49YSl9cmV0dXJuIHR9Y2xhc3MgTHR7Y29uc3RydWN0b3IodCxuLGkscixhKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9bix0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPWksdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWF9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KHQsbixpLHIsYSxzLG8pe2xldCBsLHUsYyxkLG07aWYobi5vcmlnaW5hbExlbmd0aD09PTA/KGw9aS5nZXRTdGFydExpbmVOdW1iZXIobi5vcmlnaW5hbFN0YXJ0KS0xLHU9MCk6KGw9aS5nZXRTdGFydExpbmVOdW1iZXIobi5vcmlnaW5hbFN0YXJ0KSx1PWkuZ2V0RW5kTGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aC0xKSksbi5tb2RpZmllZExlbmd0aD09PTA/KGM9ci5nZXRTdGFydExpbmVOdW1iZXIobi5tb2RpZmllZFN0YXJ0KS0xLGQ9MCk6KGM9ci5nZXRTdGFydExpbmVOdW1iZXIobi5tb2RpZmllZFN0YXJ0KSxkPXIuZ2V0RW5kTGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC0xKSkscyYmbi5vcmlnaW5hbExlbmd0aD4wJiZuLm9yaWdpbmFsTGVuZ3RoPDIwJiZuLm1vZGlmaWVkTGVuZ3RoPjAmJm4ubW9kaWZpZWRMZW5ndGg8MjAmJmEoKSl7Y29uc3QgZj1pLmNyZWF0ZUNoYXJTZXF1ZW5jZSh0LG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aC0xKSxiPXIuY3JlYXRlQ2hhclNlcXVlbmNlKHQsbi5tb2RpZmllZFN0YXJ0LG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLTEpO2lmKGYuZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCYmYi5nZXRFbGVtZW50cygpLmxlbmd0aD4wKXtsZXQgcD1WcihmLGIsYSwhMCkuY2hhbmdlcztvJiYocD1jbChwKSksbT1bXTtmb3IobGV0IHc9MCx4PXAubGVuZ3RoO3c8eDt3KyspbS5wdXNoKGd0LmNyZWF0ZUZyb21EaWZmQ2hhbmdlKHBbd10sZixiKSl9fXJldHVybiBuZXcgTHQobCx1LGMsZCxtKX19Y2xhc3MgaGx7Y29uc3RydWN0b3IodCxuLGkpe3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzPWkuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcz1pLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZT1pLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmY9aS5zaG91bGRNYWtlUHJldHR5RGlmZix0aGlzLm9yaWdpbmFsTGluZXM9dCx0aGlzLm1vZGlmaWVkTGluZXM9bix0aGlzLm9yaWdpbmFsPW5ldyBqcih0KSx0aGlzLm1vZGlmaWVkPW5ldyBqcihuKSx0aGlzLmNvbnRpbnVlTGluZURpZmY9R3IoaS5tYXhDb21wdXRhdGlvblRpbWUpLHRoaXMuY29udGludWVDaGFyRGlmZj1HcihpLm1heENvbXB1dGF0aW9uVGltZT09PTA/MDpNYXRoLm1pbihpLm1heENvbXB1dGF0aW9uVGltZSw1ZTMpKX1jb21wdXRlRGlmZigpe2lmKHRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoPT09MSYmdGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGg9PT0wKXJldHVybiB0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aD09PTEmJnRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoPT09MD97cXVpdEVhcmx5OiExLGNoYW5nZXM6W119OntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjEsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgsY2hhckNoYW5nZXM6dm9pZCAwfV19O2lmKHRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoPT09MSYmdGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg9PT0wKXJldHVybntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOnRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjEsY2hhckNoYW5nZXM6dm9pZCAwfV19O2NvbnN0IHQ9VnIodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVMaW5lRGlmZix0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmKSxuPXQuY2hhbmdlcyxpPXQucXVpdEVhcmx5O2lmKHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2Upe2NvbnN0IG89W107Zm9yKGxldCBsPTAsdT1uLmxlbmd0aDtsPHU7bCsrKW8ucHVzaChMdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLG5bbF0sdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKTtyZXR1cm57cXVpdEVhcmx5OmksY2hhbmdlczpvfX1jb25zdCByPVtdO2xldCBhPTAscz0wO2ZvcihsZXQgbz0tMSxsPW4ubGVuZ3RoO288bDtvKyspe2NvbnN0IHU9bysxPGw/bltvKzFdOm51bGwsYz11P3Uub3JpZ2luYWxTdGFydDp0aGlzLm9yaWdpbmFsTGluZXMubGVuZ3RoLGQ9dT91Lm1vZGlmaWVkU3RhcnQ6dGhpcy5tb2RpZmllZExpbmVzLmxlbmd0aDtmb3IoO2E8YyYmczxkOyl7Y29uc3QgbT10aGlzLm9yaWdpbmFsTGluZXNbYV0sZj10aGlzLm1vZGlmaWVkTGluZXNbc107aWYobSE9PWYpe3tsZXQgYj1HbihtLDEpLHA9R24oZiwxKTtmb3IoO2I+MSYmcD4xOyl7Y29uc3Qgdz1tLmNoYXJDb2RlQXQoYi0yKSx4PWYuY2hhckNvZGVBdChwLTIpO2lmKHchPT14KWJyZWFrO2ItLSxwLS19KGI+MXx8cD4xKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGErMSwxLGIscysxLDEscCl9e2xldCBiPSRuKG0sMSkscD0kbihmLDEpO2NvbnN0IHc9bS5sZW5ndGgrMSx4PWYubGVuZ3RoKzE7Zm9yKDtiPHcmJnA8eDspe2NvbnN0IF89bS5jaGFyQ29kZUF0KGItMSkseT1tLmNoYXJDb2RlQXQocC0xKTtpZihfIT09eSlicmVhaztiKysscCsrfShiPHd8fHA8eCkmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixhKzEsYix3LHMrMSxwLHgpfX1hKysscysrfXUmJihyLnB1c2goTHQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx1LHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSksYSs9dS5vcmlnaW5hbExlbmd0aCxzKz11Lm1vZGlmaWVkTGVuZ3RoKX1yZXR1cm57cXVpdEVhcmx5OmksY2hhbmdlczpyfX1fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LG4saSxyLGEscyxvKXtpZih0aGlzLl9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LG4saSxyLGEscyxvKSlyZXR1cm47bGV0IGw7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJihsPVtuZXcgZ3QobixpLG4scixhLHMsYSxvKV0pLHQucHVzaChuZXcgTHQobixuLGEsYSxsKSl9X21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixpLHIsYSxzLG8pe2NvbnN0IGw9dC5sZW5ndGg7aWYobD09PTApcmV0dXJuITE7Y29uc3QgdT10W2wtMV07cmV0dXJuIHUub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09MHx8dS5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT0wPyExOnUub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09biYmdS5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT1hPyh0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBndChuLGksbixyLGEscyxhLG8pKSwhMCk6dS5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMT09PW4mJnUubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzE9PT1hPyh1Lm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLHUubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWEsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJnUuY2hhckNoYW5nZXMmJnUuY2hhckNoYW5nZXMucHVzaChuZXcgZ3QobixpLG4scixhLHMsYSxvKSksITApOiExfX1mdW5jdGlvbiBHbihlLHQpe2NvbnN0IG49UHMoZSk7cmV0dXJuIG49PT0tMT90Om4rMX1mdW5jdGlvbiAkbihlLHQpe2NvbnN0IG49QnMoZSk7cmV0dXJuIG49PT0tMT90Om4rMn1mdW5jdGlvbiBHcihlKXtpZihlPT09MClyZXR1cm4oKT0+ITA7Y29uc3QgdD1EYXRlLm5vdygpO3JldHVybigpPT5EYXRlLm5vdygpLXQ8ZX1jbGFzcyBGZXtzdGF0aWMgdHJpdmlhbCh0LG4pe3JldHVybiBuZXcgRmUoW25ldyBuZSgkLm9mTGVuZ3RoKHQubGVuZ3RoKSwkLm9mTGVuZ3RoKG4ubGVuZ3RoKSldLCExKX1zdGF0aWMgdHJpdmlhbFRpbWVkT3V0KHQsbil7cmV0dXJuIG5ldyBGZShbbmV3IG5lKCQub2ZMZW5ndGgodC5sZW5ndGgpLCQub2ZMZW5ndGgobi5sZW5ndGgpKV0sITApfWNvbnN0cnVjdG9yKHQsbil7dGhpcy5kaWZmcz10LHRoaXMuaGl0VGltZW91dD1ufX1jbGFzcyBuZXtzdGF0aWMgaW52ZXJ0KHQsbil7Y29uc3QgaT1bXTtyZXR1cm4gVG8odCwocixhKT0+e2kucHVzaChuZS5mcm9tT2Zmc2V0UGFpcnMocj9yLmdldEVuZEV4Y2x1c2l2ZXMoKTpfZS56ZXJvLGE/YS5nZXRTdGFydHMoKTpuZXcgX2Uobiwocj9yLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtci5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlOjApK24pKSl9KSxpfXN0YXRpYyBmcm9tT2Zmc2V0UGFpcnModCxuKXtyZXR1cm4gbmV3IG5lKG5ldyAkKHQub2Zmc2V0MSxuLm9mZnNldDEpLG5ldyAkKHQub2Zmc2V0MixuLm9mZnNldDIpKX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc2VxMVJhbmdlPXQsdGhpcy5zZXEyUmFuZ2U9bn1zd2FwKCl7cmV0dXJuIG5ldyBuZSh0aGlzLnNlcTJSYW5nZSx0aGlzLnNlcTFSYW5nZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNlcTFSYW5nZX0gPC0+ICR7dGhpcy5zZXEyUmFuZ2V9YH1qb2luKHQpe3JldHVybiBuZXcgbmUodGhpcy5zZXExUmFuZ2Uuam9pbih0LnNlcTFSYW5nZSksdGhpcy5zZXEyUmFuZ2Uuam9pbih0LnNlcTJSYW5nZSkpfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBuZSh0aGlzLnNlcTFSYW5nZS5kZWx0YSh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YSh0KSl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgbmUodGhpcy5zZXExUmFuZ2UuZGVsdGFTdGFydCh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YVN0YXJ0KHQpKX1kZWx0YUVuZCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgbmUodGhpcy5zZXExUmFuZ2UuZGVsdGFFbmQodCksdGhpcy5zZXEyUmFuZ2UuZGVsdGFFbmQodCkpfWludGVyc2VjdCh0KXtjb25zdCBuPXRoaXMuc2VxMVJhbmdlLmludGVyc2VjdCh0LnNlcTFSYW5nZSksaT10aGlzLnNlcTJSYW5nZS5pbnRlcnNlY3QodC5zZXEyUmFuZ2UpO2lmKCEoIW58fCFpKSlyZXR1cm4gbmV3IG5lKG4saSl9Z2V0U3RhcnRzKCl7cmV0dXJuIG5ldyBfZSh0aGlzLnNlcTFSYW5nZS5zdGFydCx0aGlzLnNlcTJSYW5nZS5zdGFydCl9Z2V0RW5kRXhjbHVzaXZlcygpe3JldHVybiBuZXcgX2UodGhpcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHRoaXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSl9fWNsYXNzIF9le2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vZmZzZXQxPXQsdGhpcy5vZmZzZXQyPW59dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm9mZnNldDF9IDwtPiAke3RoaXMub2Zmc2V0Mn1gfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBfZSh0aGlzLm9mZnNldDErdCx0aGlzLm9mZnNldDIrdCl9ZXF1YWxzKHQpe3JldHVybiB0aGlzLm9mZnNldDE9PT10Lm9mZnNldDEmJnRoaXMub2Zmc2V0Mj09PXQub2Zmc2V0Mn19X2UuemVybz1uZXcgX2UoMCwwKSxfZS5tYXg9bmV3IF9lKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtjbGFzcyBDdHtpc1ZhbGlkKCl7cmV0dXJuITB9fUN0Lmluc3RhbmNlPW5ldyBDdDtjbGFzcyBkbHtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnRpbWVvdXQ9dCx0aGlzLnN0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMudmFsaWQ9ITAsdDw9MCl0aHJvdyBuZXcgVWUoInRpbWVvdXQgbXVzdCBiZSBwb3NpdGl2ZSIpfWlzVmFsaWQoKXtpZighKERhdGUubm93KCktdGhpcy5zdGFydFRpbWU8dGhpcy50aW1lb3V0KSYmdGhpcy52YWxpZCl7dGhpcy52YWxpZD0hMTtkZWJ1Z2dlcn1yZXR1cm4gdGhpcy52YWxpZH19Y2xhc3MgWG57Y29uc3RydWN0b3IodCxuKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bix0aGlzLmFycmF5PVtdLHRoaXMuYXJyYXk9bmV3IEFycmF5KHQqbil9Z2V0KHQsbil7cmV0dXJuIHRoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdfXNldCh0LG4saSl7dGhpcy5hcnJheVt0K24qdGhpcy53aWR0aF09aX19ZnVuY3Rpb24gSm4oZSl7cmV0dXJuIGU9PT0zMnx8ZT09PTl9Y2xhc3MgYnR7c3RhdGljIGdldEtleSh0KXtsZXQgbj10aGlzLmNocktleXMuZ2V0KHQpO3JldHVybiBuPT09dm9pZCAwJiYobj10aGlzLmNocktleXMuc2l6ZSx0aGlzLmNocktleXMuc2V0KHQsbikpLG59Y29uc3RydWN0b3IodCxuLGkpe3RoaXMucmFuZ2U9dCx0aGlzLmxpbmVzPW4sdGhpcy5zb3VyY2U9aSx0aGlzLmhpc3RvZ3JhbT1bXTtsZXQgcj0wO2ZvcihsZXQgYT10LnN0YXJ0TGluZU51bWJlci0xO2E8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTE7YSsrKXtjb25zdCBzPW5bYV07Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspe3IrKztjb25zdCB1PXNbbF0sYz1idC5nZXRLZXkodSk7dGhpcy5oaXN0b2dyYW1bY109KHRoaXMuaGlzdG9ncmFtW2NdfHwwKSsxfXIrKztjb25zdCBvPWJ0LmdldEtleShgCmApO3RoaXMuaGlzdG9ncmFtW29dPSh0aGlzLmhpc3RvZ3JhbVtvXXx8MCkrMX10aGlzLnRvdGFsQ291bnQ9cn1jb21wdXRlU2ltaWxhcml0eSh0KXt2YXIgbixpO2xldCByPTA7Y29uc3QgYT1NYXRoLm1heCh0aGlzLmhpc3RvZ3JhbS5sZW5ndGgsdC5oaXN0b2dyYW0ubGVuZ3RoKTtmb3IobGV0IHM9MDtzPGE7cysrKXIrPU1hdGguYWJzKCgobj10aGlzLmhpc3RvZ3JhbVtzXSkhPT1udWxsJiZuIT09dm9pZCAwP246MCktKChpPXQuaGlzdG9ncmFtW3NdKSE9PW51bGwmJmkhPT12b2lkIDA/aTowKSk7cmV0dXJuIDEtci8odGhpcy50b3RhbENvdW50K3QudG90YWxDb3VudCl9fWJ0LmNocktleXM9bmV3IE1hcDtjbGFzcyBtbHtjb21wdXRlKHQsbixpPUN0Lmluc3RhbmNlLHIpe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBGZS50cml2aWFsKHQsbik7Y29uc3QgYT1uZXcgWG4odC5sZW5ndGgsbi5sZW5ndGgpLHM9bmV3IFhuKHQubGVuZ3RoLG4ubGVuZ3RoKSxvPW5ldyBYbih0Lmxlbmd0aCxuLmxlbmd0aCk7Zm9yKGxldCBiPTA7Yjx0Lmxlbmd0aDtiKyspZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKyspe2lmKCFpLmlzVmFsaWQoKSlyZXR1cm4gRmUudHJpdmlhbFRpbWVkT3V0KHQsbik7Y29uc3Qgdz1iPT09MD8wOmEuZ2V0KGItMSxwKSx4PXA9PT0wPzA6YS5nZXQoYixwLTEpO2xldCBfO3QuZ2V0RWxlbWVudChiKT09PW4uZ2V0RWxlbWVudChwKT8oYj09PTB8fHA9PT0wP189MDpfPWEuZ2V0KGItMSxwLTEpLGI+MCYmcD4wJiZzLmdldChiLTEscC0xKT09PTMmJihfKz1vLmdldChiLTEscC0xKSksXys9cj9yKGIscCk6MSk6Xz0tMTtjb25zdCB5PU1hdGgubWF4KHcseCxfKTtpZih5PT09Xyl7Y29uc3QgRT1iPjAmJnA+MD9vLmdldChiLTEscC0xKTowO28uc2V0KGIscCxFKzEpLHMuc2V0KGIscCwzKX1lbHNlIHk9PT13PyhvLnNldChiLHAsMCkscy5zZXQoYixwLDEpKTp5PT09eCYmKG8uc2V0KGIscCwwKSxzLnNldChiLHAsMikpO2Euc2V0KGIscCx5KX1jb25zdCBsPVtdO2xldCB1PXQubGVuZ3RoLGM9bi5sZW5ndGg7ZnVuY3Rpb24gZChiLHApeyhiKzEhPT11fHxwKzEhPT1jKSYmbC5wdXNoKG5ldyBuZShuZXcgJChiKzEsdSksbmV3ICQocCsxLGMpKSksdT1iLGM9cH1sZXQgbT10Lmxlbmd0aC0xLGY9bi5sZW5ndGgtMTtmb3IoO20+PTAmJmY+PTA7KXMuZ2V0KG0sZik9PT0zPyhkKG0sZiksbS0tLGYtLSk6cy5nZXQobSxmKT09PTE/bS0tOmYtLTtyZXR1cm4gZCgtMSwtMSksbC5yZXZlcnNlKCksbmV3IEZlKGwsITEpfX1jbGFzcyAkcntjb21wdXRlKHQsbixpPUN0Lmluc3RhbmNlKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gRmUudHJpdmlhbCh0LG4pO2NvbnN0IHI9dCxhPW47ZnVuY3Rpb24gcyhwLHcpe2Zvcig7cDxyLmxlbmd0aCYmdzxhLmxlbmd0aCYmci5nZXRFbGVtZW50KHApPT09YS5nZXRFbGVtZW50KHcpOylwKyssdysrO3JldHVybiBwfWxldCBvPTA7Y29uc3QgbD1uZXcgZmw7bC5zZXQoMCxzKDAsMCkpO2NvbnN0IHU9bmV3IHBsO3Uuc2V0KDAsbC5nZXQoMCk9PT0wP251bGw6bmV3IFhyKG51bGwsMCwwLGwuZ2V0KDApKSk7bGV0IGM9MDtlOmZvcig7Oyl7aWYobysrLCFpLmlzVmFsaWQoKSlyZXR1cm4gRmUudHJpdmlhbFRpbWVkT3V0KHIsYSk7Y29uc3QgcD0tTWF0aC5taW4obyxhLmxlbmd0aCtvJTIpLHc9TWF0aC5taW4obyxyLmxlbmd0aCtvJTIpO2ZvcihjPXA7Yzw9dztjKz0yKXtjb25zdCB4PWM9PT13Py0xOmwuZ2V0KGMrMSksXz1jPT09cD8tMTpsLmdldChjLTEpKzEseT1NYXRoLm1pbihNYXRoLm1heCh4LF8pLHIubGVuZ3RoKSxFPXktYztpZih5PnIubGVuZ3RofHxFPmEubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IFI9cyh5LEUpO2wuc2V0KGMsUik7Y29uc3QgUD15PT09eD91LmdldChjKzEpOnUuZ2V0KGMtMSk7aWYodS5zZXQoYyxSIT09eT9uZXcgWHIoUCx5LEUsUi15KTpQKSxsLmdldChjKT09PXIubGVuZ3RoJiZsLmdldChjKS1jPT09YS5sZW5ndGgpYnJlYWsgZX19bGV0IGQ9dS5nZXQoYyk7Y29uc3QgbT1bXTtsZXQgZj1yLmxlbmd0aCxiPWEubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgcD1kP2QueCtkLmxlbmd0aDowLHc9ZD9kLnkrZC5sZW5ndGg6MDtpZigocCE9PWZ8fHchPT1iKSYmbS5wdXNoKG5ldyBuZShuZXcgJChwLGYpLG5ldyAkKHcsYikpKSwhZClicmVhaztmPWQueCxiPWQueSxkPWQucHJldn1yZXR1cm4gbS5yZXZlcnNlKCksbmV3IEZlKG0sITEpfX1jbGFzcyBYcntjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLnByZXY9dCx0aGlzLng9bix0aGlzLnk9aSx0aGlzLmxlbmd0aD1yfX1jbGFzcyBmbHtjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMTApLHRoaXMubmVnYXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMTApfWdldCh0KXtyZXR1cm4gdDwwPyh0PS10LTEsdGhpcy5uZWdhdGl2ZUFyclt0XSk6dGhpcy5wb3NpdGl2ZUFyclt0XX1zZXQodCxuKXtpZih0PDApe2lmKHQ9LXQtMSx0Pj10aGlzLm5lZ2F0aXZlQXJyLmxlbmd0aCl7Y29uc3QgaT10aGlzLm5lZ2F0aXZlQXJyO3RoaXMubmVnYXRpdmVBcnI9bmV3IEludDMyQXJyYXkoaS5sZW5ndGgqMiksdGhpcy5uZWdhdGl2ZUFyci5zZXQoaSl9dGhpcy5uZWdhdGl2ZUFyclt0XT1ufWVsc2V7aWYodD49dGhpcy5wb3NpdGl2ZUFyci5sZW5ndGgpe2NvbnN0IGk9dGhpcy5wb3NpdGl2ZUFycjt0aGlzLnBvc2l0aXZlQXJyPW5ldyBJbnQzMkFycmF5KGkubGVuZ3RoKjIpLHRoaXMucG9zaXRpdmVBcnIuc2V0KGkpfXRoaXMucG9zaXRpdmVBcnJbdF09bn19fWNsYXNzIHBse2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGl2ZUFycj1bXSx0aGlzLm5lZ2F0aXZlQXJyPVtdfWdldCh0KXtyZXR1cm4gdDwwPyh0PS10LTEsdGhpcy5uZWdhdGl2ZUFyclt0XSk6dGhpcy5wb3NpdGl2ZUFyclt0XX1zZXQodCxuKXt0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdPW4pOnRoaXMucG9zaXRpdmVBcnJbdF09bn19Y2xhc3MgS3R7Y29uc3RydWN0b3IodCxuLGkpe3RoaXMubGluZXM9dCx0aGlzLmNvbnNpZGVyV2hpdGVzcGFjZUNoYW5nZXM9aSx0aGlzLmVsZW1lbnRzPVtdLHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lPVtdLHRoaXMuYWRkaXRpb25hbE9mZnNldEJ5TGluZT1bXTtsZXQgcj0hMTtuLnN0YXJ0PjAmJm4uZW5kRXhjbHVzaXZlPj10Lmxlbmd0aCYmKG49bmV3ICQobi5zdGFydC0xLG4uZW5kRXhjbHVzaXZlKSxyPSEwKSx0aGlzLmxpbmVSYW5nZT1uLHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lWzBdPTA7Zm9yKGxldCBhPXRoaXMubGluZVJhbmdlLnN0YXJ0O2E8dGhpcy5saW5lUmFuZ2UuZW5kRXhjbHVzaXZlO2ErKyl7bGV0IHM9dFthXSxvPTA7aWYocilvPXMubGVuZ3RoLHM9IiIscj0hMTtlbHNlIGlmKCFpKXtjb25zdCBsPXMudHJpbVN0YXJ0KCk7bz1zLmxlbmd0aC1sLmxlbmd0aCxzPWwudHJpbUVuZCgpfXRoaXMuYWRkaXRpb25hbE9mZnNldEJ5TGluZS5wdXNoKG8pO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXRoaXMuZWxlbWVudHMucHVzaChzLmNoYXJDb2RlQXQobCkpO2E8dC5sZW5ndGgtMSYmKHRoaXMuZWxlbWVudHMucHVzaCgxMCksdGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVbYS10aGlzLmxpbmVSYW5nZS5zdGFydCsxXT10aGlzLmVsZW1lbnRzLmxlbmd0aCl9dGhpcy5hZGRpdGlvbmFsT2Zmc2V0QnlMaW5lLnB1c2goMCl9dG9TdHJpbmcoKXtyZXR1cm5gU2xpY2U6ICIke3RoaXMudGV4dH0iYH1nZXQgdGV4dCgpe3JldHVybiB0aGlzLmdldFRleHQobmV3ICQoMCx0aGlzLmxlbmd0aCkpfWdldFRleHQodCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuc2xpY2UodC5zdGFydCx0LmVuZEV4Y2x1c2l2ZSkubWFwKG49PlN0cmluZy5mcm9tQ2hhckNvZGUobikpLmpvaW4oIiIpfWdldEVsZW1lbnQodCl7cmV0dXJuIHRoaXMuZWxlbWVudHNbdF19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmxlbmd0aH1nZXRCb3VuZGFyeVNjb3JlKHQpe2NvbnN0IG49UXIodD4wP3RoaXMuZWxlbWVudHNbdC0xXTotMSksaT1Rcih0PHRoaXMuZWxlbWVudHMubGVuZ3RoP3RoaXMuZWxlbWVudHNbdF06LTEpO2lmKG49PT03JiZpPT09OClyZXR1cm4gMDtpZihuPT09OClyZXR1cm4gMTUwO2xldCByPTA7cmV0dXJuIG4hPT1pJiYocis9MTAsbj09PTAmJmk9PT0xJiYocis9MSkpLHIrPUpyKG4pLHIrPUpyKGkpLHJ9dHJhbnNsYXRlT2Zmc2V0KHQpe2lmKHRoaXMubGluZVJhbmdlLmlzRW1wdHkpcmV0dXJuIG5ldyBOZSh0aGlzLmxpbmVSYW5nZS5zdGFydCsxLDEpO2NvbnN0IG49QXQodGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmUsaT0+aTw9dCk7cmV0dXJuIG5ldyBOZSh0aGlzLmxpbmVSYW5nZS5zdGFydCtuKzEsdC10aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZVtuXSt0aGlzLmFkZGl0aW9uYWxPZmZzZXRCeUxpbmVbbl0rMSl9dHJhbnNsYXRlUmFuZ2UodCl7cmV0dXJuIG9lLmZyb21Qb3NpdGlvbnModGhpcy50cmFuc2xhdGVPZmZzZXQodC5zdGFydCksdGhpcy50cmFuc2xhdGVPZmZzZXQodC5lbmRFeGNsdXNpdmUpKX1maW5kV29yZENvbnRhaW5pbmcodCl7aWYodDwwfHx0Pj10aGlzLmVsZW1lbnRzLmxlbmd0aHx8IVFuKHRoaXMuZWxlbWVudHNbdF0pKXJldHVybjtsZXQgbj10O2Zvcig7bj4wJiZRbih0aGlzLmVsZW1lbnRzW24tMV0pOyluLS07bGV0IGk9dDtmb3IoO2k8dGhpcy5lbGVtZW50cy5sZW5ndGgmJlFuKHRoaXMuZWxlbWVudHNbaV0pOylpKys7cmV0dXJuIG5ldyAkKG4saSl9Y291bnRMaW5lc0luKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9mZnNldCh0LmVuZEV4Y2x1c2l2ZSkubGluZU51bWJlci10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LnN0YXJ0KS5saW5lTnVtYmVyfWlzU3Ryb25nbHlFcXVhbCh0LG4pe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdPT09dGhpcy5lbGVtZW50c1tuXX1leHRlbmRUb0Z1bGxMaW5lcyh0KXt2YXIgbixpO2NvbnN0IHI9KG49ZnQodGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmUscz0+czw9dC5zdGFydCkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOjAsYT0oaT1zbCh0aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZSxzPT50LmVuZEV4Y2x1c2l2ZTw9cykpIT09bnVsbCYmaSE9PXZvaWQgMD9pOnRoaXMuZWxlbWVudHMubGVuZ3RoO3JldHVybiBuZXcgJChyLGEpfX1mdW5jdGlvbiBRbihlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTd9Y29uc3QgZ2w9ezA6MCwxOjAsMjowLDM6MTAsNDoyLDU6MzAsNjozLDc6MTAsODoxMH07ZnVuY3Rpb24gSnIoZSl7cmV0dXJuIGdsW2VdfWZ1bmN0aW9uIFFyKGUpe3JldHVybiBlPT09MTA/ODplPT09MTM/NzpKbihlKT82OmU+PTk3JiZlPD0xMjI/MDplPj02NSYmZTw9OTA/MTplPj00OCYmZTw9NTc/MjplPT09LTE/MzplPT09NDR8fGU9PT01OT81OjR9ZnVuY3Rpb24gYmwoZSx0LG4saSxyLGEpe2xldHttb3ZlczpzLGV4Y2x1ZGVkQ2hhbmdlczpvfT1fbChlLHQsbixhKTtpZighYS5pc1ZhbGlkKCkpcmV0dXJuW107Y29uc3QgbD1lLmZpbHRlcihjPT4hby5oYXMoYykpLHU9d2wobCxpLHIsdCxuLGEpO3JldHVybiBBbyhzLHUpLHM9eWwocykscz1zLmZpbHRlcihjPT57Y29uc3QgZD1jLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKS5zbGljZSh0KS5tYXAoZj0+Zi50cmltKCkpO3JldHVybiBkLmpvaW4oYApgKS5sZW5ndGg+PTE1JiZ2bChkLGY9PmYubGVuZ3RoPj0yKT49Mn0pLHM9eGwoZSxzKSxzfWZ1bmN0aW9uIHZsKGUsdCl7bGV0IG49MDtmb3IoY29uc3QgaSBvZiBlKXQoaSkmJm4rKztyZXR1cm4gbn1mdW5jdGlvbiBfbChlLHQsbixpKXtjb25zdCByPVtdLGE9ZS5maWx0ZXIobD0+bC5tb2RpZmllZC5pc0VtcHR5JiZsLm9yaWdpbmFsLmxlbmd0aD49MykubWFwKGw9Pm5ldyBidChsLm9yaWdpbmFsLHQsbCkpLHM9bmV3IFNldChlLmZpbHRlcihsPT5sLm9yaWdpbmFsLmlzRW1wdHkmJmwubW9kaWZpZWQubGVuZ3RoPj0zKS5tYXAobD0+bmV3IGJ0KGwubW9kaWZpZWQsbixsKSkpLG89bmV3IFNldDtmb3IoY29uc3QgbCBvZiBhKXtsZXQgdT0tMSxjO2Zvcihjb25zdCBkIG9mIHMpe2NvbnN0IG09bC5jb21wdXRlU2ltaWxhcml0eShkKTttPnUmJih1PW0sYz1kKX1pZih1Pi45JiZjJiYocy5kZWxldGUoYyksci5wdXNoKG5ldyBDZShsLnJhbmdlLGMucmFuZ2UpKSxvLmFkZChsLnNvdXJjZSksby5hZGQoYy5zb3VyY2UpKSwhaS5pc1ZhbGlkKCkpcmV0dXJue21vdmVzOnIsZXhjbHVkZWRDaGFuZ2VzOm99fXJldHVybnttb3ZlczpyLGV4Y2x1ZGVkQ2hhbmdlczpvfX1mdW5jdGlvbiB3bChlLHQsbixpLHIsYSl7Y29uc3Qgcz1bXSxvPW5ldyBZbztmb3IoY29uc3QgbSBvZiBlKWZvcihsZXQgZj1tLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjtmPG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO2YrKyl7Y29uc3QgYj1gJHt0W2YtMV19OiR7dFtmKzEtMV19OiR7dFtmKzItMV19YDtvLmFkZChiLHtyYW5nZTpuZXcgRyhmLGYrMyl9KX1jb25zdCBsPVtdO2Uuc29ydChqdChtPT5tLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixHdCkpO2Zvcihjb25zdCBtIG9mIGUpe2xldCBmPVtdO2ZvcihsZXQgYj1tLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjtiPG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO2IrKyl7Y29uc3QgcD1gJHtuW2ItMV19OiR7bltiKzEtMV19OiR7bltiKzItMV19YCx3PW5ldyBHKGIsYiszKSx4PVtdO28uZm9yRWFjaChwLCh7cmFuZ2U6X30pPT57Zm9yKGNvbnN0IEUgb2YgZilpZihFLm9yaWdpbmFsTGluZVJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrMT09PV8uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmRS5tb2RpZmllZExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT13LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpe0Uub3JpZ2luYWxMaW5lUmFuZ2U9bmV3IEcoRS5vcmlnaW5hbExpbmVSYW5nZS5zdGFydExpbmVOdW1iZXIsXy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSxFLm1vZGlmaWVkTGluZVJhbmdlPW5ldyBHKEUubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHcuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkseC5wdXNoKEUpO3JldHVybn1jb25zdCB5PXttb2RpZmllZExpbmVSYW5nZTp3LG9yaWdpbmFsTGluZVJhbmdlOl99O2wucHVzaCh5KSx4LnB1c2goeSl9KSxmPXh9aWYoIWEuaXNWYWxpZCgpKXJldHVybltdfWwuc29ydChTbyhqdChtPT5tLm1vZGlmaWVkTGluZVJhbmdlLmxlbmd0aCxHdCkpKTtjb25zdCB1PW5ldyBJZSxjPW5ldyBJZTtmb3IoY29uc3QgbSBvZiBsKXtjb25zdCBmPW0ubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLW0ub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGI9dS5zdWJ0cmFjdEZyb20obS5tb2RpZmllZExpbmVSYW5nZSkscD1jLnN1YnRyYWN0RnJvbShtLm9yaWdpbmFsTGluZVJhbmdlKS5nZXRXaXRoRGVsdGEoZiksdz1iLmdldEludGVyc2VjdGlvbihwKTtmb3IoY29uc3QgeCBvZiB3LnJhbmdlcyl7aWYoeC5sZW5ndGg8Myljb250aW51ZTtjb25zdCBfPXgseT14LmRlbHRhKC1mKTtzLnB1c2gobmV3IENlKHksXykpLHUuYWRkUmFuZ2UoXyksYy5hZGRSYW5nZSh5KX19cy5zb3J0KGp0KG09Pm0ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLEd0KSk7Y29uc3QgZD1uZXcgU3QoZSk7Zm9yKGxldCBtPTA7bTxzLmxlbmd0aDttKyspe2NvbnN0IGY9c1ttXSxiPWQuZmluZExhc3RNb25vdG9ub3VzKFA9PlAub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyPD1mLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikscD1mdChlLFA9PlAubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPD1mLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciksdz1NYXRoLm1heChmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1iLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixmLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1wLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikseD1kLmZpbmRMYXN0TW9ub3Rvbm91cyhQPT5QLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxmLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLF89ZnQoZSxQPT5QLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjxmLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLHk9TWF0aC5tYXgoeC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLWYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxfLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtZi5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtsZXQgRTtmb3IoRT0wO0U8dztFKyspe2NvbnN0IFA9Zi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItRS0xLHY9Zi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItRS0xO2lmKFA+aS5sZW5ndGh8fHY+ci5sZW5ndGh8fHUuY29udGFpbnModil8fGMuY29udGFpbnMoUCl8fCFZcihpW1AtMV0sclt2LTFdLGEpKWJyZWFrfUU+MCYmKGMuYWRkUmFuZ2UobmV3IEcoZi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItRSxmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikpLHUuYWRkUmFuZ2UobmV3IEcoZi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItRSxmLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpKTtsZXQgUjtmb3IoUj0wO1I8eTtSKyspe2NvbnN0IFA9Zi5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK1Isdj1mLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUjtpZihQPmkubGVuZ3RofHx2PnIubGVuZ3RofHx1LmNvbnRhaW5zKHYpfHxjLmNvbnRhaW5zKFApfHwhWXIoaVtQLTFdLHJbdi0xXSxhKSlicmVha31SPjAmJihjLmFkZFJhbmdlKG5ldyBHKGYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxmLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUikpLHUuYWRkUmFuZ2UobmV3IEcoZi5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGYubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStSKSkpLChFPjB8fFI+MCkmJihzW21dPW5ldyBDZShuZXcgRyhmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1FLGYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStSKSxuZXcgRyhmLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1FLGYubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStSKSkpfXJldHVybiBzfWZ1bmN0aW9uIFlyKGUsdCxuKXtpZihlLnRyaW0oKT09PXQudHJpbSgpKXJldHVybiEwO2lmKGUubGVuZ3RoPjMwMCYmdC5sZW5ndGg+MzAwKXJldHVybiExO2NvbnN0IHI9bmV3ICRyKCkuY29tcHV0ZShuZXcgS3QoW2VdLG5ldyAkKDAsMSksITEpLG5ldyBLdChbdF0sbmV3ICQoMCwxKSwhMSksbik7bGV0IGE9MDtjb25zdCBzPW5lLmludmVydChyLmRpZmZzLGUubGVuZ3RoKTtmb3IoY29uc3QgYyBvZiBzKWMuc2VxMVJhbmdlLmZvckVhY2goZD0+e0puKGUuY2hhckNvZGVBdChkKSl8fGErK30pO2Z1bmN0aW9uIG8oYyl7bGV0IGQ9MDtmb3IobGV0IG09MDttPGUubGVuZ3RoO20rKylKbihjLmNoYXJDb2RlQXQobSkpfHxkKys7cmV0dXJuIGR9Y29uc3QgbD1vKGUubGVuZ3RoPnQubGVuZ3RoP2U6dCk7cmV0dXJuIGEvbD4uNiYmbD4xMH1mdW5jdGlvbiB5bChlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIGU7ZS5zb3J0KGp0KG49Pm4ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLEd0KSk7Y29uc3QgdD1bZVswXV07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspe2NvbnN0IGk9dFt0Lmxlbmd0aC0xXSxyPWVbbl0sYT1yLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1pLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUscz1yLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1pLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aWYoYT49MCYmcz49MCYmYStzPD0yKXt0W3QubGVuZ3RoLTFdPWkuam9pbihyKTtjb250aW51ZX10LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24geGwoZSx0KXtjb25zdCBuPW5ldyBTdChlKTtyZXR1cm4gdD10LmZpbHRlcihpPT57Y29uc3Qgcj1uLmZpbmRMYXN0TW9ub3Rvbm91cyhvPT5vLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxpLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpfHxuZXcgQ2UobmV3IEcoMSwxKSxuZXcgRygxLDEpKSxhPWZ0KGUsbz0+by5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8aS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gciE9PWF9KSx0fWZ1bmN0aW9uIFpyKGUsdCxuKXtsZXQgaT1uO3JldHVybiBpPUtyKGUsdCxpKSxpPUtyKGUsdCxpKSxpPVRsKGUsdCxpKSxpfWZ1bmN0aW9uIEtyKGUsdCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuIG47Y29uc3QgaT1bXTtpLnB1c2goblswXSk7Zm9yKGxldCBhPTE7YTxuLmxlbmd0aDthKyspe2NvbnN0IHM9aVtpLmxlbmd0aC0xXTtsZXQgbz1uW2FdO2lmKG8uc2VxMVJhbmdlLmlzRW1wdHl8fG8uc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IGw9by5zZXExUmFuZ2Uuc3RhcnQtcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTE7dTw9bCYmIShlLmdldEVsZW1lbnQoby5zZXExUmFuZ2Uuc3RhcnQtdSkhPT1lLmdldEVsZW1lbnQoby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLXUpfHx0LmdldEVsZW1lbnQoby5zZXEyUmFuZ2Uuc3RhcnQtdSkhPT10LmdldEVsZW1lbnQoby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLXUpKTt1KyspO2lmKHUtLSx1PT09bCl7aVtpLmxlbmd0aC0xXT1uZXcgbmUobmV3ICQocy5zZXExUmFuZ2Uuc3RhcnQsby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLWwpLG5ldyAkKHMuc2VxMlJhbmdlLnN0YXJ0LG8uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1sKSk7Y29udGludWV9bz1vLmRlbHRhKC11KX1pLnB1c2gobyl9Y29uc3Qgcj1bXTtmb3IobGV0IGE9MDthPGkubGVuZ3RoLTE7YSsrKXtjb25zdCBzPWlbYSsxXTtsZXQgbz1pW2FdO2lmKG8uc2VxMVJhbmdlLmlzRW1wdHl8fG8uc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IGw9cy5zZXExUmFuZ2Uuc3RhcnQtby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTA7dTxsJiYhKCFlLmlzU3Ryb25nbHlFcXVhbChvLnNlcTFSYW5nZS5zdGFydCt1LG8uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSt1KXx8IXQuaXNTdHJvbmdseUVxdWFsKG8uc2VxMlJhbmdlLnN0YXJ0K3Usby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK3UpKTt1KyspO2lmKHU9PT1sKXtpW2ErMV09bmV3IG5lKG5ldyAkKG8uc2VxMVJhbmdlLnN0YXJ0K2wscy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlKSxuZXcgJChvLnNlcTJSYW5nZS5zdGFydCtsLHMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSkpO2NvbnRpbnVlfXU+MCYmKG89by5kZWx0YSh1KSl9ci5wdXNoKG8pfXJldHVybiBpLmxlbmd0aD4wJiZyLnB1c2goaVtpLmxlbmd0aC0xXSkscn1mdW5jdGlvbiBUbChlLHQsbil7aWYoIWUuZ2V0Qm91bmRhcnlTY29yZXx8IXQuZ2V0Qm91bmRhcnlTY29yZSlyZXR1cm4gbjtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7Y29uc3Qgcj1pPjA/bltpLTFdOnZvaWQgMCxhPW5baV0scz1pKzE8bi5sZW5ndGg/bltpKzFdOnZvaWQgMCxvPW5ldyAkKHI/ci5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlKzE6MCxzP3Muc2VxMVJhbmdlLnN0YXJ0LTE6ZS5sZW5ndGgpLGw9bmV3ICQocj9yLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrMTowLHM/cy5zZXEyUmFuZ2Uuc3RhcnQtMTp0Lmxlbmd0aCk7YS5zZXExUmFuZ2UuaXNFbXB0eT9uW2ldPWVhKGEsZSx0LG8sbCk6YS5zZXEyUmFuZ2UuaXNFbXB0eSYmKG5baV09ZWEoYS5zd2FwKCksdCxlLGwsbykuc3dhcCgpKX1yZXR1cm4gbn1mdW5jdGlvbiBlYShlLHQsbixpLHIpe2xldCBzPTE7Zm9yKDtlLnNlcTFSYW5nZS5zdGFydC1zPj1pLnN0YXJ0JiZlLnNlcTJSYW5nZS5zdGFydC1zPj1yLnN0YXJ0JiZuLmlzU3Ryb25nbHlFcXVhbChlLnNlcTJSYW5nZS5zdGFydC1zLGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1zKSYmczwxMDA7KXMrKztzLS07bGV0IG89MDtmb3IoO2Uuc2VxMVJhbmdlLnN0YXJ0K288aS5lbmRFeGNsdXNpdmUmJmUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStvPHIuZW5kRXhjbHVzaXZlJiZuLmlzU3Ryb25nbHlFcXVhbChlLnNlcTJSYW5nZS5zdGFydCtvLGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStvKSYmbzwxMDA7KW8rKztpZihzPT09MCYmbz09PTApcmV0dXJuIGU7bGV0IGw9MCx1PS0xO2ZvcihsZXQgYz0tcztjPD1vO2MrKyl7Y29uc3QgZD1lLnNlcTJSYW5nZS5zdGFydCtjLG09ZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK2MsZj1lLnNlcTFSYW5nZS5zdGFydCtjLGI9dC5nZXRCb3VuZGFyeVNjb3JlKGYpK24uZ2V0Qm91bmRhcnlTY29yZShkKStuLmdldEJvdW5kYXJ5U2NvcmUobSk7Yj51JiYodT1iLGw9Yyl9cmV0dXJuIGUuZGVsdGEobCl9ZnVuY3Rpb24ga2woZSx0LG4pe2NvbnN0IGk9W107Zm9yKGNvbnN0IHIgb2Ygbil7Y29uc3QgYT1pW2kubGVuZ3RoLTFdO2lmKCFhKXtpLnB1c2gocik7Y29udGludWV9ci5zZXExUmFuZ2Uuc3RhcnQtYS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPD0yfHxyLnNlcTJSYW5nZS5zdGFydC1hLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU8PTI/aVtpLmxlbmd0aC0xXT1uZXcgbmUoYS5zZXExUmFuZ2Uuam9pbihyLnNlcTFSYW5nZSksYS5zZXEyUmFuZ2Uuam9pbihyLnNlcTJSYW5nZSkpOmkucHVzaChyKX1yZXR1cm4gaX1mdW5jdGlvbiBBbChlLHQsbil7Y29uc3QgaT1uZS5pbnZlcnQobixlLmxlbmd0aCkscj1bXTtsZXQgYT1uZXcgX2UoMCwwKTtmdW5jdGlvbiBzKGwsdSl7aWYobC5vZmZzZXQxPGEub2Zmc2V0MXx8bC5vZmZzZXQyPGEub2Zmc2V0MilyZXR1cm47Y29uc3QgYz1lLmZpbmRXb3JkQ29udGFpbmluZyhsLm9mZnNldDEpLGQ9dC5maW5kV29yZENvbnRhaW5pbmcobC5vZmZzZXQyKTtpZighY3x8IWQpcmV0dXJuO2xldCBtPW5ldyBuZShjLGQpO2NvbnN0IGY9bS5pbnRlcnNlY3QodSk7bGV0IGI9Zi5zZXExUmFuZ2UubGVuZ3RoLHA9Zi5zZXEyUmFuZ2UubGVuZ3RoO2Zvcig7aS5sZW5ndGg+MDspe2NvbnN0IHc9aVswXTtpZighKHcuc2VxMVJhbmdlLmludGVyc2VjdHMobS5zZXExUmFuZ2UpfHx3LnNlcTJSYW5nZS5pbnRlcnNlY3RzKG0uc2VxMlJhbmdlKSkpYnJlYWs7Y29uc3QgXz1lLmZpbmRXb3JkQ29udGFpbmluZyh3LnNlcTFSYW5nZS5zdGFydCkseT10LmZpbmRXb3JkQ29udGFpbmluZyh3LnNlcTJSYW5nZS5zdGFydCksRT1uZXcgbmUoXyx5KSxSPUUuaW50ZXJzZWN0KHcpO2lmKGIrPVIuc2VxMVJhbmdlLmxlbmd0aCxwKz1SLnNlcTJSYW5nZS5sZW5ndGgsbT1tLmpvaW4oRSksbS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPj13LnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpaS5zaGlmdCgpO2Vsc2UgYnJlYWt9YitwPChtLnNlcTFSYW5nZS5sZW5ndGgrbS5zZXEyUmFuZ2UubGVuZ3RoKSoyLzMmJnIucHVzaChtKSxhPW0uZ2V0RW5kRXhjbHVzaXZlcygpfWZvcig7aS5sZW5ndGg+MDspe2NvbnN0IGw9aS5zaGlmdCgpO2wuc2VxMVJhbmdlLmlzRW1wdHl8fChzKGwuZ2V0U3RhcnRzKCksbCkscyhsLmdldEVuZEV4Y2x1c2l2ZXMoKS5kZWx0YSgtMSksbCkpfXJldHVybiBTbChuLHIpfWZ1bmN0aW9uIFNsKGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCBpPWVbMF0scj10WzBdO2xldCBhO2kmJighcnx8aS5zZXExUmFuZ2Uuc3RhcnQ8ci5zZXExUmFuZ2Uuc3RhcnQpP2E9ZS5zaGlmdCgpOmE9dC5zaGlmdCgpLG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49YS5zZXExUmFuZ2Uuc3RhcnQ/bltuLmxlbmd0aC0xXT1uW24ubGVuZ3RoLTFdLmpvaW4oYSk6bi5wdXNoKGEpfXJldHVybiBufWZ1bmN0aW9uIExsKGUsdCxuKXtsZXQgaT1uO2lmKGkubGVuZ3RoPT09MClyZXR1cm4gaTtsZXQgcj0wLGE7ZG97YT0hMTtjb25zdCBzPVtpWzBdXTtmb3IobGV0IG89MTtvPGkubGVuZ3RoO28rKyl7bGV0IGM9ZnVuY3Rpb24obSxmKXtjb25zdCBiPW5ldyAkKHUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxsLnNlcTFSYW5nZS5zdGFydCk7cmV0dXJuIGUuZ2V0VGV4dChiKS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGg8PTQmJihtLnNlcTFSYW5nZS5sZW5ndGgrbS5zZXEyUmFuZ2UubGVuZ3RoPjV8fGYuc2VxMVJhbmdlLmxlbmd0aCtmLnNlcTJSYW5nZS5sZW5ndGg+NSl9O2NvbnN0IGw9aVtvXSx1PXNbcy5sZW5ndGgtMV07Yyh1LGwpPyhhPSEwLHNbcy5sZW5ndGgtMV09c1tzLmxlbmd0aC0xXS5qb2luKGwpKTpzLnB1c2gobCl9aT1zfXdoaWxlKHIrKzwxMCYmYSk7cmV0dXJuIGl9ZnVuY3Rpb24gQ2woZSx0LG4pe2xldCBpPW47aWYoaS5sZW5ndGg9PT0wKXJldHVybiBpO2xldCByPTAsYTtkb3thPSExO2NvbnN0IG89W2lbMF1dO2ZvcihsZXQgbD0xO2w8aS5sZW5ndGg7bCsrKXtsZXQgZD1mdW5jdGlvbihmLGIpe2NvbnN0IHA9bmV3ICQoYy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHUuc2VxMVJhbmdlLnN0YXJ0KTtpZihlLmNvdW50TGluZXNJbihwKT41fHxwLmxlbmd0aD41MDApcmV0dXJuITE7Y29uc3QgeD1lLmdldFRleHQocCkudHJpbSgpO2lmKHgubGVuZ3RoPjIwfHx4LnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RoPjEpcmV0dXJuITE7Y29uc3QgXz1lLmNvdW50TGluZXNJbihmLnNlcTFSYW5nZSkseT1mLnNlcTFSYW5nZS5sZW5ndGgsRT10LmNvdW50TGluZXNJbihmLnNlcTJSYW5nZSksUj1mLnNlcTJSYW5nZS5sZW5ndGgsUD1lLmNvdW50TGluZXNJbihiLnNlcTFSYW5nZSksdj1iLnNlcTFSYW5nZS5sZW5ndGgsZz10LmNvdW50TGluZXNJbihiLnNlcTJSYW5nZSksVD1iLnNlcTJSYW5nZS5sZW5ndGgscT0yKjQwKzUwO2Z1bmN0aW9uIFMoayl7cmV0dXJuIE1hdGgubWluKGsscSl9cmV0dXJuIE1hdGgucG93KE1hdGgucG93KFMoXyo0MCt5KSwxLjUpK01hdGgucG93KFMoRSo0MCtSKSwxLjUpLDEuNSkrTWF0aC5wb3coTWF0aC5wb3coUyhQKjQwK3YpLDEuNSkrTWF0aC5wb3coUyhnKjQwK1QpLDEuNSksMS41KT4ocSoqMS41KSoqMS41KjEuM307Y29uc3QgdT1pW2xdLGM9b1tvLmxlbmd0aC0xXTtkKGMsdSk/KGE9ITAsb1tvLmxlbmd0aC0xXT1vW28ubGVuZ3RoLTFdLmpvaW4odSkpOm8ucHVzaCh1KX1pPW99d2hpbGUocisrPDEwJiZhKTtjb25zdCBzPVtdO3JldHVybiBrbyhpLChvLGwsdSk9PntsZXQgYz1sO2Z1bmN0aW9uIGQoeCl7cmV0dXJuIHgubGVuZ3RoPjAmJngudHJpbSgpLmxlbmd0aDw9MyYmbC5zZXExUmFuZ2UubGVuZ3RoK2wuc2VxMlJhbmdlLmxlbmd0aD4xMDB9Y29uc3QgbT1lLmV4dGVuZFRvRnVsbExpbmVzKGwuc2VxMVJhbmdlKSxmPWUuZ2V0VGV4dChuZXcgJChtLnN0YXJ0LGwuc2VxMVJhbmdlLnN0YXJ0KSk7ZChmKSYmKGM9Yy5kZWx0YVN0YXJ0KC1mLmxlbmd0aCkpO2NvbnN0IGI9ZS5nZXRUZXh0KG5ldyAkKGwuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxtLmVuZEV4Y2x1c2l2ZSkpO2QoYikmJihjPWMuZGVsdGFFbmQoYi5sZW5ndGgpKTtjb25zdCBwPW5lLmZyb21PZmZzZXRQYWlycyhvP28uZ2V0RW5kRXhjbHVzaXZlcygpOl9lLnplcm8sdT91LmdldFN0YXJ0cygpOl9lLm1heCksdz1jLmludGVyc2VjdChwKTtzLmxlbmd0aD4wJiZ3LmdldFN0YXJ0cygpLmVxdWFscyhzW3MubGVuZ3RoLTFdLmdldEVuZEV4Y2x1c2l2ZXMoKSk/c1tzLmxlbmd0aC0xXT1zW3MubGVuZ3RoLTFdLmpvaW4odyk6cy5wdXNoKHcpfSksc31jbGFzcyB0YXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHJpbW1lZEhhc2g9dCx0aGlzLmxpbmVzPW59Z2V0RWxlbWVudCh0KXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaFt0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMudHJpbW1lZEhhc2gubGVuZ3RofWdldEJvdW5kYXJ5U2NvcmUodCl7Y29uc3Qgbj10PT09MD8wOm5hKHRoaXMubGluZXNbdC0xXSksaT10PT09dGhpcy5saW5lcy5sZW5ndGg/MDpuYSh0aGlzLmxpbmVzW3RdKTtyZXR1cm4gMWUzLShuK2kpfWdldFRleHQodCl7cmV0dXJuIHRoaXMubGluZXMuc2xpY2UodC5zdGFydCx0LmVuZEV4Y2x1c2l2ZSkuam9pbihgCmApfWlzU3Ryb25nbHlFcXVhbCh0LG4pe3JldHVybiB0aGlzLmxpbmVzW3RdPT09dGhpcy5saW5lc1tuXX19ZnVuY3Rpb24gbmEoZSl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGgmJihlLmNoYXJDb2RlQXQodCk9PT0zMnx8ZS5jaGFyQ29kZUF0KHQpPT09OSk7KXQrKztyZXR1cm4gdH1jbGFzcyBFbHtjb25zdHJ1Y3Rvcigpe3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZz1uZXcgbWwsdGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG09bmV3ICRyfWNvbXB1dGVEaWZmKHQsbixpKXtpZih0Lmxlbmd0aDw9MSYmeW8odCxuLChSLFApPT5SPT09UCkpcmV0dXJuIG5ldyBadChbXSxbXSwhMSk7aWYodC5sZW5ndGg9PT0xJiZ0WzBdLmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MSYmblswXS5sZW5ndGg9PT0wKXJldHVybiBuZXcgWnQoW25ldyBXZShuZXcgRygxLHQubGVuZ3RoKzEpLG5ldyBHKDEsbi5sZW5ndGgrMSksW25ldyBwdChuZXcgb2UoMSwxLHQubGVuZ3RoLHRbMF0ubGVuZ3RoKzEpLG5ldyBvZSgxLDEsbi5sZW5ndGgsblswXS5sZW5ndGgrMSkpXSldLFtdLCExKTtjb25zdCByPWkubWF4Q29tcHV0YXRpb25UaW1lTXM9PT0wP0N0Lmluc3RhbmNlOm5ldyBkbChpLm1heENvbXB1dGF0aW9uVGltZU1zKSxhPSFpLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLHM9bmV3IE1hcDtmdW5jdGlvbiBvKFIpe2xldCBQPXMuZ2V0KFIpO3JldHVybiBQPT09dm9pZCAwJiYoUD1zLnNpemUscy5zZXQoUixQKSksUH1jb25zdCBsPXQubWFwKFI9Pm8oUi50cmltKCkpKSx1PW4ubWFwKFI9Pm8oUi50cmltKCkpKSxjPW5ldyB0YShsLHQpLGQ9bmV3IHRhKHUsbiksbT1jLmxlbmd0aCtkLmxlbmd0aDwxNzAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKGMsZCxyLChSLFApPT50W1JdPT09bltQXT9uW1BdLmxlbmd0aD09PTA/LjE6MStNYXRoLmxvZygxK25bUF0ubGVuZ3RoKTouOTkpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUoYyxkKTtsZXQgZj1tLmRpZmZzLGI9bS5oaXRUaW1lb3V0O2Y9WnIoYyxkLGYpLGY9TGwoYyxkLGYpO2NvbnN0IHA9W10sdz1SPT57aWYoYSlmb3IobGV0IFA9MDtQPFI7UCsrKXtjb25zdCB2PXgrUCxnPV8rUDtpZih0W3ZdIT09bltnXSl7Y29uc3QgVD10aGlzLnJlZmluZURpZmYodCxuLG5ldyBuZShuZXcgJCh2LHYrMSksbmV3ICQoZyxnKzEpKSxyLGEpO2Zvcihjb25zdCBxIG9mIFQubWFwcGluZ3MpcC5wdXNoKHEpO1QuaGl0VGltZW91dCYmKGI9ITApfX19O2xldCB4PTAsXz0wO2Zvcihjb25zdCBSIG9mIGYpe1l0KCgpPT5SLnNlcTFSYW5nZS5zdGFydC14PT09Ui5zZXEyUmFuZ2Uuc3RhcnQtXyk7Y29uc3QgUD1SLnNlcTFSYW5nZS5zdGFydC14O3coUCkseD1SLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUsXz1SLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU7Y29uc3Qgdj10aGlzLnJlZmluZURpZmYodCxuLFIscixhKTt2LmhpdFRpbWVvdXQmJihiPSEwKTtmb3IoY29uc3QgZyBvZiB2Lm1hcHBpbmdzKXAucHVzaChnKX13KHQubGVuZ3RoLXgpO2NvbnN0IHk9aWEocCx0LG4pO2xldCBFPVtdO3JldHVybiBpLmNvbXB1dGVNb3ZlcyYmKEU9dGhpcy5jb21wdXRlTW92ZXMoeSx0LG4sbCx1LHIsYSkpLFl0KCgpPT57ZnVuY3Rpb24gUih2LGcpe2lmKHYubGluZU51bWJlcjwxfHx2LmxpbmVOdW1iZXI+Zy5sZW5ndGgpcmV0dXJuITE7Y29uc3QgVD1nW3YubGluZU51bWJlci0xXTtyZXR1cm4hKHYuY29sdW1uPDF8fHYuY29sdW1uPlQubGVuZ3RoKzEpfWZ1bmN0aW9uIFAodixnKXtyZXR1cm4hKHYuc3RhcnRMaW5lTnVtYmVyPDF8fHYuc3RhcnRMaW5lTnVtYmVyPmcubGVuZ3RoKzF8fHYuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTwxfHx2LmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+Zy5sZW5ndGgrMSl9Zm9yKGNvbnN0IHYgb2YgeSl7aWYoIXYuaW5uZXJDaGFuZ2VzKXJldHVybiExO2Zvcihjb25zdCBnIG9mIHYuaW5uZXJDaGFuZ2VzKWlmKCEoUihnLm1vZGlmaWVkUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpLG4pJiZSKGcubW9kaWZpZWRSYW5nZS5nZXRFbmRQb3NpdGlvbigpLG4pJiZSKGcub3JpZ2luYWxSYW5nZS5nZXRTdGFydFBvc2l0aW9uKCksdCkmJlIoZy5vcmlnaW5hbFJhbmdlLmdldEVuZFBvc2l0aW9uKCksdCkpKXJldHVybiExO2lmKCFQKHYubW9kaWZpZWQsbil8fCFQKHYub3JpZ2luYWwsdCkpcmV0dXJuITF9cmV0dXJuITB9KSxuZXcgWnQoeSxFLGIpfWNvbXB1dGVNb3Zlcyh0LG4saSxyLGEscyxvKXtyZXR1cm4gYmwodCxuLGkscixhLHMpLm1hcChjPT57Y29uc3QgZD10aGlzLnJlZmluZURpZmYobixpLG5ldyBuZShjLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKSxjLm1vZGlmaWVkLnRvT2Zmc2V0UmFuZ2UoKSkscyxvKSxtPWlhKGQubWFwcGluZ3MsbixpLCEwKTtyZXR1cm4gbmV3IGFsKGMsbSl9KX1yZWZpbmVEaWZmKHQsbixpLHIsYSl7Y29uc3Qgcz1uZXcgS3QodCxpLnNlcTFSYW5nZSxhKSxvPW5ldyBLdChuLGkuc2VxMlJhbmdlLGEpLGw9cy5sZW5ndGgrby5sZW5ndGg8NTAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKHMsbyxyKTp0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobS5jb21wdXRlKHMsbyxyKTtsZXQgdT1sLmRpZmZzO3JldHVybiB1PVpyKHMsbyx1KSx1PUFsKHMsbyx1KSx1PWtsKHMsbyx1KSx1PUNsKHMsbyx1KSx7bWFwcGluZ3M6dS5tYXAoZD0+bmV3IHB0KHMudHJhbnNsYXRlUmFuZ2UoZC5zZXExUmFuZ2UpLG8udHJhbnNsYXRlUmFuZ2UoZC5zZXEyUmFuZ2UpKSksaGl0VGltZW91dDpsLmhpdFRpbWVvdXR9fX1mdW5jdGlvbiBpYShlLHQsbixpPSExKXtjb25zdCByPVtdO2Zvcihjb25zdCBhIG9mIHhvKGUubWFwKHM9PlJsKHMsdCxuKSksKHMsbyk9PnMub3JpZ2luYWwub3ZlcmxhcE9yVG91Y2goby5vcmlnaW5hbCl8fHMubW9kaWZpZWQub3ZlcmxhcE9yVG91Y2goby5tb2RpZmllZCkpKXtjb25zdCBzPWFbMF0sbz1hW2EubGVuZ3RoLTFdO3IucHVzaChuZXcgV2Uocy5vcmlnaW5hbC5qb2luKG8ub3JpZ2luYWwpLHMubW9kaWZpZWQuam9pbihvLm1vZGlmaWVkKSxhLm1hcChsPT5sLmlubmVyQ2hhbmdlc1swXSkpKX1yZXR1cm4gWXQoKCk9PiFpJiZyLmxlbmd0aD4wJiYoclswXS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIhPT1yWzBdLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcnx8bi5sZW5ndGgtcltyLmxlbmd0aC0xXS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlIT09dC5sZW5ndGgtcltyLmxlbmd0aC0xXS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKT8hMTpCcihyLChhLHMpPT5zLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1hLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1zLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1hLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJmEub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciYmYS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyKSkscn1mdW5jdGlvbiBSbChlLHQsbil7bGV0IGk9MCxyPTA7ZS5tb2RpZmllZFJhbmdlLmVuZENvbHVtbj09PTEmJmUub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW49PT0xJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK2k8PWUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyJiZlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK2k8PWUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyJiYocj0tMSksZS5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLTE+PW5bZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlci0xXS5sZW5ndGgmJmUub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbi0xPj10W2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyPD1lLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcityJiZlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyPD1lLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcityJiYoaT0xKTtjb25zdCBhPW5ldyBHKGUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIraSxlLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcisxK3IpLHM9bmV3IEcoZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcitpLGUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyKzErcik7cmV0dXJuIG5ldyBXZShhLHMsW2VdKX1jb25zdCByYT17Z2V0TGVnYWN5OigpPT5uZXcgbGwsZ2V0RGVmYXVsdDooKT0+bmV3IEVsfTtmdW5jdGlvbiAkZShlLHQpe2NvbnN0IG49TWF0aC5wb3coMTAsdCk7cmV0dXJuIE1hdGgucm91bmQoZSpuKS9ufWNsYXNzIGxle2NvbnN0cnVjdG9yKHQsbixpLHI9MSl7dGhpcy5fcmdiYUJyYW5kPXZvaWQgMCx0aGlzLnI9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsdCkpfDAsdGhpcy5nPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLG4pKXwwLHRoaXMuYj1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxpKSl8MCx0aGlzLmE9JGUoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQucj09PW4uciYmdC5nPT09bi5nJiZ0LmI9PT1uLmImJnQuYT09PW4uYX19Y2xhc3MgVGV7Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy5faHNsYUJyYW5kPXZvaWQgMCx0aGlzLmg9TWF0aC5tYXgoTWF0aC5taW4oMzYwLHQpLDApfDAsdGhpcy5zPSRlKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5sPSRlKE1hdGgubWF4KE1hdGgubWluKDEsaSksMCksMyksdGhpcy5hPSRlKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0Lmg9PT1uLmgmJnQucz09PW4ucyYmdC5sPT09bi5sJiZ0LmE9PT1uLmF9c3RhdGljIGZyb21SR0JBKHQpe2NvbnN0IG49dC5yLzI1NSxpPXQuZy8yNTUscj10LmIvMjU1LGE9dC5hLHM9TWF0aC5tYXgobixpLHIpLG89TWF0aC5taW4obixpLHIpO2xldCBsPTAsdT0wO2NvbnN0IGM9KG8rcykvMixkPXMtbztpZihkPjApe3N3aXRjaCh1PU1hdGgubWluKGM8PS41P2QvKDIqYyk6ZC8oMi0yKmMpLDEpLHMpe2Nhc2UgbjpsPShpLXIpL2QrKGk8cj82OjApO2JyZWFrO2Nhc2UgaTpsPShyLW4pL2QrMjticmVhaztjYXNlIHI6bD0obi1pKS9kKzQ7YnJlYWt9bCo9NjAsbD1NYXRoLnJvdW5kKGwpfXJldHVybiBuZXcgVGUobCx1LGMsYSl9c3RhdGljIF9odWUycmdiKHQsbixpKXtyZXR1cm4gaTwwJiYoaSs9MSksaT4xJiYoaS09MSksaTwxLzY/dCsobi10KSo2Kmk6aTwxLzI/bjppPDIvMz90KyhuLXQpKigyLzMtaSkqNjp0fXN0YXRpYyB0b1JHQkEodCl7Y29uc3Qgbj10LmgvMzYwLHtzOmksbDpyLGF9PXQ7bGV0IHMsbyxsO2lmKGk9PT0wKXM9bz1sPXI7ZWxzZXtjb25zdCB1PXI8LjU/ciooMStpKTpyK2ktcippLGM9MipyLXU7cz1UZS5faHVlMnJnYihjLHUsbisxLzMpLG89VGUuX2h1ZTJyZ2IoYyx1LG4pLGw9VGUuX2h1ZTJyZ2IoYyx1LG4tMS8zKX1yZXR1cm4gbmV3IGxlKE1hdGgucm91bmQocyoyNTUpLE1hdGgucm91bmQobyoyNTUpLE1hdGgucm91bmQobCoyNTUpLGEpfX1jbGFzcyB2dHtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLl9oc3ZhQnJhbmQ9dm9pZCAwLHRoaXMuaD1NYXRoLm1heChNYXRoLm1pbigzNjAsdCksMCl8MCx0aGlzLnM9JGUoTWF0aC5tYXgoTWF0aC5taW4oMSxuKSwwKSwzKSx0aGlzLnY9JGUoTWF0aC5tYXgoTWF0aC5taW4oMSxpKSwwKSwzKSx0aGlzLmE9JGUoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQuaD09PW4uaCYmdC5zPT09bi5zJiZ0LnY9PT1uLnYmJnQuYT09PW4uYX1zdGF0aWMgZnJvbVJHQkEodCl7Y29uc3Qgbj10LnIvMjU1LGk9dC5nLzI1NSxyPXQuYi8yNTUsYT1NYXRoLm1heChuLGkscikscz1NYXRoLm1pbihuLGksciksbz1hLXMsbD1hPT09MD8wOm8vYTtsZXQgdTtyZXR1cm4gbz09PTA/dT0wOmE9PT1uP3U9KChpLXIpL28lNis2KSU2OmE9PT1pP3U9KHItbikvbysyOnU9KG4taSkvbys0LG5ldyB2dChNYXRoLnJvdW5kKHUqNjApLGwsYSx0LmEpfXN0YXRpYyB0b1JHQkEodCl7Y29uc3R7aDpuLHM6aSx2OnIsYX09dCxzPXIqaSxvPXMqKDEtTWF0aC5hYnMobi82MCUyLTEpKSxsPXItcztsZXRbdSxjLGRdPVswLDAsMF07cmV0dXJuIG48NjA/KHU9cyxjPW8pOm48MTIwPyh1PW8sYz1zKTpuPDE4MD8oYz1zLGQ9byk6bjwyNDA/KGM9byxkPXMpOm48MzAwPyh1PW8sZD1zKTpuPD0zNjAmJih1PXMsZD1vKSx1PU1hdGgucm91bmQoKHUrbCkqMjU1KSxjPU1hdGgucm91bmQoKGMrbCkqMjU1KSxkPU1hdGgucm91bmQoKGQrbCkqMjU1KSxuZXcgbGUodSxjLGQsYSl9fWxldCBhZT1jbGFzcyBrZXtzdGF0aWMgZnJvbUhleCh0KXtyZXR1cm4ga2UuRm9ybWF0LkNTUy5wYXJzZUhleCh0KXx8a2UucmVkfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4hdCYmIW4/ITA6IXR8fCFuPyExOnQuZXF1YWxzKG4pfWdldCBoc2xhKCl7cmV0dXJuIHRoaXMuX2hzbGE/dGhpcy5faHNsYTpUZS5mcm9tUkdCQSh0aGlzLnJnYmEpfWdldCBoc3ZhKCl7cmV0dXJuIHRoaXMuX2hzdmE/dGhpcy5faHN2YTp2dC5mcm9tUkdCQSh0aGlzLnJnYmEpfWNvbnN0cnVjdG9yKHQpe2lmKHQpaWYodCBpbnN0YW5jZW9mIGxlKXRoaXMucmdiYT10O2Vsc2UgaWYodCBpbnN0YW5jZW9mIFRlKXRoaXMuX2hzbGE9dCx0aGlzLnJnYmE9VGUudG9SR0JBKHQpO2Vsc2UgaWYodCBpbnN0YW5jZW9mIHZ0KXRoaXMuX2hzdmE9dCx0aGlzLnJnYmE9dnQudG9SR0JBKHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIGN0b3IgYXJndW1lbnQiKTtlbHNlIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbmVlZHMgYSB2YWx1ZSIpfWVxdWFscyh0KXtyZXR1cm4hIXQmJmxlLmVxdWFscyh0aGlzLnJnYmEsdC5yZ2JhKSYmVGUuZXF1YWxzKHRoaXMuaHNsYSx0LmhzbGEpJiZ2dC5lcXVhbHModGhpcy5oc3ZhLHQuaHN2YSl9Z2V0UmVsYXRpdmVMdW1pbmFuY2UoKXtjb25zdCB0PWtlLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuciksbj1rZS5fcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodGhpcy5yZ2JhLmcpLGk9a2UuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5iKSxyPS4yMTI2KnQrLjcxNTIqbisuMDcyMippO3JldHVybiAkZShyLDQpfXN0YXRpYyBfcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodCl7Y29uc3Qgbj10LzI1NTtyZXR1cm4gbjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1pc0xpZ2h0ZXIoKXtyZXR1cm4odGhpcy5yZ2JhLnIqMjk5K3RoaXMucmdiYS5nKjU4Nyt0aGlzLnJnYmEuYioxMTQpLzFlMz49MTI4fWlzTGlnaHRlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG4+aX1pc0RhcmtlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG48aX1saWdodGVuKHQpe3JldHVybiBuZXcga2UobmV3IFRlKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sK3RoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX1kYXJrZW4odCl7cmV0dXJuIG5ldyBrZShuZXcgVGUodGhpcy5oc2xhLmgsdGhpcy5oc2xhLnMsdGhpcy5oc2xhLmwtdGhpcy5oc2xhLmwqdCx0aGlzLmhzbGEuYSkpfXRyYW5zcGFyZW50KHQpe2NvbnN0e3I6bixnOmksYjpyLGF9PXRoaXMucmdiYTtyZXR1cm4gbmV3IGtlKG5ldyBsZShuLGkscixhKnQpKX1pc1RyYW5zcGFyZW50KCl7cmV0dXJuIHRoaXMucmdiYS5hPT09MH1pc09wYXF1ZSgpe3JldHVybiB0aGlzLnJnYmEuYT09PTF9b3Bwb3NpdGUoKXtyZXR1cm4gbmV3IGtlKG5ldyBsZSgyNTUtdGhpcy5yZ2JhLnIsMjU1LXRoaXMucmdiYS5nLDI1NS10aGlzLnJnYmEuYix0aGlzLnJnYmEuYSkpfW1ha2VPcGFxdWUodCl7aWYodGhpcy5pc09wYXF1ZSgpfHx0LnJnYmEuYSE9PTEpcmV0dXJuIHRoaXM7Y29uc3R7cjpuLGc6aSxiOnIsYX09dGhpcy5yZ2JhO3JldHVybiBuZXcga2UobmV3IGxlKHQucmdiYS5yLWEqKHQucmdiYS5yLW4pLHQucmdiYS5nLWEqKHQucmdiYS5nLWkpLHQucmdiYS5iLWEqKHQucmdiYS5iLXIpLDEpKX10b1N0cmluZygpe3JldHVybiB0aGlzLl90b1N0cmluZ3x8KHRoaXMuX3RvU3RyaW5nPWtlLkZvcm1hdC5DU1MuZm9ybWF0KHRoaXMpKSx0aGlzLl90b1N0cmluZ31zdGF0aWMgZ2V0TGlnaHRlckNvbG9yKHQsbixpKXtpZih0LmlzTGlnaHRlclRoYW4obikpcmV0dXJuIHQ7aT1pfHwuNTtjb25zdCByPXQuZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKSxhPW4uZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKTtyZXR1cm4gaT1pKihhLXIpL2EsdC5saWdodGVuKGkpfXN0YXRpYyBnZXREYXJrZXJDb2xvcih0LG4saSl7aWYodC5pc0RhcmtlclRoYW4obikpcmV0dXJuIHQ7aT1pfHwuNTtjb25zdCByPXQuZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKSxhPW4uZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKTtyZXR1cm4gaT1pKihyLWEpL3IsdC5kYXJrZW4oaSl9fTthZS53aGl0ZT1uZXcgYWUobmV3IGxlKDI1NSwyNTUsMjU1LDEpKSxhZS5ibGFjaz1uZXcgYWUobmV3IGxlKDAsMCwwLDEpKSxhZS5yZWQ9bmV3IGFlKG5ldyBsZSgyNTUsMCwwLDEpKSxhZS5ibHVlPW5ldyBhZShuZXcgbGUoMCwwLDI1NSwxKSksYWUuZ3JlZW49bmV3IGFlKG5ldyBsZSgwLDI1NSwwLDEpKSxhZS5jeWFuPW5ldyBhZShuZXcgbGUoMCwyNTUsMjU1LDEpKSxhZS5saWdodGdyZXk9bmV3IGFlKG5ldyBsZSgyMTEsMjExLDIxMSwxKSksYWUudHJhbnNwYXJlbnQ9bmV3IGFlKG5ldyBsZSgwLDAsMCwwKSksZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbihuKXtmdW5jdGlvbiBpKGYpe3JldHVybiBmLnJnYmEuYT09PTE/YHJnYigke2YucmdiYS5yfSwgJHtmLnJnYmEuZ30sICR7Zi5yZ2JhLmJ9KWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEoZil9bi5mb3JtYXRSR0I9aTtmdW5jdGlvbiByKGYpe3JldHVybmByZ2JhKCR7Zi5yZ2JhLnJ9LCAke2YucmdiYS5nfSwgJHtmLnJnYmEuYn0sICR7K2YucmdiYS5hLnRvRml4ZWQoMil9KWB9bi5mb3JtYXRSR0JBPXI7ZnVuY3Rpb24gYShmKXtyZXR1cm4gZi5oc2xhLmE9PT0xP2Boc2woJHtmLmhzbGEuaH0sICR7KGYuaHNsYS5zKjEwMCkudG9GaXhlZCgyKX0lLCAkeyhmLmhzbGEubCoxMDApLnRvRml4ZWQoMil9JSlgOmUuRm9ybWF0LkNTUy5mb3JtYXRIU0xBKGYpfW4uZm9ybWF0SFNMPWE7ZnVuY3Rpb24gcyhmKXtyZXR1cm5gaHNsYSgke2YuaHNsYS5ofSwgJHsoZi5oc2xhLnMqMTAwKS50b0ZpeGVkKDIpfSUsICR7KGYuaHNsYS5sKjEwMCkudG9GaXhlZCgyKX0lLCAke2YuaHNsYS5hLnRvRml4ZWQoMil9KWB9bi5mb3JtYXRIU0xBPXM7ZnVuY3Rpb24gbyhmKXtjb25zdCBiPWYudG9TdHJpbmcoMTYpO3JldHVybiBiLmxlbmd0aCE9PTI/IjAiK2I6Yn1mdW5jdGlvbiBsKGYpe3JldHVybmAjJHtvKGYucmdiYS5yKX0ke28oZi5yZ2JhLmcpfSR7byhmLnJnYmEuYil9YH1uLmZvcm1hdEhleD1sO2Z1bmN0aW9uIHUoZixiPSExKXtyZXR1cm4gYiYmZi5yZ2JhLmE9PT0xP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgoZik6YCMke28oZi5yZ2JhLnIpfSR7byhmLnJnYmEuZyl9JHtvKGYucmdiYS5iKX0ke28oTWF0aC5yb3VuZChmLnJnYmEuYSoyNTUpKX1gfW4uZm9ybWF0SGV4QT11O2Z1bmN0aW9uIGMoZil7cmV0dXJuIGYuaXNPcGFxdWUoKT9lLkZvcm1hdC5DU1MuZm9ybWF0SGV4KGYpOmUuRm9ybWF0LkNTUy5mb3JtYXRSR0JBKGYpfW4uZm9ybWF0PWM7ZnVuY3Rpb24gZChmKXtjb25zdCBiPWYubGVuZ3RoO2lmKGI9PT0wfHxmLmNoYXJDb2RlQXQoMCkhPT0zNSlyZXR1cm4gbnVsbDtpZihiPT09Nyl7Y29uc3QgcD0xNiptKGYuY2hhckNvZGVBdCgxKSkrbShmLmNoYXJDb2RlQXQoMikpLHc9MTYqbShmLmNoYXJDb2RlQXQoMykpK20oZi5jaGFyQ29kZUF0KDQpKSx4PTE2Km0oZi5jaGFyQ29kZUF0KDUpKSttKGYuY2hhckNvZGVBdCg2KSk7cmV0dXJuIG5ldyBlKG5ldyBsZShwLHcseCwxKSl9aWYoYj09PTkpe2NvbnN0IHA9MTYqbShmLmNoYXJDb2RlQXQoMSkpK20oZi5jaGFyQ29kZUF0KDIpKSx3PTE2Km0oZi5jaGFyQ29kZUF0KDMpKSttKGYuY2hhckNvZGVBdCg0KSkseD0xNiptKGYuY2hhckNvZGVBdCg1KSkrbShmLmNoYXJDb2RlQXQoNikpLF89MTYqbShmLmNoYXJDb2RlQXQoNykpK20oZi5jaGFyQ29kZUF0KDgpKTtyZXR1cm4gbmV3IGUobmV3IGxlKHAsdyx4LF8vMjU1KSl9aWYoYj09PTQpe2NvbnN0IHA9bShmLmNoYXJDb2RlQXQoMSkpLHc9bShmLmNoYXJDb2RlQXQoMikpLHg9bShmLmNoYXJDb2RlQXQoMykpO3JldHVybiBuZXcgZShuZXcgbGUoMTYqcCtwLDE2KncrdywxNip4K3gpKX1pZihiPT09NSl7Y29uc3QgcD1tKGYuY2hhckNvZGVBdCgxKSksdz1tKGYuY2hhckNvZGVBdCgyKSkseD1tKGYuY2hhckNvZGVBdCgzKSksXz1tKGYuY2hhckNvZGVBdCg0KSk7cmV0dXJuIG5ldyBlKG5ldyBsZSgxNipwK3AsMTYqdyt3LDE2KngreCwoMTYqXytfKS8yNTUpKX1yZXR1cm4gbnVsbH1uLnBhcnNlSGV4PWQ7ZnVuY3Rpb24gbShmKXtzd2l0Y2goZil7Y2FzZSA0ODpyZXR1cm4gMDtjYXNlIDQ5OnJldHVybiAxO2Nhc2UgNTA6cmV0dXJuIDI7Y2FzZSA1MTpyZXR1cm4gMztjYXNlIDUyOnJldHVybiA0O2Nhc2UgNTM6cmV0dXJuIDU7Y2FzZSA1NDpyZXR1cm4gNjtjYXNlIDU1OnJldHVybiA3O2Nhc2UgNTY6cmV0dXJuIDg7Y2FzZSA1NzpyZXR1cm4gOTtjYXNlIDk3OnJldHVybiAxMDtjYXNlIDY1OnJldHVybiAxMDtjYXNlIDk4OnJldHVybiAxMTtjYXNlIDY2OnJldHVybiAxMTtjYXNlIDk5OnJldHVybiAxMjtjYXNlIDY3OnJldHVybiAxMjtjYXNlIDEwMDpyZXR1cm4gMTM7Y2FzZSA2ODpyZXR1cm4gMTM7Y2FzZSAxMDE6cmV0dXJuIDE0O2Nhc2UgNjk6cmV0dXJuIDE0O2Nhc2UgMTAyOnJldHVybiAxNTtjYXNlIDcwOnJldHVybiAxNX1yZXR1cm4gMH19KSh0LkNTU3x8KHQuQ1NTPXt9KSl9KShlLkZvcm1hdHx8KGUuRm9ybWF0PXt9KSl9KGFlfHwoYWU9e30pKTtmdW5jdGlvbiBhYShlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IGk9TnVtYmVyKG4pOyhpfHxpPT09MCYmbi5yZXBsYWNlKC9ccy9nLCIiKSE9PSIiKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIFluKGUsdCxuLGkpe3JldHVybntyZWQ6ZS8yNTUsYmx1ZTpuLzI1NSxncmVlbjp0LzI1NSxhbHBoYTppfX1mdW5jdGlvbiBFdChlLHQpe2NvbnN0IG49dC5pbmRleCxpPXRbMF0ubGVuZ3RoO2lmKCFuKXJldHVybjtjb25zdCByPWUucG9zaXRpb25BdChuKTtyZXR1cm57c3RhcnRMaW5lTnVtYmVyOnIubGluZU51bWJlcixzdGFydENvbHVtbjpyLmNvbHVtbixlbmRMaW5lTnVtYmVyOnIubGluZU51bWJlcixlbmRDb2x1bW46ci5jb2x1bW4raX19ZnVuY3Rpb24gTWwoZSx0KXtpZighZSlyZXR1cm47Y29uc3Qgbj1hZS5Gb3JtYXQuQ1NTLnBhcnNlSGV4KHQpO2lmKG4pcmV0dXJue3JhbmdlOmUsY29sb3I6WW4obi5yZ2JhLnIsbi5yZ2JhLmcsbi5yZ2JhLmIsbi5yZ2JhLmEpfX1mdW5jdGlvbiBzYShlLHQsbil7aWYoIWV8fHQubGVuZ3RoIT09MSlyZXR1cm47Y29uc3Qgcj10WzBdLnZhbHVlcygpLGE9YWEocik7cmV0dXJue3JhbmdlOmUsY29sb3I6WW4oYVswXSxhWzFdLGFbMl0sbj9hWzNdOjEpfX1mdW5jdGlvbiBvYShlLHQsbil7aWYoIWV8fHQubGVuZ3RoIT09MSlyZXR1cm47Y29uc3Qgcj10WzBdLnZhbHVlcygpLGE9YWEocikscz1uZXcgYWUobmV3IFRlKGFbMF0sYVsxXS8xMDAsYVsyXS8xMDAsbj9hWzNdOjEpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpZbihzLnJnYmEucixzLnJnYmEuZyxzLnJnYmEuYixzLnJnYmEuYSl9fWZ1bmN0aW9uIFJ0KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9bLi4uZS5tYXRjaEFsbCh0KV06ZS5maW5kTWF0Y2hlcyh0KX1mdW5jdGlvbiBEbChlKXtjb25zdCB0PVtdLGk9UnQoZSwvXGIocmdifHJnYmF8aHNsfGhzbGEpKFwoWzAtOVxzLC5cJV0qXCkpfCgjKShbQS1GYS1mMC05XXszfSlcYnwoIykoW0EtRmEtZjAtOV17NH0pXGJ8KCMpKFtBLUZhLWYwLTldezZ9KVxifCgjKShbQS1GYS1mMC05XXs4fSlcYi9nbSk7aWYoaS5sZW5ndGg+MClmb3IoY29uc3QgciBvZiBpKXtjb25zdCBhPXIuZmlsdGVyKHU9PnUhPT12b2lkIDApLHM9YVsxXSxvPWFbMl07aWYoIW8pY29udGludWU7bGV0IGw7aWYocz09PSJyZ2IiKXtjb25zdCB1PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKlwpJC9nbTtsPXNhKEV0KGUsciksUnQobyx1KSwhMSl9ZWxzZSBpZihzPT09InJnYmEiKXtjb25zdCB1PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMFsuXVswLTldK3xbLl1bMC05XSt8WzAxXVsuXXxbMDFdKVxzKlwpJC9nbTtsPXNhKEV0KGUsciksUnQobyx1KSwhMCl9ZWxzZSBpZihzPT09ImhzbCIpe2NvbnN0IHU9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqXCkkL2dtO2w9b2EoRXQoZSxyKSxSdChvLHUpLCExKX1lbHNlIGlmKHM9PT0iaHNsYSIpe2NvbnN0IHU9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO2w9b2EoRXQoZSxyKSxSdChvLHUpLCEwKX1lbHNlIHM9PT0iIyImJihsPU1sKEV0KGUscikscytvKSk7bCYmdC5wdXNoKGwpfXJldHVybiB0fWZ1bmN0aW9uIE5sKGUpe3JldHVybiFlfHx0eXBlb2YgZS5nZXRWYWx1ZSE9ImZ1bmN0aW9uInx8dHlwZW9mIGUucG9zaXRpb25BdCE9ImZ1bmN0aW9uIj9bXTpEbChlKX1jb25zdCBsYT0vXGJNQVJLOlxzKiguKikkL2QsSWw9L14tK3wtKyQvZztmdW5jdGlvbiB6bChlLHQpe3ZhciBuO2xldCBpPVtdO2lmKHQuZmluZFJlZ2lvblNlY3Rpb25IZWFkZXJzJiYoISgobj10LmZvbGRpbmdSdWxlcyk9PT1udWxsfHxuPT09dm9pZCAwKSYmbi5tYXJrZXJzKSl7Y29uc3Qgcj1IbChlLHQpO2k9aS5jb25jYXQocil9aWYodC5maW5kTWFya1NlY3Rpb25IZWFkZXJzKXtjb25zdCByPVVsKGUpO2k9aS5jb25jYXQocil9cmV0dXJuIGl9ZnVuY3Rpb24gSGwoZSx0KXtjb25zdCBuPVtdLGk9ZS5nZXRMaW5lQ291bnQoKTtmb3IobGV0IHI9MTtyPD1pO3IrKyl7Y29uc3QgYT1lLmdldExpbmVDb250ZW50KHIpLHM9YS5tYXRjaCh0LmZvbGRpbmdSdWxlcy5tYXJrZXJzLnN0YXJ0KTtpZihzKXtjb25zdCBvPXtzdGFydExpbmVOdW1iZXI6cixzdGFydENvbHVtbjpzWzBdLmxlbmd0aCsxLGVuZExpbmVOdW1iZXI6cixlbmRDb2x1bW46YS5sZW5ndGgrMX07aWYoby5lbmRDb2x1bW4+by5zdGFydENvbHVtbil7Y29uc3QgbD17cmFuZ2U6bywuLi51YShhLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkpLHNob3VsZEJlSW5Db21tZW50czohMX07KGwudGV4dHx8bC5oYXNTZXBhcmF0b3JMaW5lKSYmbi5wdXNoKGwpfX19cmV0dXJuIG59ZnVuY3Rpb24gVWwoZSl7Y29uc3QgdD1bXSxuPWUuZ2V0TGluZUNvdW50KCk7Zm9yKGxldCBpPTE7aTw9bjtpKyspe2NvbnN0IHI9ZS5nZXRMaW5lQ29udGVudChpKTtXbChyLGksdCl9cmV0dXJuIHR9ZnVuY3Rpb24gV2woZSx0LG4pe2xhLmxhc3RJbmRleD0wO2NvbnN0IGk9bGEuZXhlYyhlKTtpZihpKXtjb25zdCByPWkuaW5kaWNlc1sxXVswXSsxLGE9aS5pbmRpY2VzWzFdWzFdKzEscz17c3RhcnRMaW5lTnVtYmVyOnQsc3RhcnRDb2x1bW46cixlbmRMaW5lTnVtYmVyOnQsZW5kQ29sdW1uOmF9O2lmKHMuZW5kQ29sdW1uPnMuc3RhcnRDb2x1bW4pe2NvbnN0IG89e3JhbmdlOnMsLi4udWEoaVsxXSksc2hvdWxkQmVJbkNvbW1lbnRzOiEwfTsoby50ZXh0fHxvLmhhc1NlcGFyYXRvckxpbmUpJiZuLnB1c2gobyl9fX1mdW5jdGlvbiB1YShlKXtlPWUudHJpbSgpO2NvbnN0IHQ9ZS5zdGFydHNXaXRoKCItIik7cmV0dXJuIGU9ZS5yZXBsYWNlKElsLCIiKSx7dGV4dDplLGhhc1NlcGFyYXRvckxpbmU6dH19Y2xhc3MgRmwgZXh0ZW5kcyBFb3tnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1maW5kTWF0Y2hlcyh0KXtjb25zdCBuPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5fbGluZXMubGVuZ3RoO2krKyl7Y29uc3Qgcj10aGlzLl9saW5lc1tpXSxhPXRoaXMub2Zmc2V0QXQobmV3IE5lKGkrMSwxKSkscz1yLm1hdGNoQWxsKHQpO2Zvcihjb25zdCBvIG9mIHMpKG8uaW5kZXh8fG8uaW5kZXg9PT0wKSYmKG8uaW5kZXg9by5pbmRleCthKSxuLnB1c2gobyl9cmV0dXJuIG59Z2V0TGluZXNDb250ZW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLnNsaWNlKDApfWdldExpbmVDb3VudCgpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGh9Z2V0TGluZUNvbnRlbnQodCl7cmV0dXJuIHRoaXMuX2xpbmVzW3QtMV19Z2V0V29yZEF0UG9zaXRpb24odCxuKXtjb25zdCBpPUluKHQuY29sdW1uLEhpKG4pLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXSwwKTtyZXR1cm4gaT9uZXcgb2UodC5saW5lTnVtYmVyLGkuc3RhcnRDb2x1bW4sdC5saW5lTnVtYmVyLGkuZW5kQ29sdW1uKTpudWxsfXdvcmRzKHQpe2NvbnN0IG49dGhpcy5fbGluZXMsaT10aGlzLl93b3JkZW5pemUuYmluZCh0aGlzKTtsZXQgcj0wLGE9IiIscz0wLG89W107cmV0dXJueypbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcig7OylpZihzPG8ubGVuZ3RoKXtjb25zdCBsPWEuc3Vic3RyaW5nKG9bc10uc3RhcnQsb1tzXS5lbmQpO3MrPTEseWllbGQgbH1lbHNlIGlmKHI8bi5sZW5ndGgpYT1uW3JdLG89aShhLHQpLHM9MCxyKz0xO2Vsc2UgYnJlYWt9fX1nZXRMaW5lV29yZHModCxuKXtjb25zdCBpPXRoaXMuX2xpbmVzW3QtMV0scj10aGlzLl93b3JkZW5pemUoaSxuKSxhPVtdO2Zvcihjb25zdCBzIG9mIHIpYS5wdXNoKHt3b3JkOmkuc3Vic3RyaW5nKHMuc3RhcnQscy5lbmQpLHN0YXJ0Q29sdW1uOnMuc3RhcnQrMSxlbmRDb2x1bW46cy5lbmQrMX0pO3JldHVybiBhfV93b3JkZW5pemUodCxuKXtjb25zdCBpPVtdO2xldCByO2ZvcihuLmxhc3RJbmRleD0wOyhyPW4uZXhlYyh0KSkmJnJbMF0ubGVuZ3RoIT09MDspaS5wdXNoKHtzdGFydDpyLmluZGV4LGVuZDpyLmluZGV4K3JbMF0ubGVuZ3RofSk7cmV0dXJuIGl9Z2V0VmFsdWVJblJhbmdlKHQpe2lmKHQ9dGhpcy5fdmFsaWRhdGVSYW5nZSh0KSx0LnN0YXJ0TGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcilyZXR1cm4gdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuc3RhcnRDb2x1bW4tMSx0LmVuZENvbHVtbi0xKTtjb25zdCBuPXRoaXMuX2VvbCxpPXQuc3RhcnRMaW5lTnVtYmVyLTEscj10LmVuZExpbmVOdW1iZXItMSxhPVtdO2EucHVzaCh0aGlzLl9saW5lc1tpXS5zdWJzdHJpbmcodC5zdGFydENvbHVtbi0xKSk7Zm9yKGxldCBzPWkrMTtzPHI7cysrKWEucHVzaCh0aGlzLl9saW5lc1tzXSk7cmV0dXJuIGEucHVzaCh0aGlzLl9saW5lc1tyXS5zdWJzdHJpbmcoMCx0LmVuZENvbHVtbi0xKSksYS5qb2luKG4pfW9mZnNldEF0KHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24odCksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpLHRoaXMuX2xpbmVTdGFydHMuZ2V0UHJlZml4U3VtKHQubGluZU51bWJlci0yKSsodC5jb2x1bW4tMSl9cG9zaXRpb25BdCh0KXt0PU1hdGguZmxvb3IodCksdD1NYXRoLm1heCgwLHQpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKTtjb25zdCBuPXRoaXMuX2xpbmVTdGFydHMuZ2V0SW5kZXhPZih0KSxpPXRoaXMuX2xpbmVzW24uaW5kZXhdLmxlbmd0aDtyZXR1cm57bGluZU51bWJlcjoxK24uaW5kZXgsY29sdW1uOjErTWF0aC5taW4obi5yZW1haW5kZXIsaSl9fV92YWxpZGF0ZVJhbmdlKHQpe2NvbnN0IG49dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjp0LnN0YXJ0TGluZU51bWJlcixjb2x1bW46dC5zdGFydENvbHVtbn0pLGk9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjp0LmVuZExpbmVOdW1iZXIsY29sdW1uOnQuZW5kQ29sdW1ufSk7cmV0dXJuIG4ubGluZU51bWJlciE9PXQuc3RhcnRMaW5lTnVtYmVyfHxuLmNvbHVtbiE9PXQuc3RhcnRDb2x1bW58fGkubGluZU51bWJlciE9PXQuZW5kTGluZU51bWJlcnx8aS5jb2x1bW4hPT10LmVuZENvbHVtbj97c3RhcnRMaW5lTnVtYmVyOm4ubGluZU51bWJlcixzdGFydENvbHVtbjpuLmNvbHVtbixlbmRMaW5lTnVtYmVyOmkubGluZU51bWJlcixlbmRDb2x1bW46aS5jb2x1bW59OnR9X3ZhbGlkYXRlUG9zaXRpb24odCl7aWYoIU5lLmlzSVBvc2l0aW9uKHQpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvc2l0aW9uIik7bGV0e2xpbmVOdW1iZXI6bixjb2x1bW46aX09dCxyPSExO2lmKG48MSluPTEsaT0xLHI9ITA7ZWxzZSBpZihuPnRoaXMuX2xpbmVzLmxlbmd0aCluPXRoaXMuX2xpbmVzLmxlbmd0aCxpPXRoaXMuX2xpbmVzW24tMV0ubGVuZ3RoKzEscj0hMDtlbHNle2NvbnN0IGE9dGhpcy5fbGluZXNbbi0xXS5sZW5ndGgrMTtpPDE/KGk9MSxyPSEwKTppPmEmJihpPWEscj0hMCl9cmV0dXJuIHI/e2xpbmVOdW1iZXI6bixjb2x1bW46aX06dH19Y2xhc3MgZXR7Y29uc3RydWN0b3IodCxuKXt0aGlzLl9ob3N0PXQsdGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk9bix0aGlzLl9mb3JlaWduTW9kdWxlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpfV9nZXRNb2RlbCh0KXtyZXR1cm4gdGhpcy5fbW9kZWxzW3RdfV9nZXRNb2RlbHMoKXtjb25zdCB0PVtdO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tb2RlbHMpLmZvckVhY2gobj0+dC5wdXNoKHRoaXMuX21vZGVsc1tuXSkpLHR9YWNjZXB0TmV3TW9kZWwodCl7dGhpcy5fbW9kZWxzW3QudXJsXT1uZXcgRmwoTW4ucGFyc2UodC51cmwpLHQubGluZXMsdC5FT0wsdC52ZXJzaW9uSWQpfWFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pe2lmKCF0aGlzLl9tb2RlbHNbdF0pcmV0dXJuO3RoaXMuX21vZGVsc1t0XS5vbkV2ZW50cyhuKX1hY2NlcHRSZW1vdmVkTW9kZWwodCl7dGhpcy5fbW9kZWxzW3RdJiZkZWxldGUgdGhpcy5fbW9kZWxzW3RdfWFzeW5jIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyh0LG4saSl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gcj9pbC5jb21wdXRlVW5pY29kZUhpZ2hsaWdodHMocixuLGkpOntyYW5nZXM6W10saGFzTW9yZTohMSxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDowLGludmlzaWJsZUNoYXJhY3RlckNvdW50OjAsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OjB9fWFzeW5jIGZpbmRTZWN0aW9uSGVhZGVycyh0LG4pe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIGk/emwoaSxuKTpbXX1hc3luYyBjb21wdXRlRGlmZih0LG4saSxyKXtjb25zdCBhPXRoaXMuX2dldE1vZGVsKHQpLHM9dGhpcy5fZ2V0TW9kZWwobik7cmV0dXJuIWF8fCFzP251bGw6ZXQuY29tcHV0ZURpZmYoYSxzLGkscil9c3RhdGljIGNvbXB1dGVEaWZmKHQsbixpLHIpe2NvbnN0IGE9cj09PSJhZHZhbmNlZCI/cmEuZ2V0RGVmYXVsdCgpOnJhLmdldExlZ2FjeSgpLHM9dC5nZXRMaW5lc0NvbnRlbnQoKSxvPW4uZ2V0TGluZXNDb250ZW50KCksbD1hLmNvbXB1dGVEaWZmKHMsbyxpKSx1PWwuY2hhbmdlcy5sZW5ndGg+MD8hMTp0aGlzLl9tb2RlbHNBcmVJZGVudGljYWwodCxuKTtmdW5jdGlvbiBjKGQpe3JldHVybiBkLm1hcChtPT57dmFyIGY7cmV0dXJuW20ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixtLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsKGY9bS5pbm5lckNoYW5nZXMpPT09bnVsbHx8Zj09PXZvaWQgMD92b2lkIDA6Zi5tYXAoYj0+W2Iub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIsYi5vcmlnaW5hbFJhbmdlLnN0YXJ0Q29sdW1uLGIub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyLGIub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW4sYi5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcixiLm1vZGlmaWVkUmFuZ2Uuc3RhcnRDb2x1bW4sYi5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIsYi5tb2RpZmllZFJhbmdlLmVuZENvbHVtbl0pXX0pfXJldHVybntpZGVudGljYWw6dSxxdWl0RWFybHk6bC5oaXRUaW1lb3V0LGNoYW5nZXM6YyhsLmNoYW5nZXMpLG1vdmVzOmwubW92ZXMubWFwKGQ9PltkLmxpbmVSYW5nZU1hcHBpbmcub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLGQubGluZVJhbmdlTWFwcGluZy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGQubGluZVJhbmdlTWFwcGluZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsZC5saW5lUmFuZ2VNYXBwaW5nLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYyhkLmNoYW5nZXMpXSl9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKHQsbil7Y29uc3QgaT10LmdldExpbmVDb3VudCgpLHI9bi5nZXRMaW5lQ291bnQoKTtpZihpIT09cilyZXR1cm4hMTtmb3IobGV0IGE9MTthPD1pO2ErKyl7Y29uc3Qgcz10LmdldExpbmVDb250ZW50KGEpLG89bi5nZXRMaW5lQ29udGVudChhKTtpZihzIT09bylyZXR1cm4hMX1yZXR1cm4hMH1hc3luYyBjb21wdXRlTW9yZU1pbmltYWxFZGl0cyh0LG4saSl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbCh0KTtpZighcilyZXR1cm4gbjtjb25zdCBhPVtdO2xldCBzO249bi5zbGljZSgwKS5zb3J0KChsLHUpPT57aWYobC5yYW5nZSYmdS5yYW5nZSlyZXR1cm4gb2UuY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKGwucmFuZ2UsdS5yYW5nZSk7Y29uc3QgYz1sLnJhbmdlPzA6MSxkPXUucmFuZ2U/MDoxO3JldHVybiBjLWR9KTtsZXQgbz0wO2ZvcihsZXQgbD0xO2w8bi5sZW5ndGg7bCsrKW9lLmdldEVuZFBvc2l0aW9uKG5bb10ucmFuZ2UpLmVxdWFscyhvZS5nZXRTdGFydFBvc2l0aW9uKG5bbF0ucmFuZ2UpKT8obltvXS5yYW5nZT1vZS5mcm9tUG9zaXRpb25zKG9lLmdldFN0YXJ0UG9zaXRpb24obltvXS5yYW5nZSksb2UuZ2V0RW5kUG9zaXRpb24obltsXS5yYW5nZSkpLG5bb10udGV4dCs9bltsXS50ZXh0KToobysrLG5bb109bltsXSk7bi5sZW5ndGg9bysxO2ZvcihsZXR7cmFuZ2U6bCx0ZXh0OnUsZW9sOmN9b2Ygbil7aWYodHlwZW9mIGM9PSJudW1iZXIiJiYocz1jKSxvZS5pc0VtcHR5KGwpJiYhdSljb250aW51ZTtjb25zdCBkPXIuZ2V0VmFsdWVJblJhbmdlKGwpO2lmKHU9dS5yZXBsYWNlKC9cclxufFxufFxyL2csci5lb2wpLGQ9PT11KWNvbnRpbnVlO2lmKE1hdGgubWF4KHUubGVuZ3RoLGQubGVuZ3RoKT5ldC5fZGlmZkxpbWl0KXthLnB1c2goe3JhbmdlOmwsdGV4dDp1fSk7Y29udGludWV9Y29uc3QgbT1ubyhkLHUsaSksZj1yLm9mZnNldEF0KG9lLmxpZnQobCkuZ2V0U3RhcnRQb3NpdGlvbigpKTtmb3IoY29uc3QgYiBvZiBtKXtjb25zdCBwPXIucG9zaXRpb25BdChmK2Iub3JpZ2luYWxTdGFydCksdz1yLnBvc2l0aW9uQXQoZitiLm9yaWdpbmFsU3RhcnQrYi5vcmlnaW5hbExlbmd0aCkseD17dGV4dDp1LnN1YnN0cihiLm1vZGlmaWVkU3RhcnQsYi5tb2RpZmllZExlbmd0aCkscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpwLmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46cC5jb2x1bW4sZW5kTGluZU51bWJlcjp3LmxpbmVOdW1iZXIsZW5kQ29sdW1uOncuY29sdW1ufX07ci5nZXRWYWx1ZUluUmFuZ2UoeC5yYW5nZSkhPT14LnRleHQmJmEucHVzaCh4KX19cmV0dXJuIHR5cGVvZiBzPT0ibnVtYmVyIiYmYS5wdXNoKHtlb2w6cyx0ZXh0OiIiLHJhbmdlOntzdGFydExpbmVOdW1iZXI6MCxzdGFydENvbHVtbjowLGVuZExpbmVOdW1iZXI6MCxlbmRDb2x1bW46MH19KSxhfWFzeW5jIGNvbXB1dGVMaW5rcyh0KXtjb25zdCBuPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBuP1VvKG4pOm51bGx9YXN5bmMgY29tcHV0ZURlZmF1bHREb2N1bWVudENvbG9ycyh0KXtjb25zdCBuPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBuP05sKG4pOm51bGx9YXN5bmMgdGV4dHVhbFN1Z2dlc3QodCxuLGkscil7Y29uc3QgYT1uZXcgUHQscz1uZXcgUmVnRXhwKGksciksbz1uZXcgU2V0O2U6Zm9yKGNvbnN0IGwgb2YgdCl7Y29uc3QgdT10aGlzLl9nZXRNb2RlbChsKTtpZih1KXtmb3IoY29uc3QgYyBvZiB1LndvcmRzKHMpKWlmKCEoYz09PW58fCFpc05hTihOdW1iZXIoYykpKSYmKG8uYWRkKGMpLG8uc2l6ZT5ldC5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX19cmV0dXJue3dvcmRzOkFycmF5LmZyb20obyksZHVyYXRpb246YS5lbGFwc2VkKCl9fWFzeW5jIGNvbXB1dGVXb3JkUmFuZ2VzKHQsbixpLHIpe2NvbnN0IGE9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIWEpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3Qgcz1uZXcgUmVnRXhwKGksciksbz1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgbD1uLnN0YXJ0TGluZU51bWJlcjtsPG4uZW5kTGluZU51bWJlcjtsKyspe2NvbnN0IHU9YS5nZXRMaW5lV29yZHMobCxzKTtmb3IoY29uc3QgYyBvZiB1KXtpZighaXNOYU4oTnVtYmVyKGMud29yZCkpKWNvbnRpbnVlO2xldCBkPW9bYy53b3JkXTtkfHwoZD1bXSxvW2Mud29yZF09ZCksZC5wdXNoKHtzdGFydExpbmVOdW1iZXI6bCxzdGFydENvbHVtbjpjLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6bCxlbmRDb2x1bW46Yy5lbmRDb2x1bW59KX19cmV0dXJuIG99YXN5bmMgbmF2aWdhdGVWYWx1ZVNldCh0LG4saSxyLGEpe2NvbnN0IHM9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIXMpcmV0dXJuIG51bGw7Y29uc3Qgbz1uZXcgUmVnRXhwKHIsYSk7bi5zdGFydENvbHVtbj09PW4uZW5kQ29sdW1uJiYobj17c3RhcnRMaW5lTnVtYmVyOm4uc3RhcnRMaW5lTnVtYmVyLHN0YXJ0Q29sdW1uOm4uc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjpuLmVuZExpbmVOdW1iZXIsZW5kQ29sdW1uOm4uZW5kQ29sdW1uKzF9KTtjb25zdCBsPXMuZ2V0VmFsdWVJblJhbmdlKG4pLHU9cy5nZXRXb3JkQXRQb3NpdGlvbih7bGluZU51bWJlcjpuLnN0YXJ0TGluZU51bWJlcixjb2x1bW46bi5zdGFydENvbHVtbn0sbyk7aWYoIXUpcmV0dXJuIG51bGw7Y29uc3QgYz1zLmdldFZhbHVlSW5SYW5nZSh1KTtyZXR1cm4gVW4uSU5TVEFOQ0UubmF2aWdhdGVWYWx1ZVNldChuLGwsdSxjLGkpfWxvYWRGb3JlaWduTW9kdWxlKHQsbixpKXtjb25zdCBzPXtob3N0OkVzKGksKG8sbCk9PnRoaXMuX2hvc3QuZmhyKG8sbCkpLGdldE1pcnJvck1vZGVsczooKT0+dGhpcy5fZ2V0TW9kZWxzKCl9O3JldHVybiB0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT8odGhpcy5fZm9yZWlnbk1vZHVsZT10aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeShzLG4pLFByb21pc2UucmVzb2x2ZSh5bih0aGlzLl9mb3JlaWduTW9kdWxlKSkpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiVW5leHBlY3RlZCB1c2FnZSIpKX1mbXIodCxuKXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0hPSJmdW5jdGlvbiIpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrdCkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSxuKSl9Y2F0Y2goaSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGkpfX19ZXQuX2RpZmZMaW1pdD0xZTUsZXQuX3N1Z2dlc3Rpb25zTGltaXQ9MWU0LHR5cGVvZiBpbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iJiYoZ2xvYmFsVGhpcy5tb25hY289WG8oKSk7bGV0IFpuPSExO2Z1bmN0aW9uIGNhKGUpe2lmKFpuKXJldHVybjtabj0hMDtjb25zdCB0PW5ldyBlbyhuPT57Z2xvYmFsVGhpcy5wb3N0TWVzc2FnZShuKX0sbj0+bmV3IGV0KG4sZSkpO2dsb2JhbFRoaXMub25tZXNzYWdlPW49Pnt0Lm9ubWVzc2FnZShuLmRhdGEpfX1nbG9iYWxUaGlzLm9ubWVzc2FnZT1lPT57Wm58fGNhKG51bGwpfTsvKiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVmVyc2lvbjogMC40OC4wKDAwMzdiMTNmYjVkMTg2ZmRmMWU3ZGY1MWE5NDE2YTJkZTJiOGM2NzApCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L21vbmFjby1lZGl0b3IvYmxvYi9tYWluL0xJQ0VOU0UudHh0CiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL2Z1bmN0aW9uIFBsKGUsdCl7bGV0IG47cmV0dXJuIHQubGVuZ3RoPT09MD9uPWU6bj1lLnJlcGxhY2UoL1x7KFxkKylcfS9nLChpLHIpPT57bGV0IGE9clswXTtyZXR1cm4gdHlwZW9mIHRbYV08InUiP3RbYV06aX0pLG59ZnVuY3Rpb24gQmwoZSx0LC4uLm4pe3JldHVybiBQbCh0LG4pfWZ1bmN0aW9uIEtuKGUpe3JldHVybiBCbH12YXIgaGE7KGZ1bmN0aW9uKGUpe2UuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LGUuTUFYX1ZBTFVFPTIxNDc0ODM2NDd9KShoYXx8KGhhPXt9KSk7dmFyIGVuOyhmdW5jdGlvbihlKXtlLk1JTl9WQUxVRT0wLGUuTUFYX1ZBTFVFPTIxNDc0ODM2NDd9KShlbnx8KGVuPXt9KSk7dmFyIGNlOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJuIGk9PT1OdW1iZXIuTUFYX1ZBTFVFJiYoaT1lbi5NQVhfVkFMVUUpLHI9PT1OdW1iZXIuTUFYX1ZBTFVFJiYocj1lbi5NQVhfVkFMVUUpLHtsaW5lOmksY2hhcmFjdGVyOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJkMudWludGVnZXIoci5saW5lKSYmQy51aW50ZWdlcihyLmNoYXJhY3Rlcil9ZS5pcz1ufSkoY2V8fChjZT17fSkpO3ZhciBZOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMpe2lmKEMudWludGVnZXIoaSkmJkMudWludGVnZXIocikmJkMudWludGVnZXIoYSkmJkMudWludGVnZXIocykpcmV0dXJue3N0YXJ0OmNlLmNyZWF0ZShpLHIpLGVuZDpjZS5jcmVhdGUoYSxzKX07aWYoY2UuaXMoaSkmJmNlLmlzKHIpKXJldHVybntzdGFydDppLGVuZDpyfTt0aHJvdyBuZXcgRXJyb3IoIlJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1siK2krIiwgIityKyIsICIrYSsiLCAiK3MrIl0iKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiZjZS5pcyhyLnN0YXJ0KSYmY2UuaXMoci5lbmQpfWUuaXM9bn0pKFl8fChZPXt9KSk7dmFyIHRuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3VyaTppLHJhbmdlOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLmRlZmluZWQocikmJlkuaXMoci5yYW5nZSkmJihDLnN0cmluZyhyLnVyaSl8fEMudW5kZWZpbmVkKHIudXJpKSl9ZS5pcz1ufSkodG58fCh0bj17fSkpO3ZhciBkYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIsYSxzKXtyZXR1cm57dGFyZ2V0VXJpOmksdGFyZ2V0UmFuZ2U6cix0YXJnZXRTZWxlY3Rpb25SYW5nZTphLG9yaWdpblNlbGVjdGlvblJhbmdlOnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLmRlZmluZWQocikmJlkuaXMoci50YXJnZXRSYW5nZSkmJkMuc3RyaW5nKHIudGFyZ2V0VXJpKSYmKFkuaXMoci50YXJnZXRTZWxlY3Rpb25SYW5nZSl8fEMudW5kZWZpbmVkKHIudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpKSYmKFkuaXMoci5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fEMudW5kZWZpbmVkKHIub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX1lLmlzPW59KShkYXx8KGRhPXt9KSk7dmFyIGVpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMpe3JldHVybntyZWQ6aSxncmVlbjpyLGJsdWU6YSxhbHBoYTpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5udW1iZXJSYW5nZShyLnJlZCwwLDEpJiZDLm51bWJlclJhbmdlKHIuZ3JlZW4sMCwxKSYmQy5udW1iZXJSYW5nZShyLmJsdWUsMCwxKSYmQy5udW1iZXJSYW5nZShyLmFscGhhLDAsMSl9ZS5pcz1ufSkoZWl8fChlaT17fSkpO3ZhciBtYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybntyYW5nZTppLGNvbG9yOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBZLmlzKHIucmFuZ2UpJiZlaS5pcyhyLmNvbG9yKX1lLmlzPW59KShtYXx8KG1hPXt9KSk7dmFyIGZhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhKXtyZXR1cm57bGFiZWw6aSx0ZXh0RWRpdDpyLGFkZGl0aW9uYWxUZXh0RWRpdHM6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuc3RyaW5nKHIubGFiZWwpJiYoQy51bmRlZmluZWQoci50ZXh0RWRpdCl8fHNlLmlzKHIpKSYmKEMudW5kZWZpbmVkKHIuYWRkaXRpb25hbFRleHRFZGl0cyl8fEMudHlwZWRBcnJheShyLmFkZGl0aW9uYWxUZXh0RWRpdHMsc2UuaXMpKX1lLmlzPW59KShmYXx8KGZhPXt9KSk7dmFyIG5uOyhmdW5jdGlvbihlKXtlLkNvbW1lbnQ9ImNvbW1lbnQiLGUuSW1wb3J0cz0iaW1wb3J0cyIsZS5SZWdpb249InJlZ2lvbiJ9KShubnx8KG5uPXt9KSk7dmFyIHBhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMsbyl7dmFyIGw9e3N0YXJ0TGluZTppLGVuZExpbmU6cn07cmV0dXJuIEMuZGVmaW5lZChhKSYmKGwuc3RhcnRDaGFyYWN0ZXI9YSksQy5kZWZpbmVkKHMpJiYobC5lbmRDaGFyYWN0ZXI9cyksQy5kZWZpbmVkKG8pJiYobC5raW5kPW8pLGx9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMudWludGVnZXIoci5zdGFydExpbmUpJiZDLnVpbnRlZ2VyKHIuc3RhcnRMaW5lKSYmKEMudW5kZWZpbmVkKHIuc3RhcnRDaGFyYWN0ZXIpfHxDLnVpbnRlZ2VyKHIuc3RhcnRDaGFyYWN0ZXIpKSYmKEMudW5kZWZpbmVkKHIuZW5kQ2hhcmFjdGVyKXx8Qy51aW50ZWdlcihyLmVuZENoYXJhY3RlcikpJiYoQy51bmRlZmluZWQoci5raW5kKXx8Qy5zdHJpbmcoci5raW5kKSl9ZS5pcz1ufSkocGF8fChwYT17fSkpO3ZhciB0aTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybntsb2NhdGlvbjppLG1lc3NhZ2U6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmdG4uaXMoci5sb2NhdGlvbikmJkMuc3RyaW5nKHIubWVzc2FnZSl9ZS5pcz1ufSkodGl8fCh0aT17fSkpO3ZhciBnYTsoZnVuY3Rpb24oZSl7ZS5FcnJvcj0xLGUuV2FybmluZz0yLGUuSW5mb3JtYXRpb249MyxlLkhpbnQ9NH0pKGdhfHwoZ2E9e30pKTt2YXIgYmE7KGZ1bmN0aW9uKGUpe2UuVW5uZWNlc3Nhcnk9MSxlLkRlcHJlY2F0ZWQ9Mn0pKGJhfHwoYmE9e30pKTt2YXIgdmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIGk9bjtyZXR1cm4gaSE9bnVsbCYmQy5zdHJpbmcoaS5ocmVmKX1lLmlzPXR9KSh2YXx8KHZhPXt9KSk7dmFyIHJuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMsbyxsKXt2YXIgdT17cmFuZ2U6aSxtZXNzYWdlOnJ9O3JldHVybiBDLmRlZmluZWQoYSkmJih1LnNldmVyaXR5PWEpLEMuZGVmaW5lZChzKSYmKHUuY29kZT1zKSxDLmRlZmluZWQobykmJih1LnNvdXJjZT1vKSxDLmRlZmluZWQobCkmJih1LnJlbGF0ZWRJbmZvcm1hdGlvbj1sKSx1fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcixhPWk7cmV0dXJuIEMuZGVmaW5lZChhKSYmWS5pcyhhLnJhbmdlKSYmQy5zdHJpbmcoYS5tZXNzYWdlKSYmKEMubnVtYmVyKGEuc2V2ZXJpdHkpfHxDLnVuZGVmaW5lZChhLnNldmVyaXR5KSkmJihDLmludGVnZXIoYS5jb2RlKXx8Qy5zdHJpbmcoYS5jb2RlKXx8Qy51bmRlZmluZWQoYS5jb2RlKSkmJihDLnVuZGVmaW5lZChhLmNvZGVEZXNjcmlwdGlvbil8fEMuc3RyaW5nKChyPWEuY29kZURlc2NyaXB0aW9uKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuaHJlZikpJiYoQy5zdHJpbmcoYS5zb3VyY2UpfHxDLnVuZGVmaW5lZChhLnNvdXJjZSkpJiYoQy51bmRlZmluZWQoYS5yZWxhdGVkSW5mb3JtYXRpb24pfHxDLnR5cGVkQXJyYXkoYS5yZWxhdGVkSW5mb3JtYXRpb24sdGkuaXMpKX1lLmlzPW59KShybnx8KHJuPXt9KSk7dmFyIE10OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7Zm9yKHZhciBhPVtdLHM9MjtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKWFbcy0yXT1hcmd1bWVudHNbc107dmFyIG89e3RpdGxlOmksY29tbWFuZDpyfTtyZXR1cm4gQy5kZWZpbmVkKGEpJiZhLmxlbmd0aD4wJiYoby5hcmd1bWVudHM9YSksb31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnN0cmluZyhyLnRpdGxlKSYmQy5zdHJpbmcoci5jb21tYW5kKX1lLmlzPW59KShNdHx8KE10PXt9KSk7dmFyIHNlOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGEscyl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDpzfX1lLnJlcGxhY2U9dDtmdW5jdGlvbiBuKGEscyl7cmV0dXJue3JhbmdlOntzdGFydDphLGVuZDphfSxuZXdUZXh0OnN9fWUuaW5zZXJ0PW47ZnVuY3Rpb24gaShhKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OiIifX1lLmRlbD1pO2Z1bmN0aW9uIHIoYSl7dmFyIHM9YTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHMpJiZDLnN0cmluZyhzLm5ld1RleHQpJiZZLmlzKHMucmFuZ2UpfWUuaXM9cn0pKHNlfHwoc2U9e30pKTt2YXIgX3Q7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3ZhciBzPXtsYWJlbDppfTtyZXR1cm4gciE9PXZvaWQgMCYmKHMubmVlZHNDb25maXJtYXRpb249ciksYSE9PXZvaWQgMCYmKHMuZGVzY3JpcHRpb249YSksc31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciE9PXZvaWQgMCYmQy5vYmplY3RMaXRlcmFsKHIpJiZDLnN0cmluZyhyLmxhYmVsKSYmKEMuYm9vbGVhbihyLm5lZWRzQ29uZmlybWF0aW9uKXx8ci5uZWVkc0NvbmZpcm1hdGlvbj09PXZvaWQgMCkmJihDLnN0cmluZyhyLmRlc2NyaXB0aW9uKXx8ci5kZXNjcmlwdGlvbj09PXZvaWQgMCl9ZS5pcz1ufSkoX3R8fChfdD17fSkpO3ZhciBkZTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgaT1uO3JldHVybiB0eXBlb2YgaT09InN0cmluZyJ9ZS5pcz10fSkoZGV8fChkZT17fSkpO3ZhciBYZTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChhLHMsbyl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDpzLGFubm90YXRpb25JZDpvfX1lLnJlcGxhY2U9dDtmdW5jdGlvbiBuKGEscyxvKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6cyxhbm5vdGF0aW9uSWQ6b319ZS5pbnNlcnQ9bjtmdW5jdGlvbiBpKGEscyl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6c319ZS5kZWw9aTtmdW5jdGlvbiByKGEpe3ZhciBzPWE7cmV0dXJuIHNlLmlzKHMpJiYoX3QuaXMocy5hbm5vdGF0aW9uSWQpfHxkZS5pcyhzLmFubm90YXRpb25JZCkpfWUuaXM9cn0pKFhlfHwoWGU9e30pKTt2YXIgYW47KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57dGV4dERvY3VtZW50OmksZWRpdHM6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmb24uaXMoci50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KHIuZWRpdHMpfWUuaXM9bn0pKGFufHwoYW49e30pKTt2YXIgRHQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3ZhciBzPXtraW5kOiJjcmVhdGUiLHVyaTppfTtyZXR1cm4gciE9PXZvaWQgMCYmKHIub3ZlcndyaXRlIT09dm9pZCAwfHxyLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKHMub3B0aW9ucz1yKSxhIT09dm9pZCAwJiYocy5hbm5vdGF0aW9uSWQ9YSksc31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmci5raW5kPT09ImNyZWF0ZSImJkMuc3RyaW5nKHIudXJpKSYmKHIub3B0aW9ucz09PXZvaWQgMHx8KHIub3B0aW9ucy5vdmVyd3JpdGU9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMub3ZlcndyaXRlKSkmJihyLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJihyLmFubm90YXRpb25JZD09PXZvaWQgMHx8ZGUuaXMoci5hbm5vdGF0aW9uSWQpKX1lLmlzPW59KShEdHx8KER0PXt9KSk7dmFyIE50OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMpe3ZhciBvPXtraW5kOiJyZW5hbWUiLG9sZFVyaTppLG5ld1VyaTpyfTtyZXR1cm4gYSE9PXZvaWQgMCYmKGEub3ZlcndyaXRlIT09dm9pZCAwfHxhLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKG8ub3B0aW9ucz1hKSxzIT09dm9pZCAwJiYoby5hbm5vdGF0aW9uSWQ9cyksb31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmci5raW5kPT09InJlbmFtZSImJkMuc3RyaW5nKHIub2xkVXJpKSYmQy5zdHJpbmcoci5uZXdVcmkpJiYoci5vcHRpb25zPT09dm9pZCAwfHwoci5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8Qy5ib29sZWFuKHIub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHIub3B0aW9ucy5pZ25vcmVJZkV4aXN0cz09PXZvaWQgMHx8Qy5ib29sZWFuKHIub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHIuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxkZS5pcyhyLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKE50fHwoTnQ9e30pKTt2YXIgSXQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3ZhciBzPXtraW5kOiJkZWxldGUiLHVyaTppfTtyZXR1cm4gciE9PXZvaWQgMCYmKHIucmVjdXJzaXZlIT09dm9pZCAwfHxyLmlnbm9yZUlmTm90RXhpc3RzIT09dm9pZCAwKSYmKHMub3B0aW9ucz1yKSxhIT09dm9pZCAwJiYocy5hbm5vdGF0aW9uSWQ9YSksc31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmci5raW5kPT09ImRlbGV0ZSImJkMuc3RyaW5nKHIudXJpKSYmKHIub3B0aW9ucz09PXZvaWQgMHx8KHIub3B0aW9ucy5yZWN1cnNpdmU9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMucmVjdXJzaXZlKSkmJihyLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHM9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkmJihyLmFubm90YXRpb25JZD09PXZvaWQgMHx8ZGUuaXMoci5hbm5vdGF0aW9uSWQpKX1lLmlzPW59KShJdHx8KEl0PXt9KSk7dmFyIG5pOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3ZhciBpPW47cmV0dXJuIGkmJihpLmNoYW5nZXMhPT12b2lkIDB8fGkuZG9jdW1lbnRDaGFuZ2VzIT09dm9pZCAwKSYmKGkuZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwfHxpLmRvY3VtZW50Q2hhbmdlcy5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gQy5zdHJpbmcoci5raW5kKT9EdC5pcyhyKXx8TnQuaXMocil8fEl0LmlzKHIpOmFuLmlzKHIpfSkpfWUuaXM9dH0pKG5pfHwobmk9e30pKTt2YXIgc249ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dGhpcy5lZGl0cz10LHRoaXMuY2hhbmdlQW5ub3RhdGlvbnM9bn1yZXR1cm4gZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsbixpKXt2YXIgcixhO2lmKGk9PT12b2lkIDA/cj1zZS5pbnNlcnQodCxuKTpkZS5pcyhpKT8oYT1pLHI9WGUuaW5zZXJ0KHQsbixpKSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyksYT10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZShpKSxyPVhlLmluc2VydCh0LG4sYSkpLHRoaXMuZWRpdHMucHVzaChyKSxhIT09dm9pZCAwKXJldHVybiBhfSxlLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQsbixpKXt2YXIgcixhO2lmKGk9PT12b2lkIDA/cj1zZS5yZXBsYWNlKHQsbik6ZGUuaXMoaSk/KGE9aSxyPVhlLnJlcGxhY2UodCxuLGkpKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxhPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLHI9WGUucmVwbGFjZSh0LG4sYSkpLHRoaXMuZWRpdHMucHVzaChyKSxhIT09dm9pZCAwKXJldHVybiBhfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxuKXt2YXIgaSxyO2lmKG49PT12b2lkIDA/aT1zZS5kZWwodCk6ZGUuaXMobik/KHI9bixpPVhlLmRlbCh0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxyPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLGk9WGUuZGVsKHQscikpLHRoaXMuZWRpdHMucHVzaChpKSxyIT09dm9pZCAwKXJldHVybiByfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dGhpcy5lZGl0cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0c30sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmVkaXRzLnNwbGljZSgwLHRoaXMuZWRpdHMubGVuZ3RoKX0sZS5wcm90b3R5cGUuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnM9ZnVuY3Rpb24odCl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRleHQgZWRpdCBjaGFuZ2UgaXMgbm90IGNvbmZpZ3VyZWQgdG8gbWFuYWdlIGNoYW5nZSBhbm5vdGF0aW9ucy4iKX0sZX0oKSxfYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5fYW5ub3RhdGlvbnM9dD09PXZvaWQgMD9PYmplY3QuY3JlYXRlKG51bGwpOnQsdGhpcy5fY291bnRlcj0wLHRoaXMuX3NpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5tYW5hZ2U9ZnVuY3Rpb24odCxuKXt2YXIgaTtpZihkZS5pcyh0KT9pPXQ6KGk9dGhpcy5uZXh0SWQoKSxuPXQpLHRoaXMuX2Fubm90YXRpb25zW2ldIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiSWQgIitpKyIgaXMgYWxyZWFkeSBpbiB1c2UuIik7aWYobj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFubm90YXRpb24gcHJvdmlkZWQgZm9yIGlkICIraSk7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zW2ldPW4sdGhpcy5fc2l6ZSsrLGl9LGUucHJvdG90eXBlLm5leHRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3VudGVyKyssdGhpcy5fY291bnRlci50b1N0cmluZygpfSxlfSgpOyhmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG49dGhpczt0aGlzLl90ZXh0RWRpdENoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0IT09dm9pZCAwPyh0aGlzLl93b3Jrc3BhY2VFZGl0PXQsdC5kb2N1bWVudENoYW5nZXM/KHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBfYSh0LmNoYW5nZUFubm90YXRpb25zKSx0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpLHQuZG9jdW1lbnRDaGFuZ2VzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoYW4uaXMoaSkpe3ZhciByPW5ldyBzbihpLmVkaXRzLG4uX2NoYW5nZUFubm90YXRpb25zKTtuLl90ZXh0RWRpdENoYW5nZXNbaS50ZXh0RG9jdW1lbnQudXJpXT1yfX0pKTp0LmNoYW5nZXMmJk9iamVjdC5rZXlzKHQuY2hhbmdlcykuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcj1uZXcgc24odC5jaGFuZ2VzW2ldKTtuLl90ZXh0RWRpdENoYW5nZXNbaV09cn0pKTp0aGlzLl93b3Jrc3BhY2VFZGl0PXt9fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVkaXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMhPT12b2lkIDAmJih0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5zaXplPT09MD90aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXZvaWQgMDp0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKSx0aGlzLl93b3Jrc3BhY2VFZGl0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHRFZGl0Q2hhbmdlPWZ1bmN0aW9uKHQpe2lmKG9uLmlzKHQpKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBuPXt1cmk6dC51cmksdmVyc2lvbjp0LnZlcnNpb259LGk9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW24udXJpXTtpZighaSl7dmFyIHI9W10sYT17dGV4dERvY3VtZW50Om4sZWRpdHM6cn07dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChhKSxpPW5ldyBzbihyLHRoaXMuX2NoYW5nZUFubm90YXRpb25zKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbbi51cmldPWl9cmV0dXJuIGl9ZWxzZXtpZih0aGlzLmluaXRDaGFuZ2VzKCksdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIG5vcm1hbCB0ZXh0IGVkaXQgY2hhbmdlcy4iKTt2YXIgaT10aGlzLl90ZXh0RWRpdENoYW5nZXNbdF07aWYoIWkpe3ZhciByPVtdO3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1t0XT1yLGk9bmV3IHNuKHIpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0XT1pfXJldHVybiBpfX0sZS5wcm90b3R5cGUuaW5pdERvY3VtZW50Q2hhbmdlcz1mdW5jdGlvbigpe3RoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwJiZ0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9PT12b2lkIDAmJih0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgX2EsdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9W10sdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSl9LGUucHJvdG90eXBlLmluaXRDaGFuZ2VzPWZ1bmN0aW9uKCl7dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9PT12b2lkIDAmJnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcz09PXZvaWQgMCYmKHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpKX0sZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbih0LG4saSl7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcjtfdC5pcyhuKXx8ZGUuaXMobik/cj1uOmk9bjt2YXIgYSxzO2lmKHI9PT12b2lkIDA/YT1EdC5jcmVhdGUodCxpKToocz1kZS5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxhPUR0LmNyZWF0ZSh0LGkscykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2goYSkscyE9PXZvaWQgMClyZXR1cm4gc30sZS5wcm90b3R5cGUucmVuYW1lRmlsZT1mdW5jdGlvbih0LG4saSxyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBhO190LmlzKGkpfHxkZS5pcyhpKT9hPWk6cj1pO3ZhciBzLG87aWYoYT09PXZvaWQgMD9zPU50LmNyZWF0ZSh0LG4scik6KG89ZGUuaXMoYSk/YTp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYSkscz1OdC5jcmVhdGUodCxuLHIsbykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gocyksbyE9PXZvaWQgMClyZXR1cm4gb30sZS5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbih0LG4saSl7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcjtfdC5pcyhuKXx8ZGUuaXMobik/cj1uOmk9bjt2YXIgYSxzO2lmKHI9PT12b2lkIDA/YT1JdC5jcmVhdGUodCxpKToocz1kZS5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxhPUl0LmNyZWF0ZSh0LGkscykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2goYSkscyE9PXZvaWQgMClyZXR1cm4gc30sZX0pKCk7dmFyIHdhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkpe3JldHVybnt1cmk6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy5zdHJpbmcoci51cmkpfWUuaXM9bn0pKHdhfHwod2E9e30pKTt2YXIgeWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57dXJpOmksdmVyc2lvbjpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnN0cmluZyhyLnVyaSkmJkMuaW50ZWdlcihyLnZlcnNpb24pfWUuaXM9bn0pKHlhfHwoeWE9e30pKTt2YXIgb247KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57dXJpOmksdmVyc2lvbjpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnN0cmluZyhyLnVyaSkmJihyLnZlcnNpb249PT1udWxsfHxDLmludGVnZXIoci52ZXJzaW9uKSl9ZS5pcz1ufSkob258fChvbj17fSkpO3ZhciB4YTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIsYSxzKXtyZXR1cm57dXJpOmksbGFuZ3VhZ2VJZDpyLHZlcnNpb246YSx0ZXh0OnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkMuc3RyaW5nKHIudXJpKSYmQy5zdHJpbmcoci5sYW5ndWFnZUlkKSYmQy5pbnRlZ2VyKHIudmVyc2lvbikmJkMuc3RyaW5nKHIudGV4dCl9ZS5pcz1ufSkoeGF8fCh4YT17fSkpO3ZhciBFZTsoZnVuY3Rpb24oZSl7ZS5QbGFpblRleHQ9InBsYWludGV4dCIsZS5NYXJrZG93bj0ibWFya2Rvd24ifSkoRWV8fChFZT17fSkpLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIGk9bjtyZXR1cm4gaT09PWUuUGxhaW5UZXh0fHxpPT09ZS5NYXJrZG93bn1lLmlzPXR9KEVlfHwoRWU9e30pKTt2YXIgaWk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIGk9bjtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKG4pJiZFZS5pcyhpLmtpbmQpJiZDLnN0cmluZyhpLnZhbHVlKX1lLmlzPXR9KShpaXx8KGlpPXt9KSk7dmFyIGJlOyhmdW5jdGlvbihlKXtlLlRleHQ9MSxlLk1ldGhvZD0yLGUuRnVuY3Rpb249MyxlLkNvbnN0cnVjdG9yPTQsZS5GaWVsZD01LGUuVmFyaWFibGU9NixlLkNsYXNzPTcsZS5JbnRlcmZhY2U9OCxlLk1vZHVsZT05LGUuUHJvcGVydHk9MTAsZS5Vbml0PTExLGUuVmFsdWU9MTIsZS5FbnVtPTEzLGUuS2V5d29yZD0xNCxlLlNuaXBwZXQ9MTUsZS5Db2xvcj0xNixlLkZpbGU9MTcsZS5SZWZlcmVuY2U9MTgsZS5Gb2xkZXI9MTksZS5FbnVtTWVtYmVyPTIwLGUuQ29uc3RhbnQ9MjEsZS5TdHJ1Y3Q9MjIsZS5FdmVudD0yMyxlLk9wZXJhdG9yPTI0LGUuVHlwZVBhcmFtZXRlcj0yNX0pKGJlfHwoYmU9e30pKTt2YXIgUmU7KGZ1bmN0aW9uKGUpe2UuUGxhaW5UZXh0PTEsZS5TbmlwcGV0PTJ9KShSZXx8KFJlPXt9KSk7dmFyIFRhOyhmdW5jdGlvbihlKXtlLkRlcHJlY2F0ZWQ9MX0pKFRhfHwoVGE9e30pKTt2YXIga2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3JldHVybntuZXdUZXh0OmksaW5zZXJ0OnIscmVwbGFjZTphfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmQy5zdHJpbmcoci5uZXdUZXh0KSYmWS5pcyhyLmluc2VydCkmJlkuaXMoci5yZXBsYWNlKX1lLmlzPW59KShrYXx8KGthPXt9KSk7dmFyIEFhOyhmdW5jdGlvbihlKXtlLmFzSXM9MSxlLmFkanVzdEluZGVudGF0aW9uPTJ9KShBYXx8KEFhPXt9KSk7dmFyIFNhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybntsYWJlbDpufX1lLmNyZWF0ZT10fSkoU2F8fChTYT17fSkpO3ZhciBMYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkpe3JldHVybntpdGVtczpufHxbXSxpc0luY29tcGxldGU6ISFpfX1lLmNyZWF0ZT10fSkoTGF8fChMYT17fSkpO3ZhciBsbjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpKXtyZXR1cm4gaS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9ZS5mcm9tUGxhaW5UZXh0PXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLnN0cmluZyhyKXx8Qy5vYmplY3RMaXRlcmFsKHIpJiZDLnN0cmluZyhyLmxhbmd1YWdlKSYmQy5zdHJpbmcoci52YWx1ZSl9ZS5pcz1ufSkobG58fChsbj17fSkpO3ZhciBDYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgaT1uO3JldHVybiEhaSYmQy5vYmplY3RMaXRlcmFsKGkpJiYoaWkuaXMoaS5jb250ZW50cyl8fGxuLmlzKGkuY29udGVudHMpfHxDLnR5cGVkQXJyYXkoaS5jb250ZW50cyxsbi5pcykpJiYobi5yYW5nZT09PXZvaWQgMHx8WS5pcyhuLnJhbmdlKSl9ZS5pcz10fSkoQ2F8fChDYT17fSkpO3ZhciBFYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkpe3JldHVybiBpP3tsYWJlbDpuLGRvY3VtZW50YXRpb246aX06e2xhYmVsOm59fWUuY3JlYXRlPXR9KShFYXx8KEVhPXt9KSk7dmFyIFJhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSl7Zm9yKHZhciByPVtdLGE9MjthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKXJbYS0yXT1hcmd1bWVudHNbYV07dmFyIHM9e2xhYmVsOm59O3JldHVybiBDLmRlZmluZWQoaSkmJihzLmRvY3VtZW50YXRpb249aSksQy5kZWZpbmVkKHIpP3MucGFyYW1ldGVycz1yOnMucGFyYW1ldGVycz1bXSxzfWUuY3JlYXRlPXR9KShSYXx8KFJhPXt9KSk7dmFyIHVuOyhmdW5jdGlvbihlKXtlLlRleHQ9MSxlLlJlYWQ9MixlLldyaXRlPTN9KSh1bnx8KHVuPXt9KSk7dmFyIE1hOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSl7dmFyIHI9e3JhbmdlOm59O3JldHVybiBDLm51bWJlcihpKSYmKHIua2luZD1pKSxyfWUuY3JlYXRlPXR9KShNYXx8KE1hPXt9KSk7dmFyIHJpOyhmdW5jdGlvbihlKXtlLkZpbGU9MSxlLk1vZHVsZT0yLGUuTmFtZXNwYWNlPTMsZS5QYWNrYWdlPTQsZS5DbGFzcz01LGUuTWV0aG9kPTYsZS5Qcm9wZXJ0eT03LGUuRmllbGQ9OCxlLkNvbnN0cnVjdG9yPTksZS5FbnVtPTEwLGUuSW50ZXJmYWNlPTExLGUuRnVuY3Rpb249MTIsZS5WYXJpYWJsZT0xMyxlLkNvbnN0YW50PTE0LGUuU3RyaW5nPTE1LGUuTnVtYmVyPTE2LGUuQm9vbGVhbj0xNyxlLkFycmF5PTE4LGUuT2JqZWN0PTE5LGUuS2V5PTIwLGUuTnVsbD0yMSxlLkVudW1NZW1iZXI9MjIsZS5TdHJ1Y3Q9MjMsZS5FdmVudD0yNCxlLk9wZXJhdG9yPTI1LGUuVHlwZVBhcmFtZXRlcj0yNn0pKHJpfHwocmk9e30pKTt2YXIgRGE7KGZ1bmN0aW9uKGUpe2UuRGVwcmVjYXRlZD0xfSkoRGF8fChEYT17fSkpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkscixhLHMpe3ZhciBvPXtuYW1lOm4sa2luZDppLGxvY2F0aW9uOnt1cmk6YSxyYW5nZTpyfX07cmV0dXJuIHMmJihvLmNvbnRhaW5lck5hbWU9cyksb31lLmNyZWF0ZT10fSkoTmF8fChOYT17fSkpO3ZhciBJYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIsYSxzLG8sbCl7dmFyIHU9e25hbWU6aSxkZXRhaWw6cixraW5kOmEscmFuZ2U6cyxzZWxlY3Rpb25SYW5nZTpvfTtyZXR1cm4gbCE9PXZvaWQgMCYmKHUuY2hpbGRyZW49bCksdX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmQy5zdHJpbmcoci5uYW1lKSYmQy5udW1iZXIoci5raW5kKSYmWS5pcyhyLnJhbmdlKSYmWS5pcyhyLnNlbGVjdGlvblJhbmdlKSYmKHIuZGV0YWlsPT09dm9pZCAwfHxDLnN0cmluZyhyLmRldGFpbCkpJiYoci5kZXByZWNhdGVkPT09dm9pZCAwfHxDLmJvb2xlYW4oci5kZXByZWNhdGVkKSkmJihyLmNoaWxkcmVuPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KHIuY2hpbGRyZW4pKSYmKHIudGFncz09PXZvaWQgMHx8QXJyYXkuaXNBcnJheShyLnRhZ3MpKX1lLmlzPW59KShJYXx8KElhPXt9KSk7dmFyIHphOyhmdW5jdGlvbihlKXtlLkVtcHR5PSIiLGUuUXVpY2tGaXg9InF1aWNrZml4IixlLlJlZmFjdG9yPSJyZWZhY3RvciIsZS5SZWZhY3RvckV4dHJhY3Q9InJlZmFjdG9yLmV4dHJhY3QiLGUuUmVmYWN0b3JJbmxpbmU9InJlZmFjdG9yLmlubGluZSIsZS5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLGUuU291cmNlPSJzb3VyY2UiLGUuU291cmNlT3JnYW5pemVJbXBvcnRzPSJzb3VyY2Uub3JnYW5pemVJbXBvcnRzIixlLlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCJ9KSh6YXx8KHphPXt9KSk7dmFyIEhhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7dmFyIGE9e2RpYWdub3N0aWNzOml9O3JldHVybiByIT1udWxsJiYoYS5vbmx5PXIpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy50eXBlZEFycmF5KHIuZGlhZ25vc3RpY3Mscm4uaXMpJiYoci5vbmx5PT09dm9pZCAwfHxDLnR5cGVkQXJyYXkoci5vbmx5LEMuc3RyaW5nKSl9ZS5pcz1ufSkoSGF8fChIYT17fSkpO3ZhciBVYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIsYSl7dmFyIHM9e3RpdGxlOml9LG89ITA7cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIj8obz0hMSxzLmtpbmQ9cik6TXQuaXMocik/cy5jb21tYW5kPXI6cy5lZGl0PXIsbyYmYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiByJiZDLnN0cmluZyhyLnRpdGxlKSYmKHIuZGlhZ25vc3RpY3M9PT12b2lkIDB8fEMudHlwZWRBcnJheShyLmRpYWdub3N0aWNzLHJuLmlzKSkmJihyLmtpbmQ9PT12b2lkIDB8fEMuc3RyaW5nKHIua2luZCkpJiYoci5lZGl0IT09dm9pZCAwfHxyLmNvbW1hbmQhPT12b2lkIDApJiYoci5jb21tYW5kPT09dm9pZCAwfHxNdC5pcyhyLmNvbW1hbmQpKSYmKHIuaXNQcmVmZXJyZWQ9PT12b2lkIDB8fEMuYm9vbGVhbihyLmlzUHJlZmVycmVkKSkmJihyLmVkaXQ9PT12b2lkIDB8fG5pLmlzKHIuZWRpdCkpfWUuaXM9bn0pKFVhfHwoVWE9e30pKTt2YXIgV2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXt2YXIgYT17cmFuZ2U6aX07cmV0dXJuIEMuZGVmaW5lZChyKSYmKGEuZGF0YT1yKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLmRlZmluZWQocikmJlkuaXMoci5yYW5nZSkmJihDLnVuZGVmaW5lZChyLmNvbW1hbmQpfHxNdC5pcyhyLmNvbW1hbmQpKX1lLmlzPW59KShXYXx8KFdhPXt9KSk7dmFyIEZhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3RhYlNpemU6aSxpbnNlcnRTcGFjZXM6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy51aW50ZWdlcihyLnRhYlNpemUpJiZDLmJvb2xlYW4oci5pbnNlcnRTcGFjZXMpfWUuaXM9bn0pKEZhfHwoRmE9e30pKTt2YXIgUGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3JldHVybntyYW5nZTppLHRhcmdldDpyLGRhdGE6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmWS5pcyhyLnJhbmdlKSYmKEMudW5kZWZpbmVkKHIudGFyZ2V0KXx8Qy5zdHJpbmcoci50YXJnZXQpKX1lLmlzPW59KShQYXx8KFBhPXt9KSk7dmFyIGNuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3JhbmdlOmkscGFyZW50OnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiByIT09dm9pZCAwJiZZLmlzKHIucmFuZ2UpJiYoci5wYXJlbnQ9PT12b2lkIDB8fGUuaXMoci5wYXJlbnQpKX1lLmlzPW59KShjbnx8KGNuPXt9KSk7dmFyIEJhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGEscyxvLGwpe3JldHVybiBuZXcgcWwoYSxzLG8sbCl9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGEpe3ZhciBzPWE7cmV0dXJuISEoQy5kZWZpbmVkKHMpJiZDLnN0cmluZyhzLnVyaSkmJihDLnVuZGVmaW5lZChzLmxhbmd1YWdlSWQpfHxDLnN0cmluZyhzLmxhbmd1YWdlSWQpKSYmQy51aW50ZWdlcihzLmxpbmVDb3VudCkmJkMuZnVuYyhzLmdldFRleHQpJiZDLmZ1bmMocy5wb3NpdGlvbkF0KSYmQy5mdW5jKHMub2Zmc2V0QXQpKX1lLmlzPW47ZnVuY3Rpb24gaShhLHMpe2Zvcih2YXIgbz1hLmdldFRleHQoKSxsPXIocyxmdW5jdGlvbihiLHApe3ZhciB3PWIucmFuZ2Uuc3RhcnQubGluZS1wLnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIHc9PT0wP2IucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXAucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOnd9KSx1PW8ubGVuZ3RoLGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7dmFyIGQ9bFtjXSxtPWEub2Zmc2V0QXQoZC5yYW5nZS5zdGFydCksZj1hLm9mZnNldEF0KGQucmFuZ2UuZW5kKTtpZihmPD11KW89by5zdWJzdHJpbmcoMCxtKStkLm5ld1RleHQrby5zdWJzdHJpbmcoZixvLmxlbmd0aCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTt1PW19cmV0dXJuIG99ZS5hcHBseUVkaXRzPWk7ZnVuY3Rpb24gcihhLHMpe2lmKGEubGVuZ3RoPD0xKXJldHVybiBhO3ZhciBvPWEubGVuZ3RoLzJ8MCxsPWEuc2xpY2UoMCxvKSx1PWEuc2xpY2Uobyk7cihsLHMpLHIodSxzKTtmb3IodmFyIGM9MCxkPTAsbT0wO2M8bC5sZW5ndGgmJmQ8dS5sZW5ndGg7KXt2YXIgZj1zKGxbY10sdVtkXSk7Zjw9MD9hW20rK109bFtjKytdOmFbbSsrXT11W2QrK119Zm9yKDtjPGwubGVuZ3RoOylhW20rK109bFtjKytdO2Zvcig7ZDx1Lmxlbmd0aDspYVttKytdPXVbZCsrXTtyZXR1cm4gYX19KShCYXx8KEJhPXt9KSk7dmFyIHFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4saSxyKXt0aGlzLl91cmk9dCx0aGlzLl9sYW5ndWFnZUlkPW4sdGhpcy5fdmVyc2lvbj1pLHRoaXMuX2NvbnRlbnQ9cix0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidXJpIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VyaX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxhbmd1YWdlSWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZlcnNpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRUZXh0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBuPXRoaXMub2Zmc2V0QXQodC5zdGFydCksaT10aGlzLm9mZnNldEF0KHQuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcobixpKX1yZXR1cm4gdGhpcy5fY29udGVudH0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsbil7dGhpcy5fY29udGVudD10LnRleHQsdGhpcy5fdmVyc2lvbj1uLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH0sZS5wcm90b3R5cGUuZ2V0TGluZU9mZnNldHM9ZnVuY3Rpb24oKXtpZih0aGlzLl9saW5lT2Zmc2V0cz09PXZvaWQgMCl7Zm9yKHZhciB0PVtdLG49dGhpcy5fY29udGVudCxpPSEwLHI9MDtyPG4ubGVuZ3RoO3IrKyl7aSYmKHQucHVzaChyKSxpPSExKTt2YXIgYT1uLmNoYXJBdChyKTtpPWE9PT0iXHIifHxhPT09YApgLGE9PT0iXHIiJiZyKzE8bi5sZW5ndGgmJm4uY2hhckF0KHIrMSk9PT1gCmAmJnIrK31pJiZuLmxlbmd0aD4wJiZ0LnB1c2gobi5sZW5ndGgpLHRoaXMuX2xpbmVPZmZzZXRzPXR9cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzfSxlLnByb3RvdHlwZS5wb3NpdGlvbkF0PWZ1bmN0aW9uKHQpe3Q9TWF0aC5tYXgoTWF0aC5taW4odCx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7dmFyIG49dGhpcy5nZXRMaW5lT2Zmc2V0cygpLGk9MCxyPW4ubGVuZ3RoO2lmKHI9PT0wKXJldHVybiBjZS5jcmVhdGUoMCx0KTtmb3IoO2k8cjspe3ZhciBhPU1hdGguZmxvb3IoKGkrcikvMik7blthXT50P3I9YTppPWErMX12YXIgcz1pLTE7cmV0dXJuIGNlLmNyZWF0ZShzLHQtbltzXSl9LGUucHJvdG90eXBlLm9mZnNldEF0PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZih0LmxpbmU+PW4ubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZih0LmxpbmU8MClyZXR1cm4gMDt2YXIgaT1uW3QubGluZV0scj10LmxpbmUrMTxuLmxlbmd0aD9uW3QubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oaSt0LmNoYXJhY3RlcixyKSxpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsaW5lQ291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlfSgpLEM7KGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbihmKXtyZXR1cm4gdHlwZW9mIGY8InUifWUuZGVmaW5lZD1uO2Z1bmN0aW9uIGkoZil7cmV0dXJuIHR5cGVvZiBmPiJ1In1lLnVuZGVmaW5lZD1pO2Z1bmN0aW9uIHIoZil7cmV0dXJuIGY9PT0hMHx8Zj09PSExfWUuYm9vbGVhbj1yO2Z1bmN0aW9uIGEoZil7cmV0dXJuIHQuY2FsbChmKT09PSJbb2JqZWN0IFN0cmluZ10ifWUuc3RyaW5nPWE7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgTnVtYmVyXSJ9ZS5udW1iZXI9cztmdW5jdGlvbiBvKGYsYixwKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgTnVtYmVyXSImJmI8PWYmJmY8PXB9ZS5udW1iZXJSYW5nZT1vO2Z1bmN0aW9uIGwoZil7cmV0dXJuIHQuY2FsbChmKT09PSJbb2JqZWN0IE51bWJlcl0iJiYtMjE0NzQ4MzY0ODw9ZiYmZjw9MjE0NzQ4MzY0N31lLmludGVnZXI9bDtmdW5jdGlvbiB1KGYpe3JldHVybiB0LmNhbGwoZik9PT0iW29iamVjdCBOdW1iZXJdIiYmMDw9ZiYmZjw9MjE0NzQ4MzY0N31lLnVpbnRlZ2VyPXU7ZnVuY3Rpb24gYyhmKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgRnVuY3Rpb25dIn1lLmZ1bmM9YztmdW5jdGlvbiBkKGYpe3JldHVybiBmIT09bnVsbCYmdHlwZW9mIGY9PSJvYmplY3QifWUub2JqZWN0TGl0ZXJhbD1kO2Z1bmN0aW9uIG0oZixiKXtyZXR1cm4gQXJyYXkuaXNBcnJheShmKSYmZi5ldmVyeShiKX1lLnR5cGVkQXJyYXk9bX0pKEN8fChDPXt9KSk7dmFyIHFhPWNsYXNzIGRpe2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMuX3VyaT10LHRoaXMuX2xhbmd1YWdlSWQ9bix0aGlzLl92ZXJzaW9uPWksdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dCh0KXtpZih0KXtjb25zdCBuPXRoaXMub2Zmc2V0QXQodC5zdGFydCksaT10aGlzLm9mZnNldEF0KHQuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcobixpKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUodCxuKXtmb3IobGV0IGkgb2YgdClpZihkaS5pc0luY3JlbWVudGFsKGkpKXtjb25zdCByPVZhKGkucmFuZ2UpLGE9dGhpcy5vZmZzZXRBdChyLnN0YXJ0KSxzPXRoaXMub2Zmc2V0QXQoci5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxhKStpLnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcocyx0aGlzLl9jb250ZW50Lmxlbmd0aCk7Y29uc3Qgbz1NYXRoLm1heChyLnN0YXJ0LmxpbmUsMCksbD1NYXRoLm1heChyLmVuZC5saW5lLDApO2xldCB1PXRoaXMuX2xpbmVPZmZzZXRzO2NvbnN0IGM9T2EoaS50ZXh0LCExLGEpO2lmKGwtbz09PWMubGVuZ3RoKWZvcihsZXQgbT0wLGY9Yy5sZW5ndGg7bTxmO20rKyl1W20rbysxXT1jW21dO2Vsc2UgYy5sZW5ndGg8MWU0P3Uuc3BsaWNlKG8rMSxsLW8sLi4uYyk6dGhpcy5fbGluZU9mZnNldHM9dT11LnNsaWNlKDAsbysxKS5jb25jYXQoYyx1LnNsaWNlKGwrMSkpO2NvbnN0IGQ9aS50ZXh0Lmxlbmd0aC0ocy1hKTtpZihkIT09MClmb3IobGV0IG09bysxK2MubGVuZ3RoLGY9dS5sZW5ndGg7bTxmO20rKyl1W21dPXVbbV0rZH1lbHNlIGlmKGRpLmlzRnVsbChpKSl0aGlzLl9jb250ZW50PWkudGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDA7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fdmVyc2lvbj1ufWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwJiYodGhpcy5fbGluZU9mZnNldHM9T2EodGhpcy5fY29udGVudCwhMCkpLHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQodCl7dD1NYXRoLm1heChNYXRoLm1pbih0LHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTtsZXQgbj10aGlzLmdldExpbmVPZmZzZXRzKCksaT0wLHI9bi5sZW5ndGg7aWYocj09PTApcmV0dXJue2xpbmU6MCxjaGFyYWN0ZXI6dH07Zm9yKDtpPHI7KXtsZXQgcz1NYXRoLmZsb29yKChpK3IpLzIpO25bc10+dD9yPXM6aT1zKzF9bGV0IGE9aS0xO3JldHVybntsaW5lOmEsY2hhcmFjdGVyOnQtblthXX19b2Zmc2V0QXQodCl7bGV0IG49dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKHQubGluZT49bi5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKHQubGluZTwwKXJldHVybiAwO2xldCBpPW5bdC5saW5lXSxyPXQubGluZSsxPG4ubGVuZ3RoP25bdC5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihpK3QuY2hhcmFjdGVyLHIpLGkpfWdldCBsaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH1zdGF0aWMgaXNJbmNyZW1lbnRhbCh0KXtsZXQgbj10O3JldHVybiBuIT1udWxsJiZ0eXBlb2Ygbi50ZXh0PT0ic3RyaW5nIiYmbi5yYW5nZSE9PXZvaWQgMCYmKG4ucmFuZ2VMZW5ndGg9PT12b2lkIDB8fHR5cGVvZiBuLnJhbmdlTGVuZ3RoPT0ibnVtYmVyIil9c3RhdGljIGlzRnVsbCh0KXtsZXQgbj10O3JldHVybiBuIT1udWxsJiZ0eXBlb2Ygbi50ZXh0PT0ic3RyaW5nIiYmbi5yYW5nZT09PXZvaWQgMCYmbi5yYW5nZUxlbmd0aD09PXZvaWQgMH19LGFpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsYSxzLG8pe3JldHVybiBuZXcgcWEocixhLHMsbyl9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIsYSxzKXtpZihyIGluc3RhbmNlb2YgcWEpcmV0dXJuIHIudXBkYXRlKGEscykscjt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9ZS51cGRhdGU9bjtmdW5jdGlvbiBpKHIsYSl7bGV0IHM9ci5nZXRUZXh0KCksbz1zaShhLm1hcChPbCksKGMsZCk9PntsZXQgbT1jLnJhbmdlLnN0YXJ0LmxpbmUtZC5yYW5nZS5zdGFydC5saW5lO3JldHVybiBtPT09MD9jLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci1kLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjptfSksbD0wO2NvbnN0IHU9W107Zm9yKGNvbnN0IGMgb2Ygbyl7bGV0IGQ9ci5vZmZzZXRBdChjLnJhbmdlLnN0YXJ0KTtpZihkPGwpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7ZD5sJiZ1LnB1c2gocy5zdWJzdHJpbmcobCxkKSksYy5uZXdUZXh0Lmxlbmd0aCYmdS5wdXNoKGMubmV3VGV4dCksbD1yLm9mZnNldEF0KGMucmFuZ2UuZW5kKX1yZXR1cm4gdS5wdXNoKHMuc3Vic3RyKGwpKSx1LmpvaW4oIiIpfWUuYXBwbHlFZGl0cz1pfSkoYWl8fChhaT17fSkpO2Z1bmN0aW9uIHNpKGUsdCl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3Qgbj1lLmxlbmd0aC8yfDAsaT1lLnNsaWNlKDAsbikscj1lLnNsaWNlKG4pO3NpKGksdCksc2kocix0KTtsZXQgYT0wLHM9MCxvPTA7Zm9yKDthPGkubGVuZ3RoJiZzPHIubGVuZ3RoOyl0KGlbYV0scltzXSk8PTA/ZVtvKytdPWlbYSsrXTplW28rK109cltzKytdO2Zvcig7YTxpLmxlbmd0aDspZVtvKytdPWlbYSsrXTtmb3IoO3M8ci5sZW5ndGg7KWVbbysrXT1yW3MrK107cmV0dXJuIGV9ZnVuY3Rpb24gT2EoZSx0LG49MCl7Y29uc3QgaT10P1tuXTpbXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IGE9ZS5jaGFyQ29kZUF0KHIpOyhhPT09MTN8fGE9PT0xMCkmJihhPT09MTMmJnIrMTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KHIrMSk9PT0xMCYmcisrLGkucHVzaChuK3IrMSkpfXJldHVybiBpfWZ1bmN0aW9uIFZhKGUpe2NvbnN0IHQ9ZS5zdGFydCxuPWUuZW5kO3JldHVybiB0LmxpbmU+bi5saW5lfHx0LmxpbmU9PT1uLmxpbmUmJnQuY2hhcmFjdGVyPm4uY2hhcmFjdGVyP3tzdGFydDpuLGVuZDp0fTplfWZ1bmN0aW9uIE9sKGUpe2NvbnN0IHQ9VmEoZS5yYW5nZSk7cmV0dXJuIHQhPT1lLnJhbmdlP3tuZXdUZXh0OmUubmV3VGV4dCxyYW5nZTp0fTplfXZhciBVOyhmdW5jdGlvbihlKXtlW2UuU3RhcnRDb21tZW50VGFnPTBdPSJTdGFydENvbW1lbnRUYWciLGVbZS5Db21tZW50PTFdPSJDb21tZW50IixlW2UuRW5kQ29tbWVudFRhZz0yXT0iRW5kQ29tbWVudFRhZyIsZVtlLlN0YXJ0VGFnT3Blbj0zXT0iU3RhcnRUYWdPcGVuIixlW2UuU3RhcnRUYWdDbG9zZT00XT0iU3RhcnRUYWdDbG9zZSIsZVtlLlN0YXJ0VGFnU2VsZkNsb3NlPTVdPSJTdGFydFRhZ1NlbGZDbG9zZSIsZVtlLlN0YXJ0VGFnPTZdPSJTdGFydFRhZyIsZVtlLkVuZFRhZ09wZW49N109IkVuZFRhZ09wZW4iLGVbZS5FbmRUYWdDbG9zZT04XT0iRW5kVGFnQ2xvc2UiLGVbZS5FbmRUYWc9OV09IkVuZFRhZyIsZVtlLkRlbGltaXRlckFzc2lnbj0xMF09IkRlbGltaXRlckFzc2lnbiIsZVtlLkF0dHJpYnV0ZU5hbWU9MTFdPSJBdHRyaWJ1dGVOYW1lIixlW2UuQXR0cmlidXRlVmFsdWU9MTJdPSJBdHRyaWJ1dGVWYWx1ZSIsZVtlLlN0YXJ0RG9jdHlwZVRhZz0xM109IlN0YXJ0RG9jdHlwZVRhZyIsZVtlLkRvY3R5cGU9MTRdPSJEb2N0eXBlIixlW2UuRW5kRG9jdHlwZVRhZz0xNV09IkVuZERvY3R5cGVUYWciLGVbZS5Db250ZW50PTE2XT0iQ29udGVudCIsZVtlLldoaXRlc3BhY2U9MTddPSJXaGl0ZXNwYWNlIixlW2UuVW5rbm93bj0xOF09IlVua25vd24iLGVbZS5TY3JpcHQ9MTldPSJTY3JpcHQiLGVbZS5TdHlsZXM9MjBdPSJTdHlsZXMiLGVbZS5FT1M9MjFdPSJFT1MifSkoVXx8KFU9e30pKTt2YXIgVjsoZnVuY3Rpb24oZSl7ZVtlLldpdGhpbkNvbnRlbnQ9MF09IldpdGhpbkNvbnRlbnQiLGVbZS5BZnRlck9wZW5pbmdTdGFydFRhZz0xXT0iQWZ0ZXJPcGVuaW5nU3RhcnRUYWciLGVbZS5BZnRlck9wZW5pbmdFbmRUYWc9Ml09IkFmdGVyT3BlbmluZ0VuZFRhZyIsZVtlLldpdGhpbkRvY3R5cGU9M109IldpdGhpbkRvY3R5cGUiLGVbZS5XaXRoaW5UYWc9NF09IldpdGhpblRhZyIsZVtlLldpdGhpbkVuZFRhZz01XT0iV2l0aGluRW5kVGFnIixlW2UuV2l0aGluQ29tbWVudD02XT0iV2l0aGluQ29tbWVudCIsZVtlLldpdGhpblNjcmlwdENvbnRlbnQ9N109IldpdGhpblNjcmlwdENvbnRlbnQiLGVbZS5XaXRoaW5TdHlsZUNvbnRlbnQ9OF09IldpdGhpblN0eWxlQ29udGVudCIsZVtlLkFmdGVyQXR0cmlidXRlTmFtZT05XT0iQWZ0ZXJBdHRyaWJ1dGVOYW1lIixlW2UuQmVmb3JlQXR0cmlidXRlVmFsdWU9MTBdPSJCZWZvcmVBdHRyaWJ1dGVWYWx1ZSJ9KShWfHwoVj17fSkpO3ZhciBqYTsoZnVuY3Rpb24oZSl7ZS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W0VlLk1hcmtkb3duLEVlLlBsYWluVGV4dF19fSxob3Zlcjp7Y29udGVudEZvcm1hdDpbRWUuTWFya2Rvd24sRWUuUGxhaW5UZXh0XX19fX0pKGphfHwoamE9e30pKTt2YXIgb2k7KGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRmlsZT0xXT0iRmlsZSIsZVtlLkRpcmVjdG9yeT0yXT0iRGlyZWN0b3J5IixlW2UuU3ltYm9saWNMaW5rPTY0XT0iU3ltYm9saWNMaW5rIn0pKG9pfHwob2k9e30pKTt2YXIgSmU9S24oKSxWbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt0aGlzLnNvdXJjZT10LHRoaXMubGVuPXQubGVuZ3RoLHRoaXMucG9zaXRpb249bn1yZXR1cm4gZS5wcm90b3R5cGUuZW9zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuPD10aGlzLnBvc2l0aW9ufSxlLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LGUucHJvdG90eXBlLnBvcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9ufSxlLnByb3RvdHlwZS5nb0JhY2tUbz1mdW5jdGlvbih0KXt0aGlzLnBvc2l0aW9uPXR9LGUucHJvdG90eXBlLmdvQmFjaz1mdW5jdGlvbih0KXt0aGlzLnBvc2l0aW9uLT10fSxlLnByb3RvdHlwZS5hZHZhbmNlPWZ1bmN0aW9uKHQpe3RoaXMucG9zaXRpb24rPXR9LGUucHJvdG90eXBlLmdvVG9FbmQ9ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uPXRoaXMuc291cmNlLmxlbmd0aH0sZS5wcm90b3R5cGUubmV4dENoYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uKyspfHwwfSxlLnByb3RvdHlwZS5wZWVrQ2hhcj1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9MCksdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uK3QpfHwwfSxlLnByb3RvdHlwZS5hZHZhbmNlSWZDaGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uKT8odGhpcy5wb3NpdGlvbisrLCEwKTohMX0sZS5wcm90b3R5cGUuYWR2YW5jZUlmQ2hhcnM9ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5wb3NpdGlvbit0Lmxlbmd0aD50aGlzLnNvdXJjZS5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZih0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24rbikhPT10W25dKXJldHVybiExO3JldHVybiB0aGlzLmFkdmFuY2UobiksITB9LGUucHJvdG90eXBlLmFkdmFuY2VJZlJlZ0V4cD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLnNvdXJjZS5zdWJzdHIodGhpcy5wb3NpdGlvbiksaT1uLm1hdGNoKHQpO3JldHVybiBpPyh0aGlzLnBvc2l0aW9uPXRoaXMucG9zaXRpb24raS5pbmRleCtpWzBdLmxlbmd0aCxpWzBdKToiIn0sZS5wcm90b3R5cGUuYWR2YW5jZVVudGlsUmVnRXhwPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuc291cmNlLnN1YnN0cih0aGlzLnBvc2l0aW9uKSxpPW4ubWF0Y2godCk7cmV0dXJuIGk/KHRoaXMucG9zaXRpb249dGhpcy5wb3NpdGlvbitpLmluZGV4LGlbMF0pOih0aGlzLmdvVG9FbmQoKSwiIil9LGUucHJvdG90eXBlLmFkdmFuY2VVbnRpbENoYXI9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLnBvc2l0aW9uPHRoaXMuc291cmNlLmxlbmd0aDspe2lmKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbik9PT10KXJldHVybiEwO3RoaXMuYWR2YW5jZSgxKX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuYWR2YW5jZVVudGlsQ2hhcnM9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLnBvc2l0aW9uK3QubGVuZ3RoPD10aGlzLnNvdXJjZS5sZW5ndGg7KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24rbik9PT10W25dO24rKyk7aWYobj09PXQubGVuZ3RoKXJldHVybiEwO3RoaXMuYWR2YW5jZSgxKX1yZXR1cm4gdGhpcy5nb1RvRW5kKCksITF9LGUucHJvdG90eXBlLnNraXBXaGl0ZXNwYWNlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hZHZhbmNlV2hpbGVDaGFyKGZ1bmN0aW9uKG4pe3JldHVybiBuPT09WWx8fG49PT1abHx8bj09PVhsfHxuPT09UWx8fG49PT1KbH0pO3JldHVybiB0PjB9LGUucHJvdG90eXBlLmFkdmFuY2VXaGlsZUNoYXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMucG9zaXRpb247dGhpcy5wb3NpdGlvbjx0aGlzLmxlbiYmdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24pKTspdGhpcy5wb3NpdGlvbisrO3JldHVybiB0aGlzLnBvc2l0aW9uLW59LGV9KCksR2E9MzMsd3Q9NDUsaG49NjAsemU9NjIsbGk9NDcsamw9NjEsR2w9MzQsJGw9MzksWGw9MTAsSmw9MTMsUWw9MTIsWWw9MzIsWmw9OSxLbD17InRleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlIjohMCwidGV4dC9odG1sIjohMH07ZnVuY3Rpb24gd2UoZSx0LG4saSl7dD09PXZvaWQgMCYmKHQ9MCksbj09PXZvaWQgMCYmKG49Vi5XaXRoaW5Db250ZW50KSxpPT09dm9pZCAwJiYoaT0hMSk7dmFyIHI9bmV3IFZsKGUsdCksYT1uLHM9MCxvPVUuVW5rbm93bixsLHUsYyxkLG07ZnVuY3Rpb24gZigpe3JldHVybiByLmFkdmFuY2VJZlJlZ0V4cCgvXltfOlx3XVtfOlx3LS5cZF0qLykudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBiKCl7cmV0dXJuIHIuYWR2YW5jZUlmUmVnRXhwKC9eW15ccyInPjwvPVx4MDAtXHgwRlx4N0ZceDgwLVx4OUZdKi8pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcChfLHksRSl7cmV0dXJuIG89eSxzPV8sbD1FLHl9ZnVuY3Rpb24gdygpe3ZhciBfPXIucG9zKCkseT1hLEU9eCgpO3JldHVybiBFIT09VS5FT1MmJl89PT1yLnBvcygpJiYhKGkmJihFPT09VS5TdGFydFRhZ0Nsb3NlfHxFPT09VS5FbmRUYWdDbG9zZSkpPyhjb25zb2xlLmxvZygiU2Nhbm5lci5zY2FuIGhhcyBub3QgYWR2YW5jZWQgYXQgb2Zmc2V0ICIrXysiLCBzdGF0ZSBiZWZvcmU6ICIreSsiIGFmdGVyOiAiK2EpLHIuYWR2YW5jZSgxKSxwKF8sVS5Vbmtub3duKSk6RX1mdW5jdGlvbiB4KCl7dmFyIF89ci5wb3MoKTtpZihyLmVvcygpKXJldHVybiBwKF8sVS5FT1MpO3ZhciB5O3N3aXRjaChhKXtjYXNlIFYuV2l0aGluQ29tbWVudDpyZXR1cm4gci5hZHZhbmNlSWZDaGFycyhbd3Qsd3QsemVdKT8oYT1WLldpdGhpbkNvbnRlbnQscChfLFUuRW5kQ29tbWVudFRhZykpOihyLmFkdmFuY2VVbnRpbENoYXJzKFt3dCx3dCx6ZV0pLHAoXyxVLkNvbW1lbnQpKTtjYXNlIFYuV2l0aGluRG9jdHlwZTpyZXR1cm4gci5hZHZhbmNlSWZDaGFyKHplKT8oYT1WLldpdGhpbkNvbnRlbnQscChfLFUuRW5kRG9jdHlwZVRhZykpOihyLmFkdmFuY2VVbnRpbENoYXIoemUpLHAoXyxVLkRvY3R5cGUpKTtjYXNlIFYuV2l0aGluQ29udGVudDppZihyLmFkdmFuY2VJZkNoYXIoaG4pKXtpZighci5lb3MoKSYmci5wZWVrQ2hhcigpPT09R2Epe2lmKHIuYWR2YW5jZUlmQ2hhcnMoW0dhLHd0LHd0XSkpcmV0dXJuIGE9Vi5XaXRoaW5Db21tZW50LHAoXyxVLlN0YXJ0Q29tbWVudFRhZyk7aWYoci5hZHZhbmNlSWZSZWdFeHAoL14hZG9jdHlwZS9pKSlyZXR1cm4gYT1WLldpdGhpbkRvY3R5cGUscChfLFUuU3RhcnREb2N0eXBlVGFnKX1yZXR1cm4gci5hZHZhbmNlSWZDaGFyKGxpKT8oYT1WLkFmdGVyT3BlbmluZ0VuZFRhZyxwKF8sVS5FbmRUYWdPcGVuKSk6KGE9Vi5BZnRlck9wZW5pbmdTdGFydFRhZyxwKF8sVS5TdGFydFRhZ09wZW4pKX1yZXR1cm4gci5hZHZhbmNlVW50aWxDaGFyKGhuKSxwKF8sVS5Db250ZW50KTtjYXNlIFYuQWZ0ZXJPcGVuaW5nRW5kVGFnOnZhciBFPWYoKTtyZXR1cm4gRS5sZW5ndGg+MD8oYT1WLldpdGhpbkVuZFRhZyxwKF8sVS5FbmRUYWcpKTpyLnNraXBXaGl0ZXNwYWNlKCk/cChfLFUuV2hpdGVzcGFjZSxKZSgiZXJyb3IudW5leHBlY3RlZFdoaXRlc3BhY2UiLCJUYWcgbmFtZSBtdXN0IGRpcmVjdGx5IGZvbGxvdyB0aGUgb3BlbiBicmFja2V0LiIpKTooYT1WLldpdGhpbkVuZFRhZyxyLmFkdmFuY2VVbnRpbENoYXIoemUpLF88ci5wb3MoKT9wKF8sVS5Vbmtub3duLEplKCJlcnJvci5lbmRUYWdOYW1lRXhwZWN0ZWQiLCJFbmQgdGFnIG5hbWUgZXhwZWN0ZWQuIikpOngoKSk7Y2FzZSBWLldpdGhpbkVuZFRhZzppZihyLnNraXBXaGl0ZXNwYWNlKCkpcmV0dXJuIHAoXyxVLldoaXRlc3BhY2UpO2lmKHIuYWR2YW5jZUlmQ2hhcih6ZSkpcmV0dXJuIGE9Vi5XaXRoaW5Db250ZW50LHAoXyxVLkVuZFRhZ0Nsb3NlKTtpZihpJiZyLnBlZWtDaGFyKCk9PT1obilyZXR1cm4gYT1WLldpdGhpbkNvbnRlbnQscChfLFUuRW5kVGFnQ2xvc2UsSmUoImVycm9yLmNsb3NpbmdCcmFja2V0TWlzc2luZyIsIkNsb3NpbmcgYnJhY2tldCBtaXNzaW5nLiIpKTt5PUplKCJlcnJvci5jbG9zaW5nQnJhY2tldEV4cGVjdGVkIiwiQ2xvc2luZyBicmFja2V0IGV4cGVjdGVkLiIpO2JyZWFrO2Nhc2UgVi5BZnRlck9wZW5pbmdTdGFydFRhZzpyZXR1cm4gYz1mKCksbT12b2lkIDAsZD12b2lkIDAsYy5sZW5ndGg+MD8odT0hMSxhPVYuV2l0aGluVGFnLHAoXyxVLlN0YXJ0VGFnKSk6ci5za2lwV2hpdGVzcGFjZSgpP3AoXyxVLldoaXRlc3BhY2UsSmUoImVycm9yLnVuZXhwZWN0ZWRXaGl0ZXNwYWNlIiwiVGFnIG5hbWUgbXVzdCBkaXJlY3RseSBmb2xsb3cgdGhlIG9wZW4gYnJhY2tldC4iKSk6KGE9Vi5XaXRoaW5UYWcsci5hZHZhbmNlVW50aWxDaGFyKHplKSxfPHIucG9zKCk/cChfLFUuVW5rbm93bixKZSgiZXJyb3Iuc3RhcnRUYWdOYW1lRXhwZWN0ZWQiLCJTdGFydCB0YWcgbmFtZSBleHBlY3RlZC4iKSk6eCgpKTtjYXNlIFYuV2l0aGluVGFnOnJldHVybiByLnNraXBXaGl0ZXNwYWNlKCk/KHU9ITAscChfLFUuV2hpdGVzcGFjZSkpOnUmJihkPWIoKSxkLmxlbmd0aD4wKT8oYT1WLkFmdGVyQXR0cmlidXRlTmFtZSx1PSExLHAoXyxVLkF0dHJpYnV0ZU5hbWUpKTpyLmFkdmFuY2VJZkNoYXJzKFtsaSx6ZV0pPyhhPVYuV2l0aGluQ29udGVudCxwKF8sVS5TdGFydFRhZ1NlbGZDbG9zZSkpOnIuYWR2YW5jZUlmQ2hhcih6ZSk/KGM9PT0ic2NyaXB0Ij9tJiZLbFttXT9hPVYuV2l0aGluQ29udGVudDphPVYuV2l0aGluU2NyaXB0Q29udGVudDpjPT09InN0eWxlIj9hPVYuV2l0aGluU3R5bGVDb250ZW50OmE9Vi5XaXRoaW5Db250ZW50LHAoXyxVLlN0YXJ0VGFnQ2xvc2UpKTppJiZyLnBlZWtDaGFyKCk9PT1obj8oYT1WLldpdGhpbkNvbnRlbnQscChfLFUuU3RhcnRUYWdDbG9zZSxKZSgiZXJyb3IuY2xvc2luZ0JyYWNrZXRNaXNzaW5nIiwiQ2xvc2luZyBicmFja2V0IG1pc3NpbmcuIikpKTooci5hZHZhbmNlKDEpLHAoXyxVLlVua25vd24sSmUoImVycm9yLnVuZXhwZWN0ZWRDaGFyYWN0ZXJJblRhZyIsIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIHRhZy4iKSkpO2Nhc2UgVi5BZnRlckF0dHJpYnV0ZU5hbWU6cmV0dXJuIHIuc2tpcFdoaXRlc3BhY2UoKT8odT0hMCxwKF8sVS5XaGl0ZXNwYWNlKSk6ci5hZHZhbmNlSWZDaGFyKGpsKT8oYT1WLkJlZm9yZUF0dHJpYnV0ZVZhbHVlLHAoXyxVLkRlbGltaXRlckFzc2lnbikpOihhPVYuV2l0aGluVGFnLHgoKSk7Y2FzZSBWLkJlZm9yZUF0dHJpYnV0ZVZhbHVlOmlmKHIuc2tpcFdoaXRlc3BhY2UoKSlyZXR1cm4gcChfLFUuV2hpdGVzcGFjZSk7dmFyIFI9ci5hZHZhbmNlSWZSZWdFeHAoL15bXlxzIidgPTw+XSsvKTtpZihSLmxlbmd0aD4wKXJldHVybiByLnBlZWtDaGFyKCk9PT16ZSYmci5wZWVrQ2hhcigtMSk9PT1saSYmKHIuZ29CYWNrKDEpLFI9Ui5zdWJzdHIoMCxSLmxlbmd0aC0xKSksZD09PSJ0eXBlIiYmKG09UiksYT1WLldpdGhpblRhZyx1PSExLHAoXyxVLkF0dHJpYnV0ZVZhbHVlKTt2YXIgUD1yLnBlZWtDaGFyKCk7cmV0dXJuIFA9PT0kbHx8UD09PUdsPyhyLmFkdmFuY2UoMSksci5hZHZhbmNlVW50aWxDaGFyKFApJiZyLmFkdmFuY2UoMSksZD09PSJ0eXBlIiYmKG09ci5nZXRTb3VyY2UoKS5zdWJzdHJpbmcoXysxLHIucG9zKCktMSkpLGE9Vi5XaXRoaW5UYWcsdT0hMSxwKF8sVS5BdHRyaWJ1dGVWYWx1ZSkpOihhPVYuV2l0aGluVGFnLHU9ITEseCgpKTtjYXNlIFYuV2l0aGluU2NyaXB0Q29udGVudDpmb3IodmFyIHY9MTshci5lb3MoKTspe3ZhciBnPXIuYWR2YW5jZUlmUmVnRXhwKC88IS0tfC0tPnw8XC8/c2NyaXB0XHMqXC8/Pj8vaSk7aWYoZy5sZW5ndGg9PT0wKXJldHVybiByLmdvVG9FbmQoKSxwKF8sVS5TY3JpcHQpO2lmKGc9PT0iPCEtLSIpdj09PTEmJih2PTIpO2Vsc2UgaWYoZz09PSItLT4iKXY9MTtlbHNlIGlmKGdbMV0hPT0iLyIpdj09PTImJih2PTMpO2Vsc2UgaWYodj09PTMpdj0yO2Vsc2V7ci5nb0JhY2soZy5sZW5ndGgpO2JyZWFrfX1yZXR1cm4gYT1WLldpdGhpbkNvbnRlbnQsXzxyLnBvcygpP3AoXyxVLlNjcmlwdCk6eCgpO2Nhc2UgVi5XaXRoaW5TdHlsZUNvbnRlbnQ6cmV0dXJuIHIuYWR2YW5jZVVudGlsUmVnRXhwKC88XC9zdHlsZS9pKSxhPVYuV2l0aGluQ29udGVudCxfPHIucG9zKCk/cChfLFUuU3R5bGVzKTp4KCl9cmV0dXJuIHIuYWR2YW5jZSgxKSxhPVYuV2l0aGluQ29udGVudCxwKF8sVS5Vbmtub3duLHkpfXJldHVybntzY2FuOncsZ2V0VG9rZW5UeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIG99LGdldFRva2VuT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LGdldFRva2VuTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHIucG9zKCktc30sZ2V0VG9rZW5FbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5wb3MoKX0sZ2V0VG9rZW5UZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0U291cmNlKCkuc3Vic3RyaW5nKHMsci5wb3MoKSl9LGdldFNjYW5uZXJTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBhfSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGx9fX1mdW5jdGlvbiAkYShlLHQpe3ZhciBuPTAsaT1lLmxlbmd0aDtpZihpPT09MClyZXR1cm4gMDtmb3IoO248aTspe3ZhciByPU1hdGguZmxvb3IoKG4raSkvMik7dChlW3JdKT9pPXI6bj1yKzF9cmV0dXJuIG59ZnVuY3Rpb24gZXUoZSx0LG4pe2Zvcih2YXIgaT0wLHI9ZS5sZW5ndGgtMTtpPD1yOyl7dmFyIGE9KGkrcikvMnwwLHM9bihlW2FdLHQpO2lmKHM8MClpPWErMTtlbHNlIGlmKHM+MClyPWEtMTtlbHNlIHJldHVybiBhfXJldHVybi0oaSsxKX12YXIgdHU9WyJhcmVhIiwiYmFzZSIsImJyIiwiY29sIiwiZW1iZWQiLCJociIsImltZyIsImlucHV0Iiwia2V5Z2VuIiwibGluayIsIm1lbnVpdGVtIiwibWV0YSIsInBhcmFtIiwic291cmNlIiwidHJhY2siLCJ3YnIiXTtmdW5jdGlvbiBkbihlKXtyZXR1cm4hIWUmJmV1KHR1LGUudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0LG4pe3JldHVybiB0LmxvY2FsZUNvbXBhcmUobil9KT49MH12YXIgWGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixpLHIpe3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1uLHRoaXMuY2hpbGRyZW49aSx0aGlzLnBhcmVudD1yLHRoaXMuY2xvc2VkPSExfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dHJpYnV0ZU5hbWVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlcz9PYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpOltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmlzU2FtZVRhZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50YWc9PT12b2lkIDA/dD09PXZvaWQgMDp0IT09dm9pZCAwJiZ0aGlzLnRhZy5sZW5ndGg9PT10Lmxlbmd0aCYmdGhpcy50YWcudG9Mb3dlckNhc2UoKT09PXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFzdENoaWxkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGgtMV06dm9pZCAwfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmZpbmROb2RlQmVmb3JlPWZ1bmN0aW9uKHQpe3ZhciBuPSRhKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oYSl7cmV0dXJuIHQ8PWEuc3RhcnR9KS0xO2lmKG4+PTApe3ZhciBpPXRoaXMuY2hpbGRyZW5bbl07aWYodD5pLnN0YXJ0KXtpZih0PGkuZW5kKXJldHVybiBpLmZpbmROb2RlQmVmb3JlKHQpO3ZhciByPWkubGFzdENoaWxkO3JldHVybiByJiZyLmVuZD09PWkuZW5kP2kuZmluZE5vZGVCZWZvcmUodCk6aX19cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmZpbmROb2RlQXQ9ZnVuY3Rpb24odCl7dmFyIG49JGEodGhpcy5jaGlsZHJlbixmdW5jdGlvbihyKXtyZXR1cm4gdDw9ci5zdGFydH0pLTE7aWYobj49MCl7dmFyIGk9dGhpcy5jaGlsZHJlbltuXTtpZih0Pmkuc3RhcnQmJnQ8PWkuZW5kKXJldHVybiBpLmZpbmROb2RlQXQodCl9cmV0dXJuIHRoaXN9LGV9KCk7ZnVuY3Rpb24gSmEoZSl7Zm9yKHZhciB0PXdlKGUsdm9pZCAwLHZvaWQgMCwhMCksbj1uZXcgWGEoMCxlLmxlbmd0aCxbXSx2b2lkIDApLGk9bixyPS0xLGE9dm9pZCAwLHM9bnVsbCxvPXQuc2NhbigpO28hPT1VLkVPUzspe3N3aXRjaChvKXtjYXNlIFUuU3RhcnRUYWdPcGVuOnZhciBsPW5ldyBYYSh0LmdldFRva2VuT2Zmc2V0KCksZS5sZW5ndGgsW10saSk7aS5jaGlsZHJlbi5wdXNoKGwpLGk9bDticmVhaztjYXNlIFUuU3RhcnRUYWc6aS50YWc9dC5nZXRUb2tlblRleHQoKTticmVhaztjYXNlIFUuU3RhcnRUYWdDbG9zZTppLnBhcmVudCYmKGkuZW5kPXQuZ2V0VG9rZW5FbmQoKSx0LmdldFRva2VuTGVuZ3RoKCk/KGkuc3RhcnRUYWdFbmQ9dC5nZXRUb2tlbkVuZCgpLGkudGFnJiZkbihpLnRhZykmJihpLmNsb3NlZD0hMCxpPWkucGFyZW50KSk6aT1pLnBhcmVudCk7YnJlYWs7Y2FzZSBVLlN0YXJ0VGFnU2VsZkNsb3NlOmkucGFyZW50JiYoaS5jbG9zZWQ9ITAsaS5lbmQ9dC5nZXRUb2tlbkVuZCgpLGkuc3RhcnRUYWdFbmQ9dC5nZXRUb2tlbkVuZCgpLGk9aS5wYXJlbnQpO2JyZWFrO2Nhc2UgVS5FbmRUYWdPcGVuOnI9dC5nZXRUb2tlbk9mZnNldCgpLGE9dm9pZCAwO2JyZWFrO2Nhc2UgVS5FbmRUYWc6YT10LmdldFRva2VuVGV4dCgpLnRvTG93ZXJDYXNlKCk7YnJlYWs7Y2FzZSBVLkVuZFRhZ0Nsb3NlOmZvcih2YXIgdT1pOyF1LmlzU2FtZVRhZyhhKSYmdS5wYXJlbnQ7KXU9dS5wYXJlbnQ7aWYodS5wYXJlbnQpe2Zvcig7aSE9PXU7KWkuZW5kPXIsaS5jbG9zZWQ9ITEsaT1pLnBhcmVudDtpLmNsb3NlZD0hMCxpLmVuZFRhZ1N0YXJ0PXIsaS5lbmQ9dC5nZXRUb2tlbkVuZCgpLGk9aS5wYXJlbnR9YnJlYWs7Y2FzZSBVLkF0dHJpYnV0ZU5hbWU6e3M9dC5nZXRUb2tlblRleHQoKTt2YXIgYz1pLmF0dHJpYnV0ZXM7Y3x8KGkuYXR0cmlidXRlcz1jPXt9KSxjW3NdPW51bGw7YnJlYWt9Y2FzZSBVLkF0dHJpYnV0ZVZhbHVlOnt2YXIgZD10LmdldFRva2VuVGV4dCgpLGM9aS5hdHRyaWJ1dGVzO2MmJnMmJihjW3NdPWQscz1udWxsKTticmVha319bz10LnNjYW4oKX1mb3IoO2kucGFyZW50OylpLmVuZD1lLmxlbmd0aCxpLmNsb3NlZD0hMSxpPWkucGFyZW50O3JldHVybntyb290czpuLmNoaWxkcmVuLGZpbmROb2RlQmVmb3JlOm4uZmluZE5vZGVCZWZvcmUuYmluZChuKSxmaW5kTm9kZUF0Om4uZmluZE5vZGVBdC5iaW5kKG4pfX12YXIgenQ9eyJBYWN1dGU7Ijoiw4EiLEFhY3V0ZToiw4EiLCJhYWN1dGU7Ijoiw6EiLGFhY3V0ZToiw6EiLCJBYnJldmU7IjoixIIiLCJhYnJldmU7IjoixIMiLCJhYzsiOiLiiL4iLCJhY2Q7Ijoi4oi/IiwiYWNFOyI6IuKIvsyzIiwiQWNpcmM7Ijoiw4IiLEFjaXJjOiLDgiIsImFjaXJjOyI6IsOiIixhY2lyYzoiw6IiLCJhY3V0ZTsiOiLCtCIsYWN1dGU6IsK0IiwiQWN5OyI6ItCQIiwiYWN5OyI6ItCwIiwiQUVsaWc7Ijoiw4YiLEFFbGlnOiLDhiIsImFlbGlnOyI6IsOmIixhZWxpZzoiw6YiLCJhZjsiOiLigaEiLCJBZnI7Ijoi8J2UhCIsImFmcjsiOiLwnZSeIiwiQWdyYXZlOyI6IsOAIixBZ3JhdmU6IsOAIiwiYWdyYXZlOyI6IsOgIixhZ3JhdmU6IsOgIiwiYWxlZnN5bTsiOiLihLUiLCJhbGVwaDsiOiLihLUiLCJBbHBoYTsiOiLOkSIsImFscGhhOyI6Is6xIiwiQW1hY3I7IjoixIAiLCJhbWFjcjsiOiLEgSIsImFtYWxnOyI6IuKovyIsIkFNUDsiOiImIixBTVA6IiYiLCJhbXA7IjoiJiIsYW1wOiImIiwiQW5kOyI6IuKpkyIsImFuZDsiOiLiiKciLCJhbmRhbmQ7Ijoi4qmVIiwiYW5kZDsiOiLiqZwiLCJhbmRzbG9wZTsiOiLiqZgiLCJhbmR2OyI6IuKpmiIsImFuZzsiOiLiiKAiLCJhbmdlOyI6IuKmpCIsImFuZ2xlOyI6IuKIoCIsImFuZ21zZDsiOiLiiKEiLCJhbmdtc2RhYTsiOiLipqgiLCJhbmdtc2RhYjsiOiLipqkiLCJhbmdtc2RhYzsiOiLipqoiLCJhbmdtc2RhZDsiOiLipqsiLCJhbmdtc2RhZTsiOiLipqwiLCJhbmdtc2RhZjsiOiLipq0iLCJhbmdtc2RhZzsiOiLipq4iLCJhbmdtc2RhaDsiOiLipq8iLCJhbmdydDsiOiLiiJ8iLCJhbmdydHZiOyI6IuKKviIsImFuZ3J0dmJkOyI6IuKmnSIsImFuZ3NwaDsiOiLiiKIiLCJhbmdzdDsiOiLDhSIsImFuZ3phcnI7Ijoi4o28IiwiQW9nb247IjoixIQiLCJhb2dvbjsiOiLEhSIsIkFvcGY7Ijoi8J2UuCIsImFvcGY7Ijoi8J2VkiIsImFwOyI6IuKJiCIsImFwYWNpcjsiOiLiqa8iLCJhcEU7Ijoi4qmwIiwiYXBlOyI6IuKJiiIsImFwaWQ7Ijoi4omLIiwiYXBvczsiOiInIiwiQXBwbHlGdW5jdGlvbjsiOiLigaEiLCJhcHByb3g7Ijoi4omIIiwiYXBwcm94ZXE7Ijoi4omKIiwiQXJpbmc7Ijoiw4UiLEFyaW5nOiLDhSIsImFyaW5nOyI6IsOlIixhcmluZzoiw6UiLCJBc2NyOyI6IvCdkpwiLCJhc2NyOyI6IvCdkrYiLCJBc3NpZ247Ijoi4omUIiwiYXN0OyI6IioiLCJhc3ltcDsiOiLiiYgiLCJhc3ltcGVxOyI6IuKJjSIsIkF0aWxkZTsiOiLDgyIsQXRpbGRlOiLDgyIsImF0aWxkZTsiOiLDoyIsYXRpbGRlOiLDoyIsIkF1bWw7Ijoiw4QiLEF1bWw6IsOEIiwiYXVtbDsiOiLDpCIsYXVtbDoiw6QiLCJhd2NvbmludDsiOiLiiLMiLCJhd2ludDsiOiLiqJEiLCJiYWNrY29uZzsiOiLiiYwiLCJiYWNrZXBzaWxvbjsiOiLPtiIsImJhY2twcmltZTsiOiLigLUiLCJiYWNrc2ltOyI6IuKIvSIsImJhY2tzaW1lcTsiOiLii40iLCJCYWNrc2xhc2g7Ijoi4oiWIiwiQmFydjsiOiLiq6ciLCJiYXJ2ZWU7Ijoi4oq9IiwiQmFyd2VkOyI6IuKMhiIsImJhcndlZDsiOiLijIUiLCJiYXJ3ZWRnZTsiOiLijIUiLCJiYnJrOyI6IuKOtSIsImJicmt0YnJrOyI6IuKOtiIsImJjb25nOyI6IuKJjCIsIkJjeTsiOiLQkSIsImJjeTsiOiLQsSIsImJkcXVvOyI6IuKAniIsImJlY2F1czsiOiLiiLUiLCJCZWNhdXNlOyI6IuKItSIsImJlY2F1c2U7Ijoi4oi1IiwiYmVtcHR5djsiOiLiprAiLCJiZXBzaTsiOiLPtiIsImJlcm5vdTsiOiLihKwiLCJCZXJub3VsbGlzOyI6IuKErCIsIkJldGE7IjoizpIiLCJiZXRhOyI6Is6yIiwiYmV0aDsiOiLihLYiLCJiZXR3ZWVuOyI6IuKJrCIsIkJmcjsiOiLwnZSFIiwiYmZyOyI6IvCdlJ8iLCJiaWdjYXA7Ijoi4ouCIiwiYmlnY2lyYzsiOiLil68iLCJiaWdjdXA7Ijoi4ouDIiwiYmlnb2RvdDsiOiLiqIAiLCJiaWdvcGx1czsiOiLiqIEiLCJiaWdvdGltZXM7Ijoi4qiCIiwiYmlnc3FjdXA7Ijoi4qiGIiwiYmlnc3RhcjsiOiLimIUiLCJiaWd0cmlhbmdsZWRvd247Ijoi4pa9IiwiYmlndHJpYW5nbGV1cDsiOiLilrMiLCJiaWd1cGx1czsiOiLiqIQiLCJiaWd2ZWU7Ijoi4ouBIiwiYmlnd2VkZ2U7Ijoi4ouAIiwiYmthcm93OyI6IuKkjSIsImJsYWNrbG96ZW5nZTsiOiLip6siLCJibGFja3NxdWFyZTsiOiLilqoiLCJibGFja3RyaWFuZ2xlOyI6IuKWtCIsImJsYWNrdHJpYW5nbGVkb3duOyI6IuKWviIsImJsYWNrdHJpYW5nbGVsZWZ0OyI6IuKXgiIsImJsYWNrdHJpYW5nbGVyaWdodDsiOiLilrgiLCJibGFuazsiOiLikKMiLCJibGsxMjsiOiLilpIiLCJibGsxNDsiOiLilpEiLCJibGszNDsiOiLilpMiLCJibG9jazsiOiLilogiLCJibmU7IjoiPeKDpSIsImJuZXF1aXY7Ijoi4omh4oOlIiwiYk5vdDsiOiLiq60iLCJibm90OyI6IuKMkCIsIkJvcGY7Ijoi8J2UuSIsImJvcGY7Ijoi8J2VkyIsImJvdDsiOiLiiqUiLCJib3R0b207Ijoi4oqlIiwiYm93dGllOyI6IuKLiCIsImJveGJveDsiOiLip4kiLCJib3hETDsiOiLilZciLCJib3hEbDsiOiLilZYiLCJib3hkTDsiOiLilZUiLCJib3hkbDsiOiLilJAiLCJib3hEUjsiOiLilZQiLCJib3hEcjsiOiLilZMiLCJib3hkUjsiOiLilZIiLCJib3hkcjsiOiLilIwiLCJib3hIOyI6IuKVkCIsImJveGg7Ijoi4pSAIiwiYm94SEQ7Ijoi4pWmIiwiYm94SGQ7Ijoi4pWkIiwiYm94aEQ7Ijoi4pWlIiwiYm94aGQ7Ijoi4pSsIiwiYm94SFU7Ijoi4pWpIiwiYm94SHU7Ijoi4pWnIiwiYm94aFU7Ijoi4pWoIiwiYm94aHU7Ijoi4pS0IiwiYm94bWludXM7Ijoi4oqfIiwiYm94cGx1czsiOiLiip4iLCJib3h0aW1lczsiOiLiiqAiLCJib3hVTDsiOiLilZ0iLCJib3hVbDsiOiLilZwiLCJib3h1TDsiOiLilZsiLCJib3h1bDsiOiLilJgiLCJib3hVUjsiOiLilZoiLCJib3hVcjsiOiLilZkiLCJib3h1UjsiOiLilZgiLCJib3h1cjsiOiLilJQiLCJib3hWOyI6IuKVkSIsImJveHY7Ijoi4pSCIiwiYm94Vkg7Ijoi4pWsIiwiYm94Vmg7Ijoi4pWrIiwiYm94dkg7Ijoi4pWqIiwiYm94dmg7Ijoi4pS8IiwiYm94Vkw7Ijoi4pWjIiwiYm94Vmw7Ijoi4pWiIiwiYm94dkw7Ijoi4pWhIiwiYm94dmw7Ijoi4pSkIiwiYm94VlI7Ijoi4pWgIiwiYm94VnI7Ijoi4pWfIiwiYm94dlI7Ijoi4pWeIiwiYm94dnI7Ijoi4pScIiwiYnByaW1lOyI6IuKAtSIsIkJyZXZlOyI6IsuYIiwiYnJldmU7Ijoiy5giLCJicnZiYXI7IjoiwqYiLGJydmJhcjoiwqYiLCJCc2NyOyI6IuKErCIsImJzY3I7Ijoi8J2StyIsImJzZW1pOyI6IuKBjyIsImJzaW07Ijoi4oi9IiwiYnNpbWU7Ijoi4ouNIiwiYnNvbDsiOiJcXCIsImJzb2xiOyI6IuKnhSIsImJzb2xoc3ViOyI6IuKfiCIsImJ1bGw7Ijoi4oCiIiwiYnVsbGV0OyI6IuKAoiIsImJ1bXA7Ijoi4omOIiwiYnVtcEU7Ijoi4qquIiwiYnVtcGU7Ijoi4omPIiwiQnVtcGVxOyI6IuKJjiIsImJ1bXBlcTsiOiLiiY8iLCJDYWN1dGU7IjoixIYiLCJjYWN1dGU7IjoixIciLCJDYXA7Ijoi4ouSIiwiY2FwOyI6IuKIqSIsImNhcGFuZDsiOiLiqYQiLCJjYXBicmN1cDsiOiLiqYkiLCJjYXBjYXA7Ijoi4qmLIiwiY2FwY3VwOyI6IuKphyIsImNhcGRvdDsiOiLiqYAiLCJDYXBpdGFsRGlmZmVyZW50aWFsRDsiOiLihYUiLCJjYXBzOyI6IuKIqe+4gCIsImNhcmV0OyI6IuKBgSIsImNhcm9uOyI6IsuHIiwiQ2F5bGV5czsiOiLihK0iLCJjY2FwczsiOiLiqY0iLCJDY2Fyb247IjoixIwiLCJjY2Fyb247IjoixI0iLCJDY2VkaWw7Ijoiw4ciLENjZWRpbDoiw4ciLCJjY2VkaWw7Ijoiw6ciLGNjZWRpbDoiw6ciLCJDY2lyYzsiOiLEiCIsImNjaXJjOyI6IsSJIiwiQ2NvbmludDsiOiLiiLAiLCJjY3VwczsiOiLiqYwiLCJjY3Vwc3NtOyI6IuKpkCIsIkNkb3Q7IjoixIoiLCJjZG90OyI6IsSLIiwiY2VkaWw7IjoiwrgiLGNlZGlsOiLCuCIsIkNlZGlsbGE7IjoiwrgiLCJjZW1wdHl2OyI6IuKmsiIsImNlbnQ7IjoiwqIiLGNlbnQ6IsKiIiwiQ2VudGVyRG90OyI6IsK3IiwiY2VudGVyZG90OyI6IsK3IiwiQ2ZyOyI6IuKErSIsImNmcjsiOiLwnZSgIiwiQ0hjeTsiOiLQpyIsImNoY3k7Ijoi0YciLCJjaGVjazsiOiLinJMiLCJjaGVja21hcms7Ijoi4pyTIiwiQ2hpOyI6Is6nIiwiY2hpOyI6Is+HIiwiY2lyOyI6IuKXiyIsImNpcmM7Ijoiy4YiLCJjaXJjZXE7Ijoi4omXIiwiY2lyY2xlYXJyb3dsZWZ0OyI6IuKGuiIsImNpcmNsZWFycm93cmlnaHQ7Ijoi4oa7IiwiY2lyY2xlZGFzdDsiOiLiipsiLCJjaXJjbGVkY2lyYzsiOiLiipoiLCJjaXJjbGVkZGFzaDsiOiLiip0iLCJDaXJjbGVEb3Q7Ijoi4oqZIiwiY2lyY2xlZFI7Ijoiwq4iLCJjaXJjbGVkUzsiOiLik4giLCJDaXJjbGVNaW51czsiOiLiipYiLCJDaXJjbGVQbHVzOyI6IuKKlSIsIkNpcmNsZVRpbWVzOyI6IuKKlyIsImNpckU7Ijoi4qeDIiwiY2lyZTsiOiLiiZciLCJjaXJmbmludDsiOiLiqJAiLCJjaXJtaWQ7Ijoi4quvIiwiY2lyc2NpcjsiOiLip4IiLCJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7Ijoi4oiyIiwiQ2xvc2VDdXJseURvdWJsZVF1b3RlOyI6IuKAnSIsIkNsb3NlQ3VybHlRdW90ZTsiOiLigJkiLCJjbHViczsiOiLimaMiLCJjbHVic3VpdDsiOiLimaMiLCJDb2xvbjsiOiLiiLciLCJjb2xvbjsiOiI6IiwiQ29sb25lOyI6IuKptCIsImNvbG9uZTsiOiLiiZQiLCJjb2xvbmVxOyI6IuKJlCIsImNvbW1hOyI6IiwiLCJjb21tYXQ7IjoiQCIsImNvbXA7Ijoi4oiBIiwiY29tcGZuOyI6IuKImCIsImNvbXBsZW1lbnQ7Ijoi4oiBIiwiY29tcGxleGVzOyI6IuKEgiIsImNvbmc7Ijoi4omFIiwiY29uZ2RvdDsiOiLiqa0iLCJDb25ncnVlbnQ7Ijoi4omhIiwiQ29uaW50OyI6IuKIryIsImNvbmludDsiOiLiiK4iLCJDb250b3VySW50ZWdyYWw7Ijoi4oiuIiwiQ29wZjsiOiLihIIiLCJjb3BmOyI6IvCdlZQiLCJjb3Byb2Q7Ijoi4oiQIiwiQ29wcm9kdWN0OyI6IuKIkCIsIkNPUFk7IjoiwqkiLENPUFk6IsKpIiwiY29weTsiOiLCqSIsY29weToiwqkiLCJjb3B5c3I7Ijoi4oSXIiwiQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDsiOiLiiLMiLCJjcmFycjsiOiLihrUiLCJDcm9zczsiOiLiqK8iLCJjcm9zczsiOiLinJciLCJDc2NyOyI6IvCdkp4iLCJjc2NyOyI6IvCdkrgiLCJjc3ViOyI6IuKrjyIsImNzdWJlOyI6IuKrkSIsImNzdXA7Ijoi4quQIiwiY3N1cGU7Ijoi4quSIiwiY3Rkb3Q7Ijoi4ouvIiwiY3VkYXJybDsiOiLipLgiLCJjdWRhcnJyOyI6IuKktSIsImN1ZXByOyI6IuKLniIsImN1ZXNjOyI6IuKLnyIsImN1bGFycjsiOiLihrYiLCJjdWxhcnJwOyI6IuKkvSIsIkN1cDsiOiLii5MiLCJjdXA7Ijoi4oiqIiwiY3VwYnJjYXA7Ijoi4qmIIiwiQ3VwQ2FwOyI6IuKJjSIsImN1cGNhcDsiOiLiqYYiLCJjdXBjdXA7Ijoi4qmKIiwiY3VwZG90OyI6IuKKjSIsImN1cG9yOyI6IuKphSIsImN1cHM7Ijoi4oiq77iAIiwiY3VyYXJyOyI6IuKGtyIsImN1cmFycm07Ijoi4qS8IiwiY3VybHllcXByZWM7Ijoi4oueIiwiY3VybHllcXN1Y2M7Ijoi4oufIiwiY3VybHl2ZWU7Ijoi4ouOIiwiY3VybHl3ZWRnZTsiOiLii48iLCJjdXJyZW47IjoiwqQiLGN1cnJlbjoiwqQiLCJjdXJ2ZWFycm93bGVmdDsiOiLihrYiLCJjdXJ2ZWFycm93cmlnaHQ7Ijoi4oa3IiwiY3V2ZWU7Ijoi4ouOIiwiY3V3ZWQ7Ijoi4ouPIiwiY3djb25pbnQ7Ijoi4oiyIiwiY3dpbnQ7Ijoi4oixIiwiY3lsY3R5OyI6IuKMrSIsIkRhZ2dlcjsiOiLigKEiLCJkYWdnZXI7Ijoi4oCgIiwiZGFsZXRoOyI6IuKEuCIsIkRhcnI7Ijoi4oahIiwiZEFycjsiOiLih5MiLCJkYXJyOyI6IuKGkyIsImRhc2g7Ijoi4oCQIiwiRGFzaHY7Ijoi4qukIiwiZGFzaHY7Ijoi4oqjIiwiZGJrYXJvdzsiOiLipI8iLCJkYmxhYzsiOiLLnSIsIkRjYXJvbjsiOiLEjiIsImRjYXJvbjsiOiLEjyIsIkRjeTsiOiLQlCIsImRjeTsiOiLQtCIsIkREOyI6IuKFhSIsImRkOyI6IuKFhiIsImRkYWdnZXI7Ijoi4oChIiwiZGRhcnI7Ijoi4oeKIiwiRERvdHJhaGQ7Ijoi4qSRIiwiZGRvdHNlcTsiOiLiqbciLCJkZWc7IjoiwrAiLGRlZzoiwrAiLCJEZWw7Ijoi4oiHIiwiRGVsdGE7IjoizpQiLCJkZWx0YTsiOiLOtCIsImRlbXB0eXY7Ijoi4qaxIiwiZGZpc2h0OyI6IuKlvyIsIkRmcjsiOiLwnZSHIiwiZGZyOyI6IvCdlKEiLCJkSGFyOyI6IuKlpSIsImRoYXJsOyI6IuKHgyIsImRoYXJyOyI6IuKHgiIsIkRpYWNyaXRpY2FsQWN1dGU7IjoiwrQiLCJEaWFjcml0aWNhbERvdDsiOiLLmSIsIkRpYWNyaXRpY2FsRG91YmxlQWN1dGU7Ijoiy50iLCJEaWFjcml0aWNhbEdyYXZlOyI6ImAiLCJEaWFjcml0aWNhbFRpbGRlOyI6IsucIiwiZGlhbTsiOiLii4QiLCJEaWFtb25kOyI6IuKLhCIsImRpYW1vbmQ7Ijoi4ouEIiwiZGlhbW9uZHN1aXQ7Ijoi4pmmIiwiZGlhbXM7Ijoi4pmmIiwiZGllOyI6IsKoIiwiRGlmZmVyZW50aWFsRDsiOiLihYYiLCJkaWdhbW1hOyI6Is+dIiwiZGlzaW47Ijoi4ouyIiwiZGl2OyI6IsO3IiwiZGl2aWRlOyI6IsO3IixkaXZpZGU6IsO3IiwiZGl2aWRlb250aW1lczsiOiLii4ciLCJkaXZvbng7Ijoi4ouHIiwiREpjeTsiOiLQgiIsImRqY3k7Ijoi0ZIiLCJkbGNvcm47Ijoi4oyeIiwiZGxjcm9wOyI6IuKMjSIsImRvbGxhcjsiOiIkIiwiRG9wZjsiOiLwnZS7IiwiZG9wZjsiOiLwnZWVIiwiRG90OyI6IsKoIiwiZG90OyI6IsuZIiwiRG90RG90OyI6IuKDnCIsImRvdGVxOyI6IuKJkCIsImRvdGVxZG90OyI6IuKJkSIsIkRvdEVxdWFsOyI6IuKJkCIsImRvdG1pbnVzOyI6IuKIuCIsImRvdHBsdXM7Ijoi4oiUIiwiZG90c3F1YXJlOyI6IuKKoSIsImRvdWJsZWJhcndlZGdlOyI6IuKMhiIsIkRvdWJsZUNvbnRvdXJJbnRlZ3JhbDsiOiLiiK8iLCJEb3VibGVEb3Q7IjoiwqgiLCJEb3VibGVEb3duQXJyb3c7Ijoi4oeTIiwiRG91YmxlTGVmdEFycm93OyI6IuKHkCIsIkRvdWJsZUxlZnRSaWdodEFycm93OyI6IuKHlCIsIkRvdWJsZUxlZnRUZWU7Ijoi4qukIiwiRG91YmxlTG9uZ0xlZnRBcnJvdzsiOiLin7giLCJEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3c7Ijoi4p+6IiwiRG91YmxlTG9uZ1JpZ2h0QXJyb3c7Ijoi4p+5IiwiRG91YmxlUmlnaHRBcnJvdzsiOiLih5IiLCJEb3VibGVSaWdodFRlZTsiOiLiiqgiLCJEb3VibGVVcEFycm93OyI6IuKHkSIsIkRvdWJsZVVwRG93bkFycm93OyI6IuKHlSIsIkRvdWJsZVZlcnRpY2FsQmFyOyI6IuKIpSIsIkRvd25BcnJvdzsiOiLihpMiLCJEb3duYXJyb3c7Ijoi4oeTIiwiZG93bmFycm93OyI6IuKGkyIsIkRvd25BcnJvd0JhcjsiOiLipJMiLCJEb3duQXJyb3dVcEFycm93OyI6IuKHtSIsIkRvd25CcmV2ZTsiOiLMkSIsImRvd25kb3duYXJyb3dzOyI6IuKHiiIsImRvd25oYXJwb29ubGVmdDsiOiLih4MiLCJkb3duaGFycG9vbnJpZ2h0OyI6IuKHgiIsIkRvd25MZWZ0UmlnaHRWZWN0b3I7Ijoi4qWQIiwiRG93bkxlZnRUZWVWZWN0b3I7Ijoi4qWeIiwiRG93bkxlZnRWZWN0b3I7Ijoi4oa9IiwiRG93bkxlZnRWZWN0b3JCYXI7Ijoi4qWWIiwiRG93blJpZ2h0VGVlVmVjdG9yOyI6IuKlnyIsIkRvd25SaWdodFZlY3RvcjsiOiLih4EiLCJEb3duUmlnaHRWZWN0b3JCYXI7Ijoi4qWXIiwiRG93blRlZTsiOiLiiqQiLCJEb3duVGVlQXJyb3c7Ijoi4oanIiwiZHJia2Fyb3c7Ijoi4qSQIiwiZHJjb3JuOyI6IuKMnyIsImRyY3JvcDsiOiLijIwiLCJEc2NyOyI6IvCdkp8iLCJkc2NyOyI6IvCdkrkiLCJEU2N5OyI6ItCFIiwiZHNjeTsiOiLRlSIsImRzb2w7Ijoi4qe2IiwiRHN0cm9rOyI6IsSQIiwiZHN0cm9rOyI6IsSRIiwiZHRkb3Q7Ijoi4ouxIiwiZHRyaTsiOiLilr8iLCJkdHJpZjsiOiLilr4iLCJkdWFycjsiOiLih7UiLCJkdWhhcjsiOiLipa8iLCJkd2FuZ2xlOyI6IuKmpiIsIkRaY3k7Ijoi0I8iLCJkemN5OyI6ItGfIiwiZHppZ3JhcnI7Ijoi4p+/IiwiRWFjdXRlOyI6IsOJIixFYWN1dGU6IsOJIiwiZWFjdXRlOyI6IsOpIixlYWN1dGU6IsOpIiwiZWFzdGVyOyI6IuKpriIsIkVjYXJvbjsiOiLEmiIsImVjYXJvbjsiOiLEmyIsImVjaXI7Ijoi4omWIiwiRWNpcmM7Ijoiw4oiLEVjaXJjOiLDiiIsImVjaXJjOyI6IsOqIixlY2lyYzoiw6oiLCJlY29sb247Ijoi4omVIiwiRWN5OyI6ItCtIiwiZWN5OyI6ItGNIiwiZUREb3Q7Ijoi4qm3IiwiRWRvdDsiOiLEliIsImVEb3Q7Ijoi4omRIiwiZWRvdDsiOiLElyIsImVlOyI6IuKFhyIsImVmRG90OyI6IuKJkiIsIkVmcjsiOiLwnZSIIiwiZWZyOyI6IvCdlKIiLCJlZzsiOiLiqpoiLCJFZ3JhdmU7Ijoiw4giLEVncmF2ZToiw4giLCJlZ3JhdmU7Ijoiw6giLGVncmF2ZToiw6giLCJlZ3M7Ijoi4qqWIiwiZWdzZG90OyI6IuKqmCIsImVsOyI6IuKqmSIsIkVsZW1lbnQ7Ijoi4oiIIiwiZWxpbnRlcnM7Ijoi4o+nIiwiZWxsOyI6IuKEkyIsImVsczsiOiLiqpUiLCJlbHNkb3Q7Ijoi4qqXIiwiRW1hY3I7IjoixJIiLCJlbWFjcjsiOiLEkyIsImVtcHR5OyI6IuKIhSIsImVtcHR5c2V0OyI6IuKIhSIsIkVtcHR5U21hbGxTcXVhcmU7Ijoi4pe7IiwiZW1wdHl2OyI6IuKIhSIsIkVtcHR5VmVyeVNtYWxsU3F1YXJlOyI6IuKWqyIsImVtc3A7Ijoi4oCDIiwiZW1zcDEzOyI6IuKAhCIsImVtc3AxNDsiOiLigIUiLCJFTkc7IjoixYoiLCJlbmc7IjoixYsiLCJlbnNwOyI6IuKAgiIsIkVvZ29uOyI6IsSYIiwiZW9nb247IjoixJkiLCJFb3BmOyI6IvCdlLwiLCJlb3BmOyI6IvCdlZYiLCJlcGFyOyI6IuKLlSIsImVwYXJzbDsiOiLip6MiLCJlcGx1czsiOiLiqbEiLCJlcHNpOyI6Is61IiwiRXBzaWxvbjsiOiLOlSIsImVwc2lsb247IjoizrUiLCJlcHNpdjsiOiLPtSIsImVxY2lyYzsiOiLiiZYiLCJlcWNvbG9uOyI6IuKJlSIsImVxc2ltOyI6IuKJgiIsImVxc2xhbnRndHI7Ijoi4qqWIiwiZXFzbGFudGxlc3M7Ijoi4qqVIiwiRXF1YWw7Ijoi4qm1IiwiZXF1YWxzOyI6Ij0iLCJFcXVhbFRpbGRlOyI6IuKJgiIsImVxdWVzdDsiOiLiiZ8iLCJFcXVpbGlicml1bTsiOiLih4wiLCJlcXVpdjsiOiLiiaEiLCJlcXVpdkREOyI6IuKpuCIsImVxdnBhcnNsOyI6IuKnpSIsImVyYXJyOyI6IuKlsSIsImVyRG90OyI6IuKJkyIsIkVzY3I7Ijoi4oSwIiwiZXNjcjsiOiLihK8iLCJlc2RvdDsiOiLiiZAiLCJFc2ltOyI6IuKpsyIsImVzaW07Ijoi4omCIiwiRXRhOyI6Is6XIiwiZXRhOyI6Is63IiwiRVRIOyI6IsOQIixFVEg6IsOQIiwiZXRoOyI6IsOwIixldGg6IsOwIiwiRXVtbDsiOiLDiyIsRXVtbDoiw4siLCJldW1sOyI6IsOrIixldW1sOiLDqyIsImV1cm87Ijoi4oKsIiwiZXhjbDsiOiIhIiwiZXhpc3Q7Ijoi4oiDIiwiRXhpc3RzOyI6IuKIgyIsImV4cGVjdGF0aW9uOyI6IuKEsCIsIkV4cG9uZW50aWFsRTsiOiLihYciLCJleHBvbmVudGlhbGU7Ijoi4oWHIiwiZmFsbGluZ2RvdHNlcTsiOiLiiZIiLCJGY3k7Ijoi0KQiLCJmY3k7Ijoi0YQiLCJmZW1hbGU7Ijoi4pmAIiwiZmZpbGlnOyI6Iu+sgyIsImZmbGlnOyI6Iu+sgCIsImZmbGxpZzsiOiLvrIQiLCJGZnI7Ijoi8J2UiSIsImZmcjsiOiLwnZSjIiwiZmlsaWc7Ijoi76yBIiwiRmlsbGVkU21hbGxTcXVhcmU7Ijoi4pe8IiwiRmlsbGVkVmVyeVNtYWxsU3F1YXJlOyI6IuKWqiIsImZqbGlnOyI6ImZqIiwiZmxhdDsiOiLima0iLCJmbGxpZzsiOiLvrIIiLCJmbHRuczsiOiLilrEiLCJmbm9mOyI6IsaSIiwiRm9wZjsiOiLwnZS9IiwiZm9wZjsiOiLwnZWXIiwiRm9yQWxsOyI6IuKIgCIsImZvcmFsbDsiOiLiiIAiLCJmb3JrOyI6IuKLlCIsImZvcmt2OyI6IuKrmSIsIkZvdXJpZXJ0cmY7Ijoi4oSxIiwiZnBhcnRpbnQ7Ijoi4qiNIiwiZnJhYzEyOyI6IsK9IixmcmFjMTI6IsK9IiwiZnJhYzEzOyI6IuKFkyIsImZyYWMxNDsiOiLCvCIsZnJhYzE0OiLCvCIsImZyYWMxNTsiOiLihZUiLCJmcmFjMTY7Ijoi4oWZIiwiZnJhYzE4OyI6IuKFmyIsImZyYWMyMzsiOiLihZQiLCJmcmFjMjU7Ijoi4oWWIiwiZnJhYzM0OyI6IsK+IixmcmFjMzQ6IsK+IiwiZnJhYzM1OyI6IuKFlyIsImZyYWMzODsiOiLihZwiLCJmcmFjNDU7Ijoi4oWYIiwiZnJhYzU2OyI6IuKFmiIsImZyYWM1ODsiOiLihZ0iLCJmcmFjNzg7Ijoi4oWeIiwiZnJhc2w7Ijoi4oGEIiwiZnJvd247Ijoi4oyiIiwiRnNjcjsiOiLihLEiLCJmc2NyOyI6IvCdkrsiLCJnYWN1dGU7Ijoix7UiLCJHYW1tYTsiOiLOkyIsImdhbW1hOyI6Is6zIiwiR2FtbWFkOyI6Is+cIiwiZ2FtbWFkOyI6Is+dIiwiZ2FwOyI6IuKqhiIsIkdicmV2ZTsiOiLEniIsImdicmV2ZTsiOiLEnyIsIkdjZWRpbDsiOiLEoiIsIkdjaXJjOyI6IsScIiwiZ2NpcmM7IjoixJ0iLCJHY3k7Ijoi0JMiLCJnY3k7Ijoi0LMiLCJHZG90OyI6IsSgIiwiZ2RvdDsiOiLEoSIsImdFOyI6IuKJpyIsImdlOyI6IuKJpSIsImdFbDsiOiLiqowiLCJnZWw7Ijoi4oubIiwiZ2VxOyI6IuKJpSIsImdlcXE7Ijoi4omnIiwiZ2Vxc2xhbnQ7Ijoi4qm+IiwiZ2VzOyI6IuKpviIsImdlc2NjOyI6IuKqqSIsImdlc2RvdDsiOiLiqoAiLCJnZXNkb3RvOyI6IuKqgiIsImdlc2RvdG9sOyI6IuKqhCIsImdlc2w7Ijoi4oub77iAIiwiZ2VzbGVzOyI6IuKqlCIsIkdmcjsiOiLwnZSKIiwiZ2ZyOyI6IvCdlKQiLCJHZzsiOiLii5kiLCJnZzsiOiLiiasiLCJnZ2c7Ijoi4ouZIiwiZ2ltZWw7Ijoi4oS3IiwiR0pjeTsiOiLQgyIsImdqY3k7Ijoi0ZMiLCJnbDsiOiLiibciLCJnbGE7Ijoi4qqlIiwiZ2xFOyI6IuKqkiIsImdsajsiOiLiqqQiLCJnbmFwOyI6IuKqiiIsImduYXBwcm94OyI6IuKqiiIsImduRTsiOiLiiakiLCJnbmU7Ijoi4qqIIiwiZ25lcTsiOiLiqogiLCJnbmVxcTsiOiLiiakiLCJnbnNpbTsiOiLii6ciLCJHb3BmOyI6IvCdlL4iLCJnb3BmOyI6IvCdlZgiLCJncmF2ZTsiOiJgIiwiR3JlYXRlckVxdWFsOyI6IuKJpSIsIkdyZWF0ZXJFcXVhbExlc3M7Ijoi4oubIiwiR3JlYXRlckZ1bGxFcXVhbDsiOiLiiaciLCJHcmVhdGVyR3JlYXRlcjsiOiLiqqIiLCJHcmVhdGVyTGVzczsiOiLiibciLCJHcmVhdGVyU2xhbnRFcXVhbDsiOiLiqb4iLCJHcmVhdGVyVGlsZGU7Ijoi4omzIiwiR3NjcjsiOiLwnZKiIiwiZ3NjcjsiOiLihIoiLCJnc2ltOyI6IuKJsyIsImdzaW1lOyI6IuKqjiIsImdzaW1sOyI6IuKqkCIsIkdUOyI6Ij4iLEdUOiI+IiwiR3Q7Ijoi4omrIiwiZ3Q7IjoiPiIsZ3Q6Ij4iLCJndGNjOyI6IuKqpyIsImd0Y2lyOyI6IuKpuiIsImd0ZG90OyI6IuKLlyIsImd0bFBhcjsiOiLippUiLCJndHF1ZXN0OyI6IuKpvCIsImd0cmFwcHJveDsiOiLiqoYiLCJndHJhcnI7Ijoi4qW4IiwiZ3RyZG90OyI6IuKLlyIsImd0cmVxbGVzczsiOiLii5siLCJndHJlcXFsZXNzOyI6IuKqjCIsImd0cmxlc3M7Ijoi4om3IiwiZ3Ryc2ltOyI6IuKJsyIsImd2ZXJ0bmVxcTsiOiLiianvuIAiLCJndm5FOyI6IuKJqe+4gCIsIkhhY2VrOyI6IsuHIiwiaGFpcnNwOyI6IuKAiiIsImhhbGY7Ijoiwr0iLCJoYW1pbHQ7Ijoi4oSLIiwiSEFSRGN5OyI6ItCqIiwiaGFyZGN5OyI6ItGKIiwiaEFycjsiOiLih5QiLCJoYXJyOyI6IuKGlCIsImhhcnJjaXI7Ijoi4qWIIiwiaGFycnc7Ijoi4oatIiwiSGF0OyI6Il4iLCJoYmFyOyI6IuKEjyIsIkhjaXJjOyI6IsSkIiwiaGNpcmM7IjoixKUiLCJoZWFydHM7Ijoi4pmlIiwiaGVhcnRzdWl0OyI6IuKZpSIsImhlbGxpcDsiOiLigKYiLCJoZXJjb247Ijoi4oq5IiwiSGZyOyI6IuKEjCIsImhmcjsiOiLwnZSlIiwiSGlsYmVydFNwYWNlOyI6IuKEiyIsImhrc2Vhcm93OyI6IuKkpSIsImhrc3dhcm93OyI6IuKkpiIsImhvYXJyOyI6IuKHvyIsImhvbXRodDsiOiLiiLsiLCJob29rbGVmdGFycm93OyI6IuKGqSIsImhvb2tyaWdodGFycm93OyI6IuKGqiIsIkhvcGY7Ijoi4oSNIiwiaG9wZjsiOiLwnZWZIiwiaG9yYmFyOyI6IuKAlSIsIkhvcml6b250YWxMaW5lOyI6IuKUgCIsIkhzY3I7Ijoi4oSLIiwiaHNjcjsiOiLwnZK9IiwiaHNsYXNoOyI6IuKEjyIsIkhzdHJvazsiOiLEpiIsImhzdHJvazsiOiLEpyIsIkh1bXBEb3duSHVtcDsiOiLiiY4iLCJIdW1wRXF1YWw7Ijoi4omPIiwiaHlidWxsOyI6IuKBgyIsImh5cGhlbjsiOiLigJAiLCJJYWN1dGU7Ijoiw40iLElhY3V0ZToiw40iLCJpYWN1dGU7Ijoiw60iLGlhY3V0ZToiw60iLCJpYzsiOiLigaMiLCJJY2lyYzsiOiLDjiIsSWNpcmM6IsOOIiwiaWNpcmM7Ijoiw64iLGljaXJjOiLDriIsIkljeTsiOiLQmCIsImljeTsiOiLQuCIsIklkb3Q7IjoixLAiLCJJRWN5OyI6ItCVIiwiaWVjeTsiOiLQtSIsImlleGNsOyI6IsKhIixpZXhjbDoiwqEiLCJpZmY7Ijoi4oeUIiwiSWZyOyI6IuKEkSIsImlmcjsiOiLwnZSmIiwiSWdyYXZlOyI6IsOMIixJZ3JhdmU6IsOMIiwiaWdyYXZlOyI6IsOsIixpZ3JhdmU6IsOsIiwiaWk7Ijoi4oWIIiwiaWlpaW50OyI6IuKojCIsImlpaW50OyI6IuKIrSIsImlpbmZpbjsiOiLip5wiLCJpaW90YTsiOiLihKkiLCJJSmxpZzsiOiLEsiIsImlqbGlnOyI6IsSzIiwiSW07Ijoi4oSRIiwiSW1hY3I7IjoixKoiLCJpbWFjcjsiOiLEqyIsImltYWdlOyI6IuKEkSIsIkltYWdpbmFyeUk7Ijoi4oWIIiwiaW1hZ2xpbmU7Ijoi4oSQIiwiaW1hZ3BhcnQ7Ijoi4oSRIiwiaW1hdGg7IjoixLEiLCJpbW9mOyI6IuKKtyIsImltcGVkOyI6Isa1IiwiSW1wbGllczsiOiLih5IiLCJpbjsiOiLiiIgiLCJpbmNhcmU7Ijoi4oSFIiwiaW5maW47Ijoi4oieIiwiaW5maW50aWU7Ijoi4qedIiwiaW5vZG90OyI6IsSxIiwiSW50OyI6IuKIrCIsImludDsiOiLiiKsiLCJpbnRjYWw7Ijoi4oq6IiwiaW50ZWdlcnM7Ijoi4oSkIiwiSW50ZWdyYWw7Ijoi4oirIiwiaW50ZXJjYWw7Ijoi4oq6IiwiSW50ZXJzZWN0aW9uOyI6IuKLgiIsImludGxhcmhrOyI6IuKolyIsImludHByb2Q7Ijoi4qi8IiwiSW52aXNpYmxlQ29tbWE7Ijoi4oGjIiwiSW52aXNpYmxlVGltZXM7Ijoi4oGiIiwiSU9jeTsiOiLQgSIsImlvY3k7Ijoi0ZEiLCJJb2dvbjsiOiLEriIsImlvZ29uOyI6IsSvIiwiSW9wZjsiOiLwnZWAIiwiaW9wZjsiOiLwnZWaIiwiSW90YTsiOiLOmSIsImlvdGE7IjoizrkiLCJpcHJvZDsiOiLiqLwiLCJpcXVlc3Q7Ijoiwr8iLGlxdWVzdDoiwr8iLCJJc2NyOyI6IuKEkCIsImlzY3I7Ijoi8J2SviIsImlzaW47Ijoi4oiIIiwiaXNpbmRvdDsiOiLii7UiLCJpc2luRTsiOiLii7kiLCJpc2luczsiOiLii7QiLCJpc2luc3Y7Ijoi4ouzIiwiaXNpbnY7Ijoi4oiIIiwiaXQ7Ijoi4oGiIiwiSXRpbGRlOyI6IsSoIiwiaXRpbGRlOyI6IsSpIiwiSXVrY3k7Ijoi0IYiLCJpdWtjeTsiOiLRliIsIkl1bWw7Ijoiw48iLEl1bWw6IsOPIiwiaXVtbDsiOiLDryIsaXVtbDoiw68iLCJKY2lyYzsiOiLEtCIsImpjaXJjOyI6IsS1IiwiSmN5OyI6ItCZIiwiamN5OyI6ItC5IiwiSmZyOyI6IvCdlI0iLCJqZnI7Ijoi8J2UpyIsImptYXRoOyI6Isi3IiwiSm9wZjsiOiLwnZWBIiwiam9wZjsiOiLwnZWbIiwiSnNjcjsiOiLwnZKlIiwianNjcjsiOiLwnZK/IiwiSnNlcmN5OyI6ItCIIiwianNlcmN5OyI6ItGYIiwiSnVrY3k7Ijoi0IQiLCJqdWtjeTsiOiLRlCIsIkthcHBhOyI6Is6aIiwia2FwcGE7IjoizroiLCJrYXBwYXY7Ijoiz7AiLCJLY2VkaWw7IjoixLYiLCJrY2VkaWw7IjoixLciLCJLY3k7Ijoi0JoiLCJrY3k7Ijoi0LoiLCJLZnI7Ijoi8J2UjiIsImtmcjsiOiLwnZSoIiwia2dyZWVuOyI6IsS4IiwiS0hjeTsiOiLQpSIsImtoY3k7Ijoi0YUiLCJLSmN5OyI6ItCMIiwia2pjeTsiOiLRnCIsIktvcGY7Ijoi8J2VgiIsImtvcGY7Ijoi8J2VnCIsIktzY3I7Ijoi8J2SpiIsImtzY3I7Ijoi8J2TgCIsImxBYXJyOyI6IuKHmiIsIkxhY3V0ZTsiOiLEuSIsImxhY3V0ZTsiOiLEuiIsImxhZW1wdHl2OyI6IuKmtCIsImxhZ3JhbjsiOiLihJIiLCJMYW1iZGE7IjoizpsiLCJsYW1iZGE7IjoizrsiLCJMYW5nOyI6IuKfqiIsImxhbmc7Ijoi4p+oIiwibGFuZ2Q7Ijoi4qaRIiwibGFuZ2xlOyI6IuKfqCIsImxhcDsiOiLiqoUiLCJMYXBsYWNldHJmOyI6IuKEkiIsImxhcXVvOyI6IsKrIixsYXF1bzoiwqsiLCJMYXJyOyI6IuKGniIsImxBcnI7Ijoi4oeQIiwibGFycjsiOiLihpAiLCJsYXJyYjsiOiLih6QiLCJsYXJyYmZzOyI6IuKknyIsImxhcnJmczsiOiLipJ0iLCJsYXJyaGs7Ijoi4oapIiwibGFycmxwOyI6IuKGqyIsImxhcnJwbDsiOiLipLkiLCJsYXJyc2ltOyI6IuKlsyIsImxhcnJ0bDsiOiLihqIiLCJsYXQ7Ijoi4qqrIiwibEF0YWlsOyI6IuKkmyIsImxhdGFpbDsiOiLipJkiLCJsYXRlOyI6IuKqrSIsImxhdGVzOyI6IuKqre+4gCIsImxCYXJyOyI6IuKkjiIsImxiYXJyOyI6IuKkjCIsImxiYnJrOyI6IuKdsiIsImxicmFjZTsiOiJ7IiwibGJyYWNrOyI6IlsiLCJsYnJrZTsiOiLiposiLCJsYnJrc2xkOyI6IuKmjyIsImxicmtzbHU7Ijoi4qaNIiwiTGNhcm9uOyI6IsS9IiwibGNhcm9uOyI6IsS+IiwiTGNlZGlsOyI6IsS7IiwibGNlZGlsOyI6IsS8IiwibGNlaWw7Ijoi4oyIIiwibGN1YjsiOiJ7IiwiTGN5OyI6ItCbIiwibGN5OyI6ItC7IiwibGRjYTsiOiLipLYiLCJsZHF1bzsiOiLigJwiLCJsZHF1b3I7Ijoi4oCeIiwibGRyZGhhcjsiOiLipaciLCJsZHJ1c2hhcjsiOiLipYsiLCJsZHNoOyI6IuKGsiIsImxFOyI6IuKJpiIsImxlOyI6IuKJpCIsIkxlZnRBbmdsZUJyYWNrZXQ7Ijoi4p+oIiwiTGVmdEFycm93OyI6IuKGkCIsIkxlZnRhcnJvdzsiOiLih5AiLCJsZWZ0YXJyb3c7Ijoi4oaQIiwiTGVmdEFycm93QmFyOyI6IuKHpCIsIkxlZnRBcnJvd1JpZ2h0QXJyb3c7Ijoi4oeGIiwibGVmdGFycm93dGFpbDsiOiLihqIiLCJMZWZ0Q2VpbGluZzsiOiLijIgiLCJMZWZ0RG91YmxlQnJhY2tldDsiOiLin6YiLCJMZWZ0RG93blRlZVZlY3RvcjsiOiLipaEiLCJMZWZ0RG93blZlY3RvcjsiOiLih4MiLCJMZWZ0RG93blZlY3RvckJhcjsiOiLipZkiLCJMZWZ0Rmxvb3I7Ijoi4oyKIiwibGVmdGhhcnBvb25kb3duOyI6IuKGvSIsImxlZnRoYXJwb29udXA7Ijoi4oa8IiwibGVmdGxlZnRhcnJvd3M7Ijoi4oeHIiwiTGVmdFJpZ2h0QXJyb3c7Ijoi4oaUIiwiTGVmdHJpZ2h0YXJyb3c7Ijoi4oeUIiwibGVmdHJpZ2h0YXJyb3c7Ijoi4oaUIiwibGVmdHJpZ2h0YXJyb3dzOyI6IuKHhiIsImxlZnRyaWdodGhhcnBvb25zOyI6IuKHiyIsImxlZnRyaWdodHNxdWlnYXJyb3c7Ijoi4oatIiwiTGVmdFJpZ2h0VmVjdG9yOyI6IuKljiIsIkxlZnRUZWU7Ijoi4oqjIiwiTGVmdFRlZUFycm93OyI6IuKGpCIsIkxlZnRUZWVWZWN0b3I7Ijoi4qWaIiwibGVmdHRocmVldGltZXM7Ijoi4ouLIiwiTGVmdFRyaWFuZ2xlOyI6IuKKsiIsIkxlZnRUcmlhbmdsZUJhcjsiOiLip48iLCJMZWZ0VHJpYW5nbGVFcXVhbDsiOiLiirQiLCJMZWZ0VXBEb3duVmVjdG9yOyI6IuKlkSIsIkxlZnRVcFRlZVZlY3RvcjsiOiLipaAiLCJMZWZ0VXBWZWN0b3I7Ijoi4oa/IiwiTGVmdFVwVmVjdG9yQmFyOyI6IuKlmCIsIkxlZnRWZWN0b3I7Ijoi4oa8IiwiTGVmdFZlY3RvckJhcjsiOiLipZIiLCJsRWc7Ijoi4qqLIiwibGVnOyI6IuKLmiIsImxlcTsiOiLiiaQiLCJsZXFxOyI6IuKJpiIsImxlcXNsYW50OyI6IuKpvSIsImxlczsiOiLiqb0iLCJsZXNjYzsiOiLiqqgiLCJsZXNkb3Q7Ijoi4qm/IiwibGVzZG90bzsiOiLiqoEiLCJsZXNkb3RvcjsiOiLiqoMiLCJsZXNnOyI6IuKLmu+4gCIsImxlc2dlczsiOiLiqpMiLCJsZXNzYXBwcm94OyI6IuKqhSIsImxlc3Nkb3Q7Ijoi4ouWIiwibGVzc2VxZ3RyOyI6IuKLmiIsImxlc3NlcXFndHI7Ijoi4qqLIiwiTGVzc0VxdWFsR3JlYXRlcjsiOiLii5oiLCJMZXNzRnVsbEVxdWFsOyI6IuKJpiIsIkxlc3NHcmVhdGVyOyI6IuKJtiIsImxlc3NndHI7Ijoi4om2IiwiTGVzc0xlc3M7Ijoi4qqhIiwibGVzc3NpbTsiOiLiibIiLCJMZXNzU2xhbnRFcXVhbDsiOiLiqb0iLCJMZXNzVGlsZGU7Ijoi4omyIiwibGZpc2h0OyI6IuKlvCIsImxmbG9vcjsiOiLijIoiLCJMZnI7Ijoi8J2UjyIsImxmcjsiOiLwnZSpIiwibGc7Ijoi4om2IiwibGdFOyI6IuKqkSIsImxIYXI7Ijoi4qWiIiwibGhhcmQ7Ijoi4oa9IiwibGhhcnU7Ijoi4oa8IiwibGhhcnVsOyI6IuKlqiIsImxoYmxrOyI6IuKWhCIsIkxKY3k7Ijoi0IkiLCJsamN5OyI6ItGZIiwiTGw7Ijoi4ouYIiwibGw7Ijoi4omqIiwibGxhcnI7Ijoi4oeHIiwibGxjb3JuZXI7Ijoi4oyeIiwiTGxlZnRhcnJvdzsiOiLih5oiLCJsbGhhcmQ7Ijoi4qWrIiwibGx0cmk7Ijoi4pe6IiwiTG1pZG90OyI6IsS/IiwibG1pZG90OyI6IsWAIiwibG1vdXN0OyI6IuKOsCIsImxtb3VzdGFjaGU7Ijoi4o6wIiwibG5hcDsiOiLiqokiLCJsbmFwcHJveDsiOiLiqokiLCJsbkU7Ijoi4omoIiwibG5lOyI6IuKqhyIsImxuZXE7Ijoi4qqHIiwibG5lcXE7Ijoi4omoIiwibG5zaW07Ijoi4oumIiwibG9hbmc7Ijoi4p+sIiwibG9hcnI7Ijoi4oe9IiwibG9icms7Ijoi4p+mIiwiTG9uZ0xlZnRBcnJvdzsiOiLin7UiLCJMb25nbGVmdGFycm93OyI6IuKfuCIsImxvbmdsZWZ0YXJyb3c7Ijoi4p+1IiwiTG9uZ0xlZnRSaWdodEFycm93OyI6IuKftyIsIkxvbmdsZWZ0cmlnaHRhcnJvdzsiOiLin7oiLCJsb25nbGVmdHJpZ2h0YXJyb3c7Ijoi4p+3IiwibG9uZ21hcHN0bzsiOiLin7wiLCJMb25nUmlnaHRBcnJvdzsiOiLin7YiLCJMb25ncmlnaHRhcnJvdzsiOiLin7kiLCJsb25ncmlnaHRhcnJvdzsiOiLin7YiLCJsb29wYXJyb3dsZWZ0OyI6IuKGqyIsImxvb3BhcnJvd3JpZ2h0OyI6IuKGrCIsImxvcGFyOyI6IuKmhSIsIkxvcGY7Ijoi8J2VgyIsImxvcGY7Ijoi8J2VnSIsImxvcGx1czsiOiLiqK0iLCJsb3RpbWVzOyI6IuKotCIsImxvd2FzdDsiOiLiiJciLCJsb3diYXI7IjoiXyIsIkxvd2VyTGVmdEFycm93OyI6IuKGmSIsIkxvd2VyUmlnaHRBcnJvdzsiOiLihpgiLCJsb3o7Ijoi4peKIiwibG96ZW5nZTsiOiLil4oiLCJsb3pmOyI6IuKnqyIsImxwYXI7IjoiKCIsImxwYXJsdDsiOiLippMiLCJscmFycjsiOiLih4YiLCJscmNvcm5lcjsiOiLijJ8iLCJscmhhcjsiOiLih4siLCJscmhhcmQ7Ijoi4qWtIiwibHJtOyI6IuKAjiIsImxydHJpOyI6IuKKvyIsImxzYXF1bzsiOiLigLkiLCJMc2NyOyI6IuKEkiIsImxzY3I7Ijoi8J2TgSIsIkxzaDsiOiLihrAiLCJsc2g7Ijoi4oawIiwibHNpbTsiOiLiibIiLCJsc2ltZTsiOiLiqo0iLCJsc2ltZzsiOiLiqo8iLCJsc3FiOyI6IlsiLCJsc3F1bzsiOiLigJgiLCJsc3F1b3I7Ijoi4oCaIiwiTHN0cm9rOyI6IsWBIiwibHN0cm9rOyI6IsWCIiwiTFQ7IjoiPCIsTFQ6IjwiLCJMdDsiOiLiiaoiLCJsdDsiOiI8IixsdDoiPCIsImx0Y2M7Ijoi4qqmIiwibHRjaXI7Ijoi4qm5IiwibHRkb3Q7Ijoi4ouWIiwibHRocmVlOyI6IuKLiyIsImx0aW1lczsiOiLii4kiLCJsdGxhcnI7Ijoi4qW2IiwibHRxdWVzdDsiOiLiqbsiLCJsdHJpOyI6IuKXgyIsImx0cmllOyI6IuKKtCIsImx0cmlmOyI6IuKXgiIsImx0clBhcjsiOiLippYiLCJsdXJkc2hhcjsiOiLipYoiLCJsdXJ1aGFyOyI6IuKlpiIsImx2ZXJ0bmVxcTsiOiLiiajvuIAiLCJsdm5FOyI6IuKJqO+4gCIsIm1hY3I7Ijoiwq8iLG1hY3I6IsKvIiwibWFsZTsiOiLimYIiLCJtYWx0OyI6IuKcoCIsIm1hbHRlc2U7Ijoi4pygIiwiTWFwOyI6IuKkhSIsIm1hcDsiOiLihqYiLCJtYXBzdG87Ijoi4oamIiwibWFwc3RvZG93bjsiOiLihqciLCJtYXBzdG9sZWZ0OyI6IuKGpCIsIm1hcHN0b3VwOyI6IuKGpSIsIm1hcmtlcjsiOiLilq4iLCJtY29tbWE7Ijoi4qipIiwiTWN5OyI6ItCcIiwibWN5OyI6ItC8IiwibWRhc2g7Ijoi4oCUIiwibUREb3Q7Ijoi4oi6IiwibWVhc3VyZWRhbmdsZTsiOiLiiKEiLCJNZWRpdW1TcGFjZTsiOiLigZ8iLCJNZWxsaW50cmY7Ijoi4oSzIiwiTWZyOyI6IvCdlJAiLCJtZnI7Ijoi8J2UqiIsIm1obzsiOiLihKciLCJtaWNybzsiOiLCtSIsbWljcm86IsK1IiwibWlkOyI6IuKIoyIsIm1pZGFzdDsiOiIqIiwibWlkY2lyOyI6IuKrsCIsIm1pZGRvdDsiOiLCtyIsbWlkZG90OiLCtyIsIm1pbnVzOyI6IuKIkiIsIm1pbnVzYjsiOiLiip8iLCJtaW51c2Q7Ijoi4oi4IiwibWludXNkdTsiOiLiqKoiLCJNaW51c1BsdXM7Ijoi4oiTIiwibWxjcDsiOiLiq5siLCJtbGRyOyI6IuKApiIsIm1ucGx1czsiOiLiiJMiLCJtb2RlbHM7Ijoi4oqnIiwiTW9wZjsiOiLwnZWEIiwibW9wZjsiOiLwnZWeIiwibXA7Ijoi4oiTIiwiTXNjcjsiOiLihLMiLCJtc2NyOyI6IvCdk4IiLCJtc3Rwb3M7Ijoi4oi+IiwiTXU7IjoizpwiLCJtdTsiOiLOvCIsIm11bHRpbWFwOyI6IuKKuCIsIm11bWFwOyI6IuKKuCIsIm5hYmxhOyI6IuKIhyIsIk5hY3V0ZTsiOiLFgyIsIm5hY3V0ZTsiOiLFhCIsIm5hbmc7Ijoi4oig4oOSIiwibmFwOyI6IuKJiSIsIm5hcEU7Ijoi4qmwzLgiLCJuYXBpZDsiOiLiiYvMuCIsIm5hcG9zOyI6IsWJIiwibmFwcHJveDsiOiLiiYkiLCJuYXR1cjsiOiLima4iLCJuYXR1cmFsOyI6IuKZriIsIm5hdHVyYWxzOyI6IuKElSIsIm5ic3A7IjoiwqAiLG5ic3A6IsKgIiwibmJ1bXA7Ijoi4omOzLgiLCJuYnVtcGU7Ijoi4omPzLgiLCJuY2FwOyI6IuKpgyIsIk5jYXJvbjsiOiLFhyIsIm5jYXJvbjsiOiLFiCIsIk5jZWRpbDsiOiLFhSIsIm5jZWRpbDsiOiLFhiIsIm5jb25nOyI6IuKJhyIsIm5jb25nZG90OyI6IuKprcy4IiwibmN1cDsiOiLiqYIiLCJOY3k7Ijoi0J0iLCJuY3k7Ijoi0L0iLCJuZGFzaDsiOiLigJMiLCJuZTsiOiLiiaAiLCJuZWFyaGs7Ijoi4qSkIiwibmVBcnI7Ijoi4oeXIiwibmVhcnI7Ijoi4oaXIiwibmVhcnJvdzsiOiLihpciLCJuZWRvdDsiOiLiiZDMuCIsIk5lZ2F0aXZlTWVkaXVtU3BhY2U7Ijoi4oCLIiwiTmVnYXRpdmVUaGlja1NwYWNlOyI6IuKAiyIsIk5lZ2F0aXZlVGhpblNwYWNlOyI6IuKAiyIsIk5lZ2F0aXZlVmVyeVRoaW5TcGFjZTsiOiLigIsiLCJuZXF1aXY7Ijoi4omiIiwibmVzZWFyOyI6IuKkqCIsIm5lc2ltOyI6IuKJgsy4IiwiTmVzdGVkR3JlYXRlckdyZWF0ZXI7Ijoi4omrIiwiTmVzdGVkTGVzc0xlc3M7Ijoi4omqIiwiTmV3TGluZTsiOmAKYCwibmV4aXN0OyI6IuKIhCIsIm5leGlzdHM7Ijoi4oiEIiwiTmZyOyI6IvCdlJEiLCJuZnI7Ijoi8J2UqyIsIm5nRTsiOiLiiafMuCIsIm5nZTsiOiLiibEiLCJuZ2VxOyI6IuKJsSIsIm5nZXFxOyI6IuKJp8y4IiwibmdlcXNsYW50OyI6IuKpvsy4IiwibmdlczsiOiLiqb7MuCIsIm5HZzsiOiLii5nMuCIsIm5nc2ltOyI6IuKJtSIsIm5HdDsiOiLiiavig5IiLCJuZ3Q7Ijoi4omvIiwibmd0cjsiOiLiia8iLCJuR3R2OyI6IuKJq8y4IiwibmhBcnI7Ijoi4oeOIiwibmhhcnI7Ijoi4oauIiwibmhwYXI7Ijoi4quyIiwibmk7Ijoi4oiLIiwibmlzOyI6IuKLvCIsIm5pc2Q7Ijoi4ou6Iiwibml2OyI6IuKIiyIsIk5KY3k7Ijoi0IoiLCJuamN5OyI6ItGaIiwibmxBcnI7Ijoi4oeNIiwibmxhcnI7Ijoi4oaaIiwibmxkcjsiOiLigKUiLCJubEU7Ijoi4ommzLgiLCJubGU7Ijoi4omwIiwibkxlZnRhcnJvdzsiOiLih40iLCJubGVmdGFycm93OyI6IuKGmiIsIm5MZWZ0cmlnaHRhcnJvdzsiOiLih44iLCJubGVmdHJpZ2h0YXJyb3c7Ijoi4oauIiwibmxlcTsiOiLiibAiLCJubGVxcTsiOiLiiabMuCIsIm5sZXFzbGFudDsiOiLiqb3MuCIsIm5sZXM7Ijoi4qm9zLgiLCJubGVzczsiOiLiia4iLCJuTGw7Ijoi4ouYzLgiLCJubHNpbTsiOiLiibQiLCJuTHQ7Ijoi4omq4oOSIiwibmx0OyI6IuKJriIsIm5sdHJpOyI6IuKLqiIsIm5sdHJpZTsiOiLii6wiLCJuTHR2OyI6IuKJqsy4Iiwibm1pZDsiOiLiiKQiLCJOb0JyZWFrOyI6IuKBoCIsIk5vbkJyZWFraW5nU3BhY2U7IjoiwqAiLCJOb3BmOyI6IuKElSIsIm5vcGY7Ijoi8J2VnyIsIk5vdDsiOiLiq6wiLCJub3Q7IjoiwqwiLG5vdDoiwqwiLCJOb3RDb25ncnVlbnQ7Ijoi4omiIiwiTm90Q3VwQ2FwOyI6IuKJrSIsIk5vdERvdWJsZVZlcnRpY2FsQmFyOyI6IuKIpiIsIk5vdEVsZW1lbnQ7Ijoi4oiJIiwiTm90RXF1YWw7Ijoi4omgIiwiTm90RXF1YWxUaWxkZTsiOiLiiYLMuCIsIk5vdEV4aXN0czsiOiLiiIQiLCJOb3RHcmVhdGVyOyI6IuKJryIsIk5vdEdyZWF0ZXJFcXVhbDsiOiLiibEiLCJOb3RHcmVhdGVyRnVsbEVxdWFsOyI6IuKJp8y4IiwiTm90R3JlYXRlckdyZWF0ZXI7Ijoi4omrzLgiLCJOb3RHcmVhdGVyTGVzczsiOiLiibkiLCJOb3RHcmVhdGVyU2xhbnRFcXVhbDsiOiLiqb7MuCIsIk5vdEdyZWF0ZXJUaWxkZTsiOiLiibUiLCJOb3RIdW1wRG93bkh1bXA7Ijoi4omOzLgiLCJOb3RIdW1wRXF1YWw7Ijoi4omPzLgiLCJub3RpbjsiOiLiiIkiLCJub3RpbmRvdDsiOiLii7XMuCIsIm5vdGluRTsiOiLii7nMuCIsIm5vdGludmE7Ijoi4oiJIiwibm90aW52YjsiOiLii7ciLCJub3RpbnZjOyI6IuKLtiIsIk5vdExlZnRUcmlhbmdsZTsiOiLii6oiLCJOb3RMZWZ0VHJpYW5nbGVCYXI7Ijoi4qePzLgiLCJOb3RMZWZ0VHJpYW5nbGVFcXVhbDsiOiLii6wiLCJOb3RMZXNzOyI6IuKJriIsIk5vdExlc3NFcXVhbDsiOiLiibAiLCJOb3RMZXNzR3JlYXRlcjsiOiLiibgiLCJOb3RMZXNzTGVzczsiOiLiiarMuCIsIk5vdExlc3NTbGFudEVxdWFsOyI6IuKpvcy4IiwiTm90TGVzc1RpbGRlOyI6IuKJtCIsIk5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyOyI6IuKqosy4IiwiTm90TmVzdGVkTGVzc0xlc3M7Ijoi4qqhzLgiLCJub3RuaTsiOiLiiIwiLCJub3RuaXZhOyI6IuKIjCIsIm5vdG5pdmI7Ijoi4ou+Iiwibm90bml2YzsiOiLii70iLCJOb3RQcmVjZWRlczsiOiLiioAiLCJOb3RQcmVjZWRlc0VxdWFsOyI6IuKqr8y4IiwiTm90UHJlY2VkZXNTbGFudEVxdWFsOyI6IuKLoCIsIk5vdFJldmVyc2VFbGVtZW50OyI6IuKIjCIsIk5vdFJpZ2h0VHJpYW5nbGU7Ijoi4ourIiwiTm90UmlnaHRUcmlhbmdsZUJhcjsiOiLip5DMuCIsIk5vdFJpZ2h0VHJpYW5nbGVFcXVhbDsiOiLii60iLCJOb3RTcXVhcmVTdWJzZXQ7Ijoi4oqPzLgiLCJOb3RTcXVhcmVTdWJzZXRFcXVhbDsiOiLii6IiLCJOb3RTcXVhcmVTdXBlcnNldDsiOiLiipDMuCIsIk5vdFNxdWFyZVN1cGVyc2V0RXF1YWw7Ijoi4oujIiwiTm90U3Vic2V0OyI6IuKKguKDkiIsIk5vdFN1YnNldEVxdWFsOyI6IuKKiCIsIk5vdFN1Y2NlZWRzOyI6IuKKgSIsIk5vdFN1Y2NlZWRzRXF1YWw7Ijoi4qqwzLgiLCJOb3RTdWNjZWVkc1NsYW50RXF1YWw7Ijoi4ouhIiwiTm90U3VjY2VlZHNUaWxkZTsiOiLiib/MuCIsIk5vdFN1cGVyc2V0OyI6IuKKg+KDkiIsIk5vdFN1cGVyc2V0RXF1YWw7Ijoi4oqJIiwiTm90VGlsZGU7Ijoi4omBIiwiTm90VGlsZGVFcXVhbDsiOiLiiYQiLCJOb3RUaWxkZUZ1bGxFcXVhbDsiOiLiiYciLCJOb3RUaWxkZVRpbGRlOyI6IuKJiSIsIk5vdFZlcnRpY2FsQmFyOyI6IuKIpCIsIm5wYXI7Ijoi4oimIiwibnBhcmFsbGVsOyI6IuKIpiIsIm5wYXJzbDsiOiLiq73ig6UiLCJucGFydDsiOiLiiILMuCIsIm5wb2xpbnQ7Ijoi4qiUIiwibnByOyI6IuKKgCIsIm5wcmN1ZTsiOiLii6AiLCJucHJlOyI6IuKqr8y4IiwibnByZWM7Ijoi4oqAIiwibnByZWNlcTsiOiLiqq/MuCIsIm5yQXJyOyI6IuKHjyIsIm5yYXJyOyI6IuKGmyIsIm5yYXJyYzsiOiLipLPMuCIsIm5yYXJydzsiOiLihp3MuCIsIm5SaWdodGFycm93OyI6IuKHjyIsIm5yaWdodGFycm93OyI6IuKGmyIsIm5ydHJpOyI6IuKLqyIsIm5ydHJpZTsiOiLii60iLCJuc2M7Ijoi4oqBIiwibnNjY3VlOyI6IuKLoSIsIm5zY2U7Ijoi4qqwzLgiLCJOc2NyOyI6IvCdkqkiLCJuc2NyOyI6IvCdk4MiLCJuc2hvcnRtaWQ7Ijoi4oikIiwibnNob3J0cGFyYWxsZWw7Ijoi4oimIiwibnNpbTsiOiLiiYEiLCJuc2ltZTsiOiLiiYQiLCJuc2ltZXE7Ijoi4omEIiwibnNtaWQ7Ijoi4oikIiwibnNwYXI7Ijoi4oimIiwibnNxc3ViZTsiOiLii6IiLCJuc3FzdXBlOyI6IuKLoyIsIm5zdWI7Ijoi4oqEIiwibnN1YkU7Ijoi4quFzLgiLCJuc3ViZTsiOiLiiogiLCJuc3Vic2V0OyI6IuKKguKDkiIsIm5zdWJzZXRlcTsiOiLiiogiLCJuc3Vic2V0ZXFxOyI6IuKrhcy4IiwibnN1Y2M7Ijoi4oqBIiwibnN1Y2NlcTsiOiLiqrDMuCIsIm5zdXA7Ijoi4oqFIiwibnN1cEU7Ijoi4quGzLgiLCJuc3VwZTsiOiLiiokiLCJuc3Vwc2V0OyI6IuKKg+KDkiIsIm5zdXBzZXRlcTsiOiLiiokiLCJuc3Vwc2V0ZXFxOyI6IuKrhsy4IiwibnRnbDsiOiLiibkiLCJOdGlsZGU7Ijoiw5EiLE50aWxkZToiw5EiLCJudGlsZGU7Ijoiw7EiLG50aWxkZToiw7EiLCJudGxnOyI6IuKJuCIsIm50cmlhbmdsZWxlZnQ7Ijoi4ouqIiwibnRyaWFuZ2xlbGVmdGVxOyI6IuKLrCIsIm50cmlhbmdsZXJpZ2h0OyI6IuKLqyIsIm50cmlhbmdsZXJpZ2h0ZXE7Ijoi4outIiwiTnU7Ijoizp0iLCJudTsiOiLOvSIsIm51bTsiOiIjIiwibnVtZXJvOyI6IuKEliIsIm51bXNwOyI6IuKAhyIsIm52YXA7Ijoi4omN4oOSIiwiblZEYXNoOyI6IuKKryIsIm5WZGFzaDsiOiLiiq4iLCJudkRhc2g7Ijoi4oqtIiwibnZkYXNoOyI6IuKKrCIsIm52Z2U7Ijoi4oml4oOSIiwibnZndDsiOiI+4oOSIiwibnZIYXJyOyI6IuKkhCIsIm52aW5maW47Ijoi4qeeIiwibnZsQXJyOyI6IuKkgiIsIm52bGU7Ijoi4omk4oOSIiwibnZsdDsiOiI84oOSIiwibnZsdHJpZTsiOiLiirTig5IiLCJudnJBcnI7Ijoi4qSDIiwibnZydHJpZTsiOiLiirXig5IiLCJudnNpbTsiOiLiiLzig5IiLCJud2FyaGs7Ijoi4qSjIiwibndBcnI7Ijoi4oeWIiwibndhcnI7Ijoi4oaWIiwibndhcnJvdzsiOiLihpYiLCJud25lYXI7Ijoi4qSnIiwiT2FjdXRlOyI6IsOTIixPYWN1dGU6IsOTIiwib2FjdXRlOyI6IsOzIixvYWN1dGU6IsOzIiwib2FzdDsiOiLiipsiLCJvY2lyOyI6IuKKmiIsIk9jaXJjOyI6IsOUIixPY2lyYzoiw5QiLCJvY2lyYzsiOiLDtCIsb2NpcmM6IsO0IiwiT2N5OyI6ItCeIiwib2N5OyI6ItC+Iiwib2Rhc2g7Ijoi4oqdIiwiT2RibGFjOyI6IsWQIiwib2RibGFjOyI6IsWRIiwib2RpdjsiOiLiqLgiLCJvZG90OyI6IuKKmSIsIm9kc29sZDsiOiLiprwiLCJPRWxpZzsiOiLFkiIsIm9lbGlnOyI6IsWTIiwib2ZjaXI7Ijoi4qa/IiwiT2ZyOyI6IvCdlJIiLCJvZnI7Ijoi8J2UrCIsIm9nb247Ijoiy5siLCJPZ3JhdmU7Ijoiw5IiLE9ncmF2ZToiw5IiLCJvZ3JhdmU7Ijoiw7IiLG9ncmF2ZToiw7IiLCJvZ3Q7Ijoi4qeBIiwib2hiYXI7Ijoi4qa1Iiwib2htOyI6Is6pIiwib2ludDsiOiLiiK4iLCJvbGFycjsiOiLihroiLCJvbGNpcjsiOiLipr4iLCJvbGNyb3NzOyI6IuKmuyIsIm9saW5lOyI6IuKAviIsIm9sdDsiOiLip4AiLCJPbWFjcjsiOiLFjCIsIm9tYWNyOyI6IsWNIiwiT21lZ2E7IjoizqkiLCJvbWVnYTsiOiLPiSIsIk9taWNyb247Ijoizp8iLCJvbWljcm9uOyI6Is6/Iiwib21pZDsiOiLiprYiLCJvbWludXM7Ijoi4oqWIiwiT29wZjsiOiLwnZWGIiwib29wZjsiOiLwnZWgIiwib3BhcjsiOiLiprciLCJPcGVuQ3VybHlEb3VibGVRdW90ZTsiOiLigJwiLCJPcGVuQ3VybHlRdW90ZTsiOiLigJgiLCJvcGVycDsiOiLiprkiLCJvcGx1czsiOiLiipUiLCJPcjsiOiLiqZQiLCJvcjsiOiLiiKgiLCJvcmFycjsiOiLihrsiLCJvcmQ7Ijoi4qmdIiwib3JkZXI7Ijoi4oS0Iiwib3JkZXJvZjsiOiLihLQiLCJvcmRmOyI6IsKqIixvcmRmOiLCqiIsIm9yZG07IjoiwroiLG9yZG06IsK6Iiwib3JpZ29mOyI6IuKKtiIsIm9yb3I7Ijoi4qmWIiwib3JzbG9wZTsiOiLiqZciLCJvcnY7Ijoi4qmbIiwib1M7Ijoi4pOIIiwiT3NjcjsiOiLwnZKqIiwib3NjcjsiOiLihLQiLCJPc2xhc2g7Ijoiw5giLE9zbGFzaDoiw5giLCJvc2xhc2g7Ijoiw7giLG9zbGFzaDoiw7giLCJvc29sOyI6IuKKmCIsIk90aWxkZTsiOiLDlSIsT3RpbGRlOiLDlSIsIm90aWxkZTsiOiLDtSIsb3RpbGRlOiLDtSIsIk90aW1lczsiOiLiqLciLCJvdGltZXM7Ijoi4oqXIiwib3RpbWVzYXM7Ijoi4qi2IiwiT3VtbDsiOiLDliIsT3VtbDoiw5YiLCJvdW1sOyI6IsO2IixvdW1sOiLDtiIsIm92YmFyOyI6IuKMvSIsIk92ZXJCYXI7Ijoi4oC+IiwiT3ZlckJyYWNlOyI6IuKPniIsIk92ZXJCcmFja2V0OyI6IuKOtCIsIk92ZXJQYXJlbnRoZXNpczsiOiLij5wiLCJwYXI7Ijoi4oilIiwicGFyYTsiOiLCtiIscGFyYToiwrYiLCJwYXJhbGxlbDsiOiLiiKUiLCJwYXJzaW07Ijoi4quzIiwicGFyc2w7Ijoi4qu9IiwicGFydDsiOiLiiIIiLCJQYXJ0aWFsRDsiOiLiiIIiLCJQY3k7Ijoi0J8iLCJwY3k7Ijoi0L8iLCJwZXJjbnQ7IjoiJSIsInBlcmlvZDsiOiIuIiwicGVybWlsOyI6IuKAsCIsInBlcnA7Ijoi4oqlIiwicGVydGVuazsiOiLigLEiLCJQZnI7Ijoi8J2UkyIsInBmcjsiOiLwnZStIiwiUGhpOyI6Is6mIiwicGhpOyI6Is+GIiwicGhpdjsiOiLPlSIsInBobW1hdDsiOiLihLMiLCJwaG9uZTsiOiLimI4iLCJQaTsiOiLOoCIsInBpOyI6Is+AIiwicGl0Y2hmb3JrOyI6IuKLlCIsInBpdjsiOiLPliIsInBsYW5jazsiOiLihI8iLCJwbGFuY2toOyI6IuKEjiIsInBsYW5rdjsiOiLihI8iLCJwbHVzOyI6IisiLCJwbHVzYWNpcjsiOiLiqKMiLCJwbHVzYjsiOiLiip4iLCJwbHVzY2lyOyI6IuKooiIsInBsdXNkbzsiOiLiiJQiLCJwbHVzZHU7Ijoi4qilIiwicGx1c2U7Ijoi4qmyIiwiUGx1c01pbnVzOyI6IsKxIiwicGx1c21uOyI6IsKxIixwbHVzbW46IsKxIiwicGx1c3NpbTsiOiLiqKYiLCJwbHVzdHdvOyI6IuKopyIsInBtOyI6IsKxIiwiUG9pbmNhcmVwbGFuZTsiOiLihIwiLCJwb2ludGludDsiOiLiqJUiLCJQb3BmOyI6IuKEmSIsInBvcGY7Ijoi8J2VoSIsInBvdW5kOyI6IsKjIixwb3VuZDoiwqMiLCJQcjsiOiLiqrsiLCJwcjsiOiLiiboiLCJwcmFwOyI6IuKqtyIsInByY3VlOyI6IuKJvCIsInByRTsiOiLiqrMiLCJwcmU7Ijoi4qqvIiwicHJlYzsiOiLiiboiLCJwcmVjYXBwcm94OyI6IuKqtyIsInByZWNjdXJseWVxOyI6IuKJvCIsIlByZWNlZGVzOyI6IuKJuiIsIlByZWNlZGVzRXF1YWw7Ijoi4qqvIiwiUHJlY2VkZXNTbGFudEVxdWFsOyI6IuKJvCIsIlByZWNlZGVzVGlsZGU7Ijoi4om+IiwicHJlY2VxOyI6IuKqryIsInByZWNuYXBwcm94OyI6IuKquSIsInByZWNuZXFxOyI6IuKqtSIsInByZWNuc2ltOyI6IuKLqCIsInByZWNzaW07Ijoi4om+IiwiUHJpbWU7Ijoi4oCzIiwicHJpbWU7Ijoi4oCyIiwicHJpbWVzOyI6IuKEmSIsInBybmFwOyI6IuKquSIsInBybkU7Ijoi4qq1IiwicHJuc2ltOyI6IuKLqCIsInByb2Q7Ijoi4oiPIiwiUHJvZHVjdDsiOiLiiI8iLCJwcm9mYWxhcjsiOiLijK4iLCJwcm9mbGluZTsiOiLijJIiLCJwcm9mc3VyZjsiOiLijJMiLCJwcm9wOyI6IuKInSIsIlByb3BvcnRpb247Ijoi4oi3IiwiUHJvcG9ydGlvbmFsOyI6IuKInSIsInByb3B0bzsiOiLiiJ0iLCJwcnNpbTsiOiLiib4iLCJwcnVyZWw7Ijoi4oqwIiwiUHNjcjsiOiLwnZKrIiwicHNjcjsiOiLwnZOFIiwiUHNpOyI6Is6oIiwicHNpOyI6Is+IIiwicHVuY3NwOyI6IuKAiCIsIlFmcjsiOiLwnZSUIiwicWZyOyI6IvCdlK4iLCJxaW50OyI6IuKojCIsIlFvcGY7Ijoi4oSaIiwicW9wZjsiOiLwnZWiIiwicXByaW1lOyI6IuKBlyIsIlFzY3I7Ijoi8J2SrCIsInFzY3I7Ijoi8J2ThiIsInF1YXRlcm5pb25zOyI6IuKEjSIsInF1YXRpbnQ7Ijoi4qiWIiwicXVlc3Q7IjoiPyIsInF1ZXN0ZXE7Ijoi4omfIiwiUVVPVDsiOiciJyxRVU9UOiciJywicXVvdDsiOiciJyxxdW90OiciJywickFhcnI7Ijoi4oebIiwicmFjZTsiOiLiiL3MsSIsIlJhY3V0ZTsiOiLFlCIsInJhY3V0ZTsiOiLFlSIsInJhZGljOyI6IuKImiIsInJhZW1wdHl2OyI6IuKmsyIsIlJhbmc7Ijoi4p+rIiwicmFuZzsiOiLin6kiLCJyYW5nZDsiOiLippIiLCJyYW5nZTsiOiLipqUiLCJyYW5nbGU7Ijoi4p+pIiwicmFxdW87IjoiwrsiLHJhcXVvOiLCuyIsIlJhcnI7Ijoi4oagIiwickFycjsiOiLih5IiLCJyYXJyOyI6IuKGkiIsInJhcnJhcDsiOiLipbUiLCJyYXJyYjsiOiLih6UiLCJyYXJyYmZzOyI6IuKkoCIsInJhcnJjOyI6IuKksyIsInJhcnJmczsiOiLipJ4iLCJyYXJyaGs7Ijoi4oaqIiwicmFycmxwOyI6IuKGrCIsInJhcnJwbDsiOiLipYUiLCJyYXJyc2ltOyI6IuKltCIsIlJhcnJ0bDsiOiLipJYiLCJyYXJydGw7Ijoi4oajIiwicmFycnc7Ijoi4oadIiwickF0YWlsOyI6IuKknCIsInJhdGFpbDsiOiLipJoiLCJyYXRpbzsiOiLiiLYiLCJyYXRpb25hbHM7Ijoi4oSaIiwiUkJhcnI7Ijoi4qSQIiwickJhcnI7Ijoi4qSPIiwicmJhcnI7Ijoi4qSNIiwicmJicms7Ijoi4p2zIiwicmJyYWNlOyI6In0iLCJyYnJhY2s7IjoiXSIsInJicmtlOyI6IuKmjCIsInJicmtzbGQ7Ijoi4qaOIiwicmJya3NsdTsiOiLippAiLCJSY2Fyb247IjoixZgiLCJyY2Fyb247IjoixZkiLCJSY2VkaWw7IjoixZYiLCJyY2VkaWw7IjoixZciLCJyY2VpbDsiOiLijIkiLCJyY3ViOyI6In0iLCJSY3k7Ijoi0KAiLCJyY3k7Ijoi0YAiLCJyZGNhOyI6IuKktyIsInJkbGRoYXI7Ijoi4qWpIiwicmRxdW87Ijoi4oCdIiwicmRxdW9yOyI6IuKAnSIsInJkc2g7Ijoi4oazIiwiUmU7Ijoi4oScIiwicmVhbDsiOiLihJwiLCJyZWFsaW5lOyI6IuKEmyIsInJlYWxwYXJ0OyI6IuKEnCIsInJlYWxzOyI6IuKEnSIsInJlY3Q7Ijoi4patIiwiUkVHOyI6IsKuIixSRUc6IsKuIiwicmVnOyI6IsKuIixyZWc6IsKuIiwiUmV2ZXJzZUVsZW1lbnQ7Ijoi4oiLIiwiUmV2ZXJzZUVxdWlsaWJyaXVtOyI6IuKHiyIsIlJldmVyc2VVcEVxdWlsaWJyaXVtOyI6IuKlryIsInJmaXNodDsiOiLipb0iLCJyZmxvb3I7Ijoi4oyLIiwiUmZyOyI6IuKEnCIsInJmcjsiOiLwnZSvIiwickhhcjsiOiLipaQiLCJyaGFyZDsiOiLih4EiLCJyaGFydTsiOiLih4AiLCJyaGFydWw7Ijoi4qWsIiwiUmhvOyI6Is6hIiwicmhvOyI6Is+BIiwicmhvdjsiOiLPsSIsIlJpZ2h0QW5nbGVCcmFja2V0OyI6IuKfqSIsIlJpZ2h0QXJyb3c7Ijoi4oaSIiwiUmlnaHRhcnJvdzsiOiLih5IiLCJyaWdodGFycm93OyI6IuKGkiIsIlJpZ2h0QXJyb3dCYXI7Ijoi4oelIiwiUmlnaHRBcnJvd0xlZnRBcnJvdzsiOiLih4QiLCJyaWdodGFycm93dGFpbDsiOiLihqMiLCJSaWdodENlaWxpbmc7Ijoi4oyJIiwiUmlnaHREb3VibGVCcmFja2V0OyI6IuKfpyIsIlJpZ2h0RG93blRlZVZlY3RvcjsiOiLipZ0iLCJSaWdodERvd25WZWN0b3I7Ijoi4oeCIiwiUmlnaHREb3duVmVjdG9yQmFyOyI6IuKllSIsIlJpZ2h0Rmxvb3I7Ijoi4oyLIiwicmlnaHRoYXJwb29uZG93bjsiOiLih4EiLCJyaWdodGhhcnBvb251cDsiOiLih4AiLCJyaWdodGxlZnRhcnJvd3M7Ijoi4oeEIiwicmlnaHRsZWZ0aGFycG9vbnM7Ijoi4oeMIiwicmlnaHRyaWdodGFycm93czsiOiLih4kiLCJyaWdodHNxdWlnYXJyb3c7Ijoi4oadIiwiUmlnaHRUZWU7Ijoi4oqiIiwiUmlnaHRUZWVBcnJvdzsiOiLihqYiLCJSaWdodFRlZVZlY3RvcjsiOiLipZsiLCJyaWdodHRocmVldGltZXM7Ijoi4ouMIiwiUmlnaHRUcmlhbmdsZTsiOiLiirMiLCJSaWdodFRyaWFuZ2xlQmFyOyI6IuKnkCIsIlJpZ2h0VHJpYW5nbGVFcXVhbDsiOiLiirUiLCJSaWdodFVwRG93blZlY3RvcjsiOiLipY8iLCJSaWdodFVwVGVlVmVjdG9yOyI6IuKlnCIsIlJpZ2h0VXBWZWN0b3I7Ijoi4oa+IiwiUmlnaHRVcFZlY3RvckJhcjsiOiLipZQiLCJSaWdodFZlY3RvcjsiOiLih4AiLCJSaWdodFZlY3RvckJhcjsiOiLipZMiLCJyaW5nOyI6IsuaIiwicmlzaW5nZG90c2VxOyI6IuKJkyIsInJsYXJyOyI6IuKHhCIsInJsaGFyOyI6IuKHjCIsInJsbTsiOiLigI8iLCJybW91c3Q7Ijoi4o6xIiwicm1vdXN0YWNoZTsiOiLijrEiLCJybm1pZDsiOiLiq64iLCJyb2FuZzsiOiLin60iLCJyb2FycjsiOiLih74iLCJyb2JyazsiOiLin6ciLCJyb3BhcjsiOiLipoYiLCJSb3BmOyI6IuKEnSIsInJvcGY7Ijoi8J2VoyIsInJvcGx1czsiOiLiqK4iLCJyb3RpbWVzOyI6IuKotSIsIlJvdW5kSW1wbGllczsiOiLipbAiLCJycGFyOyI6IikiLCJycGFyZ3Q7Ijoi4qaUIiwicnBwb2xpbnQ7Ijoi4qiSIiwicnJhcnI7Ijoi4oeJIiwiUnJpZ2h0YXJyb3c7Ijoi4oebIiwicnNhcXVvOyI6IuKAuiIsIlJzY3I7Ijoi4oSbIiwicnNjcjsiOiLwnZOHIiwiUnNoOyI6IuKGsSIsInJzaDsiOiLihrEiLCJyc3FiOyI6Il0iLCJyc3F1bzsiOiLigJkiLCJyc3F1b3I7Ijoi4oCZIiwicnRocmVlOyI6IuKLjCIsInJ0aW1lczsiOiLii4oiLCJydHJpOyI6IuKWuSIsInJ0cmllOyI6IuKKtSIsInJ0cmlmOyI6IuKWuCIsInJ0cmlsdHJpOyI6IuKnjiIsIlJ1bGVEZWxheWVkOyI6IuKntCIsInJ1bHVoYXI7Ijoi4qWoIiwicng7Ijoi4oSeIiwiU2FjdXRlOyI6IsWaIiwic2FjdXRlOyI6IsWbIiwic2JxdW87Ijoi4oCaIiwiU2M7Ijoi4qq8Iiwic2M7Ijoi4om7Iiwic2NhcDsiOiLiqrgiLCJTY2Fyb247IjoixaAiLCJzY2Fyb247IjoixaEiLCJzY2N1ZTsiOiLiib0iLCJzY0U7Ijoi4qq0Iiwic2NlOyI6IuKqsCIsIlNjZWRpbDsiOiLFniIsInNjZWRpbDsiOiLFnyIsIlNjaXJjOyI6IsWcIiwic2NpcmM7IjoixZ0iLCJzY25hcDsiOiLiqroiLCJzY25FOyI6IuKqtiIsInNjbnNpbTsiOiLii6kiLCJzY3BvbGludDsiOiLiqJMiLCJzY3NpbTsiOiLiib8iLCJTY3k7Ijoi0KEiLCJzY3k7Ijoi0YEiLCJzZG90OyI6IuKLhSIsInNkb3RiOyI6IuKKoSIsInNkb3RlOyI6IuKppiIsInNlYXJoazsiOiLipKUiLCJzZUFycjsiOiLih5giLCJzZWFycjsiOiLihpgiLCJzZWFycm93OyI6IuKGmCIsInNlY3Q7IjoiwqciLHNlY3Q6IsKnIiwic2VtaTsiOiI7Iiwic2Vzd2FyOyI6IuKkqSIsInNldG1pbnVzOyI6IuKIliIsInNldG1uOyI6IuKIliIsInNleHQ7Ijoi4py2IiwiU2ZyOyI6IvCdlJYiLCJzZnI7Ijoi8J2UsCIsInNmcm93bjsiOiLijKIiLCJzaGFycDsiOiLima8iLCJTSENIY3k7Ijoi0KkiLCJzaGNoY3k7Ijoi0YkiLCJTSGN5OyI6ItCoIiwic2hjeTsiOiLRiCIsIlNob3J0RG93bkFycm93OyI6IuKGkyIsIlNob3J0TGVmdEFycm93OyI6IuKGkCIsInNob3J0bWlkOyI6IuKIoyIsInNob3J0cGFyYWxsZWw7Ijoi4oilIiwiU2hvcnRSaWdodEFycm93OyI6IuKGkiIsIlNob3J0VXBBcnJvdzsiOiLihpEiLCJzaHk7Ijoiwq0iLHNoeToiwq0iLCJTaWdtYTsiOiLOoyIsInNpZ21hOyI6Is+DIiwic2lnbWFmOyI6Is+CIiwic2lnbWF2OyI6Is+CIiwic2ltOyI6IuKIvCIsInNpbWRvdDsiOiLiqaoiLCJzaW1lOyI6IuKJgyIsInNpbWVxOyI6IuKJgyIsInNpbWc7Ijoi4qqeIiwic2ltZ0U7Ijoi4qqgIiwic2ltbDsiOiLiqp0iLCJzaW1sRTsiOiLiqp8iLCJzaW1uZTsiOiLiiYYiLCJzaW1wbHVzOyI6IuKopCIsInNpbXJhcnI7Ijoi4qWyIiwic2xhcnI7Ijoi4oaQIiwiU21hbGxDaXJjbGU7Ijoi4oiYIiwic21hbGxzZXRtaW51czsiOiLiiJYiLCJzbWFzaHA7Ijoi4qizIiwic21lcGFyc2w7Ijoi4qekIiwic21pZDsiOiLiiKMiLCJzbWlsZTsiOiLijKMiLCJzbXQ7Ijoi4qqqIiwic210ZTsiOiLiqqwiLCJzbXRlczsiOiLiqqzvuIAiLCJTT0ZUY3k7Ijoi0KwiLCJzb2Z0Y3k7Ijoi0YwiLCJzb2w7IjoiLyIsInNvbGI7Ijoi4qeEIiwic29sYmFyOyI6IuKMvyIsIlNvcGY7Ijoi8J2ViiIsInNvcGY7Ijoi8J2VpCIsInNwYWRlczsiOiLimaAiLCJzcGFkZXN1aXQ7Ijoi4pmgIiwic3BhcjsiOiLiiKUiLCJzcWNhcDsiOiLiipMiLCJzcWNhcHM7Ijoi4oqT77iAIiwic3FjdXA7Ijoi4oqUIiwic3FjdXBzOyI6IuKKlO+4gCIsIlNxcnQ7Ijoi4oiaIiwic3FzdWI7Ijoi4oqPIiwic3FzdWJlOyI6IuKKkSIsInNxc3Vic2V0OyI6IuKKjyIsInNxc3Vic2V0ZXE7Ijoi4oqRIiwic3FzdXA7Ijoi4oqQIiwic3FzdXBlOyI6IuKKkiIsInNxc3Vwc2V0OyI6IuKKkCIsInNxc3Vwc2V0ZXE7Ijoi4oqSIiwic3F1OyI6IuKWoSIsIlNxdWFyZTsiOiLilqEiLCJzcXVhcmU7Ijoi4pahIiwiU3F1YXJlSW50ZXJzZWN0aW9uOyI6IuKKkyIsIlNxdWFyZVN1YnNldDsiOiLiio8iLCJTcXVhcmVTdWJzZXRFcXVhbDsiOiLiipEiLCJTcXVhcmVTdXBlcnNldDsiOiLiipAiLCJTcXVhcmVTdXBlcnNldEVxdWFsOyI6IuKKkiIsIlNxdWFyZVVuaW9uOyI6IuKKlCIsInNxdWFyZjsiOiLilqoiLCJzcXVmOyI6IuKWqiIsInNyYXJyOyI6IuKGkiIsIlNzY3I7Ijoi8J2SriIsInNzY3I7Ijoi8J2TiCIsInNzZXRtbjsiOiLiiJYiLCJzc21pbGU7Ijoi4oyjIiwic3N0YXJmOyI6IuKLhiIsIlN0YXI7Ijoi4ouGIiwic3RhcjsiOiLimIYiLCJzdGFyZjsiOiLimIUiLCJzdHJhaWdodGVwc2lsb247Ijoiz7UiLCJzdHJhaWdodHBoaTsiOiLPlSIsInN0cm5zOyI6IsKvIiwiU3ViOyI6IuKLkCIsInN1YjsiOiLiioIiLCJzdWJkb3Q7Ijoi4qq9Iiwic3ViRTsiOiLiq4UiLCJzdWJlOyI6IuKKhiIsInN1YmVkb3Q7Ijoi4quDIiwic3VibXVsdDsiOiLiq4EiLCJzdWJuRTsiOiLiq4siLCJzdWJuZTsiOiLiiooiLCJzdWJwbHVzOyI6IuKqvyIsInN1YnJhcnI7Ijoi4qW5IiwiU3Vic2V0OyI6IuKLkCIsInN1YnNldDsiOiLiioIiLCJzdWJzZXRlcTsiOiLiioYiLCJzdWJzZXRlcXE7Ijoi4quFIiwiU3Vic2V0RXF1YWw7Ijoi4oqGIiwic3Vic2V0bmVxOyI6IuKKiiIsInN1YnNldG5lcXE7Ijoi4quLIiwic3Vic2ltOyI6IuKrhyIsInN1YnN1YjsiOiLiq5UiLCJzdWJzdXA7Ijoi4quTIiwic3VjYzsiOiLiibsiLCJzdWNjYXBwcm94OyI6IuKquCIsInN1Y2NjdXJseWVxOyI6IuKJvSIsIlN1Y2NlZWRzOyI6IuKJuyIsIlN1Y2NlZWRzRXF1YWw7Ijoi4qqwIiwiU3VjY2VlZHNTbGFudEVxdWFsOyI6IuKJvSIsIlN1Y2NlZWRzVGlsZGU7Ijoi4om/Iiwic3VjY2VxOyI6IuKqsCIsInN1Y2NuYXBwcm94OyI6IuKquiIsInN1Y2NuZXFxOyI6IuKqtiIsInN1Y2Nuc2ltOyI6IuKLqSIsInN1Y2NzaW07Ijoi4om/IiwiU3VjaFRoYXQ7Ijoi4oiLIiwiU3VtOyI6IuKIkSIsInN1bTsiOiLiiJEiLCJzdW5nOyI6IuKZqiIsIlN1cDsiOiLii5EiLCJzdXA7Ijoi4oqDIiwic3VwMTsiOiLCuSIsc3VwMToiwrkiLCJzdXAyOyI6IsKyIixzdXAyOiLCsiIsInN1cDM7IjoiwrMiLHN1cDM6IsKzIiwic3VwZG90OyI6IuKqviIsInN1cGRzdWI7Ijoi4quYIiwic3VwRTsiOiLiq4YiLCJzdXBlOyI6IuKKhyIsInN1cGVkb3Q7Ijoi4quEIiwiU3VwZXJzZXQ7Ijoi4oqDIiwiU3VwZXJzZXRFcXVhbDsiOiLiiociLCJzdXBoc29sOyI6IuKfiSIsInN1cGhzdWI7Ijoi4quXIiwic3VwbGFycjsiOiLipbsiLCJzdXBtdWx0OyI6IuKrgiIsInN1cG5FOyI6IuKrjCIsInN1cG5lOyI6IuKKiyIsInN1cHBsdXM7Ijoi4quAIiwiU3Vwc2V0OyI6IuKLkSIsInN1cHNldDsiOiLiioMiLCJzdXBzZXRlcTsiOiLiiociLCJzdXBzZXRlcXE7Ijoi4quGIiwic3Vwc2V0bmVxOyI6IuKKiyIsInN1cHNldG5lcXE7Ijoi4quMIiwic3Vwc2ltOyI6IuKriCIsInN1cHN1YjsiOiLiq5QiLCJzdXBzdXA7Ijoi4quWIiwic3dhcmhrOyI6IuKkpiIsInN3QXJyOyI6IuKHmSIsInN3YXJyOyI6IuKGmSIsInN3YXJyb3c7Ijoi4oaZIiwic3dud2FyOyI6IuKkqiIsInN6bGlnOyI6IsOfIixzemxpZzoiw58iLCJUYWI7IjoiCSIsInRhcmdldDsiOiLijJYiLCJUYXU7IjoizqQiLCJ0YXU7Ijoiz4QiLCJ0YnJrOyI6IuKOtCIsIlRjYXJvbjsiOiLFpCIsInRjYXJvbjsiOiLFpSIsIlRjZWRpbDsiOiLFoiIsInRjZWRpbDsiOiLFoyIsIlRjeTsiOiLQoiIsInRjeTsiOiLRgiIsInRkb3Q7Ijoi4oObIiwidGVscmVjOyI6IuKMlSIsIlRmcjsiOiLwnZSXIiwidGZyOyI6IvCdlLEiLCJ0aGVyZTQ7Ijoi4oi0IiwiVGhlcmVmb3JlOyI6IuKItCIsInRoZXJlZm9yZTsiOiLiiLQiLCJUaGV0YTsiOiLOmCIsInRoZXRhOyI6Is64IiwidGhldGFzeW07Ijoiz5EiLCJ0aGV0YXY7Ijoiz5EiLCJ0aGlja2FwcHJveDsiOiLiiYgiLCJ0aGlja3NpbTsiOiLiiLwiLCJUaGlja1NwYWNlOyI6IuKBn+KAiiIsInRoaW5zcDsiOiLigIkiLCJUaGluU3BhY2U7Ijoi4oCJIiwidGhrYXA7Ijoi4omIIiwidGhrc2ltOyI6IuKIvCIsIlRIT1JOOyI6IsOeIixUSE9STjoiw54iLCJ0aG9ybjsiOiLDviIsdGhvcm46IsO+IiwiVGlsZGU7Ijoi4oi8IiwidGlsZGU7Ijoiy5wiLCJUaWxkZUVxdWFsOyI6IuKJgyIsIlRpbGRlRnVsbEVxdWFsOyI6IuKJhSIsIlRpbGRlVGlsZGU7Ijoi4omIIiwidGltZXM7Ijoiw5ciLHRpbWVzOiLDlyIsInRpbWVzYjsiOiLiiqAiLCJ0aW1lc2JhcjsiOiLiqLEiLCJ0aW1lc2Q7Ijoi4qiwIiwidGludDsiOiLiiK0iLCJ0b2VhOyI6IuKkqCIsInRvcDsiOiLiiqQiLCJ0b3Bib3Q7Ijoi4oy2IiwidG9wY2lyOyI6IuKrsSIsIlRvcGY7Ijoi8J2ViyIsInRvcGY7Ijoi8J2VpSIsInRvcGZvcms7Ijoi4quaIiwidG9zYTsiOiLipKkiLCJ0cHJpbWU7Ijoi4oC0IiwiVFJBREU7Ijoi4oSiIiwidHJhZGU7Ijoi4oSiIiwidHJpYW5nbGU7Ijoi4pa1IiwidHJpYW5nbGVkb3duOyI6IuKWvyIsInRyaWFuZ2xlbGVmdDsiOiLil4MiLCJ0cmlhbmdsZWxlZnRlcTsiOiLiirQiLCJ0cmlhbmdsZXE7Ijoi4omcIiwidHJpYW5nbGVyaWdodDsiOiLilrkiLCJ0cmlhbmdsZXJpZ2h0ZXE7Ijoi4oq1IiwidHJpZG90OyI6IuKXrCIsInRyaWU7Ijoi4omcIiwidHJpbWludXM7Ijoi4qi6IiwiVHJpcGxlRG90OyI6IuKDmyIsInRyaXBsdXM7Ijoi4qi5IiwidHJpc2I7Ijoi4qeNIiwidHJpdGltZTsiOiLiqLsiLCJ0cnBleml1bTsiOiLij6IiLCJUc2NyOyI6IvCdkq8iLCJ0c2NyOyI6IvCdk4kiLCJUU2N5OyI6ItCmIiwidHNjeTsiOiLRhiIsIlRTSGN5OyI6ItCLIiwidHNoY3k7Ijoi0ZsiLCJUc3Ryb2s7IjoixaYiLCJ0c3Ryb2s7IjoixaciLCJ0d2l4dDsiOiLiiawiLCJ0d29oZWFkbGVmdGFycm93OyI6IuKGniIsInR3b2hlYWRyaWdodGFycm93OyI6IuKGoCIsIlVhY3V0ZTsiOiLDmiIsVWFjdXRlOiLDmiIsInVhY3V0ZTsiOiLDuiIsdWFjdXRlOiLDuiIsIlVhcnI7Ijoi4oafIiwidUFycjsiOiLih5EiLCJ1YXJyOyI6IuKGkSIsIlVhcnJvY2lyOyI6IuKliSIsIlVicmN5OyI6ItCOIiwidWJyY3k7Ijoi0Z4iLCJVYnJldmU7IjoixawiLCJ1YnJldmU7Ijoixa0iLCJVY2lyYzsiOiLDmyIsVWNpcmM6IsObIiwidWNpcmM7Ijoiw7siLHVjaXJjOiLDuyIsIlVjeTsiOiLQoyIsInVjeTsiOiLRgyIsInVkYXJyOyI6IuKHhSIsIlVkYmxhYzsiOiLFsCIsInVkYmxhYzsiOiLFsSIsInVkaGFyOyI6IuKlriIsInVmaXNodDsiOiLipb4iLCJVZnI7Ijoi8J2UmCIsInVmcjsiOiLwnZSyIiwiVWdyYXZlOyI6IsOZIixVZ3JhdmU6IsOZIiwidWdyYXZlOyI6IsO5Iix1Z3JhdmU6IsO5IiwidUhhcjsiOiLipaMiLCJ1aGFybDsiOiLihr8iLCJ1aGFycjsiOiLihr4iLCJ1aGJsazsiOiLiloAiLCJ1bGNvcm47Ijoi4oycIiwidWxjb3JuZXI7Ijoi4oycIiwidWxjcm9wOyI6IuKMjyIsInVsdHJpOyI6IuKXuCIsIlVtYWNyOyI6IsWqIiwidW1hY3I7IjoixasiLCJ1bWw7IjoiwqgiLHVtbDoiwqgiLCJVbmRlckJhcjsiOiJfIiwiVW5kZXJCcmFjZTsiOiLij58iLCJVbmRlckJyYWNrZXQ7Ijoi4o61IiwiVW5kZXJQYXJlbnRoZXNpczsiOiLij50iLCJVbmlvbjsiOiLii4MiLCJVbmlvblBsdXM7Ijoi4oqOIiwiVW9nb247IjoixbIiLCJ1b2dvbjsiOiLFsyIsIlVvcGY7Ijoi8J2VjCIsInVvcGY7Ijoi8J2VpiIsIlVwQXJyb3c7Ijoi4oaRIiwiVXBhcnJvdzsiOiLih5EiLCJ1cGFycm93OyI6IuKGkSIsIlVwQXJyb3dCYXI7Ijoi4qSSIiwiVXBBcnJvd0Rvd25BcnJvdzsiOiLih4UiLCJVcERvd25BcnJvdzsiOiLihpUiLCJVcGRvd25hcnJvdzsiOiLih5UiLCJ1cGRvd25hcnJvdzsiOiLihpUiLCJVcEVxdWlsaWJyaXVtOyI6IuKlriIsInVwaGFycG9vbmxlZnQ7Ijoi4oa/IiwidXBoYXJwb29ucmlnaHQ7Ijoi4oa+IiwidXBsdXM7Ijoi4oqOIiwiVXBwZXJMZWZ0QXJyb3c7Ijoi4oaWIiwiVXBwZXJSaWdodEFycm93OyI6IuKGlyIsIlVwc2k7Ijoiz5IiLCJ1cHNpOyI6Is+FIiwidXBzaWg7Ijoiz5IiLCJVcHNpbG9uOyI6Is6lIiwidXBzaWxvbjsiOiLPhSIsIlVwVGVlOyI6IuKKpSIsIlVwVGVlQXJyb3c7Ijoi4oalIiwidXB1cGFycm93czsiOiLih4giLCJ1cmNvcm47Ijoi4oydIiwidXJjb3JuZXI7Ijoi4oydIiwidXJjcm9wOyI6IuKMjiIsIlVyaW5nOyI6IsWuIiwidXJpbmc7Ijoixa8iLCJ1cnRyaTsiOiLil7kiLCJVc2NyOyI6IvCdkrAiLCJ1c2NyOyI6IvCdk4oiLCJ1dGRvdDsiOiLii7AiLCJVdGlsZGU7IjoixagiLCJ1dGlsZGU7IjoixakiLCJ1dHJpOyI6IuKWtSIsInV0cmlmOyI6IuKWtCIsInV1YXJyOyI6IuKHiCIsIlV1bWw7Ijoiw5wiLFV1bWw6IsOcIiwidXVtbDsiOiLDvCIsdXVtbDoiw7wiLCJ1d2FuZ2xlOyI6IuKmpyIsInZhbmdydDsiOiLippwiLCJ2YXJlcHNpbG9uOyI6Is+1IiwidmFya2FwcGE7Ijoiz7AiLCJ2YXJub3RoaW5nOyI6IuKIhSIsInZhcnBoaTsiOiLPlSIsInZhcnBpOyI6Is+WIiwidmFycHJvcHRvOyI6IuKInSIsInZBcnI7Ijoi4oeVIiwidmFycjsiOiLihpUiLCJ2YXJyaG87Ijoiz7EiLCJ2YXJzaWdtYTsiOiLPgiIsInZhcnN1YnNldG5lcTsiOiLiiorvuIAiLCJ2YXJzdWJzZXRuZXFxOyI6IuKri++4gCIsInZhcnN1cHNldG5lcTsiOiLiiovvuIAiLCJ2YXJzdXBzZXRuZXFxOyI6IuKrjO+4gCIsInZhcnRoZXRhOyI6Is+RIiwidmFydHJpYW5nbGVsZWZ0OyI6IuKKsiIsInZhcnRyaWFuZ2xlcmlnaHQ7Ijoi4oqzIiwiVmJhcjsiOiLiq6siLCJ2QmFyOyI6IuKrqCIsInZCYXJ2OyI6IuKrqSIsIlZjeTsiOiLQkiIsInZjeTsiOiLQsiIsIlZEYXNoOyI6IuKKqyIsIlZkYXNoOyI6IuKKqSIsInZEYXNoOyI6IuKKqCIsInZkYXNoOyI6IuKKoiIsIlZkYXNobDsiOiLiq6YiLCJWZWU7Ijoi4ouBIiwidmVlOyI6IuKIqCIsInZlZWJhcjsiOiLiirsiLCJ2ZWVlcTsiOiLiiZoiLCJ2ZWxsaXA7Ijoi4ouuIiwiVmVyYmFyOyI6IuKAliIsInZlcmJhcjsiOiJ8IiwiVmVydDsiOiLigJYiLCJ2ZXJ0OyI6InwiLCJWZXJ0aWNhbEJhcjsiOiLiiKMiLCJWZXJ0aWNhbExpbmU7IjoifCIsIlZlcnRpY2FsU2VwYXJhdG9yOyI6IuKdmCIsIlZlcnRpY2FsVGlsZGU7Ijoi4omAIiwiVmVyeVRoaW5TcGFjZTsiOiLigIoiLCJWZnI7Ijoi8J2UmSIsInZmcjsiOiLwnZSzIiwidmx0cmk7Ijoi4oqyIiwidm5zdWI7Ijoi4oqC4oOSIiwidm5zdXA7Ijoi4oqD4oOSIiwiVm9wZjsiOiLwnZWNIiwidm9wZjsiOiLwnZWnIiwidnByb3A7Ijoi4oidIiwidnJ0cmk7Ijoi4oqzIiwiVnNjcjsiOiLwnZKxIiwidnNjcjsiOiLwnZOLIiwidnN1Ym5FOyI6IuKri++4gCIsInZzdWJuZTsiOiLiiorvuIAiLCJ2c3VwbkU7Ijoi4quM77iAIiwidnN1cG5lOyI6IuKKi++4gCIsIlZ2ZGFzaDsiOiLiiqoiLCJ2emlnemFnOyI6IuKmmiIsIldjaXJjOyI6IsW0Iiwid2NpcmM7IjoixbUiLCJ3ZWRiYXI7Ijoi4qmfIiwiV2VkZ2U7Ijoi4ouAIiwid2VkZ2U7Ijoi4oinIiwid2VkZ2VxOyI6IuKJmSIsIndlaWVycDsiOiLihJgiLCJXZnI7Ijoi8J2UmiIsIndmcjsiOiLwnZS0IiwiV29wZjsiOiLwnZWOIiwid29wZjsiOiLwnZWoIiwid3A7Ijoi4oSYIiwid3I7Ijoi4omAIiwid3JlYXRoOyI6IuKJgCIsIldzY3I7Ijoi8J2SsiIsIndzY3I7Ijoi8J2TjCIsInhjYXA7Ijoi4ouCIiwieGNpcmM7Ijoi4pevIiwieGN1cDsiOiLii4MiLCJ4ZHRyaTsiOiLilr0iLCJYZnI7Ijoi8J2UmyIsInhmcjsiOiLwnZS1IiwieGhBcnI7Ijoi4p+6IiwieGhhcnI7Ijoi4p+3IiwiWGk7Ijoizp4iLCJ4aTsiOiLOviIsInhsQXJyOyI6IuKfuCIsInhsYXJyOyI6IuKftSIsInhtYXA7Ijoi4p+8IiwieG5pczsiOiLii7siLCJ4b2RvdDsiOiLiqIAiLCJYb3BmOyI6IvCdlY8iLCJ4b3BmOyI6IvCdlakiLCJ4b3BsdXM7Ijoi4qiBIiwieG90aW1lOyI6IuKogiIsInhyQXJyOyI6IuKfuSIsInhyYXJyOyI6IuKftiIsIlhzY3I7Ijoi8J2SsyIsInhzY3I7Ijoi8J2TjSIsInhzcWN1cDsiOiLiqIYiLCJ4dXBsdXM7Ijoi4qiEIiwieHV0cmk7Ijoi4pazIiwieHZlZTsiOiLii4EiLCJ4d2VkZ2U7Ijoi4ouAIiwiWWFjdXRlOyI6IsOdIixZYWN1dGU6IsOdIiwieWFjdXRlOyI6IsO9Iix5YWN1dGU6IsO9IiwiWUFjeTsiOiLQryIsInlhY3k7Ijoi0Y8iLCJZY2lyYzsiOiLFtiIsInljaXJjOyI6IsW3IiwiWWN5OyI6ItCrIiwieWN5OyI6ItGLIiwieWVuOyI6IsKlIix5ZW46IsKlIiwiWWZyOyI6IvCdlJwiLCJ5ZnI7Ijoi8J2UtiIsIllJY3k7Ijoi0IciLCJ5aWN5OyI6ItGXIiwiWW9wZjsiOiLwnZWQIiwieW9wZjsiOiLwnZWqIiwiWXNjcjsiOiLwnZK0IiwieXNjcjsiOiLwnZOOIiwiWVVjeTsiOiLQriIsInl1Y3k7Ijoi0Y4iLCJZdW1sOyI6IsW4IiwieXVtbDsiOiLDvyIseXVtbDoiw78iLCJaYWN1dGU7IjoixbkiLCJ6YWN1dGU7IjoixboiLCJaY2Fyb247Ijoixb0iLCJ6Y2Fyb247Ijoixb4iLCJaY3k7Ijoi0JciLCJ6Y3k7Ijoi0LciLCJaZG90OyI6IsW7IiwiemRvdDsiOiLFvCIsInplZXRyZjsiOiLihKgiLCJaZXJvV2lkdGhTcGFjZTsiOiLigIsiLCJaZXRhOyI6Is6WIiwiemV0YTsiOiLOtiIsIlpmcjsiOiLihKgiLCJ6ZnI7Ijoi8J2UtyIsIlpIY3k7Ijoi0JYiLCJ6aGN5OyI6ItC2IiwiemlncmFycjsiOiLih50iLCJab3BmOyI6IuKEpCIsInpvcGY7Ijoi8J2VqyIsIlpzY3I7Ijoi8J2StSIsInpzY3I7Ijoi8J2TjyIsInp3ajsiOiLigI0iLCJ6d25qOyI6IuKAjCJ9O2Z1bmN0aW9uIFFlKGUsdCl7aWYoZS5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZVtuXSE9PXRbbl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbnUoZSx0KXt2YXIgbj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gbj4wP2UubGFzdEluZGV4T2YodCk9PT1uOm49PT0wP2U9PT10OiExfWZ1bmN0aW9uIFFhKGUsdCl7Zm9yKHZhciBuPSIiO3Q+MDspKHQmMSk9PT0xJiYobis9ZSksZSs9ZSx0PXQ+Pj4xO3JldHVybiBufXZhciBpdT05NyxydT0xMjIsYXU9NjUsc3U9OTAsb3U9NDgsbHU9NTc7ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbj1lLmNoYXJDb2RlQXQodCk7cmV0dXJuIGl1PD1uJiZuPD1ydXx8YXU8PW4mJm48PXN1fHxvdTw9biYmbjw9bHV9ZnVuY3Rpb24gbW4oZSl7cmV0dXJuIHR5cGVvZiBlPCJ1In1mdW5jdGlvbiB1dShlKXtpZihlKXJldHVybiB0eXBlb2YgZT09InN0cmluZyI/e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTplfTp7a2luZDoibWFya2Rvd24iLHZhbHVlOmUudmFsdWV9fXZhciBZYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgaT10aGlzO3RoaXMuaWQ9dCx0aGlzLl90YWdzPVtdLHRoaXMuX3RhZ01hcD17fSx0aGlzLl92YWx1ZVNldE1hcD17fSx0aGlzLl90YWdzPW4udGFnc3x8W10sdGhpcy5fZ2xvYmFsQXR0cmlidXRlcz1uLmdsb2JhbEF0dHJpYnV0ZXN8fFtdLHRoaXMuX3RhZ3MuZm9yRWFjaChmdW5jdGlvbihyKXtpLl90YWdNYXBbci5uYW1lLnRvTG93ZXJDYXNlKCldPXJ9KSxuLnZhbHVlU2V0cyYmbi52YWx1ZVNldHMuZm9yRWFjaChmdW5jdGlvbihyKXtpLl92YWx1ZVNldE1hcFtyLm5hbWVdPXIudmFsdWVzfSl9cmV0dXJuIGUucHJvdG90eXBlLmlzQXBwbGljYWJsZT1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSxlLnByb3RvdHlwZS5wcm92aWRlVGFncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90YWdzfSxlLnByb3RvdHlwZS5wcm92aWRlQXR0cmlidXRlcz1mdW5jdGlvbih0KXt2YXIgbj1bXSxpPWZ1bmN0aW9uKGEpe24ucHVzaChhKX0scj10aGlzLl90YWdNYXBbdC50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gciYmci5hdHRyaWJ1dGVzLmZvckVhY2goaSksdGhpcy5fZ2xvYmFsQXR0cmlidXRlcy5mb3JFYWNoKGkpLG59LGUucHJvdG90eXBlLnByb3ZpZGVWYWx1ZXM9ZnVuY3Rpb24odCxuKXt2YXIgaT10aGlzLHI9W107bj1uLnRvTG93ZXJDYXNlKCk7dmFyIGE9ZnVuY3Rpb24obyl7by5mb3JFYWNoKGZ1bmN0aW9uKGwpe2wubmFtZS50b0xvd2VyQ2FzZSgpPT09biYmKGwudmFsdWVzJiZsLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKHUpe3IucHVzaCh1KX0pLGwudmFsdWVTZXQmJmkuX3ZhbHVlU2V0TWFwW2wudmFsdWVTZXRdJiZpLl92YWx1ZVNldE1hcFtsLnZhbHVlU2V0XS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3IucHVzaCh1KX0pKX0pfSxzPXRoaXMuX3RhZ01hcFt0LnRvTG93ZXJDYXNlKCldO3JldHVybiBzJiZhKHMuYXR0cmlidXRlcyksYSh0aGlzLl9nbG9iYWxBdHRyaWJ1dGVzKSxyfSxlfSgpO2Z1bmN0aW9uIHR0KGUsdCxuKXt0PT09dm9pZCAwJiYodD17fSk7dmFyIGk9e2tpbmQ6bj8ibWFya2Rvd24iOiJwbGFpbnRleHQiLHZhbHVlOiIifTtpZihlLmRlc2NyaXB0aW9uJiZ0LmRvY3VtZW50YXRpb24hPT0hMSl7dmFyIHI9dXUoZS5kZXNjcmlwdGlvbik7ciYmKGkudmFsdWUrPXIudmFsdWUpfWlmKGUucmVmZXJlbmNlcyYmZS5yZWZlcmVuY2VzLmxlbmd0aD4wJiZ0LnJlZmVyZW5jZXMhPT0hMSYmKGkudmFsdWUubGVuZ3RoJiYoaS52YWx1ZSs9YAoKYCksbj9pLnZhbHVlKz1lLnJlZmVyZW5jZXMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiJbIi5jb25jYXQoYS5uYW1lLCJdKCIpLmNvbmNhdChhLnVybCwiKSIpfSkuam9pbigiIHwgIik6aS52YWx1ZSs9ZS5yZWZlcmVuY2VzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iIi5jb25jYXQoYS5uYW1lLCI6ICIpLmNvbmNhdChhLnVybCl9KS5qb2luKGAKYCkpLGkudmFsdWUhPT0iIilyZXR1cm4gaX12YXIgWmE9ZnVuY3Rpb24oZSx0LG4saSl7ZnVuY3Rpb24gcihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIG4/YTpuZXcgbihmdW5jdGlvbihzKXtzKGEpfSl9cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoZnVuY3Rpb24oYSxzKXtmdW5jdGlvbiBvKGMpe3RyeXt1KGkubmV4dChjKSl9Y2F0Y2goZCl7cyhkKX19ZnVuY3Rpb24gbChjKXt0cnl7dShpLnRocm93KGMpKX1jYXRjaChkKXtzKGQpfX1mdW5jdGlvbiB1KGMpe2MuZG9uZT9hKGMudmFsdWUpOnIoYy52YWx1ZSkudGhlbihvLGwpfXUoKGk9aS5hcHBseShlLFtdKSkubmV4dCgpKX0pfSxLYT1mdW5jdGlvbihlLHQpe3ZhciBuPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihhWzBdJjEpdGhyb3cgYVsxXTtyZXR1cm4gYVsxXX0sdHJ5czpbXSxvcHM6W119LGkscixhLHM7cmV0dXJuIHM9e25leHQ6bygwKSx0aHJvdzpvKDEpLHJldHVybjpvKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoc1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzO2Z1bmN0aW9uIG8odSl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBsKFt1LGNdKX19ZnVuY3Rpb24gbCh1KXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO247KXRyeXtpZihpPTEsciYmKGE9dVswXSYyP3IucmV0dXJuOnVbMF0/ci50aHJvd3x8KChhPXIucmV0dXJuKSYmYS5jYWxsKHIpLDApOnIubmV4dCkmJiEoYT1hLmNhbGwocix1WzFdKSkuZG9uZSlyZXR1cm4gYTtzd2l0Y2gocj0wLGEmJih1PVt1WzBdJjIsYS52YWx1ZV0pLHVbMF0pe2Nhc2UgMDpjYXNlIDE6YT11O2JyZWFrO2Nhc2UgNDpyZXR1cm4gbi5sYWJlbCsrLHt2YWx1ZTp1WzFdLGRvbmU6ITF9O2Nhc2UgNTpuLmxhYmVsKysscj11WzFdLHU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp1PW4ub3BzLnBvcCgpLG4udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGE9bi50cnlzLCEoYT1hLmxlbmd0aD4wJiZhW2EubGVuZ3RoLTFdKSYmKHVbMF09PT02fHx1WzBdPT09Mikpe249MDtjb250aW51ZX1pZih1WzBdPT09MyYmKCFhfHx1WzFdPmFbMF0mJnVbMV08YVszXSkpe24ubGFiZWw9dVsxXTticmVha31pZih1WzBdPT09NiYmbi5sYWJlbDxhWzFdKXtuLmxhYmVsPWFbMV0sYT11O2JyZWFrfWlmKGEmJm4ubGFiZWw8YVsyXSl7bi5sYWJlbD1hWzJdLG4ub3BzLnB1c2godSk7YnJlYWt9YVsyXSYmbi5vcHMucG9wKCksbi50cnlzLnBvcCgpO2NvbnRpbnVlfXU9dC5jYWxsKGUsbil9Y2F0Y2goYyl7dT1bNixjXSxyPTB9ZmluYWxseXtpPWE9MH1pZih1WzBdJjUpdGhyb3cgdVsxXTtyZXR1cm57dmFsdWU6dVswXT91WzFdOnZvaWQgMCxkb25lOiEwfX19LGN1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLnJlYWREaXJlY3Rvcnk9dCx0aGlzLmF0cmlidXRlQ29tcGxldGlvbnM9W119cmV0dXJuIGUucHJvdG90eXBlLm9uSHRtbEF0dHJpYnV0ZVZhbHVlPWZ1bmN0aW9uKHQpe2Z1KHQudGFnLHQuYXR0cmlidXRlKSYmdGhpcy5hdHJpYnV0ZUNvbXBsZXRpb25zLnB1c2godCl9LGUucHJvdG90eXBlLmNvbXB1dGVDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4pe3JldHVybiBaYSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaSxyLGEscyxvLGwsdSxjLGQsbTtyZXR1cm4gS2EodGhpcyxmdW5jdGlvbihmKXtzd2l0Y2goZi5sYWJlbCl7Y2FzZSAwOmk9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0scj0wLGE9dGhpcy5hdHJpYnV0ZUNvbXBsZXRpb25zLGYubGFiZWw9MTtjYXNlIDE6cmV0dXJuIHI8YS5sZW5ndGg/KHM9YVtyXSxvPWR1KHQuZ2V0VGV4dChzLnJhbmdlKSksbXUobyk/bz09PSIuInx8bz09PSIuLiI/KGkuaXNJbmNvbXBsZXRlPSEwLFszLDRdKTpbMywyXTpbMyw0XSk6WzMsNV07Y2FzZSAyOnJldHVybiBsPXB1KHMudmFsdWUsbyxzLnJhbmdlKSxbNCx0aGlzLnByb3ZpZGVQYXRoU3VnZ2VzdGlvbnMocy52YWx1ZSxsLHQsbildO2Nhc2UgMzpmb3IodT1mLnNlbnQoKSxjPTAsZD11O2M8ZC5sZW5ndGg7YysrKW09ZFtjXSxpLml0ZW1zLnB1c2gobSk7Zi5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gcisrLFszLDFdO2Nhc2UgNTpyZXR1cm5bMixpXX19KX0pfSxlLnByb3RvdHlwZS5wcm92aWRlUGF0aFN1Z2dlc3Rpb25zPWZ1bmN0aW9uKHQsbixpLHIpe3JldHVybiBaYSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYSxzLG8sbCx1LGMsZCxtLGY7cmV0dXJuIEthKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDppZihhPXQuc3Vic3RyaW5nKDAsdC5sYXN0SW5kZXhPZigiLyIpKzEpLHM9ci5yZXNvbHZlUmVmZXJlbmNlKGF8fCIuIixpLnVyaSksIXMpcmV0dXJuWzMsNF07Yi5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gYi50cnlzLnB1c2goWzEsMywsNF0pLG89W10sWzQsdGhpcy5yZWFkRGlyZWN0b3J5KHMpXTtjYXNlIDI6Zm9yKGw9Yi5zZW50KCksdT0wLGM9bDt1PGMubGVuZ3RoO3UrKylkPWNbdV0sbT1kWzBdLGY9ZFsxXSxtLmNoYXJDb2RlQXQoMCkhPT1odSYmby5wdXNoKGd1KG0sZj09PW9pLkRpcmVjdG9yeSxuKSk7cmV0dXJuWzIsb107Y2FzZSAzOnJldHVybiBiLnNlbnQoKSxbMyw0XTtjYXNlIDQ6cmV0dXJuWzIsW11dfX0pfSl9LGV9KCksaHU9NDY7ZnVuY3Rpb24gZHUoZSl7cmV0dXJuIFFlKGUsIiciKXx8UWUoZSwnIicpP2Uuc2xpY2UoMSwtMSk6ZX1mdW5jdGlvbiBtdShlKXtyZXR1cm4hKFFlKGUsImh0dHAiKXx8UWUoZSwiaHR0cHMiKXx8UWUoZSwiLy8iKSl9ZnVuY3Rpb24gZnUoZSx0KXtpZih0PT09InNyYyJ8fHQ9PT0iaHJlZiIpcmV0dXJuITA7dmFyIG49dnVbZV07cmV0dXJuIG4/dHlwZW9mIG49PSJzdHJpbmciP249PT10Om4uaW5kZXhPZih0KSE9PS0xOiExfWZ1bmN0aW9uIHB1KGUsdCxuKXt2YXIgaSxyPWUubGFzdEluZGV4T2YoIi8iKTtpZihyPT09LTEpaT1idShuLDEsLTEpO2Vsc2V7dmFyIGE9dC5zbGljZShyKzEpLHM9VXQobi5lbmQsLTEtYS5sZW5ndGgpLG89YS5pbmRleE9mKCIgIiksbD12b2lkIDA7byE9PS0xP2w9VXQocyxvKTpsPVV0KG4uZW5kLC0xKSxpPVkuY3JlYXRlKHMsbCl9cmV0dXJuIGl9ZnVuY3Rpb24gZ3UoZSx0LG4pe3JldHVybiB0PyhlPWUrIi8iLHtsYWJlbDplLGtpbmQ6YmUuRm9sZGVyLHRleHRFZGl0OnNlLnJlcGxhY2UobixlKSxjb21tYW5kOnt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9fSk6e2xhYmVsOmUsa2luZDpiZS5GaWxlLHRleHRFZGl0OnNlLnJlcGxhY2UobixlKX19ZnVuY3Rpb24gVXQoZSx0KXtyZXR1cm4gY2UuY3JlYXRlKGUubGluZSxlLmNoYXJhY3Rlcit0KX1mdW5jdGlvbiBidShlLHQsbil7dmFyIGk9VXQoZS5zdGFydCx0KSxyPVV0KGUuZW5kLG4pO3JldHVybiBZLmNyZWF0ZShpLHIpfXZhciB2dT17YToiaHJlZiIsYXJlYToiaHJlZiIsYm9keToiYmFja2dyb3VuZCIsZGVsOiJjaXRlIixmb3JtOiJhY3Rpb24iLGZyYW1lOlsic3JjIiwibG9uZ2Rlc2MiXSxpbWc6WyJzcmMiLCJsb25nZGVzYyJdLGluczoiY2l0ZSIsbGluazoiaHJlZiIsb2JqZWN0OiJkYXRhIixxOiJjaXRlIixzY3JpcHQ6InNyYyIsYXVkaW86InNyYyIsYnV0dG9uOiJmb3JtYWN0aW9uIixjb21tYW5kOiJpY29uIixlbWJlZDoic3JjIixodG1sOiJtYW5pZmVzdCIsaW5wdXQ6WyJzcmMiLCJmb3JtYWN0aW9uIl0sc291cmNlOiJzcmMiLHRyYWNrOiJzcmMiLHZpZGVvOlsic3JjIiwicG9zdGVyIl19LF91PWZ1bmN0aW9uKGUsdCxuLGkpe2Z1bmN0aW9uIHIoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBuP2E6bmV3IG4oZnVuY3Rpb24ocyl7cyhhKX0pfXJldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKGZ1bmN0aW9uKGEscyl7ZnVuY3Rpb24gbyhjKXt0cnl7dShpLm5leHQoYykpfWNhdGNoKGQpe3MoZCl9fWZ1bmN0aW9uIGwoYyl7dHJ5e3UoaS50aHJvdyhjKSl9Y2F0Y2goZCl7cyhkKX19ZnVuY3Rpb24gdShjKXtjLmRvbmU/YShjLnZhbHVlKTpyKGMudmFsdWUpLnRoZW4obyxsKX11KChpPWkuYXBwbHkoZSxbXSkpLm5leHQoKSl9KX0sd3U9ZnVuY3Rpb24oZSx0KXt2YXIgbj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoYVswXSYxKXRocm93IGFbMV07cmV0dXJuIGFbMV19LHRyeXM6W10sb3BzOltdfSxpLHIsYSxzO3JldHVybiBzPXtuZXh0Om8oMCksdGhyb3c6bygxKSxyZXR1cm46bygyKX0sdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmKHNbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscztmdW5jdGlvbiBvKHUpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gbChbdSxjXSl9fWZ1bmN0aW9uIGwodSl7aWYoaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtuOyl0cnl7aWYoaT0xLHImJihhPXVbMF0mMj9yLnJldHVybjp1WzBdP3IudGhyb3d8fCgoYT1yLnJldHVybikmJmEuY2FsbChyKSwwKTpyLm5leHQpJiYhKGE9YS5jYWxsKHIsdVsxXSkpLmRvbmUpcmV0dXJuIGE7c3dpdGNoKHI9MCxhJiYodT1bdVswXSYyLGEudmFsdWVdKSx1WzBdKXtjYXNlIDA6Y2FzZSAxOmE9dTticmVhaztjYXNlIDQ6cmV0dXJuIG4ubGFiZWwrKyx7dmFsdWU6dVsxXSxkb25lOiExfTtjYXNlIDU6bi5sYWJlbCsrLHI9dVsxXSx1PVswXTtjb250aW51ZTtjYXNlIDc6dT1uLm9wcy5wb3AoKSxuLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZihhPW4udHJ5cywhKGE9YS5sZW5ndGg+MCYmYVthLmxlbmd0aC0xXSkmJih1WzBdPT09Nnx8dVswXT09PTIpKXtuPTA7Y29udGludWV9aWYodVswXT09PTMmJighYXx8dVsxXT5hWzBdJiZ1WzFdPGFbM10pKXtuLmxhYmVsPXVbMV07YnJlYWt9aWYodVswXT09PTYmJm4ubGFiZWw8YVsxXSl7bi5sYWJlbD1hWzFdLGE9dTticmVha31pZihhJiZuLmxhYmVsPGFbMl0pe24ubGFiZWw9YVsyXSxuLm9wcy5wdXNoKHUpO2JyZWFrfWFbMl0mJm4ub3BzLnBvcCgpLG4udHJ5cy5wb3AoKTtjb250aW51ZX11PXQuY2FsbChlLG4pfWNhdGNoKGMpe3U9WzYsY10scj0wfWZpbmFsbHl7aT1hPTB9aWYodVswXSY1KXRocm93IHVbMV07cmV0dXJue3ZhbHVlOnVbMF0/dVsxXTp2b2lkIDAsZG9uZTohMH19fSx5dT1LbigpLHh1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3RoaXMubHNPcHRpb25zPXQsdGhpcy5kYXRhTWFuYWdlcj1uLHRoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0Q29tcGxldGlvblBhcnRpY2lwYW50cz1mdW5jdGlvbih0KXt0aGlzLmNvbXBsZXRpb25QYXJ0aWNpcGFudHM9dHx8W119LGUucHJvdG90eXBlLmRvQ29tcGxldGUyPWZ1bmN0aW9uKHQsbixpLHIsYSl7cmV0dXJuIF91KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzLG8sbCx1O3JldHVybiB3dSh0aGlzLGZ1bmN0aW9uKGMpe3N3aXRjaChjLmxhYmVsKXtjYXNlIDA6aWYoIXRoaXMubHNPcHRpb25zLmZpbGVTeXN0ZW1Qcm92aWRlcnx8IXRoaXMubHNPcHRpb25zLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRGlyZWN0b3J5KXJldHVyblsyLHRoaXMuZG9Db21wbGV0ZSh0LG4saSxhKV07cz1uZXcgY3UodGhpcy5sc09wdGlvbnMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWREaXJlY3RvcnkpLG89dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzLHRoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1bc10uY29uY2F0KG8pLGw9dGhpcy5kb0NvbXBsZXRlKHQsbixpLGEpLGMubGFiZWw9MTtjYXNlIDE6cmV0dXJuIGMudHJ5cy5wdXNoKFsxLCwzLDRdKSxbNCxzLmNvbXB1dGVDb21wbGV0aW9ucyh0LHIpXTtjYXNlIDI6cmV0dXJuIHU9Yy5zZW50KCksWzIse2lzSW5jb21wbGV0ZTpsLmlzSW5jb21wbGV0ZXx8dS5pc0luY29tcGxldGUsaXRlbXM6dS5pdGVtcy5jb25jYXQobC5pdGVtcyl9XTtjYXNlIDM6cmV0dXJuIHRoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1vLFs3XTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9LGUucHJvdG90eXBlLmRvQ29tcGxldGU9ZnVuY3Rpb24odCxuLGkscil7dmFyIGE9dGhpcy5fZG9Db21wbGV0ZSh0LG4saSxyKTtyZXR1cm4gdGhpcy5jb252ZXJ0Q29tcGxldGlvbkxpc3QoYSl9LGUucHJvdG90eXBlLl9kb0NvbXBsZXRlPWZ1bmN0aW9uKHQsbixpLHIpe3ZhciBhPXtpc0luY29tcGxldGU6ITEsaXRlbXM6W119LHM9dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzLG89dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhUHJvdmlkZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKEkpe3JldHVybiBJLmlzQXBwbGljYWJsZSh0Lmxhbmd1YWdlSWQpJiYoIXJ8fHJbSS5nZXRJZCgpXSE9PSExKX0pLGw9dGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCksdT10LmdldFRleHQoKSxjPXQub2Zmc2V0QXQobiksZD1pLmZpbmROb2RlQmVmb3JlKGMpO2lmKCFkKXJldHVybiBhO3ZhciBtPXdlKHUsZC5zdGFydCksZj0iIixiO2Z1bmN0aW9uIHAoSSx6KXtyZXR1cm4gej09PXZvaWQgMCYmKHo9YyksST5jJiYoST1jKSx7c3RhcnQ6dC5wb3NpdGlvbkF0KEkpLGVuZDp0LnBvc2l0aW9uQXQoeil9fWZ1bmN0aW9uIHcoSSx6KXt2YXIgQj1wKEkseik7cmV0dXJuIG8uZm9yRWFjaChmdW5jdGlvbihYKXtYLnByb3ZpZGVUYWdzKCkuZm9yRWFjaChmdW5jdGlvbihRKXthLml0ZW1zLnB1c2goe2xhYmVsOlEubmFtZSxraW5kOmJlLlByb3BlcnR5LGRvY3VtZW50YXRpb246dHQoUSx2b2lkIDAsbCksdGV4dEVkaXQ6c2UucmVwbGFjZShCLFEubmFtZSksaW5zZXJ0VGV4dEZvcm1hdDpSZS5QbGFpblRleHR9KX0pfSksYX1mdW5jdGlvbiB4KEkpe2Zvcih2YXIgej1JO3o+MDspe3ZhciBCPXUuY2hhckF0KHotMSk7aWYoYApccmAuaW5kZXhPZihCKT49MClyZXR1cm4gdS5zdWJzdHJpbmcoeixJKTtpZighZm4oQikpcmV0dXJuIG51bGw7ei0tfXJldHVybiB1LnN1YnN0cmluZygwLEkpfWZ1bmN0aW9uIF8oSSx6LEIpe0I9PT12b2lkIDAmJihCPWMpO3ZhciBYPXAoSSxCKSxRPWVzKHUsQixWLldpdGhpbkVuZFRhZyxVLkVuZFRhZ0Nsb3NlKT8iIjoiPiIsSj1kO2Zvcih6JiYoSj1KLnBhcmVudCk7Sjspe3ZhciBaPUoudGFnO2lmKFomJighSi5jbG9zZWR8fEouZW5kVGFnU3RhcnQmJkouZW5kVGFnU3RhcnQ+Yykpe3ZhciBmZT17bGFiZWw6Ii8iK1osa2luZDpiZS5Qcm9wZXJ0eSxmaWx0ZXJUZXh0OiIvIitaLHRleHRFZGl0OnNlLnJlcGxhY2UoWCwiLyIrWitRKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlBsYWluVGV4dH0sSGU9eChKLnN0YXJ0KSxZZT14KEktMSk7aWYoSGUhPT1udWxsJiZZZSE9PW51bGwmJkhlIT09WWUpe3ZhciB4ZT1IZSsiPC8iK1orUTtmZS50ZXh0RWRpdD1zZS5yZXBsYWNlKHAoSS0xLVllLmxlbmd0aCkseGUpLGZlLmZpbHRlclRleHQ9WWUrIjwvIitafXJldHVybiBhLml0ZW1zLnB1c2goZmUpLGF9Sj1KLnBhcmVudH1yZXR1cm4genx8by5mb3JFYWNoKGZ1bmN0aW9uKG50KXtudC5wcm92aWRlVGFncygpLmZvckVhY2goZnVuY3Rpb24oTWUpe2EuaXRlbXMucHVzaCh7bGFiZWw6Ii8iK01lLm5hbWUsa2luZDpiZS5Qcm9wZXJ0eSxkb2N1bWVudGF0aW9uOnR0KE1lLHZvaWQgMCxsKSxmaWx0ZXJUZXh0OiIvIitNZS5uYW1lK1EsdGV4dEVkaXQ6c2UucmVwbGFjZShYLCIvIitNZS5uYW1lK1EpLGluc2VydFRleHRGb3JtYXQ6UmUuUGxhaW5UZXh0fSl9KX0pLGF9ZnVuY3Rpb24geShJLHope2lmKHImJnIuaGlkZUF1dG9Db21wbGV0ZVByb3Bvc2FscylyZXR1cm4gYTtpZighZG4oeikpe3ZhciBCPXQucG9zaXRpb25BdChJKTthLml0ZW1zLnB1c2goe2xhYmVsOiI8LyIreisiPiIsa2luZDpiZS5Qcm9wZXJ0eSxmaWx0ZXJUZXh0OiI8LyIreisiPiIsdGV4dEVkaXQ6c2UuaW5zZXJ0KEIsIiQwPC8iK3orIj4iKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlNuaXBwZXR9KX1yZXR1cm4gYX1mdW5jdGlvbiBFKEkseil7cmV0dXJuIHcoSSx6KSxfKEksITAseiksYX1mdW5jdGlvbiBSKCl7dmFyIEk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZC5hdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHope0lbel09ITB9KSxJfWZ1bmN0aW9uIFAoSSx6KXt2YXIgQjt6PT09dm9pZCAwJiYoej1jKTtmb3IodmFyIFg9YztYPHomJnVbWF0hPT0iPCI7KVgrKzt2YXIgUT11LnN1YnN0cmluZyhJLHopLEo9cChJLFgpLFo9IiI7aWYoIWVzKHUseixWLkFmdGVyQXR0cmlidXRlTmFtZSxVLkRlbGltaXRlckFzc2lnbikpe3ZhciBmZT0oQj1yPy5hdHRyaWJ1dGVEZWZhdWx0VmFsdWUpIT09bnVsbCYmQiE9PXZvaWQgMD9COiJkb3VibGVxdW90ZXMiO2ZlPT09ImVtcHR5Ij9aPSI9JDEiOmZlPT09InNpbmdsZXF1b3RlcyI/Wj0iPSckMSciOlo9Jz0iJDEiJ312YXIgSGU9UigpO3JldHVybiBIZVtRXT0hMSxvLmZvckVhY2goZnVuY3Rpb24oWWUpe1llLnByb3ZpZGVBdHRyaWJ1dGVzKGYpLmZvckVhY2goZnVuY3Rpb24oeGUpe2lmKCFIZVt4ZS5uYW1lXSl7SGVbeGUubmFtZV09ITA7dmFyIG50PXhlLm5hbWUsTWU7eGUudmFsdWVTZXQhPT0idiImJloubGVuZ3RoJiYobnQ9bnQrWiwoeGUudmFsdWVTZXR8fHhlLm5hbWU9PT0ic3R5bGUiKSYmKE1lPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSksYS5pdGVtcy5wdXNoKHtsYWJlbDp4ZS5uYW1lLGtpbmQ6eGUudmFsdWVTZXQ9PT0iaGFuZGxlciI/YmUuRnVuY3Rpb246YmUuVmFsdWUsZG9jdW1lbnRhdGlvbjp0dCh4ZSx2b2lkIDAsbCksdGV4dEVkaXQ6c2UucmVwbGFjZShKLG50KSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlNuaXBwZXQsY29tbWFuZDpNZX0pfX0pfSksdihKLEhlKSxhfWZ1bmN0aW9uIHYoSSx6KXt2YXIgQj0iZGF0YS0iLFg9e307WFtCXT0iIi5jb25jYXQoQiwnJDE9IiQyIicpO2Z1bmN0aW9uIFEoSil7Si5hdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKFope1FlKFosQikmJiFYW1pdJiYheltaXSYmKFhbWl09WisnPSIkMSInKX0pLEouY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihaKXtyZXR1cm4gUShaKX0pfWkmJmkucm9vdHMuZm9yRWFjaChmdW5jdGlvbihKKXtyZXR1cm4gUShKKX0pLE9iamVjdC5rZXlzKFgpLmZvckVhY2goZnVuY3Rpb24oSil7cmV0dXJuIGEuaXRlbXMucHVzaCh7bGFiZWw6SixraW5kOmJlLlZhbHVlLHRleHRFZGl0OnNlLnJlcGxhY2UoSSxYW0pdKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlNuaXBwZXR9KX0pfWZ1bmN0aW9uIGcoSSx6KXt6PT09dm9pZCAwJiYoej1jKTt2YXIgQixYLFE7aWYoYz5JJiZjPD16JiZUdSh1W0ldKSl7dmFyIEo9SSsxLFo9ejt6PkkmJnVbei0xXT09PXVbSV0mJlotLTt2YXIgZmU9a3UodSxjLEopLEhlPUF1KHUsYyxaKTtCPXAoZmUsSGUpLFE9Yz49SiYmYzw9Wj91LnN1YnN0cmluZyhKLGMpOiIiLFg9ITF9ZWxzZSBCPXAoSSx6KSxRPXUuc3Vic3RyaW5nKEksYyksWD0hMDtpZihzLmxlbmd0aD4wKWZvcih2YXIgWWU9Zi50b0xvd2VyQ2FzZSgpLHhlPWIudG9Mb3dlckNhc2UoKSxudD1wKEkseiksTWU9MCxkcz1zO01lPGRzLmxlbmd0aDtNZSsrKXt2YXIgbXM9ZHNbTWVdO21zLm9uSHRtbEF0dHJpYnV0ZVZhbHVlJiZtcy5vbkh0bWxBdHRyaWJ1dGVWYWx1ZSh7ZG9jdW1lbnQ6dCxwb3NpdGlvbjpuLHRhZzpZZSxhdHRyaWJ1dGU6eGUsdmFsdWU6USxyYW5nZTpudH0pfXJldHVybiBvLmZvckVhY2goZnVuY3Rpb24oYWMpe2FjLnByb3ZpZGVWYWx1ZXMoZixiKS5mb3JFYWNoKGZ1bmN0aW9uKHBuKXt2YXIgZnM9WD8nIicrcG4ubmFtZSsnIic6cG4ubmFtZTthLml0ZW1zLnB1c2goe2xhYmVsOnBuLm5hbWUsZmlsdGVyVGV4dDpmcyxraW5kOmJlLlVuaXQsZG9jdW1lbnRhdGlvbjp0dChwbix2b2lkIDAsbCksdGV4dEVkaXQ6c2UucmVwbGFjZShCLGZzKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlBsYWluVGV4dH0pfSl9KSxTKCksYX1mdW5jdGlvbiBUKEkpe3JldHVybiBjPT09bS5nZXRUb2tlbkVuZCgpJiYoTj1tLnNjYW4oKSxOPT09SSYmbS5nZXRUb2tlbk9mZnNldCgpPT09Yyk/bS5nZXRUb2tlbkVuZCgpOmN9ZnVuY3Rpb24gcSgpe2Zvcih2YXIgST0wLHo9cztJPHoubGVuZ3RoO0krKyl7dmFyIEI9eltJXTtCLm9uSHRtbENvbnRlbnQmJkIub25IdG1sQ29udGVudCh7ZG9jdW1lbnQ6dCxwb3NpdGlvbjpufSl9cmV0dXJuIFMoKX1mdW5jdGlvbiBTKCl7Zm9yKHZhciBJPWMtMSx6PW4uY2hhcmFjdGVyO0k+PTAmJkh0KHUsSSk7KUktLSx6LS07aWYoST49MCYmdVtJXT09PSImIil7dmFyIEI9WS5jcmVhdGUoY2UuY3JlYXRlKG4ubGluZSx6LTEpLG4pO2Zvcih2YXIgWCBpbiB6dClpZihudShYLCI7Iikpe3ZhciBRPSImIitYO2EuaXRlbXMucHVzaCh7bGFiZWw6USxraW5kOmJlLktleXdvcmQsZG9jdW1lbnRhdGlvbjp5dSgiZW50aXR5LnByb3Bvc2UiLCJDaGFyYWN0ZXIgZW50aXR5IHJlcHJlc2VudGluZyAnIi5jb25jYXQoenRbWF0sIiciKSksdGV4dEVkaXQ6c2UucmVwbGFjZShCLFEpLGluc2VydFRleHRGb3JtYXQ6UmUuUGxhaW5UZXh0fSl9fXJldHVybiBhfWZ1bmN0aW9uIGsoSSx6KXt2YXIgQj1wKEkseik7YS5pdGVtcy5wdXNoKHtsYWJlbDoiIURPQ1RZUEUiLGtpbmQ6YmUuUHJvcGVydHksZG9jdW1lbnRhdGlvbjoiQSBwcmVhbWJsZSBmb3IgYW4gSFRNTCBkb2N1bWVudC4iLHRleHRFZGl0OnNlLnJlcGxhY2UoQiwiIURPQ1RZUEUgaHRtbD4iKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlBsYWluVGV4dH0pfWZvcih2YXIgTj1tLnNjYW4oKTtOIT09VS5FT1MmJm0uZ2V0VG9rZW5PZmZzZXQoKTw9Yzspe3N3aXRjaChOKXtjYXNlIFUuU3RhcnRUYWdPcGVuOmlmKG0uZ2V0VG9rZW5FbmQoKT09PWMpe3ZhciBEPVQoVS5TdGFydFRhZyk7cmV0dXJuIG4ubGluZT09PTAmJmsoYyxEKSxFKGMsRCl9YnJlYWs7Y2FzZSBVLlN0YXJ0VGFnOmlmKG0uZ2V0VG9rZW5PZmZzZXQoKTw9YyYmYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiB3KG0uZ2V0VG9rZW5PZmZzZXQoKSxtLmdldFRva2VuRW5kKCkpO2Y9bS5nZXRUb2tlblRleHQoKTticmVhaztjYXNlIFUuQXR0cmlidXRlTmFtZTppZihtLmdldFRva2VuT2Zmc2V0KCk8PWMmJmM8PW0uZ2V0VG9rZW5FbmQoKSlyZXR1cm4gUChtLmdldFRva2VuT2Zmc2V0KCksbS5nZXRUb2tlbkVuZCgpKTtiPW0uZ2V0VG9rZW5UZXh0KCk7YnJlYWs7Y2FzZSBVLkRlbGltaXRlckFzc2lnbjppZihtLmdldFRva2VuRW5kKCk9PT1jKXt2YXIgRD1UKFUuQXR0cmlidXRlVmFsdWUpO3JldHVybiBnKGMsRCl9YnJlYWs7Y2FzZSBVLkF0dHJpYnV0ZVZhbHVlOmlmKG0uZ2V0VG9rZW5PZmZzZXQoKTw9YyYmYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiBnKG0uZ2V0VG9rZW5PZmZzZXQoKSxtLmdldFRva2VuRW5kKCkpO2JyZWFrO2Nhc2UgVS5XaGl0ZXNwYWNlOmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSlzd2l0Y2gobS5nZXRTY2FubmVyU3RhdGUoKSl7Y2FzZSBWLkFmdGVyT3BlbmluZ1N0YXJ0VGFnOnZhciBIPW0uZ2V0VG9rZW5PZmZzZXQoKSxGPVQoVS5TdGFydFRhZyk7cmV0dXJuIEUoSCxGKTtjYXNlIFYuV2l0aGluVGFnOmNhc2UgVi5BZnRlckF0dHJpYnV0ZU5hbWU6cmV0dXJuIFAobS5nZXRUb2tlbkVuZCgpKTtjYXNlIFYuQmVmb3JlQXR0cmlidXRlVmFsdWU6cmV0dXJuIGcobS5nZXRUb2tlbkVuZCgpKTtjYXNlIFYuQWZ0ZXJPcGVuaW5nRW5kVGFnOnJldHVybiBfKG0uZ2V0VG9rZW5PZmZzZXQoKS0xLCExKTtjYXNlIFYuV2l0aGluQ29udGVudDpyZXR1cm4gcSgpfWJyZWFrO2Nhc2UgVS5FbmRUYWdPcGVuOmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSl7dmFyIEw9bS5nZXRUb2tlbk9mZnNldCgpKzEsQT1UKFUuRW5kVGFnKTtyZXR1cm4gXyhMLCExLEEpfWJyZWFrO2Nhc2UgVS5FbmRUYWc6aWYoYzw9bS5nZXRUb2tlbkVuZCgpKWZvcih2YXIgTT1tLmdldFRva2VuT2Zmc2V0KCktMTtNPj0wOyl7dmFyIFc9dS5jaGFyQXQoTSk7aWYoVz09PSIvIilyZXR1cm4gXyhNLCExLG0uZ2V0VG9rZW5FbmQoKSk7aWYoIWZuKFcpKWJyZWFrO00tLX1icmVhaztjYXNlIFUuU3RhcnRUYWdDbG9zZTppZihjPD1tLmdldFRva2VuRW5kKCkmJmYpcmV0dXJuIHkobS5nZXRUb2tlbkVuZCgpLGYpO2JyZWFrO2Nhc2UgVS5Db250ZW50OmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSlyZXR1cm4gcSgpO2JyZWFrO2RlZmF1bHQ6aWYoYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiBhO2JyZWFrfU49bS5zY2FuKCl9cmV0dXJuIGF9LGUucHJvdG90eXBlLmRvUXVvdGVDb21wbGV0ZT1mdW5jdGlvbih0LG4saSxyKXt2YXIgYSxzPXQub2Zmc2V0QXQobik7aWYoczw9MClyZXR1cm4gbnVsbDt2YXIgbz0oYT1yPy5hdHRyaWJ1dGVEZWZhdWx0VmFsdWUpIT09bnVsbCYmYSE9PXZvaWQgMD9hOiJkb3VibGVxdW90ZXMiO2lmKG89PT0iZW1wdHkiKXJldHVybiBudWxsO3ZhciBsPXQuZ2V0VGV4dCgpLmNoYXJBdChzLTEpO2lmKGwhPT0iPSIpcmV0dXJuIG51bGw7dmFyIHU9bz09PSJkb3VibGVxdW90ZXMiPyciJDEiJzoiJyQxJyIsYz1pLmZpbmROb2RlQmVmb3JlKHMpO2lmKGMmJmMuYXR0cmlidXRlcyYmYy5zdGFydDxzJiYoIWMuZW5kVGFnU3RhcnR8fGMuZW5kVGFnU3RhcnQ+cykpZm9yKHZhciBkPXdlKHQuZ2V0VGV4dCgpLGMuc3RhcnQpLG09ZC5zY2FuKCk7bSE9PVUuRU9TJiZkLmdldFRva2VuRW5kKCk8PXM7KXtpZihtPT09VS5BdHRyaWJ1dGVOYW1lJiZkLmdldFRva2VuRW5kKCk9PT1zLTEpcmV0dXJuIG09ZC5zY2FuKCksbSE9PVUuRGVsaW1pdGVyQXNzaWdufHwobT1kLnNjYW4oKSxtPT09VS5Vbmtub3dufHxtPT09VS5BdHRyaWJ1dGVWYWx1ZSk/bnVsbDp1O209ZC5zY2FuKCl9cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmRvVGFnQ29tcGxldGU9ZnVuY3Rpb24odCxuLGkpe3ZhciByPXQub2Zmc2V0QXQobik7aWYocjw9MClyZXR1cm4gbnVsbDt2YXIgYT10LmdldFRleHQoKS5jaGFyQXQoci0xKTtpZihhPT09Ij4iKXt2YXIgcz1pLmZpbmROb2RlQmVmb3JlKHIpO2lmKHMmJnMudGFnJiYhZG4ocy50YWcpJiZzLnN0YXJ0PHImJighcy5lbmRUYWdTdGFydHx8cy5lbmRUYWdTdGFydD5yKSlmb3IodmFyIG89d2UodC5nZXRUZXh0KCkscy5zdGFydCksbD1vLnNjYW4oKTtsIT09VS5FT1MmJm8uZ2V0VG9rZW5FbmQoKTw9cjspe2lmKGw9PT1VLlN0YXJ0VGFnQ2xvc2UmJm8uZ2V0VG9rZW5FbmQoKT09PXIpcmV0dXJuIiQwPC8iLmNvbmNhdChzLnRhZywiPiIpO2w9by5zY2FuKCl9fWVsc2UgaWYoYT09PSIvIil7Zm9yKHZhciBzPWkuZmluZE5vZGVCZWZvcmUocik7cyYmcy5jbG9zZWQmJiEocy5lbmRUYWdTdGFydCYmcy5lbmRUYWdTdGFydD5yKTspcz1zLnBhcmVudDtpZihzJiZzLnRhZylmb3IodmFyIG89d2UodC5nZXRUZXh0KCkscy5zdGFydCksbD1vLnNjYW4oKTtsIT09VS5FT1MmJm8uZ2V0VG9rZW5FbmQoKTw9cjspe2lmKGw9PT1VLkVuZFRhZ09wZW4mJm8uZ2V0VG9rZW5FbmQoKT09PXIpcmV0dXJuIiIuY29uY2F0KHMudGFnLCI+Iik7bD1vLnNjYW4oKX19cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmNvbnZlcnRDb21wbGV0aW9uTGlzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCl8fHQuaXRlbXMuZm9yRWFjaChmdW5jdGlvbihuKXtuLmRvY3VtZW50YXRpb24mJnR5cGVvZiBuLmRvY3VtZW50YXRpb24hPSJzdHJpbmciJiYobi5kb2N1bWVudGF0aW9uPXtraW5kOiJwbGFpbnRleHQiLHZhbHVlOm4uZG9jdW1lbnRhdGlvbi52YWx1ZX0pfSksdH0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRNYXJrZG93bj1mdW5jdGlvbigpe3ZhciB0LG4saTtpZighbW4odGhpcy5zdXBwb3J0c01hcmtkb3duKSl7aWYoIW1uKHRoaXMubHNPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcykpcmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bj0hMCx0aGlzLnN1cHBvcnRzTWFya2Rvd247dmFyIHI9KGk9KG49KHQ9dGhpcy5sc09wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LmNvbXBsZXRpb24pPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jb21wbGV0aW9uSXRlbSk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmRvY3VtZW50YXRpb25Gb3JtYXQ7dGhpcy5zdXBwb3J0c01hcmtkb3duPUFycmF5LmlzQXJyYXkocikmJnIuaW5kZXhPZihFZS5NYXJrZG93bikhPT0tMX1yZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3dufSxlfSgpO2Z1bmN0aW9uIFR1KGUpe3JldHVybi9eWyInXSokLy50ZXN0KGUpfWZ1bmN0aW9uIGZuKGUpe3JldHVybi9eXHMqJC8udGVzdChlKX1mdW5jdGlvbiBlcyhlLHQsbixpKXtmb3IodmFyIHI9d2UoZSx0LG4pLGE9ci5zY2FuKCk7YT09PVUuV2hpdGVzcGFjZTspYT1yLnNjYW4oKTtyZXR1cm4gYT09PWl9ZnVuY3Rpb24ga3UoZSx0LG4pe2Zvcig7dD5uJiYhZm4oZVt0LTFdKTspdC0tO3JldHVybiB0fWZ1bmN0aW9uIEF1KGUsdCxuKXtmb3IoO3Q8biYmIWZuKGVbdF0pOyl0Kys7cmV0dXJuIHR9dmFyIFN1PUtuKCksTHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dGhpcy5sc09wdGlvbnM9dCx0aGlzLmRhdGFNYW5hZ2VyPW59cmV0dXJuIGUucHJvdG90eXBlLmRvSG92ZXI9ZnVuY3Rpb24odCxuLGkscil7dmFyIGE9dGhpcy5jb252ZXJ0Q29udGVudHMuYmluZCh0aGlzKSxzPXRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpLG89dC5vZmZzZXRBdChuKSxsPWkuZmluZE5vZGVBdChvKSx1PXQuZ2V0VGV4dCgpO2lmKCFsfHwhbC50YWcpcmV0dXJuIG51bGw7dmFyIGM9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhUHJvdmlkZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKGspe3JldHVybiBrLmlzQXBwbGljYWJsZSh0Lmxhbmd1YWdlSWQpfSk7ZnVuY3Rpb24gZChrLE4sRCl7Zm9yKHZhciBIPWZ1bmN0aW9uKFcpe3ZhciBJPW51bGw7aWYoVy5wcm92aWRlVGFncygpLmZvckVhY2goZnVuY3Rpb24oeil7aWYoei5uYW1lLnRvTG93ZXJDYXNlKCk9PT1rLnRvTG93ZXJDYXNlKCkpe3ZhciBCPXR0KHoscixzKTtCfHwoQj17a2luZDpzPyJtYXJrZG93biI6InBsYWludGV4dCIsdmFsdWU6IiJ9KSxJPXtjb250ZW50czpCLHJhbmdlOk59fX0pLEkpcmV0dXJuIEkuY29udGVudHM9YShJLmNvbnRlbnRzKSx7dmFsdWU6SX19LEY9MCxMPWM7RjxMLmxlbmd0aDtGKyspe3ZhciBBPUxbRl0sTT1IKEEpO2lmKHR5cGVvZiBNPT0ib2JqZWN0IilyZXR1cm4gTS52YWx1ZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtKGssTixEKXtmb3IodmFyIEg9ZnVuY3Rpb24oVyl7dmFyIEk9bnVsbDtpZihXLnByb3ZpZGVBdHRyaWJ1dGVzKGspLmZvckVhY2goZnVuY3Rpb24oeil7aWYoTj09PXoubmFtZSYmei5kZXNjcmlwdGlvbil7dmFyIEI9dHQoeixyLHMpO0I/ST17Y29udGVudHM6QixyYW5nZTpEfTpJPW51bGx9fSksSSlyZXR1cm4gSS5jb250ZW50cz1hKEkuY29udGVudHMpLHt2YWx1ZTpJfX0sRj0wLEw9YztGPEwubGVuZ3RoO0YrKyl7dmFyIEE9TFtGXSxNPUgoQSk7aWYodHlwZW9mIE09PSJvYmplY3QiKXJldHVybiBNLnZhbHVlfXJldHVybiBudWxsfWZ1bmN0aW9uIGYoayxOLEQsSCl7Zm9yKHZhciBGPWZ1bmN0aW9uKEkpe3ZhciB6PW51bGw7aWYoSS5wcm92aWRlVmFsdWVzKGssTikuZm9yRWFjaChmdW5jdGlvbihCKXtpZihEPT09Qi5uYW1lJiZCLmRlc2NyaXB0aW9uKXt2YXIgWD10dChCLHIscyk7WD96PXtjb250ZW50czpYLHJhbmdlOkh9Ono9bnVsbH19KSx6KXJldHVybiB6LmNvbnRlbnRzPWEoei5jb250ZW50cykse3ZhbHVlOnp9fSxMPTAsQT1jO0w8QS5sZW5ndGg7TCsrKXt2YXIgTT1BW0xdLFc9RihNKTtpZih0eXBlb2YgVz09Im9iamVjdCIpcmV0dXJuIFcudmFsdWV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYihrLE4pe3ZhciBEPXgoayk7Zm9yKHZhciBIIGluIHp0KXt2YXIgRj1udWxsLEw9IiYiK0g7aWYoRD09PUwpe3ZhciBBPXp0W0hdLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksTT0iVSsiO2lmKEEubGVuZ3RoPDQpZm9yKHZhciBXPTQtQS5sZW5ndGgsST0wO0k8VzspTSs9IjAiLEkrPTE7TSs9QTt2YXIgej1TdSgiZW50aXR5LnByb3Bvc2UiLCJDaGFyYWN0ZXIgZW50aXR5IHJlcHJlc2VudGluZyAnIi5jb25jYXQoenRbSF0sIicsIHVuaWNvZGUgZXF1aXZhbGVudCAnIikuY29uY2F0KE0sIiciKSk7ej9GPXtjb250ZW50czp6LHJhbmdlOk59OkY9bnVsbH1pZihGKXJldHVybiBGLmNvbnRlbnRzPWEoRi5jb250ZW50cyksRn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBwKGssTil7Zm9yKHZhciBEPXdlKHQuZ2V0VGV4dCgpLE4pLEg9RC5zY2FuKCk7SCE9PVUuRU9TJiYoRC5nZXRUb2tlbkVuZCgpPG98fEQuZ2V0VG9rZW5FbmQoKT09PW8mJkghPT1rKTspSD1ELnNjYW4oKTtyZXR1cm4gSD09PWsmJm88PUQuZ2V0VG9rZW5FbmQoKT97c3RhcnQ6dC5wb3NpdGlvbkF0KEQuZ2V0VG9rZW5PZmZzZXQoKSksZW5kOnQucG9zaXRpb25BdChELmdldFRva2VuRW5kKCkpfTpudWxsfWZ1bmN0aW9uIHcoKXtmb3IodmFyIGs9by0xLE49bi5jaGFyYWN0ZXI7az49MCYmSHQodSxrKTspay0tLE4tLTtmb3IodmFyIEQ9aysxLEg9TjtIdCh1LEQpOylEKyssSCsrO2lmKGs+PTAmJnVba109PT0iJiIpe3ZhciBGPW51bGw7cmV0dXJuIHVbRF09PT0iOyI/Rj1ZLmNyZWF0ZShjZS5jcmVhdGUobi5saW5lLE4pLGNlLmNyZWF0ZShuLmxpbmUsSCsxKSk6Rj1ZLmNyZWF0ZShjZS5jcmVhdGUobi5saW5lLE4pLGNlLmNyZWF0ZShuLmxpbmUsSCkpLEZ9cmV0dXJuIG51bGx9ZnVuY3Rpb24geChrKXtmb3IodmFyIE49by0xLEQ9IiYiO04+PTAmJkh0KGssTik7KU4tLTtmb3IoTj1OKzE7SHQoayxOKTspRCs9a1tOXSxOKz0xO3JldHVybiBEKz0iOyIsRH1pZihsLmVuZFRhZ1N0YXJ0JiZvPj1sLmVuZFRhZ1N0YXJ0KXt2YXIgXz1wKFUuRW5kVGFnLGwuZW5kVGFnU3RhcnQpO3JldHVybiBfP2QobC50YWcsXyk6bnVsbH12YXIgeT1wKFUuU3RhcnRUYWcsbC5zdGFydCk7aWYoeSlyZXR1cm4gZChsLnRhZyx5KTt2YXIgRT1wKFUuQXR0cmlidXRlTmFtZSxsLnN0YXJ0KTtpZihFKXt2YXIgUj1sLnRhZyxQPXQuZ2V0VGV4dChFKTtyZXR1cm4gbShSLFAsRSl9dmFyIHY9dygpO2lmKHYpcmV0dXJuIGIodSx2KTtmdW5jdGlvbiBnKGssTil7Zm9yKHZhciBEPXdlKHQuZ2V0VGV4dCgpLGspLEg9RC5zY2FuKCksRj12b2lkIDA7SCE9PVUuRU9TJiZELmdldFRva2VuRW5kKCk8PU47KUg9RC5zY2FuKCksSD09PVUuQXR0cmlidXRlTmFtZSYmKEY9RC5nZXRUb2tlblRleHQoKSk7cmV0dXJuIEZ9dmFyIFQ9cChVLkF0dHJpYnV0ZVZhbHVlLGwuc3RhcnQpO2lmKFQpe3ZhciBSPWwudGFnLHE9Q3UodC5nZXRUZXh0KFQpKSxTPWcobC5zdGFydCx0Lm9mZnNldEF0KFQuc3RhcnQpKTtpZihTKXJldHVybiBmKFIsUyxxLFQpfXJldHVybiBudWxsfSxlLnByb3RvdHlwZS5jb252ZXJ0Q29udGVudHM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHQ7aWYoImtpbmQiaW4gdClyZXR1cm57a2luZDoicGxhaW50ZXh0Iix2YWx1ZTp0LnZhbHVlfTtpZihBcnJheS5pc0FycmF5KHQpKXQubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09InN0cmluZyI/bjpuLnZhbHVlfSk7ZWxzZSByZXR1cm4gdC52YWx1ZX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRNYXJrZG93bj1mdW5jdGlvbigpe3ZhciB0LG4saTtpZighbW4odGhpcy5zdXBwb3J0c01hcmtkb3duKSl7aWYoIW1uKHRoaXMubHNPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcykpcmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bj0hMCx0aGlzLnN1cHBvcnRzTWFya2Rvd247dmFyIHI9KGk9KG49KHQ9dGhpcy5sc09wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQudGV4dERvY3VtZW50KT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uaG92ZXIpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5jb250ZW50Rm9ybWF0O3RoaXMuc3VwcG9ydHNNYXJrZG93bj1BcnJheS5pc0FycmF5KHIpJiZyLmluZGV4T2YoRWUuTWFya2Rvd24pIT09LTF9cmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bn0sZX0oKTtmdW5jdGlvbiBDdShlKXtyZXR1cm4gZS5sZW5ndGg8PTE/ZS5yZXBsYWNlKC9bJyJdLywiIik6KChlWzBdPT09IicifHxlWzBdPT09JyInKSYmKGU9ZS5zbGljZSgxKSksKGVbZS5sZW5ndGgtMV09PT0iJyJ8fGVbZS5sZW5ndGgtMV09PT0nIicpJiYoZT1lLnNsaWNlKDAsLTEpKSxlKX1mdW5jdGlvbiBFdShlLHQpe3JldHVybiBlfXZhciB0czsoZnVuY3Rpb24oKXt2YXIgZT1bLCxmdW5jdGlvbihyKXtmdW5jdGlvbiBhKGwpe3RoaXMuX19wYXJlbnQ9bCx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PTAsdGhpcy5fX2luZGVudF9jb3VudD0tMSx0aGlzLl9fYWxpZ25tZW50X2NvdW50PTAsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXg9MCx0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ9MCx0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ9LTEsdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50PTAsdGhpcy5fX2l0ZW1zPVtdfWEucHJvdG90eXBlLmNsb25lX2VtcHR5PWZ1bmN0aW9uKCl7dmFyIGw9bmV3IGEodGhpcy5fX3BhcmVudCk7cmV0dXJuIGwuc2V0X2luZGVudCh0aGlzLl9faW5kZW50X2NvdW50LHRoaXMuX19hbGlnbm1lbnRfY291bnQpLGx9LGEucHJvdG90eXBlLml0ZW09ZnVuY3Rpb24obCl7cmV0dXJuIGw8MD90aGlzLl9faXRlbXNbdGhpcy5fX2l0ZW1zLmxlbmd0aCtsXTp0aGlzLl9faXRlbXNbbF19LGEucHJvdG90eXBlLmhhc19tYXRjaD1mdW5jdGlvbihsKXtmb3IodmFyIHU9dGhpcy5fX2l0ZW1zLmxlbmd0aC0xO3U+PTA7dS0tKWlmKHRoaXMuX19pdGVtc1t1XS5tYXRjaChsKSlyZXR1cm4hMDtyZXR1cm4hMX0sYS5wcm90b3R5cGUuc2V0X2luZGVudD1mdW5jdGlvbihsLHUpe3RoaXMuaXNfZW1wdHkoKSYmKHRoaXMuX19pbmRlbnRfY291bnQ9bHx8MCx0aGlzLl9fYWxpZ25tZW50X2NvdW50PXV8fDAsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc2l6ZSh0aGlzLl9faW5kZW50X2NvdW50LHRoaXMuX19hbGlnbm1lbnRfY291bnQpKX0sYS5wcm90b3R5cGUuX3NldF93cmFwX3BvaW50PWZ1bmN0aW9uKCl7dGhpcy5fX3BhcmVudC53cmFwX2xpbmVfbGVuZ3RoJiYodGhpcy5fX3dyYXBfcG9pbnRfaW5kZXg9dGhpcy5fX2l0ZW1zLmxlbmd0aCx0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ9dGhpcy5fX2NoYXJhY3Rlcl9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ9dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19pbmRlbnRfY291bnQsdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50PXRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9fYWxpZ25tZW50X2NvdW50KX0sYS5wcm90b3R5cGUuX3Nob3VsZF93cmFwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX193cmFwX3BvaW50X2luZGV4JiZ0aGlzLl9fY2hhcmFjdGVyX2NvdW50PnRoaXMuX19wYXJlbnQud3JhcF9saW5lX2xlbmd0aCYmdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50PnRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9fY2hhcmFjdGVyX2NvdW50fSxhLnByb3RvdHlwZS5fYWxsb3dfd3JhcD1mdW5jdGlvbigpe2lmKHRoaXMuX3Nob3VsZF93cmFwKCkpe3RoaXMuX19wYXJlbnQuYWRkX25ld19saW5lKCk7dmFyIGw9dGhpcy5fX3BhcmVudC5jdXJyZW50X2xpbmU7cmV0dXJuIGwuc2V0X2luZGVudCh0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQsdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50KSxsLl9faXRlbXM9dGhpcy5fX2l0ZW1zLnNsaWNlKHRoaXMuX193cmFwX3BvaW50X2luZGV4KSx0aGlzLl9faXRlbXM9dGhpcy5fX2l0ZW1zLnNsaWNlKDAsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgpLGwuX19jaGFyYWN0ZXJfY291bnQrPXRoaXMuX19jaGFyYWN0ZXJfY291bnQtdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50LHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9dGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50LGwuX19pdGVtc1swXT09PSIgIiYmKGwuX19pdGVtcy5zcGxpY2UoMCwxKSxsLl9fY2hhcmFjdGVyX2NvdW50LT0xKSwhMH1yZXR1cm4hMX0sYS5wcm90b3R5cGUuaXNfZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2l0ZW1zLmxlbmd0aD09PTB9LGEucHJvdG90eXBlLmxhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc19lbXB0eSgpP251bGw6dGhpcy5fX2l0ZW1zW3RoaXMuX19pdGVtcy5sZW5ndGgtMV19LGEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24obCl7dGhpcy5fX2l0ZW1zLnB1c2gobCk7dmFyIHU9bC5sYXN0SW5kZXhPZihgCmApO3UhPT0tMT90aGlzLl9fY2hhcmFjdGVyX2NvdW50PWwubGVuZ3RoLXU6dGhpcy5fX2NoYXJhY3Rlcl9jb3VudCs9bC5sZW5ndGh9LGEucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3ZhciBsPW51bGw7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8KGw9dGhpcy5fX2l0ZW1zLnBvcCgpLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPWwubGVuZ3RoKSxsfSxhLnByb3RvdHlwZS5fcmVtb3ZlX2luZGVudD1mdW5jdGlvbigpe3RoaXMuX19pbmRlbnRfY291bnQ+MCYmKHRoaXMuX19pbmRlbnRfY291bnQtPTEsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09dGhpcy5fX3BhcmVudC5pbmRlbnRfc2l6ZSl9LGEucHJvdG90eXBlLl9yZW1vdmVfd3JhcF9pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ+MCYmKHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudC09MSl9LGEucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGFzdCgpPT09IiAiOyl0aGlzLl9faXRlbXMucG9wKCksdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09MX0sYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgbD0iIjtyZXR1cm4gdGhpcy5pc19lbXB0eSgpP3RoaXMuX19wYXJlbnQuaW5kZW50X2VtcHR5X2xpbmVzJiYobD10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQpKToobD10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCksbCs9dGhpcy5fX2l0ZW1zLmpvaW4oIiIpKSxsfTtmdW5jdGlvbiBzKGwsdSl7dGhpcy5fX2NhY2hlPVsiIl0sdGhpcy5fX2luZGVudF9zaXplPWwuaW5kZW50X3NpemUsdGhpcy5fX2luZGVudF9zdHJpbmc9bC5pbmRlbnRfY2hhcixsLmluZGVudF93aXRoX3RhYnN8fCh0aGlzLl9faW5kZW50X3N0cmluZz1uZXcgQXJyYXkobC5pbmRlbnRfc2l6ZSsxKS5qb2luKGwuaW5kZW50X2NoYXIpKSx1PXV8fCIiLGwuaW5kZW50X2xldmVsPjAmJih1PW5ldyBBcnJheShsLmluZGVudF9sZXZlbCsxKS5qb2luKHRoaXMuX19pbmRlbnRfc3RyaW5nKSksdGhpcy5fX2Jhc2Vfc3RyaW5nPXUsdGhpcy5fX2Jhc2Vfc3RyaW5nX2xlbmd0aD11Lmxlbmd0aH1zLnByb3RvdHlwZS5nZXRfaW5kZW50X3NpemU9ZnVuY3Rpb24obCx1KXt2YXIgYz10aGlzLl9fYmFzZV9zdHJpbmdfbGVuZ3RoO3JldHVybiB1PXV8fDAsbDwwJiYoYz0wKSxjKz1sKnRoaXMuX19pbmRlbnRfc2l6ZSxjKz11LGN9LHMucHJvdG90eXBlLmdldF9pbmRlbnRfc3RyaW5nPWZ1bmN0aW9uKGwsdSl7dmFyIGM9dGhpcy5fX2Jhc2Vfc3RyaW5nO3JldHVybiB1PXV8fDAsbDwwJiYobD0wLGM9IiIpLHUrPWwqdGhpcy5fX2luZGVudF9zaXplLHRoaXMuX19lbnN1cmVfY2FjaGUodSksYys9dGhpcy5fX2NhY2hlW3VdLGN9LHMucHJvdG90eXBlLl9fZW5zdXJlX2NhY2hlPWZ1bmN0aW9uKGwpe2Zvcig7bD49dGhpcy5fX2NhY2hlLmxlbmd0aDspdGhpcy5fX2FkZF9jb2x1bW4oKX0scy5wcm90b3R5cGUuX19hZGRfY29sdW1uPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5fX2NhY2hlLmxlbmd0aCx1PTAsYz0iIjt0aGlzLl9faW5kZW50X3NpemUmJmw+PXRoaXMuX19pbmRlbnRfc2l6ZSYmKHU9TWF0aC5mbG9vcihsL3RoaXMuX19pbmRlbnRfc2l6ZSksbC09dSp0aGlzLl9faW5kZW50X3NpemUsYz1uZXcgQXJyYXkodSsxKS5qb2luKHRoaXMuX19pbmRlbnRfc3RyaW5nKSksbCYmKGMrPW5ldyBBcnJheShsKzEpLmpvaW4oIiAiKSksdGhpcy5fX2NhY2hlLnB1c2goYyl9O2Z1bmN0aW9uIG8obCx1KXt0aGlzLl9faW5kZW50X2NhY2hlPW5ldyBzKGwsdSksdGhpcy5yYXc9ITEsdGhpcy5fZW5kX3dpdGhfbmV3bGluZT1sLmVuZF93aXRoX25ld2xpbmUsdGhpcy5pbmRlbnRfc2l6ZT1sLmluZGVudF9zaXplLHRoaXMud3JhcF9saW5lX2xlbmd0aD1sLndyYXBfbGluZV9sZW5ndGgsdGhpcy5pbmRlbnRfZW1wdHlfbGluZXM9bC5pbmRlbnRfZW1wdHlfbGluZXMsdGhpcy5fX2xpbmVzPVtdLHRoaXMucHJldmlvdXNfbGluZT1udWxsLHRoaXMuY3VycmVudF9saW5lPW51bGwsdGhpcy5uZXh0X2xpbmU9bmV3IGEodGhpcyksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPSExLHRoaXMuX19hZGRfb3V0cHV0bGluZSgpfW8ucHJvdG90eXBlLl9fYWRkX291dHB1dGxpbmU9ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5jdXJyZW50X2xpbmUsdGhpcy5jdXJyZW50X2xpbmU9dGhpcy5uZXh0X2xpbmUuY2xvbmVfZW1wdHkoKSx0aGlzLl9fbGluZXMucHVzaCh0aGlzLmN1cnJlbnRfbGluZSl9LG8ucHJvdG90eXBlLmdldF9saW5lX251bWJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbGluZXMubGVuZ3RofSxvLnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZz1mdW5jdGlvbihsLHUpe3JldHVybiB0aGlzLl9faW5kZW50X2NhY2hlLmdldF9pbmRlbnRfc3RyaW5nKGwsdSl9LG8ucHJvdG90eXBlLmdldF9pbmRlbnRfc2l6ZT1mdW5jdGlvbihsLHUpe3JldHVybiB0aGlzLl9faW5kZW50X2NhY2hlLmdldF9pbmRlbnRfc2l6ZShsLHUpfSxvLnByb3RvdHlwZS5pc19lbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnByZXZpb3VzX2xpbmUmJnRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCl9LG8ucHJvdG90eXBlLmFkZF9uZXdfbGluZT1mdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5pc19lbXB0eSgpfHwhbCYmdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKT8hMToodGhpcy5yYXd8fHRoaXMuX19hZGRfb3V0cHV0bGluZSgpLCEwKX0sby5wcm90b3R5cGUuZ2V0X2NvZGU9ZnVuY3Rpb24obCl7dGhpcy50cmltKCEwKTt2YXIgdT10aGlzLmN1cnJlbnRfbGluZS5wb3AoKTt1JiYodVt1Lmxlbmd0aC0xXT09PWAKYCYmKHU9dS5yZXBsYWNlKC9cbiskL2csIiIpKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKHUpKSx0aGlzLl9lbmRfd2l0aF9uZXdsaW5lJiZ0aGlzLl9fYWRkX291dHB1dGxpbmUoKTt2YXIgYz10aGlzLl9fbGluZXMuam9pbihgCmApO3JldHVybiBsIT09YApgJiYoYz1jLnJlcGxhY2UoL1tcbl0vZyxsKSksY30sby5wcm90b3R5cGUuc2V0X3dyYXBfcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRfbGluZS5fc2V0X3dyYXBfcG9pbnQoKX0sby5wcm90b3R5cGUuc2V0X2luZGVudD1mdW5jdGlvbihsLHUpe3JldHVybiBsPWx8fDAsdT11fHwwLHRoaXMubmV4dF9saW5lLnNldF9pbmRlbnQobCx1KSx0aGlzLl9fbGluZXMubGVuZ3RoPjE/KHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQobCx1KSwhMCk6KHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQoKSwhMSl9LG8ucHJvdG90eXBlLmFkZF9yYXdfdG9rZW49ZnVuY3Rpb24obCl7Zm9yKHZhciB1PTA7dTxsLm5ld2xpbmVzO3UrKyl0aGlzLl9fYWRkX291dHB1dGxpbmUoKTt0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KC0xKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGwud2hpdGVzcGFjZV9iZWZvcmUpLHRoaXMuY3VycmVudF9saW5lLnB1c2gobC50ZXh0KSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9ITF9LG8ucHJvdG90eXBlLmFkZF90b2tlbj1mdW5jdGlvbihsKXt0aGlzLl9fYWRkX3NwYWNlX2JlZm9yZV90b2tlbigpLHRoaXMuY3VycmVudF9saW5lLnB1c2gobCksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPXRoaXMuY3VycmVudF9saW5lLl9hbGxvd193cmFwKCl9LG8ucHJvdG90eXBlLl9fYWRkX3NwYWNlX2JlZm9yZV90b2tlbj1mdW5jdGlvbigpe3RoaXMuc3BhY2VfYmVmb3JlX3Rva2VuJiYhdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKSYmKHRoaXMubm9uX2JyZWFraW5nX3NwYWNlfHx0aGlzLnNldF93cmFwX3BvaW50KCksdGhpcy5jdXJyZW50X2xpbmUucHVzaCgiICIpKX0sby5wcm90b3R5cGUucmVtb3ZlX2luZGVudD1mdW5jdGlvbihsKXtmb3IodmFyIHU9dGhpcy5fX2xpbmVzLmxlbmd0aDtsPHU7KXRoaXMuX19saW5lc1tsXS5fcmVtb3ZlX2luZGVudCgpLGwrKzt0aGlzLmN1cnJlbnRfbGluZS5fcmVtb3ZlX3dyYXBfaW5kZW50KCl9LG8ucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24obCl7Zm9yKGw9bD09PXZvaWQgMD8hMTpsLHRoaXMuY3VycmVudF9saW5lLnRyaW0oKTtsJiZ0aGlzLl9fbGluZXMubGVuZ3RoPjEmJnRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCk7KXRoaXMuX19saW5lcy5wb3AoKSx0aGlzLmN1cnJlbnRfbGluZT10aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aC0xXSx0aGlzLmN1cnJlbnRfbGluZS50cmltKCk7dGhpcy5wcmV2aW91c19saW5lPXRoaXMuX19saW5lcy5sZW5ndGg+MT90aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aC0yXTpudWxsfSxvLnByb3RvdHlwZS5qdXN0X2FkZGVkX25ld2xpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKX0sby5wcm90b3R5cGUuanVzdF9hZGRlZF9ibGFua2xpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc19lbXB0eSgpfHx0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpJiZ0aGlzLnByZXZpb3VzX2xpbmUuaXNfZW1wdHkoKX0sby5wcm90b3R5cGUuZW5zdXJlX2VtcHR5X2xpbmVfYWJvdmU9ZnVuY3Rpb24obCx1KXtmb3IodmFyIGM9dGhpcy5fX2xpbmVzLmxlbmd0aC0yO2M+PTA7KXt2YXIgZD10aGlzLl9fbGluZXNbY107aWYoZC5pc19lbXB0eSgpKWJyZWFrO2lmKGQuaXRlbSgwKS5pbmRleE9mKGwpIT09MCYmZC5pdGVtKC0xKSE9PXUpe3RoaXMuX19saW5lcy5zcGxpY2UoYysxLDAsbmV3IGEodGhpcykpLHRoaXMucHJldmlvdXNfbGluZT10aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aC0yXTticmVha31jLS19fSxyLmV4cG9ydHMuT3V0cHV0PW99LCwsLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEobCx1KXt0aGlzLnJhd19vcHRpb25zPXMobCx1KSx0aGlzLmRpc2FibGVkPXRoaXMuX2dldF9ib29sZWFuKCJkaXNhYmxlZCIpLHRoaXMuZW9sPXRoaXMuX2dldF9jaGFyYWN0ZXJzKCJlb2wiLCJhdXRvIiksdGhpcy5lbmRfd2l0aF9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJlbmRfd2l0aF9uZXdsaW5lIiksdGhpcy5pbmRlbnRfc2l6ZT10aGlzLl9nZXRfbnVtYmVyKCJpbmRlbnRfc2l6ZSIsNCksdGhpcy5pbmRlbnRfY2hhcj10aGlzLl9nZXRfY2hhcmFjdGVycygiaW5kZW50X2NoYXIiLCIgIiksdGhpcy5pbmRlbnRfbGV2ZWw9dGhpcy5fZ2V0X251bWJlcigiaW5kZW50X2xldmVsIiksdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfYm9vbGVhbigicHJlc2VydmVfbmV3bGluZXMiLCEwKSx0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfbnVtYmVyKCJtYXhfcHJlc2VydmVfbmV3bGluZXMiLDMyNzg2KSx0aGlzLnByZXNlcnZlX25ld2xpbmVzfHwodGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXM9MCksdGhpcy5pbmRlbnRfd2l0aF90YWJzPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfd2l0aF90YWJzIix0aGlzLmluZGVudF9jaGFyPT09IgkiKSx0aGlzLmluZGVudF93aXRoX3RhYnMmJih0aGlzLmluZGVudF9jaGFyPSIJIix0aGlzLmluZGVudF9zaXplPT09MSYmKHRoaXMuaW5kZW50X3NpemU9NCkpLHRoaXMud3JhcF9saW5lX2xlbmd0aD10aGlzLl9nZXRfbnVtYmVyKCJ3cmFwX2xpbmVfbGVuZ3RoIix0aGlzLl9nZXRfbnVtYmVyKCJtYXhfY2hhciIpKSx0aGlzLmluZGVudF9lbXB0eV9saW5lcz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2VtcHR5X2xpbmVzIiksdGhpcy50ZW1wbGF0aW5nPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgidGVtcGxhdGluZyIsWyJhdXRvIiwibm9uZSIsImRqYW5nbyIsImVyYiIsImhhbmRsZWJhcnMiLCJwaHAiLCJzbWFydHkiXSxbImF1dG8iXSl9YS5wcm90b3R5cGUuX2dldF9hcnJheT1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD11fHxbXTtyZXR1cm4gdHlwZW9mIGM9PSJvYmplY3QiP2MhPT1udWxsJiZ0eXBlb2YgYy5jb25jYXQ9PSJmdW5jdGlvbiImJihkPWMuY29uY2F0KCkpOnR5cGVvZiBjPT0ic3RyaW5nIiYmKGQ9Yy5zcGxpdCgvW15hLXpBLVowLTlfXC9cLV0rLykpLGR9LGEucHJvdG90eXBlLl9nZXRfYm9vbGVhbj1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD1jPT09dm9pZCAwPyEhdTohIWM7cmV0dXJuIGR9LGEucHJvdG90eXBlLl9nZXRfY2hhcmFjdGVycz1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD11fHwiIjtyZXR1cm4gdHlwZW9mIGM9PSJzdHJpbmciJiYoZD1jLnJlcGxhY2UoL1xcci8sIlxyIikucmVwbGFjZSgvXFxuLyxgCmApLnJlcGxhY2UoL1xcdC8sIgkiKSksZH0sYS5wcm90b3R5cGUuX2dldF9udW1iZXI9ZnVuY3Rpb24obCx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW2xdO3U9cGFyc2VJbnQodSwxMCksaXNOYU4odSkmJih1PTApO3ZhciBkPXBhcnNlSW50KGMsMTApO3JldHVybiBpc05hTihkKSYmKGQ9dSksZH0sYS5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb249ZnVuY3Rpb24obCx1LGMpe3ZhciBkPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdChsLHUsYyk7aWYoZC5sZW5ndGghPT0xKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrbCtgJyBjYW4gb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CmArdStgCllvdSBwYXNzZWQgaW46ICdgK3RoaXMucmF3X29wdGlvbnNbbF0rIiciKTtyZXR1cm4gZFswXX0sYS5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb25fbGlzdD1mdW5jdGlvbihsLHUsYyl7aWYoIXV8fHUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdGlvbiBsaXN0IGNhbm5vdCBiZSBlbXB0eS4iKTtpZihjPWN8fFt1WzBdXSwhdGhpcy5faXNfdmFsaWRfc2VsZWN0aW9uKGMsdSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERlZmF1bHQgVmFsdWUhIik7dmFyIGQ9dGhpcy5fZ2V0X2FycmF5KGwsYyk7aWYoIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihkLHUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrbCtgJyBjYW4gY29udGFpbiBvbmx5IHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpgK3UrYApZb3UgcGFzc2VkIGluOiAnYCt0aGlzLnJhd19vcHRpb25zW2xdKyInIik7cmV0dXJuIGR9LGEucHJvdG90eXBlLl9pc192YWxpZF9zZWxlY3Rpb249ZnVuY3Rpb24obCx1KXtyZXR1cm4gbC5sZW5ndGgmJnUubGVuZ3RoJiYhbC5zb21lKGZ1bmN0aW9uKGMpe3JldHVybiB1LmluZGV4T2YoYyk9PT0tMX0pfTtmdW5jdGlvbiBzKGwsdSl7dmFyIGM9e307bD1vKGwpO3ZhciBkO2ZvcihkIGluIGwpZCE9PXUmJihjW2RdPWxbZF0pO2lmKHUmJmxbdV0pZm9yKGQgaW4gbFt1XSljW2RdPWxbdV1bZF07cmV0dXJuIGN9ZnVuY3Rpb24gbyhsKXt2YXIgdT17fSxjO2ZvcihjIGluIGwpe3ZhciBkPWMucmVwbGFjZSgvLS9nLCJfIik7dVtkXT1sW2NdfXJldHVybiB1fXIuZXhwb3J0cy5PcHRpb25zPWEsci5leHBvcnRzLm5vcm1hbGl6ZU9wdHM9byxyLmV4cG9ydHMubWVyZ2VPcHRzPXN9LCxmdW5jdGlvbihyKXt2YXIgYT1SZWdFeHAucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzdGlja3kiKTtmdW5jdGlvbiBzKG8pe3RoaXMuX19pbnB1dD1vfHwiIix0aGlzLl9faW5wdXRfbGVuZ3RoPXRoaXMuX19pbnB1dC5sZW5ndGgsdGhpcy5fX3Bvc2l0aW9uPTB9cy5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj0wfSxzLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fX3Bvc2l0aW9uPjAmJih0aGlzLl9fcG9zaXRpb24tPTEpfSxzLnByb3RvdHlwZS5oYXNOZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wb3NpdGlvbjx0aGlzLl9faW5wdXRfbGVuZ3RofSxzLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIG89bnVsbDtyZXR1cm4gdGhpcy5oYXNOZXh0KCkmJihvPXRoaXMuX19pbnB1dC5jaGFyQXQodGhpcy5fX3Bvc2l0aW9uKSx0aGlzLl9fcG9zaXRpb24rPTEpLG99LHMucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24obyl7dmFyIGw9bnVsbDtyZXR1cm4gbz1vfHwwLG8rPXRoaXMuX19wb3NpdGlvbixvPj0wJiZvPHRoaXMuX19pbnB1dF9sZW5ndGgmJihsPXRoaXMuX19pbnB1dC5jaGFyQXQobykpLGx9LHMucHJvdG90eXBlLl9fbWF0Y2g9ZnVuY3Rpb24obyxsKXtvLmxhc3RJbmRleD1sO3ZhciB1PW8uZXhlYyh0aGlzLl9faW5wdXQpO3JldHVybiB1JiYhKGEmJm8uc3RpY2t5KSYmdS5pbmRleCE9PWwmJih1PW51bGwpLHV9LHMucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24obyxsKXtyZXR1cm4gbD1sfHwwLGwrPXRoaXMuX19wb3NpdGlvbixsPj0wJiZsPHRoaXMuX19pbnB1dF9sZW5ndGg/ISF0aGlzLl9fbWF0Y2gobyxsKTohMX0scy5wcm90b3R5cGUudGVzdENoYXI9ZnVuY3Rpb24obyxsKXt2YXIgdT10aGlzLnBlZWsobCk7cmV0dXJuIG8ubGFzdEluZGV4PTAsdSE9PW51bGwmJm8udGVzdCh1KX0scy5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX21hdGNoKG8sdGhpcy5fX3Bvc2l0aW9uKTtyZXR1cm4gbD90aGlzLl9fcG9zaXRpb24rPWxbMF0ubGVuZ3RoOmw9bnVsbCxsfSxzLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKG8sbCx1KXt2YXIgYz0iIixkO3JldHVybiBvJiYoZD10aGlzLm1hdGNoKG8pLGQmJihjKz1kWzBdKSksbCYmKGR8fCFvKSYmKGMrPXRoaXMucmVhZFVudGlsKGwsdSkpLGN9LHMucHJvdG90eXBlLnJlYWRVbnRpbD1mdW5jdGlvbihvLGwpe3ZhciB1PSIiLGM9dGhpcy5fX3Bvc2l0aW9uO28ubGFzdEluZGV4PXRoaXMuX19wb3NpdGlvbjt2YXIgZD1vLmV4ZWModGhpcy5fX2lucHV0KTtyZXR1cm4gZD8oYz1kLmluZGV4LGwmJihjKz1kWzBdLmxlbmd0aCkpOmM9dGhpcy5fX2lucHV0X2xlbmd0aCx1PXRoaXMuX19pbnB1dC5zdWJzdHJpbmcodGhpcy5fX3Bvc2l0aW9uLGMpLHRoaXMuX19wb3NpdGlvbj1jLHV9LHMucHJvdG90eXBlLnJlYWRVbnRpbEFmdGVyPWZ1bmN0aW9uKG8pe3JldHVybiB0aGlzLnJlYWRVbnRpbChvLCEwKX0scy5wcm90b3R5cGUuZ2V0X3JlZ2V4cD1mdW5jdGlvbihvLGwpe3ZhciB1PW51bGwsYz0iZyI7cmV0dXJuIGwmJmEmJihjPSJ5IiksdHlwZW9mIG89PSJzdHJpbmciJiZvIT09IiI/dT1uZXcgUmVnRXhwKG8sYyk6byYmKHU9bmV3IFJlZ0V4cChvLnNvdXJjZSxjKSksdX0scy5wcm90b3R5cGUuZ2V0X2xpdGVyYWxfcmVnZXhwPWZ1bmN0aW9uKG8pe3JldHVybiBSZWdFeHAoby5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpKX0scy5wcm90b3R5cGUucGVla1VudGlsQWZ0ZXI9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX3Bvc2l0aW9uLHU9dGhpcy5yZWFkVW50aWxBZnRlcihvKTtyZXR1cm4gdGhpcy5fX3Bvc2l0aW9uPWwsdX0scy5wcm90b3R5cGUubG9va0JhY2s9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX3Bvc2l0aW9uLTE7cmV0dXJuIGw+PW8ubGVuZ3RoJiZ0aGlzLl9faW5wdXQuc3Vic3RyaW5nKGwtby5sZW5ndGgsbCkudG9Mb3dlckNhc2UoKT09PW99LHIuZXhwb3J0cy5JbnB1dFNjYW5uZXI9c30sLCwsLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEocyxvKXtzPXR5cGVvZiBzPT0ic3RyaW5nIj9zOnMuc291cmNlLG89dHlwZW9mIG89PSJzdHJpbmciP286by5zb3VyY2UsdGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybj1uZXcgUmVnRXhwKHMrLyBiZWF1dGlmeSggXHcrWzpdXHcrKSsgLy5zb3VyY2UrbywiZyIpLHRoaXMuX19kaXJlY3RpdmVfcGF0dGVybj0vIChcdyspWzpdKFx3KykvZyx0aGlzLl9fZGlyZWN0aXZlc19lbmRfaWdub3JlX3BhdHRlcm49bmV3IFJlZ0V4cChzKy9cc2JlYXV0aWZ5XHNpZ25vcmU6ZW5kXHMvLnNvdXJjZStvLCJnIil9YS5wcm90b3R5cGUuZ2V0X2RpcmVjdGl2ZXM9ZnVuY3Rpb24ocyl7aWYoIXMubWF0Y2godGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybikpcmV0dXJuIG51bGw7dmFyIG89e307dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmxhc3RJbmRleD0wO2Zvcih2YXIgbD10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhzKTtsOylvW2xbMV1dPWxbMl0sbD10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhzKTtyZXR1cm4gb30sYS5wcm90b3R5cGUucmVhZElnbm9yZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVhZFVudGlsQWZ0ZXIodGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuKX0sci5leHBvcnRzLkRpcmVjdGl2ZXM9YX0sLGZ1bmN0aW9uKHIsYSxzKXt2YXIgbz1zKDE2KS5CZWF1dGlmaWVyLGw9cygxNykuT3B0aW9ucztmdW5jdGlvbiB1KGMsZCl7dmFyIG09bmV3IG8oYyxkKTtyZXR1cm4gbS5iZWF1dGlmeSgpfXIuZXhwb3J0cz11LHIuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBuZXcgbH19LGZ1bmN0aW9uKHIsYSxzKXt2YXIgbz1zKDE3KS5PcHRpb25zLGw9cygyKS5PdXRwdXQsdT1zKDgpLklucHV0U2Nhbm5lcixjPXMoMTMpLkRpcmVjdGl2ZXMsZD1uZXcgYygvXC9cKi8sL1wqXC8vKSxtPS9cclxufFtcclxuXS8sZj0vXHJcbnxbXHJcbl0vZyxiPS9ccy8scD0vKD86XHN8XG4pKy9nLHc9L1wvXCooPzpbXHNcU10qPykoKD86XCpcLyl8JCkvZyx4PS9cL1wvKD86W15cblxyXHUyMDI4XHUyMDI5XSopL2c7ZnVuY3Rpb24gXyh5LEUpe3RoaXMuX3NvdXJjZV90ZXh0PXl8fCIiLHRoaXMuX29wdGlvbnM9bmV3IG8oRSksdGhpcy5fY2g9bnVsbCx0aGlzLl9pbnB1dD1udWxsLHRoaXMuTkVTVEVEX0FUX1JVTEU9eyJAcGFnZSI6ITAsIkBmb250LWZhY2UiOiEwLCJAa2V5ZnJhbWVzIjohMCwiQG1lZGlhIjohMCwiQHN1cHBvcnRzIjohMCwiQGRvY3VtZW50IjohMH0sdGhpcy5DT05ESVRJT05BTF9HUk9VUF9SVUxFPXsiQG1lZGlhIjohMCwiQHN1cHBvcnRzIjohMCwiQGRvY3VtZW50IjohMH19Xy5wcm90b3R5cGUuZWF0U3RyaW5nPWZ1bmN0aW9uKHkpe3ZhciBFPSIiO2Zvcih0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCk7dGhpcy5fY2g7KXtpZihFKz10aGlzLl9jaCx0aGlzLl9jaD09PSJcXCIpRSs9dGhpcy5faW5wdXQubmV4dCgpO2Vsc2UgaWYoeS5pbmRleE9mKHRoaXMuX2NoKSE9PS0xfHx0aGlzLl9jaD09PWAKYClicmVhazt0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCl9cmV0dXJuIEV9LF8ucHJvdG90eXBlLmVhdFdoaXRlc3BhY2U9ZnVuY3Rpb24oeSl7Zm9yKHZhciBFPWIudGVzdCh0aGlzLl9pbnB1dC5wZWVrKCkpLFI9MDtiLnRlc3QodGhpcy5faW5wdXQucGVlaygpKTspdGhpcy5fY2g9dGhpcy5faW5wdXQubmV4dCgpLHkmJnRoaXMuX2NoPT09YApgJiYoUj09PTB8fFI8dGhpcy5fb3B0aW9ucy5tYXhfcHJlc2VydmVfbmV3bGluZXMpJiYoUisrLHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoITApKTtyZXR1cm4gRX0sXy5wcm90b3R5cGUuZm91bmROZXN0ZWRQc2V1ZG9DbGFzcz1mdW5jdGlvbigpe2Zvcih2YXIgeT0wLEU9MSxSPXRoaXMuX2lucHV0LnBlZWsoRSk7Ujspe2lmKFI9PT0ieyIpcmV0dXJuITA7aWYoUj09PSIoIil5Kz0xO2Vsc2UgaWYoUj09PSIpIil7aWYoeT09PTApcmV0dXJuITE7eS09MX1lbHNlIGlmKFI9PT0iOyJ8fFI9PT0ifSIpcmV0dXJuITE7RSsrLFI9dGhpcy5faW5wdXQucGVlayhFKX1yZXR1cm4hMX0sXy5wcm90b3R5cGUucHJpbnRfc3RyaW5nPWZ1bmN0aW9uKHkpe3RoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuX2luZGVudExldmVsKSx0aGlzLl9vdXRwdXQubm9uX2JyZWFraW5nX3NwYWNlPSEwLHRoaXMuX291dHB1dC5hZGRfdG9rZW4oeSl9LF8ucHJvdG90eXBlLnByZXNlcnZlU2luZ2xlU3BhY2U9ZnVuY3Rpb24oeSl7eSYmKHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApfSxfLnByb3RvdHlwZS5pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9pbmRlbnRMZXZlbCsrfSxfLnByb3RvdHlwZS5vdXRkZW50PWZ1bmN0aW9uKCl7dGhpcy5faW5kZW50TGV2ZWw+MCYmdGhpcy5faW5kZW50TGV2ZWwtLX0sXy5wcm90b3R5cGUuYmVhdXRpZnk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vcHRpb25zLmRpc2FibGVkKXJldHVybiB0aGlzLl9zb3VyY2VfdGV4dDt2YXIgeT10aGlzLl9zb3VyY2VfdGV4dCxFPXRoaXMuX29wdGlvbnMuZW9sO0U9PT0iYXV0byImJihFPWAKYCx5JiZtLnRlc3QoeXx8IiIpJiYoRT15Lm1hdGNoKG0pWzBdKSkseT15LnJlcGxhY2UoZixgCmApO3ZhciBSPXkubWF0Y2goL15bXHQgXSovKVswXTt0aGlzLl9vdXRwdXQ9bmV3IGwodGhpcy5fb3B0aW9ucyxSKSx0aGlzLl9pbnB1dD1uZXcgdSh5KSx0aGlzLl9pbmRlbnRMZXZlbD0wLHRoaXMuX25lc3RlZExldmVsPTAsdGhpcy5fY2g9bnVsbDtmb3IodmFyIFA9MCx2PSExLGc9ITEsVD0hMSxxPSExLFM9ITEsaz10aGlzLl9jaCxOLEQsSDtOPXRoaXMuX2lucHV0LnJlYWQocCksRD1OIT09IiIsSD1rLHRoaXMuX2NoPXRoaXMuX2lucHV0Lm5leHQoKSx0aGlzLl9jaD09PSJcXCImJnRoaXMuX2lucHV0Lmhhc05leHQoKSYmKHRoaXMuX2NoKz10aGlzLl9pbnB1dC5uZXh0KCkpLGs9dGhpcy5fY2gsdGhpcy5fY2g7KWlmKHRoaXMuX2NoPT09Ii8iJiZ0aGlzLl9pbnB1dC5wZWVrKCk9PT0iKiIpe3RoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSx0aGlzLl9pbnB1dC5iYWNrKCk7dmFyIEY9dGhpcy5faW5wdXQucmVhZCh3KSxMPWQuZ2V0X2RpcmVjdGl2ZXMoRik7TCYmTC5pZ25vcmU9PT0ic3RhcnQiJiYoRis9ZC5yZWFkSWdub3JlZCh0aGlzLl9pbnB1dCkpLHRoaXMucHJpbnRfc3RyaW5nKEYpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpfWVsc2UgaWYodGhpcy5fY2g9PT0iLyImJnRoaXMuX2lucHV0LnBlZWsoKT09PSIvIil0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMuX2lucHV0LmJhY2soKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9pbnB1dC5yZWFkKHgpKSx0aGlzLmVhdFdoaXRlc3BhY2UoITApO2Vsc2UgaWYodGhpcy5fY2g9PT0iQCIpaWYodGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKEQpLHRoaXMuX2lucHV0LnBlZWsoKT09PSJ7Iil0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCt0aGlzLmVhdFN0cmluZygifSIpKTtlbHNle3RoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTt2YXIgQT10aGlzLl9pbnB1dC5wZWVrVW50aWxBZnRlcigvWzogLDt7fSgpW1xdXC89JyJdL2cpO0EubWF0Y2goL1sgOl0kLykmJihBPXRoaXMuZWF0U3RyaW5nKCI6ICIpLnJlcGxhY2UoL1xzJC8sIiIpLHRoaXMucHJpbnRfc3RyaW5nKEEpLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApLEE9QS5yZXBsYWNlKC9ccyQvLCIiKSxBPT09ImV4dGVuZCI/cT0hMDpBPT09ImltcG9ydCImJihTPSEwKSxBIGluIHRoaXMuTkVTVEVEX0FUX1JVTEU/KHRoaXMuX25lc3RlZExldmVsKz0xLEEgaW4gdGhpcy5DT05ESVRJT05BTF9HUk9VUF9SVUxFJiYoVD0hMCkpOiF2JiZQPT09MCYmQS5pbmRleE9mKCI6IikhPT0tMSYmKGc9ITAsdGhpcy5pbmRlbnQoKSl9ZWxzZSB0aGlzLl9jaD09PSIjIiYmdGhpcy5faW5wdXQucGVlaygpPT09InsiPyh0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoRCksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2grdGhpcy5lYXRTdHJpbmcoIn0iKSkpOnRoaXMuX2NoPT09InsiPyhnJiYoZz0hMSx0aGlzLm91dGRlbnQoKSksVD8oVD0hMSx2PXRoaXMuX2luZGVudExldmVsPj10aGlzLl9uZXN0ZWRMZXZlbCk6dj10aGlzLl9pbmRlbnRMZXZlbD49dGhpcy5fbmVzdGVkTGV2ZWwtMSx0aGlzLl9vcHRpb25zLm5ld2xpbmVfYmV0d2Vlbl9ydWxlcyYmdiYmdGhpcy5fb3V0cHV0LnByZXZpb3VzX2xpbmUmJnRoaXMuX291dHB1dC5wcmV2aW91c19saW5lLml0ZW0oLTEpIT09InsiJiZ0aGlzLl9vdXRwdXQuZW5zdXJlX2VtcHR5X2xpbmVfYWJvdmUoIi8iLCIsIiksdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCx0aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlPT09ImV4cGFuZCI/KHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5pbmRlbnQoKSx0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLl9pbmRlbnRMZXZlbCkpOih0aGlzLmluZGVudCgpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCkpOnRoaXMuX2NoPT09In0iPyh0aGlzLm91dGRlbnQoKSx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCksSD09PSJ7IiYmdGhpcy5fb3V0cHV0LnRyaW0oITApLFM9ITEscT0hMSxnJiYodGhpcy5vdXRkZW50KCksZz0hMSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHY9ITEsdGhpcy5fbmVzdGVkTGV2ZWwmJnRoaXMuX25lc3RlZExldmVsLS0sdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCksdGhpcy5fb3B0aW9ucy5uZXdsaW5lX2JldHdlZW5fcnVsZXMmJiF0aGlzLl9vdXRwdXQuanVzdF9hZGRlZF9ibGFua2xpbmUoKSYmdGhpcy5faW5wdXQucGVlaygpIT09In0iJiZ0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCEwKSk6dGhpcy5fY2g9PT0iOiI/KHZ8fFQpJiYhKHRoaXMuX2lucHV0Lmxvb2tCYWNrKCImIil8fHRoaXMuZm91bmROZXN0ZWRQc2V1ZG9DbGFzcygpKSYmIXRoaXMuX2lucHV0Lmxvb2tCYWNrKCIoIikmJiFxJiZQPT09MD8odGhpcy5wcmludF9zdHJpbmcoIjoiKSxnfHwoZz0hMCx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5pbmRlbnQoKSkpOih0aGlzLl9pbnB1dC5sb29rQmFjaygiICIpJiYodGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCksdGhpcy5faW5wdXQucGVlaygpPT09IjoiPyh0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCksdGhpcy5wcmludF9zdHJpbmcoIjo6IikpOnRoaXMucHJpbnRfc3RyaW5nKCI6IikpOnRoaXMuX2NoPT09JyInfHx0aGlzLl9jaD09PSInIj8odGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKEQpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoK3RoaXMuZWF0U3RyaW5nKHRoaXMuX2NoKSksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSk6dGhpcy5fY2g9PT0iOyI/UD09PTA/KGcmJih0aGlzLm91dGRlbnQoKSxnPSExKSxxPSExLFM9ITEsdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5faW5wdXQucGVlaygpIT09Ii8iJiZ0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCkpOih0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwKTp0aGlzLl9jaD09PSIoIj90aGlzLl9pbnB1dC5sb29rQmFjaygidXJsIik/KHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSx0aGlzLmVhdFdoaXRlc3BhY2UoKSxQKyssdGhpcy5pbmRlbnQoKSx0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCksdGhpcy5fY2g9PT0iKSJ8fHRoaXMuX2NoPT09JyInfHx0aGlzLl9jaD09PSInIj90aGlzLl9pbnB1dC5iYWNrKCk6dGhpcy5fY2gmJih0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCt0aGlzLmVhdFN0cmluZygiKSIpKSxQJiYoUC0tLHRoaXMub3V0ZGVudCgpKSkpOih0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoRCksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSgpLFArKyx0aGlzLmluZGVudCgpKTp0aGlzLl9jaD09PSIpIj8oUCYmKFAtLSx0aGlzLm91dGRlbnQoKSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpKTp0aGlzLl9jaD09PSIsIj8odGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3B0aW9ucy5zZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZSYmIWcmJlA9PT0wJiYhUyYmIXE/dGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpOnRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApOih0aGlzLl9jaD09PSI+Inx8dGhpcy5fY2g9PT0iKyJ8fHRoaXMuX2NoPT09In4iKSYmIWcmJlA9PT0wP3RoaXMuX29wdGlvbnMuc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3I/KHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITAsdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApOih0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCksdGhpcy5fY2gmJmIudGVzdCh0aGlzLl9jaCkmJih0aGlzLl9jaD0iIikpOnRoaXMuX2NoPT09Il0iP3RoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTp0aGlzLl9jaD09PSJbIj8odGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKEQpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSk6dGhpcy5fY2g9PT0iPSI/KHRoaXMuZWF0V2hpdGVzcGFjZSgpLHRoaXMucHJpbnRfc3RyaW5nKCI9IiksYi50ZXN0KHRoaXMuX2NoKSYmKHRoaXMuX2NoPSIiKSk6dGhpcy5fY2g9PT0iISImJiF0aGlzLl9pbnB1dC5sb29rQmFjaygiXFwiKT8odGhpcy5wcmludF9zdHJpbmcoIiAiKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCkpOih0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoRCksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpKTt2YXIgTT10aGlzLl9vdXRwdXQuZ2V0X2NvZGUoRSk7cmV0dXJuIE19LHIuZXhwb3J0cy5CZWF1dGlmaWVyPV99LGZ1bmN0aW9uKHIsYSxzKXt2YXIgbz1zKDYpLk9wdGlvbnM7ZnVuY3Rpb24gbCh1KXtvLmNhbGwodGhpcyx1LCJjc3MiKSx0aGlzLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJzZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZSIsITApLHRoaXMubmV3bGluZV9iZXR3ZWVuX3J1bGVzPXRoaXMuX2dldF9ib29sZWFuKCJuZXdsaW5lX2JldHdlZW5fcnVsZXMiLCEwKTt2YXIgYz10aGlzLl9nZXRfYm9vbGVhbigic3BhY2VfYXJvdW5kX3NlbGVjdG9yX3NlcGFyYXRvciIpO3RoaXMuc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3I9dGhpcy5fZ2V0X2Jvb2xlYW4oInNwYWNlX2Fyb3VuZF9jb21iaW5hdG9yIil8fGM7dmFyIGQ9dGhpcy5fZ2V0X3NlbGVjdGlvbl9saXN0KCJicmFjZV9zdHlsZSIsWyJjb2xsYXBzZSIsImV4cGFuZCIsImVuZC1leHBhbmQiLCJub25lIiwicHJlc2VydmUtaW5saW5lIl0pO3RoaXMuYnJhY2Vfc3R5bGU9ImNvbGxhcHNlIjtmb3IodmFyIG09MDttPGQubGVuZ3RoO20rKylkW21dIT09ImV4cGFuZCI/dGhpcy5icmFjZV9zdHlsZT0iY29sbGFwc2UiOnRoaXMuYnJhY2Vfc3R5bGU9ZFttXX1sLnByb3RvdHlwZT1uZXcgbyxyLmV4cG9ydHMuT3B0aW9ucz1sfV0sdD17fTtmdW5jdGlvbiBuKHIpe3ZhciBhPXRbcl07aWYoYSE9PXZvaWQgMClyZXR1cm4gYS5leHBvcnRzO3ZhciBzPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKHMscy5leHBvcnRzLG4pLHMuZXhwb3J0c312YXIgaT1uKDE1KTt0cz1pfSkoKTt2YXIgUnU9dHMsbnM7KGZ1bmN0aW9uKCl7dmFyIGU9WywsZnVuY3Rpb24ocil7ZnVuY3Rpb24gYShsKXt0aGlzLl9fcGFyZW50PWwsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD0wLHRoaXMuX19pbmRlbnRfY291bnQ9LTEsdGhpcy5fX2FsaWdubWVudF9jb3VudD0wLHRoaXMuX193cmFwX3BvaW50X2luZGV4PTAsdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50PTAsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50PS0xLHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudD0wLHRoaXMuX19pdGVtcz1bXX1hLnByb3RvdHlwZS5jbG9uZV9lbXB0eT1mdW5jdGlvbigpe3ZhciBsPW5ldyBhKHRoaXMuX19wYXJlbnQpO3JldHVybiBsLnNldF9pbmRlbnQodGhpcy5fX2luZGVudF9jb3VudCx0aGlzLl9fYWxpZ25tZW50X2NvdW50KSxsfSxhLnByb3RvdHlwZS5pdGVtPWZ1bmN0aW9uKGwpe3JldHVybiBsPDA/dGhpcy5fX2l0ZW1zW3RoaXMuX19pdGVtcy5sZW5ndGgrbF06dGhpcy5fX2l0ZW1zW2xdfSxhLnByb3RvdHlwZS5oYXNfbWF0Y2g9ZnVuY3Rpb24obCl7Zm9yKHZhciB1PXRoaXMuX19pdGVtcy5sZW5ndGgtMTt1Pj0wO3UtLSlpZih0aGlzLl9faXRlbXNbdV0ubWF0Y2gobCkpcmV0dXJuITA7cmV0dXJuITF9LGEucHJvdG90eXBlLnNldF9pbmRlbnQ9ZnVuY3Rpb24obCx1KXt0aGlzLmlzX2VtcHR5KCkmJih0aGlzLl9faW5kZW50X2NvdW50PWx8fDAsdGhpcy5fX2FsaWdubWVudF9jb3VudD11fHwwLHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9dGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3NpemUodGhpcy5fX2luZGVudF9jb3VudCx0aGlzLl9fYWxpZ25tZW50X2NvdW50KSl9LGEucHJvdG90eXBlLl9zZXRfd3JhcF9wb2ludD1mdW5jdGlvbigpe3RoaXMuX19wYXJlbnQud3JhcF9saW5lX2xlbmd0aCYmKHRoaXMuX193cmFwX3BvaW50X2luZGV4PXRoaXMuX19pdGVtcy5sZW5ndGgsdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50PXRoaXMuX19jaGFyYWN0ZXJfY291bnQsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50PXRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9faW5kZW50X2NvdW50LHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudD10aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2FsaWdubWVudF9jb3VudCl9LGEucHJvdG90eXBlLl9zaG91bGRfd3JhcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fd3JhcF9wb2ludF9pbmRleCYmdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD50aGlzLl9fcGFyZW50LndyYXBfbGluZV9sZW5ndGgmJnRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD50aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2NoYXJhY3Rlcl9jb3VudH0sYS5wcm90b3R5cGUuX2FsbG93X3dyYXA9ZnVuY3Rpb24oKXtpZih0aGlzLl9zaG91bGRfd3JhcCgpKXt0aGlzLl9fcGFyZW50LmFkZF9uZXdfbGluZSgpO3ZhciBsPXRoaXMuX19wYXJlbnQuY3VycmVudF9saW5lO3JldHVybiBsLnNldF9pbmRlbnQodGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50LHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudCksbC5fX2l0ZW1zPXRoaXMuX19pdGVtcy5zbGljZSh0aGlzLl9fd3JhcF9wb2ludF9pbmRleCksdGhpcy5fX2l0ZW1zPXRoaXMuX19pdGVtcy5zbGljZSgwLHRoaXMuX193cmFwX3BvaW50X2luZGV4KSxsLl9fY2hhcmFjdGVyX2NvdW50Kz10aGlzLl9fY2hhcmFjdGVyX2NvdW50LXRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudCx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PXRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudCxsLl9faXRlbXNbMF09PT0iICImJihsLl9faXRlbXMuc3BsaWNlKDAsMSksbC5fX2NoYXJhY3Rlcl9jb3VudC09MSksITB9cmV0dXJuITF9LGEucHJvdG90eXBlLmlzX2VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pdGVtcy5sZW5ndGg9PT0wfSxhLnByb3RvdHlwZS5sYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKT9udWxsOnRoaXMuX19pdGVtc1t0aGlzLl9faXRlbXMubGVuZ3RoLTFdfSxhLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGwpe3RoaXMuX19pdGVtcy5wdXNoKGwpO3ZhciB1PWwubGFzdEluZGV4T2YoYApgKTt1IT09LTE/dGhpcy5fX2NoYXJhY3Rlcl9jb3VudD1sLmxlbmd0aC11OnRoaXMuX19jaGFyYWN0ZXJfY291bnQrPWwubGVuZ3RofSxhLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt2YXIgbD1udWxsO3JldHVybiB0aGlzLmlzX2VtcHR5KCl8fChsPXRoaXMuX19pdGVtcy5wb3AoKSx0aGlzLl9fY2hhcmFjdGVyX2NvdW50LT1sLmxlbmd0aCksbH0sYS5wcm90b3R5cGUuX3JlbW92ZV9pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9faW5kZW50X2NvdW50PjAmJih0aGlzLl9faW5kZW50X2NvdW50LT0xLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPXRoaXMuX19wYXJlbnQuaW5kZW50X3NpemUpfSxhLnByb3RvdHlwZS5fcmVtb3ZlX3dyYXBfaW5kZW50PWZ1bmN0aW9uKCl7dGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50PjAmJih0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQtPTEpfSxhLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxhc3QoKT09PSIgIjspdGhpcy5fX2l0ZW1zLnBvcCgpLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPTF9LGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGw9IiI7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKT90aGlzLl9fcGFyZW50LmluZGVudF9lbXB0eV9saW5lcyYmKGw9dGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3N0cmluZyh0aGlzLl9faW5kZW50X2NvdW50KSk6KGw9dGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3N0cmluZyh0aGlzLl9faW5kZW50X2NvdW50LHRoaXMuX19hbGlnbm1lbnRfY291bnQpLGwrPXRoaXMuX19pdGVtcy5qb2luKCIiKSksbH07ZnVuY3Rpb24gcyhsLHUpe3RoaXMuX19jYWNoZT1bIiJdLHRoaXMuX19pbmRlbnRfc2l6ZT1sLmluZGVudF9zaXplLHRoaXMuX19pbmRlbnRfc3RyaW5nPWwuaW5kZW50X2NoYXIsbC5pbmRlbnRfd2l0aF90YWJzfHwodGhpcy5fX2luZGVudF9zdHJpbmc9bmV3IEFycmF5KGwuaW5kZW50X3NpemUrMSkuam9pbihsLmluZGVudF9jaGFyKSksdT11fHwiIixsLmluZGVudF9sZXZlbD4wJiYodT1uZXcgQXJyYXkobC5pbmRlbnRfbGV2ZWwrMSkuam9pbih0aGlzLl9faW5kZW50X3N0cmluZykpLHRoaXMuX19iYXNlX3N0cmluZz11LHRoaXMuX19iYXNlX3N0cmluZ19sZW5ndGg9dS5sZW5ndGh9cy5wcm90b3R5cGUuZ2V0X2luZGVudF9zaXplPWZ1bmN0aW9uKGwsdSl7dmFyIGM9dGhpcy5fX2Jhc2Vfc3RyaW5nX2xlbmd0aDtyZXR1cm4gdT11fHwwLGw8MCYmKGM9MCksYys9bCp0aGlzLl9faW5kZW50X3NpemUsYys9dSxjfSxzLnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZz1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMuX19iYXNlX3N0cmluZztyZXR1cm4gdT11fHwwLGw8MCYmKGw9MCxjPSIiKSx1Kz1sKnRoaXMuX19pbmRlbnRfc2l6ZSx0aGlzLl9fZW5zdXJlX2NhY2hlKHUpLGMrPXRoaXMuX19jYWNoZVt1XSxjfSxzLnByb3RvdHlwZS5fX2Vuc3VyZV9jYWNoZT1mdW5jdGlvbihsKXtmb3IoO2w+PXRoaXMuX19jYWNoZS5sZW5ndGg7KXRoaXMuX19hZGRfY29sdW1uKCl9LHMucHJvdG90eXBlLl9fYWRkX2NvbHVtbj1mdW5jdGlvbigpe3ZhciBsPXRoaXMuX19jYWNoZS5sZW5ndGgsdT0wLGM9IiI7dGhpcy5fX2luZGVudF9zaXplJiZsPj10aGlzLl9faW5kZW50X3NpemUmJih1PU1hdGguZmxvb3IobC90aGlzLl9faW5kZW50X3NpemUpLGwtPXUqdGhpcy5fX2luZGVudF9zaXplLGM9bmV3IEFycmF5KHUrMSkuam9pbih0aGlzLl9faW5kZW50X3N0cmluZykpLGwmJihjKz1uZXcgQXJyYXkobCsxKS5qb2luKCIgIikpLHRoaXMuX19jYWNoZS5wdXNoKGMpfTtmdW5jdGlvbiBvKGwsdSl7dGhpcy5fX2luZGVudF9jYWNoZT1uZXcgcyhsLHUpLHRoaXMucmF3PSExLHRoaXMuX2VuZF93aXRoX25ld2xpbmU9bC5lbmRfd2l0aF9uZXdsaW5lLHRoaXMuaW5kZW50X3NpemU9bC5pbmRlbnRfc2l6ZSx0aGlzLndyYXBfbGluZV9sZW5ndGg9bC53cmFwX2xpbmVfbGVuZ3RoLHRoaXMuaW5kZW50X2VtcHR5X2xpbmVzPWwuaW5kZW50X2VtcHR5X2xpbmVzLHRoaXMuX19saW5lcz1bXSx0aGlzLnByZXZpb3VzX2xpbmU9bnVsbCx0aGlzLmN1cnJlbnRfbGluZT1udWxsLHRoaXMubmV4dF9saW5lPW5ldyBhKHRoaXMpLHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuPSExLHRoaXMubm9uX2JyZWFraW5nX3NwYWNlPSExLHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZD0hMSx0aGlzLl9fYWRkX291dHB1dGxpbmUoKX1vLnByb3RvdHlwZS5fX2FkZF9vdXRwdXRsaW5lPWZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91c19saW5lPXRoaXMuY3VycmVudF9saW5lLHRoaXMuY3VycmVudF9saW5lPXRoaXMubmV4dF9saW5lLmNsb25lX2VtcHR5KCksdGhpcy5fX2xpbmVzLnB1c2godGhpcy5jdXJyZW50X2xpbmUpfSxvLnByb3RvdHlwZS5nZXRfbGluZV9udW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2xpbmVzLmxlbmd0aH0sby5wcm90b3R5cGUuZ2V0X2luZGVudF9zdHJpbmc9ZnVuY3Rpb24obCx1KXtyZXR1cm4gdGhpcy5fX2luZGVudF9jYWNoZS5nZXRfaW5kZW50X3N0cmluZyhsLHUpfSxvLnByb3RvdHlwZS5nZXRfaW5kZW50X3NpemU9ZnVuY3Rpb24obCx1KXtyZXR1cm4gdGhpcy5fX2luZGVudF9jYWNoZS5nZXRfaW5kZW50X3NpemUobCx1KX0sby5wcm90b3R5cGUuaXNfZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wcmV2aW91c19saW5lJiZ0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpfSxvLnByb3RvdHlwZS5hZGRfbmV3X2xpbmU9ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8IWwmJnRoaXMuanVzdF9hZGRlZF9uZXdsaW5lKCk/ITE6KHRoaXMucmF3fHx0aGlzLl9fYWRkX291dHB1dGxpbmUoKSwhMCl9LG8ucHJvdG90eXBlLmdldF9jb2RlPWZ1bmN0aW9uKGwpe3RoaXMudHJpbSghMCk7dmFyIHU9dGhpcy5jdXJyZW50X2xpbmUucG9wKCk7dSYmKHVbdS5sZW5ndGgtMV09PT1gCmAmJih1PXUucmVwbGFjZSgvXG4rJC9nLCIiKSksdGhpcy5jdXJyZW50X2xpbmUucHVzaCh1KSksdGhpcy5fZW5kX3dpdGhfbmV3bGluZSYmdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7dmFyIGM9dGhpcy5fX2xpbmVzLmpvaW4oYApgKTtyZXR1cm4gbCE9PWAKYCYmKGM9Yy5yZXBsYWNlKC9bXG5dL2csbCkpLGN9LG8ucHJvdG90eXBlLnNldF93cmFwX3BvaW50PWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50X2xpbmUuX3NldF93cmFwX3BvaW50KCl9LG8ucHJvdG90eXBlLnNldF9pbmRlbnQ9ZnVuY3Rpb24obCx1KXtyZXR1cm4gbD1sfHwwLHU9dXx8MCx0aGlzLm5leHRfbGluZS5zZXRfaW5kZW50KGwsdSksdGhpcy5fX2xpbmVzLmxlbmd0aD4xPyh0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KGwsdSksITApOih0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KCksITEpfSxvLnByb3RvdHlwZS5hZGRfcmF3X3Rva2VuPWZ1bmN0aW9uKGwpe2Zvcih2YXIgdT0wO3U8bC5uZXdsaW5lczt1KyspdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7dGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudCgtMSksdGhpcy5jdXJyZW50X2xpbmUucHVzaChsLndoaXRlc3BhY2VfYmVmb3JlKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGwudGV4dCksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPSExfSxvLnByb3RvdHlwZS5hZGRfdG9rZW49ZnVuY3Rpb24obCl7dGhpcy5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW4oKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGwpLHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuPSExLHRoaXMubm9uX2JyZWFraW5nX3NwYWNlPSExLHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZD10aGlzLmN1cnJlbnRfbGluZS5fYWxsb3dfd3JhcCgpfSxvLnByb3RvdHlwZS5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW49ZnVuY3Rpb24oKXt0aGlzLnNwYWNlX2JlZm9yZV90b2tlbiYmIXRoaXMuanVzdF9hZGRlZF9uZXdsaW5lKCkmJih0aGlzLm5vbl9icmVha2luZ19zcGFjZXx8dGhpcy5zZXRfd3JhcF9wb2ludCgpLHRoaXMuY3VycmVudF9saW5lLnB1c2goIiAiKSl9LG8ucHJvdG90eXBlLnJlbW92ZV9pbmRlbnQ9ZnVuY3Rpb24obCl7Zm9yKHZhciB1PXRoaXMuX19saW5lcy5sZW5ndGg7bDx1Oyl0aGlzLl9fbGluZXNbbF0uX3JlbW92ZV9pbmRlbnQoKSxsKys7dGhpcy5jdXJyZW50X2xpbmUuX3JlbW92ZV93cmFwX2luZGVudCgpfSxvLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGwpe2ZvcihsPWw9PT12b2lkIDA/ITE6bCx0aGlzLmN1cnJlbnRfbGluZS50cmltKCk7bCYmdGhpcy5fX2xpbmVzLmxlbmd0aD4xJiZ0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpOyl0aGlzLl9fbGluZXMucG9wKCksdGhpcy5jdXJyZW50X2xpbmU9dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMV0sdGhpcy5jdXJyZW50X2xpbmUudHJpbSgpO3RoaXMucHJldmlvdXNfbGluZT10aGlzLl9fbGluZXMubGVuZ3RoPjE/dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMl06bnVsbH0sby5wcm90b3R5cGUuanVzdF9hZGRlZF9uZXdsaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCl9LG8ucHJvdG90eXBlLmp1c3RfYWRkZWRfYmxhbmtsaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8dGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKSYmdGhpcy5wcmV2aW91c19saW5lLmlzX2VtcHR5KCl9LG8ucHJvdG90eXBlLmVuc3VyZV9lbXB0eV9saW5lX2Fib3ZlPWZ1bmN0aW9uKGwsdSl7Zm9yKHZhciBjPXRoaXMuX19saW5lcy5sZW5ndGgtMjtjPj0wOyl7dmFyIGQ9dGhpcy5fX2xpbmVzW2NdO2lmKGQuaXNfZW1wdHkoKSlicmVhaztpZihkLml0ZW0oMCkuaW5kZXhPZihsKSE9PTAmJmQuaXRlbSgtMSkhPT11KXt0aGlzLl9fbGluZXMuc3BsaWNlKGMrMSwwLG5ldyBhKHRoaXMpKSx0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMl07YnJlYWt9Yy0tfX0sci5leHBvcnRzLk91dHB1dD1vfSxmdW5jdGlvbihyKXtmdW5jdGlvbiBhKHMsbyxsLHUpe3RoaXMudHlwZT1zLHRoaXMudGV4dD1vLHRoaXMuY29tbWVudHNfYmVmb3JlPW51bGwsdGhpcy5uZXdsaW5lcz1sfHwwLHRoaXMud2hpdGVzcGFjZV9iZWZvcmU9dXx8IiIsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGwsdGhpcy5vcGVuZWQ9bnVsbCx0aGlzLmNsb3NlZD1udWxsLHRoaXMuZGlyZWN0aXZlcz1udWxsfXIuZXhwb3J0cy5Ub2tlbj1hfSwsLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEobCx1KXt0aGlzLnJhd19vcHRpb25zPXMobCx1KSx0aGlzLmRpc2FibGVkPXRoaXMuX2dldF9ib29sZWFuKCJkaXNhYmxlZCIpLHRoaXMuZW9sPXRoaXMuX2dldF9jaGFyYWN0ZXJzKCJlb2wiLCJhdXRvIiksdGhpcy5lbmRfd2l0aF9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJlbmRfd2l0aF9uZXdsaW5lIiksdGhpcy5pbmRlbnRfc2l6ZT10aGlzLl9nZXRfbnVtYmVyKCJpbmRlbnRfc2l6ZSIsNCksdGhpcy5pbmRlbnRfY2hhcj10aGlzLl9nZXRfY2hhcmFjdGVycygiaW5kZW50X2NoYXIiLCIgIiksdGhpcy5pbmRlbnRfbGV2ZWw9dGhpcy5fZ2V0X251bWJlcigiaW5kZW50X2xldmVsIiksdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfYm9vbGVhbigicHJlc2VydmVfbmV3bGluZXMiLCEwKSx0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfbnVtYmVyKCJtYXhfcHJlc2VydmVfbmV3bGluZXMiLDMyNzg2KSx0aGlzLnByZXNlcnZlX25ld2xpbmVzfHwodGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXM9MCksdGhpcy5pbmRlbnRfd2l0aF90YWJzPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfd2l0aF90YWJzIix0aGlzLmluZGVudF9jaGFyPT09IgkiKSx0aGlzLmluZGVudF93aXRoX3RhYnMmJih0aGlzLmluZGVudF9jaGFyPSIJIix0aGlzLmluZGVudF9zaXplPT09MSYmKHRoaXMuaW5kZW50X3NpemU9NCkpLHRoaXMud3JhcF9saW5lX2xlbmd0aD10aGlzLl9nZXRfbnVtYmVyKCJ3cmFwX2xpbmVfbGVuZ3RoIix0aGlzLl9nZXRfbnVtYmVyKCJtYXhfY2hhciIpKSx0aGlzLmluZGVudF9lbXB0eV9saW5lcz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2VtcHR5X2xpbmVzIiksdGhpcy50ZW1wbGF0aW5nPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgidGVtcGxhdGluZyIsWyJhdXRvIiwibm9uZSIsImRqYW5nbyIsImVyYiIsImhhbmRsZWJhcnMiLCJwaHAiLCJzbWFydHkiXSxbImF1dG8iXSl9YS5wcm90b3R5cGUuX2dldF9hcnJheT1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD11fHxbXTtyZXR1cm4gdHlwZW9mIGM9PSJvYmplY3QiP2MhPT1udWxsJiZ0eXBlb2YgYy5jb25jYXQ9PSJmdW5jdGlvbiImJihkPWMuY29uY2F0KCkpOnR5cGVvZiBjPT0ic3RyaW5nIiYmKGQ9Yy5zcGxpdCgvW15hLXpBLVowLTlfXC9cLV0rLykpLGR9LGEucHJvdG90eXBlLl9nZXRfYm9vbGVhbj1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD1jPT09dm9pZCAwPyEhdTohIWM7cmV0dXJuIGR9LGEucHJvdG90eXBlLl9nZXRfY2hhcmFjdGVycz1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD11fHwiIjtyZXR1cm4gdHlwZW9mIGM9PSJzdHJpbmciJiYoZD1jLnJlcGxhY2UoL1xcci8sIlxyIikucmVwbGFjZSgvXFxuLyxgCmApLnJlcGxhY2UoL1xcdC8sIgkiKSksZH0sYS5wcm90b3R5cGUuX2dldF9udW1iZXI9ZnVuY3Rpb24obCx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW2xdO3U9cGFyc2VJbnQodSwxMCksaXNOYU4odSkmJih1PTApO3ZhciBkPXBhcnNlSW50KGMsMTApO3JldHVybiBpc05hTihkKSYmKGQ9dSksZH0sYS5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb249ZnVuY3Rpb24obCx1LGMpe3ZhciBkPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdChsLHUsYyk7aWYoZC5sZW5ndGghPT0xKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrbCtgJyBjYW4gb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CmArdStgCllvdSBwYXNzZWQgaW46ICdgK3RoaXMucmF3X29wdGlvbnNbbF0rIiciKTtyZXR1cm4gZFswXX0sYS5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb25fbGlzdD1mdW5jdGlvbihsLHUsYyl7aWYoIXV8fHUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdGlvbiBsaXN0IGNhbm5vdCBiZSBlbXB0eS4iKTtpZihjPWN8fFt1WzBdXSwhdGhpcy5faXNfdmFsaWRfc2VsZWN0aW9uKGMsdSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERlZmF1bHQgVmFsdWUhIik7dmFyIGQ9dGhpcy5fZ2V0X2FycmF5KGwsYyk7aWYoIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihkLHUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrbCtgJyBjYW4gY29udGFpbiBvbmx5IHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpgK3UrYApZb3UgcGFzc2VkIGluOiAnYCt0aGlzLnJhd19vcHRpb25zW2xdKyInIik7cmV0dXJuIGR9LGEucHJvdG90eXBlLl9pc192YWxpZF9zZWxlY3Rpb249ZnVuY3Rpb24obCx1KXtyZXR1cm4gbC5sZW5ndGgmJnUubGVuZ3RoJiYhbC5zb21lKGZ1bmN0aW9uKGMpe3JldHVybiB1LmluZGV4T2YoYyk9PT0tMX0pfTtmdW5jdGlvbiBzKGwsdSl7dmFyIGM9e307bD1vKGwpO3ZhciBkO2ZvcihkIGluIGwpZCE9PXUmJihjW2RdPWxbZF0pO2lmKHUmJmxbdV0pZm9yKGQgaW4gbFt1XSljW2RdPWxbdV1bZF07cmV0dXJuIGN9ZnVuY3Rpb24gbyhsKXt2YXIgdT17fSxjO2ZvcihjIGluIGwpe3ZhciBkPWMucmVwbGFjZSgvLS9nLCJfIik7dVtkXT1sW2NdfXJldHVybiB1fXIuZXhwb3J0cy5PcHRpb25zPWEsci5leHBvcnRzLm5vcm1hbGl6ZU9wdHM9byxyLmV4cG9ydHMubWVyZ2VPcHRzPXN9LCxmdW5jdGlvbihyKXt2YXIgYT1SZWdFeHAucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzdGlja3kiKTtmdW5jdGlvbiBzKG8pe3RoaXMuX19pbnB1dD1vfHwiIix0aGlzLl9faW5wdXRfbGVuZ3RoPXRoaXMuX19pbnB1dC5sZW5ndGgsdGhpcy5fX3Bvc2l0aW9uPTB9cy5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj0wfSxzLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fX3Bvc2l0aW9uPjAmJih0aGlzLl9fcG9zaXRpb24tPTEpfSxzLnByb3RvdHlwZS5oYXNOZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wb3NpdGlvbjx0aGlzLl9faW5wdXRfbGVuZ3RofSxzLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIG89bnVsbDtyZXR1cm4gdGhpcy5oYXNOZXh0KCkmJihvPXRoaXMuX19pbnB1dC5jaGFyQXQodGhpcy5fX3Bvc2l0aW9uKSx0aGlzLl9fcG9zaXRpb24rPTEpLG99LHMucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24obyl7dmFyIGw9bnVsbDtyZXR1cm4gbz1vfHwwLG8rPXRoaXMuX19wb3NpdGlvbixvPj0wJiZvPHRoaXMuX19pbnB1dF9sZW5ndGgmJihsPXRoaXMuX19pbnB1dC5jaGFyQXQobykpLGx9LHMucHJvdG90eXBlLl9fbWF0Y2g9ZnVuY3Rpb24obyxsKXtvLmxhc3RJbmRleD1sO3ZhciB1PW8uZXhlYyh0aGlzLl9faW5wdXQpO3JldHVybiB1JiYhKGEmJm8uc3RpY2t5KSYmdS5pbmRleCE9PWwmJih1PW51bGwpLHV9LHMucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24obyxsKXtyZXR1cm4gbD1sfHwwLGwrPXRoaXMuX19wb3NpdGlvbixsPj0wJiZsPHRoaXMuX19pbnB1dF9sZW5ndGg/ISF0aGlzLl9fbWF0Y2gobyxsKTohMX0scy5wcm90b3R5cGUudGVzdENoYXI9ZnVuY3Rpb24obyxsKXt2YXIgdT10aGlzLnBlZWsobCk7cmV0dXJuIG8ubGFzdEluZGV4PTAsdSE9PW51bGwmJm8udGVzdCh1KX0scy5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX21hdGNoKG8sdGhpcy5fX3Bvc2l0aW9uKTtyZXR1cm4gbD90aGlzLl9fcG9zaXRpb24rPWxbMF0ubGVuZ3RoOmw9bnVsbCxsfSxzLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKG8sbCx1KXt2YXIgYz0iIixkO3JldHVybiBvJiYoZD10aGlzLm1hdGNoKG8pLGQmJihjKz1kWzBdKSksbCYmKGR8fCFvKSYmKGMrPXRoaXMucmVhZFVudGlsKGwsdSkpLGN9LHMucHJvdG90eXBlLnJlYWRVbnRpbD1mdW5jdGlvbihvLGwpe3ZhciB1PSIiLGM9dGhpcy5fX3Bvc2l0aW9uO28ubGFzdEluZGV4PXRoaXMuX19wb3NpdGlvbjt2YXIgZD1vLmV4ZWModGhpcy5fX2lucHV0KTtyZXR1cm4gZD8oYz1kLmluZGV4LGwmJihjKz1kWzBdLmxlbmd0aCkpOmM9dGhpcy5fX2lucHV0X2xlbmd0aCx1PXRoaXMuX19pbnB1dC5zdWJzdHJpbmcodGhpcy5fX3Bvc2l0aW9uLGMpLHRoaXMuX19wb3NpdGlvbj1jLHV9LHMucHJvdG90eXBlLnJlYWRVbnRpbEFmdGVyPWZ1bmN0aW9uKG8pe3JldHVybiB0aGlzLnJlYWRVbnRpbChvLCEwKX0scy5wcm90b3R5cGUuZ2V0X3JlZ2V4cD1mdW5jdGlvbihvLGwpe3ZhciB1PW51bGwsYz0iZyI7cmV0dXJuIGwmJmEmJihjPSJ5IiksdHlwZW9mIG89PSJzdHJpbmciJiZvIT09IiI/dT1uZXcgUmVnRXhwKG8sYyk6byYmKHU9bmV3IFJlZ0V4cChvLnNvdXJjZSxjKSksdX0scy5wcm90b3R5cGUuZ2V0X2xpdGVyYWxfcmVnZXhwPWZ1bmN0aW9uKG8pe3JldHVybiBSZWdFeHAoby5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpKX0scy5wcm90b3R5cGUucGVla1VudGlsQWZ0ZXI9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX3Bvc2l0aW9uLHU9dGhpcy5yZWFkVW50aWxBZnRlcihvKTtyZXR1cm4gdGhpcy5fX3Bvc2l0aW9uPWwsdX0scy5wcm90b3R5cGUubG9va0JhY2s9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX3Bvc2l0aW9uLTE7cmV0dXJuIGw+PW8ubGVuZ3RoJiZ0aGlzLl9faW5wdXQuc3Vic3RyaW5nKGwtby5sZW5ndGgsbCkudG9Mb3dlckNhc2UoKT09PW99LHIuZXhwb3J0cy5JbnB1dFNjYW5uZXI9c30sZnVuY3Rpb24ocixhLHMpe3ZhciBvPXMoOCkuSW5wdXRTY2FubmVyLGw9cygzKS5Ub2tlbix1PXMoMTApLlRva2VuU3RyZWFtLGM9cygxMSkuV2hpdGVzcGFjZVBhdHRlcm4sZD17U1RBUlQ6IlRLX1NUQVJUIixSQVc6IlRLX1JBVyIsRU9GOiJUS19FT0YifSxtPWZ1bmN0aW9uKGYsYil7dGhpcy5faW5wdXQ9bmV3IG8oZiksdGhpcy5fb3B0aW9ucz1ifHx7fSx0aGlzLl9fdG9rZW5zPW51bGwsdGhpcy5fcGF0dGVybnM9e30sdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZT1uZXcgYyh0aGlzLl9pbnB1dCl9O20ucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKCl7dGhpcy5faW5wdXQucmVzdGFydCgpLHRoaXMuX190b2tlbnM9bmV3IHUsdGhpcy5fcmVzZXQoKTtmb3IodmFyIGYsYj1uZXcgbChkLlNUQVJULCIiKSxwPW51bGwsdz1bXSx4PW5ldyB1O2IudHlwZSE9PWQuRU9GOyl7Zm9yKGY9dGhpcy5fZ2V0X25leHRfdG9rZW4oYixwKTt0aGlzLl9pc19jb21tZW50KGYpOyl4LmFkZChmKSxmPXRoaXMuX2dldF9uZXh0X3Rva2VuKGIscCk7eC5pc0VtcHR5KCl8fChmLmNvbW1lbnRzX2JlZm9yZT14LHg9bmV3IHUpLGYucGFyZW50PXAsdGhpcy5faXNfb3BlbmluZyhmKT8ody5wdXNoKHApLHA9Zik6cCYmdGhpcy5faXNfY2xvc2luZyhmLHApJiYoZi5vcGVuZWQ9cCxwLmNsb3NlZD1mLHA9dy5wb3AoKSxmLnBhcmVudD1wKSxmLnByZXZpb3VzPWIsYi5uZXh0PWYsdGhpcy5fX3Rva2Vucy5hZGQoZiksYj1mfXJldHVybiB0aGlzLl9fdG9rZW5zfSxtLnByb3RvdHlwZS5faXNfZmlyc3RfdG9rZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Rva2Vucy5pc0VtcHR5KCl9LG0ucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe30sbS5wcm90b3R5cGUuX2dldF9uZXh0X3Rva2VuPWZ1bmN0aW9uKGYsYil7dGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt2YXIgcD10aGlzLl9pbnB1dC5yZWFkKC8uKy9nKTtyZXR1cm4gcD90aGlzLl9jcmVhdGVfdG9rZW4oZC5SQVcscCk6dGhpcy5fY3JlYXRlX3Rva2VuKGQuRU9GLCIiKX0sbS5wcm90b3R5cGUuX2lzX2NvbW1lbnQ9ZnVuY3Rpb24oZil7cmV0dXJuITF9LG0ucHJvdG90eXBlLl9pc19vcGVuaW5nPWZ1bmN0aW9uKGYpe3JldHVybiExfSxtLnByb3RvdHlwZS5faXNfY2xvc2luZz1mdW5jdGlvbihmLGIpe3JldHVybiExfSxtLnByb3RvdHlwZS5fY3JlYXRlX3Rva2VuPWZ1bmN0aW9uKGYsYil7dmFyIHA9bmV3IGwoZixiLHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2UubmV3bGluZV9jb3VudCx0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuKTtyZXR1cm4gcH0sbS5wcm90b3R5cGUuX3JlYWRXaGl0ZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2UucmVhZCgpfSxyLmV4cG9ydHMuVG9rZW5pemVyPW0sci5leHBvcnRzLlRPS0VOPWR9LGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEocyl7dGhpcy5fX3Rva2Vucz1bXSx0aGlzLl9fdG9rZW5zX2xlbmd0aD10aGlzLl9fdG9rZW5zLmxlbmd0aCx0aGlzLl9fcG9zaXRpb249MCx0aGlzLl9fcGFyZW50X3Rva2VuPXN9YS5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj0wfSxhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2tlbnNfbGVuZ3RoPT09MH0sYS5wcm90b3R5cGUuaGFzTmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcG9zaXRpb248dGhpcy5fX3Rva2Vuc19sZW5ndGh9LGEucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgcz1udWxsO3JldHVybiB0aGlzLmhhc05leHQoKSYmKHM9dGhpcy5fX3Rva2Vuc1t0aGlzLl9fcG9zaXRpb25dLHRoaXMuX19wb3NpdGlvbis9MSksc30sYS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbihzKXt2YXIgbz1udWxsO3JldHVybiBzPXN8fDAscys9dGhpcy5fX3Bvc2l0aW9uLHM+PTAmJnM8dGhpcy5fX3Rva2Vuc19sZW5ndGgmJihvPXRoaXMuX190b2tlbnNbc10pLG99LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzKXt0aGlzLl9fcGFyZW50X3Rva2VuJiYocy5wYXJlbnQ9dGhpcy5fX3BhcmVudF90b2tlbiksdGhpcy5fX3Rva2Vucy5wdXNoKHMpLHRoaXMuX190b2tlbnNfbGVuZ3RoKz0xfSxyLmV4cG9ydHMuVG9rZW5TdHJlYW09YX0sZnVuY3Rpb24ocixhLHMpe3ZhciBvPXMoMTIpLlBhdHRlcm47ZnVuY3Rpb24gbCh1LGMpe28uY2FsbCh0aGlzLHUsYyksYz90aGlzLl9saW5lX3JlZ2V4cD10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKGMuX2xpbmVfcmVnZXhwKTp0aGlzLl9fc2V0X3doaXRlc3BhY2VfcGF0dGVybnMoIiIsIiIpLHRoaXMubmV3bGluZV9jb3VudD0wLHRoaXMud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW49IiJ9bC5wcm90b3R5cGU9bmV3IG8sbC5wcm90b3R5cGUuX19zZXRfd2hpdGVzcGFjZV9wYXR0ZXJucz1mdW5jdGlvbih1LGMpe3UrPSJcXHQgIixjKz0iXFxuXFxyIix0aGlzLl9tYXRjaF9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAoIlsiK3UrYysiXSsiLCEwKSx0aGlzLl9uZXdsaW5lX3JlZ2V4cD10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKCJcXHJcXG58WyIrYysiXSIpfSxsLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKCl7dGhpcy5uZXdsaW5lX2NvdW50PTAsdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbj0iIjt2YXIgdT10aGlzLl9pbnB1dC5yZWFkKHRoaXMuX21hdGNoX3BhdHRlcm4pO2lmKHU9PT0iICIpdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbj0iICI7ZWxzZSBpZih1KXt2YXIgYz10aGlzLl9fc3BsaXQodGhpcy5fbmV3bGluZV9yZWdleHAsdSk7dGhpcy5uZXdsaW5lX2NvdW50PWMubGVuZ3RoLTEsdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbj1jW3RoaXMubmV3bGluZV9jb3VudF19cmV0dXJuIHV9LGwucHJvdG90eXBlLm1hdGNoaW5nPWZ1bmN0aW9uKHUsYyl7dmFyIGQ9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIGQuX19zZXRfd2hpdGVzcGFjZV9wYXR0ZXJucyh1LGMpLGQuX3VwZGF0ZSgpLGR9LGwucHJvdG90eXBlLl9jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGwodGhpcy5faW5wdXQsdGhpcyl9LGwucHJvdG90eXBlLl9fc3BsaXQ9ZnVuY3Rpb24odSxjKXt1Lmxhc3RJbmRleD0wO2Zvcih2YXIgZD0wLG09W10sZj11LmV4ZWMoYyk7ZjspbS5wdXNoKGMuc3Vic3RyaW5nKGQsZi5pbmRleCkpLGQ9Zi5pbmRleCtmWzBdLmxlbmd0aCxmPXUuZXhlYyhjKTtyZXR1cm4gZDxjLmxlbmd0aD9tLnB1c2goYy5zdWJzdHJpbmcoZCxjLmxlbmd0aCkpOm0ucHVzaCgiIiksbX0sci5leHBvcnRzLldoaXRlc3BhY2VQYXR0ZXJuPWx9LGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEocyxvKXt0aGlzLl9pbnB1dD1zLHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm49bnVsbCx0aGlzLl9tYXRjaF9wYXR0ZXJuPW51bGwsdGhpcy5fdW50aWxfcGF0dGVybj1udWxsLHRoaXMuX3VudGlsX2FmdGVyPSExLG8mJih0aGlzLl9zdGFydGluZ19wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAoby5fc3RhcnRpbmdfcGF0dGVybiwhMCksdGhpcy5fbWF0Y2hfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKG8uX21hdGNoX3BhdHRlcm4sITApLHRoaXMuX3VudGlsX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChvLl91bnRpbF9wYXR0ZXJuKSx0aGlzLl91bnRpbF9hZnRlcj1vLl91bnRpbF9hZnRlcil9YS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbigpe3ZhciBzPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybik7cmV0dXJuKCF0aGlzLl9zdGFydGluZ19wYXR0ZXJufHxzKSYmKHMrPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybix0aGlzLl91bnRpbF9wYXR0ZXJuLHRoaXMuX3VudGlsX2FmdGVyKSksc30sYS5wcm90b3R5cGUucmVhZF9tYXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLl9tYXRjaF9wYXR0ZXJuKX0sYS5wcm90b3R5cGUudW50aWxfYWZ0ZXI9ZnVuY3Rpb24ocyl7dmFyIG89dGhpcy5fY3JlYXRlKCk7cmV0dXJuIG8uX3VudGlsX2FmdGVyPSEwLG8uX3VudGlsX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChzKSxvLl91cGRhdGUoKSxvfSxhLnByb3RvdHlwZS51bnRpbD1mdW5jdGlvbihzKXt2YXIgbz10aGlzLl9jcmVhdGUoKTtyZXR1cm4gby5fdW50aWxfYWZ0ZXI9ITEsby5fdW50aWxfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHMpLG8uX3VwZGF0ZSgpLG99LGEucHJvdG90eXBlLnN0YXJ0aW5nX3dpdGg9ZnVuY3Rpb24ocyl7dmFyIG89dGhpcy5fY3JlYXRlKCk7cmV0dXJuIG8uX3N0YXJ0aW5nX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChzLCEwKSxvLl91cGRhdGUoKSxvfSxhLnByb3RvdHlwZS5tYXRjaGluZz1mdW5jdGlvbihzKXt2YXIgbz10aGlzLl9jcmVhdGUoKTtyZXR1cm4gby5fbWF0Y2hfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHMsITApLG8uX3VwZGF0ZSgpLG99LGEucHJvdG90eXBlLl9jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEodGhpcy5faW5wdXQsdGhpcyl9LGEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt9LHIuZXhwb3J0cy5QYXR0ZXJuPWF9LGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEocyxvKXtzPXR5cGVvZiBzPT0ic3RyaW5nIj9zOnMuc291cmNlLG89dHlwZW9mIG89PSJzdHJpbmciP286by5zb3VyY2UsdGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybj1uZXcgUmVnRXhwKHMrLyBiZWF1dGlmeSggXHcrWzpdXHcrKSsgLy5zb3VyY2UrbywiZyIpLHRoaXMuX19kaXJlY3RpdmVfcGF0dGVybj0vIChcdyspWzpdKFx3KykvZyx0aGlzLl9fZGlyZWN0aXZlc19lbmRfaWdub3JlX3BhdHRlcm49bmV3IFJlZ0V4cChzKy9cc2JlYXV0aWZ5XHNpZ25vcmU6ZW5kXHMvLnNvdXJjZStvLCJnIil9YS5wcm90b3R5cGUuZ2V0X2RpcmVjdGl2ZXM9ZnVuY3Rpb24ocyl7aWYoIXMubWF0Y2godGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybikpcmV0dXJuIG51bGw7dmFyIG89e307dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmxhc3RJbmRleD0wO2Zvcih2YXIgbD10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhzKTtsOylvW2xbMV1dPWxbMl0sbD10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhzKTtyZXR1cm4gb30sYS5wcm90b3R5cGUucmVhZElnbm9yZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVhZFVudGlsQWZ0ZXIodGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuKX0sci5leHBvcnRzLkRpcmVjdGl2ZXM9YX0sZnVuY3Rpb24ocixhLHMpe3ZhciBvPXMoMTIpLlBhdHRlcm4sbD17ZGphbmdvOiExLGVyYjohMSxoYW5kbGViYXJzOiExLHBocDohMSxzbWFydHk6ITF9O2Z1bmN0aW9uIHUoYyxkKXtvLmNhbGwodGhpcyxjLGQpLHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuPW51bGwsdGhpcy5fZGlzYWJsZWQ9T2JqZWN0LmFzc2lnbih7fSxsKSx0aGlzLl9leGNsdWRlZD1PYmplY3QuYXNzaWduKHt9LGwpLGQmJih0aGlzLl9fdGVtcGxhdGVfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKGQuX190ZW1wbGF0ZV9wYXR0ZXJuKSx0aGlzLl9leGNsdWRlZD1PYmplY3QuYXNzaWduKHRoaXMuX2V4Y2x1ZGVkLGQuX2V4Y2x1ZGVkKSx0aGlzLl9kaXNhYmxlZD1PYmplY3QuYXNzaWduKHRoaXMuX2Rpc2FibGVkLGQuX2Rpc2FibGVkKSk7dmFyIG09bmV3IG8oYyk7dGhpcy5fX3BhdHRlcm5zPXtoYW5kbGViYXJzX2NvbW1lbnQ6bS5zdGFydGluZ193aXRoKC97eyEtLS8pLnVudGlsX2FmdGVyKC8tLX19LyksaGFuZGxlYmFyc191bmVzY2FwZWQ6bS5zdGFydGluZ193aXRoKC97e3svKS51bnRpbF9hZnRlcigvfX19LyksaGFuZGxlYmFyczptLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LykscGhwOm0uc3RhcnRpbmdfd2l0aCgvPFw/KD86Wz0gXXxwaHApLykudW50aWxfYWZ0ZXIoL1w/Pi8pLGVyYjptLnN0YXJ0aW5nX3dpdGgoLzwlW14lXS8pLnVudGlsX2FmdGVyKC9bXiVdJT4vKSxkamFuZ286bS5zdGFydGluZ193aXRoKC97JS8pLnVudGlsX2FmdGVyKC8lfS8pLGRqYW5nb192YWx1ZTptLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LyksZGphbmdvX2NvbW1lbnQ6bS5zdGFydGluZ193aXRoKC97Iy8pLnVudGlsX2FmdGVyKC8jfS8pLHNtYXJ0eTptLnN0YXJ0aW5nX3dpdGgoL3soPz1bXn17XHNcbl0pLykudW50aWxfYWZ0ZXIoL1teXHNcbl19Lyksc21hcnR5X2NvbW1lbnQ6bS5zdGFydGluZ193aXRoKC97XCovKS51bnRpbF9hZnRlcigvXCp9Lyksc21hcnR5X2xpdGVyYWw6bS5zdGFydGluZ193aXRoKC97bGl0ZXJhbH0vKS51bnRpbF9hZnRlcigve1wvbGl0ZXJhbH0vKX19dS5wcm90b3R5cGU9bmV3IG8sdS5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdSh0aGlzLl9pbnB1dCx0aGlzKX0sdS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX19zZXRfdGVtcGxhdGVkX3BhdHRlcm4oKX0sdS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbihjKXt2YXIgZD10aGlzLl9jcmVhdGUoKTtyZXR1cm4gZC5fZGlzYWJsZWRbY109ITAsZC5fdXBkYXRlKCksZH0sdS5wcm90b3R5cGUucmVhZF9vcHRpb25zPWZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMuX2NyZWF0ZSgpO2Zvcih2YXIgbSBpbiBsKWQuX2Rpc2FibGVkW21dPWMudGVtcGxhdGluZy5pbmRleE9mKG0pPT09LTE7cmV0dXJuIGQuX3VwZGF0ZSgpLGR9LHUucHJvdG90eXBlLmV4Y2x1ZGU9ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIGQuX2V4Y2x1ZGVkW2NdPSEwLGQuX3VwZGF0ZSgpLGR9LHUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oKXt2YXIgYz0iIjt0aGlzLl9tYXRjaF9wYXR0ZXJuP2M9dGhpcy5faW5wdXQucmVhZCh0aGlzLl9zdGFydGluZ19wYXR0ZXJuKTpjPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybix0aGlzLl9fdGVtcGxhdGVfcGF0dGVybik7Zm9yKHZhciBkPXRoaXMuX3JlYWRfdGVtcGxhdGUoKTtkOyl0aGlzLl9tYXRjaF9wYXR0ZXJuP2QrPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybik6ZCs9dGhpcy5faW5wdXQucmVhZFVudGlsKHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuKSxjKz1kLGQ9dGhpcy5fcmVhZF90ZW1wbGF0ZSgpO3JldHVybiB0aGlzLl91bnRpbF9hZnRlciYmKGMrPXRoaXMuX2lucHV0LnJlYWRVbnRpbEFmdGVyKHRoaXMuX3VudGlsX3BhdHRlcm4pKSxjfSx1LnByb3RvdHlwZS5fX3NldF90ZW1wbGF0ZWRfcGF0dGVybj1mdW5jdGlvbigpe3ZhciBjPVtdO3RoaXMuX2Rpc2FibGVkLnBocHx8Yy5wdXNoKHRoaXMuX19wYXR0ZXJucy5waHAuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSx0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzfHxjLnB1c2godGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnMuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSx0aGlzLl9kaXNhYmxlZC5lcmJ8fGMucHVzaCh0aGlzLl9fcGF0dGVybnMuZXJiLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSksdGhpcy5fZGlzYWJsZWQuZGphbmdvfHwoYy5wdXNoKHRoaXMuX19wYXR0ZXJucy5kamFuZ28uX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSxjLnB1c2godGhpcy5fX3BhdHRlcm5zLmRqYW5nb192YWx1ZS5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLGMucHVzaCh0aGlzLl9fcGF0dGVybnMuZGphbmdvX2NvbW1lbnQuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSksdGhpcy5fZGlzYWJsZWQuc21hcnR5fHxjLnB1c2godGhpcy5fX3BhdHRlcm5zLnNtYXJ0eS5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLHRoaXMuX3VudGlsX3BhdHRlcm4mJmMucHVzaCh0aGlzLl91bnRpbF9wYXR0ZXJuLnNvdXJjZSksdGhpcy5fX3RlbXBsYXRlX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cCgiKD86IitjLmpvaW4oInwiKSsiKSIpfSx1LnByb3RvdHlwZS5fcmVhZF90ZW1wbGF0ZT1mdW5jdGlvbigpe3ZhciBjPSIiLGQ9dGhpcy5faW5wdXQucGVlaygpO2lmKGQ9PT0iPCIpe3ZhciBtPXRoaXMuX2lucHV0LnBlZWsoMSk7IXRoaXMuX2Rpc2FibGVkLnBocCYmIXRoaXMuX2V4Y2x1ZGVkLnBocCYmbT09PSI/IiYmKGM9Y3x8dGhpcy5fX3BhdHRlcm5zLnBocC5yZWFkKCkpLCF0aGlzLl9kaXNhYmxlZC5lcmImJiF0aGlzLl9leGNsdWRlZC5lcmImJm09PT0iJSImJihjPWN8fHRoaXMuX19wYXR0ZXJucy5lcmIucmVhZCgpKX1lbHNlIGQ9PT0ieyImJighdGhpcy5fZGlzYWJsZWQuaGFuZGxlYmFycyYmIXRoaXMuX2V4Y2x1ZGVkLmhhbmRsZWJhcnMmJihjPWN8fHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX2NvbW1lbnQucmVhZCgpLGM9Y3x8dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfdW5lc2NhcGVkLnJlYWQoKSxjPWN8fHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzLnJlYWQoKSksdGhpcy5fZGlzYWJsZWQuZGphbmdvfHwoIXRoaXMuX2V4Y2x1ZGVkLmRqYW5nbyYmIXRoaXMuX2V4Y2x1ZGVkLmhhbmRsZWJhcnMmJihjPWN8fHRoaXMuX19wYXR0ZXJucy5kamFuZ29fdmFsdWUucmVhZCgpKSx0aGlzLl9leGNsdWRlZC5kamFuZ298fChjPWN8fHRoaXMuX19wYXR0ZXJucy5kamFuZ29fY29tbWVudC5yZWFkKCksYz1jfHx0aGlzLl9fcGF0dGVybnMuZGphbmdvLnJlYWQoKSkpLHRoaXMuX2Rpc2FibGVkLnNtYXJ0eXx8dGhpcy5fZGlzYWJsZWQuZGphbmdvJiZ0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzJiYoYz1jfHx0aGlzLl9fcGF0dGVybnMuc21hcnR5X2NvbW1lbnQucmVhZCgpLGM9Y3x8dGhpcy5fX3BhdHRlcm5zLnNtYXJ0eV9saXRlcmFsLnJlYWQoKSxjPWN8fHRoaXMuX19wYXR0ZXJucy5zbWFydHkucmVhZCgpKSk7cmV0dXJuIGN9LHIuZXhwb3J0cy5UZW1wbGF0YWJsZVBhdHRlcm49dX0sLCwsZnVuY3Rpb24ocixhLHMpe3ZhciBvPXMoMTkpLkJlYXV0aWZpZXIsbD1zKDIwKS5PcHRpb25zO2Z1bmN0aW9uIHUoYyxkLG0sZil7dmFyIGI9bmV3IG8oYyxkLG0sZik7cmV0dXJuIGIuYmVhdXRpZnkoKX1yLmV4cG9ydHM9dSxyLmV4cG9ydHMuZGVmYXVsdE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx9fSxmdW5jdGlvbihyLGEscyl7dmFyIG89cygyMCkuT3B0aW9ucyxsPXMoMikuT3V0cHV0LHU9cygyMSkuVG9rZW5pemVyLGM9cygyMSkuVE9LRU4sZD0vXHJcbnxbXHJcbl0vLG09L1xyXG58W1xyXG5dL2csZj1mdW5jdGlvbih2LGcpe3RoaXMuaW5kZW50X2xldmVsPTAsdGhpcy5hbGlnbm1lbnRfc2l6ZT0wLHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzPXYubWF4X3ByZXNlcnZlX25ld2xpbmVzLHRoaXMucHJlc2VydmVfbmV3bGluZXM9di5wcmVzZXJ2ZV9uZXdsaW5lcyx0aGlzLl9vdXRwdXQ9bmV3IGwodixnKX07Zi5wcm90b3R5cGUuY3VycmVudF9saW5lX2hhc19tYXRjaD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5fb3V0cHV0LmN1cnJlbnRfbGluZS5oYXNfbWF0Y2godil9LGYucHJvdG90eXBlLnNldF9zcGFjZV9iZWZvcmVfdG9rZW49ZnVuY3Rpb24odixnKXt0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPXYsdGhpcy5fb3V0cHV0Lm5vbl9icmVha2luZ19zcGFjZT1nfSxmLnByb3RvdHlwZS5zZXRfd3JhcF9wb2ludD1mdW5jdGlvbigpe3RoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuaW5kZW50X2xldmVsLHRoaXMuYWxpZ25tZW50X3NpemUpLHRoaXMuX291dHB1dC5zZXRfd3JhcF9wb2ludCgpfSxmLnByb3RvdHlwZS5hZGRfcmF3X3Rva2VuPWZ1bmN0aW9uKHYpe3RoaXMuX291dHB1dC5hZGRfcmF3X3Rva2VuKHYpfSxmLnByb3RvdHlwZS5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXM9ZnVuY3Rpb24odil7dmFyIGc9MDt2LnR5cGUhPT1jLlRFWFQmJnYucHJldmlvdXMudHlwZSE9PWMuVEVYVCYmKGc9di5uZXdsaW5lcz8xOjApLHRoaXMucHJlc2VydmVfbmV3bGluZXMmJihnPXYubmV3bGluZXM8dGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXMrMT92Lm5ld2xpbmVzOnRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzKzEpO2Zvcih2YXIgVD0wO1Q8ZztUKyspdGhpcy5wcmludF9uZXdsaW5lKFQ+MCk7cmV0dXJuIGchPT0wfSxmLnByb3RvdHlwZS50cmF2ZXJzZV93aGl0ZXNwYWNlPWZ1bmN0aW9uKHYpe3JldHVybiB2LndoaXRlc3BhY2VfYmVmb3JlfHx2Lm5ld2xpbmVzPyh0aGlzLnByaW50X3ByZXNlcnZlZF9uZXdsaW5lcyh2KXx8KHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApLCEwKTohMX0sZi5wcm90b3R5cGUucHJldmlvdXNfdG9rZW5fd3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vdXRwdXQucHJldmlvdXNfdG9rZW5fd3JhcHBlZH0sZi5wcm90b3R5cGUucHJpbnRfbmV3bGluZT1mdW5jdGlvbih2KXt0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKHYpfSxmLnByb3RvdHlwZS5wcmludF90b2tlbj1mdW5jdGlvbih2KXt2LnRleHQmJih0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLmluZGVudF9sZXZlbCx0aGlzLmFsaWdubWVudF9zaXplKSx0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKHYudGV4dCkpfSxmLnByb3RvdHlwZS5pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLmluZGVudF9sZXZlbCsrfSxmLnByb3RvdHlwZS5nZXRfZnVsbF9pbmRlbnQ9ZnVuY3Rpb24odil7cmV0dXJuIHY9dGhpcy5pbmRlbnRfbGV2ZWwrKHZ8fDApLHY8MT8iIjp0aGlzLl9vdXRwdXQuZ2V0X2luZGVudF9zdHJpbmcodil9O3ZhciBiPWZ1bmN0aW9uKHYpe2Zvcih2YXIgZz1udWxsLFQ9di5uZXh0O1QudHlwZSE9PWMuRU9GJiZ2LmNsb3NlZCE9PVQ7KXtpZihULnR5cGU9PT1jLkFUVFJJQlVURSYmVC50ZXh0PT09InR5cGUiKXtULm5leHQmJlQubmV4dC50eXBlPT09Yy5FUVVBTFMmJlQubmV4dC5uZXh0JiZULm5leHQubmV4dC50eXBlPT09Yy5WQUxVRSYmKGc9VC5uZXh0Lm5leHQudGV4dCk7YnJlYWt9VD1ULm5leHR9cmV0dXJuIGd9LHA9ZnVuY3Rpb24odixnKXt2YXIgVD1udWxsLHE9bnVsbDtyZXR1cm4gZy5jbG9zZWQ/KHY9PT0ic2NyaXB0Ij9UPSJ0ZXh0L2phdmFzY3JpcHQiOnY9PT0ic3R5bGUiJiYoVD0idGV4dC9jc3MiKSxUPWIoZyl8fFQsVC5zZWFyY2goInRleHQvY3NzIik+LTE/cT0iY3NzIjpULnNlYXJjaCgvbW9kdWxlfCgodGV4dHxhcHBsaWNhdGlvbnxkb2pvKVwvKHgtKT8oamF2YXNjcmlwdHxlY21hc2NyaXB0fGpzY3JpcHR8bGl2ZXNjcmlwdHwobGRcKyk/anNvbnxtZXRob2R8YXNwZWN0KSkvKT4tMT9xPSJqYXZhc2NyaXB0IjpULnNlYXJjaCgvKHRleHR8YXBwbGljYXRpb258ZG9qbylcLyh4LSk/KGh0bWwpLyk+LTE/cT0iaHRtbCI6VC5zZWFyY2goL3Rlc3RcL251bGwvKT4tMSYmKHE9Im51bGwiKSxxKTpudWxsfTtmdW5jdGlvbiB3KHYsZyl7cmV0dXJuIGcuaW5kZXhPZih2KSE9PS0xfWZ1bmN0aW9uIHgodixnLFQpe3RoaXMucGFyZW50PXZ8fG51bGwsdGhpcy50YWc9Zz9nLnRhZ19uYW1lOiIiLHRoaXMuaW5kZW50X2xldmVsPVR8fDAsdGhpcy5wYXJzZXJfdG9rZW49Z3x8bnVsbH1mdW5jdGlvbiBfKHYpe3RoaXMuX3ByaW50ZXI9dix0aGlzLl9jdXJyZW50X2ZyYW1lPW51bGx9Xy5wcm90b3R5cGUuZ2V0X3BhcnNlcl90b2tlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50X2ZyYW1lP3RoaXMuX2N1cnJlbnRfZnJhbWUucGFyc2VyX3Rva2VuOm51bGx9LF8ucHJvdG90eXBlLnJlY29yZF90YWc9ZnVuY3Rpb24odil7dmFyIGc9bmV3IHgodGhpcy5fY3VycmVudF9mcmFtZSx2LHRoaXMuX3ByaW50ZXIuaW5kZW50X2xldmVsKTt0aGlzLl9jdXJyZW50X2ZyYW1lPWd9LF8ucHJvdG90eXBlLl90cnlfcG9wX2ZyYW1lPWZ1bmN0aW9uKHYpe3ZhciBnPW51bGw7cmV0dXJuIHYmJihnPXYucGFyc2VyX3Rva2VuLHRoaXMuX3ByaW50ZXIuaW5kZW50X2xldmVsPXYuaW5kZW50X2xldmVsLHRoaXMuX2N1cnJlbnRfZnJhbWU9di5wYXJlbnQpLGd9LF8ucHJvdG90eXBlLl9nZXRfZnJhbWU9ZnVuY3Rpb24odixnKXtmb3IodmFyIFQ9dGhpcy5fY3VycmVudF9mcmFtZTtUJiZ2LmluZGV4T2YoVC50YWcpPT09LTE7KXtpZihnJiZnLmluZGV4T2YoVC50YWcpIT09LTEpe1Q9bnVsbDticmVha31UPVQucGFyZW50fXJldHVybiBUfSxfLnByb3RvdHlwZS50cnlfcG9wPWZ1bmN0aW9uKHYsZyl7dmFyIFQ9dGhpcy5fZ2V0X2ZyYW1lKFt2XSxnKTtyZXR1cm4gdGhpcy5fdHJ5X3BvcF9mcmFtZShUKX0sXy5wcm90b3R5cGUuaW5kZW50X3RvX3RhZz1mdW5jdGlvbih2KXt2YXIgZz10aGlzLl9nZXRfZnJhbWUodik7ZyYmKHRoaXMuX3ByaW50ZXIuaW5kZW50X2xldmVsPWcuaW5kZW50X2xldmVsKX07ZnVuY3Rpb24geSh2LGcsVCxxKXt0aGlzLl9zb3VyY2VfdGV4dD12fHwiIixnPWd8fHt9LHRoaXMuX2pzX2JlYXV0aWZ5PVQsdGhpcy5fY3NzX2JlYXV0aWZ5PXEsdGhpcy5fdGFnX3N0YWNrPW51bGw7dmFyIFM9bmV3IG8oZywiaHRtbCIpO3RoaXMuX29wdGlvbnM9Uyx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2U9dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXMuc3Vic3RyKDAsNSk9PT0iZm9yY2UiLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZV9leHBhbmRfbXVsdGlsaW5lPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzPT09ImZvcmNlLWV4cGFuZC1tdWx0aWxpbmUiLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZV9hbGlnbmVkPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzPT09ImZvcmNlLWFsaWduZWQiLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19hbGlnbmVkX211bHRpcGxlPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzPT09ImFsaWduZWQtbXVsdGlwbGUiLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZT10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcy5zdWJzdHIoMCw4KT09PSJwcmVzZXJ2ZSIsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlX2FsaWduZWQ9dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXM9PT0icHJlc2VydmUtYWxpZ25lZCJ9eS5wcm90b3R5cGUuYmVhdXRpZnk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vcHRpb25zLmRpc2FibGVkKXJldHVybiB0aGlzLl9zb3VyY2VfdGV4dDt2YXIgdj10aGlzLl9zb3VyY2VfdGV4dCxnPXRoaXMuX29wdGlvbnMuZW9sO3RoaXMuX29wdGlvbnMuZW9sPT09ImF1dG8iJiYoZz1gCmAsdiYmZC50ZXN0KHYpJiYoZz12Lm1hdGNoKGQpWzBdKSksdj12LnJlcGxhY2UobSxgCmApO3ZhciBUPXYubWF0Y2goL15bXHQgXSovKVswXSxxPXt0ZXh0OiIiLHR5cGU6IiJ9LFM9bmV3IEUsaz1uZXcgZih0aGlzLl9vcHRpb25zLFQpLE49bmV3IHUodix0aGlzLl9vcHRpb25zKS50b2tlbml6ZSgpO3RoaXMuX3RhZ19zdGFjaz1uZXcgXyhrKTtmb3IodmFyIEQ9bnVsbCxIPU4ubmV4dCgpO0gudHlwZSE9PWMuRU9GOylILnR5cGU9PT1jLlRBR19PUEVOfHxILnR5cGU9PT1jLkNPTU1FTlQ/KEQ9dGhpcy5faGFuZGxlX3RhZ19vcGVuKGssSCxTLHEpLFM9RCk6SC50eXBlPT09Yy5BVFRSSUJVVEV8fEgudHlwZT09PWMuRVFVQUxTfHxILnR5cGU9PT1jLlZBTFVFfHxILnR5cGU9PT1jLlRFWFQmJiFTLnRhZ19jb21wbGV0ZT9EPXRoaXMuX2hhbmRsZV9pbnNpZGVfdGFnKGssSCxTLE4pOkgudHlwZT09PWMuVEFHX0NMT1NFP0Q9dGhpcy5faGFuZGxlX3RhZ19jbG9zZShrLEgsUyk6SC50eXBlPT09Yy5URVhUP0Q9dGhpcy5faGFuZGxlX3RleHQoayxILFMpOmsuYWRkX3Jhd190b2tlbihIKSxxPUQsSD1OLm5leHQoKTt2YXIgRj1rLl9vdXRwdXQuZ2V0X2NvZGUoZyk7cmV0dXJuIEZ9LHkucHJvdG90eXBlLl9oYW5kbGVfdGFnX2Nsb3NlPWZ1bmN0aW9uKHYsZyxUKXt2YXIgcT17dGV4dDpnLnRleHQsdHlwZTpnLnR5cGV9O3JldHVybiB2LmFsaWdubWVudF9zaXplPTAsVC50YWdfY29tcGxldGU9ITAsdi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKGcubmV3bGluZXN8fGcud2hpdGVzcGFjZV9iZWZvcmUhPT0iIiwhMCksVC5pc191bmZvcm1hdHRlZD92LmFkZF9yYXdfdG9rZW4oZyk6KFQudGFnX3N0YXJ0X2NoYXI9PT0iPCImJih2LnNldF9zcGFjZV9iZWZvcmVfdG9rZW4oZy50ZXh0WzBdPT09Ii8iLCEwKSx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZSYmVC5oYXNfd3JhcHBlZF9hdHRycyYmdi5wcmludF9uZXdsaW5lKCExKSksdi5wcmludF90b2tlbihnKSksVC5pbmRlbnRfY29udGVudCYmIShULmlzX3VuZm9ybWF0dGVkfHxULmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpJiYodi5pbmRlbnQoKSxULmluZGVudF9jb250ZW50PSExKSwhVC5pc19pbmxpbmVfZWxlbWVudCYmIShULmlzX3VuZm9ybWF0dGVkfHxULmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpJiZ2LnNldF93cmFwX3BvaW50KCkscX0seS5wcm90b3R5cGUuX2hhbmRsZV9pbnNpZGVfdGFnPWZ1bmN0aW9uKHYsZyxULHEpe3ZhciBTPVQuaGFzX3dyYXBwZWRfYXR0cnMsaz17dGV4dDpnLnRleHQsdHlwZTpnLnR5cGV9O2lmKHYuc2V0X3NwYWNlX2JlZm9yZV90b2tlbihnLm5ld2xpbmVzfHxnLndoaXRlc3BhY2VfYmVmb3JlIT09IiIsITApLFQuaXNfdW5mb3JtYXR0ZWQpdi5hZGRfcmF3X3Rva2VuKGcpO2Vsc2UgaWYoVC50YWdfc3RhcnRfY2hhcj09PSJ7IiYmZy50eXBlPT09Yy5URVhUKXYucHJpbnRfcHJlc2VydmVkX25ld2xpbmVzKGcpPyhnLm5ld2xpbmVzPTAsdi5hZGRfcmF3X3Rva2VuKGcpKTp2LnByaW50X3Rva2VuKGcpO2Vsc2V7aWYoZy50eXBlPT09Yy5BVFRSSUJVVEU/KHYuc2V0X3NwYWNlX2JlZm9yZV90b2tlbighMCksVC5hdHRyX2NvdW50Kz0xKTooZy50eXBlPT09Yy5FUVVBTFN8fGcudHlwZT09PWMuVkFMVUUmJmcucHJldmlvdXMudHlwZT09PWMuRVFVQUxTKSYmdi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKCExKSxnLnR5cGU9PT1jLkFUVFJJQlVURSYmVC50YWdfc3RhcnRfY2hhcj09PSI8IiYmKCh0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmV8fHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZV9hbGlnbmVkKSYmKHYudHJhdmVyc2Vfd2hpdGVzcGFjZShnKSxTPVN8fGcubmV3bGluZXMhPT0wKSx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2UpKXt2YXIgTj1ULmF0dHJfY291bnQ+MTtpZih0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZSYmVC5hdHRyX2NvdW50PT09MSl7dmFyIEQ9ITAsSD0wLEY7ZG97aWYoRj1xLnBlZWsoSCksRi50eXBlPT09Yy5BVFRSSUJVVEUpe0Q9ITE7YnJlYWt9SCs9MX13aGlsZShIPDQmJkYudHlwZSE9PWMuRU9GJiZGLnR5cGUhPT1jLlRBR19DTE9TRSk7Tj0hRH1OJiYodi5wcmludF9uZXdsaW5lKCExKSxTPSEwKX12LnByaW50X3Rva2VuKGcpLFM9U3x8di5wcmV2aW91c190b2tlbl93cmFwcGVkKCksVC5oYXNfd3JhcHBlZF9hdHRycz1TfXJldHVybiBrfSx5LnByb3RvdHlwZS5faGFuZGxlX3RleHQ9ZnVuY3Rpb24odixnLFQpe3ZhciBxPXt0ZXh0OmcudGV4dCx0eXBlOiJUS19DT05URU5UIn07cmV0dXJuIFQuY3VzdG9tX2JlYXV0aWZpZXJfbmFtZT90aGlzLl9wcmludF9jdXN0b21fYmVhdGlmaWVyX3RleHQodixnLFQpOlQuaXNfdW5mb3JtYXR0ZWR8fFQuaXNfY29udGVudF91bmZvcm1hdHRlZD92LmFkZF9yYXdfdG9rZW4oZyk6KHYudHJhdmVyc2Vfd2hpdGVzcGFjZShnKSx2LnByaW50X3Rva2VuKGcpKSxxfSx5LnByb3RvdHlwZS5fcHJpbnRfY3VzdG9tX2JlYXRpZmllcl90ZXh0PWZ1bmN0aW9uKHYsZyxUKXt2YXIgcT10aGlzO2lmKGcudGV4dCE9PSIiKXt2YXIgUz1nLnRleHQsayxOPTEsRD0iIixIPSIiO1QuY3VzdG9tX2JlYXV0aWZpZXJfbmFtZT09PSJqYXZhc2NyaXB0IiYmdHlwZW9mIHRoaXMuX2pzX2JlYXV0aWZ5PT0iZnVuY3Rpb24iP2s9dGhpcy5fanNfYmVhdXRpZnk6VC5jdXN0b21fYmVhdXRpZmllcl9uYW1lPT09ImNzcyImJnR5cGVvZiB0aGlzLl9jc3NfYmVhdXRpZnk9PSJmdW5jdGlvbiI/az10aGlzLl9jc3NfYmVhdXRpZnk6VC5jdXN0b21fYmVhdXRpZmllcl9uYW1lPT09Imh0bWwiJiYoaz1mdW5jdGlvbihJLHope3ZhciBCPW5ldyB5KEkseixxLl9qc19iZWF1dGlmeSxxLl9jc3NfYmVhdXRpZnkpO3JldHVybiBCLmJlYXV0aWZ5KCl9KSx0aGlzLl9vcHRpb25zLmluZGVudF9zY3JpcHRzPT09ImtlZXAiP049MDp0aGlzLl9vcHRpb25zLmluZGVudF9zY3JpcHRzPT09InNlcGFyYXRlIiYmKE49LXYuaW5kZW50X2xldmVsKTt2YXIgRj12LmdldF9mdWxsX2luZGVudChOKTtpZihTPVMucmVwbGFjZSgvXG5bIFx0XSokLywiIiksVC5jdXN0b21fYmVhdXRpZmllcl9uYW1lIT09Imh0bWwiJiZTWzBdPT09IjwiJiZTLm1hdGNoKC9eKDwhLS18PCFcW0NEQVRBXFspLykpe3ZhciBMPS9eKDwhLS1bXlxuXSp8PCFcW0NEQVRBXFspKFxuPykoWyBcdFxuXSopKFtcc1xTXSopKC0tPnxdXT4pJC8uZXhlYyhTKTtpZighTCl7di5hZGRfcmF3X3Rva2VuKGcpO3JldHVybn1EPUYrTFsxXStgCmAsUz1MWzRdLExbNV0mJihIPUYrTFs1XSksUz1TLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLChMWzJdfHxMWzNdLmluZGV4T2YoYApgKSE9PS0xKSYmKEw9TFszXS5tYXRjaCgvWyBcdF0rJC8pLEwmJihnLndoaXRlc3BhY2VfYmVmb3JlPUxbMF0pKX1pZihTKWlmKGspe3ZhciBBPWZ1bmN0aW9uKCl7dGhpcy5lb2w9YApgfTtBLnByb3RvdHlwZT10aGlzLl9vcHRpb25zLnJhd19vcHRpb25zO3ZhciBNPW5ldyBBO1M9ayhGK1MsTSl9ZWxzZXt2YXIgVz1nLndoaXRlc3BhY2VfYmVmb3JlO1cmJihTPVMucmVwbGFjZShuZXcgUmVnRXhwKGAKKGArVysiKT8iLCJnIiksYApgKSksUz1GK1MucmVwbGFjZSgvXG4vZyxgCmArRil9RCYmKFM/Uz1EK1MrYApgK0g6Uz1EK0gpLHYucHJpbnRfbmV3bGluZSghMSksUyYmKGcudGV4dD1TLGcud2hpdGVzcGFjZV9iZWZvcmU9IiIsZy5uZXdsaW5lcz0wLHYuYWRkX3Jhd190b2tlbihnKSx2LnByaW50X25ld2xpbmUoITApKX19LHkucHJvdG90eXBlLl9oYW5kbGVfdGFnX29wZW49ZnVuY3Rpb24odixnLFQscSl7dmFyIFM9dGhpcy5fZ2V0X3RhZ19vcGVuX3Rva2VuKGcpO3JldHVybihULmlzX3VuZm9ybWF0dGVkfHxULmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpJiYhVC5pc19lbXB0eV9lbGVtZW50JiZnLnR5cGU9PT1jLlRBR19PUEVOJiZnLnRleHQuaW5kZXhPZigiPC8iKT09PTA/KHYuYWRkX3Jhd190b2tlbihnKSxTLnN0YXJ0X3RhZ190b2tlbj10aGlzLl90YWdfc3RhY2sudHJ5X3BvcChTLnRhZ19uYW1lKSk6KHYudHJhdmVyc2Vfd2hpdGVzcGFjZShnKSx0aGlzLl9zZXRfdGFnX3Bvc2l0aW9uKHYsZyxTLFQscSksUy5pc19pbmxpbmVfZWxlbWVudHx8di5zZXRfd3JhcF9wb2ludCgpLHYucHJpbnRfdG9rZW4oZykpLCh0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfYWxpZ25lZHx8dGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2FsaWduZWRfbXVsdGlwbGV8fHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZV9hbGlnbmVkKSYmKFMuYWxpZ25tZW50X3NpemU9Zy50ZXh0Lmxlbmd0aCsxKSwhUy50YWdfY29tcGxldGUmJiFTLmlzX3VuZm9ybWF0dGVkJiYodi5hbGlnbm1lbnRfc2l6ZT1TLmFsaWdubWVudF9zaXplKSxTfTt2YXIgRT1mdW5jdGlvbih2LGcpe2lmKHRoaXMucGFyZW50PXZ8fG51bGwsdGhpcy50ZXh0PSIiLHRoaXMudHlwZT0iVEtfVEFHX09QRU4iLHRoaXMudGFnX25hbWU9IiIsdGhpcy5pc19pbmxpbmVfZWxlbWVudD0hMSx0aGlzLmlzX3VuZm9ybWF0dGVkPSExLHRoaXMuaXNfY29udGVudF91bmZvcm1hdHRlZD0hMSx0aGlzLmlzX2VtcHR5X2VsZW1lbnQ9ITEsdGhpcy5pc19zdGFydF90YWc9ITEsdGhpcy5pc19lbmRfdGFnPSExLHRoaXMuaW5kZW50X2NvbnRlbnQ9ITEsdGhpcy5tdWx0aWxpbmVfY29udGVudD0hMSx0aGlzLmN1c3RvbV9iZWF1dGlmaWVyX25hbWU9bnVsbCx0aGlzLnN0YXJ0X3RhZ190b2tlbj1udWxsLHRoaXMuYXR0cl9jb3VudD0wLHRoaXMuaGFzX3dyYXBwZWRfYXR0cnM9ITEsdGhpcy5hbGlnbm1lbnRfc2l6ZT0wLHRoaXMudGFnX2NvbXBsZXRlPSExLHRoaXMudGFnX3N0YXJ0X2NoYXI9IiIsdGhpcy50YWdfY2hlY2s9IiIsIWcpdGhpcy50YWdfY29tcGxldGU9ITA7ZWxzZXt2YXIgVDt0aGlzLnRhZ19zdGFydF9jaGFyPWcudGV4dFswXSx0aGlzLnRleHQ9Zy50ZXh0LHRoaXMudGFnX3N0YXJ0X2NoYXI9PT0iPCI/KFQ9Zy50ZXh0Lm1hdGNoKC9ePChbXlxzPl0qKS8pLHRoaXMudGFnX2NoZWNrPVQ/VFsxXToiIik6KFQ9Zy50ZXh0Lm1hdGNoKC9ee3soPzpbXF5dfCNcKj8pPyhbXlxzfV0rKS8pLHRoaXMudGFnX2NoZWNrPVQ/VFsxXToiIixnLnRleHQ9PT0ie3sjPiImJnRoaXMudGFnX2NoZWNrPT09Ij4iJiZnLm5leHQhPT1udWxsJiYodGhpcy50YWdfY2hlY2s9Zy5uZXh0LnRleHQpKSx0aGlzLnRhZ19jaGVjaz10aGlzLnRhZ19jaGVjay50b0xvd2VyQ2FzZSgpLGcudHlwZT09PWMuQ09NTUVOVCYmKHRoaXMudGFnX2NvbXBsZXRlPSEwKSx0aGlzLmlzX3N0YXJ0X3RhZz10aGlzLnRhZ19jaGVjay5jaGFyQXQoMCkhPT0iLyIsdGhpcy50YWdfbmFtZT10aGlzLmlzX3N0YXJ0X3RhZz90aGlzLnRhZ19jaGVjazp0aGlzLnRhZ19jaGVjay5zdWJzdHIoMSksdGhpcy5pc19lbmRfdGFnPSF0aGlzLmlzX3N0YXJ0X3RhZ3x8Zy5jbG9zZWQmJmcuY2xvc2VkLnRleHQ9PT0iLz4iLHRoaXMuaXNfZW5kX3RhZz10aGlzLmlzX2VuZF90YWd8fHRoaXMudGFnX3N0YXJ0X2NoYXI9PT0ieyImJih0aGlzLnRleHQubGVuZ3RoPDN8fC9bXiNcXl0vLnRlc3QodGhpcy50ZXh0LmNoYXJBdCgyKSkpfX07eS5wcm90b3R5cGUuX2dldF90YWdfb3Blbl90b2tlbj1mdW5jdGlvbih2KXt2YXIgZz1uZXcgRSh0aGlzLl90YWdfc3RhY2suZ2V0X3BhcnNlcl90b2tlbigpLHYpO3JldHVybiBnLmFsaWdubWVudF9zaXplPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplLGcuaXNfZW5kX3RhZz1nLmlzX2VuZF90YWd8fHcoZy50YWdfY2hlY2ssdGhpcy5fb3B0aW9ucy52b2lkX2VsZW1lbnRzKSxnLmlzX2VtcHR5X2VsZW1lbnQ9Zy50YWdfY29tcGxldGV8fGcuaXNfc3RhcnRfdGFnJiZnLmlzX2VuZF90YWcsZy5pc191bmZvcm1hdHRlZD0hZy50YWdfY29tcGxldGUmJncoZy50YWdfY2hlY2ssdGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZCksZy5pc19jb250ZW50X3VuZm9ybWF0dGVkPSFnLmlzX2VtcHR5X2VsZW1lbnQmJncoZy50YWdfY2hlY2ssdGhpcy5fb3B0aW9ucy5jb250ZW50X3VuZm9ybWF0dGVkKSxnLmlzX2lubGluZV9lbGVtZW50PXcoZy50YWdfbmFtZSx0aGlzLl9vcHRpb25zLmlubGluZSl8fGcudGFnX3N0YXJ0X2NoYXI9PT0ieyIsZ30seS5wcm90b3R5cGUuX3NldF90YWdfcG9zaXRpb249ZnVuY3Rpb24odixnLFQscSxTKXtpZihULmlzX2VtcHR5X2VsZW1lbnR8fChULmlzX2VuZF90YWc/VC5zdGFydF90YWdfdG9rZW49dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoVC50YWdfbmFtZSk6KHRoaXMuX2RvX29wdGlvbmFsX2VuZF9lbGVtZW50KFQpJiYoVC5pc19pbmxpbmVfZWxlbWVudHx8di5wcmludF9uZXdsaW5lKCExKSksdGhpcy5fdGFnX3N0YWNrLnJlY29yZF90YWcoVCksKFQudGFnX25hbWU9PT0ic2NyaXB0Inx8VC50YWdfbmFtZT09PSJzdHlsZSIpJiYhKFQuaXNfdW5mb3JtYXR0ZWR8fFQuaXNfY29udGVudF91bmZvcm1hdHRlZCkmJihULmN1c3RvbV9iZWF1dGlmaWVyX25hbWU9cChULnRhZ19jaGVjayxnKSkpKSx3KFQudGFnX2NoZWNrLHRoaXMuX29wdGlvbnMuZXh0cmFfbGluZXJzKSYmKHYucHJpbnRfbmV3bGluZSghMSksdi5fb3V0cHV0Lmp1c3RfYWRkZWRfYmxhbmtsaW5lKCl8fHYucHJpbnRfbmV3bGluZSghMCkpLFQuaXNfZW1wdHlfZWxlbWVudCl7aWYoVC50YWdfc3RhcnRfY2hhcj09PSJ7IiYmVC50YWdfY2hlY2s9PT0iZWxzZSIpe3RoaXMuX3RhZ19zdGFjay5pbmRlbnRfdG9fdGFnKFsiaWYiLCJ1bmxlc3MiLCJlYWNoIl0pLFQuaW5kZW50X2NvbnRlbnQ9ITA7dmFyIGs9di5jdXJyZW50X2xpbmVfaGFzX21hdGNoKC97eyNpZi8pO2t8fHYucHJpbnRfbmV3bGluZSghMSl9VC50YWdfbmFtZT09PSIhLS0iJiZTLnR5cGU9PT1jLlRBR19DTE9TRSYmcS5pc19lbmRfdGFnJiZULnRleHQuaW5kZXhPZihgCmApPT09LTF8fChULmlzX2lubGluZV9lbGVtZW50fHxULmlzX3VuZm9ybWF0dGVkfHx2LnByaW50X25ld2xpbmUoITEpLHRoaXMuX2NhbGNsdWF0ZV9wYXJlbnRfbXVsdGlsaW5lKHYsVCkpfWVsc2UgaWYoVC5pc19lbmRfdGFnKXt2YXIgTj0hMTtOPVQuc3RhcnRfdGFnX3Rva2VuJiZULnN0YXJ0X3RhZ190b2tlbi5tdWx0aWxpbmVfY29udGVudCxOPU58fCFULmlzX2lubGluZV9lbGVtZW50JiYhKHEuaXNfaW5saW5lX2VsZW1lbnR8fHEuaXNfdW5mb3JtYXR0ZWQpJiYhKFMudHlwZT09PWMuVEFHX0NMT1NFJiZULnN0YXJ0X3RhZ190b2tlbj09PXEpJiZTLnR5cGUhPT0iVEtfQ09OVEVOVCIsKFQuaXNfY29udGVudF91bmZvcm1hdHRlZHx8VC5pc191bmZvcm1hdHRlZCkmJihOPSExKSxOJiZ2LnByaW50X25ld2xpbmUoITEpfWVsc2UgVC5pbmRlbnRfY29udGVudD0hVC5jdXN0b21fYmVhdXRpZmllcl9uYW1lLFQudGFnX3N0YXJ0X2NoYXI9PT0iPCImJihULnRhZ19uYW1lPT09Imh0bWwiP1QuaW5kZW50X2NvbnRlbnQ9dGhpcy5fb3B0aW9ucy5pbmRlbnRfaW5uZXJfaHRtbDpULnRhZ19uYW1lPT09ImhlYWQiP1QuaW5kZW50X2NvbnRlbnQ9dGhpcy5fb3B0aW9ucy5pbmRlbnRfaGVhZF9pbm5lcl9odG1sOlQudGFnX25hbWU9PT0iYm9keSImJihULmluZGVudF9jb250ZW50PXRoaXMuX29wdGlvbnMuaW5kZW50X2JvZHlfaW5uZXJfaHRtbCkpLCEoVC5pc19pbmxpbmVfZWxlbWVudHx8VC5pc191bmZvcm1hdHRlZCkmJihTLnR5cGUhPT0iVEtfQ09OVEVOVCJ8fFQuaXNfY29udGVudF91bmZvcm1hdHRlZCkmJnYucHJpbnRfbmV3bGluZSghMSksdGhpcy5fY2FsY2x1YXRlX3BhcmVudF9tdWx0aWxpbmUodixUKX0seS5wcm90b3R5cGUuX2NhbGNsdWF0ZV9wYXJlbnRfbXVsdGlsaW5lPWZ1bmN0aW9uKHYsZyl7Zy5wYXJlbnQmJnYuX291dHB1dC5qdXN0X2FkZGVkX25ld2xpbmUoKSYmISgoZy5pc19pbmxpbmVfZWxlbWVudHx8Zy5pc191bmZvcm1hdHRlZCkmJmcucGFyZW50LmlzX2lubGluZV9lbGVtZW50KSYmKGcucGFyZW50Lm11bHRpbGluZV9jb250ZW50PSEwKX07dmFyIFI9WyJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYmxvY2txdW90ZSIsImRldGFpbHMiLCJkaXYiLCJkbCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkZXIiLCJociIsIm1haW4iLCJuYXYiLCJvbCIsInAiLCJwcmUiLCJzZWN0aW9uIiwidGFibGUiLCJ1bCJdLFA9WyJhIiwiYXVkaW8iLCJkZWwiLCJpbnMiLCJtYXAiLCJub3NjcmlwdCIsInZpZGVvIl07eS5wcm90b3R5cGUuX2RvX29wdGlvbmFsX2VuZF9lbGVtZW50PWZ1bmN0aW9uKHYpe3ZhciBnPW51bGw7aWYoISh2LmlzX2VtcHR5X2VsZW1lbnR8fCF2LmlzX3N0YXJ0X3RhZ3x8IXYucGFyZW50KSl7aWYodi50YWdfbmFtZT09PSJib2R5IilnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJoZWFkIik7ZWxzZSBpZih2LnRhZ19uYW1lPT09ImxpIilnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJsaSIsWyJvbCIsInVsIl0pO2Vsc2UgaWYodi50YWdfbmFtZT09PSJkZCJ8fHYudGFnX25hbWU9PT0iZHQiKWc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImR0IixbImRsIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImRkIixbImRsIl0pO2Vsc2UgaWYodi5wYXJlbnQudGFnX25hbWU9PT0icCImJlIuaW5kZXhPZih2LnRhZ19uYW1lKSE9PS0xKXt2YXIgVD12LnBhcmVudC5wYXJlbnQ7KCFUfHxQLmluZGV4T2YoVC50YWdfbmFtZSk9PT0tMSkmJihnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJwIikpfWVsc2Ugdi50YWdfbmFtZT09PSJycCJ8fHYudGFnX25hbWU9PT0icnQiPyhnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJydCIsWyJydWJ5IiwicnRjIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInJwIixbInJ1YnkiLCJydGMiXSkpOnYudGFnX25hbWU9PT0ib3B0Z3JvdXAiP2c9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoIm9wdGdyb3VwIixbInNlbGVjdCJdKTp2LnRhZ19uYW1lPT09Im9wdGlvbiI/Zz1nfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgib3B0aW9uIixbInNlbGVjdCIsImRhdGFsaXN0Iiwib3B0Z3JvdXAiXSk6di50YWdfbmFtZT09PSJjb2xncm91cCI/Zz1nfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY2FwdGlvbiIsWyJ0YWJsZSJdKTp2LnRhZ19uYW1lPT09InRoZWFkIj8oZz1nfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY2FwdGlvbiIsWyJ0YWJsZSJdKSxnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjb2xncm91cCIsWyJ0YWJsZSJdKSk6di50YWdfbmFtZT09PSJ0Ym9keSJ8fHYudGFnX25hbWU9PT0idGZvb3QiPyhnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjYXB0aW9uIixbInRhYmxlIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNvbGdyb3VwIixbInRhYmxlIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRoZWFkIixbInRhYmxlIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRib2R5IixbInRhYmxlIl0pKTp2LnRhZ19uYW1lPT09InRyIj8oZz1nfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY2FwdGlvbiIsWyJ0YWJsZSJdKSxnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjb2xncm91cCIsWyJ0YWJsZSJdKSxnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJ0ciIsWyJ0YWJsZSIsInRoZWFkIiwidGJvZHkiLCJ0Zm9vdCJdKSk6KHYudGFnX25hbWU9PT0idGgifHx2LnRhZ19uYW1lPT09InRkIikmJihnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJ0ZCIsWyJ0YWJsZSIsInRoZWFkIiwidGJvZHkiLCJ0Zm9vdCIsInRyIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRoIixbInRhYmxlIiwidGhlYWQiLCJ0Ym9keSIsInRmb290IiwidHIiXSkpO3JldHVybiB2LnBhcmVudD10aGlzLl90YWdfc3RhY2suZ2V0X3BhcnNlcl90b2tlbigpLGd9fSxyLmV4cG9ydHMuQmVhdXRpZmllcj15fSxmdW5jdGlvbihyLGEscyl7dmFyIG89cyg2KS5PcHRpb25zO2Z1bmN0aW9uIGwodSl7by5jYWxsKHRoaXMsdSwiaHRtbCIpLHRoaXMudGVtcGxhdGluZy5sZW5ndGg9PT0xJiZ0aGlzLnRlbXBsYXRpbmdbMF09PT0iYXV0byImJih0aGlzLnRlbXBsYXRpbmc9WyJkamFuZ28iLCJlcmIiLCJoYW5kbGViYXJzIiwicGhwIl0pLHRoaXMuaW5kZW50X2lubmVyX2h0bWw9dGhpcy5fZ2V0X2Jvb2xlYW4oImluZGVudF9pbm5lcl9odG1sIiksdGhpcy5pbmRlbnRfYm9keV9pbm5lcl9odG1sPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfYm9keV9pbm5lcl9odG1sIiwhMCksdGhpcy5pbmRlbnRfaGVhZF9pbm5lcl9odG1sPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfaGVhZF9pbm5lcl9odG1sIiwhMCksdGhpcy5pbmRlbnRfaGFuZGxlYmFycz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2hhbmRsZWJhcnMiLCEwKSx0aGlzLndyYXBfYXR0cmlidXRlcz10aGlzLl9nZXRfc2VsZWN0aW9uKCJ3cmFwX2F0dHJpYnV0ZXMiLFsiYXV0byIsImZvcmNlIiwiZm9yY2UtYWxpZ25lZCIsImZvcmNlLWV4cGFuZC1tdWx0aWxpbmUiLCJhbGlnbmVkLW11bHRpcGxlIiwicHJlc2VydmUiLCJwcmVzZXJ2ZS1hbGlnbmVkIl0pLHRoaXMud3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplPXRoaXMuX2dldF9udW1iZXIoIndyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZSIsdGhpcy5pbmRlbnRfc2l6ZSksdGhpcy5leHRyYV9saW5lcnM9dGhpcy5fZ2V0X2FycmF5KCJleHRyYV9saW5lcnMiLFsiaGVhZCIsImJvZHkiLCIvaHRtbCJdKSx0aGlzLmlubGluZT10aGlzLl9nZXRfYXJyYXkoImlubGluZSIsWyJhIiwiYWJiciIsImFyZWEiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNpdGUiLCJjb2RlIiwiZGF0YSIsImRhdGFsaXN0IiwiZGVsIiwiZGZuIiwiZW0iLCJlbWJlZCIsImkiLCJpZnJhbWUiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImtleWdlbiIsImxhYmVsIiwibWFwIiwibWFyayIsIm1hdGgiLCJtZXRlciIsIm5vc2NyaXB0Iiwib2JqZWN0Iiwib3V0cHV0IiwicHJvZ3Jlc3MiLCJxIiwicnVieSIsInMiLCJzYW1wIiwic2VsZWN0Iiwic21hbGwiLCJzcGFuIiwic3Ryb25nIiwic3ViIiwic3VwIiwic3ZnIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRpbWUiLCJ1IiwidmFyIiwidmlkZW8iLCJ3YnIiLCJ0ZXh0IiwiYWNyb255bSIsImJpZyIsInN0cmlrZSIsInR0Il0pLHRoaXMudm9pZF9lbGVtZW50cz10aGlzLl9nZXRfYXJyYXkoInZvaWRfZWxlbWVudHMiLFsiYXJlYSIsImJhc2UiLCJiciIsImNvbCIsImVtYmVkIiwiaHIiLCJpbWciLCJpbnB1dCIsImtleWdlbiIsImxpbmsiLCJtZW51aXRlbSIsIm1ldGEiLCJwYXJhbSIsInNvdXJjZSIsInRyYWNrIiwid2JyIiwiIWRvY3R5cGUiLCI/eG1sIiwiYmFzZWZvbnQiLCJpc2luZGV4Il0pLHRoaXMudW5mb3JtYXR0ZWQ9dGhpcy5fZ2V0X2FycmF5KCJ1bmZvcm1hdHRlZCIsW10pLHRoaXMuY29udGVudF91bmZvcm1hdHRlZD10aGlzLl9nZXRfYXJyYXkoImNvbnRlbnRfdW5mb3JtYXR0ZWQiLFsicHJlIiwidGV4dGFyZWEiXSksdGhpcy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcj10aGlzLl9nZXRfY2hhcmFjdGVycygidW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIiKSx0aGlzLmluZGVudF9zY3JpcHRzPXRoaXMuX2dldF9zZWxlY3Rpb24oImluZGVudF9zY3JpcHRzIixbIm5vcm1hbCIsImtlZXAiLCJzZXBhcmF0ZSJdKX1sLnByb3RvdHlwZT1uZXcgbyxyLmV4cG9ydHMuT3B0aW9ucz1sfSxmdW5jdGlvbihyLGEscyl7dmFyIG89cyg5KS5Ub2tlbml6ZXIsbD1zKDkpLlRPS0VOLHU9cygxMykuRGlyZWN0aXZlcyxjPXMoMTQpLlRlbXBsYXRhYmxlUGF0dGVybixkPXMoMTIpLlBhdHRlcm4sbT17VEFHX09QRU46IlRLX1RBR19PUEVOIixUQUdfQ0xPU0U6IlRLX1RBR19DTE9TRSIsQVRUUklCVVRFOiJUS19BVFRSSUJVVEUiLEVRVUFMUzoiVEtfRVFVQUxTIixWQUxVRToiVEtfVkFMVUUiLENPTU1FTlQ6IlRLX0NPTU1FTlQiLFRFWFQ6IlRLX1RFWFQiLFVOS05PV046IlRLX1VOS05PV04iLFNUQVJUOmwuU1RBUlQsUkFXOmwuUkFXLEVPRjpsLkVPRn0sZj1uZXcgdSgvPFwhLS0vLC8tLT4vKSxiPWZ1bmN0aW9uKHAsdyl7by5jYWxsKHRoaXMscCx3KSx0aGlzLl9jdXJyZW50X3RhZ19uYW1lPSIiO3ZhciB4PW5ldyBjKHRoaXMuX2lucHV0KS5yZWFkX29wdGlvbnModGhpcy5fb3B0aW9ucyksXz1uZXcgZCh0aGlzLl9pbnB1dCk7aWYodGhpcy5fX3BhdHRlcm5zPXt3b3JkOngudW50aWwoL1tcblxyXHQgPF0vKSxzaW5nbGVfcXVvdGU6eC51bnRpbF9hZnRlcigvJy8pLGRvdWJsZV9xdW90ZTp4LnVudGlsX2FmdGVyKC8iLyksYXR0cmlidXRlOngudW50aWwoL1tcblxyXHQgPT5dfFwvPi8pLGVsZW1lbnRfbmFtZTp4LnVudGlsKC9bXG5cclx0ID5cL10vKSxoYW5kbGViYXJzX2NvbW1lbnQ6Xy5zdGFydGluZ193aXRoKC97eyEtLS8pLnVudGlsX2FmdGVyKC8tLX19LyksaGFuZGxlYmFyczpfLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LyksaGFuZGxlYmFyc19vcGVuOl8udW50aWwoL1tcblxyXHQgfV0vKSxoYW5kbGViYXJzX3Jhd19jbG9zZTpfLnVudGlsKC99fS8pLGNvbW1lbnQ6Xy5zdGFydGluZ193aXRoKC88IS0tLykudW50aWxfYWZ0ZXIoLy0tPi8pLGNkYXRhOl8uc3RhcnRpbmdfd2l0aCgvPCFcW0NEQVRBXFsvKS51bnRpbF9hZnRlcigvXV0+LyksY29uZGl0aW9uYWxfY29tbWVudDpfLnN0YXJ0aW5nX3dpdGgoLzwhXFsvKS51bnRpbF9hZnRlcigvXT4vKSxwcm9jZXNzaW5nOl8uc3RhcnRpbmdfd2l0aCgvPFw/LykudW50aWxfYWZ0ZXIoL1w/Pi8pfSx0aGlzLl9vcHRpb25zLmluZGVudF9oYW5kbGViYXJzJiYodGhpcy5fX3BhdHRlcm5zLndvcmQ9dGhpcy5fX3BhdHRlcm5zLndvcmQuZXhjbHVkZSgiaGFuZGxlYmFycyIpKSx0aGlzLl91bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcj1udWxsLHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIpe3ZhciB5PXRoaXMuX2lucHV0LmdldF9saXRlcmFsX3JlZ2V4cCh0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyKTt0aGlzLl9fcGF0dGVybnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXI9Xy5tYXRjaGluZyh5KS51bnRpbF9hZnRlcih5KX19O2IucHJvdG90eXBlPW5ldyBvLGIucHJvdG90eXBlLl9pc19jb21tZW50PWZ1bmN0aW9uKHApe3JldHVybiExfSxiLnByb3RvdHlwZS5faXNfb3BlbmluZz1mdW5jdGlvbihwKXtyZXR1cm4gcC50eXBlPT09bS5UQUdfT1BFTn0sYi5wcm90b3R5cGUuX2lzX2Nsb3Npbmc9ZnVuY3Rpb24ocCx3KXtyZXR1cm4gcC50eXBlPT09bS5UQUdfQ0xPU0UmJncmJigocC50ZXh0PT09Ij4ifHxwLnRleHQ9PT0iLz4iKSYmdy50ZXh0WzBdPT09IjwifHxwLnRleHQ9PT0ifX0iJiZ3LnRleHRbMF09PT0ieyImJncudGV4dFsxXT09PSJ7Iil9LGIucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRfdGFnX25hbWU9IiJ9LGIucHJvdG90eXBlLl9nZXRfbmV4dF90b2tlbj1mdW5jdGlvbihwLHcpe3ZhciB4PW51bGw7dGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt2YXIgXz10aGlzLl9pbnB1dC5wZWVrKCk7cmV0dXJuIF89PT1udWxsP3RoaXMuX2NyZWF0ZV90b2tlbihtLkVPRiwiIik6KHg9eHx8dGhpcy5fcmVhZF9vcGVuX2hhbmRsZWJhcnMoXyx3KSx4PXh8fHRoaXMuX3JlYWRfYXR0cmlidXRlKF8scCx3KSx4PXh8fHRoaXMuX3JlYWRfY2xvc2UoXyx3KSx4PXh8fHRoaXMuX3JlYWRfcmF3X2NvbnRlbnQoXyxwLHcpLHg9eHx8dGhpcy5fcmVhZF9jb250ZW50X3dvcmQoXykseD14fHx0aGlzLl9yZWFkX2NvbW1lbnRfb3JfY2RhdGEoXykseD14fHx0aGlzLl9yZWFkX3Byb2Nlc3NpbmcoXykseD14fHx0aGlzLl9yZWFkX29wZW4oXyx3KSx4PXh8fHRoaXMuX2NyZWF0ZV90b2tlbihtLlVOS05PV04sdGhpcy5faW5wdXQubmV4dCgpKSx4KX0sYi5wcm90b3R5cGUuX3JlYWRfY29tbWVudF9vcl9jZGF0YT1mdW5jdGlvbihwKXt2YXIgdz1udWxsLHg9bnVsbCxfPW51bGw7aWYocD09PSI8Iil7dmFyIHk9dGhpcy5faW5wdXQucGVlaygxKTt5PT09IiEiJiYoeD10aGlzLl9fcGF0dGVybnMuY29tbWVudC5yZWFkKCkseD8oXz1mLmdldF9kaXJlY3RpdmVzKHgpLF8mJl8uaWdub3JlPT09InN0YXJ0IiYmKHgrPWYucmVhZElnbm9yZWQodGhpcy5faW5wdXQpKSk6eD10aGlzLl9fcGF0dGVybnMuY2RhdGEucmVhZCgpKSx4JiYodz10aGlzLl9jcmVhdGVfdG9rZW4obS5DT01NRU5ULHgpLHcuZGlyZWN0aXZlcz1fKX1yZXR1cm4gd30sYi5wcm90b3R5cGUuX3JlYWRfcHJvY2Vzc2luZz1mdW5jdGlvbihwKXt2YXIgdz1udWxsLHg9bnVsbCxfPW51bGw7aWYocD09PSI8Iil7dmFyIHk9dGhpcy5faW5wdXQucGVlaygxKTsoeT09PSIhInx8eT09PSI/IikmJih4PXRoaXMuX19wYXR0ZXJucy5jb25kaXRpb25hbF9jb21tZW50LnJlYWQoKSx4PXh8fHRoaXMuX19wYXR0ZXJucy5wcm9jZXNzaW5nLnJlYWQoKSkseCYmKHc9dGhpcy5fY3JlYXRlX3Rva2VuKG0uQ09NTUVOVCx4KSx3LmRpcmVjdGl2ZXM9Xyl9cmV0dXJuIHd9LGIucHJvdG90eXBlLl9yZWFkX29wZW49ZnVuY3Rpb24ocCx3KXt2YXIgeD1udWxsLF89bnVsbDtyZXR1cm4gd3x8cD09PSI8IiYmKHg9dGhpcy5faW5wdXQubmV4dCgpLHRoaXMuX2lucHV0LnBlZWsoKT09PSIvIiYmKHgrPXRoaXMuX2lucHV0Lm5leHQoKSkseCs9dGhpcy5fX3BhdHRlcm5zLmVsZW1lbnRfbmFtZS5yZWFkKCksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfT1BFTix4KSksX30sYi5wcm90b3R5cGUuX3JlYWRfb3Blbl9oYW5kbGViYXJzPWZ1bmN0aW9uKHAsdyl7dmFyIHg9bnVsbCxfPW51bGw7cmV0dXJuIHd8fHRoaXMuX29wdGlvbnMuaW5kZW50X2hhbmRsZWJhcnMmJnA9PT0ieyImJnRoaXMuX2lucHV0LnBlZWsoMSk9PT0ieyImJih0aGlzLl9pbnB1dC5wZWVrKDIpPT09IiEiPyh4PXRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX2NvbW1lbnQucmVhZCgpLHg9eHx8dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnMucmVhZCgpLF89dGhpcy5fY3JlYXRlX3Rva2VuKG0uQ09NTUVOVCx4KSk6KHg9dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfb3Blbi5yZWFkKCksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfT1BFTix4KSkpLF99LGIucHJvdG90eXBlLl9yZWFkX2Nsb3NlPWZ1bmN0aW9uKHAsdyl7dmFyIHg9bnVsbCxfPW51bGw7cmV0dXJuIHcmJih3LnRleHRbMF09PT0iPCImJihwPT09Ij4ifHxwPT09Ii8iJiZ0aGlzLl9pbnB1dC5wZWVrKDEpPT09Ij4iKT8oeD10aGlzLl9pbnB1dC5uZXh0KCkscD09PSIvIiYmKHgrPXRoaXMuX2lucHV0Lm5leHQoKSksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfQ0xPU0UseCkpOncudGV4dFswXT09PSJ7IiYmcD09PSJ9IiYmdGhpcy5faW5wdXQucGVlaygxKT09PSJ9IiYmKHRoaXMuX2lucHV0Lm5leHQoKSx0aGlzLl9pbnB1dC5uZXh0KCksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfQ0xPU0UsIn19IikpKSxffSxiLnByb3RvdHlwZS5fcmVhZF9hdHRyaWJ1dGU9ZnVuY3Rpb24ocCx3LHgpe3ZhciBfPW51bGwseT0iIjtpZih4JiZ4LnRleHRbMF09PT0iPCIpaWYocD09PSI9IilfPXRoaXMuX2NyZWF0ZV90b2tlbihtLkVRVUFMUyx0aGlzLl9pbnB1dC5uZXh0KCkpO2Vsc2UgaWYocD09PSciJ3x8cD09PSInIil7dmFyIEU9dGhpcy5faW5wdXQubmV4dCgpO3A9PT0nIic/RSs9dGhpcy5fX3BhdHRlcm5zLmRvdWJsZV9xdW90ZS5yZWFkKCk6RSs9dGhpcy5fX3BhdHRlcm5zLnNpbmdsZV9xdW90ZS5yZWFkKCksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5WQUxVRSxFKX1lbHNlIHk9dGhpcy5fX3BhdHRlcm5zLmF0dHJpYnV0ZS5yZWFkKCkseSYmKHcudHlwZT09PW0uRVFVQUxTP189dGhpcy5fY3JlYXRlX3Rva2VuKG0uVkFMVUUseSk6Xz10aGlzLl9jcmVhdGVfdG9rZW4obS5BVFRSSUJVVEUseSkpO3JldHVybiBffSxiLnByb3RvdHlwZS5faXNfY29udGVudF91bmZvcm1hdHRlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy52b2lkX2VsZW1lbnRzLmluZGV4T2YocCk9PT0tMSYmKHRoaXMuX29wdGlvbnMuY29udGVudF91bmZvcm1hdHRlZC5pbmRleE9mKHApIT09LTF8fHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWQuaW5kZXhPZihwKSE9PS0xKX0sYi5wcm90b3R5cGUuX3JlYWRfcmF3X2NvbnRlbnQ9ZnVuY3Rpb24ocCx3LHgpe3ZhciBfPSIiO2lmKHgmJngudGV4dFswXT09PSJ7IilfPXRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX3Jhd19jbG9zZS5yZWFkKCk7ZWxzZSBpZih3LnR5cGU9PT1tLlRBR19DTE9TRSYmdy5vcGVuZWQudGV4dFswXT09PSI8IiYmdy50ZXh0WzBdIT09Ii8iKXt2YXIgeT13Lm9wZW5lZC50ZXh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO2lmKHk9PT0ic2NyaXB0Inx8eT09PSJzdHlsZSIpe3ZhciBFPXRoaXMuX3JlYWRfY29tbWVudF9vcl9jZGF0YShwKTtpZihFKXJldHVybiBFLnR5cGU9bS5URVhULEU7Xz10aGlzLl9pbnB1dC5yZWFkVW50aWwobmV3IFJlZ0V4cCgiPC8iK3krIltcXG5cXHJcXHQgXSo/PiIsImlnIikpfWVsc2UgdGhpcy5faXNfY29udGVudF91bmZvcm1hdHRlZCh5KSYmKF89dGhpcy5faW5wdXQucmVhZFVudGlsKG5ldyBSZWdFeHAoIjwvIit5KyJbXFxuXFxyXFx0IF0qPz4iLCJpZyIpKSl9cmV0dXJuIF8/dGhpcy5fY3JlYXRlX3Rva2VuKG0uVEVYVCxfKTpudWxsfSxiLnByb3RvdHlwZS5fcmVhZF9jb250ZW50X3dvcmQ9ZnVuY3Rpb24ocCl7dmFyIHc9IiI7aWYodGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlciYmcD09PXRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXJbMF0mJih3PXRoaXMuX19wYXR0ZXJucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlci5yZWFkKCkpLHd8fCh3PXRoaXMuX19wYXR0ZXJucy53b3JkLnJlYWQoKSksdylyZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKG0uVEVYVCx3KX0sci5leHBvcnRzLlRva2VuaXplcj1iLHIuZXhwb3J0cy5UT0tFTj1tfV0sdD17fTtmdW5jdGlvbiBuKHIpe3ZhciBhPXRbcl07aWYoYSE9PXZvaWQgMClyZXR1cm4gYS5leHBvcnRzO3ZhciBzPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKHMscy5leHBvcnRzLG4pLHMuZXhwb3J0c312YXIgaT1uKDE4KTtucz1pfSkoKTtmdW5jdGlvbiBNdShlLHQpe3JldHVybiBucyhlLHQsRXUsUnUpfWZ1bmN0aW9uIER1KGUsdCxuKXt2YXIgaT1lLmdldFRleHQoKSxyPSEwLGE9MCxzPW4udGFiU2l6ZXx8NDtpZih0KXtmb3IodmFyIG89ZS5vZmZzZXRBdCh0LnN0YXJ0KSxsPW87bD4wJiZycyhpLGwtMSk7KWwtLTtsPT09MHx8aXMoaSxsLTEpP289bDpsPG8mJihvPWwrMSk7Zm9yKHZhciB1PWUub2Zmc2V0QXQodC5lbmQpLGM9dTtjPGkubGVuZ3RoJiZycyhpLGMpOyljKys7KGM9PT1pLmxlbmd0aHx8aXMoaSxjKSkmJih1PWMpLHQ9WS5jcmVhdGUoZS5wb3NpdGlvbkF0KG8pLGUucG9zaXRpb25BdCh1KSk7dmFyIGQ9aS5zdWJzdHJpbmcoMCxvKTtpZihuZXcgUmVnRXhwKC8uKls8XVtePl0qJC8pLnRlc3QoZCkpcmV0dXJuIGk9aS5zdWJzdHJpbmcobyx1KSxbe3JhbmdlOnQsbmV3VGV4dDppfV07aWYocj11PT09aS5sZW5ndGgsaT1pLnN1YnN0cmluZyhvLHUpLG8hPT0wKXt2YXIgbT1lLm9mZnNldEF0KGNlLmNyZWF0ZSh0LnN0YXJ0LmxpbmUsMCkpO2E9enUoZS5nZXRUZXh0KCksbSxuKX19ZWxzZSB0PVkuY3JlYXRlKGNlLmNyZWF0ZSgwLDApLGUucG9zaXRpb25BdChpLmxlbmd0aCkpO3ZhciBmPXtpbmRlbnRfc2l6ZTpzLGluZGVudF9jaGFyOm4uaW5zZXJ0U3BhY2VzPyIgIjoiCSIsaW5kZW50X2VtcHR5X2xpbmVzOnllKG4sImluZGVudEVtcHR5TGluZXMiLCExKSx3cmFwX2xpbmVfbGVuZ3RoOnllKG4sIndyYXBMaW5lTGVuZ3RoIiwxMjApLHVuZm9ybWF0dGVkOnVpKG4sInVuZm9ybWF0dGVkIix2b2lkIDApLGNvbnRlbnRfdW5mb3JtYXR0ZWQ6dWkobiwiY29udGVudFVuZm9ybWF0dGVkIix2b2lkIDApLGluZGVudF9pbm5lcl9odG1sOnllKG4sImluZGVudElubmVySHRtbCIsITEpLHByZXNlcnZlX25ld2xpbmVzOnllKG4sInByZXNlcnZlTmV3TGluZXMiLCEwKSxtYXhfcHJlc2VydmVfbmV3bGluZXM6eWUobiwibWF4UHJlc2VydmVOZXdMaW5lcyIsMzI3ODYpLGluZGVudF9oYW5kbGViYXJzOnllKG4sImluZGVudEhhbmRsZWJhcnMiLCExKSxlbmRfd2l0aF9uZXdsaW5lOnImJnllKG4sImVuZFdpdGhOZXdsaW5lIiwhMSksZXh0cmFfbGluZXJzOnVpKG4sImV4dHJhTGluZXJzIix2b2lkIDApLHdyYXBfYXR0cmlidXRlczp5ZShuLCJ3cmFwQXR0cmlidXRlcyIsImF1dG8iKSx3cmFwX2F0dHJpYnV0ZXNfaW5kZW50X3NpemU6eWUobiwid3JhcEF0dHJpYnV0ZXNJbmRlbnRTaXplIix2b2lkIDApLGVvbDpgCmAsaW5kZW50X3NjcmlwdHM6eWUobiwiaW5kZW50U2NyaXB0cyIsIm5vcm1hbCIpLHRlbXBsYXRpbmc6SXUobiwiYWxsIiksdW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXI6eWUobiwidW5mb3JtYXR0ZWRDb250ZW50RGVsaW1pdGVyIiwiIil9LGI9TXUoTnUoaSksZik7aWYoYT4wKXt2YXIgcD1uLmluc2VydFNwYWNlcz9RYSgiICIscyphKTpRYSgiCSIsYSk7Yj1iLnNwbGl0KGAKYCkuam9pbihgCmArcCksdC5zdGFydC5jaGFyYWN0ZXI9PT0wJiYoYj1wK2IpfXJldHVyblt7cmFuZ2U6dCxuZXdUZXh0OmJ9XX1mdW5jdGlvbiBOdShlKXtyZXR1cm4gZS5yZXBsYWNlKC9eXHMrLywiIil9ZnVuY3Rpb24geWUoZSx0LG4pe2lmKGUmJmUuaGFzT3duUHJvcGVydHkodCkpe3ZhciBpPWVbdF07aWYoaSE9PW51bGwpcmV0dXJuIGl9cmV0dXJuIG59ZnVuY3Rpb24gdWkoZSx0LG4pe3ZhciBpPXllKGUsdCxudWxsKTtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP2kubGVuZ3RoPjA/aS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci50cmltKCkudG9Mb3dlckNhc2UoKX0pOltdOm59ZnVuY3Rpb24gSXUoZSx0KXt2YXIgbj15ZShlLCJ0ZW1wbGF0aW5nIix0KTtyZXR1cm4gbj09PSEwP1siYXV0byJdOlsibm9uZSJdfWZ1bmN0aW9uIHp1KGUsdCxuKXtmb3IodmFyIGk9dCxyPTAsYT1uLnRhYlNpemV8fDQ7aTxlLmxlbmd0aDspe3ZhciBzPWUuY2hhckF0KGkpO2lmKHM9PT0iICIpcisrO2Vsc2UgaWYocz09PSIJIilyKz1hO2Vsc2UgYnJlYWs7aSsrfXJldHVybiBNYXRoLmZsb29yKHIvYSl9ZnVuY3Rpb24gaXMoZSx0KXtyZXR1cm5gXHIKYC5pbmRleE9mKGUuY2hhckF0KHQpKSE9PS0xfWZ1bmN0aW9uIHJzKGUsdCl7cmV0dXJuIiAJIi5pbmRleE9mKGUuY2hhckF0KHQpKSE9PS0xfXZhciBhczthcz0oKCk9Pnt2YXIgZT17NDcwOmk9PntmdW5jdGlvbiByKG8pe2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkobykpfWZ1bmN0aW9uIGEobyxsKXtmb3IodmFyIHUsYz0iIixkPTAsbT0tMSxmPTAsYj0wO2I8PW8ubGVuZ3RoOysrYil7aWYoYjxvLmxlbmd0aCl1PW8uY2hhckNvZGVBdChiKTtlbHNle2lmKHU9PT00NylicmVhazt1PTQ3fWlmKHU9PT00Nyl7aWYoIShtPT09Yi0xfHxmPT09MSkpaWYobSE9PWItMSYmZj09PTIpe2lmKGMubGVuZ3RoPDJ8fGQhPT0yfHxjLmNoYXJDb2RlQXQoYy5sZW5ndGgtMSkhPT00Nnx8Yy5jaGFyQ29kZUF0KGMubGVuZ3RoLTIpIT09NDYpe2lmKGMubGVuZ3RoPjIpe3ZhciBwPWMubGFzdEluZGV4T2YoIi8iKTtpZihwIT09Yy5sZW5ndGgtMSl7cD09PS0xPyhjPSIiLGQ9MCk6ZD0oYz1jLnNsaWNlKDAscCkpLmxlbmd0aC0xLWMubGFzdEluZGV4T2YoIi8iKSxtPWIsZj0wO2NvbnRpbnVlfX1lbHNlIGlmKGMubGVuZ3RoPT09Mnx8Yy5sZW5ndGg9PT0xKXtjPSIiLGQ9MCxtPWIsZj0wO2NvbnRpbnVlfX1sJiYoYy5sZW5ndGg+MD9jKz0iLy4uIjpjPSIuLiIsZD0yKX1lbHNlIGMubGVuZ3RoPjA/Yys9Ii8iK28uc2xpY2UobSsxLGIpOmM9by5zbGljZShtKzEsYiksZD1iLW0tMTttPWIsZj0wfWVsc2UgdT09PTQ2JiZmIT09LTE/KytmOmY9LTF9cmV0dXJuIGN9dmFyIHM9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIG8sbD0iIix1PSExLGM9YXJndW1lbnRzLmxlbmd0aC0xO2M+PS0xJiYhdTtjLS0pe3ZhciBkO2M+PTA/ZD1hcmd1bWVudHNbY106KG89PT12b2lkIDAmJihvPXByb2Nlc3MuY3dkKCkpLGQ9bykscihkKSxkLmxlbmd0aCE9PTAmJihsPWQrIi8iK2wsdT1kLmNoYXJDb2RlQXQoMCk9PT00Nyl9cmV0dXJuIGw9YShsLCF1KSx1P2wubGVuZ3RoPjA/Ii8iK2w6Ii8iOmwubGVuZ3RoPjA/bDoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihvKXtpZihyKG8pLG8ubGVuZ3RoPT09MClyZXR1cm4iLiI7dmFyIGw9by5jaGFyQ29kZUF0KDApPT09NDcsdT1vLmNoYXJDb2RlQXQoby5sZW5ndGgtMSk9PT00NztyZXR1cm4obz1hKG8sIWwpKS5sZW5ndGghPT0wfHxsfHwobz0iLiIpLG8ubGVuZ3RoPjAmJnUmJihvKz0iLyIpLGw/Ii8iK286b30saXNBYnNvbHV0ZTpmdW5jdGlvbihvKXtyZXR1cm4gcihvKSxvLmxlbmd0aD4wJiZvLmNoYXJDb2RlQXQoMCk9PT00N30sam9pbjpmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIG8sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDsrK2wpe3ZhciB1PWFyZ3VtZW50c1tsXTtyKHUpLHUubGVuZ3RoPjAmJihvPT09dm9pZCAwP289dTpvKz0iLyIrdSl9cmV0dXJuIG89PT12b2lkIDA/Ii4iOnMubm9ybWFsaXplKG8pfSxyZWxhdGl2ZTpmdW5jdGlvbihvLGwpe2lmKHIobykscihsKSxvPT09bHx8KG89cy5yZXNvbHZlKG8pKT09PShsPXMucmVzb2x2ZShsKSkpcmV0dXJuIiI7Zm9yKHZhciB1PTE7dTxvLmxlbmd0aCYmby5jaGFyQ29kZUF0KHUpPT09NDc7Kyt1KTtmb3IodmFyIGM9by5sZW5ndGgsZD1jLXUsbT0xO208bC5sZW5ndGgmJmwuY2hhckNvZGVBdChtKT09PTQ3OysrbSk7Zm9yKHZhciBmPWwubGVuZ3RoLW0sYj1kPGY/ZDpmLHA9LTEsdz0wO3c8PWI7Kyt3KXtpZih3PT09Yil7aWYoZj5iKXtpZihsLmNoYXJDb2RlQXQobSt3KT09PTQ3KXJldHVybiBsLnNsaWNlKG0rdysxKTtpZih3PT09MClyZXR1cm4gbC5zbGljZShtK3cpfWVsc2UgZD5iJiYoby5jaGFyQ29kZUF0KHUrdyk9PT00Nz9wPXc6dz09PTAmJihwPTApKTticmVha312YXIgeD1vLmNoYXJDb2RlQXQodSt3KTtpZih4IT09bC5jaGFyQ29kZUF0KG0rdykpYnJlYWs7eD09PTQ3JiYocD13KX12YXIgXz0iIjtmb3Iodz11K3ArMTt3PD1jOysrdyl3IT09YyYmby5jaGFyQ29kZUF0KHcpIT09NDd8fChfLmxlbmd0aD09PTA/Xys9Ii4uIjpfKz0iLy4uIik7cmV0dXJuIF8ubGVuZ3RoPjA/XytsLnNsaWNlKG0rcCk6KG0rPXAsbC5jaGFyQ29kZUF0KG0pPT09NDcmJisrbSxsLnNsaWNlKG0pKX0sX21ha2VMb25nOmZ1bmN0aW9uKG8pe3JldHVybiBvfSxkaXJuYW1lOmZ1bmN0aW9uKG8pe2lmKHIobyksby5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIGw9by5jaGFyQ29kZUF0KDApLHU9bD09PTQ3LGM9LTEsZD0hMCxtPW8ubGVuZ3RoLTE7bT49MTstLW0paWYoKGw9by5jaGFyQ29kZUF0KG0pKT09PTQ3KXtpZighZCl7Yz1tO2JyZWFrfX1lbHNlIGQ9ITE7cmV0dXJuIGM9PT0tMT91PyIvIjoiLiI6dSYmYz09PTE/Ii8vIjpvLnNsaWNlKDAsYyl9LGJhc2VuYW1lOmZ1bmN0aW9uKG8sbCl7aWYobCE9PXZvaWQgMCYmdHlwZW9mIGwhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtyKG8pO3ZhciB1LGM9MCxkPS0xLG09ITA7aWYobCE9PXZvaWQgMCYmbC5sZW5ndGg+MCYmbC5sZW5ndGg8PW8ubGVuZ3RoKXtpZihsLmxlbmd0aD09PW8ubGVuZ3RoJiZsPT09bylyZXR1cm4iIjt2YXIgZj1sLmxlbmd0aC0xLGI9LTE7Zm9yKHU9by5sZW5ndGgtMTt1Pj0wOy0tdSl7dmFyIHA9by5jaGFyQ29kZUF0KHUpO2lmKHA9PT00Nyl7aWYoIW0pe2M9dSsxO2JyZWFrfX1lbHNlIGI9PT0tMSYmKG09ITEsYj11KzEpLGY+PTAmJihwPT09bC5jaGFyQ29kZUF0KGYpPy0tZj09LTEmJihkPXUpOihmPS0xLGQ9YikpfXJldHVybiBjPT09ZD9kPWI6ZD09PS0xJiYoZD1vLmxlbmd0aCksby5zbGljZShjLGQpfWZvcih1PW8ubGVuZ3RoLTE7dT49MDstLXUpaWYoby5jaGFyQ29kZUF0KHUpPT09NDcpe2lmKCFtKXtjPXUrMTticmVha319ZWxzZSBkPT09LTEmJihtPSExLGQ9dSsxKTtyZXR1cm4gZD09PS0xPyIiOm8uc2xpY2UoYyxkKX0sZXh0bmFtZTpmdW5jdGlvbihvKXtyKG8pO2Zvcih2YXIgbD0tMSx1PTAsYz0tMSxkPSEwLG09MCxmPW8ubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciBiPW8uY2hhckNvZGVBdChmKTtpZihiIT09NDcpYz09PS0xJiYoZD0hMSxjPWYrMSksYj09PTQ2P2w9PT0tMT9sPWY6bSE9PTEmJihtPTEpOmwhPT0tMSYmKG09LTEpO2Vsc2UgaWYoIWQpe3U9ZisxO2JyZWFrfX1yZXR1cm4gbD09PS0xfHxjPT09LTF8fG09PT0wfHxtPT09MSYmbD09PWMtMSYmbD09PXUrMT8iIjpvLnNsaWNlKGwsYyl9LGZvcm1hdDpmdW5jdGlvbihvKXtpZihvPT09bnVsbHx8dHlwZW9mIG8hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBvKTtyZXR1cm4gZnVuY3Rpb24obCx1KXt2YXIgYz11LmRpcnx8dS5yb290LGQ9dS5iYXNlfHwodS5uYW1lfHwiIikrKHUuZXh0fHwiIik7cmV0dXJuIGM/Yz09PXUucm9vdD9jK2Q6YysiLyIrZDpkfSgwLG8pfSxwYXJzZTpmdW5jdGlvbihvKXtyKG8pO3ZhciBsPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihvLmxlbmd0aD09PTApcmV0dXJuIGw7dmFyIHUsYz1vLmNoYXJDb2RlQXQoMCksZD1jPT09NDc7ZD8obC5yb290PSIvIix1PTEpOnU9MDtmb3IodmFyIG09LTEsZj0wLGI9LTEscD0hMCx3PW8ubGVuZ3RoLTEseD0wO3c+PXU7LS13KWlmKChjPW8uY2hhckNvZGVBdCh3KSkhPT00NyliPT09LTEmJihwPSExLGI9dysxKSxjPT09NDY/bT09PS0xP209dzp4IT09MSYmKHg9MSk6bSE9PS0xJiYoeD0tMSk7ZWxzZSBpZighcCl7Zj13KzE7YnJlYWt9cmV0dXJuIG09PT0tMXx8Yj09PS0xfHx4PT09MHx8eD09PTEmJm09PT1iLTEmJm09PT1mKzE/YiE9PS0xJiYobC5iYXNlPWwubmFtZT1mPT09MCYmZD9vLnNsaWNlKDEsYik6by5zbGljZShmLGIpKTooZj09PTAmJmQ/KGwubmFtZT1vLnNsaWNlKDEsbSksbC5iYXNlPW8uc2xpY2UoMSxiKSk6KGwubmFtZT1vLnNsaWNlKGYsbSksbC5iYXNlPW8uc2xpY2UoZixiKSksbC5leHQ9by5zbGljZShtLGIpKSxmPjA/bC5kaXI9by5zbGljZSgwLGYtMSk6ZCYmKGwuZGlyPSIvIiksbH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07cy5wb3NpeD1zLGkuZXhwb3J0cz1zfSw0NDc6KGkscixhKT0+e3ZhciBzO2lmKGEucihyKSxhLmQocix7VVJJOigpPT5fLFV0aWxzOigpPT5OfSksdHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiKXM9cHJvY2Vzcy5wbGF0Zm9ybT09PSJ3aW4zMiI7ZWxzZSBpZih0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0Iil7dmFyIG89bmF2aWdhdG9yLnVzZXJBZ2VudDtzPW8uaW5kZXhPZigiV2luZG93cyIpPj0wfXZhciBsLHUsYz0obD1mdW5jdGlvbihMLEEpe3JldHVybihsPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihNLFcpe00uX19wcm90b19fPVd9fHxmdW5jdGlvbihNLFcpe2Zvcih2YXIgSSBpbiBXKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChXLEkpJiYoTVtJXT1XW0ldKX0pKEwsQSl9LGZ1bmN0aW9uKEwsQSl7aWYodHlwZW9mIEEhPSJmdW5jdGlvbiImJkEhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoQSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gTSgpe3RoaXMuY29uc3RydWN0b3I9TH1sKEwsQSksTC5wcm90b3R5cGU9QT09PW51bGw/T2JqZWN0LmNyZWF0ZShBKTooTS5wcm90b3R5cGU9QS5wcm90b3R5cGUsbmV3IE0pfSksZD0vXlx3W1x3XGQrLi1dKiQvLG09L15cLy8sZj0vXlwvXC8vO2Z1bmN0aW9uIGIoTCxBKXtpZighTC5zY2hlbWUmJkEpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KEwuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KEwucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoTC5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoTC5mcmFnbWVudCwnIn0nKSk7aWYoTC5zY2hlbWUmJiFkLnRlc3QoTC5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihMLnBhdGgpe2lmKEwuYXV0aG9yaXR5KXtpZighbS50ZXN0KEwucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihmLnRlc3QoTC5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX19dmFyIHA9IiIsdz0iLyIseD0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LyxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTChBLE0sVyxJLHosQil7Qj09PXZvaWQgMCYmKEI9ITEpLHR5cGVvZiBBPT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9QS5zY2hlbWV8fHAsdGhpcy5hdXRob3JpdHk9QS5hdXRob3JpdHl8fHAsdGhpcy5wYXRoPUEucGF0aHx8cCx0aGlzLnF1ZXJ5PUEucXVlcnl8fHAsdGhpcy5mcmFnbWVudD1BLmZyYWdtZW50fHxwKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oWCxRKXtyZXR1cm4gWHx8UT9YOiJmaWxlIn0oQSxCKSx0aGlzLmF1dGhvcml0eT1NfHxwLHRoaXMucGF0aD1mdW5jdGlvbihYLFEpe3N3aXRjaChYKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6UT9RWzBdIT09dyYmKFE9dytRKTpRPXd9cmV0dXJuIFF9KHRoaXMuc2NoZW1lLFd8fHApLHRoaXMucXVlcnk9SXx8cCx0aGlzLmZyYWdtZW50PXp8fHAsYih0aGlzLEIpKX1yZXR1cm4gTC5pc1VyaT1mdW5jdGlvbihBKXtyZXR1cm4gQSBpbnN0YW5jZW9mIEx8fCEhQSYmdHlwZW9mIEEuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIEEuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2YgQS5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIEEucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2YgQS5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2YgQS5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2YgQS53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgQS50b1N0cmluZz09ImZ1bmN0aW9uIn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEwucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxMLnByb3RvdHlwZS53aXRoPWZ1bmN0aW9uKEEpe2lmKCFBKXJldHVybiB0aGlzO3ZhciBNPUEuc2NoZW1lLFc9QS5hdXRob3JpdHksST1BLnBhdGgsej1BLnF1ZXJ5LEI9QS5mcmFnbWVudDtyZXR1cm4gTT09PXZvaWQgMD9NPXRoaXMuc2NoZW1lOk09PT1udWxsJiYoTT1wKSxXPT09dm9pZCAwP1c9dGhpcy5hdXRob3JpdHk6Vz09PW51bGwmJihXPXApLEk9PT12b2lkIDA/ST10aGlzLnBhdGg6ST09PW51bGwmJihJPXApLHo9PT12b2lkIDA/ej10aGlzLnF1ZXJ5Ono9PT1udWxsJiYoej1wKSxCPT09dm9pZCAwP0I9dGhpcy5mcmFnbWVudDpCPT09bnVsbCYmKEI9cCksTT09PXRoaXMuc2NoZW1lJiZXPT09dGhpcy5hdXRob3JpdHkmJkk9PT10aGlzLnBhdGgmJno9PT10aGlzLnF1ZXJ5JiZCPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBFKE0sVyxJLHosQil9LEwucGFyc2U9ZnVuY3Rpb24oQSxNKXtNPT09dm9pZCAwJiYoTT0hMSk7dmFyIFc9eC5leGVjKEEpO3JldHVybiBXP25ldyBFKFdbMl18fHAsayhXWzRdfHxwKSxrKFdbNV18fHApLGsoV1s3XXx8cCksayhXWzldfHxwKSxNKTpuZXcgRShwLHAscCxwLHApfSxMLmZpbGU9ZnVuY3Rpb24oQSl7dmFyIE09cDtpZihzJiYoQT1BLnJlcGxhY2UoL1xcL2csdykpLEFbMF09PT13JiZBWzFdPT09dyl7dmFyIFc9QS5pbmRleE9mKHcsMik7Vz09PS0xPyhNPUEuc3Vic3RyaW5nKDIpLEE9dyk6KE09QS5zdWJzdHJpbmcoMixXKSxBPUEuc3Vic3RyaW5nKFcpfHx3KX1yZXR1cm4gbmV3IEUoImZpbGUiLE0sQSxwLHApfSxMLmZyb209ZnVuY3Rpb24oQSl7dmFyIE09bmV3IEUoQS5zY2hlbWUsQS5hdXRob3JpdHksQS5wYXRoLEEucXVlcnksQS5mcmFnbWVudCk7cmV0dXJuIGIoTSwhMCksTX0sTC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQSl7cmV0dXJuIEE9PT12b2lkIDAmJihBPSExKSxUKHRoaXMsQSl9LEwucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxMLnJldml2ZT1mdW5jdGlvbihBKXtpZihBKXtpZihBIGluc3RhbmNlb2YgTClyZXR1cm4gQTt2YXIgTT1uZXcgRShBKTtyZXR1cm4gTS5fZm9ybWF0dGVkPUEuZXh0ZXJuYWwsTS5fZnNQYXRoPUEuX3NlcD09PXk/QS5mc1BhdGg6bnVsbCxNfXJldHVybiBBfSxMfSgpLHk9cz8xOnZvaWQgMCxFPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIEEoKXt2YXIgTT1MIT09bnVsbCYmTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIE0uX2Zvcm1hdHRlZD1udWxsLE0uX2ZzUGF0aD1udWxsLE19cmV0dXJuIGMoQSxMKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9Zyh0aGlzKSksdGhpcy5fZnNQYXRofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLEEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKE0pe3JldHVybiBNPT09dm9pZCAwJiYoTT0hMSksTT9UKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9VCh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX0sQS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIE09eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKE0uZnNQYXRoPXRoaXMuX2ZzUGF0aCxNLl9zZXA9eSksdGhpcy5fZm9ybWF0dGVkJiYoTS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKE0ucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoTS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoTS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihNLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihNLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLE19LEF9KF8pLFI9KCh1PXt9KVs1OF09IiUzQSIsdVs0N109IiUyRiIsdVs2M109IiUzRiIsdVszNV09IiUyMyIsdVs5MV09IiU1QiIsdVs5M109IiU1RCIsdVs2NF09IiU0MCIsdVszM109IiUyMSIsdVszNl09IiUyNCIsdVszOF09IiUyNiIsdVszOV09IiUyNyIsdVs0MF09IiUyOCIsdVs0MV09IiUyOSIsdVs0Ml09IiUyQSIsdVs0M109IiUyQiIsdVs0NF09IiUyQyIsdVs1OV09IiUzQiIsdVs2MV09IiUzRCIsdVszMl09IiUyMCIsdSk7ZnVuY3Rpb24gUChMLEEpe2Zvcih2YXIgTT12b2lkIDAsVz0tMSxJPTA7STxMLmxlbmd0aDtJKyspe3ZhciB6PUwuY2hhckNvZGVBdChJKTtpZih6Pj05NyYmejw9MTIyfHx6Pj02NSYmejw9OTB8fHo+PTQ4JiZ6PD01N3x8ej09PTQ1fHx6PT09NDZ8fHo9PT05NXx8ej09PTEyNnx8QSYmej09PTQ3KVchPT0tMSYmKE0rPWVuY29kZVVSSUNvbXBvbmVudChMLnN1YnN0cmluZyhXLEkpKSxXPS0xKSxNIT09dm9pZCAwJiYoTSs9TC5jaGFyQXQoSSkpO2Vsc2V7TT09PXZvaWQgMCYmKE09TC5zdWJzdHIoMCxJKSk7dmFyIEI9Ult6XTtCIT09dm9pZCAwPyhXIT09LTEmJihNKz1lbmNvZGVVUklDb21wb25lbnQoTC5zdWJzdHJpbmcoVyxJKSksVz0tMSksTSs9Qik6Vz09PS0xJiYoVz1JKX19cmV0dXJuIFchPT0tMSYmKE0rPWVuY29kZVVSSUNvbXBvbmVudChMLnN1YnN0cmluZyhXKSkpLE0hPT12b2lkIDA/TTpMfWZ1bmN0aW9uIHYoTCl7Zm9yKHZhciBBPXZvaWQgMCxNPTA7TTxMLmxlbmd0aDtNKyspe3ZhciBXPUwuY2hhckNvZGVBdChNKTtXPT09MzV8fFc9PT02Mz8oQT09PXZvaWQgMCYmKEE9TC5zdWJzdHIoMCxNKSksQSs9UltXXSk6QSE9PXZvaWQgMCYmKEErPUxbTV0pfXJldHVybiBBIT09dm9pZCAwP0E6TH1mdW5jdGlvbiBnKEwsQSl7dmFyIE07cmV0dXJuIE09TC5hdXRob3JpdHkmJkwucGF0aC5sZW5ndGg+MSYmTC5zY2hlbWU9PT0iZmlsZSI/Ii8vIi5jb25jYXQoTC5hdXRob3JpdHkpLmNvbmNhdChMLnBhdGgpOkwucGF0aC5jaGFyQ29kZUF0KDApPT09NDcmJihMLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJkwucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8TC5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZMLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmTC5wYXRoLmNoYXJDb2RlQXQoMik9PT01OD9MLnBhdGhbMV0udG9Mb3dlckNhc2UoKStMLnBhdGguc3Vic3RyKDIpOkwucGF0aCxzJiYoTT1NLnJlcGxhY2UoL1wvL2csIlxcIikpLE19ZnVuY3Rpb24gVChMLEEpe3ZhciBNPUE/djpQLFc9IiIsST1MLnNjaGVtZSx6PUwuYXV0aG9yaXR5LEI9TC5wYXRoLFg9TC5xdWVyeSxRPUwuZnJhZ21lbnQ7aWYoSSYmKFcrPUksVys9IjoiKSwoenx8ST09PSJmaWxlIikmJihXKz13LFcrPXcpLHope3ZhciBKPXouaW5kZXhPZigiQCIpO2lmKEohPT0tMSl7dmFyIFo9ei5zdWJzdHIoMCxKKTt6PXouc3Vic3RyKEorMSksKEo9Wi5pbmRleE9mKCI6IikpPT09LTE/Vys9TShaLCExKTooVys9TShaLnN1YnN0cigwLEopLCExKSxXKz0iOiIsVys9TShaLnN1YnN0cihKKzEpLCExKSksVys9IkAifShKPSh6PXoudG9Mb3dlckNhc2UoKSkuaW5kZXhPZigiOiIpKT09PS0xP1crPU0oeiwhMSk6KFcrPU0oei5zdWJzdHIoMCxKKSwhMSksVys9ei5zdWJzdHIoSikpfWlmKEIpe2lmKEIubGVuZ3RoPj0zJiZCLmNoYXJDb2RlQXQoMCk9PT00NyYmQi5jaGFyQ29kZUF0KDIpPT09NTgpKGZlPUIuY2hhckNvZGVBdCgxKSk+PTY1JiZmZTw9OTAmJihCPSIvIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShmZSszMiksIjoiKS5jb25jYXQoQi5zdWJzdHIoMykpKTtlbHNlIGlmKEIubGVuZ3RoPj0yJiZCLmNoYXJDb2RlQXQoMSk9PT01OCl7dmFyIGZlOyhmZT1CLmNoYXJDb2RlQXQoMCkpPj02NSYmZmU8PTkwJiYoQj0iIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShmZSszMiksIjoiKS5jb25jYXQoQi5zdWJzdHIoMikpKX1XKz1NKEIsITApfXJldHVybiBYJiYoVys9Ij8iLFcrPU0oWCwhMSkpLFEmJihXKz0iIyIsVys9QT9ROlAoUSwhMSkpLFd9ZnVuY3Rpb24gcShMKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChMKX1jYXRjaHtyZXR1cm4gTC5sZW5ndGg+Mz9MLnN1YnN0cigwLDMpK3EoTC5zdWJzdHIoMykpOkx9fXZhciBTPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIGsoTCl7cmV0dXJuIEwubWF0Y2goUyk/TC5yZXBsYWNlKFMsZnVuY3Rpb24oQSl7cmV0dXJuIHEoQSl9KTpMfXZhciBOLEQ9YSg0NzApLEg9ZnVuY3Rpb24oTCxBLE0pe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgVyxJPTAsej1BLmxlbmd0aDtJPHo7SSsrKSFXJiZJIGluIEF8fChXfHwoVz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChBLDAsSSkpLFdbSV09QVtJXSk7cmV0dXJuIEwuY29uY2F0KFd8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEEpKX0sRj1ELnBvc2l4fHxEOyhmdW5jdGlvbihMKXtMLmpvaW5QYXRoPWZ1bmN0aW9uKEEpe2Zvcih2YXIgTT1bXSxXPTE7Vzxhcmd1bWVudHMubGVuZ3RoO1crKylNW1ctMV09YXJndW1lbnRzW1ddO3JldHVybiBBLndpdGgoe3BhdGg6Ri5qb2luLmFwcGx5KEYsSChbQS5wYXRoXSxNLCExKSl9KX0sTC5yZXNvbHZlUGF0aD1mdW5jdGlvbihBKXtmb3IodmFyIE09W10sVz0xO1c8YXJndW1lbnRzLmxlbmd0aDtXKyspTVtXLTFdPWFyZ3VtZW50c1tXXTt2YXIgST1BLnBhdGh8fCIvIjtyZXR1cm4gQS53aXRoKHtwYXRoOkYucmVzb2x2ZS5hcHBseShGLEgoW0ldLE0sITEpKX0pfSxMLmRpcm5hbWU9ZnVuY3Rpb24oQSl7dmFyIE09Ri5kaXJuYW1lKEEucGF0aCk7cmV0dXJuIE0ubGVuZ3RoPT09MSYmTS5jaGFyQ29kZUF0KDApPT09NDY/QTpBLndpdGgoe3BhdGg6TX0pfSxMLmJhc2VuYW1lPWZ1bmN0aW9uKEEpe3JldHVybiBGLmJhc2VuYW1lKEEucGF0aCl9LEwuZXh0bmFtZT1mdW5jdGlvbihBKXtyZXR1cm4gRi5leHRuYW1lKEEucGF0aCl9fSkoTnx8KE49e30pKX19LHQ9e307ZnVuY3Rpb24gbihpKXtpZih0W2ldKXJldHVybiB0W2ldLmV4cG9ydHM7dmFyIHI9dFtpXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbaV0ocixyLmV4cG9ydHMsbiksci5leHBvcnRzfXJldHVybiBuLmQ9KGkscik9Pntmb3IodmFyIGEgaW4gciluLm8ocixhKSYmIW4ubyhpLGEpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxhLHtlbnVtZXJhYmxlOiEwLGdldDpyW2FdfSl9LG4ubz0oaSxyKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksciksbi5yPWk9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuKDQ0Nyl9KSgpO3ZhcntVUkk6SHUsVXRpbHM6Y2N9PWFzO2Z1bmN0aW9uIGNpKGUpe3ZhciB0PWVbMF0sbj1lW2UubGVuZ3RoLTFdO3JldHVybiB0PT09biYmKHQ9PT0iJyJ8fHQ9PT0nIicpJiYoZT1lLnN1YnN0cigxLGUubGVuZ3RoLTIpKSxlfWZ1bmN0aW9uIFV1KGUsdCl7cmV0dXJuIWUubGVuZ3RofHx0PT09ImhhbmRsZWJhcnMiJiYve3t8fX0vLnRlc3QoZSk/ITE6L1xiKHdbXHdcZCsuLV0qOlwvXC8pP1teXHMoKTw+XSsoPzpcKFtcd1xkXStcKXwoW15bOnB1bmN0Ol1cc118XC8/KSkvLnRlc3QoZSl9ZnVuY3Rpb24gV3UoZSx0LG4saSl7aWYoISgvXlxzKmphdmFzY3JpcHRcOi9pLnRlc3QodCl8fC9bXG5ccl0vLnRlc3QodCkpKXtpZih0PXQucmVwbGFjZSgvXlxzKi9nLCIiKSwvXmh0dHBzPzpcL1wvL2kudGVzdCh0KXx8L15maWxlOlwvXC8vaS50ZXN0KHQpKXJldHVybiB0O2lmKC9eXCMvaS50ZXN0KHQpKXJldHVybiBlK3Q7aWYoL15cL1wvL2kudGVzdCh0KSl7dmFyIHI9UWUoZSwiaHR0cHM6Ly8iKT8iaHR0cHMiOiJodHRwIjtyZXR1cm4gcisiOiIrdC5yZXBsYWNlKC9eXHMqL2csIiIpfXJldHVybiBuP24ucmVzb2x2ZVJlZmVyZW5jZSh0LGl8fGUpOnR9fWZ1bmN0aW9uIEZ1KGUsdCxuLGkscixhKXt2YXIgcz1jaShuKTtpZihVdShzLGUubGFuZ3VhZ2VJZCkpe3MubGVuZ3RoPG4ubGVuZ3RoJiYoaSsrLHItLSk7dmFyIG89V3UoZS51cmkscyx0LGEpO2lmKCEoIW98fCFQdShvKSkpcmV0dXJue3JhbmdlOlkuY3JlYXRlKGUucG9zaXRpb25BdChpKSxlLnBvc2l0aW9uQXQocikpLHRhcmdldDpvfX19ZnVuY3Rpb24gUHUoZSl7dHJ5e3JldHVybiBIdS5wYXJzZShlKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gQnUoZSx0KXtmb3IodmFyIG49W10saT13ZShlLmdldFRleHQoKSwwKSxyPWkuc2NhbigpLGE9dm9pZCAwLHM9ITEsbz12b2lkIDAsbD17fTtyIT09VS5FT1M7KXtzd2l0Y2gocil7Y2FzZSBVLlN0YXJ0VGFnOmlmKCFvKXt2YXIgdT1pLmdldFRva2VuVGV4dCgpLnRvTG93ZXJDYXNlKCk7cz11PT09ImJhc2UifWJyZWFrO2Nhc2UgVS5BdHRyaWJ1dGVOYW1lOmE9aS5nZXRUb2tlblRleHQoKS50b0xvd2VyQ2FzZSgpO2JyZWFrO2Nhc2UgVS5BdHRyaWJ1dGVWYWx1ZTppZihhPT09InNyYyJ8fGE9PT0iaHJlZiIpe3ZhciBjPWkuZ2V0VG9rZW5UZXh0KCk7aWYoIXMpe3ZhciBkPUZ1KGUsdCxjLGkuZ2V0VG9rZW5PZmZzZXQoKSxpLmdldFRva2VuRW5kKCksbyk7ZCYmbi5wdXNoKGQpfXMmJnR5cGVvZiBvPiJ1IiYmKG89Y2koYyksbyYmdCYmKG89dC5yZXNvbHZlUmVmZXJlbmNlKG8sZS51cmkpKSkscz0hMSxhPXZvaWQgMH1lbHNlIGlmKGE9PT0iaWQiKXt2YXIgbT1jaShpLmdldFRva2VuVGV4dCgpKTtsW21dPWkuZ2V0VG9rZW5PZmZzZXQoKX1icmVha31yPWkuc2NhbigpfWZvcih2YXIgZj0wLGI9bjtmPGIubGVuZ3RoO2YrKyl7dmFyIGQ9YltmXSxwPWUudXJpKyIjIjtpZihkLnRhcmdldCYmUWUoZC50YXJnZXQscCkpe3ZhciB3PWQudGFyZ2V0LnN1YnN0cihwLmxlbmd0aCkseD1sW3ddO2lmKHghPT12b2lkIDApe3ZhciBfPWUucG9zaXRpb25BdCh4KTtkLnRhcmdldD0iIi5jb25jYXQocCkuY29uY2F0KF8ubGluZSsxLCIsIikuY29uY2F0KF8uY2hhcmFjdGVyKzEpfX19cmV0dXJuIG59ZnVuY3Rpb24gcXUoZSx0LG4pe3ZhciBpPWUub2Zmc2V0QXQodCkscj1uLmZpbmROb2RlQXQoaSk7aWYoIXIudGFnKXJldHVybltdO3ZhciBhPVtdLHM9bHMoVS5TdGFydFRhZyxlLHIuc3RhcnQpLG89dHlwZW9mIHIuZW5kVGFnU3RhcnQ9PSJudW1iZXIiJiZscyhVLkVuZFRhZyxlLHIuZW5kVGFnU3RhcnQpO3JldHVybihzJiZvcyhzLHQpfHxvJiZvcyhvLHQpKSYmKHMmJmEucHVzaCh7a2luZDp1bi5SZWFkLHJhbmdlOnN9KSxvJiZhLnB1c2goe2tpbmQ6dW4uUmVhZCxyYW5nZTpvfSkpLGF9ZnVuY3Rpb24gc3MoZSx0KXtyZXR1cm4gZS5saW5lPHQubGluZXx8ZS5saW5lPT09dC5saW5lJiZlLmNoYXJhY3Rlcjw9dC5jaGFyYWN0ZXJ9ZnVuY3Rpb24gb3MoZSx0KXtyZXR1cm4gc3MoZS5zdGFydCx0KSYmc3ModCxlLmVuZCl9ZnVuY3Rpb24gbHMoZSx0LG4pe2Zvcih2YXIgaT13ZSh0LmdldFRleHQoKSxuKSxyPWkuc2NhbigpO3IhPT1VLkVPUyYmciE9PWU7KXI9aS5zY2FuKCk7cmV0dXJuIHIhPT1VLkVPUz97c3RhcnQ6dC5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSksZW5kOnQucG9zaXRpb25BdChpLmdldFRva2VuRW5kKCkpfTpudWxsfWZ1bmN0aW9uIE91KGUsdCl7dmFyIG49W107cmV0dXJuIHQucm9vdHMuZm9yRWFjaChmdW5jdGlvbihpKXt1cyhlLGksIiIsbil9KSxufWZ1bmN0aW9uIHVzKGUsdCxuLGkpe3ZhciByPVZ1KHQpLGE9dG4uY3JlYXRlKGUudXJpLFkuY3JlYXRlKGUucG9zaXRpb25BdCh0LnN0YXJ0KSxlLnBvc2l0aW9uQXQodC5lbmQpKSkscz17bmFtZTpyLGxvY2F0aW9uOmEsY29udGFpbmVyTmFtZTpuLGtpbmQ6cmkuRmllbGR9O2kucHVzaChzKSx0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24obyl7dXMoZSxvLHIsaSl9KX1mdW5jdGlvbiBWdShlKXt2YXIgdD1lLnRhZztpZihlLmF0dHJpYnV0ZXMpe3ZhciBuPWUuYXR0cmlidXRlcy5pZCxpPWUuYXR0cmlidXRlcy5jbGFzcztuJiYodCs9IiMiLmNvbmNhdChuLnJlcGxhY2UoL1tcIlwnXS9nLCIiKSkpLGkmJih0Kz1pLnJlcGxhY2UoL1tcIlwnXS9nLCIiKS5zcGxpdCgvXHMrLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiIuIi5jb25jYXQocil9KS5qb2luKCIiKSl9cmV0dXJuIHR8fCI/In1mdW5jdGlvbiBqdShlLHQsbixpKXt2YXIgcixhPWUub2Zmc2V0QXQodCkscz1pLmZpbmROb2RlQXQoYSk7aWYoIXMudGFnfHwhR3UocyxhLHMudGFnKSlyZXR1cm4gbnVsbDt2YXIgbz1bXSxsPXtzdGFydDplLnBvc2l0aW9uQXQocy5zdGFydCsxKSxlbmQ6ZS5wb3NpdGlvbkF0KHMuc3RhcnQrMStzLnRhZy5sZW5ndGgpfTtpZihvLnB1c2goe3JhbmdlOmwsbmV3VGV4dDpufSkscy5lbmRUYWdTdGFydCl7dmFyIHU9e3N0YXJ0OmUucG9zaXRpb25BdChzLmVuZFRhZ1N0YXJ0KzIpLGVuZDplLnBvc2l0aW9uQXQocy5lbmRUYWdTdGFydCsyK3MudGFnLmxlbmd0aCl9O28ucHVzaCh7cmFuZ2U6dSxuZXdUZXh0Om59KX12YXIgYz0ocj17fSxyW2UudXJpLnRvU3RyaW5nKCldPW8scik7cmV0dXJue2NoYW5nZXM6Y319ZnVuY3Rpb24gR3UoZSx0LG4pe3JldHVybiBlLmVuZFRhZ1N0YXJ0JiZlLmVuZFRhZ1N0YXJ0KzI8PXQmJnQ8PWUuZW5kVGFnU3RhcnQrMituLmxlbmd0aD8hMDplLnN0YXJ0KzE8PXQmJnQ8PWUuc3RhcnQrMStuLmxlbmd0aH1mdW5jdGlvbiAkdShlLHQsbil7dmFyIGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKTtpZighci50YWd8fCFyLmVuZFRhZ1N0YXJ0KXJldHVybiBudWxsO2lmKHIuc3RhcnQrMTw9aSYmaTw9ci5zdGFydCsxK3IudGFnLmxlbmd0aCl7dmFyIGE9aS0xLXIuc3RhcnQrci5lbmRUYWdTdGFydCsyO3JldHVybiBlLnBvc2l0aW9uQXQoYSl9aWYoci5lbmRUYWdTdGFydCsyPD1pJiZpPD1yLmVuZFRhZ1N0YXJ0KzIrci50YWcubGVuZ3RoKXt2YXIgYT1pLTItci5lbmRUYWdTdGFydCtyLnN0YXJ0KzE7cmV0dXJuIGUucG9zaXRpb25BdChhKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBjcyhlLHQsbil7dmFyIGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKSxhPXIudGFnP3IudGFnLmxlbmd0aDowO3JldHVybiByLmVuZFRhZ1N0YXJ0JiYoci5zdGFydCsxPD1pJiZpPD1yLnN0YXJ0KzErYXx8ci5lbmRUYWdTdGFydCsyPD1pJiZpPD1yLmVuZFRhZ1N0YXJ0KzIrYSk/W1kuY3JlYXRlKGUucG9zaXRpb25BdChyLnN0YXJ0KzEpLGUucG9zaXRpb25BdChyLnN0YXJ0KzErYSkpLFkuY3JlYXRlKGUucG9zaXRpb25BdChyLmVuZFRhZ1N0YXJ0KzIpLGUucG9zaXRpb25BdChyLmVuZFRhZ1N0YXJ0KzIrYSkpXTpudWxsfWZ1bmN0aW9uIFh1KGUsdCl7ZT1lLnNvcnQoZnVuY3Rpb24oYixwKXt2YXIgdz1iLnN0YXJ0TGluZS1wLnN0YXJ0TGluZTtyZXR1cm4gdz09PTAmJih3PWIuZW5kTGluZS1wLmVuZExpbmUpLHd9KTtmb3IodmFyIG49dm9pZCAwLGk9W10scj1bXSxhPVtdLHM9ZnVuY3Rpb24oYixwKXtyW2JdPXAscDwzMCYmKGFbcF09KGFbcF18fDApKzEpfSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPWVbb107aWYoIW4pbj1sLHMobywwKTtlbHNlIGlmKGwuc3RhcnRMaW5lPm4uc3RhcnRMaW5lKXtpZihsLmVuZExpbmU8PW4uZW5kTGluZSlpLnB1c2gobiksbj1sLHMobyxpLmxlbmd0aCk7ZWxzZSBpZihsLnN0YXJ0TGluZT5uLmVuZExpbmUpe2RvIG49aS5wb3AoKTt3aGlsZShuJiZsLnN0YXJ0TGluZT5uLmVuZExpbmUpO24mJmkucHVzaChuKSxuPWwscyhvLGkubGVuZ3RoKX19fWZvcih2YXIgdT0wLGM9MCxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBkPWFbb107aWYoZCl7aWYoZCt1PnQpe2M9bzticmVha311Kz1kfX1mb3IodmFyIG09W10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgZj1yW29dO3R5cGVvZiBmPT0ibnVtYmVyIiYmKGY8Y3x8Zj09PWMmJnUrKzx0KSYmbS5wdXNoKGVbb10pfXJldHVybiBtfWZ1bmN0aW9uIEp1KGUsdCl7dmFyIG49d2UoZS5nZXRUZXh0KCkpLGk9bi5zY2FuKCkscj1bXSxhPVtdLHM9bnVsbCxvPS0xO2Z1bmN0aW9uIGwoXyl7ci5wdXNoKF8pLG89Xy5zdGFydExpbmV9Zm9yKDtpIT09VS5FT1M7KXtzd2l0Y2goaSl7Y2FzZSBVLlN0YXJ0VGFnOnt2YXIgdT1uLmdldFRva2VuVGV4dCgpLGM9ZS5wb3NpdGlvbkF0KG4uZ2V0VG9rZW5PZmZzZXQoKSkubGluZTthLnB1c2goe3N0YXJ0TGluZTpjLHRhZ05hbWU6dX0pLHM9dTticmVha31jYXNlIFUuRW5kVGFnOntzPW4uZ2V0VG9rZW5UZXh0KCk7YnJlYWt9Y2FzZSBVLlN0YXJ0VGFnQ2xvc2U6aWYoIXN8fCFkbihzKSlicmVhaztjYXNlIFUuRW5kVGFnQ2xvc2U6Y2FzZSBVLlN0YXJ0VGFnU2VsZkNsb3NlOntmb3IodmFyIGQ9YS5sZW5ndGgtMTtkPj0wJiZhW2RdLnRhZ05hbWUhPT1zOylkLS07aWYoZD49MCl7dmFyIG09YVtkXTthLmxlbmd0aD1kO3ZhciBmPWUucG9zaXRpb25BdChuLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsYz1tLnN0YXJ0TGluZSxiPWYtMTtiPmMmJm8hPT1jJiZsKHtzdGFydExpbmU6YyxlbmRMaW5lOmJ9KX1icmVha31jYXNlIFUuQ29tbWVudDp7dmFyIGM9ZS5wb3NpdGlvbkF0KG4uZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxwPW4uZ2V0VG9rZW5UZXh0KCksdz1wLm1hdGNoKC9eXHMqIyhyZWdpb25cYil8KGVuZHJlZ2lvblxiKS8pO2lmKHcpaWYod1sxXSlhLnB1c2goe3N0YXJ0TGluZTpjLHRhZ05hbWU6IiJ9KTtlbHNle2Zvcih2YXIgZD1hLmxlbmd0aC0xO2Q+PTAmJmFbZF0udGFnTmFtZS5sZW5ndGg7KWQtLTtpZihkPj0wKXt2YXIgbT1hW2RdO2EubGVuZ3RoPWQ7dmFyIGI9YztjPW0uc3RhcnRMaW5lLGI+YyYmbyE9PWMmJmwoe3N0YXJ0TGluZTpjLGVuZExpbmU6YixraW5kOm5uLlJlZ2lvbn0pfX1lbHNle3ZhciBiPWUucG9zaXRpb25BdChuLmdldFRva2VuT2Zmc2V0KCkrbi5nZXRUb2tlbkxlbmd0aCgpKS5saW5lO2M8YiYmbCh7c3RhcnRMaW5lOmMsZW5kTGluZTpiLGtpbmQ6bm4uQ29tbWVudH0pfWJyZWFrfX1pPW4uc2NhbigpfXZhciB4PXQmJnQucmFuZ2VMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRTtyZXR1cm4gci5sZW5ndGg+eD9YdShyLHgpOnJ9ZnVuY3Rpb24gUXUoZSx0KXtmdW5jdGlvbiBuKGkpe2Zvcih2YXIgcj1ZdShlLGkpLGE9dm9pZCAwLHM9dm9pZCAwLG89ci5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGw9cltvXTsoIWF8fGxbMF0hPT1hWzBdfHxsWzFdIT09YVsxXSkmJihzPWNuLmNyZWF0ZShZLmNyZWF0ZShlLnBvc2l0aW9uQXQocltvXVswXSksZS5wb3NpdGlvbkF0KHJbb11bMV0pKSxzKSksYT1sfXJldHVybiBzfHwocz1jbi5jcmVhdGUoWS5jcmVhdGUoaSxpKSkpLHN9cmV0dXJuIHQubWFwKG4pfWZ1bmN0aW9uIFl1KGUsdCl7dmFyIG49SmEoZS5nZXRUZXh0KCkpLGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKSxhPVp1KHIpO2lmKHIuc3RhcnRUYWdFbmQmJiFyLmVuZFRhZ1N0YXJ0KXtpZihyLnN0YXJ0VGFnRW5kIT09ci5lbmQpcmV0dXJuW1tyLnN0YXJ0LHIuZW5kXV07dmFyIHM9WS5jcmVhdGUoZS5wb3NpdGlvbkF0KHIuc3RhcnRUYWdFbmQtMiksZS5wb3NpdGlvbkF0KHIuc3RhcnRUYWdFbmQpKSxvPWUuZ2V0VGV4dChzKTtvPT09Ii8+Ij9hLnVuc2hpZnQoW3Iuc3RhcnQrMSxyLnN0YXJ0VGFnRW5kLTJdKTphLnVuc2hpZnQoW3Iuc3RhcnQrMSxyLnN0YXJ0VGFnRW5kLTFdKTt2YXIgbD1ocyhlLHIsaSk7cmV0dXJuIGE9bC5jb25jYXQoYSksYX1pZighci5zdGFydFRhZ0VuZHx8IXIuZW5kVGFnU3RhcnQpcmV0dXJuIGE7aWYoYS51bnNoaWZ0KFtyLnN0YXJ0LHIuZW5kXSksci5zdGFydDxpJiZpPHIuc3RhcnRUYWdFbmQpe2EudW5zaGlmdChbci5zdGFydCsxLHIuc3RhcnRUYWdFbmQtMV0pO3ZhciBsPWhzKGUscixpKTtyZXR1cm4gYT1sLmNvbmNhdChhKSxhfWVsc2UgcmV0dXJuIHIuc3RhcnRUYWdFbmQ8PWkmJmk8PXIuZW5kVGFnU3RhcnQ/KGEudW5zaGlmdChbci5zdGFydFRhZ0VuZCxyLmVuZFRhZ1N0YXJ0XSksYSk6KGk+PXIuZW5kVGFnU3RhcnQrMiYmYS51bnNoaWZ0KFtyLmVuZFRhZ1N0YXJ0KzIsci5lbmQtMV0pLGEpfWZ1bmN0aW9uIFp1KGUpe2Zvcih2YXIgdD1lLG49ZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RhcnRUYWdFbmQmJnIuZW5kVGFnU3RhcnQmJnIuc3RhcnRUYWdFbmQ8ci5lbmRUYWdTdGFydD9bW3Iuc3RhcnRUYWdFbmQsci5lbmRUYWdTdGFydF0sW3Iuc3RhcnQsci5lbmRdXTpbW3Iuc3RhcnQsci5lbmRdXX0saT1bXTt0LnBhcmVudDspdD10LnBhcmVudCxuKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIGkucHVzaChyKX0pO3JldHVybiBpfWZ1bmN0aW9uIGhzKGUsdCxuKXtmb3IodmFyIGk9WS5jcmVhdGUoZS5wb3NpdGlvbkF0KHQuc3RhcnQpLGUucG9zaXRpb25BdCh0LmVuZCkpLHI9ZS5nZXRUZXh0KGkpLGE9bi10LnN0YXJ0LHM9d2Uociksbz1zLnNjYW4oKSxsPXQuc3RhcnQsdT1bXSxjPSExLGQ9LTE7byE9PVUuRU9TOyl7c3dpdGNoKG8pe2Nhc2UgVS5BdHRyaWJ1dGVOYW1lOntpZihhPHMuZ2V0VG9rZW5PZmZzZXQoKSl7Yz0hMTticmVha31hPD1zLmdldFRva2VuRW5kKCkmJnUudW5zaGlmdChbcy5nZXRUb2tlbk9mZnNldCgpLHMuZ2V0VG9rZW5FbmQoKV0pLGM9ITAsZD1zLmdldFRva2VuT2Zmc2V0KCk7YnJlYWt9Y2FzZSBVLkF0dHJpYnV0ZVZhbHVlOntpZighYylicmVhazt2YXIgbT1zLmdldFRva2VuVGV4dCgpO2lmKGE8cy5nZXRUb2tlbk9mZnNldCgpKXt1LnB1c2goW2Qscy5nZXRUb2tlbkVuZCgpXSk7YnJlYWt9YT49cy5nZXRUb2tlbk9mZnNldCgpJiZhPD1zLmdldFRva2VuRW5kKCkmJih1LnVuc2hpZnQoW3MuZ2V0VG9rZW5PZmZzZXQoKSxzLmdldFRva2VuRW5kKCldKSwobVswXT09PSciJyYmbVttLmxlbmd0aC0xXT09PSciJ3x8bVswXT09PSInIiYmbVttLmxlbmd0aC0xXT09PSInIikmJmE+PXMuZ2V0VG9rZW5PZmZzZXQoKSsxJiZhPD1zLmdldFRva2VuRW5kKCktMSYmdS51bnNoaWZ0KFtzLmdldFRva2VuT2Zmc2V0KCkrMSxzLmdldFRva2VuRW5kKCktMV0pLHUucHVzaChbZCxzLmdldFRva2VuRW5kKCldKSk7YnJlYWt9fW89cy5zY2FuKCl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybltmWzBdK2wsZlsxXStsXX0pfXZhciBLdT17dmVyc2lvbjoxLjEsdGFnczpbe25hbWU6Imh0bWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBodG1sIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgcm9vdCBvZiBhbiBIVE1MIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJtYW5pZmVzdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSBVUkkgb2YgYSByZXNvdXJjZSBtYW5pZmVzdCBpbmRpY2F0aW5nIHJlc291cmNlcyB0aGF0IHNob3VsZCBiZSBjYWNoZWQgbG9jYWxseS4gU2VlIFtVc2luZyB0aGUgYXBwbGljYXRpb24gY2FjaGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvVXNpbmdfdGhlX2FwcGxpY2F0aW9uX2NhY2hlKSBmb3IgZGV0YWlscy4ifX0se25hbWU6InZlcnNpb24iLGRlc2NyaXB0aW9uOidTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlIEhUTUwgW0RvY3VtZW50IFR5cGUgRGVmaW5pdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9EVEQgIkRvY3VtZW50IFR5cGUgRGVmaW5pdGlvbjogSW4gSFRNTCwgdGhlIGRvY3R5cGUgaXMgdGhlIHJlcXVpcmVkICI8IURPQ1RZUEUgaHRtbD4iIHByZWFtYmxlIGZvdW5kIGF0IHRoZSB0b3Agb2YgYWxsIGRvY3VtZW50cy4gSXRzIHNvbGUgcHVycG9zZSBpcyB0byBwcmV2ZW50IGEgYnJvd3NlciBmcm9tIHN3aXRjaGluZyBpbnRvIHNvLWNhbGxlZCDigJxxdWlya3MgbW9kZeKAnSB3aGVuIHJlbmRlcmluZyBhIGRvY3VtZW50OyB0aGF0IGlzLCB0aGUgIjwhRE9DVFlQRSBodG1sPiIgZG9jdHlwZSBlbnN1cmVzIHRoYXQgdGhlIGJyb3dzZXIgbWFrZXMgYSBiZXN0LWVmZm9ydCBhdHRlbXB0IGF0IGZvbGxvd2luZyB0aGUgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbnMsIHJhdGhlciB0aGFuIHVzaW5nIGEgZGlmZmVyZW50IHJlbmRlcmluZyBtb2RlIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggc29tZSBzcGVjaWZpY2F0aW9ucy4iKSB0aGF0IGdvdmVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnQuIFRoaXMgYXR0cmlidXRlIGlzIG5vdCBuZWVkZWQsIGJlY2F1c2UgaXQgaXMgcmVkdW5kYW50IHdpdGggdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gdGhlIGRvY3VtZW50IHR5cGUgZGVjbGFyYXRpb24uJ30se25hbWU6InhtbG5zIixkZXNjcmlwdGlvbjonU3BlY2lmaWVzIHRoZSBYTUwgTmFtZXNwYWNlIG9mIHRoZSBkb2N1bWVudC4gRGVmYXVsdCB2YWx1ZSBpcyBgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiYC4gVGhpcyBpcyByZXF1aXJlZCBpbiBkb2N1bWVudHMgcGFyc2VkIHdpdGggWE1MIHBhcnNlcnMsIGFuZCBvcHRpb25hbCBpbiB0ZXh0L2h0bWwgZG9jdW1lbnRzLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaHRtbCJ9XX0se25hbWU6ImhlYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZWFkIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgbWV0YWRhdGEgZm9yIHRoZSBEb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToicHJvZmlsZSIsZGVzY3JpcHRpb246IlRoZSBVUklzIG9mIG9uZSBvciBtb3JlIG1ldGFkYXRhIHByb2ZpbGVzLCBzZXBhcmF0ZWQgYnkgd2hpdGUgc3BhY2UuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9oZWFkIn1dfSx7bmFtZToidGl0bGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0aXRsZSBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGRvY3VtZW50J3MgdGl0bGUgb3IgbmFtZS4gQXV0aG9ycyBzaG91bGQgdXNlIHRpdGxlcyB0aGF0IGlkZW50aWZ5IHRoZWlyIGRvY3VtZW50cyBldmVuIHdoZW4gdGhleSBhcmUgdXNlZCBvdXQgb2YgY29udGV4dCwgZm9yIGV4YW1wbGUgaW4gYSB1c2VyJ3MgaGlzdG9yeSBvciBib29rbWFya3MsIG9yIGluIHNlYXJjaCByZXN1bHRzLiBUaGUgZG9jdW1lbnQncyB0aXRsZSBpcyBvZnRlbiBkaWZmZXJlbnQgZnJvbSBpdHMgZmlyc3QgaGVhZGluZywgc2luY2UgdGhlIGZpcnN0IGhlYWRpbmcgZG9lcyBub3QgaGF2ZSB0byBzdGFuZCBhbG9uZSB3aGVuIHRha2VuIG91dCBvZiBjb250ZXh0LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RpdGxlIn1dfSx7bmFtZToiYmFzZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJhc2UgZWxlbWVudCBhbGxvd3MgYXV0aG9ycyB0byBzcGVjaWZ5IHRoZSBkb2N1bWVudCBiYXNlIFVSTCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlc29sdmluZyByZWxhdGl2ZSBVUkxzLCBhbmQgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgYnJvd3NpbmcgY29udGV4dCBmb3IgdGhlIHB1cnBvc2VzIG9mIGZvbGxvd2luZyBoeXBlcmxpbmtzLiBUaGUgZWxlbWVudCBkb2VzIG5vdCByZXByZXNlbnQgYW55IGNvbnRlbnQgYmV5b25kIHRoaXMgaW5mb3JtYXRpb24uIn0sYXR0cmlidXRlczpbe25hbWU6ImhyZWYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBiYXNlIFVSTCB0byBiZSB1c2VkIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50IGZvciByZWxhdGl2ZSBVUkwgYWRkcmVzc2VzLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQsIHRoaXMgZWxlbWVudCBtdXN0IGNvbWUgYmVmb3JlIGFueSBvdGhlciBlbGVtZW50cyB3aXRoIGF0dHJpYnV0ZXMgd2hvc2UgdmFsdWVzIGFyZSBVUkxzLiBBYnNvbHV0ZSBhbmQgcmVsYXRpdmUgVVJMcyBhcmUgYWxsb3dlZC4ifX0se25hbWU6InRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBuYW1lIG9yIGtleXdvcmQgaW5kaWNhdGluZyB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBkaXNwbGF5IHRoZSByZXN1bHQgd2hlbiBoeXBlcmxpbmtzIG9yIGZvcm1zIGNhdXNlIG5hdmlnYXRpb24sIGZvciBlbGVtZW50cyB0aGF0IGRvIG5vdCBoYXZlIGFuIGV4cGxpY2l0IHRhcmdldCByZWZlcmVuY2UuIEl0IGlzIGEgbmFtZSBvZiwgb3Iga2V5d29yZCBmb3IsIGEgX2Jyb3dzaW5nIGNvbnRleHRfIChmb3IgZXhhbXBsZTogdGFiLCB3aW5kb3csIG9yIGlubGluZSBmcmFtZSkuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOlxuXG4qICAgYF9zZWxmYDogTG9hZCB0aGUgcmVzdWx0IGludG8gdGhlIHNhbWUgYnJvd3NpbmcgY29udGV4dCBhcyB0aGUgY3VycmVudCBvbmUuIFRoaXMgdmFsdWUgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLlxuKiAgIGBfYmxhbmtgOiBMb2FkIHRoZSByZXN1bHQgaW50byBhIG5ldyB1bm5hbWVkIGJyb3dzaW5nIGNvbnRleHQuXG4qICAgYF9wYXJlbnRgOiBMb2FkIHRoZSByZXN1bHQgaW50byB0aGUgcGFyZW50IGJyb3dzaW5nIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgb25lLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgb3B0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgYF90b3BgOiBMb2FkIHRoZSByZXN1bHQgaW50byB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKHRoYXQgaXMsIHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgb25lLCBhbmQgaGFzIG5vIHBhcmVudCkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCB0aGlzIGVsZW1lbnQgbXVzdCBjb21lIGJlZm9yZSBhbnkgb3RoZXIgZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVzIHdob3NlIHZhbHVlcyBhcmUgVVJMcy4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9iYXNlIn1dfSx7bmFtZToibGluayIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxpbmsgZWxlbWVudCBhbGxvd3MgYXV0aG9ycyB0byBsaW5rIHRoZWlyIGRvY3VtZW50IHRvIG90aGVyIHJlc291cmNlcy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiaHJlZiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBbVVJMXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1VSTCAiVVJMOiBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkgaXMgYSB0ZXh0IHN0cmluZyBzcGVjaWZ5aW5nIHdoZXJlIGEgcmVzb3VyY2UgY2FuIGJlIGZvdW5kIG9uIHRoZSBJbnRlcm5ldC4iKSBvZiB0aGUgbGlua2VkIHJlc291cmNlLiBBIFVSTCBjYW4gYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUuJ319LHtuYW1lOiJjcm9zc29yaWdpbiIsdmFsdWVTZXQ6InhvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRlcyB3aGV0aGVyIFtDT1JTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0NPUlMgIkNPUlM6IENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBpcyBhIHN5c3RlbSwgY29uc2lzdGluZyBvZiB0cmFuc21pdHRpbmcgSFRUUCBoZWFkZXJzLCB0aGF0IGRldGVybWluZXMgd2hldGhlciBicm93c2VycyBibG9jayBmcm9udGVuZCBKYXZhU2NyaXB0IGNvZGUgZnJvbSBhY2Nlc3NpbmcgcmVzcG9uc2VzIGZvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuIikgbXVzdCBiZSB1c2VkIHdoZW4gZmV0Y2hpbmcgdGhlIHJlc291cmNlLiBbQ09SUy1lbmFibGVkIGltYWdlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX0VuYWJsZWRfSW1hZ2UpIGNhbiBiZSByZXVzZWQgaW4gdGhlIFtgPGNhbnZhcz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FudmFzICJVc2UgdGhlIEhUTUwgPGNhbnZhcz4gZWxlbWVudCB3aXRoIGVpdGhlciB0aGUgY2FudmFzIHNjcmlwdGluZyBBUEkgb3IgdGhlIFdlYkdMIEFQSSB0byBkcmF3IGdyYXBoaWNzIGFuZCBhbmltYXRpb25zLiIpIGVsZW1lbnQgd2l0aG91dCBiZWluZyBfdGFpbnRlZF8uIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmU6XG5cbmBhbm9ueW1vdXNgXG5cbkEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QgKGkuZS4gd2l0aCBhbiBbYE9yaWdpbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9PcmlnaW4gIlRoZSBPcmlnaW4gcmVxdWVzdCBoZWFkZXIgaW5kaWNhdGVzIHdoZXJlIGEgZmV0Y2ggb3JpZ2luYXRlcyBmcm9tLiBJdCBkb2VzblwndCBpbmNsdWRlIGFueSBwYXRoIGluZm9ybWF0aW9uLCBidXQgb25seSB0aGUgc2VydmVyIG5hbWUuIEl0IGlzIHNlbnQgd2l0aCBDT1JTIHJlcXVlc3RzLCBhcyB3ZWxsIGFzIHdpdGggUE9TVCByZXF1ZXN0cy4gSXQgaXMgc2ltaWxhciB0byB0aGUgUmVmZXJlciBoZWFkZXIsIGJ1dCwgdW5saWtlIHRoaXMgaGVhZGVyLCBpdCBkb2VzblwndCBkaXNjbG9zZSB0aGUgd2hvbGUgcGF0aC4iKSBIVFRQIGhlYWRlcikgaXMgcGVyZm9ybWVkLCBidXQgbm8gY3JlZGVudGlhbCBpcyBzZW50IChpLmUuIG5vIGNvb2tpZSwgWC41MDkgY2VydGlmaWNhdGUsIG9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24pLiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IGdpdmUgY3JlZGVudGlhbHMgdG8gdGhlIG9yaWdpbiBzaXRlIChieSBub3Qgc2V0dGluZyB0aGUgW2BBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luICJUaGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luIHJlc3BvbnNlIGhlYWRlciBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzcG9uc2UgY2FuIGJlIHNoYXJlZCB3aXRoIHJlcXVlc3RpbmcgY29kZSBmcm9tIHRoZSBnaXZlbiBvcmlnaW4uIikgSFRUUCBoZWFkZXIpIHRoZSBpbWFnZSB3aWxsIGJlIHRhaW50ZWQgYW5kIGl0cyB1c2FnZSByZXN0cmljdGVkLlxuXG5gdXNlLWNyZWRlbnRpYWxzYFxuXG5BIGNyb3NzLW9yaWdpbiByZXF1ZXN0IChpLmUuIHdpdGggYW4gYE9yaWdpbmAgSFRUUCBoZWFkZXIpIGlzIHBlcmZvcm1lZCBhbG9uZyB3aXRoIGEgY3JlZGVudGlhbCBzZW50IChpLmUuIGEgY29va2llLCBjZXJ0aWZpY2F0ZSwgYW5kL29yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gaXMgcGVyZm9ybWVkKS4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBnaXZlIGNyZWRlbnRpYWxzIHRvIHRoZSBvcmlnaW4gc2l0ZSAodGhyb3VnaCBbYEFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzICJUaGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMgcmVzcG9uc2UgaGVhZGVyIHRlbGxzIGJyb3dzZXJzIHdoZXRoZXIgdG8gZXhwb3NlIHRoZSByZXNwb25zZSB0byBmcm9udGVuZCBKYXZhU2NyaXB0IGNvZGUgd2hlbiB0aGUgcmVxdWVzdFwncyBjcmVkZW50aWFscyBtb2RlIChSZXF1ZXN0LmNyZWRlbnRpYWxzKSBpcyAiaW5jbHVkZSIuIikgSFRUUCBoZWFkZXIpLCB0aGUgcmVzb3VyY2Ugd2lsbCBiZSBfdGFpbnRlZF8gYW5kIGl0cyB1c2FnZSByZXN0cmljdGVkLlxuXG5JZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBwcmVzZW50LCB0aGUgcmVzb3VyY2UgaXMgZmV0Y2hlZCB3aXRob3V0IGEgW0NPUlNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ09SUyAiQ09SUzogQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIGlzIGEgc3lzdGVtLCBjb25zaXN0aW5nIG9mIHRyYW5zbWl0dGluZyBIVFRQIGhlYWRlcnMsIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGJyb3dzZXJzIGJsb2NrIGZyb250ZW5kIEphdmFTY3JpcHQgY29kZSBmcm9tIGFjY2Vzc2luZyByZXNwb25zZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy4iKSByZXF1ZXN0IChpLmUuIHdpdGhvdXQgc2VuZGluZyB0aGUgYE9yaWdpbmAgSFRUUCBoZWFkZXIpLCBwcmV2ZW50aW5nIGl0cyBub24tdGFpbnRlZCB1c2FnZS4gSWYgaW52YWxpZCwgaXQgaXMgaGFuZGxlZCBhcyBpZiB0aGUgZW51bWVyYXRlZCBrZXl3b3JkICoqYW5vbnltb3VzKiogd2FzIHVzZWQuIFNlZSBbQ09SUyBzZXR0aW5ncyBhdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uJ319LHtuYW1lOiJyZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIG5hbWVzIGEgcmVsYXRpb25zaGlwIG9mIHRoZSBsaW5rZWQgZG9jdW1lbnQgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQuIFRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBbbGluayB0eXBlcyB2YWx1ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvTGlua190eXBlcykuIn19LHtuYW1lOiJtZWRpYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBtZWRpYSB0aGF0IHRoZSBsaW5rZWQgcmVzb3VyY2UgYXBwbGllcyB0by4gSXRzIHZhbHVlIG11c3QgYmUgYSBtZWRpYSB0eXBlIC8gW21lZGlhIHF1ZXJ5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvTWVkaWFfcXVlcmllcykuIFRoaXMgYXR0cmlidXRlIGlzIG1haW5seSB1c2VmdWwgd2hlbiBsaW5raW5nIHRvIGV4dGVybmFsIHN0eWxlc2hlZXRzIOKAlCBpdCBhbGxvd3MgdGhlIHVzZXIgYWdlbnQgdG8gcGljayB0aGUgYmVzdCBhZGFwdGVkIG9uZSBmb3IgdGhlIGRldmljZSBpdCBydW5zIG9uLlxuXG4qKk5vdGVzOioqXG5cbiogICBJbiBIVE1MIDQsIHRoaXMgY2FuIG9ubHkgYmUgYSBzaW1wbGUgd2hpdGUtc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRpb24gbGl0ZXJhbHMsIGkuZS4sIFttZWRpYSB0eXBlcyBhbmQgZ3JvdXBzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQG1lZGlhKSwgd2hlcmUgZGVmaW5lZCBhbmQgYWxsb3dlZCBhcyB2YWx1ZXMgZm9yIHRoaXMgYXR0cmlidXRlLCBzdWNoIGFzIGBwcmludGAsIGBzY3JlZW5gLCBgYXVyYWxgLCBgYnJhaWxsZWAuIEhUTUw1IGV4dGVuZGVkIHRoaXMgdG8gYW55IGtpbmQgb2YgW21lZGlhIHF1ZXJpZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9NZWRpYV9xdWVyaWVzKSwgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGFsbG93ZWQgdmFsdWVzIG9mIEhUTUwgNC5cbiogICBCcm93c2VycyBub3Qgc3VwcG9ydGluZyBbQ1NTMyBNZWRpYSBRdWVyaWVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvTWVkaWFfcXVlcmllcykgd29uJ3QgbmVjZXNzYXJpbHkgcmVjb2duaXplIHRoZSBhZGVxdWF0ZSBsaW5rOyBkbyBub3QgZm9yZ2V0IHRvIHNldCBmYWxsYmFjayBsaW5rcywgdGhlIHJlc3RyaWN0ZWQgc2V0IG9mIG1lZGlhIHF1ZXJpZXMgZGVmaW5lZCBpbiBIVE1MIDQuIn19LHtuYW1lOiJocmVmbGFuZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBsYW5ndWFnZSBvZiB0aGUgbGlua2VkIHJlc291cmNlLiBJdCBpcyBwdXJlbHkgYWR2aXNvcnkuIEFsbG93ZWQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IFtCQ1A0N10oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL2JjcC9iY3A0Ny50eHQpLiBVc2UgdGhpcyBhdHRyaWJ1dGUgb25seSBpZiB0aGUgW2BocmVmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EjYXR0ci1ocmVmKSBhdHRyaWJ1dGUgaXMgcHJlc2VudC4ifX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHRoZSBjb250ZW50IGxpbmtlZCB0by4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgTUlNRSB0eXBlIHN1Y2ggYXMgKip0ZXh0L2h0bWwqKiwgKip0ZXh0L2NzcyoqLCBhbmQgc28gb24uIFRoZSBjb21tb24gdXNlIG9mIHRoaXMgYXR0cmlidXRlIGlzIHRvIGRlZmluZSB0aGUgdHlwZSBvZiBzdHlsZXNoZWV0IGJlaW5nIHJlZmVyZW5jZWQgKHN1Y2ggYXMgKip0ZXh0L2NzcyoqKSwgYnV0IGdpdmVuIHRoYXQgQ1NTIGlzIHRoZSBvbmx5IHN0eWxlc2hlZXQgbGFuZ3VhZ2UgdXNlZCBvbiB0aGUgd2ViLCBub3Qgb25seSBpcyBpdCBwb3NzaWJsZSB0byBvbWl0IHRoZSBgdHlwZWAgYXR0cmlidXRlLCBidXQgaXMgYWN0dWFsbHkgbm93IHJlY29tbWVuZGVkIHByYWN0aWNlLiBJdCBpcyBhbHNvIHVzZWQgb24gYHJlbD0icHJlbG9hZCJgIGxpbmsgdHlwZXMsIHRvIG1ha2Ugc3VyZSB0aGUgYnJvd3NlciBvbmx5IGRvd25sb2FkcyBmaWxlIHR5cGVzIHRoYXQgaXQgc3VwcG9ydHMuJ319LHtuYW1lOiJzaXplcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgc2l6ZXMgb2YgdGhlIGljb25zIGZvciB2aXN1YWwgbWVkaWEgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZS4gSXQgbXVzdCBiZSBwcmVzZW50IG9ubHkgaWYgdGhlIFtgcmVsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWwpIGNvbnRhaW5zIGEgdmFsdWUgb2YgYGljb25gIG9yIGEgbm9uLXN0YW5kYXJkIHR5cGUgc3VjaCBhcyBBcHBsZSdzIGBhcHBsZS10b3VjaC1pY29uYC4gSXQgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgYW55YCwgbWVhbmluZyB0aGF0IHRoZSBpY29uIGNhbiBiZSBzY2FsZWQgdG8gYW55IHNpemUgYXMgaXQgaXMgaW4gYSB2ZWN0b3IgZm9ybWF0LCBsaWtlIGBpbWFnZS9zdmcreG1sYC5cbiogICBhIHdoaXRlLXNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHNpemVzLCBlYWNoIGluIHRoZSBmb3JtYXQgYF88d2lkdGggaW4gcGl4ZWxzPl94XzxoZWlnaHQgaW4gcGl4ZWxzPl9gIG9yIGBfPHdpZHRoIGluIHBpeGVscz5fWF88aGVpZ2h0IGluIHBpeGVscz5fYC4gRWFjaCBvZiB0aGVzZSBzaXplcyBtdXN0IGJlIGNvbnRhaW5lZCBpbiB0aGUgcmVzb3VyY2UuXG5cbioqTm90ZToqKiBNb3N0IGljb24gZm9ybWF0cyBhcmUgb25seSBhYmxlIHRvIHN0b3JlIG9uZSBzaW5nbGUgaWNvbjsgdGhlcmVmb3JlIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIFtgc2l6ZXNgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItc2l6ZXMpIGNvbnRhaW5zIG9ubHkgb25lIGVudHJ5LiBNUydzIElDTyBmb3JtYXQgZG9lcywgYXMgd2VsbCBhcyBBcHBsZSdzIElDTlMuIElDTyBpcyBtb3JlIHViaXF1aXRvdXM7IHlvdSBzaG91bGQgZGVmaW5pdGVseSB1c2UgaXQuIn19LHtuYW1lOiJhcyIsZGVzY3JpcHRpb246J1RoaXMgYXR0cmlidXRlIGlzIG9ubHkgdXNlZCB3aGVuIGByZWw9InByZWxvYWQiYCBvciBgcmVsPSJwcmVmZXRjaCJgIGhhcyBiZWVuIHNldCBvbiB0aGUgYDxsaW5rPmAgZWxlbWVudC4gSXQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGNvbnRlbnQgYmVpbmcgbG9hZGVkIGJ5IHRoZSBgPGxpbms+YCwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBjb250ZW50IHByaW9yaXRpemF0aW9uLCByZXF1ZXN0IG1hdGNoaW5nLCBhcHBsaWNhdGlvbiBvZiBjb3JyZWN0IFtjb250ZW50IHNlY3VyaXR5IHBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9DU1ApLCBhbmQgc2V0dGluZyBvZiBjb3JyZWN0IFtgQWNjZXB0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2VwdCAiVGhlIEFjY2VwdCByZXF1ZXN0IEhUVFAgaGVhZGVyIGFkdmVydGlzZXMgd2hpY2ggY29udGVudCB0eXBlcywgZXhwcmVzc2VkIGFzIE1JTUUgdHlwZXMsIHRoZSBjbGllbnQgaXMgYWJsZSB0byB1bmRlcnN0YW5kLiBVc2luZyBjb250ZW50IG5lZ290aWF0aW9uLCB0aGUgc2VydmVyIHRoZW4gc2VsZWN0cyBvbmUgb2YgdGhlIHByb3Bvc2FscywgdXNlcyBpdCBhbmQgaW5mb3JtcyB0aGUgY2xpZW50IG9mIGl0cyBjaG9pY2Ugd2l0aCB0aGUgQ29udGVudC1UeXBlIHJlc3BvbnNlIGhlYWRlci4gQnJvd3NlcnMgc2V0IGFkZXF1YXRlIHZhbHVlcyBmb3IgdGhpcyBoZWFkZXIgZGVwZW5kaW5nIG9uwqB0aGUgY29udGV4dCB3aGVyZSB0aGUgcmVxdWVzdCBpcyBkb25lOiB3aGVuIGZldGNoaW5nIGEgQ1NTIHN0eWxlc2hlZXQgYSBkaWZmZXJlbnQgdmFsdWUgaXMgc2V0IGZvciB0aGUgcmVxdWVzdCB0aGFuIHdoZW4gZmV0Y2hpbmcgYW4gaW1hZ2UswqB2aWRlbyBvciBhIHNjcmlwdC4iKSByZXF1ZXN0IGhlYWRlci4nfSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiB0aGUgcmVzb3VyY2UuIFByaW9yaXR5IGhpbnRzIGFyZSBkZWxlZ2F0ZWQgdXNpbmcgdGhlIHZhbHVlczoifSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246JyoqYGF1dG9gKio6IEluZGljYXRlc8KgKipub8KgcHJlZmVyZW5jZSoqLiBUaGUgYnJvd3NlciBtYXkgdXNlIGl0cyBvd24gaGV1cmlzdGljcyB0byBkZWNpZGUgdGhlIHByaW9yaXR5IG9mIHRoZSByZXNvdXJjZS5cblxuKipgaGlnaGAqKjogSW5kaWNhdGVzIHRvIHRoZcKgYnJvd3NlcsKgdGhhdCB0aGUgcmVzb3VyY2UgaXMgb2bCoCoqaGlnaCoqIHByaW9yaXR5LlxuXG4qKmBsb3dgKio6wqBJbmRpY2F0ZXMgdG8gdGhlwqBicm93c2VywqB0aGF0IHRoZSByZXNvdXJjZSBpcyBvZsKgKipsb3cqKiBwcmlvcml0eS5cblxuKipOb3RlOioqIFRoZSBgaW1wb3J0YW5jZWAgYXR0cmlidXRlIG1heSBvbmx5IGJlIHVzZWQgZm9yIHRoZSBgPGxpbms+YCBlbGVtZW50IGlmIGByZWw9InByZWxvYWQiYCBvciBgcmVsPSJwcmVmZXRjaCJgIGlzIHByZXNlbnQuJ30se25hbWU6ImludGVncml0eSIsZGVzY3JpcHRpb246IkNvbnRhaW5zIGlubGluZSBtZXRhZGF0YSDigJQgYSBiYXNlNjQtZW5jb2RlZCBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIHJlc291cmNlIChmaWxlKSB5b3XigJlyZSB0ZWxsaW5nIHRoZSBicm93c2VyIHRvIGZldGNoLiBUaGUgYnJvd3NlciBjYW4gdXNlIHRoaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZldGNoZWQgcmVzb3VyY2UgaGFzIGJlZW4gZGVsaXZlcmVkIGZyZWUgb2YgdW5leHBlY3RlZCBtYW5pcHVsYXRpb24uIFNlZSBbU3VicmVzb3VyY2UgSW50ZWdyaXR5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TdWJyZXNvdXJjZV9JbnRlZ3JpdHkpLiJ9LHtuYW1lOiJyZWZlcnJlcnBvbGljeSIsZGVzY3JpcHRpb246J0Egc3RyaW5nIGluZGljYXRpbmcgd2hpY2ggcmVmZXJyZXIgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgdGhlIHJlc291cmNlOlxuXG4qICAgYG5vLXJlZmVycmVyYCBtZWFucyB0aGF0IHRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciAiVGhlIFJlZmVyZXIgcmVxdWVzdCBoZWFkZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIHdlYiBwYWdlIGZyb20gd2hpY2ggYSBsaW5rIHRvIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIHBhZ2Ugd2FzIGZvbGxvd2VkLiBUaGUgUmVmZXJlciBoZWFkZXIgYWxsb3dzIHNlcnZlcnMgdG8gaWRlbnRpZnkgd2hlcmUgcGVvcGxlIGFyZSB2aXNpdGluZyB0aGVtIGZyb20gYW5kIG1heSB1c2UgdGhhdCBkYXRhIGZvciBhbmFseXRpY3MsIGxvZ2dpbmcsIG9yIG9wdGltaXplZCBjYWNoaW5nLCBmb3IgZXhhbXBsZS4iKSBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cbiogICBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGVgIG1lYW5zIHRoYXQgbm8gW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgYmUgc2VudCB3aGVuIG5hdmlnYXRpbmcgdG8gYW4gb3JpZ2luIHdpdGhvdXQgVExTIChIVFRQUykuIFRoaXMgaXMgYSB1c2VyIGFnZW504oCZcyBkZWZhdWx0IGJlaGF2aW9yLCBpZiBubyBwb2xpY3kgaXMgb3RoZXJ3aXNlIHNwZWNpZmllZC5cbiogICBgb3JpZ2luYCBtZWFucyB0aGF0IHRoZSByZWZlcnJlciB3aWxsIGJlIHRoZSBvcmlnaW4gb2YgdGhlIHBhZ2UsIHdoaWNoIGlzIHJvdWdobHkgdGhlIHNjaGVtZSwgdGhlIGhvc3QsIGFuZCB0aGUgcG9ydC5cbiogICBgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luYCBtZWFucyB0aGF0IG5hdmlnYXRpbmcgdG8gb3RoZXIgb3JpZ2lucyB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIHNjaGVtZSwgdGhlIGhvc3QsIGFuZCB0aGUgcG9ydCwgd2hpbGUgbmF2aWdhdGluZyBvbiB0aGUgc2FtZSBvcmlnaW4gd2lsbCBpbmNsdWRlIHRoZSByZWZlcnJlclwncyBwYXRoLlxuKiAgIGB1bnNhZmUtdXJsYCBtZWFucyB0aGF0IHRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBhbmQgdGhlIHBhdGggKGJ1dCBub3QgdGhlIGZyYWdtZW50LCBwYXNzd29yZCwgb3IgdXNlcm5hbWUpLiBUaGlzIGNhc2UgaXMgdW5zYWZlIGJlY2F1c2UgaXQgY2FuIGxlYWsgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLid9LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246J1RoZSBgdGl0bGVgIGF0dHJpYnV0ZSBoYXMgc3BlY2lhbCBzZW1hbnRpY3Mgb24gdGhlIGA8bGluaz5gIGVsZW1lbnQuIFdoZW4gdXNlZCBvbiBhIGA8bGluayByZWw9InN0eWxlc2hlZXQiPmAgaXQgZGVmaW5lcyBhIFtwcmVmZXJyZWQgb3IgYW4gYWx0ZXJuYXRlIHN0eWxlc2hlZXRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9BbHRlcm5hdGl2ZV9zdHlsZV9zaGVldHMpLiBJbmNvcnJlY3RseSB1c2luZyBpdCBtYXkgW2NhdXNlIHRoZSBzdHlsZXNoZWV0IHRvIGJlIGlnbm9yZWRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ29ycmVjdGx5X1VzaW5nX1RpdGxlc19XaXRoX0V4dGVybmFsX1N0eWxlc2hlZXRzKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsifV19LHtuYW1lOiJtZXRhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbWV0YSBlbGVtZW50IHJlcHJlc2VudHMgdmFyaW91cyBraW5kcyBvZiBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgdGhlIHRpdGxlLCBiYXNlLCBsaW5rLCBzdHlsZSwgYW5kIHNjcmlwdCBlbGVtZW50cy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTpgVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgbmFtZSBvZiBhIHBpZWNlIG9mIGRvY3VtZW50LWxldmVsIG1ldGFkYXRhLiBJdCBzaG91bGQgbm90IGJlIHNldCBpZiBvbmUgb2YgdGhlIGF0dHJpYnV0ZXMgW1xgaXRlbXByb3BcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLWl0ZW1wcm9wKSwgW1xgaHR0cC1lcXVpdlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWh0dHAtZXF1aXYpIG9yIFtcYGNoYXJzZXRcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jaGFyc2V0KSBpcyBhbHNvIHNldC4KClRoaXMgbWV0YWRhdGEgbmFtZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGNvbnRhaW5lZCBieSB0aGUgW1xgY29udGVudFxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNvbnRlbnQpIGF0dHJpYnV0ZS4gVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIG5hbWUgYXR0cmlidXRlIGFyZToKCiogICBcYGFwcGxpY2F0aW9uLW5hbWVcYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiBydW5uaW5nIGluIHRoZSB3ZWIgcGFnZS4KICAgIAogICAgKipOb3RlOioqCiAgICAKICAgICogICBCcm93c2VycyBtYXkgdXNlIHRoaXMgdG8gaWRlbnRpZnkgdGhlIGFwcGxpY2F0aW9uLiBJdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgW1xgPHRpdGxlPlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGl0bGUgIlRoZSBIVE1MIFRpdGxlIGVsZW1lbnQgKDx0aXRsZT4pIGRlZmluZXMgdGhlIGRvY3VtZW50J3MgdGl0bGUgdGhhdCBpcyBzaG93biBpbiBhIGJyb3dzZXIncyB0aXRsZSBiYXIgb3IgYSBwYWdlJ3MgdGFiLiIpIGVsZW1lbnQsIHdoaWNoIHVzdWFsbHkgY29udGFpbiB0aGUgYXBwbGljYXRpb24gbmFtZSwgYnV0IG1heSBhbHNvIGNvbnRhaW4gaW5mb3JtYXRpb24gbGlrZSB0aGUgZG9jdW1lbnQgbmFtZSBvciBhIHN0YXR1cy4KICAgICogICBTaW1wbGUgd2ViIHBhZ2VzIHNob3VsZG4ndCBkZWZpbmUgYW4gYXBwbGljYXRpb24tbmFtZS4KICAgIAoqICAgXGBhdXRob3JcYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudCdzIGF1dGhvci4KKiAgIFxgZGVzY3JpcHRpb25cYCB3aGljaCBjb250YWlucyBhIHNob3J0IGFuZCBhY2N1cmF0ZSBzdW1tYXJ5IG9mIHRoZSBjb250ZW50IG9mIHRoZSBwYWdlLiBTZXZlcmFsIGJyb3dzZXJzLCBsaWtlIEZpcmVmb3ggYW5kIE9wZXJhLCB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBkZXNjcmlwdGlvbiBvZiBib29rbWFya2VkIHBhZ2VzLgoqICAgXGBnZW5lcmF0b3JcYCB3aGljaCBjb250YWlucyB0aGUgaWRlbnRpZmllciBvZiB0aGUgc29mdHdhcmUgdGhhdCBnZW5lcmF0ZWQgdGhlIHBhZ2UuCiogICBcYGtleXdvcmRzXGAgd2hpY2ggY29udGFpbnMgd29yZHMgcmVsZXZhbnQgdG8gdGhlIHBhZ2UncyBjb250ZW50IHNlcGFyYXRlZCBieSBjb21tYXMuCiogICBcYHJlZmVycmVyXGAgd2hpY2ggY29udHJvbHMgdGhlIFtcYFJlZmVyZXJcYCBIVFRQIGhlYWRlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIpIGF0dGFjaGVkIHRvIHJlcXVlc3RzIHNlbnQgZnJvbSB0aGUgZG9jdW1lbnQ6CiAgICAKICAgIFZhbHVlcyBmb3IgdGhlIFxgY29udGVudFxgIGF0dHJpYnV0ZSBvZiBcYDxtZXRhIG5hbWU9InJlZmVycmVyIj5cYAogICAgCiAgICBcYG5vLXJlZmVycmVyXGAKICAgIAogICAgRG8gbm90IHNlbmQgYSBIVFRQIFxgUmVmZXJyZXJcYCBoZWFkZXIuCiAgICAKICAgIFxgb3JpZ2luXGAKICAgIAogICAgU2VuZCB0aGUgW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9PcmlnaW4pIG9mIHRoZSBkb2N1bWVudC4KICAgIAogICAgXGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZVxgCiAgICAKICAgIFNlbmQgdGhlIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvT3JpZ2luKSBhcyBhIHJlZmVycmVyIHRvIFVSTHMgYXMgc2VjdXJlIGFzIHRoZSBjdXJyZW50IHBhZ2UsIChodHRwc+KGkmh0dHBzKSwgYnV0IGRvZXMgbm90IHNlbmQgYSByZWZlcnJlciB0byBsZXNzIHNlY3VyZSBVUkxzIChodHRwc+KGkmh0dHApLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KICAgIAogICAgXGBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5cYAogICAgCiAgICBTZW5kIHRoZSBmdWxsIFVSTCAoc3RyaXBwZWQgb2YgcGFyYW1ldGVycykgZm9yIHNhbWUtb3JpZ2luIHJlcXVlc3RzLCBidXQgb25seSBzZW5kIHRoZSBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L09yaWdpbikgZm9yIG90aGVyIGNhc2VzLgogICAgCiAgICBcYHNhbWUtb3JpZ2luXGAKICAgIAogICAgQSByZWZlcnJlciB3aWxsIGJlIHNlbnQgZm9yIFtzYW1lLXNpdGUgb3JpZ2luc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2FtZS1vcmlnaW5fcG9saWN5KSwgYnV0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyB3aWxsIGNvbnRhaW4gbm8gcmVmZXJyZXIgaW5mb3JtYXRpb24uCiAgICAKICAgIFxgc3RyaWN0LW9yaWdpblxgCiAgICAKICAgIE9ubHkgc2VuZCB0aGUgb3JpZ2luIG9mIHRoZSBkb2N1bWVudCBhcyB0aGUgcmVmZXJyZXIgdG8gYS1wcmlvcmkgYXMtbXVjaC1zZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQUyksIGJ1dCBkb24ndCBzZW5kIGl0IHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQKS4KICAgIAogICAgXGBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luXGAKICAgIAogICAgU2VuZCBhIGZ1bGwgVVJMIHdoZW4gcGVyZm9ybWluZyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QsIG9ubHkgc2VuZCB0aGUgb3JpZ2luIG9mIHRoZSBkb2N1bWVudCB0byBhLXByaW9yaSBhcy1tdWNoLXNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFMtPkhUVFBTKSwgYW5kIHNlbmQgbm8gaGVhZGVyIHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQKS4KICAgIAogICAgXGB1bnNhZmUtVVJMXGAKICAgIAogICAgU2VuZCB0aGUgZnVsbCBVUkwgKHN0cmlwcGVkIG9mIHBhcmFtZXRlcnMpIGZvciBzYW1lLW9yaWdpbiBvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuCiAgICAKICAgICoqTm90ZXM6KioKICAgIAogICAgKiAgIFNvbWUgYnJvd3NlcnMgc3VwcG9ydCB0aGUgZGVwcmVjYXRlZCB2YWx1ZXMgb2YgXGBhbHdheXNcYCwgXGBkZWZhdWx0XGAsIGFuZCBcYG5ldmVyXGAgZm9yIHJlZmVycmVyLgogICAgKiAgIER5bmFtaWNhbGx5IGluc2VydGluZyBcYDxtZXRhIG5hbWU9InJlZmVycmVyIj5cYCAod2l0aCBbXGBkb2N1bWVudC53cml0ZVxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvd3JpdGUpIG9yIFtcYGFwcGVuZENoaWxkXGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ob2RlL2FwcGVuZENoaWxkKSkgbWFrZXMgdGhlIHJlZmVycmVyIGJlaGF2aW91ciB1bnByZWRpY3RhYmxlLgogICAgKiAgIFdoZW4gc2V2ZXJhbCBjb25mbGljdGluZyBwb2xpY2llcyBhcmUgZGVmaW5lZCwgdGhlIG5vLXJlZmVycmVyIHBvbGljeSBpcyBhcHBsaWVkLgogICAgCgpUaGlzIGF0dHJpYnV0ZSBtYXkgYWxzbyBoYXZlIGEgdmFsdWUgdGFrZW4gZnJvbSB0aGUgZXh0ZW5kZWQgbGlzdCBkZWZpbmVkIG9uIFtXSEFUV0cgV2lraSBNZXRhRXh0ZW5zaW9ucyBwYWdlXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL01ldGFFeHRlbnNpb25zKS4gQWx0aG91Z2ggbm9uZSBoYXZlIGJlZW4gZm9ybWFsbHkgYWNjZXB0ZWQgeWV0LCBhIGZldyBjb21tb25seSB1c2VkIG5hbWVzIGFyZToKCiogICBcYGNyZWF0b3JcYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjcmVhdG9yIG9mIHRoZSBkb2N1bWVudCwgc3VjaCBhcyBhbiBvcmdhbml6YXRpb24gb3IgaW5zdGl0dXRpb24uIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLCBzZXZlcmFsIFtcYDxtZXRhPlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSAiVGhlIEhUTUwgPG1ldGE+IGVsZW1lbnQgcmVwcmVzZW50cyBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBvdGhlciBIVE1MIG1ldGEtcmVsYXRlZCBlbGVtZW50cywgbGlrZSA8YmFzZT4sIDxsaW5rPiwgPHNjcmlwdD4sIDxzdHlsZT4gb3IgPHRpdGxlPi4iKSBlbGVtZW50cyBzaG91bGQgYmUgdXNlZC4KKiAgIFxgZ29vZ2xlYm90XGAsIGEgc3lub255bSBvZiBcYHJvYm90c1xgLCBpcyBvbmx5IGZvbGxvd2VkIGJ5IEdvb2dsZWJvdCAodGhlIGluZGV4aW5nIGNyYXdsZXIgZm9yIEdvb2dsZSkuCiogICBcYHB1Ymxpc2hlclxgIHdoaWNoIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGRvY3VtZW50J3MgcHVibGlzaGVyLgoqICAgXGByb2JvdHNcYCB3aGljaCBkZWZpbmVzIHRoZSBiZWhhdmlvdXIgdGhhdCBjb29wZXJhdGl2ZSBjcmF3bGVycywgb3IgInJvYm90cyIsIHNob3VsZCB1c2Ugd2l0aCB0aGUgcGFnZS4gSXQgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgdmFsdWVzIGJlbG93OgogICAgCiAgICBWYWx1ZXMgZm9yIHRoZSBjb250ZW50IG9mIFxgPG1ldGEgbmFtZT0icm9ib3RzIj5cYAogICAgCiAgICBWYWx1ZQogICAgCiAgICBEZXNjcmlwdGlvbgogICAgCiAgICBVc2VkIGJ5CiAgICAKICAgIFxgaW5kZXhcYAogICAgCiAgICBBbGxvd3MgdGhlIHJvYm90IHRvIGluZGV4IHRoZSBwYWdlIChkZWZhdWx0KS4KICAgIAogICAgQWxsCiAgICAKICAgIFxgbm9pbmRleFxgCiAgICAKICAgIFJlcXVlc3RzIHRoZSByb2JvdCB0byBub3QgaW5kZXggdGhlIHBhZ2UuCiAgICAKICAgIEFsbAogICAgCiAgICBcYGZvbGxvd1xgCiAgICAKICAgIEFsbG93cyB0aGUgcm9ib3QgdG8gZm9sbG93IHRoZSBsaW5rcyBvbiB0aGUgcGFnZSAoZGVmYXVsdCkuCiAgICAKICAgIEFsbAogICAgCiAgICBcYG5vZm9sbG93XGAKICAgIAogICAgUmVxdWVzdHMgdGhlIHJvYm90IHRvIG5vdCBmb2xsb3cgdGhlIGxpbmtzIG9uIHRoZSBwYWdlLgogICAgCiAgICBBbGwKICAgIAogICAgXGBub25lXGAKICAgIAogICAgRXF1aXZhbGVudCB0byBcYG5vaW5kZXgsIG5vZm9sbG93XGAKICAgIAogICAgW0dvb2dsZV0oaHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vd2VibWFzdGVycy9hbnN3ZXIvNzk4MTIpCiAgICAKICAgIFxgbm9vZHBcYAogICAgCiAgICBQcmV2ZW50cyB1c2luZyB0aGUgW09wZW4gRGlyZWN0b3J5IFByb2plY3RdKGh0dHBzOi8vd3d3LmRtb3oub3JnLykgZGVzY3JpcHRpb24sIGlmIGFueSwgYXMgdGhlIHBhZ2UgZGVzY3JpcHRpb24gaW4gc2VhcmNoIGVuZ2luZSByZXN1bHRzLgogICAgCiAgICBbR29vZ2xlXShodHRwczovL3N1cHBvcnQuZ29vZ2xlLmNvbS93ZWJtYXN0ZXJzL2Fuc3dlci8zNTYyNCNub2Rtb3opLCBbWWFob29dKGh0dHBzOi8vaGVscC55YWhvby5jb20va2Ivc2VhcmNoLWZvci1kZXNrdG9wL21ldGEtdGFncy1yb2JvdHN0eHQteWFob28tc2VhcmNoLXNsbjIyMTMuaHRtbCNjb250NSksIFtCaW5nXShodHRwczovL3d3dy5iaW5nLmNvbS93ZWJtYXN0ZXIvaGVscC93aGljaC1yb2JvdHMtbWV0YXRhZ3MtZG9lcy1iaW5nLXN1cHBvcnQtNTE5OGQyNDApCiAgICAKICAgIFxgbm9hcmNoaXZlXGAKICAgIAogICAgUmVxdWVzdHMgdGhlIHNlYXJjaCBlbmdpbmUgbm90IHRvIGNhY2hlIHRoZSBwYWdlIGNvbnRlbnQuCiAgICAKICAgIFtHb29nbGVdKGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3dlYm1hc3RlcnMvY29udHJvbC1jcmF3bC1pbmRleC9kb2NzL3JvYm90c19tZXRhX3RhZyN2YWxpZC1pbmRleGluZy0tc2VydmluZy1kaXJlY3RpdmVzKSwgW1lhaG9vXShodHRwczovL2hlbHAueWFob28uY29tL2tiL3NlYXJjaC1mb3ItZGVza3RvcC9TTE4yMjEzLmh0bWwpLCBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKQogICAgCiAgICBcYG5vc25pcHBldFxgCiAgICAKICAgIFByZXZlbnRzIGRpc3BsYXlpbmcgYW55IGRlc2NyaXB0aW9uIG9mIHRoZSBwYWdlIGluIHNlYXJjaCBlbmdpbmUgcmVzdWx0cy4KICAgIAogICAgW0dvb2dsZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vd2VibWFzdGVycy9jb250cm9sLWNyYXdsLWluZGV4L2RvY3Mvcm9ib3RzX21ldGFfdGFnI3ZhbGlkLWluZGV4aW5nLS1zZXJ2aW5nLWRpcmVjdGl2ZXMpLCBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKQogICAgCiAgICBcYG5vaW1hZ2VpbmRleFxgCiAgICAKICAgIFJlcXVlc3RzIHRoaXMgcGFnZSBub3QgdG8gYXBwZWFyIGFzIHRoZSByZWZlcnJpbmcgcGFnZSBvZiBhbiBpbmRleGVkIGltYWdlLgogICAgCiAgICBbR29vZ2xlXShodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWJtYXN0ZXJzL2NvbnRyb2wtY3Jhd2wtaW5kZXgvZG9jcy9yb2JvdHNfbWV0YV90YWcjdmFsaWQtaW5kZXhpbmctLXNlcnZpbmctZGlyZWN0aXZlcykKICAgIAogICAgXGBub2NhY2hlXGAKICAgIAogICAgU3lub255bSBvZiBcYG5vYXJjaGl2ZVxgLgogICAgCiAgICBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKQogICAgCiAgICAqKk5vdGVzOioqCiAgICAKICAgICogICBPbmx5IGNvb3BlcmF0aXZlIHJvYm90cyBmb2xsb3cgdGhlc2UgcnVsZXMuIERvIG5vdCBleHBlY3QgdG8gcHJldmVudCBlLW1haWwgaGFydmVzdGVycyB3aXRoIHRoZW0uCiAgICAqICAgVGhlIHJvYm90IHN0aWxsIG5lZWRzIHRvIGFjY2VzcyB0aGUgcGFnZSBpbiBvcmRlciB0byByZWFkIHRoZXNlIHJ1bGVzLiBUbyBwcmV2ZW50IGJhbmR3aWR0aCBjb25zdW1wdGlvbiwgdXNlIGEgX1tyb2JvdHMudHh0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3JvYm90cy50eHQgInJvYm90cy50eHQ6IFJvYm90cy50eHQgaXMgYSBmaWxlIHdoaWNoIGlzIHVzdWFsbHkgcGxhY2VkIGluIHRoZSByb290IG9mIGFueSB3ZWJzaXRlLiBJdCBkZWNpZGVzIHdoZXRoZXLCoGNyYXdsZXJzIGFyZSBwZXJtaXR0ZWQgb3IgZm9yYmlkZGVuIGFjY2VzcyB0byB0aGUgd2ViIHNpdGUuIilfIGZpbGUuCiAgICAqICAgSWYgeW91IHdhbnQgdG8gcmVtb3ZlIGEgcGFnZSwgXGBub2luZGV4XGAgd2lsbCB3b3JrLCBidXQgb25seSBhZnRlciB0aGUgcm9ib3QgdmlzaXRzIHRoZSBwYWdlIGFnYWluLiBFbnN1cmUgdGhhdCB0aGUgXGByb2JvdHMudHh0XGAgZmlsZSBpcyBub3QgcHJldmVudGluZyByZXZpc2l0cy4KICAgICogICBTb21lIHZhbHVlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBsaWtlIFxgaW5kZXhcYCBhbmQgXGBub2luZGV4XGAsIG9yIFxgZm9sbG93XGAgYW5kIFxgbm9mb2xsb3dcYC4gSW4gdGhlc2UgY2FzZXMgdGhlIHJvYm90J3MgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZCBhbmQgbWF5IHZhcnkgYmV0d2VlbiB0aGVtLgogICAgKiAgIFNvbWUgY3Jhd2xlciByb2JvdHMsIGxpa2UgR29vZ2xlLCBZYWhvbyBhbmQgQmluZywgc3VwcG9ydCB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZSBIVFRQIGhlYWRlciBcYFgtUm9ib3RzLVRhZ1xgOyB0aGlzIGFsbG93cyBub24tSFRNTCBkb2N1bWVudHMgbGlrZSBpbWFnZXMgdG8gdXNlIHRoZXNlIHJ1bGVzLgogICAgCiogICBcYHNsdXJwXGAsIGlzIGEgc3lub255bSBvZiBcYHJvYm90c1xgLCBidXQgb25seSBmb3IgU2x1cnAgLSB0aGUgY3Jhd2xlciBmb3IgWWFob28gU2VhcmNoLgoqICAgXGB2aWV3cG9ydFxgLCB3aGljaCBnaXZlcyBoaW50cyBhYm91dCB0aGUgc2l6ZSBvZiB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBbdmlld3BvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvdmlld3BvcnQgInZpZXdwb3J0OiBBIHZpZXdwb3J0IHJlcHJlc2VudHMgYSBwb2x5Z29uYWwgKG5vcm1hbGx5IHJlY3Rhbmd1bGFyKSBhcmVhIGluIGNvbXB1dGVyIGdyYXBoaWNzIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHZpZXdlZC4gSW4gd2ViIGJyb3dzZXIgdGVybXMsIGl0IHJlZmVycyB0byB0aGUgcGFydCBvZiB0aGUgZG9jdW1lbnQgeW91J3JlIHZpZXdpbmcgd2hpY2ggaXMgY3VycmVudGx5IHZpc2libGUgaW4gaXRzIHdpbmRvdyAob3IgdGhlIHNjcmVlbiwgaWYgdGhlIGRvY3VtZW50IGlzIGJlaW5nIHZpZXdlZCBpbiBmdWxsIHNjcmVlbiBtb2RlKS4gQ29udGVudCBvdXRzaWRlIHRoZSB2aWV3cG9ydCBpcyBub3QgdmlzaWJsZSBvbnNjcmVlbiB1bnRpbCBzY3JvbGxlZCBpbnRvIHZpZXcuIikuIFVzZWQgYnkgbW9iaWxlIGRldmljZXMgb25seS4KICAgIAogICAgVmFsdWVzIGZvciB0aGUgY29udGVudCBvZiBcYDxtZXRhIG5hbWU9InZpZXdwb3J0Ij5cYAogICAgCiAgICBWYWx1ZQogICAgCiAgICBQb3NzaWJsZSBzdWJ2YWx1ZXMKICAgIAogICAgRGVzY3JpcHRpb24KICAgIAogICAgXGB3aWR0aFxgCiAgICAKICAgIEEgcG9zaXRpdmUgaW50ZWdlciBudW1iZXIsIG9yIHRoZSB0ZXh0IFxgZGV2aWNlLXdpZHRoXGAKICAgIAogICAgRGVmaW5lcyB0aGUgcGl4ZWwgd2lkdGggb2YgdGhlIHZpZXdwb3J0IHRoYXQgeW91IHdhbnQgdGhlIHdlYiBzaXRlIHRvIGJlIHJlbmRlcmVkIGF0LgogICAgCiAgICBcYGhlaWdodFxgCiAgICAKICAgIEEgcG9zaXRpdmUgaW50ZWdlciwgb3IgdGhlIHRleHQgXGBkZXZpY2UtaGVpZ2h0XGAKICAgIAogICAgRGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC4gTm90IHVzZWQgYnkgYW55IGJyb3dzZXIuCiAgICAKICAgIFxgaW5pdGlhbC1zY2FsZVxgCiAgICAKICAgIEEgcG9zaXRpdmUgbnVtYmVyIGJldHdlZW4gXGAwLjBcYCBhbmQgXGAxMC4wXGAKICAgIAogICAgRGVmaW5lcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgZGV2aWNlIHdpZHRoIChcYGRldmljZS13aWR0aFxgIGluIHBvcnRyYWl0IG1vZGUgb3IgXGBkZXZpY2UtaGVpZ2h0XGAgaW4gbGFuZHNjYXBlIG1vZGUpIGFuZCB0aGUgdmlld3BvcnQgc2l6ZS4KICAgIAogICAgXGBtYXhpbXVtLXNjYWxlXGAKICAgIAogICAgQSBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiBcYDAuMFxgIGFuZCBcYDEwLjBcYAogICAgCiAgICBEZWZpbmVzIHRoZSBtYXhpbXVtIGFtb3VudCB0byB6b29tIGluLiBJdCBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIFxgbWluaW11bS1zY2FsZVxgIG9yIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkLiBCcm93c2VyIHNldHRpbmdzIGNhbiBpZ25vcmUgdGhpcyBydWxlIGFuZCBpT1MxMCsgaWdub3JlcyBpdCBieSBkZWZhdWx0LgogICAgCiAgICBcYG1pbmltdW0tc2NhbGVcYAogICAgCiAgICBBIHBvc2l0aXZlIG51bWJlciBiZXR3ZWVuIFxgMC4wXGAgYW5kIFxgMTAuMFxgCiAgICAKICAgIERlZmluZXMgdGhlIG1pbmltdW0gem9vbSBsZXZlbC4gSXQgbXVzdCBiZSBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBcYG1heGltdW0tc2NhbGVcYCBvciB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4gQnJvd3NlciBzZXR0aW5ncyBjYW4gaWdub3JlIHRoaXMgcnVsZSBhbmQgaU9TMTArIGlnbm9yZXMgaXQgYnkgZGVmYXVsdC4KICAgIAogICAgXGB1c2VyLXNjYWxhYmxlXGAKICAgIAogICAgXGB5ZXNcYCBvciBcYG5vXGAKICAgIAogICAgSWYgc2V0IHRvIFxgbm9cYCwgdGhlIHVzZXIgaXMgbm90IGFibGUgdG8gem9vbSBpbiB0aGUgd2VicGFnZS4gVGhlIGRlZmF1bHQgaXMgXGB5ZXNcYC4gQnJvd3NlciBzZXR0aW5ncyBjYW4gaWdub3JlIHRoaXMgcnVsZSwgYW5kIGlPUzEwKyBpZ25vcmVzIGl0IGJ5IGRlZmF1bHQuCiAgICAKICAgIFNwZWNpZmljYXRpb24KICAgIAogICAgU3RhdHVzCiAgICAKICAgIENvbW1lbnQKICAgIAogICAgW0NTUyBEZXZpY2UgQWRhcHRhdGlvbiAgCiAgICBUaGUgZGVmaW5pdGlvbiBvZiAnPG1ldGEgbmFtZT0idmlld3BvcnQiPicgaW4gdGhhdCBzcGVjaWZpY2F0aW9uLl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1kZXZpY2UtYWRhcHQvI3ZpZXdwb3J0LW1ldGEpCiAgICAKICAgIFdvcmtpbmcgRHJhZnQKICAgIAogICAgTm9uLW5vcm1hdGl2ZWx5IGRlc2NyaWJlcyB0aGUgVmlld3BvcnQgTUVUQSBlbGVtZW50CiAgICAKICAgIFNlZSBhbHNvOiBbXGBAdmlld3BvcnRcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0B2aWV3cG9ydCAiVGhlIEB2aWV3cG9ydCBDU1MgYXQtcnVsZSBsZXRzIHlvdSBjb25maWd1cmUgdGhlIHZpZXdwb3J0IHRocm91Z2ggd2hpY2ggdGhlIGRvY3VtZW50IGlzIHZpZXdlZC4gSXQncyBwcmltYXJpbHkgdXNlZCBmb3IgbW9iaWxlIGRldmljZXMsIGJ1dCBpcyBhbHNvIHVzZWQgYnkgZGVza3RvcCBicm93c2VycyB0aGF0IHN1cHBvcnQgZmVhdHVyZXMgbGlrZSAic25hcCB0byBlZGdlIiAoc3VjaCBhcyBNaWNyb3NvZnQgRWRnZSkuIikKICAgIAogICAgKipOb3RlczoqKgogICAgCiAgICAqICAgVGhvdWdoIHVuc3RhbmRhcmRpemVkLCB0aGlzIGRlY2xhcmF0aW9uIGlzIHJlc3BlY3RlZCBieSBtb3N0IG1vYmlsZSBicm93c2VycyBkdWUgdG8gZGUtZmFjdG8gZG9taW5hbmNlLgogICAgKiAgIFRoZSBkZWZhdWx0IHZhbHVlcyBtYXkgdmFyeSBiZXR3ZWVuIGRldmljZXMgYW5kIGJyb3dzZXJzLgogICAgKiAgIFRvIGxlYXJuIGFib3V0IHRoaXMgZGVjbGFyYXRpb24gaW4gRmlyZWZveCBmb3IgTW9iaWxlLCBzZWUgW3RoaXMgYXJ0aWNsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb2JpbGUvVmlld3BvcnRfbWV0YV90YWcgIk1vYmlsZS9WaWV3cG9ydCBtZXRhIHRhZyIpLmB9fSx7bmFtZToiaHR0cC1lcXVpdiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonRGVmaW5lcyBhIHByYWdtYSBkaXJlY3RpdmUuIFRoZSBhdHRyaWJ1dGUgaXMgbmFtZWQgYCoqaHR0cC1lcXVpdioqKGFsZW50KWAgYmVjYXVzZSBhbGwgdGhlIGFsbG93ZWQgdmFsdWVzIGFyZSBuYW1lcyBvZiBwYXJ0aWN1bGFyIEhUVFAgaGVhZGVyczpcblxuKiAgIGAiY29udGVudC1sYW5ndWFnZSJgICBcbiAgICBEZWZpbmVzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIG9mIHRoZSBwYWdlLiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgW2xhbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvbGFuZykgYXR0cmlidXRlIG9uIGFueSBlbGVtZW50LlxuICAgIFxuICAgICoqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgdmFsdWUsIGFzIGl0IGlzIG9ic29sZXRlLiBQcmVmZXIgdGhlIGBsYW5nYCBhdHRyaWJ1dGUgb24gdGhlIFtgPGh0bWw+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2h0bWwgIlRoZSBIVE1MIDxodG1sPiBlbGVtZW50IHJlcHJlc2VudHMgdGhlIHJvb3QgKHRvcC1sZXZlbCBlbGVtZW50KSBvZiBhbiBIVE1MIGRvY3VtZW50LCBzbyBpdCBpcyBhbHNvIHJlZmVycmVkIHRvIGFzIHRoZSByb290IGVsZW1lbnQuIEFsbCBvdGhlciBlbGVtZW50cyBtdXN0IGJlIGRlc2NlbmRhbnRzIG9mIHRoaXMgZWxlbWVudC4iKSBlbGVtZW50LlxuICAgIFxuKiAgIGAiY29udGVudC1zZWN1cml0eS1wb2xpY3kiYCAgXG4gICAgQWxsb3dzIHBhZ2UgYXV0aG9ycyB0byBkZWZpbmUgYSBbY29udGVudCBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L0NTUC9DU1BfcG9saWN5X2RpcmVjdGl2ZXMpIGZvciB0aGUgY3VycmVudCBwYWdlLiBDb250ZW50IHBvbGljaWVzIG1vc3RseSBzcGVjaWZ5IGFsbG93ZWQgc2VydmVyIG9yaWdpbnMgYW5kIHNjcmlwdCBlbmRwb2ludHMgd2hpY2ggaGVscCBndWFyZCBhZ2FpbnN0IGNyb3NzLXNpdGUgc2NyaXB0aW5nIGF0dGFja3MuXG4qICAgYCJjb250ZW50LXR5cGUiYCAgXG4gICAgRGVmaW5lcyB0aGUgW01JTUUgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9NSU1FX3R5cGUpIG9mIHRoZSBkb2N1bWVudCwgZm9sbG93ZWQgYnkgaXRzIGNoYXJhY3RlciBlbmNvZGluZy4gSXQgZm9sbG93cyB0aGUgc2FtZSBzeW50YXggYXMgdGhlIEhUVFAgYGNvbnRlbnQtdHlwZWAgZW50aXR5LWhlYWRlciBmaWVsZCwgYnV0IGFzIGl0IGlzIGluc2lkZSBhIEhUTUwgcGFnZSwgbW9zdCB2YWx1ZXMgb3RoZXIgdGhhbiBgdGV4dC9odG1sYCBhcmUgaW1wb3NzaWJsZS4gVGhlcmVmb3JlIHRoZSB2YWxpZCBzeW50YXggZm9yIGl0cyBgY29udGVudGAgaXMgdGhlIHN0cmluZyBcJ2B0ZXh0L2h0bWxgXCcgZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgc2V0IHdpdGggdGhlIGZvbGxvd2luZyBzeW50YXg6IFwnYDsgY2hhcnNldD1fSUFOQWNoYXJzZXRfYFwnLCB3aGVyZSBgSUFOQWNoYXJzZXRgIGlzIHRoZSBfcHJlZmVycmVkIE1JTUUgbmFtZV8gZm9yIGEgY2hhcmFjdGVyIHNldCBhcyBbZGVmaW5lZCBieSB0aGUgSUFOQS5dKGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzKVxuICAgIFxuICAgICoqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgdmFsdWUsIGFzIGl0IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgY2hhcnNldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY2hhcnNldCkgYXR0cmlidXRlIG9uIHRoZSBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQuXG4gICAgXG4gICAgKipOb3RlOioqIEFzIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgY2FuXCd0IGNoYW5nZSBkb2N1bWVudHNcJyB0eXBlcyBpbiBYSFRNTCBvciBIVE1MNVwncyBYSFRNTCBzZXJpYWxpemF0aW9uLCBuZXZlciBzZXQgdGhlIE1JTUUgdHlwZSB0byBhbiBYSFRNTCBNSU1FIHR5cGUgd2l0aCBgPG1ldGE+YC5cbiAgICBcbiogICBgInJlZnJlc2giYCAgXG4gICAgVGhpcyBpbnN0cnVjdGlvbiBzcGVjaWZpZXM6XG4gICAgKiAgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgcGFnZSBzaG91bGQgYmUgcmVsb2FkZWQgLSBvbmx5IGlmIHRoZSBbYGNvbnRlbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNvbnRlbnQpIGF0dHJpYnV0ZSBjb250YWlucyBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAgKiAgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgcGFnZSBzaG91bGQgcmVkaXJlY3QgdG8gYW5vdGhlciAtIG9ubHkgaWYgdGhlIFtgY29udGVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY29udGVudCkgYXR0cmlidXRlIGNvbnRhaW5zIGEgcG9zaXRpdmUgaW50ZWdlciBmb2xsb3dlZCBieSB0aGUgc3RyaW5nIFwnYDt1cmw9YFwnLCBhbmQgYSB2YWxpZCBVUkwuXG4qICAgYCJzZXQtY29va2llImAgIFxuICAgIERlZmluZXMgYSBbY29va2llXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL2Nvb2tpZSkgZm9yIHRoZSBwYWdlLiBJdHMgY29udGVudCBtdXN0IGZvbGxvdyB0aGUgc3ludGF4IGRlZmluZWQgaW4gdGhlIFtJRVRGIEhUVFAgQ29va2llIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWh0dHBzdGF0ZS1jb29raWUtMTQpLlxuICAgIFxuICAgICoqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgaW5zdHJ1Y3Rpb24sIGFzIGl0IGlzIG9ic29sZXRlLiBVc2UgdGhlIEhUVFAgaGVhZGVyIFtgU2V0LUNvb2tpZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9TZXQtQ29va2llKSBpbnN0ZWFkLid9fSx7bmFtZToiY29udGVudCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgdGhlIHZhbHVlIGZvciB0aGUgW2BodHRwLWVxdWl2YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1odHRwLWVxdWl2KSBvciBbYG5hbWVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLW5hbWUpIGF0dHJpYnV0ZSwgZGVwZW5kaW5nIG9uIHdoaWNoIGlzIHVzZWQuIn19LHtuYW1lOiJjaGFyc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBkZWNsYXJlcyB0aGUgcGFnZVwncyBjaGFyYWN0ZXIgZW5jb2RpbmcuIEl0IG11c3QgY29udGFpbiBhIFtzdGFuZGFyZCBJQU5BIE1JTUUgbmFtZSBmb3IgY2hhcmFjdGVyIGVuY29kaW5nc10oaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMpLiBBbHRob3VnaCB0aGUgc3RhbmRhcmQgZG9lc25cJ3QgcmVxdWVzdCBhIHNwZWNpZmljIGVuY29kaW5nLCBpdCBzdWdnZXN0czpcblxuKiAgIEF1dGhvcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIFtgVVRGLThgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1VURi04KS5cbiogICBBdXRob3JzIHNob3VsZCBub3QgdXNlIEFTQ0lJLWluY29tcGF0aWJsZSBlbmNvZGluZ3MgdG8gYXZvaWQgc2VjdXJpdHkgcmlzazogYnJvd3NlcnMgbm90IHN1cHBvcnRpbmcgdGhlbSBtYXkgaW50ZXJwcmV0IGhhcm1mdWwgY29udGVudCBhcyBIVE1MLiBUaGlzIGhhcHBlbnMgd2l0aCB0aGUgYEpJU19DNjIyNi0xOTgzYCwgYEpJU19YMDIxMi0xOTkwYCwgYEhaLUdCLTIzMTJgLCBgSk9IQUJgLCB0aGUgSVNPLTIwMjIgZmFtaWx5IGFuZCB0aGUgRUJDRElDIGZhbWlseS5cblxuKipOb3RlOioqIEFTQ0lJLWluY29tcGF0aWJsZSBlbmNvZGluZ3MgYXJlIHRob3NlIHRoYXQgZG9uXCd0IG1hcCB0aGUgOC1iaXQgY29kZSBwb2ludHMgYDB4MjBgIHRvIGAweDdFYCB0byB0aGUgYDB4MDAyMGAgdG8gYDB4MDA3RWAgVW5pY29kZSBjb2RlIHBvaW50cylcblxuKiAgIEF1dGhvcnMgKiptdXN0IG5vdCoqIHVzZSBgQ0VTVS04YCwgYFVURi03YCwgYEJPQ1UtMWAgYW5kL29yIGBTQ1NVYCBhcyBbY3Jvc3Mtc2l0ZSBzY3JpcHRpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ3Jvc3Mtc2l0ZV9zY3JpcHRpbmcpIGF0dGFja3Mgd2l0aCB0aGVzZSBlbmNvZGluZ3MgaGF2ZSBiZWVuIGRlbW9uc3RyYXRlZC5cbiogICBBdXRob3JzIHNob3VsZCBub3QgdXNlIGBVVEYtMzJgIGJlY2F1c2Ugbm90IGFsbCBIVE1MNSBlbmNvZGluZyBhbGdvcml0aG1zIGNhbiBkaXN0aW5ndWlzaCBpdCBmcm9tIGBVVEYtMTZgLlxuXG4qKk5vdGVzOioqXG5cbiogICBUaGUgZGVjbGFyZWQgY2hhcmFjdGVyIGVuY29kaW5nIG11c3QgbWF0Y2ggdGhlIG9uZSB0aGUgcGFnZSB3YXMgc2F2ZWQgd2l0aCB0byBhdm9pZCBnYXJibGVkIGNoYXJhY3RlcnMgYW5kIHNlY3VyaXR5IGhvbGVzLlxuKiAgIFRoZSBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQgZGVjbGFyaW5nIHRoZSBlbmNvZGluZyBtdXN0IGJlIGluc2lkZSB0aGUgW2A8aGVhZD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaGVhZCAiVGhlIEhUTUwgPGhlYWQ+IGVsZW1lbnQgcHJvdmlkZXMgZ2VuZXJhbCBpbmZvcm1hdGlvbiAobWV0YWRhdGEpIGFib3V0IHRoZSBkb2N1bWVudCwgaW5jbHVkaW5nIGl0cyB0aXRsZSBhbmQgbGlua3MgdG8gaXRzwqBzY3JpcHRzIGFuZCBzdHlsZSBzaGVldHMuIikgZWxlbWVudCBhbmQgKip3aXRoaW4gdGhlIGZpcnN0IDEwMjQgYnl0ZXMqKiBvZiB0aGUgSFRNTCBhcyBzb21lIGJyb3dzZXJzIG9ubHkgbG9vayBhdCB0aG9zZSBieXRlcyBiZWZvcmUgY2hvb3NpbmcgYW4gZW5jb2RpbmcuXG4qICAgVGhpcyBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQgaXMgb25seSBvbmUgcGFydCBvZiB0aGUgW2FsZ29yaXRobSB0byBkZXRlcm1pbmUgYSBwYWdlXCdzIGNoYXJhY3RlciBzZXRdKGh0dHBzOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjZW5jb2Rpbmctc25pZmZpbmctYWxnb3JpdGhtICJBbGdvcml0aG0gY2hhcnNldCBwYWdlIikuIFRoZSBbYENvbnRlbnQtVHlwZWAgaGVhZGVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1UeXBlKSBhbmQgYW55IFtCeXRlLU9yZGVyIE1hcmtzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0J5dGUtT3JkZXJfTWFyayAiVGhlIGRlZmluaXRpb24gb2YgdGhhdCB0ZXJtIChCeXRlLU9yZGVyIE1hcmtzKSBoYXMgbm90IGJlZW4gd3JpdHRlbiB5ZXQ7IHBsZWFzZSBjb25zaWRlciBjb250cmlidXRpbmcgaXQhIikgb3ZlcnJpZGUgdGhpcyBlbGVtZW50LlxuKiAgIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGRlZmluZSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nLiBJZiBhIHBhZ2VcJ3MgZW5jb2RpbmcgaXMgdW5kZWZpbmVkLCBjcm9zcy1zY3JpcHRpbmcgdGVjaG5pcXVlcyBhcmUgcG9zc2libGUsIHN1Y2ggYXMgdGhlIFtgVVRGLTdgIGZhbGxiYWNrIGNyb3NzLXNjcmlwdGluZyB0ZWNobmlxdWVdKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZG9jdHlwZS1taXJyb3Ivd2lraS9BcnRpY2xlVXRmNykuXG4qICAgVGhlIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgZWxlbWVudCB3aXRoIGEgYGNoYXJzZXRgIGF0dHJpYnV0ZSBpcyBhIHN5bm9ueW0gZm9yIHRoZSBwcmUtSFRNTDUgYDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PV9JQU5BY2hhcnNldF8iPmAsIHdoZXJlIF9gSUFOQWNoYXJzZXRgXyBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGVxdWl2YWxlbnQgW2BjaGFyc2V0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jaGFyc2V0KSBhdHRyaWJ1dGUuIFRoaXMgc3ludGF4IGlzIHN0aWxsIGFsbG93ZWQsIGFsdGhvdWdoIG5vIGxvbmdlciByZWNvbW1lbmRlZC4nfX0se25hbWU6InNjaGVtZSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIHNjaGVtZSBpbiB3aGljaCBtZXRhZGF0YSBpcyBkZXNjcmliZWQuIEEgc2NoZW1lIGlzIGEgY29udGV4dCBsZWFkaW5nIHRvIHRoZSBjb3JyZWN0IGludGVycHJldGF0aW9ucyBvZiB0aGUgW2Bjb250ZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jb250ZW50KSB2YWx1ZSwgbGlrZSBhIGZvcm1hdC5cblxuKipXYXJuaW5nOioqIERvIG5vdCB1c2UgdGhpcyB2YWx1ZSwgYXMgaXQgaXMgb2Jzb2xldGUuIFRoZXJlIGlzIG5vIHJlcGxhY2VtZW50IGFzIHRoZXJlIHdhcyBubyByZWFsIHVzYWdlIGZvciBpdC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEifV19LHtuYW1lOiJzdHlsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHN0eWxlIGVsZW1lbnQgYWxsb3dzIGF1dGhvcnMgdG8gZW1iZWQgc3R5bGUgaW5mb3JtYXRpb24gaW4gdGhlaXIgZG9jdW1lbnRzLiBUaGUgc3R5bGUgZWxlbWVudCBpcyBvbmUgb2Ygc2V2ZXJhbCBpbnB1dHMgdG8gdGhlIHN0eWxpbmcgcHJvY2Vzc2luZyBtb2RlbC4gVGhlIGVsZW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGNvbnRlbnQgZm9yIHRoZSB1c2VyLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJtZWRpYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB3aGljaCBtZWRpYSB0aGUgc3R5bGUgc2hvdWxkIGJlIGFwcGxpZWQgdG8uIEl0cyB2YWx1ZSBpcyBhIFttZWRpYSBxdWVyeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvR3VpZGUvQ1NTL01lZGlhX3F1ZXJpZXMpLCB3aGljaCBkZWZhdWx0cyB0byBgYWxsYCBpZiB0aGUgYXR0cmlidXRlIGlzIG1pc3NpbmcuIn19LHtuYW1lOiJub25jZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBjcnlwdG9ncmFwaGljIG5vbmNlIChudW1iZXIgdXNlZCBvbmNlKSB1c2VkIHRvIHdoaXRlbGlzdCBpbmxpbmUgc3R5bGVzIGluIGEgW3N0eWxlLXNyYyBDb250ZW50LVNlY3VyaXR5LVBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3N0eWxlLXNyYykuIFRoZSBzZXJ2ZXIgbXVzdCBnZW5lcmF0ZSBhIHVuaXF1ZSBub25jZSB2YWx1ZSBlYWNoIHRpbWUgaXQgdHJhbnNtaXRzIGEgcG9saWN5LiBJdCBpcyBjcml0aWNhbCB0byBwcm92aWRlIGEgbm9uY2UgdGhhdCBjYW5ub3QgYmUgZ3Vlc3NlZCBhcyBieXBhc3NpbmcgYSByZXNvdXJjZeKAmXMgcG9saWN5IGlzIG90aGVyd2lzZSB0cml2aWFsLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgc3R5bGluZyBsYW5ndWFnZSBhcyBhIE1JTUUgdHlwZSAoY2hhcnNldCBzaG91bGQgbm90IGJlIHNwZWNpZmllZCkuIFRoaXMgYXR0cmlidXRlIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBgdGV4dC9jc3NgIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQg4oCUIHRoZXJlIGlzIHZlcnkgbGl0dGxlIHJlYXNvbiB0byBpbmNsdWRlIHRoaXMgaW4gbW9kZXJuIHdlYiBkb2N1bWVudHMuIn19LHtuYW1lOiJzY29wZWQiLHZhbHVlU2V0OiJ2In0se25hbWU6InRpdGxlIixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIFthbHRlcm5hdGl2ZSBzdHlsZSBzaGVldF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0FsdGVybmF0aXZlX3N0eWxlX3NoZWV0cykgc2V0cy4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N0eWxlIn1dfSx7bmFtZToiYm9keSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJvZHkgZWxlbWVudCByZXByZXNlbnRzIHRoZSBjb250ZW50IG9mIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToib25hZnRlcnByaW50IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIGFmdGVyIHRoZSB1c2VyIGhhcyBwcmludGVkIHRoZSBkb2N1bWVudC4ifX0se25hbWU6Im9uYmVmb3JlcHJpbnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciByZXF1ZXN0cyBwcmludGluZyBvZiB0aGUgZG9jdW1lbnQuIn19LHtuYW1lOiJvbmJlZm9yZXVubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBhYm91dCB0byBiZSB1bmxvYWRlZC4ifX0se25hbWU6Im9uaGFzaGNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIHBhcnQgKHN0YXJ0aW5nIHdpdGggdGhlIGhhc2ggKGAnIydgKSBjaGFyYWN0ZXIpIG9mIHRoZSBkb2N1bWVudCdzIGN1cnJlbnQgYWRkcmVzcyBoYXMgY2hhbmdlZC4ifX0se25hbWU6Im9ubGFuZ3VhZ2VjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcHJlZmVycmVkIGxhbmd1YWdlcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25tZXNzYWdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGhhcyByZWNlaXZlZCBhIG1lc3NhZ2UuIn19LHtuYW1lOiJvbm9mZmxpbmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBuZXR3b3JrIGNvbW11bmljYXRpb24gaGFzIGZhaWxlZC4ifX0se25hbWU6Im9ub25saW5lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gbmV0d29yayBjb21tdW5pY2F0aW9uIGhhcyBiZWVuIHJlc3RvcmVkLiJ9fSx7bmFtZToib25wYWdlaGlkZSJ9LHtuYW1lOiJvbnBhZ2VzaG93In0se25hbWU6Im9ucG9wc3RhdGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciBoYXMgbmF2aWdhdGVkIHNlc3Npb24gaGlzdG9yeS4ifX0se25hbWU6Im9uc3RvcmFnZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzdG9yYWdlIGFyZWEgaGFzIGNoYW5nZWQuIn19LHtuYW1lOiJvbnVubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBnb2luZyBhd2F5LiJ9fSx7bmFtZToiYWxpbmsiLGRlc2NyaXB0aW9uOidDb2xvciBvZiB0ZXh0IGZvciBoeXBlcmxpbmtzIHdoZW4gc2VsZWN0ZWQuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yICJUaGUgY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGZvcmVncm91bmQgY29sb3IgdmFsdWUgb2YgYW4gZWxlbWVudFwncyB0ZXh0IGFuZCB0ZXh0IGRlY29yYXRpb25zLCBhbmQgc2V0cyB0aGUgY3VycmVudGNvbG9yIHZhbHVlLiIpIHByb3BlcnR5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFtgOmFjdGl2ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy86YWN0aXZlICJUaGUgOmFjdGl2ZSBDU1MgcHNldWRvLWNsYXNzIHJlcHJlc2VudHMgYW4gZWxlbWVudCAoc3VjaCBhcyBhIGJ1dHRvbikgdGhhdCBpcyBiZWluZyBhY3RpdmF0ZWQgYnkgdGhlIHVzZXIuIikgcHNldWRvLWNsYXNzIGluc3RlYWQuXyd9LHtuYW1lOiJiYWNrZ3JvdW5kIixkZXNjcmlwdGlvbjonVVJJIG9mIGEgaW1hZ2UgdG8gdXNlIGFzIGEgYmFja2dyb3VuZC4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgYmFja2dyb3VuZGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9iYWNrZ3JvdW5kICJUaGUgYmFja2dyb3VuZCBzaG9ydGhhbmQgQ1NTIHByb3BlcnR5IHNldHMgYWxsIGJhY2tncm91bmQgc3R5bGUgcHJvcGVydGllcyBhdCBvbmNlLCBzdWNoIGFzIGNvbG9yLCBpbWFnZSwgb3JpZ2luIGFuZCBzaXplLCBvciByZXBlYXQgbWV0aG9kLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJiZ2NvbG9yIixkZXNjcmlwdGlvbjonQmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIGRvY3VtZW50LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BiYWNrZ3JvdW5kLWNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQtY29sb3IgIlRoZSBiYWNrZ3JvdW5kLWNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGVsZW1lbnQuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6ImJvdHRvbW1hcmdpbiIsZGVzY3JpcHRpb246J1RoZSBtYXJnaW4gb2YgdGhlIGJvdHRvbSBvZiB0aGUgYm9keS4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgbWFyZ2luLWJvdHRvbWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4tYm90dG9tICJUaGUgbWFyZ2luLWJvdHRvbSBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIGJvdHRvbSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJsZWZ0bWFyZ2luIixkZXNjcmlwdGlvbjonVGhlIG1hcmdpbiBvZiB0aGUgbGVmdCBvZiB0aGUgYm9keS4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgbWFyZ2luLWxlZnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLWxlZnQgIlRoZSBtYXJnaW4tbGVmdCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIGxlZnQgc2lkZSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJsaW5rIixkZXNjcmlwdGlvbjonQ29sb3Igb2YgdGV4dCBmb3IgdW52aXNpdGVkIGh5cGVydGV4dCBsaW5rcy4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgY29sb3JgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY29sb3IgIlRoZSBjb2xvciBDU1MgcHJvcGVydHkgc2V0cyB0aGUgZm9yZWdyb3VuZCBjb2xvciB2YWx1ZSBvZiBhbiBlbGVtZW50XCdzIHRleHQgYW5kIHRleHQgZGVjb3JhdGlvbnMsIGFuZCBzZXRzIHRoZSBjdXJyZW50Y29sb3IgdmFsdWUuIikgcHJvcGVydHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgW2A6bGlua2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy86bGluayAiVGhlIDpsaW5rIENTUyBwc2V1ZG8tY2xhc3MgcmVwcmVzZW50cyBhbiBlbGVtZW50IHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiB2aXNpdGVkLiBJdCBtYXRjaGVzIGV2ZXJ5IHVudmlzaXRlZCA8YT4sIDxhcmVhPiwgb3IgPGxpbms+IGVsZW1lbnQgdGhhdCBoYXMgYW4gaHJlZiBhdHRyaWJ1dGUuIikgcHNldWRvLWNsYXNzIGluc3RlYWQuXyd9LHtuYW1lOiJvbmJsdXIiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGxvc2VzIGZvY3VzLiJ9LHtuYW1lOiJvbmVycm9yIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBmYWlscyB0byBsb2FkIHByb3Blcmx5LiJ9LHtuYW1lOiJvbmZvY3VzIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCByZWNlaXZlcyBmb2N1cy4ifSx7bmFtZToib25sb2FkIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZy4ifSx7bmFtZToib25yZWRvIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSB1c2VyIGhhcyBtb3ZlZCBmb3J3YXJkIGluIHVuZG8gdHJhbnNhY3Rpb24gaGlzdG9yeS4ifSx7bmFtZToib25yZXNpemUiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGhhcyBiZWVuIHJlc2l6ZWQuIn0se25hbWU6Im9udW5kbyIsZGVzY3JpcHRpb246IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciBoYXMgbW92ZWQgYmFja3dhcmQgaW4gdW5kbyB0cmFuc2FjdGlvbiBoaXN0b3J5LiJ9LHtuYW1lOiJyaWdodG1hcmdpbiIsZGVzY3JpcHRpb246J1RoZSBtYXJnaW4gb2YgdGhlIHJpZ2h0IG9mIHRoZSBib2R5LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BtYXJnaW4tcmlnaHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLXJpZ2h0ICJUaGUgbWFyZ2luLXJpZ2h0IENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJ0ZXh0IixkZXNjcmlwdGlvbjonRm9yZWdyb3VuZCBjb2xvciBvZiB0ZXh0LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2Bjb2xvcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvciAiVGhlIGNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHZhbHVlIG9mIGFuIGVsZW1lbnRcJ3MgdGV4dCBhbmQgdGV4dCBkZWNvcmF0aW9ucywgYW5kIHNldHMgdGhlIGN1cnJlbnRjb2xvciB2YWx1ZS4iKSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkLl8nfSx7bmFtZToidG9wbWFyZ2luIixkZXNjcmlwdGlvbjonVGhlIG1hcmdpbiBvZiB0aGUgdG9wIG9mIHRoZSBib2R5LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BtYXJnaW4tdG9wYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi10b3AgIlRoZSBtYXJnaW4tdG9wIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgdG9wIG9mIGFuIGVsZW1lbnQuIEEgcG9zaXRpdmUgdmFsdWUgcGxhY2VzIGl0IGZhcnRoZXIgZnJvbSBpdHMgbmVpZ2hib3JzLCB3aGlsZSBhIG5lZ2F0aXZlIHZhbHVlIHBsYWNlcyBpdCBjbG9zZXIuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6InZsaW5rIixkZXNjcmlwdGlvbjonQ29sb3Igb2YgdGV4dCBmb3IgdmlzaXRlZCBoeXBlcnRleHQgbGlua3MuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yICJUaGUgY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGZvcmVncm91bmQgY29sb3IgdmFsdWUgb2YgYW4gZWxlbWVudFwncyB0ZXh0IGFuZCB0ZXh0IGRlY29yYXRpb25zLCBhbmQgc2V0cyB0aGUgY3VycmVudGNvbG9yIHZhbHVlLiIpIHByb3BlcnR5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFtgOnZpc2l0ZWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvOnZpc2l0ZWQgIlRoZSA6dmlzaXRlZCBDU1MgcHNldWRvLWNsYXNzIHJlcHJlc2VudHMgbGlua3MgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSB2aXNpdGVkLiBGb3IgcHJpdmFjeSByZWFzb25zLCB0aGUgc3R5bGVzIHRoYXQgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHRoaXMgc2VsZWN0b3IgYXJlIHZlcnkgbGltaXRlZC4iKSBwc2V1ZG8tY2xhc3MgaW5zdGVhZC5fJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9ib2R5In1dfSx7bmFtZToiYXJ0aWNsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFydGljbGUgZWxlbWVudCByZXByZXNlbnRzIGEgY29tcGxldGUsIG9yIHNlbGYtY29udGFpbmVkLCBjb21wb3NpdGlvbiBpbiBhIGRvY3VtZW50LCBwYWdlLCBhcHBsaWNhdGlvbiwgb3Igc2l0ZSBhbmQgdGhhdCBpcywgaW4gcHJpbmNpcGxlLCBpbmRlcGVuZGVudGx5IGRpc3RyaWJ1dGFibGUgb3IgcmV1c2FibGUsIGUuZy4gaW4gc3luZGljYXRpb24uIFRoaXMgY291bGQgYmUgYSBmb3J1bSBwb3N0LCBhIG1hZ2F6aW5lIG9yIG5ld3NwYXBlciBhcnRpY2xlLCBhIGJsb2cgZW50cnksIGEgdXNlci1zdWJtaXR0ZWQgY29tbWVudCwgYW4gaW50ZXJhY3RpdmUgd2lkZ2V0IG9yIGdhZGdldCwgb3IgYW55IG90aGVyIGluZGVwZW5kZW50IGl0ZW0gb2YgY29udGVudC4gRWFjaCBhcnRpY2xlIHNob3VsZCBiZSBpZGVudGlmaWVkLCB0eXBpY2FsbHkgYnkgaW5jbHVkaW5nIGEgaGVhZGluZyAoaDHigJNoNiBlbGVtZW50KSBhcyBhIGNoaWxkIG9mIHRoZSBhcnRpY2xlIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYXJ0aWNsZSJ9XX0se25hbWU6InNlY3Rpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzZWN0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyBhIGdlbmVyaWMgc2VjdGlvbiBvZiBhIGRvY3VtZW50IG9yIGFwcGxpY2F0aW9uLiBBIHNlY3Rpb24sIGluIHRoaXMgY29udGV4dCwgaXMgYSB0aGVtYXRpYyBncm91cGluZyBvZiBjb250ZW50LiBFYWNoIHNlY3Rpb24gc2hvdWxkIGJlIGlkZW50aWZpZWQsIHR5cGljYWxseSBieSBpbmNsdWRpbmcgYSBoZWFkaW5nICggaDEtIGg2IGVsZW1lbnQpIGFzIGEgY2hpbGQgb2YgdGhlIHNlY3Rpb24gZWxlbWVudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWN0aW9uIn1dfSx7bmFtZToibmF2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmF2IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gb2YgYSBwYWdlIHRoYXQgbGlua3MgdG8gb3RoZXIgcGFnZXMgb3IgdG8gcGFydHMgd2l0aGluIHRoZSBwYWdlOiBhIHNlY3Rpb24gd2l0aCBuYXZpZ2F0aW9uIGxpbmtzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L25hdiJ9XX0se25hbWU6ImFzaWRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYXNpZGUgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBvZiBhIHBhZ2UgdGhhdCBjb25zaXN0cyBvZiBjb250ZW50IHRoYXQgaXMgdGFuZ2VudGlhbGx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRlbnQgYXJvdW5kIHRoZSBhc2lkZSBlbGVtZW50LCBhbmQgd2hpY2ggY291bGQgYmUgY29uc2lkZXJlZCBzZXBhcmF0ZSBmcm9tIHRoYXQgY29udGVudC4gU3VjaCBzZWN0aW9ucyBhcmUgb2Z0ZW4gcmVwcmVzZW50ZWQgYXMgc2lkZWJhcnMgaW4gcHJpbnRlZCB0eXBvZ3JhcGh5LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FzaWRlIn1dfSx7bmFtZToiaDEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoMSBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6ImgyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDIgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoMyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGgzIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaDQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoNCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6Img1IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDUgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoNiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGg2IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaGVhZGVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaGVhZGVyIGVsZW1lbnQgcmVwcmVzZW50cyBpbnRyb2R1Y3RvcnkgY29udGVudCBmb3IgaXRzIG5lYXJlc3QgYW5jZXN0b3Igc2VjdGlvbmluZyBjb250ZW50IG9yIHNlY3Rpb25pbmcgcm9vdCBlbGVtZW50LiBBIGhlYWRlciB0eXBpY2FsbHkgY29udGFpbnMgYSBncm91cCBvZiBpbnRyb2R1Y3Rvcnkgb3IgbmF2aWdhdGlvbmFsIGFpZHMuIFdoZW4gdGhlIG5lYXJlc3QgYW5jZXN0b3Igc2VjdGlvbmluZyBjb250ZW50IG9yIHNlY3Rpb25pbmcgcm9vdCBlbGVtZW50IGlzIHRoZSBib2R5IGVsZW1lbnQsIHRoZW4gaXQgYXBwbGllcyB0byB0aGUgd2hvbGUgcGFnZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9oZWFkZXIifV19LHtuYW1lOiJmb290ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmb290ZXIgZWxlbWVudCByZXByZXNlbnRzIGEgZm9vdGVyIGZvciBpdHMgbmVhcmVzdCBhbmNlc3RvciBzZWN0aW9uaW5nIGNvbnRlbnQgb3Igc2VjdGlvbmluZyByb290IGVsZW1lbnQuIEEgZm9vdGVyIHR5cGljYWxseSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgc2VjdGlvbiBzdWNoIGFzIHdobyB3cm90ZSBpdCwgbGlua3MgdG8gcmVsYXRlZCBkb2N1bWVudHMsIGNvcHlyaWdodCBkYXRhLCBhbmQgdGhlIGxpa2UuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9vdGVyIn1dfSx7bmFtZToiYWRkcmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFkZHJlc3MgZWxlbWVudCByZXByZXNlbnRzIHRoZSBjb250YWN0IGluZm9ybWF0aW9uIGZvciBpdHMgbmVhcmVzdCBhcnRpY2xlIG9yIGJvZHkgZWxlbWVudCBhbmNlc3Rvci4gSWYgdGhhdCBpcyB0aGUgYm9keSBlbGVtZW50LCB0aGVuIHRoZSBjb250YWN0IGluZm9ybWF0aW9uIGFwcGxpZXMgdG8gdGhlIGRvY3VtZW50IGFzIGEgd2hvbGUuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYWRkcmVzcyJ9XX0se25hbWU6InAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwIGVsZW1lbnQgcmVwcmVzZW50cyBhIHBhcmFncmFwaC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9wIn1dfSx7bmFtZToiaHIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBociBlbGVtZW50IHJlcHJlc2VudHMgYSBwYXJhZ3JhcGgtbGV2ZWwgdGhlbWF0aWMgYnJlYWssIGUuZy4gYSBzY2VuZSBjaGFuZ2UgaW4gYSBzdG9yeSwgb3IgYSB0cmFuc2l0aW9uIHRvIGFub3RoZXIgdG9waWMgd2l0aGluIGEgc2VjdGlvbiBvZiBhIHJlZmVyZW5jZSBib29rLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246IlNldHMgdGhlIGFsaWdubWVudCBvZiB0aGUgcnVsZSBvbiB0aGUgcGFnZS4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBgbGVmdGAuIn0se25hbWU6ImNvbG9yIixkZXNjcmlwdGlvbjoiU2V0cyB0aGUgY29sb3Igb2YgdGhlIHJ1bGUgdGhyb3VnaCBjb2xvciBuYW1lIG9yIGhleGFkZWNpbWFsIHZhbHVlLiJ9LHtuYW1lOiJub3NoYWRlIixkZXNjcmlwdGlvbjoiU2V0cyB0aGUgcnVsZSB0byBoYXZlIG5vIHNoYWRpbmcuIn0se25hbWU6InNpemUiLGRlc2NyaXB0aW9uOiJTZXRzIHRoZSBoZWlnaHQsIGluIHBpeGVscywgb2YgdGhlIHJ1bGUuIn0se25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjoiU2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBydWxlIG9uIHRoZSBwYWdlIHRocm91Z2ggYSBwaXhlbCBvciBwZXJjZW50YWdlIHZhbHVlLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaHIifV19LHtuYW1lOiJwcmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwcmUgZWxlbWVudCByZXByZXNlbnRzIGEgYmxvY2sgb2YgcHJlZm9ybWF0dGVkIHRleHQsIGluIHdoaWNoIHN0cnVjdHVyZSBpcyByZXByZXNlbnRlZCBieSB0eXBvZ3JhcGhpYyBjb252ZW50aW9ucyByYXRoZXIgdGhhbiBieSBlbGVtZW50cy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29scyIsZGVzY3JpcHRpb246J0NvbnRhaW5zIHRoZSBfcHJlZmVycmVkXyBjb3VudCBvZiBjaGFyYWN0ZXJzIHRoYXQgYSBsaW5lIHNob3VsZCBoYXZlLiBJdCB3YXMgYSBub24tc3RhbmRhcmQgc3lub255bSBvZiBbYHdpZHRoYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3ByZSNhdHRyLXdpZHRoKS4gVG8gYWNoaWV2ZSBzdWNoIGFuIGVmZmVjdCwgdXNlIENTUyBbYHdpZHRoYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3dpZHRoICJUaGUgd2lkdGggQ1NTIHByb3BlcnR5IHNldHMgYW4gZWxlbWVudFwncyB3aWR0aC4gQnkgZGVmYXVsdCBpdCBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgY29udGVudCBhcmVhLCBidXQgaWYgYm94LXNpemluZyBpcyBzZXQgdG8gYm9yZGVyLWJveCwgaXQgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGJvcmRlciBhcmVhLiIpIGluc3RlYWQuJ30se25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjonQ29udGFpbnMgdGhlIF9wcmVmZXJyZWRfIGNvdW50IG9mIGNoYXJhY3RlcnMgdGhhdCBhIGxpbmUgc2hvdWxkIGhhdmUuIFRob3VnaCB0ZWNobmljYWxseSBzdGlsbCBpbXBsZW1lbnRlZCwgdGhpcyBhdHRyaWJ1dGUgaGFzIG5vIHZpc3VhbCBlZmZlY3Q7IHRvIGFjaGlldmUgc3VjaCBhbiBlZmZlY3QsIHVzZSBDU1MgW2B3aWR0aGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy93aWR0aCAiVGhlIHdpZHRoIENTUyBwcm9wZXJ0eSBzZXRzIGFuIGVsZW1lbnRcJ3Mgd2lkdGguIEJ5IGRlZmF1bHQgaXQgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbnRlbnQgYXJlYSwgYnV0IGlmIGJveC1zaXppbmcgaXMgc2V0IHRvIGJvcmRlci1ib3gsIGl0IHNldHMgdGhlIHdpZHRoIG9mIHRoZSBib3JkZXIgYXJlYS4iKSBpbnN0ZWFkLid9LHtuYW1lOiJ3cmFwIixkZXNjcmlwdGlvbjonSXMgYSBfaGludF8gaW5kaWNhdGluZyBob3cgdGhlIG92ZXJmbG93IG11c3QgaGFwcGVuLiBJbiBtb2Rlcm4gYnJvd3NlciB0aGlzIGhpbnQgaXMgaWdub3JlZCBhbmQgbm8gdmlzdWFsIGVmZmVjdCByZXN1bHRzIGluIGl0cyBwcmVzZW50OyB0byBhY2hpZXZlIHN1Y2ggYW4gZWZmZWN0LCB1c2UgQ1NTIFtgd2hpdGUtc3BhY2VgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1Mvd2hpdGUtc3BhY2UgIlRoZSB3aGl0ZS1zcGFjZSBDU1MgcHJvcGVydHkgc2V0cyBob3cgd2hpdGUgc3BhY2UgaW5zaWRlIGFuIGVsZW1lbnQgaXMgaGFuZGxlZC4iKSBpbnN0ZWFkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcHJlIn1dfSx7bmFtZToiYmxvY2txdW90ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJsb2NrcXVvdGUgZWxlbWVudCByZXByZXNlbnRzIGNvbnRlbnQgdGhhdCBpcyBxdW90ZWQgZnJvbSBhbm90aGVyIHNvdXJjZSwgb3B0aW9uYWxseSB3aXRoIGEgY2l0YXRpb24gd2hpY2ggbXVzdCBiZSB3aXRoaW4gYSBmb290ZXIgb3IgY2l0ZSBlbGVtZW50LCBhbmQgb3B0aW9uYWxseSB3aXRoIGluLWxpbmUgY2hhbmdlcyBzdWNoIGFzIGFubm90YXRpb25zIGFuZCBhYmJyZXZpYXRpb25zLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIFVSTCB0aGF0IGRlc2lnbmF0ZXMgYSBzb3VyY2UgZG9jdW1lbnQgb3IgbWVzc2FnZSBmb3IgdGhlIGluZm9ybWF0aW9uIHF1b3RlZC4gVGhpcyBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgdG8gcG9pbnQgdG8gaW5mb3JtYXRpb24gZXhwbGFpbmluZyB0aGUgY29udGV4dCBvciB0aGUgcmVmZXJlbmNlIGZvciB0aGUgcXVvdGUuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYmxvY2txdW90ZSJ9XX0se25hbWU6Im9sIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgb2wgZWxlbWVudCByZXByZXNlbnRzIGEgbGlzdCBvZiBpdGVtcywgd2hlcmUgdGhlIGl0ZW1zIGhhdmUgYmVlbiBpbnRlbnRpb25hbGx5IG9yZGVyZWQsIHN1Y2ggdGhhdCBjaGFuZ2luZyB0aGUgb3JkZXIgd291bGQgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToicmV2ZXJzZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IHRoZSBpdGVtcyBvZiB0aGUgbGlzdCBhcmUgc3BlY2lmaWVkIGluIHJldmVyc2VkIG9yZGVyLiJ9fSx7bmFtZToic3RhcnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgaW50ZWdlciBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBzdGFydCB2YWx1ZSBmb3IgbnVtYmVyaW5nIHRoZSBpbmRpdmlkdWFsIGxpc3QgaXRlbXMuIEFsdGhvdWdoIHRoZSBvcmRlcmluZyB0eXBlIG9mIGxpc3QgZWxlbWVudHMgbWlnaHQgYmUgUm9tYW4gbnVtZXJhbHMsIHN1Y2ggYXMgWFhYSSwgb3IgbGV0dGVycywgdGhlIHZhbHVlIG9mIHN0YXJ0IGlzIGFsd2F5cyByZXByZXNlbnRlZCBhcyBhIG51bWJlci4gVG8gc3RhcnQgbnVtYmVyaW5nIGVsZW1lbnRzIGZyb20gdGhlIGxldHRlciAiQyIsIHVzZSBgPG9sIHN0YXJ0PSIzIj5gLlxuXG4qKk5vdGUqKjogVGhpcyBhdHRyaWJ1dGUgd2FzIGRlcHJlY2F0ZWQgaW4gSFRNTDQsIGJ1dCByZWludHJvZHVjZWQgaW4gSFRNTDUuJ319LHtuYW1lOiJ0eXBlIix2YWx1ZVNldDoibHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgbnVtYmVyaW5nIHR5cGU6XG5cbiogICBgJ2EnYCBpbmRpY2F0ZXMgbG93ZXJjYXNlIGxldHRlcnMsXG4qICAgYCdBJ2AgaW5kaWNhdGVzIHVwcGVyY2FzZSBsZXR0ZXJzLFxuKiAgIGAnaSdgIGluZGljYXRlcyBsb3dlcmNhc2UgUm9tYW4gbnVtZXJhbHMsXG4qICAgYCdJJ2AgaW5kaWNhdGVzIHVwcGVyY2FzZSBSb21hbiBudW1lcmFscyxcbiogICBhbmQgYCcxJ2AgaW5kaWNhdGVzIG51bWJlcnMgKGRlZmF1bHQpLlxuXG5UaGUgdHlwZSBzZXQgaXMgdXNlZCBmb3IgdGhlIGVudGlyZSBsaXN0IHVubGVzcyBhIGRpZmZlcmVudCBbYHR5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGkjYXR0ci10eXBlKSBhdHRyaWJ1dGUgaXMgdXNlZCB3aXRoaW4gYW4gZW5jbG9zZWQgW2A8bGk+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpIFwiVGhlIEhUTUwgPGxpPiBlbGVtZW50IGlzIHVzZWQgdG8gcmVwcmVzZW50IGFuIGl0ZW0gaW4gYSBsaXN0LiBJdCBtdXN0IGJlIGNvbnRhaW5lZCBpbiBhIHBhcmVudCBlbGVtZW50OiBhbiBvcmRlcmVkIGxpc3QgKDxvbD4pLCBhbiB1bm9yZGVyZWQgbGlzdCAoPHVsPiksIG9yIGEgbWVudSAoPG1lbnU+KS4gSW4gbWVudXMgYW5kIHVub3JkZXJlZCBsaXN0cywgbGlzdCBpdGVtcyBhcmUgdXN1YWxseSBkaXNwbGF5ZWQgdXNpbmcgYnVsbGV0IHBvaW50cy4gSW4gb3JkZXJlZCBsaXN0cywgdGhleSBhcmUgdXN1YWxseSBkaXNwbGF5ZWQgd2l0aCBhbiBhc2NlbmRpbmcgY291bnRlciBvbiB0aGUgbGVmdCwgc3VjaCBhcyBhIG51bWJlciBvciBsZXR0ZXIuXCIpIGVsZW1lbnQuXG5cbioqTm90ZToqKiBUaGlzIGF0dHJpYnV0ZSB3YXMgZGVwcmVjYXRlZCBpbiBIVE1MNCwgYnV0IHJlaW50cm9kdWNlZCBpbiBIVE1MNS5cblxuVW5sZXNzIHRoZSB2YWx1ZSBvZiB0aGUgbGlzdCBudW1iZXIgbWF0dGVycyAoZS5nLiBpbiBsZWdhbCBvciB0ZWNobmljYWwgZG9jdW1lbnRzIHdoZXJlIGl0ZW1zIGFyZSB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZWlyIG51bWJlci9sZXR0ZXIpLCB0aGUgQ1NTIFtgbGlzdC1zdHlsZS10eXBlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xpc3Qtc3R5bGUtdHlwZSBcIlRoZSBsaXN0LXN0eWxlLXR5cGUgQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmtlciAoc3VjaCBhcyBhIGRpc2MsIGNoYXJhY3Rlciwgb3IgY3VzdG9tIGNvdW50ZXIgc3R5bGUpIG9mIGEgbGlzdCBpdGVtIGVsZW1lbnQuXCIpIHByb3BlcnR5IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuIn19LHtuYW1lOiJjb21wYWN0IixkZXNjcmlwdGlvbjonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBoaW50cyB0aGF0IHRoZSBsaXN0IHNob3VsZCBiZSByZW5kZXJlZCBpbiBhIGNvbXBhY3Qgc3R5bGUuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGF0dHJpYnV0ZSBkZXBlbmRzIG9uIHRoZSB1c2VyIGFnZW50IGFuZCBpdCBkb2VzblwndCB3b3JrIGluIGFsbCBicm93c2Vycy5cblxuKipXYXJuaW5nOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUsIGFzIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQ6IHRoZSBbYDxvbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2wgIlRoZSBIVE1MIDxvbD4gZWxlbWVudCByZXByZXNlbnRzIGFuIG9yZGVyZWQgbGlzdCBvZiBpdGVtcywgdHlwaWNhbGx5IHJlbmRlcmVkIGFzIGEgbnVtYmVyZWQgbGlzdC4iKSBlbGVtZW50IHNob3VsZCBiZSBzdHlsZWQgdXNpbmcgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpLiBUbyBnaXZlIGFuIGVmZmVjdCBzaW1pbGFyIHRvIHRoZSBgY29tcGFjdGAgYXR0cmlidXRlLCB0aGUgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpIHByb3BlcnR5IFtgbGluZS1oZWlnaHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbGluZS1oZWlnaHQgIlRoZSBsaW5lLWhlaWdodCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgYW1vdW50IG9mIHNwYWNlIHVzZWQgZm9yIGxpbmVzLCBzdWNoIGFzIGluIHRleHQuIE9uIGJsb2NrLWxldmVsIGVsZW1lbnRzLCBpdCBzcGVjaWZpZXMgdGhlIG1pbmltdW0gaGVpZ2h0IG9mIGxpbmUgYm94ZXMgd2l0aGluIHRoZSBlbGVtZW50LiBPbiBub24tcmVwbGFjZWQgaW5saW5lIGVsZW1lbnRzLCBpdCBzcGVjaWZpZXMgdGhlIGhlaWdodCB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIGxpbmUgYm94IGhlaWdodC4iKSBjYW4gYmUgdXNlZCB3aXRoIGEgdmFsdWUgb2YgYDgwJWAuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vbCJ9XX0se25hbWU6InVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdWwgZWxlbWVudCByZXByZXNlbnRzIGEgbGlzdCBvZiBpdGVtcywgd2hlcmUgdGhlIG9yZGVyIG9mIHRoZSBpdGVtcyBpcyBub3QgaW1wb3J0YW50IOKAlCB0aGF0IGlzLCB3aGVyZSBjaGFuZ2luZyB0aGUgb3JkZXIgd291bGQgbm90IG1hdGVyaWFsbHkgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29tcGFjdCIsZGVzY3JpcHRpb246J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaGludHMgdGhhdCB0aGUgbGlzdCBzaG91bGQgYmUgcmVuZGVyZWQgaW4gYSBjb21wYWN0IHN0eWxlLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBhdHRyaWJ1dGUgZGVwZW5kcyBvbiB0aGUgdXNlciBhZ2VudCBhbmQgaXQgZG9lc25cJ3Qgd29yayBpbiBhbGwgYnJvd3NlcnMuXG5cbioqVXNhZ2Ugbm90ZTrCoCoqRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSwgYXMgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZDogdGhlIFtgPHVsPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC91bCAiVGhlIEhUTUwgPHVsPiBlbGVtZW50IHJlcHJlc2VudHMgYW4gdW5vcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIGJ1bGxldGVkIGxpc3QuIikgZWxlbWVudCBzaG91bGQgYmUgc3R5bGVkIHVzaW5nIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKS4gVG8gZ2l2ZSBhIHNpbWlsYXIgZWZmZWN0IGFzIHRoZSBgY29tcGFjdGAgYXR0cmlidXRlLCB0aGUgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpIHByb3BlcnR5IFtsaW5lLWhlaWdodF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvbGluZS1oZWlnaHQpIGNhbiBiZSB1c2VkIHdpdGggYSB2YWx1ZSBvZiBgODAlYC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3VsIn1dfSx7bmFtZToibGkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBsaSBlbGVtZW50IHJlcHJlc2VudHMgYSBsaXN0IGl0ZW0uIElmIGl0cyBwYXJlbnQgZWxlbWVudCBpcyBhbiBvbCwgdWwsIG9yIG1lbnUgZWxlbWVudCwgdGhlbiB0aGUgZWxlbWVudCBpcyBhbiBpdGVtIG9mIHRoZSBwYXJlbnQgZWxlbWVudCdzIGxpc3QsIGFzIGRlZmluZWQgZm9yIHRob3NlIGVsZW1lbnRzLiBPdGhlcndpc2UsIHRoZSBsaXN0IGl0ZW0gaGFzIG5vIGRlZmluZWQgbGlzdC1yZWxhdGVkIHJlbGF0aW9uc2hpcCB0byBhbnkgb3RoZXIgbGkgZWxlbWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgaW50ZWdlciBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBjdXJyZW50IG9yZGluYWwgdmFsdWUgb2YgdGhlIGxpc3QgaXRlbSBhcyBkZWZpbmVkIGJ5IHRoZSBbYDxvbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2wgIlRoZSBIVE1MIDxvbD4gZWxlbWVudCByZXByZXNlbnRzIGFuIG9yZGVyZWQgbGlzdCBvZiBpdGVtcywgdHlwaWNhbGx5IHJlbmRlcmVkIGFzIGEgbnVtYmVyZWQgbGlzdC4iKSBlbGVtZW50LiBUaGUgb25seSBhbGxvd2VkIHZhbHVlIGZvciB0aGlzIGF0dHJpYnV0ZSBpcyBhIG51bWJlciwgZXZlbiBpZiB0aGUgbGlzdCBpcyBkaXNwbGF5ZWQgd2l0aCBSb21hbiBudW1lcmFscyBvciBsZXR0ZXJzLiBMaXN0IGl0ZW1zIHRoYXQgZm9sbG93IHRoaXMgb25lIGNvbnRpbnVlIG51bWJlcmluZyBmcm9tIHRoZSB2YWx1ZSBzZXQuIFRoZSAqKnZhbHVlKiogYXR0cmlidXRlIGhhcyBubyBtZWFuaW5nIGZvciB1bm9yZGVyZWQgbGlzdHMgKFtgPHVsPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC91bCAiVGhlIEhUTUwgPHVsPiBlbGVtZW50IHJlcHJlc2VudHMgYW4gdW5vcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIGJ1bGxldGVkIGxpc3QuIikpIG9yIGZvciBtZW51cyAoW2A8bWVudT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWVudSAiVGhlIEhUTUwgPG1lbnU+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIGNvbW1hbmRzIHRoYXQgYSB1c2VyIGNhbiBwZXJmb3JtIG9yIGFjdGl2YXRlLiBUaGlzIGluY2x1ZGVzIGJvdGggbGlzdCBtZW51cywgd2hpY2ggbWlnaHQgYXBwZWFyIGFjcm9zcyB0aGUgdG9wIG9mIGEgc2NyZWVuLCBhcyB3ZWxsIGFzIGNvbnRleHQgbWVudXMsIHN1Y2ggYXMgdGhvc2UgdGhhdCBtaWdodCBhcHBlYXIgdW5kZXJuZWF0aCBhIGJ1dHRvbiBhZnRlciBpdCBoYXMgYmVlbiBjbGlja2VkLiIpKS5cblxuKipOb3RlKio6IFRoaXMgYXR0cmlidXRlIHdhcyBkZXByZWNhdGVkIGluIEhUTUw0LCBidXQgcmVpbnRyb2R1Y2VkIGluIEhUTUw1LlxuXG4qKk5vdGU6KiogUHJpb3IgdG8gR2Vja2/CoDkuMCwgbmVnYXRpdmUgdmFsdWVzIHdlcmUgaW5jb3JyZWN0bHkgY29udmVydGVkIHRvIDAuIFN0YXJ0aW5nIGluIEdlY2tvwqA5LjAgYWxsIGludGVnZXIgdmFsdWVzIGFyZSBjb3JyZWN0bHkgcGFyc2VkLid9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246J1RoaXMgY2hhcmFjdGVyIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIG51bWJlcmluZyB0eXBlOlxuXG4qICAgYGFgOiBsb3dlcmNhc2UgbGV0dGVyc1xuKiAgIGBBYDogdXBwZXJjYXNlIGxldHRlcnNcbiogICBgaWA6IGxvd2VyY2FzZSBSb21hbiBudW1lcmFsc1xuKiAgIGBJYDogdXBwZXJjYXNlIFJvbWFuIG51bWVyYWxzXG4qICAgYDFgOiBudW1iZXJzXG5cblRoaXMgdHlwZSBvdmVycmlkZXMgdGhlIG9uZSB1c2VkIGJ5IGl0cyBwYXJlbnQgW2A8b2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29sICJUaGUgSFRNTCA8b2w+IGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIG51bWJlcmVkIGxpc3QuIikgZWxlbWVudCwgaWYgYW55LlxuXG4qKlVzYWdlIG5vdGU6KiogVGhpcyBhdHRyaWJ1dGUgaGFzIGJlZW4gZGVwcmVjYXRlZDogdXNlIHRoZSBDU1MgW2BsaXN0LXN0eWxlLXR5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbGlzdC1zdHlsZS10eXBlICJUaGUgbGlzdC1zdHlsZS10eXBlIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJrZXIgKHN1Y2ggYXMgYSBkaXNjLCBjaGFyYWN0ZXIsIG9yIGN1c3RvbSBjb3VudGVyIHN0eWxlKSBvZiBhIGxpc3QgaXRlbSBlbGVtZW50LiIpIHByb3BlcnR5IGluc3RlYWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saSJ9XX0se25hbWU6ImRsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGwgZWxlbWVudCByZXByZXNlbnRzIGFuIGFzc29jaWF0aW9uIGxpc3QgY29uc2lzdGluZyBvZiB6ZXJvIG9yIG1vcmUgbmFtZS12YWx1ZSBncm91cHMgKGEgZGVzY3JpcHRpb24gbGlzdCkuIEEgbmFtZS12YWx1ZSBncm91cCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBuYW1lcyAoZHQgZWxlbWVudHMpIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHZhbHVlcyAoZGQgZWxlbWVudHMpLCBpZ25vcmluZyBhbnkgbm9kZXMgb3RoZXIgdGhhbiBkdCBhbmQgZGQgZWxlbWVudHMuIFdpdGhpbiBhIHNpbmdsZSBkbCBlbGVtZW50LCB0aGVyZSBzaG91bGQgbm90IGJlIG1vcmUgdGhhbiBvbmUgZHQgZWxlbWVudCBmb3IgZWFjaCBuYW1lLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RsIn1dfSx7bmFtZToiZHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkdCBlbGVtZW50IHJlcHJlc2VudHMgdGhlIHRlcm0sIG9yIG5hbWUsIHBhcnQgb2YgYSB0ZXJtLWRlc2NyaXB0aW9uIGdyb3VwIGluIGEgZGVzY3JpcHRpb24gbGlzdCAoZGwgZWxlbWVudCkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZHQifV19LHtuYW1lOiJkZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRkIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgZGVzY3JpcHRpb24sIGRlZmluaXRpb24sIG9yIHZhbHVlLCBwYXJ0IG9mIGEgdGVybS1kZXNjcmlwdGlvbiBncm91cCBpbiBhIGRlc2NyaXB0aW9uIGxpc3QgKGRsIGVsZW1lbnQpLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJub3dyYXAiLGRlc2NyaXB0aW9uOiJJZiB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvIGB5ZXNgLCB0aGUgZGVmaW5pdGlvbiB0ZXh0IHdpbGwgbm90IHdyYXAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBub2AuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZCJ9XX0se25hbWU6ImZpZ3VyZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZpZ3VyZSBlbGVtZW50IHJlcHJlc2VudHMgc29tZSBmbG93IGNvbnRlbnQsIG9wdGlvbmFsbHkgd2l0aCBhIGNhcHRpb24sIHRoYXQgaXMgc2VsZi1jb250YWluZWQgKGxpa2UgYSBjb21wbGV0ZSBzZW50ZW5jZSkgYW5kIGlzIHR5cGljYWxseSByZWZlcmVuY2VkIGFzIGEgc2luZ2xlIHVuaXQgZnJvbSB0aGUgbWFpbiBmbG93IG9mIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9maWd1cmUifV19LHtuYW1lOiJmaWdjYXB0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZmlnY2FwdGlvbiBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIG9yIGxlZ2VuZCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWdjYXB0aW9uIGVsZW1lbnQncyBwYXJlbnQgZmlndXJlIGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9maWdjYXB0aW9uIn1dfSx7bmFtZToibWFpbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1haW4gZWxlbWVudCByZXByZXNlbnRzIHRoZSBtYWluIGNvbnRlbnQgb2YgdGhlIGJvZHkgb2YgYSBkb2N1bWVudCBvciBhcHBsaWNhdGlvbi4gVGhlIG1haW4gY29udGVudCBhcmVhIGNvbnNpc3RzIG9mIGNvbnRlbnQgdGhhdCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIG9yIGV4cGFuZHMgdXBvbiB0aGUgY2VudHJhbCB0b3BpYyBvZiBhIGRvY3VtZW50IG9yIGNlbnRyYWwgZnVuY3Rpb25hbGl0eSBvZiBhbiBhcHBsaWNhdGlvbi4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tYWluIn1dfSx7bmFtZToiZGl2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGl2IGVsZW1lbnQgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhdCBhbGwuIEl0IHJlcHJlc2VudHMgaXRzIGNoaWxkcmVuLiBJdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBjbGFzcywgbGFuZywgYW5kIHRpdGxlIGF0dHJpYnV0ZXMgdG8gbWFyayB1cCBzZW1hbnRpY3MgY29tbW9uIHRvIGEgZ3JvdXAgb2YgY29uc2VjdXRpdmUgZWxlbWVudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGl2In1dfSx7bmFtZToiYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGEgZWxlbWVudCBoYXMgYW4gaHJlZiBhdHRyaWJ1dGUsIHRoZW4gaXQgcmVwcmVzZW50cyBhIGh5cGVybGluayAoYSBoeXBlcnRleHQgYW5jaG9yKSBsYWJlbGVkIGJ5IGl0cyBjb250ZW50cy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiaHJlZiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29udGFpbnMgYSBVUkwgb3IgYSBVUkwgZnJhZ21lbnQgdGhhdCB0aGUgaHlwZXJsaW5rIHBvaW50cyB0by4ifX0se25hbWU6InRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgdGhlIGxpbmtlZCBVUkwuIEl0IGlzIGEgbmFtZSBvZiwgb3Iga2V5d29yZCBmb3IsIGEgX2Jyb3dzaW5nIGNvbnRleHRfOiBhIHRhYiwgd2luZG93LCBvciBgPGlmcmFtZT5gLiBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGhhdmUgc3BlY2lhbCBtZWFuaW5nczpcblxuKiAgIGBfc2VsZmA6IExvYWQgdGhlIFVSTCBpbnRvIHRoZSBzYW1lIGJyb3dzaW5nIGNvbnRleHQgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuKiAgIGBfYmxhbmtgOiBMb2FkIHRoZSBVUkwgaW50byBhIG5ldyBicm93c2luZyBjb250ZXh0LiBUaGlzIGlzIHVzdWFsbHkgYSB0YWIsIGJ1dCB1c2VycyBjYW4gY29uZmlndXJlIGJyb3dzZXJzIHRvIHVzZSBuZXcgd2luZG93cyBpbnN0ZWFkLlxuKiAgIGBfcGFyZW50YDogTG9hZCB0aGUgVVJMIGludG8gdGhlIHBhcmVudCBicm93c2luZyBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9uZS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgYF90b3BgOiBMb2FkIHRoZSBVUkwgaW50byB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKHRoYXQgaXMsIHRoZSAiaGlnaGVzdCIgYnJvd3NpbmcgY29udGV4dCB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50IG9uZSwgYW5kIGhhcyBubyBwYXJlbnQpLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cblxuKipOb3RlOioqIFdoZW4gdXNpbmcgYHRhcmdldGAsIGNvbnNpZGVyIGFkZGluZyBgcmVsPSJub3JlZmVycmVyImAgdG8gYXZvaWQgZXhwbG9pdGF0aW9uIG9mIHRoZSBgd2luZG93Lm9wZW5lcmAgQVBJLlxuXG4qKk5vdGU6KiogTGlua2luZyB0byBhbm90aGVyIHBhZ2UgdXNpbmcgYHRhcmdldD0iX2JsYW5rImAgd2lsbCBydW4gdGhlIG5ldyBwYWdlIG9uIHRoZSBzYW1lIHByb2Nlc3MgYXMgeW91ciBwYWdlLiBJZiB0aGUgbmV3IHBhZ2UgaXMgZXhlY3V0aW5nIGV4cGVuc2l2ZSBKUywgeW91ciBwYWdlXCdzIHBlcmZvcm1hbmNlIG1heSBzdWZmZXIuIFRvIGF2b2lkIHRoaXMgdXNlIGByZWw9Im5vb3BlbmVyImAuJ319LHtuYW1lOiJkb3dubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgaW5zdHJ1Y3RzIGJyb3dzZXJzIHRvIGRvd25sb2FkIGEgVVJMIGluc3RlYWQgb2YgbmF2aWdhdGluZyB0byBpdCwgc28gdGhlIHVzZXIgd2lsbCBiZSBwcm9tcHRlZCB0byBzYXZlIGl0IGFzIGEgbG9jYWwgZmlsZS4gSWYgdGhlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSwgaXQgaXMgdXNlZCBhcyB0aGUgcHJlLWZpbGxlZCBmaWxlIG5hbWUgaW4gdGhlIFNhdmUgcHJvbXB0ICh0aGUgdXNlciBjYW4gc3RpbGwgY2hhbmdlIHRoZSBmaWxlIG5hbWUgaWYgdGhleSB3YW50KS4gVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIHZhbHVlcywgdGhvdWdoIGAvYCBhbmQgYFxcYCBhcmUgY29udmVydGVkIHRvIHVuZGVyc2NvcmVzLiBNb3N0IGZpbGUgc3lzdGVtcyBsaW1pdCBzb21lIHB1bmN0dWF0aW9uIGluIGZpbGUgbmFtZXMsIGFuZCBicm93c2VycyB3aWxsIGFkanVzdCB0aGUgc3VnZ2VzdGVkIG5hbWUgYWNjb3JkaW5nbHkuXG5cbioqTm90ZXM6KipcblxuKiAgIFRoaXMgYXR0cmlidXRlIG9ubHkgd29ya3MgZm9yIFtzYW1lLW9yaWdpbiBVUkxzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TYW1lLW9yaWdpbl9wb2xpY3kpLlxuKiAgIEFsdGhvdWdoIEhUVFAocykgVVJMcyBuZWVkIHRvIGJlIGluIHRoZSBzYW1lLW9yaWdpbiwgW2BibG9iOmAgVVJMc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC5jcmVhdGVPYmplY3RVUkwpIGFuZCBbYGRhdGE6YCBVUkxzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL0RhdGFfVVJJcykgYXJlIGFsbG93ZWQgc28gdGhhdCBjb250ZW50IGdlbmVyYXRlZCBieSBKYXZhU2NyaXB0LCBzdWNoIGFzIHBpY3R1cmVzIGNyZWF0ZWQgaW4gYW4gaW1hZ2UtZWRpdG9yIFdlYiBhcHAsIGNhbiBiZSBkb3dubG9hZGVkLlxuKiAgIElmIHRoZSBIVFRQIGhlYWRlciBbYENvbnRlbnQtRGlzcG9zaXRpb246YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtRGlzcG9zaXRpb24pIGdpdmVzIGEgZGlmZmVyZW50IGZpbGVuYW1lIHRoYW4gdGhpcyBhdHRyaWJ1dGUsIHRoZSBIVFRQIGhlYWRlciB0YWtlcyBwcmlvcml0eSBvdmVyIHRoaXMgYXR0cmlidXRlLlxuKiAgIElmIGBDb250ZW50LURpc3Bvc2l0aW9uOmAgaXMgc2V0IHRvIGBpbmxpbmVgLCBGaXJlZm94IHByaW9yaXRpemVzIGBDb250ZW50LURpc3Bvc2l0aW9uYCwgbGlrZSB0aGUgZmlsZW5hbWUgY2FzZSwgd2hpbGUgQ2hyb21lIHByaW9yaXRpemVzIHRoZSBgZG93bmxvYWRgIGF0dHJpYnV0ZS4ifX0se25hbWU6InBpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0NvbnRhaW5zIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVVJMcyB0byB3aGljaCwgd2hlbiB0aGUgaHlwZXJsaW5rIGlzIGZvbGxvd2VkLCBbYFBPU1RgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL01ldGhvZHMvUE9TVCAiVGhlIEhUVFAgUE9TVCBtZXRob2Qgc2VuZHMgZGF0YSB0byB0aGUgc2VydmVyLiBUaGUgdHlwZSBvZiB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdCBpcyBpbmRpY2F0ZWQgYnkgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuIikgcmVxdWVzdHMgd2l0aCB0aGUgYm9keSBgUElOR2Agd2lsbCBiZSBzZW50IGJ5IHRoZSBicm93c2VyIChpbiB0aGUgYmFja2dyb3VuZCkuIFR5cGljYWxseSB1c2VkIGZvciB0cmFja2luZy4nfX0se25hbWU6InJlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHRhcmdldCBvYmplY3QgdG8gdGhlIGxpbmsgb2JqZWN0LiBUaGUgdmFsdWUgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBbbGluayB0eXBlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9MaW5rX3R5cGVzKS4ifX0se25hbWU6ImhyZWZsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGh1bWFuIGxhbmd1YWdlIG9mIHRoZSBsaW5rZWQgcmVzb3VyY2UuIEl0IGlzIHB1cmVseSBhZHZpc29yeSwgd2l0aCBubyBidWlsdC1pbiBmdW5jdGlvbmFsaXR5LiBBbGxvd2VkIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSBbQkNQNDddKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9iY3AvYmNwNDcudHh0ICJUYWdzIGZvciBJZGVudGlmeWluZyBMYW5ndWFnZXMiKS4nfX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1NwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSBpbiB0aGUgZm9ybSBvZiBhIFtNSU1FIHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvTUlNRV90eXBlICJNSU1FIHR5cGU6IEHCoE1JTUUgdHlwZcKgKG5vdyBwcm9wZXJseSBjYWxsZWQgIm1lZGlhIHR5cGUiLCBidXTCoGFsc28gc29tZXRpbWVzICJjb250ZW50IHR5cGUiKSBpcyBhIHN0cmluZyBzZW50IGFsb25nwqB3aXRoIGEgZmlsZSBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIHRoZSBmaWxlIChkZXNjcmliaW5nIHRoZSBjb250ZW50IGZvcm1hdCwgZm9yIGV4YW1wbGUsIGEgc291bmQgZmlsZSBtaWdodCBiZSBsYWJlbGVkwqBhdWRpby9vZ2csIG9yIGFuIGltYWdlIGZpbGXCoGltYWdlL3BuZykuIikgZm9yIHRoZSBsaW5rZWQgVVJMLiBJdCBpcyBwdXJlbHkgYWR2aXNvcnksIHdpdGggbm8gYnVpbHQtaW4gZnVuY3Rpb25hbGl0eS4nfX0se25hbWU6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjoiSW5kaWNhdGVzIHdoaWNoIFtyZWZlcnJlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIpIHRvIHNlbmQgd2hlbiBmZXRjaGluZyB0aGUgVVJMOlxuXG4qICAgYCduby1yZWZlcnJlcidgIG1lYW5zIHRoZSBgUmVmZXJlcjpgIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnYCBtZWFucyBubyBgUmVmZXJlcjpgIGhlYWRlciB3aWxsIGJlIHNlbnQgd2hlbiBuYXZpZ2F0aW5nIHRvIGFuIG9yaWdpbiB3aXRob3V0IEhUVFBTLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuKiAgIGAnb3JpZ2luJ2AgbWVhbnMgdGhlIHJlZmVycmVyIHdpbGwgYmUgdGhlIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvT3JpZ2luKSBvZiB0aGUgcGFnZSwgbm90IGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhZnRlciB0aGUgZG9tYWluLlxuKiAgIGAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ2AgbWVhbmluZyB0aGF0IG5hdmlnYXRpb25zIHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0IGFuZCB0aGUgcG9ydCwgd2hpbGUgbmF2aWdhdGlvbnMgb24gdGhlIHNhbWUgb3JpZ2luIHdpbGwgaW5jbHVkZSB0aGUgcmVmZXJyZXIncyBwYXRoLlxuKiAgIGAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidgXG4qICAgYCd1bnNhZmUtdXJsJ2AgbWVhbnMgdGhlIHJlZmVycmVyIHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luIGFuZCBwYXRoLCBidXQgbm90IHRoZSBmcmFnbWVudCwgcGFzc3dvcmQsIG9yIHVzZXJuYW1lLiBUaGlzIGlzIHVuc2FmZSBiZWNhdXNlIGl0IGNhbiBsZWFrIGRhdGEgZnJvbSBzZWN1cmUgVVJMcyB0byBpbnNlY3VyZSBvbmVzLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYSJ9XX0se25hbWU6ImVtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZW0gZWxlbWVudCByZXByZXNlbnRzIHN0cmVzcyBlbXBoYXNpcyBvZiBpdHMgY29udGVudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZW0ifV19LHtuYW1lOiJzdHJvbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzdHJvbmcgZWxlbWVudCByZXByZXNlbnRzIHN0cm9uZyBpbXBvcnRhbmNlLCBzZXJpb3VzbmVzcywgb3IgdXJnZW5jeSBmb3IgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N0cm9uZyJ9XX0se25hbWU6InNtYWxsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc21hbGwgZWxlbWVudCByZXByZXNlbnRzIHNpZGUgY29tbWVudHMgc3VjaCBhcyBzbWFsbCBwcmludC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbWFsbCJ9XX0se25hbWU6InMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzIGVsZW1lbnQgcmVwcmVzZW50cyBjb250ZW50cyB0aGF0IGFyZSBubyBsb25nZXIgYWNjdXJhdGUgb3Igbm8gbG9uZ2VyIHJlbGV2YW50LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3MifV19LHtuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY2l0ZSBlbGVtZW50IHJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYSBjcmVhdGl2ZSB3b3JrLiBJdCBtdXN0IGluY2x1ZGUgdGhlIHRpdGxlIG9mIHRoZSB3b3JrIG9yIHRoZSBuYW1lIG9mIHRoZSBhdXRob3IocGVyc29uLCBwZW9wbGUgb3Igb3JnYW5pemF0aW9uKSBvciBhbiBVUkwgcmVmZXJlbmNlLCBvciBhIHJlZmVyZW5jZSBpbiBhYmJyZXZpYXRlZCBmb3JtIGFzIHBlciB0aGUgY29udmVudGlvbnMgdXNlZCBmb3IgdGhlIGFkZGl0aW9uIG9mIGNpdGF0aW9uIG1ldGFkYXRhLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NpdGUifV19LHtuYW1lOiJxIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcSBlbGVtZW50IHJlcHJlc2VudHMgc29tZSBwaHJhc2luZyBjb250ZW50IHF1b3RlZCBmcm9tIGFub3RoZXIgc291cmNlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgYSBVUkwgdGhhdCBkZXNpZ25hdGVzIGEgc291cmNlIGRvY3VtZW50IG9yIG1lc3NhZ2UgZm9yIHRoZSBpbmZvcm1hdGlvbiBxdW90ZWQuIFRoaXMgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHBvaW50IHRvIGluZm9ybWF0aW9uIGV4cGxhaW5pbmcgdGhlIGNvbnRleHQgb3IgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIHF1b3RlLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3EifV19LHtuYW1lOiJkZm4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkZm4gZWxlbWVudCByZXByZXNlbnRzIHRoZSBkZWZpbmluZyBpbnN0YW5jZSBvZiBhIHRlcm0uIFRoZSBwYXJhZ3JhcGgsIGRlc2NyaXB0aW9uIGxpc3QgZ3JvdXAsIG9yIHNlY3Rpb24gdGhhdCBpcyB0aGUgbmVhcmVzdCBhbmNlc3RvciBvZiB0aGUgZGZuIGVsZW1lbnQgbXVzdCBhbHNvIGNvbnRhaW4gdGhlIGRlZmluaXRpb24ocykgZm9yIHRoZSB0ZXJtIGdpdmVuIGJ5IHRoZSBkZm4gZWxlbWVudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZm4ifV19LHtuYW1lOiJhYmJyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYWJiciBlbGVtZW50IHJlcHJlc2VudHMgYW4gYWJicmV2aWF0aW9uIG9yIGFjcm9ueW0sIG9wdGlvbmFsbHkgd2l0aCBpdHMgZXhwYW5zaW9uLiBUaGUgdGl0bGUgYXR0cmlidXRlIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgYW4gZXhwYW5zaW9uIG9mIHRoZSBhYmJyZXZpYXRpb24uIFRoZSBhdHRyaWJ1dGUsIGlmIHNwZWNpZmllZCwgbXVzdCBjb250YWluIGFuIGV4cGFuc2lvbiBvZiB0aGUgYWJicmV2aWF0aW9uLCBhbmQgbm90aGluZyBlbHNlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FiYnIifV19LHtuYW1lOiJydWJ5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcnVieSBlbGVtZW50IGFsbG93cyBvbmUgb3IgbW9yZSBzcGFucyBvZiBwaHJhc2luZyBjb250ZW50IHRvIGJlIG1hcmtlZCB3aXRoIHJ1YnkgYW5ub3RhdGlvbnMuIFJ1YnkgYW5ub3RhdGlvbnMgYXJlIHNob3J0IHJ1bnMgb2YgdGV4dCBwcmVzZW50ZWQgYWxvbmdzaWRlIGJhc2UgdGV4dCwgcHJpbWFyaWx5IHVzZWQgaW4gRWFzdCBBc2lhbiB0eXBvZ3JhcGh5IGFzIGEgZ3VpZGUgZm9yIHByb251bmNpYXRpb24gb3IgdG8gaW5jbHVkZSBvdGhlciBhbm5vdGF0aW9ucy4gSW4gSmFwYW5lc2UsIHRoaXMgZm9ybSBvZiB0eXBvZ3JhcGh5IGlzIGFsc28ga25vd24gYXMgZnVyaWdhbmEuIFJ1YnkgdGV4dCBjYW4gYXBwZWFyIG9uIGVpdGhlciBzaWRlLCBhbmQgc29tZXRpbWVzIGJvdGggc2lkZXMsIG9mIHRoZSBiYXNlIHRleHQsIGFuZCBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIGl0cyBwb3NpdGlvbiB1c2luZyBDU1MuIEEgbW9yZSBjb21wbGV0ZSBpbnRyb2R1Y3Rpb24gdG8gcnVieSBjYW4gYmUgZm91bmQgaW4gdGhlIFVzZSBDYXNlcyAmIEV4cGxvcmF0b3J5IEFwcHJvYWNoZXMgZm9yIFJ1YnkgTWFya3VwIGRvY3VtZW50IGFzIHdlbGwgYXMgaW4gQ1NTIFJ1YnkgTW9kdWxlIExldmVsIDEuIFtSVUJZLVVDXSBbQ1NTUlVCWV0ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9ydWJ5In1dfSx7bmFtZToicmIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByYiBlbGVtZW50IG1hcmtzIHRoZSBiYXNlIHRleHQgY29tcG9uZW50IG9mIGEgcnVieSBhbm5vdGF0aW9uLiBXaGVuIGl0IGlzIHRoZSBjaGlsZCBvZiBhIHJ1YnkgZWxlbWVudCwgaXQgZG9lc24ndCByZXByZXNlbnQgYW55dGhpbmcgaXRzZWxmLCBidXQgaXRzIHBhcmVudCBydWJ5IGVsZW1lbnQgdXNlcyBpdCBhcyBwYXJ0IG9mIGRldGVybWluaW5nIHdoYXQgaXQgcmVwcmVzZW50cy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9yYiJ9XX0se25hbWU6InJ0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcnQgZWxlbWVudCBtYXJrcyB0aGUgcnVieSB0ZXh0IGNvbXBvbmVudCBvZiBhIHJ1YnkgYW5ub3RhdGlvbi4gV2hlbiBpdCBpcyB0aGUgY2hpbGQgb2YgYSBydWJ5IGVsZW1lbnQgb3Igb2YgYW4gcnRjIGVsZW1lbnQgdGhhdCBpcyBpdHNlbGYgdGhlIGNoaWxkIG9mIGEgcnVieSBlbGVtZW50LCBpdCBkb2Vzbid0IHJlcHJlc2VudCBhbnl0aGluZyBpdHNlbGYsIGJ1dCBpdHMgYW5jZXN0b3IgcnVieSBlbGVtZW50IHVzZXMgaXQgYXMgcGFydCBvZiBkZXRlcm1pbmluZyB3aGF0IGl0IHJlcHJlc2VudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcnQifV19LHtuYW1lOiJycCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHJwIGVsZW1lbnQgaXMgdXNlZCB0byBwcm92aWRlIGZhbGxiYWNrIHRleHQgdG8gYmUgc2hvd24gYnkgdXNlciBhZ2VudHMgdGhhdCBkb24ndCBzdXBwb3J0IHJ1YnkgYW5ub3RhdGlvbnMuIE9uZSB3aWRlc3ByZWFkIGNvbnZlbnRpb24gaXMgdG8gcHJvdmlkZSBwYXJlbnRoZXNlcyBhcm91bmQgdGhlIHJ1YnkgdGV4dCBjb21wb25lbnQgb2YgYSBydWJ5IGFubm90YXRpb24uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcnAifV19LHtuYW1lOiJ0aW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGltZSBlbGVtZW50IHJlcHJlc2VudHMgaXRzIGNvbnRlbnRzLCBhbG9uZyB3aXRoIGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtIG9mIHRob3NlIGNvbnRlbnRzIGluIHRoZSBkYXRldGltZSBhdHRyaWJ1dGUuIFRoZSBraW5kIG9mIGNvbnRlbnQgaXMgbGltaXRlZCB0byB2YXJpb3VzIGtpbmRzIG9mIGRhdGVzLCB0aW1lcywgdGltZS16b25lIG9mZnNldHMsIGFuZCBkdXJhdGlvbnMsIGFzIGRlc2NyaWJlZCBiZWxvdy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGF0ZXRpbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgdGltZSBhbmQvb3IgZGF0ZSBvZiB0aGUgZWxlbWVudCBhbmQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIGZvcm1hdHMgZGVzY3JpYmVkIGJlbG93LiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RpbWUifV19LHtuYW1lOiJjb2RlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY29kZSBlbGVtZW50IHJlcHJlc2VudHMgYSBmcmFnbWVudCBvZiBjb21wdXRlciBjb2RlLiBUaGlzIGNvdWxkIGJlIGFuIFhNTCBlbGVtZW50IG5hbWUsIGEgZmlsZSBuYW1lLCBhIGNvbXB1dGVyIHByb2dyYW0sIG9yIGFueSBvdGhlciBzdHJpbmcgdGhhdCBhIGNvbXB1dGVyIHdvdWxkIHJlY29nbml6ZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2RlIn1dfSx7bmFtZToidmFyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdmFyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHZhcmlhYmxlLiBUaGlzIGNvdWxkIGJlIGFuIGFjdHVhbCB2YXJpYWJsZSBpbiBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIG9yIHByb2dyYW1taW5nIGNvbnRleHQsIGFuIGlkZW50aWZpZXIgcmVwcmVzZW50aW5nIGEgY29uc3RhbnQsIGEgc3ltYm9sIGlkZW50aWZ5aW5nIGEgcGh5c2ljYWwgcXVhbnRpdHksIGEgZnVuY3Rpb24gcGFyYW1ldGVyLCBvciBqdXN0IGJlIGEgdGVybSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgaW4gcHJvc2UuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmFyIn1dfSx7bmFtZToic2FtcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNhbXAgZWxlbWVudCByZXByZXNlbnRzIHNhbXBsZSBvciBxdW90ZWQgb3V0cHV0IGZyb20gYW5vdGhlciBwcm9ncmFtIG9yIGNvbXB1dGluZyBzeXN0ZW0uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2FtcCJ9XX0se25hbWU6ImtiZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGtiZCBlbGVtZW50IHJlcHJlc2VudHMgdXNlciBpbnB1dCAodHlwaWNhbGx5IGtleWJvYXJkIGlucHV0LCBhbHRob3VnaCBpdCBtYXkgYWxzbyBiZSB1c2VkIHRvIHJlcHJlc2VudCBvdGhlciBpbnB1dCwgc3VjaCBhcyB2b2ljZSBjb21tYW5kcykuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQva2JkIn1dfSx7bmFtZToic3ViIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3ViIGVsZW1lbnQgcmVwcmVzZW50cyBhIHN1YnNjcmlwdC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdWIifV19LHtuYW1lOiJzdXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzdXAgZWxlbWVudCByZXByZXNlbnRzIGEgc3VwZXJzY3JpcHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3VwIn1dfSx7bmFtZToiaSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGkgZWxlbWVudCByZXByZXNlbnRzIGEgc3BhbiBvZiB0ZXh0IGluIGFuIGFsdGVybmF0ZSB2b2ljZSBvciBtb29kLCBvciBvdGhlcndpc2Ugb2Zmc2V0IGZyb20gdGhlIG5vcm1hbCBwcm9zZSBpbiBhIG1hbm5lciBpbmRpY2F0aW5nIGEgZGlmZmVyZW50IHF1YWxpdHkgb2YgdGV4dCwgc3VjaCBhcyBhIHRheG9ub21pYyBkZXNpZ25hdGlvbiwgYSB0ZWNobmljYWwgdGVybSwgYW4gaWRpb21hdGljIHBocmFzZSBmcm9tIGFub3RoZXIgbGFuZ3VhZ2UsIHRyYW5zbGl0ZXJhdGlvbiwgYSB0aG91Z2h0LCBvciBhIHNoaXAgbmFtZSBpbiBXZXN0ZXJuIHRleHRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2kifV19LHtuYW1lOiJiIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYiBlbGVtZW50IHJlcHJlc2VudHMgYSBzcGFuIG9mIHRleHQgdG8gd2hpY2ggYXR0ZW50aW9uIGlzIGJlaW5nIGRyYXduIGZvciB1dGlsaXRhcmlhbiBwdXJwb3NlcyB3aXRob3V0IGNvbnZleWluZyBhbnkgZXh0cmEgaW1wb3J0YW5jZSBhbmQgd2l0aCBubyBpbXBsaWNhdGlvbiBvZiBhbiBhbHRlcm5hdGUgdm9pY2Ugb3IgbW9vZCwgc3VjaCBhcyBrZXkgd29yZHMgaW4gYSBkb2N1bWVudCBhYnN0cmFjdCwgcHJvZHVjdCBuYW1lcyBpbiBhIHJldmlldywgYWN0aW9uYWJsZSB3b3JkcyBpbiBpbnRlcmFjdGl2ZSB0ZXh0LWRyaXZlbiBzb2Z0d2FyZSwgb3IgYW4gYXJ0aWNsZSBsZWRlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2IifV19LHtuYW1lOiJ1IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdSBlbGVtZW50IHJlcHJlc2VudHMgYSBzcGFuIG9mIHRleHQgd2l0aCBhbiB1bmFydGljdWxhdGVkLCB0aG91Z2ggZXhwbGljaXRseSByZW5kZXJlZCwgbm9uLXRleHR1YWwgYW5ub3RhdGlvbiwgc3VjaCBhcyBsYWJlbGluZyB0aGUgdGV4dCBhcyBiZWluZyBhIHByb3BlciBuYW1lIGluIENoaW5lc2UgdGV4dCAoYSBDaGluZXNlIHByb3BlciBuYW1lIG1hcmspLCBvciBsYWJlbGluZyB0aGUgdGV4dCBhcyBiZWluZyBtaXNzcGVsdC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC91In1dfSx7bmFtZToibWFyayIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1hcmsgZWxlbWVudCByZXByZXNlbnRzIGEgcnVuIG9mIHRleHQgaW4gb25lIGRvY3VtZW50IG1hcmtlZCBvciBoaWdobGlnaHRlZCBmb3IgcmVmZXJlbmNlIHB1cnBvc2VzLCBkdWUgdG8gaXRzIHJlbGV2YW5jZSBpbiBhbm90aGVyIGNvbnRleHQuIFdoZW4gdXNlZCBpbiBhIHF1b3RhdGlvbiBvciBvdGhlciBibG9jayBvZiB0ZXh0IHJlZmVycmVkIHRvIGZyb20gdGhlIHByb3NlLCBpdCBpbmRpY2F0ZXMgYSBoaWdobGlnaHQgdGhhdCB3YXMgbm90IG9yaWdpbmFsbHkgcHJlc2VudCBidXQgd2hpY2ggaGFzIGJlZW4gYWRkZWQgdG8gYnJpbmcgdGhlIHJlYWRlcidzIGF0dGVudGlvbiB0byBhIHBhcnQgb2YgdGhlIHRleHQgdGhhdCBtaWdodCBub3QgaGF2ZSBiZWVuIGNvbnNpZGVyZWQgaW1wb3J0YW50IGJ5IHRoZSBvcmlnaW5hbCBhdXRob3Igd2hlbiB0aGUgYmxvY2sgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiwgYnV0IHdoaWNoIGlzIG5vdyB1bmRlciBwcmV2aW91c2x5IHVuZXhwZWN0ZWQgc2NydXRpbnkuIFdoZW4gdXNlZCBpbiB0aGUgbWFpbiBwcm9zZSBvZiBhIGRvY3VtZW50LCBpdCBpbmRpY2F0ZXMgYSBwYXJ0IG9mIHRoZSBkb2N1bWVudCB0aGF0IGhhcyBiZWVuIGhpZ2hsaWdodGVkIGR1ZSB0byBpdHMgbGlrZWx5IHJlbGV2YW5jZSB0byB0aGUgdXNlcidzIGN1cnJlbnQgYWN0aXZpdHkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWFyayJ9XX0se25hbWU6ImJkaSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJkaSBlbGVtZW50IHJlcHJlc2VudHMgYSBzcGFuIG9mIHRleHQgdGhhdCBpcyB0byBiZSBpc29sYXRlZCBmcm9tIGl0cyBzdXJyb3VuZGluZ3MgZm9yIHRoZSBwdXJwb3NlcyBvZiBiaWRpcmVjdGlvbmFsIHRleHQgZm9ybWF0dGluZy4gW0JJREldIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYmRpIn1dfSx7bmFtZToiYmRvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYmRvIGVsZW1lbnQgcmVwcmVzZW50cyBleHBsaWNpdCB0ZXh0IGRpcmVjdGlvbmFsaXR5IGZvcm1hdHRpbmcgY29udHJvbCBmb3IgaXRzIGNoaWxkcmVuLiBJdCBhbGxvd3MgYXV0aG9ycyB0byBvdmVycmlkZSB0aGUgVW5pY29kZSBiaWRpcmVjdGlvbmFsIGFsZ29yaXRobSBieSBleHBsaWNpdGx5IHNwZWNpZnlpbmcgYSBkaXJlY3Rpb24gb3ZlcnJpZGUuIFtCSURJXSJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJkaXIiLGRlc2NyaXB0aW9uOiJUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRleHQgc2hvdWxkIGJlIHJlbmRlcmVkIGluIHRoaXMgZWxlbWVudCdzIGNvbnRlbnRzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGx0cmA6IEluZGljYXRlcyB0aGF0IHRoZSB0ZXh0IHNob3VsZCBnbyBpbiBhIGxlZnQtdG8tcmlnaHQgZGlyZWN0aW9uLlxuKiAgIGBydGxgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgdGV4dCBzaG91bGQgZ28gaW4gYSByaWdodC10by1sZWZ0IGRpcmVjdGlvbi4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2JkbyJ9XX0se25hbWU6InNwYW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzcGFuIGVsZW1lbnQgZG9lc24ndCBtZWFuIGFueXRoaW5nIG9uIGl0cyBvd24sIGJ1dCBjYW4gYmUgdXNlZnVsIHdoZW4gdXNlZCB0b2dldGhlciB3aXRoIHRoZSBnbG9iYWwgYXR0cmlidXRlcywgZS5nLiBjbGFzcywgbGFuZywgb3IgZGlyLiBJdCByZXByZXNlbnRzIGl0cyBjaGlsZHJlbi4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zcGFuIn1dfSx7bmFtZToiYnIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBiciBlbGVtZW50IHJlcHJlc2VudHMgYSBsaW5lIGJyZWFrLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjbGVhciIsZGVzY3JpcHRpb246IkluZGljYXRlcyB3aGVyZSB0byBiZWdpbiB0aGUgbmV4dCBsaW5lIGFmdGVyIHRoZSBicmVhay4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2JyIn1dfSx7bmFtZToid2JyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgd2JyIGVsZW1lbnQgcmVwcmVzZW50cyBhIGxpbmUgYnJlYWsgb3Bwb3J0dW5pdHkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvd2JyIn1dfSx7bmFtZToiaW5zIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaW5zIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBhZGRpdGlvbiB0byB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImNpdGUiLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBVUkkgb2YgYSByZXNvdXJjZSB0aGF0IGV4cGxhaW5zIHRoZSBjaGFuZ2UsIHN1Y2ggYXMgYSBsaW5rIHRvIG1lZXRpbmcgbWludXRlcyBvciBhIHRpY2tldCBpbiBhIHRyb3VibGVzaG9vdGluZyBzeXN0ZW0uIn0se25hbWU6ImRhdGV0aW1lIixkZXNjcmlwdGlvbjonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSB0aW1lIGFuZCBkYXRlIG9mIHRoZSBjaGFuZ2UgYW5kIG11c3QgYmUgYSB2YWxpZCBkYXRlIHdpdGggYW4gb3B0aW9uYWwgdGltZSBzdHJpbmcuIElmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgcGFyc2VkIGFzIGEgZGF0ZSB3aXRoIGFuIG9wdGlvbmFsIHRpbWUgc3RyaW5nLCB0aGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgdGltZSBzdGFtcC4gRm9yIHRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyB3aXRob3V0IGEgdGltZSwgc2VlIFtGb3JtYXQgb2YgYSB2YWxpZCBkYXRlIHN0cmluZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMjRm9ybWF0X29mX2FfdmFsaWRfZGF0ZV9zdHJpbmcgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKSBpbiBbRGF0ZSBhbmQgdGltZSBmb3JtYXRzIHVzZWQgaW4gSFRNTF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKS4gVGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlmIGl0IGluY2x1ZGVzIGJvdGggZGF0ZSBhbmQgdGltZSBpcyBjb3ZlcmVkIGluIFtGb3JtYXQgb2YgYSB2YWxpZCBsb2NhbCBkYXRlIGFuZCB0aW1lIHN0cmluZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMjRm9ybWF0X29mX2FfdmFsaWRfbG9jYWxfZGF0ZV9hbmRfdGltZV9zdHJpbmcgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKSBpbiBbRGF0ZSBhbmQgdGltZSBmb3JtYXRzIHVzZWQgaW4gSFRNTF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucyJ9XX0se25hbWU6ImRlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRlbCBlbGVtZW50IHJlcHJlc2VudHMgYSByZW1vdmFsIGZyb20gdGhlIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIFVSSSBmb3IgYSByZXNvdXJjZSB0aGF0IGV4cGxhaW5zIHRoZSBjaGFuZ2UgKGZvciBleGFtcGxlLCBtZWV0aW5nIG1pbnV0ZXMpLiJ9fSx7bmFtZToiZGF0ZXRpbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgdGltZSBhbmQgZGF0ZSBvZiB0aGUgY2hhbmdlIGFuZCBtdXN0IGJlIGEgdmFsaWQgZGF0ZSBzdHJpbmcgd2l0aCBhbiBvcHRpb25hbCB0aW1lLiBJZiB0aGUgdmFsdWUgY2Fubm90IGJlIHBhcnNlZCBhcyBhIGRhdGUgd2l0aCBhbiBvcHRpb25hbCB0aW1lIHN0cmluZywgdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHRpbWUgc3RhbXAuIEZvciB0aGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgd2l0aG91dCBhIHRpbWUsIHNlZSBbRm9ybWF0IG9mIGEgdmFsaWQgZGF0ZSBzdHJpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzI0Zvcm1hdF9vZl9hX3ZhbGlkX2RhdGVfc3RyaW5nICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikgaW4gW0RhdGUgYW5kIHRpbWUgZm9ybWF0cyB1c2VkIGluIEhUTUxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikuIFRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpZiBpdCBpbmNsdWRlcyBib3RoIGRhdGUgYW5kIHRpbWUgaXMgY292ZXJlZCBpbiBbRm9ybWF0IG9mIGEgdmFsaWQgbG9jYWwgZGF0ZSBhbmQgdGltZSBzdHJpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzI0Zvcm1hdF9vZl9hX3ZhbGlkX2xvY2FsX2RhdGVfYW5kX3RpbWVfc3RyaW5nICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikgaW4gW0RhdGUgYW5kIHRpbWUgZm9ybWF0cyB1c2VkIGluIEhUTUxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikuJ319XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGVsIn1dfSx7bmFtZToicGljdHVyZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBpY3R1cmUgZWxlbWVudCBpcyBhIGNvbnRhaW5lciB3aGljaCBwcm92aWRlcyBtdWx0aXBsZSBzb3VyY2VzIHRvIGl0cyBjb250YWluZWQgaW1nIGVsZW1lbnQgdG8gYWxsb3cgYXV0aG9ycyB0byBkZWNsYXJhdGl2ZWx5IGNvbnRyb2wgb3IgZ2l2ZSBoaW50cyB0byB0aGUgdXNlciBhZ2VudCBhYm91dCB3aGljaCBpbWFnZSByZXNvdXJjZSB0byB1c2UsIGJhc2VkIG9uIHRoZSBzY3JlZW4gcGl4ZWwgZGVuc2l0eSwgdmlld3BvcnQgc2l6ZSwgaW1hZ2UgZm9ybWF0LCBhbmQgb3RoZXIgZmFjdG9ycy4gSXQgcmVwcmVzZW50cyBpdHMgY2hpbGRyZW4uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcGljdHVyZSJ9XX0se25hbWU6ImltZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gaW1nIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBpbWFnZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWx0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIGFuIGFsdGVybmF0aXZlIHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGltYWdlLlxuXG4qKk5vdGU6KiogQnJvd3NlcnMgZG8gbm90IGFsd2F5cyBkaXNwbGF5IHRoZSBpbWFnZSByZWZlcmVuY2VkIGJ5IHRoZSBlbGVtZW50LiBUaGlzIGlzIHRoZSBjYXNlIGZvciBub24tZ3JhcGhpY2FsIGJyb3dzZXJzIChpbmNsdWRpbmcgdGhvc2UgdXNlZCBieSBwZW9wbGUgd2l0aCB2aXN1YWwgaW1wYWlybWVudHMpLCBpZiB0aGUgdXNlciBjaG9vc2VzIG5vdCB0byBkaXNwbGF5IGltYWdlcywgb3IgaWYgdGhlIGJyb3dzZXIgY2Fubm90IGRpc3BsYXkgdGhlIGltYWdlIGJlY2F1c2UgaXQgaXMgaW52YWxpZCBvciBhbiBbdW5zdXBwb3J0ZWQgdHlwZV0oI1N1cHBvcnRlZF9pbWFnZV9mb3JtYXRzKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBicm93c2VyIG1heSByZXBsYWNlIHRoZSBpbWFnZSB3aXRoIHRoZSB0ZXh0IGRlZmluZWQgaW4gdGhpcyBlbGVtZW50XCdzIGBhbHRgIGF0dHJpYnV0ZS4gWW91IHNob3VsZCwgZm9yIHRoZXNlIHJlYXNvbnMgYW5kIG90aGVycywgcHJvdmlkZSBhIHVzZWZ1bCB2YWx1ZSBmb3IgYGFsdGAgd2hlbmV2ZXIgcG9zc2libGUuXG5cbioqTm90ZToqKiBPbWl0dGluZyB0aGlzIGF0dHJpYnV0ZSBhbHRvZ2V0aGVyIGluZGljYXRlcyB0aGF0IHRoZSBpbWFnZSBpcyBhIGtleSBwYXJ0IG9mIHRoZSBjb250ZW50LCBhbmQgbm8gdGV4dHVhbCBlcXVpdmFsZW50IGlzIGF2YWlsYWJsZS4gU2V0dGluZyB0aGlzIGF0dHJpYnV0ZSB0byBhbiBlbXB0eSBzdHJpbmcgKGBhbHQ9IiJgKSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGltYWdlIGlzIF9ub3RfIGEga2V5IHBhcnQgb2YgdGhlIGNvbnRlbnQgKGRlY29yYXRpdmUpLCBhbmQgdGhhdCBub24tdmlzdWFsIGJyb3dzZXJzIG1heSBvbWl0IGl0IGZyb20gcmVuZGVyaW5nLid9fSx7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaW1hZ2UgVVJMLiBUaGlzIGF0dHJpYnV0ZSBpcyBtYW5kYXRvcnkgZm9yIHRoZSBgPGltZz5gIGVsZW1lbnQuIE9uIGJyb3dzZXJzIHN1cHBvcnRpbmcgYHNyY3NldGAsIGBzcmNgIGlzIHRyZWF0ZWQgbGlrZSBhIGNhbmRpZGF0ZSBpbWFnZSB3aXRoIGEgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9yIGAxeGAgdW5sZXNzIGFuIGltYWdlIHdpdGggdGhpcyBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGBzcmNzZXQsYCBvciB1bmxlc3MgYHNyY3NldGAgY29udGFpbnMgJ2B3YCcgZGVzY3JpcHRvcnMuIn19LHtuYW1lOiJzcmNzZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgbGlzdCBvZiBvbmUgb3IgbW9yZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMgaW5kaWNhdGluZyBhIHNldCBvZiBwb3NzaWJsZSBpbWFnZSBzb3VyY2VzIGZvciB0aGUgdXNlciBhZ2VudCB0byB1c2UuIEVhY2ggc3RyaW5nIGlzIGNvbXBvc2VkIG9mOlxuXG4xLiAgYSBVUkwgdG8gYW4gaW1hZ2UsXG4yLiAgb3B0aW9uYWxseSwgd2hpdGVzcGFjZSBmb2xsb3dlZCBieSBvbmUgb2Y6XG4gICAgKiAgIEEgd2lkdGggZGVzY3JpcHRvciwgb3IgYSBwb3NpdGl2ZSBpbnRlZ2VyIGRpcmVjdGx5IGZvbGxvd2VkIGJ5ICdgd2AnLiBUaGUgd2lkdGggZGVzY3JpcHRvciBpcyBkaXZpZGVkIGJ5IHRoZSBzb3VyY2Ugc2l6ZSBnaXZlbiBpbiB0aGUgYHNpemVzYCBhdHRyaWJ1dGUgdG8gY2FsY3VsYXRlIHRoZSBlZmZlY3RpdmUgcGl4ZWwgZGVuc2l0eS5cbiAgICAqICAgQSBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IsIHdoaWNoIGlzIGEgcG9zaXRpdmUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGRpcmVjdGx5IGZvbGxvd2VkIGJ5ICdgeGAnLlxuXG5JZiBubyBkZXNjcmlwdG9yIGlzIHNwZWNpZmllZCwgdGhlIHNvdXJjZSBpcyBhc3NpZ25lZCB0aGUgZGVmYXVsdCBkZXNjcmlwdG9yOiBgMXhgLlxuXG5JdCBpcyBpbmNvcnJlY3QgdG8gbWl4IHdpZHRoIGRlc2NyaXB0b3JzIGFuZCBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3JzIGluIHRoZSBzYW1lIGBzcmNzZXRgIGF0dHJpYnV0ZS4gRHVwbGljYXRlIGRlc2NyaXB0b3JzIChmb3IgaW5zdGFuY2UsIHR3byBzb3VyY2VzIGluIHRoZSBzYW1lIGBzcmNzZXRgIHdoaWNoIGFyZSBib3RoIGRlc2NyaWJlZCB3aXRoICdgMnhgJykgYXJlIGFsc28gaW52YWxpZC5cblxuVGhlIHVzZXIgYWdlbnQgc2VsZWN0cyBhbnkgb25lIG9mIHRoZSBhdmFpbGFibGUgc291cmNlcyBhdCBpdHMgZGlzY3JldGlvbi4gVGhpcyBwcm92aWRlcyB0aGVtIHdpdGggc2lnbmlmaWNhbnQgbGVld2F5IHRvIHRhaWxvciB0aGVpciBzZWxlY3Rpb24gYmFzZWQgb24gdGhpbmdzIGxpa2UgdXNlciBwcmVmZXJlbmNlcyBvciBiYW5kd2lkdGggY29uZGl0aW9ucy4gU2VlIG91ciBbUmVzcG9uc2l2ZSBpbWFnZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTGVhcm4vSFRNTC9NdWx0aW1lZGlhX2FuZF9lbWJlZGRpbmcvUmVzcG9uc2l2ZV9pbWFnZXMpIHR1dG9yaWFsIGZvciBhbiBleGFtcGxlLiJ9fSx7bmFtZToiY3Jvc3NvcmlnaW4iLHZhbHVlU2V0OiJ4byIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgaWYgdGhlIGZldGNoaW5nIG9mIHRoZSByZWxhdGVkIGltYWdlIG11c3QgYmUgZG9uZSB1c2luZyBDT1JTIG9yIG5vdC4gW0NPUlMtZW5hYmxlZCBpbWFnZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ09SU19FbmFibGVkX0ltYWdlKSBjYW4gYmUgcmV1c2VkIGluIHRoZSBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhbnZhcyAiVXNlIHRoZSBIVE1MIDxjYW52YXM+IGVsZW1lbnQgd2l0aCBlaXRoZXIgdGhlIGNhbnZhcyBzY3JpcHRpbmcgQVBJIG9yIHRoZSBXZWJHTCBBUEkgdG8gZHJhdyBncmFwaGljcyBhbmQgYW5pbWF0aW9ucy4iKSBlbGVtZW50IHdpdGhvdXQgYmVpbmcgIlt0YWludGVkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfZW5hYmxlZF9pbWFnZSNXaGF0X2lzX2FfdGFpbnRlZF9jYW52YXMpLiIgVGhlIGFsbG93ZWQgdmFsdWVzIGFyZTonfX0se25hbWU6InVzZW1hcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIHBhcnRpYWwgVVJMIChzdGFydGluZyB3aXRoIFwnI1wnKSBvZiBhbiBbaW1hZ2UgbWFwXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0hUTUwvRWxlbWVudC9tYXApIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudC5cblxuKipOb3RlOioqIFlvdSBjYW5ub3QgdXNlIHRoaXMgYXR0cmlidXRlIGlmIHRoZSBgPGltZz5gIGVsZW1lbnQgaXMgYSBkZXNjZW5kYW50IG9mIGFuIFtgPGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EgIlRoZSBIVE1MIDxhPiBlbGVtZW50IChvciBhbmNob3IgZWxlbWVudCkgY3JlYXRlcyBhIGh5cGVybGluayB0byBvdGhlciB3ZWIgcGFnZXMsIGZpbGVzLCBsb2NhdGlvbnMgd2l0aGluIHRoZSBzYW1lIHBhZ2UsIGVtYWlsIGFkZHJlc3Nlcywgb3IgYW55IG90aGVyIFVSTC4iKSBvciBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgZWxlbWVudC4nfX0se25hbWU6ImlzbWFwIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgaW1hZ2UgaXMgcGFydCBvZiBhIHNlcnZlci1zaWRlIG1hcC4gSWYgc28sIHRoZSBwcmVjaXNlIGNvb3JkaW5hdGVzIG9mIGEgY2xpY2sgYXJlIHNlbnQgdG8gdGhlIHNlcnZlci5cblxuKipOb3RlOioqIFRoaXMgYXR0cmlidXRlIGlzIGFsbG93ZWQgb25seSBpZiB0aGUgYDxpbWc+YCBlbGVtZW50IGlzIGEgZGVzY2VuZGFudCBvZiBhbiBbYDxhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hICJUaGUgSFRNTCA8YT4gZWxlbWVudCAob3IgYW5jaG9yIGVsZW1lbnQpIGNyZWF0ZXMgYSBoeXBlcmxpbmsgdG8gb3RoZXIgd2ViIHBhZ2VzLCBmaWxlcywgbG9jYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBwYWdlLCBlbWFpbCBhZGRyZXNzZXMsIG9yIGFueSBvdGhlciBVUkwuIikgZWxlbWVudCB3aXRoIGEgdmFsaWQgW2BocmVmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EjYXR0ci1ocmVmKSBhdHRyaWJ1dGUuJ319LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLiJ9fSx7bmFtZToiaGVpZ2h0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLiJ9fSx7bmFtZToiZGVjb2RpbmciLGRlc2NyaXB0aW9uOiJQcm92aWRlcyBhbiBpbWFnZSBkZWNvZGluZyBoaW50IHRvIHRoZSBicm93c2VyLiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlOiJ9LHtuYW1lOiJkZWNvZGluZyIsZGVzY3JpcHRpb246YFxgc3luY1xgCgpEZWNvZGUgdGhlIGltYWdlIHN5bmNocm9ub3VzbHkgZm9yIGF0b21pYyBwcmVzZW50YXRpb24gd2l0aCBvdGhlciBjb250ZW50LgoKXGBhc3luY1xgCgpEZWNvZGUgdGhlIGltYWdlIGFzeW5jaHJvbm91c2x5IHRvIHJlZHVjZSBkZWxheSBpbiBwcmVzZW50aW5nIG90aGVyIGNvbnRlbnQuCgpcYGF1dG9cYAoKRGVmYXVsdCBtb2RlLCB3aGljaCBpbmRpY2F0ZXMgbm8gcHJlZmVyZW5jZSBmb3IgdGhlIGRlY29kaW5nIG1vZGUuIFRoZSBicm93c2VyIGRlY2lkZXMgd2hhdCBpcyBiZXN0IGZvciB0aGUgdXNlci5gfSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiB0aGUgcmVzb3VyY2UuIFByaW9yaXR5IGhpbnRzIGFyZSBkZWxlZ2F0ZWQgdXNpbmcgdGhlIHZhbHVlczoifSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246ImBhdXRvYDogSW5kaWNhdGVzwqAqKm5vwqBwcmVmZXJlbmNlKiouIFRoZSBicm93c2VyIG1heSB1c2UgaXRzIG93biBoZXVyaXN0aWNzIHRvIGRlY2lkZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGltYWdlLlxuXG5gaGlnaGA6IEluZGljYXRlcyB0byB0aGXCoGJyb3dzZXLCoHRoYXQgdGhlIGltYWdlIGlzIG9mwqAqKmhpZ2gqKiBwcmlvcml0eS5cblxuYGxvd2A6wqBJbmRpY2F0ZXMgdG8gdGhlwqBicm93c2VywqB0aGF0IHRoZSBpbWFnZSBpcyBvZsKgKipsb3cqKiBwcmlvcml0eS4ifSx7bmFtZToiaW50cmluc2ljc2l6ZSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIHRlbGxzIHRoZSBicm93c2VyIHRvIGlnbm9yZSB0aGUgYWN0dWFsIGludHJpbnNpYyBzaXplIG9mIHRoZSBpbWFnZSBhbmQgcHJldGVuZCBpdOKAmXMgdGhlIHNpemUgc3BlY2lmaWVkIGluIHRoZSBhdHRyaWJ1dGUuIFNwZWNpZmljYWxseSwgdGhlIGltYWdlIHdvdWxkIHJhc3RlciBhdCB0aGVzZSBkaW1lbnNpb25zIGFuZCBgbmF0dXJhbFdpZHRoYC9gbmF0dXJhbEhlaWdodGAgb24gaW1hZ2VzIHdvdWxkIHJldHVybiB0aGUgdmFsdWVzIHNwZWNpZmllZCBpbiB0aGlzIGF0dHJpYnV0ZS4gW0V4cGxhaW5lcl0oaHR0cHM6Ly9naXRodWIuY29tL29qYW52YWZhaS9pbnRyaW5zaWNzaXplLWF0dHJpYnV0ZSksIFtleGFtcGxlc10oaHR0cHM6Ly9nb29nbGVjaHJvbWUuZ2l0aHViLmlvL3NhbXBsZXMvaW50cmluc2ljLXNpemUvaW5kZXguaHRtbCkifSx7bmFtZToicmVmZXJyZXJwb2xpY3kiLGRlc2NyaXB0aW9uOiJBIHN0cmluZyBpbmRpY2F0aW5nIHdoaWNoIHJlZmVycmVyIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSByZXNvdXJjZTpcblxuKiAgIGBuby1yZWZlcnJlcjpgIFRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciBcIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuXCIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZTpgIE5vIGBSZWZlcmVyYCBoZWFkZXIgd2lsbCBiZSBzZW50IHdoZW4gbmF2aWdhdGluZyB0byBhbiBvcmlnaW4gd2l0aG91dCBUTFMgKEhUVFBTKS4gVGhpcyBpcyBhIHVzZXIgYWdlbnTigJlzIGRlZmF1bHQgYmVoYXZpb3IgaWYgbm8gcG9saWN5IGlzIG90aGVyd2lzZSBzcGVjaWZpZWQuXG4qICAgYG9yaWdpbjpgIFRoZSBgUmVmZXJlcmAgaGVhZGVyIHdpbGwgaW5jbHVkZSB0aGUgcGFnZSBvZiBvcmlnaW4ncyBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbjpgIE5hdmlnYXRpbmcgdG8gb3RoZXIgb3JpZ2lucyB3aWxsIGxpbWl0IHRoZSBpbmNsdWRlZCByZWZlcnJhbCBkYXRhIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0IGFuZCB0aGUgcG9ydCwgd2hpbGUgbmF2aWdhdGluZyBmcm9tIHRoZSBzYW1lIG9yaWdpbiB3aWxsIGluY2x1ZGUgdGhlIHJlZmVycmVyJ3MgZnVsbCBwYXRoLlxuKiAgIGB1bnNhZmUtdXJsOmAgVGhlIGBSZWZlcmVyYCBoZWFkZXIgd2lsbCBpbmNsdWRlIHRoZSBvcmlnaW4gYW5kIHRoZSBwYXRoLCBidXQgbm90IHRoZSBmcmFnbWVudCwgcGFzc3dvcmQsIG9yIHVzZXJuYW1lLiBUaGlzIGNhc2UgaXMgdW5zYWZlIGJlY2F1c2UgaXQgY2FuIGxlYWsgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLiJ9LHtuYW1lOiJzaXplcyIsZGVzY3JpcHRpb246IkEgbGlzdCBvZiBvbmUgb3IgbW9yZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMgaW5kaWNhdGluZyBhIHNldCBvZiBzb3VyY2Ugc2l6ZXMuIEVhY2ggc291cmNlIHNpemUgY29uc2lzdHMgb2Y6XG5cbjEuICBhIG1lZGlhIGNvbmRpdGlvbi4gVGhpcyBtdXN0IGJlIG9taXR0ZWQgZm9yIHRoZSBsYXN0IGl0ZW0uXG4yLiAgYSBzb3VyY2Ugc2l6ZSB2YWx1ZS5cblxuU291cmNlIHNpemUgdmFsdWVzIHNwZWNpZnkgdGhlIGludGVuZGVkIGRpc3BsYXkgc2l6ZSBvZiB0aGUgaW1hZ2UuIFVzZXIgYWdlbnRzIHVzZSB0aGUgY3VycmVudCBzb3VyY2Ugc2l6ZSB0byBzZWxlY3Qgb25lIG9mIHRoZSBzb3VyY2VzIHN1cHBsaWVkIGJ5IHRoZSBgc3Jjc2V0YCBhdHRyaWJ1dGUsIHdoZW4gdGhvc2Ugc291cmNlcyBhcmUgZGVzY3JpYmVkIHVzaW5nIHdpZHRoICgnYHdgJykgZGVzY3JpcHRvcnMuIFRoZSBzZWxlY3RlZCBzb3VyY2Ugc2l6ZSBhZmZlY3RzIHRoZSBpbnRyaW5zaWMgc2l6ZSBvZiB0aGUgaW1hZ2UgKHRoZSBpbWFnZeKAmXMgZGlzcGxheSBzaXplIGlmIG5vIENTUyBzdHlsaW5nIGlzIGFwcGxpZWQpLiBJZiB0aGUgYHNyY3NldGAgYXR0cmlidXRlIGlzIGFic2VudCwgb3IgY29udGFpbnMgbm8gdmFsdWVzIHdpdGggYSB3aWR0aCAoYHdgKSBkZXNjcmlwdG9yLCB0aGVuIHRoZSBgc2l6ZXNgIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0LiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW1nIn1dfSx7bmFtZToiaWZyYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaWZyYW1lIGVsZW1lbnQgcmVwcmVzZW50cyBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBVUkwgb2YgdGhlIHBhZ2UgdG8gZW1iZWQuIFVzZSBhIHZhbHVlIG9mIGBhYm91dDpibGFua2AgdG8gZW1iZWQgYW4gZW1wdHkgcGFnZSB0aGF0IGNvbmZvcm1zIHRvIHRoZSBbc2FtZS1vcmlnaW4gcG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TYW1lLW9yaWdpbl9wb2xpY3kjSW5oZXJpdGVkX29yaWdpbnMpLiBBbHNvIG5vdGUgdGhhdCBwcm9ncmFtYXRpY2FsbHkgcmVtb3ZpbmcgYW4gYDxpZnJhbWU+YFwncyBzcmMgYXR0cmlidXRlIChlLmcuIHZpYSBbYEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9yZW1vdmVBdHRyaWJ1dGUgIlRoZSBFbGVtZW50IG1ldGhvZCByZW1vdmVBdHRyaWJ1dGUoKSByZW1vdmVzIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZnJvbSB0aGUgZWxlbWVudC4iKSkgY2F1c2VzIGBhYm91dDpibGFua2AgdG8gYmUgbG9hZGVkIGluIHRoZSBmcmFtZSBpbiBGaXJlZm94IChmcm9tIHZlcnNpb24gNjUpLCBDaHJvbWl1bS1iYXNlZCBicm93c2VycywgYW5kIFNhZmFyaS9pT1MuJ319LHtuYW1lOiJzcmNkb2MiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklubGluZSBIVE1MIHRvIGVtYmVkLCBvdmVycmlkaW5nIHRoZSBgc3JjYCBhdHRyaWJ1dGUuIElmIGEgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgc3JjZG9jYCBhdHRyaWJ1dGUsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBVUkwgaW4gdGhlIGBzcmNgIGF0dHJpYnV0ZS4ifX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0EgdGFyZ2V0YWJsZSBuYW1lIGZvciB0aGUgZW1iZWRkZWQgYnJvd3NpbmcgY29udGV4dC4gVGhpcyBjYW4gYmUgdXNlZCBpbiB0aGUgYHRhcmdldGAgYXR0cmlidXRlIG9mIHRoZSBbYDxhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hICJUaGUgSFRNTCA8YT4gZWxlbWVudCAob3IgYW5jaG9yIGVsZW1lbnQpIGNyZWF0ZXMgYSBoeXBlcmxpbmsgdG8gb3RoZXIgd2ViIHBhZ2VzLCBmaWxlcywgbG9jYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBwYWdlLCBlbWFpbCBhZGRyZXNzZXMsIG9yIGFueSBvdGhlciBVUkwuIiksIFtgPGZvcm0+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0gIlRoZSBIVE1MIDxmb3JtPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkb2N1bWVudCBzZWN0aW9uIHRoYXQgY29udGFpbnMgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHN1Ym1pdHRpbmcgaW5mb3JtYXRpb24gdG8gYSB3ZWIgc2VydmVyLiIpLCBvciBbYDxiYXNlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9iYXNlICJUaGUgSFRNTCA8YmFzZT4gZWxlbWVudCBzcGVjaWZpZXMgdGhlIGJhc2UgVVJMIHRvIHVzZSBmb3IgYWxsIHJlbGF0aXZlIFVSTHMgY29udGFpbmVkIHdpdGhpbiBhIGRvY3VtZW50LiBUaGVyZSBjYW4gYmUgb25seSBvbmUgPGJhc2U+IGVsZW1lbnQgaW4gYSBkb2N1bWVudC4iKSBlbGVtZW50czsgdGhlIGBmb3JtdGFyZ2V0YCBhdHRyaWJ1dGUgb2YgdGhlIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIG9yIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBlbGVtZW50czsgb3IgdGhlIGB3aW5kb3dOYW1lYCBwYXJhbWV0ZXIgaW4gdGhlIFtgd2luZG93Lm9wZW4oKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvb3BlbiAiVGhlwqBXaW5kb3cgaW50ZXJmYWNlXCdzIG9wZW4oKSBtZXRob2QgbG9hZHMgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpbnRvIHRoZSBicm93c2luZyBjb250ZXh0ICh3aW5kb3csIDxpZnJhbWU+IG9yIHRhYikgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuIElmIHRoZSBuYW1lIGRvZXNuXCd0IGV4aXN0LCB0aGVuIGEgbmV3IHdpbmRvdyBpcyBvcGVuZWQgYW5kIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgaXMgbG9hZGVkIGludG8gaXRzIGJyb3dzaW5nIGNvbnRleHQuIikgbWV0aG9kLid9fSx7bmFtZToic2FuZGJveCIsdmFsdWVTZXQ6InNiIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBcHBsaWVzIGV4dHJhIHJlc3RyaWN0aW9ucyB0byB0aGUgY29udGVudCBpbiB0aGUgZnJhbWUuIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGNhbiBlaXRoZXIgYmUgZW1wdHkgdG8gYXBwbHkgYWxsIHJlc3RyaWN0aW9ucywgb3Igc3BhY2Utc2VwYXJhdGVkIHRva2VucyB0byBsaWZ0IHBhcnRpY3VsYXIgcmVzdHJpY3Rpb25zOlxuXG4qICAgYGFsbG93LWZvcm1zYDogQWxsb3dzIHRoZSByZXNvdXJjZSB0byBzdWJtaXQgZm9ybXMuIElmIHRoaXMga2V5d29yZCBpcyBub3QgdXNlZCwgZm9ybSBzdWJtaXNzaW9uIGlzIGJsb2NrZWQuXG4qICAgYGFsbG93LW1vZGFsc2A6IExldHMgdGhlIHJlc291cmNlIFtvcGVuIG1vZGFsIHdpbmRvd3NdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbmRib3hlZC1tb2RhbHMtZmxhZykuXG4qICAgYGFsbG93LW9yaWVudGF0aW9uLWxvY2tgOiBMZXRzIHRoZSByZXNvdXJjZSBbbG9jayB0aGUgc2NyZWVuIG9yaWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2NyZWVuL2xvY2tPcmllbnRhdGlvbikuXG4qICAgYGFsbG93LXBvaW50ZXItbG9ja2A6IExldHMgdGhlIHJlc291cmNlIHVzZSB0aGUgW1BvaW50ZXIgTG9jayBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViQVBJL1BvaW50ZXJfTG9jaykuXG4qICAgYGFsbG93LXBvcHVwc2A6IEFsbG93cyBwb3B1cHMgKHN1Y2ggYXMgYHdpbmRvdy5vcGVuKClgLCBgdGFyZ2V0PSJfYmxhbmsiYCwgb3IgYHNob3dNb2RhbERpYWxvZygpYCkuIElmIHRoaXMga2V5d29yZCBpcyBub3QgdXNlZCwgdGhlIHBvcHVwIHdpbGwgc2lsZW50bHkgZmFpbCB0byBvcGVuLlxuKiAgIGBhbGxvdy1wb3B1cHMtdG8tZXNjYXBlLXNhbmRib3hgOiBMZXRzIHRoZSBzYW5kYm94ZWQgZG9jdW1lbnQgb3BlbiBuZXcgd2luZG93cyB3aXRob3V0IHRob3NlIHdpbmRvd3MgaW5oZXJpdGluZyB0aGUgc2FuZGJveGluZy4gRm9yIGV4YW1wbGUsIHRoaXMgY2FuIHNhZmVseSBzYW5kYm94IGFuIGFkdmVydGlzZW1lbnQgd2l0aG91dCBmb3JjaW5nIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyB1cG9uIHRoZSBwYWdlIHRoZSBhZCBsaW5rcyB0by5cbiogICBgYWxsb3ctcHJlc2VudGF0aW9uYDogTGV0cyB0aGUgcmVzb3VyY2Ugc3RhcnQgYSBbcHJlc2VudGF0aW9uIHNlc3Npb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9QcmVzZW50YXRpb25SZXF1ZXN0KS5cbiogICBgYWxsb3ctc2FtZS1vcmlnaW5gOiBJZiB0aGlzIHRva2VuIGlzIG5vdCB1c2VkLCB0aGUgcmVzb3VyY2UgaXMgdHJlYXRlZCBhcyBiZWluZyBmcm9tIGEgc3BlY2lhbCBvcmlnaW4gdGhhdCBhbHdheXMgZmFpbHMgdGhlIFtzYW1lLW9yaWdpbiBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvc2FtZS1vcmlnaW5fcG9saWN5ICJzYW1lLW9yaWdpbiBwb2xpY3k6IFRoZSBzYW1lLW9yaWdpbiBwb2xpY3kgaXMgYSBjcml0aWNhbCBzZWN1cml0eSBtZWNoYW5pc20gdGhhdCByZXN0cmljdHMgaG93IGEgZG9jdW1lbnQgb3Igc2NyaXB0IGxvYWRlZCBmcm9tIG9uZSBvcmlnaW4gY2FuIGludGVyYWN0IHdpdGggYSByZXNvdXJjZSBmcm9tIGFub3RoZXIgb3JpZ2luLiIpLlxuKiAgIGBhbGxvdy1zY3JpcHRzYDogTGV0cyB0aGUgcmVzb3VyY2UgcnVuIHNjcmlwdHMgKGJ1dCBub3QgY3JlYXRlIHBvcHVwIHdpbmRvd3MpLlxuKiAgIGBhbGxvdy1zdG9yYWdlLWFjY2Vzcy1ieS11c2VyLWFjdGl2YXRpb25gIDogTGV0cyB0aGUgcmVzb3VyY2UgcmVxdWVzdCBhY2Nlc3MgdG8gdGhlIHBhcmVudFwncyBzdG9yYWdlIGNhcGFiaWxpdGllcyB3aXRoIHRoZSBbU3RvcmFnZSBBY2Nlc3MgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3RvcmFnZV9BY2Nlc3NfQVBJKS5cbiogICBgYWxsb3ctdG9wLW5hdmlnYXRpb25gOiBMZXRzIHRoZSByZXNvdXJjZSBuYXZpZ2F0ZSB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKHRoZSBvbmUgbmFtZWQgYF90b3BgKS5cbiogICBgYWxsb3ctdG9wLW5hdmlnYXRpb24tYnktdXNlci1hY3RpdmF0aW9uYDogTGV0cyB0aGUgcmVzb3VyY2UgbmF2aWdhdGUgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0LCBidXQgb25seSBpZiBpbml0aWF0ZWQgYnkgYSB1c2VyIGdlc3R1cmUuXG5cbioqTm90ZXMgYWJvdXQgc2FuZGJveGluZzoqKlxuXG4qICAgV2hlbiB0aGUgZW1iZWRkZWQgZG9jdW1lbnQgaGFzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgZW1iZWRkaW5nIHBhZ2UsIGl0IGlzICoqc3Ryb25nbHkgZGlzY291cmFnZWQqKiB0byB1c2UgYm90aCBgYWxsb3ctc2NyaXB0c2AgYW5kIGBhbGxvdy1zYW1lLW9yaWdpbmAsIGFzIHRoYXQgbGV0cyB0aGUgZW1iZWRkZWQgZG9jdW1lbnQgcmVtb3ZlIHRoZSBgc2FuZGJveGAgYXR0cmlidXRlIOKAlCBtYWtpbmcgaXQgbm8gbW9yZSBzZWN1cmUgdGhhbiBub3QgdXNpbmcgdGhlIGBzYW5kYm94YCBhdHRyaWJ1dGUgYXQgYWxsLlxuKiAgIFNhbmRib3hpbmcgaXMgdXNlbGVzcyBpZiB0aGUgYXR0YWNrZXIgY2FuIGRpc3BsYXkgY29udGVudCBvdXRzaWRlIGEgc2FuZGJveGVkIGBpZnJhbWVgIOKAlCBzdWNoIGFzIGlmIHRoZSB2aWV3ZXIgb3BlbnMgdGhlIGZyYW1lIGluIGEgbmV3IHRhYi4gU3VjaCBjb250ZW50IHNob3VsZCBiZSBhbHNvIHNlcnZlZCBmcm9tIGEgX3NlcGFyYXRlIG9yaWdpbl8gdG8gbGltaXQgcG90ZW50aWFsIGRhbWFnZS5cbiogICBUaGUgYHNhbmRib3hgIGF0dHJpYnV0ZSBpcyB1bnN1cHBvcnRlZCBpbiBJbnRlcm5ldCBFeHBsb3JlciA5IGFuZCBlYXJsaWVyLid9fSx7bmFtZToic2VhbWxlc3MiLHZhbHVlU2V0OiJ2In0se25hbWU6ImFsbG93ZnVsbHNjcmVlbiIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1NldCB0byBgdHJ1ZWAgaWYgdGhlIGA8aWZyYW1lPmAgY2FuIGFjdGl2YXRlIGZ1bGxzY3JlZW4gbW9kZSBieSBjYWxsaW5nIHRoZSBbYHJlcXVlc3RGdWxsc2NyZWVuKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9yZXF1ZXN0RnVsbHNjcmVlbiAiVGhlIEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKSBtZXRob2QgaXNzdWVzIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IHRvIG1ha2UgdGhlIGVsZW1lbnQgYmUgZGlzcGxheWVkIGluIGZ1bGwtc2NyZWVuIG1vZGUuIikgbWV0aG9kLid9fSx7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB3aWR0aCBvZiB0aGUgZnJhbWUgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdCBpcyBgMzAwYC4ifX0se25hbWU6ImhlaWdodCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhlaWdodCBvZiB0aGUgZnJhbWUgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdCBpcyBgMTUwYC4ifX0se25hbWU6ImFsbG93IixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIGEgW2ZlYXR1cmUgcG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0ZlYXR1cmVfUG9saWN5KSBmb3IgdGhlIGA8aWZyYW1lPmAuIn0se25hbWU6ImFsbG93cGF5bWVudHJlcXVlc3QiLGRlc2NyaXB0aW9uOiJTZXQgdG8gYHRydWVgIGlmIGEgY3Jvc3Mtb3JpZ2luIGA8aWZyYW1lPmAgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaW52b2tlIHRoZSBbUGF5bWVudCBSZXF1ZXN0IEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BheW1lbnRfUmVxdWVzdF9BUEkpLiJ9LHtuYW1lOiJhbGxvd3BheW1lbnRyZXF1ZXN0IixkZXNjcmlwdGlvbjonVGhpcyBhdHRyaWJ1dGUgaXMgY29uc2lkZXJlZCBhIGxlZ2FjeSBhdHRyaWJ1dGUgYW5kIHJlZGVmaW5lZCBhcyBgYWxsb3c9InBheW1lbnQiYC4nfSx7bmFtZToiY3NwIixkZXNjcmlwdGlvbjonQSBbQ29udGVudCBTZWN1cml0eSBQb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQ1NQKSBlbmZvcmNlZCBmb3IgdGhlIGVtYmVkZGVkIHJlc291cmNlLiBTZWUgW2BIVE1MSUZyYW1lRWxlbWVudC5jc3BgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTElGcmFtZUVsZW1lbnQvY3NwICJUaGUgY3NwIHByb3BlcnR5IG9mIHRoZSBIVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2Ugc3BlY2lmaWVzIHRoZSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0aGF0IGFuIGVtYmVkZGVkIGRvY3VtZW50IG11c3QgYWdyZWUgdG8gZW5mb3JjZSB1cG9uIGl0c2VsZi4iKSBmb3IgZGV0YWlscy4nfSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246YFRoZSBkb3dubG9hZCBwcmlvcml0eSBvZiB0aGUgcmVzb3VyY2UgaW4gdGhlIFxgPGlmcmFtZT5cYCdzIFxgc3JjXGAgYXR0cmlidXRlLiBBbGxvd2VkIHZhbHVlczoKClxgYXV0b1xgIChkZWZhdWx0KQoKTm8gcHJlZmVyZW5jZS4gVGhlIGJyb3dzZXIgdXNlcyBpdHMgb3duIGhldXJpc3RpY3MgdG8gZGVjaWRlIHRoZSBwcmlvcml0eSBvZiB0aGUgcmVzb3VyY2UuCgpcYGhpZ2hcYAoKVGhlIHJlc291cmNlIHNob3VsZCBiZSBkb3dubG9hZGVkIGJlZm9yZSBvdGhlciBsb3dlci1wcmlvcml0eSBwYWdlIHJlc291cmNlcy4KClxgbG93XGAKClRoZSByZXNvdXJjZSBzaG91bGQgYmUgZG93bmxvYWRlZCBhZnRlciBvdGhlciBoaWdoZXItcHJpb3JpdHkgcGFnZSByZXNvdXJjZXMuYH0se25hbWU6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjonSW5kaWNhdGVzIHdoaWNoIFtyZWZlcnJlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlZmVycmVyKSB0byBzZW5kIHdoZW4gZmV0Y2hpbmcgdGhlIGZyYW1lXCdzIHJlc291cmNlOlxuXG4qICAgYG5vLXJlZmVycmVyYDogVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZWAgKGRlZmF1bHQpOiBUaGUgW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQgdG8gW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9vcmlnaW4gIm9yaWdpbjogV2ViIGNvbnRlbnRcJ3Mgb3JpZ2luIGlzIGRlZmluZWQgYnkgdGhlIHNjaGVtZSAocHJvdG9jb2wpLCBob3N0IChkb21haW4pLCBhbmQgcG9ydCBvZiB0aGUgVVJMIHVzZWQgdG8gYWNjZXNzIGl0LiBUd28gb2JqZWN0cyBoYXZlIHRoZSBzYW1lIG9yaWdpbiBvbmx5IHdoZW4gdGhlIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgYWxsIG1hdGNoLiIpcyB3aXRob3V0IFtUTFNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvVExTICJUTFM6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSwgcHJldmlvdXNseSBrbm93biBhcyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSwgaXMgYSBwcm90b2NvbCB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0byBjb21tdW5pY2F0ZSBzZWN1cmVseSBhY3Jvc3MgYSBuZXR3b3JrLCBwcmV2ZW50aW5nIHRhbXBlcmluZyB3aXRoIGFuZCBlYXZlc2Ryb3BwaW5nIG9uIGVtYWlsLCB3ZWIgYnJvd3NpbmcsIG1lc3NhZ2luZywgYW5kIG90aGVyIHByb3RvY29scy4iKSAoW0hUVFBTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0hUVFBTICJIVFRQUzogSFRUUFMgKEhUVFAgU2VjdXJlKSBpcyBhbiBlbmNyeXB0ZWQgdmVyc2lvbiBvZiB0aGUgSFRUUCBwcm90b2NvbC4gSXQgdXN1YWxseSB1c2VzIFNTTCBvciBUTFMgdG8gZW5jcnlwdCBhbGwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGEgY2xpZW50IGFuZCBhIHNlcnZlci4gVGhpcyBzZWN1cmUgY29ubmVjdGlvbiBhbGxvd3MgY2xpZW50cyB0byBzYWZlbHkgZXhjaGFuZ2Ugc2Vuc2l0aXZlIGRhdGEgd2l0aCBhIHNlcnZlciwgZm9yIGV4YW1wbGUgZm9yIGJhbmtpbmcgYWN0aXZpdGllcyBvciBvbmxpbmUgc2hvcHBpbmcuIikpLlxuKiAgIGBvcmlnaW5gOiBUaGUgc2VudCByZWZlcnJlciB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcmVmZXJyaW5nIHBhZ2U6IGl0cyBbc2NoZW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0FyY2hpdmUvTW96aWxsYS9VUklTY2hlbWUpLCBbaG9zdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9ob3N0ICJob3N0OiBBIGhvc3QgaXMgYSBkZXZpY2UgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCAob3IgYSBsb2NhbCBuZXR3b3JrKS4gU29tZSBob3N0cyBjYWxsZWQgc2VydmVycyBvZmZlciBhZGRpdGlvbmFsIHNlcnZpY2VzIGxpa2Ugc2VydmluZyB3ZWJwYWdlcyBvciBzdG9yaW5nIGZpbGVzIGFuZCBlbWFpbHMuIiksIGFuZCBbcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9wb3J0ICJwb3J0OiBGb3IgYSBjb21wdXRlciBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrIHdpdGggYW4gSVAgYWRkcmVzcywgYSBwb3J0IGlzIGEgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gUG9ydHMgYXJlIGRlc2lnbmF0ZWQgYnkgbnVtYmVycywgYW5kIGJlbG93IDEwMjQgZWFjaCBwb3J0IGlzIGFzc29jaWF0ZWQgYnkgZGVmYXVsdCB3aXRoIGEgc3BlY2lmaWMgcHJvdG9jb2wuIikuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmA6IFRoZSByZWZlcnJlciBzZW50IHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuIE5hdmlnYXRpb25zIG9uIHRoZSBzYW1lIG9yaWdpbiB3aWxsIHN0aWxsIGluY2x1ZGUgdGhlIHBhdGguXG4qICAgYHNhbWUtb3JpZ2luYDogQSByZWZlcnJlciB3aWxsIGJlIHNlbnQgZm9yIFtzYW1lIG9yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9TYW1lLW9yaWdpbl9wb2xpY3kgInNhbWUgb3JpZ2luOiBUaGUgc2FtZS1vcmlnaW4gcG9saWN5IGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgbWVjaGFuaXNtIHRoYXQgcmVzdHJpY3RzIGhvdyBhIGRvY3VtZW50IG9yIHNjcmlwdCBsb2FkZWQgZnJvbSBvbmUgb3JpZ2luIGNhbiBpbnRlcmFjdCB3aXRoIGEgcmVzb3VyY2UgZnJvbSBhbm90aGVyIG9yaWdpbi4iKSwgYnV0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyB3aWxsIGNvbnRhaW4gbm8gcmVmZXJyZXIgaW5mb3JtYXRpb24uXG4qICAgYHN0cmljdC1vcmlnaW5gOiBPbmx5IHNlbmQgdGhlIG9yaWdpbiBvZiB0aGUgZG9jdW1lbnQgYXMgdGhlIHJlZmVycmVyIHdoZW4gdGhlIHByb3RvY29sIHNlY3VyaXR5IGxldmVsIHN0YXlzIHRoZSBzYW1lIChIVFRQU+KGkkhUVFBTKSwgYnV0IGRvblwndCBzZW5kIGl0IHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBT4oaSSFRUUCkuXG4qICAgYHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5gOiBTZW5kIGEgZnVsbCBVUkwgd2hlbiBwZXJmb3JtaW5nIGEgc2FtZS1vcmlnaW4gcmVxdWVzdCwgb25seSBzZW5kIHRoZSBvcmlnaW4gd2hlbiB0aGUgcHJvdG9jb2wgc2VjdXJpdHkgbGV2ZWwgc3RheXMgdGhlIHNhbWUgKEhUVFBT4oaSSFRUUFMpLCBhbmQgc2VuZCBubyBoZWFkZXIgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFPihpJIVFRQKS5cbiogICBgdW5zYWZlLXVybGA6IFRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBfYW5kXyB0aGUgcGF0aCAoYnV0IG5vdCB0aGUgW2ZyYWdtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9oYXNoKSwgW3Bhc3N3b3JkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9wYXNzd29yZCksIG9yIFt1c2VybmFtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMvdXNlcm5hbWUpKS4gKipUaGlzIHZhbHVlIGlzIHVuc2FmZSoqLCBiZWNhdXNlIGl0IGxlYWtzIG9yaWdpbnMgYW5kIHBhdGhzIGZyb20gVExTLXByb3RlY3RlZCByZXNvdXJjZXMgdG8gaW5zZWN1cmUgb3JpZ2lucy4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lmcmFtZSJ9XX0se25hbWU6ImVtYmVkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZW1iZWQgZWxlbWVudCBwcm92aWRlcyBhbiBpbnRlZ3JhdGlvbiBwb2ludCBmb3IgYW4gZXh0ZXJuYWwgKHR5cGljYWxseSBub24tSFRNTCkgYXBwbGljYXRpb24gb3IgaW50ZXJhY3RpdmUgY29udGVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgVVJMwqBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZW1iZWRkZWQuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgTUlNRcKgdHlwZSB0byB1c2UgdG8gc2VsZWN0IHRoZSBwbHVnLWluIHRvIGluc3RhbnRpYXRlLiJ9fSx7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkaXNwbGF5ZWQgd2lkdGggb2YgdGhlIHJlc291cmNlLCBpbiBbQ1NTIHBpeGVsc10oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMvI3B4KS4gVGhpcyBtdXN0IGJlIGFuIGFic29sdXRlIHZhbHVlOyBwZXJjZW50YWdlcyBhcmUgX25vdF8gYWxsb3dlZC4ifX0se25hbWU6ImhlaWdodCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRpc3BsYXllZCBoZWlnaHQgb2YgdGhlIHJlc291cmNlLCBpbiBbQ1NTIHBpeGVsc10oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMvI3B4KS4gVGhpcyBtdXN0IGJlIGFuIGFic29sdXRlIHZhbHVlOyBwZXJjZW50YWdlcyBhcmUgX25vdF8gYWxsb3dlZC4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9lbWJlZCJ9XX0se25hbWU6Im9iamVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG9iamVjdCBlbGVtZW50IGNhbiByZXByZXNlbnQgYW4gZXh0ZXJuYWwgcmVzb3VyY2UsIHdoaWNoLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlLCB3aWxsIGVpdGhlciBiZSB0cmVhdGVkIGFzIGFuIGltYWdlLCBhcyBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBvciBhcyBhbiBleHRlcm5hbCByZXNvdXJjZSB0byBiZSBwcm9jZXNzZWQgYnkgYSBwbHVnaW4uIn0sYXR0cmlidXRlczpbe25hbWU6ImRhdGEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvdXJjZSBhcyBhIHZhbGlkIFVSTC4gQXQgbGVhc3Qgb25lIG9mICoqZGF0YSoqIGFuZCAqKnR5cGUqKiBtdXN0IGJlIGRlZmluZWQuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgW2NvbnRlbnQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9Db250ZW50X3R5cGUpIG9mIHRoZSByZXNvdXJjZSBzcGVjaWZpZWQgYnkgKipkYXRhKiouIEF0IGxlYXN0IG9uZSBvZiAqKmRhdGEqKiBhbmQgKip0eXBlKiogbXVzdCBiZSBkZWZpbmVkLiJ9fSx7bmFtZToidHlwZW11c3RtYXRjaCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIGlmIHRoZSAqKnR5cGUqKiBhdHRyaWJ1dGUgYW5kIHRoZSBhY3R1YWwgW2NvbnRlbnQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9Db250ZW50X3R5cGUpIG9mIHRoZSByZXNvdXJjZSBtdXN0IG1hdGNoIHRvIGJlIHVzZWQuIn19LHtuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmFtZSBvZiB2YWxpZCBicm93c2luZyBjb250ZXh0IChIVE1MNSksIG9yIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIChIVE1MIDQpLiJ9fSx7bmFtZToidXNlbWFwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGhhc2gtbmFtZSByZWZlcmVuY2UgdG8gYSBbYDxtYXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21hcCBcIlRoZSBIVE1MIDxtYXA+IGVsZW1lbnQgaXMgdXNlZCB3aXRoIDxhcmVhPiBlbGVtZW50cyB0byBkZWZpbmUgYW4gaW1hZ2UgbWFwIChhIGNsaWNrYWJsZSBsaW5rIGFyZWEpLlwiKSBlbGVtZW50OyB0aGF0IGlzIGEgJyMnIGZvbGxvd2VkIGJ5IHRoZSB2YWx1ZSBvZiBhIFtgbmFtZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tYXAjYXR0ci1uYW1lKSBvZiBhIG1hcCBlbGVtZW50LiJ9fSx7bmFtZToiZm9ybSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIGZvcm0gZWxlbWVudCwgaWYgYW55LCB0aGF0IHRoZSBvYmplY3QgZWxlbWVudCBpcyBhc3NvY2lhdGVkIHdpdGggKGl0cyBfZm9ybSBvd25lcl8pLiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIElEIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4nfX0se25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgd2lkdGggb2YgdGhlIGRpc3BsYXkgcmVzb3VyY2UsIGluIFtDU1MgcGl4ZWxzXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy8jcHgpLiAtLSAoQWJzb2x1dGUgdmFsdWVzIG9ubHkuIFtOTyBwZXJjZW50YWdlc10oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI2RpbWVuc2lvbi1hdHRyaWJ1dGVzKSkifX0se25hbWU6ImhlaWdodCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhlaWdodCBvZiB0aGUgZGlzcGxheWVkIHJlc291cmNlLCBpbiBbQ1NTIHBpeGVsc10oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMvI3B4KS4gLS0gKEFic29sdXRlIHZhbHVlcyBvbmx5LiBbTk8gcGVyY2VudGFnZXNdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCNkaW1lbnNpb24tYXR0cmlidXRlcykpIn19LHtuYW1lOiJhcmNoaXZlIixkZXNjcmlwdGlvbjoiQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVUklzIGZvciBhcmNoaXZlcyBvZiByZXNvdXJjZXMgZm9yIHRoZSBvYmplY3QuIn0se25hbWU6ImJvcmRlciIsZGVzY3JpcHRpb246IlRoZSB3aWR0aCBvZiBhIGJvcmRlciBhcm91bmQgdGhlIGNvbnRyb2wsIGluIHBpeGVscy4ifSx7bmFtZToiY2xhc3NpZCIsZGVzY3JpcHRpb246IlRoZSBVUkkgb2YgdGhlIG9iamVjdCdzIGltcGxlbWVudGF0aW9uLiBJdCBjYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoLCBvciBpbiBwbGFjZSBvZiwgdGhlICoqZGF0YSoqIGF0dHJpYnV0ZS4ifSx7bmFtZToiY29kZWJhc2UiLGRlc2NyaXB0aW9uOiJUaGUgYmFzZSBwYXRoIHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBVUklzIHNwZWNpZmllZCBieSAqKmNsYXNzaWQqKiwgKipkYXRhKiosIG9yICoqYXJjaGl2ZSoqLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyB0aGUgYmFzZSBVUkkgb2YgdGhlIGN1cnJlbnQgZG9jdW1lbnQuIn0se25hbWU6ImNvZGV0eXBlIixkZXNjcmlwdGlvbjoiVGhlIGNvbnRlbnQgdHlwZSBvZiB0aGUgZGF0YSBzcGVjaWZpZWQgYnkgKipjbGFzc2lkKiouIn0se25hbWU6ImRlY2xhcmUiLGRlc2NyaXB0aW9uOiJUaGUgcHJlc2VuY2Ugb2YgdGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBtYWtlcyB0aGlzIGVsZW1lbnQgYSBkZWNsYXJhdGlvbiBvbmx5LiBUaGUgb2JqZWN0IG11c3QgYmUgaW5zdGFudGlhdGVkIGJ5IGEgc3Vic2VxdWVudCBgPG9iamVjdD5gIGVsZW1lbnQuIEluIEhUTUw1LCByZXBlYXQgdGhlIDxvYmplY3Q+IGVsZW1lbnQgY29tcGxldGVseSBlYWNoIHRoYXQgdGhhdCB0aGUgcmVzb3VyY2UgaXMgcmV1c2VkLiJ9LHtuYW1lOiJzdGFuZGJ5IixkZXNjcmlwdGlvbjoiQSBtZXNzYWdlIHRoYXQgdGhlIGJyb3dzZXIgY2FuIHNob3cgd2hpbGUgbG9hZGluZyB0aGUgb2JqZWN0J3MgaW1wbGVtZW50YXRpb24gYW5kIGRhdGEuIn0se25hbWU6InRhYmluZGV4IixkZXNjcmlwdGlvbjoiVGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSB0YWJiaW5nIG5hdmlnYXRpb24gb3JkZXIgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50LiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2JqZWN0In1dfSx7bmFtZToicGFyYW0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwYXJhbSBlbGVtZW50IGRlZmluZXMgcGFyYW1ldGVycyBmb3IgcGx1Z2lucyBpbnZva2VkIGJ5IG9iamVjdCBlbGVtZW50cy4gSXQgZG9lcyBub3QgcmVwcmVzZW50IGFueXRoaW5nIG9uIGl0cyBvd24uIn0sYXR0cmlidXRlczpbe25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6Ik5hbWUgb2YgdGhlIHBhcmFtZXRlci4ifX0se25hbWU6InZhbHVlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJTcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjonT25seSB1c2VkIGlmIHRoZSBgdmFsdWV0eXBlYCBpcyBzZXQgdG8gInJlZiIuIFNwZWNpZmllcyB0aGUgTUlNRSB0eXBlIG9mIHZhbHVlcyBmb3VuZCBhdCB0aGUgVVJJIHNwZWNpZmllZCBieSB2YWx1ZS4nfSx7bmFtZToidmFsdWV0eXBlIixkZXNjcmlwdGlvbjpgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBcYHZhbHVlXGAgYXR0cmlidXRlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgoKKiAgIGRhdGE6IERlZmF1bHQgdmFsdWUuIFRoZSB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhlIG9iamVjdCdzIGltcGxlbWVudGF0aW9uIGFzIGEgc3RyaW5nLgoqICAgcmVmOiBUaGUgdmFsdWUgaXMgYSBVUkkgdG8gYSByZXNvdXJjZSB3aGVyZSBydW4tdGltZSB2YWx1ZXMgYXJlIHN0b3JlZC4KKiAgIG9iamVjdDogQW4gSUQgb2YgYW5vdGhlciBbXGA8b2JqZWN0PlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2JqZWN0ICJUaGUgSFRNTCA8b2JqZWN0PiBlbGVtZW50IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgcmVzb3VyY2UsIHdoaWNoIGNhbiBiZSB0cmVhdGVkIGFzIGFuIGltYWdlLCBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBvciBhIHJlc291cmNlIHRvIGJlIGhhbmRsZWQgYnkgYSBwbHVnaW4uIikgaW4gdGhlIHNhbWUgZG9jdW1lbnQuYH1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9wYXJhbSJ9XX0se25hbWU6InZpZGVvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHZpZGVvIGVsZW1lbnQgaXMgdXNlZCBmb3IgcGxheWluZyB2aWRlb3Mgb3IgbW92aWVzLCBhbmQgYXVkaW8gZmlsZXMgd2l0aCBjYXB0aW9ucy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIn0se25hbWU6ImNyb3Nzb3JpZ2luIix2YWx1ZVNldDoieG8ifSx7bmFtZToicG9zdGVyIn0se25hbWU6InByZWxvYWQiLHZhbHVlU2V0OiJwbCJ9LHtuYW1lOiJhdXRvcGxheSIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGU7IGlmIHNwZWNpZmllZCwgdGhlIHZpZGVvIGF1dG9tYXRpY2FsbHkgYmVnaW5zIHRvIHBsYXkgYmFjayBhcyBzb29uIGFzIGl0IGNhbiBkbyBzbyB3aXRob3V0IHN0b3BwaW5nIHRvIGZpbmlzaCBsb2FkaW5nIHRoZSBkYXRhLiJ9fSx7bmFtZToibWVkaWFncm91cCJ9LHtuYW1lOiJsb29wIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJtdXRlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiY29udHJvbHMiLHZhbHVlU2V0OiJ2In0se25hbWU6IndpZHRoIn0se25hbWU6ImhlaWdodCJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmlkZW8ifV19LHtuYW1lOiJhdWRpbyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gYXVkaW8gZWxlbWVudCByZXByZXNlbnRzIGEgc291bmQgb3IgYXVkaW8gc3RyZWFtLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBVUkwgb2YgdGhlIGF1ZGlvIHRvIGVtYmVkLiBUaGlzIGlzIHN1YmplY3QgdG8gW0hUVFAgYWNjZXNzIGNvbnRyb2xzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0hUVFBfYWNjZXNzX2NvbnRyb2wpLiBUaGlzIGlzIG9wdGlvbmFsOyB5b3UgbWF5IGluc3RlYWQgdXNlIHRoZSBbYDxzb3VyY2U+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NvdXJjZSAiVGhlIEhUTUwgPHNvdXJjZT4gZWxlbWVudCBzcGVjaWZpZXMgbXVsdGlwbGUgbWVkaWEgcmVzb3VyY2VzIGZvciB0aGUgPHBpY3R1cmU+LCB0aGUgPGF1ZGlvPiBlbGVtZW50LCBvciB0aGUgPHZpZGVvPiBlbGVtZW50LiIpIGVsZW1lbnQgd2l0aGluIHRoZSBhdWRpbyBibG9jayB0byBzcGVjaWZ5IHRoZSBhdWRpbyB0byBlbWJlZC4nfX0se25hbWU6ImNyb3Nzb3JpZ2luIix2YWx1ZVNldDoieG8iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIENPUlMgdG8gZmV0Y2ggdGhlIHJlbGF0ZWQgaW1hZ2UuIFtDT1JTLWVuYWJsZWQgcmVzb3VyY2VzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NPUlNfRW5hYmxlZF9JbWFnZSkgY2FuIGJlIHJldXNlZCBpbiB0aGUgW2A8Y2FudmFzPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMgIlVzZSB0aGUgSFRNTCA8Y2FudmFzPiBlbGVtZW50IHdpdGggZWl0aGVyIHRoZSBjYW52YXMgc2NyaXB0aW5nIEFQSSBvciB0aGUgV2ViR0wgQVBJIHRvIGRyYXcgZ3JhcGhpY3MgYW5kIGFuaW1hdGlvbnMuIikgZWxlbWVudCB3aXRob3V0IGJlaW5nIF90YWludGVkXy4gVGhlIGFsbG93ZWQgdmFsdWVzIGFyZTpcblxuYW5vbnltb3VzXG5cblNlbmRzIGEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3Qgd2l0aG91dCBhIGNyZWRlbnRpYWwuIEluIG90aGVyIHdvcmRzLCBpdCBzZW5kcyB0aGUgYE9yaWdpbjpgIEhUVFAgaGVhZGVyIHdpdGhvdXQgYSBjb29raWUsIFguNTA5IGNlcnRpZmljYXRlLCBvciBwZXJmb3JtaW5nIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24uIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgZ2l2ZSBjcmVkZW50aWFscyB0byB0aGUgb3JpZ2luIHNpdGUgKGJ5IG5vdCBzZXR0aW5nIHRoZSBgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOmAgSFRUUCBoZWFkZXIpLCB0aGUgaW1hZ2Ugd2lsbCBiZSBfdGFpbnRlZF8sIGFuZCBpdHMgdXNhZ2UgcmVzdHJpY3RlZC5cblxudXNlLWNyZWRlbnRpYWxzXG5cblNlbmRzIGEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3Qgd2l0aCBhIGNyZWRlbnRpYWwuIEluIG90aGVyIHdvcmRzLCBpdCBzZW5kcyB0aGUgYE9yaWdpbjpgIEhUVFAgaGVhZGVyIHdpdGggYSBjb29raWUsIGEgY2VydGlmaWNhdGUsIG9yIHBlcmZvcm1pbmcgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbi4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBnaXZlIGNyZWRlbnRpYWxzIHRvIHRoZSBvcmlnaW4gc2l0ZSAodGhyb3VnaCBgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHM6YCBIVFRQIGhlYWRlciksIHRoZSBpbWFnZSB3aWxsIGJlIF90YWludGVkXyBhbmQgaXRzIHVzYWdlIHJlc3RyaWN0ZWQuXG5cbldoZW4gbm90IHByZXNlbnQsIHRoZSByZXNvdXJjZSBpcyBmZXRjaGVkIHdpdGhvdXQgYSBDT1JTIHJlcXVlc3QgKGkuZS4gd2l0aG91dCBzZW5kaW5nIHRoZSBgT3JpZ2luOmAgSFRUUCBoZWFkZXIpLCBwcmV2ZW50aW5nIGl0cyBub24tdGFpbnRlZCB1c2VkIGluIFtgPGNhbnZhcz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FudmFzICJVc2UgdGhlIEhUTUwgPGNhbnZhcz4gZWxlbWVudCB3aXRoIGVpdGhlciB0aGUgY2FudmFzIHNjcmlwdGluZyBBUEkgb3IgdGhlIFdlYkdMIEFQSSB0byBkcmF3IGdyYXBoaWNzIGFuZCBhbmltYXRpb25zLiIpIGVsZW1lbnRzLiBJZiBpbnZhbGlkLCBpdCBpcyBoYW5kbGVkIGFzIGlmIHRoZSBlbnVtZXJhdGVkIGtleXdvcmQgKiphbm9ueW1vdXMqKiB3YXMgdXNlZC4gU2VlIFtDT1JTIHNldHRpbmdzIGF0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLid9fSx7bmFtZToicHJlbG9hZCIsdmFsdWVTZXQ6InBsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgYSBoaW50IHRvIHRoZSBicm93c2VyIGFib3V0IHdoYXQgdGhlIGF1dGhvciB0aGlua3Mgd2lsbCBsZWFkIHRvIHRoZSBiZXN0IHVzZXIgZXhwZXJpZW5jZS4gSXQgbWF5IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYG5vbmVgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgYXVkaW8gc2hvdWxkIG5vdCBiZSBwcmVsb2FkZWQuXG4qICAgYG1ldGFkYXRhYDogSW5kaWNhdGVzIHRoYXQgb25seSBhdWRpbyBtZXRhZGF0YSAoZS5nLiBsZW5ndGgpIGlzIGZldGNoZWQuXG4qICAgYGF1dG9gOiBJbmRpY2F0ZXMgdGhhdCB0aGUgd2hvbGUgYXVkaW8gZmlsZSBjYW4gYmUgZG93bmxvYWRlZCwgZXZlbiBpZiB0aGUgdXNlciBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIGl0LlxuKiAgIF9lbXB0eSBzdHJpbmdfOiBBIHN5bm9ueW0gb2YgdGhlIGBhdXRvYCB2YWx1ZS5cblxuSWYgbm90IHNldCwgYHByZWxvYWRgJ3MgZGVmYXVsdCB2YWx1ZSBpcyBicm93c2VyLWRlZmluZWQgKGkuZS4gZWFjaCBicm93c2VyIG1heSBoYXZlIGl0cyBvd24gZGVmYXVsdCB2YWx1ZSkuIFRoZSBzcGVjIGFkdmlzZXMgaXQgdG8gYmUgc2V0IHRvIGBtZXRhZGF0YWAuXG5cbioqVXNhZ2Ugbm90ZXM6KipcblxuKiAgIFRoZSBgYXV0b3BsYXlgIGF0dHJpYnV0ZSBoYXMgcHJlY2VkZW5jZSBvdmVywqBgcHJlbG9hZGAuIElmIGBhdXRvcGxheWAgaXMgc3BlY2lmaWVkLCB0aGUgYnJvd3NlciB3b3VsZCBvYnZpb3VzbHkgbmVlZCB0byBzdGFydCBkb3dubG9hZGluZyB0aGUgYXVkaW8gZm9yIHBsYXliYWNrLlxuKiAgIFRoZSBicm93c2VyIGlzIG5vdCBmb3JjZWQgYnkgdGhlIHNwZWNpZmljYXRpb24gdG8gZm9sbG93IHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZTsgaXQgaXMgYSBtZXJlIGhpbnQuIn19LHtuYW1lOiJhdXRvcGxheSIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6YEEgQm9vbGVhbiBhdHRyaWJ1dGU6wqBpZiBzcGVjaWZpZWQsIHRoZSBhdWRpbyB3aWxsIGF1dG9tYXRpY2FsbHkgYmVnaW4gcGxheWJhY2sgYXMgc29vbiBhcyBpdCBjYW4gZG8gc28sIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGVudGlyZSBhdWRpbyBmaWxlIHRvIGZpbmlzaCBkb3dubG9hZGluZy4KCioqTm90ZSoqOiBTaXRlcyB0aGF0IGF1dG9tYXRpY2FsbHkgcGxheSBhdWRpbyAob3IgdmlkZW9zIHdpdGggYW4gYXVkaW8gdHJhY2spIGNhbiBiZSBhbiB1bnBsZWFzYW50IGV4cGVyaWVuY2UgZm9yIHVzZXJzLCBzbyBzaG91bGQgYmUgYXZvaWRlZCB3aGVuIHBvc3NpYmxlLiBJZiB5b3UgbXVzdCBvZmZlciBhdXRvcGxheSBmdW5jdGlvbmFsaXR5LCB5b3Ugc2hvdWxkIG1ha2UgaXQgb3B0LWluIChyZXF1aXJpbmcgYSB1c2VyIHRvIHNwZWNpZmljYWxseSBlbmFibGUgaXQpLiBIb3dldmVyLCB0aGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBjcmVhdGluZyBtZWRpYSBlbGVtZW50cyB3aG9zZSBzb3VyY2Ugd2lsbCBiZSBzZXQgYXQgYSBsYXRlciB0aW1lLCB1bmRlciB1c2VyIGNvbnRyb2wuYH19LHtuYW1lOiJtZWRpYWdyb3VwIn0se25hbWU6Imxvb3AiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIEJvb2xlYW4gYXR0cmlidXRlOsKgaWYgc3BlY2lmaWVkLCB0aGUgYXVkaW8gcGxheWVyIHdpbGzCoGF1dG9tYXRpY2FsbHkgc2VlayBiYWNrIHRvIHRoZSBzdGFydMKgdXBvbiByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBhdWRpby4ifX0se25hbWU6Im11dGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBhdWRpbyB3aWxsIGJlIGluaXRpYWxseSBzaWxlbmNlZC4gSXRzIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC4ifX0se25hbWU6ImNvbnRyb2xzIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhpcyBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIGJyb3dzZXIgd2lsbCBvZmZlciBjb250cm9scyB0byBhbGxvdyB0aGUgdXNlciB0byBjb250cm9sIGF1ZGlvIHBsYXliYWNrLCBpbmNsdWRpbmcgdm9sdW1lLCBzZWVraW5nLCBhbmQgcGF1c2UvcmVzdW1lIHBsYXliYWNrLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2F1ZGlvIn1dfSx7bmFtZToic291cmNlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc291cmNlIGVsZW1lbnQgYWxsb3dzIGF1dGhvcnMgdG8gc3BlY2lmeSBtdWx0aXBsZSBhbHRlcm5hdGl2ZSBtZWRpYSByZXNvdXJjZXMgZm9yIG1lZGlhIGVsZW1lbnRzLiBJdCBkb2VzIG5vdCByZXByZXNlbnQgYW55dGhpbmcgb24gaXRzIG93bi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidSZXF1aXJlZCBmb3IgW2A8YXVkaW8+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2F1ZGlvICJUaGUgSFRNTCA8YXVkaW8+IGVsZW1lbnQgaXMgdXNlZCB0byBlbWJlZCBzb3VuZCBjb250ZW50IGluIGRvY3VtZW50cy4gSXQgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgYXVkaW8gc291cmNlcywgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIHNyYyBhdHRyaWJ1dGUgb3IgdGhlIDxzb3VyY2U+IGVsZW1lbnQ6wqB0aGUgYnJvd3NlciB3aWxsIGNob29zZSB0aGUgbW9zdCBzdWl0YWJsZSBvbmUuIEl0IGNhbiBhbHNvIGJlIHRoZSBkZXN0aW5hdGlvbiBmb3Igc3RyZWFtZWQgbWVkaWEsIHVzaW5nIGEgTWVkaWFTdHJlYW0uIikgYW5kIFtgPHZpZGVvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC92aWRlbyAiVGhlIEhUTUwgVmlkZW8gZWxlbWVudCAoPHZpZGVvPikgZW1iZWRzIGEgbWVkaWEgcGxheWVyIHdoaWNoIHN1cHBvcnRzIHZpZGVvIHBsYXliYWNrIGludG8gdGhlIGRvY3VtZW50LiIpLCBhZGRyZXNzIG9mIHRoZSBtZWRpYSByZXNvdXJjZS4gVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzIGlnbm9yZWQgd2hlbiB0aGUgYDxzb3VyY2U+YCBlbGVtZW50IGlzIHBsYWNlZCBpbnNpZGUgYSBbYDxwaWN0dXJlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9waWN0dXJlICJUaGUgSFRNTCA8cGljdHVyZT4gZWxlbWVudCBjb250YWlucyB6ZXJvIG9yIG1vcmUgPHNvdXJjZT4gZWxlbWVudHMgYW5kIG9uZSA8aW1nPiBlbGVtZW50IHRvIHByb3ZpZGUgdmVyc2lvbnMgb2YgYW4gaW1hZ2UgZm9yIGRpZmZlcmVudCBkaXNwbGF5L2RldmljZSBzY2VuYXJpb3MuIikgZWxlbWVudC4nfX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBNSU1FLXR5cGUgb2YgdGhlIHJlc291cmNlLCBvcHRpb25hbGx5IHdpdGggYSBgY29kZWNzYCBwYXJhbWV0ZXIuIFNlZSBbUkZDIDQyODFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MjgxKSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHNwZWNpZnkgY29kZWNzLiJ9fSx7bmFtZToic2l6ZXMiLGRlc2NyaXB0aW9uOidJcyBhIGxpc3Qgb2Ygc291cmNlIHNpemVzIHRoYXQgZGVzY3JpYmVzIHRoZSBmaW5hbCByZW5kZXJlZCB3aWR0aCBvZiB0aGUgaW1hZ2UgcmVwcmVzZW50ZWQgYnkgdGhlIHNvdXJjZS4gRWFjaCBzb3VyY2Ugc2l6ZSBjb25zaXN0cyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIGNvbmRpdGlvbi1sZW5ndGggcGFpcnMuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCBieSB0aGUgYnJvd3NlciB0byBkZXRlcm1pbmUsIGJlZm9yZSBsYXlpbmcgdGhlIHBhZ2Ugb3V0LCB3aGljaCBpbWFnZSBkZWZpbmVkIGluIFtgc3Jjc2V0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NvdXJjZSNhdHRyLXNyY3NldCkgdG8gdXNlLiAgXG5UaGUgYHNpemVzYCBhdHRyaWJ1dGUgaGFzIGFuIGVmZmVjdCBvbmx5IHdoZW4gdGhlIFtgPHNvdXJjZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlICJUaGUgSFRNTCA8c291cmNlPiBlbGVtZW50IHNwZWNpZmllcyBtdWx0aXBsZSBtZWRpYSByZXNvdXJjZXMgZm9yIHRoZSA8cGljdHVyZT4sIHRoZSA8YXVkaW8+IGVsZW1lbnQsIG9yIHRoZSA8dmlkZW8+IGVsZW1lbnQuIikgZWxlbWVudCBpcyB0aGUgZGlyZWN0IGNoaWxkIG9mIGEgW2A8cGljdHVyZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcGljdHVyZSAiVGhlIEhUTUwgPHBpY3R1cmU+IGVsZW1lbnQgY29udGFpbnMgemVybyBvciBtb3JlIDxzb3VyY2U+IGVsZW1lbnRzIGFuZCBvbmUgPGltZz4gZWxlbWVudCB0byBwcm92aWRlIHZlcnNpb25zIG9mIGFuIGltYWdlIGZvciBkaWZmZXJlbnQgZGlzcGxheS9kZXZpY2Ugc2NlbmFyaW9zLiIpIGVsZW1lbnQuJ30se25hbWU6InNyY3NldCIsZGVzY3JpcHRpb246IkEgbGlzdCBvZiBvbmUgb3IgbW9yZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMgaW5kaWNhdGluZyBhIHNldCBvZiBwb3NzaWJsZSBpbWFnZXMgcmVwcmVzZW50ZWQgYnkgdGhlIHNvdXJjZSBmb3IgdGhlIGJyb3dzZXIgdG8gdXNlLiBFYWNoIHN0cmluZyBpcyBjb21wb3NlZCBvZjpcblxuMS4gIG9uZSBVUkwgdG8gYW4gaW1hZ2UsXG4yLiAgYSB3aWR0aCBkZXNjcmlwdG9yLCB0aGF0IGlzIGEgcG9zaXRpdmUgaW50ZWdlciBkaXJlY3RseSBmb2xsb3dlZCBieSBgJ3cnYC4gVGhlIGRlZmF1bHQgdmFsdWUsIGlmIG1pc3NpbmcsIGlzIHRoZSBpbmZpbml0eS5cbjMuICBhIHBpeGVsIGRlbnNpdHkgZGVzY3JpcHRvciwgdGhhdCBpcyBhIHBvc2l0aXZlIGZsb2F0aW5nIG51bWJlciBkaXJlY3RseSBmb2xsb3dlZCBieSBgJ3gnYC4gVGhlIGRlZmF1bHQgdmFsdWUsIGlmIG1pc3NpbmcsIGlzIGAxeGAuXG5cbkVhY2ggc3RyaW5nIGluIHRoZSBsaXN0IG11c3QgaGF2ZSBhdCBsZWFzdCBhIHdpZHRoIGRlc2NyaXB0b3Igb3IgYSBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IgdG8gYmUgdmFsaWQuIEFtb25nIHRoZSBsaXN0LCB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIHN0cmluZyBjb250YWluaW5nIHRoZSBzYW1lIHR1cGxlIG9mIHdpZHRoIGRlc2NyaXB0b3IgYW5kIHBpeGVsIGRlbnNpdHkgZGVzY3JpcHRvci4gIFxuVGhlIGJyb3dzZXIgY2hvb3NlcyB0aGUgbW9zdCBhZGVxdWF0ZSBpbWFnZSB0byBkaXNwbGF5IGF0IGEgZ2l2ZW4gcG9pbnQgb2YgdGltZS4gIFxuVGhlIGBzcmNzZXRgIGF0dHJpYnV0ZSBoYXMgYW4gZWZmZWN0IG9ubHkgd2hlbiB0aGUgW2A8c291cmNlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zb3VyY2UgXCJUaGUgSFRNTCA8c291cmNlPiBlbGVtZW50IHNwZWNpZmllcyBtdWx0aXBsZSBtZWRpYSByZXNvdXJjZXMgZm9yIHRoZSA8cGljdHVyZT4sIHRoZSA8YXVkaW8+IGVsZW1lbnQsIG9yIHRoZSA8dmlkZW8+IGVsZW1lbnQuXCIpIGVsZW1lbnQgaXMgdGhlIGRpcmVjdCBjaGlsZCBvZiBhIFtgPHBpY3R1cmU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUgXCJUaGUgSFRNTCA8cGljdHVyZT4gZWxlbWVudCBjb250YWlucyB6ZXJvIG9yIG1vcmUgPHNvdXJjZT4gZWxlbWVudHMgYW5kIG9uZSA8aW1nPiBlbGVtZW50IHRvIHByb3ZpZGUgdmVyc2lvbnMgb2YgYW4gaW1hZ2UgZm9yIGRpZmZlcmVudCBkaXNwbGF5L2RldmljZSBzY2VuYXJpb3MuXCIpIGVsZW1lbnQuIn0se25hbWU6Im1lZGlhIixkZXNjcmlwdGlvbjonW01lZGlhIHF1ZXJ5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9NZWRpYV9xdWVyaWVzKSBvZiB0aGUgcmVzb3VyY2VcJ3MgaW50ZW5kZWQgbWVkaWE7IHRoaXMgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBhIFtgPHBpY3R1cmU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUgIlRoZSBIVE1MIDxwaWN0dXJlPiBlbGVtZW50IGNvbnRhaW5zIHplcm8gb3IgbW9yZSA8c291cmNlPiBlbGVtZW50cyBhbmQgb25lIDxpbWc+IGVsZW1lbnQgdG8gcHJvdmlkZSB2ZXJzaW9ucyBvZiBhbiBpbWFnZSBmb3IgZGlmZmVyZW50IGRpc3BsYXkvZGV2aWNlIHNjZW5hcmlvcy4iKSBlbGVtZW50Lid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlIn1dfSx7bmFtZToidHJhY2siLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0cmFjayBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIHNwZWNpZnkgZXhwbGljaXQgZXh0ZXJuYWwgdGltZWQgdGV4dCB0cmFja3MgZm9yIG1lZGlhIGVsZW1lbnRzLiBJdCBkb2VzIG5vdCByZXByZXNlbnQgYW55dGhpbmcgb24gaXRzIG93bi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGVmYXVsdCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB0cmFjayBzaG91bGQgYmUgZW5hYmxlZCB1bmxlc3MgdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBpbmRpY2F0ZSB0aGF0IGFub3RoZXIgdHJhY2sgaXMgbW9yZSBhcHByb3ByaWF0ZS4gVGhpcyBtYXkgb25seSBiZSB1c2VkIG9uIG9uZSBgdHJhY2tgIGVsZW1lbnQgcGVyIG1lZGlhIGVsZW1lbnQuIn19LHtuYW1lOiJraW5kIix2YWx1ZVNldDoidGsiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkhvdyB0aGUgdGV4dCB0cmFjayBpcyBtZWFudCB0byBiZSB1c2VkLiBJZiBvbWl0dGVkIHRoZSBkZWZhdWx0IGtpbmQgaXMgYHN1YnRpdGxlc2AuIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQsIGl0IHdpbGwgdXNlIHRoZSBgc3VidGl0bGVzYC4gSWYgdGhlIGF0dHJpYnV0ZSBjb250YWlucyBhbiBpbnZhbGlkIHZhbHVlLCBpdCB3aWxsIHVzZSBgbWV0YWRhdGFgLiAoVmVyc2lvbnMgb2YgQ2hyb21lIGVhcmxpZXIgdGhhbiA1MiB0cmVhdGVkIGFuIGludmFsaWQgdmFsdWUgYXMgYHN1YnRpdGxlc2AuKcKgVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBhcmUgYWxsb3dlZDpcblxuKiAgIGBzdWJ0aXRsZXNgXG4gICAgKiAgIFN1YnRpdGxlcyBwcm92aWRlIHRyYW5zbGF0aW9uIG9mIGNvbnRlbnQgdGhhdCBjYW5ub3QgYmUgdW5kZXJzdG9vZCBieSB0aGUgdmlld2VyLiBGb3IgZXhhbXBsZSBkaWFsb2d1ZSBvciB0ZXh0IHRoYXQgaXMgbm90IEVuZ2xpc2ggaW4gYW4gRW5nbGlzaCBsYW5ndWFnZSBmaWxtLlxuICAgICogICBTdWJ0aXRsZXMgbWF5IGNvbnRhaW4gYWRkaXRpb25hbCBjb250ZW50LCB1c3VhbGx5IGV4dHJhIGJhY2tncm91bmQgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlIHRoZSB0ZXh0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFN0YXIgV2FycyBmaWxtcywgb3IgdGhlIGRhdGUsIHRpbWUsIGFuZCBsb2NhdGlvbiBvZiBhIHNjZW5lLlxuKiAgIGBjYXB0aW9uc2BcbiAgICAqICAgQ2xvc2VkIGNhcHRpb25zIHByb3ZpZGUgYSB0cmFuc2NyaXB0aW9uIGFuZCBwb3NzaWJseSBhIHRyYW5zbGF0aW9uIG9mIGF1ZGlvLlxuICAgICogICBJdCBtYXkgaW5jbHVkZSBpbXBvcnRhbnQgbm9uLXZlcmJhbCBpbmZvcm1hdGlvbiBzdWNoIGFzIG11c2ljIGN1ZXMgb3Igc291bmQgZWZmZWN0cy4gSXQgbWF5IGluZGljYXRlIHRoZSBjdWUncyBzb3VyY2UgKGUuZy4gbXVzaWMsIHRleHQsIGNoYXJhY3RlcikuXG4gICAgKiAgIFN1aXRhYmxlIGZvciB1c2VycyB3aG8gYXJlIGRlYWYgb3Igd2hlbiB0aGUgc291bmQgaXMgbXV0ZWQuXG4qICAgYGRlc2NyaXB0aW9uc2BcbiAgICAqICAgVGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgdmlkZW8gY29udGVudC5cbiAgICAqICAgU3VpdGFibGUgZm9yIHVzZXJzIHdobyBhcmUgYmxpbmQgb3Igd2hlcmUgdGhlIHZpZGVvIGNhbm5vdCBiZSBzZWVuLlxuKiAgIGBjaGFwdGVyc2BcbiAgICAqICAgQ2hhcHRlciB0aXRsZXMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgd2hlbiB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHRoZSBtZWRpYSByZXNvdXJjZS5cbiogICBgbWV0YWRhdGFgXG4gICAgKiAgIFRyYWNrcyB1c2VkIGJ5IHNjcmlwdHMuIE5vdCB2aXNpYmxlIHRvIHRoZSB1c2VyLiJ9fSx7bmFtZToibGFiZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgdXNlci1yZWFkYWJsZSB0aXRsZSBvZiB0aGUgdGV4dCB0cmFjayB3aGljaCBpcyB1c2VkIGJ5IHRoZSBicm93c2VyIHdoZW4gbGlzdGluZyBhdmFpbGFibGUgdGV4dCB0cmFja3MuIn19LHtuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0FkZHJlc3Mgb2YgdGhlIHRyYWNrIChgLnZ0dGAgZmlsZSkuIE11c3QgYmUgYSB2YWxpZCBVUkwuIFRoaXMgYXR0cmlidXRlIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBpdHMgVVJMIHZhbHVlIG11c3QgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGRvY3VtZW50IOKAlCB1bmxlc3MgdGhlIFtgPGF1ZGlvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hdWRpbyAiVGhlIEhUTUwgPGF1ZGlvPiBlbGVtZW50IGlzIHVzZWQgdG8gZW1iZWQgc291bmQgY29udGVudCBpbiBkb2N1bWVudHMuIEl0IG1heSBjb250YWluIG9uZSBvciBtb3JlIGF1ZGlvIHNvdXJjZXMsIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBzcmMgYXR0cmlidXRlIG9yIHRoZSA8c291cmNlPiBlbGVtZW50OsKgdGhlIGJyb3dzZXIgd2lsbCBjaG9vc2UgdGhlIG1vc3Qgc3VpdGFibGUgb25lLiBJdCBjYW4gYWxzbyBiZSB0aGUgZGVzdGluYXRpb24gZm9yIHN0cmVhbWVkIG1lZGlhLCB1c2luZyBhIE1lZGlhU3RyZWFtLiIpIG9yIFtgPHZpZGVvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC92aWRlbyAiVGhlIEhUTUwgVmlkZW8gZWxlbWVudCAoPHZpZGVvPikgZW1iZWRzIGEgbWVkaWEgcGxheWVyIHdoaWNoIHN1cHBvcnRzIHZpZGVvIHBsYXliYWNrIGludG8gdGhlIGRvY3VtZW50LiIpIHBhcmVudCBlbGVtZW50IG9mIHRoZSBgdHJhY2tgIGVsZW1lbnQgaGFzIGEgW2Bjcm9zc29yaWdpbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQ09SU19zZXR0aW5nc19hdHRyaWJ1dGVzKSBhdHRyaWJ1dGUuJ319LHtuYW1lOiJzcmNsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJMYW5ndWFnZSBvZiB0aGUgdHJhY2sgdGV4dCBkYXRhLiBJdCBtdXN0IGJlIGEgdmFsaWQgW0JDUCA0N10oaHR0cHM6Ly9yMTJhLmdpdGh1Yi5pby9hcHAtc3VidGFncy8pIGxhbmd1YWdlIHRhZy4gSWYgdGhlIGBraW5kYCBhdHRyaWJ1dGUgaXMgc2V0IHRvwqBgc3VidGl0bGVzLGAgdGhlbiBgc3JjbGFuZ2AgbXVzdCBiZSBkZWZpbmVkLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RyYWNrIn1dfSx7bmFtZToibWFwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbWFwIGVsZW1lbnQsIGluIGNvbmp1bmN0aW9uIHdpdGggYW4gaW1nIGVsZW1lbnQgYW5kIGFueSBhcmVhIGVsZW1lbnQgZGVzY2VuZGFudHMsIGRlZmluZXMgYW4gaW1hZ2UgbWFwLiBUaGUgZWxlbWVudCByZXByZXNlbnRzIGl0cyBjaGlsZHJlbi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgYXR0cmlidXRlIGdpdmVzIHRoZSBtYXAgYSBuYW1lIHNvIHRoYXQgaXQgY2FuIGJlIHJlZmVyZW5jZWQuIFRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBwcmVzZW50IGFuZCBtdXN0IGhhdmUgYSBub24tZW1wdHkgdmFsdWUgd2l0aCBubyBzcGFjZSBjaGFyYWN0ZXJzLiBUaGUgdmFsdWUgb2YgdGhlIG5hbWUgYXR0cmlidXRlIG11c3Qgbm90IGJlIGEgY29tcGF0aWJpbGl0eS1jYXNlbGVzcyBtYXRjaCBmb3IgdGhlIHZhbHVlIG9mIHRoZSBuYW1lIGF0dHJpYnV0ZSBvZiBhbm90aGVyIG1hcCBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGUgaWQgYXR0cmlidXRlIGlzIGFsc28gc3BlY2lmaWVkLCBib3RoIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21hcCJ9XX0se25hbWU6ImFyZWEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBhcmVhIGVsZW1lbnQgcmVwcmVzZW50cyBlaXRoZXIgYSBoeXBlcmxpbmsgd2l0aCBzb21lIHRleHQgYW5kIGEgY29ycmVzcG9uZGluZyBhcmVhIG9uIGFuIGltYWdlIG1hcCwgb3IgYSBkZWFkIGFyZWEgb24gYW4gaW1hZ2UgbWFwLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbHQifSx7bmFtZToiY29vcmRzIn0se25hbWU6InNoYXBlIix2YWx1ZVNldDoic2gifSx7bmFtZToiaHJlZiJ9LHtuYW1lOiJ0YXJnZXQifSx7bmFtZToiZG93bmxvYWQifSx7bmFtZToicGluZyJ9LHtuYW1lOiJyZWwifSx7bmFtZToiaHJlZmxhbmcifSx7bmFtZToidHlwZSJ9LHtuYW1lOiJhY2Nlc3NrZXkiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgYSBrZXlib2FyZCBuYXZpZ2F0aW9uIGFjY2VsZXJhdG9yIGZvciB0aGUgZWxlbWVudC4gUHJlc3NpbmcgQUxUIG9yIGEgc2ltaWxhciBrZXkgaW4gYXNzb2NpYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBzZWxlY3RzIHRoZSBmb3JtIGNvbnRyb2wgY29ycmVsYXRlZCB3aXRoIHRoYXQga2V5IHNlcXVlbmNlLiBQYWdlIGRlc2lnbmVycyBhcmUgZm9yZXdhcm5lZCB0byBhdm9pZCBrZXkgc2VxdWVuY2VzIGFscmVhZHkgYm91bmQgdG8gYnJvd3NlcnMuIFRoaXMgYXR0cmlidXRlIGlzIGdsb2JhbCBzaW5jZSBIVE1MNS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FyZWEifV19LHtuYW1lOiJ0YWJsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRhYmxlIGVsZW1lbnQgcmVwcmVzZW50cyBkYXRhIHdpdGggbW9yZSB0aGFuIG9uZSBkaW1lbnNpb24sIGluIHRoZSBmb3JtIG9mIGEgdGFibGUuIn0sYXR0cmlidXRlczpbe25hbWU6ImJvcmRlciJ9LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIGhvdyB0aGUgdGFibGUgbXVzdCBiZSBhbGlnbmVkIGluc2lkZSB0aGUgY29udGFpbmluZyBkb2N1bWVudC4gSXQgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBsZWZ0OiB0aGUgdGFibGUgaXMgZGlzcGxheWVkIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGRvY3VtZW50O1xuKiAgIGNlbnRlcjogdGhlIHRhYmxlIGlzIGRpc3BsYXllZCBpbiB0aGUgY2VudGVyIG9mIHRoZSBkb2N1bWVudDtcbiogICByaWdodDogdGhlIHRhYmxlIGlzIGRpc3BsYXllZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgZG9jdW1lbnQuXG5cbioqVXNhZ2UgTm90ZSoqXG5cbiogICAqKkRvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUqKiwgYXMgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVGhlIFtgPHRhYmxlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90YWJsZSAiVGhlIEhUTUwgPHRhYmxlPiBlbGVtZW50IHJlcHJlc2VudHMgdGFidWxhciBkYXRhIOKAlCB0aGF0IGlzLCBpbmZvcm1hdGlvbiBwcmVzZW50ZWQgaW4gYSB0d28tZGltZW5zaW9uYWwgdGFibGUgY29tcHJpc2VkIG9mIHJvd3MgYW5kIGNvbHVtbnMgb2YgY2VsbHMgY29udGFpbmluZyBkYXRhLiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykuIFNldCBbYG1hcmdpbi1sZWZ0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi1sZWZ0ICJUaGUgbWFyZ2luLWxlZnQgQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmdpbiBhcmVhIG9uIHRoZSBsZWZ0IHNpZGUgb2YgYW4gZWxlbWVudC4gQSBwb3NpdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgZmFydGhlciBmcm9tIGl0cyBuZWlnaGJvcnMsIHdoaWxlIGEgbmVnYXRpdmUgdmFsdWUgcGxhY2VzIGl0IGNsb3Nlci4iKSBhbmQgW2BtYXJnaW4tcmlnaHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLXJpZ2h0ICJUaGUgbWFyZ2luLXJpZ2h0IENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHRvIGBhdXRvYCBvciBbYG1hcmdpbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4gIlRoZSBtYXJnaW4gQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmdpbiBhcmVhIG9uIGFsbCBmb3VyIHNpZGVzIG9mIGFuIGVsZW1lbnQuIEl0IGlzIGEgc2hvcnRoYW5kIGZvciBtYXJnaW4tdG9wLCBtYXJnaW4tcmlnaHQsIG1hcmdpbi1ib3R0b20sIGFuZCBtYXJnaW4tbGVmdC4iKSB0byBgMCBhdXRvYCB0byBhY2hpZXZlIGFuIGVmZmVjdCB0aGF0IGlzIHNpbWlsYXIgdG8gdGhlIGFsaWduIGF0dHJpYnV0ZS5cbiogICBQcmlvciB0byBGaXJlZm94IDQsIEZpcmVmb3ggYWxzbyBzdXBwb3J0ZWQgdGhlIGBtaWRkbGVgLCBgYWJzbWlkZGxlYCwgYW5kIGBhYnNjZW50ZXJgIHZhbHVlcyBhcyBzeW5vbnltcyBvZiBgY2VudGVyYCwgaW4gcXVpcmtzIG1vZGUgb25seS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RhYmxlIn1dfSx7bmFtZToiY2FwdGlvbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNhcHRpb24gZWxlbWVudCByZXByZXNlbnRzIHRoZSB0aXRsZSBvZiB0aGUgdGFibGUgdGhhdCBpcyBpdHMgcGFyZW50LCBpZiBpdCBoYXMgYSBwYXJlbnQgYW5kIHRoYXQgaXMgYSB0YWJsZSBlbGVtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246YFRoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIGhvdyB0aGUgY2FwdGlvbiBtdXN0IGJlIGFsaWduZWQgd2l0aCByZXNwZWN0IHRvIHRoZSB0YWJsZS4gSXQgbWF5IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgoKXGBsZWZ0XGAKClRoZSBjYXB0aW9uIGlzIGRpc3BsYXllZCB0byB0aGUgbGVmdCBvZiB0aGUgdGFibGUuCgpcYHRvcFxgCgpUaGUgY2FwdGlvbiBpcyBkaXNwbGF5ZWQgYWJvdmUgdGhlIHRhYmxlLgoKXGByaWdodFxgCgpUaGUgY2FwdGlvbiBpcyBkaXNwbGF5ZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSB0YWJsZS4KClxgYm90dG9tXGAKClRoZSBjYXB0aW9uIGlzIGRpc3BsYXllZCBiZWxvdyB0aGUgdGFibGUuCgoqKlVzYWdlIG5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSwgYXMgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVGhlIFtcYDxjYXB0aW9uPlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FwdGlvbiAiVGhlIEhUTUwgVGFibGUgQ2FwdGlvbiBlbGVtZW50ICg8Y2FwdGlvbj4pIHNwZWNpZmllcyB0aGUgY2FwdGlvbiAob3IgdGl0bGUpIG9mIGEgdGFibGUsIGFuZCBpZiB1c2VkIGlzIGFsd2F5cyB0aGUgZmlyc3QgY2hpbGQgb2YgYSA8dGFibGU+LiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyB0aGUgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpIHByb3BlcnRpZXMgW1xgY2FwdGlvbi1zaWRlXGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jYXB0aW9uLXNpZGUgIlRoZSBjYXB0aW9uLXNpZGUgQ1NTIHByb3BlcnR5IHB1dHMgdGhlIGNvbnRlbnQgb2YgYSB0YWJsZSdzIDxjYXB0aW9uPiBvbiB0aGUgc3BlY2lmaWVkIHNpZGUuIFRoZSB2YWx1ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSB3cml0aW5nLW1vZGUgb2YgdGhlIHRhYmxlLiIpIGFuZCBbXGB0ZXh0LWFsaWduXGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKS5gfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhcHRpb24ifV19LHtuYW1lOiJjb2xncm91cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNvbGdyb3VwIGVsZW1lbnQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIG9uZSBvciBtb3JlIGNvbHVtbnMgaW4gdGhlIHRhYmxlIHRoYXQgaXMgaXRzIHBhcmVudCwgaWYgaXQgaGFzIGEgcGFyZW50IGFuZCB0aGF0IGlzIGEgdGFibGUgZWxlbWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3BhbiJ9LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBob3Jpem9udGFsIGFsaWdubWVudCBvZiBlYWNoIGNvbHVtbiBjZWxsIGNvbnRlbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbFxuKiAgIGBjZW50ZXJgLCBjZW50ZXJpbmcgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiogICBgcmlnaHRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGxcbiogICBganVzdGlmeWAsIGluc2VydGluZyBzcGFjZXMgaW50byB0aGUgdGV4dHVhbCBjb250ZW50IHNvIHRoYXQgdGhlIGNvbnRlbnQgaXMganVzdGlmaWVkIGluIHRoZSBjZWxsXG4qICAgYGNoYXJgLCBhbGlnbmluZyB0aGUgdGV4dHVhbCBjb250ZW50IG9uIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIG1pbmltYWwgb2Zmc2V0LCBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sI2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgYGxlZnRgIHZhbHVlIGlzIGFzc3VtZWQuIFRoZSBkZXNjZW5kYW50IFtgPGNvbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sICJUaGUgSFRNTCA8Y29sPiBlbGVtZW50IGRlZmluZXMgYSBjb2x1bW4gd2l0aGluIGEgdGFibGUgYW5kIGlzIHVzZWQgZm9yIGRlZmluaW5nIGNvbW1vbiBzZW1hbnRpY3Mgb24gYWxsIGNvbW1vbiBjZWxscy4gSXQgaXMgZ2VuZXJhbGx5IGZvdW5kIHdpdGhpbiBhIDxjb2xncm91cD4gZWxlbWVudC4iKSBlbGVtZW50cyBtYXkgb3ZlcnJpZGUgdGhpcyB2YWx1ZSB1c2luZyB0aGVpciBvd24gW2BhbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1hbGlnbikgYXR0cmlidXRlLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSAobm90IHN1cHBvcnRlZCkgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXM6XG4gICAgKiAgIERvIG5vdCB0cnkgdG8gc2V0IHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgb24gYSBzZWxlY3RvciBnaXZpbmcgYSBbYDxjb2xncm91cD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sZ3JvdXAgIlRoZSBIVE1MIDxjb2xncm91cD4gZWxlbWVudCBkZWZpbmVzIGEgZ3JvdXAgb2YgY29sdW1ucyB3aXRoaW4gYSB0YWJsZS4iKSBlbGVtZW50LiBCZWNhdXNlIFtgPHRkPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCAiVGhlIEhUTUwgPHRkPiBlbGVtZW50IGRlZmluZXMgYSBjZWxsIG9mIGEgdGFibGUgdGhhdCBjb250YWlucyBkYXRhLiBJdCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIHRhYmxlIG1vZGVsLiIpIGVsZW1lbnRzIGFyZSBub3QgZGVzY2VuZGFudCBvZiB0aGUgW2A8Y29sZ3JvdXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwICJUaGUgSFRNTCA8Y29sZ3JvdXA+IGVsZW1lbnQgZGVmaW5lcyBhIGdyb3VwIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUuIikgZWxlbWVudCwgdGhleSB3b25cJ3QgaW5oZXJpdCBpdC5cbiAgICAqICAgSWYgdGhlIHRhYmxlIGRvZXNuXCd0IHVzZSBhIFtgY29sc3BhbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNvbHNwYW4pIGF0dHJpYnV0ZSwgdXNlIG9uZSBgdGQ6bnRoLWNoaWxkKGFuK2IpYCBDU1Mgc2VsZWN0b3IgcGVyIGNvbHVtbiwgd2hlcmUgYSBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRoZSBjb2x1bW5zIGluIHRoZSB0YWJsZSBhbmQgYiBpcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiB0aGlzIGNvbHVtbiBpbiB0aGUgdGFibGUuIE9ubHkgYWZ0ZXIgdGhpcyBzZWxlY3RvciB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IGNhbiBiZSB1c2VkLlxuICAgICogICBJZiB0aGUgdGFibGUgZG9lcyB1c2UgYSBbYGNvbHNwYW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jb2xzcGFuKSBhdHRyaWJ1dGUsIHRoZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGNvbWJpbmluZyBhZGVxdWF0ZSBDU1MgYXR0cmlidXRlIHNlbGVjdG9ycyBsaWtlIGBbY29sc3Bhbj1uXWAsIHRob3VnaCB0aGlzIGlzIG5vdCB0cml2aWFsLlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwI2F0dHItY2hhcikgYXMgdGhlIHZhbHVlIG9mIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgVW5pbXBsZW1lbnRlZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwIn1dfSx7bmFtZToiY29sIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiBhIGNvbCBlbGVtZW50IGhhcyBhIHBhcmVudCBhbmQgdGhhdCBpcyBhIGNvbGdyb3VwIGVsZW1lbnQgdGhhdCBpdHNlbGYgaGFzIGEgcGFyZW50IHRoYXQgaXMgYSB0YWJsZSBlbGVtZW50LCB0aGVuIHRoZSBjb2wgZWxlbWVudCByZXByZXNlbnRzIG9uZSBvciBtb3JlIGNvbHVtbnMgaW4gdGhlIGNvbHVtbiBncm91cCByZXByZXNlbnRlZCBieSB0aGF0IGNvbGdyb3VwLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcGFuIn0se25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY29sdW1uIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgW2BhbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2xncm91cCNhdHRyLWFsaWduKSBvZiB0aGUgW2A8Y29sZ3JvdXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwICJUaGUgSFRNTCA8Y29sZ3JvdXA+IGVsZW1lbnQgZGVmaW5lcyBhIGdyb3VwIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUuIikgZWxlbWVudCB0aGlzIGA8Y29sPmAgZWxlbWVudCBiZWxvbmdzIHRvby4gSWYgdGhlcmUgYXJlIG5vbmUsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzOlxuICAgICogICBEbyBub3QgdHJ5IHRvIHNldCB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGEgc2VsZWN0b3IgZ2l2aW5nIGEgW2A8Y29sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wgIlRoZSBIVE1MIDxjb2w+IGVsZW1lbnQgZGVmaW5lcyBhIGNvbHVtbiB3aXRoaW4gYSB0YWJsZSBhbmQgaXMgdXNlZCBmb3IgZGVmaW5pbmcgY29tbW9uIHNlbWFudGljcyBvbiBhbGwgY29tbW9uIGNlbGxzLiBJdCBpcyBnZW5lcmFsbHkgZm91bmQgd2l0aGluIGEgPGNvbGdyb3VwPiBlbGVtZW50LiIpIGVsZW1lbnQuIEJlY2F1c2UgW2A8dGQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkICJUaGUgSFRNTCA8dGQ+IGVsZW1lbnQgZGVmaW5lcyBhIGNlbGwgb2YgYSB0YWJsZSB0aGF0IGNvbnRhaW5zIGRhdGEuIEl0IHBhcnRpY2lwYXRlcyBpbiB0aGUgdGFibGUgbW9kZWwuIikgZWxlbWVudHMgYXJlIG5vdCBkZXNjZW5kYW50IG9mIHRoZSBbYDxjb2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCAiVGhlIEhUTUwgPGNvbD4gZWxlbWVudCBkZWZpbmVzIGEgY29sdW1uIHdpdGhpbiBhIHRhYmxlIGFuZCBpcyB1c2VkIGZvciBkZWZpbmluZyBjb21tb24gc2VtYW50aWNzIG9uIGFsbCBjb21tb24gY2VsbHMuIEl0IGlzIGdlbmVyYWxseSBmb3VuZCB3aXRoaW4gYSA8Y29sZ3JvdXA+IGVsZW1lbnQuIikgZWxlbWVudCwgdGhleSB3b25cJ3QgaW5oZXJpdCBpdC5cbiAgICAqICAgSWYgdGhlIHRhYmxlIGRvZXNuXCd0IHVzZSBhIFtgY29sc3BhbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNvbHNwYW4pIGF0dHJpYnV0ZSwgdXNlIHRoZSBgdGQ6bnRoLWNoaWxkKGFuK2IpYCBDU1Mgc2VsZWN0b3IuIFNldCBgYWAgdG8gemVybyBhbmQgYGJgIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uIGluIHRoZSB0YWJsZSwgZS5nLiBgdGQ6bnRoLWNoaWxkKDIpIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH1gIHRvIHJpZ2h0LWFsaWduIHRoZSBzZWNvbmQgY29sdW1uLlxuICAgICogICBJZiB0aGUgdGFibGUgZG9lcyB1c2UgYSBbYGNvbHNwYW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jb2xzcGFuKSBhdHRyaWJ1dGUsIHRoZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGNvbWJpbmluZyBhZGVxdWF0ZSBDU1MgYXR0cmlidXRlIHNlbGVjdG9ycyBsaWtlIGBbY29sc3Bhbj1uXWAsIHRob3VnaCB0aGlzIGlzIG5vdCB0cml2aWFsLlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wifV19LHtuYW1lOiJ0Ym9keSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRib2R5IGVsZW1lbnQgcmVwcmVzZW50cyBhIGJsb2NrIG9mIHJvd3MgdGhhdCBjb25zaXN0IG9mIGEgYm9keSBvZiBkYXRhIGZvciB0aGUgcGFyZW50IHRhYmxlIGVsZW1lbnQsIGlmIHRoZSB0Ym9keSBlbGVtZW50IGhhcyBhIHBhcmVudCBhbmQgaXQgaXMgYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgZWFjaCBjZWxsIGNvbnRlbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbFxuKiAgIGBjZW50ZXJgLCBjZW50ZXJpbmcgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiogICBgcmlnaHRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGxcbiogICBganVzdGlmeWAsIGluc2VydGluZyBzcGFjZXMgaW50byB0aGUgdGV4dHVhbCBjb250ZW50IHNvIHRoYXQgdGhlIGNvbnRlbnQgaXMganVzdGlmaWVkIGluIHRoZSBjZWxsXG4qICAgYGNoYXJgLCBhbGlnbmluZyB0aGUgdGV4dHVhbCBjb250ZW50IG9uIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIG1pbmltYWwgb2Zmc2V0LCBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGJvZHkjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rib2R5I2F0dHItY2hhcm9mZikgYXR0cmlidXRlcy5cblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldCwgdGhlIGBsZWZ0YCB2YWx1ZSBpcyBhc3N1bWVkLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSAobm90IHN1cHBvcnRlZCkgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIHVzZSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBvbiBpdC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBpbiBDU1MzLCB5b3UgY2FuIHVzZSB0aGUgdmFsdWUgb2YgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSJ9XX0se25hbWU6InRoZWFkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGhlYWQgZWxlbWVudCByZXByZXNlbnRzIHRoZSBibG9jayBvZiByb3dzIHRoYXQgY29uc2lzdCBvZiB0aGUgY29sdW1uIGxhYmVscyAoaGVhZGVycykgZm9yIHRoZSBwYXJlbnQgdGFibGUgZWxlbWVudCwgaWYgdGhlIHRoZWFkIGVsZW1lbnQgaGFzIGEgcGFyZW50IGFuZCBpdCBpcyBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBob3Jpem9udGFsIGFsaWdubWVudCBvZiBlYWNoIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aGVhZCNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGhlYWQjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgYGxlZnRgIHZhbHVlIGlzIGFzc3VtZWQuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIChub3Qgc3VwcG9ydGVkKSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLlxuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBsZWZ0YCwgYGNlbnRlcmAsIGByaWdodGAgb3IgYGp1c3RpZnlgIHZhbHVlcywgdXNlIHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGl0LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoZWFkI2F0dHItY2hhcikgYXMgdGhlIHZhbHVlIG9mIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgVW5pbXBsZW1lbnRlZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoZWFkIn1dfSx7bmFtZToidGZvb3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0Zm9vdCBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGJsb2NrIG9mIHJvd3MgdGhhdCBjb25zaXN0IG9mIHRoZSBjb2x1bW4gc3VtbWFyaWVzIChmb290ZXJzKSBmb3IgdGhlIHBhcmVudCB0YWJsZSBlbGVtZW50LCBpZiB0aGUgdGZvb3QgZWxlbWVudCBoYXMgYSBwYXJlbnQgYW5kIGl0IGlzIGEgdGFibGUuIn0sYXR0cmlidXRlczpbe25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY2VsbCBjb250ZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIGxlZnQgb2YgdGhlIGNlbGxcbiogICBgY2VudGVyYCwgY2VudGVyaW5nIHRoZSBjb250ZW50IGluIHRoZSBjZWxsXG4qICAgYHJpZ2h0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZWxsXG4qICAgYGp1c3RpZnlgLCBpbnNlcnRpbmcgc3BhY2VzIGludG8gdGhlIHRleHR1YWwgY29udGVudCBzbyB0aGF0IHRoZSBjb250ZW50IGlzIGp1c3RpZmllZCBpbiB0aGUgY2VsbFxuKiAgIGBjaGFyYCwgYWxpZ25pbmcgdGhlIHRleHR1YWwgY29udGVudCBvbiBhIHNwZWNpYWwgY2hhcmFjdGVyIHdpdGggYSBtaW5pbWFsIG9mZnNldCwgZGVmaW5lZCBieSB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rib2R5I2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzLCB1c2UgdGhlIENTUyBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgb24gaXQuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBjaGFyYCB2YWx1ZSwgaW4gQ1NTMywgeW91IGNhbiB1c2UgdGhlIHZhbHVlIG9mIHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGZvb3QjYXR0ci1jaGFyKSBhcyB0aGUgdmFsdWUgb2YgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBVbmltcGxlbWVudGVkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGZvb3QifV19LHtuYW1lOiJ0ciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHJvdyBvZiBjZWxscyBpbiBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J0EgW2BET01TdHJpbmdgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NU3RyaW5nICJET01TdHJpbmcgaXMgYSBVVEYtMTYgU3RyaW5nLiBBcyBKYXZhU2NyaXB0IGFscmVhZHkgdXNlcyBzdWNoIHN0cmluZ3MsIERPTVN0cmluZyBpcyBtYXBwZWQgZGlyZWN0bHkgdG8gYSBTdHJpbmcuIikgd2hpY2ggc3BlY2lmaWVzIGhvdyB0aGUgY2VsbFwncyBjb250ZXh0IHNob3VsZCBiZSBhbGlnbmVkIGhvcml6b250YWxseSB3aXRoaW4gdGhlIGNlbGxzIGluIHRoZSByb3c7IHRoaXMgaXMgc2hvcnRoYW5kIGZvciB1c2luZyBgYWxpZ25gIG9uIGV2ZXJ5IGNlbGwgaW4gdGhlIHJvdyBpbmRpdmlkdWFsbHkuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbmBsZWZ0YFxuXG5BbGlnbiB0aGUgY29udGVudCBvZiBlYWNoIGNlbGwgYXQgaXRzIGxlZnQgZWRnZS5cblxuYGNlbnRlcmBcblxuQ2VudGVyIHRoZSBjb250ZW50cyBvZiBlYWNoIGNlbGwgYmV0d2VlbiB0aGVpciBsZWZ0IGFuZCByaWdodCBlZGdlcy5cblxuYHJpZ2h0YFxuXG5BbGlnbiB0aGUgY29udGVudCBvZiBlYWNoIGNlbGwgYXQgaXRzIHJpZ2h0IGVkZ2UuXG5cbmBqdXN0aWZ5YFxuXG5XaWRlbiB3aGl0ZXNwYWNlcyB3aXRoaW4gdGhlIHRleHQgb2YgZWFjaCBjZWxsIHNvIHRoYXQgdGhlIHRleHQgZmlsbHMgdGhlIGZ1bGwgd2lkdGggb2YgZWFjaCBjZWxsIChmdWxsIGp1c3RpZmljYXRpb24pLlxuXG5gY2hhcmBcblxuQWxpZ24gZWFjaCBjZWxsIGluIHRoZSByb3cgb24gYSBzcGVjaWZpYyBjaGFyYWN0ZXIgKHN1Y2ggdGhhdCBlYWNoIHJvdyBpbiB0aGUgY29sdW1uIHRoYXQgaXMgY29uZmlndXJlZCB0aGlzIHdheSB3aWxsIGhvcml6b250YWxseSBhbGlnbiBpdHMgY2VsbHMgb24gdGhhdCBjaGFyYWN0ZXIpLiBUaGlzIHVzZXMgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ciNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdHIjYXR0ci1jaGFyb2ZmKSB0byBlc3RhYmxpc2ggdGhlIGFsaWdubWVudCBjaGFyYWN0ZXIgKHR5cGljYWxseSAiLiIgb3IgIiwiIHdoZW4gYWxpZ25pbmcgbnVtZXJpY2FsIGRhdGEpIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgZm9sbG93IHRoZSBhbGlnbm1lbnQgY2hhcmFjdGVyLiBUaGlzIGFsaWdubWVudCB0eXBlIHdhcyBuZXZlciB3aWRlbHkgc3VwcG9ydGVkLlxuXG5JZiBubyB2YWx1ZSBpcyBleHByZXNzbHkgc2V0IGZvciBgYWxpZ25gLCB0aGUgcGFyZW50IG5vZGVcJ3MgdmFsdWUgaXMgaW5oZXJpdGVkLlxuXG5JbnN0ZWFkIG9mIHVzaW5nIHRoZSBvYnNvbGV0ZSBgYWxpZ25gIGF0dHJpYnV0ZSwgeW91IHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0byBlc3RhYmxpc2ggYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCwgb3IgYGp1c3RpZnlgIGFsaWdubWVudCBmb3IgdGhlIHJvd1wncyBjZWxscy4gVG8gYXBwbHkgY2hhcmFjdGVyLWJhc2VkIGFsaWdubWVudCwgc2V0IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBhbGlnbm1lbnQgY2hhcmFjdGVyIChzdWNoIGFzIGAiLiJgIG9yIGAiLCJgKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RyIn1dfSx7bmFtZToidGQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0ZCBlbGVtZW50IHJlcHJlc2VudHMgYSBkYXRhIGNlbGwgaW4gYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29sc3BhbiJ9LHtuYW1lOiJyb3dzcGFuIn0se25hbWU6ImhlYWRlcnMifSx7bmFtZToiYWJiciIsZGVzY3JpcHRpb246YFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgc2hvcnQgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNlbGwncyBjb250ZW50LiBTb21lIHVzZXItYWdlbnRzLCBzdWNoIGFzIHNwZWVjaCByZWFkZXJzLCBtYXkgcHJlc2VudCB0aGlzIGRlc2NyaXB0aW9uIGJlZm9yZSB0aGUgY29udGVudCBpdHNlbGYuCgoqKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHB1dCB0aGUgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gaW5zaWRlIHRoZSBjZWxsIGFuZCBwbGFjZSB0aGUgbG9uZyBjb250ZW50IGluIHRoZSAqKnRpdGxlKiogYXR0cmlidXRlLmB9LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyB0aGUgY2VsbCBjb250ZW50XCdzIGhvcml6b250YWwgYWxpZ25tZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbC5cbiogICBgY2VudGVyYDogVGhlIGNvbnRlbnQgaXMgY2VudGVyZWQgaW4gdGhlIGNlbGwuXG4qICAgYHJpZ2h0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGwuXG4qICAgYGp1c3RpZnlgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIHN0cmV0Y2hlZCBvdXQgaW5zaWRlIHRoZSBjZWxsIHNvIHRoYXQgaXQgY292ZXJzIGl0cyBlbnRpcmUgd2lkdGguXG4qICAgYGNoYXJgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gYSBjaGFyYWN0ZXIgaW5zaWRlIHRoZSBgPHRoPmAgZWxlbWVudCB3aXRoIG1pbmltYWwgb2Zmc2V0LiBUaGlzIGNoYXJhY3RlciBpcyBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY2hhcm9mZikgYXR0cmlidXRlcyBVbmltcGxlbWVudGVkIChzZWUgW2J1Z8KgMjIxMl0oaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMiAiY2hhcmFjdGVyIGFsaWdubWVudCBub3QgaW1wbGVtZW50ZWQgKGFsaWduPWNoYXIsIGNoYXJvZmY9LCB0ZXh0LWFsaWduOjxzdHJpbmc+KSIpKS5cblxuVGhlIGRlZmF1bHQgdmFsdWUgd2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIGlzIGBsZWZ0YC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIGFwcGx5IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBlbGVtZW50LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGdpdmUgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0aGUgc2FtZSB2YWx1ZSB5b3Ugd291bGQgdXNlIGZvciB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY2hhcikuIFVuaW1wbGVtZW50ZWQgaW4gQ1NTMy4nfSx7bmFtZToiYXhpcyIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5ncy4gRWFjaCBzdHJpbmcgaXMgdGhlIGBpZGAgb2YgYSBncm91cCBvZiBjZWxscyB0aGF0IHRoaXMgaGVhZGVyIGFwcGxpZXMgdG8uXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuIn0se25hbWU6ImJnY29sb3IiLGRlc2NyaXB0aW9uOmBUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGVhY2ggY2VsbCBpbiBhIGNvbHVtbi4gSXQgY29uc2lzdHMgb2YgYSA2LWRpZ2l0IGhleGFkZWNpbWFsIGNvZGUgYXMgZGVmaW5lZCBpbiBbc1JHQl0oaHR0cHM6Ly93d3cudzMub3JnL0dyYXBoaWNzL0NvbG9yL3NSR0IpIGFuZCBpcyBwcmVmaXhlZCBieSAnIycuIFRoaXMgYXR0cmlidXRlIG1heSBiZSB1c2VkIHdpdGggb25lIG9mIHNpeHRlZW4gcHJlZGVmaW5lZCBjb2xvciBzdHJpbmdzOgoKwqAKClxgYmxhY2tcYCA9ICIjMDAwMDAwIgoKwqAKClxgZ3JlZW5cYCA9ICIjMDA4MDAwIgoKwqAKClxgc2lsdmVyXGAgPSAiI0MwQzBDMCIKCsKgCgpcYGxpbWVcYCA9ICIjMDBGRjAwIgoKwqAKClxgZ3JheVxgID0gIiM4MDgwODAiCgrCoAoKXGBvbGl2ZVxgID0gIiM4MDgwMDAiCgrCoAoKXGB3aGl0ZVxgID0gIiNGRkZGRkYiCgrCoAoKXGB5ZWxsb3dcYCA9ICIjRkZGRjAwIgoKwqAKClxgbWFyb29uXGAgPSAiIzgwMDAwMCIKCsKgCgpcYG5hdnlcYCA9ICIjMDAwMDgwIgoKwqAKClxgcmVkXGAgPSAiI0ZGMDAwMCIKCsKgCgpcYGJsdWVcYCA9ICIjMDAwMEZGIgoKwqAKClxgcHVycGxlXGAgPSAiIzgwMDA4MCIKCsKgCgpcYHRlYWxcYCA9ICIjMDA4MDgwIgoKwqAKClxgZnVjaHNpYVxgID0gIiNGRjAwRkYiCgrCoAoKXGBhcXVhXGAgPSAiIzAwRkZGRiIKCioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBpcyBub24tc3RhbmRhcmQgYW5kIG9ubHkgaW1wbGVtZW50ZWQgaW4gc29tZSB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXI6IFRoZSBbXGA8dGQ+XGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCAiVGhlIEhUTUwgPHRkPiBlbGVtZW50IGRlZmluZXMgYSBjZWxsIG9mIGEgdGFibGUgdGhhdCBjb250YWlucyBkYXRhLiBJdCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIHRhYmxlIG1vZGVsLiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykuIFRvIGNyZWF0ZSBhIHNpbWlsYXIgZWZmZWN0IHVzZSB0aGUgW1xgYmFja2dyb3VuZC1jb2xvclxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYmFja2dyb3VuZC1jb2xvciAiVGhlIGJhY2tncm91bmQtY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgYW4gZWxlbWVudC4iKSBwcm9wZXJ0eSBpbiBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykgaW5zdGVhZC5gfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkIn1dfSx7bmFtZToidGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0aCBlbGVtZW50IHJlcHJlc2VudHMgYSBoZWFkZXIgY2VsbCBpbiBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjb2xzcGFuIn0se25hbWU6InJvd3NwYW4ifSx7bmFtZToiaGVhZGVycyJ9LHtuYW1lOiJzY29wZSIsdmFsdWVTZXQ6InMifSx7bmFtZToic29ydGVkIn0se25hbWU6ImFiYnIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgc2hvcnQgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNlbGwncyBjb250ZW50LiBTb21lIHVzZXItYWdlbnRzLCBzdWNoIGFzIHNwZWVjaCByZWFkZXJzLCBtYXkgcHJlc2VudCB0aGlzIGRlc2NyaXB0aW9uIGJlZm9yZSB0aGUgY29udGVudCBpdHNlbGYuIn19LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyB0aGUgY2VsbCBjb250ZW50XCdzIGhvcml6b250YWwgYWxpZ25tZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbC5cbiogICBgY2VudGVyYDogVGhlIGNvbnRlbnQgaXMgY2VudGVyZWQgaW4gdGhlIGNlbGwuXG4qICAgYHJpZ2h0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGwuXG4qICAgYGp1c3RpZnlgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIHN0cmV0Y2hlZCBvdXQgaW5zaWRlIHRoZSBjZWxsIHNvIHRoYXQgaXQgY292ZXJzIGl0cyBlbnRpcmUgd2lkdGguXG4qICAgYGNoYXJgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gYSBjaGFyYWN0ZXIgaW5zaWRlIHRoZSBgPHRoPmAgZWxlbWVudCB3aXRoIG1pbmltYWwgb2Zmc2V0LiBUaGlzIGNoYXJhY3RlciBpcyBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGgjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoI2F0dHItY2hhcm9mZikgYXR0cmlidXRlcy5cblxuVGhlIGRlZmF1bHQgdmFsdWUgd2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIGlzIGBsZWZ0YC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIGFwcGx5IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBlbGVtZW50LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGdpdmUgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0aGUgc2FtZSB2YWx1ZSB5b3Ugd291bGQgdXNlIGZvciB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoI2F0dHItY2hhcikuIFVuaW1wbGVtZW50ZWQgaW4gQ1NTMy4nfSx7bmFtZToiYXhpcyIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5ncy4gRWFjaCBzdHJpbmcgaXMgdGhlIGBpZGAgb2YgYSBncm91cCBvZiBjZWxscyB0aGF0IHRoaXMgaGVhZGVyIGFwcGxpZXMgdG8uXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQ6IHVzZSB0aGUgW2BzY29wZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aCNhdHRyLXNjb3BlKSBhdHRyaWJ1dGUgaW5zdGVhZC4ifSx7bmFtZToiYmdjb2xvciIsZGVzY3JpcHRpb246YFRoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgZWFjaCBjZWxsIGluIGEgY29sdW1uLiBJdCBjb25zaXN0cyBvZiBhIDYtZGlnaXQgaGV4YWRlY2ltYWwgY29kZSBhcyBkZWZpbmVkIGluIFtzUkdCXShodHRwczovL3d3dy53My5vcmcvR3JhcGhpY3MvQ29sb3Ivc1JHQikgYW5kIGlzIHByZWZpeGVkIGJ5ICcjJy4gVGhpcyBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgd2l0aCBvbmUgb2Ygc2l4dGVlbiBwcmVkZWZpbmVkIGNvbG9yIHN0cmluZ3M6CgrCoAoKXGBibGFja1xgID0gIiMwMDAwMDAiCgrCoAoKXGBncmVlblxgID0gIiMwMDgwMDAiCgrCoAoKXGBzaWx2ZXJcYCA9ICIjQzBDMEMwIgoKwqAKClxgbGltZVxgID0gIiMwMEZGMDAiCgrCoAoKXGBncmF5XGAgPSAiIzgwODA4MCIKCsKgCgpcYG9saXZlXGAgPSAiIzgwODAwMCIKCsKgCgpcYHdoaXRlXGAgPSAiI0ZGRkZGRiIKCsKgCgpcYHllbGxvd1xgID0gIiNGRkZGMDAiCgrCoAoKXGBtYXJvb25cYCA9ICIjODAwMDAwIgoKwqAKClxgbmF2eVxgID0gIiMwMDAwODAiCgrCoAoKXGByZWRcYCA9ICIjRkYwMDAwIgoKwqAKClxgYmx1ZVxgID0gIiMwMDAwRkYiCgrCoAoKXGBwdXJwbGVcYCA9ICIjODAwMDgwIgoKwqAKClxgdGVhbFxgID0gIiMwMDgwODAiCgrCoAoKXGBmdWNoc2lhXGAgPSAiI0ZGMDBGRiIKCsKgCgpcYGFxdWFcYCA9ICIjMDBGRkZGIgoKKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUsIGFzIGl0IGlzIG5vbi1zdGFuZGFyZCBhbmQgb25seSBpbXBsZW1lbnRlZCBpbiBzb21lIHZlcnNpb25zIG9mIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcjogVGhlIFtcYDx0aD5cYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoICJUaGUgSFRNTCA8dGg+IGVsZW1lbnQgZGVmaW5lcyBhIGNlbGwgYXMgaGVhZGVyIG9mIGEgZ3JvdXAgb2YgdGFibGUgY2VsbHMuIFRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyBncm91cCBpcyBkZWZpbmVkIGJ5IHRoZSBzY29wZSBhbmQgaGVhZGVycyBhdHRyaWJ1dGVzLiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MpLiBUbyBjcmVhdGUgYSBzaW1pbGFyIGVmZmVjdCB1c2UgdGhlIFtcYGJhY2tncm91bmQtY29sb3JcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQtY29sb3IgIlRoZSBiYWNrZ3JvdW5kLWNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGVsZW1lbnQuIikgcHJvcGVydHkgaW4gW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTKSBpbnN0ZWFkLmB9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGgifV19LHtuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZm9ybSBlbGVtZW50IHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cywgc29tZSBvZiB3aGljaCBjYW4gcmVwcmVzZW50IGVkaXRhYmxlIHZhbHVlcyB0aGF0IGNhbiBiZSBzdWJtaXR0ZWQgdG8gYSBzZXJ2ZXIgZm9yIHByb2Nlc3NpbmcuIn0sYXR0cmlidXRlczpbe25hbWU6ImFjY2VwdC1jaGFyc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIHNwYWNlLSBvciBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzIHRoYXQgdGhlIHNlcnZlciBhY2NlcHRzLiBUaGUgYnJvd3NlciB1c2VzIHRoZW0gaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZC4gVGhlIGRlZmF1bHQgdmFsdWUsIHRoZSByZXNlcnZlZCBzdHJpbmcgYCJVTktOT1dOImAsIGluZGljYXRlcyB0aGUgc2FtZSBlbmNvZGluZyBhcyB0aGF0IG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nIHRoZSBmb3JtIGVsZW1lbnQuICBcbkluIHByZXZpb3VzIHZlcnNpb25zIG9mIEhUTUwsIHRoZSBkaWZmZXJlbnQgY2hhcmFjdGVyIGVuY29kaW5ncyBjb3VsZCBiZSBkZWxpbWl0ZWQgYnkgc3BhY2VzIG9yIGNvbW1hcy4gSW4gSFRNTDUsIG9ubHkgc3BhY2VzIGFyZSBhbGxvd2VkIGFzIGRlbGltaXRlcnMuJ319LHtuYW1lOiJhY3Rpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBVUkkgb2YgYSBwcm9ncmFtIHRoYXQgcHJvY2Vzc2VzIHRoZSBmb3JtIGluZm9ybWF0aW9uLiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgW2Bmb3JtYWN0aW9uYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiNhdHRyLWZvcm1hY3Rpb24pIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50Lid9fSx7bmFtZToiYXV0b2NvbXBsZXRlIix2YWx1ZVNldDoibyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgaW5wdXQgZWxlbWVudHMgY2FuIGJ5IGRlZmF1bHQgaGF2ZSB0aGVpciB2YWx1ZXMgYXV0b21hdGljYWxseSBjb21wbGV0ZWQgYnkgdGhlIGJyb3dzZXIuIFRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhbiBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgb24gYW4gZWxlbWVudCBiZWxvbmdpbmcgdG8gdGhlIGZvcm0uIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgb2ZmYDogVGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IGVudGVyIGEgdmFsdWUgaW50byBlYWNoIGZpZWxkIGZvciBldmVyeSB1c2UsIG9yIHRoZSBkb2N1bWVudCBwcm92aWRlcyBpdHMgb3duIGF1dG8tY29tcGxldGlvbiBtZXRob2Q7IHRoZSBicm93c2VyIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgY29tcGxldGUgZW50cmllcy5cbiogICBgb25gOiBUaGUgYnJvd3NlciBjYW4gYXV0b21hdGljYWxseSBjb21wbGV0ZSB2YWx1ZXMgYmFzZWQgb24gdmFsdWVzIHRoYXQgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkgZW50ZXJlZCBpbiB0aGUgZm9ybS5cblxuRm9yIG1vc3QgbW9kZXJuIGJyb3dzZXJzIChpbmNsdWRpbmcgRmlyZWZveCAzOCssIEdvb2dsZSBDaHJvbWUgMzQrLCBJRSAxMSspIHNldHRpbmcgdGhlIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgd2lsbCBub3QgcHJldmVudCBhIGJyb3dzZXIncyBwYXNzd29yZCBtYW5hZ2VyIGZyb20gYXNraW5nIHRoZSB1c2VyIGlmIHRoZXkgd2FudCB0byBzdG9yZSBsb2dpbiBmaWVsZHMgKHVzZXJuYW1lIGFuZCBwYXNzd29yZCksIGlmIHRoZSB1c2VyIHBlcm1pdHMgdGhlIHN0b3JhZ2UgdGhlIGJyb3dzZXIgd2lsbCBhdXRvZmlsbCB0aGUgbG9naW4gdGhlIG5leHQgdGltZSB0aGUgdXNlciB2aXNpdHMgdGhlIHBhZ2UuIFNlZSBbVGhlIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgYW5kIGxvZ2luIGZpZWxkc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJpbmdfeW91cl9zaXRlL1R1cm5pbmdfb2ZmX2Zvcm1fYXV0b2NvbXBsZXRpb24jVGhlX2F1dG9jb21wbGV0ZV9hdHRyaWJ1dGVfYW5kX2xvZ2luX2ZpZWxkcykuIn19LHtuYW1lOiJlbmN0eXBlIix2YWx1ZVNldDoiZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1doZW4gdGhlIHZhbHVlIG9mIHRoZSBgbWV0aG9kYCBhdHRyaWJ1dGUgaXMgYHBvc3RgLCBlbmN0eXBlIGlzIHRoZSBbTUlNRSB0eXBlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NaW1lX3R5cGUpIG9mIGNvbnRlbnQgdGhhdCBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSB0byB0aGUgc2VydmVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGA6IFRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWA6IFRoZSB2YWx1ZSB1c2VkIGZvciBhbiBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50IHdpdGggdGhlIGB0eXBlYCBhdHRyaWJ1dGUgc2V0IHRvICJmaWxlIi5cbiogICBgdGV4dC9wbGFpbmA6IChIVE1MNSlcblxuVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybWVuY3R5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybWVuY3R5cGUpIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50Lid9fSx7bmFtZToibWV0aG9kIix2YWx1ZVNldDoibSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIFtIVFRQXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQKSBtZXRob2QgdGhhdCB0aGUgYnJvd3NlciB1c2VzIHRvIHN1Ym1pdCB0aGUgZm9ybS4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBwb3N0YDogQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW1BPU1QgbWV0aG9kXShodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM5Lmh0bWwjc2VjOS41KSA7IGZvcm0gZGF0YSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGZvcm0gYW5kIHNlbnQgdG8gdGhlIHNlcnZlci5cbiogICBgZ2V0YDogQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW0dFVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjMpOyBmb3JtIGRhdGEgYXJlIGFwcGVuZGVkIHRvIHRoZSBgYWN0aW9uYCBhdHRyaWJ1dGUgVVJJIHdpdGggYSBcJz9cJyBhcyBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0aW5nIFVSSSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBmb3JtIGhhcyBubyBzaWRlLWVmZmVjdHMgYW5kIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy5cbiogICBgZGlhbG9nYDogVXNlIHdoZW4gdGhlIGZvcm0gaXMgaW5zaWRlIGHCoFtgPGRpYWxvZz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGlhbG9nICJUaGUgSFRNTCA8ZGlhbG9nPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkaWFsb2cgYm94IG9yIG90aGVyIGludGVyYWN0aXZlIGNvbXBvbmVudCwgc3VjaCBhcyBhbiBpbnNwZWN0b3Igb3Igd2luZG93LiIpIGVsZW1lbnQgdG8gY2xvc2UgdGhlIGRpYWxvZyB3aGVuIHN1Ym1pdHRlZC5cblxuVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybW1ldGhvZGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1mb3JtbWV0aG9kKSBhdHRyaWJ1dGUgb24gYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgb3IgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHRoZSBmb3JtLiBJbiBIVE1MIDQsIGl0cyB1c2UgaXMgZGVwcmVjYXRlZCAoYGlkYCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkKS4gSXQgbXVzdCBiZSB1bmlxdWUgYW1vbmcgdGhlIGZvcm1zIGluIGEgZG9jdW1lbnQgYW5kIG5vdCBqdXN0IGFuIGVtcHR5IHN0cmluZyBpbiBIVE1MIDUuIn19LHtuYW1lOiJub3ZhbGlkYXRlIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZm9ybSBpcyBub3QgdG8gYmUgdmFsaWRhdGVkIHdoZW4gc3VibWl0dGVkLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIChhbmQgdGhlcmVmb3JlIHRoZSBmb3JtIGlzIHZhbGlkYXRlZCksIHRoaXMgZGVmYXVsdCBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgW2Bmb3Jtbm92YWxpZGF0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1mb3Jtbm92YWxpZGF0ZSkgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIG9yIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQgYmVsb25naW5nIHRvIHRoZSBmb3JtLid9fSx7bmFtZToidGFyZ2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIG5hbWUgb3Iga2V5d29yZCBpbmRpY2F0aW5nIHdoZXJlIHRvIGRpc3BsYXkgdGhlIHJlc3BvbnNlIHRoYXQgaXMgcmVjZWl2ZWQgYWZ0ZXIgc3VibWl0dGluZyB0aGUgZm9ybS4gSW4gSFRNTCA0LCB0aGlzIGlzIHRoZSBuYW1lL2tleXdvcmQgZm9yIGEgZnJhbWUuIEluIEhUTUw1LCBpdCBpcyBhIG5hbWUva2V5d29yZCBmb3IgYSBfYnJvd3NpbmcgY29udGV4dF8gKGZvciBleGFtcGxlLCB0YWIsIHdpbmRvdywgb3IgaW5saW5lIGZyYW1lKS4gVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6XG5cbiogICBgX3NlbGZgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBzYW1lIEhUTUwgNCBmcmFtZSAob3IgSFRNTDUgYnJvd3NpbmcgY29udGV4dCkgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGlzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgX2JsYW5rYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byBhIG5ldyB1bm5hbWVkIEhUTUwgNCB3aW5kb3cgb3IgSFRNTDUgYnJvd3NpbmcgY29udGV4dC5cbiogICBgX3BhcmVudGA6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gdGhlIEhUTUwgNCBmcmFtZXNldCBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgZnJhbWUsIG9yIEhUTUw1IHBhcmVudCBicm93c2luZyBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9uZS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLlxuKiAgIGBfdG9wYDogSFRNTCA0OiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBmdWxsIG9yaWdpbmFsIHdpbmRvdywgYW5kIGNhbmNlbCBhbGwgb3RoZXIgZnJhbWVzLiBIVE1MNTogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKGkuZS4sIHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgb25lLCBhbmQgaGFzIG5vIHBhcmVudCkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cbiogICBfaWZyYW1lbmFtZV86IFRoZSByZXNwb25zZSBpcyBkaXNwbGF5ZWQgaW4gYSBuYW1lZCBbYDxpZnJhbWU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lmcmFtZSAiVGhlIEhUTUwgSW5saW5lIEZyYW1lIGVsZW1lbnQgKDxpZnJhbWU+KSByZXByZXNlbnRzIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIGVtYmVkZGluZyBhbm90aGVyIEhUTUwgcGFnZSBpbnRvIHRoZSBjdXJyZW50IG9uZS4iKS5cblxuSFRNTDU6IFRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBbYGZvcm10YXJnZXRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybXRhcmdldCkgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIG9yIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQuJ319LHtuYW1lOiJhY2NlcHQiLGRlc2NyaXB0aW9uOidBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNvbnRlbnQgdHlwZXMgdGhhdCB0aGUgc2VydmVyIGFjY2VwdHMuXG5cbioqVXNhZ2Ugbm90ZToqKiBUaGlzIGF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkIGluIEhUTUw1IGFuZCBzaG91bGQgbm8gbG9uZ2VyIGJlIHVzZWQuIEluc3RlYWQsIHVzZSB0aGUgW2BhY2NlcHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjYXR0ci1hY2NlcHQpIGF0dHJpYnV0ZSBvZiB0aGUgc3BlY2lmaWMgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfSx7bmFtZToiYXV0b2NhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJUaGlzIGlzIGEgbm9uc3RhbmRhcmQgYXR0cmlidXRlIHVzZWQgYnkgaU9TIFNhZmFyaSBNb2JpbGUgd2hpY2ggY29udHJvbHMgd2hldGhlciBhbmQgaG93IHRoZSB0ZXh0IHZhbHVlIGZvciB0ZXh0dWFsIGZvcm0gY29udHJvbCBkZXNjZW5kYW50cyBzaG91bGQgYmUgYXV0b21hdGljYWxseSBjYXBpdGFsaXplZCBhcyBpdCBpcyBlbnRlcmVkL2VkaXRlZCBieSB0aGUgdXNlci4gSWYgdGhlIGBhdXRvY2FwaXRhbGl6ZWAgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBvbiBhbiBpbmRpdmlkdWFsIGZvcm0gY29udHJvbCBkZXNjZW5kYW50LCBpdCB0cnVtcHMgdGhlIGZvcm0td2lkZSBgYXV0b2NhcGl0YWxpemVgIHNldHRpbmcuIFRoZSBub24tZGVwcmVjYXRlZCB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBpbiBpT1MgNSBhbmQgbGF0ZXIuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBzZW50ZW5jZXNgLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG5vbmVgOiBDb21wbGV0ZWx5IGRpc2FibGVzIGF1dG9tYXRpYyBjYXBpdGFsaXphdGlvblxuKiAgIGBzZW50ZW5jZXNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlciBvZiBzZW50ZW5jZXMuXG4qICAgYHdvcmRzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygd29yZHMuXG4qICAgYGNoYXJhY3RlcnNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgYWxsIGNoYXJhY3RlcnMuXG4qICAgYG9uYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS5cbiogICBgb2ZmYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0ifV19LHtuYW1lOiJsYWJlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxhYmVsIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gaW4gYSB1c2VyIGludGVyZmFjZS4gVGhlIGNhcHRpb24gY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGZvcm0gY29udHJvbCwga25vd24gYXMgdGhlIGxhYmVsIGVsZW1lbnQncyBsYWJlbGVkIGNvbnRyb2wsIGVpdGhlciB1c2luZyB0aGUgZm9yIGF0dHJpYnV0ZSwgb3IgYnkgcHV0dGluZyB0aGUgZm9ybSBjb250cm9sIGluc2lkZSB0aGUgbGFiZWwgZWxlbWVudCBpdHNlbGYuIn0sYXR0cmlidXRlczpbe25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IHdpdGggd2hpY2ggdGhlIGxhYmVsIGlzIGFzc29jaWF0ZWQgKGl0cyBfZm9ybSBvd25lcl8pLiBJZiBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGlzIHRoZSBgaWRgIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gVGhpcyBsZXRzIHlvdSBwbGFjZSBsYWJlbCBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgdGhlaXIgZm9ybSBlbGVtZW50cy4nfX0se25hbWU6ImZvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIFtgaWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaWQpIG9mIGEgW2xhYmVsYWJsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvR3VpZGUvSFRNTC9Db250ZW50X2NhdGVnb3JpZXMjRm9ybV9sYWJlbGFibGUpIGZvcm0tcmVsYXRlZCBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50IGFzIHRoZSBgPGxhYmVsPmAgZWxlbWVudC4gVGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHdpdGggYW4gYGlkYCBtYXRjaGluZyB0aGUgdmFsdWUgb2YgdGhlIGBmb3JgIGF0dHJpYnV0ZSBpcyB0aGUgX2xhYmVsZWQgY29udHJvbF8gZm9yIHRoaXMgbGFiZWwgZWxlbWVudCwgaWYgaXQgaXMgYSBsYWJlbGFibGUgZWxlbWVudC4gSWYgaXQgaXPCoG5vdCBsYWJlbGFibGUgdGhlbiB0aGUgYGZvcmAgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QuIElmIHRoZXJlIGFyZSBvdGhlciBlbGVtZW50cyB3aGljaCBhbHNvIG1hdGNoIHRoZSBgaWRgIHZhbHVlLCBsYXRlciBpbiB0aGUgZG9jdW1lbnQsIHRoZXkgYXJlIG5vdCBjb25zaWRlcmVkLlxuXG4qKk5vdGUqKjogQSBgPGxhYmVsPmAgZWxlbWVudCBjYW4gaGF2ZSBib3RoIGEgYGZvcmAgYXR0cmlidXRlIGFuZCBhIGNvbnRhaW5lZCBjb250cm9sIGVsZW1lbnQsIGFzIGxvbmcgYXMgdGhlIGBmb3JgIGF0dHJpYnV0ZSBwb2ludHMgdG8gdGhlIGNvbnRhaW5lZCBjb250cm9sIGVsZW1lbnQuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGFiZWwifV19LHtuYW1lOiJpbnB1dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGlucHV0IGVsZW1lbnQgcmVwcmVzZW50cyBhIHR5cGVkIGRhdGEgZmllbGQsIHVzdWFsbHkgd2l0aCBhIGZvcm0gY29udHJvbCB0byBhbGxvdyB0aGUgdXNlciB0byBlZGl0IHRoZSBkYXRhLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhY2NlcHQifSx7bmFtZToiYWx0In0se25hbWU6ImF1dG9jb21wbGV0ZSIsdmFsdWVTZXQ6ImlucHV0YXV0b2NvbXBsZXRlIn0se25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYifSx7bmFtZToiY2hlY2tlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiZGlybmFtZSJ9LHtuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiZm9ybSJ9LHtuYW1lOiJmb3JtYWN0aW9uIn0se25hbWU6ImZvcm1lbmN0eXBlIix2YWx1ZVNldDoiZXQifSx7bmFtZToiZm9ybW1ldGhvZCIsdmFsdWVTZXQ6ImZtIn0se25hbWU6ImZvcm1ub3ZhbGlkYXRlIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJmb3JtdGFyZ2V0In0se25hbWU6ImhlaWdodCJ9LHtuYW1lOiJpbnB1dG1vZGUiLHZhbHVlU2V0OiJpbSJ9LHtuYW1lOiJsaXN0In0se25hbWU6Im1heCJ9LHtuYW1lOiJtYXhsZW5ndGgifSx7bmFtZToibWluIn0se25hbWU6Im1pbmxlbmd0aCJ9LHtuYW1lOiJtdWx0aXBsZSIsdmFsdWVTZXQ6InYifSx7bmFtZToibmFtZSJ9LHtuYW1lOiJwYXR0ZXJuIn0se25hbWU6InBsYWNlaG9sZGVyIn0se25hbWU6InJlYWRvbmx5Iix2YWx1ZVNldDoidiJ9LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToic2l6ZSJ9LHtuYW1lOiJzcmMifSx7bmFtZToic3RlcCJ9LHtuYW1lOiJ0eXBlIix2YWx1ZVNldDoidCJ9LHtuYW1lOiJ2YWx1ZSJ9LHtuYW1lOiJ3aWR0aCJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQifV19LHtuYW1lOiJidXR0b24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBidXR0b24gZWxlbWVudCByZXByZXNlbnRzIGEgYnV0dG9uIGxhYmVsZWQgYnkgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvZm9jdXMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhhdCB0aGUgYnV0dG9uIHNob3VsZCBoYXZlIGlucHV0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHMsIHVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgaXQsIGZvciBleGFtcGxlIGJ5IHR5cGluZyBpbiBhIGRpZmZlcmVudCBjb250cm9sLiBPbmx5IG9uZSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudCBpbiBhIGRvY3VtZW50IGNhbiBoYXZlIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllZC4ifX0se25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBjYW5ub3QgaW50ZXJhY3Qgd2l0aCB0aGUgYnV0dG9uLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYnV0dG9uIGluaGVyaXRzIGl0cyBzZXR0aW5nIGZyb20gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCwgZm9yIGV4YW1wbGUgW2A8ZmllbGRzZXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZWxkc2V0ICJUaGUgSFRNTCA8ZmllbGRzZXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBncm91cCBzZXZlcmFsIGNvbnRyb2xzIGFzIHdlbGwgYXMgbGFiZWxzICg8bGFiZWw+KSB3aXRoaW4gYSB3ZWIgZm9ybS4iKTsgaWYgdGhlcmUgaXMgbm8gY29udGFpbmluZyBlbGVtZW50IHdpdGggdGhlICoqZGlzYWJsZWQqKiBhdHRyaWJ1dGUgc2V0LCB0aGVuIHRoZSBidXR0b24gaXMgZW5hYmxlZC5cblxuRmlyZWZveCB3aWxsLCB1bmxpa2Ugb3RoZXIgYnJvd3NlcnMsIGJ5IGRlZmF1bHQsIFtwZXJzaXN0IHRoZSBkeW5hbWljIGRpc2FibGVkIHN0YXRlXShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTg1ODM5L2J1Zy13aXRoLWZpcmVmb3gtZGlzYWJsZWQtYXR0cmlidXRlLW9mLWlucHV0LW5vdC1yZXNldHRpbmctd2hlbi1yZWZyZXNoaW5nKSBvZiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBhY3Jvc3MgcGFnZSBsb2Fkcy4gVXNlIHRoZSBbYGF1dG9jb21wbGV0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1hdXRvY29tcGxldGUpIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoaXMgZmVhdHVyZS4nfX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQgdGhhdCB0aGUgYnV0dG9uIGlzIGFzc29jaWF0ZWQgd2l0aCAoaXRzIF9mb3JtIG93bmVyXykuIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG11c3QgYmUgdGhlICoqaWQqKiBhdHRyaWJ1dGUgb2YgYSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYDxidXR0b24+YCBlbGVtZW50IHdpbGwgYmUgYXNzb2NpYXRlZCB0byBhbiBhbmNlc3RvciBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50LCBpZiBvbmUgZXhpc3RzLiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHlvdSB0byBhc3NvY2lhdGUgYDxidXR0b24+YCBlbGVtZW50cyB0byBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudHMuJ319LHtuYW1lOiJmb3JtYWN0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgVVJJIG9mIGEgcHJvZ3JhbSB0aGF0IHByb2Nlc3NlcyB0aGUgaW5mb3JtYXRpb24gc3VibWl0dGVkIGJ5IHRoZSBidXR0b24uIElmIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIHRoZSBbYGFjdGlvbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItYWN0aW9uKSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvbidzIGZvcm0gb3duZXIuIn19LHtuYW1lOiJmb3JtZW5jdHlwZSIsdmFsdWVTZXQ6ImV0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJZiB0aGUgYnV0dG9uIGlzIGEgc3VibWl0IGJ1dHRvbiwgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGNvbnRlbnQgdGhhdCBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSB0byB0aGUgc2VydmVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGA6IFRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWA6IFVzZSB0aGlzIHZhbHVlIGlmIHlvdSBhcmUgdXNpbmcgYW4gW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudCB3aXRoIHRoZSBbYHR5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjYXR0ci10eXBlKSBhdHRyaWJ1dGUgc2V0IHRvIGBmaWxlYC5cbiogICBgdGV4dC9wbGFpbmBcblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgZW5jdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItZW5jdHlwZSkgYXR0cmlidXRlIG9mIHRoZSBidXR0b25cJ3MgZm9ybSBvd25lci4nfX0se25hbWU6ImZvcm1tZXRob2QiLHZhbHVlU2V0OiJmbSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgSFRUUCBtZXRob2QgdGhhdCB0aGUgYnJvd3NlciB1c2VzIHRvIHN1Ym1pdCB0aGUgZm9ybS4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBwb3N0YDogVGhlIGRhdGEgZnJvbSB0aGUgZm9ybSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGZvcm0gYW5kIHNlbnQgdG8gdGhlIHNlcnZlci5cbiogICBgZ2V0YDogVGhlIGRhdGEgZnJvbSB0aGUgZm9ybSBhcmUgYXBwZW5kZWQgdG8gdGhlICoqZm9ybSoqIGF0dHJpYnV0ZSBVUkksIHdpdGggYSAnPycgYXMgYSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0aW5nIFVSSSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBmb3JtIGhhcyBubyBzaWRlLWVmZmVjdHMgYW5kIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy5cblxuSWYgc3BlY2lmaWVkLCB0aGlzIGF0dHJpYnV0ZSBvdmVycmlkZXMgdGhlIFtgbWV0aG9kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1tZXRob2QpIGF0dHJpYnV0ZSBvZiB0aGUgYnV0dG9uJ3MgZm9ybSBvd25lci4ifX0se25hbWU6ImZvcm1ub3ZhbGlkYXRlIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoYXQgdGhlIGZvcm0gaXMgbm90IHRvIGJlIHZhbGlkYXRlZCB3aGVuIGl0IGlzIHN1Ym1pdHRlZC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgbm92YWxpZGF0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItbm92YWxpZGF0ZSkgYXR0cmlidXRlIG9mIHRoZSBidXR0b24ncyBmb3JtIG93bmVyLiJ9fSx7bmFtZToiZm9ybXRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgYXR0cmlidXRlIGlzIGEgbmFtZSBvciBrZXl3b3JkIGluZGljYXRpbmcgd2hlcmUgdG8gZGlzcGxheSB0aGUgcmVzcG9uc2UgdGhhdCBpcyByZWNlaXZlZCBhZnRlciBzdWJtaXR0aW5nIHRoZSBmb3JtLiBUaGlzIGlzIGEgbmFtZSBvZiwgb3Iga2V5d29yZCBmb3IsIGEgX2Jyb3dzaW5nIGNvbnRleHRfIChmb3IgZXhhbXBsZSwgdGFiLCB3aW5kb3csIG9yIGlubGluZSBmcmFtZSkuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIHRoZSBbYHRhcmdldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItdGFyZ2V0KSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvbidzIGZvcm0gb3duZXIuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOlxuXG4qICAgYF9zZWxmYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgc2FtZSBicm93c2luZyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IG9uZS4gVGhpcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQuXG4qICAgYF9ibGFua2A6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gYSBuZXcgdW5uYW1lZCBicm93c2luZyBjb250ZXh0LlxuKiAgIGBfcGFyZW50YDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgcGFyZW50IGJyb3dzaW5nIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgb25lLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgb3B0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgYF90b3BgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAodGhhdCBpcywgdGhlIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBvbmUsIGFuZCBoYXMgbm8gcGFyZW50KS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLiJ9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgb2YgdGhlIGJ1dHRvbiwgd2hpY2ggaXMgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0gZGF0YS4ifX0se25hbWU6InR5cGUiLHZhbHVlU2V0OiJidCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHR5cGUgb2YgdGhlIGJ1dHRvbi4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBzdWJtaXRgOiBUaGUgYnV0dG9uIHN1Ym1pdHMgdGhlIGZvcm0gZGF0YSB0byB0aGUgc2VydmVyLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgb3IgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkeW5hbWljYWxseSBjaGFuZ2VkIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgdmFsdWUuXG4qICAgYHJlc2V0YDogVGhlIGJ1dHRvbiByZXNldHMgYWxsIHRoZSBjb250cm9scyB0byB0aGVpciBpbml0aWFsIHZhbHVlcy5cbiogICBgYnV0dG9uYDogVGhlIGJ1dHRvbiBoYXMgbm8gZGVmYXVsdCBiZWhhdmlvci4gSXQgY2FuIGhhdmUgY2xpZW50LXNpZGUgc2NyaXB0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQncyBldmVudHMsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZXZlbnRzIG9jY3VyLiJ9fSx7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBidXR0b24uIEl0IGRlZmluZXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnV0dG9uIHdoaWNoIGlzIHN1Ym1pdHRlZCB3aXRoIHRoZSBmb3JtIGRhdGEuIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIgaW4gcGFyYW1zIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLiJ9fSx7bmFtZToiYXV0b2NvbXBsZXRlIixkZXNjcmlwdGlvbjonVGhlIHVzZSBvZiB0aGlzIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBpcyBub25zdGFuZGFyZCBhbmQgRmlyZWZveC1zcGVjaWZpYy4gQnkgZGVmYXVsdCwgdW5saWtlIG90aGVyIGJyb3dzZXJzLCBbRmlyZWZveCBwZXJzaXN0cyB0aGUgZHluYW1pYyBkaXNhYmxlZCBzdGF0ZV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTk4NTgzOS9idWctd2l0aC1maXJlZm94LWRpc2FibGVkLWF0dHJpYnV0ZS1vZi1pbnB1dC1ub3QtcmVzZXR0aW5nLXdoZW4tcmVmcmVzaGluZykgb2YgYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgYWNyb3NzIHBhZ2UgbG9hZHMuIFNldHRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHRvIGBvZmZgIChpLmUuIGBhdXRvY29tcGxldGU9Im9mZiJgKSBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuIFNlZSBbYnVnwqA2NTQwNzJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDA3MiAiaWYgZGlzYWJsZWQgc3RhdGUgaXMgY2hhbmdlZCB3aXRoIGphdmFzY3JpcHQsIHRoZSBub3JtYWwgc3RhdGUgZG9lc25cJ3QgcmV0dXJuIGFmdGVyIHJlZnJlc2hpbmcgdGhlIHBhZ2UiKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiJ9XX0se25hbWU6InNlbGVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNlbGVjdCBlbGVtZW50IHJlcHJlc2VudHMgYSBjb250cm9sIGZvciBzZWxlY3RpbmcgYW1vbmdzdCBhIHNldCBvZiBvcHRpb25zLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvY29tcGxldGUiLHZhbHVlU2V0OiJpbnB1dGF1dG9jb21wbGV0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSBbYERPTVN0cmluZ2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01TdHJpbmcgIkRPTVN0cmluZyBpcyBhIFVURi0xNiBTdHJpbmcuIEFzIEphdmFTY3JpcHQgYWxyZWFkeSB1c2VzIHN1Y2ggc3RyaW5ncywgRE9NU3RyaW5nIGlzIG1hcHBlZCBkaXJlY3RseSB0byBhIFN0cmluZy4iKSBwcm92aWRpbmcgYSBoaW50IGZvciBhIFt1c2VyIGFnZW50XCdzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3VzZXJfYWdlbnQgInVzZXIgYWdlbnRcJ3M6IEEgdXNlciBhZ2VudCBpcyBhIGNvbXB1dGVyIHByb2dyYW0gcmVwcmVzZW50aW5nIGEgcGVyc29uLCBmb3IgZXhhbXBsZSwgYSBicm93c2VyIGluIGEgV2ViIGNvbnRleHQuIikgYXV0b2NvbXBsZXRlIGZlYXR1cmUuIFNlZSBbVGhlIEhUTUwgYXV0b2NvbXBsZXRlIGF0dHJpYnV0ZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzL2F1dG9jb21wbGV0ZSkgZm9yIGEgY29tcGxldGUgbGlzdCBvZiB2YWx1ZXMgYW5kIGRldGFpbHMgb24gaG93IHRvIHVzZSBhdXRvY29tcGxldGUuJ319LHtuYW1lOiJhdXRvZm9jdXMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhhdCBhIGZvcm0gY29udHJvbCBzaG91bGQgaGF2ZSBpbnB1dCBmb2N1cyB3aGVuIHRoZSBwYWdlIGxvYWRzLiBPbmx5IG9uZSBmb3JtIGVsZW1lbnQgaW4gYSBkb2N1bWVudCBjYW4gaGF2ZSB0aGUgYGF1dG9mb2N1c2AgYXR0cmlidXRlLiJ9fSx7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBpbnRlcmFjdCB3aXRoIHRoZSBjb250cm9sLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY29udHJvbCBpbmhlcml0cyBpdHMgc2V0dGluZyBmcm9tIHRoZSBjb250YWluaW5nIGVsZW1lbnQsIGZvciBleGFtcGxlIGBmaWVsZHNldGA7IGlmIHRoZXJlIGlzIG5vIGNvbnRhaW5pbmcgZWxlbWVudCB3aXRoIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBzZXQsIHRoZW4gdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhlIGZvcm0gZWxlbWVudCB0b8Kgd2hpY2jCoHRoZSBzZWxlY3QgZWxlbWVudCBpcyBhc3NvY2lhdGVkwqAodGhhdCBpcywgaXRzICJmb3JtIG93bmVyIikuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgaXRzIHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIGBpZGAgb2YgYSBmb3JtIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuIFRoaXMgZW5hYmxlcyB5b3UgdG8gcGxhY2Ugc2VsZWN0IGVsZW1lbnRzIGFueXdoZXJlIHdpdGhpbiBhIGRvY3VtZW50LCBub3QganVzdCBhcyBkZXNjZW5kYW50cyBvZiB0aGVpciBmb3JtIGVsZW1lbnRzLid9fSx7bmFtZToibXVsdGlwbGUiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IG11bHRpcGxlIG9wdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGluIHRoZSBsaXN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIG9ubHkgb25lIG9wdGlvbiBjYW4gYmUgc2VsZWN0ZWQgYXQgYSB0aW1lLiBXaGVuIGBtdWx0aXBsZWAgaXMgc3BlY2lmaWVkLCBtb3N0IGJyb3dzZXJzIHdpbGwgc2hvdyBhIHNjcm9sbGluZyBsaXN0IGJveCBpbnN0ZWFkIG9mIGEgc2luZ2xlIGxpbmUgZHJvcGRvd24uIn19LHtuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wuIn19LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGF0IGFuIG9wdGlvbiB3aXRoIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZSBtdXN0IGJlIHNlbGVjdGVkLiJ9fSx7bmFtZToic2l6ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGNvbnRyb2wgaXMgcHJlc2VudGVkIGFzIGEgc2Nyb2xsaW5nIGxpc3QgYm94IChlLmcuIHdoZW4gYG11bHRpcGxlYCBpcyBzcGVjaWZpZWQpLCB0aGlzIGF0dHJpYnV0ZSByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbGlzdCB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIGF0IG9uZSB0aW1lLiBCcm93c2VycyBhcmUgbm90IHJlcXVpcmVkIHRvIHByZXNlbnQgYSBzZWxlY3QgZWxlbWVudCBhcyBhIHNjcm9sbGVkIGxpc3QgYm94LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLlxuXG4qKk5vdGU6KiogQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc2l6ZSBzaG91bGQgYmUgMTsgaG93ZXZlciwgaW4gcHJhY3RpY2UsIHRoaXMgaGFzIGJlZW4gZm91bmQgdG8gYnJlYWsgc29tZSB3ZWIgc2l0ZXMsIGFuZCBubyBvdGhlciBicm93c2VyIGN1cnJlbnRseSBkb2VzIHRoYXQsIHNvIE1vemlsbGEgaGFzIG9wdGVkIHRvIGNvbnRpbnVlIHRvIHJldHVybiAwIGZvciB0aGUgdGltZSBiZWluZyB3aXRoIEZpcmVmb3guIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2VsZWN0In1dfSx7bmFtZToiZGF0YWxpc3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkYXRhbGlzdCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZXQgb2Ygb3B0aW9uIGVsZW1lbnRzIHRoYXQgcmVwcmVzZW50IHByZWRlZmluZWQgb3B0aW9ucyBmb3Igb3RoZXIgY29udHJvbHMuIEluIHRoZSByZW5kZXJpbmcsIHRoZSBkYXRhbGlzdCBlbGVtZW50IHJlcHJlc2VudHMgbm90aGluZyBhbmQgaXQsIGFsb25nIHdpdGggaXRzIGNoaWxkcmVuLCBzaG91bGQgYmUgaGlkZGVuLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RhdGFsaXN0In1dfSx7bmFtZToib3B0Z3JvdXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvcHRncm91cCBlbGVtZW50IHJlcHJlc2VudHMgYSBncm91cCBvZiBvcHRpb24gZWxlbWVudHMgd2l0aCBhIGNvbW1vbiBsYWJlbC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCwgbm9uZSBvZiB0aGUgaXRlbXMgaW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMgc2VsZWN0YWJsZS4gT2Z0ZW4gYnJvd3NlcnMgZ3JleSBvdXQgc3VjaCBjb250cm9sIGFuZCBpdCB3b24ndCByZWNlaXZlIGFueSBicm93c2luZyBldmVudHMsIGxpa2UgbW91c2UgY2xpY2tzIG9yIGZvY3VzLXJlbGF0ZWQgb25lcy4ifX0se25hbWU6ImxhYmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmFtZSBvZiB0aGUgZ3JvdXAgb2Ygb3B0aW9ucywgd2hpY2ggdGhlIGJyb3dzZXIgY2FuIHVzZSB3aGVuIGxhYmVsaW5nIHRoZSBvcHRpb25zIGluIHRoZSB1c2VyIGludGVyZmFjZS4gVGhpcyBhdHRyaWJ1dGUgaXMgbWFuZGF0b3J5IGlmIHRoaXMgZWxlbWVudCBpcyB1c2VkLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29wdGdyb3VwIn1dfSx7bmFtZToib3B0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgb3B0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcHRpb24gaW4gYSBzZWxlY3QgZWxlbWVudCBvciBhcyBwYXJ0IG9mIGEgbGlzdCBvZiBzdWdnZXN0aW9ucyBpbiBhIGRhdGFsaXN0IGVsZW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonSWYgdGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpcyBzZXQsIHRoaXMgb3B0aW9uIGlzIG5vdCBjaGVja2FibGUuIE9mdGVuIGJyb3dzZXJzIGdyZXkgb3V0IHN1Y2ggY29udHJvbCBhbmQgaXQgd29uXCd0IHJlY2VpdmUgYW55IGJyb3dzaW5nIGV2ZW50LCBsaWtlIG1vdXNlIGNsaWNrcyBvciBmb2N1cy1yZWxhdGVkIG9uZXMuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBlbGVtZW50IGNhbiBzdGlsbCBiZSBkaXNhYmxlZCBpZiBvbmUgb2YgaXRzIGFuY2VzdG9ycyBpcyBhIGRpc2FibGVkIFtgPG9wdGdyb3VwPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vcHRncm91cCAiVGhlIEhUTUwgPG9wdGdyb3VwPiBlbGVtZW50IGNyZWF0ZXMgYSBncm91cGluZyBvZiBvcHRpb25zIHdpdGhpbiBhIDxzZWxlY3Q+IGVsZW1lbnQuIikgZWxlbWVudC4nfX0se25hbWU6ImxhYmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpcyB0ZXh0IGZvciB0aGUgbGFiZWwgaW5kaWNhdGluZyB0aGUgbWVhbmluZyBvZiB0aGUgb3B0aW9uLiBJZiB0aGUgYGxhYmVsYCBhdHRyaWJ1dGUgaXNuJ3QgZGVmaW5lZCwgaXRzIHZhbHVlIGlzIHRoYXQgb2YgdGhlIGVsZW1lbnQgdGV4dCBjb250ZW50LiJ9fSx7bmFtZToic2VsZWN0ZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJZiBwcmVzZW50LCB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSBvcHRpb24gaXMgaW5pdGlhbGx5IHNlbGVjdGVkLiBJZiB0aGUgYDxvcHRpb24+YCBlbGVtZW50IGlzIHRoZSBkZXNjZW5kYW50IG9mIGEgW2A8c2VsZWN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QgIlRoZSBIVE1MIDxzZWxlY3Q+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbnRyb2wgdGhhdCBwcm92aWRlcyBhIG1lbnUgb2Ygb3B0aW9ucyIpIGVsZW1lbnQgd2hvc2UgW2BtdWx0aXBsZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QjYXR0ci1tdWx0aXBsZSkgYXR0cmlidXRlIGlzIG5vdCBzZXQsIG9ubHkgb25lIHNpbmdsZSBgPG9wdGlvbj5gIG9mIHRoaXMgW2A8c2VsZWN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QgIlRoZSBIVE1MIDxzZWxlY3Q+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbnRyb2wgdGhhdCBwcm92aWRlcyBhIG1lbnUgb2Ygb3B0aW9ucyIpIGVsZW1lbnQgbWF5IGhhdmUgdGhlIGBzZWxlY3RlZGAgYXR0cmlidXRlLid9fSx7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBjb250ZW50IG9mIHRoaXMgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIHZhbHVlIHRvIGJlIHN1Ym1pdHRlZCB3aXRoIHRoZSBmb3JtLCBzaG91bGQgdGhpcyBvcHRpb24gYmUgc2VsZWN0ZWQuwqBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBvbWl0dGVkLCB0aGUgdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBvcHRpb24gZWxlbWVudC4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vcHRpb24ifV19LHtuYW1lOiJ0ZXh0YXJlYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRleHRhcmVhIGVsZW1lbnQgcmVwcmVzZW50cyBhIG11bHRpbGluZSBwbGFpbiB0ZXh0IGVkaXQgY29udHJvbCBmb3IgdGhlIGVsZW1lbnQncyByYXcgdmFsdWUuIFRoZSBjb250ZW50cyBvZiB0aGUgY29udHJvbCByZXByZXNlbnQgdGhlIGNvbnRyb2wncyBkZWZhdWx0IHZhbHVlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvY29tcGxldGUiLHZhbHVlU2V0OiJpbnB1dGF1dG9jb21wbGV0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlZCBieSB0aGUgYnJvd3Nlci4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBvZmZgOiBUaGUgdXNlciBtdXN0IGV4cGxpY2l0bHkgZW50ZXIgYSB2YWx1ZSBpbnRvIHRoaXMgZmllbGQgZm9yIGV2ZXJ5IHVzZSwgb3IgdGhlIGRvY3VtZW50IHByb3ZpZGVzIGl0cyBvd24gYXV0by1jb21wbGV0aW9uIG1ldGhvZDsgdGhlIGJyb3dzZXIgZG9lcyBub3QgYXV0b21hdGljYWxseSBjb21wbGV0ZSB0aGUgZW50cnkuXG4qICAgYG9uYDogVGhlIGJyb3dzZXIgY2FuIGF1dG9tYXRpY2FsbHkgY29tcGxldGUgdGhlIHZhbHVlIGJhc2VkIG9uIHZhbHVlcyB0aGF0IHRoZSB1c2VyIGhhcyBlbnRlcmVkIGR1cmluZyBwcmV2aW91cyB1c2VzLlxuXG5JZiB0aGUgYGF1dG9jb21wbGV0ZWAgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgb24gYSBgPHRleHRhcmVhPmAgZWxlbWVudCwgdGhlbiB0aGUgYnJvd3NlciB1c2VzIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIGA8dGV4dGFyZWE+YCBlbGVtZW50XCdzIGZvcm0gb3duZXIuIFRoZSBmb3JtIG93bmVyIGlzIGVpdGhlciB0aGUgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCB0aGF0IHRoaXMgYDx0ZXh0YXJlYT5gIGVsZW1lbnQgaXMgYSBkZXNjZW5kYW50IG9mIG9yIHRoZSBmb3JtIGVsZW1lbnQgd2hvc2UgYGlkYCBpcyBzcGVjaWZpZWQgYnkgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGlucHV0IGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFtgYXV0b2NvbXBsZXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1hdXRvY29tcGxldGUpIGF0dHJpYnV0ZSBpbiBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKS4nfX0se25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSB0aGF0IGEgZm9ybSBjb250cm9sIHNob3VsZCBoYXZlIGlucHV0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHMuIE9ubHkgb25lIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50IGluIGEgZG9jdW1lbnQgY2FuIGhhdmUgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVkLiJ9fSx7bmFtZToiY29scyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHZpc2libGUgd2lkdGggb2YgdGhlIHRleHQgY29udHJvbCwgaW4gYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGhzLiBJZiBpdCBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBgMjBgLiJ9fSx7bmFtZToiZGlybmFtZSJ9LHtuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgY2Fubm90IGludGVyYWN0IHdpdGggdGhlIGNvbnRyb2wuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250cm9sIGluaGVyaXRzIGl0cyBzZXR0aW5nIGZyb20gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCwgZm9yIGV4YW1wbGUgW2A8ZmllbGRzZXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZWxkc2V0ICJUaGUgSFRNTCA8ZmllbGRzZXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBncm91cCBzZXZlcmFsIGNvbnRyb2xzIGFzIHdlbGwgYXMgbGFiZWxzICg8bGFiZWw+KSB3aXRoaW4gYSB3ZWIgZm9ybS4iKTsgaWYgdGhlcmUgaXMgbm8gY29udGFpbmluZyBlbGVtZW50IHdoZW4gdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlIGlzIHNldCwgdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4nfX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQgdGhhdCB0aGUgYDx0ZXh0YXJlYT5gIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgImZvcm0gb3duZXIiKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSB0aGUgYGlkYCBvZiBhIGZvcm0gZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGA8dGV4dGFyZWE+YCBlbGVtZW50IG11c3QgYmUgYSBkZXNjZW5kYW50IG9mIGEgZm9ybSBlbGVtZW50LiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHlvdSB0byBwbGFjZSBgPHRleHRhcmVhPmAgZWxlbWVudHMgYW55d2hlcmUgd2l0aGluIGEgZG9jdW1lbnQsIG5vdCBqdXN0IGFzIGRlc2NlbmRhbnRzIG9mIGZvcm0gZWxlbWVudHMuJ319LHtuYW1lOiJpbnB1dG1vZGUiLHZhbHVlU2V0OiJpbSJ9LHtuYW1lOiJtYXhsZW5ndGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzICh1bmljb2RlIGNvZGUgcG9pbnRzKSB0aGF0IHRoZSB1c2VyIGNhbiBlbnRlci4gSWYgdGhpcyB2YWx1ZSBpc24ndCBzcGVjaWZpZWQsIHRoZSB1c2VyIGNhbiBlbnRlciBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuIn19LHtuYW1lOiJtaW5sZW5ndGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzICh1bmljb2RlIGNvZGUgcG9pbnRzKSByZXF1aXJlZCB0aGF0IHRoZSB1c2VyIHNob3VsZCBlbnRlci4ifX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHRoZSBjb250cm9sLiJ9fSx7bmFtZToicGxhY2Vob2xkZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0EgaGludCB0byB0aGUgdXNlciBvZiB3aGF0IGNhbiBiZSBlbnRlcmVkIGluIHRoZSBjb250cm9sLiBDYXJyaWFnZSByZXR1cm5zIG9yIGxpbmUtZmVlZHMgd2l0aGluIHRoZSBwbGFjZWhvbGRlciB0ZXh0IG11c3QgYmUgdHJlYXRlZCBhcyBsaW5lIGJyZWFrcyB3aGVuIHJlbmRlcmluZyB0aGUgaGludC5cblxuKipOb3RlOioqIFBsYWNlaG9sZGVycyBzaG91bGQgb25seSBiZSB1c2VkIHRvIHNob3cgYW4gZXhhbXBsZSBvZiB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIGVudGVyZWQgaW50byBhIGZvcm07IHRoZXkgYXJlIF9ub3RfIGEgc3Vic3RpdHV0ZSBmb3IgYSBwcm9wZXIgW2A8bGFiZWw+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xhYmVsICJUaGUgSFRNTCA8bGFiZWw+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gZm9yIGFuIGl0ZW0gaW4gYSB1c2VyIGludGVyZmFjZS4iKSBlbGVtZW50IHRpZWQgdG8gdGhlIGlucHV0LiBTZWUgW0xhYmVscyBhbmQgcGxhY2Vob2xkZXJzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjTGFiZWxzX2FuZF9wbGFjZWhvbGRlcnMgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBpbiBbPGlucHV0PjogVGhlIElucHV0IChGb3JtIElucHV0KSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uLid9fSx7bmFtZToicmVhZG9ubHkiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sLiBVbmxpa2UgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLCB0aGUgYHJlYWRvbmx5YCBhdHRyaWJ1dGUgZG9lcyBub3QgcHJldmVudCB0aGUgdXNlciBmcm9tIGNsaWNraW5nIG9yIHNlbGVjdGluZyBpbiB0aGUgY29udHJvbC4gVGhlIHZhbHVlIG9mIGEgcmVhZC1vbmx5IGNvbnRyb2wgaXMgc3RpbGwgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0uIn19LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IHRoZSB1c2VyIG11c3QgZmlsbCBpbiBhIHZhbHVlIGJlZm9yZSBzdWJtaXR0aW5nIGEgZm9ybS4ifX0se25hbWU6InJvd3MiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBudW1iZXIgb2YgdmlzaWJsZSB0ZXh0IGxpbmVzIGZvciB0aGUgY29udHJvbC4ifX0se25hbWU6IndyYXAiLHZhbHVlU2V0OiJ3IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgaG93IHRoZSBjb250cm9sIHdyYXBzIHRleHQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgaGFyZGA6IFRoZSBicm93c2VyIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBsaW5lIGJyZWFrcyAoQ1IrTEYpIHNvIHRoYXQgZWFjaCBsaW5lIGhhcyBubyBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sOyB0aGUgYGNvbHNgIGF0dHJpYnV0ZSBtdXN0IGFsc28gYmUgc3BlY2lmaWVkIGZvciB0aGlzIHRvIHRha2UgZWZmZWN0LlxuKiAgIGBzb2Z0YDogVGhlIGJyb3dzZXIgZW5zdXJlcyB0aGF0IGFsbCBsaW5lIGJyZWFrcyBpbiB0aGUgdmFsdWUgY29uc2lzdCBvZiBhIENSK0xGIHBhaXIsIGJ1dCBkb2VzIG5vdCBpbnNlcnQgYW55IGFkZGl0aW9uYWwgbGluZSBicmVha3MuXG4qICAgYG9mZmAgOiBMaWtlIGBzb2Z0YCBidXQgY2hhbmdlcyBhcHBlYXJhbmNlIHRvIGB3aGl0ZS1zcGFjZTogcHJlYCBzbyBsaW5lIHNlZ21lbnRzIGV4Y2VlZGluZyBgY29sc2AgYXJlIG5vdCB3cmFwcGVkIGFuZCB0aGUgYDx0ZXh0YXJlYT5gIGJlY29tZXMgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIGBzb2Z0YCBpcyBpdHMgZGVmYXVsdCB2YWx1ZS4ifX0se25hbWU6ImF1dG9jYXBpdGFsaXplIixkZXNjcmlwdGlvbjoiVGhpcyBpcyBhIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUgc3VwcG9ydGVkIGJ5IFdlYktpdCBvbiBpT1MgKHRoZXJlZm9yZSBuZWFybHkgYWxsIGJyb3dzZXJzIHJ1bm5pbmcgb24gaU9TLCBpbmNsdWRpbmcgU2FmYXJpLCBGaXJlZm94LCBhbmQgQ2hyb21lKSwgd2hpY2ggY29udHJvbHMgd2hldGhlciBhbmQgaG93IHRoZSB0ZXh0IHZhbHVlIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGNhcGl0YWxpemVkIGFzIGl0IGlzIGVudGVyZWQvZWRpdGVkIGJ5IHRoZSB1c2VyLiBUaGUgbm9uLWRlcHJlY2F0ZWQgdmFsdWVzIGFyZSBhdmFpbGFibGUgaW4gaU9TIDUgYW5kIGxhdGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG5vbmVgOiBDb21wbGV0ZWx5IGRpc2FibGVzIGF1dG9tYXRpYyBjYXBpdGFsaXphdGlvbi5cbiogICBgc2VudGVuY2VzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygc2VudGVuY2VzLlxuKiAgIGB3b3Jkc2A6IEF1dG9tYXRpY2FsbHkgY2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyIG9mIHdvcmRzLlxuKiAgIGBjaGFyYWN0ZXJzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIGFsbCBjaGFyYWN0ZXJzLlxuKiAgIGBvbmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuXG4qICAgYG9mZmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuIn0se25hbWU6InNwZWxsY2hlY2siLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgd2hldGhlciB0aGUgYDx0ZXh0YXJlYT5gIGlzIHN1YmplY3QgdG8gc3BlbGwgY2hlY2tpbmcgYnkgdGhlIHVuZGVybHlpbmcgYnJvd3Nlci9PUy4gdGhlIHZhbHVlIGNhbiBiZTpcblxuKiAgIGB0cnVlYDogSW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBpdHMgc3BlbGxpbmcgYW5kIGdyYW1tYXIgY2hlY2tlZC5cbiogICBgZGVmYXVsdGAgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyB0byBhY3QgYWNjb3JkaW5nIHRvIGEgZGVmYXVsdCBiZWhhdmlvciwgcG9zc2libHkgYmFzZWQgb24gdGhlIHBhcmVudCBlbGVtZW50J3Mgb3duIGBzcGVsbGNoZWNrYCB2YWx1ZS5cbiogICBgZmFsc2VgIDogSW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIG5vdCBiZSBzcGVsbCBjaGVja2VkLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGV4dGFyZWEifV19LHtuYW1lOiJvdXRwdXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvdXRwdXQgZWxlbWVudCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYSBjYWxjdWxhdGlvbiBwZXJmb3JtZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBvciB0aGUgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uIn0sYXR0cmlidXRlczpbe25hbWU6ImZvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBvdGhlciBlbGVtZW50c+KAmSBbYGlkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pZClzLCBpbmRpY2F0aW5nIHRoYXQgdGhvc2UgZWxlbWVudHMgY29udHJpYnV0ZWQgaW5wdXQgdmFsdWVzIHRvIChvciBvdGhlcndpc2UgYWZmZWN0ZWQpIHRoZSBjYWxjdWxhdGlvbi4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBbZm9ybSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSkgdGhhdCB0aGlzIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgImZvcm0gb3duZXIiKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBgaWRgIG9mIGEgZm9ybSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgb3V0cHV0IGVsZW1lbnQgbXVzdCBiZSBhIGRlc2NlbmRhbnQgb2YgYSBmb3JtIGVsZW1lbnQuIFRoaXMgYXR0cmlidXRlIGVuYWJsZXMgeW91IHRvIHBsYWNlIG91dHB1dCBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgdGhlaXIgZm9ybSBlbGVtZW50cy4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBuYW1lIG9mIHRoZSBlbGVtZW50LCBleHBvc2VkIGluIHRoZSBbYEhUTUxGb3JtRWxlbWVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRm9ybUVsZW1lbnQgIlRoZSBIVE1MRm9ybUVsZW1lbnQgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSA8Zm9ybT4gZWxlbWVudCBpbiB0aGUgRE9NOyBpdCBhbGxvd3MgYWNjZXNzIHRvIGFuZCBpbiBzb21lIGNhc2VzIG1vZGlmaWNhdGlvbiBvZiBhc3BlY3RzIG9mIHRoZSBmb3JtLCBhcyB3ZWxsIGFzIGFjY2VzcyB0byBpdHMgY29tcG9uZW50IGVsZW1lbnRzLiIpIEFQSS4nfX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vdXRwdXQifV19LHtuYW1lOiJwcm9ncmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHByb2dyZXNzIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgY29tcGxldGlvbiBwcm9ncmVzcyBvZiBhIHRhc2suIFRoZSBwcm9ncmVzcyBpcyBlaXRoZXIgaW5kZXRlcm1pbmF0ZSwgaW5kaWNhdGluZyB0aGF0IHByb2dyZXNzIGlzIGJlaW5nIG1hZGUgYnV0IHRoYXQgaXQgaXMgbm90IGNsZWFyIGhvdyBtdWNoIG1vcmUgd29yayByZW1haW5zIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvbXBsZXRlIChlLmcuIGJlY2F1c2UgdGhlIHRhc2sgaXMgd2FpdGluZyBmb3IgYSByZW1vdGUgaG9zdCB0byByZXNwb25kKSwgb3IgdGhlIHByb2dyZXNzIGlzIGEgbnVtYmVyIGluIHRoZSByYW5nZSB6ZXJvIHRvIGEgbWF4aW11bSwgZ2l2aW5nIHRoZSBmcmFjdGlvbiBvZiB3b3JrIHRoYXQgaGFzIHNvIGZhciBiZWVuIGNvbXBsZXRlZC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgbXVjaCBvZiB0aGUgdGFzayB0aGF0IGhhcyBiZWVuIGNvbXBsZXRlZC4gSXQgbXVzdCBiZSBhIHZhbGlkIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZXR3ZWVuIDAgYW5kIGBtYXhgLCBvciBiZXR3ZWVuIDAgYW5kIDEgaWYgYG1heGAgaXMgb21pdHRlZC4gSWYgdGhlcmUgaXMgbm8gYHZhbHVlYCBhdHRyaWJ1dGUsIHRoZSBwcm9ncmVzcyBiYXIgaXMgaW5kZXRlcm1pbmF0ZTsgdGhpcyBpbmRpY2F0ZXMgdGhhdCBhbiBhY3Rpdml0eSBpcyBvbmdvaW5nIHdpdGggbm8gaW5kaWNhdGlvbiBvZiBob3cgbG9uZyBpdCBpcyBleHBlY3RlZCB0byB0YWtlLiJ9fSx7bmFtZToibWF4IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBkZXNjcmliZXMgaG93IG11Y2ggd29yayB0aGUgdGFzayBpbmRpY2F0ZWQgYnkgdGhlIGBwcm9ncmVzc2AgZWxlbWVudCByZXF1aXJlcy4gVGhlIGBtYXhgIGF0dHJpYnV0ZSwgaWYgcHJlc2VudCwgbXVzdCBoYXZlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGJlIGEgdmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Byb2dyZXNzIn1dfSx7bmFtZToibWV0ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZXRlciBlbGVtZW50IHJlcHJlc2VudHMgYSBzY2FsYXIgbWVhc3VyZW1lbnQgd2l0aGluIGEga25vd24gcmFuZ2UsIG9yIGEgZnJhY3Rpb25hbCB2YWx1ZTsgZm9yIGV4YW1wbGUgZGlzayB1c2FnZSwgdGhlIHJlbGV2YW5jZSBvZiBhIHF1ZXJ5IHJlc3VsdCwgb3IgdGhlIGZyYWN0aW9uIG9mIGEgdm90aW5nIHBvcHVsYXRpb24gdG8gaGF2ZSBzZWxlY3RlZCBhIHBhcnRpY3VsYXIgY2FuZGlkYXRlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGN1cnJlbnQgbnVtZXJpYyB2YWx1ZS4gVGhpcyBtdXN0IGJlIGJldHdlZW4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIChgbWluYCBhdHRyaWJ1dGUgYW5kIGBtYXhgIGF0dHJpYnV0ZSkgaWYgdGhleSBhcmUgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCBvciBtYWxmb3JtZWQsIHRoZSB2YWx1ZSBpcyAwLiBJZiBzcGVjaWZpZWQsIGJ1dCBub3Qgd2l0aGluIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgYG1pbmAgYXR0cmlidXRlIGFuZCBgbWF4YCBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbmVhcmVzdCBlbmQgb2YgdGhlIHJhbmdlLlxuXG4qKlVzYWdlIG5vdGU6KiogVW5sZXNzIHRoZSBgdmFsdWVgIGF0dHJpYnV0ZSBpcyBiZXR3ZWVuIGAwYCBhbmQgYDFgIChpbmNsdXNpdmUpLCB0aGUgYG1pbmAgYW5kIGBtYXhgIGF0dHJpYnV0ZXMgc2hvdWxkIGRlZmluZSB0aGUgcmFuZ2Ugc28gdGhhdCB0aGUgYHZhbHVlYCBhdHRyaWJ1dGUncyB2YWx1ZSBpcyB3aXRoaW4gaXQuIn19LHtuYW1lOiJtaW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBsb3dlciBudW1lcmljIGJvdW5kIG9mIHRoZSBtZWFzdXJlZCByYW5nZS4gVGhpcyBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSAoYG1heGAgYXR0cmlidXRlKSwgaWYgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIG1pbmltdW0gdmFsdWUgaXMgMC4ifX0se25hbWU6Im1heCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVwcGVyIG51bWVyaWMgYm91bmQgb2YgdGhlIG1lYXN1cmVkIHJhbmdlLiBUaGlzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlIChgbWluYCBhdHRyaWJ1dGUpLCBpZiBzcGVjaWZpZWQuIElmIHVuc3BlY2lmaWVkLCB0aGUgbWF4aW11bSB2YWx1ZSBpcyAxLiJ9fSx7bmFtZToibG93IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXBwZXIgbnVtZXJpYyBib3VuZCBvZiB0aGUgbG93IGVuZCBvZiB0aGUgbWVhc3VyZWQgcmFuZ2UuIFRoaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUgKGBtaW5gIGF0dHJpYnV0ZSksIGFuZCBpdCBhbHNvIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBoaWdoIHZhbHVlIGFuZCBtYXhpbXVtIHZhbHVlIChgaGlnaGAgYXR0cmlidXRlIGFuZCBgbWF4YCBhdHRyaWJ1dGUsIHJlc3BlY3RpdmVseSksIGlmIGFueSBhcmUgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCwgb3IgaWYgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlLCB0aGUgYGxvd2AgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gdmFsdWUuIn19LHtuYW1lOiJoaWdoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbG93ZXIgbnVtZXJpYyBib3VuZCBvZiB0aGUgaGlnaCBlbmQgb2YgdGhlIG1lYXN1cmVkIHJhbmdlLiBUaGlzIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlIChgbWF4YCBhdHRyaWJ1dGUpLCBhbmQgaXQgYWxzbyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbG93IHZhbHVlIGFuZCBtaW5pbXVtIHZhbHVlIChgbG93YCBhdHRyaWJ1dGUgYW5kICoqbWluKiogYXR0cmlidXRlLCByZXNwZWN0aXZlbHkpLCBpZiBhbnkgYXJlIHNwZWNpZmllZC4gSWYgdW5zcGVjaWZpZWQsIG9yIGlmIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSwgdGhlIGBoaWdoYCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSB2YWx1ZS4ifX0se25hbWU6Im9wdGltdW0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgb3B0aW1hbCBudW1lcmljIHZhbHVlLiBJdCBtdXN0IGJlIHdpdGhpbiB0aGUgcmFuZ2UgKGFzIGRlZmluZWQgYnkgdGhlIGBtaW5gIGF0dHJpYnV0ZSBhbmQgYG1heGAgYXR0cmlidXRlKS4gV2hlbiB1c2VkIHdpdGggdGhlIGBsb3dgIGF0dHJpYnV0ZSBhbmQgYGhpZ2hgIGF0dHJpYnV0ZSwgaXQgZ2l2ZXMgYW4gaW5kaWNhdGlvbiB3aGVyZSBhbG9uZyB0aGUgcmFuZ2UgaXMgY29uc2lkZXJlZCBwcmVmZXJhYmxlLiBGb3IgZXhhbXBsZSwgaWYgaXQgaXMgYmV0d2VlbiB0aGUgYG1pbmAgYXR0cmlidXRlIGFuZCB0aGUgYGxvd2AgYXR0cmlidXRlLCB0aGVuIHRoZSBsb3dlciByYW5nZSBpcyBjb25zaWRlcmVkIHByZWZlcnJlZC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBhc3NvY2lhdGVzIHRoZSBlbGVtZW50IHdpdGggYSBgZm9ybWAgZWxlbWVudCB0aGF0IGhhcyBvd25lcnNoaXAgb2YgdGhlIGBtZXRlcmAgZWxlbWVudC4gRm9yIGV4YW1wbGUsIGEgYG1ldGVyYCBtaWdodCBiZSBkaXNwbGF5aW5nIGEgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBhbiBgaW5wdXRgIGVsZW1lbnQgb2YgYHR5cGVgIF9udW1iZXJfLiBUaGlzIGF0dHJpYnV0ZSBpcyBvbmx5IHVzZWQgaWYgdGhlIGBtZXRlcmAgZWxlbWVudCBpcyBiZWluZyB1c2VkIGFzIGEgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQ7IGV2ZW4gdGhlbiwgaXQgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGVsZW1lbnQgYXBwZWFycyBhcyBhIGRlc2NlbmRhbnQgb2YgYSBgZm9ybWAgZWxlbWVudC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGVyIn1dfSx7bmFtZToiZmllbGRzZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmaWVsZHNldCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZXQgb2YgZm9ybSBjb250cm9scyBvcHRpb25hbGx5IGdyb3VwZWQgdW5kZXIgYSBjb21tb24gbmFtZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCwgYWxsIGZvcm0gY29udHJvbHMgdGhhdCBhcmUgZGVzY2VuZGFudHMgb2YgdGhlIGA8ZmllbGRzZXQ+YCwgYXJlIGRpc2FibGVkLCBtZWFuaW5nIHRoZXkgYXJlIG5vdCBlZGl0YWJsZSBhbmQgd29uJ3QgYmUgc3VibWl0dGVkIGFsb25nIHdpdGggdGhlIGA8Zm9ybT5gLiBUaGV5IHdvbid0IHJlY2VpdmUgYW55IGJyb3dzaW5nIGV2ZW50cywgbGlrZSBtb3VzZSBjbGlja3Mgb3IgZm9jdXMtcmVsYXRlZCBldmVudHMuIEJ5IGRlZmF1bHQgYnJvd3NlcnMgZGlzcGxheSBzdWNoIGNvbnRyb2xzIGdyYXllZCBvdXQuIE5vdGUgdGhhdCBmb3JtIGVsZW1lbnRzIGluc2lkZSB0aGUgW2A8bGVnZW5kPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9sZWdlbmQgXCJUaGUgSFRNTCA8bGVnZW5kPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGZvciB0aGUgY29udGVudCBvZiBpdHMgcGFyZW50IDxmaWVsZHNldD4uXCIpIGVsZW1lbnQgd29uJ3QgYmUgZGlzYWJsZWQuIn19LHtuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCB5b3Ugd2FudCB0aGUgYDxmaWVsZHNldD5gIHRvIGJlIHBhcnQgb2YsIGV2ZW4gaWYgaXQgaXMgbm90IGluc2lkZSB0aGUgZm9ybS4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ3JvdXAuXG5cbioqTm90ZSoqOiBUaGUgY2FwdGlvbiBmb3IgdGhlIGZpZWxkc2V0IGlzIGdpdmVuIGJ5IHRoZSBmaXJzdCBbYDxsZWdlbmQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xlZ2VuZCAiVGhlIEhUTUwgPGxlZ2VuZD4gZWxlbWVudCByZXByZXNlbnRzIGEgY2FwdGlvbiBmb3IgdGhlIGNvbnRlbnQgb2YgaXRzIHBhcmVudCA8ZmllbGRzZXQ+LiIpIGVsZW1lbnQgbmVzdGVkIGluc2lkZSBpdC4nfX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9maWVsZHNldCJ9XX0se25hbWU6ImxlZ2VuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxlZ2VuZCBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udGVudHMgb2YgdGhlIGxlZ2VuZCBlbGVtZW50J3MgcGFyZW50IGZpZWxkc2V0IGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9sZWdlbmQifV19LHtuYW1lOiJkZXRhaWxzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGV0YWlscyBlbGVtZW50IHJlcHJlc2VudHMgYSBkaXNjbG9zdXJlIHdpZGdldCBmcm9tIHdoaWNoIHRoZSB1c2VyIGNhbiBvYnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvciBjb250cm9scy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToib3BlbiIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBkZXRhaWxzIOKAlCB0aGF0IGlzLCB0aGUgY29udGVudHMgb2YgdGhlIGA8ZGV0YWlscz5gIGVsZW1lbnQg4oCUIGFyZSBjdXJyZW50bHkgdmlzaWJsZS4gVGhlIGRlZmF1bHQsIGBmYWxzZWAsIG1lYW5zIHRoZSBkZXRhaWxzIGFyZSBub3QgdmlzaWJsZS4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZXRhaWxzIn1dfSx7bmFtZToic3VtbWFyeSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHN1bW1hcnkgZWxlbWVudCByZXByZXNlbnRzIGEgc3VtbWFyeSwgY2FwdGlvbiwgb3IgbGVnZW5kIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udGVudHMgb2YgdGhlIHN1bW1hcnkgZWxlbWVudCdzIHBhcmVudCBkZXRhaWxzIGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdW1tYXJ5In1dfSx7bmFtZToiZGlhbG9nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGlhbG9nIGVsZW1lbnQgcmVwcmVzZW50cyBhIHBhcnQgb2YgYW4gYXBwbGljYXRpb24gdGhhdCBhIHVzZXIgaW50ZXJhY3RzIHdpdGggdG8gcGVyZm9ybSBhIHRhc2ssIGZvciBleGFtcGxlIGEgZGlhbG9nIGJveCwgaW5zcGVjdG9yLCBvciB3aW5kb3cuIn0sYXR0cmlidXRlczpbe25hbWU6Im9wZW4iLGRlc2NyaXB0aW9uOiJJbmRpY2F0ZXMgdGhhdCB0aGUgZGlhbG9nIGlzIGFjdGl2ZSBhbmQgYXZhaWxhYmxlIGZvciBpbnRlcmFjdGlvbi4gV2hlbiB0aGUgYG9wZW5gIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgZGlhbG9nIHNob3VsZG4ndCBiZSBzaG93biB0byB0aGUgdXNlci4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RpYWxvZyJ9XX0se25hbWU6InNjcmlwdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNjcmlwdCBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIGluY2x1ZGUgZHluYW1pYyBzY3JpcHQgYW5kIGRhdGEgYmxvY2tzIGluIHRoZWlyIGRvY3VtZW50cy4gVGhlIGVsZW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGNvbnRlbnQgZm9yIHRoZSB1c2VyLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgVVJJIG9mIGFuIGV4dGVybmFsIHNjcmlwdDsgdGhpcyBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBlbWJlZGRpbmcgYSBzY3JpcHQgZGlyZWN0bHkgd2l0aGluIGEgZG9jdW1lbnQuXG5cbklmIGEgYHNjcmlwdGAgZWxlbWVudCBoYXMgYSBgc3JjYCBhdHRyaWJ1dGUgc3BlY2lmaWVkLCBpdCBzaG91bGQgbm90IGhhdmUgYSBzY3JpcHQgZW1iZWRkZWQgaW5zaWRlIGl0cyB0YWdzLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHNjcmlwdCByZXByZXNlbnRlZC4gVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdpbGwgYmUgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllczpcblxuKiAgICoqT21pdHRlZCBvciBhIEphdmFTY3JpcHQgTUlNRSB0eXBlOioqIEZvciBIVE1MNS1jb21wbGlhbnQgYnJvd3NlcnMgdGhpcyBpbmRpY2F0ZXMgdGhlIHNjcmlwdCBpcyBKYXZhU2NyaXB0LiBIVE1MNSBzcGVjaWZpY2F0aW9uIHVyZ2VzIGF1dGhvcnMgdG8gb21pdCB0aGUgYXR0cmlidXRlIHJhdGhlciB0aGFuIHByb3ZpZGUgYSByZWR1bmRhbnQgTUlNRSB0eXBlLiBJbiBlYXJsaWVyIGJyb3dzZXJzLCB0aGlzIGlkZW50aWZpZWQgdGhlIHNjcmlwdGluZyBsYW5ndWFnZSBvZiB0aGUgZW1iZWRkZWQgb3IgaW1wb3J0ZWQgKHZpYSB0aGUgYHNyY2AgYXR0cmlidXRlKSBjb2RlLiBKYXZhU2NyaXB0IE1JTUUgdHlwZXMgYXJlIFtsaXN0ZWQgaW4gdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvTUlNRV90eXBlcyNKYXZhU2NyaXB0X3R5cGVzKS5cbiogICAqKmBtb2R1bGVgOioqIEZvciBIVE1MNS1jb21wbGlhbnQgYnJvd3NlcnMgdGhlIGNvZGUgaXMgdHJlYXRlZCBhcyBhIEphdmFTY3JpcHQgbW9kdWxlLiBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgc2NyaXB0IGNvbnRlbnRzIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgYGNoYXJzZXRgIGFuZCBgZGVmZXJgIGF0dHJpYnV0ZXMuIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBgbW9kdWxlYCwgc2VlIFtFUzYgaW4gRGVwdGg6IE1vZHVsZXNdKGh0dHBzOi8vaGFja3MubW96aWxsYS5vcmcvMjAxNS8wOC9lczYtaW4tZGVwdGgtbW9kdWxlcy8pLiBDb2RlIG1heSBiZWhhdmUgZGlmZmVyZW50bHkgd2hlbiB0aGUgYG1vZHVsZWAga2V5d29yZCBpcyB1c2VkLlxuKiAgICoqQW55IG90aGVyIHZhbHVlOioqIFRoZSBlbWJlZGRlZCBjb250ZW50IGlzIHRyZWF0ZWQgYXMgYSBkYXRhIGJsb2NrIHdoaWNoIHdvblwndCBiZSBwcm9jZXNzZWQgYnkgdGhlIGJyb3dzZXIuIERldmVsb3BlcnMgbXVzdCB1c2UgYSB2YWxpZCBNSU1FIHR5cGUgdGhhdCBpcyBub3QgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZSB0byBkZW5vdGUgZGF0YSBibG9ja3MuIFRoZSBgc3JjYCBhdHRyaWJ1dGUgd2lsbCBiZSBpZ25vcmVkLlxuXG4qKk5vdGU6KiogaW4gRmlyZWZveCB5b3UgY291bGQgc3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBKYXZhU2NyaXB0IGNvbnRhaW5lZCBpbiBhIGA8c2NyaXB0PmAgZWxlbWVudCBieSBpbmNsdWRpbmcgYSBub24tc3RhbmRhcmQgYHZlcnNpb25gIHBhcmFtZXRlciBpbnNpZGUgdGhlIGB0eXBlYCBhdHRyaWJ1dGUg4oCUIGZvciBleGFtcGxlIGB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQ7dmVyc2lvbj0xLjgiYC4gVGhpcyBoYXMgYmVlbiByZW1vdmVkIGluIEZpcmVmb3ggNTkgKHNlZSBbYnVnwqAxNDI4NzQ1XShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI4NzQ1ICJGSVhFRDogUmVtb3ZlIHN1cHBvcnQgZm9yIHZlcnNpb24gcGFyYW1ldGVyIGZyb20gc2NyaXB0IGxvYWRlciIpKS4nfX0se25hbWU6ImNoYXJzZXQifSx7bmFtZToiYXN5bmMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOmBUaGlzIGlzIGEgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGF0IHRoZSBicm93c2VyIHNob3VsZCwgaWYgcG9zc2libGUsIGxvYWQgdGhlIHNjcmlwdCBhc3luY2hyb25vdXNseS4KClRoaXMgYXR0cmlidXRlIG11c3Qgbm90IGJlIHVzZWQgaWYgdGhlIFxgc3JjXGAgYXR0cmlidXRlIGlzIGFic2VudCAoaS5lLiBmb3IgaW5saW5lIHNjcmlwdHMpLiBJZiBpdCBpcyBpbmNsdWRlZCBpbiB0aGlzIGNhc2UgaXQgd2lsbCBoYXZlIG5vIGVmZmVjdC4KCkJyb3dzZXJzIHVzdWFsbHkgYXNzdW1lIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIGFuZCBsb2FkIHNjcmlwdHMgc3luY2hyb25vdXNseSwgKGkuZS4gXGBhc3luYz0iZmFsc2UiXGApIGR1cmluZyBIVE1MIHBhcnNpbmcuCgpEeW5hbWljYWxseSBpbnNlcnRlZCBzY3JpcHRzICh1c2luZyBbXGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KClcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L2NyZWF0ZUVsZW1lbnQgIkluIGFuIEhUTUwgZG9jdW1lbnQsIHRoZSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCkgbWV0aG9kIGNyZWF0ZXMgdGhlIEhUTUwgZWxlbWVudCBzcGVjaWZpZWQgYnkgdGFnTmFtZSwgb3IgYW4gSFRNTFVua25vd25FbGVtZW50IGlmIHRhZ05hbWUgaXNuJ3QgcmVjb2duaXplZC4iKSkgbG9hZCBhc3luY2hyb25vdXNseSBieSBkZWZhdWx0LCBzbyB0byB0dXJuIG9uIHN5bmNocm9ub3VzIGxvYWRpbmcgKGkuZS4gc2NyaXB0cyBsb2FkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgaW5zZXJ0ZWQpIHNldCBcYGFzeW5jPSJmYWxzZSJcYC4KClNlZSBbQnJvd3NlciBjb21wYXRpYmlsaXR5XSgjQnJvd3Nlcl9jb21wYXRpYmlsaXR5KSBmb3Igbm90ZXMgb24gYnJvd3NlciBzdXBwb3J0LiBTZWUgYWxzbyBbQXN5bmMgc2NyaXB0cyBmb3IgYXNtLmpzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dhbWVzL1RlY2huaXF1ZXMvQXN5bmNfc2NyaXB0cykuYH19LHtuYW1lOiJkZWZlciIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaXMgc2V0IHRvIGluZGljYXRlIHRvIGEgYnJvd3NlciB0aGF0IHRoZSBzY3JpcHQgaXMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBiZWVuIHBhcnNlZCwgYnV0IGJlZm9yZSBmaXJpbmcgW2BET01Db250ZW50TG9hZGVkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL0RPTUNvbnRlbnRMb2FkZWQgIi9lbi1VUy9kb2NzL1dlYi9FdmVudHMvRE9NQ29udGVudExvYWRlZCIpLlxuXG5TY3JpcHRzIHdpdGggdGhlIGBkZWZlcmAgYXR0cmlidXRlIHdpbGwgcHJldmVudCB0aGUgYERPTUNvbnRlbnRMb2FkZWRgIGV2ZW50IGZyb20gZmlyaW5nIHVudGlsIHRoZSBzY3JpcHQgaGFzIGxvYWRlZCBhbmQgZmluaXNoZWQgZXZhbHVhdGluZy5cblxuVGhpcyBhdHRyaWJ1dGUgbXVzdCBub3QgYmUgdXNlZCBpZiB0aGUgYHNyY2AgYXR0cmlidXRlIGlzIGFic2VudCAoaS5lLiBmb3IgaW5saW5lIHNjcmlwdHMpLCBpbiB0aGlzIGNhc2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QuXG5cblRvIGFjaGlldmUgYSBzaW1pbGFyIGVmZmVjdCBmb3IgZHluYW1pY2FsbHkgaW5zZXJ0ZWQgc2NyaXB0cyB1c2UgYGFzeW5jPSJmYWxzZSJgIGluc3RlYWQuIFNjcmlwdHMgd2l0aCB0aGUgYGRlZmVyYCBhdHRyaWJ1dGUgd2lsbCBleGVjdXRlIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhciBpbiB0aGUgZG9jdW1lbnQuJ319LHtuYW1lOiJjcm9zc29yaWdpbiIsdmFsdWVTZXQ6InhvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidOb3JtYWwgYHNjcmlwdGAgZWxlbWVudHMgcGFzcyBtaW5pbWFsIGluZm9ybWF0aW9uIHRvIHRoZSBbYHdpbmRvdy5vbmVycm9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dsb2JhbEV2ZW50SGFuZGxlcnMvb25lcnJvciAiVGhlIG9uZXJyb3IgcHJvcGVydHkgb2YgdGhlIEdsb2JhbEV2ZW50SGFuZGxlcnMgbWl4aW4gaXMgYW4gRXZlbnRIYW5kbGVyIHRoYXQgcHJvY2Vzc2VzIGVycm9yIGV2ZW50cy4iKSBmb3Igc2NyaXB0cyB3aGljaCBkbyBub3QgcGFzcyB0aGUgc3RhbmRhcmQgW0NPUlNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ09SUyAiQ09SUzogQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIGlzIGEgc3lzdGVtLCBjb25zaXN0aW5nIG9mIHRyYW5zbWl0dGluZyBIVFRQIGhlYWRlcnMsIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGJyb3dzZXJzIGJsb2NrIGZyb250ZW5kIEphdmFTY3JpcHQgY29kZSBmcm9tIGFjY2Vzc2luZyByZXNwb25zZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy4iKSBjaGVja3MuIFRvIGFsbG93IGVycm9yIGxvZ2dpbmcgZm9yIHNpdGVzIHdoaWNoIHVzZSBhIHNlcGFyYXRlIGRvbWFpbiBmb3Igc3RhdGljIG1lZGlhLCB1c2UgdGhpcyBhdHRyaWJ1dGUuIFNlZSBbQ09SUyBzZXR0aW5ncyBhdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIGEgbW9yZSBkZXNjcmlwdGl2ZSBleHBsYW5hdGlvbiBvZiBpdHMgdmFsaWQgYXJndW1lbnRzLid9fSx7bmFtZToibm9uY2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgY3J5cHRvZ3JhcGhpYyBub25jZSAobnVtYmVyIHVzZWQgb25jZSkgdG8gd2hpdGVsaXN0IGlubGluZSBzY3JpcHRzIGluIGEgW3NjcmlwdC1zcmMgQ29udGVudC1TZWN1cml0eS1Qb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LVNlY3VyaXR5LVBvbGljeS9zY3JpcHQtc3JjKS4gVGhlIHNlcnZlciBtdXN0IGdlbmVyYXRlIGEgdW5pcXVlIG5vbmNlIHZhbHVlIGVhY2ggdGltZSBpdCB0cmFuc21pdHMgYSBwb2xpY3kuIEl0IGlzIGNyaXRpY2FsIHRvIHByb3ZpZGUgYSBub25jZSB0aGF0IGNhbm5vdCBiZSBndWVzc2VkIGFzIGJ5cGFzc2luZyBhIHJlc291cmNlJ3MgcG9saWN5IGlzIG90aGVyd2lzZSB0cml2aWFsLiJ9fSx7bmFtZToiaW50ZWdyaXR5IixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgaW5saW5lIG1ldGFkYXRhIHRoYXQgYSB1c2VyIGFnZW50IGNhbiB1c2UgdG8gdmVyaWZ5IHRoYXQgYSBmZXRjaGVkIHJlc291cmNlIGhhcyBiZWVuIGRlbGl2ZXJlZCBmcmVlIG9mIHVuZXhwZWN0ZWQgbWFuaXB1bGF0aW9uLiBTZWUgW1N1YnJlc291cmNlIEludGVncml0eV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU3VicmVzb3VyY2VfSW50ZWdyaXR5KS4ifSx7bmFtZToibm9tb2R1bGUiLGRlc2NyaXB0aW9uOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzY3JpcHQgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgW0VTMjAxNSBtb2R1bGVzXShodHRwczovL2hhY2tzLm1vemlsbGEub3JnLzIwMTUvMDgvZXM2LWluLWRlcHRoLW1vZHVsZXMvKSDigJQgaW4gZWZmZWN0LCB0aGlzIGNhbiBiZSB1c2VkIHRvIHNlcnZlIGZhbGxiYWNrIHNjcmlwdHMgdG8gb2xkZXIgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBtb2R1bGFyIEphdmFTY3JpcHQgY29kZS4ifSx7bmFtZToicmVmZXJyZXJwb2xpY3kiLGRlc2NyaXB0aW9uOidJbmRpY2F0ZXMgd2hpY2ggW3JlZmVycmVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvcmVmZXJyZXIpIHRvIHNlbmQgd2hlbiBmZXRjaGluZyB0aGUgc2NyaXB0LCBvciByZXNvdXJjZXMgZmV0Y2hlZCBieSB0aGUgc2NyaXB0OlxuXG4qICAgYG5vLXJlZmVycmVyYDogVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZWAgKGRlZmF1bHQpOiBUaGUgW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQgdG8gW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9vcmlnaW4gIm9yaWdpbjogV2ViIGNvbnRlbnRcJ3Mgb3JpZ2luIGlzIGRlZmluZWQgYnkgdGhlIHNjaGVtZSAocHJvdG9jb2wpLCBob3N0IChkb21haW4pLCBhbmQgcG9ydCBvZiB0aGUgVVJMIHVzZWQgdG8gYWNjZXNzIGl0LiBUd28gb2JqZWN0cyBoYXZlIHRoZSBzYW1lIG9yaWdpbiBvbmx5IHdoZW4gdGhlIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgYWxsIG1hdGNoLiIpcyB3aXRob3V0IFtUTFNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvVExTICJUTFM6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSwgcHJldmlvdXNseSBrbm93biBhcyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSwgaXMgYSBwcm90b2NvbCB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0byBjb21tdW5pY2F0ZSBzZWN1cmVseSBhY3Jvc3MgYSBuZXR3b3JrLCBwcmV2ZW50aW5nIHRhbXBlcmluZyB3aXRoIGFuZCBlYXZlc2Ryb3BwaW5nIG9uIGVtYWlsLCB3ZWIgYnJvd3NpbmcsIG1lc3NhZ2luZywgYW5kIG90aGVyIHByb3RvY29scy4iKSAoW0hUVFBTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0hUVFBTICJIVFRQUzogSFRUUFMgKEhUVFAgU2VjdXJlKSBpcyBhbiBlbmNyeXB0ZWQgdmVyc2lvbiBvZiB0aGUgSFRUUCBwcm90b2NvbC4gSXQgdXN1YWxseSB1c2VzIFNTTCBvciBUTFMgdG8gZW5jcnlwdCBhbGwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGEgY2xpZW50IGFuZCBhIHNlcnZlci4gVGhpcyBzZWN1cmUgY29ubmVjdGlvbiBhbGxvd3MgY2xpZW50cyB0byBzYWZlbHkgZXhjaGFuZ2Ugc2Vuc2l0aXZlIGRhdGEgd2l0aCBhIHNlcnZlciwgZm9yIGV4YW1wbGUgZm9yIGJhbmtpbmcgYWN0aXZpdGllcyBvciBvbmxpbmUgc2hvcHBpbmcuIikpLlxuKiAgIGBvcmlnaW5gOiBUaGUgc2VudCByZWZlcnJlciB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcmVmZXJyaW5nIHBhZ2U6IGl0cyBbc2NoZW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0FyY2hpdmUvTW96aWxsYS9VUklTY2hlbWUpLCBbaG9zdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9ob3N0ICJob3N0OiBBIGhvc3QgaXMgYSBkZXZpY2UgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCAob3IgYSBsb2NhbCBuZXR3b3JrKS4gU29tZSBob3N0cyBjYWxsZWQgc2VydmVycyBvZmZlciBhZGRpdGlvbmFsIHNlcnZpY2VzIGxpa2Ugc2VydmluZyB3ZWJwYWdlcyBvciBzdG9yaW5nIGZpbGVzIGFuZCBlbWFpbHMuIiksIGFuZCBbcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9wb3J0ICJwb3J0OiBGb3IgYSBjb21wdXRlciBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrIHdpdGggYW4gSVAgYWRkcmVzcywgYSBwb3J0IGlzIGEgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gUG9ydHMgYXJlIGRlc2lnbmF0ZWQgYnkgbnVtYmVycywgYW5kIGJlbG93IDEwMjQgZWFjaCBwb3J0IGlzIGFzc29jaWF0ZWQgYnkgZGVmYXVsdCB3aXRoIGEgc3BlY2lmaWMgcHJvdG9jb2wuIikuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmA6IFRoZSByZWZlcnJlciBzZW50IHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuIE5hdmlnYXRpb25zIG9uIHRoZSBzYW1lIG9yaWdpbiB3aWxsIHN0aWxsIGluY2x1ZGUgdGhlIHBhdGguXG4qICAgYHNhbWUtb3JpZ2luYDogQSByZWZlcnJlciB3aWxsIGJlIHNlbnQgZm9yIFtzYW1lIG9yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9TYW1lLW9yaWdpbl9wb2xpY3kgInNhbWUgb3JpZ2luOiBUaGUgc2FtZS1vcmlnaW4gcG9saWN5IGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgbWVjaGFuaXNtIHRoYXQgcmVzdHJpY3RzIGhvdyBhIGRvY3VtZW50IG9yIHNjcmlwdCBsb2FkZWQgZnJvbSBvbmUgb3JpZ2luIGNhbiBpbnRlcmFjdCB3aXRoIGEgcmVzb3VyY2UgZnJvbSBhbm90aGVyIG9yaWdpbi4iKSwgYnV0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyB3aWxsIGNvbnRhaW4gbm8gcmVmZXJyZXIgaW5mb3JtYXRpb24uXG4qICAgYHN0cmljdC1vcmlnaW5gOiBPbmx5IHNlbmQgdGhlIG9yaWdpbiBvZiB0aGUgZG9jdW1lbnQgYXMgdGhlIHJlZmVycmVyIHdoZW4gdGhlIHByb3RvY29sIHNlY3VyaXR5IGxldmVsIHN0YXlzIHRoZSBzYW1lIChlLmcuIEhUVFBT4oaSSFRUUFMpLCBidXQgZG9uXCd0IHNlbmQgaXQgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoZS5nLiBIVFRQU+KGkkhUVFApLlxuKiAgIGBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luYDogU2VuZCBhIGZ1bGwgVVJMIHdoZW4gcGVyZm9ybWluZyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QsIGJ1dCBvbmx5IHNlbmQgdGhlIG9yaWdpbiB3aGVuIHRoZSBwcm90b2NvbCBzZWN1cml0eSBsZXZlbCBzdGF5cyB0aGUgc2FtZSAoZS5nLkhUVFBT4oaSSFRUUFMpLCBhbmQgc2VuZCBubyBoZWFkZXIgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoZS5nLiBIVFRQU+KGkkhUVFApLlxuKiAgIGB1bnNhZmUtdXJsYDogVGhlIHJlZmVycmVyIHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luIF9hbmRfIHRoZSBwYXRoIChidXQgbm90IHRoZSBbZnJhZ21lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzL2hhc2gpLCBbcGFzc3dvcmRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzL3Bhc3N3b3JkKSwgb3IgW3VzZXJuYW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy91c2VybmFtZSkpLiAqKlRoaXMgdmFsdWUgaXMgdW5zYWZlKiosIGJlY2F1c2UgaXQgbGVha3Mgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLlxuXG4qKk5vdGUqKjogQW4gZW1wdHkgc3RyaW5nIHZhbHVlIChgIiJgKSBpcyBib3RoIHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgYSBmYWxsYmFjayB2YWx1ZSBpZiBgcmVmZXJyZXJwb2xpY3lgIGlzIG5vdCBzdXBwb3J0ZWQuIElmIGByZWZlcnJlcnBvbGljeWAgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIG9uIHRoZSBgPHNjcmlwdD5gIGVsZW1lbnQsIGl0IHdpbGwgYWRvcHQgYSBoaWdoZXItbGV2ZWwgcmVmZXJyZXIgcG9saWN5LCBpLmUuIG9uZSBzZXQgb24gdGhlIHdob2xlIGRvY3VtZW50IG9yIGRvbWFpbi4gSWYgYSBoaWdoZXItbGV2ZWwgcG9saWN5IGlzIG5vdCBhdmFpbGFibGUswqB0aGUgZW1wdHkgc3RyaW5nIGlzIHRyZWF0ZWQgYXMgYmVpbmcgZXF1aXZhbGVudCB0byBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGVgLid9LHtuYW1lOiJ0ZXh0IixkZXNjcmlwdGlvbjoiTGlrZSB0aGUgYHRleHRDb250ZW50YCBhdHRyaWJ1dGUsIHRoaXMgYXR0cmlidXRlIHNldHMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZWxlbWVudC4gVW5saWtlIHRoZSBgdGV4dENvbnRlbnRgIGF0dHJpYnV0ZSwgaG93ZXZlciwgdGhpcyBhdHRyaWJ1dGUgaXMgZXZhbHVhdGVkIGFzIGV4ZWN1dGFibGUgY29kZSBhZnRlciB0aGUgbm9kZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBET00uIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQifV19LHtuYW1lOiJub3NjcmlwdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5vc2NyaXB0IGVsZW1lbnQgcmVwcmVzZW50cyBub3RoaW5nIGlmIHNjcmlwdGluZyBpcyBlbmFibGVkLCBhbmQgcmVwcmVzZW50cyBpdHMgY2hpbGRyZW4gaWYgc2NyaXB0aW5nIGlzIGRpc2FibGVkLiBJdCBpcyB1c2VkIHRvIHByZXNlbnQgZGlmZmVyZW50IG1hcmt1cCB0byB1c2VyIGFnZW50cyB0aGF0IHN1cHBvcnQgc2NyaXB0aW5nIGFuZCB0aG9zZSB0aGF0IGRvbid0IHN1cHBvcnQgc2NyaXB0aW5nLCBieSBhZmZlY3RpbmcgaG93IHRoZSBkb2N1bWVudCBpcyBwYXJzZWQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbm9zY3JpcHQifV19LHtuYW1lOiJ0ZW1wbGF0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRlbXBsYXRlIGVsZW1lbnQgaXMgdXNlZCB0byBkZWNsYXJlIGZyYWdtZW50cyBvZiBIVE1MIHRoYXQgY2FuIGJlIGNsb25lZCBhbmQgaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50IGJ5IHNjcmlwdC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZW1wbGF0ZSJ9XX0se25hbWU6ImNhbnZhcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNhbnZhcyBlbGVtZW50IHByb3ZpZGVzIHNjcmlwdHMgd2l0aCBhIHJlc29sdXRpb24tZGVwZW5kZW50IGJpdG1hcCBjYW52YXMsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgZ3JhcGhzLCBnYW1lIGdyYXBoaWNzLCBhcnQsIG9yIG90aGVyIHZpc3VhbCBpbWFnZXMgb24gdGhlIGZseS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB3aWR0aCBvZiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBpbiBDU1MgcGl4ZWxzLiBEZWZhdWx0cyB0byAzMDAuIn19LHtuYW1lOiJoZWlnaHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZWlnaHQgb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdHMgdG8gMTUwLiJ9fSx7bmFtZToibW96LW9wYXF1ZSIsZGVzY3JpcHRpb246IkxldHMgdGhlIGNhbnZhcyBrbm93IHdoZXRoZXIgb3Igbm90IHRyYW5zbHVjZW5jeSB3aWxsIGJlIGEgZmFjdG9yLiBJZiB0aGUgY2FudmFzIGtub3dzIHRoZXJlJ3Mgbm8gdHJhbnNsdWNlbmN5LCBwYWludGluZyBwZXJmb3JtYW5jZSBjYW4gYmUgb3B0aW1pemVkLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IE1vemlsbGEtYmFzZWQgYnJvd3NlcnM7IHVzZSB0aGUgc3RhbmRhcmRpemVkIFtgY2FudmFzLmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogZmFsc2UgfSlgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTENhbnZhc0VsZW1lbnQvZ2V0Q29udGV4dCBcIlRoZSBIVE1MQ2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCkgbWV0aG9kIHJldHVybnMgYSBkcmF3aW5nIGNvbnRleHQgb24gdGhlIGNhbnZhcywgb3IgbnVsbCBpZiB0aGUgY29udGV4dCBpZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuXCIpIGluc3RlYWQuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMifV19XSxnbG9iYWxBdHRyaWJ1dGVzOlt7bmFtZToiYWNjZXNza2V5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQcm92aWRlcyBhIGhpbnQgZm9yIGdlbmVyYXRpbmcgYSBrZXlib2FyZCBzaG9ydGN1dCBmb3IgdGhlIGN1cnJlbnQgZWxlbWVudC4gVGhpcyBhdHRyaWJ1dGUgY29uc2lzdHMgb2YgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXJzLiBUaGUgYnJvd3NlciBzaG91bGQgdXNlIHRoZSBmaXJzdCBvbmUgdGhhdCBleGlzdHMgb24gdGhlIGNvbXB1dGVyIGtleWJvYXJkIGxheW91dC4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2FjY2Vzc2tleSJ9XX0se25hbWU6ImF1dG9jYXBpdGFsaXplIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJDb250cm9scyB3aGV0aGVyIGFuZCBob3cgdGV4dCBpbnB1dCBpcyBhdXRvbWF0aWNhbGx5IGNhcGl0YWxpemVkIGFzIGl0IGlzIGVudGVyZWQvZWRpdGVkIGJ5IHRoZSB1c2VyLiBJdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGBvZmZgIG9yIGBub25lYCwgbm8gYXV0b2NhcGl0YWxpemF0aW9uIGlzIGFwcGxpZWQgKGFsbCBsZXR0ZXJzIGRlZmF1bHQgdG8gbG93ZXJjYXNlKVxuKiAgIGBvbmAgb3IgYHNlbnRlbmNlc2AsIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCBzZW50ZW5jZSBkZWZhdWx0cyB0byBhIGNhcGl0YWwgbGV0dGVyOyBhbGwgb3RoZXIgbGV0dGVycyBkZWZhdWx0IHRvIGxvd2VyY2FzZVxuKiAgIGB3b3Jkc2AsIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGRlZmF1bHRzIHRvIGEgY2FwaXRhbCBsZXR0ZXI7IGFsbCBvdGhlciBsZXR0ZXJzIGRlZmF1bHQgdG8gbG93ZXJjYXNlXG4qICAgYGNoYXJhY3RlcnNgLCBhbGwgbGV0dGVycyBzaG91bGQgZGVmYXVsdCB0byB1cHBlcmNhc2UifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2F1dG9jYXBpdGFsaXplIn1dfSx7bmFtZToiY2xhc3MiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0Egc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIGNsYXNzZXMgb2YgdGhlIGVsZW1lbnQuIENsYXNzZXMgYWxsb3dzIENTUyBhbmQgSmF2YVNjcmlwdCB0byBzZWxlY3QgYW5kIGFjY2VzcyBzcGVjaWZpYyBlbGVtZW50cyB2aWEgdGhlIFtjbGFzcyBzZWxlY3RvcnNdKC9lbi1VUy9kb2NzL1dlYi9DU1MvQ2xhc3Nfc2VsZWN0b3JzKSBvciBmdW5jdGlvbnMgbGlrZSB0aGUgbWV0aG9kIFtgRG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgpYF0oL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICJyZXR1cm5zIGFuIGFycmF5LWxpa2Ugb2JqZWN0IG9mIGFsbCBjaGlsZCBlbGVtZW50cyB3aGljaCBoYXZlIGFsbCBvZiB0aGUgZ2l2ZW4gY2xhc3MgbmFtZXMuIikuJ30scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9jbGFzcyJ9XX0se25hbWU6ImNvbnRlbnRlZGl0YWJsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGluZyBpZiB0aGUgZWxlbWVudCBzaG91bGQgYmUgZWRpdGFibGUgYnkgdGhlIHVzZXIuIElmIHNvLCB0aGUgYnJvd3NlciBtb2RpZmllcyBpdHMgd2lkZ2V0IHRvIGFsbG93IGVkaXRpbmcuIFRoZSBhdHRyaWJ1dGUgbXVzdCB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGB0cnVlYCBvciB0aGUgX2VtcHR5IHN0cmluZ18sIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IG11c3QgYmUgZWRpdGFibGU7XG4qICAgYGZhbHNlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbXVzdCBub3QgYmUgZWRpdGFibGUuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9jb250ZW50ZWRpdGFibGUifV19LHtuYW1lOiJjb250ZXh0bWVudSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIGBbKippZCoqXSgjYXR0ci1pZClgIG9mIGEgW2A8bWVudT5gXSgvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21lbnUgIlRoZSBIVE1MIDxtZW51PiBlbGVtZW50IHJlcHJlc2VudHMgYSBncm91cCBvZiBjb21tYW5kcyB0aGF0IGEgdXNlciBjYW4gcGVyZm9ybSBvciBhY3RpdmF0ZS4gVGhpcyBpbmNsdWRlcyBib3RoIGxpc3QgbWVudXMsIHdoaWNoIG1pZ2h0IGFwcGVhciBhY3Jvc3MgdGhlIHRvcCBvZiBhIHNjcmVlbiwgYXMgd2VsbCBhcyBjb250ZXh0IG1lbnVzLCBzdWNoIGFzIHRob3NlIHRoYXQgbWlnaHQgYXBwZWFyIHVuZGVybmVhdGggYSBidXR0b24gYWZ0ZXIgaXQgaGFzIGJlZW4gY2xpY2tlZC4iKSB0byB1c2UgYXMgdGhlIGNvbnRleHR1YWwgbWVudSBmb3IgdGhpcyBlbGVtZW50Lid9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvY29udGV4dG1lbnUifV19LHtuYW1lOiJkaXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRpbmcgdGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgbHRyYCwgd2hpY2ggbWVhbnMgX2xlZnQgdG8gcmlnaHRfIGFuZCBpcyB0byBiZSB1c2VkIGZvciBsYW5ndWFnZXMgdGhhdCBhcmUgd3JpdHRlbiBmcm9tIHRoZSBsZWZ0IHRvIHRoZSByaWdodCAobGlrZSBFbmdsaXNoKTtcbiogICBgcnRsYCwgd2hpY2ggbWVhbnMgX3JpZ2h0IHRvIGxlZnRfIGFuZCBpcyB0byBiZSB1c2VkIGZvciBsYW5ndWFnZXMgdGhhdCBhcmUgd3JpdHRlbiBmcm9tIHRoZSByaWdodCB0byB0aGUgbGVmdCAobGlrZSBBcmFiaWMpO1xuKiAgIGBhdXRvYCwgd2hpY2ggbGV0cyB0aGUgdXNlciBhZ2VudCBkZWNpZGUuIEl0IHVzZXMgYSBiYXNpYyBhbGdvcml0aG0gYXMgaXQgcGFyc2VzIHRoZSBjaGFyYWN0ZXJzIGluc2lkZSB0aGUgZWxlbWVudCB1bnRpbCBpdCBmaW5kcyBhIGNoYXJhY3RlciB3aXRoIGEgc3Ryb25nIGRpcmVjdGlvbmFsaXR5LCB0aGVuIGl0IGFwcGxpZXMgdGhhdCBkaXJlY3Rpb25hbGl0eSB0byB0aGUgd2hvbGUgZWxlbWVudC4ifSx2YWx1ZVNldDoiZCIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9kaXIifV19LHtuYW1lOiJkcmFnZ2FibGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRpbmcgd2hldGhlciB0aGUgZWxlbWVudCBjYW4gYmUgZHJhZ2dlZCwgdXNpbmcgdGhlIFtEcmFnIGFuZCBEcm9wIEFQSV0oL2VuLXVzL2RvY3MvRHJhZ0Ryb3AvRHJhZ19hbmRfRHJvcCkuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYHRydWVgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBtYXkgYmUgZHJhZ2dlZFxuKiAgIGBmYWxzZWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IG1heSBub3QgYmUgZHJhZ2dlZC4ifSx2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9kcmFnZ2FibGUifV19LHtuYW1lOiJkcm9wem9uZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGluZyB3aGF0IHR5cGVzIG9mIGNvbnRlbnQgY2FuIGJlIGRyb3BwZWQgb24gYW4gZWxlbWVudCwgdXNpbmcgdGhlIFtEcmFnIGFuZCBEcm9wIEFQSV0oL2VuLVVTL2RvY3MvRHJhZ0Ryb3AvRHJhZ19hbmRfRHJvcCkuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYGNvcHlgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBkcm9wcGluZyB3aWxsIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGVsZW1lbnQgdGhhdCB3YXMgZHJhZ2dlZFxuKiAgIGBtb3ZlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgdGhhdCB3YXMgZHJhZ2dlZCB3aWxsIGJlIG1vdmVkIHRvIHRoaXMgbmV3IGxvY2F0aW9uLlxuKiAgIGBsaW5rYCwgd2lsbCBjcmVhdGUgYSBsaW5rIHRvIHRoZSBkcmFnZ2VkIGRhdGEuIn19LHtuYW1lOiJleHBvcnRwYXJ0cyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVXNlZCB0byB0cmFuc2l0aXZlbHkgZXhwb3J0IHNoYWRvdyBwYXJ0cyBmcm9tIGEgbmVzdGVkIHNoYWRvdyB0cmVlIGludG8gYSBjb250YWluaW5nIGxpZ2h0IHRyZWUuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9leHBvcnRwYXJ0cyJ9XX0se25hbWU6ImhpZGRlbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBub3QgeWV0LCBvciBpcyBubyBsb25nZXIsIF9yZWxldmFudF8uIEZvciBleGFtcGxlLCBpdCBjYW4gYmUgdXNlZCB0byBoaWRlIGVsZW1lbnRzIG9mIHRoZSBwYWdlIHRoYXQgY2FuJ3QgYmUgdXNlZCB1bnRpbCB0aGUgbG9naW4gcHJvY2VzcyBoYXMgYmVlbiBjb21wbGV0ZWQuIFRoZSBicm93c2VyIHdvbid0IHJlbmRlciBzdWNoIGVsZW1lbnRzLiBUaGlzIGF0dHJpYnV0ZSBtdXN0IG5vdCBiZSB1c2VkIHRvIGhpZGUgY29udGVudCB0aGF0IGNvdWxkIGxlZ2l0aW1hdGVseSBiZSBzaG93bi4ifSx2YWx1ZVNldDoidiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9oaWRkZW4ifV19LHtuYW1lOiJpZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhIHVuaXF1ZSBpZGVudGlmaWVyIChJRCkgd2hpY2ggbXVzdCBiZSB1bmlxdWUgaW4gdGhlIHdob2xlIGRvY3VtZW50LiBJdHMgcHVycG9zZSBpcyB0byBpZGVudGlmeSB0aGUgZWxlbWVudCB3aGVuIGxpbmtpbmcgKHVzaW5nIGEgZnJhZ21lbnQgaWRlbnRpZmllciksIHNjcmlwdGluZywgb3Igc3R5bGluZyAod2l0aCBDU1MpLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaWQifV19LHtuYW1lOiJpbnB1dG1vZGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1Byb3ZpZGVzIGEgaGludCB0byBicm93c2VycyBhcyB0byB0aGUgdHlwZSBvZiB2aXJ0dWFsIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIHdoZW4gZWRpdGluZyB0aGlzIGVsZW1lbnQgb3IgaXRzIGNvbnRlbnRzLiBVc2VkIHByaW1hcmlseSBvbiBbYDxpbnB1dD5gXSgvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudHMsIGJ1dCBpcyB1c2FibGUgb24gYW55IGVsZW1lbnQgd2hpbGUgaW4gYFtjb250ZW50ZWRpdGFibGVdKC9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItY29udGVudGVkaXRhYmxlKWAgbW9kZS4nfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2lucHV0bW9kZSJ9XX0se25hbWU6ImlzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhhdCBhIHN0YW5kYXJkIEhUTUwgZWxlbWVudCBzaG91bGQgYmVoYXZlIGxpa2UgYSByZWdpc3RlcmVkIGN1c3RvbSBidWlsdC1pbiBlbGVtZW50IChzZWUgW1VzaW5nIGN1c3RvbSBlbGVtZW50c10oL2VuLVVTL2RvY3MvV2ViL1dlYl9Db21wb25lbnRzL1VzaW5nX2N1c3RvbV9lbGVtZW50cykgZm9yIG1vcmUgZGV0YWlscykuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pcyJ9XX0se25hbWU6Iml0ZW1pZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVuaXF1ZSwgZ2xvYmFsIGlkZW50aWZpZXIgb2YgYW4gaXRlbS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2l0ZW1pZCJ9XX0se25hbWU6Iml0ZW1wcm9wIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJVc2VkIHRvIGFkZCBwcm9wZXJ0aWVzIHRvIGFuIGl0ZW0uIEV2ZXJ5IEhUTUwgZWxlbWVudCBtYXkgaGF2ZSBhbiBgaXRlbXByb3BgIGF0dHJpYnV0ZSBzcGVjaWZpZWQsIHdoZXJlIGFuIGBpdGVtcHJvcGAgY29uc2lzdHMgb2YgYSBuYW1lIGFuZCB2YWx1ZSBwYWlyLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXByb3AifV19LHtuYW1lOiJpdGVtcmVmIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBkZXNjZW5kYW50cyBvZiBhbiBlbGVtZW50IHdpdGggdGhlIGBpdGVtc2NvcGVgIGF0dHJpYnV0ZSBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpdGVtIHVzaW5nIGFuIGBpdGVtcmVmYC4gSXQgcHJvdmlkZXMgYSBsaXN0IG9mIGVsZW1lbnQgaWRzIChub3QgYGl0ZW1pZGBzKSB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBlbHNld2hlcmUgaW4gdGhlIGRvY3VtZW50LiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXJlZiJ9XX0se25hbWU6Iml0ZW1zY29wZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiYGl0ZW1zY29wZWAgKHVzdWFsbHkpIHdvcmtzIGFsb25nIHdpdGggYFtpdGVtdHlwZV0oL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMjYXR0ci1pdGVtdHlwZSlgIHRvIHNwZWNpZnkgdGhhdCB0aGUgSFRNTCBjb250YWluZWQgaW4gYSBibG9jayBpcyBhYm91dCBhIHBhcnRpY3VsYXIgaXRlbS4gYGl0ZW1zY29wZWAgY3JlYXRlcyB0aGUgSXRlbSBhbmQgZGVmaW5lcyB0aGUgc2NvcGUgb2YgdGhlIGBpdGVtdHlwZWAgYXNzb2NpYXRlZCB3aXRoIGl0LiBgaXRlbXR5cGVgIGlzIGEgdmFsaWQgVVJMIG9mIGEgdm9jYWJ1bGFyeSAoc3VjaCBhcyBbc2NoZW1hLm9yZ10oaHR0cHM6Ly9zY2hlbWEub3JnLykpIHRoYXQgZGVzY3JpYmVzIHRoZSBpdGVtIGFuZCBpdHMgcHJvcGVydGllcyBjb250ZXh0LiJ9LHZhbHVlU2V0OiJ2IixyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2l0ZW1zY29wZSJ9XX0se25hbWU6Iml0ZW10eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJTcGVjaWZpZXMgdGhlIFVSTCBvZiB0aGUgdm9jYWJ1bGFyeSB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZWZpbmUgYGl0ZW1wcm9wYHMgKGl0ZW0gcHJvcGVydGllcykgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiBgW2l0ZW1zY29wZV0oL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMjYXR0ci1pdGVtc2NvcGUpYCBpcyB1c2VkIHRvIHNldCB0aGUgc2NvcGUgb2Ygd2hlcmUgaW4gdGhlIGRhdGEgc3RydWN0dXJlIHRoZSB2b2NhYnVsYXJ5IHNldCBieSBgaXRlbXR5cGVgIHdpbGwgYmUgYWN0aXZlLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXR5cGUifV19LHtuYW1lOiJsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJIZWxwcyBkZWZpbmUgdGhlIGxhbmd1YWdlIG9mIGFuIGVsZW1lbnQ6IHRoZSBsYW5ndWFnZSB0aGF0IG5vbi1lZGl0YWJsZSBlbGVtZW50cyBhcmUgaW4sIG9yIHRoZSBsYW5ndWFnZSB0aGF0IGVkaXRhYmxlIGVsZW1lbnRzIHNob3VsZCBiZSB3cml0dGVuIGluIGJ5IHRoZSB1c2VyLiBUaGUgYXR0cmlidXRlIGNvbnRhaW5zIG9uZSDigJxsYW5ndWFnZSB0YWfigJ0gKG1hZGUgb2YgaHlwaGVuLXNlcGFyYXRlZCDigJxsYW5ndWFnZSBzdWJ0YWdz4oCdKSBpbiB0aGUgZm9ybWF0IGRlZmluZWQgaW4gW19UYWdzIGZvciBJZGVudGlmeWluZyBMYW5ndWFnZXMgKEJDUDQ3KV9dKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9iY3AvYmNwNDcudHh0KS4gWyoqeG1sOmxhbmcqKl0oI2F0dHIteG1sOmxhbmcpIGhhcyBwcmlvcml0eSBvdmVyIGl0LiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvbGFuZyJ9XX0se25hbWU6InBhcnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0Egc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHBhcnQgbmFtZXMgb2YgdGhlIGVsZW1lbnQuIFBhcnQgbmFtZXMgYWxsb3dzIENTUyB0byBzZWxlY3QgYW5kIHN0eWxlIHNwZWNpZmljIGVsZW1lbnRzIGluIGEgc2hhZG93IHRyZWUgdmlhIHRoZSBbYDo6cGFydGBdKC9lbi1VUy9kb2NzL1dlYi9DU1MvOjpwYXJ0ICJUaGUgOjpwYXJ0IENTUyBwc2V1ZG8tZWxlbWVudCByZXByZXNlbnRzIGFueSBlbGVtZW50IHdpdGhpbiBhIHNoYWRvdyB0cmVlIHRoYXQgaGFzIGEgbWF0Y2hpbmcgcGFydCBhdHRyaWJ1dGUuIikgcHNldWRvLWVsZW1lbnQuJ30scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9wYXJ0In1dfSx7bmFtZToicm9sZSIsdmFsdWVTZXQ6InJvbGVzIn0se25hbWU6InNsb3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFzc2lnbnMgYSBzbG90IGluIGEgW3NoYWRvdyBET01dKC9lbi1VUy9kb2NzL1dlYi9XZWJfQ29tcG9uZW50cy9TaGFkb3dfRE9NKSBzaGFkb3cgdHJlZSB0byBhbiBlbGVtZW50OiBBbiBlbGVtZW50IHdpdGggYSBgc2xvdGAgYXR0cmlidXRlIGlzIGFzc2lnbmVkIHRvIHRoZSBzbG90IGNyZWF0ZWQgYnkgdGhlIFtgPHNsb3Q+YF0oL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbG90IFwiVGhlIEhUTUwgPHNsb3Q+IGVsZW1lbnTigJRwYXJ0IG9mIHRoZSBXZWIgQ29tcG9uZW50cyB0ZWNobm9sb2d5IHN1aXRl4oCUaXMgYSBwbGFjZWhvbGRlciBpbnNpZGUgYSB3ZWIgY29tcG9uZW50IHRoYXQgeW91IGNhbiBmaWxsIHdpdGggeW91ciBvd24gbWFya3VwLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUgc2VwYXJhdGUgRE9NIHRyZWVzIGFuZCBwcmVzZW50IHRoZW0gdG9nZXRoZXIuXCIpIGVsZW1lbnQgd2hvc2UgYFtuYW1lXSgvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Nsb3QjYXR0ci1uYW1lKWAgYXR0cmlidXRlJ3MgdmFsdWUgbWF0Y2hlcyB0aGF0IGBzbG90YCBhdHRyaWJ1dGUncyB2YWx1ZS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3Nsb3QifV19LHtuYW1lOiJzcGVsbGNoZWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBkZWZpbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnQgbWF5IGJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIGVycm9ycy4gSXQgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgdHJ1ZWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSwgaWYgcG9zc2libGUsIGNoZWNrZWQgZm9yIHNwZWxsaW5nIGVycm9ycztcbiogICBgZmFsc2VgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgbm90IGJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIGVycm9ycy4ifSx2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9zcGVsbGNoZWNrIn1dfSx7bmFtZToic3R5bGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0NvbnRhaW5zIFtDU1NdKC9lbi1VUy9kb2NzL1dlYi9DU1MpIHN0eWxpbmcgZGVjbGFyYXRpb25zIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQuIE5vdGUgdGhhdCBpdCBpcyByZWNvbW1lbmRlZCBmb3Igc3R5bGVzIHRvIGJlIGRlZmluZWQgaW4gYSBzZXBhcmF0ZSBmaWxlIG9yIGZpbGVzLiBUaGlzIGF0dHJpYnV0ZSBhbmQgdGhlIFtgPHN0eWxlPmBdKC9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3R5bGUgIlRoZSBIVE1MIDxzdHlsZT4gZWxlbWVudCBjb250YWlucyBzdHlsZSBpbmZvcm1hdGlvbiBmb3IgYSBkb2N1bWVudCwgb3IgcGFydCBvZiBhIGRvY3VtZW50LiIpIGVsZW1lbnQgaGF2ZSBtYWlubHkgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgZm9yIHF1aWNrIHN0eWxpbmcsIGZvciBleGFtcGxlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLid9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvc3R5bGUifV19LHtuYW1lOiJ0YWJpbmRleCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTpgQW4gaW50ZWdlciBhdHRyaWJ1dGUgaW5kaWNhdGluZyBpZiB0aGUgZWxlbWVudCBjYW4gdGFrZSBpbnB1dCBmb2N1cyAoaXMgX2ZvY3VzYWJsZV8pLCBpZiBpdCBzaG91bGQgcGFydGljaXBhdGUgdG8gc2VxdWVudGlhbCBrZXlib2FyZCBuYXZpZ2F0aW9uLCBhbmQgaWYgc28sIGF0IHdoYXQgcG9zaXRpb24uIEl0IGNhbiB0YWtlIHNldmVyYWwgdmFsdWVzOgoKKiAgIGEgX25lZ2F0aXZlIHZhbHVlXyBtZWFucyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBmb2N1c2FibGUsIGJ1dCBzaG91bGQgbm90IGJlIHJlYWNoYWJsZSB2aWEgc2VxdWVudGlhbCBrZXlib2FyZCBuYXZpZ2F0aW9uOwoqICAgXGAwXGAgbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgZm9jdXNhYmxlIGFuZCByZWFjaGFibGUgdmlhIHNlcXVlbnRpYWwga2V5Ym9hcmQgbmF2aWdhdGlvbiwgYnV0IGl0cyByZWxhdGl2ZSBvcmRlciBpcyBkZWZpbmVkIGJ5IHRoZSBwbGF0Zm9ybSBjb252ZW50aW9uOwoqICAgYSBfcG9zaXRpdmUgdmFsdWVfIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGZvY3VzYWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzZXF1ZW50aWFsIGtleWJvYXJkIG5hdmlnYXRpb247IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZWxlbWVudHMgYXJlIGZvY3VzZWQgaXMgdGhlIGluY3JlYXNpbmcgdmFsdWUgb2YgdGhlIFsqKnRhYmluZGV4KipdKCNhdHRyLXRhYmluZGV4KS4gSWYgc2V2ZXJhbCBlbGVtZW50cyBzaGFyZSB0aGUgc2FtZSB0YWJpbmRleCwgdGhlaXIgcmVsYXRpdmUgb3JkZXIgZm9sbG93cyB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbnMgaW4gdGhlIGRvY3VtZW50LmB9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdGFiaW5kZXgifV19LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29udGFpbnMgYSB0ZXh0IHJlcHJlc2VudGluZyBhZHZpc29yeSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBlbGVtZW50IGl0IGJlbG9uZ3MgdG8uIFN1Y2ggaW5mb3JtYXRpb24gY2FuIHR5cGljYWxseSwgYnV0IG5vdCBuZWNlc3NhcmlseSwgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFzIGEgdG9vbHRpcC4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RpdGxlIn1dfSx7bmFtZToidHJhbnNsYXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSB0aGF0IGlzIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGUgdmFsdWVzIGFuZCB0aGUgdmFsdWVzIG9mIGl0cyBbYFRleHRgXSgvZW4tVVMvZG9jcy9XZWIvQVBJL1RleHQgXCJUaGUgVGV4dCBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgdGV4dHVhbCBjb250ZW50IG9mIEVsZW1lbnQgb3IgQXR0ci4gSWYgYW4gZWxlbWVudCBoYXMgbm8gbWFya3VwIHdpdGhpbiBpdHMgY29udGVudCwgaXQgaGFzIGEgc2luZ2xlIGNoaWxkIGltcGxlbWVudGluZyBUZXh0IHRoYXQgY29udGFpbnMgdGhlIGVsZW1lbnQncyB0ZXh0LiBIb3dldmVyLCBpZiB0aGUgZWxlbWVudCBjb250YWlucyBtYXJrdXAsIGl0IGlzIHBhcnNlZCBpbnRvIGluZm9ybWF0aW9uIGl0ZW1zIGFuZCBUZXh0IG5vZGVzIHRoYXQgZm9ybSBpdHMgY2hpbGRyZW4uXCIpIG5vZGUgY2hpbGRyZW4gYXJlIHRvIGJlIHRyYW5zbGF0ZWQgd2hlbiB0aGUgcGFnZSBpcyBsb2NhbGl6ZWQsIG9yIHdoZXRoZXIgdG8gbGVhdmUgdGhlbSB1bmNoYW5nZWQuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgZW1wdHkgc3RyaW5nIGFuZCBgeWVzYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBiZSB0cmFuc2xhdGVkLlxuKiAgIGBub2AsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IHdpbGwgbm90IGJlIHRyYW5zbGF0ZWQuIn0sdmFsdWVTZXQ6InkiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdHJhbnNsYXRlIn1dfSx7bmFtZToib25hYm9ydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxvYWRpbmcgb2YgYSByZXNvdXJjZSBoYXMgYmVlbiBhYm9ydGVkLiJ9fSx7bmFtZToib25ibHVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IGhhcyBsb3N0IGZvY3VzIChkb2VzIG5vdCBidWJibGUpLiJ9fSx7bmFtZToib25jYW5wbGF5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXNlciBhZ2VudCBjYW4gcGxheSB0aGUgbWVkaWEsIGJ1dCBlc3RpbWF0ZXMgdGhhdCBub3QgZW5vdWdoIGRhdGEgaGFzIGJlZW4gbG9hZGVkIHRvIHBsYXkgdGhlIG1lZGlhIHVwIHRvIGl0cyBlbmQgd2l0aG91dCBoYXZpbmcgdG8gc3RvcCBmb3IgZnVydGhlciBidWZmZXJpbmcgb2YgY29udGVudC4ifX0se25hbWU6Im9uY2FucGxheXRocm91Z2giLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1c2VyIGFnZW50IGNhbiBwbGF5IHRoZSBtZWRpYSB1cCB0byBpdHMgZW5kIHdpdGhvdXQgaGF2aW5nIHRvIHN0b3AgZm9yIGZ1cnRoZXIgYnVmZmVyaW5nIG9mIGNvbnRlbnQuIn19LHtuYW1lOiJvbmNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCBmb3IgPGlucHV0PiwgPHNlbGVjdD4sIGFuZCA8dGV4dGFyZWE+IGVsZW1lbnRzIHdoZW4gYSBjaGFuZ2UgdG8gdGhlIGVsZW1lbnQncyB2YWx1ZSBpcyBjb21taXR0ZWQgYnkgdGhlIHVzZXIuIn19LHtuYW1lOiJvbmNsaWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBidXR0b24gaGFzIGJlZW4gcHJlc3NlZCBhbmQgcmVsZWFzZWQgb24gYW4gZWxlbWVudC4ifX0se25hbWU6Im9uY29udGV4dG1lbnUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByaWdodCBidXR0b24gb2YgdGhlIG1vdXNlIGlzIGNsaWNrZWQgKGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIGRpc3BsYXllZCkuIn19LHtuYW1lOiJvbmRibGNsaWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBidXR0b24gaXMgY2xpY2tlZCB0d2ljZSBvbiBhbiBlbGVtZW50LiJ9fSx7bmFtZToib25kcmFnIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGlzIGJlaW5nIGRyYWdnZWQgKGV2ZXJ5IDM1MG1zKS4ifX0se25hbWU6Im9uZHJhZ2VuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBkcmFnIG9wZXJhdGlvbiBpcyBiZWluZyBlbmRlZCAoYnkgcmVsZWFzaW5nIGEgbW91c2UgYnV0dG9uIG9yIGhpdHRpbmcgdGhlIGVzY2FwZSBrZXkpLiJ9fSx7bmFtZToib25kcmFnZW50ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgZHJhZ2dlZCBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGVudGVycyBhIHZhbGlkIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToib25kcmFnbGVhdmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgZHJhZ2dlZCBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGxlYXZlcyBhIHZhbGlkIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToib25kcmFnb3ZlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZWxlbWVudCBvciB0ZXh0IHNlbGVjdGlvbiBpcyBiZWluZyBkcmFnZ2VkIG92ZXIgYSB2YWxpZCBkcm9wIHRhcmdldCAoZXZlcnkgMzUwbXMpLiJ9fSx7bmFtZToib25kcmFnc3RhcnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1c2VyIHN0YXJ0cyBkcmFnZ2luZyBhbiBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uLiJ9fSx7bmFtZToib25kcm9wIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IGlzIGRyb3BwZWQgb24gYSB2YWxpZCBkcm9wIHRhcmdldC4ifX0se25hbWU6Im9uZHVyYXRpb25jaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkdXJhdGlvbiBhdHRyaWJ1dGUgaGFzIGJlZW4gdXBkYXRlZC4ifX0se25hbWU6Im9uZW1wdGllZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1lZGlhIGhhcyBiZWNvbWUgZW1wdHk7IGZvciBleGFtcGxlLCB0aGlzIGV2ZW50IGlzIHNlbnQgaWYgdGhlIG1lZGlhIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkIChvciBwYXJ0aWFsbHkgbG9hZGVkKSwgYW5kIHRoZSBsb2FkKCkgbWV0aG9kIGlzIGNhbGxlZCB0byByZWxvYWQgaXQuIn19LHtuYW1lOiJvbmVuZGVkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBoYXMgc3RvcHBlZCBiZWNhdXNlIHRoZSBlbmQgb2YgdGhlIG1lZGlhIHdhcyByZWFjaGVkLiJ9fSx7bmFtZToib25lcnJvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4ifX0se25hbWU6Im9uZm9jdXMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVsZW1lbnQgaGFzIHJlY2VpdmVkIGZvY3VzIChkb2VzIG5vdCBidWJibGUpLiJ9fSx7bmFtZToib25mb3JtY2hhbmdlIn0se25hbWU6Im9uZm9ybWlucHV0In0se25hbWU6Im9uaW5wdXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB2YWx1ZSBvZiBhbiBlbGVtZW50IGNoYW5nZXMgb3IgdGhlIGNvbnRlbnQgb2YgYW4gZWxlbWVudCB3aXRoIHRoZSBhdHRyaWJ1dGUgY29udGVudGVkaXRhYmxlIGlzIG1vZGlmaWVkLiJ9fSx7bmFtZToib25pbnZhbGlkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHN1Ym1pdHRhYmxlIGVsZW1lbnQgaGFzIGJlZW4gY2hlY2tlZCBhbmQgZG9lc24ndCBzYXRpc2Z5IGl0cyBjb25zdHJhaW50cy4ifX0se25hbWU6Im9ua2V5ZG93biIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcHJlc3NlZCBkb3duLiJ9fSx7bmFtZToib25rZXlwcmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcHJlc3NlZCBkb3duIGFuZCB0aGF0IGtleSBub3JtYWxseSBwcm9kdWNlcyBhIGNoYXJhY3RlciB2YWx1ZSAodXNlIGlucHV0IGluc3RlYWQpLiJ9fSx7bmFtZToib25rZXl1cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcmVsZWFzZWQuIn19LHtuYW1lOiJvbmxvYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcmVzb3VyY2UgYW5kIGl0cyBkZXBlbmRlbnQgcmVzb3VyY2VzIGhhdmUgZmluaXNoZWQgbG9hZGluZy4ifX0se25hbWU6Im9ubG9hZGVkZGF0YSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZpcnN0IGZyYW1lIG9mIHRoZSBtZWRpYSBoYXMgZmluaXNoZWQgbG9hZGluZy4ifX0se25hbWU6Im9ubG9hZGVkbWV0YWRhdGEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZXRhZGF0YSBoYXMgYmVlbiBsb2FkZWQuIn19LHtuYW1lOiJvbmxvYWRzdGFydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUHJvZ3Jlc3MgaGFzIGJlZ3VuLiJ9fSx7bmFtZToib25tb3VzZWRvd24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiAodXN1YWxseSBhIG1vdXNlKSBpcyBwcmVzc2VkIG9uIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbm1vdXNlbW92ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb3ZlciBhbiBlbGVtZW50LiJ9fSx7bmFtZToib25tb3VzZW91dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb2ZmIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZCBvciBvZmYgb25lIG9mIGl0cyBjaGlsZHJlbi4ifX0se25hbWU6Im9ubW91c2VvdmVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZCBvciBvbnRvIG9uZSBvZiBpdHMgY2hpbGRyZW4uIn19LHtuYW1lOiJvbm1vdXNldXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvdmVyIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbm1vdXNld2hlZWwifSx7bmFtZToib25tb3VzZWVudGVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZC4ifX0se25hbWU6Im9ubW91c2VsZWF2ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb2ZmIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZC4ifX0se25hbWU6Im9ucGF1c2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBsYXliYWNrIGhhcyBiZWVuIHBhdXNlZC4ifX0se25hbWU6Im9ucGxheSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUGxheWJhY2sgaGFzIGJlZ3VuLiJ9fSx7bmFtZToib25wbGF5aW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBpcyByZWFkeSB0byBzdGFydCBhZnRlciBoYXZpbmcgYmVlbiBwYXVzZWQgb3IgZGVsYXllZCBkdWUgdG8gbGFjayBvZiBkYXRhLiJ9fSx7bmFtZToib25wcm9ncmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW4gcHJvZ3Jlc3MuIn19LHtuYW1lOiJvbnJhdGVjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwbGF5YmFjayByYXRlIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25yZXNldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBmb3JtIGlzIHJlc2V0LiJ9fSx7bmFtZToib25yZXNpemUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkb2N1bWVudCB2aWV3IGhhcyBiZWVuIHJlc2l6ZWQuIn19LHtuYW1lOiJvbnJlYWR5c3RhdGVjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBvZiBhIGRvY3VtZW50IGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25zY3JvbGwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkb2N1bWVudCB2aWV3IG9yIGFuIGVsZW1lbnQgaGFzIGJlZW4gc2Nyb2xsZWQuIn19LHtuYW1lOiJvbnNlZWtlZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzZWVrIG9wZXJhdGlvbiBjb21wbGV0ZWQuIn19LHtuYW1lOiJvbnNlZWtpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgc2VlayBvcGVyYXRpb24gYmVnYW4uIn19LHtuYW1lOiJvbnNlbGVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU29tZSB0ZXh0IGlzIGJlaW5nIHNlbGVjdGVkLiJ9fSx7bmFtZToib25zaG93IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGNvbnRleHRtZW51IGV2ZW50IHdhcyBmaXJlZCBvbi9idWJibGVkIHRvIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSBjb250ZXh0bWVudSBhdHRyaWJ1dGUifX0se25hbWU6Im9uc3RhbGxlZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVzZXIgYWdlbnQgaXMgdHJ5aW5nIHRvIGZldGNoIG1lZGlhIGRhdGEsIGJ1dCBkYXRhIGlzIHVuZXhwZWN0ZWRseSBub3QgZm9ydGhjb21pbmcuIn19LHtuYW1lOiJvbnN1Ym1pdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBmb3JtIGlzIHN1Ym1pdHRlZC4ifX0se25hbWU6Im9uc3VzcGVuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiTWVkaWEgZGF0YSBsb2FkaW5nIGhhcyBiZWVuIHN1c3BlbmRlZC4ifX0se25hbWU6Im9udGltZXVwZGF0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRpbWUgaW5kaWNhdGVkIGJ5IHRoZSBjdXJyZW50VGltZSBhdHRyaWJ1dGUgaGFzIGJlZW4gdXBkYXRlZC4ifX0se25hbWU6Im9udm9sdW1lY2hhbmdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdm9sdW1lIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib253YWl0aW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBoYXMgc3RvcHBlZCBiZWNhdXNlIG9mIGEgdGVtcG9yYXJ5IGxhY2sgb2YgZGF0YS4ifX0se25hbWU6Im9ucG9pbnRlcmNhbmNlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgaXMgdW5saWtlbHkgdG8gcHJvZHVjZSBhbnkgbW9yZSBldmVudHMuIn19LHtuYW1lOiJvbnBvaW50ZXJkb3duIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRlciBlbnRlcnMgdGhlIGFjdGl2ZSBidXR0b25zIHN0YXRlLiJ9fSx7bmFtZToib25wb2ludGVyZW50ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBpbnNpZGUgdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVybGVhdmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVybG9ja2NoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgd2FzIGxvY2tlZCBvciByZWxlYXNlZC4ifX0se25hbWU6Im9ucG9pbnRlcmxvY2tlcnJvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSXQgd2FzIGltcG9zc2libGUgdG8gbG9jayB0aGUgcG9pbnRlciBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgb3IgYmVjYXVzZSB0aGUgcGVybWlzc2lvbiB3YXMgZGVuaWVkLiJ9fSx7bmFtZToib25wb2ludGVybW92ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgY2hhbmdlZCBjb29yZGluYXRlcy4ifX0se25hbWU6Im9ucG9pbnRlcm91dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50aW5nIGRldmljZSBtb3ZlZCBvdXQgb2YgaGl0LXRlc3RpbmcgYm91bmRhcnkgb3IgbGVhdmVzIGRldGVjdGFibGUgaG92ZXIgcmFuZ2UuIn19LHtuYW1lOiJvbnBvaW50ZXJvdmVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRpbmcgZGV2aWNlIGlzIG1vdmVkIGludG8gdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVydXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwb2ludGVyIGxlYXZlcyB0aGUgYWN0aXZlIGJ1dHRvbnMgc3RhdGUuIn19LHtuYW1lOiJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hY3RpdmVkZXNjZW5kYW50In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB3aGVuIERPTSBmb2N1cyBpcyBvbiBhIFtgY29tcG9zaXRlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jY29tcG9zaXRlKSB3aWRnZXQsIFtgdGV4dGJveGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RleHRib3gpLCBbYGdyb3VwYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JvdXApLCBvciBbYGFwcGxpY2F0aW9uYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXBwbGljYXRpb24pLiJ9fSx7bmFtZToiYXJpYS1hdG9taWMiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtYXRvbWljIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIFthc3Npc3RpdmUgdGVjaG5vbG9naWVzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tYXNzaXN0aXZlLXRlY2hub2xvZ3kpIHdpbGwgcHJlc2VudCBhbGwsIG9yIG9ubHkgcGFydHMgb2YsIHRoZSBjaGFuZ2VkIHJlZ2lvbiBiYXNlZCBvbiB0aGUgY2hhbmdlIG5vdGlmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgW2BhcmlhLXJlbGV2YW50YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZWxldmFudCkgYXR0cmlidXRlLiJ9fSx7bmFtZToiYXJpYS1hdXRvY29tcGxldGUiLHZhbHVlU2V0OiJhdXRvY29tcGxldGUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hdXRvY29tcGxldGUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgaW5wdXR0aW5nIHRleHQgY291bGQgdHJpZ2dlciBkaXNwbGF5IG9mIG9uZSBvciBtb3JlIHByZWRpY3Rpb25zIG9mIHRoZSB1c2VyJ3MgaW50ZW5kZWQgdmFsdWUgZm9yIGFuIGlucHV0IGFuZCBzcGVjaWZpZXMgaG93IHByZWRpY3Rpb25zIHdvdWxkIGJlIHByZXNlbnRlZCBpZiB0aGV5IGFyZSBtYWRlLiJ9fSx7bmFtZToiYXJpYS1idXN5Iix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWJ1c3kifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIGFuIGVsZW1lbnQgaXMgYmVpbmcgbW9kaWZpZWQgYW5kIHRoYXQgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyBfTUFZXyB3YW50IHRvIHdhaXQgdW50aWwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbXBsZXRlIGJlZm9yZSBleHBvc2luZyB0aGVtIHRvIHRoZSB1c2VyLiJ9fSx7bmFtZToiYXJpYS1jaGVja2VkIix2YWx1ZVNldDoidHJpc3RhdGUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jaGVja2VkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0luZGljYXRlcyB0aGUgY3VycmVudCAiY2hlY2tlZCIgW3N0YXRlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tc3RhdGUpIG9mIGNoZWNrYm94ZXMsIHJhZGlvIGJ1dHRvbnMsIGFuZCBvdGhlciBbd2lkZ2V0c10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXdpZGdldCkuIFNlZSByZWxhdGVkIFtgYXJpYS1wcmVzc2VkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wcmVzc2VkKSBhbmQgW2BhcmlhLXNlbGVjdGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZWxlY3RlZCkuJ319LHtuYW1lOiJhcmlhLWNvbGNvdW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sY291bnQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNvbGluZGV4YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xpbmRleCkuIn19LHtuYW1lOiJhcmlhLWNvbGluZGV4IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29saW5kZXgifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhbiBbZWxlbWVudCdzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgY29sdW1uIGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgd2l0aGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1jb2xjb3VudGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sY291bnQpIGFuZCBbYGFyaWEtY29sc3BhbmBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sc3BhbikuIn19LHtuYW1lOiJhcmlhLWNvbHNwYW4iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xzcGFuIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHNwYW5uZWQgYnkgYSBjZWxsIG9yIGdyaWRjZWxsIHdpdGhpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtY29saW5kZXhgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbGluZGV4KSBhbmQgW2BhcmlhLXJvd3NwYW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd3NwYW4pLiJ9fSx7bmFtZToiYXJpYS1jb250cm9scyIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbnRyb2xzIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSB3aG9zZSBjb250ZW50cyBvciBwcmVzZW5jZSBhcmUgY29udHJvbGxlZCBieSB0aGUgY3VycmVudCBlbGVtZW50LiBTZWUgcmVsYXRlZCBbYGFyaWEtb3duc2BdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtb3ducykuIn19LHtuYW1lOiJhcmlhLWN1cnJlbnQiLHZhbHVlU2V0OiJjdXJyZW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY3VycmVudCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGl0ZW0gd2l0aGluIGEgY29udGFpbmVyIG9yIHNldCBvZiByZWxhdGVkIGVsZW1lbnRzLiJ9fSx7bmFtZToiYXJpYS1kZXNjcmliZWRieSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSB0aGF0IGRlc2NyaWJlcyB0aGUgW29iamVjdF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9iamVjdCkuIFNlZSByZWxhdGVkIFtgYXJpYS1sYWJlbGxlZGJ5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbGxlZGJ5KS4ifX0se25hbWU6ImFyaWEtZGlzYWJsZWQiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGlzYWJsZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgW3BlcmNlaXZhYmxlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tcGVyY2VpdmFibGUpIGJ1dCBkaXNhYmxlZCwgc28gaXQgaXMgbm90IGVkaXRhYmxlIG9yIG90aGVyd2lzZSBbb3BlcmFibGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1vcGVyYWJsZSkuIFNlZSByZWxhdGVkIFtgYXJpYS1oaWRkZW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWhpZGRlbikgYW5kIFtgYXJpYS1yZWFkb25seWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcmVhZG9ubHkpLiJ9fSx7bmFtZToiYXJpYS1kcm9wZWZmZWN0Iix2YWx1ZVNldDoiZHJvcGVmZmVjdCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRyb3BlZmZlY3QifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiXFxbRGVwcmVjYXRlZCBpbiBBUklBIDEuMVxcXSBJbmRpY2F0ZXMgd2hhdCBmdW5jdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB3aGVuIGEgZHJhZ2dlZCBvYmplY3QgaXMgcmVsZWFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToiYXJpYS1lcnJvcm1lc3NhZ2UiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1lcnJvcm1lc3NhZ2UifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB0aGF0IHByb3ZpZGVzIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBbb2JqZWN0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tb2JqZWN0KS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWludmFsaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWludmFsaWQpIGFuZCBbYGFyaWEtZGVzY3JpYmVkYnlgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5KS4ifX0se25hbWU6ImFyaWEtZXhwYW5kZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZXhwYW5kZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQsIG9yIGFub3RoZXIgZ3JvdXBpbmcgZWxlbWVudCBpdCBjb250cm9scywgaXMgY3VycmVudGx5IGV4cGFuZGVkIG9yIGNvbGxhcHNlZC4ifX0se25hbWU6ImFyaWEtZmxvd3RvIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZmxvd3RvIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIG5leHQgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIGluIGFuIGFsdGVybmF0ZSByZWFkaW5nIG9yZGVyIG9mIGNvbnRlbnQgd2hpY2gsIGF0IHRoZSB1c2VyJ3MgZGlzY3JldGlvbiwgYWxsb3dzIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IHRvIG92ZXJyaWRlIHRoZSBnZW5lcmFsIGRlZmF1bHQgb2YgcmVhZGluZyBpbiBkb2N1bWVudCBzb3VyY2Ugb3JkZXIuIn19LHtuYW1lOiJhcmlhLWdyYWJiZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZ3JhYmJlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOmBcXFtEZXByZWNhdGVkIGluIEFSSUEgMS4xXFxdIEluZGljYXRlcyBhbiBlbGVtZW50J3MgImdyYWJiZWQiIFtzdGF0ZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXN0YXRlKSBpbiBhIGRyYWctYW5kLWRyb3Agb3BlcmF0aW9uLmB9fSx7bmFtZToiYXJpYS1oYXNwb3B1cCIsdmFsdWVTZXQ6Imhhc3BvcHVwIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtaGFzcG9wdXAifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHR5cGUgb2YgaW50ZXJhY3RpdmUgcG9wdXAgZWxlbWVudCwgc3VjaCBhcyBtZW51IG9yIGRpYWxvZywgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkuIn19LHtuYW1lOiJhcmlhLWhpZGRlbiIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1oaWRkZW4ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgZXhwb3NlZCB0byBhbiBhY2Nlc3NpYmlsaXR5IEFQSS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWRpc2FibGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1kaXNhYmxlZCkuIn19LHtuYW1lOiJhcmlhLWludmFsaWQiLHZhbHVlU2V0OiJpbnZhbGlkIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtaW52YWxpZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIGVudGVyZWQgdmFsdWUgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gU2VlIHJlbGF0ZWQgW2BhcmlhLWVycm9ybWVzc2FnZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZXJyb3JtZXNzYWdlKS4ifX0se25hbWU6ImFyaWEtbGFiZWwiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIGEgc3RyaW5nIHZhbHVlIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNlZSByZWxhdGVkIFtgYXJpYS1sYWJlbGxlZGJ5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbGxlZGJ5KS4ifX0se25hbWU6ImFyaWEtbGFiZWxsZWRieSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxhYmVsbGVkYnkifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNlZSByZWxhdGVkIFtgYXJpYS1kZXNjcmliZWRieWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGVzY3JpYmVkYnkpLiJ9fSx7bmFtZToiYXJpYS1sZXZlbCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxldmVsIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIGhpZXJhcmNoaWNhbCBsZXZlbCBvZiBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIHdpdGhpbiBhIHN0cnVjdHVyZS4ifX0se25hbWU6ImFyaWEtbGl2ZSIsdmFsdWVTZXQ6ImxpdmUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1saXZlIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGF0IGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgd2lsbCBiZSB1cGRhdGVkLCBhbmQgZGVzY3JpYmVzIHRoZSB0eXBlcyBvZiB1cGRhdGVzIHRoZSBbdXNlciBhZ2VudHNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi11c2VyLWFnZW50KSwgW2Fzc2lzdGl2ZSB0ZWNobm9sb2dpZXNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1hc3Npc3RpdmUtdGVjaG5vbG9neSksIGFuZCB1c2VyIGNhbiBleHBlY3QgZnJvbSB0aGUgW2xpdmUgcmVnaW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tbGl2ZS1yZWdpb24pLiJ9fSx7bmFtZToiYXJpYS1tb2RhbCIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1tb2RhbCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hldGhlciBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIGlzIG1vZGFsIHdoZW4gZGlzcGxheWVkLiJ9fSx7bmFtZToiYXJpYS1tdWx0aWxpbmUiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbXVsdGlsaW5lIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIGEgdGV4dCBib3ggYWNjZXB0cyBtdWx0aXBsZSBsaW5lcyBvZiBpbnB1dCBvciBvbmx5IGEgc2luZ2xlIGxpbmUuIn19LHtuYW1lOiJhcmlhLW11bHRpc2VsZWN0YWJsZSIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1tdWx0aXNlbGVjdGFibGUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgbWF5IHNlbGVjdCBtb3JlIHRoYW4gb25lIGl0ZW0gZnJvbSB0aGUgY3VycmVudCBzZWxlY3RhYmxlIGRlc2NlbmRhbnRzLiJ9fSx7bmFtZToiYXJpYS1vcmllbnRhdGlvbiIsdmFsdWVTZXQ6Im9yaWVudGF0aW9uIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtb3JpZW50YXRpb24ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQncyBvcmllbnRhdGlvbiBpcyBob3Jpem9udGFsLCB2ZXJ0aWNhbCwgb3IgdW5rbm93bi9hbWJpZ3VvdXMuIn19LHtuYW1lOiJhcmlhLW93bnMiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1vd25zIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIGluIG9yZGVyIHRvIGRlZmluZSBhIHZpc3VhbCwgZnVuY3Rpb25hbCwgb3IgY29udGV4dHVhbCBwYXJlbnQvY2hpbGQgW3JlbGF0aW9uc2hpcF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXJlbGF0aW9uc2hpcCkgYmV0d2VlbiBET00gZWxlbWVudHMgd2hlcmUgdGhlIERPTSBoaWVyYXJjaHkgY2Fubm90IGJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSByZWxhdGlvbnNoaXAuIFNlZSByZWxhdGVkIFtgYXJpYS1jb250cm9sc2BdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29udHJvbHMpLiJ9fSx7bmFtZToiYXJpYS1wbGFjZWhvbGRlciIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXBsYWNlaG9sZGVyIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYSBzaG9ydCBoaW50IChhIHdvcmQgb3Igc2hvcnQgcGhyYXNlKSBpbnRlbmRlZCB0byBhaWQgdGhlIHVzZXIgd2l0aCBkYXRhIGVudHJ5IHdoZW4gdGhlIGNvbnRyb2wgaGFzIG5vIHZhbHVlLiBBIGhpbnQgY291bGQgYmUgYSBzYW1wbGUgdmFsdWUgb3IgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0LiJ9fSx7bmFtZToiYXJpYS1wb3NpbnNldCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXBvc2luc2V0In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSdzIG51bWJlciBvciBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBzZXQgb2YgbGlzdGl0ZW1zIG9yIHRyZWVpdGVtcy4gTm90IHJlcXVpcmVkIGlmIGFsbCBlbGVtZW50cyBpbiB0aGUgc2V0IGFyZSBwcmVzZW50IGluIHRoZSBET00uIFNlZSByZWxhdGVkIFtgYXJpYS1zZXRzaXplYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZXRzaXplKS4ifX0se25hbWU6ImFyaWEtcHJlc3NlZCIsdmFsdWVTZXQ6InRyaXN0YXRlIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcHJlc3NlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInByZXNzZWQiIFtzdGF0ZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXN0YXRlKSBvZiB0b2dnbGUgYnV0dG9ucy4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNoZWNrZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNoZWNrZWQpIGFuZCBbYGFyaWEtc2VsZWN0ZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNlbGVjdGVkKS4nfX0se25hbWU6ImFyaWEtcmVhZG9ubHkiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcmVhZG9ubHkifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgbm90IGVkaXRhYmxlLCBidXQgaXMgb3RoZXJ3aXNlIFtvcGVyYWJsZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9wZXJhYmxlKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWRpc2FibGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1kaXNhYmxlZCkuIn19LHtuYW1lOiJhcmlhLXJlbGV2YW50Iix2YWx1ZVNldDoicmVsZXZhbnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZWxldmFudCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hhdCBub3RpZmljYXRpb25zIHRoZSB1c2VyIGFnZW50IHdpbGwgdHJpZ2dlciB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgd2l0aGluIGEgbGl2ZSByZWdpb24gaXMgbW9kaWZpZWQuIFNlZSByZWxhdGVkIFtgYXJpYS1hdG9taWNgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWF0b21pYykuIn19LHtuYW1lOiJhcmlhLXJlcXVpcmVkIix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJlcXVpcmVkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGF0IHVzZXIgaW5wdXQgaXMgcmVxdWlyZWQgb24gdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgYmVmb3JlIGEgZm9ybSBtYXkgYmUgc3VibWl0dGVkLiJ9fSx7bmFtZToiYXJpYS1yb2xlZGVzY3JpcHRpb24iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb2xlZGVzY3JpcHRpb24ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhIGh1bWFuLXJlYWRhYmxlLCBhdXRob3ItbG9jYWxpemVkIGRlc2NyaXB0aW9uIGZvciB0aGUgW3JvbGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1yb2xlKSBvZiBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpLiJ9fSx7bmFtZToiYXJpYS1yb3djb3VudCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2NvdW50In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1yb3dpbmRleGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93aW5kZXgpLiJ9fSx7bmFtZToiYXJpYS1yb3dpbmRleCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2luZGV4In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYW4gW2VsZW1lbnQnc10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIHJvdyBpbmRleCBvciBwb3NpdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIHdpdGhpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtcm93Y291bnRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2NvdW50KSBhbmQgW2BhcmlhLXJvd3NwYW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd3NwYW4pLiJ9fSx7bmFtZToiYXJpYS1yb3dzcGFuIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93c3BhbiJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBzcGFubmVkIGJ5IGEgY2VsbCBvciBncmlkY2VsbCB3aXRoaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXJvd2luZGV4YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb3dpbmRleCkgYW5kIFtgYXJpYS1jb2xzcGFuYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xzcGFuKS4ifX0se25hbWU6ImFyaWEtc2VsZWN0ZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtc2VsZWN0ZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonSW5kaWNhdGVzIHRoZSBjdXJyZW50ICJzZWxlY3RlZCIgW3N0YXRlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tc3RhdGUpIG9mIHZhcmlvdXMgW3dpZGdldHNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtY2hlY2tlZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY2hlY2tlZCkgYW5kIFtgYXJpYS1wcmVzc2VkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wcmVzc2VkKS4nfX0se25hbWU6ImFyaWEtc2V0c2l6ZSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNldHNpemUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBjdXJyZW50IHNldCBvZiBsaXN0aXRlbXMgb3IgdHJlZWl0ZW1zLiBOb3QgcmVxdWlyZWQgaWYgYWxsIGVsZW1lbnRzIGluIHRoZSBzZXQgYXJlIHByZXNlbnQgaW4gdGhlIERPTS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXBvc2luc2V0YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wb3NpbnNldCkuIn19LHtuYW1lOiJhcmlhLXNvcnQiLHZhbHVlU2V0OiJzb3J0IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtc29ydCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgaWYgaXRlbXMgaW4gYSB0YWJsZSBvciBncmlkIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcgb3JkZXIuIn19LHtuYW1lOiJhcmlhLXZhbHVlbWF4IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtdmFsdWVtYXgifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIGZvciBhIHJhbmdlIFt3aWRnZXRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiJ9fSx7bmFtZToiYXJpYS12YWx1ZW1pbiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVlbWluIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZSBmb3IgYSByYW5nZSBbd2lkZ2V0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4ifX0se25hbWU6ImFyaWEtdmFsdWVub3ciLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZW5vdyJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBhIHJhbmdlIFt3aWRnZXRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtdmFsdWV0ZXh0YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZXRleHQpLiJ9fSx7bmFtZToiYXJpYS12YWx1ZXRleHQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZXRleHQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgaHVtYW4gcmVhZGFibGUgdGV4dCBhbHRlcm5hdGl2ZSBvZiBbYGFyaWEtdmFsdWVub3dgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVlbm93KSBmb3IgYSByYW5nZSBbd2lkZ2V0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4ifX0se25hbWU6ImFyaWEtZGV0YWlscyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB0aGF0IHByb3ZpZGVzIGEgZGV0YWlsZWQsIGV4dGVuZGVkIGRlc2NyaXB0aW9uIGZvciB0aGUgW29iamVjdF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9iamVjdCkuIFNlZSByZWxhdGVkIFtgYXJpYS1kZXNjcmliZWRieWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGVzY3JpYmVkYnkpLiJ9fSx7bmFtZToiYXJpYS1rZXlzaG9ydGN1dHMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyBrZXlib2FyZCBzaG9ydGN1dHMgdGhhdCBhbiBhdXRob3IgaGFzIGltcGxlbWVudGVkIHRvIGFjdGl2YXRlIG9yIGdpdmUgZm9jdXMgdG8gYW4gZWxlbWVudC4ifX1dLHZhbHVlU2V0czpbe25hbWU6ImIiLHZhbHVlczpbe25hbWU6InRydWUifSx7bmFtZToiZmFsc2UifV19LHtuYW1lOiJ1Iix2YWx1ZXM6W3tuYW1lOiJ0cnVlIn0se25hbWU6ImZhbHNlIn0se25hbWU6InVuZGVmaW5lZCJ9XX0se25hbWU6Im8iLHZhbHVlczpbe25hbWU6Im9uIn0se25hbWU6Im9mZiJ9XX0se25hbWU6InkiLHZhbHVlczpbe25hbWU6InllcyJ9LHtuYW1lOiJubyJ9XX0se25hbWU6InciLHZhbHVlczpbe25hbWU6InNvZnQifSx7bmFtZToiaGFyZCJ9XX0se25hbWU6ImQiLHZhbHVlczpbe25hbWU6Imx0ciJ9LHtuYW1lOiJydGwifSx7bmFtZToiYXV0byJ9XX0se25hbWU6Im0iLHZhbHVlczpbe25hbWU6ImdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW0dFVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjMpOyBmb3JtIGRhdGEgYXJlIGFwcGVuZGVkIHRvIHRoZSBgYWN0aW9uYCBhdHRyaWJ1dGUgVVJJIHdpdGggYSAnPycgYXMgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdGluZyBVUkkgaXMgc2VudCB0byB0aGUgc2VydmVyLiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB0aGUgZm9ybSBoYXMgbm8gc2lkZS1lZmZlY3RzIGFuZCBjb250YWlucyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuIn19LHtuYW1lOiJwb3N0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJDb3JyZXNwb25kcyB0byB0aGUgSFRUUCBbUE9TVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjUpOyBmb3JtIGRhdGEgYXJlIGluY2x1ZGVkIGluIHRoZSBib2R5IG9mIHRoZSBmb3JtIGFuZCBzZW50IHRvIHRoZSBzZXJ2ZXIuIn19LHtuYW1lOiJkaWFsb2ciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlVzZSB3aGVuIHRoZSBmb3JtIGlzIGluc2lkZSBhIFtgPGRpYWxvZz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGlhbG9nKSBlbGVtZW50IHRvIGNsb3NlIHRoZSBkaWFsb2cgd2hlbiBzdWJtaXR0ZWQuIn19XX0se25hbWU6ImZtIix2YWx1ZXM6W3tuYW1lOiJnZXQifSx7bmFtZToicG9zdCJ9XX0se25hbWU6InMiLHZhbHVlczpbe25hbWU6InJvdyJ9LHtuYW1lOiJjb2wifSx7bmFtZToicm93Z3JvdXAifSx7bmFtZToiY29sZ3JvdXAifV19LHtuYW1lOiJ0Iix2YWx1ZXM6W3tuYW1lOiJoaWRkZW4ifSx7bmFtZToidGV4dCJ9LHtuYW1lOiJzZWFyY2gifSx7bmFtZToidGVsIn0se25hbWU6InVybCJ9LHtuYW1lOiJlbWFpbCJ9LHtuYW1lOiJwYXNzd29yZCJ9LHtuYW1lOiJkYXRldGltZSJ9LHtuYW1lOiJkYXRlIn0se25hbWU6Im1vbnRoIn0se25hbWU6IndlZWsifSx7bmFtZToidGltZSJ9LHtuYW1lOiJkYXRldGltZS1sb2NhbCJ9LHtuYW1lOiJudW1iZXIifSx7bmFtZToicmFuZ2UifSx7bmFtZToiY29sb3IifSx7bmFtZToiY2hlY2tib3gifSx7bmFtZToicmFkaW8ifSx7bmFtZToiZmlsZSJ9LHtuYW1lOiJzdWJtaXQifSx7bmFtZToiaW1hZ2UifSx7bmFtZToicmVzZXQifSx7bmFtZToiYnV0dG9uIn1dfSx7bmFtZToiaW0iLHZhbHVlczpbe25hbWU6InZlcmJhdGltIn0se25hbWU6ImxhdGluIn0se25hbWU6ImxhdGluLW5hbWUifSx7bmFtZToibGF0aW4tcHJvc2UifSx7bmFtZToiZnVsbC13aWR0aC1sYXRpbiJ9LHtuYW1lOiJrYW5hIn0se25hbWU6ImthbmEtbmFtZSJ9LHtuYW1lOiJrYXRha2FuYSJ9LHtuYW1lOiJudW1lcmljIn0se25hbWU6InRlbCJ9LHtuYW1lOiJlbWFpbCJ9LHtuYW1lOiJ1cmwifV19LHtuYW1lOiJidCIsdmFsdWVzOlt7bmFtZToiYnV0dG9uIn0se25hbWU6InN1Ym1pdCJ9LHtuYW1lOiJyZXNldCJ9LHtuYW1lOiJtZW51In1dfSx7bmFtZToibHQiLHZhbHVlczpbe25hbWU6IjEifSx7bmFtZToiYSJ9LHtuYW1lOiJBIn0se25hbWU6ImkifSx7bmFtZToiSSJ9XX0se25hbWU6Im10Iix2YWx1ZXM6W3tuYW1lOiJjb250ZXh0In0se25hbWU6InRvb2xiYXIifV19LHtuYW1lOiJtaXQiLHZhbHVlczpbe25hbWU6ImNvbW1hbmQifSx7bmFtZToiY2hlY2tib3gifSx7bmFtZToicmFkaW8ifV19LHtuYW1lOiJldCIsdmFsdWVzOlt7bmFtZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn0se25hbWU6Im11bHRpcGFydC9mb3JtLWRhdGEifSx7bmFtZToidGV4dC9wbGFpbiJ9XX0se25hbWU6InRrIix2YWx1ZXM6W3tuYW1lOiJzdWJ0aXRsZXMifSx7bmFtZToiY2FwdGlvbnMifSx7bmFtZToiZGVzY3JpcHRpb25zIn0se25hbWU6ImNoYXB0ZXJzIn0se25hbWU6Im1ldGFkYXRhIn1dfSx7bmFtZToicGwiLHZhbHVlczpbe25hbWU6Im5vbmUifSx7bmFtZToibWV0YWRhdGEifSx7bmFtZToiYXV0byJ9XX0se25hbWU6InNoIix2YWx1ZXM6W3tuYW1lOiJjaXJjbGUifSx7bmFtZToiZGVmYXVsdCJ9LHtuYW1lOiJwb2x5In0se25hbWU6InJlY3QifV19LHtuYW1lOiJ4byIsdmFsdWVzOlt7bmFtZToiYW5vbnltb3VzIn0se25hbWU6InVzZS1jcmVkZW50aWFscyJ9XX0se25hbWU6InNiIix2YWx1ZXM6W3tuYW1lOiJhbGxvdy1mb3JtcyJ9LHtuYW1lOiJhbGxvdy1tb2RhbHMifSx7bmFtZToiYWxsb3ctcG9pbnRlci1sb2NrIn0se25hbWU6ImFsbG93LXBvcHVwcyJ9LHtuYW1lOiJhbGxvdy1wb3B1cHMtdG8tZXNjYXBlLXNhbmRib3gifSx7bmFtZToiYWxsb3ctc2FtZS1vcmlnaW4ifSx7bmFtZToiYWxsb3ctc2NyaXB0cyJ9LHtuYW1lOiJhbGxvdy10b3AtbmF2aWdhdGlvbiJ9XX0se25hbWU6InRyaXN0YXRlIix2YWx1ZXM6W3tuYW1lOiJ0cnVlIn0se25hbWU6ImZhbHNlIn0se25hbWU6Im1peGVkIn0se25hbWU6InVuZGVmaW5lZCJ9XX0se25hbWU6ImlucHV0YXV0b2NvbXBsZXRlIix2YWx1ZXM6W3tuYW1lOiJhZGRpdGlvbmFsLW5hbWUifSx7bmFtZToiYWRkcmVzcy1sZXZlbDEifSx7bmFtZToiYWRkcmVzcy1sZXZlbDIifSx7bmFtZToiYWRkcmVzcy1sZXZlbDMifSx7bmFtZToiYWRkcmVzcy1sZXZlbDQifSx7bmFtZToiYWRkcmVzcy1saW5lMSJ9LHtuYW1lOiJhZGRyZXNzLWxpbmUyIn0se25hbWU6ImFkZHJlc3MtbGluZTMifSx7bmFtZToiYmRheSJ9LHtuYW1lOiJiZGF5LXllYXIifSx7bmFtZToiYmRheS1kYXkifSx7bmFtZToiYmRheS1tb250aCJ9LHtuYW1lOiJiaWxsaW5nIn0se25hbWU6ImNjLWFkZGl0aW9uYWwtbmFtZSJ9LHtuYW1lOiJjYy1jc2MifSx7bmFtZToiY2MtZXhwIn0se25hbWU6ImNjLWV4cC1tb250aCJ9LHtuYW1lOiJjYy1leHAteWVhciJ9LHtuYW1lOiJjYy1mYW1pbHktbmFtZSJ9LHtuYW1lOiJjYy1naXZlbi1uYW1lIn0se25hbWU6ImNjLW5hbWUifSx7bmFtZToiY2MtbnVtYmVyIn0se25hbWU6ImNjLXR5cGUifSx7bmFtZToiY291bnRyeSJ9LHtuYW1lOiJjb3VudHJ5LW5hbWUifSx7bmFtZToiY3VycmVudC1wYXNzd29yZCJ9LHtuYW1lOiJlbWFpbCJ9LHtuYW1lOiJmYW1pbHktbmFtZSJ9LHtuYW1lOiJmYXgifSx7bmFtZToiZ2l2ZW4tbmFtZSJ9LHtuYW1lOiJob21lIn0se25hbWU6Imhvbm9yaWZpYy1wcmVmaXgifSx7bmFtZToiaG9ub3JpZmljLXN1ZmZpeCJ9LHtuYW1lOiJpbXBwIn0se25hbWU6Imxhbmd1YWdlIn0se25hbWU6Im1vYmlsZSJ9LHtuYW1lOiJuYW1lIn0se25hbWU6Im5ldy1wYXNzd29yZCJ9LHtuYW1lOiJuaWNrbmFtZSJ9LHtuYW1lOiJvcmdhbml6YXRpb24ifSx7bmFtZToib3JnYW5pemF0aW9uLXRpdGxlIn0se25hbWU6InBhZ2VyIn0se25hbWU6InBob3RvIn0se25hbWU6InBvc3RhbC1jb2RlIn0se25hbWU6InNleCJ9LHtuYW1lOiJzaGlwcGluZyJ9LHtuYW1lOiJzdHJlZXQtYWRkcmVzcyJ9LHtuYW1lOiJ0ZWwtYXJlYS1jb2RlIn0se25hbWU6InRlbCJ9LHtuYW1lOiJ0ZWwtY291bnRyeS1jb2RlIn0se25hbWU6InRlbC1leHRlbnNpb24ifSx7bmFtZToidGVsLWxvY2FsIn0se25hbWU6InRlbC1sb2NhbC1wcmVmaXgifSx7bmFtZToidGVsLWxvY2FsLXN1ZmZpeCJ9LHtuYW1lOiJ0ZWwtbmF0aW9uYWwifSx7bmFtZToidHJhbnNhY3Rpb24tYW1vdW50In0se25hbWU6InRyYW5zYWN0aW9uLWN1cnJlbmN5In0se25hbWU6InVybCJ9LHtuYW1lOiJ1c2VybmFtZSJ9LHtuYW1lOiJ3b3JrIn1dfSx7bmFtZToiYXV0b2NvbXBsZXRlIix2YWx1ZXM6W3tuYW1lOiJpbmxpbmUifSx7bmFtZToibGlzdCJ9LHtuYW1lOiJib3RoIn0se25hbWU6Im5vbmUifV19LHtuYW1lOiJjdXJyZW50Iix2YWx1ZXM6W3tuYW1lOiJwYWdlIn0se25hbWU6InN0ZXAifSx7bmFtZToibG9jYXRpb24ifSx7bmFtZToiZGF0ZSJ9LHtuYW1lOiJ0aW1lIn0se25hbWU6InRydWUifSx7bmFtZToiZmFsc2UifV19LHtuYW1lOiJkcm9wZWZmZWN0Iix2YWx1ZXM6W3tuYW1lOiJjb3B5In0se25hbWU6Im1vdmUifSx7bmFtZToibGluayJ9LHtuYW1lOiJleGVjdXRlIn0se25hbWU6InBvcHVwIn0se25hbWU6Im5vbmUifV19LHtuYW1lOiJpbnZhbGlkIix2YWx1ZXM6W3tuYW1lOiJncmFtbWFyIn0se25hbWU6ImZhbHNlIn0se25hbWU6InNwZWxsaW5nIn0se25hbWU6InRydWUifV19LHtuYW1lOiJsaXZlIix2YWx1ZXM6W3tuYW1lOiJvZmYifSx7bmFtZToicG9saXRlIn0se25hbWU6ImFzc2VydGl2ZSJ9XX0se25hbWU6Im9yaWVudGF0aW9uIix2YWx1ZXM6W3tuYW1lOiJ2ZXJ0aWNhbCJ9LHtuYW1lOiJob3Jpem9udGFsIn0se25hbWU6InVuZGVmaW5lZCJ9XX0se25hbWU6InJlbGV2YW50Iix2YWx1ZXM6W3tuYW1lOiJhZGRpdGlvbnMifSx7bmFtZToicmVtb3ZhbHMifSx7bmFtZToidGV4dCJ9LHtuYW1lOiJhbGwifSx7bmFtZToiYWRkaXRpb25zIHRleHQifV19LHtuYW1lOiJzb3J0Iix2YWx1ZXM6W3tuYW1lOiJhc2NlbmRpbmcifSx7bmFtZToiZGVzY2VuZGluZyJ9LHtuYW1lOiJub25lIn0se25hbWU6Im90aGVyIn1dfSx7bmFtZToicm9sZXMiLHZhbHVlczpbe25hbWU6ImFsZXJ0In0se25hbWU6ImFsZXJ0ZGlhbG9nIn0se25hbWU6ImJ1dHRvbiJ9LHtuYW1lOiJjaGVja2JveCJ9LHtuYW1lOiJkaWFsb2cifSx7bmFtZToiZ3JpZGNlbGwifSx7bmFtZToibGluayJ9LHtuYW1lOiJsb2cifSx7bmFtZToibWFycXVlZSJ9LHtuYW1lOiJtZW51aXRlbSJ9LHtuYW1lOiJtZW51aXRlbWNoZWNrYm94In0se25hbWU6Im1lbnVpdGVtcmFkaW8ifSx7bmFtZToib3B0aW9uIn0se25hbWU6InByb2dyZXNzYmFyIn0se25hbWU6InJhZGlvIn0se25hbWU6InNjcm9sbGJhciJ9LHtuYW1lOiJzZWFyY2hib3gifSx7bmFtZToic2xpZGVyIn0se25hbWU6InNwaW5idXR0b24ifSx7bmFtZToic3RhdHVzIn0se25hbWU6InN3aXRjaCJ9LHtuYW1lOiJ0YWIifSx7bmFtZToidGFicGFuZWwifSx7bmFtZToidGV4dGJveCJ9LHtuYW1lOiJ0aW1lciJ9LHtuYW1lOiJ0b29sdGlwIn0se25hbWU6InRyZWVpdGVtIn0se25hbWU6ImNvbWJvYm94In0se25hbWU6ImdyaWQifSx7bmFtZToibGlzdGJveCJ9LHtuYW1lOiJtZW51In0se25hbWU6Im1lbnViYXIifSx7bmFtZToicmFkaW9ncm91cCJ9LHtuYW1lOiJ0YWJsaXN0In0se25hbWU6InRyZWUifSx7bmFtZToidHJlZWdyaWQifSx7bmFtZToiYXBwbGljYXRpb24ifSx7bmFtZToiYXJ0aWNsZSJ9LHtuYW1lOiJjZWxsIn0se25hbWU6ImNvbHVtbmhlYWRlciJ9LHtuYW1lOiJkZWZpbml0aW9uIn0se25hbWU6ImRpcmVjdG9yeSJ9LHtuYW1lOiJkb2N1bWVudCJ9LHtuYW1lOiJmZWVkIn0se25hbWU6ImZpZ3VyZSJ9LHtuYW1lOiJncm91cCJ9LHtuYW1lOiJoZWFkaW5nIn0se25hbWU6ImltZyJ9LHtuYW1lOiJsaXN0In0se25hbWU6Imxpc3RpdGVtIn0se25hbWU6Im1hdGgifSx7bmFtZToibm9uZSJ9LHtuYW1lOiJub3RlIn0se25hbWU6InByZXNlbnRhdGlvbiJ9LHtuYW1lOiJyZWdpb24ifSx7bmFtZToicm93In0se25hbWU6InJvd2dyb3VwIn0se25hbWU6InJvd2hlYWRlciJ9LHtuYW1lOiJzZXBhcmF0b3IifSx7bmFtZToidGFibGUifSx7bmFtZToidGVybSJ9LHtuYW1lOiJ0ZXh0In0se25hbWU6InRvb2xiYXIifSx7bmFtZToiYmFubmVyIn0se25hbWU6ImNvbXBsZW1lbnRhcnkifSx7bmFtZToiY29udGVudGluZm8ifSx7bmFtZToiZm9ybSJ9LHtuYW1lOiJtYWluIn0se25hbWU6Im5hdmlnYXRpb24ifSx7bmFtZToicmVnaW9uIn0se25hbWU6InNlYXJjaCJ9LHtuYW1lOiJkb2MtYWJzdHJhY3QifSx7bmFtZToiZG9jLWFja25vd2xlZGdtZW50cyJ9LHtuYW1lOiJkb2MtYWZ0ZXJ3b3JkIn0se25hbWU6ImRvYy1hcHBlbmRpeCJ9LHtuYW1lOiJkb2MtYmFja2xpbmsifSx7bmFtZToiZG9jLWJpYmxpb2VudHJ5In0se25hbWU6ImRvYy1iaWJsaW9ncmFwaHkifSx7bmFtZToiZG9jLWJpYmxpb3JlZiJ9LHtuYW1lOiJkb2MtY2hhcHRlciJ9LHtuYW1lOiJkb2MtY29sb3Bob24ifSx7bmFtZToiZG9jLWNvbmNsdXNpb24ifSx7bmFtZToiZG9jLWNvdmVyIn0se25hbWU6ImRvYy1jcmVkaXQifSx7bmFtZToiZG9jLWNyZWRpdHMifSx7bmFtZToiZG9jLWRlZGljYXRpb24ifSx7bmFtZToiZG9jLWVuZG5vdGUifSx7bmFtZToiZG9jLWVuZG5vdGVzIn0se25hbWU6ImRvYy1lcGlncmFwaCJ9LHtuYW1lOiJkb2MtZXBpbG9ndWUifSx7bmFtZToiZG9jLWVycmF0YSJ9LHtuYW1lOiJkb2MtZXhhbXBsZSJ9LHtuYW1lOiJkb2MtZm9vdG5vdGUifSx7bmFtZToiZG9jLWZvcmV3b3JkIn0se25hbWU6ImRvYy1nbG9zc2FyeSJ9LHtuYW1lOiJkb2MtZ2xvc3NyZWYifSx7bmFtZToiZG9jLWluZGV4In0se25hbWU6ImRvYy1pbnRyb2R1Y3Rpb24ifSx7bmFtZToiZG9jLW5vdGVyZWYifSx7bmFtZToiZG9jLW5vdGljZSJ9LHtuYW1lOiJkb2MtcGFnZWJyZWFrIn0se25hbWU6ImRvYy1wYWdlbGlzdCJ9LHtuYW1lOiJkb2MtcGFydCJ9LHtuYW1lOiJkb2MtcHJlZmFjZSJ9LHtuYW1lOiJkb2MtcHJvbG9ndWUifSx7bmFtZToiZG9jLXB1bGxxdW90ZSJ9LHtuYW1lOiJkb2MtcW5hIn0se25hbWU6ImRvYy1zdWJ0aXRsZSJ9LHtuYW1lOiJkb2MtdGlwIn0se25hbWU6ImRvYy10b2MifV19LHtuYW1lOiJtZXRhbmFtZXMiLHZhbHVlczpbe25hbWU6ImFwcGxpY2F0aW9uLW5hbWUifSx7bmFtZToiYXV0aG9yIn0se25hbWU6ImRlc2NyaXB0aW9uIn0se25hbWU6ImZvcm1hdC1kZXRlY3Rpb24ifSx7bmFtZToiZ2VuZXJhdG9yIn0se25hbWU6ImtleXdvcmRzIn0se25hbWU6InB1Ymxpc2hlciJ9LHtuYW1lOiJyZWZlcnJlciJ9LHtuYW1lOiJyb2JvdHMifSx7bmFtZToidGhlbWUtY29sb3IifSx7bmFtZToidmlld3BvcnQifV19LHtuYW1lOiJoYXNwb3B1cCIsdmFsdWVzOlt7bmFtZToiZmFsc2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IihkZWZhdWx0KSBJbmRpY2F0ZXMgdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHBvcHVwLiJ9fSx7bmFtZToidHJ1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIG1lbnUuIn19LHtuYW1lOiJtZW51IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIHBvcHVwIGlzIGEgbWVudS4ifX0se25hbWU6Imxpc3Rib3giLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgcG9wdXAgaXMgYSBsaXN0Ym94LiJ9fSx7bmFtZToidHJlZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIHRyZWUuIn19LHtuYW1lOiJncmlkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIHBvcHVwIGlzIGEgZ3JpZC4ifX0se25hbWU6ImRpYWxvZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIGRpYWxvZy4ifX1dfV19LGVjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmRhdGFQcm92aWRlcnM9W10sdGhpcy5zZXREYXRhUHJvdmlkZXJzKHQudXNlRGVmYXVsdERhdGFQcm92aWRlciE9PSExLHQuY3VzdG9tRGF0YVByb3ZpZGVyc3x8W10pfXJldHVybiBlLnByb3RvdHlwZS5zZXREYXRhUHJvdmlkZXJzPWZ1bmN0aW9uKHQsbil7dmFyIGk7dGhpcy5kYXRhUHJvdmlkZXJzPVtdLHQmJnRoaXMuZGF0YVByb3ZpZGVycy5wdXNoKG5ldyBZYSgiaHRtbDUiLEt1KSksKGk9dGhpcy5kYXRhUHJvdmlkZXJzKS5wdXNoLmFwcGx5KGksbil9LGUucHJvdG90eXBlLmdldERhdGFQcm92aWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJzfSxlfSgpLHRjPXt9O2Z1bmN0aW9uIG5jKGUpe2U9PT12b2lkIDAmJihlPXRjKTt2YXIgdD1uZXcgZWMoZSksbj1uZXcgTHUoZSx0KSxpPW5ldyB4dShlLHQpO3JldHVybntzZXREYXRhUHJvdmlkZXJzOnQuc2V0RGF0YVByb3ZpZGVycy5iaW5kKHQpLGNyZWF0ZVNjYW5uZXI6d2UscGFyc2VIVE1MRG9jdW1lbnQ6ZnVuY3Rpb24ocil7cmV0dXJuIEphKHIuZ2V0VGV4dCgpKX0sZG9Db21wbGV0ZTppLmRvQ29tcGxldGUuYmluZChpKSxkb0NvbXBsZXRlMjppLmRvQ29tcGxldGUyLmJpbmQoaSksc2V0Q29tcGxldGlvblBhcnRpY2lwYW50czppLnNldENvbXBsZXRpb25QYXJ0aWNpcGFudHMuYmluZChpKSxkb0hvdmVyOm4uZG9Ib3Zlci5iaW5kKG4pLGZvcm1hdDpEdSxmaW5kRG9jdW1lbnRIaWdobGlnaHRzOnF1LGZpbmREb2N1bWVudExpbmtzOkJ1LGZpbmREb2N1bWVudFN5bWJvbHM6T3UsZ2V0Rm9sZGluZ1JhbmdlczpKdSxnZXRTZWxlY3Rpb25SYW5nZXM6UXUsZG9RdW90ZUNvbXBsZXRlOmkuZG9RdW90ZUNvbXBsZXRlLmJpbmQoaSksZG9UYWdDb21wbGV0ZTppLmRvVGFnQ29tcGxldGUuYmluZChpKSxkb1JlbmFtZTpqdSxmaW5kTWF0Y2hpbmdUYWdQb3NpdGlvbjokdSxmaW5kT25UeXBlUmVuYW1lUmFuZ2VzOmNzLGZpbmRMaW5rZWRFZGl0aW5nUmFuZ2VzOmNzfX1mdW5jdGlvbiBpYyhlLHQpe3JldHVybiBuZXcgWWEoZSx0KX12YXIgcmM9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9jdHg9ZSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzPXQubGFuZ3VhZ2VTZXR0aW5ncyx0aGlzLl9sYW5ndWFnZUlkPXQubGFuZ3VhZ2VJZDtjb25zdCBuPXRoaXMuX2xhbmd1YWdlU2V0dGluZ3MuZGF0YSxpPW4/LnVzZURlZmF1bHREYXRhUHJvdmlkZXIscj1bXTtpZihuPy5kYXRhUHJvdmlkZXJzKWZvcihjb25zdCBhIGluIG4uZGF0YVByb3ZpZGVycylyLnB1c2goaWMoYSxuLmRhdGFQcm92aWRlcnNbYV0pKTt0aGlzLl9sYW5ndWFnZVNlcnZpY2U9bmMoe3VzZURlZmF1bHREYXRhUHJvdmlkZXI6aSxjdXN0b21EYXRhUHJvdmlkZXJzOnJ9KX1hc3luYyBkb0NvbXBsZXRlKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUhUTUxEb2N1bWVudChuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0NvbXBsZXRlKG4sdCxpLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MmJnRoaXMuX2xhbmd1YWdlU2V0dGluZ3Muc3VnZ2VzdCkpfWFzeW5jIGZvcm1hdChlLHQsbil7bGV0IGk9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFpKXJldHVybltdO2xldCByPXsuLi50aGlzLl9sYW5ndWFnZVNldHRpbmdzLmZvcm1hdCwuLi5ufSxhPXRoaXMuX2xhbmd1YWdlU2VydmljZS5mb3JtYXQoaSx0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoYSl9YXN5bmMgZG9Ib3ZlcihlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQobikscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Ib3ZlcihuLHQsaSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBmaW5kRG9jdW1lbnRIaWdobGlnaHRzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUhUTUxEb2N1bWVudChuKSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRIaWdobGlnaHRzKG4sdCxpKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGZpbmREb2N1bWVudExpbmtzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50TGlua3ModCxudWxsKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4pfWFzeW5jIGZpbmREb2N1bWVudFN5bWJvbHMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUhUTUxEb2N1bWVudCh0KSxpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRTeW1ib2xzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyBnZXRGb2xkaW5nUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRGb2xkaW5nUmFuZ2VzKG4sdCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyBnZXRTZWxlY3Rpb25SYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldFNlbGVjdGlvblJhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgZG9SZW5hbWUoZSx0LG4pe2xldCBpPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighaSlyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQoaSksYT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZW5hbWUoaSx0LG4scik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShhKX1fZ2V0VGV4dERvY3VtZW50KGUpe2xldCB0PXRoaXMuX2N0eC5nZXRNaXJyb3JNb2RlbHMoKTtmb3IobGV0IG4gb2YgdClpZihuLnVyaS50b1N0cmluZygpPT09ZSlyZXR1cm4gYWkuY3JlYXRlKGUsdGhpcy5fbGFuZ3VhZ2VJZCxuLnZlcnNpb24sbi5nZXRWYWx1ZSgpKTtyZXR1cm4gbnVsbH19O3NlbGYub25tZXNzYWdlPSgpPT57Y2EoKGUsdCk9Pm5ldyByYyhlLHQpKX19KSgpOwo=",I=Z=>Uint8Array.from(atob(Z),l=>l.charCodeAt(0)),G=typeof window<"u"&&window.Blob&&new Blob([I(d)],{type:"text/javascript;charset=utf-8"});function W(Z){let l;try{if(l=G&&(window.URL||window.webkitURL).createObjectURL(G),!l)throw"";const b=new Worker(l,{name:Z==null?void 0:Z.name});return b.addEventListener("error",()=>{(window.URL||window.webkitURL).revokeObjectURL(l)}),b}catch(b){return new Worker("data:text/javascript;base64,"+d,{name:Z==null?void 0:Z.name})}finally{l&&(window.URL||window.webkitURL).revokeObjectURL(l)}}export{W as default};
1
+ const d="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NsYXNzIHBze2NvbnN0cnVjdG9yKCl7dGhpcy5saXN0ZW5lcnM9W10sdGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyPWZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyB0LnN0YWNrP3J0LmlzRXJyb3JOb1RlbGVtZXRyeSh0KT9uZXcgcnQodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6bmV3IEVycm9yKHQubWVzc2FnZStgCgpgK3Quc3RhY2spOnR9LDApfX1lbWl0KHQpe3RoaXMubGlzdGVuZXJzLmZvckVhY2gobj0+e24odCl9KX1vblVuZXhwZWN0ZWRFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCksdGhpcy5lbWl0KHQpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IodCl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKHQpfX1jb25zdCBncz1uZXcgcHM7ZnVuY3Rpb24gbWkoZSl7YnMoZSl8fGdzLm9uVW5leHBlY3RlZEVycm9yKGUpfWZ1bmN0aW9uIGZpKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3R7bmFtZTp0LG1lc3NhZ2U6bn09ZSxpPWUuc3RhY2t0cmFjZXx8ZS5zdGFjaztyZXR1cm57JGlzRXJyb3I6ITAsbmFtZTp0LG1lc3NhZ2U6bixzdGFjazppLG5vVGVsZW1ldHJ5OnJ0LmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3QgYm49IkNhbmNlbGVkIjtmdW5jdGlvbiBicyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHZzPyEwOmUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09Ym4mJmUubWVzc2FnZT09PWJufWNsYXNzIHZzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcihibiksdGhpcy5uYW1lPXRoaXMubWVzc2FnZX19Y2xhc3MgcnQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkNvZGVFeHBlY3RlZEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQpe2lmKHQgaW5zdGFuY2VvZiBydClyZXR1cm4gdDtjb25zdCBuPW5ldyBydDtyZXR1cm4gbi5tZXNzYWdlPXQubWVzc2FnZSxuLnN0YWNrPXQuc3RhY2ssbn1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KHQpe3JldHVybiB0Lm5hbWU9PT0iQ29kZUV4cGVjdGVkRXJyb3IifX1jbGFzcyBVZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHR8fCJBbiB1bmV4cGVjdGVkIGJ1ZyBvY2N1cnJlZC4iKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxVZS5wcm90b3R5cGUpfX1mdW5jdGlvbiBfcyhlLHQpe2NvbnN0IG49dGhpcztsZXQgaT0hMSxyO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpfHwoaT0hMCxyPWUuYXBwbHkobixhcmd1bWVudHMpKSxyfX12YXIgV3Q7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoeSl7cmV0dXJuIHkmJnR5cGVvZiB5PT0ib2JqZWN0IiYmdHlwZW9mIHlbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1lLmlzPXQ7Y29uc3Qgbj1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBpKCl7cmV0dXJuIG59ZS5lbXB0eT1pO2Z1bmN0aW9uKnIoeSl7eWllbGQgeX1lLnNpbmdsZT1yO2Z1bmN0aW9uIGEoeSl7cmV0dXJuIHQoeSk/eTpyKHkpfWUud3JhcD1hO2Z1bmN0aW9uIHMoeSl7cmV0dXJuIHl8fG59ZS5mcm9tPXM7ZnVuY3Rpb24qbyh5KXtmb3IobGV0IEU9eS5sZW5ndGgtMTtFPj0wO0UtLSl5aWVsZCB5W0VdfWUucmV2ZXJzZT1vO2Z1bmN0aW9uIGwoeSl7cmV0dXJuIXl8fHlbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lPT09ITB9ZS5pc0VtcHR5PWw7ZnVuY3Rpb24gdSh5KXtyZXR1cm4geVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfWUuZmlyc3Q9dTtmdW5jdGlvbiBjKHksRSl7Zm9yKGNvbnN0IFIgb2YgeSlpZihFKFIpKXJldHVybiEwO3JldHVybiExfWUuc29tZT1jO2Z1bmN0aW9uIGQoeSxFKXtmb3IoY29uc3QgUiBvZiB5KWlmKEUoUikpcmV0dXJuIFJ9ZS5maW5kPWQ7ZnVuY3Rpb24qbSh5LEUpe2Zvcihjb25zdCBSIG9mIHkpRShSKSYmKHlpZWxkIFIpfWUuZmlsdGVyPW07ZnVuY3Rpb24qZih5LEUpe2xldCBSPTA7Zm9yKGNvbnN0IFAgb2YgeSl5aWVsZCBFKFAsUisrKX1lLm1hcD1mO2Z1bmN0aW9uKmIoLi4ueSl7Zm9yKGNvbnN0IEUgb2YgeSl5aWVsZCpFfWUuY29uY2F0PWI7ZnVuY3Rpb24gcCh5LEUsUil7bGV0IFA9Ujtmb3IoY29uc3QgdiBvZiB5KVA9RShQLHYpO3JldHVybiBQfWUucmVkdWNlPXA7ZnVuY3Rpb24qdyh5LEUsUj15Lmxlbmd0aCl7Zm9yKEU8MCYmKEUrPXkubGVuZ3RoKSxSPDA/Uis9eS5sZW5ndGg6Uj55Lmxlbmd0aCYmKFI9eS5sZW5ndGgpO0U8UjtFKyspeWllbGQgeVtFXX1lLnNsaWNlPXc7ZnVuY3Rpb24geCh5LEU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXtjb25zdCBSPVtdO2lmKEU9PT0wKXJldHVybltSLHldO2NvbnN0IFA9eVtTeW1ib2wuaXRlcmF0b3JdKCk7Zm9yKGxldCB2PTA7djxFO3YrKyl7Y29uc3QgZz1QLm5leHQoKTtpZihnLmRvbmUpcmV0dXJuW1IsZS5lbXB0eSgpXTtSLnB1c2goZy52YWx1ZSl9cmV0dXJuW1Ise1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIFB9fV19ZS5jb25zdW1lPXg7YXN5bmMgZnVuY3Rpb24gXyh5KXtjb25zdCBFPVtdO2ZvciBhd2FpdChjb25zdCBSIG9mIHkpRS5wdXNoKFIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoRSl9ZS5hc3luY1RvQXJyYXk9X30pKFd0fHwoV3Q9e30pKTtmdW5jdGlvbiBzYyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBvYyhlLHQpe31mdW5jdGlvbiBwaShlKXtpZihXdC5pcyhlKSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKWlmKG4pdHJ5e24uZGlzcG9zZSgpfWNhdGNoKGkpe3QucHVzaChpKX1pZih0Lmxlbmd0aD09PTEpdGhyb3cgdFswXTtpZih0Lmxlbmd0aD4xKXRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcih0LCJFbmNvdW50ZXJlZCBlcnJvcnMgd2hpbGUgZGlzcG9zaW5nIG9mIHN0b3JlIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/W106ZX1lbHNlIGlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gd3MoLi4uZSl7cmV0dXJuIEZ0KCgpPT5waShlKSl9ZnVuY3Rpb24gRnQoZSl7cmV0dXJue2Rpc3Bvc2U6X3MoKCk9PntlKCl9KX19Y2xhc3MgYXR7Y29uc3RydWN0b3IoKXt0aGlzLl90b0Rpc3Bvc2U9bmV3IFNldCx0aGlzLl9pc0Rpc3Bvc2VkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5faXNEaXNwb3NlZD0hMCx0aGlzLmNsZWFyKCkpfWdldCBpc0Rpc3Bvc2VkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWR9Y2xlYXIoKXtpZih0aGlzLl90b0Rpc3Bvc2Uuc2l6ZSE9PTApdHJ5e3BpKHRoaXMuX3RvRGlzcG9zZSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKHQpe2lmKCF0KXJldHVybiB0O2lmKHQ9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/YXQuRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HfHxjb25zb2xlLndhcm4obmV3IEVycm9yKCJUcnlpbmcgdG8gYWRkIGEgZGlzcG9zYWJsZSB0byBhIERpc3Bvc2FibGVTdG9yZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuIFRoZSBhZGRlZCBvYmplY3Qgd2lsbCBiZSBsZWFrZWQhIikuc3RhY2spOnRoaXMuX3RvRGlzcG9zZS5hZGQodCksdH1kZWxldGVBbmRMZWFrKHQpe3QmJnRoaXMuX3RvRGlzcG9zZS5oYXModCkmJnRoaXMuX3RvRGlzcG9zZS5kZWxldGUodCl9fWF0LkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyB5dHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyBhdCx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3Rlcih0KXtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQodCl9fXl0Lk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtsZXQgdGU9Y2xhc3MgaGl7Y29uc3RydWN0b3IodCl7dGhpcy5lbGVtZW50PXQsdGhpcy5uZXh0PWhpLlVuZGVmaW5lZCx0aGlzLnByZXY9aGkuVW5kZWZpbmVkfX07dGUuVW5kZWZpbmVkPW5ldyB0ZSh2b2lkIDApO2NsYXNzIHlze2NvbnN0cnVjdG9yKCl7dGhpcy5fZmlyc3Q9dGUuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9dGUuVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT10ZS5VbmRlZmluZWR9Y2xlYXIoKXtsZXQgdD10aGlzLl9maXJzdDtmb3IoO3QhPT10ZS5VbmRlZmluZWQ7KXtjb25zdCBuPXQubmV4dDt0LnByZXY9dGUuVW5kZWZpbmVkLHQubmV4dD10ZS5VbmRlZmluZWQsdD1ufXRoaXMuX2ZpcnN0PXRlLlVuZGVmaW5lZCx0aGlzLl9sYXN0PXRlLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITEpfXB1c2godCl7cmV0dXJuIHRoaXMuX2luc2VydCh0LCEwKX1faW5zZXJ0KHQsbil7Y29uc3QgaT1uZXcgdGUodCk7aWYodGhpcy5fZmlyc3Q9PT10ZS5VbmRlZmluZWQpdGhpcy5fZmlyc3Q9aSx0aGlzLl9sYXN0PWk7ZWxzZSBpZihuKXtjb25zdCBhPXRoaXMuX2xhc3Q7dGhpcy5fbGFzdD1pLGkucHJldj1hLGEubmV4dD1pfWVsc2V7Y29uc3QgYT10aGlzLl9maXJzdDt0aGlzLl9maXJzdD1pLGkubmV4dD1hLGEucHJldj1pfXRoaXMuX3NpemUrPTE7bGV0IHI9ITE7cmV0dXJuKCk9PntyfHwocj0hMCx0aGlzLl9yZW1vdmUoaSkpfX1zaGlmdCgpe2lmKHRoaXMuX2ZpcnN0IT09dGUuVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksdH19cG9wKCl7aWYodGhpcy5fbGFzdCE9PXRlLlVuZGVmaW5lZCl7Y29uc3QgdD10aGlzLl9sYXN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9sYXN0KSx0fX1fcmVtb3ZlKHQpe2lmKHQucHJldiE9PXRlLlVuZGVmaW5lZCYmdC5uZXh0IT09dGUuVW5kZWZpbmVkKXtjb25zdCBuPXQucHJldjtuLm5leHQ9dC5uZXh0LHQubmV4dC5wcmV2PW59ZWxzZSB0LnByZXY9PT10ZS5VbmRlZmluZWQmJnQubmV4dD09PXRlLlVuZGVmaW5lZD8odGhpcy5fZmlyc3Q9dGUuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9dGUuVW5kZWZpbmVkKTp0Lm5leHQ9PT10ZS5VbmRlZmluZWQ/KHRoaXMuX2xhc3Q9dGhpcy5fbGFzdC5wcmV2LHRoaXMuX2xhc3QubmV4dD10ZS5VbmRlZmluZWQpOnQucHJldj09PXRlLlVuZGVmaW5lZCYmKHRoaXMuX2ZpcnN0PXRoaXMuX2ZpcnN0Lm5leHQsdGhpcy5fZmlyc3QucHJldj10ZS5VbmRlZmluZWQpO3RoaXMuX3NpemUtPTF9KltTeW1ib2wuaXRlcmF0b3JdKCl7bGV0IHQ9dGhpcy5fZmlyc3Q7Zm9yKDt0IT09dGUuVW5kZWZpbmVkOyl5aWVsZCB0LmVsZW1lbnQsdD10Lm5leHR9fWNvbnN0IHhzPWdsb2JhbFRoaXMucGVyZm9ybWFuY2UmJnR5cGVvZiBnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIjtjbGFzcyBQdHtzdGF0aWMgY3JlYXRlKHQpe3JldHVybiBuZXcgUHQodCl9Y29uc3RydWN0b3IodCl7dGhpcy5fbm93PXhzJiZ0PT09ITE/RGF0ZS5ub3c6Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZS5ub3cuYmluZChnbG9iYWxUaGlzLnBlcmZvcm1hbmNlKSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfXJlc2V0KCl7dGhpcy5fc3RhcnRUaW1lPXRoaXMuX25vdygpLHRoaXMuX3N0b3BUaW1lPS0xfWVsYXBzZWQoKXtyZXR1cm4gdGhpcy5fc3RvcFRpbWUhPT0tMT90aGlzLl9zdG9wVGltZS10aGlzLl9zdGFydFRpbWU6dGhpcy5fbm93KCktdGhpcy5fc3RhcnRUaW1lfX12YXIgdm47KGZ1bmN0aW9uKGUpe2UuTm9uZT0oKT0+eXQuTm9uZTtmdW5jdGlvbiB0KFMsayl7cmV0dXJuIGQoUywoKT0+e30sMCx2b2lkIDAsITAsdm9pZCAwLGspfWUuZGVmZXI9dDtmdW5jdGlvbiBuKFMpe3JldHVybihrLE49bnVsbCxEKT0+e2xldCBIPSExLEY7cmV0dXJuIEY9UyhMPT57aWYoIUgpcmV0dXJuIEY/Ri5kaXNwb3NlKCk6SD0hMCxrLmNhbGwoTixMKX0sbnVsbCxEKSxIJiZGLmRpc3Bvc2UoKSxGfX1lLm9uY2U9bjtmdW5jdGlvbiBpKFMsayxOKXtyZXR1cm4gdSgoRCxIPW51bGwsRik9PlMoTD0+RC5jYWxsKEgsayhMKSksbnVsbCxGKSxOKX1lLm1hcD1pO2Z1bmN0aW9uIHIoUyxrLE4pe3JldHVybiB1KChELEg9bnVsbCxGKT0+UyhMPT57ayhMKSxELmNhbGwoSCxMKX0sbnVsbCxGKSxOKX1lLmZvckVhY2g9cjtmdW5jdGlvbiBhKFMsayxOKXtyZXR1cm4gdSgoRCxIPW51bGwsRik9PlMoTD0+ayhMKSYmRC5jYWxsKEgsTCksbnVsbCxGKSxOKX1lLmZpbHRlcj1hO2Z1bmN0aW9uIHMoUyl7cmV0dXJuIFN9ZS5zaWduYWw9cztmdW5jdGlvbiBvKC4uLlMpe3JldHVybihrLE49bnVsbCxEKT0+e2NvbnN0IEg9d3MoLi4uUy5tYXAoRj0+RihMPT5rLmNhbGwoTixMKSkpKTtyZXR1cm4gYyhILEQpfX1lLmFueT1vO2Z1bmN0aW9uIGwoUyxrLE4sRCl7bGV0IEg9TjtyZXR1cm4gaShTLEY9PihIPWsoSCxGKSxIKSxEKX1lLnJlZHVjZT1sO2Z1bmN0aW9uIHUoUyxrKXtsZXQgTjtjb25zdCBEPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7Tj1TKEguZmlyZSxIKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtOPy5kaXNwb3NlKCl9fSxIPW5ldyBBZShEKTtyZXR1cm4gaz8uYWRkKEgpLEguZXZlbnR9ZnVuY3Rpb24gYyhTLGspe3JldHVybiBrIGluc3RhbmNlb2YgQXJyYXk/ay5wdXNoKFMpOmsmJmsuYWRkKFMpLFN9ZnVuY3Rpb24gZChTLGssTj0xMDAsRD0hMSxIPSExLEYsTCl7bGV0IEEsTSxXLEk9MCx6O2NvbnN0IEI9e2xlYWtXYXJuaW5nVGhyZXNob2xkOkYsb25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe0E9UyhRPT57SSsrLE09ayhNLFEpLEQmJiFXJiYoWC5maXJlKE0pLE09dm9pZCAwKSx6PSgpPT57Y29uc3QgSj1NO009dm9pZCAwLFc9dm9pZCAwLCghRHx8ST4xKSYmWC5maXJlKEopLEk9MH0sdHlwZW9mIE49PSJudW1iZXIiPyhjbGVhclRpbWVvdXQoVyksVz1zZXRUaW1lb3V0KHosTikpOlc9PT12b2lkIDAmJihXPTAscXVldWVNaWNyb3Rhc2soeikpfSl9LG9uV2lsbFJlbW92ZUxpc3RlbmVyKCl7SCYmST4wJiZ6Py4oKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXt6PXZvaWQgMCxBLmRpc3Bvc2UoKX19LFg9bmV3IEFlKEIpO3JldHVybiBMPy5hZGQoWCksWC5ldmVudH1lLmRlYm91bmNlPWQ7ZnVuY3Rpb24gbShTLGs9MCxOKXtyZXR1cm4gZS5kZWJvdW5jZShTLChELEgpPT5EPyhELnB1c2goSCksRCk6W0hdLGssdm9pZCAwLCEwLHZvaWQgMCxOKX1lLmFjY3VtdWxhdGU9bTtmdW5jdGlvbiBmKFMsaz0oRCxIKT0+RD09PUgsTil7bGV0IEQ9ITAsSDtyZXR1cm4gYShTLEY9Pntjb25zdCBMPUR8fCFrKEYsSCk7cmV0dXJuIEQ9ITEsSD1GLEx9LE4pfWUubGF0Y2g9ZjtmdW5jdGlvbiBiKFMsayxOKXtyZXR1cm5bZS5maWx0ZXIoUyxrLE4pLGUuZmlsdGVyKFMsRD0+IWsoRCksTildfWUuc3BsaXQ9YjtmdW5jdGlvbiBwKFMsaz0hMSxOPVtdLEQpe2xldCBIPU4uc2xpY2UoKSxGPVMoTT0+e0g/SC5wdXNoKE0pOkEuZmlyZShNKX0pO0QmJkQuYWRkKEYpO2NvbnN0IEw9KCk9PntIPy5mb3JFYWNoKE09PkEuZmlyZShNKSksSD1udWxsfSxBPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe0Z8fChGPVMoTT0+QS5maXJlKE0pKSxEJiZELmFkZChGKSl9LG9uRGlkQWRkRmlyc3RMaXN0ZW5lcigpe0gmJihrP3NldFRpbWVvdXQoTCk6TCgpKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtGJiZGLmRpc3Bvc2UoKSxGPW51bGx9fSk7cmV0dXJuIEQmJkQuYWRkKEEpLEEuZXZlbnR9ZS5idWZmZXI9cDtmdW5jdGlvbiB3KFMsayl7cmV0dXJuKEQsSCxGKT0+e2NvbnN0IEw9ayhuZXcgXyk7cmV0dXJuIFMoZnVuY3Rpb24oQSl7Y29uc3QgTT1MLmV2YWx1YXRlKEEpO00hPT14JiZELmNhbGwoSCxNKX0sdm9pZCAwLEYpfX1lLmNoYWluPXc7Y29uc3QgeD1TeW1ib2woIkhhbHRDaGFpbmFibGUiKTtjbGFzcyBfe2NvbnN0cnVjdG9yKCl7dGhpcy5zdGVwcz1bXX1tYXAoayl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChrKSx0aGlzfWZvckVhY2goayl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChOPT4oayhOKSxOKSksdGhpc31maWx0ZXIoayl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChOPT5rKE4pP046eCksdGhpc31yZWR1Y2UoayxOKXtsZXQgRD1OO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goSD0+KEQ9ayhELEgpLEQpKSx0aGlzfWxhdGNoKGs9KE4sRCk9Pk49PT1EKXtsZXQgTj0hMCxEO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goSD0+e2NvbnN0IEY9Tnx8IWsoSCxEKTtyZXR1cm4gTj0hMSxEPUgsRj9IOnh9KSx0aGlzfWV2YWx1YXRlKGspe2Zvcihjb25zdCBOIG9mIHRoaXMuc3RlcHMpaWYoaz1OKGspLGs9PT14KWJyZWFrO3JldHVybiBrfX1mdW5jdGlvbiB5KFMsayxOPUQ9PkQpe2NvbnN0IEQ9KC4uLkEpPT5MLmZpcmUoTiguLi5BKSksSD0oKT0+Uy5vbihrLEQpLEY9KCk9PlMucmVtb3ZlTGlzdGVuZXIoayxEKSxMPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjpILG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOkZ9KTtyZXR1cm4gTC5ldmVudH1lLmZyb21Ob2RlRXZlbnRFbWl0dGVyPXk7ZnVuY3Rpb24gRShTLGssTj1EPT5EKXtjb25zdCBEPSguLi5BKT0+TC5maXJlKE4oLi4uQSkpLEg9KCk9PlMuYWRkRXZlbnRMaXN0ZW5lcihrLEQpLEY9KCk9PlMucmVtb3ZlRXZlbnRMaXN0ZW5lcihrLEQpLEw9bmV3IEFlKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOkgsb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6Rn0pO3JldHVybiBMLmV2ZW50fWUuZnJvbURPTUV2ZW50RW1pdHRlcj1FO2Z1bmN0aW9uIFIoUyl7cmV0dXJuIG5ldyBQcm9taXNlKGs9Pm4oUykoaykpfWUudG9Qcm9taXNlPVI7ZnVuY3Rpb24gUChTKXtjb25zdCBrPW5ldyBBZTtyZXR1cm4gUy50aGVuKE49PntrLmZpcmUoTil9LCgpPT57ay5maXJlKHZvaWQgMCl9KS5maW5hbGx5KCgpPT57ay5kaXNwb3NlKCl9KSxrLmV2ZW50fWUuZnJvbVByb21pc2U9UDtmdW5jdGlvbiB2KFMsayxOKXtyZXR1cm4gayhOKSxTKEQ9PmsoRCkpfWUucnVuQW5kU3Vic2NyaWJlPXY7Y2xhc3MgZ3tjb25zdHJ1Y3RvcihrLE4pe3RoaXMuX29ic2VydmFibGU9ayx0aGlzLl9jb3VudGVyPTAsdGhpcy5faGFzQ2hhbmdlZD0hMTtjb25zdCBEPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT57ay5hZGRPYnNlcnZlcih0aGlzKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9PntrLnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBBZShEKSxOJiZOLmFkZCh0aGlzLmVtaXR0ZXIpfWJlZ2luVXBkYXRlKGspe3RoaXMuX2NvdW50ZXIrK31oYW5kbGVQb3NzaWJsZUNoYW5nZShrKXt9aGFuZGxlQ2hhbmdlKGssTil7dGhpcy5faGFzQ2hhbmdlZD0hMH1lbmRVcGRhdGUoayl7dGhpcy5fY291bnRlci0tLHRoaXMuX2NvdW50ZXI9PT0wJiYodGhpcy5fb2JzZXJ2YWJsZS5yZXBvcnRDaGFuZ2VzKCksdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5fb2JzZXJ2YWJsZS5nZXQoKSkpKX19ZnVuY3Rpb24gVChTLGspe3JldHVybiBuZXcgZyhTLGspLmVtaXR0ZXIuZXZlbnR9ZS5mcm9tT2JzZXJ2YWJsZT1UO2Z1bmN0aW9uIHEoUyl7cmV0dXJuKGssTixEKT0+e2xldCBIPTAsRj0hMTtjb25zdCBMPXtiZWdpblVwZGF0ZSgpe0grK30sZW5kVXBkYXRlKCl7SC0tLEg9PT0wJiYoUy5yZXBvcnRDaGFuZ2VzKCksRiYmKEY9ITEsay5jYWxsKE4pKSl9LGhhbmRsZVBvc3NpYmxlQ2hhbmdlKCl7fSxoYW5kbGVDaGFuZ2UoKXtGPSEwfX07Uy5hZGRPYnNlcnZlcihMKSxTLnJlcG9ydENoYW5nZXMoKTtjb25zdCBBPXtkaXNwb3NlKCl7Uy5yZW1vdmVPYnNlcnZlcihMKX19O3JldHVybiBEIGluc3RhbmNlb2YgYXQ/RC5hZGQoQSk6QXJyYXkuaXNBcnJheShEKSYmRC5wdXNoKEEpLEF9fWUuZnJvbU9ic2VydmFibGVMaWdodD1xfSkodm58fCh2bj17fSkpO2NsYXNzIHN0e2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXJDb3VudD0wLHRoaXMuaW52b2NhdGlvbkNvdW50PTAsdGhpcy5lbGFwc2VkT3ZlcmFsbD0wLHRoaXMuZHVyYXRpb25zPVtdLHRoaXMubmFtZT1gJHt0fV8ke3N0Ll9pZFBvb2wrK31gLHN0LmFsbC5hZGQodGhpcyl9c3RhcnQodCl7dGhpcy5fc3RvcFdhdGNoPW5ldyBQdCx0aGlzLmxpc3RlbmVyQ291bnQ9dH1zdG9wKCl7aWYodGhpcy5fc3RvcFdhdGNoKXtjb25zdCB0PXRoaXMuX3N0b3BXYXRjaC5lbGFwc2VkKCk7dGhpcy5kdXJhdGlvbnMucHVzaCh0KSx0aGlzLmVsYXBzZWRPdmVyYWxsKz10LHRoaXMuaW52b2NhdGlvbkNvdW50Kz0xLHRoaXMuX3N0b3BXYXRjaD12b2lkIDB9fX1zdC5hbGw9bmV3IFNldCxzdC5faWRQb29sPTA7bGV0IFRzPS0xO2NsYXNzIGtze2NvbnN0cnVjdG9yKHQsbj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE4KS5zbGljZSgyLDUpKXt0aGlzLnRocmVzaG9sZD10LHRoaXMubmFtZT1uLHRoaXMuX3dhcm5Db3VudGRvd249MH1kaXNwb3NlKCl7dmFyIHQ7KHQ9dGhpcy5fc3RhY2tzKT09PW51bGx8fHQ9PT12b2lkIDB8fHQuY2xlYXIoKX1jaGVjayh0LG4pe2NvbnN0IGk9dGhpcy50aHJlc2hvbGQ7aWYoaTw9MHx8bjxpKXJldHVybjt0aGlzLl9zdGFja3N8fCh0aGlzLl9zdGFja3M9bmV3IE1hcCk7Y29uc3Qgcj10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO2lmKHRoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxyKzEpLHRoaXMuX3dhcm5Db3VudGRvd24tPTEsdGhpcy5fd2FybkNvdW50ZG93bjw9MCl7dGhpcy5fd2FybkNvdW50ZG93bj1pKi41O2xldCBhLHM9MDtmb3IoY29uc3RbbyxsXW9mIHRoaXMuX3N0YWNrcykoIWF8fHM8bCkmJihhPW8scz1sKTtjb25zb2xlLndhcm4oYFske3RoaXMubmFtZX1dIHBvdGVudGlhbCBsaXN0ZW5lciBMRUFLIGRldGVjdGVkLCBoYXZpbmcgJHtufSBsaXN0ZW5lcnMgYWxyZWFkeS4gTU9TVCBmcmVxdWVudCBsaXN0ZW5lciAoJHtzfSk6YCksY29uc29sZS53YXJuKGEpfXJldHVybigpPT57Y29uc3QgYT10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO3RoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxhLTEpfX19Y2xhc3MgX257c3RhdGljIGNyZWF0ZSgpe3ZhciB0O3JldHVybiBuZXcgX24oKHQ9bmV3IEVycm9yKCkuc3RhY2spIT09bnVsbCYmdCE9PXZvaWQgMD90OiIiKX1jb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXR9cHJpbnQoKXtjb25zb2xlLndhcm4odGhpcy52YWx1ZS5zcGxpdChgCmApLnNsaWNlKDIpLmpvaW4oYApgKSl9fWNsYXNzIHdue2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH19Y29uc3QgQXM9MjtjbGFzcyBBZXtjb25zdHJ1Y3Rvcih0KXt2YXIgbixpLHIsYSxzO3RoaXMuX3NpemU9MCx0aGlzLl9vcHRpb25zPXQsdGhpcy5fbGVha2FnZU1vbj0hKChuPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8bj09PXZvaWQgMCkmJm4ubGVha1dhcm5pbmdUaHJlc2hvbGQ/bmV3IGtzKChyPShpPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5sZWFrV2FybmluZ1RocmVzaG9sZCkhPT1udWxsJiZyIT09dm9pZCAwP3I6VHMpOnZvaWQgMCx0aGlzLl9wZXJmTW9uPSEoKGE9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxhPT09dm9pZCAwKSYmYS5fcHJvZk5hbWU/bmV3IHN0KHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT0ocz10aGlzLl9vcHRpb25zKT09PW51bGx8fHM9PT12b2lkIDA/dm9pZCAwOnMuZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIHQsbixpLHI7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCwoKHQ9dGhpcy5fZGVsaXZlcnlRdWV1ZSk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LmN1cnJlbnQpPT09dGhpcyYmdGhpcy5fZGVsaXZlcnlRdWV1ZS5yZXNldCgpLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz12b2lkIDAsdGhpcy5fc2l6ZT0wKSwoaT0obj10aGlzLl9vcHRpb25zKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4ub25EaWRSZW1vdmVMYXN0TGlzdGVuZXIpPT09bnVsbHx8aT09PXZvaWQgMHx8aS5jYWxsKG4pLChyPXRoaXMuX2xlYWthZ2VNb24pPT09bnVsbHx8cj09PXZvaWQgMHx8ci5kaXNwb3NlKCkpfWdldCBldmVudCgpe3ZhciB0O3JldHVybih0PXRoaXMuX2V2ZW50KSE9PW51bGwmJnQhPT12b2lkIDB8fCh0aGlzLl9ldmVudD0obixpLHIpPT57dmFyIGEscyxvLGwsdTtpZih0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKjMpcmV0dXJuIGNvbnNvbGUud2FybihgWyR7dGhpcy5fbGVha2FnZU1vbi5uYW1lfV0gUkVGVVNFUyB0byBhY2NlcHQgbmV3IGxpc3RlbmVycyBiZWNhdXNlIGl0IGV4Y2VlZGVkIGl0cyB0aHJlc2hvbGQgYnkgZmFyYCkseXQuTm9uZTtpZih0aGlzLl9kaXNwb3NlZClyZXR1cm4geXQuTm9uZTtpJiYobj1uLmJpbmQoaSkpO2NvbnN0IGM9bmV3IHduKG4pO2xldCBkO3RoaXMuX2xlYWthZ2VNb24mJnRoaXMuX3NpemU+PU1hdGguY2VpbCh0aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZCouMikmJihjLnN0YWNrPV9uLmNyZWF0ZSgpLGQ9dGhpcy5fbGVha2FnZU1vbi5jaGVjayhjLnN0YWNrLHRoaXMuX3NpemUrMSkpLHRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiB3bj8oKHU9dGhpcy5fZGVsaXZlcnlRdWV1ZSkhPT1udWxsJiZ1IT09dm9pZCAwfHwodGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgU3MpLHRoaXMuX2xpc3RlbmVycz1bdGhpcy5fbGlzdGVuZXJzLGNdKTp0aGlzLl9saXN0ZW5lcnMucHVzaChjKTooKHM9KGE9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxhPT09dm9pZCAwP3ZvaWQgMDphLm9uV2lsbEFkZEZpcnN0TGlzdGVuZXIpPT09bnVsbHx8cz09PXZvaWQgMHx8cy5jYWxsKGEsdGhpcyksdGhpcy5fbGlzdGVuZXJzPWMsKGw9KG89dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxvPT09dm9pZCAwP3ZvaWQgMDpvLm9uRGlkQWRkRmlyc3RMaXN0ZW5lcik9PT1udWxsfHxsPT09dm9pZCAwfHxsLmNhbGwobyx0aGlzKSksdGhpcy5fc2l6ZSsrO2NvbnN0IG09RnQoKCk9PntkPy4oKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcihjKX0pO3JldHVybiByIGluc3RhbmNlb2YgYXQ/ci5hZGQobSk6QXJyYXkuaXNBcnJheShyKSYmci5wdXNoKG0pLG19KSx0aGlzLl9ldmVudH1fcmVtb3ZlTGlzdGVuZXIodCl7dmFyIG4saSxyLGE7aWYoKGk9KG49dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLm9uV2lsbFJlbW92ZUxpc3RlbmVyKT09PW51bGx8fGk9PT12b2lkIDB8fGkuY2FsbChuLHRoaXMpLCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2lmKHRoaXMuX3NpemU9PT0xKXt0aGlzLl9saXN0ZW5lcnM9dm9pZCAwLChhPShyPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcik9PT1udWxsfHxhPT09dm9pZCAwfHxhLmNhbGwocix0aGlzKSx0aGlzLl9zaXplPTA7cmV0dXJufWNvbnN0IHM9dGhpcy5fbGlzdGVuZXJzLG89cy5pbmRleE9mKHQpO2lmKG89PT0tMSl0aHJvdyBjb25zb2xlLmxvZygiZGlzcG9zZWQ/Iix0aGlzLl9kaXNwb3NlZCksY29uc29sZS5sb2coInNpemU/Iix0aGlzLl9zaXplKSxjb25zb2xlLmxvZygiYXJyPyIsSlNPTi5zdHJpbmdpZnkodGhpcy5fbGlzdGVuZXJzKSksbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gZGlzcG9zZSB1bmtub3duIGxpc3RlbmVyIik7dGhpcy5fc2l6ZS0tLHNbb109dm9pZCAwO2NvbnN0IGw9dGhpcy5fZGVsaXZlcnlRdWV1ZS5jdXJyZW50PT09dGhpcztpZih0aGlzLl9zaXplKkFzPD1zLmxlbmd0aCl7bGV0IHU9MDtmb3IobGV0IGM9MDtjPHMubGVuZ3RoO2MrKylzW2NdP3NbdSsrXT1zW2NdOmwmJih0aGlzLl9kZWxpdmVyeVF1ZXVlLmVuZC0tLHU8dGhpcy5fZGVsaXZlcnlRdWV1ZS5pJiZ0aGlzLl9kZWxpdmVyeVF1ZXVlLmktLSk7cy5sZW5ndGg9dX19X2RlbGl2ZXIodCxuKXt2YXIgaTtpZighdClyZXR1cm47Y29uc3Qgcj0oKGk9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLm9uTGlzdGVuZXJFcnJvcil8fG1pO2lmKCFyKXt0LnZhbHVlKG4pO3JldHVybn10cnl7dC52YWx1ZShuKX1jYXRjaChhKXtyKGEpfX1fZGVsaXZlclF1ZXVlKHQpe2NvbnN0IG49dC5jdXJyZW50Ll9saXN0ZW5lcnM7Zm9yKDt0Lmk8dC5lbmQ7KXRoaXMuX2RlbGl2ZXIoblt0LmkrK10sdC52YWx1ZSk7dC5yZXNldCgpfWZpcmUodCl7dmFyIG4saSxyLGE7aWYoISgobj10aGlzLl9kZWxpdmVyeVF1ZXVlKT09PW51bGx8fG49PT12b2lkIDApJiZuLmN1cnJlbnQmJih0aGlzLl9kZWxpdmVyUXVldWUodGhpcy5fZGVsaXZlcnlRdWV1ZSksKGk9dGhpcy5fcGVyZk1vbik9PT1udWxsfHxpPT09dm9pZCAwfHxpLnN0b3AoKSksKHI9dGhpcy5fcGVyZk1vbik9PT1udWxsfHxyPT09dm9pZCAwfHxyLnN0YXJ0KHRoaXMuX3NpemUpLHRoaXMuX2xpc3RlbmVycylpZih0aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiB3bil0aGlzLl9kZWxpdmVyKHRoaXMuX2xpc3RlbmVycyx0KTtlbHNle2NvbnN0IHM9dGhpcy5fZGVsaXZlcnlRdWV1ZTtzLmVucXVldWUodGhpcyx0LHRoaXMuX2xpc3RlbmVycy5sZW5ndGgpLHRoaXMuX2RlbGl2ZXJRdWV1ZShzKX0oYT10aGlzLl9wZXJmTW9uKT09PW51bGx8fGE9PT12b2lkIDB8fGEuc3RvcCgpfWhhc0xpc3RlbmVycygpe3JldHVybiB0aGlzLl9zaXplPjB9fWNsYXNzIFNze2NvbnN0cnVjdG9yKCl7dGhpcy5pPS0xLHRoaXMuZW5kPTB9ZW5xdWV1ZSh0LG4saSl7dGhpcy5pPTAsdGhpcy5lbmQ9aSx0aGlzLmN1cnJlbnQ9dCx0aGlzLnZhbHVlPW59cmVzZXQoKXt0aGlzLmk9dGhpcy5lbmQsdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLnZhbHVlPXZvaWQgMH19ZnVuY3Rpb24gTHMoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1mdW5jdGlvbiBDcyhlKXtsZXQgdD1bXTtmb3IoO09iamVjdC5wcm90b3R5cGUhPT1lOyl0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gdH1mdW5jdGlvbiB5bihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIENzKGUpKXR5cGVvZiBlW25dPT0iZnVuY3Rpb24iJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gRXMoZSx0KXtjb25zdCBuPXI9PmZ1bmN0aW9uKCl7Y29uc3QgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQocixhKX0saT17fTtmb3IoY29uc3QgciBvZiBlKWlbcl09bihyKTtyZXR1cm4gaX1sZXQgUnM9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQubG9jYXRpb24mJmRvY3VtZW50LmxvY2F0aW9uLmhhc2guaW5kZXhPZigicHNldWRvPXRydWUiKT49MDtmdW5jdGlvbiBNcyhlLHQpe2xldCBuO3JldHVybiB0Lmxlbmd0aD09PTA/bj1lOm49ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywoaSxyKT0+e2NvbnN0IGE9clswXSxzPXRbYV07bGV0IG89aTtyZXR1cm4gdHlwZW9mIHM9PSJzdHJpbmciP289czoodHlwZW9mIHM9PSJudW1iZXIifHx0eXBlb2Ygcz09ImJvb2xlYW4ifHxzPT09dm9pZCAwfHxzPT09bnVsbCkmJihvPVN0cmluZyhzKSksb30pLFJzJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKSxufWZ1bmN0aW9uIEsoZSx0LC4uLm4pe3JldHVybiBNcyh0LG4pfWZ1bmN0aW9uIGxjKGUpe312YXIgeG4sVG47Y29uc3Qgb3Q9ImVuIjtsZXQga249ITEsQW49ITEsU249ITEsQnQsTG49b3QsZ2k9b3QsRHMsU2U7Y29uc3QgWmU9Z2xvYmFsVGhpcztsZXQgaGU7dHlwZW9mIFplLnZzY29kZTwidSImJnR5cGVvZiBaZS52c2NvZGUucHJvY2VzczwidSI/aGU9WmUudnNjb2RlLnByb2Nlc3M6dHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YoKHhuPXByb2Nlc3M9PW51bGw/dm9pZCAwOnByb2Nlc3MudmVyc2lvbnMpPT09bnVsbHx8eG49PT12b2lkIDA/dm9pZCAwOnhuLm5vZGUpPT0ic3RyaW5nIiYmKGhlPXByb2Nlc3MpO2NvbnN0IE5zPXR5cGVvZigoVG49aGU/LnZlcnNpb25zKT09PW51bGx8fFRuPT09dm9pZCAwP3ZvaWQgMDpUbi5lbGVjdHJvbik9PSJzdHJpbmciJiZoZT8udHlwZT09PSJyZW5kZXJlciI7aWYodHlwZW9mIGhlPT0ib2JqZWN0Iil7a249aGUucGxhdGZvcm09PT0id2luMzIiLEFuPWhlLnBsYXRmb3JtPT09ImRhcndpbiIsU249aGUucGxhdGZvcm09PT0ibGludXgiLFNuJiZoZS5lbnYuU05BUCYmaGUuZW52LlNOQVBfUkVWSVNJT04saGUuZW52LkNJfHxoZS5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLEJ0PW90LExuPW90O2NvbnN0IGU9aGUuZW52LlZTQ09ERV9OTFNfQ09ORklHO2lmKGUpdHJ5e2NvbnN0IHQ9SlNPTi5wYXJzZShlKSxuPXQuYXZhaWxhYmxlTGFuZ3VhZ2VzWyIqIl07QnQ9dC5sb2NhbGUsZ2k9dC5vc0xvY2FsZSxMbj1ufHxvdCxEcz10Ll90cmFuc2xhdGlvbnNDb25maWdGaWxlfWNhdGNoe319ZWxzZSB0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmIU5zPyhTZT1uYXZpZ2F0b3IudXNlckFnZW50LGtuPVNlLmluZGV4T2YoIldpbmRvd3MiKT49MCxBbj1TZS5pbmRleE9mKCJNYWNpbnRvc2giKT49MCwoU2UuaW5kZXhPZigiTWFjaW50b3NoIik+PTB8fFNlLmluZGV4T2YoImlQYWQiKT49MHx8U2UuaW5kZXhPZigiaVBob25lIik+PTApJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4wLFNuPVNlLmluZGV4T2YoIkxpbnV4Iik+PTAsU2U/LmluZGV4T2YoIk1vYmkiKT49MCxLKHtrZXk6ImVuc3VyZUxvYWRlclBsdWdpbklzTG9hZGVkIixjb21tZW50Olsie0xvY2tlZH0iXX0sIl8iKSxCdD1vdCxMbj1CdCxnaT1uYXZpZ2F0b3IubGFuZ3VhZ2UpOmNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2NvbnN0IHh0PWtuLElzPUFuLERlPVNlLHpzPXR5cGVvZiBaZS5wb3N0TWVzc2FnZT09ImZ1bmN0aW9uIiYmIVplLmltcG9ydFNjcmlwdHM7KCgpPT57aWYoenMpe2NvbnN0IGU9W107WmUuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbj0+e2lmKG4uZGF0YSYmbi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKWZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyl7Y29uc3QgYT1lW2ldO2lmKGEuaWQ9PT1uLmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspe2Uuc3BsaWNlKGksMSksYS5jYWxsYmFjaygpO3JldHVybn19fSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IGk9Kyt0O2UucHVzaCh7aWQ6aSxjYWxsYmFjazpufSksWmUucG9zdE1lc3NhZ2Uoe3ZzY29kZVNjaGVkdWxlQXN5bmNXb3JrOml9LCIqIil9fXJldHVybiBlPT5zZXRUaW1lb3V0KGUpfSkoKTtjb25zdCBIcz0hIShEZSYmRGUuaW5kZXhPZigiQ2hyb21lIik+PTApO0RlJiZEZS5pbmRleE9mKCJGaXJlZm94Iik+PTAsIUhzJiZEZSYmRGUuaW5kZXhPZigiU2FmYXJpIik+PTAsRGUmJkRlLmluZGV4T2YoIkVkZy8iKT49MCxEZSYmRGUuaW5kZXhPZigiQW5kcm9pZCIpPj0wO2NsYXNzIFVze2NvbnN0cnVjdG9yKHQsbj1KU09OLnN0cmluZ2lmeSl7dGhpcy5mbj10LHRoaXMuX2NvbXB1dGVLZXk9bix0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQodCl7Y29uc3Qgbj10aGlzLl9jb21wdXRlS2V5KHQpO3JldHVybiB0aGlzLmxhc3RBcmdLZXkhPT1uJiYodGhpcy5sYXN0QXJnS2V5PW4sdGhpcy5sYXN0Q2FjaGU9dGhpcy5mbih0KSksdGhpcy5sYXN0Q2FjaGV9fWNsYXNzIGJpe2NvbnN0cnVjdG9yKHQpe3RoaXMuZXhlY3V0b3I9dCx0aGlzLl9kaWRSdW49ITF9Z2V0IHZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKHQpe3RoaXMuX2Vycm9yPXR9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19dmFyIGx0O2Z1bmN0aW9uIFdzKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9ZnVuY3Rpb24gRnMoZSl7cmV0dXJuIGUuc3BsaXQoL1xyXG58XHJ8XG4vKX1mdW5jdGlvbiBQcyhlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KHQpO2lmKGkhPT0zMiYmaSE9PTkpcmV0dXJuIHR9cmV0dXJuLTF9ZnVuY3Rpb24gQnMoZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCBpPWUuY2hhckNvZGVBdChuKTtpZihpIT09MzImJmkhPT05KXJldHVybiBufXJldHVybi0xfWZ1bmN0aW9uIHZpKGUpe3JldHVybiBlPj02NSYmZTw9OTB9ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBxcyhlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfWZ1bmN0aW9uIE9zKGUsdCl7cmV0dXJuKGUtNTUyOTY8PDEwKSsodC01NjMyMCkrNjU1MzZ9ZnVuY3Rpb24gVnMoZSx0LG4pe2NvbnN0IGk9ZS5jaGFyQ29kZUF0KG4pO2lmKENuKGkpJiZuKzE8dCl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobisxKTtpZihxcyhyKSlyZXR1cm4gT3MoaSxyKX1yZXR1cm4gaX1jb25zdCBqcz0vXltcdFxuXHJceDIwLVx4N0VdKiQvO2Z1bmN0aW9uIEdzKGUpe3JldHVybiBqcy50ZXN0KGUpfWNsYXNzIEtle3N0YXRpYyBnZXRJbnN0YW5jZSh0KXtyZXR1cm4gbHQuY2FjaGUuZ2V0KEFycmF5LmZyb20odCkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIGx0Ll9sb2NhbGVzLnZhbHVlfWNvbnN0cnVjdG9yKHQpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9dH1pc0FtYmlndW91cyh0KXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXModCl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUodCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KHQpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1sdD1LZSxLZS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyBiaSgoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1LDExOTg0NiwxMDldLCJfZGVmYXVsdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJjcyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZGUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImVzIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImZyIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sIml0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJqYSI6WzgyMTEsNDUsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MjkyLDQ0LDY1MzA3LDU5XSwia28iOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInBsIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInB0LUJSIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInFwcy1wbG9jIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInJ1IjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywzMDUsMTA1LDkyMSw3MywxMDA5LDExMiwyMTUsMTIwLDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwidHIiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiemgtaGFucyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4OCw0MCw2NTI4OSw0MV0sInpoLWhhbnQiOls4MjExLDQ1LDY1Mzc0LDEyNiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUzMDcsNTldfScpKSxLZS5jYWNoZT1uZXcgVXMoZT0+e2Z1bmN0aW9uIHQodSl7Y29uc3QgYz1uZXcgTWFwO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCs9MiljLnNldCh1W2RdLHVbZCsxXSk7cmV0dXJuIGN9ZnVuY3Rpb24gbih1LGMpe2NvbnN0IGQ9bmV3IE1hcCh1KTtmb3IoY29uc3RbbSxmXW9mIGMpZC5zZXQobSxmKTtyZXR1cm4gZH1mdW5jdGlvbiBpKHUsYyl7aWYoIXUpcmV0dXJuIGM7Y29uc3QgZD1uZXcgTWFwO2Zvcihjb25zdFttLGZdb2YgdSljLmhhcyhtKSYmZC5zZXQobSxmKTtyZXR1cm4gZH1jb25zdCByPWx0LmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWU7bGV0IGE9ZS5maWx0ZXIodT0+IXUuc3RhcnRzV2l0aCgiXyIpJiZ1IGluIHIpO2EubGVuZ3RoPT09MCYmKGE9WyJfZGVmYXVsdCJdKTtsZXQgcztmb3IoY29uc3QgdSBvZiBhKXtjb25zdCBjPXQoclt1XSk7cz1pKHMsYyl9Y29uc3Qgbz10KHIuX2NvbW1vbiksbD1uKG8scyk7cmV0dXJuIG5ldyBsdChsKX0pLEtlLl9sb2NhbGVzPW5ldyBiaSgoKT0+T2JqZWN0LmtleXMobHQuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS52YWx1ZSkuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpO2NsYXNzIFBle3N0YXRpYyBnZXRSYXdEYXRhKCl7cmV0dXJuIEpTT04ucGFyc2UoIls5LDEwLDExLDEyLDEzLDMyLDEyNywxNjAsMTczLDg0NywxNTY0LDQ0NDcsNDQ0OCw2MDY4LDYwNjksNjE1NSw2MTU2LDYxNTcsNjE1OCw3MzU1LDczNTYsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4MjM0LDgyMzUsODIzNiw4MjM3LDgyMzgsODIzOSw4Mjg3LDgyODgsODI4OSw4MjkwLDgyOTEsODI5Miw4MjkzLDgyOTQsODI5NSw4Mjk2LDgyOTcsODI5OCw4Mjk5LDgzMDAsODMwMSw4MzAyLDgzMDMsMTAyNDAsMTIyODgsMTI2NDQsNjUwMjQsNjUwMjUsNjUwMjYsNjUwMjcsNjUwMjgsNjUwMjksNjUwMzAsNjUwMzEsNjUwMzIsNjUwMzMsNjUwMzQsNjUwMzUsNjUwMzYsNjUwMzcsNjUwMzgsNjUwMzksNjUyNzksNjU0NDAsNjU1MjAsNjU1MjEsNjU1MjIsNjU1MjMsNjU1MjQsNjU1MjUsNjU1MjYsNjU1MjcsNjU1MjgsNjU1MzIsNzg4NDQsMTE5MTU1LDExOTE1NiwxMTkxNTcsMTE5MTU4LDExOTE1OSwxMTkxNjAsMTE5MTYxLDExOTE2Miw5MTc1MDQsOTE3NTA1LDkxNzUwNiw5MTc1MDcsOTE3NTA4LDkxNzUwOSw5MTc1MTAsOTE3NTExLDkxNzUxMiw5MTc1MTMsOTE3NTE0LDkxNzUxNSw5MTc1MTYsOTE3NTE3LDkxNzUxOCw5MTc1MTksOTE3NTIwLDkxNzUyMSw5MTc1MjIsOTE3NTIzLDkxNzUyNCw5MTc1MjUsOTE3NTI2LDkxNzUyNyw5MTc1MjgsOTE3NTI5LDkxNzUzMCw5MTc1MzEsOTE3NTMyLDkxNzUzMyw5MTc1MzQsOTE3NTM1LDkxNzUzNiw5MTc1MzcsOTE3NTM4LDkxNzUzOSw5MTc1NDAsOTE3NTQxLDkxNzU0Miw5MTc1NDMsOTE3NTQ0LDkxNzU0NSw5MTc1NDYsOTE3NTQ3LDkxNzU0OCw5MTc1NDksOTE3NTUwLDkxNzU1MSw5MTc1NTIsOTE3NTUzLDkxNzU1NCw5MTc1NTUsOTE3NTU2LDkxNzU1Nyw5MTc1NTgsOTE3NTU5LDkxNzU2MCw5MTc1NjEsOTE3NTYyLDkxNzU2Myw5MTc1NjQsOTE3NTY1LDkxNzU2Niw5MTc1NjcsOTE3NTY4LDkxNzU2OSw5MTc1NzAsOTE3NTcxLDkxNzU3Miw5MTc1NzMsOTE3NTc0LDkxNzU3NSw5MTc1NzYsOTE3NTc3LDkxNzU3OCw5MTc1NzksOTE3NTgwLDkxNzU4MSw5MTc1ODIsOTE3NTgzLDkxNzU4NCw5MTc1ODUsOTE3NTg2LDkxNzU4Nyw5MTc1ODgsOTE3NTg5LDkxNzU5MCw5MTc1OTEsOTE3NTkyLDkxNzU5Myw5MTc1OTQsOTE3NTk1LDkxNzU5Niw5MTc1OTcsOTE3NTk4LDkxNzU5OSw5MTc2MDAsOTE3NjAxLDkxNzYwMiw5MTc2MDMsOTE3NjA0LDkxNzYwNSw5MTc2MDYsOTE3NjA3LDkxNzYwOCw5MTc2MDksOTE3NjEwLDkxNzYxMSw5MTc2MTIsOTE3NjEzLDkxNzYxNCw5MTc2MTUsOTE3NjE2LDkxNzYxNyw5MTc2MTgsOTE3NjE5LDkxNzYyMCw5MTc2MjEsOTE3NjIyLDkxNzYyMyw5MTc2MjQsOTE3NjI1LDkxNzYyNiw5MTc2MjcsOTE3NjI4LDkxNzYyOSw5MTc2MzAsOTE3NjMxLDkxNzc2MCw5MTc3NjEsOTE3NzYyLDkxNzc2Myw5MTc3NjQsOTE3NzY1LDkxNzc2Niw5MTc3NjcsOTE3NzY4LDkxNzc2OSw5MTc3NzAsOTE3NzcxLDkxNzc3Miw5MTc3NzMsOTE3Nzc0LDkxNzc3NSw5MTc3NzYsOTE3Nzc3LDkxNzc3OCw5MTc3NzksOTE3NzgwLDkxNzc4MSw5MTc3ODIsOTE3NzgzLDkxNzc4NCw5MTc3ODUsOTE3Nzg2LDkxNzc4Nyw5MTc3ODgsOTE3Nzg5LDkxNzc5MCw5MTc3OTEsOTE3NzkyLDkxNzc5Myw5MTc3OTQsOTE3Nzk1LDkxNzc5Niw5MTc3OTcsOTE3Nzk4LDkxNzc5OSw5MTc4MDAsOTE3ODAxLDkxNzgwMiw5MTc4MDMsOTE3ODA0LDkxNzgwNSw5MTc4MDYsOTE3ODA3LDkxNzgwOCw5MTc4MDksOTE3ODEwLDkxNzgxMSw5MTc4MTIsOTE3ODEzLDkxNzgxNCw5MTc4MTUsOTE3ODE2LDkxNzgxNyw5MTc4MTgsOTE3ODE5LDkxNzgyMCw5MTc4MjEsOTE3ODIyLDkxNzgyMyw5MTc4MjQsOTE3ODI1LDkxNzgyNiw5MTc4MjcsOTE3ODI4LDkxNzgyOSw5MTc4MzAsOTE3ODMxLDkxNzgzMiw5MTc4MzMsOTE3ODM0LDkxNzgzNSw5MTc4MzYsOTE3ODM3LDkxNzgzOCw5MTc4MzksOTE3ODQwLDkxNzg0MSw5MTc4NDIsOTE3ODQzLDkxNzg0NCw5MTc4NDUsOTE3ODQ2LDkxNzg0Nyw5MTc4NDgsOTE3ODQ5LDkxNzg1MCw5MTc4NTEsOTE3ODUyLDkxNzg1Myw5MTc4NTQsOTE3ODU1LDkxNzg1Niw5MTc4NTcsOTE3ODU4LDkxNzg1OSw5MTc4NjAsOTE3ODYxLDkxNzg2Miw5MTc4NjMsOTE3ODY0LDkxNzg2NSw5MTc4NjYsOTE3ODY3LDkxNzg2OCw5MTc4NjksOTE3ODcwLDkxNzg3MSw5MTc4NzIsOTE3ODczLDkxNzg3NCw5MTc4NzUsOTE3ODc2LDkxNzg3Nyw5MTc4NzgsOTE3ODc5LDkxNzg4MCw5MTc4ODEsOTE3ODgyLDkxNzg4Myw5MTc4ODQsOTE3ODg1LDkxNzg4Niw5MTc4ODcsOTE3ODg4LDkxNzg4OSw5MTc4OTAsOTE3ODkxLDkxNzg5Miw5MTc4OTMsOTE3ODk0LDkxNzg5NSw5MTc4OTYsOTE3ODk3LDkxNzg5OCw5MTc4OTksOTE3OTAwLDkxNzkwMSw5MTc5MDIsOTE3OTAzLDkxNzkwNCw5MTc5MDUsOTE3OTA2LDkxNzkwNyw5MTc5MDgsOTE3OTA5LDkxNzkxMCw5MTc5MTEsOTE3OTEyLDkxNzkxMyw5MTc5MTQsOTE3OTE1LDkxNzkxNiw5MTc5MTcsOTE3OTE4LDkxNzkxOSw5MTc5MjAsOTE3OTIxLDkxNzkyMiw5MTc5MjMsOTE3OTI0LDkxNzkyNSw5MTc5MjYsOTE3OTI3LDkxNzkyOCw5MTc5MjksOTE3OTMwLDkxNzkzMSw5MTc5MzIsOTE3OTMzLDkxNzkzNCw5MTc5MzUsOTE3OTM2LDkxNzkzNyw5MTc5MzgsOTE3OTM5LDkxNzk0MCw5MTc5NDEsOTE3OTQyLDkxNzk0Myw5MTc5NDQsOTE3OTQ1LDkxNzk0Niw5MTc5NDcsOTE3OTQ4LDkxNzk0OSw5MTc5NTAsOTE3OTUxLDkxNzk1Miw5MTc5NTMsOTE3OTU0LDkxNzk1NSw5MTc5NTYsOTE3OTU3LDkxNzk1OCw5MTc5NTksOTE3OTYwLDkxNzk2MSw5MTc5NjIsOTE3OTYzLDkxNzk2NCw5MTc5NjUsOTE3OTY2LDkxNzk2Nyw5MTc5NjgsOTE3OTY5LDkxNzk3MCw5MTc5NzEsOTE3OTcyLDkxNzk3Myw5MTc5NzQsOTE3OTc1LDkxNzk3Niw5MTc5NzcsOTE3OTc4LDkxNzk3OSw5MTc5ODAsOTE3OTgxLDkxNzk4Miw5MTc5ODMsOTE3OTg0LDkxNzk4NSw5MTc5ODYsOTE3OTg3LDkxNzk4OCw5MTc5ODksOTE3OTkwLDkxNzk5MSw5MTc5OTIsOTE3OTkzLDkxNzk5NCw5MTc5OTUsOTE3OTk2LDkxNzk5Nyw5MTc5OTgsOTE3OTk5XSIpfXN0YXRpYyBnZXREYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF8fCh0aGlzLl9kYXRhPW5ldyBTZXQoUGUuZ2V0UmF3RGF0YSgpKSksdGhpcy5fZGF0YX1zdGF0aWMgaXNJbnZpc2libGVDaGFyYWN0ZXIodCl7cmV0dXJuIFBlLmdldERhdGEoKS5oYXModCl9c3RhdGljIGdldCBjb2RlUG9pbnRzKCl7cmV0dXJuIFBlLmdldERhdGEoKX19UGUuX2RhdGE9dm9pZCAwO2NvbnN0ICRzPSIkaW5pdGlhbGl6ZSI7Y2xhc3MgWHN7Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy5tZXRob2Q9aSx0aGlzLmFyZ3M9cix0aGlzLnR5cGU9MH19Y2xhc3MgX2l7Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy52c1dvcmtlcj10LHRoaXMuc2VxPW4sdGhpcy5yZXM9aSx0aGlzLmVycj1yLHRoaXMudHlwZT0xfX1jbGFzcyBKc3tjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50TmFtZT1pLHRoaXMuYXJnPXIsdGhpcy50eXBlPTJ9fWNsYXNzIFFze2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50PWksdGhpcy50eXBlPTN9fWNsYXNzIFlze2NvbnN0cnVjdG9yKHQsbil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy50eXBlPTR9fWNsYXNzIFpze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9dCx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKHQpe3RoaXMuX3dvcmtlcklkPXR9c2VuZE1lc3NhZ2UodCxuKXtjb25zdCBpPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKHIsYSk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tpXT17cmVzb2x2ZTpyLHJlamVjdDphfSx0aGlzLl9zZW5kKG5ldyBYcyh0aGlzLl93b3JrZXJJZCxpLHQsbikpfSl9bGlzdGVuKHQsbil7bGV0IGk9bnVsbDtjb25zdCByPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e2k9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQoaSxyKSx0aGlzLl9zZW5kKG5ldyBKcyh0aGlzLl93b3JrZXJJZCxpLHQsbikpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e3RoaXMuX3BlbmRpbmdFbWl0dGVycy5kZWxldGUoaSksdGhpcy5fc2VuZChuZXcgWXModGhpcy5fd29ya2VySWQsaSkpLGk9bnVsbH19KTtyZXR1cm4gci5ldmVudH1oYW5kbGVNZXNzYWdlKHQpeyF0fHwhdC52c1dvcmtlcnx8dGhpcy5fd29ya2VySWQhPT0tMSYmdC52c1dvcmtlciE9PXRoaXMuX3dvcmtlcklkfHx0aGlzLl9oYW5kbGVNZXNzYWdlKHQpfV9oYW5kbGVNZXNzYWdlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKHQpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UodCk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UodCk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KX19X2hhbmRsZVJlcGx5TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdKXtjb25zb2xlLndhcm4oIkdvdCByZXBseSB0byB1bmtub3duIHNlcSIpO3JldHVybn1jb25zdCBuPXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdLHQuZXJyKXtsZXQgaT10LmVycjt0LmVyci4kaXNFcnJvciYmKGk9bmV3IEVycm9yLGkubmFtZT10LmVyci5uYW1lLGkubWVzc2FnZT10LmVyci5tZXNzYWdlLGkuc3RhY2s9dC5lcnIuc3RhY2spLG4ucmVqZWN0KGkpO3JldHVybn1uLnJlc29sdmUodC5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZSh0Lm1ldGhvZCx0LmFyZ3MpLnRoZW4ocj0+e3RoaXMuX3NlbmQobmV3IF9pKHRoaXMuX3dvcmtlcklkLG4scix2b2lkIDApKX0scj0+e3IuZGV0YWlsIGluc3RhbmNlb2YgRXJyb3ImJihyLmRldGFpbD1maShyLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IF9pKHRoaXMuX3dvcmtlcklkLG4sdm9pZCAwLGZpKHIpKSl9KX1faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKHQpe2NvbnN0IG49dC5yZXEsaT10aGlzLl9oYW5kbGVyLmhhbmRsZUV2ZW50KHQuZXZlbnROYW1lLHQuYXJnKShyPT57dGhpcy5fc2VuZChuZXcgUXModGhpcy5fd29ya2VySWQsbixyKSl9KTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldChuLGkpfV9oYW5kbGVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFbWl0dGVycy5oYXModC5yZXEpKXtjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKTtyZXR1cm59dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldCh0LnJlcSkuZmlyZSh0LmV2ZW50KX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFdmVudHMuaGFzKHQucmVxKSl7Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIik7cmV0dXJufXRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KHQucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUodC5yZXEpfV9zZW5kKHQpe2NvbnN0IG49W107aWYodC50eXBlPT09MClmb3IobGV0IGk9MDtpPHQuYXJncy5sZW5ndGg7aSsrKXQuYXJnc1tpXWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJm4ucHVzaCh0LmFyZ3NbaV0pO2Vsc2UgdC50eXBlPT09MSYmdC5yZXMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmbi5wdXNoKHQucmVzKTt0aGlzLl9oYW5kbGVyLnNlbmRNZXNzYWdlKHQsbil9fWZ1bmN0aW9uIHdpKGUpe3JldHVybiBlWzBdPT09Im8iJiZlWzFdPT09Im4iJiZ2aShlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIHlpKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZ2aShlLmNoYXJDb2RlQXQoOSkpfWZ1bmN0aW9uIEtzKGUsdCxuKXtjb25zdCBpPXM9PmZ1bmN0aW9uKCl7Y29uc3Qgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQocyxvKX0scj1zPT5mdW5jdGlvbihvKXtyZXR1cm4gbihzLG8pfSxhPXt9O2Zvcihjb25zdCBzIG9mIGUpe2lmKHlpKHMpKXthW3NdPXIocyk7Y29udGludWV9aWYod2kocykpe2Fbc109bihzLHZvaWQgMCk7Y29udGludWV9YVtzXT1pKHMpfXJldHVybiBhfWNsYXNzIGVve2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5PW4sdGhpcy5fcmVxdWVzdEhhbmRsZXI9bnVsbCx0aGlzLl9wcm90b2NvbD1uZXcgWnMoe3NlbmRNZXNzYWdlOihpLHIpPT57dChpLHIpfSxoYW5kbGVNZXNzYWdlOihpLHIpPT50aGlzLl9oYW5kbGVNZXNzYWdlKGksciksaGFuZGxlRXZlbnQ6KGkscik9PnRoaXMuX2hhbmRsZUV2ZW50KGkscil9KX1vbm1lc3NhZ2UodCl7dGhpcy5fcHJvdG9jb2wuaGFuZGxlTWVzc2FnZSh0KX1faGFuZGxlTWVzc2FnZSh0LG4pe2lmKHQ9PT0kcylyZXR1cm4gdGhpcy5pbml0aWFsaXplKG5bMF0sblsxXSxuWzJdLG5bM10pO2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcnx8dHlwZW9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyW3RdIT0iZnVuY3Rpb24iKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK3QpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9yZXF1ZXN0SGFuZGxlclt0XS5hcHBseSh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKSl9Y2F0Y2goaSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGkpfX1faGFuZGxlRXZlbnQodCxuKXtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIik7aWYoeWkodCkpe2NvbnN0IGk9dGhpcy5fcmVxdWVzdEhhbmRsZXJbdF0uY2FsbCh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKTtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZHluYW1pYyBldmVudCAke3R9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gaX1pZih3aSh0KSl7Y29uc3QgaT10aGlzLl9yZXF1ZXN0SGFuZGxlclt0XTtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZXZlbnQgJHt0fSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIGl9dGhyb3cgbmV3IEVycm9yKGBNYWxmb3JtZWQgZXZlbnQgbmFtZSAke3R9YCl9aW5pdGlhbGl6ZSh0LG4saSxyKXt0aGlzLl9wcm90b2NvbC5zZXRXb3JrZXJJZCh0KTtjb25zdCBvPUtzKHIsKGwsdSk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKGwsdSksKGwsdSk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihsLHUpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkobyksUHJvbWlzZS5yZXNvbHZlKHluKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOihuJiYodHlwZW9mIG4uYmFzZVVybDwidSImJmRlbGV0ZSBuLmJhc2VVcmwsdHlwZW9mIG4ucGF0aHM8InUiJiZ0eXBlb2Ygbi5wYXRocy52czwidSImJmRlbGV0ZSBuLnBhdGhzLnZzLHR5cGVvZiBuLnRydXN0ZWRUeXBlc1BvbGljeTwidSImJmRlbGV0ZSBuLnRydXN0ZWRUeXBlc1BvbGljeSxuLmNhdGNoRXJyb3I9ITAsZ2xvYmFsVGhpcy5yZXF1aXJlLmNvbmZpZyhuKSksbmV3IFByb21pc2UoKGwsdSk9Pntjb25zdCBjPWdsb2JhbFRoaXMucmVxdWlyZTtjKFtpXSxkPT57aWYodGhpcy5fcmVxdWVzdEhhbmRsZXI9ZC5jcmVhdGUobyksIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXt1KG5ldyBFcnJvcigiTm8gUmVxdWVzdEhhbmRsZXIhIikpO3JldHVybn1sKHluKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSl9LHUpfSkpfX1jbGFzcyBCZXtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLm9yaWdpbmFsU3RhcnQ9dCx0aGlzLm9yaWdpbmFsTGVuZ3RoPW4sdGhpcy5tb2RpZmllZFN0YXJ0PWksdGhpcy5tb2RpZmllZExlbmd0aD1yfWdldE9yaWdpbmFsRW5kKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxTdGFydCt0aGlzLm9yaWdpbmFsTGVuZ3RofWdldE1vZGlmaWVkRW5kKCl7cmV0dXJuIHRoaXMubW9kaWZpZWRTdGFydCt0aGlzLm1vZGlmaWVkTGVuZ3RofX1mdW5jdGlvbiB4aShlLHQpe3JldHVybih0PDw1KS10K2V8MH1mdW5jdGlvbiB0byhlLHQpe3Q9eGkoMTQ5NDE3LHQpO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyl0PXhpKGUuY2hhckNvZGVBdChuKSx0KTtyZXR1cm4gdH1jbGFzcyBUaXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnNvdXJjZT10fWdldEVsZW1lbnRzKCl7Y29uc3QgdD10aGlzLnNvdXJjZSxuPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspbltpXT10LmNoYXJDb2RlQXQoaSk7cmV0dXJuIG59fWZ1bmN0aW9uIG5vKGUsdCxuKXtyZXR1cm4gbmV3IHFlKG5ldyBUaShlKSxuZXcgVGkodCkpLkNvbXB1dGVEaWZmKG4pLmNoYW5nZXN9Y2xhc3MgdXR7c3RhdGljIEFzc2VydCh0LG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcihuKX19Y2xhc3MgY3R7c3RhdGljIENvcHkodCxuLGkscixhKXtmb3IobGV0IHM9MDtzPGE7cysrKWlbcitzXT10W24rc119c3RhdGljIENvcHkyKHQsbixpLHIsYSl7Zm9yKGxldCBzPTA7czxhO3MrKylpW3Irc109dFtuK3NdfX1jbGFzcyBraXtjb25zdHJ1Y3Rvcigpe3RoaXMubV9jaGFuZ2VzPVtdLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTB9TWFya05leHRDaGFuZ2UoKXsodGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMubV9jaGFuZ2VzLnB1c2gobmV3IEJlKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHRoaXMubV9vcmlnaW5hbENvdW50LHRoaXMubV9tb2RpZmllZFN0YXJ0LHRoaXMubV9tb2RpZmllZENvdW50KSksdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNH1BZGRPcmlnaW5hbEVsZW1lbnQodCxuKXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCxuKSx0aGlzLm1fb3JpZ2luYWxDb3VudCsrfUFkZE1vZGlmaWVkRWxlbWVudCh0LG4pe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHQpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LG4pLHRoaXMubV9tb2RpZmllZENvdW50Kyt9Z2V0Q2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzfWdldFJldmVyc2VDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXMucmV2ZXJzZSgpLHRoaXMubV9jaGFuZ2VzfX1jbGFzcyBxZXtjb25zdHJ1Y3Rvcih0LG4saT1udWxsKXt0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZT1pLHRoaXMuX29yaWdpbmFsU2VxdWVuY2U9dCx0aGlzLl9tb2RpZmllZFNlcXVlbmNlPW47Y29uc3RbcixhLHNdPXFlLl9nZXRFbGVtZW50cyh0KSxbbyxsLHVdPXFlLl9nZXRFbGVtZW50cyhuKTt0aGlzLl9oYXNTdHJpbmdzPXMmJnUsdGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50cz1yLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2g9YSx0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzPW8sdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaD1sLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W119c3RhdGljIF9pc1N0cmluZ0FycmF5KHQpe3JldHVybiB0Lmxlbmd0aD4wJiZ0eXBlb2YgdFswXT09InN0cmluZyJ9c3RhdGljIF9nZXRFbGVtZW50cyh0KXtjb25zdCBuPXQuZ2V0RWxlbWVudHMoKTtpZihxZS5faXNTdHJpbmdBcnJheShuKSl7Y29uc3QgaT1uZXcgSW50MzJBcnJheShuLmxlbmd0aCk7Zm9yKGxldCByPTAsYT1uLmxlbmd0aDtyPGE7cisrKWlbcl09dG8obltyXSwwKTtyZXR1cm5bbixpLCEwXX1yZXR1cm4gbiBpbnN0YW5jZW9mIEludDMyQXJyYXk/W1tdLG4sITFdOltbXSxuZXcgSW50MzJBcnJheShuKSwhMV19RWxlbWVudHNBcmVFcXVhbCh0LG4pe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdIT09dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtuXT8hMTp0aGlzLl9oYXNTdHJpbmdzP3RoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW25dOiEwfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwodCxuKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsbikpcmV0dXJuITE7Y29uc3QgaT1xZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLHQpLHI9cWUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSxuKTtyZXR1cm4gaT09PXJ9c3RhdGljIF9nZXRTdHJpY3RFbGVtZW50KHQsbil7cmV0dXJuIHR5cGVvZiB0LmdldFN0cmljdEVsZW1lbnQ9PSJmdW5jdGlvbiI/dC5nZXRTdHJpY3RFbGVtZW50KG4pOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbbl06ITB9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbbl06ITB9Q29tcHV0ZURpZmYodCl7cmV0dXJuIHRoaXMuX0NvbXB1dGVEaWZmKDAsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMSwwLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsdCl9X0NvbXB1dGVEaWZmKHQsbixpLHIsYSl7Y29uc3Qgcz1bITFdO2xldCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCxuLGkscixzKTtyZXR1cm4gYSYmKG89dGhpcy5QcmV0dGlmeUNoYW5nZXMobykpLHtxdWl0RWFybHk6c1swXSxjaGFuZ2VzOm99fUNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsbixpLHIsYSl7Zm9yKGFbMF09ITE7dDw9biYmaTw9ciYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsaSk7KXQrKyxpKys7Zm9yKDtuPj10JiZyPj1pJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobixyKTspbi0tLHItLTtpZih0Pm58fGk+cil7bGV0IGQ7cmV0dXJuIGk8PXI/KHV0LkFzc2VydCh0PT09bisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxkPVtuZXcgQmUodCwwLGksci1pKzEpXSk6dDw9bj8odXQuQXNzZXJ0KGk9PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGQ9W25ldyBCZSh0LG4tdCsxLGksMCldKToodXQuQXNzZXJ0KHQ9PT1uKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLHV0LkFzc2VydChpPT09cisxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxkPVtdKSxkfWNvbnN0IHM9WzBdLG89WzBdLGw9dGhpcy5Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLGkscixzLG8sYSksdT1zWzBdLGM9b1swXTtpZihsIT09bnVsbClyZXR1cm4gbDtpZighYVswXSl7Y29uc3QgZD10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsdSxpLGMsYSk7bGV0IG09W107cmV0dXJuIGFbMF0/bT1bbmV3IEJlKHUrMSxuLSh1KzEpKzEsYysxLHItKGMrMSkrMSldOm09dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh1KzEsbixjKzEscixhKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhkLG0pfXJldHVybltuZXcgQmUodCxuLXQrMSxpLHItaSsxKV19V0FMS1RSQUNFKHQsbixpLHIsYSxzLG8sbCx1LGMsZCxtLGYsYixwLHcseCxfKXtsZXQgeT1udWxsLEU9bnVsbCxSPW5ldyBraSxQPW4sdj1pLGc9ZlswXS13WzBdLXIsVD0tMTA3Mzc0MTgyNCxxPXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCBTPWcrdDtTPT09UHx8Uzx2JiZ1W1MtMV08dVtTKzFdPyhkPXVbUysxXSxiPWQtZy1yLGQ8VCYmUi5NYXJrTmV4dENoYW5nZSgpLFQ9ZCxSLkFkZE1vZGlmaWVkRWxlbWVudChkKzEsYiksZz1TKzEtdCk6KGQ9dVtTLTFdKzEsYj1kLWctcixkPFQmJlIuTWFya05leHRDaGFuZ2UoKSxUPWQtMSxSLkFkZE9yaWdpbmFsRWxlbWVudChkLGIrMSksZz1TLTEtdCkscT49MCYmKHU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W3FdLHQ9dVswXSxQPTEsdj11Lmxlbmd0aC0xKX13aGlsZSgtLXE+PS0xKTtpZih5PVIuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxfWzBdKXtsZXQgUz1mWzBdKzEsaz13WzBdKzE7aWYoeSE9PW51bGwmJnkubGVuZ3RoPjApe2NvbnN0IE49eVt5Lmxlbmd0aC0xXTtTPU1hdGgubWF4KFMsTi5nZXRPcmlnaW5hbEVuZCgpKSxrPU1hdGgubWF4KGssTi5nZXRNb2RpZmllZEVuZCgpKX1FPVtuZXcgQmUoUyxtLVMrMSxrLHAtaysxKV19ZWxzZXtSPW5ldyBraSxQPXMsdj1vLGc9ZlswXS13WzBdLWwsVD0xMDczNzQxODI0LHE9eD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IFM9ZythO1M9PT1QfHxTPHYmJmNbUy0xXT49Y1tTKzFdPyhkPWNbUysxXS0xLGI9ZC1nLWwsZD5UJiZSLk1hcmtOZXh0Q2hhbmdlKCksVD1kKzEsUi5BZGRPcmlnaW5hbEVsZW1lbnQoZCsxLGIrMSksZz1TKzEtYSk6KGQ9Y1tTLTFdLGI9ZC1nLWwsZD5UJiZSLk1hcmtOZXh0Q2hhbmdlKCksVD1kLFIuQWRkTW9kaWZpZWRFbGVtZW50KGQrMSxiKzEpLGc9Uy0xLWEpLHE+PTAmJihjPXRoaXMubV9yZXZlcnNlSGlzdG9yeVtxXSxhPWNbMF0sUD0xLHY9Yy5sZW5ndGgtMSl9d2hpbGUoLS1xPj0tMSk7RT1SLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoeSxFKX1Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLGkscixhLHMsbyl7bGV0IGw9MCx1PTAsYz0wLGQ9MCxtPTAsZj0wO3QtLSxpLS0sYVswXT0wLHNbMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IGI9bi10KyhyLWkpLHA9YisxLHc9bmV3IEludDMyQXJyYXkocCkseD1uZXcgSW50MzJBcnJheShwKSxfPXItaSx5PW4tdCxFPXQtaSxSPW4tcix2PSh5LV8pJTI9PT0wO3dbX109dCx4W3ldPW4sb1swXT0hMTtmb3IobGV0IGc9MTtnPD1iLzIrMTtnKyspe2xldCBUPTAscT0wO2M9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChfLWcsZyxfLHApLGQ9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChfK2csZyxfLHApO2ZvcihsZXQgaz1jO2s8PWQ7ays9Mil7az09PWN8fGs8ZCYmd1trLTFdPHdbaysxXT9sPXdbaysxXTpsPXdbay0xXSsxLHU9bC0oay1fKS1FO2NvbnN0IE49bDtmb3IoO2w8biYmdTxyJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobCsxLHUrMSk7KWwrKyx1Kys7aWYod1trXT1sLGwrdT5UK3EmJihUPWwscT11KSwhdiYmTWF0aC5hYnMoay15KTw9Zy0xJiZsPj14W2tdKXJldHVybiBhWzBdPWwsc1swXT11LE48PXhba10mJmc8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoXyxjLGQsRSx5LG0sZixSLHcseCxsLG4sYSx1LHIscyx2LG8pOm51bGx9Y29uc3QgUz0oVC10KyhxLWkpLWcpLzI7aWYodGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUhPT1udWxsJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoVCxTKSlyZXR1cm4gb1swXT0hMCxhWzBdPVQsc1swXT1xLFM+MCYmZzw9MTQ0OD90aGlzLldBTEtUUkFDRShfLGMsZCxFLHksbSxmLFIsdyx4LGwsbixhLHUscixzLHYsbyk6KHQrKyxpKyssW25ldyBCZSh0LG4tdCsxLGksci1pKzEpXSk7bT10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHktZyxnLHkscCksZj10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHkrZyxnLHkscCk7Zm9yKGxldCBrPW07azw9ZjtrKz0yKXtrPT09bXx8azxmJiZ4W2stMV0+PXhbaysxXT9sPXhbaysxXS0xOmw9eFtrLTFdLHU9bC0oay15KS1SO2NvbnN0IE49bDtmb3IoO2w+dCYmdT5pJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobCx1KTspbC0tLHUtLTtpZih4W2tdPWwsdiYmTWF0aC5hYnMoay1fKTw9ZyYmbDw9d1trXSlyZXR1cm4gYVswXT1sLHNbMF09dSxOPj13W2tdJiZnPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKF8sYyxkLEUseSxtLGYsUix3LHgsbCxuLGEsdSxyLHMsdixvKTpudWxsfWlmKGc8PTE0NDcpe2xldCBrPW5ldyBJbnQzMkFycmF5KGQtYysyKTtrWzBdPV8tYysxLGN0LkNvcHkyKHcsYyxrLDEsZC1jKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKGspLGs9bmV3IEludDMyQXJyYXkoZi1tKzIpLGtbMF09eS1tKzEsY3QuQ29weTIoeCxtLGssMSxmLW0rMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2goayl9fXJldHVybiB0aGlzLldBTEtUUkFDRShfLGMsZCxFLHksbSxmLFIsdyx4LGwsbixhLHUscixzLHYsbyl9UHJldHRpZnlDaGFuZ2VzKHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCBpPXRbbl0scj1uPHQubGVuZ3RoLTE/dFtuKzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgsYT1uPHQubGVuZ3RoLTE/dFtuKzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgscz1pLm9yaWdpbmFsTGVuZ3RoPjAsbz1pLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtpLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aDxyJiZpLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aDxhJiYoIXN8fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKGkub3JpZ2luYWxTdGFydCxpLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aCkpJiYoIW98fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKGkubW9kaWZpZWRTdGFydCxpLm1vZGlmaWVkU3RhcnQraS5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgdT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoaS5vcmlnaW5hbFN0YXJ0LGkubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKGkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RoLGkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoKSYmIXUpYnJlYWs7aS5vcmlnaW5hbFN0YXJ0KyssaS5tb2RpZmllZFN0YXJ0Kyt9Y29uc3QgbD1bbnVsbF07aWYobjx0Lmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKHRbbl0sdFtuKzFdLGwpKXt0W25dPWxbMF0sdC5zcGxpY2UobisxLDEpLG4tLTtjb250aW51ZX19Zm9yKGxldCBuPXQubGVuZ3RoLTE7bj49MDtuLS0pe2NvbnN0IGk9dFtuXTtsZXQgcj0wLGE9MDtpZihuPjApe2NvbnN0IGQ9dFtuLTFdO3I9ZC5vcmlnaW5hbFN0YXJ0K2Qub3JpZ2luYWxMZW5ndGgsYT1kLm1vZGlmaWVkU3RhcnQrZC5tb2RpZmllZExlbmd0aH1jb25zdCBzPWkub3JpZ2luYWxMZW5ndGg+MCxvPWkubW9kaWZpZWRMZW5ndGg+MDtsZXQgbD0wLHU9dGhpcy5fYm91bmRhcnlTY29yZShpLm9yaWdpbmFsU3RhcnQsaS5vcmlnaW5hbExlbmd0aCxpLm1vZGlmaWVkU3RhcnQsaS5tb2RpZmllZExlbmd0aCk7Zm9yKGxldCBkPTE7O2QrKyl7Y29uc3QgbT1pLm9yaWdpbmFsU3RhcnQtZCxmPWkubW9kaWZpZWRTdGFydC1kO2lmKG08cnx8ZjxhfHxzJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwobSxtK2kub3JpZ2luYWxMZW5ndGgpfHxvJiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoZixmK2kubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2NvbnN0IHA9KG09PT1yJiZmPT09YT81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUobSxpLm9yaWdpbmFsTGVuZ3RoLGYsaS5tb2RpZmllZExlbmd0aCk7cD51JiYodT1wLGw9ZCl9aS5vcmlnaW5hbFN0YXJ0LT1sLGkubW9kaWZpZWRTdGFydC09bDtjb25zdCBjPVtudWxsXTtpZihuPjAmJnRoaXMuQ2hhbmdlc092ZXJsYXAodFtuLTFdLHRbbl0sYykpe3Rbbi0xXT1jWzBdLHQuc3BsaWNlKG4sMSksbisrO2NvbnRpbnVlfX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgbj0xLGk9dC5sZW5ndGg7bjxpO24rKyl7Y29uc3Qgcj10W24tMV0sYT10W25dLHM9YS5vcmlnaW5hbFN0YXJ0LXIub3JpZ2luYWxTdGFydC1yLm9yaWdpbmFsTGVuZ3RoLG89ci5vcmlnaW5hbFN0YXJ0LGw9YS5vcmlnaW5hbFN0YXJ0K2Eub3JpZ2luYWxMZW5ndGgsdT1sLW8sYz1yLm1vZGlmaWVkU3RhcnQsZD1hLm1vZGlmaWVkU3RhcnQrYS5tb2RpZmllZExlbmd0aCxtPWQtYztpZihzPDUmJnU8MjAmJm08MjApe2NvbnN0IGY9dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShvLHUsYyxtLHMpO2lmKGYpe2NvbnN0W2IscF09ZjsoYiE9PXIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RofHxwIT09ci5tb2RpZmllZFN0YXJ0K3IubW9kaWZpZWRMZW5ndGgpJiYoci5vcmlnaW5hbExlbmd0aD1iLXIub3JpZ2luYWxTdGFydCxyLm1vZGlmaWVkTGVuZ3RoPXAtci5tb2RpZmllZFN0YXJ0LGEub3JpZ2luYWxTdGFydD1iK3MsYS5tb2RpZmllZFN0YXJ0PXArcyxhLm9yaWdpbmFsTGVuZ3RoPWwtYS5vcmlnaW5hbFN0YXJ0LGEubW9kaWZpZWRMZW5ndGg9ZC1hLm1vZGlmaWVkU3RhcnQpfX19cmV0dXJuIHR9X2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UodCxuLGkscixhKXtpZihuPGF8fHI8YSlyZXR1cm4gbnVsbDtjb25zdCBzPXQrbi1hKzEsbz1pK3ItYSsxO2xldCBsPTAsdT0wLGM9MDtmb3IobGV0IGQ9dDtkPHM7ZCsrKWZvcihsZXQgbT1pO208bzttKyspe2NvbnN0IGY9dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUoZCxtLGEpO2Y+MCYmZj5sJiYobD1mLHU9ZCxjPW0pfXJldHVybiBsPjA/W3UsY106bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxuLGkpe2xldCByPTA7Zm9yKGxldCBhPTA7YTxpO2ErKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0K2EsbithKSlyZXR1cm4gMDtyKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3QrYV0ubGVuZ3RofXJldHVybiByfV9PcmlnaW5hbElzQm91bmRhcnkodCl7cmV0dXJuIHQ8PTB8fHQ+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTE/ITA6dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF0pfV9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKXtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkodCl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeSh0LTEpKXJldHVybiEwO2lmKG4+MCl7Y29uc3QgaT10K247aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KGktMSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShpKSlyZXR1cm4hMH1yZXR1cm4hMX1fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpe3JldHVybiB0PD0wfHx0Pj10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xPyEwOnRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KHQsbil7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkodC0xKSlyZXR1cm4hMDtpZihuPjApe2NvbnN0IGk9dCtuO2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShpLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkoaSkpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUodCxuLGkscil7Y29uc3QgYT10aGlzLl9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKT8xOjAscz10aGlzLl9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkoaSxyKT8xOjA7cmV0dXJuIGErc31Db25jYXRlbmF0ZUNoYW5nZXModCxuKXtjb25zdCBpPVtdO2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBuLmxlbmd0aD4wP246dDtpZih0aGlzLkNoYW5nZXNPdmVybGFwKHRbdC5sZW5ndGgtMV0sblswXSxpKSl7Y29uc3Qgcj1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgtMSk7cmV0dXJuIGN0LkNvcHkodCwwLHIsMCx0Lmxlbmd0aC0xKSxyW3QubGVuZ3RoLTFdPWlbMF0sY3QuQ29weShuLDEscix0Lmxlbmd0aCxuLmxlbmd0aC0xKSxyfWVsc2V7Y29uc3Qgcj1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgpO3JldHVybiBjdC5Db3B5KHQsMCxyLDAsdC5sZW5ndGgpLGN0LkNvcHkobiwwLHIsdC5sZW5ndGgsbi5sZW5ndGgpLHJ9fUNoYW5nZXNPdmVybGFwKHQsbixpKXtpZih1dC5Bc3NlcnQodC5vcmlnaW5hbFN0YXJ0PD1uLm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksdXQuQXNzZXJ0KHQubW9kaWZpZWRTdGFydDw9bi5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoPj1uLm9yaWdpbmFsU3RhcnR8fHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoPj1uLm1vZGlmaWVkU3RhcnQpe2NvbnN0IHI9dC5vcmlnaW5hbFN0YXJ0O2xldCBhPXQub3JpZ2luYWxMZW5ndGg7Y29uc3Qgcz10Lm1vZGlmaWVkU3RhcnQ7bGV0IG89dC5tb2RpZmllZExlbmd0aDtyZXR1cm4gdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydCYmKGE9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtdC5vcmlnaW5hbFN0YXJ0KSx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0JiYobz1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC10Lm1vZGlmaWVkU3RhcnQpLGlbMF09bmV3IEJlKHIsYSxzLG8pLCEwfWVsc2UgcmV0dXJuIGlbMF09bnVsbCwhMX1DbGlwRGlhZ29uYWxCb3VuZCh0LG4saSxyKXtpZih0Pj0wJiZ0PHIpcmV0dXJuIHQ7Y29uc3QgYT1pLHM9ci1pLTEsbz1uJTI9PT0wO2lmKHQ8MCl7Y29uc3QgbD1hJTI9PT0wO3JldHVybiBvPT09bD8wOjF9ZWxzZXtjb25zdCBsPXMlMj09PTA7cmV0dXJuIG89PT1sP3ItMTpyLTJ9fX12YXIgQWk9e0VOVl9UWVBFOiJsb2NhbCIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifTtsZXQgaHQ7Y29uc3QgRW49Z2xvYmFsVGhpcy52c2NvZGU7aWYodHlwZW9mIEVuPCJ1IiYmdHlwZW9mIEVuLnByb2Nlc3M8InUiKXtjb25zdCBlPUVuLnByb2Nlc3M7aHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZCgpe3JldHVybiBlLmN3ZCgpfX19ZWxzZSB0eXBlb2YgcHJvY2VzczwidSI/aHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gQWl9LGN3ZCgpe3JldHVybiBBaS5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06aHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiB4dD8id2luMzIiOklzPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZCgpe3JldHVybiIvIn19O2NvbnN0IHF0PWh0LmN3ZCxpbz1odC5lbnYscm89aHQucGxhdGZvcm0sYW89NjUsc289OTcsb289OTAsbG89MTIyLE9lPTQ2LHVlPTQ3LHBlPTkyLFZlPTU4LHVvPTYzO2NsYXNzIFNpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLGkpe2xldCByO3R5cGVvZiBuPT0ic3RyaW5nIiYmbi5pbmRleE9mKCJub3QgIik9PT0wPyhyPSJtdXN0IG5vdCBiZSIsbj1uLnJlcGxhY2UoL15ub3QgLywiIikpOnI9Im11c3QgYmUiO2NvbnN0IGE9dC5pbmRleE9mKCIuIikhPT0tMT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IHM9YFRoZSAiJHt0fSIgJHthfSAke3J9IG9mIHR5cGUgJHtufWA7cys9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBpfWAsc3VwZXIocyksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIGNvKGUsdCl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgU2kodCwiT2JqZWN0IixlKX1mdW5jdGlvbiBpZShlLHQpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgU2kodCwic3RyaW5nIixlKX1jb25zdCBqZT1ybz09PSJ3aW4zMiI7ZnVuY3Rpb24gaihlKXtyZXR1cm4gZT09PXVlfHxlPT09cGV9ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGU9PT11ZX1mdW5jdGlvbiBHZShlKXtyZXR1cm4gZT49YW8mJmU8PW9vfHxlPj1zbyYmZTw9bG99ZnVuY3Rpb24gT3QoZSx0LG4saSl7bGV0IHI9IiIsYT0wLHM9LTEsbz0wLGw9MDtmb3IobGV0IHU9MDt1PD1lLmxlbmd0aDsrK3Upe2lmKHU8ZS5sZW5ndGgpbD1lLmNoYXJDb2RlQXQodSk7ZWxzZXtpZihpKGwpKWJyZWFrO2w9dWV9aWYoaShsKSl7aWYoIShzPT09dS0xfHxvPT09MSkpaWYobz09PTIpe2lmKHIubGVuZ3RoPDJ8fGEhPT0yfHxyLmNoYXJDb2RlQXQoci5sZW5ndGgtMSkhPT1PZXx8ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTIpIT09T2Upe2lmKHIubGVuZ3RoPjIpe2NvbnN0IGM9ci5sYXN0SW5kZXhPZihuKTtjPT09LTE/KHI9IiIsYT0wKToocj1yLnNsaWNlKDAsYyksYT1yLmxlbmd0aC0xLXIubGFzdEluZGV4T2YobikpLHM9dSxvPTA7Y29udGludWV9ZWxzZSBpZihyLmxlbmd0aCE9PTApe3I9IiIsYT0wLHM9dSxvPTA7Y29udGludWV9fXQmJihyKz1yLmxlbmd0aD4wP2Ake259Li5gOiIuLiIsYT0yKX1lbHNlIHIubGVuZ3RoPjA/cis9YCR7bn0ke2Uuc2xpY2UocysxLHUpfWA6cj1lLnNsaWNlKHMrMSx1KSxhPXUtcy0xO3M9dSxvPTB9ZWxzZSBsPT09T2UmJm8hPT0tMT8rK286bz0tMX1yZXR1cm4gcn1mdW5jdGlvbiBMaShlLHQpe2NvKHQsInBhdGhPYmplY3QiKTtjb25zdCBuPXQuZGlyfHx0LnJvb3QsaT10LmJhc2V8fGAke3QubmFtZXx8IiJ9JHt0LmV4dHx8IiJ9YDtyZXR1cm4gbj9uPT09dC5yb290P2Ake259JHtpfWA6YCR7bn0ke2V9JHtpfWA6aX1jb25zdCBtZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSIiLGk9ITE7Zm9yKGxldCByPWUubGVuZ3RoLTE7cj49LTE7ci0tKXtsZXQgYTtpZihyPj0wKXtpZihhPWVbcl0saWUoYSwicGF0aCIpLGEubGVuZ3RoPT09MCljb250aW51ZX1lbHNlIHQubGVuZ3RoPT09MD9hPXF0KCk6KGE9aW9bYD0ke3R9YF18fHF0KCksKGE9PT12b2lkIDB8fGEuc2xpY2UoMCwyKS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpJiZhLmNoYXJDb2RlQXQoMik9PT1wZSkmJihhPWAke3R9XFxgKSk7Y29uc3Qgcz1hLmxlbmd0aDtsZXQgbz0wLGw9IiIsdT0hMTtjb25zdCBjPWEuY2hhckNvZGVBdCgwKTtpZihzPT09MSlqKGMpJiYobz0xLHU9ITApO2Vsc2UgaWYoaihjKSlpZih1PSEwLGooYS5jaGFyQ29kZUF0KDEpKSl7bGV0IGQ9MixtPWQ7Zm9yKDtkPHMmJiFqKGEuY2hhckNvZGVBdChkKSk7KWQrKztpZihkPHMmJmQhPT1tKXtjb25zdCBmPWEuc2xpY2UobSxkKTtmb3IobT1kO2Q8cyYmaihhLmNoYXJDb2RlQXQoZCkpOylkKys7aWYoZDxzJiZkIT09bSl7Zm9yKG09ZDtkPHMmJiFqKGEuY2hhckNvZGVBdChkKSk7KWQrKzsoZD09PXN8fGQhPT1tKSYmKGw9YFxcXFwke2Z9XFwke2Euc2xpY2UobSxkKX1gLG89ZCl9fX1lbHNlIG89MTtlbHNlIEdlKGMpJiZhLmNoYXJDb2RlQXQoMSk9PT1WZSYmKGw9YS5zbGljZSgwLDIpLG89MixzPjImJmooYS5jaGFyQ29kZUF0KDIpKSYmKHU9ITAsbz0zKSk7aWYobC5sZW5ndGg+MClpZih0Lmxlbmd0aD4wKXtpZihsLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSB0PWw7aWYoaSl7aWYodC5sZW5ndGg+MClicmVha31lbHNlIGlmKG49YCR7YS5zbGljZShvKX1cXCR7bn1gLGk9dSx1JiZ0Lmxlbmd0aD4wKWJyZWFrfXJldHVybiBuPU90KG4sIWksIlxcIixqKSxpP2Ake3R9XFwke259YDpgJHt0fSR7bn1gfHwiLiJ9LG5vcm1hbGl6ZShlKXtpZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49MCxpLHI9ITE7Y29uc3QgYT1lLmNoYXJDb2RlQXQoMCk7aWYodD09PTEpcmV0dXJuIFJuKGEpPyJcXCI6ZTtpZihqKGEpKWlmKHI9ITAsaihlLmNoYXJDb2RlQXQoMSkpKXtsZXQgbz0yLGw9bztmb3IoO288dCYmIWooZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG88dCYmbyE9PWwpe2NvbnN0IHU9ZS5zbGljZShsLG8pO2ZvcihsPW87bzx0JiZqKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT1sKXtmb3IobD1vO288dCYmIWooZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG89PT10KXJldHVybmBcXFxcJHt1fVxcJHtlLnNsaWNlKGwpfVxcYDtvIT09bCYmKGk9YFxcXFwke3V9XFwke2Uuc2xpY2UobCxvKX1gLG49byl9fX1lbHNlIG49MTtlbHNlIEdlKGEpJiZlLmNoYXJDb2RlQXQoMSk9PT1WZSYmKGk9ZS5zbGljZSgwLDIpLG49Mix0PjImJmooZS5jaGFyQ29kZUF0KDIpKSYmKHI9ITAsbj0zKSk7bGV0IHM9bjx0P090KGUuc2xpY2UobiksIXIsIlxcIixqKToiIjtyZXR1cm4gcy5sZW5ndGg9PT0wJiYhciYmKHM9Ii4iKSxzLmxlbmd0aD4wJiZqKGUuY2hhckNvZGVBdCh0LTEpKSYmKHMrPSJcXCIpLGk9PT12b2lkIDA/cj9gXFwke3N9YDpzOnI/YCR7aX1cXCR7c31gOmAke2l9JHtzfWB9LGlzQWJzb2x1dGUoZSl7aWUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIGoobil8fHQ+MiYmR2UobikmJmUuY2hhckNvZGVBdCgxKT09PVZlJiZqKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdCxuO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7KythKXtjb25zdCBzPWVbYV07aWUocywicGF0aCIpLHMubGVuZ3RoPjAmJih0PT09dm9pZCAwP3Q9bj1zOnQrPWBcXCR7c31gKX1pZih0PT09dm9pZCAwKXJldHVybiIuIjtsZXQgaT0hMCxyPTA7aWYodHlwZW9mIG49PSJzdHJpbmciJiZqKG4uY2hhckNvZGVBdCgwKSkpeysrcjtjb25zdCBhPW4ubGVuZ3RoO2E+MSYmaihuLmNoYXJDb2RlQXQoMSkpJiYoKytyLGE+MiYmKGoobi5jaGFyQ29kZUF0KDIpKT8rK3I6aT0hMSkpfWlmKGkpe2Zvcig7cjx0Lmxlbmd0aCYmaih0LmNoYXJDb2RlQXQocikpOylyKys7cj49MiYmKHQ9YFxcJHt0LnNsaWNlKHIpfWApfXJldHVybiBtZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoaWUoZSwiZnJvbSIpLGllKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1tZS5yZXNvbHZlKGUpLGk9bWUucmVzb2x2ZSh0KTtpZihuPT09aXx8KGU9bi50b0xvd2VyQ2FzZSgpLHQ9aS50b0xvd2VyQ2FzZSgpLGU9PT10KSlyZXR1cm4iIjtsZXQgcj0wO2Zvcig7cjxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KHIpPT09cGU7KXIrKztsZXQgYT1lLmxlbmd0aDtmb3IoO2EtMT5yJiZlLmNoYXJDb2RlQXQoYS0xKT09PXBlOylhLS07Y29uc3Qgcz1hLXI7bGV0IG89MDtmb3IoO288dC5sZW5ndGgmJnQuY2hhckNvZGVBdChvKT09PXBlOylvKys7bGV0IGw9dC5sZW5ndGg7Zm9yKDtsLTE+byYmdC5jaGFyQ29kZUF0KGwtMSk9PT1wZTspbC0tO2NvbnN0IHU9bC1vLGM9czx1P3M6dTtsZXQgZD0tMSxtPTA7Zm9yKDttPGM7bSsrKXtjb25zdCBiPWUuY2hhckNvZGVBdChyK20pO2lmKGIhPT10LmNoYXJDb2RlQXQobyttKSlicmVhaztiPT09cGUmJihkPW0pfWlmKG0hPT1jKXtpZihkPT09LTEpcmV0dXJuIGl9ZWxzZXtpZih1PmMpe2lmKHQuY2hhckNvZGVBdChvK20pPT09cGUpcmV0dXJuIGkuc2xpY2UobyttKzEpO2lmKG09PT0yKXJldHVybiBpLnNsaWNlKG8rbSl9cz5jJiYoZS5jaGFyQ29kZUF0KHIrbSk9PT1wZT9kPW06bT09PTImJihkPTMpKSxkPT09LTEmJihkPTApfWxldCBmPSIiO2ZvcihtPXIrZCsxO208PWE7KyttKShtPT09YXx8ZS5jaGFyQ29kZUF0KG0pPT09cGUpJiYoZis9Zi5sZW5ndGg9PT0wPyIuLiI6IlxcLi4iKTtyZXR1cm4gbys9ZCxmLmxlbmd0aD4wP2Ake2Z9JHtpLnNsaWNlKG8sbCl9YDooaS5jaGFyQ29kZUF0KG8pPT09cGUmJisrbyxpLnNsaWNlKG8sbCkpfSx0b05hbWVzcGFjZWRQYXRoKGUpe2lmKHR5cGVvZiBlIT0ic3RyaW5nInx8ZS5sZW5ndGg9PT0wKXJldHVybiBlO2NvbnN0IHQ9bWUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1wZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09cGUpe2NvbnN0IG49dC5jaGFyQ29kZUF0KDIpO2lmKG4hPT11byYmbiE9PU9lKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihHZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT1WZSYmdC5jaGFyQ29kZUF0KDIpPT09cGUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtpZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49LTEsaT0wO2NvbnN0IHI9ZS5jaGFyQ29kZUF0KDApO2lmKHQ9PT0xKXJldHVybiBqKHIpP2U6Ii4iO2lmKGoocikpe2lmKG49aT0xLGooZS5jaGFyQ29kZUF0KDEpKSl7bGV0IG89MixsPW87Zm9yKDtvPHQmJiFqKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT1sKXtmb3IobD1vO288dCYmaihlLmNoYXJDb2RlQXQobykpOylvKys7aWYobzx0JiZvIT09bCl7Zm9yKGw9bztvPHQmJiFqKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPT09dClyZXR1cm4gZTtvIT09bCYmKG49aT1vKzEpfX19fWVsc2UgR2UocikmJmUuY2hhckNvZGVBdCgxKT09PVZlJiYobj10PjImJmooZS5jaGFyQ29kZUF0KDIpKT8zOjIsaT1uKTtsZXQgYT0tMSxzPSEwO2ZvcihsZXQgbz10LTE7bz49aTstLW8paWYoaihlLmNoYXJDb2RlQXQobykpKXtpZighcyl7YT1vO2JyZWFrfX1lbHNlIHM9ITE7aWYoYT09PS0xKXtpZihuPT09LTEpcmV0dXJuIi4iO2E9bn1yZXR1cm4gZS5zbGljZSgwLGEpfSxiYXNlbmFtZShlLHQpe3QhPT12b2lkIDAmJmllKHQsImV4dCIpLGllKGUsInBhdGgiKTtsZXQgbj0wLGk9LTEscj0hMCxhO2lmKGUubGVuZ3RoPj0yJiZHZShlLmNoYXJDb2RlQXQoMCkpJiZlLmNoYXJDb2RlQXQoMSk9PT1WZSYmKG49MiksdCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgcz10Lmxlbmd0aC0xLG89LTE7Zm9yKGE9ZS5sZW5ndGgtMTthPj1uOy0tYSl7Y29uc3QgbD1lLmNoYXJDb2RlQXQoYSk7aWYoaihsKSl7aWYoIXIpe249YSsxO2JyZWFrfX1lbHNlIG89PT0tMSYmKHI9ITEsbz1hKzEpLHM+PTAmJihsPT09dC5jaGFyQ29kZUF0KHMpPy0tcz09PS0xJiYoaT1hKToocz0tMSxpPW8pKX1yZXR1cm4gbj09PWk/aT1vOmk9PT0tMSYmKGk9ZS5sZW5ndGgpLGUuc2xpY2UobixpKX1mb3IoYT1lLmxlbmd0aC0xO2E+PW47LS1hKWlmKGooZS5jaGFyQ29kZUF0KGEpKSl7aWYoIXIpe249YSsxO2JyZWFrfX1lbHNlIGk9PT0tMSYmKHI9ITEsaT1hKzEpO3JldHVybiBpPT09LTE/IiI6ZS5zbGljZShuLGkpfSxleHRuYW1lKGUpe2llKGUsInBhdGgiKTtsZXQgdD0wLG49LTEsaT0wLHI9LTEsYT0hMCxzPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PVZlJiZHZShlLmNoYXJDb2RlQXQoMCkpJiYodD1pPTIpO2ZvcihsZXQgbz1lLmxlbmd0aC0xO28+PXQ7LS1vKXtjb25zdCBsPWUuY2hhckNvZGVBdChvKTtpZihqKGwpKXtpZighYSl7aT1vKzE7YnJlYWt9Y29udGludWV9cj09PS0xJiYoYT0hMSxyPW8rMSksbD09PU9lP249PT0tMT9uPW86cyE9PTEmJihzPTEpOm4hPT0tMSYmKHM9LTEpfXJldHVybiBuPT09LTF8fHI9PT0tMXx8cz09PTB8fHM9PT0xJiZuPT09ci0xJiZuPT09aSsxPyIiOmUuc2xpY2UobixyKX0sZm9ybWF0OkxpLmJpbmQobnVsbCwiXFwiKSxwYXJzZShlKXtpZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5sZW5ndGg7bGV0IGk9MCxyPWUuY2hhckNvZGVBdCgwKTtpZihuPT09MSlyZXR1cm4gaihyKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihqKHIpKXtpZihpPTEsaihlLmNoYXJDb2RlQXQoMSkpKXtsZXQgZD0yLG09ZDtmb3IoO2Q8biYmIWooZS5jaGFyQ29kZUF0KGQpKTspZCsrO2lmKGQ8biYmZCE9PW0pe2ZvcihtPWQ7ZDxuJiZqKGUuY2hhckNvZGVBdChkKSk7KWQrKztpZihkPG4mJmQhPT1tKXtmb3IobT1kO2Q8biYmIWooZS5jaGFyQ29kZUF0KGQpKTspZCsrO2Q9PT1uP2k9ZDpkIT09bSYmKGk9ZCsxKX19fX1lbHNlIGlmKEdlKHIpJiZlLmNoYXJDb2RlQXQoMSk9PT1WZSl7aWYobjw9MilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpZihpPTIsaihlLmNoYXJDb2RlQXQoMikpKXtpZihuPT09MylyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpPTN9fWk+MCYmKHQucm9vdD1lLnNsaWNlKDAsaSkpO2xldCBhPS0xLHM9aSxvPS0xLGw9ITAsdT1lLmxlbmd0aC0xLGM9MDtmb3IoO3U+PWk7LS11KXtpZihyPWUuY2hhckNvZGVBdCh1KSxqKHIpKXtpZighbCl7cz11KzE7YnJlYWt9Y29udGludWV9bz09PS0xJiYobD0hMSxvPXUrMSkscj09PU9lP2E9PT0tMT9hPXU6YyE9PTEmJihjPTEpOmEhPT0tMSYmKGM9LTEpfXJldHVybiBvIT09LTEmJihhPT09LTF8fGM9PT0wfHxjPT09MSYmYT09PW8tMSYmYT09PXMrMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UocyxvKToodC5uYW1lPWUuc2xpY2UocyxhKSx0LmJhc2U9ZS5zbGljZShzLG8pLHQuZXh0PWUuc2xpY2UoYSxvKSkpLHM+MCYmcyE9PWk/dC5kaXI9ZS5zbGljZSgwLHMtMSk6dC5kaXI9dC5yb290LHR9LHNlcDoiXFwiLGRlbGltaXRlcjoiOyIsd2luMzI6bnVsbCxwb3NpeDpudWxsfSxobz0oKCk9PntpZihqZSl7Y29uc3QgZT0vXFwvZztyZXR1cm4oKT0+e2NvbnN0IHQ9cXQoKS5yZXBsYWNlKGUsIi8iKTtyZXR1cm4gdC5zbGljZSh0LmluZGV4T2YoIi8iKSl9fXJldHVybigpPT5xdCgpfSkoKSxnZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSExO2ZvcihsZXQgaT1lLmxlbmd0aC0xO2k+PS0xJiYhbjtpLS0pe2NvbnN0IHI9aT49MD9lW2ldOmhvKCk7aWUociwicGF0aCIpLHIubGVuZ3RoIT09MCYmKHQ9YCR7cn0vJHt0fWAsbj1yLmNoYXJDb2RlQXQoMCk9PT11ZSl9cmV0dXJuIHQ9T3QodCwhbiwiLyIsUm4pLG4/YC8ke3R9YDp0Lmxlbmd0aD4wP3Q6Ii4ifSxub3JtYWxpemUoZSl7aWYoaWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT11ZSxuPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKT09PXVlO3JldHVybiBlPU90KGUsIXQsIi8iLFJuKSxlLmxlbmd0aD09PTA/dD8iLyI6bj8iLi8iOiIuIjoobiYmKGUrPSIvIiksdD9gLyR7ZX1gOmUpfSxpc0Fic29sdXRlKGUpe3JldHVybiBpZShlLCJwYXRoIiksZS5sZW5ndGg+MCYmZS5jaGFyQ29kZUF0KDApPT09dWV9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbil7Y29uc3QgaT1lW25dO2llKGksInBhdGgiKSxpLmxlbmd0aD4wJiYodD09PXZvaWQgMD90PWk6dCs9YC8ke2l9YCl9cmV0dXJuIHQ9PT12b2lkIDA/Ii4iOmdlLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihpZShlLCJmcm9tIiksaWUodCwidG8iKSxlPT09dHx8KGU9Z2UucmVzb2x2ZShlKSx0PWdlLnJlc29sdmUodCksZT09PXQpKXJldHVybiIiO2NvbnN0IG49MSxpPWUubGVuZ3RoLHI9aS1uLGE9MSxzPXQubGVuZ3RoLWEsbz1yPHM/cjpzO2xldCBsPS0xLHU9MDtmb3IoO3U8bzt1Kyspe2NvbnN0IGQ9ZS5jaGFyQ29kZUF0KG4rdSk7aWYoZCE9PXQuY2hhckNvZGVBdChhK3UpKWJyZWFrO2Q9PT11ZSYmKGw9dSl9aWYodT09PW8paWYocz5vKXtpZih0LmNoYXJDb2RlQXQoYSt1KT09PXVlKXJldHVybiB0LnNsaWNlKGErdSsxKTtpZih1PT09MClyZXR1cm4gdC5zbGljZShhK3UpfWVsc2Ugcj5vJiYoZS5jaGFyQ29kZUF0KG4rdSk9PT11ZT9sPXU6dT09PTAmJihsPTApKTtsZXQgYz0iIjtmb3IodT1uK2wrMTt1PD1pOysrdSkodT09PWl8fGUuY2hhckNvZGVBdCh1KT09PXVlKSYmKGMrPWMubGVuZ3RoPT09MD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtjfSR7dC5zbGljZShhK2wpfWB9LHRvTmFtZXNwYWNlZFBhdGgoZSl7cmV0dXJuIGV9LGRpcm5hbWUoZSl7aWYoaWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT11ZTtsZXQgbj0tMSxpPSEwO2ZvcihsZXQgcj1lLmxlbmd0aC0xO3I+PTE7LS1yKWlmKGUuY2hhckNvZGVBdChyKT09PXVlKXtpZighaSl7bj1yO2JyZWFrfX1lbHNlIGk9ITE7cmV0dXJuIG49PT0tMT90PyIvIjoiLiI6dCYmbj09PTE/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dCE9PXZvaWQgMCYmaWUodCwiZXh0IiksaWUoZSwicGF0aCIpO2xldCBuPTAsaT0tMSxyPSEwLGE7aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgcz10Lmxlbmd0aC0xLG89LTE7Zm9yKGE9ZS5sZW5ndGgtMTthPj0wOy0tYSl7Y29uc3QgbD1lLmNoYXJDb2RlQXQoYSk7aWYobD09PXVlKXtpZighcil7bj1hKzE7YnJlYWt9fWVsc2Ugbz09PS0xJiYocj0hMSxvPWErMSkscz49MCYmKGw9PT10LmNoYXJDb2RlQXQocyk/LS1zPT09LTEmJihpPWEpOihzPS0xLGk9bykpfXJldHVybiBuPT09aT9pPW86aT09PS0xJiYoaT1lLmxlbmd0aCksZS5zbGljZShuLGkpfWZvcihhPWUubGVuZ3RoLTE7YT49MDstLWEpaWYoZS5jaGFyQ29kZUF0KGEpPT09dWUpe2lmKCFyKXtuPWErMTticmVha319ZWxzZSBpPT09LTEmJihyPSExLGk9YSsxKTtyZXR1cm4gaT09PS0xPyIiOmUuc2xpY2UobixpKX0sZXh0bmFtZShlKXtpZShlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLGk9LTEscj0hMCxhPTA7Zm9yKGxldCBzPWUubGVuZ3RoLTE7cz49MDstLXMpe2NvbnN0IG89ZS5jaGFyQ29kZUF0KHMpO2lmKG89PT11ZSl7aWYoIXIpe249cysxO2JyZWFrfWNvbnRpbnVlfWk9PT0tMSYmKHI9ITEsaT1zKzEpLG89PT1PZT90PT09LTE/dD1zOmEhPT0xJiYoYT0xKTp0IT09LTEmJihhPS0xKX1yZXR1cm4gdD09PS0xfHxpPT09LTF8fGE9PT0wfHxhPT09MSYmdD09PWktMSYmdD09PW4rMT8iIjplLnNsaWNlKHQsaSl9LGZvcm1hdDpMaS5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtpZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09dWU7bGV0IGk7bj8odC5yb290PSIvIixpPTEpOmk9MDtsZXQgcj0tMSxhPTAscz0tMSxvPSEwLGw9ZS5sZW5ndGgtMSx1PTA7Zm9yKDtsPj1pOy0tbCl7Y29uc3QgYz1lLmNoYXJDb2RlQXQobCk7aWYoYz09PXVlKXtpZighbyl7YT1sKzE7YnJlYWt9Y29udGludWV9cz09PS0xJiYobz0hMSxzPWwrMSksYz09PU9lP3I9PT0tMT9yPWw6dSE9PTEmJih1PTEpOnIhPT0tMSYmKHU9LTEpfWlmKHMhPT0tMSl7Y29uc3QgYz1hPT09MCYmbj8xOmE7cj09PS0xfHx1PT09MHx8dT09PTEmJnI9PT1zLTEmJnI9PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGMscyk6KHQubmFtZT1lLnNsaWNlKGMsciksdC5iYXNlPWUuc2xpY2UoYyxzKSx0LmV4dD1lLnNsaWNlKHIscykpfXJldHVybiBhPjA/dC5kaXI9ZS5zbGljZSgwLGEtMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07Z2Uud2luMzI9bWUud2luMzI9bWUsZ2UucG9zaXg9bWUucG9zaXg9Z2UsamU/bWUubm9ybWFsaXplOmdlLm5vcm1hbGl6ZSxqZT9tZS5yZXNvbHZlOmdlLnJlc29sdmUsamU/bWUucmVsYXRpdmU6Z2UucmVsYXRpdmUsamU/bWUuZGlybmFtZTpnZS5kaXJuYW1lLGplP21lLmJhc2VuYW1lOmdlLmJhc2VuYW1lLGplP21lLmV4dG5hbWU6Z2UuZXh0bmFtZSxqZT9tZS5zZXA6Z2Uuc2VwO2NvbnN0IG1vPS9eXHdbXHdcZCsuLV0qJC8sZm89L15cLy8scG89L15cL1wvLztmdW5jdGlvbiBnbyhlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIW1vLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpe2lmKGUuYXV0aG9yaXR5KXtpZighZm8udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYocG8udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1mdW5jdGlvbiBibyhlLHQpe3JldHVybiFlJiYhdD8iZmlsZSI6ZX1mdW5jdGlvbiB2byhlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09TGUmJih0PUxlK3QpOnQ9TGU7YnJlYWt9cmV0dXJuIHR9Y29uc3QgZWU9IiIsTGU9Ii8iLF9vPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2xldCBNbj1jbGFzcyBnbntzdGF0aWMgaXNVcmkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBnbj8hMDp0P3R5cGVvZiB0LmF1dGhvcml0eT09InN0cmluZyImJnR5cGVvZiB0LmZyYWdtZW50PT0ic3RyaW5nIiYmdHlwZW9mIHQucGF0aD09InN0cmluZyImJnR5cGVvZiB0LnF1ZXJ5PT0ic3RyaW5nIiYmdHlwZW9mIHQuc2NoZW1lPT0ic3RyaW5nIiYmdHlwZW9mIHQuZnNQYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHQud2l0aD09ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmc9PSJmdW5jdGlvbiI6ITF9Y29uc3RydWN0b3IodCxuLGkscixhLHM9ITEpe3R5cGVvZiB0PT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9dC5zY2hlbWV8fGVlLHRoaXMuYXV0aG9yaXR5PXQuYXV0aG9yaXR5fHxlZSx0aGlzLnBhdGg9dC5wYXRofHxlZSx0aGlzLnF1ZXJ5PXQucXVlcnl8fGVlLHRoaXMuZnJhZ21lbnQ9dC5mcmFnbWVudHx8ZWUpOih0aGlzLnNjaGVtZT1ibyh0LHMpLHRoaXMuYXV0aG9yaXR5PW58fGVlLHRoaXMucGF0aD12byh0aGlzLnNjaGVtZSxpfHxlZSksdGhpcy5xdWVyeT1yfHxlZSx0aGlzLmZyYWdtZW50PWF8fGVlLGdvKHRoaXMscykpfWdldCBmc1BhdGgoKXtyZXR1cm4gRG4odGhpcywhMSl9d2l0aCh0KXtpZighdClyZXR1cm4gdGhpcztsZXR7c2NoZW1lOm4sYXV0aG9yaXR5OmkscGF0aDpyLHF1ZXJ5OmEsZnJhZ21lbnQ6c309dDtyZXR1cm4gbj09PXZvaWQgMD9uPXRoaXMuc2NoZW1lOm49PT1udWxsJiYobj1lZSksaT09PXZvaWQgMD9pPXRoaXMuYXV0aG9yaXR5Omk9PT1udWxsJiYoaT1lZSkscj09PXZvaWQgMD9yPXRoaXMucGF0aDpyPT09bnVsbCYmKHI9ZWUpLGE9PT12b2lkIDA/YT10aGlzLnF1ZXJ5OmE9PT1udWxsJiYoYT1lZSkscz09PXZvaWQgMD9zPXRoaXMuZnJhZ21lbnQ6cz09PW51bGwmJihzPWVlKSxuPT09dGhpcy5zY2hlbWUmJmk9PT10aGlzLmF1dGhvcml0eSYmcj09PXRoaXMucGF0aCYmYT09PXRoaXMucXVlcnkmJnM9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IGR0KG4saSxyLGEscyl9c3RhdGljIHBhcnNlKHQsbj0hMSl7Y29uc3QgaT1fby5leGVjKHQpO3JldHVybiBpP25ldyBkdChpWzJdfHxlZSxWdChpWzRdfHxlZSksVnQoaVs1XXx8ZWUpLFZ0KGlbN118fGVlKSxWdChpWzldfHxlZSksbik6bmV3IGR0KGVlLGVlLGVlLGVlLGVlKX1zdGF0aWMgZmlsZSh0KXtsZXQgbj1lZTtpZih4dCYmKHQ9dC5yZXBsYWNlKC9cXC9nLExlKSksdFswXT09PUxlJiZ0WzFdPT09TGUpe2NvbnN0IGk9dC5pbmRleE9mKExlLDIpO2k9PT0tMT8obj10LnN1YnN0cmluZygyKSx0PUxlKToobj10LnN1YnN0cmluZygyLGkpLHQ9dC5zdWJzdHJpbmcoaSl8fExlKX1yZXR1cm4gbmV3IGR0KCJmaWxlIixuLHQsZWUsZWUpfXN0YXRpYyBmcm9tKHQsbil7cmV0dXJuIG5ldyBkdCh0LnNjaGVtZSx0LmF1dGhvcml0eSx0LnBhdGgsdC5xdWVyeSx0LmZyYWdtZW50LG4pfXN0YXRpYyBqb2luUGF0aCh0LC4uLm4pe2lmKCF0LnBhdGgpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBjYW5ub3QgY2FsbCBqb2luUGF0aCBvbiBVUkkgd2l0aG91dCBwYXRoIik7bGV0IGk7cmV0dXJuIHh0JiZ0LnNjaGVtZT09PSJmaWxlIj9pPWduLmZpbGUobWUuam9pbihEbih0LCEwKSwuLi5uKSkucGF0aDppPWdlLmpvaW4odC5wYXRoLC4uLm4pLHQud2l0aCh7cGF0aDppfSl9dG9TdHJpbmcodD0hMSl7cmV0dXJuIE5uKHRoaXMsdCl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZSh0KXt2YXIgbixpO2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBnbilyZXR1cm4gdDt7Y29uc3Qgcj1uZXcgZHQodCk7cmV0dXJuIHIuX2Zvcm1hdHRlZD0obj10LmV4dGVybmFsKSE9PW51bGwmJm4hPT12b2lkIDA/bjpudWxsLHIuX2ZzUGF0aD10Ll9zZXA9PT1DaSYmKGk9dC5mc1BhdGgpIT09bnVsbCYmaSE9PXZvaWQgMD9pOm51bGwscn19ZWxzZSByZXR1cm4gdH19O2NvbnN0IENpPXh0PzE6dm9pZCAwO2NsYXNzIGR0IGV4dGVuZHMgTW57Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Zvcm1hdHRlZD1udWxsLHRoaXMuX2ZzUGF0aD1udWxsfWdldCBmc1BhdGgoKXtyZXR1cm4gdGhpcy5fZnNQYXRofHwodGhpcy5fZnNQYXRoPURuKHRoaXMsITEpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcodD0hMSl7cmV0dXJuIHQ/Tm4odGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1Obih0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX10b0pTT04oKXtjb25zdCB0PXskbWlkOjF9O3JldHVybiB0aGlzLl9mc1BhdGgmJih0LmZzUGF0aD10aGlzLl9mc1BhdGgsdC5fc2VwPUNpKSx0aGlzLl9mb3JtYXR0ZWQmJih0LmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYodC5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJih0LnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJih0LmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKHQucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKHQuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksdH19Y29uc3QgRWk9ezU4OiIlM0EiLDQ3OiIlMkYiLDYzOiIlM0YiLDM1OiIlMjMiLDkxOiIlNUIiLDkzOiIlNUQiLDY0OiIlNDAiLDMzOiIlMjEiLDM2OiIlMjQiLDM4OiIlMjYiLDM5OiIlMjciLDQwOiIlMjgiLDQxOiIlMjkiLDQyOiIlMkEiLDQzOiIlMkIiLDQ0OiIlMkMiLDU5OiIlM0IiLDYxOiIlM0QiLDMyOiIlMjAifTtmdW5jdGlvbiBSaShlLHQsbil7bGV0IGkscj0tMTtmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoYSk7aWYocz49OTcmJnM8PTEyMnx8cz49NjUmJnM8PTkwfHxzPj00OCYmczw9NTd8fHM9PT00NXx8cz09PTQ2fHxzPT09OTV8fHM9PT0xMjZ8fHQmJnM9PT00N3x8biYmcz09PTkxfHxuJiZzPT09OTN8fG4mJnM9PT01OClyIT09LTEmJihpKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixhKSkscj0tMSksaSE9PXZvaWQgMCYmKGkrPWUuY2hhckF0KGEpKTtlbHNle2k9PT12b2lkIDAmJihpPWUuc3Vic3RyKDAsYSkpO2NvbnN0IG89RWlbc107byE9PXZvaWQgMD8ociE9PS0xJiYoaSs9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKHIsYSkpLHI9LTEpLGkrPW8pOnI9PT0tMSYmKHI9YSl9fXJldHVybiByIT09LTEmJihpKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocikpKSxpIT09dm9pZCAwP2k6ZX1mdW5jdGlvbiB3byhlKXtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7Y29uc3QgaT1lLmNoYXJDb2RlQXQobik7aT09PTM1fHxpPT09NjM/KHQ9PT12b2lkIDAmJih0PWUuc3Vic3RyKDAsbikpLHQrPUVpW2ldKTp0IT09dm9pZCAwJiYodCs9ZVtuXSl9cmV0dXJuIHQhPT12b2lkIDA/dDplfWZ1bmN0aW9uIERuKGUsdCl7bGV0IG47cmV0dXJuIGUuYXV0aG9yaXR5JiZlLnBhdGgubGVuZ3RoPjEmJmUuc2NoZW1lPT09ImZpbGUiP249YC8vJHtlLmF1dGhvcml0eX0ke2UucGF0aH1gOmUucGF0aC5jaGFyQ29kZUF0KDApPT09NDcmJihlLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8ZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmZS5wYXRoLmNoYXJDb2RlQXQoMik9PT01OD90P249ZS5wYXRoLnN1YnN0cigxKTpuPWUucGF0aFsxXS50b0xvd2VyQ2FzZSgpK2UucGF0aC5zdWJzdHIoMik6bj1lLnBhdGgseHQmJihuPW4ucmVwbGFjZSgvXC8vZywiXFwiKSksbn1mdW5jdGlvbiBObihlLHQpe2NvbnN0IG49dD93bzpSaTtsZXQgaT0iIix7c2NoZW1lOnIsYXV0aG9yaXR5OmEscGF0aDpzLHF1ZXJ5Om8sZnJhZ21lbnQ6bH09ZTtpZihyJiYoaSs9cixpKz0iOiIpLChhfHxyPT09ImZpbGUiKSYmKGkrPUxlLGkrPUxlKSxhKXtsZXQgdT1hLmluZGV4T2YoIkAiKTtpZih1IT09LTEpe2NvbnN0IGM9YS5zdWJzdHIoMCx1KTthPWEuc3Vic3RyKHUrMSksdT1jLmxhc3RJbmRleE9mKCI6IiksdT09PS0xP2krPW4oYywhMSwhMSk6KGkrPW4oYy5zdWJzdHIoMCx1KSwhMSwhMSksaSs9IjoiLGkrPW4oYy5zdWJzdHIodSsxKSwhMSwhMCkpLGkrPSJAIn1hPWEudG9Mb3dlckNhc2UoKSx1PWEubGFzdEluZGV4T2YoIjoiKSx1PT09LTE/aSs9bihhLCExLCEwKTooaSs9bihhLnN1YnN0cigwLHUpLCExLCEwKSxpKz1hLnN1YnN0cih1KSl9aWYocyl7aWYocy5sZW5ndGg+PTMmJnMuY2hhckNvZGVBdCgwKT09PTQ3JiZzLmNoYXJDb2RlQXQoMik9PT01OCl7Y29uc3QgdT1zLmNoYXJDb2RlQXQoMSk7dT49NjUmJnU8PTkwJiYocz1gLyR7U3RyaW5nLmZyb21DaGFyQ29kZSh1KzMyKX06JHtzLnN1YnN0cigzKX1gKX1lbHNlIGlmKHMubGVuZ3RoPj0yJiZzLmNoYXJDb2RlQXQoMSk9PT01OCl7Y29uc3QgdT1zLmNoYXJDb2RlQXQoMCk7dT49NjUmJnU8PTkwJiYocz1gJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHUrMzIpfToke3Muc3Vic3RyKDIpfWApfWkrPW4ocywhMCwhMSl9cmV0dXJuIG8mJihpKz0iPyIsaSs9bihvLCExLCExKSksbCYmKGkrPSIjIixpKz10P2w6UmkobCwhMSwhMSkpLGl9ZnVuY3Rpb24gTWkoZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZSl9Y2F0Y2h7cmV0dXJuIGUubGVuZ3RoPjM/ZS5zdWJzdHIoMCwzKStNaShlLnN1YnN0cigzKSk6ZX19Y29uc3QgRGk9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIGUubWF0Y2goRGkpP2UucmVwbGFjZShEaSx0PT5NaSh0KSk6ZX1sZXQgTmU9Y2xhc3MgaXR7Y29uc3RydWN0b3IodCxuKXt0aGlzLmxpbmVOdW1iZXI9dCx0aGlzLmNvbHVtbj1ufXdpdGgodD10aGlzLmxpbmVOdW1iZXIsbj10aGlzLmNvbHVtbil7cmV0dXJuIHQ9PT10aGlzLmxpbmVOdW1iZXImJm49PT10aGlzLmNvbHVtbj90aGlzOm5ldyBpdCh0LG4pfWRlbHRhKHQ9MCxuPTApe3JldHVybiB0aGlzLndpdGgodGhpcy5saW5lTnVtYmVyK3QsdGhpcy5jb2x1bW4rbil9ZXF1YWxzKHQpe3JldHVybiBpdC5lcXVhbHModGhpcyx0KX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIXQmJiFuPyEwOiEhdCYmISFuJiZ0LmxpbmVOdW1iZXI9PT1uLmxpbmVOdW1iZXImJnQuY29sdW1uPT09bi5jb2x1bW59aXNCZWZvcmUodCl7cmV0dXJuIGl0LmlzQmVmb3JlKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlKHQsbil7cmV0dXJuIHQubGluZU51bWJlcjxuLmxpbmVOdW1iZXI/ITA6bi5saW5lTnVtYmVyPHQubGluZU51bWJlcj8hMTp0LmNvbHVtbjxuLmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwodCl7cmV0dXJuIGl0LmlzQmVmb3JlT3JFcXVhbCh0aGlzLHQpfXN0YXRpYyBpc0JlZm9yZU9yRXF1YWwodCxuKXtyZXR1cm4gdC5saW5lTnVtYmVyPG4ubGluZU51bWJlcj8hMDpuLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyPyExOnQuY29sdW1uPD1uLmNvbHVtbn1zdGF0aWMgY29tcGFyZSh0LG4pe2NvbnN0IGk9dC5saW5lTnVtYmVyfDAscj1uLmxpbmVOdW1iZXJ8MDtpZihpPT09cil7Y29uc3QgYT10LmNvbHVtbnwwLHM9bi5jb2x1bW58MDtyZXR1cm4gYS1zfXJldHVybiBpLXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IGl0KHRoaXMubGluZU51bWJlcix0aGlzLmNvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iKCIrdGhpcy5saW5lTnVtYmVyKyIsIit0aGlzLmNvbHVtbisiKSJ9c3RhdGljIGxpZnQodCl7cmV0dXJuIG5ldyBpdCh0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBpc0lQb3NpdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIHQubGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LmNvbHVtbj09Im51bWJlciJ9dG9KU09OKCl7cmV0dXJue2xpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmNvbHVtbn19fSxvZT1jbGFzcyByZXtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0Pml8fHQ9PT1pJiZuPnI/KHRoaXMuc3RhcnRMaW5lTnVtYmVyPWksdGhpcy5zdGFydENvbHVtbj1yLHRoaXMuZW5kTGluZU51bWJlcj10LHRoaXMuZW5kQ29sdW1uPW4pOih0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuc3RhcnRDb2x1bW49bix0aGlzLmVuZExpbmVOdW1iZXI9aSx0aGlzLmVuZENvbHVtbj1yKX1pc0VtcHR5KCl7cmV0dXJuIHJlLmlzRW1wdHkodGhpcyl9c3RhdGljIGlzRW1wdHkodCl7cmV0dXJuIHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW59Y29udGFpbnNQb3NpdGlvbih0KXtyZXR1cm4gcmUuY29udGFpbnNQb3NpdGlvbih0aGlzLHQpfXN0YXRpYyBjb250YWluc1Bvc2l0aW9uKHQsbil7cmV0dXJuIShuLmxpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmNvbHVtbjx0LnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uY29sdW1uPnQuZW5kQ29sdW1uKX1zdGF0aWMgc3RyaWN0Q29udGFpbnNQb3NpdGlvbih0LG4pe3JldHVybiEobi5saW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5jb2x1bW48PXQuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5jb2x1bW4+PXQuZW5kQ29sdW1uKX1jb250YWluc1JhbmdlKHQpe3JldHVybiByZS5jb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjx0LnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPnQuZW5kQ29sdW1uKX1zdHJpY3RDb250YWluc1JhbmdlKHQpe3JldHVybiByZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjw9dC5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbj49dC5lbmRDb2x1bW4pfXBsdXNSYW5nZSh0KXtyZXR1cm4gcmUucGx1c1JhbmdlKHRoaXMsdCl9c3RhdGljIHBsdXNSYW5nZSh0LG4pe2xldCBpLHIsYSxzO3JldHVybiBuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcj8oaT1uLnN0YXJ0TGluZU51bWJlcixyPW4uc3RhcnRDb2x1bW4pOm4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/KGk9bi5zdGFydExpbmVOdW1iZXIscj1NYXRoLm1pbihuLnN0YXJ0Q29sdW1uLHQuc3RhcnRDb2x1bW4pKTooaT10LnN0YXJ0TGluZU51bWJlcixyPXQuc3RhcnRDb2x1bW4pLG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXI/KGE9bi5lbmRMaW5lTnVtYmVyLHM9bi5lbmRDb2x1bW4pOm4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj8oYT1uLmVuZExpbmVOdW1iZXIscz1NYXRoLm1heChuLmVuZENvbHVtbix0LmVuZENvbHVtbikpOihhPXQuZW5kTGluZU51bWJlcixzPXQuZW5kQ29sdW1uKSxuZXcgcmUoaSxyLGEscyl9aW50ZXJzZWN0UmFuZ2VzKHQpe3JldHVybiByZS5pbnRlcnNlY3RSYW5nZXModGhpcyx0KX1zdGF0aWMgaW50ZXJzZWN0UmFuZ2VzKHQsbil7bGV0IGk9dC5zdGFydExpbmVOdW1iZXIscj10LnN0YXJ0Q29sdW1uLGE9dC5lbmRMaW5lTnVtYmVyLHM9dC5lbmRDb2x1bW47Y29uc3Qgbz1uLnN0YXJ0TGluZU51bWJlcixsPW4uc3RhcnRDb2x1bW4sdT1uLmVuZExpbmVOdW1iZXIsYz1uLmVuZENvbHVtbjtyZXR1cm4gaTxvPyhpPW8scj1sKTppPT09byYmKHI9TWF0aC5tYXgocixsKSksYT51PyhhPXUscz1jKTphPT09dSYmKHM9TWF0aC5taW4ocyxjKSksaT5hfHxpPT09YSYmcj5zP251bGw6bmV3IHJlKGkscixhLHMpfWVxdWFsc1JhbmdlKHQpe3JldHVybiByZS5lcXVhbHNSYW5nZSh0aGlzLHQpfXN0YXRpYyBlcXVhbHNSYW5nZSh0LG4pe3JldHVybiF0JiYhbj8hMDohIXQmJiEhbiYmdC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbj09PW4uc3RhcnRDb2x1bW4mJnQuZW5kTGluZU51bWJlcj09PW4uZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW49PT1uLmVuZENvbHVtbn1nZXRFbmRQb3NpdGlvbigpe3JldHVybiByZS5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24odCl7cmV0dXJuIG5ldyBOZSh0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pfWdldFN0YXJ0UG9zaXRpb24oKXtyZXR1cm4gcmUuZ2V0U3RhcnRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0U3RhcnRQb3NpdGlvbih0KXtyZXR1cm4gbmV3IE5lKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLmVuZExpbmVOdW1iZXIrIiwiK3RoaXMuZW5kQ29sdW1uKyJdIn1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgcmUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbix0LG4pfXNldFN0YXJ0UG9zaXRpb24odCxuKXtyZXR1cm4gbmV3IHJlKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiByZS5jb2xsYXBzZVRvU3RhcnQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9TdGFydCh0KXtyZXR1cm4gbmV3IHJlKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9Y29sbGFwc2VUb0VuZCgpe3JldHVybiByZS5jb2xsYXBzZVRvRW5kKHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvRW5kKHQpe3JldHVybiBuZXcgcmUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9ZGVsdGEodCl7cmV0dXJuIG5ldyByZSh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuc3RhcnRDb2x1bW4sdGhpcy5lbmRMaW5lTnVtYmVyK3QsdGhpcy5lbmRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IHJlKHQubGluZU51bWJlcix0LmNvbHVtbixuLmxpbmVOdW1iZXIsbi5jb2x1bW4pfXN0YXRpYyBsaWZ0KHQpe3JldHVybiB0P25ldyByZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UodCl7cmV0dXJuIHQmJnR5cGVvZiB0LnN0YXJ0TGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnN0YXJ0Q29sdW1uPT0ibnVtYmVyIiYmdHlwZW9mIHQuZW5kTGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LmVuZENvbHVtbj09Im51bWJlciJ9c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPG4uc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPD1uLnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyh0LG4pe2lmKHQmJm4pe2NvbnN0IGE9dC5zdGFydExpbmVOdW1iZXJ8MCxzPW4uc3RhcnRMaW5lTnVtYmVyfDA7aWYoYT09PXMpe2NvbnN0IG89dC5zdGFydENvbHVtbnwwLGw9bi5zdGFydENvbHVtbnwwO2lmKG89PT1sKXtjb25zdCB1PXQuZW5kTGluZU51bWJlcnwwLGM9bi5lbmRMaW5lTnVtYmVyfDA7aWYodT09PWMpe2NvbnN0IGQ9dC5lbmRDb2x1bW58MCxtPW4uZW5kQ29sdW1ufDA7cmV0dXJuIGQtbX1yZXR1cm4gdS1jfXJldHVybiBvLWx9cmV0dXJuIGEtc31yZXR1cm4odD8xOjApLShuPzE6MCl9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ0VuZHModCxuKXtyZXR1cm4gdC5lbmRMaW5lTnVtYmVyPT09bi5lbmRMaW5lTnVtYmVyP3QuZW5kQ29sdW1uPT09bi5lbmRDb2x1bW4/dC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlcj90LnN0YXJ0Q29sdW1uLW4uc3RhcnRDb2x1bW46dC5zdGFydExpbmVOdW1iZXItbi5zdGFydExpbmVOdW1iZXI6dC5lbmRDb2x1bW4tbi5lbmRDb2x1bW46dC5lbmRMaW5lTnVtYmVyLW4uZW5kTGluZU51bWJlcn1zdGF0aWMgc3BhbnNNdWx0aXBsZUxpbmVzKHQpe3JldHVybiB0LmVuZExpbmVOdW1iZXI+dC5zdGFydExpbmVOdW1iZXJ9dG9KU09OKCl7cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiB5byhlLHQsbj0oaSxyKT0+aT09PXIpe2lmKGU9PT10KXJldHVybiEwO2lmKCFlfHwhdHx8ZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspaWYoIW4oZVtpXSx0W2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbip4byhlLHQpe2xldCBuLGk7Zm9yKGNvbnN0IHIgb2YgZSlpIT09dm9pZCAwJiZ0KGkscik/bi5wdXNoKHIpOihuJiYoeWllbGQgbiksbj1bcl0pLGk9cjtuJiYoeWllbGQgbil9ZnVuY3Rpb24gVG8oZSx0KXtmb3IobGV0IG49MDtuPD1lLmxlbmd0aDtuKyspdChuPT09MD92b2lkIDA6ZVtuLTFdLG49PT1lLmxlbmd0aD92b2lkIDA6ZVtuXSl9ZnVuY3Rpb24ga28oZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0KG49PT0wP3ZvaWQgMDplW24tMV0sZVtuXSxuKzE9PT1lLmxlbmd0aD92b2lkIDA6ZVtuKzFdKX1mdW5jdGlvbiBBbyhlLHQpe2Zvcihjb25zdCBuIG9mIHQpZS5wdXNoKG4pfXZhciBOaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChhKXtyZXR1cm4gYTwwfWUuaXNMZXNzVGhhbj10O2Z1bmN0aW9uIG4oYSl7cmV0dXJuIGE8PTB9ZS5pc0xlc3NUaGFuT3JFcXVhbD1uO2Z1bmN0aW9uIGkoYSl7cmV0dXJuIGE+MH1lLmlzR3JlYXRlclRoYW49aTtmdW5jdGlvbiByKGEpe3JldHVybiBhPT09MH1lLmlzTmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPXIsZS5ncmVhdGVyVGhhbj0xLGUubGVzc1RoYW49LTEsZS5uZWl0aGVyTGVzc09yR3JlYXRlclRoYW49MH0pKE5pfHwoTmk9e30pKTtmdW5jdGlvbiBqdChlLHQpe3JldHVybihuLGkpPT50KGUobiksZShpKSl9Y29uc3QgR3Q9KGUsdCk9PmUtdDtmdW5jdGlvbiBTbyhlKXtyZXR1cm4odCxuKT0+LWUodCxuKX1mdW5jdGlvbiBJaShlKXtyZXR1cm4gZTwwPzA6ZT4yNTU/MjU1OmV8MH1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZTwwPzA6ZT40Mjk0OTY3Mjk1PzQyOTQ5NjcyOTU6ZXwwfWNsYXNzIExve2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWVzPXQsdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHQubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXg9bmV3IEludDMyQXJyYXkoMSksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPS0xfWluc2VydFZhbHVlcyh0LG4pe3Q9bXQodCk7Y29uc3QgaT10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtLGE9bi5sZW5ndGg7cmV0dXJuIGE9PT0wPyExOih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkoaS5sZW5ndGgrYSksdGhpcy52YWx1ZXMuc2V0KGkuc3ViYXJyYXkoMCx0KSwwKSx0aGlzLnZhbHVlcy5zZXQoaS5zdWJhcnJheSh0KSx0K2EpLHRoaXMudmFsdWVzLnNldChuLHQpLHQtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09dC0xKSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChyLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9c2V0VmFsdWUodCxuKXtyZXR1cm4gdD1tdCh0KSxuPW10KG4pLHRoaXMudmFsdWVzW3RdPT09bj8hMToodGhpcy52YWx1ZXNbdF09bix0LTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPXQtMSksITApfXJlbW92ZVZhbHVlcyh0LG4pe3Q9bXQodCksbj1tdChuKTtjb25zdCBpPXRoaXMudmFsdWVzLHI9dGhpcy5wcmVmaXhTdW07aWYodD49aS5sZW5ndGgpcmV0dXJuITE7Y29uc3QgYT1pLmxlbmd0aC10O3JldHVybiBuPj1hJiYobj1hKSxuPT09MD8hMToodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KGkubGVuZ3RoLW4pLHRoaXMudmFsdWVzLnNldChpLnN1YmFycmF5KDAsdCksMCksdGhpcy52YWx1ZXMuc2V0KGkuc3ViYXJyYXkodCtuKSx0KSx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodGhpcy52YWx1ZXMubGVuZ3RoKSx0LTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPXQtMSksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoci5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfWdldFRvdGFsU3VtKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aD09PTA/MDp0aGlzLl9nZXRQcmVmaXhTdW0odGhpcy52YWx1ZXMubGVuZ3RoLTEpfWdldFByZWZpeFN1bSh0KXtyZXR1cm4gdDwwPzA6KHQ9bXQodCksdGhpcy5fZ2V0UHJlZml4U3VtKHQpKX1fZ2V0UHJlZml4U3VtKHQpe2lmKHQ8PXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSlyZXR1cm4gdGhpcy5wcmVmaXhTdW1bdF07bGV0IG49dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzE7bj09PTAmJih0aGlzLnByZWZpeFN1bVswXT10aGlzLnZhbHVlc1swXSxuKyspLHQ+PXRoaXMudmFsdWVzLmxlbmd0aCYmKHQ9dGhpcy52YWx1ZXMubGVuZ3RoLTEpO2ZvcihsZXQgaT1uO2k8PXQ7aSsrKXRoaXMucHJlZml4U3VtW2ldPXRoaXMucHJlZml4U3VtW2ktMV0rdGhpcy52YWx1ZXNbaV07cmV0dXJuIHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT1NYXRoLm1heCh0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0sdCksdGhpcy5wcmVmaXhTdW1bdF19Z2V0SW5kZXhPZih0KXt0PU1hdGguZmxvb3IodCksdGhpcy5nZXRUb3RhbFN1bSgpO2xldCBuPTAsaT10aGlzLnZhbHVlcy5sZW5ndGgtMSxyPTAsYT0wLHM9MDtmb3IoO248PWk7KWlmKHI9bisoaS1uKS8yfDAsYT10aGlzLnByZWZpeFN1bVtyXSxzPWEtdGhpcy52YWx1ZXNbcl0sdDxzKWk9ci0xO2Vsc2UgaWYodD49YSluPXIrMTtlbHNlIGJyZWFrO3JldHVybiBuZXcgQ28ocix0LXMpfX1jbGFzcyBDb3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaW5kZXg9dCx0aGlzLnJlbWFpbmRlcj1uLHRoaXMuX3ByZWZpeFN1bUluZGV4T2ZSZXN1bHRCcmFuZD12b2lkIDAsdGhpcy5pbmRleD10LHRoaXMucmVtYWluZGVyPW59fWNsYXNzIEVve2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMuX3VyaT10LHRoaXMuX2xpbmVzPW4sdGhpcy5fZW9sPWksdGhpcy5fdmVyc2lvbklkPXIsdGhpcy5fbGluZVN0YXJ0cz1udWxsLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9saW5lcy5sZW5ndGg9MH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9uSWR9Z2V0VGV4dCgpe3JldHVybiB0aGlzLl9jYWNoZWRUZXh0VmFsdWU9PT1udWxsJiYodGhpcy5fY2FjaGVkVGV4dFZhbHVlPXRoaXMuX2xpbmVzLmpvaW4odGhpcy5fZW9sKSksdGhpcy5fY2FjaGVkVGV4dFZhbHVlfW9uRXZlbnRzKHQpe3QuZW9sJiZ0LmVvbCE9PXRoaXMuX2VvbCYmKHRoaXMuX2VvbD10LmVvbCx0aGlzLl9saW5lU3RhcnRzPW51bGwpO2NvbnN0IG49dC5jaGFuZ2VzO2Zvcihjb25zdCBpIG9mIG4pdGhpcy5fYWNjZXB0RGVsZXRlUmFuZ2UoaS5yYW5nZSksdGhpcy5fYWNjZXB0SW5zZXJ0VGV4dChuZXcgTmUoaS5yYW5nZS5zdGFydExpbmVOdW1iZXIsaS5yYW5nZS5zdGFydENvbHVtbiksaS50ZXh0KTt0aGlzLl92ZXJzaW9uSWQ9dC52ZXJzaW9uSWQsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9X2Vuc3VyZUxpbmVTdGFydHMoKXtpZighdGhpcy5fbGluZVN0YXJ0cyl7Y29uc3QgdD10aGlzLl9lb2wubGVuZ3RoLG49dGhpcy5fbGluZXMubGVuZ3RoLGk9bmV3IFVpbnQzMkFycmF5KG4pO2ZvcihsZXQgcj0wO3I8bjtyKyspaVtyXT10aGlzLl9saW5lc1tyXS5sZW5ndGgrdDt0aGlzLl9saW5lU3RhcnRzPW5ldyBMbyhpKX19X3NldExpbmVUZXh0KHQsbil7dGhpcy5fbGluZXNbdF09bix0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnNldFZhbHVlKHQsdGhpcy5fbGluZXNbdF0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGgpfV9hY2NlcHREZWxldGVSYW5nZSh0KXtpZih0LnN0YXJ0TGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcil7aWYodC5zdGFydENvbHVtbj09PXQuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dCh0LnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuZW5kQ29sdW1uLTEpKTtyZXR1cm59dGhpcy5fc2V0TGluZVRleHQodC5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW3QuZW5kTGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5lbmRDb2x1bW4tMSkpLHRoaXMuX2xpbmVzLnNwbGljZSh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXIpLHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMucmVtb3ZlVmFsdWVzKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlcil9X2FjY2VwdEluc2VydFRleHQodCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IGk9RnMobik7aWYoaS5sZW5ndGg9PT0xKXt0aGlzLl9zZXRMaW5lVGV4dCh0LmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5jb2x1bW4tMSkraVswXSt0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuY29sdW1uLTEpKTtyZXR1cm59aVtpLmxlbmd0aC0xXSs9dGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSx0aGlzLl9zZXRMaW5lVGV4dCh0LmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5jb2x1bW4tMSkraVswXSk7Y29uc3Qgcj1uZXcgVWludDMyQXJyYXkoaS5sZW5ndGgtMSk7Zm9yKGxldCBhPTE7YTxpLmxlbmd0aDthKyspdGhpcy5fbGluZXMuc3BsaWNlKHQubGluZU51bWJlcithLTEsMCxpW2FdKSxyW2EtMV09aVthXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aDt0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLmluc2VydFZhbHVlcyh0LmxpbmVOdW1iZXIscil9fWNvbnN0IFJvPSJgfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsLjw+Lz8iO2Z1bmN0aW9uIE1vKGU9IiIpe2xldCB0PSIoLT9cXGQqXFwuXFxkXFx3Kil8KFteIjtmb3IoY29uc3QgbiBvZiBSbyllLmluZGV4T2Yobik+PTB8fCh0Kz0iXFwiK24pO3JldHVybiB0Kz0iXFxzXSspIixuZXcgUmVnRXhwKHQsImciKX1jb25zdCB6aT1NbygpO2Z1bmN0aW9uIEhpKGUpe2xldCB0PXppO2lmKGUmJmUgaW5zdGFuY2VvZiBSZWdFeHApaWYoZS5nbG9iYWwpdD1lO2Vsc2V7bGV0IG49ImciO2UuaWdub3JlQ2FzZSYmKG4rPSJpIiksZS5tdWx0aWxpbmUmJihuKz0ibSIpLGUudW5pY29kZSYmKG4rPSJ1IiksdD1uZXcgUmVnRXhwKGUuc291cmNlLG4pfXJldHVybiB0Lmxhc3RJbmRleD0wLHR9Y29uc3QgVWk9bmV3IHlzO1VpLnVuc2hpZnQoe21heExlbjoxZTMsd2luZG93U2l6ZToxNSx0aW1lQnVkZ2V0OjE1MH0pO2Z1bmN0aW9uIEluKGUsdCxuLGkscil7aWYodD1IaSh0KSxyfHwocj1XdC5maXJzdChVaSkpLG4ubGVuZ3RoPnIubWF4TGVuKXtsZXQgdT1lLXIubWF4TGVuLzI7cmV0dXJuIHU8MD91PTA6aSs9dSxuPW4uc3Vic3RyaW5nKHUsZStyLm1heExlbi8yKSxJbihlLHQsbixpLHIpfWNvbnN0IGE9RGF0ZS5ub3coKSxzPWUtMS1pO2xldCBvPS0xLGw9bnVsbDtmb3IobGV0IHU9MTshKERhdGUubm93KCktYT49ci50aW1lQnVkZ2V0KTt1Kyspe2NvbnN0IGM9cy1yLndpbmRvd1NpemUqdTt0Lmxhc3RJbmRleD1NYXRoLm1heCgwLGMpO2NvbnN0IGQ9RG8odCxuLHMsbyk7aWYoIWQmJmx8fChsPWQsYzw9MCkpYnJlYWs7bz1jfWlmKGwpe2NvbnN0IHU9e3dvcmQ6bFswXSxzdGFydENvbHVtbjppKzErbC5pbmRleCxlbmRDb2x1bW46aSsxK2wuaW5kZXgrbFswXS5sZW5ndGh9O3JldHVybiB0Lmxhc3RJbmRleD0wLHV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRG8oZSx0LG4saSl7bGV0IHI7Zm9yKDtyPWUuZXhlYyh0KTspe2NvbnN0IGE9ci5pbmRleHx8MDtpZihhPD1uJiZlLmxhc3RJbmRleD49bilyZXR1cm4gcjtpZihpPjAmJmE+aSlyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH1jbGFzcyB6bntjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPUlpKHQpO3RoaXMuX2RlZmF1bHRWYWx1ZT1uLHRoaXMuX2FzY2lpTWFwPXpuLl9jcmVhdGVBc2NpaU1hcChuKSx0aGlzLl9tYXA9bmV3IE1hcH1zdGF0aWMgX2NyZWF0ZUFzY2lpTWFwKHQpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMjU2KTtyZXR1cm4gbi5maWxsKHQpLG59c2V0KHQsbil7Y29uc3QgaT1JaShuKTt0Pj0wJiZ0PDI1Nj90aGlzLl9hc2NpaU1hcFt0XT1pOnRoaXMuX21hcC5zZXQodCxpKX1nZXQodCl7cmV0dXJuIHQ+PTAmJnQ8MjU2P3RoaXMuX2FzY2lpTWFwW3RdOnRoaXMuX21hcC5nZXQodCl8fHRoaXMuX2RlZmF1bHRWYWx1ZX1jbGVhcigpe3RoaXMuX2FzY2lpTWFwLmZpbGwodGhpcy5fZGVmYXVsdFZhbHVlKSx0aGlzLl9tYXAuY2xlYXIoKX19Y2xhc3MgTm97Y29uc3RydWN0b3IodCxuLGkpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkodCpuKTtmb3IobGV0IGE9MCxzPXQqbjthPHM7YSsrKXJbYV09aTt0aGlzLl9kYXRhPXIsdGhpcy5yb3dzPXQsdGhpcy5jb2xzPW59Z2V0KHQsbil7cmV0dXJuIHRoaXMuX2RhdGFbdCp0aGlzLmNvbHMrbl19c2V0KHQsbixpKXt0aGlzLl9kYXRhW3QqdGhpcy5jb2xzK25dPWl9fWNsYXNzIElve2NvbnN0cnVjdG9yKHQpe2xldCBuPTAsaT0wO2ZvcihsZXQgYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7Y29uc3RbbyxsLHVdPXRbYV07bD5uJiYobj1sKSxvPmkmJihpPW8pLHU+aSYmKGk9dSl9bisrLGkrKztjb25zdCByPW5ldyBObyhpLG4sMCk7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtjb25zdFtvLGwsdV09dFthXTtyLnNldChvLGwsdSl9dGhpcy5fc3RhdGVzPXIsdGhpcy5fbWF4Q2hhckNvZGU9bn1uZXh0U3RhdGUodCxuKXtyZXR1cm4gbjwwfHxuPj10aGlzLl9tYXhDaGFyQ29kZT8wOnRoaXMuX3N0YXRlcy5nZXQodCxuKX19bGV0IEhuPW51bGw7ZnVuY3Rpb24gem8oKXtyZXR1cm4gSG49PT1udWxsJiYoSG49bmV3IElvKFtbMSwxMDQsMl0sWzEsNzIsMl0sWzEsMTAyLDZdLFsxLDcwLDZdLFsyLDExNiwzXSxbMiw4NCwzXSxbMywxMTYsNF0sWzMsODQsNF0sWzQsMTEyLDVdLFs0LDgwLDVdLFs1LDExNSw5XSxbNSw4Myw5XSxbNSw1OCwxMF0sWzYsMTA1LDddLFs2LDczLDddLFs3LDEwOCw4XSxbNyw3Niw4XSxbOCwxMDEsOV0sWzgsNjksOV0sWzksNTgsMTBdLFsxMCw0NywxMV0sWzExLDQ3LDEyXV0pKSxIbn1sZXQgVHQ9bnVsbDtmdW5jdGlvbiBIbygpe2lmKFR0PT09bnVsbCl7VHQ9bmV3IHpuKDApO2NvbnN0IGU9YCAJPD4nIuOAgeOAgu+9oe+9pO+8jO+8ju+8mu+8m+KAmOOAiOOAjOOAjuOAlO+8iO+8u++9m++9ou+9o++9ne+8ve+8ieOAleOAj+OAjeOAieKAme+9gO+9nuKApmA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspVHQuc2V0KGUuY2hhckNvZGVBdChuKSwxKTtjb25zdCB0PSIuLDs6Ijtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylUdC5zZXQodC5jaGFyQ29kZUF0KG4pLDIpfXJldHVybiBUdH1jbGFzcyAkdHtzdGF0aWMgX2NyZWF0ZUxpbmsodCxuLGkscixhKXtsZXQgcz1hLTE7ZG97Y29uc3Qgbz1uLmNoYXJDb2RlQXQocyk7aWYodC5nZXQobykhPT0yKWJyZWFrO3MtLX13aGlsZShzPnIpO2lmKHI+MCl7Y29uc3Qgbz1uLmNoYXJDb2RlQXQoci0xKSxsPW4uY2hhckNvZGVBdChzKTsobz09PTQwJiZsPT09NDF8fG89PT05MSYmbD09PTkzfHxvPT09MTIzJiZsPT09MTI1KSYmcy0tfXJldHVybntyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOmksc3RhcnRDb2x1bW46cisxLGVuZExpbmVOdW1iZXI6aSxlbmRDb2x1bW46cysyfSx1cmw6bi5zdWJzdHJpbmcocixzKzEpfX1zdGF0aWMgY29tcHV0ZUxpbmtzKHQsbj16bygpKXtjb25zdCBpPUhvKCkscj1bXTtmb3IobGV0IGE9MSxzPXQuZ2V0TGluZUNvdW50KCk7YTw9czthKyspe2NvbnN0IG89dC5nZXRMaW5lQ29udGVudChhKSxsPW8ubGVuZ3RoO2xldCB1PTAsYz0wLGQ9MCxtPTEsZj0hMSxiPSExLHA9ITEsdz0hMTtmb3IoO3U8bDspe2xldCB4PSExO2NvbnN0IF89by5jaGFyQ29kZUF0KHUpO2lmKG09PT0xMyl7bGV0IHk7c3dpdGNoKF8pe2Nhc2UgNDA6Zj0hMCx5PTA7YnJlYWs7Y2FzZSA0MTp5PWY/MDoxO2JyZWFrO2Nhc2UgOTE6cD0hMCxiPSEwLHk9MDticmVhaztjYXNlIDkzOnA9ITEseT1iPzA6MTticmVhaztjYXNlIDEyMzp3PSEwLHk9MDticmVhaztjYXNlIDEyNTp5PXc/MDoxO2JyZWFrO2Nhc2UgMzk6Y2FzZSAzNDpjYXNlIDk2OmQ9PT1fP3k9MTpkPT09Mzl8fGQ9PT0zNHx8ZD09PTk2P3k9MDp5PTE7YnJlYWs7Y2FzZSA0Mjp5PWQ9PT00Mj8xOjA7YnJlYWs7Y2FzZSAxMjQ6eT1kPT09MTI0PzE6MDticmVhaztjYXNlIDMyOnk9cD8wOjE7YnJlYWs7ZGVmYXVsdDp5PWkuZ2V0KF8pfXk9PT0xJiYoci5wdXNoKCR0Ll9jcmVhdGVMaW5rKGksbyxhLGMsdSkpLHg9ITApfWVsc2UgaWYobT09PTEyKXtsZXQgeTtfPT09OTE/KGI9ITAseT0wKTp5PWkuZ2V0KF8pLHk9PT0xP3g9ITA6bT0xM31lbHNlIG09bi5uZXh0U3RhdGUobSxfKSxtPT09MCYmKHg9ITApO3gmJihtPTEsZj0hMSxiPSExLHc9ITEsYz11KzEsZD1fKSx1Kyt9bT09PTEzJiZyLnB1c2goJHQuX2NyZWF0ZUxpbmsoaSxvLGEsYyxsKSl9cmV0dXJuIHJ9fWZ1bmN0aW9uIFVvKGUpe3JldHVybiFlfHx0eXBlb2YgZS5nZXRMaW5lQ291bnQhPSJmdW5jdGlvbiJ8fHR5cGVvZiBlLmdldExpbmVDb250ZW50IT0iZnVuY3Rpb24iP1tdOiR0LmNvbXB1dGVMaW5rcyhlKX1jbGFzcyBVbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWYWx1ZVNldD1bWyJ0cnVlIiwiZmFsc2UiXSxbIlRydWUiLCJGYWxzZSJdLFsiUHJpdmF0ZSIsIlB1YmxpYyIsIkZyaWVuZCIsIlJlYWRPbmx5IiwiUGFydGlhbCIsIlByb3RlY3RlZCIsIldyaXRlT25seSJdLFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdXX1uYXZpZ2F0ZVZhbHVlU2V0KHQsbixpLHIsYSl7aWYodCYmbil7Y29uc3Qgcz10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChuLGEpO2lmKHMpcmV0dXJue3JhbmdlOnQsdmFsdWU6c319aWYoaSYmcil7Y29uc3Qgcz10aGlzLmRvTmF2aWdhdGVWYWx1ZVNldChyLGEpO2lmKHMpcmV0dXJue3JhbmdlOmksdmFsdWU6c319cmV0dXJuIG51bGx9ZG9OYXZpZ2F0ZVZhbHVlU2V0KHQsbil7Y29uc3QgaT10aGlzLm51bWJlclJlcGxhY2UodCxuKTtyZXR1cm4gaSE9PW51bGw/aTp0aGlzLnRleHRSZXBsYWNlKHQsbil9bnVtYmVyUmVwbGFjZSh0LG4pe2NvbnN0IGk9TWF0aC5wb3coMTAsdC5sZW5ndGgtKHQubGFzdEluZGV4T2YoIi4iKSsxKSk7bGV0IHI9TnVtYmVyKHQpO2NvbnN0IGE9cGFyc2VGbG9hdCh0KTtyZXR1cm4haXNOYU4ocikmJiFpc05hTihhKSYmcj09PWE/cj09PTAmJiFuP251bGw6KHI9TWF0aC5mbG9vcihyKmkpLHIrPW4/aTotaSxTdHJpbmcoci9pKSk6bnVsbH10ZXh0UmVwbGFjZSh0LG4pe3JldHVybiB0aGlzLnZhbHVlU2V0c1JlcGxhY2UodGhpcy5fZGVmYXVsdFZhbHVlU2V0LHQsbil9dmFsdWVTZXRzUmVwbGFjZSh0LG4saSl7bGV0IHI9bnVsbDtmb3IobGV0IGE9MCxzPXQubGVuZ3RoO3I9PT1udWxsJiZhPHM7YSsrKXI9dGhpcy52YWx1ZVNldFJlcGxhY2UodFthXSxuLGkpO3JldHVybiByfXZhbHVlU2V0UmVwbGFjZSh0LG4saSl7bGV0IHI9dC5pbmRleE9mKG4pO3JldHVybiByPj0wPyhyKz1pPzE6LTEscjwwP3I9dC5sZW5ndGgtMTpyJT10Lmxlbmd0aCx0W3JdKTpudWxsfX1Vbi5JTlNUQU5DRT1uZXcgVW47Y29uc3QgV2k9T2JqZWN0LmZyZWV6ZShmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pO3ZhciBYdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4gbj09PWUuTm9uZXx8bj09PWUuQ2FuY2VsbGVkfHxuIGluc3RhbmNlb2YgSnQ/ITA6IW58fHR5cGVvZiBuIT0ib2JqZWN0Ij8hMTp0eXBlb2Ygbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZD09ImJvb2xlYW4iJiZ0eXBlb2Ygbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZD09ImZ1bmN0aW9uIn1lLmlzQ2FuY2VsbGF0aW9uVG9rZW49dCxlLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6dm4uTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOldpfSl9KShYdHx8KFh0PXt9KSk7Y2xhc3MgSnR7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP1dpOih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgQWUpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj1udWxsKX19Y2xhc3MgV297Y29uc3RydWN0b3IodCl7dGhpcy5fdG9rZW49dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj10JiZ0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKHRoaXMuY2FuY2VsLHRoaXMpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyBKdCksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBKdCYmdGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49WHQuQ2FuY2VsbGVkfWRpc3Bvc2UodD0hMSl7dmFyIG47dCYmdGhpcy5jYW5jZWwoKSwobj10aGlzLl9wYXJlbnRMaXN0ZW5lcik9PT1udWxsfHxuPT09dm9pZCAwfHxuLmRpc3Bvc2UoKSx0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIEp0JiZ0aGlzLl90b2tlbi5kaXNwb3NlKCk6dGhpcy5fdG9rZW49WHQuTm9uZX19Y2xhc3MgV257Y29uc3RydWN0b3IoKXt0aGlzLl9rZXlDb2RlVG9TdHI9W10sdGhpcy5fc3RyVG9LZXlDb2RlPU9iamVjdC5jcmVhdGUobnVsbCl9ZGVmaW5lKHQsbil7dGhpcy5fa2V5Q29kZVRvU3RyW3RdPW4sdGhpcy5fc3RyVG9LZXlDb2RlW24udG9Mb3dlckNhc2UoKV09dH1rZXlDb2RlVG9TdHIodCl7cmV0dXJuIHRoaXMuX2tleUNvZGVUb1N0clt0XX1zdHJUb0tleUNvZGUodCl7cmV0dXJuIHRoaXMuX3N0clRvS2V5Q29kZVt0LnRvTG93ZXJDYXNlKCldfHwwfX1jb25zdCBRdD1uZXcgV24sRm49bmV3IFduLFBuPW5ldyBXbixGbz1uZXcgQXJyYXkoMjMwKSxQbz1PYmplY3QuY3JlYXRlKG51bGwpLEJvPU9iamVjdC5jcmVhdGUobnVsbCk7KGZ1bmN0aW9uKCl7Y29uc3QgZT0iIix0PVtbMSwwLCJOb25lIiwwLCJ1bmtub3duIiwwLCJWS19VTktOT1dOIixlLGVdLFsxLDEsIkh5cGVyIiwwLGUsMCxlLGUsZV0sWzEsMiwiU3VwZXIiLDAsZSwwLGUsZSxlXSxbMSwzLCJGbiIsMCxlLDAsZSxlLGVdLFsxLDQsIkZuTG9jayIsMCxlLDAsZSxlLGVdLFsxLDUsIlN1c3BlbmQiLDAsZSwwLGUsZSxlXSxbMSw2LCJSZXN1bWUiLDAsZSwwLGUsZSxlXSxbMSw3LCJUdXJibyIsMCxlLDAsZSxlLGVdLFsxLDgsIlNsZWVwIiwwLGUsMCwiVktfU0xFRVAiLGUsZV0sWzEsOSwiV2FrZVVwIiwwLGUsMCxlLGUsZV0sWzAsMTAsIktleUEiLDMxLCJBIiw2NSwiVktfQSIsZSxlXSxbMCwxMSwiS2V5QiIsMzIsIkIiLDY2LCJWS19CIixlLGVdLFswLDEyLCJLZXlDIiwzMywiQyIsNjcsIlZLX0MiLGUsZV0sWzAsMTMsIktleUQiLDM0LCJEIiw2OCwiVktfRCIsZSxlXSxbMCwxNCwiS2V5RSIsMzUsIkUiLDY5LCJWS19FIixlLGVdLFswLDE1LCJLZXlGIiwzNiwiRiIsNzAsIlZLX0YiLGUsZV0sWzAsMTYsIktleUciLDM3LCJHIiw3MSwiVktfRyIsZSxlXSxbMCwxNywiS2V5SCIsMzgsIkgiLDcyLCJWS19IIixlLGVdLFswLDE4LCJLZXlJIiwzOSwiSSIsNzMsIlZLX0kiLGUsZV0sWzAsMTksIktleUoiLDQwLCJKIiw3NCwiVktfSiIsZSxlXSxbMCwyMCwiS2V5SyIsNDEsIksiLDc1LCJWS19LIixlLGVdLFswLDIxLCJLZXlMIiw0MiwiTCIsNzYsIlZLX0wiLGUsZV0sWzAsMjIsIktleU0iLDQzLCJNIiw3NywiVktfTSIsZSxlXSxbMCwyMywiS2V5TiIsNDQsIk4iLDc4LCJWS19OIixlLGVdLFswLDI0LCJLZXlPIiw0NSwiTyIsNzksIlZLX08iLGUsZV0sWzAsMjUsIktleVAiLDQ2LCJQIiw4MCwiVktfUCIsZSxlXSxbMCwyNiwiS2V5USIsNDcsIlEiLDgxLCJWS19RIixlLGVdLFswLDI3LCJLZXlSIiw0OCwiUiIsODIsIlZLX1IiLGUsZV0sWzAsMjgsIktleVMiLDQ5LCJTIiw4MywiVktfUyIsZSxlXSxbMCwyOSwiS2V5VCIsNTAsIlQiLDg0LCJWS19UIixlLGVdLFswLDMwLCJLZXlVIiw1MSwiVSIsODUsIlZLX1UiLGUsZV0sWzAsMzEsIktleVYiLDUyLCJWIiw4NiwiVktfViIsZSxlXSxbMCwzMiwiS2V5VyIsNTMsIlciLDg3LCJWS19XIixlLGVdLFswLDMzLCJLZXlYIiw1NCwiWCIsODgsIlZLX1giLGUsZV0sWzAsMzQsIktleVkiLDU1LCJZIiw4OSwiVktfWSIsZSxlXSxbMCwzNSwiS2V5WiIsNTYsIloiLDkwLCJWS19aIixlLGVdLFswLDM2LCJEaWdpdDEiLDIyLCIxIiw0OSwiVktfMSIsZSxlXSxbMCwzNywiRGlnaXQyIiwyMywiMiIsNTAsIlZLXzIiLGUsZV0sWzAsMzgsIkRpZ2l0MyIsMjQsIjMiLDUxLCJWS18zIixlLGVdLFswLDM5LCJEaWdpdDQiLDI1LCI0Iiw1MiwiVktfNCIsZSxlXSxbMCw0MCwiRGlnaXQ1IiwyNiwiNSIsNTMsIlZLXzUiLGUsZV0sWzAsNDEsIkRpZ2l0NiIsMjcsIjYiLDU0LCJWS182IixlLGVdLFswLDQyLCJEaWdpdDciLDI4LCI3Iiw1NSwiVktfNyIsZSxlXSxbMCw0MywiRGlnaXQ4IiwyOSwiOCIsNTYsIlZLXzgiLGUsZV0sWzAsNDQsIkRpZ2l0OSIsMzAsIjkiLDU3LCJWS185IixlLGVdLFswLDQ1LCJEaWdpdDAiLDIxLCIwIiw0OCwiVktfMCIsZSxlXSxbMSw0NiwiRW50ZXIiLDMsIkVudGVyIiwxMywiVktfUkVUVVJOIixlLGVdLFsxLDQ3LCJFc2NhcGUiLDksIkVzY2FwZSIsMjcsIlZLX0VTQ0FQRSIsZSxlXSxbMSw0OCwiQmFja3NwYWNlIiwxLCJCYWNrc3BhY2UiLDgsIlZLX0JBQ0siLGUsZV0sWzEsNDksIlRhYiIsMiwiVGFiIiw5LCJWS19UQUIiLGUsZV0sWzEsNTAsIlNwYWNlIiwxMCwiU3BhY2UiLDMyLCJWS19TUEFDRSIsZSxlXSxbMCw1MSwiTWludXMiLDg4LCItIiwxODksIlZLX09FTV9NSU5VUyIsIi0iLCJPRU1fTUlOVVMiXSxbMCw1MiwiRXF1YWwiLDg2LCI9IiwxODcsIlZLX09FTV9QTFVTIiwiPSIsIk9FTV9QTFVTIl0sWzAsNTMsIkJyYWNrZXRMZWZ0Iiw5MiwiWyIsMjE5LCJWS19PRU1fNCIsIlsiLCJPRU1fNCJdLFswLDU0LCJCcmFja2V0UmlnaHQiLDk0LCJdIiwyMjEsIlZLX09FTV82IiwiXSIsIk9FTV82Il0sWzAsNTUsIkJhY2tzbGFzaCIsOTMsIlxcIiwyMjAsIlZLX09FTV81IiwiXFwiLCJPRU1fNSJdLFswLDU2LCJJbnRsSGFzaCIsMCxlLDAsZSxlLGVdLFswLDU3LCJTZW1pY29sb24iLDg1LCI7IiwxODYsIlZLX09FTV8xIiwiOyIsIk9FTV8xIl0sWzAsNTgsIlF1b3RlIiw5NSwiJyIsMjIyLCJWS19PRU1fNyIsIiciLCJPRU1fNyJdLFswLDU5LCJCYWNrcXVvdGUiLDkxLCJgIiwxOTIsIlZLX09FTV8zIiwiYCIsIk9FTV8zIl0sWzAsNjAsIkNvbW1hIiw4NywiLCIsMTg4LCJWS19PRU1fQ09NTUEiLCIsIiwiT0VNX0NPTU1BIl0sWzAsNjEsIlBlcmlvZCIsODksIi4iLDE5MCwiVktfT0VNX1BFUklPRCIsIi4iLCJPRU1fUEVSSU9EIl0sWzAsNjIsIlNsYXNoIiw5MCwiLyIsMTkxLCJWS19PRU1fMiIsIi8iLCJPRU1fMiJdLFsxLDYzLCJDYXBzTG9jayIsOCwiQ2Fwc0xvY2siLDIwLCJWS19DQVBJVEFMIixlLGVdLFsxLDY0LCJGMSIsNTksIkYxIiwxMTIsIlZLX0YxIixlLGVdLFsxLDY1LCJGMiIsNjAsIkYyIiwxMTMsIlZLX0YyIixlLGVdLFsxLDY2LCJGMyIsNjEsIkYzIiwxMTQsIlZLX0YzIixlLGVdLFsxLDY3LCJGNCIsNjIsIkY0IiwxMTUsIlZLX0Y0IixlLGVdLFsxLDY4LCJGNSIsNjMsIkY1IiwxMTYsIlZLX0Y1IixlLGVdLFsxLDY5LCJGNiIsNjQsIkY2IiwxMTcsIlZLX0Y2IixlLGVdLFsxLDcwLCJGNyIsNjUsIkY3IiwxMTgsIlZLX0Y3IixlLGVdLFsxLDcxLCJGOCIsNjYsIkY4IiwxMTksIlZLX0Y4IixlLGVdLFsxLDcyLCJGOSIsNjcsIkY5IiwxMjAsIlZLX0Y5IixlLGVdLFsxLDczLCJGMTAiLDY4LCJGMTAiLDEyMSwiVktfRjEwIixlLGVdLFsxLDc0LCJGMTEiLDY5LCJGMTEiLDEyMiwiVktfRjExIixlLGVdLFsxLDc1LCJGMTIiLDcwLCJGMTIiLDEyMywiVktfRjEyIixlLGVdLFsxLDc2LCJQcmludFNjcmVlbiIsMCxlLDAsZSxlLGVdLFsxLDc3LCJTY3JvbGxMb2NrIiw4NCwiU2Nyb2xsTG9jayIsMTQ1LCJWS19TQ1JPTEwiLGUsZV0sWzEsNzgsIlBhdXNlIiw3LCJQYXVzZUJyZWFrIiwxOSwiVktfUEFVU0UiLGUsZV0sWzEsNzksIkluc2VydCIsMTksIkluc2VydCIsNDUsIlZLX0lOU0VSVCIsZSxlXSxbMSw4MCwiSG9tZSIsMTQsIkhvbWUiLDM2LCJWS19IT01FIixlLGVdLFsxLDgxLCJQYWdlVXAiLDExLCJQYWdlVXAiLDMzLCJWS19QUklPUiIsZSxlXSxbMSw4MiwiRGVsZXRlIiwyMCwiRGVsZXRlIiw0NiwiVktfREVMRVRFIixlLGVdLFsxLDgzLCJFbmQiLDEzLCJFbmQiLDM1LCJWS19FTkQiLGUsZV0sWzEsODQsIlBhZ2VEb3duIiwxMiwiUGFnZURvd24iLDM0LCJWS19ORVhUIixlLGVdLFsxLDg1LCJBcnJvd1JpZ2h0IiwxNywiUmlnaHRBcnJvdyIsMzksIlZLX1JJR0hUIiwiUmlnaHQiLGVdLFsxLDg2LCJBcnJvd0xlZnQiLDE1LCJMZWZ0QXJyb3ciLDM3LCJWS19MRUZUIiwiTGVmdCIsZV0sWzEsODcsIkFycm93RG93biIsMTgsIkRvd25BcnJvdyIsNDAsIlZLX0RPV04iLCJEb3duIixlXSxbMSw4OCwiQXJyb3dVcCIsMTYsIlVwQXJyb3ciLDM4LCJWS19VUCIsIlVwIixlXSxbMSw4OSwiTnVtTG9jayIsODMsIk51bUxvY2siLDE0NCwiVktfTlVNTE9DSyIsZSxlXSxbMSw5MCwiTnVtcGFkRGl2aWRlIiwxMTMsIk51bVBhZF9EaXZpZGUiLDExMSwiVktfRElWSURFIixlLGVdLFsxLDkxLCJOdW1wYWRNdWx0aXBseSIsMTA4LCJOdW1QYWRfTXVsdGlwbHkiLDEwNiwiVktfTVVMVElQTFkiLGUsZV0sWzEsOTIsIk51bXBhZFN1YnRyYWN0IiwxMTEsIk51bVBhZF9TdWJ0cmFjdCIsMTA5LCJWS19TVUJUUkFDVCIsZSxlXSxbMSw5MywiTnVtcGFkQWRkIiwxMDksIk51bVBhZF9BZGQiLDEwNywiVktfQUREIixlLGVdLFsxLDk0LCJOdW1wYWRFbnRlciIsMyxlLDAsZSxlLGVdLFsxLDk1LCJOdW1wYWQxIiw5OSwiTnVtUGFkMSIsOTcsIlZLX05VTVBBRDEiLGUsZV0sWzEsOTYsIk51bXBhZDIiLDEwMCwiTnVtUGFkMiIsOTgsIlZLX05VTVBBRDIiLGUsZV0sWzEsOTcsIk51bXBhZDMiLDEwMSwiTnVtUGFkMyIsOTksIlZLX05VTVBBRDMiLGUsZV0sWzEsOTgsIk51bXBhZDQiLDEwMiwiTnVtUGFkNCIsMTAwLCJWS19OVU1QQUQ0IixlLGVdLFsxLDk5LCJOdW1wYWQ1IiwxMDMsIk51bVBhZDUiLDEwMSwiVktfTlVNUEFENSIsZSxlXSxbMSwxMDAsIk51bXBhZDYiLDEwNCwiTnVtUGFkNiIsMTAyLCJWS19OVU1QQUQ2IixlLGVdLFsxLDEwMSwiTnVtcGFkNyIsMTA1LCJOdW1QYWQ3IiwxMDMsIlZLX05VTVBBRDciLGUsZV0sWzEsMTAyLCJOdW1wYWQ4IiwxMDYsIk51bVBhZDgiLDEwNCwiVktfTlVNUEFEOCIsZSxlXSxbMSwxMDMsIk51bXBhZDkiLDEwNywiTnVtUGFkOSIsMTA1LCJWS19OVU1QQUQ5IixlLGVdLFsxLDEwNCwiTnVtcGFkMCIsOTgsIk51bVBhZDAiLDk2LCJWS19OVU1QQUQwIixlLGVdLFsxLDEwNSwiTnVtcGFkRGVjaW1hbCIsMTEyLCJOdW1QYWRfRGVjaW1hbCIsMTEwLCJWS19ERUNJTUFMIixlLGVdLFswLDEwNiwiSW50bEJhY2tzbGFzaCIsOTcsIk9FTV8xMDIiLDIyNiwiVktfT0VNXzEwMiIsZSxlXSxbMSwxMDcsIkNvbnRleHRNZW51Iiw1OCwiQ29udGV4dE1lbnUiLDkzLGUsZSxlXSxbMSwxMDgsIlBvd2VyIiwwLGUsMCxlLGUsZV0sWzEsMTA5LCJOdW1wYWRFcXVhbCIsMCxlLDAsZSxlLGVdLFsxLDExMCwiRjEzIiw3MSwiRjEzIiwxMjQsIlZLX0YxMyIsZSxlXSxbMSwxMTEsIkYxNCIsNzIsIkYxNCIsMTI1LCJWS19GMTQiLGUsZV0sWzEsMTEyLCJGMTUiLDczLCJGMTUiLDEyNiwiVktfRjE1IixlLGVdLFsxLDExMywiRjE2Iiw3NCwiRjE2IiwxMjcsIlZLX0YxNiIsZSxlXSxbMSwxMTQsIkYxNyIsNzUsIkYxNyIsMTI4LCJWS19GMTciLGUsZV0sWzEsMTE1LCJGMTgiLDc2LCJGMTgiLDEyOSwiVktfRjE4IixlLGVdLFsxLDExNiwiRjE5Iiw3NywiRjE5IiwxMzAsIlZLX0YxOSIsZSxlXSxbMSwxMTcsIkYyMCIsNzgsIkYyMCIsMTMxLCJWS19GMjAiLGUsZV0sWzEsMTE4LCJGMjEiLDc5LCJGMjEiLDEzMiwiVktfRjIxIixlLGVdLFsxLDExOSwiRjIyIiw4MCwiRjIyIiwxMzMsIlZLX0YyMiIsZSxlXSxbMSwxMjAsIkYyMyIsODEsIkYyMyIsMTM0LCJWS19GMjMiLGUsZV0sWzEsMTIxLCJGMjQiLDgyLCJGMjQiLDEzNSwiVktfRjI0IixlLGVdLFsxLDEyMiwiT3BlbiIsMCxlLDAsZSxlLGVdLFsxLDEyMywiSGVscCIsMCxlLDAsZSxlLGVdLFsxLDEyNCwiU2VsZWN0IiwwLGUsMCxlLGUsZV0sWzEsMTI1LCJBZ2FpbiIsMCxlLDAsZSxlLGVdLFsxLDEyNiwiVW5kbyIsMCxlLDAsZSxlLGVdLFsxLDEyNywiQ3V0IiwwLGUsMCxlLGUsZV0sWzEsMTI4LCJDb3B5IiwwLGUsMCxlLGUsZV0sWzEsMTI5LCJQYXN0ZSIsMCxlLDAsZSxlLGVdLFsxLDEzMCwiRmluZCIsMCxlLDAsZSxlLGVdLFsxLDEzMSwiQXVkaW9Wb2x1bWVNdXRlIiwxMTcsIkF1ZGlvVm9sdW1lTXV0ZSIsMTczLCJWS19WT0xVTUVfTVVURSIsZSxlXSxbMSwxMzIsIkF1ZGlvVm9sdW1lVXAiLDExOCwiQXVkaW9Wb2x1bWVVcCIsMTc1LCJWS19WT0xVTUVfVVAiLGUsZV0sWzEsMTMzLCJBdWRpb1ZvbHVtZURvd24iLDExOSwiQXVkaW9Wb2x1bWVEb3duIiwxNzQsIlZLX1ZPTFVNRV9ET1dOIixlLGVdLFsxLDEzNCwiTnVtcGFkQ29tbWEiLDExMCwiTnVtUGFkX1NlcGFyYXRvciIsMTA4LCJWS19TRVBBUkFUT1IiLGUsZV0sWzAsMTM1LCJJbnRsUm8iLDExNSwiQUJOVF9DMSIsMTkzLCJWS19BQk5UX0MxIixlLGVdLFsxLDEzNiwiS2FuYU1vZGUiLDAsZSwwLGUsZSxlXSxbMCwxMzcsIkludGxZZW4iLDAsZSwwLGUsZSxlXSxbMSwxMzgsIkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMSwxMzksIk5vbkNvbnZlcnQiLDAsZSwwLGUsZSxlXSxbMSwxNDAsIkxhbmcxIiwwLGUsMCxlLGUsZV0sWzEsMTQxLCJMYW5nMiIsMCxlLDAsZSxlLGVdLFsxLDE0MiwiTGFuZzMiLDAsZSwwLGUsZSxlXSxbMSwxNDMsIkxhbmc0IiwwLGUsMCxlLGUsZV0sWzEsMTQ0LCJMYW5nNSIsMCxlLDAsZSxlLGVdLFsxLDE0NSwiQWJvcnQiLDAsZSwwLGUsZSxlXSxbMSwxNDYsIlByb3BzIiwwLGUsMCxlLGUsZV0sWzEsMTQ3LCJOdW1wYWRQYXJlbkxlZnQiLDAsZSwwLGUsZSxlXSxbMSwxNDgsIk51bXBhZFBhcmVuUmlnaHQiLDAsZSwwLGUsZSxlXSxbMSwxNDksIk51bXBhZEJhY2tzcGFjZSIsMCxlLDAsZSxlLGVdLFsxLDE1MCwiTnVtcGFkTWVtb3J5U3RvcmUiLDAsZSwwLGUsZSxlXSxbMSwxNTEsIk51bXBhZE1lbW9yeVJlY2FsbCIsMCxlLDAsZSxlLGVdLFsxLDE1MiwiTnVtcGFkTWVtb3J5Q2xlYXIiLDAsZSwwLGUsZSxlXSxbMSwxNTMsIk51bXBhZE1lbW9yeUFkZCIsMCxlLDAsZSxlLGVdLFsxLDE1NCwiTnVtcGFkTWVtb3J5U3VidHJhY3QiLDAsZSwwLGUsZSxlXSxbMSwxNTUsIk51bXBhZENsZWFyIiwxMzEsIkNsZWFyIiwxMiwiVktfQ0xFQVIiLGUsZV0sWzEsMTU2LCJOdW1wYWRDbGVhckVudHJ5IiwwLGUsMCxlLGUsZV0sWzEsMCxlLDUsIkN0cmwiLDE3LCJWS19DT05UUk9MIixlLGVdLFsxLDAsZSw0LCJTaGlmdCIsMTYsIlZLX1NISUZUIixlLGVdLFsxLDAsZSw2LCJBbHQiLDE4LCJWS19NRU5VIixlLGVdLFsxLDAsZSw1NywiTWV0YSIsOTEsIlZLX0NPTU1BTkQiLGUsZV0sWzEsMTU3LCJDb250cm9sTGVmdCIsNSxlLDAsIlZLX0xDT05UUk9MIixlLGVdLFsxLDE1OCwiU2hpZnRMZWZ0Iiw0LGUsMCwiVktfTFNISUZUIixlLGVdLFsxLDE1OSwiQWx0TGVmdCIsNixlLDAsIlZLX0xNRU5VIixlLGVdLFsxLDE2MCwiTWV0YUxlZnQiLDU3LGUsMCwiVktfTFdJTiIsZSxlXSxbMSwxNjEsIkNvbnRyb2xSaWdodCIsNSxlLDAsIlZLX1JDT05UUk9MIixlLGVdLFsxLDE2MiwiU2hpZnRSaWdodCIsNCxlLDAsIlZLX1JTSElGVCIsZSxlXSxbMSwxNjMsIkFsdFJpZ2h0Iiw2LGUsMCwiVktfUk1FTlUiLGUsZV0sWzEsMTY0LCJNZXRhUmlnaHQiLDU3LGUsMCwiVktfUldJTiIsZSxlXSxbMSwxNjUsIkJyaWdodG5lc3NVcCIsMCxlLDAsZSxlLGVdLFsxLDE2NiwiQnJpZ2h0bmVzc0Rvd24iLDAsZSwwLGUsZSxlXSxbMSwxNjcsIk1lZGlhUGxheSIsMCxlLDAsZSxlLGVdLFsxLDE2OCwiTWVkaWFSZWNvcmQiLDAsZSwwLGUsZSxlXSxbMSwxNjksIk1lZGlhRmFzdEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxNzAsIk1lZGlhUmV3aW5kIiwwLGUsMCxlLGUsZV0sWzEsMTcxLCJNZWRpYVRyYWNrTmV4dCIsMTI0LCJNZWRpYVRyYWNrTmV4dCIsMTc2LCJWS19NRURJQV9ORVhUX1RSQUNLIixlLGVdLFsxLDE3MiwiTWVkaWFUcmFja1ByZXZpb3VzIiwxMjUsIk1lZGlhVHJhY2tQcmV2aW91cyIsMTc3LCJWS19NRURJQV9QUkVWX1RSQUNLIixlLGVdLFsxLDE3MywiTWVkaWFTdG9wIiwxMjYsIk1lZGlhU3RvcCIsMTc4LCJWS19NRURJQV9TVE9QIixlLGVdLFsxLDE3NCwiRWplY3QiLDAsZSwwLGUsZSxlXSxbMSwxNzUsIk1lZGlhUGxheVBhdXNlIiwxMjcsIk1lZGlhUGxheVBhdXNlIiwxNzksIlZLX01FRElBX1BMQVlfUEFVU0UiLGUsZV0sWzEsMTc2LCJNZWRpYVNlbGVjdCIsMTI4LCJMYXVuY2hNZWRpYVBsYXllciIsMTgxLCJWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUIixlLGVdLFsxLDE3NywiTGF1bmNoTWFpbCIsMTI5LCJMYXVuY2hNYWlsIiwxODAsIlZLX01FRElBX0xBVU5DSF9NQUlMIixlLGVdLFsxLDE3OCwiTGF1bmNoQXBwMiIsMTMwLCJMYXVuY2hBcHAyIiwxODMsIlZLX01FRElBX0xBVU5DSF9BUFAyIixlLGVdLFsxLDE3OSwiTGF1bmNoQXBwMSIsMCxlLDAsIlZLX01FRElBX0xBVU5DSF9BUFAxIixlLGVdLFsxLDE4MCwiU2VsZWN0VGFzayIsMCxlLDAsZSxlLGVdLFsxLDE4MSwiTGF1bmNoU2NyZWVuU2F2ZXIiLDAsZSwwLGUsZSxlXSxbMSwxODIsIkJyb3dzZXJTZWFyY2giLDEyMCwiQnJvd3NlclNlYXJjaCIsMTcwLCJWS19CUk9XU0VSX1NFQVJDSCIsZSxlXSxbMSwxODMsIkJyb3dzZXJIb21lIiwxMjEsIkJyb3dzZXJIb21lIiwxNzIsIlZLX0JST1dTRVJfSE9NRSIsZSxlXSxbMSwxODQsIkJyb3dzZXJCYWNrIiwxMjIsIkJyb3dzZXJCYWNrIiwxNjYsIlZLX0JST1dTRVJfQkFDSyIsZSxlXSxbMSwxODUsIkJyb3dzZXJGb3J3YXJkIiwxMjMsIkJyb3dzZXJGb3J3YXJkIiwxNjcsIlZLX0JST1dTRVJfRk9SV0FSRCIsZSxlXSxbMSwxODYsIkJyb3dzZXJTdG9wIiwwLGUsMCwiVktfQlJPV1NFUl9TVE9QIixlLGVdLFsxLDE4NywiQnJvd3NlclJlZnJlc2giLDAsZSwwLCJWS19CUk9XU0VSX1JFRlJFU0giLGUsZV0sWzEsMTg4LCJCcm93c2VyRmF2b3JpdGVzIiwwLGUsMCwiVktfQlJPV1NFUl9GQVZPUklURVMiLGUsZV0sWzEsMTg5LCJab29tVG9nZ2xlIiwwLGUsMCxlLGUsZV0sWzEsMTkwLCJNYWlsUmVwbHkiLDAsZSwwLGUsZSxlXSxbMSwxOTEsIk1haWxGb3J3YXJkIiwwLGUsMCxlLGUsZV0sWzEsMTkyLCJNYWlsU2VuZCIsMCxlLDAsZSxlLGVdLFsxLDAsZSwxMTQsIktleUluQ29tcG9zaXRpb24iLDIyOSxlLGUsZV0sWzEsMCxlLDExNiwiQUJOVF9DMiIsMTk0LCJWS19BQk5UX0MyIixlLGVdLFsxLDAsZSw5NiwiT0VNXzgiLDIyMywiVktfT0VNXzgiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5BIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOR1VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSlVOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19GSU5BTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hBTkpBIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfS0FOSkkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQ09OVkVSVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FDQ0VQVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX01PREVDSEFOR0UiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19TRUxFQ1QiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUklOVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VYRUNVVEUiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19TTkFQU0hPVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0hFTFAiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19BUFBTIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUFJPQ0VTU0tFWSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BBQ0tFVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0RCRV9TQkNTQ0hBUiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0RCRV9EQkNTQ0hBUiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FUVE4iLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19DUlNFTCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0VYU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVJFT0YiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QTEFZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfWk9PTSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX05PTkFNRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BBMSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX09FTV9DTEVBUiIsZSxlXV0sbj1bXSxpPVtdO2Zvcihjb25zdCByIG9mIHQpe2NvbnN0W2EscyxvLGwsdSxjLGQsbSxmXT1yO2lmKGlbc118fChpW3NdPSEwLFBvW29dPXMsQm9bby50b0xvd2VyQ2FzZSgpXT1zKSwhbltsXSl7aWYobltsXT0hMCwhdSl0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyByZXByZXNlbnRhdGlvbiBtaXNzaW5nIGZvciBrZXkgY29kZSAke2x9IGFyb3VuZCBzY2FuIGNvZGUgJHtvfWApO1F0LmRlZmluZShsLHUpLEZuLmRlZmluZShsLG18fHUpLFBuLmRlZmluZShsLGZ8fG18fHUpfWMmJihGb1tjXT1sKX19KSgpO3ZhciBGaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChvKXtyZXR1cm4gUXQua2V5Q29kZVRvU3RyKG8pfWUudG9TdHJpbmc9dDtmdW5jdGlvbiBuKG8pe3JldHVybiBRdC5zdHJUb0tleUNvZGUobyl9ZS5mcm9tU3RyaW5nPW47ZnVuY3Rpb24gaShvKXtyZXR1cm4gRm4ua2V5Q29kZVRvU3RyKG8pfWUudG9Vc2VyU2V0dGluZ3NVUz1pO2Z1bmN0aW9uIHIobyl7cmV0dXJuIFBuLmtleUNvZGVUb1N0cihvKX1lLnRvVXNlclNldHRpbmdzR2VuZXJhbD1yO2Z1bmN0aW9uIGEobyl7cmV0dXJuIEZuLnN0clRvS2V5Q29kZShvKXx8UG4uc3RyVG9LZXlDb2RlKG8pfWUuZnJvbVVzZXJTZXR0aW5ncz1hO2Z1bmN0aW9uIHMobyl7aWYobz49OTgmJm88PTExMylyZXR1cm4gbnVsbDtzd2l0Y2gobyl7Y2FzZSAxNjpyZXR1cm4iVXAiO2Nhc2UgMTg6cmV0dXJuIkRvd24iO2Nhc2UgMTU6cmV0dXJuIkxlZnQiO2Nhc2UgMTc6cmV0dXJuIlJpZ2h0In1yZXR1cm4gUXQua2V5Q29kZVRvU3RyKG8pfWUudG9FbGVjdHJvbkFjY2VsZXJhdG9yPXN9KShGaXx8KEZpPXt9KSk7ZnVuY3Rpb24gcW8oZSx0KXtjb25zdCBuPSh0JjY1NTM1KTw8MTY+Pj4wO3JldHVybihlfG4pPj4+MH1jbGFzcyB2ZSBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsbixpLHIpe3N1cGVyKHQsbixpLHIpLHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj1uLHRoaXMucG9zaXRpb25MaW5lTnVtYmVyPWksdGhpcy5wb3NpdGlvbkNvbHVtbj1yfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLnBvc2l0aW9uTGluZU51bWJlcisiLCIrdGhpcy5wb3NpdGlvbkNvbHVtbisiXSJ9ZXF1YWxzU2VsZWN0aW9uKHQpe3JldHVybiB2ZS5zZWxlY3Rpb25zRXF1YWwodGhpcyx0KX1zdGF0aWMgc2VsZWN0aW9uc0VxdWFsKHQsbil7cmV0dXJuIHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09bi5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXImJnQuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT1uLnNlbGVjdGlvblN0YXJ0Q29sdW1uJiZ0LnBvc2l0aW9uTGluZU51bWJlcj09PW4ucG9zaXRpb25MaW5lTnVtYmVyJiZ0LnBvc2l0aW9uQ29sdW1uPT09bi5wb3NpdGlvbkNvbHVtbn1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT10aGlzLnN0YXJ0TGluZU51bWJlciYmdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbj09PXRoaXMuc3RhcnRDb2x1bW4/MDoxfXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIHRoaXMuZ2V0RGlyZWN0aW9uKCk9PT0wP25ldyB2ZSh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLHQsbik6bmV3IHZlKHQsbix0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uKX1nZXRQb3NpdGlvbigpe3JldHVybiBuZXcgTmUodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IE5lKHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4pfXNldFN0YXJ0UG9zaXRpb24odCxuKXtyZXR1cm4gdGhpcy5nZXREaXJlY3Rpb24oKT09PTA/bmV3IHZlKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pOm5ldyB2ZSh0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4sdCxuKX1zdGF0aWMgZnJvbVBvc2l0aW9ucyh0LG49dCl7cmV0dXJuIG5ldyB2ZSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sbi5saW5lTnVtYmVyLG4uY29sdW1uKX1zdGF0aWMgZnJvbVJhbmdlKHQsbil7cmV0dXJuIG49PT0wP25ldyB2ZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bmV3IHZlKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbix0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX1zdGF0aWMgbGlmdFNlbGVjdGlvbih0KXtyZXR1cm4gbmV3IHZlKHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyLHQuc2VsZWN0aW9uU3RhcnRDb2x1bW4sdC5wb3NpdGlvbkxpbmVOdW1iZXIsdC5wb3NpdGlvbkNvbHVtbil9c3RhdGljIHNlbGVjdGlvbnNBcnJFcXVhbCh0LG4pe2lmKHQmJiFufHwhdCYmbilyZXR1cm4hMTtpZighdCYmIW4pcmV0dXJuITA7aWYodC5sZW5ndGghPT1uLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspaWYoIXRoaXMuc2VsZWN0aW9uc0VxdWFsKHRbaV0sbltpXSkpcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGlzSVNlbGVjdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIHQuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuc2VsZWN0aW9uU3RhcnRDb2x1bW49PSJudW1iZXIiJiZ0eXBlb2YgdC5wb3NpdGlvbkxpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5wb3NpdGlvbkNvbHVtbj09Im51bWJlciJ9c3RhdGljIGNyZWF0ZVdpdGhEaXJlY3Rpb24odCxuLGkscixhKXtyZXR1cm4gYT09PTA/bmV3IHZlKHQsbixpLHIpOm5ldyB2ZShpLHIsdCxuKX19Y29uc3QgUGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBoKGUsdCl7aWYoTHModCkpe2NvbnN0IG49UGlbdF07aWYobj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcmVmZXJlbmNlcyBhbiB1bmtub3duIGNvZGljb246ICR7dH1gKTt0PW59cmV0dXJuIFBpW2VdPXQse2lkOmV9fWNvbnN0IE9vPXthZGQ6aCgiYWRkIiw2ZTQpLHBsdXM6aCgicGx1cyIsNmU0KSxnaXN0TmV3OmgoImdpc3QtbmV3Iiw2ZTQpLHJlcG9DcmVhdGU6aCgicmVwby1jcmVhdGUiLDZlNCksbGlnaHRidWxiOmgoImxpZ2h0YnVsYiIsNjAwMDEpLGxpZ2h0QnVsYjpoKCJsaWdodC1idWxiIiw2MDAwMSkscmVwbzpoKCJyZXBvIiw2MDAwMikscmVwb0RlbGV0ZTpoKCJyZXBvLWRlbGV0ZSIsNjAwMDIpLGdpc3RGb3JrOmgoImdpc3QtZm9yayIsNjAwMDMpLHJlcG9Gb3JrZWQ6aCgicmVwby1mb3JrZWQiLDYwMDAzKSxnaXRQdWxsUmVxdWVzdDpoKCJnaXQtcHVsbC1yZXF1ZXN0Iiw2MDAwNCksZ2l0UHVsbFJlcXVlc3RBYmFuZG9uZWQ6aCgiZ2l0LXB1bGwtcmVxdWVzdC1hYmFuZG9uZWQiLDYwMDA0KSxyZWNvcmRLZXlzOmgoInJlY29yZC1rZXlzIiw2MDAwNSksa2V5Ym9hcmQ6aCgia2V5Ym9hcmQiLDYwMDA1KSx0YWc6aCgidGFnIiw2MDAwNiksZ2l0UHVsbFJlcXVlc3RMYWJlbDpoKCJnaXQtcHVsbC1yZXF1ZXN0LWxhYmVsIiw2MDAwNiksdGFnQWRkOmgoInRhZy1hZGQiLDYwMDA2KSx0YWdSZW1vdmU6aCgidGFnLXJlbW92ZSIsNjAwMDYpLHBlcnNvbjpoKCJwZXJzb24iLDYwMDA3KSxwZXJzb25Gb2xsb3c6aCgicGVyc29uLWZvbGxvdyIsNjAwMDcpLHBlcnNvbk91dGxpbmU6aCgicGVyc29uLW91dGxpbmUiLDYwMDA3KSxwZXJzb25GaWxsZWQ6aCgicGVyc29uLWZpbGxlZCIsNjAwMDcpLGdpdEJyYW5jaDpoKCJnaXQtYnJhbmNoIiw2MDAwOCksZ2l0QnJhbmNoQ3JlYXRlOmgoImdpdC1icmFuY2gtY3JlYXRlIiw2MDAwOCksZ2l0QnJhbmNoRGVsZXRlOmgoImdpdC1icmFuY2gtZGVsZXRlIiw2MDAwOCksc291cmNlQ29udHJvbDpoKCJzb3VyY2UtY29udHJvbCIsNjAwMDgpLG1pcnJvcjpoKCJtaXJyb3IiLDYwMDA5KSxtaXJyb3JQdWJsaWM6aCgibWlycm9yLXB1YmxpYyIsNjAwMDkpLHN0YXI6aCgic3RhciIsNjAwMTApLHN0YXJBZGQ6aCgic3Rhci1hZGQiLDYwMDEwKSxzdGFyRGVsZXRlOmgoInN0YXItZGVsZXRlIiw2MDAxMCksc3RhckVtcHR5OmgoInN0YXItZW1wdHkiLDYwMDEwKSxjb21tZW50OmgoImNvbW1lbnQiLDYwMDExKSxjb21tZW50QWRkOmgoImNvbW1lbnQtYWRkIiw2MDAxMSksYWxlcnQ6aCgiYWxlcnQiLDYwMDEyKSx3YXJuaW5nOmgoIndhcm5pbmciLDYwMDEyKSxzZWFyY2g6aCgic2VhcmNoIiw2MDAxMyksc2VhcmNoU2F2ZTpoKCJzZWFyY2gtc2F2ZSIsNjAwMTMpLGxvZ091dDpoKCJsb2ctb3V0Iiw2MDAxNCksc2lnbk91dDpoKCJzaWduLW91dCIsNjAwMTQpLGxvZ0luOmgoImxvZy1pbiIsNjAwMTUpLHNpZ25JbjpoKCJzaWduLWluIiw2MDAxNSksZXllOmgoImV5ZSIsNjAwMTYpLGV5ZVVud2F0Y2g6aCgiZXllLXVud2F0Y2giLDYwMDE2KSxleWVXYXRjaDpoKCJleWUtd2F0Y2giLDYwMDE2KSxjaXJjbGVGaWxsZWQ6aCgiY2lyY2xlLWZpbGxlZCIsNjAwMTcpLHByaW1pdGl2ZURvdDpoKCJwcmltaXRpdmUtZG90Iiw2MDAxNyksY2xvc2VEaXJ0eTpoKCJjbG9zZS1kaXJ0eSIsNjAwMTcpLGRlYnVnQnJlYWtwb2ludDpoKCJkZWJ1Zy1icmVha3BvaW50Iiw2MDAxNyksZGVidWdCcmVha3BvaW50RGlzYWJsZWQ6aCgiZGVidWctYnJlYWtwb2ludC1kaXNhYmxlZCIsNjAwMTcpLGRlYnVnSGludDpoKCJkZWJ1Zy1oaW50Iiw2MDAxNyksdGVybWluYWxEZWNvcmF0aW9uU3VjY2VzczpoKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLXN1Y2Nlc3MiLDYwMDE3KSxwcmltaXRpdmVTcXVhcmU6aCgicHJpbWl0aXZlLXNxdWFyZSIsNjAwMTgpLGVkaXQ6aCgiZWRpdCIsNjAwMTkpLHBlbmNpbDpoKCJwZW5jaWwiLDYwMDE5KSxpbmZvOmgoImluZm8iLDYwMDIwKSxpc3N1ZU9wZW5lZDpoKCJpc3N1ZS1vcGVuZWQiLDYwMDIwKSxnaXN0UHJpdmF0ZTpoKCJnaXN0LXByaXZhdGUiLDYwMDIxKSxnaXRGb3JrUHJpdmF0ZTpoKCJnaXQtZm9yay1wcml2YXRlIiw2MDAyMSksbG9jazpoKCJsb2NrIiw2MDAyMSksbWlycm9yUHJpdmF0ZTpoKCJtaXJyb3ItcHJpdmF0ZSIsNjAwMjEpLGNsb3NlOmgoImNsb3NlIiw2MDAyMikscmVtb3ZlQ2xvc2U6aCgicmVtb3ZlLWNsb3NlIiw2MDAyMikseDpoKCJ4Iiw2MDAyMikscmVwb1N5bmM6aCgicmVwby1zeW5jIiw2MDAyMyksc3luYzpoKCJzeW5jIiw2MDAyMyksY2xvbmU6aCgiY2xvbmUiLDYwMDI0KSxkZXNrdG9wRG93bmxvYWQ6aCgiZGVza3RvcC1kb3dubG9hZCIsNjAwMjQpLGJlYWtlcjpoKCJiZWFrZXIiLDYwMDI1KSxtaWNyb3Njb3BlOmgoIm1pY3Jvc2NvcGUiLDYwMDI1KSx2bTpoKCJ2bSIsNjAwMjYpLGRldmljZURlc2t0b3A6aCgiZGV2aWNlLWRlc2t0b3AiLDYwMDI2KSxmaWxlOmgoImZpbGUiLDYwMDI3KSxmaWxlVGV4dDpoKCJmaWxlLXRleHQiLDYwMDI3KSxtb3JlOmgoIm1vcmUiLDYwMDI4KSxlbGxpcHNpczpoKCJlbGxpcHNpcyIsNjAwMjgpLGtlYmFiSG9yaXpvbnRhbDpoKCJrZWJhYi1ob3Jpem9udGFsIiw2MDAyOCksbWFpbFJlcGx5OmgoIm1haWwtcmVwbHkiLDYwMDI5KSxyZXBseTpoKCJyZXBseSIsNjAwMjkpLG9yZ2FuaXphdGlvbjpoKCJvcmdhbml6YXRpb24iLDYwMDMwKSxvcmdhbml6YXRpb25GaWxsZWQ6aCgib3JnYW5pemF0aW9uLWZpbGxlZCIsNjAwMzApLG9yZ2FuaXphdGlvbk91dGxpbmU6aCgib3JnYW5pemF0aW9uLW91dGxpbmUiLDYwMDMwKSxuZXdGaWxlOmgoIm5ldy1maWxlIiw2MDAzMSksZmlsZUFkZDpoKCJmaWxlLWFkZCIsNjAwMzEpLG5ld0ZvbGRlcjpoKCJuZXctZm9sZGVyIiw2MDAzMiksZmlsZURpcmVjdG9yeUNyZWF0ZTpoKCJmaWxlLWRpcmVjdG9yeS1jcmVhdGUiLDYwMDMyKSx0cmFzaDpoKCJ0cmFzaCIsNjAwMzMpLHRyYXNoY2FuOmgoInRyYXNoY2FuIiw2MDAzMyksaGlzdG9yeTpoKCJoaXN0b3J5Iiw2MDAzNCksY2xvY2s6aCgiY2xvY2siLDYwMDM0KSxmb2xkZXI6aCgiZm9sZGVyIiw2MDAzNSksZmlsZURpcmVjdG9yeTpoKCJmaWxlLWRpcmVjdG9yeSIsNjAwMzUpLHN5bWJvbEZvbGRlcjpoKCJzeW1ib2wtZm9sZGVyIiw2MDAzNSksbG9nb0dpdGh1YjpoKCJsb2dvLWdpdGh1YiIsNjAwMzYpLG1hcmtHaXRodWI6aCgibWFyay1naXRodWIiLDYwMDM2KSxnaXRodWI6aCgiZ2l0aHViIiw2MDAzNiksdGVybWluYWw6aCgidGVybWluYWwiLDYwMDM3KSxjb25zb2xlOmgoImNvbnNvbGUiLDYwMDM3KSxyZXBsOmgoInJlcGwiLDYwMDM3KSx6YXA6aCgiemFwIiw2MDAzOCksc3ltYm9sRXZlbnQ6aCgic3ltYm9sLWV2ZW50Iiw2MDAzOCksZXJyb3I6aCgiZXJyb3IiLDYwMDM5KSxzdG9wOmgoInN0b3AiLDYwMDM5KSx2YXJpYWJsZTpoKCJ2YXJpYWJsZSIsNjAwNDApLHN5bWJvbFZhcmlhYmxlOmgoInN5bWJvbC12YXJpYWJsZSIsNjAwNDApLGFycmF5OmgoImFycmF5Iiw2MDA0Miksc3ltYm9sQXJyYXk6aCgic3ltYm9sLWFycmF5Iiw2MDA0Miksc3ltYm9sTW9kdWxlOmgoInN5bWJvbC1tb2R1bGUiLDYwMDQzKSxzeW1ib2xQYWNrYWdlOmgoInN5bWJvbC1wYWNrYWdlIiw2MDA0Myksc3ltYm9sTmFtZXNwYWNlOmgoInN5bWJvbC1uYW1lc3BhY2UiLDYwMDQzKSxzeW1ib2xPYmplY3Q6aCgic3ltYm9sLW9iamVjdCIsNjAwNDMpLHN5bWJvbE1ldGhvZDpoKCJzeW1ib2wtbWV0aG9kIiw2MDA0NCksc3ltYm9sRnVuY3Rpb246aCgic3ltYm9sLWZ1bmN0aW9uIiw2MDA0NCksc3ltYm9sQ29uc3RydWN0b3I6aCgic3ltYm9sLWNvbnN0cnVjdG9yIiw2MDA0NCksc3ltYm9sQm9vbGVhbjpoKCJzeW1ib2wtYm9vbGVhbiIsNjAwNDcpLHN5bWJvbE51bGw6aCgic3ltYm9sLW51bGwiLDYwMDQ3KSxzeW1ib2xOdW1lcmljOmgoInN5bWJvbC1udW1lcmljIiw2MDA0OCksc3ltYm9sTnVtYmVyOmgoInN5bWJvbC1udW1iZXIiLDYwMDQ4KSxzeW1ib2xTdHJ1Y3R1cmU6aCgic3ltYm9sLXN0cnVjdHVyZSIsNjAwNDkpLHN5bWJvbFN0cnVjdDpoKCJzeW1ib2wtc3RydWN0Iiw2MDA0OSksc3ltYm9sUGFyYW1ldGVyOmgoInN5bWJvbC1wYXJhbWV0ZXIiLDYwMDUwKSxzeW1ib2xUeXBlUGFyYW1ldGVyOmgoInN5bWJvbC10eXBlLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbEtleTpoKCJzeW1ib2wta2V5Iiw2MDA1MSksc3ltYm9sVGV4dDpoKCJzeW1ib2wtdGV4dCIsNjAwNTEpLHN5bWJvbFJlZmVyZW5jZTpoKCJzeW1ib2wtcmVmZXJlbmNlIiw2MDA1MiksZ29Ub0ZpbGU6aCgiZ28tdG8tZmlsZSIsNjAwNTIpLHN5bWJvbEVudW06aCgic3ltYm9sLWVudW0iLDYwMDUzKSxzeW1ib2xWYWx1ZTpoKCJzeW1ib2wtdmFsdWUiLDYwMDUzKSxzeW1ib2xSdWxlcjpoKCJzeW1ib2wtcnVsZXIiLDYwMDU0KSxzeW1ib2xVbml0OmgoInN5bWJvbC11bml0Iiw2MDA1NCksYWN0aXZhdGVCcmVha3BvaW50czpoKCJhY3RpdmF0ZS1icmVha3BvaW50cyIsNjAwNTUpLGFyY2hpdmU6aCgiYXJjaGl2ZSIsNjAwNTYpLGFycm93Qm90aDpoKCJhcnJvdy1ib3RoIiw2MDA1NyksYXJyb3dEb3duOmgoImFycm93LWRvd24iLDYwMDU4KSxhcnJvd0xlZnQ6aCgiYXJyb3ctbGVmdCIsNjAwNTkpLGFycm93UmlnaHQ6aCgiYXJyb3ctcmlnaHQiLDYwMDYwKSxhcnJvd1NtYWxsRG93bjpoKCJhcnJvdy1zbWFsbC1kb3duIiw2MDA2MSksYXJyb3dTbWFsbExlZnQ6aCgiYXJyb3ctc21hbGwtbGVmdCIsNjAwNjIpLGFycm93U21hbGxSaWdodDpoKCJhcnJvdy1zbWFsbC1yaWdodCIsNjAwNjMpLGFycm93U21hbGxVcDpoKCJhcnJvdy1zbWFsbC11cCIsNjAwNjQpLGFycm93VXA6aCgiYXJyb3ctdXAiLDYwMDY1KSxiZWxsOmgoImJlbGwiLDYwMDY2KSxib2xkOmgoImJvbGQiLDYwMDY3KSxib29rOmgoImJvb2siLDYwMDY4KSxib29rbWFyazpoKCJib29rbWFyayIsNjAwNjkpLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsVW52ZXJpZmllZDpoKCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLXVudmVyaWZpZWQiLDYwMDcwKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbDpoKCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsIiw2MDA3MSksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxEaXNhYmxlZDpoKCJkZWJ1Zy1icmVha3BvaW50LWNvbmRpdGlvbmFsLWRpc2FibGVkIiw2MDA3MSksZGVidWdCcmVha3BvaW50RGF0YVVudmVyaWZpZWQ6aCgiZGVidWctYnJlYWtwb2ludC1kYXRhLXVudmVyaWZpZWQiLDYwMDcyKSxkZWJ1Z0JyZWFrcG9pbnREYXRhOmgoImRlYnVnLWJyZWFrcG9pbnQtZGF0YSIsNjAwNzMpLGRlYnVnQnJlYWtwb2ludERhdGFEaXNhYmxlZDpoKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtZGlzYWJsZWQiLDYwMDczKSxkZWJ1Z0JyZWFrcG9pbnRMb2dVbnZlcmlmaWVkOmgoImRlYnVnLWJyZWFrcG9pbnQtbG9nLXVudmVyaWZpZWQiLDYwMDc0KSxkZWJ1Z0JyZWFrcG9pbnRMb2c6aCgiZGVidWctYnJlYWtwb2ludC1sb2ciLDYwMDc1KSxkZWJ1Z0JyZWFrcG9pbnRMb2dEaXNhYmxlZDpoKCJkZWJ1Zy1icmVha3BvaW50LWxvZy1kaXNhYmxlZCIsNjAwNzUpLGJyaWVmY2FzZTpoKCJicmllZmNhc2UiLDYwMDc2KSxicm9hZGNhc3Q6aCgiYnJvYWRjYXN0Iiw2MDA3NyksYnJvd3NlcjpoKCJicm93c2VyIiw2MDA3OCksYnVnOmgoImJ1ZyIsNjAwNzkpLGNhbGVuZGFyOmgoImNhbGVuZGFyIiw2MDA4MCksY2FzZVNlbnNpdGl2ZTpoKCJjYXNlLXNlbnNpdGl2ZSIsNjAwODEpLGNoZWNrOmgoImNoZWNrIiw2MDA4MiksY2hlY2tsaXN0OmgoImNoZWNrbGlzdCIsNjAwODMpLGNoZXZyb25Eb3duOmgoImNoZXZyb24tZG93biIsNjAwODQpLGNoZXZyb25MZWZ0OmgoImNoZXZyb24tbGVmdCIsNjAwODUpLGNoZXZyb25SaWdodDpoKCJjaGV2cm9uLXJpZ2h0Iiw2MDA4NiksY2hldnJvblVwOmgoImNoZXZyb24tdXAiLDYwMDg3KSxjaHJvbWVDbG9zZTpoKCJjaHJvbWUtY2xvc2UiLDYwMDg4KSxjaHJvbWVNYXhpbWl6ZTpoKCJjaHJvbWUtbWF4aW1pemUiLDYwMDg5KSxjaHJvbWVNaW5pbWl6ZTpoKCJjaHJvbWUtbWluaW1pemUiLDYwMDkwKSxjaHJvbWVSZXN0b3JlOmgoImNocm9tZS1yZXN0b3JlIiw2MDA5MSksY2lyY2xlT3V0bGluZTpoKCJjaXJjbGUtb3V0bGluZSIsNjAwOTIpLGNpcmNsZTpoKCJjaXJjbGUiLDYwMDkyKSxkZWJ1Z0JyZWFrcG9pbnRVbnZlcmlmaWVkOmgoImRlYnVnLWJyZWFrcG9pbnQtdW52ZXJpZmllZCIsNjAwOTIpLHRlcm1pbmFsRGVjb3JhdGlvbkluY29tcGxldGU6aCgidGVybWluYWwtZGVjb3JhdGlvbi1pbmNvbXBsZXRlIiw2MDA5MiksY2lyY2xlU2xhc2g6aCgiY2lyY2xlLXNsYXNoIiw2MDA5MyksY2lyY3VpdEJvYXJkOmgoImNpcmN1aXQtYm9hcmQiLDYwMDk0KSxjbGVhckFsbDpoKCJjbGVhci1hbGwiLDYwMDk1KSxjbGlwcHk6aCgiY2xpcHB5Iiw2MDA5NiksY2xvc2VBbGw6aCgiY2xvc2UtYWxsIiw2MDA5NyksY2xvdWREb3dubG9hZDpoKCJjbG91ZC1kb3dubG9hZCIsNjAwOTgpLGNsb3VkVXBsb2FkOmgoImNsb3VkLXVwbG9hZCIsNjAwOTkpLGNvZGU6aCgiY29kZSIsNjAxMDApLGNvbGxhcHNlQWxsOmgoImNvbGxhcHNlLWFsbCIsNjAxMDEpLGNvbG9yTW9kZTpoKCJjb2xvci1tb2RlIiw2MDEwMiksY29tbWVudERpc2N1c3Npb246aCgiY29tbWVudC1kaXNjdXNzaW9uIiw2MDEwMyksY3JlZGl0Q2FyZDpoKCJjcmVkaXQtY2FyZCIsNjAxMDUpLGRhc2g6aCgiZGFzaCIsNjAxMDgpLGRhc2hib2FyZDpoKCJkYXNoYm9hcmQiLDYwMTA5KSxkYXRhYmFzZTpoKCJkYXRhYmFzZSIsNjAxMTApLGRlYnVnQ29udGludWU6aCgiZGVidWctY29udGludWUiLDYwMTExKSxkZWJ1Z0Rpc2Nvbm5lY3Q6aCgiZGVidWctZGlzY29ubmVjdCIsNjAxMTIpLGRlYnVnUGF1c2U6aCgiZGVidWctcGF1c2UiLDYwMTEzKSxkZWJ1Z1Jlc3RhcnQ6aCgiZGVidWctcmVzdGFydCIsNjAxMTQpLGRlYnVnU3RhcnQ6aCgiZGVidWctc3RhcnQiLDYwMTE1KSxkZWJ1Z1N0ZXBJbnRvOmgoImRlYnVnLXN0ZXAtaW50byIsNjAxMTYpLGRlYnVnU3RlcE91dDpoKCJkZWJ1Zy1zdGVwLW91dCIsNjAxMTcpLGRlYnVnU3RlcE92ZXI6aCgiZGVidWctc3RlcC1vdmVyIiw2MDExOCksZGVidWdTdG9wOmgoImRlYnVnLXN0b3AiLDYwMTE5KSxkZWJ1ZzpoKCJkZWJ1ZyIsNjAxMjApLGRldmljZUNhbWVyYVZpZGVvOmgoImRldmljZS1jYW1lcmEtdmlkZW8iLDYwMTIxKSxkZXZpY2VDYW1lcmE6aCgiZGV2aWNlLWNhbWVyYSIsNjAxMjIpLGRldmljZU1vYmlsZTpoKCJkZXZpY2UtbW9iaWxlIiw2MDEyMyksZGlmZkFkZGVkOmgoImRpZmYtYWRkZWQiLDYwMTI0KSxkaWZmSWdub3JlZDpoKCJkaWZmLWlnbm9yZWQiLDYwMTI1KSxkaWZmTW9kaWZpZWQ6aCgiZGlmZi1tb2RpZmllZCIsNjAxMjYpLGRpZmZSZW1vdmVkOmgoImRpZmYtcmVtb3ZlZCIsNjAxMjcpLGRpZmZSZW5hbWVkOmgoImRpZmYtcmVuYW1lZCIsNjAxMjgpLGRpZmY6aCgiZGlmZiIsNjAxMjkpLGRpZmZTaWRlYnlzaWRlOmgoImRpZmYtc2lkZWJ5c2lkZSIsNjAxMjkpLGRpc2NhcmQ6aCgiZGlzY2FyZCIsNjAxMzApLGVkaXRvckxheW91dDpoKCJlZGl0b3ItbGF5b3V0Iiw2MDEzMSksZW1wdHlXaW5kb3c6aCgiZW1wdHktd2luZG93Iiw2MDEzMiksZXhjbHVkZTpoKCJleGNsdWRlIiw2MDEzMyksZXh0ZW5zaW9uczpoKCJleHRlbnNpb25zIiw2MDEzNCksZXllQ2xvc2VkOmgoImV5ZS1jbG9zZWQiLDYwMTM1KSxmaWxlQmluYXJ5OmgoImZpbGUtYmluYXJ5Iiw2MDEzNiksZmlsZUNvZGU6aCgiZmlsZS1jb2RlIiw2MDEzNyksZmlsZU1lZGlhOmgoImZpbGUtbWVkaWEiLDYwMTM4KSxmaWxlUGRmOmgoImZpbGUtcGRmIiw2MDEzOSksZmlsZVN1Ym1vZHVsZTpoKCJmaWxlLXN1Ym1vZHVsZSIsNjAxNDApLGZpbGVTeW1saW5rRGlyZWN0b3J5OmgoImZpbGUtc3ltbGluay1kaXJlY3RvcnkiLDYwMTQxKSxmaWxlU3ltbGlua0ZpbGU6aCgiZmlsZS1zeW1saW5rLWZpbGUiLDYwMTQyKSxmaWxlWmlwOmgoImZpbGUtemlwIiw2MDE0MyksZmlsZXM6aCgiZmlsZXMiLDYwMTQ0KSxmaWx0ZXI6aCgiZmlsdGVyIiw2MDE0NSksZmxhbWU6aCgiZmxhbWUiLDYwMTQ2KSxmb2xkRG93bjpoKCJmb2xkLWRvd24iLDYwMTQ3KSxmb2xkVXA6aCgiZm9sZC11cCIsNjAxNDgpLGZvbGQ6aCgiZm9sZCIsNjAxNDkpLGZvbGRlckFjdGl2ZTpoKCJmb2xkZXItYWN0aXZlIiw2MDE1MCksZm9sZGVyT3BlbmVkOmgoImZvbGRlci1vcGVuZWQiLDYwMTUxKSxnZWFyOmgoImdlYXIiLDYwMTUyKSxnaWZ0OmgoImdpZnQiLDYwMTUzKSxnaXN0U2VjcmV0OmgoImdpc3Qtc2VjcmV0Iiw2MDE1NCksZ2lzdDpoKCJnaXN0Iiw2MDE1NSksZ2l0Q29tbWl0OmgoImdpdC1jb21taXQiLDYwMTU2KSxnaXRDb21wYXJlOmgoImdpdC1jb21wYXJlIiw2MDE1NyksY29tcGFyZUNoYW5nZXM6aCgiY29tcGFyZS1jaGFuZ2VzIiw2MDE1NyksZ2l0TWVyZ2U6aCgiZ2l0LW1lcmdlIiw2MDE1OCksZ2l0aHViQWN0aW9uOmgoImdpdGh1Yi1hY3Rpb24iLDYwMTU5KSxnaXRodWJBbHQ6aCgiZ2l0aHViLWFsdCIsNjAxNjApLGdsb2JlOmgoImdsb2JlIiw2MDE2MSksZ3JhYmJlcjpoKCJncmFiYmVyIiw2MDE2MiksZ3JhcGg6aCgiZ3JhcGgiLDYwMTYzKSxncmlwcGVyOmgoImdyaXBwZXIiLDYwMTY0KSxoZWFydDpoKCJoZWFydCIsNjAxNjUpLGhvbWU6aCgiaG9tZSIsNjAxNjYpLGhvcml6b250YWxSdWxlOmgoImhvcml6b250YWwtcnVsZSIsNjAxNjcpLGh1Ym90OmgoImh1Ym90Iiw2MDE2OCksaW5ib3g6aCgiaW5ib3giLDYwMTY5KSxpc3N1ZVJlb3BlbmVkOmgoImlzc3VlLXJlb3BlbmVkIiw2MDE3MSksaXNzdWVzOmgoImlzc3VlcyIsNjAxNzIpLGl0YWxpYzpoKCJpdGFsaWMiLDYwMTczKSxqZXJzZXk6aCgiamVyc2V5Iiw2MDE3NCksanNvbjpoKCJqc29uIiw2MDE3NSksa2ViYWJWZXJ0aWNhbDpoKCJrZWJhYi12ZXJ0aWNhbCIsNjAxNzYpLGtleTpoKCJrZXkiLDYwMTc3KSxsYXc6aCgibGF3Iiw2MDE3OCksbGlnaHRidWxiQXV0b2ZpeDpoKCJsaWdodGJ1bGItYXV0b2ZpeCIsNjAxNzkpLGxpbmtFeHRlcm5hbDpoKCJsaW5rLWV4dGVybmFsIiw2MDE4MCksbGluazpoKCJsaW5rIiw2MDE4MSksbGlzdE9yZGVyZWQ6aCgibGlzdC1vcmRlcmVkIiw2MDE4MiksbGlzdFVub3JkZXJlZDpoKCJsaXN0LXVub3JkZXJlZCIsNjAxODMpLGxpdmVTaGFyZTpoKCJsaXZlLXNoYXJlIiw2MDE4NCksbG9hZGluZzpoKCJsb2FkaW5nIiw2MDE4NSksbG9jYXRpb246aCgibG9jYXRpb24iLDYwMTg2KSxtYWlsUmVhZDpoKCJtYWlsLXJlYWQiLDYwMTg3KSxtYWlsOmgoIm1haWwiLDYwMTg4KSxtYXJrZG93bjpoKCJtYXJrZG93biIsNjAxODkpLG1lZ2FwaG9uZTpoKCJtZWdhcGhvbmUiLDYwMTkwKSxtZW50aW9uOmgoIm1lbnRpb24iLDYwMTkxKSxtaWxlc3RvbmU6aCgibWlsZXN0b25lIiw2MDE5MiksZ2l0UHVsbFJlcXVlc3RNaWxlc3RvbmU6aCgiZ2l0LXB1bGwtcmVxdWVzdC1taWxlc3RvbmUiLDYwMTkyKSxtb3J0YXJCb2FyZDpoKCJtb3J0YXItYm9hcmQiLDYwMTkzKSxtb3ZlOmgoIm1vdmUiLDYwMTk0KSxtdWx0aXBsZVdpbmRvd3M6aCgibXVsdGlwbGUtd2luZG93cyIsNjAxOTUpLG11dGU6aCgibXV0ZSIsNjAxOTYpLG5vTmV3bGluZTpoKCJuby1uZXdsaW5lIiw2MDE5Nyksbm90ZTpoKCJub3RlIiw2MDE5OCksb2N0b2ZhY2U6aCgib2N0b2ZhY2UiLDYwMTk5KSxvcGVuUHJldmlldzpoKCJvcGVuLXByZXZpZXciLDYwMjAwKSxwYWNrYWdlOmgoInBhY2thZ2UiLDYwMjAxKSxwYWludGNhbjpoKCJwYWludGNhbiIsNjAyMDIpLHBpbjpoKCJwaW4iLDYwMjAzKSxwbGF5OmgoInBsYXkiLDYwMjA0KSxydW46aCgicnVuIiw2MDIwNCkscGx1ZzpoKCJwbHVnIiw2MDIwNSkscHJlc2VydmVDYXNlOmgoInByZXNlcnZlLWNhc2UiLDYwMjA2KSxwcmV2aWV3OmgoInByZXZpZXciLDYwMjA3KSxwcm9qZWN0OmgoInByb2plY3QiLDYwMjA4KSxwdWxzZTpoKCJwdWxzZSIsNjAyMDkpLHF1ZXN0aW9uOmgoInF1ZXN0aW9uIiw2MDIxMCkscXVvdGU6aCgicXVvdGUiLDYwMjExKSxyYWRpb1Rvd2VyOmgoInJhZGlvLXRvd2VyIiw2MDIxMikscmVhY3Rpb25zOmgoInJlYWN0aW9ucyIsNjAyMTMpLHJlZmVyZW5jZXM6aCgicmVmZXJlbmNlcyIsNjAyMTQpLHJlZnJlc2g6aCgicmVmcmVzaCIsNjAyMTUpLHJlZ2V4OmgoInJlZ2V4Iiw2MDIxNikscmVtb3RlRXhwbG9yZXI6aCgicmVtb3RlLWV4cGxvcmVyIiw2MDIxNykscmVtb3RlOmgoInJlbW90ZSIsNjAyMTgpLHJlbW92ZTpoKCJyZW1vdmUiLDYwMjE5KSxyZXBsYWNlQWxsOmgoInJlcGxhY2UtYWxsIiw2MDIyMCkscmVwbGFjZTpoKCJyZXBsYWNlIiw2MDIyMSkscmVwb0Nsb25lOmgoInJlcG8tY2xvbmUiLDYwMjIyKSxyZXBvRm9yY2VQdXNoOmgoInJlcG8tZm9yY2UtcHVzaCIsNjAyMjMpLHJlcG9QdWxsOmgoInJlcG8tcHVsbCIsNjAyMjQpLHJlcG9QdXNoOmgoInJlcG8tcHVzaCIsNjAyMjUpLHJlcG9ydDpoKCJyZXBvcnQiLDYwMjI2KSxyZXF1ZXN0Q2hhbmdlczpoKCJyZXF1ZXN0LWNoYW5nZXMiLDYwMjI3KSxyb2NrZXQ6aCgicm9ja2V0Iiw2MDIyOCkscm9vdEZvbGRlck9wZW5lZDpoKCJyb290LWZvbGRlci1vcGVuZWQiLDYwMjI5KSxyb290Rm9sZGVyOmgoInJvb3QtZm9sZGVyIiw2MDIzMCkscnNzOmgoInJzcyIsNjAyMzEpLHJ1Ynk6aCgicnVieSIsNjAyMzIpLHNhdmVBbGw6aCgic2F2ZS1hbGwiLDYwMjMzKSxzYXZlQXM6aCgic2F2ZS1hcyIsNjAyMzQpLHNhdmU6aCgic2F2ZSIsNjAyMzUpLHNjcmVlbkZ1bGw6aCgic2NyZWVuLWZ1bGwiLDYwMjM2KSxzY3JlZW5Ob3JtYWw6aCgic2NyZWVuLW5vcm1hbCIsNjAyMzcpLHNlYXJjaFN0b3A6aCgic2VhcmNoLXN0b3AiLDYwMjM4KSxzZXJ2ZXI6aCgic2VydmVyIiw2MDI0MCksc2V0dGluZ3NHZWFyOmgoInNldHRpbmdzLWdlYXIiLDYwMjQxKSxzZXR0aW5nczpoKCJzZXR0aW5ncyIsNjAyNDIpLHNoaWVsZDpoKCJzaGllbGQiLDYwMjQzKSxzbWlsZXk6aCgic21pbGV5Iiw2MDI0NCksc29ydFByZWNlZGVuY2U6aCgic29ydC1wcmVjZWRlbmNlIiw2MDI0NSksc3BsaXRIb3Jpem9udGFsOmgoInNwbGl0LWhvcml6b250YWwiLDYwMjQ2KSxzcGxpdFZlcnRpY2FsOmgoInNwbGl0LXZlcnRpY2FsIiw2MDI0Nyksc3F1aXJyZWw6aCgic3F1aXJyZWwiLDYwMjQ4KSxzdGFyRnVsbDpoKCJzdGFyLWZ1bGwiLDYwMjQ5KSxzdGFySGFsZjpoKCJzdGFyLWhhbGYiLDYwMjUwKSxzeW1ib2xDbGFzczpoKCJzeW1ib2wtY2xhc3MiLDYwMjUxKSxzeW1ib2xDb2xvcjpoKCJzeW1ib2wtY29sb3IiLDYwMjUyKSxzeW1ib2xDb25zdGFudDpoKCJzeW1ib2wtY29uc3RhbnQiLDYwMjUzKSxzeW1ib2xFbnVtTWVtYmVyOmgoInN5bWJvbC1lbnVtLW1lbWJlciIsNjAyNTQpLHN5bWJvbEZpZWxkOmgoInN5bWJvbC1maWVsZCIsNjAyNTUpLHN5bWJvbEZpbGU6aCgic3ltYm9sLWZpbGUiLDYwMjU2KSxzeW1ib2xJbnRlcmZhY2U6aCgic3ltYm9sLWludGVyZmFjZSIsNjAyNTcpLHN5bWJvbEtleXdvcmQ6aCgic3ltYm9sLWtleXdvcmQiLDYwMjU4KSxzeW1ib2xNaXNjOmgoInN5bWJvbC1taXNjIiw2MDI1OSksc3ltYm9sT3BlcmF0b3I6aCgic3ltYm9sLW9wZXJhdG9yIiw2MDI2MCksc3ltYm9sUHJvcGVydHk6aCgic3ltYm9sLXByb3BlcnR5Iiw2MDI2MSksd3JlbmNoOmgoIndyZW5jaCIsNjAyNjEpLHdyZW5jaFN1YmFjdGlvbjpoKCJ3cmVuY2gtc3ViYWN0aW9uIiw2MDI2MSksc3ltYm9sU25pcHBldDpoKCJzeW1ib2wtc25pcHBldCIsNjAyNjIpLHRhc2tsaXN0OmgoInRhc2tsaXN0Iiw2MDI2MyksdGVsZXNjb3BlOmgoInRlbGVzY29wZSIsNjAyNjQpLHRleHRTaXplOmgoInRleHQtc2l6ZSIsNjAyNjUpLHRocmVlQmFyczpoKCJ0aHJlZS1iYXJzIiw2MDI2NiksdGh1bWJzZG93bjpoKCJ0aHVtYnNkb3duIiw2MDI2NyksdGh1bWJzdXA6aCgidGh1bWJzdXAiLDYwMjY4KSx0b29sczpoKCJ0b29scyIsNjAyNjkpLHRyaWFuZ2xlRG93bjpoKCJ0cmlhbmdsZS1kb3duIiw2MDI3MCksdHJpYW5nbGVMZWZ0OmgoInRyaWFuZ2xlLWxlZnQiLDYwMjcxKSx0cmlhbmdsZVJpZ2h0OmgoInRyaWFuZ2xlLXJpZ2h0Iiw2MDI3MiksdHJpYW5nbGVVcDpoKCJ0cmlhbmdsZS11cCIsNjAyNzMpLHR3aXR0ZXI6aCgidHdpdHRlciIsNjAyNzQpLHVuZm9sZDpoKCJ1bmZvbGQiLDYwMjc1KSx1bmxvY2s6aCgidW5sb2NrIiw2MDI3NiksdW5tdXRlOmgoInVubXV0ZSIsNjAyNzcpLHVudmVyaWZpZWQ6aCgidW52ZXJpZmllZCIsNjAyNzgpLHZlcmlmaWVkOmgoInZlcmlmaWVkIiw2MDI3OSksdmVyc2lvbnM6aCgidmVyc2lvbnMiLDYwMjgwKSx2bUFjdGl2ZTpoKCJ2bS1hY3RpdmUiLDYwMjgxKSx2bU91dGxpbmU6aCgidm0tb3V0bGluZSIsNjAyODIpLHZtUnVubmluZzpoKCJ2bS1ydW5uaW5nIiw2MDI4Myksd2F0Y2g6aCgid2F0Y2giLDYwMjg0KSx3aGl0ZXNwYWNlOmgoIndoaXRlc3BhY2UiLDYwMjg1KSx3aG9sZVdvcmQ6aCgid2hvbGUtd29yZCIsNjAyODYpLHdpbmRvdzpoKCJ3aW5kb3ciLDYwMjg3KSx3b3JkV3JhcDpoKCJ3b3JkLXdyYXAiLDYwMjg4KSx6b29tSW46aCgiem9vbS1pbiIsNjAyODkpLHpvb21PdXQ6aCgiem9vbS1vdXQiLDYwMjkwKSxsaXN0RmlsdGVyOmgoImxpc3QtZmlsdGVyIiw2MDI5MSksbGlzdEZsYXQ6aCgibGlzdC1mbGF0Iiw2MDI5MiksbGlzdFNlbGVjdGlvbjpoKCJsaXN0LXNlbGVjdGlvbiIsNjAyOTMpLHNlbGVjdGlvbjpoKCJzZWxlY3Rpb24iLDYwMjkzKSxsaXN0VHJlZTpoKCJsaXN0LXRyZWUiLDYwMjk0KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvblVudmVyaWZpZWQ6aCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi11bnZlcmlmaWVkIiw2MDI5NSksZGVidWdCcmVha3BvaW50RnVuY3Rpb246aCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbiIsNjAyOTYpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uRGlzYWJsZWQ6aCgiZGVidWctYnJlYWtwb2ludC1mdW5jdGlvbi1kaXNhYmxlZCIsNjAyOTYpLGRlYnVnU3RhY2tmcmFtZUFjdGl2ZTpoKCJkZWJ1Zy1zdGFja2ZyYW1lLWFjdGl2ZSIsNjAyOTcpLGNpcmNsZVNtYWxsRmlsbGVkOmgoImNpcmNsZS1zbWFsbC1maWxsZWQiLDYwMjk4KSxkZWJ1Z1N0YWNrZnJhbWVEb3Q6aCgiZGVidWctc3RhY2tmcmFtZS1kb3QiLDYwMjk4KSx0ZXJtaW5hbERlY29yYXRpb25NYXJrOmgoInRlcm1pbmFsLWRlY29yYXRpb24tbWFyayIsNjAyOTgpLGRlYnVnU3RhY2tmcmFtZTpoKCJkZWJ1Zy1zdGFja2ZyYW1lIiw2MDI5OSksZGVidWdTdGFja2ZyYW1lRm9jdXNlZDpoKCJkZWJ1Zy1zdGFja2ZyYW1lLWZvY3VzZWQiLDYwMjk5KSxkZWJ1Z0JyZWFrcG9pbnRVbnN1cHBvcnRlZDpoKCJkZWJ1Zy1icmVha3BvaW50LXVuc3VwcG9ydGVkIiw2MDMwMCksc3ltYm9sU3RyaW5nOmgoInN5bWJvbC1zdHJpbmciLDYwMzAxKSxkZWJ1Z1JldmVyc2VDb250aW51ZTpoKCJkZWJ1Zy1yZXZlcnNlLWNvbnRpbnVlIiw2MDMwMiksZGVidWdTdGVwQmFjazpoKCJkZWJ1Zy1zdGVwLWJhY2siLDYwMzAzKSxkZWJ1Z1Jlc3RhcnRGcmFtZTpoKCJkZWJ1Zy1yZXN0YXJ0LWZyYW1lIiw2MDMwNCksZGVidWdBbHQ6aCgiZGVidWctYWx0Iiw2MDMwNSksY2FsbEluY29taW5nOmgoImNhbGwtaW5jb21pbmciLDYwMzA2KSxjYWxsT3V0Z29pbmc6aCgiY2FsbC1vdXRnb2luZyIsNjAzMDcpLG1lbnU6aCgibWVudSIsNjAzMDgpLGV4cGFuZEFsbDpoKCJleHBhbmQtYWxsIiw2MDMwOSksZmVlZGJhY2s6aCgiZmVlZGJhY2siLDYwMzEwKSxnaXRQdWxsUmVxdWVzdFJldmlld2VyOmgoImdpdC1wdWxsLXJlcXVlc3QtcmV2aWV3ZXIiLDYwMzEwKSxncm91cEJ5UmVmVHlwZTpoKCJncm91cC1ieS1yZWYtdHlwZSIsNjAzMTEpLHVuZ3JvdXBCeVJlZlR5cGU6aCgidW5ncm91cC1ieS1yZWYtdHlwZSIsNjAzMTIpLGFjY291bnQ6aCgiYWNjb3VudCIsNjAzMTMpLGdpdFB1bGxSZXF1ZXN0QXNzaWduZWU6aCgiZ2l0LXB1bGwtcmVxdWVzdC1hc3NpZ25lZSIsNjAzMTMpLGJlbGxEb3Q6aCgiYmVsbC1kb3QiLDYwMzE0KSxkZWJ1Z0NvbnNvbGU6aCgiZGVidWctY29uc29sZSIsNjAzMTUpLGxpYnJhcnk6aCgibGlicmFyeSIsNjAzMTYpLG91dHB1dDpoKCJvdXRwdXQiLDYwMzE3KSxydW5BbGw6aCgicnVuLWFsbCIsNjAzMTgpLHN5bmNJZ25vcmVkOmgoInN5bmMtaWdub3JlZCIsNjAzMTkpLHBpbm5lZDpoKCJwaW5uZWQiLDYwMzIwKSxnaXRodWJJbnZlcnRlZDpoKCJnaXRodWItaW52ZXJ0ZWQiLDYwMzIxKSxzZXJ2ZXJQcm9jZXNzOmgoInNlcnZlci1wcm9jZXNzIiw2MDMyMiksc2VydmVyRW52aXJvbm1lbnQ6aCgic2VydmVyLWVudmlyb25tZW50Iiw2MDMyMykscGFzczpoKCJwYXNzIiw2MDMyNCksaXNzdWVDbG9zZWQ6aCgiaXNzdWUtY2xvc2VkIiw2MDMyNCksc3RvcENpcmNsZTpoKCJzdG9wLWNpcmNsZSIsNjAzMjUpLHBsYXlDaXJjbGU6aCgicGxheS1jaXJjbGUiLDYwMzI2KSxyZWNvcmQ6aCgicmVjb3JkIiw2MDMyNyksZGVidWdBbHRTbWFsbDpoKCJkZWJ1Zy1hbHQtc21hbGwiLDYwMzI4KSx2bUNvbm5lY3Q6aCgidm0tY29ubmVjdCIsNjAzMjkpLGNsb3VkOmgoImNsb3VkIiw2MDMzMCksbWVyZ2U6aCgibWVyZ2UiLDYwMzMxKSxleHBvcnQ6aCgiZXhwb3J0Iiw2MDMzMiksZ3JhcGhMZWZ0OmgoImdyYXBoLWxlZnQiLDYwMzMzKSxtYWduZXQ6aCgibWFnbmV0Iiw2MDMzNCksbm90ZWJvb2s6aCgibm90ZWJvb2siLDYwMzM1KSxyZWRvOmgoInJlZG8iLDYwMzM2KSxjaGVja0FsbDpoKCJjaGVjay1hbGwiLDYwMzM3KSxwaW5uZWREaXJ0eTpoKCJwaW5uZWQtZGlydHkiLDYwMzM4KSxwYXNzRmlsbGVkOmgoInBhc3MtZmlsbGVkIiw2MDMzOSksY2lyY2xlTGFyZ2VGaWxsZWQ6aCgiY2lyY2xlLWxhcmdlLWZpbGxlZCIsNjAzNDApLGNpcmNsZUxhcmdlOmgoImNpcmNsZS1sYXJnZSIsNjAzNDEpLGNpcmNsZUxhcmdlT3V0bGluZTpoKCJjaXJjbGUtbGFyZ2Utb3V0bGluZSIsNjAzNDEpLGNvbWJpbmU6aCgiY29tYmluZSIsNjAzNDIpLGdhdGhlcjpoKCJnYXRoZXIiLDYwMzQyKSx0YWJsZTpoKCJ0YWJsZSIsNjAzNDMpLHZhcmlhYmxlR3JvdXA6aCgidmFyaWFibGUtZ3JvdXAiLDYwMzQ0KSx0eXBlSGllcmFyY2h5OmgoInR5cGUtaGllcmFyY2h5Iiw2MDM0NSksdHlwZUhpZXJhcmNoeVN1YjpoKCJ0eXBlLWhpZXJhcmNoeS1zdWIiLDYwMzQ2KSx0eXBlSGllcmFyY2h5U3VwZXI6aCgidHlwZS1oaWVyYXJjaHktc3VwZXIiLDYwMzQ3KSxnaXRQdWxsUmVxdWVzdENyZWF0ZTpoKCJnaXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZSIsNjAzNDgpLHJ1bkFib3ZlOmgoInJ1bi1hYm92ZSIsNjAzNDkpLHJ1bkJlbG93OmgoInJ1bi1iZWxvdyIsNjAzNTApLG5vdGVib29rVGVtcGxhdGU6aCgibm90ZWJvb2stdGVtcGxhdGUiLDYwMzUxKSxkZWJ1Z1JlcnVuOmgoImRlYnVnLXJlcnVuIiw2MDM1Miksd29ya3NwYWNlVHJ1c3RlZDpoKCJ3b3Jrc3BhY2UtdHJ1c3RlZCIsNjAzNTMpLHdvcmtzcGFjZVVudHJ1c3RlZDpoKCJ3b3Jrc3BhY2UtdW50cnVzdGVkIiw2MDM1NCksd29ya3NwYWNlVW5rbm93bjpoKCJ3b3Jrc3BhY2UtdW5rbm93biIsNjAzNTUpLHRlcm1pbmFsQ21kOmgoInRlcm1pbmFsLWNtZCIsNjAzNTYpLHRlcm1pbmFsRGViaWFuOmgoInRlcm1pbmFsLWRlYmlhbiIsNjAzNTcpLHRlcm1pbmFsTGludXg6aCgidGVybWluYWwtbGludXgiLDYwMzU4KSx0ZXJtaW5hbFBvd2Vyc2hlbGw6aCgidGVybWluYWwtcG93ZXJzaGVsbCIsNjAzNTkpLHRlcm1pbmFsVG11eDpoKCJ0ZXJtaW5hbC10bXV4Iiw2MDM2MCksdGVybWluYWxVYnVudHU6aCgidGVybWluYWwtdWJ1bnR1Iiw2MDM2MSksdGVybWluYWxCYXNoOmgoInRlcm1pbmFsLWJhc2giLDYwMzYyKSxhcnJvd1N3YXA6aCgiYXJyb3ctc3dhcCIsNjAzNjMpLGNvcHk6aCgiY29weSIsNjAzNjQpLHBlcnNvbkFkZDpoKCJwZXJzb24tYWRkIiw2MDM2NSksZmlsdGVyRmlsbGVkOmgoImZpbHRlci1maWxsZWQiLDYwMzY2KSx3YW5kOmgoIndhbmQiLDYwMzY3KSxkZWJ1Z0xpbmVCeUxpbmU6aCgiZGVidWctbGluZS1ieS1saW5lIiw2MDM2OCksaW5zcGVjdDpoKCJpbnNwZWN0Iiw2MDM2OSksbGF5ZXJzOmgoImxheWVycyIsNjAzNzApLGxheWVyc0RvdDpoKCJsYXllcnMtZG90Iiw2MDM3MSksbGF5ZXJzQWN0aXZlOmgoImxheWVycy1hY3RpdmUiLDYwMzcyKSxjb21wYXNzOmgoImNvbXBhc3MiLDYwMzczKSxjb21wYXNzRG90OmgoImNvbXBhc3MtZG90Iiw2MDM3NCksY29tcGFzc0FjdGl2ZTpoKCJjb21wYXNzLWFjdGl2ZSIsNjAzNzUpLGF6dXJlOmgoImF6dXJlIiw2MDM3NiksaXNzdWVEcmFmdDpoKCJpc3N1ZS1kcmFmdCIsNjAzNzcpLGdpdFB1bGxSZXF1ZXN0Q2xvc2VkOmgoImdpdC1wdWxsLXJlcXVlc3QtY2xvc2VkIiw2MDM3OCksZ2l0UHVsbFJlcXVlc3REcmFmdDpoKCJnaXQtcHVsbC1yZXF1ZXN0LWRyYWZ0Iiw2MDM3OSksZGVidWdBbGw6aCgiZGVidWctYWxsIiw2MDM4MCksZGVidWdDb3ZlcmFnZTpoKCJkZWJ1Zy1jb3ZlcmFnZSIsNjAzODEpLHJ1bkVycm9yczpoKCJydW4tZXJyb3JzIiw2MDM4MiksZm9sZGVyTGlicmFyeTpoKCJmb2xkZXItbGlicmFyeSIsNjAzODMpLGRlYnVnQ29udGludWVTbWFsbDpoKCJkZWJ1Zy1jb250aW51ZS1zbWFsbCIsNjAzODQpLGJlYWtlclN0b3A6aCgiYmVha2VyLXN0b3AiLDYwMzg1KSxncmFwaExpbmU6aCgiZ3JhcGgtbGluZSIsNjAzODYpLGdyYXBoU2NhdHRlcjpoKCJncmFwaC1zY2F0dGVyIiw2MDM4NykscGllQ2hhcnQ6aCgicGllLWNoYXJ0Iiw2MDM4OCksYnJhY2tldDpoKCJicmFja2V0Iiw2MDE3NSksYnJhY2tldERvdDpoKCJicmFja2V0LWRvdCIsNjAzODkpLGJyYWNrZXRFcnJvcjpoKCJicmFja2V0LWVycm9yIiw2MDM5MCksbG9ja1NtYWxsOmgoImxvY2stc21hbGwiLDYwMzkxKSxhenVyZURldm9wczpoKCJhenVyZS1kZXZvcHMiLDYwMzkyKSx2ZXJpZmllZEZpbGxlZDpoKCJ2ZXJpZmllZC1maWxsZWQiLDYwMzkzKSxuZXdsaW5lOmgoIm5ld2xpbmUiLDYwMzk0KSxsYXlvdXQ6aCgibGF5b3V0Iiw2MDM5NSksbGF5b3V0QWN0aXZpdHliYXJMZWZ0OmgoImxheW91dC1hY3Rpdml0eWJhci1sZWZ0Iiw2MDM5NiksbGF5b3V0QWN0aXZpdHliYXJSaWdodDpoKCJsYXlvdXQtYWN0aXZpdHliYXItcmlnaHQiLDYwMzk3KSxsYXlvdXRQYW5lbExlZnQ6aCgibGF5b3V0LXBhbmVsLWxlZnQiLDYwMzk4KSxsYXlvdXRQYW5lbENlbnRlcjpoKCJsYXlvdXQtcGFuZWwtY2VudGVyIiw2MDM5OSksbGF5b3V0UGFuZWxKdXN0aWZ5OmgoImxheW91dC1wYW5lbC1qdXN0aWZ5Iiw2MDQwMCksbGF5b3V0UGFuZWxSaWdodDpoKCJsYXlvdXQtcGFuZWwtcmlnaHQiLDYwNDAxKSxsYXlvdXRQYW5lbDpoKCJsYXlvdXQtcGFuZWwiLDYwNDAyKSxsYXlvdXRTaWRlYmFyTGVmdDpoKCJsYXlvdXQtc2lkZWJhci1sZWZ0Iiw2MDQwMyksbGF5b3V0U2lkZWJhclJpZ2h0OmgoImxheW91dC1zaWRlYmFyLXJpZ2h0Iiw2MDQwNCksbGF5b3V0U3RhdHVzYmFyOmgoImxheW91dC1zdGF0dXNiYXIiLDYwNDA1KSxsYXlvdXRNZW51YmFyOmgoImxheW91dC1tZW51YmFyIiw2MDQwNiksbGF5b3V0Q2VudGVyZWQ6aCgibGF5b3V0LWNlbnRlcmVkIiw2MDQwNyksdGFyZ2V0OmgoInRhcmdldCIsNjA0MDgpLGluZGVudDpoKCJpbmRlbnQiLDYwNDA5KSxyZWNvcmRTbWFsbDpoKCJyZWNvcmQtc21hbGwiLDYwNDEwKSxlcnJvclNtYWxsOmgoImVycm9yLXNtYWxsIiw2MDQxMSksdGVybWluYWxEZWNvcmF0aW9uRXJyb3I6aCgidGVybWluYWwtZGVjb3JhdGlvbi1lcnJvciIsNjA0MTEpLGFycm93Q2lyY2xlRG93bjpoKCJhcnJvdy1jaXJjbGUtZG93biIsNjA0MTIpLGFycm93Q2lyY2xlTGVmdDpoKCJhcnJvdy1jaXJjbGUtbGVmdCIsNjA0MTMpLGFycm93Q2lyY2xlUmlnaHQ6aCgiYXJyb3ctY2lyY2xlLXJpZ2h0Iiw2MDQxNCksYXJyb3dDaXJjbGVVcDpoKCJhcnJvdy1jaXJjbGUtdXAiLDYwNDE1KSxsYXlvdXRTaWRlYmFyUmlnaHRPZmY6aCgibGF5b3V0LXNpZGViYXItcmlnaHQtb2ZmIiw2MDQxNiksbGF5b3V0UGFuZWxPZmY6aCgibGF5b3V0LXBhbmVsLW9mZiIsNjA0MTcpLGxheW91dFNpZGViYXJMZWZ0T2ZmOmgoImxheW91dC1zaWRlYmFyLWxlZnQtb2ZmIiw2MDQxOCksYmxhbms6aCgiYmxhbmsiLDYwNDE5KSxoZWFydEZpbGxlZDpoKCJoZWFydC1maWxsZWQiLDYwNDIwKSxtYXA6aCgibWFwIiw2MDQyMSksbWFwSG9yaXpvbnRhbDpoKCJtYXAtaG9yaXpvbnRhbCIsNjA0MjEpLGZvbGRIb3Jpem9udGFsOmgoImZvbGQtaG9yaXpvbnRhbCIsNjA0MjEpLG1hcEZpbGxlZDpoKCJtYXAtZmlsbGVkIiw2MDQyMiksbWFwSG9yaXpvbnRhbEZpbGxlZDpoKCJtYXAtaG9yaXpvbnRhbC1maWxsZWQiLDYwNDIyKSxmb2xkSG9yaXpvbnRhbEZpbGxlZDpoKCJmb2xkLWhvcml6b250YWwtZmlsbGVkIiw2MDQyMiksY2lyY2xlU21hbGw6aCgiY2lyY2xlLXNtYWxsIiw2MDQyMyksYmVsbFNsYXNoOmgoImJlbGwtc2xhc2giLDYwNDI0KSxiZWxsU2xhc2hEb3Q6aCgiYmVsbC1zbGFzaC1kb3QiLDYwNDI1KSxjb21tZW50VW5yZXNvbHZlZDpoKCJjb21tZW50LXVucmVzb2x2ZWQiLDYwNDI2KSxnaXRQdWxsUmVxdWVzdEdvVG9DaGFuZ2VzOmgoImdpdC1wdWxsLXJlcXVlc3QtZ28tdG8tY2hhbmdlcyIsNjA0MjcpLGdpdFB1bGxSZXF1ZXN0TmV3Q2hhbmdlczpoKCJnaXQtcHVsbC1yZXF1ZXN0LW5ldy1jaGFuZ2VzIiw2MDQyOCksc2VhcmNoRnV6enk6aCgic2VhcmNoLWZ1enp5Iiw2MDQyOSksY29tbWVudERyYWZ0OmgoImNvbW1lbnQtZHJhZnQiLDYwNDMwKSxzZW5kOmgoInNlbmQiLDYwNDMxKSxzcGFya2xlOmgoInNwYXJrbGUiLDYwNDMyKSxpbnNlcnQ6aCgiaW5zZXJ0Iiw2MDQzMyksbWljOmgoIm1pYyIsNjA0MzQpLHRodW1ic2Rvd25GaWxsZWQ6aCgidGh1bWJzZG93bi1maWxsZWQiLDYwNDM1KSx0aHVtYnN1cEZpbGxlZDpoKCJ0aHVtYnN1cC1maWxsZWQiLDYwNDM2KSxjb2ZmZWU6aCgiY29mZmVlIiw2MDQzNyksc25ha2U6aCgic25ha2UiLDYwNDM4KSxnYW1lOmgoImdhbWUiLDYwNDM5KSx2cjpoKCJ2ciIsNjA0NDApLGNoaXA6aCgiY2hpcCIsNjA0NDEpLHBpYW5vOmgoInBpYW5vIiw2MDQ0MiksbXVzaWM6aCgibXVzaWMiLDYwNDQzKSxtaWNGaWxsZWQ6aCgibWljLWZpbGxlZCIsNjA0NDQpLHJlcG9GZXRjaDpoKCJyZXBvLWZldGNoIiw2MDQ0NSksY29waWxvdDpoKCJjb3BpbG90Iiw2MDQ0NiksbGlnaHRidWxiU3BhcmtsZTpoKCJsaWdodGJ1bGItc3BhcmtsZSIsNjA0NDcpLHJvYm90OmgoInJvYm90Iiw2MDQ0OCksc3BhcmtsZUZpbGxlZDpoKCJzcGFya2xlLWZpbGxlZCIsNjA0NDkpLGRpZmZTaW5nbGU6aCgiZGlmZi1zaW5nbGUiLDYwNDUwKSxkaWZmTXVsdGlwbGU6aCgiZGlmZi1tdWx0aXBsZSIsNjA0NTEpLHN1cnJvdW5kV2l0aDpoKCJzdXJyb3VuZC13aXRoIiw2MDQ1Miksc2hhcmU6aCgic2hhcmUiLDYwNDUzKSxnaXRTdGFzaDpoKCJnaXQtc3Rhc2giLDYwNDU0KSxnaXRTdGFzaEFwcGx5OmgoImdpdC1zdGFzaC1hcHBseSIsNjA0NTUpLGdpdFN0YXNoUG9wOmgoImdpdC1zdGFzaC1wb3AiLDYwNDU2KSx2c2NvZGU6aCgidnNjb2RlIiw2MDQ1NyksdnNjb2RlSW5zaWRlcnM6aCgidnNjb2RlLWluc2lkZXJzIiw2MDQ1OCksY29kZU9zczpoKCJjb2RlLW9zcyIsNjA0NTkpLHJ1bkNvdmVyYWdlOmgoInJ1bi1jb3ZlcmFnZSIsNjA0NjApLHJ1bkFsbENvdmVyYWdlOmgoInJ1bi1hbGwtY292ZXJhZ2UiLDYwNDYxKSxjb3ZlcmFnZTpoKCJjb3ZlcmFnZSIsNjA0NjIpLGdpdGh1YlByb2plY3Q6aCgiZ2l0aHViLXByb2plY3QiLDYwNDYzKSxtYXBWZXJ0aWNhbDpoKCJtYXAtdmVydGljYWwiLDYwNDY0KSxmb2xkVmVydGljYWw6aCgiZm9sZC12ZXJ0aWNhbCIsNjA0NjQpLG1hcFZlcnRpY2FsRmlsbGVkOmgoIm1hcC12ZXJ0aWNhbC1maWxsZWQiLDYwNDY1KSxmb2xkVmVydGljYWxGaWxsZWQ6aCgiZm9sZC12ZXJ0aWNhbC1maWxsZWQiLDYwNDY1KX0sVm89e2RpYWxvZ0Vycm9yOmgoImRpYWxvZy1lcnJvciIsImVycm9yIiksZGlhbG9nV2FybmluZzpoKCJkaWFsb2ctd2FybmluZyIsIndhcm5pbmciKSxkaWFsb2dJbmZvOmgoImRpYWxvZy1pbmZvIiwiaW5mbyIpLGRpYWxvZ0Nsb3NlOmgoImRpYWxvZy1jbG9zZSIsImNsb3NlIiksdHJlZUl0ZW1FeHBhbmRlZDpoKCJ0cmVlLWl0ZW0tZXhwYW5kZWQiLCJjaGV2cm9uLWRvd24iKSx0cmVlRmlsdGVyT25UeXBlT246aCgidHJlZS1maWx0ZXItb24tdHlwZS1vbiIsImxpc3QtZmlsdGVyIiksdHJlZUZpbHRlck9uVHlwZU9mZjpoKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9mZiIsImxpc3Qtc2VsZWN0aW9uIiksdHJlZUZpbHRlckNsZWFyOmgoInRyZWUtZmlsdGVyLWNsZWFyIiwiY2xvc2UiKSx0cmVlSXRlbUxvYWRpbmc6aCgidHJlZS1pdGVtLWxvYWRpbmciLCJsb2FkaW5nIiksbWVudVNlbGVjdGlvbjpoKCJtZW51LXNlbGVjdGlvbiIsImNoZWNrIiksbWVudVN1Ym1lbnU6aCgibWVudS1zdWJtZW51IiwiY2hldnJvbi1yaWdodCIpLG1lbnVCYXJNb3JlOmgoIm1lbnViYXItbW9yZSIsIm1vcmUiKSxzY3JvbGxiYXJCdXR0b25MZWZ0OmgoInNjcm9sbGJhci1idXR0b24tbGVmdCIsInRyaWFuZ2xlLWxlZnQiKSxzY3JvbGxiYXJCdXR0b25SaWdodDpoKCJzY3JvbGxiYXItYnV0dG9uLXJpZ2h0IiwidHJpYW5nbGUtcmlnaHQiKSxzY3JvbGxiYXJCdXR0b25VcDpoKCJzY3JvbGxiYXItYnV0dG9uLXVwIiwidHJpYW5nbGUtdXAiKSxzY3JvbGxiYXJCdXR0b25Eb3duOmgoInNjcm9sbGJhci1idXR0b24tZG93biIsInRyaWFuZ2xlLWRvd24iKSx0b29sQmFyTW9yZTpoKCJ0b29sYmFyLW1vcmUiLCJtb3JlIikscXVpY2tJbnB1dEJhY2s6aCgicXVpY2staW5wdXQtYmFjayIsImFycm93LWxlZnQiKSxkcm9wRG93bkJ1dHRvbjpoKCJkcm9wLWRvd24tYnV0dG9uIiw2MDA4NCksc3ltYm9sQ3VzdG9tQ29sb3I6aCgic3ltYm9sLWN1c3RvbWNvbG9yIiw2MDI1MiksZXhwb3J0SWNvbjpoKCJleHBvcnQiLDYwMzMyKSx3b3Jrc3BhY2VVbnNwZWNpZmllZDpoKCJ3b3Jrc3BhY2UtdW5zcGVjaWZpZWQiLDYwMzU1KSxuZXdMaW5lOmgoIm5ld2xpbmUiLDYwMzk0KSx0aHVtYnNEb3duRmlsbGVkOmgoInRodW1ic2Rvd24tZmlsbGVkIiw2MDQzNSksdGh1bWJzVXBGaWxsZWQ6aCgidGh1bWJzdXAtZmlsbGVkIiw2MDQzNiksZ2l0RmV0Y2g6aCgiZ2l0LWZldGNoIiw2MDQ0NSksbGlnaHRidWxiU3BhcmtsZUF1dG9maXg6aCgibGlnaHRidWxiLXNwYXJrbGUtYXV0b2ZpeCIsNjA0NDcpLGRlYnVnQnJlYWtwb2ludFBlbmRpbmc6aCgiZGVidWctYnJlYWtwb2ludC1wZW5kaW5nIiw2MDM3Nyl9LE89ey4uLk9vLC4uLlZvfTtjbGFzcyBqb3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzPW5ldyBNYXAsdGhpcy5fZmFjdG9yaWVzPW5ldyBNYXAsdGhpcy5fb25EaWRDaGFuZ2U9bmV3IEFlLHRoaXMub25EaWRDaGFuZ2U9dGhpcy5fb25EaWRDaGFuZ2UuZXZlbnQsdGhpcy5fY29sb3JNYXA9bnVsbH1oYW5kbGVDaGFuZ2UodCl7dGhpcy5fb25EaWRDaGFuZ2UuZmlyZSh7Y2hhbmdlZExhbmd1YWdlczp0LGNoYW5nZWRDb2xvck1hcDohMX0pfXJlZ2lzdGVyKHQsbil7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLnNldCh0LG4pLHRoaXMuaGFuZGxlQ2hhbmdlKFt0XSksRnQoKCk9Pnt0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5nZXQodCk9PT1uJiYodGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZGVsZXRlKHQpLHRoaXMuaGFuZGxlQ2hhbmdlKFt0XSkpfSl9Z2V0KHQpe3JldHVybiB0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5nZXQodCl8fG51bGx9cmVnaXN0ZXJGYWN0b3J5KHQsbil7dmFyIGk7KGk9dGhpcy5fZmFjdG9yaWVzLmdldCh0KSk9PT1udWxsfHxpPT09dm9pZCAwfHxpLmRpc3Bvc2UoKTtjb25zdCByPW5ldyBHbyh0aGlzLHQsbik7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQodCxyKSxGdCgoKT0+e2NvbnN0IGE9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTshYXx8YSE9PXJ8fCh0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKHQpLGEuZGlzcG9zZSgpKX0pfWFzeW5jIGdldE9yQ3JlYXRlKHQpe2NvbnN0IG49dGhpcy5nZXQodCk7aWYobilyZXR1cm4gbjtjb25zdCBpPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuIWl8fGkuaXNSZXNvbHZlZD9udWxsOihhd2FpdCBpLnJlc29sdmUoKSx0aGlzLmdldCh0KSl9aXNSZXNvbHZlZCh0KXtpZih0aGlzLmdldCh0KSlyZXR1cm4hMDtjb25zdCBpPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuISEoIWl8fGkuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAodCl7dGhpcy5fY29sb3JNYXA9dCx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19Y2xhc3MgR28gZXh0ZW5kcyB5dHtnZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWNvbnN0cnVjdG9yKHQsbixpKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PXQsdGhpcy5fbGFuZ3VhZ2VJZD1uLHRoaXMuX2ZhY3Rvcnk9aSx0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMCxzdXBlci5kaXNwb3NlKCl9YXN5bmMgcmVzb2x2ZSgpe3JldHVybiB0aGlzLl9yZXNvbHZlUHJvbWlzZXx8KHRoaXMuX3Jlc29sdmVQcm9taXNlPXRoaXMuX2NyZWF0ZSgpKSx0aGlzLl9yZXNvbHZlUHJvbWlzZX1hc3luYyBfY3JlYXRlKCl7Y29uc3QgdD1hd2FpdCB0aGlzLl9mYWN0b3J5LnRva2VuaXphdGlvblN1cHBvcnQ7dGhpcy5faXNSZXNvbHZlZD0hMCx0JiYhdGhpcy5faXNEaXNwb3NlZCYmdGhpcy5fcmVnaXN0ZXIodGhpcy5fcmVnaXN0cnkucmVnaXN0ZXIodGhpcy5fbGFuZ3VhZ2VJZCx0KSl9fWNsYXNzICRve2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLm9mZnNldD10LHRoaXMudHlwZT1uLHRoaXMubGFuZ3VhZ2U9aSx0aGlzLl90b2tlbkJyYW5kPXZvaWQgMH10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fXZhciBCaTsoZnVuY3Rpb24oZSl7Y29uc3QgdD1uZXcgTWFwO3Quc2V0KDAsTy5zeW1ib2xNZXRob2QpLHQuc2V0KDEsTy5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMixPLnN5bWJvbENvbnN0cnVjdG9yKSx0LnNldCgzLE8uc3ltYm9sRmllbGQpLHQuc2V0KDQsTy5zeW1ib2xWYXJpYWJsZSksdC5zZXQoNSxPLnN5bWJvbENsYXNzKSx0LnNldCg2LE8uc3ltYm9sU3RydWN0KSx0LnNldCg3LE8uc3ltYm9sSW50ZXJmYWNlKSx0LnNldCg4LE8uc3ltYm9sTW9kdWxlKSx0LnNldCg5LE8uc3ltYm9sUHJvcGVydHkpLHQuc2V0KDEwLE8uc3ltYm9sRXZlbnQpLHQuc2V0KDExLE8uc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDEyLE8uc3ltYm9sVW5pdCksdC5zZXQoMTMsTy5zeW1ib2xWYWx1ZSksdC5zZXQoMTUsTy5zeW1ib2xFbnVtKSx0LnNldCgxNCxPLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNSxPLnN5bWJvbEVudW0pLHQuc2V0KDE2LE8uc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMTcsTy5zeW1ib2xLZXl3b3JkKSx0LnNldCgyNyxPLnN5bWJvbFNuaXBwZXQpLHQuc2V0KDE4LE8uc3ltYm9sVGV4dCksdC5zZXQoMTksTy5zeW1ib2xDb2xvciksdC5zZXQoMjAsTy5zeW1ib2xGaWxlKSx0LnNldCgyMSxPLnN5bWJvbFJlZmVyZW5jZSksdC5zZXQoMjIsTy5zeW1ib2xDdXN0b21Db2xvciksdC5zZXQoMjMsTy5zeW1ib2xGb2xkZXIpLHQuc2V0KDI0LE8uc3ltYm9sVHlwZVBhcmFtZXRlciksdC5zZXQoMjUsTy5hY2NvdW50KSx0LnNldCgyNixPLmlzc3Vlcyk7ZnVuY3Rpb24gbihhKXtsZXQgcz10LmdldChhKTtyZXR1cm4gc3x8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgQ29tcGxldGlvbkl0ZW1LaW5kICIrYSkscz1PLnN5bWJvbFByb3BlcnR5KSxzfWUudG9JY29uPW47Y29uc3QgaT1uZXcgTWFwO2kuc2V0KCJtZXRob2QiLDApLGkuc2V0KCJmdW5jdGlvbiIsMSksaS5zZXQoImNvbnN0cnVjdG9yIiwyKSxpLnNldCgiZmllbGQiLDMpLGkuc2V0KCJ2YXJpYWJsZSIsNCksaS5zZXQoImNsYXNzIiw1KSxpLnNldCgic3RydWN0Iiw2KSxpLnNldCgiaW50ZXJmYWNlIiw3KSxpLnNldCgibW9kdWxlIiw4KSxpLnNldCgicHJvcGVydHkiLDkpLGkuc2V0KCJldmVudCIsMTApLGkuc2V0KCJvcGVyYXRvciIsMTEpLGkuc2V0KCJ1bml0IiwxMiksaS5zZXQoInZhbHVlIiwxMyksaS5zZXQoImNvbnN0YW50IiwxNCksaS5zZXQoImVudW0iLDE1KSxpLnNldCgiZW51bS1tZW1iZXIiLDE2KSxpLnNldCgiZW51bU1lbWJlciIsMTYpLGkuc2V0KCJrZXl3b3JkIiwxNyksaS5zZXQoInNuaXBwZXQiLDI3KSxpLnNldCgidGV4dCIsMTgpLGkuc2V0KCJjb2xvciIsMTkpLGkuc2V0KCJmaWxlIiwyMCksaS5zZXQoInJlZmVyZW5jZSIsMjEpLGkuc2V0KCJjdXN0b21jb2xvciIsMjIpLGkuc2V0KCJmb2xkZXIiLDIzKSxpLnNldCgidHlwZS1wYXJhbWV0ZXIiLDI0KSxpLnNldCgidHlwZVBhcmFtZXRlciIsMjQpLGkuc2V0KCJhY2NvdW50IiwyNSksaS5zZXQoImlzc3VlIiwyNik7ZnVuY3Rpb24gcihhLHMpe2xldCBvPWkuZ2V0KGEpO3JldHVybiB0eXBlb2Ygbz4idSImJiFzJiYobz05KSxvfWUuZnJvbVN0cmluZz1yfSkoQml8fChCaT17fSkpO3ZhciBxaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0pKHFpfHwocWk9e30pKTt2YXIgT2k7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLlBhc3RlQXM9MV09IlBhc3RlQXMifSkoT2l8fChPaT17fSkpO3ZhciBWaTsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifSkoVml8fChWaT17fSkpO3ZhciBqaTsoZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5SZWFkPTFdPSJSZWFkIixlW2UuV3JpdGU9Ml09IldyaXRlIn0pKGppfHwoamk9e30pKSxLKCJBcnJheSIsImFycmF5IiksSygiQm9vbGVhbiIsImJvb2xlYW4iKSxLKCJDbGFzcyIsImNsYXNzIiksSygiQ29uc3RhbnQiLCJjb25zdGFudCIpLEsoIkNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiKSxLKCJFbnVtIiwiZW51bWVyYXRpb24iKSxLKCJFbnVtTWVtYmVyIiwiZW51bWVyYXRpb24gbWVtYmVyIiksSygiRXZlbnQiLCJldmVudCIpLEsoIkZpZWxkIiwiZmllbGQiKSxLKCJGaWxlIiwiZmlsZSIpLEsoIkZ1bmN0aW9uIiwiZnVuY3Rpb24iKSxLKCJJbnRlcmZhY2UiLCJpbnRlcmZhY2UiKSxLKCJLZXkiLCJrZXkiKSxLKCJNZXRob2QiLCJtZXRob2QiKSxLKCJNb2R1bGUiLCJtb2R1bGUiKSxLKCJOYW1lc3BhY2UiLCJuYW1lc3BhY2UiKSxLKCJOdWxsIiwibnVsbCIpLEsoIk51bWJlciIsIm51bWJlciIpLEsoIk9iamVjdCIsIm9iamVjdCIpLEsoIk9wZXJhdG9yIiwib3BlcmF0b3IiKSxLKCJQYWNrYWdlIiwicGFja2FnZSIpLEsoIlByb3BlcnR5IiwicHJvcGVydHkiKSxLKCJTdHJpbmciLCJzdHJpbmciKSxLKCJTdHJ1Y3QiLCJzdHJ1Y3QiKSxLKCJUeXBlUGFyYW1ldGVyIiwidHlwZSBwYXJhbWV0ZXIiKSxLKCJWYXJpYWJsZSIsInZhcmlhYmxlIik7dmFyIEdpOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxPLnN5bWJvbEZpbGUpLHQuc2V0KDEsTy5zeW1ib2xNb2R1bGUpLHQuc2V0KDIsTy5zeW1ib2xOYW1lc3BhY2UpLHQuc2V0KDMsTy5zeW1ib2xQYWNrYWdlKSx0LnNldCg0LE8uc3ltYm9sQ2xhc3MpLHQuc2V0KDUsTy5zeW1ib2xNZXRob2QpLHQuc2V0KDYsTy5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoNyxPLnN5bWJvbEZpZWxkKSx0LnNldCg4LE8uc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDksTy5zeW1ib2xFbnVtKSx0LnNldCgxMCxPLnN5bWJvbEludGVyZmFjZSksdC5zZXQoMTEsTy5zeW1ib2xGdW5jdGlvbiksdC5zZXQoMTIsTy5zeW1ib2xWYXJpYWJsZSksdC5zZXQoMTMsTy5zeW1ib2xDb25zdGFudCksdC5zZXQoMTQsTy5zeW1ib2xTdHJpbmcpLHQuc2V0KDE1LE8uc3ltYm9sTnVtYmVyKSx0LnNldCgxNixPLnN5bWJvbEJvb2xlYW4pLHQuc2V0KDE3LE8uc3ltYm9sQXJyYXkpLHQuc2V0KDE4LE8uc3ltYm9sT2JqZWN0KSx0LnNldCgxOSxPLnN5bWJvbEtleSksdC5zZXQoMjAsTy5zeW1ib2xOdWxsKSx0LnNldCgyMSxPLnN5bWJvbEVudW1NZW1iZXIpLHQuc2V0KDIyLE8uc3ltYm9sU3RydWN0KSx0LnNldCgyMyxPLnN5bWJvbEV2ZW50KSx0LnNldCgyNCxPLnN5bWJvbE9wZXJhdG9yKSx0LnNldCgyNSxPLnN5bWJvbFR5cGVQYXJhbWV0ZXIpO2Z1bmN0aW9uIG4oaSl7bGV0IHI9dC5nZXQoaSk7cmV0dXJuIHJ8fChjb25zb2xlLmluZm8oIk5vIGNvZGljb24gZm91bmQgZm9yIFN5bWJvbEtpbmQgIitpKSxyPU8uc3ltYm9sUHJvcGVydHkpLHJ9ZS50b0ljb249bn0pKEdpfHwoR2k9e30pKTt2YXIgJGk7KGZ1bmN0aW9uKGUpe2VbZS5BSUdlbmVyYXRlZD0xXT0iQUlHZW5lcmF0ZWQifSkoJGl8fCgkaT17fSkpO3ZhciBYaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4hbnx8dHlwZW9mIG4hPSJvYmplY3QiPyExOnR5cGVvZiBuLmlkPT0ic3RyaW5nIiYmdHlwZW9mIG4udGl0bGU9PSJzdHJpbmcifWUuaXM9dH0pKFhpfHwoWGk9e30pKTt2YXIgSmk7KGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSkoSml8fChKaT17fSkpLG5ldyBqbzt2YXIgUWk7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLkF1dG9tYXRpYz0xXT0iQXV0b21hdGljIn0pKFFpfHwoUWk9e30pKTt2YXIgWWk7KGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRGlzYWJsZWQ9MV09IkRpc2FibGVkIixlW2UuRW5hYmxlZD0yXT0iRW5hYmxlZCJ9KShZaXx8KFlpPXt9KSk7dmFyIFppOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5BdXRvPTJdPSJBdXRvIn0pKFppfHwoWmk9e30pKTt2YXIgS2k7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifSkoS2l8fChLaT17fSkpO3ZhciBlcjsoZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KShlcnx8KGVyPXt9KSk7dmFyIHRyOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KSh0cnx8KHRyPXt9KSk7dmFyIG5yOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KShucnx8KG5yPXt9KSk7dmFyIGlyOyhmdW5jdGlvbihlKXtlW2UuRVhBQ1Q9MF09IkVYQUNUIixlW2UuQUJPVkU9MV09IkFCT1ZFIixlW2UuQkVMT1c9Ml09IkJFTE9XIn0pKGlyfHwoaXI9e30pKTt2YXIgcnI7KGZ1bmN0aW9uKGUpe2VbZS5Ob3RTZXQ9MF09Ik5vdFNldCIsZVtlLkNvbnRlbnRGbHVzaD0xXT0iQ29udGVudEZsdXNoIixlW2UuUmVjb3ZlckZyb21NYXJrZXJzPTJdPSJSZWNvdmVyRnJvbU1hcmtlcnMiLGVbZS5FeHBsaWNpdD0zXT0iRXhwbGljaXQiLGVbZS5QYXN0ZT00XT0iUGFzdGUiLGVbZS5VbmRvPTVdPSJVbmRvIixlW2UuUmVkbz02XT0iUmVkbyJ9KShycnx8KHJyPXt9KSk7dmFyIGFyOyhmdW5jdGlvbihlKXtlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KShhcnx8KGFyPXt9KSk7dmFyIHNyOyhmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifSkoc3J8fChzcj17fSkpO3ZhciBvcjsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwPTFdPSJLZWVwIixlW2UuQnJhY2tldHM9Ml09IkJyYWNrZXRzIixlW2UuQWR2YW5jZWQ9M109IkFkdmFuY2VkIixlW2UuRnVsbD00XT0iRnVsbCJ9KShvcnx8KG9yPXt9KSk7dmFyIGxyOyhmdW5jdGlvbihlKXtlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyPTBdPSJhY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXIiLGVbZS5hY2NlcHRTdWdnZXN0aW9uT25FbnRlcj0xXT0iYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXIiLGVbZS5hY2Nlc3NpYmlsaXR5U3VwcG9ydD0yXT0iYWNjZXNzaWJpbGl0eVN1cHBvcnQiLGVbZS5hY2Nlc3NpYmlsaXR5UGFnZVNpemU9M109ImFjY2Vzc2liaWxpdHlQYWdlU2l6ZSIsZVtlLmFyaWFMYWJlbD00XT0iYXJpYUxhYmVsIixlW2UuYXJpYVJlcXVpcmVkPTVdPSJhcmlhUmVxdWlyZWQiLGVbZS5hdXRvQ2xvc2luZ0JyYWNrZXRzPTZdPSJhdXRvQ2xvc2luZ0JyYWNrZXRzIixlW2UuYXV0b0Nsb3NpbmdDb21tZW50cz03XT0iYXV0b0Nsb3NpbmdDb21tZW50cyIsZVtlLnNjcmVlblJlYWRlckFubm91bmNlSW5saW5lU3VnZ2VzdGlvbj04XT0ic2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9OV09ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT0xMF09ImF1dG9DbG9zaW5nT3ZlcnR5cGUiLGVbZS5hdXRvQ2xvc2luZ1F1b3Rlcz0xMV09ImF1dG9DbG9zaW5nUXVvdGVzIixlW2UuYXV0b0luZGVudD0xMl09ImF1dG9JbmRlbnQiLGVbZS5hdXRvbWF0aWNMYXlvdXQ9MTNdPSJhdXRvbWF0aWNMYXlvdXQiLGVbZS5hdXRvU3Vycm91bmQ9MTRdPSJhdXRvU3Vycm91bmQiLGVbZS5icmFja2V0UGFpckNvbG9yaXphdGlvbj0xNV09ImJyYWNrZXRQYWlyQ29sb3JpemF0aW9uIixlW2UuZ3VpZGVzPTE2XT0iZ3VpZGVzIixlW2UuY29kZUxlbnM9MTddPSJjb2RlTGVucyIsZVtlLmNvZGVMZW5zRm9udEZhbWlseT0xOF09ImNvZGVMZW5zRm9udEZhbWlseSIsZVtlLmNvZGVMZW5zRm9udFNpemU9MTldPSJjb2RlTGVuc0ZvbnRTaXplIixlW2UuY29sb3JEZWNvcmF0b3JzPTIwXT0iY29sb3JEZWNvcmF0b3JzIixlW2UuY29sb3JEZWNvcmF0b3JzTGltaXQ9MjFdPSJjb2xvckRlY29yYXRvcnNMaW1pdCIsZVtlLmNvbHVtblNlbGVjdGlvbj0yMl09ImNvbHVtblNlbGVjdGlvbiIsZVtlLmNvbW1lbnRzPTIzXT0iY29tbWVudHMiLGVbZS5jb250ZXh0bWVudT0yNF09ImNvbnRleHRtZW51IixlW2UuY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmc9MjVdPSJjb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZyIsZVtlLmN1cnNvckJsaW5raW5nPTI2XT0iY3Vyc29yQmxpbmtpbmciLGVbZS5jdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbj0yN109ImN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uIixlW2UuY3Vyc29yU3R5bGU9MjhdPSJjdXJzb3JTdHlsZSIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXM9MjldPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlPTMwXT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlIixlW2UuY3Vyc29yV2lkdGg9MzFdPSJjdXJzb3JXaWR0aCIsZVtlLmRpc2FibGVMYXllckhpbnRpbmc9MzJdPSJkaXNhYmxlTGF5ZXJIaW50aW5nIixlW2UuZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnM9MzNdPSJkaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucyIsZVtlLmRvbVJlYWRPbmx5PTM0XT0iZG9tUmVhZE9ubHkiLGVbZS5kcmFnQW5kRHJvcD0zNV09ImRyYWdBbmREcm9wIixlW2UuZHJvcEludG9FZGl0b3I9MzZdPSJkcm9wSW50b0VkaXRvciIsZVtlLmVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkPTM3XT0iZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5leHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nPTM4XT0iZXhwZXJpbWVudGFsV2hpdGVzcGFjZVJlbmRlcmluZyIsZVtlLmV4dHJhRWRpdG9yQ2xhc3NOYW1lPTM5XT0iZXh0cmFFZGl0b3JDbGFzc05hbWUiLGVbZS5mYXN0U2Nyb2xsU2Vuc2l0aXZpdHk9NDBdPSJmYXN0U2Nyb2xsU2Vuc2l0aXZpdHkiLGVbZS5maW5kPTQxXT0iZmluZCIsZVtlLmZpeGVkT3ZlcmZsb3dXaWRnZXRzPTQyXT0iZml4ZWRPdmVyZmxvd1dpZGdldHMiLGVbZS5mb2xkaW5nPTQzXT0iZm9sZGluZyIsZVtlLmZvbGRpbmdTdHJhdGVneT00NF09ImZvbGRpbmdTdHJhdGVneSIsZVtlLmZvbGRpbmdIaWdobGlnaHQ9NDVdPSJmb2xkaW5nSGlnaGxpZ2h0IixlW2UuZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQ9NDZdPSJmb2xkaW5nSW1wb3J0c0J5RGVmYXVsdCIsZVtlLmZvbGRpbmdNYXhpbXVtUmVnaW9ucz00N109ImZvbGRpbmdNYXhpbXVtUmVnaW9ucyIsZVtlLnVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZT00OF09InVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZSIsZVtlLmZvbnRGYW1pbHk9NDldPSJmb250RmFtaWx5IixlW2UuZm9udEluZm89NTBdPSJmb250SW5mbyIsZVtlLmZvbnRMaWdhdHVyZXM9NTFdPSJmb250TGlnYXR1cmVzIixlW2UuZm9udFNpemU9NTJdPSJmb250U2l6ZSIsZVtlLmZvbnRXZWlnaHQ9NTNdPSJmb250V2VpZ2h0IixlW2UuZm9udFZhcmlhdGlvbnM9NTRdPSJmb250VmFyaWF0aW9ucyIsZVtlLmZvcm1hdE9uUGFzdGU9NTVdPSJmb3JtYXRPblBhc3RlIixlW2UuZm9ybWF0T25UeXBlPTU2XT0iZm9ybWF0T25UeXBlIixlW2UuZ2x5cGhNYXJnaW49NTddPSJnbHlwaE1hcmdpbiIsZVtlLmdvdG9Mb2NhdGlvbj01OF09ImdvdG9Mb2NhdGlvbiIsZVtlLmhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXI9NTldPSJoaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyIixlW2UuaG92ZXI9NjBdPSJob3ZlciIsZVtlLmluRGlmZkVkaXRvcj02MV09ImluRGlmZkVkaXRvciIsZVtlLmlubGluZVN1Z2dlc3Q9NjJdPSJpbmxpbmVTdWdnZXN0IixlW2UuaW5saW5lRWRpdD02M109ImlubGluZUVkaXQiLGVbZS5sZXR0ZXJTcGFjaW5nPTY0XT0ibGV0dGVyU3BhY2luZyIsZVtlLmxpZ2h0YnVsYj02NV09ImxpZ2h0YnVsYiIsZVtlLmxpbmVEZWNvcmF0aW9uc1dpZHRoPTY2XT0ibGluZURlY29yYXRpb25zV2lkdGgiLGVbZS5saW5lSGVpZ2h0PTY3XT0ibGluZUhlaWdodCIsZVtlLmxpbmVOdW1iZXJzPTY4XT0ibGluZU51bWJlcnMiLGVbZS5saW5lTnVtYmVyc01pbkNoYXJzPTY5XT0ibGluZU51bWJlcnNNaW5DaGFycyIsZVtlLmxpbmtlZEVkaXRpbmc9NzBdPSJsaW5rZWRFZGl0aW5nIixlW2UubGlua3M9NzFdPSJsaW5rcyIsZVtlLm1hdGNoQnJhY2tldHM9NzJdPSJtYXRjaEJyYWNrZXRzIixlW2UubWluaW1hcD03M109Im1pbmltYXAiLGVbZS5tb3VzZVN0eWxlPTc0XT0ibW91c2VTdHlsZSIsZVtlLm1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eT03NV09Im1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eSIsZVtlLm1vdXNlV2hlZWxab29tPTc2XT0ibW91c2VXaGVlbFpvb20iLGVbZS5tdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmc9NzddPSJtdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmciLGVbZS5tdWx0aUN1cnNvck1vZGlmaWVyPTc4XT0ibXVsdGlDdXJzb3JNb2RpZmllciIsZVtlLm11bHRpQ3Vyc29yUGFzdGU9NzldPSJtdWx0aUN1cnNvclBhc3RlIixlW2UubXVsdGlDdXJzb3JMaW1pdD04MF09Im11bHRpQ3Vyc29yTGltaXQiLGVbZS5vY2N1cnJlbmNlc0hpZ2hsaWdodD04MV09Im9jY3VycmVuY2VzSGlnaGxpZ2h0IixlW2Uub3ZlcnZpZXdSdWxlckJvcmRlcj04Ml09Im92ZXJ2aWV3UnVsZXJCb3JkZXIiLGVbZS5vdmVydmlld1J1bGVyTGFuZXM9ODNdPSJvdmVydmlld1J1bGVyTGFuZXMiLGVbZS5wYWRkaW5nPTg0XT0icGFkZGluZyIsZVtlLnBhc3RlQXM9ODVdPSJwYXN0ZUFzIixlW2UucGFyYW1ldGVySGludHM9ODZdPSJwYXJhbWV0ZXJIaW50cyIsZVtlLnBlZWtXaWRnZXREZWZhdWx0Rm9jdXM9ODddPSJwZWVrV2lkZ2V0RGVmYXVsdEZvY3VzIixlW2UuZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlaz04OF09ImRlZmluaXRpb25MaW5rT3BlbnNJblBlZWsiLGVbZS5xdWlja1N1Z2dlc3Rpb25zPTg5XT0icXVpY2tTdWdnZXN0aW9ucyIsZVtlLnF1aWNrU3VnZ2VzdGlvbnNEZWxheT05MF09InF1aWNrU3VnZ2VzdGlvbnNEZWxheSIsZVtlLnJlYWRPbmx5PTkxXT0icmVhZE9ubHkiLGVbZS5yZWFkT25seU1lc3NhZ2U9OTJdPSJyZWFkT25seU1lc3NhZ2UiLGVbZS5yZW5hbWVPblR5cGU9OTNdPSJyZW5hbWVPblR5cGUiLGVbZS5yZW5kZXJDb250cm9sQ2hhcmFjdGVycz05NF09InJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzIixlW2UucmVuZGVyRmluYWxOZXdsaW5lPTk1XT0icmVuZGVyRmluYWxOZXdsaW5lIixlW2UucmVuZGVyTGluZUhpZ2hsaWdodD05Nl09InJlbmRlckxpbmVIaWdobGlnaHQiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cz05N109InJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzIixlW2UucmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zPTk4XT0icmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zIixlW2UucmVuZGVyV2hpdGVzcGFjZT05OV09InJlbmRlcldoaXRlc3BhY2UiLGVbZS5yZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nPTEwMF09InJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmciLGVbZS5yb3VuZGVkU2VsZWN0aW9uPTEwMV09InJvdW5kZWRTZWxlY3Rpb24iLGVbZS5ydWxlcnM9MTAyXT0icnVsZXJzIixlW2Uuc2Nyb2xsYmFyPTEwM109InNjcm9sbGJhciIsZVtlLnNjcm9sbEJleW9uZExhc3RDb2x1bW49MTA0XT0ic2Nyb2xsQmV5b25kTGFzdENvbHVtbiIsZVtlLnNjcm9sbEJleW9uZExhc3RMaW5lPTEwNV09InNjcm9sbEJleW9uZExhc3RMaW5lIixlW2Uuc2Nyb2xsUHJlZG9taW5hbnRBeGlzPTEwNl09InNjcm9sbFByZWRvbWluYW50QXhpcyIsZVtlLnNlbGVjdGlvbkNsaXBib2FyZD0xMDddPSJzZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5zZWxlY3Rpb25IaWdobGlnaHQ9MTA4XT0ic2VsZWN0aW9uSGlnaGxpZ2h0IixlW2Uuc2VsZWN0T25MaW5lTnVtYmVycz0xMDldPSJzZWxlY3RPbkxpbmVOdW1iZXJzIixlW2Uuc2hvd0ZvbGRpbmdDb250cm9scz0xMTBdPSJzaG93Rm9sZGluZ0NvbnRyb2xzIixlW2Uuc2hvd1VudXNlZD0xMTFdPSJzaG93VW51c2VkIixlW2Uuc25pcHBldFN1Z2dlc3Rpb25zPTExMl09InNuaXBwZXRTdWdnZXN0aW9ucyIsZVtlLnNtYXJ0U2VsZWN0PTExM109InNtYXJ0U2VsZWN0IixlW2Uuc21vb3RoU2Nyb2xsaW5nPTExNF09InNtb290aFNjcm9sbGluZyIsZVtlLnN0aWNreVNjcm9sbD0xMTVdPSJzdGlja3lTY3JvbGwiLGVbZS5zdGlja3lUYWJTdG9wcz0xMTZdPSJzdGlja3lUYWJTdG9wcyIsZVtlLnN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXI9MTE3XT0ic3RvcFJlbmRlcmluZ0xpbmVBZnRlciIsZVtlLnN1Z2dlc3Q9MTE4XT0ic3VnZ2VzdCIsZVtlLnN1Z2dlc3RGb250U2l6ZT0xMTldPSJzdWdnZXN0Rm9udFNpemUiLGVbZS5zdWdnZXN0TGluZUhlaWdodD0xMjBdPSJzdWdnZXN0TGluZUhlaWdodCIsZVtlLnN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzPTEyMV09InN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzIixlW2Uuc3VnZ2VzdFNlbGVjdGlvbj0xMjJdPSJzdWdnZXN0U2VsZWN0aW9uIixlW2UudGFiQ29tcGxldGlvbj0xMjNdPSJ0YWJDb21wbGV0aW9uIixlW2UudGFiSW5kZXg9MTI0XT0idGFiSW5kZXgiLGVbZS51bmljb2RlSGlnaGxpZ2h0aW5nPTEyNV09InVuaWNvZGVIaWdobGlnaHRpbmciLGVbZS51bnVzdWFsTGluZVRlcm1pbmF0b3JzPTEyNl09InVudXN1YWxMaW5lVGVybWluYXRvcnMiLGVbZS51c2VTaGFkb3dET009MTI3XT0idXNlU2hhZG93RE9NIixlW2UudXNlVGFiU3RvcHM9MTI4XT0idXNlVGFiU3RvcHMiLGVbZS53b3JkQnJlYWs9MTI5XT0id29yZEJyZWFrIixlW2Uud29yZFNlZ21lbnRlckxvY2FsZXM9MTMwXT0id29yZFNlZ21lbnRlckxvY2FsZXMiLGVbZS53b3JkU2VwYXJhdG9ycz0xMzFdPSJ3b3JkU2VwYXJhdG9ycyIsZVtlLndvcmRXcmFwPTEzMl09IndvcmRXcmFwIixlW2Uud29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycz0xMzNdPSJ3b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnM9MTM0XT0id29yZFdyYXBCcmVha0JlZm9yZUNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcENvbHVtbj0xMzVdPSJ3b3JkV3JhcENvbHVtbiIsZVtlLndvcmRXcmFwT3ZlcnJpZGUxPTEzNl09IndvcmRXcmFwT3ZlcnJpZGUxIixlW2Uud29yZFdyYXBPdmVycmlkZTI9MTM3XT0id29yZFdyYXBPdmVycmlkZTIiLGVbZS53cmFwcGluZ0luZGVudD0xMzhdPSJ3cmFwcGluZ0luZGVudCIsZVtlLndyYXBwaW5nU3RyYXRlZ3k9MTM5XT0id3JhcHBpbmdTdHJhdGVneSIsZVtlLnNob3dEZXByZWNhdGVkPTE0MF09InNob3dEZXByZWNhdGVkIixlW2UuaW5sYXlIaW50cz0xNDFdPSJpbmxheUhpbnRzIixlW2UuZWRpdG9yQ2xhc3NOYW1lPTE0Ml09ImVkaXRvckNsYXNzTmFtZSIsZVtlLnBpeGVsUmF0aW89MTQzXT0icGl4ZWxSYXRpbyIsZVtlLnRhYkZvY3VzTW9kZT0xNDRdPSJ0YWJGb2N1c01vZGUiLGVbZS5sYXlvdXRJbmZvPTE0NV09ImxheW91dEluZm8iLGVbZS53cmFwcGluZ0luZm89MTQ2XT0id3JhcHBpbmdJbmZvIixlW2UuZGVmYXVsdENvbG9yRGVjb3JhdG9ycz0xNDddPSJkZWZhdWx0Q29sb3JEZWNvcmF0b3JzIixlW2UuY29sb3JEZWNvcmF0b3JzQWN0aXZhdGVkT249MTQ4XT0iY29sb3JEZWNvcmF0b3JzQWN0aXZhdGVkT24iLGVbZS5pbmxpbmVDb21wbGV0aW9uc0FjY2Vzc2liaWxpdHlWZXJib3NlPTE0OV09ImlubGluZUNvbXBsZXRpb25zQWNjZXNzaWJpbGl0eVZlcmJvc2UifSkobHJ8fChscj17fSkpO3ZhciB1cjsoZnVuY3Rpb24oZSl7ZVtlLlRleHREZWZpbmVkPTBdPSJUZXh0RGVmaW5lZCIsZVtlLkxGPTFdPSJMRiIsZVtlLkNSTEY9Ml09IkNSTEYifSkodXJ8fCh1cj17fSkpO3ZhciBjcjsoZnVuY3Rpb24oZSl7ZVtlLkxGPTBdPSJMRiIsZVtlLkNSTEY9MV09IkNSTEYifSkoY3J8fChjcj17fSkpO3ZhciBocjsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTNdPSJSaWdodCJ9KShocnx8KGhyPXt9KSk7dmFyIGRyOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkluZGVudD0xXT0iSW5kZW50IixlW2UuSW5kZW50T3V0ZGVudD0yXT0iSW5kZW50T3V0ZGVudCIsZVtlLk91dGRlbnQ9M109Ik91dGRlbnQifSkoZHJ8fChkcj17fSkpO3ZhciBtcjsoZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KShtcnx8KG1yPXt9KSk7dmFyIGZyOyhmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0pKGZyfHwoZnI9e30pKTt2YXIgcHI7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KShwcnx8KHByPXt9KSk7dmFyIGdyOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KShncnx8KGdyPXt9KSk7dmFyIEJuOyhmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIsZVtlLlRhYj0yXT0iVGFiIixlW2UuRW50ZXI9M109IkVudGVyIixlW2UuU2hpZnQ9NF09IlNoaWZ0IixlW2UuQ3RybD01XT0iQ3RybCIsZVtlLkFsdD02XT0iQWx0IixlW2UuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIsZVtlLkNhcHNMb2NrPThdPSJDYXBzTG9jayIsZVtlLkVzY2FwZT05XT0iRXNjYXBlIixlW2UuU3BhY2U9MTBdPSJTcGFjZSIsZVtlLlBhZ2VVcD0xMV09IlBhZ2VVcCIsZVtlLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLGVbZS5FbmQ9MTNdPSJFbmQiLGVbZS5Ib21lPTE0XT0iSG9tZSIsZVtlLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIsZVtlLlVwQXJyb3c9MTZdPSJVcEFycm93IixlW2UuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLGVbZS5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLGVbZS5JbnNlcnQ9MTldPSJJbnNlcnQiLGVbZS5EZWxldGU9MjBdPSJEZWxldGUiLGVbZS5EaWdpdDA9MjFdPSJEaWdpdDAiLGVbZS5EaWdpdDE9MjJdPSJEaWdpdDEiLGVbZS5EaWdpdDI9MjNdPSJEaWdpdDIiLGVbZS5EaWdpdDM9MjRdPSJEaWdpdDMiLGVbZS5EaWdpdDQ9MjVdPSJEaWdpdDQiLGVbZS5EaWdpdDU9MjZdPSJEaWdpdDUiLGVbZS5EaWdpdDY9MjddPSJEaWdpdDYiLGVbZS5EaWdpdDc9MjhdPSJEaWdpdDciLGVbZS5EaWdpdDg9MjldPSJEaWdpdDgiLGVbZS5EaWdpdDk9MzBdPSJEaWdpdDkiLGVbZS5LZXlBPTMxXT0iS2V5QSIsZVtlLktleUI9MzJdPSJLZXlCIixlW2UuS2V5Qz0zM109IktleUMiLGVbZS5LZXlEPTM0XT0iS2V5RCIsZVtlLktleUU9MzVdPSJLZXlFIixlW2UuS2V5Rj0zNl09IktleUYiLGVbZS5LZXlHPTM3XT0iS2V5RyIsZVtlLktleUg9MzhdPSJLZXlIIixlW2UuS2V5ST0zOV09IktleUkiLGVbZS5LZXlKPTQwXT0iS2V5SiIsZVtlLktleUs9NDFdPSJLZXlLIixlW2UuS2V5TD00Ml09IktleUwiLGVbZS5LZXlNPTQzXT0iS2V5TSIsZVtlLktleU49NDRdPSJLZXlOIixlW2UuS2V5Tz00NV09IktleU8iLGVbZS5LZXlQPTQ2XT0iS2V5UCIsZVtlLktleVE9NDddPSJLZXlRIixlW2UuS2V5Uj00OF09IktleVIiLGVbZS5LZXlTPTQ5XT0iS2V5UyIsZVtlLktleVQ9NTBdPSJLZXlUIixlW2UuS2V5VT01MV09IktleVUiLGVbZS5LZXlWPTUyXT0iS2V5ViIsZVtlLktleVc9NTNdPSJLZXlXIixlW2UuS2V5WD01NF09IktleVgiLGVbZS5LZXlZPTU1XT0iS2V5WSIsZVtlLktleVo9NTZdPSJLZXlaIixlW2UuTWV0YT01N109Ik1ldGEiLGVbZS5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixlW2UuRjE9NTldPSJGMSIsZVtlLkYyPTYwXT0iRjIiLGVbZS5GMz02MV09IkYzIixlW2UuRjQ9NjJdPSJGNCIsZVtlLkY1PTYzXT0iRjUiLGVbZS5GNj02NF09IkY2IixlW2UuRjc9NjVdPSJGNyIsZVtlLkY4PTY2XT0iRjgiLGVbZS5GOT02N109IkY5IixlW2UuRjEwPTY4XT0iRjEwIixlW2UuRjExPTY5XT0iRjExIixlW2UuRjEyPTcwXT0iRjEyIixlW2UuRjEzPTcxXT0iRjEzIixlW2UuRjE0PTcyXT0iRjE0IixlW2UuRjE1PTczXT0iRjE1IixlW2UuRjE2PTc0XT0iRjE2IixlW2UuRjE3PTc1XT0iRjE3IixlW2UuRjE4PTc2XT0iRjE4IixlW2UuRjE5PTc3XT0iRjE5IixlW2UuRjIwPTc4XT0iRjIwIixlW2UuRjIxPTc5XT0iRjIxIixlW2UuRjIyPTgwXT0iRjIyIixlW2UuRjIzPTgxXT0iRjIzIixlW2UuRjI0PTgyXT0iRjI0IixlW2UuTnVtTG9jaz04M109Ik51bUxvY2siLGVbZS5TY3JvbGxMb2NrPTg0XT0iU2Nyb2xsTG9jayIsZVtlLlNlbWljb2xvbj04NV09IlNlbWljb2xvbiIsZVtlLkVxdWFsPTg2XT0iRXF1YWwiLGVbZS5Db21tYT04N109IkNvbW1hIixlW2UuTWludXM9ODhdPSJNaW51cyIsZVtlLlBlcmlvZD04OV09IlBlcmlvZCIsZVtlLlNsYXNoPTkwXT0iU2xhc2giLGVbZS5CYWNrcXVvdGU9OTFdPSJCYWNrcXVvdGUiLGVbZS5CcmFja2V0TGVmdD05Ml09IkJyYWNrZXRMZWZ0IixlW2UuQmFja3NsYXNoPTkzXT0iQmFja3NsYXNoIixlW2UuQnJhY2tldFJpZ2h0PTk0XT0iQnJhY2tldFJpZ2h0IixlW2UuUXVvdGU9OTVdPSJRdW90ZSIsZVtlLk9FTV84PTk2XT0iT0VNXzgiLGVbZS5JbnRsQmFja3NsYXNoPTk3XT0iSW50bEJhY2tzbGFzaCIsZVtlLk51bXBhZDA9OThdPSJOdW1wYWQwIixlW2UuTnVtcGFkMT05OV09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTEwMF09Ik51bXBhZDIiLGVbZS5OdW1wYWQzPTEwMV09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTEwMl09Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTEwM109Ik51bXBhZDUiLGVbZS5OdW1wYWQ2PTEwNF09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwNV09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwNl09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwN109Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDhdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDldPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTExMF09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMTFdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTEyXT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMTNdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTE0XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTVdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTZdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExN109IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTE4XT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTldPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTEyMF09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMjFdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTEyMl09IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTIzXT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMjRdPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjVdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTI2XT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTI3XT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjhdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI5XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTMwXT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEzMV09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEzMl09Ik1BWF9WQUxVRSJ9KShCbnx8KEJuPXt9KSk7dmFyIHFuOyhmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0pKHFufHwocW49e30pKTt2YXIgT247KGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0pKE9ufHwoT249e30pKTt2YXIgYnI7KGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0pKGJyfHwoYnI9e30pKTt2YXIgdnI7KGZ1bmN0aW9uKGUpe2VbZS5Ob3JtYWw9MV09Ik5vcm1hbCIsZVtlLlVuZGVybGluZWQ9Ml09IlVuZGVybGluZWQifSkodnJ8fCh2cj17fSkpO3ZhciBfcjsoZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09IlVOS05PV04iLGVbZS5URVhUQVJFQT0xXT0iVEVYVEFSRUEiLGVbZS5HVVRURVJfR0xZUEhfTUFSR0lOPTJdPSJHVVRURVJfR0xZUEhfTUFSR0lOIixlW2UuR1VUVEVSX0xJTkVfTlVNQkVSUz0zXT0iR1VUVEVSX0xJTkVfTlVNQkVSUyIsZVtlLkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TPTRdPSJHVVRURVJfTElORV9ERUNPUkFUSU9OUyIsZVtlLkdVVFRFUl9WSUVXX1pPTkU9NV09IkdVVFRFUl9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1RFWFQ9Nl09IkNPTlRFTlRfVEVYVCIsZVtlLkNPTlRFTlRfRU1QVFk9N109IkNPTlRFTlRfRU1QVFkiLGVbZS5DT05URU5UX1ZJRVdfWk9ORT04XT0iQ09OVEVOVF9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1dJREdFVD05XT0iQ09OVEVOVF9XSURHRVQiLGVbZS5PVkVSVklFV19SVUxFUj0xMF09Ik9WRVJWSUVXX1JVTEVSIixlW2UuU0NST0xMQkFSPTExXT0iU0NST0xMQkFSIixlW2UuT1ZFUkxBWV9XSURHRVQ9MTJdPSJPVkVSTEFZX1dJREdFVCIsZVtlLk9VVFNJREVfRURJVE9SPTEzXT0iT1VUU0lERV9FRElUT1IifSkoX3J8fChfcj17fSkpO3ZhciB3cjsoZnVuY3Rpb24oZSl7ZVtlLkFJR2VuZXJhdGVkPTFdPSJBSUdlbmVyYXRlZCJ9KSh3cnx8KHdyPXt9KSk7dmFyIHlyOyhmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0pKHlyfHwoeXI9e30pKTt2YXIgeHI7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0pKHhyfHwoeHI9e30pKTt2YXIgVHI7KGZ1bmN0aW9uKGUpe2VbZS5Xb3JkPTBdPSJXb3JkIixlW2UuTGluZT0xXT0iTGluZSIsZVtlLlN1Z2dlc3Q9Ml09IlN1Z2dlc3QifSkoVHJ8fChUcj17fSkpO3ZhciBrcjsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MF09IkxlZnQiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5Ob25lPTJdPSJOb25lIixlW2UuTGVmdE9mSW5qZWN0ZWRUZXh0PTNdPSJMZWZ0T2ZJbmplY3RlZFRleHQiLGVbZS5SaWdodE9mSW5qZWN0ZWRUZXh0PTRdPSJSaWdodE9mSW5qZWN0ZWRUZXh0In0pKGtyfHwoa3I9e30pKTt2YXIgQXI7KGZ1bmN0aW9uKGUpe2VbZS5PZmY9MF09Ik9mZiIsZVtlLk9uPTFdPSJPbiIsZVtlLlJlbGF0aXZlPTJdPSJSZWxhdGl2ZSIsZVtlLkludGVydmFsPTNdPSJJbnRlcnZhbCIsZVtlLkN1c3RvbT00XT0iQ3VzdG9tIn0pKEFyfHwoQXI9e30pKTt2YXIgU3I7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuVGV4dD0xXT0iVGV4dCIsZVtlLkJsb2Nrcz0yXT0iQmxvY2tzIn0pKFNyfHwoU3I9e30pKTt2YXIgTHI7KGZ1bmN0aW9uKGUpe2VbZS5TbW9vdGg9MF09IlNtb290aCIsZVtlLkltbWVkaWF0ZT0xXT0iSW1tZWRpYXRlIn0pKExyfHwoTHI9e30pKTt2YXIgQ3I7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvPTFdPSJBdXRvIixlW2UuSGlkZGVuPTJdPSJIaWRkZW4iLGVbZS5WaXNpYmxlPTNdPSJWaXNpYmxlIn0pKENyfHwoQ3I9e30pKTt2YXIgVm47KGZ1bmN0aW9uKGUpe2VbZS5MVFI9MF09IkxUUiIsZVtlLlJUTD0xXT0iUlRMIn0pKFZufHwoVm49e30pKTt2YXIgRXI7KGZ1bmN0aW9uKGUpe2UuT2ZmPSJvZmYiLGUuT25Db2RlPSJvbkNvZGUiLGUuT249Im9uIn0pKEVyfHwoRXI9e30pKTt2YXIgUnI7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0pKFJyfHwoUnI9e30pKTt2YXIgTXI7KGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KShNcnx8KE1yPXt9KSk7dmFyIERyOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KShEcnx8KERyPXt9KSk7dmFyIE5yOyhmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0pKE5yfHwoTnI9e30pKTt2YXIgSXI7KGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifSkoSXJ8fChJcj17fSkpO3ZhciB6cjsoZnVuY3Rpb24oZSl7ZVtlLkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXM9MF09IkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5OZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXM9MV09Ik5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmU9Ml09Ikdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmUiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXI9M109Ikdyb3dzT25seVdoZW5UeXBpbmdBZnRlciJ9KSh6cnx8KHpyPXt9KSk7dmFyIEhyOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlNhbWU9MV09IlNhbWUiLGVbZS5JbmRlbnQ9Ml09IkluZGVudCIsZVtlLkRlZXBJbmRlbnQ9M109IkRlZXBJbmRlbnQifSkoSHJ8fChIcj17fSkpO2NsYXNzIGt0e3N0YXRpYyBjaG9yZCh0LG4pe3JldHVybiBxbyh0LG4pfX1rdC5DdHJsQ21kPTIwNDgsa3QuU2hpZnQ9MTAyNCxrdC5BbHQ9NTEyLGt0LldpbkN0cmw9MjU2O2Z1bmN0aW9uIFhvKCl7cmV0dXJue2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTpXbyxFbWl0dGVyOkFlLEtleUNvZGU6Qm4sS2V5TW9kOmt0LFBvc2l0aW9uOk5lLFJhbmdlOm9lLFNlbGVjdGlvbjp2ZSxTZWxlY3Rpb25EaXJlY3Rpb246Vm4sTWFya2VyU2V2ZXJpdHk6cW4sTWFya2VyVGFnOk9uLFVyaTpNbixUb2tlbjokb319dmFyIFVyO2NsYXNzIEpve2NvbnN0cnVjdG9yKCl7dGhpc1tVcl09IkxpbmtlZE1hcCIsdGhpcy5fbWFwPW5ldyBNYXAsdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDAsdGhpcy5fc2l6ZT0wLHRoaXMuX3N0YXRlPTB9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKSx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGUrK31pc0VtcHR5KCl7cmV0dXJuIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9Z2V0IGZpcnN0KCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5faGVhZCk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LnZhbHVlfWdldCBsYXN0KCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5fdGFpbCk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LnZhbHVlfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX1nZXQodCxuPTApe2NvbnN0IGk9dGhpcy5fbWFwLmdldCh0KTtpZihpKXJldHVybiBuIT09MCYmdGhpcy50b3VjaChpLG4pLGkudmFsdWV9c2V0KHQsbixpPTApe2xldCByPXRoaXMuX21hcC5nZXQodCk7aWYocilyLnZhbHVlPW4saSE9PTAmJnRoaXMudG91Y2gocixpKTtlbHNle3N3aXRjaChyPXtrZXk6dCx2YWx1ZTpuLG5leHQ6dm9pZCAwLHByZXZpb3VzOnZvaWQgMH0saSl7Y2FzZSAwOnRoaXMuYWRkSXRlbUxhc3Qocik7YnJlYWs7Y2FzZSAxOnRoaXMuYWRkSXRlbUZpcnN0KHIpO2JyZWFrO2Nhc2UgMjp0aGlzLmFkZEl0ZW1MYXN0KHIpO2JyZWFrO2RlZmF1bHQ6dGhpcy5hZGRJdGVtTGFzdChyKTticmVha310aGlzLl9tYXAuc2V0KHQsciksdGhpcy5fc2l6ZSsrfXJldHVybiB0aGlzfWRlbGV0ZSh0KXtyZXR1cm4hIXRoaXMucmVtb3ZlKHQpfXJlbW92ZSh0KXtjb25zdCBuPXRoaXMuX21hcC5nZXQodCk7aWYobilyZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZSh0KSx0aGlzLnJlbW92ZUl0ZW0obiksdGhpcy5fc2l6ZS0tLG4udmFsdWV9c2hpZnQoKXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpcmV0dXJuO2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2NvbnN0IHQ9dGhpcy5faGVhZDtyZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZSh0LmtleSksdGhpcy5yZW1vdmVJdGVtKHQpLHRoaXMuX3NpemUtLSx0LnZhbHVlfWZvckVhY2godCxuKXtjb25zdCBpPXRoaXMuX3N0YXRlO2xldCByPXRoaXMuX2hlYWQ7Zm9yKDtyOyl7aWYobj90LmJpbmQobikoci52YWx1ZSxyLmtleSx0aGlzKTp0KHIudmFsdWUsci5rZXksdGhpcyksdGhpcy5fc3RhdGUhPT1pKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO3I9ci5uZXh0fX1rZXlzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IGk9dGhpcy5faGVhZDtjb25zdCByPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiByfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKGkpe2NvbnN0IGE9e3ZhbHVlOmkua2V5LGRvbmU6ITF9O3JldHVybiBpPWkubmV4dCxhfWVsc2UgcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfXZhbHVlcygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCBpPXRoaXMuX2hlYWQ7Y29uc3Qgcj17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gcn0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihpKXtjb25zdCBhPXt2YWx1ZTppLnZhbHVlLGRvbmU6ITF9O3JldHVybiBpPWkubmV4dCxhfWVsc2UgcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfWVudHJpZXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgaT10aGlzLl9oZWFkO2NvbnN0IHI9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHJ9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYoaSl7Y29uc3QgYT17dmFsdWU6W2kua2V5LGkudmFsdWVdLGRvbmU6ITF9O3JldHVybiBpPWkubmV4dCxhfWVsc2UgcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX19O3JldHVybiByfVsoVXI9U3ltYm9sLnRvU3RyaW5nVGFnLFN5bWJvbC5pdGVyYXRvcildKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfXRyaW1PbGQodCl7aWYodD49dGhpcy5zaXplKXJldHVybjtpZih0PT09MCl7dGhpcy5jbGVhcigpO3JldHVybn1sZXQgbj10aGlzLl9oZWFkLGk9dGhpcy5zaXplO2Zvcig7biYmaT50Oyl0aGlzLl9tYXAuZGVsZXRlKG4ua2V5KSxuPW4ubmV4dCxpLS07dGhpcy5faGVhZD1uLHRoaXMuX3NpemU9aSxuJiYobi5wcmV2aW91cz12b2lkIDApLHRoaXMuX3N0YXRlKyt9YWRkSXRlbUZpcnN0KHQpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbCl0aGlzLl90YWlsPXQ7ZWxzZSBpZih0aGlzLl9oZWFkKXQubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9dDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dGhpcy5faGVhZD10LHRoaXMuX3N0YXRlKyt9YWRkSXRlbUxhc3QodCl7aWYoIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsKXRoaXMuX2hlYWQ9dDtlbHNlIGlmKHRoaXMuX3RhaWwpdC5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD10O2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0aGlzLl90YWlsPXQsdGhpcy5fc3RhdGUrK31yZW1vdmVJdGVtKHQpe2lmKHQ9PT10aGlzLl9oZWFkJiZ0PT09dGhpcy5fdGFpbCl0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMDtlbHNlIGlmKHQ9PT10aGlzLl9oZWFkKXtpZighdC5uZXh0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dC5uZXh0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPXQubmV4dH1lbHNlIGlmKHQ9PT10aGlzLl90YWlsKXtpZighdC5wcmV2aW91cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3QucHJldmlvdXMubmV4dD12b2lkIDAsdGhpcy5fdGFpbD10LnByZXZpb3VzfWVsc2V7Y29uc3Qgbj10Lm5leHQsaT10LnByZXZpb3VzO2lmKCFufHwhaSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO24ucHJldmlvdXM9aSxpLm5leHQ9bn10Lm5leHQ9dm9pZCAwLHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX3N0YXRlKyt9dG91Y2godCxuKXtpZighdGhpcy5faGVhZHx8IXRoaXMuX3RhaWwpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtpZighKG4hPT0xJiZuIT09Mikpe2lmKG49PT0xKXtpZih0PT09dGhpcy5faGVhZClyZXR1cm47Y29uc3QgaT10Lm5leHQscj10LnByZXZpb3VzO3Q9PT10aGlzLl90YWlsPyhyLm5leHQ9dm9pZCAwLHRoaXMuX3RhaWw9cik6KGkucHJldmlvdXM9cixyLm5leHQ9aSksdC5wcmV2aW91cz12b2lkIDAsdC5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz10LHRoaXMuX2hlYWQ9dCx0aGlzLl9zdGF0ZSsrfWVsc2UgaWYobj09PTIpe2lmKHQ9PT10aGlzLl90YWlsKXJldHVybjtjb25zdCBpPXQubmV4dCxyPXQucHJldmlvdXM7dD09PXRoaXMuX2hlYWQ/KGkucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9aSk6KGkucHJldmlvdXM9cixyLm5leHQ9aSksdC5uZXh0PXZvaWQgMCx0LnByZXZpb3VzPXRoaXMuX3RhaWwsdGhpcy5fdGFpbC5uZXh0PXQsdGhpcy5fdGFpbD10LHRoaXMuX3N0YXRlKyt9fX10b0pTT04oKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKG4saSk9Pnt0LnB1c2goW2ksbl0pfSksdH1mcm9tSlNPTih0KXt0aGlzLmNsZWFyKCk7Zm9yKGNvbnN0W24saV1vZiB0KXRoaXMuc2V0KG4saSl9fWNsYXNzIFFvIGV4dGVuZHMgSm97Y29uc3RydWN0b3IodCxuPTEpe3N1cGVyKCksdGhpcy5fbGltaXQ9dCx0aGlzLl9yYXRpbz1NYXRoLm1pbihNYXRoLm1heCgwLG4pLDEpfWdldCBsaW1pdCgpe3JldHVybiB0aGlzLl9saW1pdH1zZXQgbGltaXQodCl7dGhpcy5fbGltaXQ9dCx0aGlzLmNoZWNrVHJpbSgpfWdldCh0LG49Mil7cmV0dXJuIHN1cGVyLmdldCh0LG4pfXBlZWsodCl7cmV0dXJuIHN1cGVyLmdldCh0LDApfXNldCh0LG4pe3JldHVybiBzdXBlci5zZXQodCxuLDIpLHRoaXMuY2hlY2tUcmltKCksdGhpc31jaGVja1RyaW0oKXt0aGlzLnNpemU+dGhpcy5fbGltaXQmJnRoaXMudHJpbU9sZChNYXRoLnJvdW5kKHRoaXMuX2xpbWl0KnRoaXMuX3JhdGlvKSl9fWNsYXNzIFlve2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1hZGQodCxuKXtsZXQgaT10aGlzLm1hcC5nZXQodCk7aXx8KGk9bmV3IFNldCx0aGlzLm1hcC5zZXQodCxpKSksaS5hZGQobil9ZGVsZXRlKHQsbil7Y29uc3QgaT10aGlzLm1hcC5nZXQodCk7aSYmKGkuZGVsZXRlKG4pLGkuc2l6ZT09PTAmJnRoaXMubWFwLmRlbGV0ZSh0KSl9Zm9yRWFjaCh0LG4pe2NvbnN0IGk9dGhpcy5tYXAuZ2V0KHQpO2kmJmkuZm9yRWFjaChuKX1nZXQodCl7Y29uc3Qgbj10aGlzLm1hcC5nZXQodCk7cmV0dXJuIG58fG5ldyBTZXR9fW5ldyBRbygxMCk7dmFyIFdyOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KShXcnx8KFdyPXt9KSk7dmFyIEZyOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9M109IlJpZ2h0In0pKEZyfHwoRnI9e30pKTt2YXIgUHI7KGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifSkoUHJ8fChQcj17fSkpO2Z1bmN0aW9uIFpvKGUsdCxuLGkscil7aWYoaT09PTApcmV0dXJuITA7Y29uc3QgYT10LmNoYXJDb2RlQXQoaS0xKTtpZihlLmdldChhKSE9PTB8fGE9PT0xM3x8YT09PTEwKXJldHVybiEwO2lmKHI+MCl7Y29uc3Qgcz10LmNoYXJDb2RlQXQoaSk7aWYoZS5nZXQocykhPT0wKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEtvKGUsdCxuLGkscil7aWYoaStyPT09bilyZXR1cm4hMDtjb25zdCBhPXQuY2hhckNvZGVBdChpK3IpO2lmKGUuZ2V0KGEpIT09MHx8YT09PTEzfHxhPT09MTApcmV0dXJuITA7aWYocj4wKXtjb25zdCBzPXQuY2hhckNvZGVBdChpK3ItMSk7aWYoZS5nZXQocykhPT0wKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGVsKGUsdCxuLGkscil7cmV0dXJuIFpvKGUsdCxuLGkscikmJktvKGUsdCxuLGkscil9Y2xhc3MgdGx7Y29uc3RydWN0b3IodCxuKXt0aGlzLl93b3JkU2VwYXJhdG9ycz10LHRoaXMuX3NlYXJjaFJlZ2V4PW4sdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1yZXNldCh0KXt0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfW5leHQodCl7Y29uc3Qgbj10Lmxlbmd0aDtsZXQgaTtkb3tpZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4K3RoaXMuX3ByZXZNYXRjaExlbmd0aD09PW58fChpPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWModCksIWkpKXJldHVybiBudWxsO2NvbnN0IHI9aS5pbmRleCxhPWlbMF0ubGVuZ3RoO2lmKHI9PT10aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4JiZhPT09dGhpcy5fcHJldk1hdGNoTGVuZ3RoKXtpZihhPT09MCl7VnModCxuLHRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCk+NjU1MzU/dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0yOnRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9MTtjb250aW51ZX1yZXR1cm4gbnVsbH1pZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PXIsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPWEsIXRoaXMuX3dvcmRTZXBhcmF0b3JzfHxlbCh0aGlzLl93b3JkU2VwYXJhdG9ycyx0LG4scixhKSlyZXR1cm4gaX13aGlsZShpKTtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbmwoZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBZdChlKXtpZighZSgpKXtkZWJ1Z2dlcjtlKCksbWkobmV3IFVlKCJBc3NlcnRpb24gRmFpbGVkIikpfX1mdW5jdGlvbiBCcihlLHQpe2xldCBuPTA7Zm9yKDtuPGUubGVuZ3RoLTE7KXtjb25zdCBpPWVbbl0scj1lW24rMV07aWYoIXQoaSxyKSlyZXR1cm4hMTtuKyt9cmV0dXJuITB9Y2xhc3MgaWx7c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyh0LG4saSl7Y29uc3Qgcj1pP2kuc3RhcnRMaW5lTnVtYmVyOjEsYT1pP2kuZW5kTGluZU51bWJlcjp0LmdldExpbmVDb3VudCgpLHM9bmV3IHFyKG4pLG89cy5nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCk7bGV0IGw7bz09PSJhbGxOb25CYXNpY0FzY2lpIj9sPW5ldyBSZWdFeHAoIlteXFx0XFxuXFxyXFx4MjAtXFx4N0VdIiwiZyIpOmw9bmV3IFJlZ0V4cChgJHtybChBcnJheS5mcm9tKG8pKX1gLCJnIik7Y29uc3QgdT1uZXcgdGwobnVsbCxsKSxjPVtdO2xldCBkPSExLG0sZj0wLGI9MCxwPTA7ZTpmb3IobGV0IHc9cix4PWE7dzw9eDt3Kyspe2NvbnN0IF89dC5nZXRMaW5lQ29udGVudCh3KSx5PV8ubGVuZ3RoO3UucmVzZXQoMCk7ZG8gaWYobT11Lm5leHQoXyksbSl7bGV0IEU9bS5pbmRleCxSPW0uaW5kZXgrbVswXS5sZW5ndGg7aWYoRT4wKXtjb25zdCBUPV8uY2hhckNvZGVBdChFLTEpO0NuKFQpJiZFLS19aWYoUisxPHkpe2NvbnN0IFQ9Xy5jaGFyQ29kZUF0KFItMSk7Q24oVCkmJlIrK31jb25zdCBQPV8uc3Vic3RyaW5nKEUsUik7bGV0IHY9SW4oRSsxLHppLF8sMCk7diYmdi5lbmRDb2x1bW48PUUrMSYmKHY9bnVsbCk7Y29uc3QgZz1zLnNob3VsZEhpZ2hsaWdodE5vbkJhc2ljQVNDSUkoUCx2P3Yud29yZDpudWxsKTtpZihnIT09MCl7aWYoZz09PTM/ZisrOmc9PT0yP2IrKzpnPT09MT9wKys6bmwoKSxjLmxlbmd0aD49MWUzKXtkPSEwO2JyZWFrIGV9Yy5wdXNoKG5ldyBvZSh3LEUrMSx3LFIrMSkpfX13aGlsZShtKX1yZXR1cm57cmFuZ2VzOmMsaGFzTW9yZTpkLGFtYmlndW91c0NoYXJhY3RlckNvdW50OmYsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6Yixub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6cH19c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKHQsbil7Y29uc3QgaT1uZXcgcXIobik7c3dpdGNoKGkuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3QgYT10LmNvZGVQb2ludEF0KDApLHM9aS5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKGEpLG89S2UuZ2V0TG9jYWxlcygpLmZpbHRlcihsPT4hS2UuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4ubi5hbGxvd2VkTG9jYWxlcyxsXSkpLmlzQW1iaWd1b3VzKGEpKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KHMpLG5vdEFtYmlndW91c0luTG9jYWxlczpvfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX1mdW5jdGlvbiBybChlLHQpe3JldHVybmBbJHtXcyhlLm1hcChpPT5TdHJpbmcuZnJvbUNvZGVQb2ludChpKSkuam9pbigiIikpfV1gfWNsYXNzIHFye2NvbnN0cnVjdG9yKHQpe3RoaXMub3B0aW9ucz10LHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldCh0LmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9S2UuZ2V0SW5zdGFuY2UobmV3IFNldCh0LmFsbG93ZWRMb2NhbGVzKSl9Z2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpe2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiJhbGxOb25CYXNpY0FzY2lpIjtjb25zdCB0PW5ldyBTZXQ7aWYodGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMpZm9yKGNvbnN0IG4gb2YgUGUuY29kZVBvaW50cylPcihTdHJpbmcuZnJvbUNvZGVQb2ludChuKSl8fHQuYWRkKG4pO2lmKHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzKWZvcihjb25zdCBuIG9mIHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpKXQuYWRkKG4pO2Zvcihjb25zdCBuIG9mIHRoaXMuYWxsb3dlZENvZGVQb2ludHMpdC5kZWxldGUobik7cmV0dXJuIHR9c2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG4pe2NvbnN0IGk9dC5jb2RlUG9pbnRBdCgwKTtpZih0aGlzLmFsbG93ZWRDb2RlUG9pbnRzLmhhcyhpKSlyZXR1cm4gMDtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4gMTtsZXQgcj0hMSxhPSExO2lmKG4pZm9yKGNvbnN0IHMgb2Ygbil7Y29uc3Qgbz1zLmNvZGVQb2ludEF0KDApLGw9R3Mocyk7cj1yfHxsLCFsJiYhdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKG8pJiYhUGUuaXNJbnZpc2libGVDaGFyYWN0ZXIobykmJihhPSEwKX1yZXR1cm4hciYmYT8wOnRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzJiYhT3IodCkmJlBlLmlzSW52aXNpYmxlQ2hhcmFjdGVyKGkpPzI6dGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMmJnRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhpKT8zOjB9fWZ1bmN0aW9uIE9yKGUpe3JldHVybiBlPT09IiAifHxlPT09YApgfHxlPT09IgkifWNsYXNzIFp0e2NvbnN0cnVjdG9yKHQsbixpKXt0aGlzLmNoYW5nZXM9dCx0aGlzLm1vdmVzPW4sdGhpcy5oaXRUaW1lb3V0PWl9fWNsYXNzIGFse2NvbnN0cnVjdG9yKHQsbil7dGhpcy5saW5lUmFuZ2VNYXBwaW5nPXQsdGhpcy5jaGFuZ2VzPW59fWNsYXNzICR7c3RhdGljIGFkZFJhbmdlKHQsbil7bGV0IGk9MDtmb3IoO2k8bi5sZW5ndGgmJm5baV0uZW5kRXhjbHVzaXZlPHQuc3RhcnQ7KWkrKztsZXQgcj1pO2Zvcig7cjxuLmxlbmd0aCYmbltyXS5zdGFydDw9dC5lbmRFeGNsdXNpdmU7KXIrKztpZihpPT09ciluLnNwbGljZShpLDAsdCk7ZWxzZXtjb25zdCBhPU1hdGgubWluKHQuc3RhcnQsbltpXS5zdGFydCkscz1NYXRoLm1heCh0LmVuZEV4Y2x1c2l2ZSxuW3ItMV0uZW5kRXhjbHVzaXZlKTtuLnNwbGljZShpLHItaSxuZXcgJChhLHMpKX19c3RhdGljIHRyeUNyZWF0ZSh0LG4pe2lmKCEodD5uKSlyZXR1cm4gbmV3ICQodCxuKX1zdGF0aWMgb2ZMZW5ndGgodCl7cmV0dXJuIG5ldyAkKDAsdCl9c3RhdGljIG9mU3RhcnRBbmRMZW5ndGgodCxuKXtyZXR1cm4gbmV3ICQodCx0K24pfWNvbnN0cnVjdG9yKHQsbil7aWYodGhpcy5zdGFydD10LHRoaXMuZW5kRXhjbHVzaXZlPW4sdD5uKXRocm93IG5ldyBVZShgSW52YWxpZCByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCl9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydD09PXRoaXMuZW5kRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgJCh0aGlzLnN0YXJ0K3QsdGhpcy5lbmRFeGNsdXNpdmUrdCl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydCt0LHRoaXMuZW5kRXhjbHVzaXZlKX1kZWx0YUVuZCh0KXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSt0KX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kRXhjbHVzaXZlLXRoaXMuc3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydH0sICR7dGhpcy5lbmRFeGNsdXNpdmV9KWB9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuc3RhcnQ8PXQmJnQ8dGhpcy5lbmRFeGNsdXNpdmV9am9pbih0KXtyZXR1cm4gbmV3ICQoTWF0aC5taW4odGhpcy5zdGFydCx0LnN0YXJ0KSxNYXRoLm1heCh0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSkpfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnQsdC5zdGFydCksaT1NYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSk7aWYobjw9aSlyZXR1cm4gbmV3ICQobixpKX1pbnRlcnNlY3RzKHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydCx0LnN0YXJ0KSxpPU1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLHQuZW5kRXhjbHVzaXZlKTtyZXR1cm4gbjxpfWlzQmVmb3JlKHQpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZTw9dC5zdGFydH1pc0FmdGVyKHQpe3JldHVybiB0aGlzLnN0YXJ0Pj10LmVuZEV4Y2x1c2l2ZX1zbGljZSh0KXtyZXR1cm4gdC5zbGljZSh0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlKX1zdWJzdHJpbmcodCl7cmV0dXJuIHQuc3Vic3RyaW5nKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUpfWNsaXAodCl7aWYodGhpcy5pc0VtcHR5KXRocm93IG5ldyBVZShgSW52YWxpZCBjbGlwcGluZyByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCk7cmV0dXJuIE1hdGgubWF4KHRoaXMuc3RhcnQsTWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUtMSx0KSl9Y2xpcEN5Y2xpYyh0KXtpZih0aGlzLmlzRW1wdHkpdGhyb3cgbmV3IFVlKGBJbnZhbGlkIGNsaXBwaW5nIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKTtyZXR1cm4gdDx0aGlzLnN0YXJ0P3RoaXMuZW5kRXhjbHVzaXZlLSh0aGlzLnN0YXJ0LXQpJXRoaXMubGVuZ3RoOnQ+PXRoaXMuZW5kRXhjbHVzaXZlP3RoaXMuc3RhcnQrKHQtdGhpcy5zdGFydCkldGhpcy5sZW5ndGg6dH1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0O248dGhpcy5lbmRFeGNsdXNpdmU7bisrKXQobil9fWZ1bmN0aW9uIGZ0KGUsdCl7Y29uc3Qgbj1BdChlLHQpO3JldHVybiBuPT09LTE/dm9pZCAwOmVbbl19ZnVuY3Rpb24gQXQoZSx0LG49MCxpPWUubGVuZ3RoKXtsZXQgcj1uLGE9aTtmb3IoO3I8YTspe2NvbnN0IHM9TWF0aC5mbG9vcigocithKS8yKTt0KGVbc10pP3I9cysxOmE9c31yZXR1cm4gci0xfWZ1bmN0aW9uIHNsKGUsdCl7Y29uc3Qgbj1qbihlLHQpO3JldHVybiBuPT09ZS5sZW5ndGg/dm9pZCAwOmVbbl19ZnVuY3Rpb24gam4oZSx0LG49MCxpPWUubGVuZ3RoKXtsZXQgcj1uLGE9aTtmb3IoO3I8YTspe2NvbnN0IHM9TWF0aC5mbG9vcigocithKS8yKTt0KGVbc10pP2E9czpyPXMrMX1yZXR1cm4gcn1jbGFzcyBTdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9hcnJheT10LHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9MH1maW5kTGFzdE1vbm90b25vdXModCl7aWYoU3QuYXNzZXJ0SW52YXJpYW50cyl7aWYodGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlKXtmb3IoY29uc3QgaSBvZiB0aGlzLl9hcnJheSlpZih0aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGUoaSkmJiF0KGkpKXRocm93IG5ldyBFcnJvcigiTW9ub3Rvbm91c0FycmF5OiBjdXJyZW50IHByZWRpY2F0ZSBtdXN0IGJlIHdlYWtlciB0aGFuIChvciBlcXVhbCB0bykgdGhlIHByZXZpb3VzIHByZWRpY2F0ZS4iKX10aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGU9dH1jb25zdCBuPUF0KHRoaXMuX2FycmF5LHQsdGhpcy5fZmluZExhc3RNb25vdG9ub3VzTGFzdElkeCk7cmV0dXJuIHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9bisxLG49PT0tMT92b2lkIDA6dGhpcy5fYXJyYXlbbl19fVN0LmFzc2VydEludmFyaWFudHM9ITE7Y2xhc3MgR3tzdGF0aWMgZnJvbVJhbmdlSW5jbHVzaXZlKHQpe3JldHVybiBuZXcgRyh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXIrMSl9c3RhdGljIGpvaW5NYW55KHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgbj1uZXcgSWUodFswXS5zbGljZSgpKTtmb3IobGV0IGk9MTtpPHQubGVuZ3RoO2krKyluPW4uZ2V0VW5pb24obmV3IEllKHRbaV0uc2xpY2UoKSkpO3JldHVybiBuLnJhbmdlc31zdGF0aWMgam9pbih0KXtpZih0Lmxlbmd0aD09PTApdGhyb3cgbmV3IFVlKCJsaW5lUmFuZ2VzIGNhbm5vdCBiZSBlbXB0eSIpO2xldCBuPXRbMF0uc3RhcnRMaW5lTnVtYmVyLGk9dFswXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO2ZvcihsZXQgcj0xO3I8dC5sZW5ndGg7cisrKW49TWF0aC5taW4obix0W3JdLnN0YXJ0TGluZU51bWJlciksaT1NYXRoLm1heChpLHRbcl0uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuIG5ldyBHKG4saSl9c3RhdGljIG9mTGVuZ3RoKHQsbil7cmV0dXJuIG5ldyBHKHQsdCtuKX1zdGF0aWMgZGVzZXJpYWxpemUodCl7cmV0dXJuIG5ldyBHKHRbMF0sdFsxXSl9Y29uc3RydWN0b3IodCxuKXtpZih0Pm4pdGhyb3cgbmV3IFVlKGBzdGFydExpbmVOdW1iZXIgJHt0fSBjYW5ub3QgYmUgYWZ0ZXIgZW5kTGluZU51bWJlckV4Y2x1c2l2ZSAke259YCk7dGhpcy5zdGFydExpbmVOdW1iZXI9dCx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9bn1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWdldCBpc0VtcHR5KCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgRyh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSt0KX1kZWx0YUxlbmd0aCh0KXtyZXR1cm4gbmV3IEcodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLXRoaXMuc3RhcnRMaW5lTnVtYmVyfWpvaW4odCl7cmV0dXJuIG5ldyBHKE1hdGgubWluKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxNYXRoLm1heCh0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsdC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSl9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydExpbmVOdW1iZXJ9LCR7dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfSlgfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRMaW5lTnVtYmVyKSxpPU1hdGgubWluKHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpO2lmKG48PWkpcmV0dXJuIG5ldyBHKG4saSl9aW50ZXJzZWN0c1N0cmljdCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZ0LnN0YXJ0TGluZU51bWJlcjx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9b3ZlcmxhcE9yVG91Y2godCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPD10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZXF1YWxzKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9dG9JbmNsdXNpdmVSYW5nZSgpe3JldHVybiB0aGlzLmlzRW1wdHk/bnVsbDpuZXcgb2UodGhpcy5zdGFydExpbmVOdW1iZXIsMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUil9dG9FeGNsdXNpdmVSYW5nZSgpe3JldHVybiBuZXcgb2UodGhpcy5zdGFydExpbmVOdW1iZXIsMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSl9bWFwVG9MaW5lQXJyYXkodCl7Y29uc3Qgbj1bXTtmb3IobGV0IGk9dGhpcy5zdGFydExpbmVOdW1iZXI7aTx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aSsrKW4ucHVzaCh0KGkpKTtyZXR1cm4gbn1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0TGluZU51bWJlcjtuPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTtuKyspdChuKX1zZXJpYWxpemUoKXtyZXR1cm5bdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlXX1pbmNsdWRlcyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfXRvT2Zmc2V0UmFuZ2UoKXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydExpbmVOdW1iZXItMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSl9fWNsYXNzIElle2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMuX25vcm1hbGl6ZWRSYW5nZXM9dH1nZXQgcmFuZ2VzKCl7cmV0dXJuIHRoaXMuX25vcm1hbGl6ZWRSYW5nZXN9YWRkUmFuZ2UodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBuPWpuKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscj0+ci5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj10LnN0YXJ0TGluZU51bWJlciksaT1BdCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHI9PnIuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKzE7aWYobj09PWkpdGhpcy5fbm9ybWFsaXplZFJhbmdlcy5zcGxpY2UobiwwLHQpO2Vsc2UgaWYobj09PWktMSl7Y29uc3Qgcj10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXNbbl09ci5qb2luKHQpfWVsc2V7Y29uc3Qgcj10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dLmpvaW4odGhpcy5fbm9ybWFsaXplZFJhbmdlc1tpLTFdKS5qb2luKHQpO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXMuc3BsaWNlKG4saS1uLHIpfX1jb250YWlucyh0KXtjb25zdCBuPWZ0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsaT0+aS5zdGFydExpbmVOdW1iZXI8PXQpO3JldHVybiEhbiYmbi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnR9aW50ZXJzZWN0cyh0KXtjb25zdCBuPWZ0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsaT0+aS5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4hIW4mJm4uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT50LnN0YXJ0TGluZU51bWJlcn1nZXRVbmlvbih0KXtpZih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD09PTApcmV0dXJuIHQ7aWYodC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg9PT0wKXJldHVybiB0aGlzO2NvbnN0IG49W107bGV0IGk9MCxyPTAsYT1udWxsO2Zvcig7aTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aHx8cjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aDspe2xldCBzPW51bGw7aWYoaTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCYmcjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCl7Y29uc3Qgbz10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2ldLGw9dC5fbm9ybWFsaXplZFJhbmdlc1tyXTtvLnN0YXJ0TGluZU51bWJlcjxsLnN0YXJ0TGluZU51bWJlcj8ocz1vLGkrKyk6KHM9bCxyKyspfWVsc2UgaTx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD8ocz10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2ldLGkrKyk6KHM9dC5fbm9ybWFsaXplZFJhbmdlc1tyXSxyKyspO2E9PT1udWxsP2E9czphLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PXMuc3RhcnRMaW5lTnVtYmVyP2E9bmV3IEcoYS5zdGFydExpbmVOdW1iZXIsTWF0aC5tYXgoYS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpOihuLnB1c2goYSksYT1zKX1yZXR1cm4gYSE9PW51bGwmJm4ucHVzaChhKSxuZXcgSWUobil9c3VidHJhY3RGcm9tKHQpe2NvbnN0IG49am4odGhpcy5fbm9ybWFsaXplZFJhbmdlcyxzPT5zLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PXQuc3RhcnRMaW5lTnVtYmVyKSxpPUF0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscz0+cy5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkrMTtpZihuPT09aSlyZXR1cm4gbmV3IEllKFt0XSk7Y29uc3Qgcj1bXTtsZXQgYT10LnN0YXJ0TGluZU51bWJlcjtmb3IobGV0IHM9bjtzPGk7cysrKXtjb25zdCBvPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbc107by5zdGFydExpbmVOdW1iZXI+YSYmci5wdXNoKG5ldyBHKGEsby5zdGFydExpbmVOdW1iZXIpKSxhPW8uZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1yZXR1cm4gYTx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnIucHVzaChuZXcgRyhhLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpLG5ldyBJZShyKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcCh0PT50LnRvU3RyaW5nKCkpLmpvaW4oIiwgIil9Z2V0SW50ZXJzZWN0aW9uKHQpe2NvbnN0IG49W107bGV0IGk9MCxyPTA7Zm9yKDtpPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoJiZyPHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoOyl7Y29uc3QgYT10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW2ldLHM9dC5fbm9ybWFsaXplZFJhbmdlc1tyXSxvPWEuaW50ZXJzZWN0KHMpO28mJiFvLmlzRW1wdHkmJm4ucHVzaChvKSxhLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8cy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlP2krKzpyKyt9cmV0dXJuIG5ldyBJZShuKX1nZXRXaXRoRGVsdGEodCl7cmV0dXJuIG5ldyBJZSh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcChuPT5uLmRlbHRhKHQpKSl9fWNsYXNzIENle3N0YXRpYyBpbnZlcnNlKHQsbixpKXtjb25zdCByPVtdO2xldCBhPTEscz0xO2Zvcihjb25zdCBsIG9mIHQpe2NvbnN0IHU9bmV3IENlKG5ldyBHKGEsbC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpLG5ldyBHKHMsbC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKTt1Lm1vZGlmaWVkLmlzRW1wdHl8fHIucHVzaCh1KSxhPWwub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxzPWwubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1jb25zdCBvPW5ldyBDZShuZXcgRyhhLG4rMSksbmV3IEcocyxpKzEpKTtyZXR1cm4gby5tb2RpZmllZC5pc0VtcHR5fHxyLnB1c2gobykscn1zdGF0aWMgY2xpcCh0LG4saSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgYSBvZiB0KXtjb25zdCBzPWEub3JpZ2luYWwuaW50ZXJzZWN0KG4pLG89YS5tb2RpZmllZC5pbnRlcnNlY3QoaSk7cyYmIXMuaXNFbXB0eSYmbyYmIW8uaXNFbXB0eSYmci5wdXNoKG5ldyBDZShzLG8pKX1yZXR1cm4gcn1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMub3JpZ2luYWw9dCx0aGlzLm1vZGlmaWVkPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbC50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkLnRvU3RyaW5nKCl9fWB9ZmxpcCgpe3JldHVybiBuZXcgQ2UodGhpcy5tb2RpZmllZCx0aGlzLm9yaWdpbmFsKX1qb2luKHQpe3JldHVybiBuZXcgQ2UodGhpcy5vcmlnaW5hbC5qb2luKHQub3JpZ2luYWwpLHRoaXMubW9kaWZpZWQuam9pbih0Lm1vZGlmaWVkKSl9fWNsYXNzIFdlIGV4dGVuZHMgQ2V7c3RhdGljIGZyb21SYW5nZU1hcHBpbmdzKHQpe2NvbnN0IG49Ry5qb2luKHQubWFwKHI9PkcuZnJvbVJhbmdlSW5jbHVzaXZlKHIub3JpZ2luYWxSYW5nZSkpKSxpPUcuam9pbih0Lm1hcChyPT5HLmZyb21SYW5nZUluY2x1c2l2ZShyLm1vZGlmaWVkUmFuZ2UpKSk7cmV0dXJuIG5ldyBXZShuLGksdCl9Y29uc3RydWN0b3IodCxuLGkpe3N1cGVyKHQsbiksdGhpcy5pbm5lckNoYW5nZXM9aX1mbGlwKCl7dmFyIHQ7cmV0dXJuIG5ldyBXZSh0aGlzLm1vZGlmaWVkLHRoaXMub3JpZ2luYWwsKHQ9dGhpcy5pbm5lckNoYW5nZXMpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dC5tYXAobj0+bi5mbGlwKCkpKX13aXRoSW5uZXJDaGFuZ2VzRnJvbUxpbmVSYW5nZXMoKXtyZXR1cm4gbmV3IFdlKHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCxbbmV3IHB0KHRoaXMub3JpZ2luYWwudG9FeGNsdXNpdmVSYW5nZSgpLHRoaXMubW9kaWZpZWQudG9FeGNsdXNpdmVSYW5nZSgpKV0pfX1jbGFzcyBwdHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMub3JpZ2luYWxSYW5nZT10LHRoaXMubW9kaWZpZWRSYW5nZT1ufXRvU3RyaW5nKCl7cmV0dXJuYHske3RoaXMub3JpZ2luYWxSYW5nZS50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkUmFuZ2UudG9TdHJpbmcoKX19YH1mbGlwKCl7cmV0dXJuIG5ldyBwdCh0aGlzLm1vZGlmaWVkUmFuZ2UsdGhpcy5vcmlnaW5hbFJhbmdlKX19Y29uc3Qgb2w9MztjbGFzcyBsbHtjb21wdXRlRGlmZih0LG4saSl7dmFyIHI7Y29uc3Qgcz1uZXcgaGwodCxuLHttYXhDb21wdXRhdGlvblRpbWU6aS5tYXhDb21wdXRhdGlvblRpbWVNcyxzaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZTppLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLHNob3VsZENvbXB1dGVDaGFyQ2hhbmdlczohMCxzaG91bGRNYWtlUHJldHR5RGlmZjohMCxzaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzOiEwfSkuY29tcHV0ZURpZmYoKSxvPVtdO2xldCBsPW51bGw7Zm9yKGNvbnN0IHUgb2Ygcy5jaGFuZ2VzKXtsZXQgYzt1Lm9yaWdpbmFsRW5kTGluZU51bWJlcj09PTA/Yz1uZXcgRyh1Lm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyKzEsdS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcisxKTpjPW5ldyBHKHUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsdS5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMSk7bGV0IGQ7dS5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT0wP2Q9bmV3IEcodS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcisxLHUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIrMSk6ZD1uZXcgRyh1Lm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyLHUubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzEpO2xldCBtPW5ldyBXZShjLGQsKHI9dS5jaGFyQ2hhbmdlcyk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm1hcChmPT5uZXcgcHQobmV3IG9lKGYub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsZi5vcmlnaW5hbFN0YXJ0Q29sdW1uLGYub3JpZ2luYWxFbmRMaW5lTnVtYmVyLGYub3JpZ2luYWxFbmRDb2x1bW4pLG5ldyBvZShmLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyLGYubW9kaWZpZWRTdGFydENvbHVtbixmLm1vZGlmaWVkRW5kTGluZU51bWJlcixmLm1vZGlmaWVkRW5kQ29sdW1uKSkpKTtsJiYobC5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09bS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXJ8fGwub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PW0ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyKSYmKG09bmV3IFdlKGwub3JpZ2luYWwuam9pbihtLm9yaWdpbmFsKSxsLm1vZGlmaWVkLmpvaW4obS5tb2RpZmllZCksbC5pbm5lckNoYW5nZXMmJm0uaW5uZXJDaGFuZ2VzP2wuaW5uZXJDaGFuZ2VzLmNvbmNhdChtLmlubmVyQ2hhbmdlcyk6dm9pZCAwKSxvLnBvcCgpKSxvLnB1c2gobSksbD1tfXJldHVybiBZdCgoKT0+QnIobywodSxjKT0+Yy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItdS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09Yy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItdS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZ1Lm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8Yy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXImJnUubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxjLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpLG5ldyBadChvLFtdLHMucXVpdEVhcmx5KX19ZnVuY3Rpb24gVnIoZSx0LG4saSl7cmV0dXJuIG5ldyBxZShlLHQsbikuQ29tcHV0ZURpZmYoaSl9bGV0IGpyPWNsYXNze2NvbnN0cnVjdG9yKHQpe2NvbnN0IG49W10saT1bXTtmb3IobGV0IHI9MCxhPXQubGVuZ3RoO3I8YTtyKyspbltyXT1Hbih0W3JdLDEpLGlbcl09JG4odFtyXSwxKTt0aGlzLmxpbmVzPXQsdGhpcy5fc3RhcnRDb2x1bW5zPW4sdGhpcy5fZW5kQ29sdW1ucz1pfWdldEVsZW1lbnRzKCl7Y29uc3QgdD1bXTtmb3IobGV0IG49MCxpPXRoaXMubGluZXMubGVuZ3RoO248aTtuKyspdFtuXT10aGlzLmxpbmVzW25dLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbbl0tMSx0aGlzLl9lbmRDb2x1bW5zW25dLTEpO3JldHVybiB0fWdldFN0cmljdEVsZW1lbnQodCl7cmV0dXJuIHRoaXMubGluZXNbdF19Z2V0U3RhcnRMaW5lTnVtYmVyKHQpe3JldHVybiB0KzF9Z2V0RW5kTGluZU51bWJlcih0KXtyZXR1cm4gdCsxfWNyZWF0ZUNoYXJTZXF1ZW5jZSh0LG4saSl7Y29uc3Qgcj1bXSxhPVtdLHM9W107bGV0IG89MDtmb3IobGV0IGw9bjtsPD1pO2wrKyl7Y29uc3QgdT10aGlzLmxpbmVzW2xdLGM9dD90aGlzLl9zdGFydENvbHVtbnNbbF06MSxkPXQ/dGhpcy5fZW5kQ29sdW1uc1tsXTp1Lmxlbmd0aCsxO2ZvcihsZXQgbT1jO208ZDttKyspcltvXT11LmNoYXJDb2RlQXQobS0xKSxhW29dPWwrMSxzW29dPW0sbysrOyF0JiZsPGkmJihyW29dPTEwLGFbb109bCsxLHNbb109dS5sZW5ndGgrMSxvKyspfXJldHVybiBuZXcgdWwocixhLHMpfX07Y2xhc3MgdWx7Y29uc3RydWN0b3IodCxuLGkpe3RoaXMuX2NoYXJDb2Rlcz10LHRoaXMuX2xpbmVOdW1iZXJzPW4sdGhpcy5fY29sdW1ucz1pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuX2NoYXJDb2Rlcy5tYXAoKHQsbik9Pih0PT09MTA/IlxcbiI6U3RyaW5nLmZyb21DaGFyQ29kZSh0KSkrYC0oJHt0aGlzLl9saW5lTnVtYmVyc1tuXX0sJHt0aGlzLl9jb2x1bW5zW25dfSlgKS5qb2luKCIsICIpKyJdIn1fYXNzZXJ0SW5kZXgodCxuKXtpZih0PDB8fHQ+PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBpbmRleCIpfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuX2NoYXJDb2Rlc31nZXRTdGFydExpbmVOdW1iZXIodCl7cmV0dXJuIHQ+MCYmdD09PXRoaXMuX2xpbmVOdW1iZXJzLmxlbmd0aD90aGlzLmdldEVuZExpbmVOdW1iZXIodC0xKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9saW5lTnVtYmVycyksdGhpcy5fbGluZU51bWJlcnNbdF0pfWdldEVuZExpbmVOdW1iZXIodCl7cmV0dXJuIHQ9PT0tMT90aGlzLmdldFN0YXJ0TGluZU51bWJlcih0KzEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9jaGFyQ29kZXNbdF09PT0xMD90aGlzLl9saW5lTnVtYmVyc1t0XSsxOnRoaXMuX2xpbmVOdW1iZXJzW3RdKX1nZXRTdGFydENvbHVtbih0KXtyZXR1cm4gdD4wJiZ0PT09dGhpcy5fY29sdW1ucy5sZW5ndGg/dGhpcy5nZXRFbmRDb2x1bW4odC0xKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jb2x1bW5zW3RdKX1nZXRFbmRDb2x1bW4odCl7cmV0dXJuIHQ9PT0tMT90aGlzLmdldFN0YXJ0Q29sdW1uKHQrMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fY29sdW1ucyksdGhpcy5fY2hhckNvZGVzW3RdPT09MTA/MTp0aGlzLl9jb2x1bW5zW3RdKzEpfX1jbGFzcyBndHtjb25zdHJ1Y3Rvcih0LG4saSxyLGEscyxvLGwpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9dCx0aGlzLm9yaWdpbmFsU3RhcnRDb2x1bW49bix0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1pLHRoaXMub3JpZ2luYWxFbmRDb2x1bW49cix0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPWEsdGhpcy5tb2RpZmllZFN0YXJ0Q29sdW1uPXMsdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9byx0aGlzLm1vZGlmaWVkRW5kQ29sdW1uPWx9c3RhdGljIGNyZWF0ZUZyb21EaWZmQ2hhbmdlKHQsbixpKXtjb25zdCByPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCksYT1uLmdldFN0YXJ0Q29sdW1uKHQub3JpZ2luYWxTdGFydCkscz1uLmdldEVuZExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSksbz1uLmdldEVuZENvbHVtbih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxsPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCksdT1pLmdldFN0YXJ0Q29sdW1uKHQubW9kaWZpZWRTdGFydCksYz1pLmdldEVuZExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSksZD1pLmdldEVuZENvbHVtbih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKTtyZXR1cm4gbmV3IGd0KHIsYSxzLG8sbCx1LGMsZCl9fWZ1bmN0aW9uIGNsKGUpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IHQ9W2VbMF1dO2xldCBuPXRbMF07Zm9yKGxldCBpPTEscj1lLmxlbmd0aDtpPHI7aSsrKXtjb25zdCBhPWVbaV0scz1hLm9yaWdpbmFsU3RhcnQtKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoKSxvPWEubW9kaWZpZWRTdGFydC0obi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpO01hdGgubWluKHMsbyk8b2w/KG4ub3JpZ2luYWxMZW5ndGg9YS5vcmlnaW5hbFN0YXJ0K2Eub3JpZ2luYWxMZW5ndGgtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9YS5tb2RpZmllZFN0YXJ0K2EubW9kaWZpZWRMZW5ndGgtbi5tb2RpZmllZFN0YXJ0KToodC5wdXNoKGEpLG49YSl9cmV0dXJuIHR9Y2xhc3MgTHR7Y29uc3RydWN0b3IodCxuLGkscixhKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9bix0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPWksdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWF9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KHQsbixpLHIsYSxzLG8pe2xldCBsLHUsYyxkLG07aWYobi5vcmlnaW5hbExlbmd0aD09PTA/KGw9aS5nZXRTdGFydExpbmVOdW1iZXIobi5vcmlnaW5hbFN0YXJ0KS0xLHU9MCk6KGw9aS5nZXRTdGFydExpbmVOdW1iZXIobi5vcmlnaW5hbFN0YXJ0KSx1PWkuZ2V0RW5kTGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aC0xKSksbi5tb2RpZmllZExlbmd0aD09PTA/KGM9ci5nZXRTdGFydExpbmVOdW1iZXIobi5tb2RpZmllZFN0YXJ0KS0xLGQ9MCk6KGM9ci5nZXRTdGFydExpbmVOdW1iZXIobi5tb2RpZmllZFN0YXJ0KSxkPXIuZ2V0RW5kTGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC0xKSkscyYmbi5vcmlnaW5hbExlbmd0aD4wJiZuLm9yaWdpbmFsTGVuZ3RoPDIwJiZuLm1vZGlmaWVkTGVuZ3RoPjAmJm4ubW9kaWZpZWRMZW5ndGg8MjAmJmEoKSl7Y29uc3QgZj1pLmNyZWF0ZUNoYXJTZXF1ZW5jZSh0LG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aC0xKSxiPXIuY3JlYXRlQ2hhclNlcXVlbmNlKHQsbi5tb2RpZmllZFN0YXJ0LG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLTEpO2lmKGYuZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCYmYi5nZXRFbGVtZW50cygpLmxlbmd0aD4wKXtsZXQgcD1WcihmLGIsYSwhMCkuY2hhbmdlcztvJiYocD1jbChwKSksbT1bXTtmb3IobGV0IHc9MCx4PXAubGVuZ3RoO3c8eDt3KyspbS5wdXNoKGd0LmNyZWF0ZUZyb21EaWZmQ2hhbmdlKHBbd10sZixiKSl9fXJldHVybiBuZXcgTHQobCx1LGMsZCxtKX19Y2xhc3MgaGx7Y29uc3RydWN0b3IodCxuLGkpe3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzPWkuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcz1pLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZT1pLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmY9aS5zaG91bGRNYWtlUHJldHR5RGlmZix0aGlzLm9yaWdpbmFsTGluZXM9dCx0aGlzLm1vZGlmaWVkTGluZXM9bix0aGlzLm9yaWdpbmFsPW5ldyBqcih0KSx0aGlzLm1vZGlmaWVkPW5ldyBqcihuKSx0aGlzLmNvbnRpbnVlTGluZURpZmY9R3IoaS5tYXhDb21wdXRhdGlvblRpbWUpLHRoaXMuY29udGludWVDaGFyRGlmZj1HcihpLm1heENvbXB1dGF0aW9uVGltZT09PTA/MDpNYXRoLm1pbihpLm1heENvbXB1dGF0aW9uVGltZSw1ZTMpKX1jb21wdXRlRGlmZigpe2lmKHRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoPT09MSYmdGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGg9PT0wKXJldHVybiB0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aD09PTEmJnRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoPT09MD97cXVpdEVhcmx5OiExLGNoYW5nZXM6W119OntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjEsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgsY2hhckNoYW5nZXM6dm9pZCAwfV19O2lmKHRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoPT09MSYmdGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg9PT0wKXJldHVybntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOnRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjEsY2hhckNoYW5nZXM6dm9pZCAwfV19O2NvbnN0IHQ9VnIodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVMaW5lRGlmZix0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmKSxuPXQuY2hhbmdlcyxpPXQucXVpdEVhcmx5O2lmKHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2Upe2NvbnN0IG89W107Zm9yKGxldCBsPTAsdT1uLmxlbmd0aDtsPHU7bCsrKW8ucHVzaChMdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLG5bbF0sdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKTtyZXR1cm57cXVpdEVhcmx5OmksY2hhbmdlczpvfX1jb25zdCByPVtdO2xldCBhPTAscz0wO2ZvcihsZXQgbz0tMSxsPW4ubGVuZ3RoO288bDtvKyspe2NvbnN0IHU9bysxPGw/bltvKzFdOm51bGwsYz11P3Uub3JpZ2luYWxTdGFydDp0aGlzLm9yaWdpbmFsTGluZXMubGVuZ3RoLGQ9dT91Lm1vZGlmaWVkU3RhcnQ6dGhpcy5tb2RpZmllZExpbmVzLmxlbmd0aDtmb3IoO2E8YyYmczxkOyl7Y29uc3QgbT10aGlzLm9yaWdpbmFsTGluZXNbYV0sZj10aGlzLm1vZGlmaWVkTGluZXNbc107aWYobSE9PWYpe3tsZXQgYj1HbihtLDEpLHA9R24oZiwxKTtmb3IoO2I+MSYmcD4xOyl7Y29uc3Qgdz1tLmNoYXJDb2RlQXQoYi0yKSx4PWYuY2hhckNvZGVBdChwLTIpO2lmKHchPT14KWJyZWFrO2ItLSxwLS19KGI+MXx8cD4xKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGErMSwxLGIscysxLDEscCl9e2xldCBiPSRuKG0sMSkscD0kbihmLDEpO2NvbnN0IHc9bS5sZW5ndGgrMSx4PWYubGVuZ3RoKzE7Zm9yKDtiPHcmJnA8eDspe2NvbnN0IF89bS5jaGFyQ29kZUF0KGItMSkseT1tLmNoYXJDb2RlQXQocC0xKTtpZihfIT09eSlicmVhaztiKysscCsrfShiPHd8fHA8eCkmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixhKzEsYix3LHMrMSxwLHgpfX1hKysscysrfXUmJihyLnB1c2goTHQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx1LHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSksYSs9dS5vcmlnaW5hbExlbmd0aCxzKz11Lm1vZGlmaWVkTGVuZ3RoKX1yZXR1cm57cXVpdEVhcmx5OmksY2hhbmdlczpyfX1fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LG4saSxyLGEscyxvKXtpZih0aGlzLl9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LG4saSxyLGEscyxvKSlyZXR1cm47bGV0IGw7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJihsPVtuZXcgZ3QobixpLG4scixhLHMsYSxvKV0pLHQucHVzaChuZXcgTHQobixuLGEsYSxsKSl9X21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixpLHIsYSxzLG8pe2NvbnN0IGw9dC5sZW5ndGg7aWYobD09PTApcmV0dXJuITE7Y29uc3QgdT10W2wtMV07cmV0dXJuIHUub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09MHx8dS5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT0wPyExOnUub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09biYmdS5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT1hPyh0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBndChuLGksbixyLGEscyxhLG8pKSwhMCk6dS5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMT09PW4mJnUubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzE9PT1hPyh1Lm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLHUubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWEsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJnUuY2hhckNoYW5nZXMmJnUuY2hhckNoYW5nZXMucHVzaChuZXcgZ3QobixpLG4scixhLHMsYSxvKSksITApOiExfX1mdW5jdGlvbiBHbihlLHQpe2NvbnN0IG49UHMoZSk7cmV0dXJuIG49PT0tMT90Om4rMX1mdW5jdGlvbiAkbihlLHQpe2NvbnN0IG49QnMoZSk7cmV0dXJuIG49PT0tMT90Om4rMn1mdW5jdGlvbiBHcihlKXtpZihlPT09MClyZXR1cm4oKT0+ITA7Y29uc3QgdD1EYXRlLm5vdygpO3JldHVybigpPT5EYXRlLm5vdygpLXQ8ZX1jbGFzcyBGZXtzdGF0aWMgdHJpdmlhbCh0LG4pe3JldHVybiBuZXcgRmUoW25ldyBuZSgkLm9mTGVuZ3RoKHQubGVuZ3RoKSwkLm9mTGVuZ3RoKG4ubGVuZ3RoKSldLCExKX1zdGF0aWMgdHJpdmlhbFRpbWVkT3V0KHQsbil7cmV0dXJuIG5ldyBGZShbbmV3IG5lKCQub2ZMZW5ndGgodC5sZW5ndGgpLCQub2ZMZW5ndGgobi5sZW5ndGgpKV0sITApfWNvbnN0cnVjdG9yKHQsbil7dGhpcy5kaWZmcz10LHRoaXMuaGl0VGltZW91dD1ufX1jbGFzcyBuZXtzdGF0aWMgaW52ZXJ0KHQsbil7Y29uc3QgaT1bXTtyZXR1cm4gVG8odCwocixhKT0+e2kucHVzaChuZS5mcm9tT2Zmc2V0UGFpcnMocj9yLmdldEVuZEV4Y2x1c2l2ZXMoKTpfZS56ZXJvLGE/YS5nZXRTdGFydHMoKTpuZXcgX2Uobiwocj9yLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtci5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlOjApK24pKSl9KSxpfXN0YXRpYyBmcm9tT2Zmc2V0UGFpcnModCxuKXtyZXR1cm4gbmV3IG5lKG5ldyAkKHQub2Zmc2V0MSxuLm9mZnNldDEpLG5ldyAkKHQub2Zmc2V0MixuLm9mZnNldDIpKX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc2VxMVJhbmdlPXQsdGhpcy5zZXEyUmFuZ2U9bn1zd2FwKCl7cmV0dXJuIG5ldyBuZSh0aGlzLnNlcTJSYW5nZSx0aGlzLnNlcTFSYW5nZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNlcTFSYW5nZX0gPC0+ICR7dGhpcy5zZXEyUmFuZ2V9YH1qb2luKHQpe3JldHVybiBuZXcgbmUodGhpcy5zZXExUmFuZ2Uuam9pbih0LnNlcTFSYW5nZSksdGhpcy5zZXEyUmFuZ2Uuam9pbih0LnNlcTJSYW5nZSkpfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBuZSh0aGlzLnNlcTFSYW5nZS5kZWx0YSh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YSh0KSl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgbmUodGhpcy5zZXExUmFuZ2UuZGVsdGFTdGFydCh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YVN0YXJ0KHQpKX1kZWx0YUVuZCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgbmUodGhpcy5zZXExUmFuZ2UuZGVsdGFFbmQodCksdGhpcy5zZXEyUmFuZ2UuZGVsdGFFbmQodCkpfWludGVyc2VjdCh0KXtjb25zdCBuPXRoaXMuc2VxMVJhbmdlLmludGVyc2VjdCh0LnNlcTFSYW5nZSksaT10aGlzLnNlcTJSYW5nZS5pbnRlcnNlY3QodC5zZXEyUmFuZ2UpO2lmKCEoIW58fCFpKSlyZXR1cm4gbmV3IG5lKG4saSl9Z2V0U3RhcnRzKCl7cmV0dXJuIG5ldyBfZSh0aGlzLnNlcTFSYW5nZS5zdGFydCx0aGlzLnNlcTJSYW5nZS5zdGFydCl9Z2V0RW5kRXhjbHVzaXZlcygpe3JldHVybiBuZXcgX2UodGhpcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHRoaXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSl9fWNsYXNzIF9le2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vZmZzZXQxPXQsdGhpcy5vZmZzZXQyPW59dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm9mZnNldDF9IDwtPiAke3RoaXMub2Zmc2V0Mn1gfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBfZSh0aGlzLm9mZnNldDErdCx0aGlzLm9mZnNldDIrdCl9ZXF1YWxzKHQpe3JldHVybiB0aGlzLm9mZnNldDE9PT10Lm9mZnNldDEmJnRoaXMub2Zmc2V0Mj09PXQub2Zmc2V0Mn19X2UuemVybz1uZXcgX2UoMCwwKSxfZS5tYXg9bmV3IF9lKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtjbGFzcyBDdHtpc1ZhbGlkKCl7cmV0dXJuITB9fUN0Lmluc3RhbmNlPW5ldyBDdDtjbGFzcyBkbHtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnRpbWVvdXQ9dCx0aGlzLnN0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMudmFsaWQ9ITAsdDw9MCl0aHJvdyBuZXcgVWUoInRpbWVvdXQgbXVzdCBiZSBwb3NpdGl2ZSIpfWlzVmFsaWQoKXtpZighKERhdGUubm93KCktdGhpcy5zdGFydFRpbWU8dGhpcy50aW1lb3V0KSYmdGhpcy52YWxpZCl7dGhpcy52YWxpZD0hMTtkZWJ1Z2dlcn1yZXR1cm4gdGhpcy52YWxpZH19Y2xhc3MgWG57Y29uc3RydWN0b3IodCxuKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bix0aGlzLmFycmF5PVtdLHRoaXMuYXJyYXk9bmV3IEFycmF5KHQqbil9Z2V0KHQsbil7cmV0dXJuIHRoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdfXNldCh0LG4saSl7dGhpcy5hcnJheVt0K24qdGhpcy53aWR0aF09aX19ZnVuY3Rpb24gSm4oZSl7cmV0dXJuIGU9PT0zMnx8ZT09PTl9Y2xhc3MgYnR7c3RhdGljIGdldEtleSh0KXtsZXQgbj10aGlzLmNocktleXMuZ2V0KHQpO3JldHVybiBuPT09dm9pZCAwJiYobj10aGlzLmNocktleXMuc2l6ZSx0aGlzLmNocktleXMuc2V0KHQsbikpLG59Y29uc3RydWN0b3IodCxuLGkpe3RoaXMucmFuZ2U9dCx0aGlzLmxpbmVzPW4sdGhpcy5zb3VyY2U9aSx0aGlzLmhpc3RvZ3JhbT1bXTtsZXQgcj0wO2ZvcihsZXQgYT10LnN0YXJ0TGluZU51bWJlci0xO2E8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTE7YSsrKXtjb25zdCBzPW5bYV07Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspe3IrKztjb25zdCB1PXNbbF0sYz1idC5nZXRLZXkodSk7dGhpcy5oaXN0b2dyYW1bY109KHRoaXMuaGlzdG9ncmFtW2NdfHwwKSsxfXIrKztjb25zdCBvPWJ0LmdldEtleShgCmApO3RoaXMuaGlzdG9ncmFtW29dPSh0aGlzLmhpc3RvZ3JhbVtvXXx8MCkrMX10aGlzLnRvdGFsQ291bnQ9cn1jb21wdXRlU2ltaWxhcml0eSh0KXt2YXIgbixpO2xldCByPTA7Y29uc3QgYT1NYXRoLm1heCh0aGlzLmhpc3RvZ3JhbS5sZW5ndGgsdC5oaXN0b2dyYW0ubGVuZ3RoKTtmb3IobGV0IHM9MDtzPGE7cysrKXIrPU1hdGguYWJzKCgobj10aGlzLmhpc3RvZ3JhbVtzXSkhPT1udWxsJiZuIT09dm9pZCAwP246MCktKChpPXQuaGlzdG9ncmFtW3NdKSE9PW51bGwmJmkhPT12b2lkIDA/aTowKSk7cmV0dXJuIDEtci8odGhpcy50b3RhbENvdW50K3QudG90YWxDb3VudCl9fWJ0LmNocktleXM9bmV3IE1hcDtjbGFzcyBtbHtjb21wdXRlKHQsbixpPUN0Lmluc3RhbmNlLHIpe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBGZS50cml2aWFsKHQsbik7Y29uc3QgYT1uZXcgWG4odC5sZW5ndGgsbi5sZW5ndGgpLHM9bmV3IFhuKHQubGVuZ3RoLG4ubGVuZ3RoKSxvPW5ldyBYbih0Lmxlbmd0aCxuLmxlbmd0aCk7Zm9yKGxldCBiPTA7Yjx0Lmxlbmd0aDtiKyspZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKyspe2lmKCFpLmlzVmFsaWQoKSlyZXR1cm4gRmUudHJpdmlhbFRpbWVkT3V0KHQsbik7Y29uc3Qgdz1iPT09MD8wOmEuZ2V0KGItMSxwKSx4PXA9PT0wPzA6YS5nZXQoYixwLTEpO2xldCBfO3QuZ2V0RWxlbWVudChiKT09PW4uZ2V0RWxlbWVudChwKT8oYj09PTB8fHA9PT0wP189MDpfPWEuZ2V0KGItMSxwLTEpLGI+MCYmcD4wJiZzLmdldChiLTEscC0xKT09PTMmJihfKz1vLmdldChiLTEscC0xKSksXys9cj9yKGIscCk6MSk6Xz0tMTtjb25zdCB5PU1hdGgubWF4KHcseCxfKTtpZih5PT09Xyl7Y29uc3QgRT1iPjAmJnA+MD9vLmdldChiLTEscC0xKTowO28uc2V0KGIscCxFKzEpLHMuc2V0KGIscCwzKX1lbHNlIHk9PT13PyhvLnNldChiLHAsMCkscy5zZXQoYixwLDEpKTp5PT09eCYmKG8uc2V0KGIscCwwKSxzLnNldChiLHAsMikpO2Euc2V0KGIscCx5KX1jb25zdCBsPVtdO2xldCB1PXQubGVuZ3RoLGM9bi5sZW5ndGg7ZnVuY3Rpb24gZChiLHApeyhiKzEhPT11fHxwKzEhPT1jKSYmbC5wdXNoKG5ldyBuZShuZXcgJChiKzEsdSksbmV3ICQocCsxLGMpKSksdT1iLGM9cH1sZXQgbT10Lmxlbmd0aC0xLGY9bi5sZW5ndGgtMTtmb3IoO20+PTAmJmY+PTA7KXMuZ2V0KG0sZik9PT0zPyhkKG0sZiksbS0tLGYtLSk6cy5nZXQobSxmKT09PTE/bS0tOmYtLTtyZXR1cm4gZCgtMSwtMSksbC5yZXZlcnNlKCksbmV3IEZlKGwsITEpfX1jbGFzcyAkcntjb21wdXRlKHQsbixpPUN0Lmluc3RhbmNlKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gRmUudHJpdmlhbCh0LG4pO2NvbnN0IHI9dCxhPW47ZnVuY3Rpb24gcyhwLHcpe2Zvcig7cDxyLmxlbmd0aCYmdzxhLmxlbmd0aCYmci5nZXRFbGVtZW50KHApPT09YS5nZXRFbGVtZW50KHcpOylwKyssdysrO3JldHVybiBwfWxldCBvPTA7Y29uc3QgbD1uZXcgZmw7bC5zZXQoMCxzKDAsMCkpO2NvbnN0IHU9bmV3IHBsO3Uuc2V0KDAsbC5nZXQoMCk9PT0wP251bGw6bmV3IFhyKG51bGwsMCwwLGwuZ2V0KDApKSk7bGV0IGM9MDtlOmZvcig7Oyl7aWYobysrLCFpLmlzVmFsaWQoKSlyZXR1cm4gRmUudHJpdmlhbFRpbWVkT3V0KHIsYSk7Y29uc3QgcD0tTWF0aC5taW4obyxhLmxlbmd0aCtvJTIpLHc9TWF0aC5taW4obyxyLmxlbmd0aCtvJTIpO2ZvcihjPXA7Yzw9dztjKz0yKXtjb25zdCB4PWM9PT13Py0xOmwuZ2V0KGMrMSksXz1jPT09cD8tMTpsLmdldChjLTEpKzEseT1NYXRoLm1pbihNYXRoLm1heCh4LF8pLHIubGVuZ3RoKSxFPXktYztpZih5PnIubGVuZ3RofHxFPmEubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IFI9cyh5LEUpO2wuc2V0KGMsUik7Y29uc3QgUD15PT09eD91LmdldChjKzEpOnUuZ2V0KGMtMSk7aWYodS5zZXQoYyxSIT09eT9uZXcgWHIoUCx5LEUsUi15KTpQKSxsLmdldChjKT09PXIubGVuZ3RoJiZsLmdldChjKS1jPT09YS5sZW5ndGgpYnJlYWsgZX19bGV0IGQ9dS5nZXQoYyk7Y29uc3QgbT1bXTtsZXQgZj1yLmxlbmd0aCxiPWEubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgcD1kP2QueCtkLmxlbmd0aDowLHc9ZD9kLnkrZC5sZW5ndGg6MDtpZigocCE9PWZ8fHchPT1iKSYmbS5wdXNoKG5ldyBuZShuZXcgJChwLGYpLG5ldyAkKHcsYikpKSwhZClicmVhaztmPWQueCxiPWQueSxkPWQucHJldn1yZXR1cm4gbS5yZXZlcnNlKCksbmV3IEZlKG0sITEpfX1jbGFzcyBYcntjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLnByZXY9dCx0aGlzLng9bix0aGlzLnk9aSx0aGlzLmxlbmd0aD1yfX1jbGFzcyBmbHtjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMTApLHRoaXMubmVnYXRpdmVBcnI9bmV3IEludDMyQXJyYXkoMTApfWdldCh0KXtyZXR1cm4gdDwwPyh0PS10LTEsdGhpcy5uZWdhdGl2ZUFyclt0XSk6dGhpcy5wb3NpdGl2ZUFyclt0XX1zZXQodCxuKXtpZih0PDApe2lmKHQ9LXQtMSx0Pj10aGlzLm5lZ2F0aXZlQXJyLmxlbmd0aCl7Y29uc3QgaT10aGlzLm5lZ2F0aXZlQXJyO3RoaXMubmVnYXRpdmVBcnI9bmV3IEludDMyQXJyYXkoaS5sZW5ndGgqMiksdGhpcy5uZWdhdGl2ZUFyci5zZXQoaSl9dGhpcy5uZWdhdGl2ZUFyclt0XT1ufWVsc2V7aWYodD49dGhpcy5wb3NpdGl2ZUFyci5sZW5ndGgpe2NvbnN0IGk9dGhpcy5wb3NpdGl2ZUFycjt0aGlzLnBvc2l0aXZlQXJyPW5ldyBJbnQzMkFycmF5KGkubGVuZ3RoKjIpLHRoaXMucG9zaXRpdmVBcnIuc2V0KGkpfXRoaXMucG9zaXRpdmVBcnJbdF09bn19fWNsYXNzIHBse2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGl2ZUFycj1bXSx0aGlzLm5lZ2F0aXZlQXJyPVtdfWdldCh0KXtyZXR1cm4gdDwwPyh0PS10LTEsdGhpcy5uZWdhdGl2ZUFyclt0XSk6dGhpcy5wb3NpdGl2ZUFyclt0XX1zZXQodCxuKXt0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdPW4pOnRoaXMucG9zaXRpdmVBcnJbdF09bn19Y2xhc3MgS3R7Y29uc3RydWN0b3IodCxuLGkpe3RoaXMubGluZXM9dCx0aGlzLmNvbnNpZGVyV2hpdGVzcGFjZUNoYW5nZXM9aSx0aGlzLmVsZW1lbnRzPVtdLHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lPVtdLHRoaXMuYWRkaXRpb25hbE9mZnNldEJ5TGluZT1bXTtsZXQgcj0hMTtuLnN0YXJ0PjAmJm4uZW5kRXhjbHVzaXZlPj10Lmxlbmd0aCYmKG49bmV3ICQobi5zdGFydC0xLG4uZW5kRXhjbHVzaXZlKSxyPSEwKSx0aGlzLmxpbmVSYW5nZT1uLHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lWzBdPTA7Zm9yKGxldCBhPXRoaXMubGluZVJhbmdlLnN0YXJ0O2E8dGhpcy5saW5lUmFuZ2UuZW5kRXhjbHVzaXZlO2ErKyl7bGV0IHM9dFthXSxvPTA7aWYocilvPXMubGVuZ3RoLHM9IiIscj0hMTtlbHNlIGlmKCFpKXtjb25zdCBsPXMudHJpbVN0YXJ0KCk7bz1zLmxlbmd0aC1sLmxlbmd0aCxzPWwudHJpbUVuZCgpfXRoaXMuYWRkaXRpb25hbE9mZnNldEJ5TGluZS5wdXNoKG8pO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXRoaXMuZWxlbWVudHMucHVzaChzLmNoYXJDb2RlQXQobCkpO2E8dC5sZW5ndGgtMSYmKHRoaXMuZWxlbWVudHMucHVzaCgxMCksdGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVbYS10aGlzLmxpbmVSYW5nZS5zdGFydCsxXT10aGlzLmVsZW1lbnRzLmxlbmd0aCl9dGhpcy5hZGRpdGlvbmFsT2Zmc2V0QnlMaW5lLnB1c2goMCl9dG9TdHJpbmcoKXtyZXR1cm5gU2xpY2U6ICIke3RoaXMudGV4dH0iYH1nZXQgdGV4dCgpe3JldHVybiB0aGlzLmdldFRleHQobmV3ICQoMCx0aGlzLmxlbmd0aCkpfWdldFRleHQodCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuc2xpY2UodC5zdGFydCx0LmVuZEV4Y2x1c2l2ZSkubWFwKG49PlN0cmluZy5mcm9tQ2hhckNvZGUobikpLmpvaW4oIiIpfWdldEVsZW1lbnQodCl7cmV0dXJuIHRoaXMuZWxlbWVudHNbdF19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmxlbmd0aH1nZXRCb3VuZGFyeVNjb3JlKHQpe2NvbnN0IG49UXIodD4wP3RoaXMuZWxlbWVudHNbdC0xXTotMSksaT1Rcih0PHRoaXMuZWxlbWVudHMubGVuZ3RoP3RoaXMuZWxlbWVudHNbdF06LTEpO2lmKG49PT03JiZpPT09OClyZXR1cm4gMDtpZihuPT09OClyZXR1cm4gMTUwO2xldCByPTA7cmV0dXJuIG4hPT1pJiYocis9MTAsbj09PTAmJmk9PT0xJiYocis9MSkpLHIrPUpyKG4pLHIrPUpyKGkpLHJ9dHJhbnNsYXRlT2Zmc2V0KHQpe2lmKHRoaXMubGluZVJhbmdlLmlzRW1wdHkpcmV0dXJuIG5ldyBOZSh0aGlzLmxpbmVSYW5nZS5zdGFydCsxLDEpO2NvbnN0IG49QXQodGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmUsaT0+aTw9dCk7cmV0dXJuIG5ldyBOZSh0aGlzLmxpbmVSYW5nZS5zdGFydCtuKzEsdC10aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZVtuXSt0aGlzLmFkZGl0aW9uYWxPZmZzZXRCeUxpbmVbbl0rMSl9dHJhbnNsYXRlUmFuZ2UodCl7cmV0dXJuIG9lLmZyb21Qb3NpdGlvbnModGhpcy50cmFuc2xhdGVPZmZzZXQodC5zdGFydCksdGhpcy50cmFuc2xhdGVPZmZzZXQodC5lbmRFeGNsdXNpdmUpKX1maW5kV29yZENvbnRhaW5pbmcodCl7aWYodDwwfHx0Pj10aGlzLmVsZW1lbnRzLmxlbmd0aHx8IVFuKHRoaXMuZWxlbWVudHNbdF0pKXJldHVybjtsZXQgbj10O2Zvcig7bj4wJiZRbih0aGlzLmVsZW1lbnRzW24tMV0pOyluLS07bGV0IGk9dDtmb3IoO2k8dGhpcy5lbGVtZW50cy5sZW5ndGgmJlFuKHRoaXMuZWxlbWVudHNbaV0pOylpKys7cmV0dXJuIG5ldyAkKG4saSl9Y291bnRMaW5lc0luKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9mZnNldCh0LmVuZEV4Y2x1c2l2ZSkubGluZU51bWJlci10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LnN0YXJ0KS5saW5lTnVtYmVyfWlzU3Ryb25nbHlFcXVhbCh0LG4pe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdPT09dGhpcy5lbGVtZW50c1tuXX1leHRlbmRUb0Z1bGxMaW5lcyh0KXt2YXIgbixpO2NvbnN0IHI9KG49ZnQodGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmUscz0+czw9dC5zdGFydCkpIT09bnVsbCYmbiE9PXZvaWQgMD9uOjAsYT0oaT1zbCh0aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZSxzPT50LmVuZEV4Y2x1c2l2ZTw9cykpIT09bnVsbCYmaSE9PXZvaWQgMD9pOnRoaXMuZWxlbWVudHMubGVuZ3RoO3JldHVybiBuZXcgJChyLGEpfX1mdW5jdGlvbiBRbihlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTd9Y29uc3QgZ2w9ezA6MCwxOjAsMjowLDM6MTAsNDoyLDU6MzAsNjozLDc6MTAsODoxMH07ZnVuY3Rpb24gSnIoZSl7cmV0dXJuIGdsW2VdfWZ1bmN0aW9uIFFyKGUpe3JldHVybiBlPT09MTA/ODplPT09MTM/NzpKbihlKT82OmU+PTk3JiZlPD0xMjI/MDplPj02NSYmZTw9OTA/MTplPj00OCYmZTw9NTc/MjplPT09LTE/MzplPT09NDR8fGU9PT01OT81OjR9ZnVuY3Rpb24gYmwoZSx0LG4saSxyLGEpe2xldHttb3ZlczpzLGV4Y2x1ZGVkQ2hhbmdlczpvfT1fbChlLHQsbixhKTtpZighYS5pc1ZhbGlkKCkpcmV0dXJuW107Y29uc3QgbD1lLmZpbHRlcihjPT4hby5oYXMoYykpLHU9d2wobCxpLHIsdCxuLGEpO3JldHVybiBBbyhzLHUpLHM9eWwocykscz1zLmZpbHRlcihjPT57Y29uc3QgZD1jLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKS5zbGljZSh0KS5tYXAoZj0+Zi50cmltKCkpO3JldHVybiBkLmpvaW4oYApgKS5sZW5ndGg+PTE1JiZ2bChkLGY9PmYubGVuZ3RoPj0yKT49Mn0pLHM9eGwoZSxzKSxzfWZ1bmN0aW9uIHZsKGUsdCl7bGV0IG49MDtmb3IoY29uc3QgaSBvZiBlKXQoaSkmJm4rKztyZXR1cm4gbn1mdW5jdGlvbiBfbChlLHQsbixpKXtjb25zdCByPVtdLGE9ZS5maWx0ZXIobD0+bC5tb2RpZmllZC5pc0VtcHR5JiZsLm9yaWdpbmFsLmxlbmd0aD49MykubWFwKGw9Pm5ldyBidChsLm9yaWdpbmFsLHQsbCkpLHM9bmV3IFNldChlLmZpbHRlcihsPT5sLm9yaWdpbmFsLmlzRW1wdHkmJmwubW9kaWZpZWQubGVuZ3RoPj0zKS5tYXAobD0+bmV3IGJ0KGwubW9kaWZpZWQsbixsKSkpLG89bmV3IFNldDtmb3IoY29uc3QgbCBvZiBhKXtsZXQgdT0tMSxjO2Zvcihjb25zdCBkIG9mIHMpe2NvbnN0IG09bC5jb21wdXRlU2ltaWxhcml0eShkKTttPnUmJih1PW0sYz1kKX1pZih1Pi45JiZjJiYocy5kZWxldGUoYyksci5wdXNoKG5ldyBDZShsLnJhbmdlLGMucmFuZ2UpKSxvLmFkZChsLnNvdXJjZSksby5hZGQoYy5zb3VyY2UpKSwhaS5pc1ZhbGlkKCkpcmV0dXJue21vdmVzOnIsZXhjbHVkZWRDaGFuZ2VzOm99fXJldHVybnttb3ZlczpyLGV4Y2x1ZGVkQ2hhbmdlczpvfX1mdW5jdGlvbiB3bChlLHQsbixpLHIsYSl7Y29uc3Qgcz1bXSxvPW5ldyBZbztmb3IoY29uc3QgbSBvZiBlKWZvcihsZXQgZj1tLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjtmPG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO2YrKyl7Y29uc3QgYj1gJHt0W2YtMV19OiR7dFtmKzEtMV19OiR7dFtmKzItMV19YDtvLmFkZChiLHtyYW5nZTpuZXcgRyhmLGYrMyl9KX1jb25zdCBsPVtdO2Uuc29ydChqdChtPT5tLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixHdCkpO2Zvcihjb25zdCBtIG9mIGUpe2xldCBmPVtdO2ZvcihsZXQgYj1tLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjtiPG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO2IrKyl7Y29uc3QgcD1gJHtuW2ItMV19OiR7bltiKzEtMV19OiR7bltiKzItMV19YCx3PW5ldyBHKGIsYiszKSx4PVtdO28uZm9yRWFjaChwLCh7cmFuZ2U6X30pPT57Zm9yKGNvbnN0IEUgb2YgZilpZihFLm9yaWdpbmFsTGluZVJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrMT09PV8uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmRS5tb2RpZmllZExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT13LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpe0Uub3JpZ2luYWxMaW5lUmFuZ2U9bmV3IEcoRS5vcmlnaW5hbExpbmVSYW5nZS5zdGFydExpbmVOdW1iZXIsXy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSxFLm1vZGlmaWVkTGluZVJhbmdlPW5ldyBHKEUubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHcuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkseC5wdXNoKEUpO3JldHVybn1jb25zdCB5PXttb2RpZmllZExpbmVSYW5nZTp3LG9yaWdpbmFsTGluZVJhbmdlOl99O2wucHVzaCh5KSx4LnB1c2goeSl9KSxmPXh9aWYoIWEuaXNWYWxpZCgpKXJldHVybltdfWwuc29ydChTbyhqdChtPT5tLm1vZGlmaWVkTGluZVJhbmdlLmxlbmd0aCxHdCkpKTtjb25zdCB1PW5ldyBJZSxjPW5ldyBJZTtmb3IoY29uc3QgbSBvZiBsKXtjb25zdCBmPW0ubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLW0ub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGI9dS5zdWJ0cmFjdEZyb20obS5tb2RpZmllZExpbmVSYW5nZSkscD1jLnN1YnRyYWN0RnJvbShtLm9yaWdpbmFsTGluZVJhbmdlKS5nZXRXaXRoRGVsdGEoZiksdz1iLmdldEludGVyc2VjdGlvbihwKTtmb3IoY29uc3QgeCBvZiB3LnJhbmdlcyl7aWYoeC5sZW5ndGg8Myljb250aW51ZTtjb25zdCBfPXgseT14LmRlbHRhKC1mKTtzLnB1c2gobmV3IENlKHksXykpLHUuYWRkUmFuZ2UoXyksYy5hZGRSYW5nZSh5KX19cy5zb3J0KGp0KG09Pm0ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLEd0KSk7Y29uc3QgZD1uZXcgU3QoZSk7Zm9yKGxldCBtPTA7bTxzLmxlbmd0aDttKyspe2NvbnN0IGY9c1ttXSxiPWQuZmluZExhc3RNb25vdG9ub3VzKFA9PlAub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyPD1mLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikscD1mdChlLFA9PlAubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPD1mLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciksdz1NYXRoLm1heChmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1iLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixmLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1wLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikseD1kLmZpbmRMYXN0TW9ub3Rvbm91cyhQPT5QLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxmLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLF89ZnQoZSxQPT5QLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjxmLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLHk9TWF0aC5tYXgoeC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLWYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxfLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtZi5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtsZXQgRTtmb3IoRT0wO0U8dztFKyspe2NvbnN0IFA9Zi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItRS0xLHY9Zi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItRS0xO2lmKFA+aS5sZW5ndGh8fHY+ci5sZW5ndGh8fHUuY29udGFpbnModil8fGMuY29udGFpbnMoUCl8fCFZcihpW1AtMV0sclt2LTFdLGEpKWJyZWFrfUU+MCYmKGMuYWRkUmFuZ2UobmV3IEcoZi5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItRSxmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikpLHUuYWRkUmFuZ2UobmV3IEcoZi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItRSxmLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpKTtsZXQgUjtmb3IoUj0wO1I8eTtSKyspe2NvbnN0IFA9Zi5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK1Isdj1mLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUjtpZihQPmkubGVuZ3RofHx2PnIubGVuZ3RofHx1LmNvbnRhaW5zKHYpfHxjLmNvbnRhaW5zKFApfHwhWXIoaVtQLTFdLHJbdi0xXSxhKSlicmVha31SPjAmJihjLmFkZFJhbmdlKG5ldyBHKGYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxmLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUikpLHUuYWRkUmFuZ2UobmV3IEcoZi5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGYubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStSKSkpLChFPjB8fFI+MCkmJihzW21dPW5ldyBDZShuZXcgRyhmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1FLGYub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStSKSxuZXcgRyhmLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1FLGYubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStSKSkpfXJldHVybiBzfWZ1bmN0aW9uIFlyKGUsdCxuKXtpZihlLnRyaW0oKT09PXQudHJpbSgpKXJldHVybiEwO2lmKGUubGVuZ3RoPjMwMCYmdC5sZW5ndGg+MzAwKXJldHVybiExO2NvbnN0IHI9bmV3ICRyKCkuY29tcHV0ZShuZXcgS3QoW2VdLG5ldyAkKDAsMSksITEpLG5ldyBLdChbdF0sbmV3ICQoMCwxKSwhMSksbik7bGV0IGE9MDtjb25zdCBzPW5lLmludmVydChyLmRpZmZzLGUubGVuZ3RoKTtmb3IoY29uc3QgYyBvZiBzKWMuc2VxMVJhbmdlLmZvckVhY2goZD0+e0puKGUuY2hhckNvZGVBdChkKSl8fGErK30pO2Z1bmN0aW9uIG8oYyl7bGV0IGQ9MDtmb3IobGV0IG09MDttPGUubGVuZ3RoO20rKylKbihjLmNoYXJDb2RlQXQobSkpfHxkKys7cmV0dXJuIGR9Y29uc3QgbD1vKGUubGVuZ3RoPnQubGVuZ3RoP2U6dCk7cmV0dXJuIGEvbD4uNiYmbD4xMH1mdW5jdGlvbiB5bChlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIGU7ZS5zb3J0KGp0KG49Pm4ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLEd0KSk7Y29uc3QgdD1bZVswXV07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspe2NvbnN0IGk9dFt0Lmxlbmd0aC0xXSxyPWVbbl0sYT1yLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1pLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUscz1yLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1pLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aWYoYT49MCYmcz49MCYmYStzPD0yKXt0W3QubGVuZ3RoLTFdPWkuam9pbihyKTtjb250aW51ZX10LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24geGwoZSx0KXtjb25zdCBuPW5ldyBTdChlKTtyZXR1cm4gdD10LmZpbHRlcihpPT57Y29uc3Qgcj1uLmZpbmRMYXN0TW9ub3Rvbm91cyhvPT5vLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxpLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpfHxuZXcgQ2UobmV3IEcoMSwxKSxuZXcgRygxLDEpKSxhPWZ0KGUsbz0+by5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8aS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gciE9PWF9KSx0fWZ1bmN0aW9uIFpyKGUsdCxuKXtsZXQgaT1uO3JldHVybiBpPUtyKGUsdCxpKSxpPUtyKGUsdCxpKSxpPVRsKGUsdCxpKSxpfWZ1bmN0aW9uIEtyKGUsdCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuIG47Y29uc3QgaT1bXTtpLnB1c2goblswXSk7Zm9yKGxldCBhPTE7YTxuLmxlbmd0aDthKyspe2NvbnN0IHM9aVtpLmxlbmd0aC0xXTtsZXQgbz1uW2FdO2lmKG8uc2VxMVJhbmdlLmlzRW1wdHl8fG8uc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IGw9by5zZXExUmFuZ2Uuc3RhcnQtcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTE7dTw9bCYmIShlLmdldEVsZW1lbnQoby5zZXExUmFuZ2Uuc3RhcnQtdSkhPT1lLmdldEVsZW1lbnQoby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLXUpfHx0LmdldEVsZW1lbnQoby5zZXEyUmFuZ2Uuc3RhcnQtdSkhPT10LmdldEVsZW1lbnQoby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLXUpKTt1KyspO2lmKHUtLSx1PT09bCl7aVtpLmxlbmd0aC0xXT1uZXcgbmUobmV3ICQocy5zZXExUmFuZ2Uuc3RhcnQsby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLWwpLG5ldyAkKHMuc2VxMlJhbmdlLnN0YXJ0LG8uc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1sKSk7Y29udGludWV9bz1vLmRlbHRhKC11KX1pLnB1c2gobyl9Y29uc3Qgcj1bXTtmb3IobGV0IGE9MDthPGkubGVuZ3RoLTE7YSsrKXtjb25zdCBzPWlbYSsxXTtsZXQgbz1pW2FdO2lmKG8uc2VxMVJhbmdlLmlzRW1wdHl8fG8uc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IGw9cy5zZXExUmFuZ2Uuc3RhcnQtby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTA7dTxsJiYhKCFlLmlzU3Ryb25nbHlFcXVhbChvLnNlcTFSYW5nZS5zdGFydCt1LG8uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSt1KXx8IXQuaXNTdHJvbmdseUVxdWFsKG8uc2VxMlJhbmdlLnN0YXJ0K3Usby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK3UpKTt1KyspO2lmKHU9PT1sKXtpW2ErMV09bmV3IG5lKG5ldyAkKG8uc2VxMVJhbmdlLnN0YXJ0K2wscy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlKSxuZXcgJChvLnNlcTJSYW5nZS5zdGFydCtsLHMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSkpO2NvbnRpbnVlfXU+MCYmKG89by5kZWx0YSh1KSl9ci5wdXNoKG8pfXJldHVybiBpLmxlbmd0aD4wJiZyLnB1c2goaVtpLmxlbmd0aC0xXSkscn1mdW5jdGlvbiBUbChlLHQsbil7aWYoIWUuZ2V0Qm91bmRhcnlTY29yZXx8IXQuZ2V0Qm91bmRhcnlTY29yZSlyZXR1cm4gbjtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7Y29uc3Qgcj1pPjA/bltpLTFdOnZvaWQgMCxhPW5baV0scz1pKzE8bi5sZW5ndGg/bltpKzFdOnZvaWQgMCxvPW5ldyAkKHI/ci5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlKzE6MCxzP3Muc2VxMVJhbmdlLnN0YXJ0LTE6ZS5sZW5ndGgpLGw9bmV3ICQocj9yLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrMTowLHM/cy5zZXEyUmFuZ2Uuc3RhcnQtMTp0Lmxlbmd0aCk7YS5zZXExUmFuZ2UuaXNFbXB0eT9uW2ldPWVhKGEsZSx0LG8sbCk6YS5zZXEyUmFuZ2UuaXNFbXB0eSYmKG5baV09ZWEoYS5zd2FwKCksdCxlLGwsbykuc3dhcCgpKX1yZXR1cm4gbn1mdW5jdGlvbiBlYShlLHQsbixpLHIpe2xldCBzPTE7Zm9yKDtlLnNlcTFSYW5nZS5zdGFydC1zPj1pLnN0YXJ0JiZlLnNlcTJSYW5nZS5zdGFydC1zPj1yLnN0YXJ0JiZuLmlzU3Ryb25nbHlFcXVhbChlLnNlcTJSYW5nZS5zdGFydC1zLGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1zKSYmczwxMDA7KXMrKztzLS07bGV0IG89MDtmb3IoO2Uuc2VxMVJhbmdlLnN0YXJ0K288aS5lbmRFeGNsdXNpdmUmJmUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStvPHIuZW5kRXhjbHVzaXZlJiZuLmlzU3Ryb25nbHlFcXVhbChlLnNlcTJSYW5nZS5zdGFydCtvLGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStvKSYmbzwxMDA7KW8rKztpZihzPT09MCYmbz09PTApcmV0dXJuIGU7bGV0IGw9MCx1PS0xO2ZvcihsZXQgYz0tcztjPD1vO2MrKyl7Y29uc3QgZD1lLnNlcTJSYW5nZS5zdGFydCtjLG09ZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK2MsZj1lLnNlcTFSYW5nZS5zdGFydCtjLGI9dC5nZXRCb3VuZGFyeVNjb3JlKGYpK24uZ2V0Qm91bmRhcnlTY29yZShkKStuLmdldEJvdW5kYXJ5U2NvcmUobSk7Yj51JiYodT1iLGw9Yyl9cmV0dXJuIGUuZGVsdGEobCl9ZnVuY3Rpb24ga2woZSx0LG4pe2NvbnN0IGk9W107Zm9yKGNvbnN0IHIgb2Ygbil7Y29uc3QgYT1pW2kubGVuZ3RoLTFdO2lmKCFhKXtpLnB1c2gocik7Y29udGludWV9ci5zZXExUmFuZ2Uuc3RhcnQtYS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPD0yfHxyLnNlcTJSYW5nZS5zdGFydC1hLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU8PTI/aVtpLmxlbmd0aC0xXT1uZXcgbmUoYS5zZXExUmFuZ2Uuam9pbihyLnNlcTFSYW5nZSksYS5zZXEyUmFuZ2Uuam9pbihyLnNlcTJSYW5nZSkpOmkucHVzaChyKX1yZXR1cm4gaX1mdW5jdGlvbiBBbChlLHQsbil7Y29uc3QgaT1uZS5pbnZlcnQobixlLmxlbmd0aCkscj1bXTtsZXQgYT1uZXcgX2UoMCwwKTtmdW5jdGlvbiBzKGwsdSl7aWYobC5vZmZzZXQxPGEub2Zmc2V0MXx8bC5vZmZzZXQyPGEub2Zmc2V0MilyZXR1cm47Y29uc3QgYz1lLmZpbmRXb3JkQ29udGFpbmluZyhsLm9mZnNldDEpLGQ9dC5maW5kV29yZENvbnRhaW5pbmcobC5vZmZzZXQyKTtpZighY3x8IWQpcmV0dXJuO2xldCBtPW5ldyBuZShjLGQpO2NvbnN0IGY9bS5pbnRlcnNlY3QodSk7bGV0IGI9Zi5zZXExUmFuZ2UubGVuZ3RoLHA9Zi5zZXEyUmFuZ2UubGVuZ3RoO2Zvcig7aS5sZW5ndGg+MDspe2NvbnN0IHc9aVswXTtpZighKHcuc2VxMVJhbmdlLmludGVyc2VjdHMobS5zZXExUmFuZ2UpfHx3LnNlcTJSYW5nZS5pbnRlcnNlY3RzKG0uc2VxMlJhbmdlKSkpYnJlYWs7Y29uc3QgXz1lLmZpbmRXb3JkQ29udGFpbmluZyh3LnNlcTFSYW5nZS5zdGFydCkseT10LmZpbmRXb3JkQ29udGFpbmluZyh3LnNlcTJSYW5nZS5zdGFydCksRT1uZXcgbmUoXyx5KSxSPUUuaW50ZXJzZWN0KHcpO2lmKGIrPVIuc2VxMVJhbmdlLmxlbmd0aCxwKz1SLnNlcTJSYW5nZS5sZW5ndGgsbT1tLmpvaW4oRSksbS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPj13LnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpaS5zaGlmdCgpO2Vsc2UgYnJlYWt9YitwPChtLnNlcTFSYW5nZS5sZW5ndGgrbS5zZXEyUmFuZ2UubGVuZ3RoKSoyLzMmJnIucHVzaChtKSxhPW0uZ2V0RW5kRXhjbHVzaXZlcygpfWZvcig7aS5sZW5ndGg+MDspe2NvbnN0IGw9aS5zaGlmdCgpO2wuc2VxMVJhbmdlLmlzRW1wdHl8fChzKGwuZ2V0U3RhcnRzKCksbCkscyhsLmdldEVuZEV4Y2x1c2l2ZXMoKS5kZWx0YSgtMSksbCkpfXJldHVybiBTbChuLHIpfWZ1bmN0aW9uIFNsKGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCBpPWVbMF0scj10WzBdO2xldCBhO2kmJighcnx8aS5zZXExUmFuZ2Uuc3RhcnQ8ci5zZXExUmFuZ2Uuc3RhcnQpP2E9ZS5zaGlmdCgpOmE9dC5zaGlmdCgpLG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49YS5zZXExUmFuZ2Uuc3RhcnQ/bltuLmxlbmd0aC0xXT1uW24ubGVuZ3RoLTFdLmpvaW4oYSk6bi5wdXNoKGEpfXJldHVybiBufWZ1bmN0aW9uIExsKGUsdCxuKXtsZXQgaT1uO2lmKGkubGVuZ3RoPT09MClyZXR1cm4gaTtsZXQgcj0wLGE7ZG97YT0hMTtjb25zdCBzPVtpWzBdXTtmb3IobGV0IG89MTtvPGkubGVuZ3RoO28rKyl7bGV0IGM9ZnVuY3Rpb24obSxmKXtjb25zdCBiPW5ldyAkKHUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxsLnNlcTFSYW5nZS5zdGFydCk7cmV0dXJuIGUuZ2V0VGV4dChiKS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGg8PTQmJihtLnNlcTFSYW5nZS5sZW5ndGgrbS5zZXEyUmFuZ2UubGVuZ3RoPjV8fGYuc2VxMVJhbmdlLmxlbmd0aCtmLnNlcTJSYW5nZS5sZW5ndGg+NSl9O2NvbnN0IGw9aVtvXSx1PXNbcy5sZW5ndGgtMV07Yyh1LGwpPyhhPSEwLHNbcy5sZW5ndGgtMV09c1tzLmxlbmd0aC0xXS5qb2luKGwpKTpzLnB1c2gobCl9aT1zfXdoaWxlKHIrKzwxMCYmYSk7cmV0dXJuIGl9ZnVuY3Rpb24gQ2woZSx0LG4pe2xldCBpPW47aWYoaS5sZW5ndGg9PT0wKXJldHVybiBpO2xldCByPTAsYTtkb3thPSExO2NvbnN0IG89W2lbMF1dO2ZvcihsZXQgbD0xO2w8aS5sZW5ndGg7bCsrKXtsZXQgZD1mdW5jdGlvbihmLGIpe2NvbnN0IHA9bmV3ICQoYy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHUuc2VxMVJhbmdlLnN0YXJ0KTtpZihlLmNvdW50TGluZXNJbihwKT41fHxwLmxlbmd0aD41MDApcmV0dXJuITE7Y29uc3QgeD1lLmdldFRleHQocCkudHJpbSgpO2lmKHgubGVuZ3RoPjIwfHx4LnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RoPjEpcmV0dXJuITE7Y29uc3QgXz1lLmNvdW50TGluZXNJbihmLnNlcTFSYW5nZSkseT1mLnNlcTFSYW5nZS5sZW5ndGgsRT10LmNvdW50TGluZXNJbihmLnNlcTJSYW5nZSksUj1mLnNlcTJSYW5nZS5sZW5ndGgsUD1lLmNvdW50TGluZXNJbihiLnNlcTFSYW5nZSksdj1iLnNlcTFSYW5nZS5sZW5ndGgsZz10LmNvdW50TGluZXNJbihiLnNlcTJSYW5nZSksVD1iLnNlcTJSYW5nZS5sZW5ndGgscT0yKjQwKzUwO2Z1bmN0aW9uIFMoayl7cmV0dXJuIE1hdGgubWluKGsscSl9cmV0dXJuIE1hdGgucG93KE1hdGgucG93KFMoXyo0MCt5KSwxLjUpK01hdGgucG93KFMoRSo0MCtSKSwxLjUpLDEuNSkrTWF0aC5wb3coTWF0aC5wb3coUyhQKjQwK3YpLDEuNSkrTWF0aC5wb3coUyhnKjQwK1QpLDEuNSksMS41KT4ocSoqMS41KSoqMS41KjEuM307Y29uc3QgdT1pW2xdLGM9b1tvLmxlbmd0aC0xXTtkKGMsdSk/KGE9ITAsb1tvLmxlbmd0aC0xXT1vW28ubGVuZ3RoLTFdLmpvaW4odSkpOm8ucHVzaCh1KX1pPW99d2hpbGUocisrPDEwJiZhKTtjb25zdCBzPVtdO3JldHVybiBrbyhpLChvLGwsdSk9PntsZXQgYz1sO2Z1bmN0aW9uIGQoeCl7cmV0dXJuIHgubGVuZ3RoPjAmJngudHJpbSgpLmxlbmd0aDw9MyYmbC5zZXExUmFuZ2UubGVuZ3RoK2wuc2VxMlJhbmdlLmxlbmd0aD4xMDB9Y29uc3QgbT1lLmV4dGVuZFRvRnVsbExpbmVzKGwuc2VxMVJhbmdlKSxmPWUuZ2V0VGV4dChuZXcgJChtLnN0YXJ0LGwuc2VxMVJhbmdlLnN0YXJ0KSk7ZChmKSYmKGM9Yy5kZWx0YVN0YXJ0KC1mLmxlbmd0aCkpO2NvbnN0IGI9ZS5nZXRUZXh0KG5ldyAkKGwuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxtLmVuZEV4Y2x1c2l2ZSkpO2QoYikmJihjPWMuZGVsdGFFbmQoYi5sZW5ndGgpKTtjb25zdCBwPW5lLmZyb21PZmZzZXRQYWlycyhvP28uZ2V0RW5kRXhjbHVzaXZlcygpOl9lLnplcm8sdT91LmdldFN0YXJ0cygpOl9lLm1heCksdz1jLmludGVyc2VjdChwKTtzLmxlbmd0aD4wJiZ3LmdldFN0YXJ0cygpLmVxdWFscyhzW3MubGVuZ3RoLTFdLmdldEVuZEV4Y2x1c2l2ZXMoKSk/c1tzLmxlbmd0aC0xXT1zW3MubGVuZ3RoLTFdLmpvaW4odyk6cy5wdXNoKHcpfSksc31jbGFzcyB0YXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHJpbW1lZEhhc2g9dCx0aGlzLmxpbmVzPW59Z2V0RWxlbWVudCh0KXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaFt0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMudHJpbW1lZEhhc2gubGVuZ3RofWdldEJvdW5kYXJ5U2NvcmUodCl7Y29uc3Qgbj10PT09MD8wOm5hKHRoaXMubGluZXNbdC0xXSksaT10PT09dGhpcy5saW5lcy5sZW5ndGg/MDpuYSh0aGlzLmxpbmVzW3RdKTtyZXR1cm4gMWUzLShuK2kpfWdldFRleHQodCl7cmV0dXJuIHRoaXMubGluZXMuc2xpY2UodC5zdGFydCx0LmVuZEV4Y2x1c2l2ZSkuam9pbihgCmApfWlzU3Ryb25nbHlFcXVhbCh0LG4pe3JldHVybiB0aGlzLmxpbmVzW3RdPT09dGhpcy5saW5lc1tuXX19ZnVuY3Rpb24gbmEoZSl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGgmJihlLmNoYXJDb2RlQXQodCk9PT0zMnx8ZS5jaGFyQ29kZUF0KHQpPT09OSk7KXQrKztyZXR1cm4gdH1jbGFzcyBFbHtjb25zdHJ1Y3Rvcigpe3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZz1uZXcgbWwsdGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG09bmV3ICRyfWNvbXB1dGVEaWZmKHQsbixpKXtpZih0Lmxlbmd0aDw9MSYmeW8odCxuLChSLFApPT5SPT09UCkpcmV0dXJuIG5ldyBadChbXSxbXSwhMSk7aWYodC5sZW5ndGg9PT0xJiZ0WzBdLmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MSYmblswXS5sZW5ndGg9PT0wKXJldHVybiBuZXcgWnQoW25ldyBXZShuZXcgRygxLHQubGVuZ3RoKzEpLG5ldyBHKDEsbi5sZW5ndGgrMSksW25ldyBwdChuZXcgb2UoMSwxLHQubGVuZ3RoLHRbMF0ubGVuZ3RoKzEpLG5ldyBvZSgxLDEsbi5sZW5ndGgsblswXS5sZW5ndGgrMSkpXSldLFtdLCExKTtjb25zdCByPWkubWF4Q29tcHV0YXRpb25UaW1lTXM9PT0wP0N0Lmluc3RhbmNlOm5ldyBkbChpLm1heENvbXB1dGF0aW9uVGltZU1zKSxhPSFpLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLHM9bmV3IE1hcDtmdW5jdGlvbiBvKFIpe2xldCBQPXMuZ2V0KFIpO3JldHVybiBQPT09dm9pZCAwJiYoUD1zLnNpemUscy5zZXQoUixQKSksUH1jb25zdCBsPXQubWFwKFI9Pm8oUi50cmltKCkpKSx1PW4ubWFwKFI9Pm8oUi50cmltKCkpKSxjPW5ldyB0YShsLHQpLGQ9bmV3IHRhKHUsbiksbT1jLmxlbmd0aCtkLmxlbmd0aDwxNzAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKGMsZCxyLChSLFApPT50W1JdPT09bltQXT9uW1BdLmxlbmd0aD09PTA/LjE6MStNYXRoLmxvZygxK25bUF0ubGVuZ3RoKTouOTkpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUoYyxkKTtsZXQgZj1tLmRpZmZzLGI9bS5oaXRUaW1lb3V0O2Y9WnIoYyxkLGYpLGY9TGwoYyxkLGYpO2NvbnN0IHA9W10sdz1SPT57aWYoYSlmb3IobGV0IFA9MDtQPFI7UCsrKXtjb25zdCB2PXgrUCxnPV8rUDtpZih0W3ZdIT09bltnXSl7Y29uc3QgVD10aGlzLnJlZmluZURpZmYodCxuLG5ldyBuZShuZXcgJCh2LHYrMSksbmV3ICQoZyxnKzEpKSxyLGEpO2Zvcihjb25zdCBxIG9mIFQubWFwcGluZ3MpcC5wdXNoKHEpO1QuaGl0VGltZW91dCYmKGI9ITApfX19O2xldCB4PTAsXz0wO2Zvcihjb25zdCBSIG9mIGYpe1l0KCgpPT5SLnNlcTFSYW5nZS5zdGFydC14PT09Ui5zZXEyUmFuZ2Uuc3RhcnQtXyk7Y29uc3QgUD1SLnNlcTFSYW5nZS5zdGFydC14O3coUCkseD1SLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUsXz1SLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU7Y29uc3Qgdj10aGlzLnJlZmluZURpZmYodCxuLFIscixhKTt2LmhpdFRpbWVvdXQmJihiPSEwKTtmb3IoY29uc3QgZyBvZiB2Lm1hcHBpbmdzKXAucHVzaChnKX13KHQubGVuZ3RoLXgpO2NvbnN0IHk9aWEocCx0LG4pO2xldCBFPVtdO3JldHVybiBpLmNvbXB1dGVNb3ZlcyYmKEU9dGhpcy5jb21wdXRlTW92ZXMoeSx0LG4sbCx1LHIsYSkpLFl0KCgpPT57ZnVuY3Rpb24gUih2LGcpe2lmKHYubGluZU51bWJlcjwxfHx2LmxpbmVOdW1iZXI+Zy5sZW5ndGgpcmV0dXJuITE7Y29uc3QgVD1nW3YubGluZU51bWJlci0xXTtyZXR1cm4hKHYuY29sdW1uPDF8fHYuY29sdW1uPlQubGVuZ3RoKzEpfWZ1bmN0aW9uIFAodixnKXtyZXR1cm4hKHYuc3RhcnRMaW5lTnVtYmVyPDF8fHYuc3RhcnRMaW5lTnVtYmVyPmcubGVuZ3RoKzF8fHYuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTwxfHx2LmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+Zy5sZW5ndGgrMSl9Zm9yKGNvbnN0IHYgb2YgeSl7aWYoIXYuaW5uZXJDaGFuZ2VzKXJldHVybiExO2Zvcihjb25zdCBnIG9mIHYuaW5uZXJDaGFuZ2VzKWlmKCEoUihnLm1vZGlmaWVkUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpLG4pJiZSKGcubW9kaWZpZWRSYW5nZS5nZXRFbmRQb3NpdGlvbigpLG4pJiZSKGcub3JpZ2luYWxSYW5nZS5nZXRTdGFydFBvc2l0aW9uKCksdCkmJlIoZy5vcmlnaW5hbFJhbmdlLmdldEVuZFBvc2l0aW9uKCksdCkpKXJldHVybiExO2lmKCFQKHYubW9kaWZpZWQsbil8fCFQKHYub3JpZ2luYWwsdCkpcmV0dXJuITF9cmV0dXJuITB9KSxuZXcgWnQoeSxFLGIpfWNvbXB1dGVNb3Zlcyh0LG4saSxyLGEscyxvKXtyZXR1cm4gYmwodCxuLGkscixhLHMpLm1hcChjPT57Y29uc3QgZD10aGlzLnJlZmluZURpZmYobixpLG5ldyBuZShjLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKSxjLm1vZGlmaWVkLnRvT2Zmc2V0UmFuZ2UoKSkscyxvKSxtPWlhKGQubWFwcGluZ3MsbixpLCEwKTtyZXR1cm4gbmV3IGFsKGMsbSl9KX1yZWZpbmVEaWZmKHQsbixpLHIsYSl7Y29uc3Qgcz1uZXcgS3QodCxpLnNlcTFSYW5nZSxhKSxvPW5ldyBLdChuLGkuc2VxMlJhbmdlLGEpLGw9cy5sZW5ndGgrby5sZW5ndGg8NTAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKHMsbyxyKTp0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobS5jb21wdXRlKHMsbyxyKTtsZXQgdT1sLmRpZmZzO3JldHVybiB1PVpyKHMsbyx1KSx1PUFsKHMsbyx1KSx1PWtsKHMsbyx1KSx1PUNsKHMsbyx1KSx7bWFwcGluZ3M6dS5tYXAoZD0+bmV3IHB0KHMudHJhbnNsYXRlUmFuZ2UoZC5zZXExUmFuZ2UpLG8udHJhbnNsYXRlUmFuZ2UoZC5zZXEyUmFuZ2UpKSksaGl0VGltZW91dDpsLmhpdFRpbWVvdXR9fX1mdW5jdGlvbiBpYShlLHQsbixpPSExKXtjb25zdCByPVtdO2Zvcihjb25zdCBhIG9mIHhvKGUubWFwKHM9PlJsKHMsdCxuKSksKHMsbyk9PnMub3JpZ2luYWwub3ZlcmxhcE9yVG91Y2goby5vcmlnaW5hbCl8fHMubW9kaWZpZWQub3ZlcmxhcE9yVG91Y2goby5tb2RpZmllZCkpKXtjb25zdCBzPWFbMF0sbz1hW2EubGVuZ3RoLTFdO3IucHVzaChuZXcgV2Uocy5vcmlnaW5hbC5qb2luKG8ub3JpZ2luYWwpLHMubW9kaWZpZWQuam9pbihvLm1vZGlmaWVkKSxhLm1hcChsPT5sLmlubmVyQ2hhbmdlc1swXSkpKX1yZXR1cm4gWXQoKCk9PiFpJiZyLmxlbmd0aD4wJiYoclswXS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIhPT1yWzBdLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcnx8bi5sZW5ndGgtcltyLmxlbmd0aC0xXS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlIT09dC5sZW5ndGgtcltyLmxlbmd0aC0xXS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKT8hMTpCcihyLChhLHMpPT5zLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1hLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1zLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1hLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJmEub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciYmYS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyKSkscn1mdW5jdGlvbiBSbChlLHQsbil7bGV0IGk9MCxyPTA7ZS5tb2RpZmllZFJhbmdlLmVuZENvbHVtbj09PTEmJmUub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW49PT0xJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK2k8PWUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyJiZlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK2k8PWUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyJiYocj0tMSksZS5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLTE+PW5bZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlci0xXS5sZW5ndGgmJmUub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbi0xPj10W2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyPD1lLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcityJiZlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyPD1lLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcityJiYoaT0xKTtjb25zdCBhPW5ldyBHKGUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIraSxlLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcisxK3IpLHM9bmV3IEcoZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcitpLGUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyKzErcik7cmV0dXJuIG5ldyBXZShhLHMsW2VdKX1jb25zdCByYT17Z2V0TGVnYWN5OigpPT5uZXcgbGwsZ2V0RGVmYXVsdDooKT0+bmV3IEVsfTtmdW5jdGlvbiAkZShlLHQpe2NvbnN0IG49TWF0aC5wb3coMTAsdCk7cmV0dXJuIE1hdGgucm91bmQoZSpuKS9ufWNsYXNzIGxle2NvbnN0cnVjdG9yKHQsbixpLHI9MSl7dGhpcy5fcmdiYUJyYW5kPXZvaWQgMCx0aGlzLnI9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsdCkpfDAsdGhpcy5nPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLG4pKXwwLHRoaXMuYj1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxpKSl8MCx0aGlzLmE9JGUoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQucj09PW4uciYmdC5nPT09bi5nJiZ0LmI9PT1uLmImJnQuYT09PW4uYX19Y2xhc3MgVGV7Y29uc3RydWN0b3IodCxuLGkscil7dGhpcy5faHNsYUJyYW5kPXZvaWQgMCx0aGlzLmg9TWF0aC5tYXgoTWF0aC5taW4oMzYwLHQpLDApfDAsdGhpcy5zPSRlKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5sPSRlKE1hdGgubWF4KE1hdGgubWluKDEsaSksMCksMyksdGhpcy5hPSRlKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0Lmg9PT1uLmgmJnQucz09PW4ucyYmdC5sPT09bi5sJiZ0LmE9PT1uLmF9c3RhdGljIGZyb21SR0JBKHQpe2NvbnN0IG49dC5yLzI1NSxpPXQuZy8yNTUscj10LmIvMjU1LGE9dC5hLHM9TWF0aC5tYXgobixpLHIpLG89TWF0aC5taW4obixpLHIpO2xldCBsPTAsdT0wO2NvbnN0IGM9KG8rcykvMixkPXMtbztpZihkPjApe3N3aXRjaCh1PU1hdGgubWluKGM8PS41P2QvKDIqYyk6ZC8oMi0yKmMpLDEpLHMpe2Nhc2UgbjpsPShpLXIpL2QrKGk8cj82OjApO2JyZWFrO2Nhc2UgaTpsPShyLW4pL2QrMjticmVhaztjYXNlIHI6bD0obi1pKS9kKzQ7YnJlYWt9bCo9NjAsbD1NYXRoLnJvdW5kKGwpfXJldHVybiBuZXcgVGUobCx1LGMsYSl9c3RhdGljIF9odWUycmdiKHQsbixpKXtyZXR1cm4gaTwwJiYoaSs9MSksaT4xJiYoaS09MSksaTwxLzY/dCsobi10KSo2Kmk6aTwxLzI/bjppPDIvMz90KyhuLXQpKigyLzMtaSkqNjp0fXN0YXRpYyB0b1JHQkEodCl7Y29uc3Qgbj10LmgvMzYwLHtzOmksbDpyLGF9PXQ7bGV0IHMsbyxsO2lmKGk9PT0wKXM9bz1sPXI7ZWxzZXtjb25zdCB1PXI8LjU/ciooMStpKTpyK2ktcippLGM9MipyLXU7cz1UZS5faHVlMnJnYihjLHUsbisxLzMpLG89VGUuX2h1ZTJyZ2IoYyx1LG4pLGw9VGUuX2h1ZTJyZ2IoYyx1LG4tMS8zKX1yZXR1cm4gbmV3IGxlKE1hdGgucm91bmQocyoyNTUpLE1hdGgucm91bmQobyoyNTUpLE1hdGgucm91bmQobCoyNTUpLGEpfX1jbGFzcyB2dHtjb25zdHJ1Y3Rvcih0LG4saSxyKXt0aGlzLl9oc3ZhQnJhbmQ9dm9pZCAwLHRoaXMuaD1NYXRoLm1heChNYXRoLm1pbigzNjAsdCksMCl8MCx0aGlzLnM9JGUoTWF0aC5tYXgoTWF0aC5taW4oMSxuKSwwKSwzKSx0aGlzLnY9JGUoTWF0aC5tYXgoTWF0aC5taW4oMSxpKSwwKSwzKSx0aGlzLmE9JGUoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQuaD09PW4uaCYmdC5zPT09bi5zJiZ0LnY9PT1uLnYmJnQuYT09PW4uYX1zdGF0aWMgZnJvbVJHQkEodCl7Y29uc3Qgbj10LnIvMjU1LGk9dC5nLzI1NSxyPXQuYi8yNTUsYT1NYXRoLm1heChuLGkscikscz1NYXRoLm1pbihuLGksciksbz1hLXMsbD1hPT09MD8wOm8vYTtsZXQgdTtyZXR1cm4gbz09PTA/dT0wOmE9PT1uP3U9KChpLXIpL28lNis2KSU2OmE9PT1pP3U9KHItbikvbysyOnU9KG4taSkvbys0LG5ldyB2dChNYXRoLnJvdW5kKHUqNjApLGwsYSx0LmEpfXN0YXRpYyB0b1JHQkEodCl7Y29uc3R7aDpuLHM6aSx2OnIsYX09dCxzPXIqaSxvPXMqKDEtTWF0aC5hYnMobi82MCUyLTEpKSxsPXItcztsZXRbdSxjLGRdPVswLDAsMF07cmV0dXJuIG48NjA/KHU9cyxjPW8pOm48MTIwPyh1PW8sYz1zKTpuPDE4MD8oYz1zLGQ9byk6bjwyNDA/KGM9byxkPXMpOm48MzAwPyh1PW8sZD1zKTpuPD0zNjAmJih1PXMsZD1vKSx1PU1hdGgucm91bmQoKHUrbCkqMjU1KSxjPU1hdGgucm91bmQoKGMrbCkqMjU1KSxkPU1hdGgucm91bmQoKGQrbCkqMjU1KSxuZXcgbGUodSxjLGQsYSl9fWxldCBhZT1jbGFzcyBrZXtzdGF0aWMgZnJvbUhleCh0KXtyZXR1cm4ga2UuRm9ybWF0LkNTUy5wYXJzZUhleCh0KXx8a2UucmVkfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4hdCYmIW4/ITA6IXR8fCFuPyExOnQuZXF1YWxzKG4pfWdldCBoc2xhKCl7cmV0dXJuIHRoaXMuX2hzbGE/dGhpcy5faHNsYTpUZS5mcm9tUkdCQSh0aGlzLnJnYmEpfWdldCBoc3ZhKCl7cmV0dXJuIHRoaXMuX2hzdmE/dGhpcy5faHN2YTp2dC5mcm9tUkdCQSh0aGlzLnJnYmEpfWNvbnN0cnVjdG9yKHQpe2lmKHQpaWYodCBpbnN0YW5jZW9mIGxlKXRoaXMucmdiYT10O2Vsc2UgaWYodCBpbnN0YW5jZW9mIFRlKXRoaXMuX2hzbGE9dCx0aGlzLnJnYmE9VGUudG9SR0JBKHQpO2Vsc2UgaWYodCBpbnN0YW5jZW9mIHZ0KXRoaXMuX2hzdmE9dCx0aGlzLnJnYmE9dnQudG9SR0JBKHQpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbG9yIGN0b3IgYXJndW1lbnQiKTtlbHNlIHRocm93IG5ldyBFcnJvcigiQ29sb3IgbmVlZHMgYSB2YWx1ZSIpfWVxdWFscyh0KXtyZXR1cm4hIXQmJmxlLmVxdWFscyh0aGlzLnJnYmEsdC5yZ2JhKSYmVGUuZXF1YWxzKHRoaXMuaHNsYSx0LmhzbGEpJiZ2dC5lcXVhbHModGhpcy5oc3ZhLHQuaHN2YSl9Z2V0UmVsYXRpdmVMdW1pbmFuY2UoKXtjb25zdCB0PWtlLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuciksbj1rZS5fcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodGhpcy5yZ2JhLmcpLGk9a2UuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5iKSxyPS4yMTI2KnQrLjcxNTIqbisuMDcyMippO3JldHVybiAkZShyLDQpfXN0YXRpYyBfcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodCl7Y29uc3Qgbj10LzI1NTtyZXR1cm4gbjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1pc0xpZ2h0ZXIoKXtyZXR1cm4odGhpcy5yZ2JhLnIqMjk5K3RoaXMucmdiYS5nKjU4Nyt0aGlzLnJnYmEuYioxMTQpLzFlMz49MTI4fWlzTGlnaHRlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG4+aX1pc0RhcmtlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG48aX1saWdodGVuKHQpe3JldHVybiBuZXcga2UobmV3IFRlKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sK3RoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX1kYXJrZW4odCl7cmV0dXJuIG5ldyBrZShuZXcgVGUodGhpcy5oc2xhLmgsdGhpcy5oc2xhLnMsdGhpcy5oc2xhLmwtdGhpcy5oc2xhLmwqdCx0aGlzLmhzbGEuYSkpfXRyYW5zcGFyZW50KHQpe2NvbnN0e3I6bixnOmksYjpyLGF9PXRoaXMucmdiYTtyZXR1cm4gbmV3IGtlKG5ldyBsZShuLGkscixhKnQpKX1pc1RyYW5zcGFyZW50KCl7cmV0dXJuIHRoaXMucmdiYS5hPT09MH1pc09wYXF1ZSgpe3JldHVybiB0aGlzLnJnYmEuYT09PTF9b3Bwb3NpdGUoKXtyZXR1cm4gbmV3IGtlKG5ldyBsZSgyNTUtdGhpcy5yZ2JhLnIsMjU1LXRoaXMucmdiYS5nLDI1NS10aGlzLnJnYmEuYix0aGlzLnJnYmEuYSkpfW1ha2VPcGFxdWUodCl7aWYodGhpcy5pc09wYXF1ZSgpfHx0LnJnYmEuYSE9PTEpcmV0dXJuIHRoaXM7Y29uc3R7cjpuLGc6aSxiOnIsYX09dGhpcy5yZ2JhO3JldHVybiBuZXcga2UobmV3IGxlKHQucmdiYS5yLWEqKHQucmdiYS5yLW4pLHQucmdiYS5nLWEqKHQucmdiYS5nLWkpLHQucmdiYS5iLWEqKHQucmdiYS5iLXIpLDEpKX10b1N0cmluZygpe3JldHVybiB0aGlzLl90b1N0cmluZ3x8KHRoaXMuX3RvU3RyaW5nPWtlLkZvcm1hdC5DU1MuZm9ybWF0KHRoaXMpKSx0aGlzLl90b1N0cmluZ31zdGF0aWMgZ2V0TGlnaHRlckNvbG9yKHQsbixpKXtpZih0LmlzTGlnaHRlclRoYW4obikpcmV0dXJuIHQ7aT1pfHwuNTtjb25zdCByPXQuZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKSxhPW4uZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKTtyZXR1cm4gaT1pKihhLXIpL2EsdC5saWdodGVuKGkpfXN0YXRpYyBnZXREYXJrZXJDb2xvcih0LG4saSl7aWYodC5pc0RhcmtlclRoYW4obikpcmV0dXJuIHQ7aT1pfHwuNTtjb25zdCByPXQuZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKSxhPW4uZ2V0UmVsYXRpdmVMdW1pbmFuY2UoKTtyZXR1cm4gaT1pKihyLWEpL3IsdC5kYXJrZW4oaSl9fTthZS53aGl0ZT1uZXcgYWUobmV3IGxlKDI1NSwyNTUsMjU1LDEpKSxhZS5ibGFjaz1uZXcgYWUobmV3IGxlKDAsMCwwLDEpKSxhZS5yZWQ9bmV3IGFlKG5ldyBsZSgyNTUsMCwwLDEpKSxhZS5ibHVlPW5ldyBhZShuZXcgbGUoMCwwLDI1NSwxKSksYWUuZ3JlZW49bmV3IGFlKG5ldyBsZSgwLDI1NSwwLDEpKSxhZS5jeWFuPW5ldyBhZShuZXcgbGUoMCwyNTUsMjU1LDEpKSxhZS5saWdodGdyZXk9bmV3IGFlKG5ldyBsZSgyMTEsMjExLDIxMSwxKSksYWUudHJhbnNwYXJlbnQ9bmV3IGFlKG5ldyBsZSgwLDAsMCwwKSksZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbihuKXtmdW5jdGlvbiBpKGYpe3JldHVybiBmLnJnYmEuYT09PTE/YHJnYigke2YucmdiYS5yfSwgJHtmLnJnYmEuZ30sICR7Zi5yZ2JhLmJ9KWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEoZil9bi5mb3JtYXRSR0I9aTtmdW5jdGlvbiByKGYpe3JldHVybmByZ2JhKCR7Zi5yZ2JhLnJ9LCAke2YucmdiYS5nfSwgJHtmLnJnYmEuYn0sICR7K2YucmdiYS5hLnRvRml4ZWQoMil9KWB9bi5mb3JtYXRSR0JBPXI7ZnVuY3Rpb24gYShmKXtyZXR1cm4gZi5oc2xhLmE9PT0xP2Boc2woJHtmLmhzbGEuaH0sICR7KGYuaHNsYS5zKjEwMCkudG9GaXhlZCgyKX0lLCAkeyhmLmhzbGEubCoxMDApLnRvRml4ZWQoMil9JSlgOmUuRm9ybWF0LkNTUy5mb3JtYXRIU0xBKGYpfW4uZm9ybWF0SFNMPWE7ZnVuY3Rpb24gcyhmKXtyZXR1cm5gaHNsYSgke2YuaHNsYS5ofSwgJHsoZi5oc2xhLnMqMTAwKS50b0ZpeGVkKDIpfSUsICR7KGYuaHNsYS5sKjEwMCkudG9GaXhlZCgyKX0lLCAke2YuaHNsYS5hLnRvRml4ZWQoMil9KWB9bi5mb3JtYXRIU0xBPXM7ZnVuY3Rpb24gbyhmKXtjb25zdCBiPWYudG9TdHJpbmcoMTYpO3JldHVybiBiLmxlbmd0aCE9PTI/IjAiK2I6Yn1mdW5jdGlvbiBsKGYpe3JldHVybmAjJHtvKGYucmdiYS5yKX0ke28oZi5yZ2JhLmcpfSR7byhmLnJnYmEuYil9YH1uLmZvcm1hdEhleD1sO2Z1bmN0aW9uIHUoZixiPSExKXtyZXR1cm4gYiYmZi5yZ2JhLmE9PT0xP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgoZik6YCMke28oZi5yZ2JhLnIpfSR7byhmLnJnYmEuZyl9JHtvKGYucmdiYS5iKX0ke28oTWF0aC5yb3VuZChmLnJnYmEuYSoyNTUpKX1gfW4uZm9ybWF0SGV4QT11O2Z1bmN0aW9uIGMoZil7cmV0dXJuIGYuaXNPcGFxdWUoKT9lLkZvcm1hdC5DU1MuZm9ybWF0SGV4KGYpOmUuRm9ybWF0LkNTUy5mb3JtYXRSR0JBKGYpfW4uZm9ybWF0PWM7ZnVuY3Rpb24gZChmKXtjb25zdCBiPWYubGVuZ3RoO2lmKGI9PT0wfHxmLmNoYXJDb2RlQXQoMCkhPT0zNSlyZXR1cm4gbnVsbDtpZihiPT09Nyl7Y29uc3QgcD0xNiptKGYuY2hhckNvZGVBdCgxKSkrbShmLmNoYXJDb2RlQXQoMikpLHc9MTYqbShmLmNoYXJDb2RlQXQoMykpK20oZi5jaGFyQ29kZUF0KDQpKSx4PTE2Km0oZi5jaGFyQ29kZUF0KDUpKSttKGYuY2hhckNvZGVBdCg2KSk7cmV0dXJuIG5ldyBlKG5ldyBsZShwLHcseCwxKSl9aWYoYj09PTkpe2NvbnN0IHA9MTYqbShmLmNoYXJDb2RlQXQoMSkpK20oZi5jaGFyQ29kZUF0KDIpKSx3PTE2Km0oZi5jaGFyQ29kZUF0KDMpKSttKGYuY2hhckNvZGVBdCg0KSkseD0xNiptKGYuY2hhckNvZGVBdCg1KSkrbShmLmNoYXJDb2RlQXQoNikpLF89MTYqbShmLmNoYXJDb2RlQXQoNykpK20oZi5jaGFyQ29kZUF0KDgpKTtyZXR1cm4gbmV3IGUobmV3IGxlKHAsdyx4LF8vMjU1KSl9aWYoYj09PTQpe2NvbnN0IHA9bShmLmNoYXJDb2RlQXQoMSkpLHc9bShmLmNoYXJDb2RlQXQoMikpLHg9bShmLmNoYXJDb2RlQXQoMykpO3JldHVybiBuZXcgZShuZXcgbGUoMTYqcCtwLDE2KncrdywxNip4K3gpKX1pZihiPT09NSl7Y29uc3QgcD1tKGYuY2hhckNvZGVBdCgxKSksdz1tKGYuY2hhckNvZGVBdCgyKSkseD1tKGYuY2hhckNvZGVBdCgzKSksXz1tKGYuY2hhckNvZGVBdCg0KSk7cmV0dXJuIG5ldyBlKG5ldyBsZSgxNipwK3AsMTYqdyt3LDE2KngreCwoMTYqXytfKS8yNTUpKX1yZXR1cm4gbnVsbH1uLnBhcnNlSGV4PWQ7ZnVuY3Rpb24gbShmKXtzd2l0Y2goZil7Y2FzZSA0ODpyZXR1cm4gMDtjYXNlIDQ5OnJldHVybiAxO2Nhc2UgNTA6cmV0dXJuIDI7Y2FzZSA1MTpyZXR1cm4gMztjYXNlIDUyOnJldHVybiA0O2Nhc2UgNTM6cmV0dXJuIDU7Y2FzZSA1NDpyZXR1cm4gNjtjYXNlIDU1OnJldHVybiA3O2Nhc2UgNTY6cmV0dXJuIDg7Y2FzZSA1NzpyZXR1cm4gOTtjYXNlIDk3OnJldHVybiAxMDtjYXNlIDY1OnJldHVybiAxMDtjYXNlIDk4OnJldHVybiAxMTtjYXNlIDY2OnJldHVybiAxMTtjYXNlIDk5OnJldHVybiAxMjtjYXNlIDY3OnJldHVybiAxMjtjYXNlIDEwMDpyZXR1cm4gMTM7Y2FzZSA2ODpyZXR1cm4gMTM7Y2FzZSAxMDE6cmV0dXJuIDE0O2Nhc2UgNjk6cmV0dXJuIDE0O2Nhc2UgMTAyOnJldHVybiAxNTtjYXNlIDcwOnJldHVybiAxNX1yZXR1cm4gMH19KSh0LkNTU3x8KHQuQ1NTPXt9KSl9KShlLkZvcm1hdHx8KGUuRm9ybWF0PXt9KSl9KGFlfHwoYWU9e30pKTtmdW5jdGlvbiBhYShlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IGk9TnVtYmVyKG4pOyhpfHxpPT09MCYmbi5yZXBsYWNlKC9ccy9nLCIiKSE9PSIiKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIFluKGUsdCxuLGkpe3JldHVybntyZWQ6ZS8yNTUsYmx1ZTpuLzI1NSxncmVlbjp0LzI1NSxhbHBoYTppfX1mdW5jdGlvbiBFdChlLHQpe2NvbnN0IG49dC5pbmRleCxpPXRbMF0ubGVuZ3RoO2lmKCFuKXJldHVybjtjb25zdCByPWUucG9zaXRpb25BdChuKTtyZXR1cm57c3RhcnRMaW5lTnVtYmVyOnIubGluZU51bWJlcixzdGFydENvbHVtbjpyLmNvbHVtbixlbmRMaW5lTnVtYmVyOnIubGluZU51bWJlcixlbmRDb2x1bW46ci5jb2x1bW4raX19ZnVuY3Rpb24gTWwoZSx0KXtpZighZSlyZXR1cm47Y29uc3Qgbj1hZS5Gb3JtYXQuQ1NTLnBhcnNlSGV4KHQpO2lmKG4pcmV0dXJue3JhbmdlOmUsY29sb3I6WW4obi5yZ2JhLnIsbi5yZ2JhLmcsbi5yZ2JhLmIsbi5yZ2JhLmEpfX1mdW5jdGlvbiBzYShlLHQsbil7aWYoIWV8fHQubGVuZ3RoIT09MSlyZXR1cm47Y29uc3Qgcj10WzBdLnZhbHVlcygpLGE9YWEocik7cmV0dXJue3JhbmdlOmUsY29sb3I6WW4oYVswXSxhWzFdLGFbMl0sbj9hWzNdOjEpfX1mdW5jdGlvbiBvYShlLHQsbil7aWYoIWV8fHQubGVuZ3RoIT09MSlyZXR1cm47Y29uc3Qgcj10WzBdLnZhbHVlcygpLGE9YWEocikscz1uZXcgYWUobmV3IFRlKGFbMF0sYVsxXS8xMDAsYVsyXS8xMDAsbj9hWzNdOjEpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpZbihzLnJnYmEucixzLnJnYmEuZyxzLnJnYmEuYixzLnJnYmEuYSl9fWZ1bmN0aW9uIFJ0KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9bLi4uZS5tYXRjaEFsbCh0KV06ZS5maW5kTWF0Y2hlcyh0KX1mdW5jdGlvbiBEbChlKXtjb25zdCB0PVtdLGk9UnQoZSwvXGIocmdifHJnYmF8aHNsfGhzbGEpKFwoWzAtOVxzLC5cJV0qXCkpfCgjKShbQS1GYS1mMC05XXszfSlcYnwoIykoW0EtRmEtZjAtOV17NH0pXGJ8KCMpKFtBLUZhLWYwLTldezZ9KVxifCgjKShbQS1GYS1mMC05XXs4fSlcYi9nbSk7aWYoaS5sZW5ndGg+MClmb3IoY29uc3QgciBvZiBpKXtjb25zdCBhPXIuZmlsdGVyKHU9PnUhPT12b2lkIDApLHM9YVsxXSxvPWFbMl07aWYoIW8pY29udGludWU7bGV0IGw7aWYocz09PSJyZ2IiKXtjb25zdCB1PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKlwpJC9nbTtsPXNhKEV0KGUsciksUnQobyx1KSwhMSl9ZWxzZSBpZihzPT09InJnYmEiKXtjb25zdCB1PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMFsuXVswLTldK3xbLl1bMC05XSt8WzAxXVsuXXxbMDFdKVxzKlwpJC9nbTtsPXNhKEV0KGUsciksUnQobyx1KSwhMCl9ZWxzZSBpZihzPT09ImhzbCIpe2NvbnN0IHU9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqXCkkL2dtO2w9b2EoRXQoZSxyKSxSdChvLHUpLCExKX1lbHNlIGlmKHM9PT0iaHNsYSIpe2NvbnN0IHU9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO2w9b2EoRXQoZSxyKSxSdChvLHUpLCEwKX1lbHNlIHM9PT0iIyImJihsPU1sKEV0KGUscikscytvKSk7bCYmdC5wdXNoKGwpfXJldHVybiB0fWZ1bmN0aW9uIE5sKGUpe3JldHVybiFlfHx0eXBlb2YgZS5nZXRWYWx1ZSE9ImZ1bmN0aW9uInx8dHlwZW9mIGUucG9zaXRpb25BdCE9ImZ1bmN0aW9uIj9bXTpEbChlKX1jb25zdCBsYT0vXGJNQVJLOlxzKiguKikkL2QsSWw9L14tK3wtKyQvZztmdW5jdGlvbiB6bChlLHQpe3ZhciBuO2xldCBpPVtdO2lmKHQuZmluZFJlZ2lvblNlY3Rpb25IZWFkZXJzJiYoISgobj10LmZvbGRpbmdSdWxlcyk9PT1udWxsfHxuPT09dm9pZCAwKSYmbi5tYXJrZXJzKSl7Y29uc3Qgcj1IbChlLHQpO2k9aS5jb25jYXQocil9aWYodC5maW5kTWFya1NlY3Rpb25IZWFkZXJzKXtjb25zdCByPVVsKGUpO2k9aS5jb25jYXQocil9cmV0dXJuIGl9ZnVuY3Rpb24gSGwoZSx0KXtjb25zdCBuPVtdLGk9ZS5nZXRMaW5lQ291bnQoKTtmb3IobGV0IHI9MTtyPD1pO3IrKyl7Y29uc3QgYT1lLmdldExpbmVDb250ZW50KHIpLHM9YS5tYXRjaCh0LmZvbGRpbmdSdWxlcy5tYXJrZXJzLnN0YXJ0KTtpZihzKXtjb25zdCBvPXtzdGFydExpbmVOdW1iZXI6cixzdGFydENvbHVtbjpzWzBdLmxlbmd0aCsxLGVuZExpbmVOdW1iZXI6cixlbmRDb2x1bW46YS5sZW5ndGgrMX07aWYoby5lbmRDb2x1bW4+by5zdGFydENvbHVtbil7Y29uc3QgbD17cmFuZ2U6bywuLi51YShhLnN1YnN0cmluZyhzWzBdLmxlbmd0aCkpLHNob3VsZEJlSW5Db21tZW50czohMX07KGwudGV4dHx8bC5oYXNTZXBhcmF0b3JMaW5lKSYmbi5wdXNoKGwpfX19cmV0dXJuIG59ZnVuY3Rpb24gVWwoZSl7Y29uc3QgdD1bXSxuPWUuZ2V0TGluZUNvdW50KCk7Zm9yKGxldCBpPTE7aTw9bjtpKyspe2NvbnN0IHI9ZS5nZXRMaW5lQ29udGVudChpKTtXbChyLGksdCl9cmV0dXJuIHR9ZnVuY3Rpb24gV2woZSx0LG4pe2xhLmxhc3RJbmRleD0wO2NvbnN0IGk9bGEuZXhlYyhlKTtpZihpKXtjb25zdCByPWkuaW5kaWNlc1sxXVswXSsxLGE9aS5pbmRpY2VzWzFdWzFdKzEscz17c3RhcnRMaW5lTnVtYmVyOnQsc3RhcnRDb2x1bW46cixlbmRMaW5lTnVtYmVyOnQsZW5kQ29sdW1uOmF9O2lmKHMuZW5kQ29sdW1uPnMuc3RhcnRDb2x1bW4pe2NvbnN0IG89e3JhbmdlOnMsLi4udWEoaVsxXSksc2hvdWxkQmVJbkNvbW1lbnRzOiEwfTsoby50ZXh0fHxvLmhhc1NlcGFyYXRvckxpbmUpJiZuLnB1c2gobyl9fX1mdW5jdGlvbiB1YShlKXtlPWUudHJpbSgpO2NvbnN0IHQ9ZS5zdGFydHNXaXRoKCItIik7cmV0dXJuIGU9ZS5yZXBsYWNlKElsLCIiKSx7dGV4dDplLGhhc1NlcGFyYXRvckxpbmU6dH19Y2xhc3MgRmwgZXh0ZW5kcyBFb3tnZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgZW9sKCl7cmV0dXJuIHRoaXMuX2VvbH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldFRleHQoKX1maW5kTWF0Y2hlcyh0KXtjb25zdCBuPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5fbGluZXMubGVuZ3RoO2krKyl7Y29uc3Qgcj10aGlzLl9saW5lc1tpXSxhPXRoaXMub2Zmc2V0QXQobmV3IE5lKGkrMSwxKSkscz1yLm1hdGNoQWxsKHQpO2Zvcihjb25zdCBvIG9mIHMpKG8uaW5kZXh8fG8uaW5kZXg9PT0wKSYmKG8uaW5kZXg9by5pbmRleCthKSxuLnB1c2gobyl9cmV0dXJuIG59Z2V0TGluZXNDb250ZW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLnNsaWNlKDApfWdldExpbmVDb3VudCgpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGh9Z2V0TGluZUNvbnRlbnQodCl7cmV0dXJuIHRoaXMuX2xpbmVzW3QtMV19Z2V0V29yZEF0UG9zaXRpb24odCxuKXtjb25zdCBpPUluKHQuY29sdW1uLEhpKG4pLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXSwwKTtyZXR1cm4gaT9uZXcgb2UodC5saW5lTnVtYmVyLGkuc3RhcnRDb2x1bW4sdC5saW5lTnVtYmVyLGkuZW5kQ29sdW1uKTpudWxsfXdvcmRzKHQpe2NvbnN0IG49dGhpcy5fbGluZXMsaT10aGlzLl93b3JkZW5pemUuYmluZCh0aGlzKTtsZXQgcj0wLGE9IiIscz0wLG89W107cmV0dXJueypbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcig7OylpZihzPG8ubGVuZ3RoKXtjb25zdCBsPWEuc3Vic3RyaW5nKG9bc10uc3RhcnQsb1tzXS5lbmQpO3MrPTEseWllbGQgbH1lbHNlIGlmKHI8bi5sZW5ndGgpYT1uW3JdLG89aShhLHQpLHM9MCxyKz0xO2Vsc2UgYnJlYWt9fX1nZXRMaW5lV29yZHModCxuKXtjb25zdCBpPXRoaXMuX2xpbmVzW3QtMV0scj10aGlzLl93b3JkZW5pemUoaSxuKSxhPVtdO2Zvcihjb25zdCBzIG9mIHIpYS5wdXNoKHt3b3JkOmkuc3Vic3RyaW5nKHMuc3RhcnQscy5lbmQpLHN0YXJ0Q29sdW1uOnMuc3RhcnQrMSxlbmRDb2x1bW46cy5lbmQrMX0pO3JldHVybiBhfV93b3JkZW5pemUodCxuKXtjb25zdCBpPVtdO2xldCByO2ZvcihuLmxhc3RJbmRleD0wOyhyPW4uZXhlYyh0KSkmJnJbMF0ubGVuZ3RoIT09MDspaS5wdXNoKHtzdGFydDpyLmluZGV4LGVuZDpyLmluZGV4K3JbMF0ubGVuZ3RofSk7cmV0dXJuIGl9Z2V0VmFsdWVJblJhbmdlKHQpe2lmKHQ9dGhpcy5fdmFsaWRhdGVSYW5nZSh0KSx0LnN0YXJ0TGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcilyZXR1cm4gdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuc3RhcnRDb2x1bW4tMSx0LmVuZENvbHVtbi0xKTtjb25zdCBuPXRoaXMuX2VvbCxpPXQuc3RhcnRMaW5lTnVtYmVyLTEscj10LmVuZExpbmVOdW1iZXItMSxhPVtdO2EucHVzaCh0aGlzLl9saW5lc1tpXS5zdWJzdHJpbmcodC5zdGFydENvbHVtbi0xKSk7Zm9yKGxldCBzPWkrMTtzPHI7cysrKWEucHVzaCh0aGlzLl9saW5lc1tzXSk7cmV0dXJuIGEucHVzaCh0aGlzLl9saW5lc1tyXS5zdWJzdHJpbmcoMCx0LmVuZENvbHVtbi0xKSksYS5qb2luKG4pfW9mZnNldEF0KHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24odCksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpLHRoaXMuX2xpbmVTdGFydHMuZ2V0UHJlZml4U3VtKHQubGluZU51bWJlci0yKSsodC5jb2x1bW4tMSl9cG9zaXRpb25BdCh0KXt0PU1hdGguZmxvb3IodCksdD1NYXRoLm1heCgwLHQpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKTtjb25zdCBuPXRoaXMuX2xpbmVTdGFydHMuZ2V0SW5kZXhPZih0KSxpPXRoaXMuX2xpbmVzW24uaW5kZXhdLmxlbmd0aDtyZXR1cm57bGluZU51bWJlcjoxK24uaW5kZXgsY29sdW1uOjErTWF0aC5taW4obi5yZW1haW5kZXIsaSl9fV92YWxpZGF0ZVJhbmdlKHQpe2NvbnN0IG49dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjp0LnN0YXJ0TGluZU51bWJlcixjb2x1bW46dC5zdGFydENvbHVtbn0pLGk9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjp0LmVuZExpbmVOdW1iZXIsY29sdW1uOnQuZW5kQ29sdW1ufSk7cmV0dXJuIG4ubGluZU51bWJlciE9PXQuc3RhcnRMaW5lTnVtYmVyfHxuLmNvbHVtbiE9PXQuc3RhcnRDb2x1bW58fGkubGluZU51bWJlciE9PXQuZW5kTGluZU51bWJlcnx8aS5jb2x1bW4hPT10LmVuZENvbHVtbj97c3RhcnRMaW5lTnVtYmVyOm4ubGluZU51bWJlcixzdGFydENvbHVtbjpuLmNvbHVtbixlbmRMaW5lTnVtYmVyOmkubGluZU51bWJlcixlbmRDb2x1bW46aS5jb2x1bW59OnR9X3ZhbGlkYXRlUG9zaXRpb24odCl7aWYoIU5lLmlzSVBvc2l0aW9uKHQpKXRocm93IG5ldyBFcnJvcigiYmFkIHBvc2l0aW9uIik7bGV0e2xpbmVOdW1iZXI6bixjb2x1bW46aX09dCxyPSExO2lmKG48MSluPTEsaT0xLHI9ITA7ZWxzZSBpZihuPnRoaXMuX2xpbmVzLmxlbmd0aCluPXRoaXMuX2xpbmVzLmxlbmd0aCxpPXRoaXMuX2xpbmVzW24tMV0ubGVuZ3RoKzEscj0hMDtlbHNle2NvbnN0IGE9dGhpcy5fbGluZXNbbi0xXS5sZW5ndGgrMTtpPDE/KGk9MSxyPSEwKTppPmEmJihpPWEscj0hMCl9cmV0dXJuIHI/e2xpbmVOdW1iZXI6bixjb2x1bW46aX06dH19Y2xhc3MgZXR7Y29uc3RydWN0b3IodCxuKXt0aGlzLl9ob3N0PXQsdGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZm9yZWlnbk1vZHVsZUZhY3Rvcnk9bix0aGlzLl9mb3JlaWduTW9kdWxlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpfV9nZXRNb2RlbCh0KXtyZXR1cm4gdGhpcy5fbW9kZWxzW3RdfV9nZXRNb2RlbHMoKXtjb25zdCB0PVtdO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tb2RlbHMpLmZvckVhY2gobj0+dC5wdXNoKHRoaXMuX21vZGVsc1tuXSkpLHR9YWNjZXB0TmV3TW9kZWwodCl7dGhpcy5fbW9kZWxzW3QudXJsXT1uZXcgRmwoTW4ucGFyc2UodC51cmwpLHQubGluZXMsdC5FT0wsdC52ZXJzaW9uSWQpfWFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pe2lmKCF0aGlzLl9tb2RlbHNbdF0pcmV0dXJuO3RoaXMuX21vZGVsc1t0XS5vbkV2ZW50cyhuKX1hY2NlcHRSZW1vdmVkTW9kZWwodCl7dGhpcy5fbW9kZWxzW3RdJiZkZWxldGUgdGhpcy5fbW9kZWxzW3RdfWFzeW5jIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyh0LG4saSl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gcj9pbC5jb21wdXRlVW5pY29kZUhpZ2hsaWdodHMocixuLGkpOntyYW5nZXM6W10saGFzTW9yZTohMSxhbWJpZ3VvdXNDaGFyYWN0ZXJDb3VudDowLGludmlzaWJsZUNoYXJhY3RlckNvdW50OjAsbm9uQmFzaWNBc2NpaUNoYXJhY3RlckNvdW50OjB9fWFzeW5jIGZpbmRTZWN0aW9uSGVhZGVycyh0LG4pe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIGk/emwoaSxuKTpbXX1hc3luYyBjb21wdXRlRGlmZih0LG4saSxyKXtjb25zdCBhPXRoaXMuX2dldE1vZGVsKHQpLHM9dGhpcy5fZ2V0TW9kZWwobik7cmV0dXJuIWF8fCFzP251bGw6ZXQuY29tcHV0ZURpZmYoYSxzLGkscil9c3RhdGljIGNvbXB1dGVEaWZmKHQsbixpLHIpe2NvbnN0IGE9cj09PSJhZHZhbmNlZCI/cmEuZ2V0RGVmYXVsdCgpOnJhLmdldExlZ2FjeSgpLHM9dC5nZXRMaW5lc0NvbnRlbnQoKSxvPW4uZ2V0TGluZXNDb250ZW50KCksbD1hLmNvbXB1dGVEaWZmKHMsbyxpKSx1PWwuY2hhbmdlcy5sZW5ndGg+MD8hMTp0aGlzLl9tb2RlbHNBcmVJZGVudGljYWwodCxuKTtmdW5jdGlvbiBjKGQpe3JldHVybiBkLm1hcChtPT57dmFyIGY7cmV0dXJuW20ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixtLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsKGY9bS5pbm5lckNoYW5nZXMpPT09bnVsbHx8Zj09PXZvaWQgMD92b2lkIDA6Zi5tYXAoYj0+W2Iub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIsYi5vcmlnaW5hbFJhbmdlLnN0YXJ0Q29sdW1uLGIub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyLGIub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW4sYi5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcixiLm1vZGlmaWVkUmFuZ2Uuc3RhcnRDb2x1bW4sYi5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIsYi5tb2RpZmllZFJhbmdlLmVuZENvbHVtbl0pXX0pfXJldHVybntpZGVudGljYWw6dSxxdWl0RWFybHk6bC5oaXRUaW1lb3V0LGNoYW5nZXM6YyhsLmNoYW5nZXMpLG1vdmVzOmwubW92ZXMubWFwKGQ9PltkLmxpbmVSYW5nZU1hcHBpbmcub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLGQubGluZVJhbmdlTWFwcGluZy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGQubGluZVJhbmdlTWFwcGluZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsZC5saW5lUmFuZ2VNYXBwaW5nLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYyhkLmNoYW5nZXMpXSl9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKHQsbil7Y29uc3QgaT10LmdldExpbmVDb3VudCgpLHI9bi5nZXRMaW5lQ291bnQoKTtpZihpIT09cilyZXR1cm4hMTtmb3IobGV0IGE9MTthPD1pO2ErKyl7Y29uc3Qgcz10LmdldExpbmVDb250ZW50KGEpLG89bi5nZXRMaW5lQ29udGVudChhKTtpZihzIT09bylyZXR1cm4hMX1yZXR1cm4hMH1hc3luYyBjb21wdXRlTW9yZU1pbmltYWxFZGl0cyh0LG4saSl7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbCh0KTtpZighcilyZXR1cm4gbjtjb25zdCBhPVtdO2xldCBzO249bi5zbGljZSgwKS5zb3J0KChsLHUpPT57aWYobC5yYW5nZSYmdS5yYW5nZSlyZXR1cm4gb2UuY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKGwucmFuZ2UsdS5yYW5nZSk7Y29uc3QgYz1sLnJhbmdlPzA6MSxkPXUucmFuZ2U/MDoxO3JldHVybiBjLWR9KTtsZXQgbz0wO2ZvcihsZXQgbD0xO2w8bi5sZW5ndGg7bCsrKW9lLmdldEVuZFBvc2l0aW9uKG5bb10ucmFuZ2UpLmVxdWFscyhvZS5nZXRTdGFydFBvc2l0aW9uKG5bbF0ucmFuZ2UpKT8obltvXS5yYW5nZT1vZS5mcm9tUG9zaXRpb25zKG9lLmdldFN0YXJ0UG9zaXRpb24obltvXS5yYW5nZSksb2UuZ2V0RW5kUG9zaXRpb24obltsXS5yYW5nZSkpLG5bb10udGV4dCs9bltsXS50ZXh0KToobysrLG5bb109bltsXSk7bi5sZW5ndGg9bysxO2ZvcihsZXR7cmFuZ2U6bCx0ZXh0OnUsZW9sOmN9b2Ygbil7aWYodHlwZW9mIGM9PSJudW1iZXIiJiYocz1jKSxvZS5pc0VtcHR5KGwpJiYhdSljb250aW51ZTtjb25zdCBkPXIuZ2V0VmFsdWVJblJhbmdlKGwpO2lmKHU9dS5yZXBsYWNlKC9cclxufFxufFxyL2csci5lb2wpLGQ9PT11KWNvbnRpbnVlO2lmKE1hdGgubWF4KHUubGVuZ3RoLGQubGVuZ3RoKT5ldC5fZGlmZkxpbWl0KXthLnB1c2goe3JhbmdlOmwsdGV4dDp1fSk7Y29udGludWV9Y29uc3QgbT1ubyhkLHUsaSksZj1yLm9mZnNldEF0KG9lLmxpZnQobCkuZ2V0U3RhcnRQb3NpdGlvbigpKTtmb3IoY29uc3QgYiBvZiBtKXtjb25zdCBwPXIucG9zaXRpb25BdChmK2Iub3JpZ2luYWxTdGFydCksdz1yLnBvc2l0aW9uQXQoZitiLm9yaWdpbmFsU3RhcnQrYi5vcmlnaW5hbExlbmd0aCkseD17dGV4dDp1LnN1YnN0cihiLm1vZGlmaWVkU3RhcnQsYi5tb2RpZmllZExlbmd0aCkscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpwLmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46cC5jb2x1bW4sZW5kTGluZU51bWJlcjp3LmxpbmVOdW1iZXIsZW5kQ29sdW1uOncuY29sdW1ufX07ci5nZXRWYWx1ZUluUmFuZ2UoeC5yYW5nZSkhPT14LnRleHQmJmEucHVzaCh4KX19cmV0dXJuIHR5cGVvZiBzPT0ibnVtYmVyIiYmYS5wdXNoKHtlb2w6cyx0ZXh0OiIiLHJhbmdlOntzdGFydExpbmVOdW1iZXI6MCxzdGFydENvbHVtbjowLGVuZExpbmVOdW1iZXI6MCxlbmRDb2x1bW46MH19KSxhfWFzeW5jIGNvbXB1dGVMaW5rcyh0KXtjb25zdCBuPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBuP1VvKG4pOm51bGx9YXN5bmMgY29tcHV0ZURlZmF1bHREb2N1bWVudENvbG9ycyh0KXtjb25zdCBuPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBuP05sKG4pOm51bGx9YXN5bmMgdGV4dHVhbFN1Z2dlc3QodCxuLGkscil7Y29uc3QgYT1uZXcgUHQscz1uZXcgUmVnRXhwKGksciksbz1uZXcgU2V0O2U6Zm9yKGNvbnN0IGwgb2YgdCl7Y29uc3QgdT10aGlzLl9nZXRNb2RlbChsKTtpZih1KXtmb3IoY29uc3QgYyBvZiB1LndvcmRzKHMpKWlmKCEoYz09PW58fCFpc05hTihOdW1iZXIoYykpKSYmKG8uYWRkKGMpLG8uc2l6ZT5ldC5fc3VnZ2VzdGlvbnNMaW1pdCkpYnJlYWsgZX19cmV0dXJue3dvcmRzOkFycmF5LmZyb20obyksZHVyYXRpb246YS5lbGFwc2VkKCl9fWFzeW5jIGNvbXB1dGVXb3JkUmFuZ2VzKHQsbixpLHIpe2NvbnN0IGE9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIWEpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3Qgcz1uZXcgUmVnRXhwKGksciksbz1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgbD1uLnN0YXJ0TGluZU51bWJlcjtsPG4uZW5kTGluZU51bWJlcjtsKyspe2NvbnN0IHU9YS5nZXRMaW5lV29yZHMobCxzKTtmb3IoY29uc3QgYyBvZiB1KXtpZighaXNOYU4oTnVtYmVyKGMud29yZCkpKWNvbnRpbnVlO2xldCBkPW9bYy53b3JkXTtkfHwoZD1bXSxvW2Mud29yZF09ZCksZC5wdXNoKHtzdGFydExpbmVOdW1iZXI6bCxzdGFydENvbHVtbjpjLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6bCxlbmRDb2x1bW46Yy5lbmRDb2x1bW59KX19cmV0dXJuIG99YXN5bmMgbmF2aWdhdGVWYWx1ZVNldCh0LG4saSxyLGEpe2NvbnN0IHM9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIXMpcmV0dXJuIG51bGw7Y29uc3Qgbz1uZXcgUmVnRXhwKHIsYSk7bi5zdGFydENvbHVtbj09PW4uZW5kQ29sdW1uJiYobj17c3RhcnRMaW5lTnVtYmVyOm4uc3RhcnRMaW5lTnVtYmVyLHN0YXJ0Q29sdW1uOm4uc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjpuLmVuZExpbmVOdW1iZXIsZW5kQ29sdW1uOm4uZW5kQ29sdW1uKzF9KTtjb25zdCBsPXMuZ2V0VmFsdWVJblJhbmdlKG4pLHU9cy5nZXRXb3JkQXRQb3NpdGlvbih7bGluZU51bWJlcjpuLnN0YXJ0TGluZU51bWJlcixjb2x1bW46bi5zdGFydENvbHVtbn0sbyk7aWYoIXUpcmV0dXJuIG51bGw7Y29uc3QgYz1zLmdldFZhbHVlSW5SYW5nZSh1KTtyZXR1cm4gVW4uSU5TVEFOQ0UubmF2aWdhdGVWYWx1ZVNldChuLGwsdSxjLGkpfWxvYWRGb3JlaWduTW9kdWxlKHQsbixpKXtjb25zdCBzPXtob3N0OkVzKGksKG8sbCk9PnRoaXMuX2hvc3QuZmhyKG8sbCkpLGdldE1pcnJvck1vZGVsczooKT0+dGhpcy5fZ2V0TW9kZWxzKCl9O3JldHVybiB0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT8odGhpcy5fZm9yZWlnbk1vZHVsZT10aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeShzLG4pLFByb21pc2UucmVzb2x2ZSh5bih0aGlzLl9mb3JlaWduTW9kdWxlKSkpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiVW5leHBlY3RlZCB1c2FnZSIpKX1mbXIodCxuKXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0hPSJmdW5jdGlvbiIpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrdCkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSxuKSl9Y2F0Y2goaSl7cmV0dXJuIFByb21pc2UucmVqZWN0KGkpfX19ZXQuX2RpZmZMaW1pdD0xZTUsZXQuX3N1Z2dlc3Rpb25zTGltaXQ9MWU0LHR5cGVvZiBpbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iJiYoZ2xvYmFsVGhpcy5tb25hY289WG8oKSk7bGV0IFpuPSExO2Z1bmN0aW9uIGNhKGUpe2lmKFpuKXJldHVybjtabj0hMDtjb25zdCB0PW5ldyBlbyhuPT57Z2xvYmFsVGhpcy5wb3N0TWVzc2FnZShuKX0sbj0+bmV3IGV0KG4sZSkpO2dsb2JhbFRoaXMub25tZXNzYWdlPW49Pnt0Lm9ubWVzc2FnZShuLmRhdGEpfX1nbG9iYWxUaGlzLm9ubWVzc2FnZT1lPT57Wm58fGNhKG51bGwpfTsvKiEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVmVyc2lvbjogMC40OC4wKDAwMzdiMTNmYjVkMTg2ZmRmMWU3ZGY1MWE5NDE2YTJkZTJiOGM2NzApCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L21vbmFjby1lZGl0b3IvYmxvYi9tYWluL0xJQ0VOU0UudHh0CiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL2Z1bmN0aW9uIFBsKGUsdCl7bGV0IG47cmV0dXJuIHQubGVuZ3RoPT09MD9uPWU6bj1lLnJlcGxhY2UoL1x7KFxkKylcfS9nLChpLHIpPT57bGV0IGE9clswXTtyZXR1cm4gdHlwZW9mIHRbYV08InUiP3RbYV06aX0pLG59ZnVuY3Rpb24gQmwoZSx0LC4uLm4pe3JldHVybiBQbCh0LG4pfWZ1bmN0aW9uIEtuKGUpe3JldHVybiBCbH12YXIgaGE7KGZ1bmN0aW9uKGUpe2UuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LGUuTUFYX1ZBTFVFPTIxNDc0ODM2NDd9KShoYXx8KGhhPXt9KSk7dmFyIGVuOyhmdW5jdGlvbihlKXtlLk1JTl9WQUxVRT0wLGUuTUFYX1ZBTFVFPTIxNDc0ODM2NDd9KShlbnx8KGVuPXt9KSk7dmFyIGNlOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJuIGk9PT1OdW1iZXIuTUFYX1ZBTFVFJiYoaT1lbi5NQVhfVkFMVUUpLHI9PT1OdW1iZXIuTUFYX1ZBTFVFJiYocj1lbi5NQVhfVkFMVUUpLHtsaW5lOmksY2hhcmFjdGVyOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLm9iamVjdExpdGVyYWwocikmJkMudWludGVnZXIoci5saW5lKSYmQy51aW50ZWdlcihyLmNoYXJhY3Rlcil9ZS5pcz1ufSkoY2V8fChjZT17fSkpO3ZhciBZOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMpe2lmKEMudWludGVnZXIoaSkmJkMudWludGVnZXIocikmJkMudWludGVnZXIoYSkmJkMudWludGVnZXIocykpcmV0dXJue3N0YXJ0OmNlLmNyZWF0ZShpLHIpLGVuZDpjZS5jcmVhdGUoYSxzKX07aWYoY2UuaXMoaSkmJmNlLmlzKHIpKXJldHVybntzdGFydDppLGVuZDpyfTt0aHJvdyBuZXcgRXJyb3IoIlJhbmdlI2NyZWF0ZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGFyZ3VtZW50c1siK2krIiwgIityKyIsICIrYSsiLCAiK3MrIl0iKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHIpJiZjZS5pcyhyLnN0YXJ0KSYmY2UuaXMoci5lbmQpfWUuaXM9bn0pKFl8fChZPXt9KSk7dmFyIHRuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3VyaTppLHJhbmdlOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLmRlZmluZWQocikmJlkuaXMoci5yYW5nZSkmJihDLnN0cmluZyhyLnVyaSl8fEMudW5kZWZpbmVkKHIudXJpKSl9ZS5pcz1ufSkodG58fCh0bj17fSkpO3ZhciBkYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIsYSxzKXtyZXR1cm57dGFyZ2V0VXJpOmksdGFyZ2V0UmFuZ2U6cix0YXJnZXRTZWxlY3Rpb25SYW5nZTphLG9yaWdpblNlbGVjdGlvblJhbmdlOnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLmRlZmluZWQocikmJlkuaXMoci50YXJnZXRSYW5nZSkmJkMuc3RyaW5nKHIudGFyZ2V0VXJpKSYmKFkuaXMoci50YXJnZXRTZWxlY3Rpb25SYW5nZSl8fEMudW5kZWZpbmVkKHIudGFyZ2V0U2VsZWN0aW9uUmFuZ2UpKSYmKFkuaXMoci5vcmlnaW5TZWxlY3Rpb25SYW5nZSl8fEMudW5kZWZpbmVkKHIub3JpZ2luU2VsZWN0aW9uUmFuZ2UpKX1lLmlzPW59KShkYXx8KGRhPXt9KSk7dmFyIGVpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMpe3JldHVybntyZWQ6aSxncmVlbjpyLGJsdWU6YSxhbHBoYTpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5udW1iZXJSYW5nZShyLnJlZCwwLDEpJiZDLm51bWJlclJhbmdlKHIuZ3JlZW4sMCwxKSYmQy5udW1iZXJSYW5nZShyLmJsdWUsMCwxKSYmQy5udW1iZXJSYW5nZShyLmFscGhhLDAsMSl9ZS5pcz1ufSkoZWl8fChlaT17fSkpO3ZhciBtYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybntyYW5nZTppLGNvbG9yOnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBZLmlzKHIucmFuZ2UpJiZlaS5pcyhyLmNvbG9yKX1lLmlzPW59KShtYXx8KG1hPXt9KSk7dmFyIGZhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhKXtyZXR1cm57bGFiZWw6aSx0ZXh0RWRpdDpyLGFkZGl0aW9uYWxUZXh0RWRpdHM6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuc3RyaW5nKHIubGFiZWwpJiYoQy51bmRlZmluZWQoci50ZXh0RWRpdCl8fHNlLmlzKHIpKSYmKEMudW5kZWZpbmVkKHIuYWRkaXRpb25hbFRleHRFZGl0cyl8fEMudHlwZWRBcnJheShyLmFkZGl0aW9uYWxUZXh0RWRpdHMsc2UuaXMpKX1lLmlzPW59KShmYXx8KGZhPXt9KSk7dmFyIG5uOyhmdW5jdGlvbihlKXtlLkNvbW1lbnQ9ImNvbW1lbnQiLGUuSW1wb3J0cz0iaW1wb3J0cyIsZS5SZWdpb249InJlZ2lvbiJ9KShubnx8KG5uPXt9KSk7dmFyIHBhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMsbyl7dmFyIGw9e3N0YXJ0TGluZTppLGVuZExpbmU6cn07cmV0dXJuIEMuZGVmaW5lZChhKSYmKGwuc3RhcnRDaGFyYWN0ZXI9YSksQy5kZWZpbmVkKHMpJiYobC5lbmRDaGFyYWN0ZXI9cyksQy5kZWZpbmVkKG8pJiYobC5raW5kPW8pLGx9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMudWludGVnZXIoci5zdGFydExpbmUpJiZDLnVpbnRlZ2VyKHIuc3RhcnRMaW5lKSYmKEMudW5kZWZpbmVkKHIuc3RhcnRDaGFyYWN0ZXIpfHxDLnVpbnRlZ2VyKHIuc3RhcnRDaGFyYWN0ZXIpKSYmKEMudW5kZWZpbmVkKHIuZW5kQ2hhcmFjdGVyKXx8Qy51aW50ZWdlcihyLmVuZENoYXJhY3RlcikpJiYoQy51bmRlZmluZWQoci5raW5kKXx8Qy5zdHJpbmcoci5raW5kKSl9ZS5pcz1ufSkocGF8fChwYT17fSkpO3ZhciB0aTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIpe3JldHVybntsb2NhdGlvbjppLG1lc3NhZ2U6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmdG4uaXMoci5sb2NhdGlvbikmJkMuc3RyaW5nKHIubWVzc2FnZSl9ZS5pcz1ufSkodGl8fCh0aT17fSkpO3ZhciBnYTsoZnVuY3Rpb24oZSl7ZS5FcnJvcj0xLGUuV2FybmluZz0yLGUuSW5mb3JtYXRpb249MyxlLkhpbnQ9NH0pKGdhfHwoZ2E9e30pKTt2YXIgYmE7KGZ1bmN0aW9uKGUpe2UuVW5uZWNlc3Nhcnk9MSxlLkRlcHJlY2F0ZWQ9Mn0pKGJhfHwoYmE9e30pKTt2YXIgdmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIGk9bjtyZXR1cm4gaSE9bnVsbCYmQy5zdHJpbmcoaS5ocmVmKX1lLmlzPXR9KSh2YXx8KHZhPXt9KSk7dmFyIHJuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMsbyxsKXt2YXIgdT17cmFuZ2U6aSxtZXNzYWdlOnJ9O3JldHVybiBDLmRlZmluZWQoYSkmJih1LnNldmVyaXR5PWEpLEMuZGVmaW5lZChzKSYmKHUuY29kZT1zKSxDLmRlZmluZWQobykmJih1LnNvdXJjZT1vKSxDLmRlZmluZWQobCkmJih1LnJlbGF0ZWRJbmZvcm1hdGlvbj1sKSx1fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcixhPWk7cmV0dXJuIEMuZGVmaW5lZChhKSYmWS5pcyhhLnJhbmdlKSYmQy5zdHJpbmcoYS5tZXNzYWdlKSYmKEMubnVtYmVyKGEuc2V2ZXJpdHkpfHxDLnVuZGVmaW5lZChhLnNldmVyaXR5KSkmJihDLmludGVnZXIoYS5jb2RlKXx8Qy5zdHJpbmcoYS5jb2RlKXx8Qy51bmRlZmluZWQoYS5jb2RlKSkmJihDLnVuZGVmaW5lZChhLmNvZGVEZXNjcmlwdGlvbil8fEMuc3RyaW5nKChyPWEuY29kZURlc2NyaXB0aW9uKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuaHJlZikpJiYoQy5zdHJpbmcoYS5zb3VyY2UpfHxDLnVuZGVmaW5lZChhLnNvdXJjZSkpJiYoQy51bmRlZmluZWQoYS5yZWxhdGVkSW5mb3JtYXRpb24pfHxDLnR5cGVkQXJyYXkoYS5yZWxhdGVkSW5mb3JtYXRpb24sdGkuaXMpKX1lLmlzPW59KShybnx8KHJuPXt9KSk7dmFyIE10OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7Zm9yKHZhciBhPVtdLHM9MjtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKWFbcy0yXT1hcmd1bWVudHNbc107dmFyIG89e3RpdGxlOmksY29tbWFuZDpyfTtyZXR1cm4gQy5kZWZpbmVkKGEpJiZhLmxlbmd0aD4wJiYoby5hcmd1bWVudHM9YSksb31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnN0cmluZyhyLnRpdGxlKSYmQy5zdHJpbmcoci5jb21tYW5kKX1lLmlzPW59KShNdHx8KE10PXt9KSk7dmFyIHNlOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGEscyl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDpzfX1lLnJlcGxhY2U9dDtmdW5jdGlvbiBuKGEscyl7cmV0dXJue3JhbmdlOntzdGFydDphLGVuZDphfSxuZXdUZXh0OnN9fWUuaW5zZXJ0PW47ZnVuY3Rpb24gaShhKXtyZXR1cm57cmFuZ2U6YSxuZXdUZXh0OiIifX1lLmRlbD1pO2Z1bmN0aW9uIHIoYSl7dmFyIHM9YTtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKHMpJiZDLnN0cmluZyhzLm5ld1RleHQpJiZZLmlzKHMucmFuZ2UpfWUuaXM9cn0pKHNlfHwoc2U9e30pKTt2YXIgX3Q7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3ZhciBzPXtsYWJlbDppfTtyZXR1cm4gciE9PXZvaWQgMCYmKHMubmVlZHNDb25maXJtYXRpb249ciksYSE9PXZvaWQgMCYmKHMuZGVzY3JpcHRpb249YSksc31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciE9PXZvaWQgMCYmQy5vYmplY3RMaXRlcmFsKHIpJiZDLnN0cmluZyhyLmxhYmVsKSYmKEMuYm9vbGVhbihyLm5lZWRzQ29uZmlybWF0aW9uKXx8ci5uZWVkc0NvbmZpcm1hdGlvbj09PXZvaWQgMCkmJihDLnN0cmluZyhyLmRlc2NyaXB0aW9uKXx8ci5kZXNjcmlwdGlvbj09PXZvaWQgMCl9ZS5pcz1ufSkoX3R8fChfdD17fSkpO3ZhciBkZTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgaT1uO3JldHVybiB0eXBlb2YgaT09InN0cmluZyJ9ZS5pcz10fSkoZGV8fChkZT17fSkpO3ZhciBYZTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChhLHMsbyl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDpzLGFubm90YXRpb25JZDpvfX1lLnJlcGxhY2U9dDtmdW5jdGlvbiBuKGEscyxvKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OmEsZW5kOmF9LG5ld1RleHQ6cyxhbm5vdGF0aW9uSWQ6b319ZS5pbnNlcnQ9bjtmdW5jdGlvbiBpKGEscyl7cmV0dXJue3JhbmdlOmEsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6c319ZS5kZWw9aTtmdW5jdGlvbiByKGEpe3ZhciBzPWE7cmV0dXJuIHNlLmlzKHMpJiYoX3QuaXMocy5hbm5vdGF0aW9uSWQpfHxkZS5pcyhzLmFubm90YXRpb25JZCkpfWUuaXM9cn0pKFhlfHwoWGU9e30pKTt2YXIgYW47KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57dGV4dERvY3VtZW50OmksZWRpdHM6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmb24uaXMoci50ZXh0RG9jdW1lbnQpJiZBcnJheS5pc0FycmF5KHIuZWRpdHMpfWUuaXM9bn0pKGFufHwoYW49e30pKTt2YXIgRHQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3ZhciBzPXtraW5kOiJjcmVhdGUiLHVyaTppfTtyZXR1cm4gciE9PXZvaWQgMCYmKHIub3ZlcndyaXRlIT09dm9pZCAwfHxyLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKHMub3B0aW9ucz1yKSxhIT09dm9pZCAwJiYocy5hbm5vdGF0aW9uSWQ9YSksc31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmci5raW5kPT09ImNyZWF0ZSImJkMuc3RyaW5nKHIudXJpKSYmKHIub3B0aW9ucz09PXZvaWQgMHx8KHIub3B0aW9ucy5vdmVyd3JpdGU9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMub3ZlcndyaXRlKSkmJihyLm9wdGlvbnMuaWdub3JlSWZFeGlzdHM9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMuaWdub3JlSWZFeGlzdHMpKSkmJihyLmFubm90YXRpb25JZD09PXZvaWQgMHx8ZGUuaXMoci5hbm5vdGF0aW9uSWQpKX1lLmlzPW59KShEdHx8KER0PXt9KSk7dmFyIE50OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscixhLHMpe3ZhciBvPXtraW5kOiJyZW5hbWUiLG9sZFVyaTppLG5ld1VyaTpyfTtyZXR1cm4gYSE9PXZvaWQgMCYmKGEub3ZlcndyaXRlIT09dm9pZCAwfHxhLmlnbm9yZUlmRXhpc3RzIT09dm9pZCAwKSYmKG8ub3B0aW9ucz1hKSxzIT09dm9pZCAwJiYoby5hbm5vdGF0aW9uSWQ9cyksb31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmci5raW5kPT09InJlbmFtZSImJkMuc3RyaW5nKHIub2xkVXJpKSYmQy5zdHJpbmcoci5uZXdVcmkpJiYoci5vcHRpb25zPT09dm9pZCAwfHwoci5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8Qy5ib29sZWFuKHIub3B0aW9ucy5vdmVyd3JpdGUpKSYmKHIub3B0aW9ucy5pZ25vcmVJZkV4aXN0cz09PXZvaWQgMHx8Qy5ib29sZWFuKHIub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKHIuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxkZS5pcyhyLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKE50fHwoTnQ9e30pKTt2YXIgSXQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3ZhciBzPXtraW5kOiJkZWxldGUiLHVyaTppfTtyZXR1cm4gciE9PXZvaWQgMCYmKHIucmVjdXJzaXZlIT09dm9pZCAwfHxyLmlnbm9yZUlmTm90RXhpc3RzIT09dm9pZCAwKSYmKHMub3B0aW9ucz1yKSxhIT09dm9pZCAwJiYocy5hbm5vdGF0aW9uSWQ9YSksc31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmci5raW5kPT09ImRlbGV0ZSImJkMuc3RyaW5nKHIudXJpKSYmKHIub3B0aW9ucz09PXZvaWQgMHx8KHIub3B0aW9ucy5yZWN1cnNpdmU9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMucmVjdXJzaXZlKSkmJihyLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHM9PT12b2lkIDB8fEMuYm9vbGVhbihyLm9wdGlvbnMuaWdub3JlSWZOb3RFeGlzdHMpKSkmJihyLmFubm90YXRpb25JZD09PXZvaWQgMHx8ZGUuaXMoci5hbm5vdGF0aW9uSWQpKX1lLmlzPW59KShJdHx8KEl0PXt9KSk7dmFyIG5pOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3ZhciBpPW47cmV0dXJuIGkmJihpLmNoYW5nZXMhPT12b2lkIDB8fGkuZG9jdW1lbnRDaGFuZ2VzIT09dm9pZCAwKSYmKGkuZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwfHxpLmRvY3VtZW50Q2hhbmdlcy5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gQy5zdHJpbmcoci5raW5kKT9EdC5pcyhyKXx8TnQuaXMocil8fEl0LmlzKHIpOmFuLmlzKHIpfSkpfWUuaXM9dH0pKG5pfHwobmk9e30pKTt2YXIgc249ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dGhpcy5lZGl0cz10LHRoaXMuY2hhbmdlQW5ub3RhdGlvbnM9bn1yZXR1cm4gZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsbixpKXt2YXIgcixhO2lmKGk9PT12b2lkIDA/cj1zZS5pbnNlcnQodCxuKTpkZS5pcyhpKT8oYT1pLHI9WGUuaW5zZXJ0KHQsbixpKSk6KHRoaXMuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnModGhpcy5jaGFuZ2VBbm5vdGF0aW9ucyksYT10aGlzLmNoYW5nZUFubm90YXRpb25zLm1hbmFnZShpKSxyPVhlLmluc2VydCh0LG4sYSkpLHRoaXMuZWRpdHMucHVzaChyKSxhIT09dm9pZCAwKXJldHVybiBhfSxlLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQsbixpKXt2YXIgcixhO2lmKGk9PT12b2lkIDA/cj1zZS5yZXBsYWNlKHQsbik6ZGUuaXMoaSk/KGE9aSxyPVhlLnJlcGxhY2UodCxuLGkpKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxhPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLHI9WGUucmVwbGFjZSh0LG4sYSkpLHRoaXMuZWRpdHMucHVzaChyKSxhIT09dm9pZCAwKXJldHVybiBhfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCxuKXt2YXIgaSxyO2lmKG49PT12b2lkIDA/aT1zZS5kZWwodCk6ZGUuaXMobik/KHI9bixpPVhlLmRlbCh0LG4pKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxyPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKG4pLGk9WGUuZGVsKHQscikpLHRoaXMuZWRpdHMucHVzaChpKSxyIT09dm9pZCAwKXJldHVybiByfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dGhpcy5lZGl0cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0c30sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmVkaXRzLnNwbGljZSgwLHRoaXMuZWRpdHMubGVuZ3RoKX0sZS5wcm90b3R5cGUuYXNzZXJ0Q2hhbmdlQW5ub3RhdGlvbnM9ZnVuY3Rpb24odCl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRleHQgZWRpdCBjaGFuZ2UgaXMgbm90IGNvbmZpZ3VyZWQgdG8gbWFuYWdlIGNoYW5nZSBhbm5vdGF0aW9ucy4iKX0sZX0oKSxfYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5fYW5ub3RhdGlvbnM9dD09PXZvaWQgMD9PYmplY3QuY3JlYXRlKG51bGwpOnQsdGhpcy5fY291bnRlcj0wLHRoaXMuX3NpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5tYW5hZ2U9ZnVuY3Rpb24odCxuKXt2YXIgaTtpZihkZS5pcyh0KT9pPXQ6KGk9dGhpcy5uZXh0SWQoKSxuPXQpLHRoaXMuX2Fubm90YXRpb25zW2ldIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiSWQgIitpKyIgaXMgYWxyZWFkeSBpbiB1c2UuIik7aWYobj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFubm90YXRpb24gcHJvdmlkZWQgZm9yIGlkICIraSk7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25zW2ldPW4sdGhpcy5fc2l6ZSsrLGl9LGUucHJvdG90eXBlLm5leHRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb3VudGVyKyssdGhpcy5fY291bnRlci50b1N0cmluZygpfSxlfSgpOyhmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG49dGhpczt0aGlzLl90ZXh0RWRpdENoYW5nZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0IT09dm9pZCAwPyh0aGlzLl93b3Jrc3BhY2VFZGl0PXQsdC5kb2N1bWVudENoYW5nZXM/KHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBfYSh0LmNoYW5nZUFubm90YXRpb25zKSx0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpLHQuZG9jdW1lbnRDaGFuZ2VzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoYW4uaXMoaSkpe3ZhciByPW5ldyBzbihpLmVkaXRzLG4uX2NoYW5nZUFubm90YXRpb25zKTtuLl90ZXh0RWRpdENoYW5nZXNbaS50ZXh0RG9jdW1lbnQudXJpXT1yfX0pKTp0LmNoYW5nZXMmJk9iamVjdC5rZXlzKHQuY2hhbmdlcykuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcj1uZXcgc24odC5jaGFuZ2VzW2ldKTtuLl90ZXh0RWRpdENoYW5nZXNbaV09cn0pKTp0aGlzLl93b3Jrc3BhY2VFZGl0PXt9fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVkaXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMhPT12b2lkIDAmJih0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5zaXplPT09MD90aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXZvaWQgMDp0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKSx0aGlzLl93b3Jrc3BhY2VFZGl0fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHRFZGl0Q2hhbmdlPWZ1bmN0aW9uKHQpe2lmKG9uLmlzKHQpKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBuPXt1cmk6dC51cmksdmVyc2lvbjp0LnZlcnNpb259LGk9dGhpcy5fdGV4dEVkaXRDaGFuZ2VzW24udXJpXTtpZighaSl7dmFyIHI9W10sYT17dGV4dERvY3VtZW50Om4sZWRpdHM6cn07dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChhKSxpPW5ldyBzbihyLHRoaXMuX2NoYW5nZUFubm90YXRpb25zKSx0aGlzLl90ZXh0RWRpdENoYW5nZXNbbi51cmldPWl9cmV0dXJuIGl9ZWxzZXtpZih0aGlzLmluaXRDaGFuZ2VzKCksdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIG5vcm1hbCB0ZXh0IGVkaXQgY2hhbmdlcy4iKTt2YXIgaT10aGlzLl90ZXh0RWRpdENoYW5nZXNbdF07aWYoIWkpe3ZhciByPVtdO3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlc1t0XT1yLGk9bmV3IHNuKHIpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0XT1pfXJldHVybiBpfX0sZS5wcm90b3R5cGUuaW5pdERvY3VtZW50Q2hhbmdlcz1mdW5jdGlvbigpe3RoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwJiZ0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9PT12b2lkIDAmJih0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucz1uZXcgX2EsdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9W10sdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VBbm5vdGF0aW9ucz10aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5hbGwoKSl9LGUucHJvdG90eXBlLmluaXRDaGFuZ2VzPWZ1bmN0aW9uKCl7dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9PT12b2lkIDAmJnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcz09PXZvaWQgMCYmKHRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpKX0sZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbih0LG4saSl7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcjtfdC5pcyhuKXx8ZGUuaXMobik/cj1uOmk9bjt2YXIgYSxzO2lmKHI9PT12b2lkIDA/YT1EdC5jcmVhdGUodCxpKToocz1kZS5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxhPUR0LmNyZWF0ZSh0LGkscykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2goYSkscyE9PXZvaWQgMClyZXR1cm4gc30sZS5wcm90b3R5cGUucmVuYW1lRmlsZT1mdW5jdGlvbih0LG4saSxyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBhO190LmlzKGkpfHxkZS5pcyhpKT9hPWk6cj1pO3ZhciBzLG87aWYoYT09PXZvaWQgMD9zPU50LmNyZWF0ZSh0LG4scik6KG89ZGUuaXMoYSk/YTp0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UoYSkscz1OdC5jcmVhdGUodCxuLHIsbykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2gocyksbyE9PXZvaWQgMClyZXR1cm4gb30sZS5wcm90b3R5cGUuZGVsZXRlRmlsZT1mdW5jdGlvbih0LG4saSl7aWYodGhpcy5pbml0RG9jdW1lbnRDaGFuZ2VzKCksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3IgZG9jdW1lbnQgY2hhbmdlcy4iKTt2YXIgcjtfdC5pcyhuKXx8ZGUuaXMobik/cj1uOmk9bjt2YXIgYSxzO2lmKHI9PT12b2lkIDA/YT1JdC5jcmVhdGUodCxpKToocz1kZS5pcyhyKT9yOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShyKSxhPUl0LmNyZWF0ZSh0LGkscykpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzLnB1c2goYSkscyE9PXZvaWQgMClyZXR1cm4gc30sZX0pKCk7dmFyIHdhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkpe3JldHVybnt1cmk6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy5zdHJpbmcoci51cmkpfWUuaXM9bn0pKHdhfHwod2E9e30pKTt2YXIgeWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57dXJpOmksdmVyc2lvbjpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnN0cmluZyhyLnVyaSkmJkMuaW50ZWdlcihyLnZlcnNpb24pfWUuaXM9bn0pKHlhfHwoeWE9e30pKTt2YXIgb247KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXtyZXR1cm57dXJpOmksdmVyc2lvbjpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gQy5kZWZpbmVkKHIpJiZDLnN0cmluZyhyLnVyaSkmJihyLnZlcnNpb249PT1udWxsfHxDLmludGVnZXIoci52ZXJzaW9uKSl9ZS5pcz1ufSkob258fChvbj17fSkpO3ZhciB4YTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIsYSxzKXtyZXR1cm57dXJpOmksbGFuZ3VhZ2VJZDpyLHZlcnNpb246YSx0ZXh0OnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLmRlZmluZWQocikmJkMuc3RyaW5nKHIudXJpKSYmQy5zdHJpbmcoci5sYW5ndWFnZUlkKSYmQy5pbnRlZ2VyKHIudmVyc2lvbikmJkMuc3RyaW5nKHIudGV4dCl9ZS5pcz1ufSkoeGF8fCh4YT17fSkpO3ZhciBFZTsoZnVuY3Rpb24oZSl7ZS5QbGFpblRleHQ9InBsYWludGV4dCIsZS5NYXJrZG93bj0ibWFya2Rvd24ifSkoRWV8fChFZT17fSkpLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIGk9bjtyZXR1cm4gaT09PWUuUGxhaW5UZXh0fHxpPT09ZS5NYXJrZG93bn1lLmlzPXR9KEVlfHwoRWU9e30pKTt2YXIgaWk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIGk9bjtyZXR1cm4gQy5vYmplY3RMaXRlcmFsKG4pJiZFZS5pcyhpLmtpbmQpJiZDLnN0cmluZyhpLnZhbHVlKX1lLmlzPXR9KShpaXx8KGlpPXt9KSk7dmFyIGJlOyhmdW5jdGlvbihlKXtlLlRleHQ9MSxlLk1ldGhvZD0yLGUuRnVuY3Rpb249MyxlLkNvbnN0cnVjdG9yPTQsZS5GaWVsZD01LGUuVmFyaWFibGU9NixlLkNsYXNzPTcsZS5JbnRlcmZhY2U9OCxlLk1vZHVsZT05LGUuUHJvcGVydHk9MTAsZS5Vbml0PTExLGUuVmFsdWU9MTIsZS5FbnVtPTEzLGUuS2V5d29yZD0xNCxlLlNuaXBwZXQ9MTUsZS5Db2xvcj0xNixlLkZpbGU9MTcsZS5SZWZlcmVuY2U9MTgsZS5Gb2xkZXI9MTksZS5FbnVtTWVtYmVyPTIwLGUuQ29uc3RhbnQ9MjEsZS5TdHJ1Y3Q9MjIsZS5FdmVudD0yMyxlLk9wZXJhdG9yPTI0LGUuVHlwZVBhcmFtZXRlcj0yNX0pKGJlfHwoYmU9e30pKTt2YXIgUmU7KGZ1bmN0aW9uKGUpe2UuUGxhaW5UZXh0PTEsZS5TbmlwcGV0PTJ9KShSZXx8KFJlPXt9KSk7dmFyIFRhOyhmdW5jdGlvbihlKXtlLkRlcHJlY2F0ZWQ9MX0pKFRhfHwoVGE9e30pKTt2YXIga2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3JldHVybntuZXdUZXh0OmksaW5zZXJ0OnIscmVwbGFjZTphfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmQy5zdHJpbmcoci5uZXdUZXh0KSYmWS5pcyhyLmluc2VydCkmJlkuaXMoci5yZXBsYWNlKX1lLmlzPW59KShrYXx8KGthPXt9KSk7dmFyIEFhOyhmdW5jdGlvbihlKXtlLmFzSXM9MSxlLmFkanVzdEluZGVudGF0aW9uPTJ9KShBYXx8KEFhPXt9KSk7dmFyIFNhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybntsYWJlbDpufX1lLmNyZWF0ZT10fSkoU2F8fChTYT17fSkpO3ZhciBMYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkpe3JldHVybntpdGVtczpufHxbXSxpc0luY29tcGxldGU6ISFpfX1lLmNyZWF0ZT10fSkoTGF8fChMYT17fSkpO3ZhciBsbjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpKXtyZXR1cm4gaS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9ZS5mcm9tUGxhaW5UZXh0PXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLnN0cmluZyhyKXx8Qy5vYmplY3RMaXRlcmFsKHIpJiZDLnN0cmluZyhyLmxhbmd1YWdlKSYmQy5zdHJpbmcoci52YWx1ZSl9ZS5pcz1ufSkobG58fChsbj17fSkpO3ZhciBDYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgaT1uO3JldHVybiEhaSYmQy5vYmplY3RMaXRlcmFsKGkpJiYoaWkuaXMoaS5jb250ZW50cyl8fGxuLmlzKGkuY29udGVudHMpfHxDLnR5cGVkQXJyYXkoaS5jb250ZW50cyxsbi5pcykpJiYobi5yYW5nZT09PXZvaWQgMHx8WS5pcyhuLnJhbmdlKSl9ZS5pcz10fSkoQ2F8fChDYT17fSkpO3ZhciBFYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkpe3JldHVybiBpP3tsYWJlbDpuLGRvY3VtZW50YXRpb246aX06e2xhYmVsOm59fWUuY3JlYXRlPXR9KShFYXx8KEVhPXt9KSk7dmFyIFJhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSl7Zm9yKHZhciByPVtdLGE9MjthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKXJbYS0yXT1hcmd1bWVudHNbYV07dmFyIHM9e2xhYmVsOm59O3JldHVybiBDLmRlZmluZWQoaSkmJihzLmRvY3VtZW50YXRpb249aSksQy5kZWZpbmVkKHIpP3MucGFyYW1ldGVycz1yOnMucGFyYW1ldGVycz1bXSxzfWUuY3JlYXRlPXR9KShSYXx8KFJhPXt9KSk7dmFyIHVuOyhmdW5jdGlvbihlKXtlLlRleHQ9MSxlLlJlYWQ9MixlLldyaXRlPTN9KSh1bnx8KHVuPXt9KSk7dmFyIE1hOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4saSl7dmFyIHI9e3JhbmdlOm59O3JldHVybiBDLm51bWJlcihpKSYmKHIua2luZD1pKSxyfWUuY3JlYXRlPXR9KShNYXx8KE1hPXt9KSk7dmFyIHJpOyhmdW5jdGlvbihlKXtlLkZpbGU9MSxlLk1vZHVsZT0yLGUuTmFtZXNwYWNlPTMsZS5QYWNrYWdlPTQsZS5DbGFzcz01LGUuTWV0aG9kPTYsZS5Qcm9wZXJ0eT03LGUuRmllbGQ9OCxlLkNvbnN0cnVjdG9yPTksZS5FbnVtPTEwLGUuSW50ZXJmYWNlPTExLGUuRnVuY3Rpb249MTIsZS5WYXJpYWJsZT0xMyxlLkNvbnN0YW50PTE0LGUuU3RyaW5nPTE1LGUuTnVtYmVyPTE2LGUuQm9vbGVhbj0xNyxlLkFycmF5PTE4LGUuT2JqZWN0PTE5LGUuS2V5PTIwLGUuTnVsbD0yMSxlLkVudW1NZW1iZXI9MjIsZS5TdHJ1Y3Q9MjMsZS5FdmVudD0yNCxlLk9wZXJhdG9yPTI1LGUuVHlwZVBhcmFtZXRlcj0yNn0pKHJpfHwocmk9e30pKTt2YXIgRGE7KGZ1bmN0aW9uKGUpe2UuRGVwcmVjYXRlZD0xfSkoRGF8fChEYT17fSkpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLGkscixhLHMpe3ZhciBvPXtuYW1lOm4sa2luZDppLGxvY2F0aW9uOnt1cmk6YSxyYW5nZTpyfX07cmV0dXJuIHMmJihvLmNvbnRhaW5lck5hbWU9cyksb31lLmNyZWF0ZT10fSkoTmF8fChOYT17fSkpO3ZhciBJYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIsYSxzLG8sbCl7dmFyIHU9e25hbWU6aSxkZXRhaWw6cixraW5kOmEscmFuZ2U6cyxzZWxlY3Rpb25SYW5nZTpvfTtyZXR1cm4gbCE9PXZvaWQgMCYmKHUuY2hpbGRyZW49bCksdX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSl7dmFyIHI9aTtyZXR1cm4gciYmQy5zdHJpbmcoci5uYW1lKSYmQy5udW1iZXIoci5raW5kKSYmWS5pcyhyLnJhbmdlKSYmWS5pcyhyLnNlbGVjdGlvblJhbmdlKSYmKHIuZGV0YWlsPT09dm9pZCAwfHxDLnN0cmluZyhyLmRldGFpbCkpJiYoci5kZXByZWNhdGVkPT09dm9pZCAwfHxDLmJvb2xlYW4oci5kZXByZWNhdGVkKSkmJihyLmNoaWxkcmVuPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KHIuY2hpbGRyZW4pKSYmKHIudGFncz09PXZvaWQgMHx8QXJyYXkuaXNBcnJheShyLnRhZ3MpKX1lLmlzPW59KShJYXx8KElhPXt9KSk7dmFyIHphOyhmdW5jdGlvbihlKXtlLkVtcHR5PSIiLGUuUXVpY2tGaXg9InF1aWNrZml4IixlLlJlZmFjdG9yPSJyZWZhY3RvciIsZS5SZWZhY3RvckV4dHJhY3Q9InJlZmFjdG9yLmV4dHJhY3QiLGUuUmVmYWN0b3JJbmxpbmU9InJlZmFjdG9yLmlubGluZSIsZS5SZWZhY3RvclJld3JpdGU9InJlZmFjdG9yLnJld3JpdGUiLGUuU291cmNlPSJzb3VyY2UiLGUuU291cmNlT3JnYW5pemVJbXBvcnRzPSJzb3VyY2Uub3JnYW5pemVJbXBvcnRzIixlLlNvdXJjZUZpeEFsbD0ic291cmNlLmZpeEFsbCJ9KSh6YXx8KHphPXt9KSk7dmFyIEhhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7dmFyIGE9e2RpYWdub3N0aWNzOml9O3JldHVybiByIT1udWxsJiYoYS5vbmx5PXIpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy50eXBlZEFycmF5KHIuZGlhZ25vc3RpY3Mscm4uaXMpJiYoci5vbmx5PT09dm9pZCAwfHxDLnR5cGVkQXJyYXkoci5vbmx5LEMuc3RyaW5nKSl9ZS5pcz1ufSkoSGF8fChIYT17fSkpO3ZhciBVYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHIsYSl7dmFyIHM9e3RpdGxlOml9LG89ITA7cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIj8obz0hMSxzLmtpbmQ9cik6TXQuaXMocik/cy5jb21tYW5kPXI6cy5lZGl0PXIsbyYmYSE9PXZvaWQgMCYmKHMua2luZD1hKSxzfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiByJiZDLnN0cmluZyhyLnRpdGxlKSYmKHIuZGlhZ25vc3RpY3M9PT12b2lkIDB8fEMudHlwZWRBcnJheShyLmRpYWdub3N0aWNzLHJuLmlzKSkmJihyLmtpbmQ9PT12b2lkIDB8fEMuc3RyaW5nKHIua2luZCkpJiYoci5lZGl0IT09dm9pZCAwfHxyLmNvbW1hbmQhPT12b2lkIDApJiYoci5jb21tYW5kPT09dm9pZCAwfHxNdC5pcyhyLmNvbW1hbmQpKSYmKHIuaXNQcmVmZXJyZWQ9PT12b2lkIDB8fEMuYm9vbGVhbihyLmlzUHJlZmVycmVkKSkmJihyLmVkaXQ9PT12b2lkIDB8fG5pLmlzKHIuZWRpdCkpfWUuaXM9bn0pKFVhfHwoVWE9e30pKTt2YXIgV2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyKXt2YXIgYT17cmFuZ2U6aX07cmV0dXJuIEMuZGVmaW5lZChyKSYmKGEuZGF0YT1yKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiBDLmRlZmluZWQocikmJlkuaXMoci5yYW5nZSkmJihDLnVuZGVmaW5lZChyLmNvbW1hbmQpfHxNdC5pcyhyLmNvbW1hbmQpKX1lLmlzPW59KShXYXx8KFdhPXt9KSk7dmFyIEZhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3RhYlNpemU6aSxpbnNlcnRTcGFjZXM6cn19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmQy51aW50ZWdlcihyLnRhYlNpemUpJiZDLmJvb2xlYW4oci5pbnNlcnRTcGFjZXMpfWUuaXM9bn0pKEZhfHwoRmE9e30pKTt2YXIgUGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxyLGEpe3JldHVybntyYW5nZTppLHRhcmdldDpyLGRhdGE6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGkpe3ZhciByPWk7cmV0dXJuIEMuZGVmaW5lZChyKSYmWS5pcyhyLnJhbmdlKSYmKEMudW5kZWZpbmVkKHIudGFyZ2V0KXx8Qy5zdHJpbmcoci50YXJnZXQpKX1lLmlzPW59KShQYXx8KFBhPXt9KSk7dmFyIGNuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkscil7cmV0dXJue3JhbmdlOmkscGFyZW50OnJ9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpKXt2YXIgcj1pO3JldHVybiByIT09dm9pZCAwJiZZLmlzKHIucmFuZ2UpJiYoci5wYXJlbnQ9PT12b2lkIDB8fGUuaXMoci5wYXJlbnQpKX1lLmlzPW59KShjbnx8KGNuPXt9KSk7dmFyIEJhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGEscyxvLGwpe3JldHVybiBuZXcgcWwoYSxzLG8sbCl9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKGEpe3ZhciBzPWE7cmV0dXJuISEoQy5kZWZpbmVkKHMpJiZDLnN0cmluZyhzLnVyaSkmJihDLnVuZGVmaW5lZChzLmxhbmd1YWdlSWQpfHxDLnN0cmluZyhzLmxhbmd1YWdlSWQpKSYmQy51aW50ZWdlcihzLmxpbmVDb3VudCkmJkMuZnVuYyhzLmdldFRleHQpJiZDLmZ1bmMocy5wb3NpdGlvbkF0KSYmQy5mdW5jKHMub2Zmc2V0QXQpKX1lLmlzPW47ZnVuY3Rpb24gaShhLHMpe2Zvcih2YXIgbz1hLmdldFRleHQoKSxsPXIocyxmdW5jdGlvbihiLHApe3ZhciB3PWIucmFuZ2Uuc3RhcnQubGluZS1wLnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIHc9PT0wP2IucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLXAucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOnd9KSx1PW8ubGVuZ3RoLGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7dmFyIGQ9bFtjXSxtPWEub2Zmc2V0QXQoZC5yYW5nZS5zdGFydCksZj1hLm9mZnNldEF0KGQucmFuZ2UuZW5kKTtpZihmPD11KW89by5zdWJzdHJpbmcoMCxtKStkLm5ld1RleHQrby5zdWJzdHJpbmcoZixvLmxlbmd0aCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTt1PW19cmV0dXJuIG99ZS5hcHBseUVkaXRzPWk7ZnVuY3Rpb24gcihhLHMpe2lmKGEubGVuZ3RoPD0xKXJldHVybiBhO3ZhciBvPWEubGVuZ3RoLzJ8MCxsPWEuc2xpY2UoMCxvKSx1PWEuc2xpY2Uobyk7cihsLHMpLHIodSxzKTtmb3IodmFyIGM9MCxkPTAsbT0wO2M8bC5sZW5ndGgmJmQ8dS5sZW5ndGg7KXt2YXIgZj1zKGxbY10sdVtkXSk7Zjw9MD9hW20rK109bFtjKytdOmFbbSsrXT11W2QrK119Zm9yKDtjPGwubGVuZ3RoOylhW20rK109bFtjKytdO2Zvcig7ZDx1Lmxlbmd0aDspYVttKytdPXVbZCsrXTtyZXR1cm4gYX19KShCYXx8KEJhPXt9KSk7dmFyIHFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4saSxyKXt0aGlzLl91cmk9dCx0aGlzLl9sYW5ndWFnZUlkPW4sdGhpcy5fdmVyc2lvbj1pLHRoaXMuX2NvbnRlbnQ9cix0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidXJpIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VyaX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxhbmd1YWdlSWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInZlcnNpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5nZXRUZXh0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBuPXRoaXMub2Zmc2V0QXQodC5zdGFydCksaT10aGlzLm9mZnNldEF0KHQuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcobixpKX1yZXR1cm4gdGhpcy5fY29udGVudH0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsbil7dGhpcy5fY29udGVudD10LnRleHQsdGhpcy5fdmVyc2lvbj1uLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH0sZS5wcm90b3R5cGUuZ2V0TGluZU9mZnNldHM9ZnVuY3Rpb24oKXtpZih0aGlzLl9saW5lT2Zmc2V0cz09PXZvaWQgMCl7Zm9yKHZhciB0PVtdLG49dGhpcy5fY29udGVudCxpPSEwLHI9MDtyPG4ubGVuZ3RoO3IrKyl7aSYmKHQucHVzaChyKSxpPSExKTt2YXIgYT1uLmNoYXJBdChyKTtpPWE9PT0iXHIifHxhPT09YApgLGE9PT0iXHIiJiZyKzE8bi5sZW5ndGgmJm4uY2hhckF0KHIrMSk9PT1gCmAmJnIrK31pJiZuLmxlbmd0aD4wJiZ0LnB1c2gobi5sZW5ndGgpLHRoaXMuX2xpbmVPZmZzZXRzPXR9cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzfSxlLnByb3RvdHlwZS5wb3NpdGlvbkF0PWZ1bmN0aW9uKHQpe3Q9TWF0aC5tYXgoTWF0aC5taW4odCx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7dmFyIG49dGhpcy5nZXRMaW5lT2Zmc2V0cygpLGk9MCxyPW4ubGVuZ3RoO2lmKHI9PT0wKXJldHVybiBjZS5jcmVhdGUoMCx0KTtmb3IoO2k8cjspe3ZhciBhPU1hdGguZmxvb3IoKGkrcikvMik7blthXT50P3I9YTppPWErMX12YXIgcz1pLTE7cmV0dXJuIGNlLmNyZWF0ZShzLHQtbltzXSl9LGUucHJvdG90eXBlLm9mZnNldEF0PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZih0LmxpbmU+PW4ubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZih0LmxpbmU8MClyZXR1cm4gMDt2YXIgaT1uW3QubGluZV0scj10LmxpbmUrMTxuLmxlbmd0aD9uW3QubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oaSt0LmNoYXJhY3RlcixyKSxpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsaW5lQ291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlfSgpLEM7KGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbihmKXtyZXR1cm4gdHlwZW9mIGY8InUifWUuZGVmaW5lZD1uO2Z1bmN0aW9uIGkoZil7cmV0dXJuIHR5cGVvZiBmPiJ1In1lLnVuZGVmaW5lZD1pO2Z1bmN0aW9uIHIoZil7cmV0dXJuIGY9PT0hMHx8Zj09PSExfWUuYm9vbGVhbj1yO2Z1bmN0aW9uIGEoZil7cmV0dXJuIHQuY2FsbChmKT09PSJbb2JqZWN0IFN0cmluZ10ifWUuc3RyaW5nPWE7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgTnVtYmVyXSJ9ZS5udW1iZXI9cztmdW5jdGlvbiBvKGYsYixwKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgTnVtYmVyXSImJmI8PWYmJmY8PXB9ZS5udW1iZXJSYW5nZT1vO2Z1bmN0aW9uIGwoZil7cmV0dXJuIHQuY2FsbChmKT09PSJbb2JqZWN0IE51bWJlcl0iJiYtMjE0NzQ4MzY0ODw9ZiYmZjw9MjE0NzQ4MzY0N31lLmludGVnZXI9bDtmdW5jdGlvbiB1KGYpe3JldHVybiB0LmNhbGwoZik9PT0iW29iamVjdCBOdW1iZXJdIiYmMDw9ZiYmZjw9MjE0NzQ4MzY0N31lLnVpbnRlZ2VyPXU7ZnVuY3Rpb24gYyhmKXtyZXR1cm4gdC5jYWxsKGYpPT09IltvYmplY3QgRnVuY3Rpb25dIn1lLmZ1bmM9YztmdW5jdGlvbiBkKGYpe3JldHVybiBmIT09bnVsbCYmdHlwZW9mIGY9PSJvYmplY3QifWUub2JqZWN0TGl0ZXJhbD1kO2Z1bmN0aW9uIG0oZixiKXtyZXR1cm4gQXJyYXkuaXNBcnJheShmKSYmZi5ldmVyeShiKX1lLnR5cGVkQXJyYXk9bX0pKEN8fChDPXt9KSk7dmFyIHFhPWNsYXNzIGRpe2NvbnN0cnVjdG9yKHQsbixpLHIpe3RoaXMuX3VyaT10LHRoaXMuX2xhbmd1YWdlSWQ9bix0aGlzLl92ZXJzaW9uPWksdGhpcy5fY29udGVudD1yLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1nZXQgdXJpKCl7cmV0dXJuIHRoaXMuX3VyaX1nZXQgbGFuZ3VhZ2VJZCgpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb259Z2V0VGV4dCh0KXtpZih0KXtjb25zdCBuPXRoaXMub2Zmc2V0QXQodC5zdGFydCksaT10aGlzLm9mZnNldEF0KHQuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcobixpKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUodCxuKXtmb3IobGV0IGkgb2YgdClpZihkaS5pc0luY3JlbWVudGFsKGkpKXtjb25zdCByPVZhKGkucmFuZ2UpLGE9dGhpcy5vZmZzZXRBdChyLnN0YXJ0KSxzPXRoaXMub2Zmc2V0QXQoci5lbmQpO3RoaXMuX2NvbnRlbnQ9dGhpcy5fY29udGVudC5zdWJzdHJpbmcoMCxhKStpLnRleHQrdGhpcy5fY29udGVudC5zdWJzdHJpbmcocyx0aGlzLl9jb250ZW50Lmxlbmd0aCk7Y29uc3Qgbz1NYXRoLm1heChyLnN0YXJ0LmxpbmUsMCksbD1NYXRoLm1heChyLmVuZC5saW5lLDApO2xldCB1PXRoaXMuX2xpbmVPZmZzZXRzO2NvbnN0IGM9T2EoaS50ZXh0LCExLGEpO2lmKGwtbz09PWMubGVuZ3RoKWZvcihsZXQgbT0wLGY9Yy5sZW5ndGg7bTxmO20rKyl1W20rbysxXT1jW21dO2Vsc2UgYy5sZW5ndGg8MWU0P3Uuc3BsaWNlKG8rMSxsLW8sLi4uYyk6dGhpcy5fbGluZU9mZnNldHM9dT11LnNsaWNlKDAsbysxKS5jb25jYXQoYyx1LnNsaWNlKGwrMSkpO2NvbnN0IGQ9aS50ZXh0Lmxlbmd0aC0ocy1hKTtpZihkIT09MClmb3IobGV0IG09bysxK2MubGVuZ3RoLGY9dS5sZW5ndGg7bTxmO20rKyl1W21dPXVbbV0rZH1lbHNlIGlmKGRpLmlzRnVsbChpKSl0aGlzLl9jb250ZW50PWkudGV4dCx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDA7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2hhbmdlIGV2ZW50IHJlY2VpdmVkIik7dGhpcy5fdmVyc2lvbj1ufWdldExpbmVPZmZzZXRzKCl7cmV0dXJuIHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwJiYodGhpcy5fbGluZU9mZnNldHM9T2EodGhpcy5fY29udGVudCwhMCkpLHRoaXMuX2xpbmVPZmZzZXRzfXBvc2l0aW9uQXQodCl7dD1NYXRoLm1heChNYXRoLm1pbih0LHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTtsZXQgbj10aGlzLmdldExpbmVPZmZzZXRzKCksaT0wLHI9bi5sZW5ndGg7aWYocj09PTApcmV0dXJue2xpbmU6MCxjaGFyYWN0ZXI6dH07Zm9yKDtpPHI7KXtsZXQgcz1NYXRoLmZsb29yKChpK3IpLzIpO25bc10+dD9yPXM6aT1zKzF9bGV0IGE9aS0xO3JldHVybntsaW5lOmEsY2hhcmFjdGVyOnQtblthXX19b2Zmc2V0QXQodCl7bGV0IG49dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKHQubGluZT49bi5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKHQubGluZTwwKXJldHVybiAwO2xldCBpPW5bdC5saW5lXSxyPXQubGluZSsxPG4ubGVuZ3RoP25bdC5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihpK3QuY2hhcmFjdGVyLHIpLGkpfWdldCBsaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRMaW5lT2Zmc2V0cygpLmxlbmd0aH1zdGF0aWMgaXNJbmNyZW1lbnRhbCh0KXtsZXQgbj10O3JldHVybiBuIT1udWxsJiZ0eXBlb2Ygbi50ZXh0PT0ic3RyaW5nIiYmbi5yYW5nZSE9PXZvaWQgMCYmKG4ucmFuZ2VMZW5ndGg9PT12b2lkIDB8fHR5cGVvZiBuLnJhbmdlTGVuZ3RoPT0ibnVtYmVyIil9c3RhdGljIGlzRnVsbCh0KXtsZXQgbj10O3JldHVybiBuIT1udWxsJiZ0eXBlb2Ygbi50ZXh0PT0ic3RyaW5nIiYmbi5yYW5nZT09PXZvaWQgMCYmbi5yYW5nZUxlbmd0aD09PXZvaWQgMH19LGFpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsYSxzLG8pe3JldHVybiBuZXcgcWEocixhLHMsbyl9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIsYSxzKXtpZihyIGluc3RhbmNlb2YgcWEpcmV0dXJuIHIudXBkYXRlKGEscykscjt0aHJvdyBuZXcgRXJyb3IoIlRleHREb2N1bWVudC51cGRhdGU6IGRvY3VtZW50IG11c3QgYmUgY3JlYXRlZCBieSBUZXh0RG9jdW1lbnQuY3JlYXRlIil9ZS51cGRhdGU9bjtmdW5jdGlvbiBpKHIsYSl7bGV0IHM9ci5nZXRUZXh0KCksbz1zaShhLm1hcChPbCksKGMsZCk9PntsZXQgbT1jLnJhbmdlLnN0YXJ0LmxpbmUtZC5yYW5nZS5zdGFydC5saW5lO3JldHVybiBtPT09MD9jLnJhbmdlLnN0YXJ0LmNoYXJhY3Rlci1kLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcjptfSksbD0wO2NvbnN0IHU9W107Zm9yKGNvbnN0IGMgb2Ygbyl7bGV0IGQ9ci5vZmZzZXRBdChjLnJhbmdlLnN0YXJ0KTtpZihkPGwpdGhyb3cgbmV3IEVycm9yKCJPdmVybGFwcGluZyBlZGl0Iik7ZD5sJiZ1LnB1c2gocy5zdWJzdHJpbmcobCxkKSksYy5uZXdUZXh0Lmxlbmd0aCYmdS5wdXNoKGMubmV3VGV4dCksbD1yLm9mZnNldEF0KGMucmFuZ2UuZW5kKX1yZXR1cm4gdS5wdXNoKHMuc3Vic3RyKGwpKSx1LmpvaW4oIiIpfWUuYXBwbHlFZGl0cz1pfSkoYWl8fChhaT17fSkpO2Z1bmN0aW9uIHNpKGUsdCl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3Qgbj1lLmxlbmd0aC8yfDAsaT1lLnNsaWNlKDAsbikscj1lLnNsaWNlKG4pO3NpKGksdCksc2kocix0KTtsZXQgYT0wLHM9MCxvPTA7Zm9yKDthPGkubGVuZ3RoJiZzPHIubGVuZ3RoOyl0KGlbYV0scltzXSk8PTA/ZVtvKytdPWlbYSsrXTplW28rK109cltzKytdO2Zvcig7YTxpLmxlbmd0aDspZVtvKytdPWlbYSsrXTtmb3IoO3M8ci5sZW5ndGg7KWVbbysrXT1yW3MrK107cmV0dXJuIGV9ZnVuY3Rpb24gT2EoZSx0LG49MCl7Y29uc3QgaT10P1tuXTpbXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IGE9ZS5jaGFyQ29kZUF0KHIpOyhhPT09MTN8fGE9PT0xMCkmJihhPT09MTMmJnIrMTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KHIrMSk9PT0xMCYmcisrLGkucHVzaChuK3IrMSkpfXJldHVybiBpfWZ1bmN0aW9uIFZhKGUpe2NvbnN0IHQ9ZS5zdGFydCxuPWUuZW5kO3JldHVybiB0LmxpbmU+bi5saW5lfHx0LmxpbmU9PT1uLmxpbmUmJnQuY2hhcmFjdGVyPm4uY2hhcmFjdGVyP3tzdGFydDpuLGVuZDp0fTplfWZ1bmN0aW9uIE9sKGUpe2NvbnN0IHQ9VmEoZS5yYW5nZSk7cmV0dXJuIHQhPT1lLnJhbmdlP3tuZXdUZXh0OmUubmV3VGV4dCxyYW5nZTp0fTplfXZhciBVOyhmdW5jdGlvbihlKXtlW2UuU3RhcnRDb21tZW50VGFnPTBdPSJTdGFydENvbW1lbnRUYWciLGVbZS5Db21tZW50PTFdPSJDb21tZW50IixlW2UuRW5kQ29tbWVudFRhZz0yXT0iRW5kQ29tbWVudFRhZyIsZVtlLlN0YXJ0VGFnT3Blbj0zXT0iU3RhcnRUYWdPcGVuIixlW2UuU3RhcnRUYWdDbG9zZT00XT0iU3RhcnRUYWdDbG9zZSIsZVtlLlN0YXJ0VGFnU2VsZkNsb3NlPTVdPSJTdGFydFRhZ1NlbGZDbG9zZSIsZVtlLlN0YXJ0VGFnPTZdPSJTdGFydFRhZyIsZVtlLkVuZFRhZ09wZW49N109IkVuZFRhZ09wZW4iLGVbZS5FbmRUYWdDbG9zZT04XT0iRW5kVGFnQ2xvc2UiLGVbZS5FbmRUYWc9OV09IkVuZFRhZyIsZVtlLkRlbGltaXRlckFzc2lnbj0xMF09IkRlbGltaXRlckFzc2lnbiIsZVtlLkF0dHJpYnV0ZU5hbWU9MTFdPSJBdHRyaWJ1dGVOYW1lIixlW2UuQXR0cmlidXRlVmFsdWU9MTJdPSJBdHRyaWJ1dGVWYWx1ZSIsZVtlLlN0YXJ0RG9jdHlwZVRhZz0xM109IlN0YXJ0RG9jdHlwZVRhZyIsZVtlLkRvY3R5cGU9MTRdPSJEb2N0eXBlIixlW2UuRW5kRG9jdHlwZVRhZz0xNV09IkVuZERvY3R5cGVUYWciLGVbZS5Db250ZW50PTE2XT0iQ29udGVudCIsZVtlLldoaXRlc3BhY2U9MTddPSJXaGl0ZXNwYWNlIixlW2UuVW5rbm93bj0xOF09IlVua25vd24iLGVbZS5TY3JpcHQ9MTldPSJTY3JpcHQiLGVbZS5TdHlsZXM9MjBdPSJTdHlsZXMiLGVbZS5FT1M9MjFdPSJFT1MifSkoVXx8KFU9e30pKTt2YXIgVjsoZnVuY3Rpb24oZSl7ZVtlLldpdGhpbkNvbnRlbnQ9MF09IldpdGhpbkNvbnRlbnQiLGVbZS5BZnRlck9wZW5pbmdTdGFydFRhZz0xXT0iQWZ0ZXJPcGVuaW5nU3RhcnRUYWciLGVbZS5BZnRlck9wZW5pbmdFbmRUYWc9Ml09IkFmdGVyT3BlbmluZ0VuZFRhZyIsZVtlLldpdGhpbkRvY3R5cGU9M109IldpdGhpbkRvY3R5cGUiLGVbZS5XaXRoaW5UYWc9NF09IldpdGhpblRhZyIsZVtlLldpdGhpbkVuZFRhZz01XT0iV2l0aGluRW5kVGFnIixlW2UuV2l0aGluQ29tbWVudD02XT0iV2l0aGluQ29tbWVudCIsZVtlLldpdGhpblNjcmlwdENvbnRlbnQ9N109IldpdGhpblNjcmlwdENvbnRlbnQiLGVbZS5XaXRoaW5TdHlsZUNvbnRlbnQ9OF09IldpdGhpblN0eWxlQ29udGVudCIsZVtlLkFmdGVyQXR0cmlidXRlTmFtZT05XT0iQWZ0ZXJBdHRyaWJ1dGVOYW1lIixlW2UuQmVmb3JlQXR0cmlidXRlVmFsdWU9MTBdPSJCZWZvcmVBdHRyaWJ1dGVWYWx1ZSJ9KShWfHwoVj17fSkpO3ZhciBqYTsoZnVuY3Rpb24oZSl7ZS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W0VlLk1hcmtkb3duLEVlLlBsYWluVGV4dF19fSxob3Zlcjp7Y29udGVudEZvcm1hdDpbRWUuTWFya2Rvd24sRWUuUGxhaW5UZXh0XX19fX0pKGphfHwoamE9e30pKTt2YXIgb2k7KGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRmlsZT0xXT0iRmlsZSIsZVtlLkRpcmVjdG9yeT0yXT0iRGlyZWN0b3J5IixlW2UuU3ltYm9saWNMaW5rPTY0XT0iU3ltYm9saWNMaW5rIn0pKG9pfHwob2k9e30pKTt2YXIgSmU9S24oKSxWbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt0aGlzLnNvdXJjZT10LHRoaXMubGVuPXQubGVuZ3RoLHRoaXMucG9zaXRpb249bn1yZXR1cm4gZS5wcm90b3R5cGUuZW9zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuPD10aGlzLnBvc2l0aW9ufSxlLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2V9LGUucHJvdG90eXBlLnBvcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9ufSxlLnByb3RvdHlwZS5nb0JhY2tUbz1mdW5jdGlvbih0KXt0aGlzLnBvc2l0aW9uPXR9LGUucHJvdG90eXBlLmdvQmFjaz1mdW5jdGlvbih0KXt0aGlzLnBvc2l0aW9uLT10fSxlLnByb3RvdHlwZS5hZHZhbmNlPWZ1bmN0aW9uKHQpe3RoaXMucG9zaXRpb24rPXR9LGUucHJvdG90eXBlLmdvVG9FbmQ9ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uPXRoaXMuc291cmNlLmxlbmd0aH0sZS5wcm90b3R5cGUubmV4dENoYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uKyspfHwwfSxlLnByb3RvdHlwZS5wZWVrQ2hhcj1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9MCksdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uK3QpfHwwfSxlLnByb3RvdHlwZS5hZHZhbmNlSWZDaGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnBvc2l0aW9uKT8odGhpcy5wb3NpdGlvbisrLCEwKTohMX0sZS5wcm90b3R5cGUuYWR2YW5jZUlmQ2hhcnM9ZnVuY3Rpb24odCl7dmFyIG47aWYodGhpcy5wb3NpdGlvbit0Lmxlbmd0aD50aGlzLnNvdXJjZS5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZih0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24rbikhPT10W25dKXJldHVybiExO3JldHVybiB0aGlzLmFkdmFuY2UobiksITB9LGUucHJvdG90eXBlLmFkdmFuY2VJZlJlZ0V4cD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLnNvdXJjZS5zdWJzdHIodGhpcy5wb3NpdGlvbiksaT1uLm1hdGNoKHQpO3JldHVybiBpPyh0aGlzLnBvc2l0aW9uPXRoaXMucG9zaXRpb24raS5pbmRleCtpWzBdLmxlbmd0aCxpWzBdKToiIn0sZS5wcm90b3R5cGUuYWR2YW5jZVVudGlsUmVnRXhwPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuc291cmNlLnN1YnN0cih0aGlzLnBvc2l0aW9uKSxpPW4ubWF0Y2godCk7cmV0dXJuIGk/KHRoaXMucG9zaXRpb249dGhpcy5wb3NpdGlvbitpLmluZGV4LGlbMF0pOih0aGlzLmdvVG9FbmQoKSwiIil9LGUucHJvdG90eXBlLmFkdmFuY2VVbnRpbENoYXI9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLnBvc2l0aW9uPHRoaXMuc291cmNlLmxlbmd0aDspe2lmKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5wb3NpdGlvbik9PT10KXJldHVybiEwO3RoaXMuYWR2YW5jZSgxKX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuYWR2YW5jZVVudGlsQ2hhcnM9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLnBvc2l0aW9uK3QubGVuZ3RoPD10aGlzLnNvdXJjZS5sZW5ndGg7KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24rbik9PT10W25dO24rKyk7aWYobj09PXQubGVuZ3RoKXJldHVybiEwO3RoaXMuYWR2YW5jZSgxKX1yZXR1cm4gdGhpcy5nb1RvRW5kKCksITF9LGUucHJvdG90eXBlLnNraXBXaGl0ZXNwYWNlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hZHZhbmNlV2hpbGVDaGFyKGZ1bmN0aW9uKG4pe3JldHVybiBuPT09WWx8fG49PT1abHx8bj09PVhsfHxuPT09UWx8fG49PT1KbH0pO3JldHVybiB0PjB9LGUucHJvdG90eXBlLmFkdmFuY2VXaGlsZUNoYXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMucG9zaXRpb247dGhpcy5wb3NpdGlvbjx0aGlzLmxlbiYmdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMucG9zaXRpb24pKTspdGhpcy5wb3NpdGlvbisrO3JldHVybiB0aGlzLnBvc2l0aW9uLW59LGV9KCksR2E9MzMsd3Q9NDUsaG49NjAsemU9NjIsbGk9NDcsamw9NjEsR2w9MzQsJGw9MzksWGw9MTAsSmw9MTMsUWw9MTIsWWw9MzIsWmw9OSxLbD17InRleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlIjohMCwidGV4dC9odG1sIjohMH07ZnVuY3Rpb24gd2UoZSx0LG4saSl7dD09PXZvaWQgMCYmKHQ9MCksbj09PXZvaWQgMCYmKG49Vi5XaXRoaW5Db250ZW50KSxpPT09dm9pZCAwJiYoaT0hMSk7dmFyIHI9bmV3IFZsKGUsdCksYT1uLHM9MCxvPVUuVW5rbm93bixsLHUsYyxkLG07ZnVuY3Rpb24gZigpe3JldHVybiByLmFkdmFuY2VJZlJlZ0V4cCgvXltfOlx3XVtfOlx3LS5cZF0qLykudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBiKCl7cmV0dXJuIHIuYWR2YW5jZUlmUmVnRXhwKC9eW15ccyInPjwvPVx4MDAtXHgwRlx4N0ZceDgwLVx4OUZdKi8pLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcChfLHksRSl7cmV0dXJuIG89eSxzPV8sbD1FLHl9ZnVuY3Rpb24gdygpe3ZhciBfPXIucG9zKCkseT1hLEU9eCgpO3JldHVybiBFIT09VS5FT1MmJl89PT1yLnBvcygpJiYhKGkmJihFPT09VS5TdGFydFRhZ0Nsb3NlfHxFPT09VS5FbmRUYWdDbG9zZSkpPyhjb25zb2xlLmxvZygiU2Nhbm5lci5zY2FuIGhhcyBub3QgYWR2YW5jZWQgYXQgb2Zmc2V0ICIrXysiLCBzdGF0ZSBiZWZvcmU6ICIreSsiIGFmdGVyOiAiK2EpLHIuYWR2YW5jZSgxKSxwKF8sVS5Vbmtub3duKSk6RX1mdW5jdGlvbiB4KCl7dmFyIF89ci5wb3MoKTtpZihyLmVvcygpKXJldHVybiBwKF8sVS5FT1MpO3ZhciB5O3N3aXRjaChhKXtjYXNlIFYuV2l0aGluQ29tbWVudDpyZXR1cm4gci5hZHZhbmNlSWZDaGFycyhbd3Qsd3QsemVdKT8oYT1WLldpdGhpbkNvbnRlbnQscChfLFUuRW5kQ29tbWVudFRhZykpOihyLmFkdmFuY2VVbnRpbENoYXJzKFt3dCx3dCx6ZV0pLHAoXyxVLkNvbW1lbnQpKTtjYXNlIFYuV2l0aGluRG9jdHlwZTpyZXR1cm4gci5hZHZhbmNlSWZDaGFyKHplKT8oYT1WLldpdGhpbkNvbnRlbnQscChfLFUuRW5kRG9jdHlwZVRhZykpOihyLmFkdmFuY2VVbnRpbENoYXIoemUpLHAoXyxVLkRvY3R5cGUpKTtjYXNlIFYuV2l0aGluQ29udGVudDppZihyLmFkdmFuY2VJZkNoYXIoaG4pKXtpZighci5lb3MoKSYmci5wZWVrQ2hhcigpPT09R2Epe2lmKHIuYWR2YW5jZUlmQ2hhcnMoW0dhLHd0LHd0XSkpcmV0dXJuIGE9Vi5XaXRoaW5Db21tZW50LHAoXyxVLlN0YXJ0Q29tbWVudFRhZyk7aWYoci5hZHZhbmNlSWZSZWdFeHAoL14hZG9jdHlwZS9pKSlyZXR1cm4gYT1WLldpdGhpbkRvY3R5cGUscChfLFUuU3RhcnREb2N0eXBlVGFnKX1yZXR1cm4gci5hZHZhbmNlSWZDaGFyKGxpKT8oYT1WLkFmdGVyT3BlbmluZ0VuZFRhZyxwKF8sVS5FbmRUYWdPcGVuKSk6KGE9Vi5BZnRlck9wZW5pbmdTdGFydFRhZyxwKF8sVS5TdGFydFRhZ09wZW4pKX1yZXR1cm4gci5hZHZhbmNlVW50aWxDaGFyKGhuKSxwKF8sVS5Db250ZW50KTtjYXNlIFYuQWZ0ZXJPcGVuaW5nRW5kVGFnOnZhciBFPWYoKTtyZXR1cm4gRS5sZW5ndGg+MD8oYT1WLldpdGhpbkVuZFRhZyxwKF8sVS5FbmRUYWcpKTpyLnNraXBXaGl0ZXNwYWNlKCk/cChfLFUuV2hpdGVzcGFjZSxKZSgiZXJyb3IudW5leHBlY3RlZFdoaXRlc3BhY2UiLCJUYWcgbmFtZSBtdXN0IGRpcmVjdGx5IGZvbGxvdyB0aGUgb3BlbiBicmFja2V0LiIpKTooYT1WLldpdGhpbkVuZFRhZyxyLmFkdmFuY2VVbnRpbENoYXIoemUpLF88ci5wb3MoKT9wKF8sVS5Vbmtub3duLEplKCJlcnJvci5lbmRUYWdOYW1lRXhwZWN0ZWQiLCJFbmQgdGFnIG5hbWUgZXhwZWN0ZWQuIikpOngoKSk7Y2FzZSBWLldpdGhpbkVuZFRhZzppZihyLnNraXBXaGl0ZXNwYWNlKCkpcmV0dXJuIHAoXyxVLldoaXRlc3BhY2UpO2lmKHIuYWR2YW5jZUlmQ2hhcih6ZSkpcmV0dXJuIGE9Vi5XaXRoaW5Db250ZW50LHAoXyxVLkVuZFRhZ0Nsb3NlKTtpZihpJiZyLnBlZWtDaGFyKCk9PT1obilyZXR1cm4gYT1WLldpdGhpbkNvbnRlbnQscChfLFUuRW5kVGFnQ2xvc2UsSmUoImVycm9yLmNsb3NpbmdCcmFja2V0TWlzc2luZyIsIkNsb3NpbmcgYnJhY2tldCBtaXNzaW5nLiIpKTt5PUplKCJlcnJvci5jbG9zaW5nQnJhY2tldEV4cGVjdGVkIiwiQ2xvc2luZyBicmFja2V0IGV4cGVjdGVkLiIpO2JyZWFrO2Nhc2UgVi5BZnRlck9wZW5pbmdTdGFydFRhZzpyZXR1cm4gYz1mKCksbT12b2lkIDAsZD12b2lkIDAsYy5sZW5ndGg+MD8odT0hMSxhPVYuV2l0aGluVGFnLHAoXyxVLlN0YXJ0VGFnKSk6ci5za2lwV2hpdGVzcGFjZSgpP3AoXyxVLldoaXRlc3BhY2UsSmUoImVycm9yLnVuZXhwZWN0ZWRXaGl0ZXNwYWNlIiwiVGFnIG5hbWUgbXVzdCBkaXJlY3RseSBmb2xsb3cgdGhlIG9wZW4gYnJhY2tldC4iKSk6KGE9Vi5XaXRoaW5UYWcsci5hZHZhbmNlVW50aWxDaGFyKHplKSxfPHIucG9zKCk/cChfLFUuVW5rbm93bixKZSgiZXJyb3Iuc3RhcnRUYWdOYW1lRXhwZWN0ZWQiLCJTdGFydCB0YWcgbmFtZSBleHBlY3RlZC4iKSk6eCgpKTtjYXNlIFYuV2l0aGluVGFnOnJldHVybiByLnNraXBXaGl0ZXNwYWNlKCk/KHU9ITAscChfLFUuV2hpdGVzcGFjZSkpOnUmJihkPWIoKSxkLmxlbmd0aD4wKT8oYT1WLkFmdGVyQXR0cmlidXRlTmFtZSx1PSExLHAoXyxVLkF0dHJpYnV0ZU5hbWUpKTpyLmFkdmFuY2VJZkNoYXJzKFtsaSx6ZV0pPyhhPVYuV2l0aGluQ29udGVudCxwKF8sVS5TdGFydFRhZ1NlbGZDbG9zZSkpOnIuYWR2YW5jZUlmQ2hhcih6ZSk/KGM9PT0ic2NyaXB0Ij9tJiZLbFttXT9hPVYuV2l0aGluQ29udGVudDphPVYuV2l0aGluU2NyaXB0Q29udGVudDpjPT09InN0eWxlIj9hPVYuV2l0aGluU3R5bGVDb250ZW50OmE9Vi5XaXRoaW5Db250ZW50LHAoXyxVLlN0YXJ0VGFnQ2xvc2UpKTppJiZyLnBlZWtDaGFyKCk9PT1obj8oYT1WLldpdGhpbkNvbnRlbnQscChfLFUuU3RhcnRUYWdDbG9zZSxKZSgiZXJyb3IuY2xvc2luZ0JyYWNrZXRNaXNzaW5nIiwiQ2xvc2luZyBicmFja2V0IG1pc3NpbmcuIikpKTooci5hZHZhbmNlKDEpLHAoXyxVLlVua25vd24sSmUoImVycm9yLnVuZXhwZWN0ZWRDaGFyYWN0ZXJJblRhZyIsIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIHRhZy4iKSkpO2Nhc2UgVi5BZnRlckF0dHJpYnV0ZU5hbWU6cmV0dXJuIHIuc2tpcFdoaXRlc3BhY2UoKT8odT0hMCxwKF8sVS5XaGl0ZXNwYWNlKSk6ci5hZHZhbmNlSWZDaGFyKGpsKT8oYT1WLkJlZm9yZUF0dHJpYnV0ZVZhbHVlLHAoXyxVLkRlbGltaXRlckFzc2lnbikpOihhPVYuV2l0aGluVGFnLHgoKSk7Y2FzZSBWLkJlZm9yZUF0dHJpYnV0ZVZhbHVlOmlmKHIuc2tpcFdoaXRlc3BhY2UoKSlyZXR1cm4gcChfLFUuV2hpdGVzcGFjZSk7dmFyIFI9ci5hZHZhbmNlSWZSZWdFeHAoL15bXlxzIidgPTw+XSsvKTtpZihSLmxlbmd0aD4wKXJldHVybiByLnBlZWtDaGFyKCk9PT16ZSYmci5wZWVrQ2hhcigtMSk9PT1saSYmKHIuZ29CYWNrKDEpLFI9Ui5zdWJzdHIoMCxSLmxlbmd0aC0xKSksZD09PSJ0eXBlIiYmKG09UiksYT1WLldpdGhpblRhZyx1PSExLHAoXyxVLkF0dHJpYnV0ZVZhbHVlKTt2YXIgUD1yLnBlZWtDaGFyKCk7cmV0dXJuIFA9PT0kbHx8UD09PUdsPyhyLmFkdmFuY2UoMSksci5hZHZhbmNlVW50aWxDaGFyKFApJiZyLmFkdmFuY2UoMSksZD09PSJ0eXBlIiYmKG09ci5nZXRTb3VyY2UoKS5zdWJzdHJpbmcoXysxLHIucG9zKCktMSkpLGE9Vi5XaXRoaW5UYWcsdT0hMSxwKF8sVS5BdHRyaWJ1dGVWYWx1ZSkpOihhPVYuV2l0aGluVGFnLHU9ITEseCgpKTtjYXNlIFYuV2l0aGluU2NyaXB0Q29udGVudDpmb3IodmFyIHY9MTshci5lb3MoKTspe3ZhciBnPXIuYWR2YW5jZUlmUmVnRXhwKC88IS0tfC0tPnw8XC8/c2NyaXB0XHMqXC8/Pj8vaSk7aWYoZy5sZW5ndGg9PT0wKXJldHVybiByLmdvVG9FbmQoKSxwKF8sVS5TY3JpcHQpO2lmKGc9PT0iPCEtLSIpdj09PTEmJih2PTIpO2Vsc2UgaWYoZz09PSItLT4iKXY9MTtlbHNlIGlmKGdbMV0hPT0iLyIpdj09PTImJih2PTMpO2Vsc2UgaWYodj09PTMpdj0yO2Vsc2V7ci5nb0JhY2soZy5sZW5ndGgpO2JyZWFrfX1yZXR1cm4gYT1WLldpdGhpbkNvbnRlbnQsXzxyLnBvcygpP3AoXyxVLlNjcmlwdCk6eCgpO2Nhc2UgVi5XaXRoaW5TdHlsZUNvbnRlbnQ6cmV0dXJuIHIuYWR2YW5jZVVudGlsUmVnRXhwKC88XC9zdHlsZS9pKSxhPVYuV2l0aGluQ29udGVudCxfPHIucG9zKCk/cChfLFUuU3R5bGVzKTp4KCl9cmV0dXJuIHIuYWR2YW5jZSgxKSxhPVYuV2l0aGluQ29udGVudCxwKF8sVS5Vbmtub3duLHkpfXJldHVybntzY2FuOncsZ2V0VG9rZW5UeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIG99LGdldFRva2VuT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LGdldFRva2VuTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHIucG9zKCktc30sZ2V0VG9rZW5FbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5wb3MoKX0sZ2V0VG9rZW5UZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZ2V0U291cmNlKCkuc3Vic3RyaW5nKHMsci5wb3MoKSl9LGdldFNjYW5uZXJTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBhfSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGx9fX1mdW5jdGlvbiAkYShlLHQpe3ZhciBuPTAsaT1lLmxlbmd0aDtpZihpPT09MClyZXR1cm4gMDtmb3IoO248aTspe3ZhciByPU1hdGguZmxvb3IoKG4raSkvMik7dChlW3JdKT9pPXI6bj1yKzF9cmV0dXJuIG59ZnVuY3Rpb24gZXUoZSx0LG4pe2Zvcih2YXIgaT0wLHI9ZS5sZW5ndGgtMTtpPD1yOyl7dmFyIGE9KGkrcikvMnwwLHM9bihlW2FdLHQpO2lmKHM8MClpPWErMTtlbHNlIGlmKHM+MClyPWEtMTtlbHNlIHJldHVybiBhfXJldHVybi0oaSsxKX12YXIgdHU9WyJhcmVhIiwiYmFzZSIsImJyIiwiY29sIiwiZW1iZWQiLCJociIsImltZyIsImlucHV0Iiwia2V5Z2VuIiwibGluayIsIm1lbnVpdGVtIiwibWV0YSIsInBhcmFtIiwic291cmNlIiwidHJhY2siLCJ3YnIiXTtmdW5jdGlvbiBkbihlKXtyZXR1cm4hIWUmJmV1KHR1LGUudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0LG4pe3JldHVybiB0LmxvY2FsZUNvbXBhcmUobil9KT49MH12YXIgWGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixpLHIpe3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1uLHRoaXMuY2hpbGRyZW49aSx0aGlzLnBhcmVudD1yLHRoaXMuY2xvc2VkPSExfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImF0dHJpYnV0ZU5hbWVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlcz9PYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpOltdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmlzU2FtZVRhZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50YWc9PT12b2lkIDA/dD09PXZvaWQgMDp0IT09dm9pZCAwJiZ0aGlzLnRhZy5sZW5ndGg9PT10Lmxlbmd0aCYmdGhpcy50YWcudG9Mb3dlckNhc2UoKT09PXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkcmVuWzBdfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFzdENoaWxkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGgtMV06dm9pZCAwfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmZpbmROb2RlQmVmb3JlPWZ1bmN0aW9uKHQpe3ZhciBuPSRhKHRoaXMuY2hpbGRyZW4sZnVuY3Rpb24oYSl7cmV0dXJuIHQ8PWEuc3RhcnR9KS0xO2lmKG4+PTApe3ZhciBpPXRoaXMuY2hpbGRyZW5bbl07aWYodD5pLnN0YXJ0KXtpZih0PGkuZW5kKXJldHVybiBpLmZpbmROb2RlQmVmb3JlKHQpO3ZhciByPWkubGFzdENoaWxkO3JldHVybiByJiZyLmVuZD09PWkuZW5kP2kuZmluZE5vZGVCZWZvcmUodCk6aX19cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmZpbmROb2RlQXQ9ZnVuY3Rpb24odCl7dmFyIG49JGEodGhpcy5jaGlsZHJlbixmdW5jdGlvbihyKXtyZXR1cm4gdDw9ci5zdGFydH0pLTE7aWYobj49MCl7dmFyIGk9dGhpcy5jaGlsZHJlbltuXTtpZih0Pmkuc3RhcnQmJnQ8PWkuZW5kKXJldHVybiBpLmZpbmROb2RlQXQodCl9cmV0dXJuIHRoaXN9LGV9KCk7ZnVuY3Rpb24gSmEoZSl7Zm9yKHZhciB0PXdlKGUsdm9pZCAwLHZvaWQgMCwhMCksbj1uZXcgWGEoMCxlLmxlbmd0aCxbXSx2b2lkIDApLGk9bixyPS0xLGE9dm9pZCAwLHM9bnVsbCxvPXQuc2NhbigpO28hPT1VLkVPUzspe3N3aXRjaChvKXtjYXNlIFUuU3RhcnRUYWdPcGVuOnZhciBsPW5ldyBYYSh0LmdldFRva2VuT2Zmc2V0KCksZS5sZW5ndGgsW10saSk7aS5jaGlsZHJlbi5wdXNoKGwpLGk9bDticmVhaztjYXNlIFUuU3RhcnRUYWc6aS50YWc9dC5nZXRUb2tlblRleHQoKTticmVhaztjYXNlIFUuU3RhcnRUYWdDbG9zZTppLnBhcmVudCYmKGkuZW5kPXQuZ2V0VG9rZW5FbmQoKSx0LmdldFRva2VuTGVuZ3RoKCk/KGkuc3RhcnRUYWdFbmQ9dC5nZXRUb2tlbkVuZCgpLGkudGFnJiZkbihpLnRhZykmJihpLmNsb3NlZD0hMCxpPWkucGFyZW50KSk6aT1pLnBhcmVudCk7YnJlYWs7Y2FzZSBVLlN0YXJ0VGFnU2VsZkNsb3NlOmkucGFyZW50JiYoaS5jbG9zZWQ9ITAsaS5lbmQ9dC5nZXRUb2tlbkVuZCgpLGkuc3RhcnRUYWdFbmQ9dC5nZXRUb2tlbkVuZCgpLGk9aS5wYXJlbnQpO2JyZWFrO2Nhc2UgVS5FbmRUYWdPcGVuOnI9dC5nZXRUb2tlbk9mZnNldCgpLGE9dm9pZCAwO2JyZWFrO2Nhc2UgVS5FbmRUYWc6YT10LmdldFRva2VuVGV4dCgpLnRvTG93ZXJDYXNlKCk7YnJlYWs7Y2FzZSBVLkVuZFRhZ0Nsb3NlOmZvcih2YXIgdT1pOyF1LmlzU2FtZVRhZyhhKSYmdS5wYXJlbnQ7KXU9dS5wYXJlbnQ7aWYodS5wYXJlbnQpe2Zvcig7aSE9PXU7KWkuZW5kPXIsaS5jbG9zZWQ9ITEsaT1pLnBhcmVudDtpLmNsb3NlZD0hMCxpLmVuZFRhZ1N0YXJ0PXIsaS5lbmQ9dC5nZXRUb2tlbkVuZCgpLGk9aS5wYXJlbnR9YnJlYWs7Y2FzZSBVLkF0dHJpYnV0ZU5hbWU6e3M9dC5nZXRUb2tlblRleHQoKTt2YXIgYz1pLmF0dHJpYnV0ZXM7Y3x8KGkuYXR0cmlidXRlcz1jPXt9KSxjW3NdPW51bGw7YnJlYWt9Y2FzZSBVLkF0dHJpYnV0ZVZhbHVlOnt2YXIgZD10LmdldFRva2VuVGV4dCgpLGM9aS5hdHRyaWJ1dGVzO2MmJnMmJihjW3NdPWQscz1udWxsKTticmVha319bz10LnNjYW4oKX1mb3IoO2kucGFyZW50OylpLmVuZD1lLmxlbmd0aCxpLmNsb3NlZD0hMSxpPWkucGFyZW50O3JldHVybntyb290czpuLmNoaWxkcmVuLGZpbmROb2RlQmVmb3JlOm4uZmluZE5vZGVCZWZvcmUuYmluZChuKSxmaW5kTm9kZUF0Om4uZmluZE5vZGVBdC5iaW5kKG4pfX12YXIgenQ9eyJBYWN1dGU7Ijoiw4EiLEFhY3V0ZToiw4EiLCJhYWN1dGU7Ijoiw6EiLGFhY3V0ZToiw6EiLCJBYnJldmU7IjoixIIiLCJhYnJldmU7IjoixIMiLCJhYzsiOiLiiL4iLCJhY2Q7Ijoi4oi/IiwiYWNFOyI6IuKIvsyzIiwiQWNpcmM7Ijoiw4IiLEFjaXJjOiLDgiIsImFjaXJjOyI6IsOiIixhY2lyYzoiw6IiLCJhY3V0ZTsiOiLCtCIsYWN1dGU6IsK0IiwiQWN5OyI6ItCQIiwiYWN5OyI6ItCwIiwiQUVsaWc7Ijoiw4YiLEFFbGlnOiLDhiIsImFlbGlnOyI6IsOmIixhZWxpZzoiw6YiLCJhZjsiOiLigaEiLCJBZnI7Ijoi8J2UhCIsImFmcjsiOiLwnZSeIiwiQWdyYXZlOyI6IsOAIixBZ3JhdmU6IsOAIiwiYWdyYXZlOyI6IsOgIixhZ3JhdmU6IsOgIiwiYWxlZnN5bTsiOiLihLUiLCJhbGVwaDsiOiLihLUiLCJBbHBoYTsiOiLOkSIsImFscGhhOyI6Is6xIiwiQW1hY3I7IjoixIAiLCJhbWFjcjsiOiLEgSIsImFtYWxnOyI6IuKovyIsIkFNUDsiOiImIixBTVA6IiYiLCJhbXA7IjoiJiIsYW1wOiImIiwiQW5kOyI6IuKpkyIsImFuZDsiOiLiiKciLCJhbmRhbmQ7Ijoi4qmVIiwiYW5kZDsiOiLiqZwiLCJhbmRzbG9wZTsiOiLiqZgiLCJhbmR2OyI6IuKpmiIsImFuZzsiOiLiiKAiLCJhbmdlOyI6IuKmpCIsImFuZ2xlOyI6IuKIoCIsImFuZ21zZDsiOiLiiKEiLCJhbmdtc2RhYTsiOiLipqgiLCJhbmdtc2RhYjsiOiLipqkiLCJhbmdtc2RhYzsiOiLipqoiLCJhbmdtc2RhZDsiOiLipqsiLCJhbmdtc2RhZTsiOiLipqwiLCJhbmdtc2RhZjsiOiLipq0iLCJhbmdtc2RhZzsiOiLipq4iLCJhbmdtc2RhaDsiOiLipq8iLCJhbmdydDsiOiLiiJ8iLCJhbmdydHZiOyI6IuKKviIsImFuZ3J0dmJkOyI6IuKmnSIsImFuZ3NwaDsiOiLiiKIiLCJhbmdzdDsiOiLDhSIsImFuZ3phcnI7Ijoi4o28IiwiQW9nb247IjoixIQiLCJhb2dvbjsiOiLEhSIsIkFvcGY7Ijoi8J2UuCIsImFvcGY7Ijoi8J2VkiIsImFwOyI6IuKJiCIsImFwYWNpcjsiOiLiqa8iLCJhcEU7Ijoi4qmwIiwiYXBlOyI6IuKJiiIsImFwaWQ7Ijoi4omLIiwiYXBvczsiOiInIiwiQXBwbHlGdW5jdGlvbjsiOiLigaEiLCJhcHByb3g7Ijoi4omIIiwiYXBwcm94ZXE7Ijoi4omKIiwiQXJpbmc7Ijoiw4UiLEFyaW5nOiLDhSIsImFyaW5nOyI6IsOlIixhcmluZzoiw6UiLCJBc2NyOyI6IvCdkpwiLCJhc2NyOyI6IvCdkrYiLCJBc3NpZ247Ijoi4omUIiwiYXN0OyI6IioiLCJhc3ltcDsiOiLiiYgiLCJhc3ltcGVxOyI6IuKJjSIsIkF0aWxkZTsiOiLDgyIsQXRpbGRlOiLDgyIsImF0aWxkZTsiOiLDoyIsYXRpbGRlOiLDoyIsIkF1bWw7Ijoiw4QiLEF1bWw6IsOEIiwiYXVtbDsiOiLDpCIsYXVtbDoiw6QiLCJhd2NvbmludDsiOiLiiLMiLCJhd2ludDsiOiLiqJEiLCJiYWNrY29uZzsiOiLiiYwiLCJiYWNrZXBzaWxvbjsiOiLPtiIsImJhY2twcmltZTsiOiLigLUiLCJiYWNrc2ltOyI6IuKIvSIsImJhY2tzaW1lcTsiOiLii40iLCJCYWNrc2xhc2g7Ijoi4oiWIiwiQmFydjsiOiLiq6ciLCJiYXJ2ZWU7Ijoi4oq9IiwiQmFyd2VkOyI6IuKMhiIsImJhcndlZDsiOiLijIUiLCJiYXJ3ZWRnZTsiOiLijIUiLCJiYnJrOyI6IuKOtSIsImJicmt0YnJrOyI6IuKOtiIsImJjb25nOyI6IuKJjCIsIkJjeTsiOiLQkSIsImJjeTsiOiLQsSIsImJkcXVvOyI6IuKAniIsImJlY2F1czsiOiLiiLUiLCJCZWNhdXNlOyI6IuKItSIsImJlY2F1c2U7Ijoi4oi1IiwiYmVtcHR5djsiOiLiprAiLCJiZXBzaTsiOiLPtiIsImJlcm5vdTsiOiLihKwiLCJCZXJub3VsbGlzOyI6IuKErCIsIkJldGE7IjoizpIiLCJiZXRhOyI6Is6yIiwiYmV0aDsiOiLihLYiLCJiZXR3ZWVuOyI6IuKJrCIsIkJmcjsiOiLwnZSFIiwiYmZyOyI6IvCdlJ8iLCJiaWdjYXA7Ijoi4ouCIiwiYmlnY2lyYzsiOiLil68iLCJiaWdjdXA7Ijoi4ouDIiwiYmlnb2RvdDsiOiLiqIAiLCJiaWdvcGx1czsiOiLiqIEiLCJiaWdvdGltZXM7Ijoi4qiCIiwiYmlnc3FjdXA7Ijoi4qiGIiwiYmlnc3RhcjsiOiLimIUiLCJiaWd0cmlhbmdsZWRvd247Ijoi4pa9IiwiYmlndHJpYW5nbGV1cDsiOiLilrMiLCJiaWd1cGx1czsiOiLiqIQiLCJiaWd2ZWU7Ijoi4ouBIiwiYmlnd2VkZ2U7Ijoi4ouAIiwiYmthcm93OyI6IuKkjSIsImJsYWNrbG96ZW5nZTsiOiLip6siLCJibGFja3NxdWFyZTsiOiLilqoiLCJibGFja3RyaWFuZ2xlOyI6IuKWtCIsImJsYWNrdHJpYW5nbGVkb3duOyI6IuKWviIsImJsYWNrdHJpYW5nbGVsZWZ0OyI6IuKXgiIsImJsYWNrdHJpYW5nbGVyaWdodDsiOiLilrgiLCJibGFuazsiOiLikKMiLCJibGsxMjsiOiLilpIiLCJibGsxNDsiOiLilpEiLCJibGszNDsiOiLilpMiLCJibG9jazsiOiLilogiLCJibmU7IjoiPeKDpSIsImJuZXF1aXY7Ijoi4omh4oOlIiwiYk5vdDsiOiLiq60iLCJibm90OyI6IuKMkCIsIkJvcGY7Ijoi8J2UuSIsImJvcGY7Ijoi8J2VkyIsImJvdDsiOiLiiqUiLCJib3R0b207Ijoi4oqlIiwiYm93dGllOyI6IuKLiCIsImJveGJveDsiOiLip4kiLCJib3hETDsiOiLilZciLCJib3hEbDsiOiLilZYiLCJib3hkTDsiOiLilZUiLCJib3hkbDsiOiLilJAiLCJib3hEUjsiOiLilZQiLCJib3hEcjsiOiLilZMiLCJib3hkUjsiOiLilZIiLCJib3hkcjsiOiLilIwiLCJib3hIOyI6IuKVkCIsImJveGg7Ijoi4pSAIiwiYm94SEQ7Ijoi4pWmIiwiYm94SGQ7Ijoi4pWkIiwiYm94aEQ7Ijoi4pWlIiwiYm94aGQ7Ijoi4pSsIiwiYm94SFU7Ijoi4pWpIiwiYm94SHU7Ijoi4pWnIiwiYm94aFU7Ijoi4pWoIiwiYm94aHU7Ijoi4pS0IiwiYm94bWludXM7Ijoi4oqfIiwiYm94cGx1czsiOiLiip4iLCJib3h0aW1lczsiOiLiiqAiLCJib3hVTDsiOiLilZ0iLCJib3hVbDsiOiLilZwiLCJib3h1TDsiOiLilZsiLCJib3h1bDsiOiLilJgiLCJib3hVUjsiOiLilZoiLCJib3hVcjsiOiLilZkiLCJib3h1UjsiOiLilZgiLCJib3h1cjsiOiLilJQiLCJib3hWOyI6IuKVkSIsImJveHY7Ijoi4pSCIiwiYm94Vkg7Ijoi4pWsIiwiYm94Vmg7Ijoi4pWrIiwiYm94dkg7Ijoi4pWqIiwiYm94dmg7Ijoi4pS8IiwiYm94Vkw7Ijoi4pWjIiwiYm94Vmw7Ijoi4pWiIiwiYm94dkw7Ijoi4pWhIiwiYm94dmw7Ijoi4pSkIiwiYm94VlI7Ijoi4pWgIiwiYm94VnI7Ijoi4pWfIiwiYm94dlI7Ijoi4pWeIiwiYm94dnI7Ijoi4pScIiwiYnByaW1lOyI6IuKAtSIsIkJyZXZlOyI6IsuYIiwiYnJldmU7Ijoiy5giLCJicnZiYXI7IjoiwqYiLGJydmJhcjoiwqYiLCJCc2NyOyI6IuKErCIsImJzY3I7Ijoi8J2StyIsImJzZW1pOyI6IuKBjyIsImJzaW07Ijoi4oi9IiwiYnNpbWU7Ijoi4ouNIiwiYnNvbDsiOiJcXCIsImJzb2xiOyI6IuKnhSIsImJzb2xoc3ViOyI6IuKfiCIsImJ1bGw7Ijoi4oCiIiwiYnVsbGV0OyI6IuKAoiIsImJ1bXA7Ijoi4omOIiwiYnVtcEU7Ijoi4qquIiwiYnVtcGU7Ijoi4omPIiwiQnVtcGVxOyI6IuKJjiIsImJ1bXBlcTsiOiLiiY8iLCJDYWN1dGU7IjoixIYiLCJjYWN1dGU7IjoixIciLCJDYXA7Ijoi4ouSIiwiY2FwOyI6IuKIqSIsImNhcGFuZDsiOiLiqYQiLCJjYXBicmN1cDsiOiLiqYkiLCJjYXBjYXA7Ijoi4qmLIiwiY2FwY3VwOyI6IuKphyIsImNhcGRvdDsiOiLiqYAiLCJDYXBpdGFsRGlmZmVyZW50aWFsRDsiOiLihYUiLCJjYXBzOyI6IuKIqe+4gCIsImNhcmV0OyI6IuKBgSIsImNhcm9uOyI6IsuHIiwiQ2F5bGV5czsiOiLihK0iLCJjY2FwczsiOiLiqY0iLCJDY2Fyb247IjoixIwiLCJjY2Fyb247IjoixI0iLCJDY2VkaWw7Ijoiw4ciLENjZWRpbDoiw4ciLCJjY2VkaWw7Ijoiw6ciLGNjZWRpbDoiw6ciLCJDY2lyYzsiOiLEiCIsImNjaXJjOyI6IsSJIiwiQ2NvbmludDsiOiLiiLAiLCJjY3VwczsiOiLiqYwiLCJjY3Vwc3NtOyI6IuKpkCIsIkNkb3Q7IjoixIoiLCJjZG90OyI6IsSLIiwiY2VkaWw7IjoiwrgiLGNlZGlsOiLCuCIsIkNlZGlsbGE7IjoiwrgiLCJjZW1wdHl2OyI6IuKmsiIsImNlbnQ7IjoiwqIiLGNlbnQ6IsKiIiwiQ2VudGVyRG90OyI6IsK3IiwiY2VudGVyZG90OyI6IsK3IiwiQ2ZyOyI6IuKErSIsImNmcjsiOiLwnZSgIiwiQ0hjeTsiOiLQpyIsImNoY3k7Ijoi0YciLCJjaGVjazsiOiLinJMiLCJjaGVja21hcms7Ijoi4pyTIiwiQ2hpOyI6Is6nIiwiY2hpOyI6Is+HIiwiY2lyOyI6IuKXiyIsImNpcmM7Ijoiy4YiLCJjaXJjZXE7Ijoi4omXIiwiY2lyY2xlYXJyb3dsZWZ0OyI6IuKGuiIsImNpcmNsZWFycm93cmlnaHQ7Ijoi4oa7IiwiY2lyY2xlZGFzdDsiOiLiipsiLCJjaXJjbGVkY2lyYzsiOiLiipoiLCJjaXJjbGVkZGFzaDsiOiLiip0iLCJDaXJjbGVEb3Q7Ijoi4oqZIiwiY2lyY2xlZFI7Ijoiwq4iLCJjaXJjbGVkUzsiOiLik4giLCJDaXJjbGVNaW51czsiOiLiipYiLCJDaXJjbGVQbHVzOyI6IuKKlSIsIkNpcmNsZVRpbWVzOyI6IuKKlyIsImNpckU7Ijoi4qeDIiwiY2lyZTsiOiLiiZciLCJjaXJmbmludDsiOiLiqJAiLCJjaXJtaWQ7Ijoi4quvIiwiY2lyc2NpcjsiOiLip4IiLCJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7Ijoi4oiyIiwiQ2xvc2VDdXJseURvdWJsZVF1b3RlOyI6IuKAnSIsIkNsb3NlQ3VybHlRdW90ZTsiOiLigJkiLCJjbHViczsiOiLimaMiLCJjbHVic3VpdDsiOiLimaMiLCJDb2xvbjsiOiLiiLciLCJjb2xvbjsiOiI6IiwiQ29sb25lOyI6IuKptCIsImNvbG9uZTsiOiLiiZQiLCJjb2xvbmVxOyI6IuKJlCIsImNvbW1hOyI6IiwiLCJjb21tYXQ7IjoiQCIsImNvbXA7Ijoi4oiBIiwiY29tcGZuOyI6IuKImCIsImNvbXBsZW1lbnQ7Ijoi4oiBIiwiY29tcGxleGVzOyI6IuKEgiIsImNvbmc7Ijoi4omFIiwiY29uZ2RvdDsiOiLiqa0iLCJDb25ncnVlbnQ7Ijoi4omhIiwiQ29uaW50OyI6IuKIryIsImNvbmludDsiOiLiiK4iLCJDb250b3VySW50ZWdyYWw7Ijoi4oiuIiwiQ29wZjsiOiLihIIiLCJjb3BmOyI6IvCdlZQiLCJjb3Byb2Q7Ijoi4oiQIiwiQ29wcm9kdWN0OyI6IuKIkCIsIkNPUFk7IjoiwqkiLENPUFk6IsKpIiwiY29weTsiOiLCqSIsY29weToiwqkiLCJjb3B5c3I7Ijoi4oSXIiwiQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDsiOiLiiLMiLCJjcmFycjsiOiLihrUiLCJDcm9zczsiOiLiqK8iLCJjcm9zczsiOiLinJciLCJDc2NyOyI6IvCdkp4iLCJjc2NyOyI6IvCdkrgiLCJjc3ViOyI6IuKrjyIsImNzdWJlOyI6IuKrkSIsImNzdXA7Ijoi4quQIiwiY3N1cGU7Ijoi4quSIiwiY3Rkb3Q7Ijoi4ouvIiwiY3VkYXJybDsiOiLipLgiLCJjdWRhcnJyOyI6IuKktSIsImN1ZXByOyI6IuKLniIsImN1ZXNjOyI6IuKLnyIsImN1bGFycjsiOiLihrYiLCJjdWxhcnJwOyI6IuKkvSIsIkN1cDsiOiLii5MiLCJjdXA7Ijoi4oiqIiwiY3VwYnJjYXA7Ijoi4qmIIiwiQ3VwQ2FwOyI6IuKJjSIsImN1cGNhcDsiOiLiqYYiLCJjdXBjdXA7Ijoi4qmKIiwiY3VwZG90OyI6IuKKjSIsImN1cG9yOyI6IuKphSIsImN1cHM7Ijoi4oiq77iAIiwiY3VyYXJyOyI6IuKGtyIsImN1cmFycm07Ijoi4qS8IiwiY3VybHllcXByZWM7Ijoi4oueIiwiY3VybHllcXN1Y2M7Ijoi4oufIiwiY3VybHl2ZWU7Ijoi4ouOIiwiY3VybHl3ZWRnZTsiOiLii48iLCJjdXJyZW47IjoiwqQiLGN1cnJlbjoiwqQiLCJjdXJ2ZWFycm93bGVmdDsiOiLihrYiLCJjdXJ2ZWFycm93cmlnaHQ7Ijoi4oa3IiwiY3V2ZWU7Ijoi4ouOIiwiY3V3ZWQ7Ijoi4ouPIiwiY3djb25pbnQ7Ijoi4oiyIiwiY3dpbnQ7Ijoi4oixIiwiY3lsY3R5OyI6IuKMrSIsIkRhZ2dlcjsiOiLigKEiLCJkYWdnZXI7Ijoi4oCgIiwiZGFsZXRoOyI6IuKEuCIsIkRhcnI7Ijoi4oahIiwiZEFycjsiOiLih5MiLCJkYXJyOyI6IuKGkyIsImRhc2g7Ijoi4oCQIiwiRGFzaHY7Ijoi4qukIiwiZGFzaHY7Ijoi4oqjIiwiZGJrYXJvdzsiOiLipI8iLCJkYmxhYzsiOiLLnSIsIkRjYXJvbjsiOiLEjiIsImRjYXJvbjsiOiLEjyIsIkRjeTsiOiLQlCIsImRjeTsiOiLQtCIsIkREOyI6IuKFhSIsImRkOyI6IuKFhiIsImRkYWdnZXI7Ijoi4oChIiwiZGRhcnI7Ijoi4oeKIiwiRERvdHJhaGQ7Ijoi4qSRIiwiZGRvdHNlcTsiOiLiqbciLCJkZWc7IjoiwrAiLGRlZzoiwrAiLCJEZWw7Ijoi4oiHIiwiRGVsdGE7IjoizpQiLCJkZWx0YTsiOiLOtCIsImRlbXB0eXY7Ijoi4qaxIiwiZGZpc2h0OyI6IuKlvyIsIkRmcjsiOiLwnZSHIiwiZGZyOyI6IvCdlKEiLCJkSGFyOyI6IuKlpSIsImRoYXJsOyI6IuKHgyIsImRoYXJyOyI6IuKHgiIsIkRpYWNyaXRpY2FsQWN1dGU7IjoiwrQiLCJEaWFjcml0aWNhbERvdDsiOiLLmSIsIkRpYWNyaXRpY2FsRG91YmxlQWN1dGU7Ijoiy50iLCJEaWFjcml0aWNhbEdyYXZlOyI6ImAiLCJEaWFjcml0aWNhbFRpbGRlOyI6IsucIiwiZGlhbTsiOiLii4QiLCJEaWFtb25kOyI6IuKLhCIsImRpYW1vbmQ7Ijoi4ouEIiwiZGlhbW9uZHN1aXQ7Ijoi4pmmIiwiZGlhbXM7Ijoi4pmmIiwiZGllOyI6IsKoIiwiRGlmZmVyZW50aWFsRDsiOiLihYYiLCJkaWdhbW1hOyI6Is+dIiwiZGlzaW47Ijoi4ouyIiwiZGl2OyI6IsO3IiwiZGl2aWRlOyI6IsO3IixkaXZpZGU6IsO3IiwiZGl2aWRlb250aW1lczsiOiLii4ciLCJkaXZvbng7Ijoi4ouHIiwiREpjeTsiOiLQgiIsImRqY3k7Ijoi0ZIiLCJkbGNvcm47Ijoi4oyeIiwiZGxjcm9wOyI6IuKMjSIsImRvbGxhcjsiOiIkIiwiRG9wZjsiOiLwnZS7IiwiZG9wZjsiOiLwnZWVIiwiRG90OyI6IsKoIiwiZG90OyI6IsuZIiwiRG90RG90OyI6IuKDnCIsImRvdGVxOyI6IuKJkCIsImRvdGVxZG90OyI6IuKJkSIsIkRvdEVxdWFsOyI6IuKJkCIsImRvdG1pbnVzOyI6IuKIuCIsImRvdHBsdXM7Ijoi4oiUIiwiZG90c3F1YXJlOyI6IuKKoSIsImRvdWJsZWJhcndlZGdlOyI6IuKMhiIsIkRvdWJsZUNvbnRvdXJJbnRlZ3JhbDsiOiLiiK8iLCJEb3VibGVEb3Q7IjoiwqgiLCJEb3VibGVEb3duQXJyb3c7Ijoi4oeTIiwiRG91YmxlTGVmdEFycm93OyI6IuKHkCIsIkRvdWJsZUxlZnRSaWdodEFycm93OyI6IuKHlCIsIkRvdWJsZUxlZnRUZWU7Ijoi4qukIiwiRG91YmxlTG9uZ0xlZnRBcnJvdzsiOiLin7giLCJEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3c7Ijoi4p+6IiwiRG91YmxlTG9uZ1JpZ2h0QXJyb3c7Ijoi4p+5IiwiRG91YmxlUmlnaHRBcnJvdzsiOiLih5IiLCJEb3VibGVSaWdodFRlZTsiOiLiiqgiLCJEb3VibGVVcEFycm93OyI6IuKHkSIsIkRvdWJsZVVwRG93bkFycm93OyI6IuKHlSIsIkRvdWJsZVZlcnRpY2FsQmFyOyI6IuKIpSIsIkRvd25BcnJvdzsiOiLihpMiLCJEb3duYXJyb3c7Ijoi4oeTIiwiZG93bmFycm93OyI6IuKGkyIsIkRvd25BcnJvd0JhcjsiOiLipJMiLCJEb3duQXJyb3dVcEFycm93OyI6IuKHtSIsIkRvd25CcmV2ZTsiOiLMkSIsImRvd25kb3duYXJyb3dzOyI6IuKHiiIsImRvd25oYXJwb29ubGVmdDsiOiLih4MiLCJkb3duaGFycG9vbnJpZ2h0OyI6IuKHgiIsIkRvd25MZWZ0UmlnaHRWZWN0b3I7Ijoi4qWQIiwiRG93bkxlZnRUZWVWZWN0b3I7Ijoi4qWeIiwiRG93bkxlZnRWZWN0b3I7Ijoi4oa9IiwiRG93bkxlZnRWZWN0b3JCYXI7Ijoi4qWWIiwiRG93blJpZ2h0VGVlVmVjdG9yOyI6IuKlnyIsIkRvd25SaWdodFZlY3RvcjsiOiLih4EiLCJEb3duUmlnaHRWZWN0b3JCYXI7Ijoi4qWXIiwiRG93blRlZTsiOiLiiqQiLCJEb3duVGVlQXJyb3c7Ijoi4oanIiwiZHJia2Fyb3c7Ijoi4qSQIiwiZHJjb3JuOyI6IuKMnyIsImRyY3JvcDsiOiLijIwiLCJEc2NyOyI6IvCdkp8iLCJkc2NyOyI6IvCdkrkiLCJEU2N5OyI6ItCFIiwiZHNjeTsiOiLRlSIsImRzb2w7Ijoi4qe2IiwiRHN0cm9rOyI6IsSQIiwiZHN0cm9rOyI6IsSRIiwiZHRkb3Q7Ijoi4ouxIiwiZHRyaTsiOiLilr8iLCJkdHJpZjsiOiLilr4iLCJkdWFycjsiOiLih7UiLCJkdWhhcjsiOiLipa8iLCJkd2FuZ2xlOyI6IuKmpiIsIkRaY3k7Ijoi0I8iLCJkemN5OyI6ItGfIiwiZHppZ3JhcnI7Ijoi4p+/IiwiRWFjdXRlOyI6IsOJIixFYWN1dGU6IsOJIiwiZWFjdXRlOyI6IsOpIixlYWN1dGU6IsOpIiwiZWFzdGVyOyI6IuKpriIsIkVjYXJvbjsiOiLEmiIsImVjYXJvbjsiOiLEmyIsImVjaXI7Ijoi4omWIiwiRWNpcmM7Ijoiw4oiLEVjaXJjOiLDiiIsImVjaXJjOyI6IsOqIixlY2lyYzoiw6oiLCJlY29sb247Ijoi4omVIiwiRWN5OyI6ItCtIiwiZWN5OyI6ItGNIiwiZUREb3Q7Ijoi4qm3IiwiRWRvdDsiOiLEliIsImVEb3Q7Ijoi4omRIiwiZWRvdDsiOiLElyIsImVlOyI6IuKFhyIsImVmRG90OyI6IuKJkiIsIkVmcjsiOiLwnZSIIiwiZWZyOyI6IvCdlKIiLCJlZzsiOiLiqpoiLCJFZ3JhdmU7Ijoiw4giLEVncmF2ZToiw4giLCJlZ3JhdmU7Ijoiw6giLGVncmF2ZToiw6giLCJlZ3M7Ijoi4qqWIiwiZWdzZG90OyI6IuKqmCIsImVsOyI6IuKqmSIsIkVsZW1lbnQ7Ijoi4oiIIiwiZWxpbnRlcnM7Ijoi4o+nIiwiZWxsOyI6IuKEkyIsImVsczsiOiLiqpUiLCJlbHNkb3Q7Ijoi4qqXIiwiRW1hY3I7IjoixJIiLCJlbWFjcjsiOiLEkyIsImVtcHR5OyI6IuKIhSIsImVtcHR5c2V0OyI6IuKIhSIsIkVtcHR5U21hbGxTcXVhcmU7Ijoi4pe7IiwiZW1wdHl2OyI6IuKIhSIsIkVtcHR5VmVyeVNtYWxsU3F1YXJlOyI6IuKWqyIsImVtc3A7Ijoi4oCDIiwiZW1zcDEzOyI6IuKAhCIsImVtc3AxNDsiOiLigIUiLCJFTkc7IjoixYoiLCJlbmc7IjoixYsiLCJlbnNwOyI6IuKAgiIsIkVvZ29uOyI6IsSYIiwiZW9nb247IjoixJkiLCJFb3BmOyI6IvCdlLwiLCJlb3BmOyI6IvCdlZYiLCJlcGFyOyI6IuKLlSIsImVwYXJzbDsiOiLip6MiLCJlcGx1czsiOiLiqbEiLCJlcHNpOyI6Is61IiwiRXBzaWxvbjsiOiLOlSIsImVwc2lsb247IjoizrUiLCJlcHNpdjsiOiLPtSIsImVxY2lyYzsiOiLiiZYiLCJlcWNvbG9uOyI6IuKJlSIsImVxc2ltOyI6IuKJgiIsImVxc2xhbnRndHI7Ijoi4qqWIiwiZXFzbGFudGxlc3M7Ijoi4qqVIiwiRXF1YWw7Ijoi4qm1IiwiZXF1YWxzOyI6Ij0iLCJFcXVhbFRpbGRlOyI6IuKJgiIsImVxdWVzdDsiOiLiiZ8iLCJFcXVpbGlicml1bTsiOiLih4wiLCJlcXVpdjsiOiLiiaEiLCJlcXVpdkREOyI6IuKpuCIsImVxdnBhcnNsOyI6IuKnpSIsImVyYXJyOyI6IuKlsSIsImVyRG90OyI6IuKJkyIsIkVzY3I7Ijoi4oSwIiwiZXNjcjsiOiLihK8iLCJlc2RvdDsiOiLiiZAiLCJFc2ltOyI6IuKpsyIsImVzaW07Ijoi4omCIiwiRXRhOyI6Is6XIiwiZXRhOyI6Is63IiwiRVRIOyI6IsOQIixFVEg6IsOQIiwiZXRoOyI6IsOwIixldGg6IsOwIiwiRXVtbDsiOiLDiyIsRXVtbDoiw4siLCJldW1sOyI6IsOrIixldW1sOiLDqyIsImV1cm87Ijoi4oKsIiwiZXhjbDsiOiIhIiwiZXhpc3Q7Ijoi4oiDIiwiRXhpc3RzOyI6IuKIgyIsImV4cGVjdGF0aW9uOyI6IuKEsCIsIkV4cG9uZW50aWFsRTsiOiLihYciLCJleHBvbmVudGlhbGU7Ijoi4oWHIiwiZmFsbGluZ2RvdHNlcTsiOiLiiZIiLCJGY3k7Ijoi0KQiLCJmY3k7Ijoi0YQiLCJmZW1hbGU7Ijoi4pmAIiwiZmZpbGlnOyI6Iu+sgyIsImZmbGlnOyI6Iu+sgCIsImZmbGxpZzsiOiLvrIQiLCJGZnI7Ijoi8J2UiSIsImZmcjsiOiLwnZSjIiwiZmlsaWc7Ijoi76yBIiwiRmlsbGVkU21hbGxTcXVhcmU7Ijoi4pe8IiwiRmlsbGVkVmVyeVNtYWxsU3F1YXJlOyI6IuKWqiIsImZqbGlnOyI6ImZqIiwiZmxhdDsiOiLima0iLCJmbGxpZzsiOiLvrIIiLCJmbHRuczsiOiLilrEiLCJmbm9mOyI6IsaSIiwiRm9wZjsiOiLwnZS9IiwiZm9wZjsiOiLwnZWXIiwiRm9yQWxsOyI6IuKIgCIsImZvcmFsbDsiOiLiiIAiLCJmb3JrOyI6IuKLlCIsImZvcmt2OyI6IuKrmSIsIkZvdXJpZXJ0cmY7Ijoi4oSxIiwiZnBhcnRpbnQ7Ijoi4qiNIiwiZnJhYzEyOyI6IsK9IixmcmFjMTI6IsK9IiwiZnJhYzEzOyI6IuKFkyIsImZyYWMxNDsiOiLCvCIsZnJhYzE0OiLCvCIsImZyYWMxNTsiOiLihZUiLCJmcmFjMTY7Ijoi4oWZIiwiZnJhYzE4OyI6IuKFmyIsImZyYWMyMzsiOiLihZQiLCJmcmFjMjU7Ijoi4oWWIiwiZnJhYzM0OyI6IsK+IixmcmFjMzQ6IsK+IiwiZnJhYzM1OyI6IuKFlyIsImZyYWMzODsiOiLihZwiLCJmcmFjNDU7Ijoi4oWYIiwiZnJhYzU2OyI6IuKFmiIsImZyYWM1ODsiOiLihZ0iLCJmcmFjNzg7Ijoi4oWeIiwiZnJhc2w7Ijoi4oGEIiwiZnJvd247Ijoi4oyiIiwiRnNjcjsiOiLihLEiLCJmc2NyOyI6IvCdkrsiLCJnYWN1dGU7Ijoix7UiLCJHYW1tYTsiOiLOkyIsImdhbW1hOyI6Is6zIiwiR2FtbWFkOyI6Is+cIiwiZ2FtbWFkOyI6Is+dIiwiZ2FwOyI6IuKqhiIsIkdicmV2ZTsiOiLEniIsImdicmV2ZTsiOiLEnyIsIkdjZWRpbDsiOiLEoiIsIkdjaXJjOyI6IsScIiwiZ2NpcmM7IjoixJ0iLCJHY3k7Ijoi0JMiLCJnY3k7Ijoi0LMiLCJHZG90OyI6IsSgIiwiZ2RvdDsiOiLEoSIsImdFOyI6IuKJpyIsImdlOyI6IuKJpSIsImdFbDsiOiLiqowiLCJnZWw7Ijoi4oubIiwiZ2VxOyI6IuKJpSIsImdlcXE7Ijoi4omnIiwiZ2Vxc2xhbnQ7Ijoi4qm+IiwiZ2VzOyI6IuKpviIsImdlc2NjOyI6IuKqqSIsImdlc2RvdDsiOiLiqoAiLCJnZXNkb3RvOyI6IuKqgiIsImdlc2RvdG9sOyI6IuKqhCIsImdlc2w7Ijoi4oub77iAIiwiZ2VzbGVzOyI6IuKqlCIsIkdmcjsiOiLwnZSKIiwiZ2ZyOyI6IvCdlKQiLCJHZzsiOiLii5kiLCJnZzsiOiLiiasiLCJnZ2c7Ijoi4ouZIiwiZ2ltZWw7Ijoi4oS3IiwiR0pjeTsiOiLQgyIsImdqY3k7Ijoi0ZMiLCJnbDsiOiLiibciLCJnbGE7Ijoi4qqlIiwiZ2xFOyI6IuKqkiIsImdsajsiOiLiqqQiLCJnbmFwOyI6IuKqiiIsImduYXBwcm94OyI6IuKqiiIsImduRTsiOiLiiakiLCJnbmU7Ijoi4qqIIiwiZ25lcTsiOiLiqogiLCJnbmVxcTsiOiLiiakiLCJnbnNpbTsiOiLii6ciLCJHb3BmOyI6IvCdlL4iLCJnb3BmOyI6IvCdlZgiLCJncmF2ZTsiOiJgIiwiR3JlYXRlckVxdWFsOyI6IuKJpSIsIkdyZWF0ZXJFcXVhbExlc3M7Ijoi4oubIiwiR3JlYXRlckZ1bGxFcXVhbDsiOiLiiaciLCJHcmVhdGVyR3JlYXRlcjsiOiLiqqIiLCJHcmVhdGVyTGVzczsiOiLiibciLCJHcmVhdGVyU2xhbnRFcXVhbDsiOiLiqb4iLCJHcmVhdGVyVGlsZGU7Ijoi4omzIiwiR3NjcjsiOiLwnZKiIiwiZ3NjcjsiOiLihIoiLCJnc2ltOyI6IuKJsyIsImdzaW1lOyI6IuKqjiIsImdzaW1sOyI6IuKqkCIsIkdUOyI6Ij4iLEdUOiI+IiwiR3Q7Ijoi4omrIiwiZ3Q7IjoiPiIsZ3Q6Ij4iLCJndGNjOyI6IuKqpyIsImd0Y2lyOyI6IuKpuiIsImd0ZG90OyI6IuKLlyIsImd0bFBhcjsiOiLippUiLCJndHF1ZXN0OyI6IuKpvCIsImd0cmFwcHJveDsiOiLiqoYiLCJndHJhcnI7Ijoi4qW4IiwiZ3RyZG90OyI6IuKLlyIsImd0cmVxbGVzczsiOiLii5siLCJndHJlcXFsZXNzOyI6IuKqjCIsImd0cmxlc3M7Ijoi4om3IiwiZ3Ryc2ltOyI6IuKJsyIsImd2ZXJ0bmVxcTsiOiLiianvuIAiLCJndm5FOyI6IuKJqe+4gCIsIkhhY2VrOyI6IsuHIiwiaGFpcnNwOyI6IuKAiiIsImhhbGY7Ijoiwr0iLCJoYW1pbHQ7Ijoi4oSLIiwiSEFSRGN5OyI6ItCqIiwiaGFyZGN5OyI6ItGKIiwiaEFycjsiOiLih5QiLCJoYXJyOyI6IuKGlCIsImhhcnJjaXI7Ijoi4qWIIiwiaGFycnc7Ijoi4oatIiwiSGF0OyI6Il4iLCJoYmFyOyI6IuKEjyIsIkhjaXJjOyI6IsSkIiwiaGNpcmM7IjoixKUiLCJoZWFydHM7Ijoi4pmlIiwiaGVhcnRzdWl0OyI6IuKZpSIsImhlbGxpcDsiOiLigKYiLCJoZXJjb247Ijoi4oq5IiwiSGZyOyI6IuKEjCIsImhmcjsiOiLwnZSlIiwiSGlsYmVydFNwYWNlOyI6IuKEiyIsImhrc2Vhcm93OyI6IuKkpSIsImhrc3dhcm93OyI6IuKkpiIsImhvYXJyOyI6IuKHvyIsImhvbXRodDsiOiLiiLsiLCJob29rbGVmdGFycm93OyI6IuKGqSIsImhvb2tyaWdodGFycm93OyI6IuKGqiIsIkhvcGY7Ijoi4oSNIiwiaG9wZjsiOiLwnZWZIiwiaG9yYmFyOyI6IuKAlSIsIkhvcml6b250YWxMaW5lOyI6IuKUgCIsIkhzY3I7Ijoi4oSLIiwiaHNjcjsiOiLwnZK9IiwiaHNsYXNoOyI6IuKEjyIsIkhzdHJvazsiOiLEpiIsImhzdHJvazsiOiLEpyIsIkh1bXBEb3duSHVtcDsiOiLiiY4iLCJIdW1wRXF1YWw7Ijoi4omPIiwiaHlidWxsOyI6IuKBgyIsImh5cGhlbjsiOiLigJAiLCJJYWN1dGU7Ijoiw40iLElhY3V0ZToiw40iLCJpYWN1dGU7Ijoiw60iLGlhY3V0ZToiw60iLCJpYzsiOiLigaMiLCJJY2lyYzsiOiLDjiIsSWNpcmM6IsOOIiwiaWNpcmM7Ijoiw64iLGljaXJjOiLDriIsIkljeTsiOiLQmCIsImljeTsiOiLQuCIsIklkb3Q7IjoixLAiLCJJRWN5OyI6ItCVIiwiaWVjeTsiOiLQtSIsImlleGNsOyI6IsKhIixpZXhjbDoiwqEiLCJpZmY7Ijoi4oeUIiwiSWZyOyI6IuKEkSIsImlmcjsiOiLwnZSmIiwiSWdyYXZlOyI6IsOMIixJZ3JhdmU6IsOMIiwiaWdyYXZlOyI6IsOsIixpZ3JhdmU6IsOsIiwiaWk7Ijoi4oWIIiwiaWlpaW50OyI6IuKojCIsImlpaW50OyI6IuKIrSIsImlpbmZpbjsiOiLip5wiLCJpaW90YTsiOiLihKkiLCJJSmxpZzsiOiLEsiIsImlqbGlnOyI6IsSzIiwiSW07Ijoi4oSRIiwiSW1hY3I7IjoixKoiLCJpbWFjcjsiOiLEqyIsImltYWdlOyI6IuKEkSIsIkltYWdpbmFyeUk7Ijoi4oWIIiwiaW1hZ2xpbmU7Ijoi4oSQIiwiaW1hZ3BhcnQ7Ijoi4oSRIiwiaW1hdGg7IjoixLEiLCJpbW9mOyI6IuKKtyIsImltcGVkOyI6Isa1IiwiSW1wbGllczsiOiLih5IiLCJpbjsiOiLiiIgiLCJpbmNhcmU7Ijoi4oSFIiwiaW5maW47Ijoi4oieIiwiaW5maW50aWU7Ijoi4qedIiwiaW5vZG90OyI6IsSxIiwiSW50OyI6IuKIrCIsImludDsiOiLiiKsiLCJpbnRjYWw7Ijoi4oq6IiwiaW50ZWdlcnM7Ijoi4oSkIiwiSW50ZWdyYWw7Ijoi4oirIiwiaW50ZXJjYWw7Ijoi4oq6IiwiSW50ZXJzZWN0aW9uOyI6IuKLgiIsImludGxhcmhrOyI6IuKolyIsImludHByb2Q7Ijoi4qi8IiwiSW52aXNpYmxlQ29tbWE7Ijoi4oGjIiwiSW52aXNpYmxlVGltZXM7Ijoi4oGiIiwiSU9jeTsiOiLQgSIsImlvY3k7Ijoi0ZEiLCJJb2dvbjsiOiLEriIsImlvZ29uOyI6IsSvIiwiSW9wZjsiOiLwnZWAIiwiaW9wZjsiOiLwnZWaIiwiSW90YTsiOiLOmSIsImlvdGE7IjoizrkiLCJpcHJvZDsiOiLiqLwiLCJpcXVlc3Q7Ijoiwr8iLGlxdWVzdDoiwr8iLCJJc2NyOyI6IuKEkCIsImlzY3I7Ijoi8J2SviIsImlzaW47Ijoi4oiIIiwiaXNpbmRvdDsiOiLii7UiLCJpc2luRTsiOiLii7kiLCJpc2luczsiOiLii7QiLCJpc2luc3Y7Ijoi4ouzIiwiaXNpbnY7Ijoi4oiIIiwiaXQ7Ijoi4oGiIiwiSXRpbGRlOyI6IsSoIiwiaXRpbGRlOyI6IsSpIiwiSXVrY3k7Ijoi0IYiLCJpdWtjeTsiOiLRliIsIkl1bWw7Ijoiw48iLEl1bWw6IsOPIiwiaXVtbDsiOiLDryIsaXVtbDoiw68iLCJKY2lyYzsiOiLEtCIsImpjaXJjOyI6IsS1IiwiSmN5OyI6ItCZIiwiamN5OyI6ItC5IiwiSmZyOyI6IvCdlI0iLCJqZnI7Ijoi8J2UpyIsImptYXRoOyI6Isi3IiwiSm9wZjsiOiLwnZWBIiwiam9wZjsiOiLwnZWbIiwiSnNjcjsiOiLwnZKlIiwianNjcjsiOiLwnZK/IiwiSnNlcmN5OyI6ItCIIiwianNlcmN5OyI6ItGYIiwiSnVrY3k7Ijoi0IQiLCJqdWtjeTsiOiLRlCIsIkthcHBhOyI6Is6aIiwia2FwcGE7IjoizroiLCJrYXBwYXY7Ijoiz7AiLCJLY2VkaWw7IjoixLYiLCJrY2VkaWw7IjoixLciLCJLY3k7Ijoi0JoiLCJrY3k7Ijoi0LoiLCJLZnI7Ijoi8J2UjiIsImtmcjsiOiLwnZSoIiwia2dyZWVuOyI6IsS4IiwiS0hjeTsiOiLQpSIsImtoY3k7Ijoi0YUiLCJLSmN5OyI6ItCMIiwia2pjeTsiOiLRnCIsIktvcGY7Ijoi8J2VgiIsImtvcGY7Ijoi8J2VnCIsIktzY3I7Ijoi8J2SpiIsImtzY3I7Ijoi8J2TgCIsImxBYXJyOyI6IuKHmiIsIkxhY3V0ZTsiOiLEuSIsImxhY3V0ZTsiOiLEuiIsImxhZW1wdHl2OyI6IuKmtCIsImxhZ3JhbjsiOiLihJIiLCJMYW1iZGE7IjoizpsiLCJsYW1iZGE7IjoizrsiLCJMYW5nOyI6IuKfqiIsImxhbmc7Ijoi4p+oIiwibGFuZ2Q7Ijoi4qaRIiwibGFuZ2xlOyI6IuKfqCIsImxhcDsiOiLiqoUiLCJMYXBsYWNldHJmOyI6IuKEkiIsImxhcXVvOyI6IsKrIixsYXF1bzoiwqsiLCJMYXJyOyI6IuKGniIsImxBcnI7Ijoi4oeQIiwibGFycjsiOiLihpAiLCJsYXJyYjsiOiLih6QiLCJsYXJyYmZzOyI6IuKknyIsImxhcnJmczsiOiLipJ0iLCJsYXJyaGs7Ijoi4oapIiwibGFycmxwOyI6IuKGqyIsImxhcnJwbDsiOiLipLkiLCJsYXJyc2ltOyI6IuKlsyIsImxhcnJ0bDsiOiLihqIiLCJsYXQ7Ijoi4qqrIiwibEF0YWlsOyI6IuKkmyIsImxhdGFpbDsiOiLipJkiLCJsYXRlOyI6IuKqrSIsImxhdGVzOyI6IuKqre+4gCIsImxCYXJyOyI6IuKkjiIsImxiYXJyOyI6IuKkjCIsImxiYnJrOyI6IuKdsiIsImxicmFjZTsiOiJ7IiwibGJyYWNrOyI6IlsiLCJsYnJrZTsiOiLiposiLCJsYnJrc2xkOyI6IuKmjyIsImxicmtzbHU7Ijoi4qaNIiwiTGNhcm9uOyI6IsS9IiwibGNhcm9uOyI6IsS+IiwiTGNlZGlsOyI6IsS7IiwibGNlZGlsOyI6IsS8IiwibGNlaWw7Ijoi4oyIIiwibGN1YjsiOiJ7IiwiTGN5OyI6ItCbIiwibGN5OyI6ItC7IiwibGRjYTsiOiLipLYiLCJsZHF1bzsiOiLigJwiLCJsZHF1b3I7Ijoi4oCeIiwibGRyZGhhcjsiOiLipaciLCJsZHJ1c2hhcjsiOiLipYsiLCJsZHNoOyI6IuKGsiIsImxFOyI6IuKJpiIsImxlOyI6IuKJpCIsIkxlZnRBbmdsZUJyYWNrZXQ7Ijoi4p+oIiwiTGVmdEFycm93OyI6IuKGkCIsIkxlZnRhcnJvdzsiOiLih5AiLCJsZWZ0YXJyb3c7Ijoi4oaQIiwiTGVmdEFycm93QmFyOyI6IuKHpCIsIkxlZnRBcnJvd1JpZ2h0QXJyb3c7Ijoi4oeGIiwibGVmdGFycm93dGFpbDsiOiLihqIiLCJMZWZ0Q2VpbGluZzsiOiLijIgiLCJMZWZ0RG91YmxlQnJhY2tldDsiOiLin6YiLCJMZWZ0RG93blRlZVZlY3RvcjsiOiLipaEiLCJMZWZ0RG93blZlY3RvcjsiOiLih4MiLCJMZWZ0RG93blZlY3RvckJhcjsiOiLipZkiLCJMZWZ0Rmxvb3I7Ijoi4oyKIiwibGVmdGhhcnBvb25kb3duOyI6IuKGvSIsImxlZnRoYXJwb29udXA7Ijoi4oa8IiwibGVmdGxlZnRhcnJvd3M7Ijoi4oeHIiwiTGVmdFJpZ2h0QXJyb3c7Ijoi4oaUIiwiTGVmdHJpZ2h0YXJyb3c7Ijoi4oeUIiwibGVmdHJpZ2h0YXJyb3c7Ijoi4oaUIiwibGVmdHJpZ2h0YXJyb3dzOyI6IuKHhiIsImxlZnRyaWdodGhhcnBvb25zOyI6IuKHiyIsImxlZnRyaWdodHNxdWlnYXJyb3c7Ijoi4oatIiwiTGVmdFJpZ2h0VmVjdG9yOyI6IuKljiIsIkxlZnRUZWU7Ijoi4oqjIiwiTGVmdFRlZUFycm93OyI6IuKGpCIsIkxlZnRUZWVWZWN0b3I7Ijoi4qWaIiwibGVmdHRocmVldGltZXM7Ijoi4ouLIiwiTGVmdFRyaWFuZ2xlOyI6IuKKsiIsIkxlZnRUcmlhbmdsZUJhcjsiOiLip48iLCJMZWZ0VHJpYW5nbGVFcXVhbDsiOiLiirQiLCJMZWZ0VXBEb3duVmVjdG9yOyI6IuKlkSIsIkxlZnRVcFRlZVZlY3RvcjsiOiLipaAiLCJMZWZ0VXBWZWN0b3I7Ijoi4oa/IiwiTGVmdFVwVmVjdG9yQmFyOyI6IuKlmCIsIkxlZnRWZWN0b3I7Ijoi4oa8IiwiTGVmdFZlY3RvckJhcjsiOiLipZIiLCJsRWc7Ijoi4qqLIiwibGVnOyI6IuKLmiIsImxlcTsiOiLiiaQiLCJsZXFxOyI6IuKJpiIsImxlcXNsYW50OyI6IuKpvSIsImxlczsiOiLiqb0iLCJsZXNjYzsiOiLiqqgiLCJsZXNkb3Q7Ijoi4qm/IiwibGVzZG90bzsiOiLiqoEiLCJsZXNkb3RvcjsiOiLiqoMiLCJsZXNnOyI6IuKLmu+4gCIsImxlc2dlczsiOiLiqpMiLCJsZXNzYXBwcm94OyI6IuKqhSIsImxlc3Nkb3Q7Ijoi4ouWIiwibGVzc2VxZ3RyOyI6IuKLmiIsImxlc3NlcXFndHI7Ijoi4qqLIiwiTGVzc0VxdWFsR3JlYXRlcjsiOiLii5oiLCJMZXNzRnVsbEVxdWFsOyI6IuKJpiIsIkxlc3NHcmVhdGVyOyI6IuKJtiIsImxlc3NndHI7Ijoi4om2IiwiTGVzc0xlc3M7Ijoi4qqhIiwibGVzc3NpbTsiOiLiibIiLCJMZXNzU2xhbnRFcXVhbDsiOiLiqb0iLCJMZXNzVGlsZGU7Ijoi4omyIiwibGZpc2h0OyI6IuKlvCIsImxmbG9vcjsiOiLijIoiLCJMZnI7Ijoi8J2UjyIsImxmcjsiOiLwnZSpIiwibGc7Ijoi4om2IiwibGdFOyI6IuKqkSIsImxIYXI7Ijoi4qWiIiwibGhhcmQ7Ijoi4oa9IiwibGhhcnU7Ijoi4oa8IiwibGhhcnVsOyI6IuKlqiIsImxoYmxrOyI6IuKWhCIsIkxKY3k7Ijoi0IkiLCJsamN5OyI6ItGZIiwiTGw7Ijoi4ouYIiwibGw7Ijoi4omqIiwibGxhcnI7Ijoi4oeHIiwibGxjb3JuZXI7Ijoi4oyeIiwiTGxlZnRhcnJvdzsiOiLih5oiLCJsbGhhcmQ7Ijoi4qWrIiwibGx0cmk7Ijoi4pe6IiwiTG1pZG90OyI6IsS/IiwibG1pZG90OyI6IsWAIiwibG1vdXN0OyI6IuKOsCIsImxtb3VzdGFjaGU7Ijoi4o6wIiwibG5hcDsiOiLiqokiLCJsbmFwcHJveDsiOiLiqokiLCJsbkU7Ijoi4omoIiwibG5lOyI6IuKqhyIsImxuZXE7Ijoi4qqHIiwibG5lcXE7Ijoi4omoIiwibG5zaW07Ijoi4oumIiwibG9hbmc7Ijoi4p+sIiwibG9hcnI7Ijoi4oe9IiwibG9icms7Ijoi4p+mIiwiTG9uZ0xlZnRBcnJvdzsiOiLin7UiLCJMb25nbGVmdGFycm93OyI6IuKfuCIsImxvbmdsZWZ0YXJyb3c7Ijoi4p+1IiwiTG9uZ0xlZnRSaWdodEFycm93OyI6IuKftyIsIkxvbmdsZWZ0cmlnaHRhcnJvdzsiOiLin7oiLCJsb25nbGVmdHJpZ2h0YXJyb3c7Ijoi4p+3IiwibG9uZ21hcHN0bzsiOiLin7wiLCJMb25nUmlnaHRBcnJvdzsiOiLin7YiLCJMb25ncmlnaHRhcnJvdzsiOiLin7kiLCJsb25ncmlnaHRhcnJvdzsiOiLin7YiLCJsb29wYXJyb3dsZWZ0OyI6IuKGqyIsImxvb3BhcnJvd3JpZ2h0OyI6IuKGrCIsImxvcGFyOyI6IuKmhSIsIkxvcGY7Ijoi8J2VgyIsImxvcGY7Ijoi8J2VnSIsImxvcGx1czsiOiLiqK0iLCJsb3RpbWVzOyI6IuKotCIsImxvd2FzdDsiOiLiiJciLCJsb3diYXI7IjoiXyIsIkxvd2VyTGVmdEFycm93OyI6IuKGmSIsIkxvd2VyUmlnaHRBcnJvdzsiOiLihpgiLCJsb3o7Ijoi4peKIiwibG96ZW5nZTsiOiLil4oiLCJsb3pmOyI6IuKnqyIsImxwYXI7IjoiKCIsImxwYXJsdDsiOiLippMiLCJscmFycjsiOiLih4YiLCJscmNvcm5lcjsiOiLijJ8iLCJscmhhcjsiOiLih4siLCJscmhhcmQ7Ijoi4qWtIiwibHJtOyI6IuKAjiIsImxydHJpOyI6IuKKvyIsImxzYXF1bzsiOiLigLkiLCJMc2NyOyI6IuKEkiIsImxzY3I7Ijoi8J2TgSIsIkxzaDsiOiLihrAiLCJsc2g7Ijoi4oawIiwibHNpbTsiOiLiibIiLCJsc2ltZTsiOiLiqo0iLCJsc2ltZzsiOiLiqo8iLCJsc3FiOyI6IlsiLCJsc3F1bzsiOiLigJgiLCJsc3F1b3I7Ijoi4oCaIiwiTHN0cm9rOyI6IsWBIiwibHN0cm9rOyI6IsWCIiwiTFQ7IjoiPCIsTFQ6IjwiLCJMdDsiOiLiiaoiLCJsdDsiOiI8IixsdDoiPCIsImx0Y2M7Ijoi4qqmIiwibHRjaXI7Ijoi4qm5IiwibHRkb3Q7Ijoi4ouWIiwibHRocmVlOyI6IuKLiyIsImx0aW1lczsiOiLii4kiLCJsdGxhcnI7Ijoi4qW2IiwibHRxdWVzdDsiOiLiqbsiLCJsdHJpOyI6IuKXgyIsImx0cmllOyI6IuKKtCIsImx0cmlmOyI6IuKXgiIsImx0clBhcjsiOiLippYiLCJsdXJkc2hhcjsiOiLipYoiLCJsdXJ1aGFyOyI6IuKlpiIsImx2ZXJ0bmVxcTsiOiLiiajvuIAiLCJsdm5FOyI6IuKJqO+4gCIsIm1hY3I7Ijoiwq8iLG1hY3I6IsKvIiwibWFsZTsiOiLimYIiLCJtYWx0OyI6IuKcoCIsIm1hbHRlc2U7Ijoi4pygIiwiTWFwOyI6IuKkhSIsIm1hcDsiOiLihqYiLCJtYXBzdG87Ijoi4oamIiwibWFwc3RvZG93bjsiOiLihqciLCJtYXBzdG9sZWZ0OyI6IuKGpCIsIm1hcHN0b3VwOyI6IuKGpSIsIm1hcmtlcjsiOiLilq4iLCJtY29tbWE7Ijoi4qipIiwiTWN5OyI6ItCcIiwibWN5OyI6ItC8IiwibWRhc2g7Ijoi4oCUIiwibUREb3Q7Ijoi4oi6IiwibWVhc3VyZWRhbmdsZTsiOiLiiKEiLCJNZWRpdW1TcGFjZTsiOiLigZ8iLCJNZWxsaW50cmY7Ijoi4oSzIiwiTWZyOyI6IvCdlJAiLCJtZnI7Ijoi8J2UqiIsIm1obzsiOiLihKciLCJtaWNybzsiOiLCtSIsbWljcm86IsK1IiwibWlkOyI6IuKIoyIsIm1pZGFzdDsiOiIqIiwibWlkY2lyOyI6IuKrsCIsIm1pZGRvdDsiOiLCtyIsbWlkZG90OiLCtyIsIm1pbnVzOyI6IuKIkiIsIm1pbnVzYjsiOiLiip8iLCJtaW51c2Q7Ijoi4oi4IiwibWludXNkdTsiOiLiqKoiLCJNaW51c1BsdXM7Ijoi4oiTIiwibWxjcDsiOiLiq5siLCJtbGRyOyI6IuKApiIsIm1ucGx1czsiOiLiiJMiLCJtb2RlbHM7Ijoi4oqnIiwiTW9wZjsiOiLwnZWEIiwibW9wZjsiOiLwnZWeIiwibXA7Ijoi4oiTIiwiTXNjcjsiOiLihLMiLCJtc2NyOyI6IvCdk4IiLCJtc3Rwb3M7Ijoi4oi+IiwiTXU7IjoizpwiLCJtdTsiOiLOvCIsIm11bHRpbWFwOyI6IuKKuCIsIm11bWFwOyI6IuKKuCIsIm5hYmxhOyI6IuKIhyIsIk5hY3V0ZTsiOiLFgyIsIm5hY3V0ZTsiOiLFhCIsIm5hbmc7Ijoi4oig4oOSIiwibmFwOyI6IuKJiSIsIm5hcEU7Ijoi4qmwzLgiLCJuYXBpZDsiOiLiiYvMuCIsIm5hcG9zOyI6IsWJIiwibmFwcHJveDsiOiLiiYkiLCJuYXR1cjsiOiLima4iLCJuYXR1cmFsOyI6IuKZriIsIm5hdHVyYWxzOyI6IuKElSIsIm5ic3A7IjoiwqAiLG5ic3A6IsKgIiwibmJ1bXA7Ijoi4omOzLgiLCJuYnVtcGU7Ijoi4omPzLgiLCJuY2FwOyI6IuKpgyIsIk5jYXJvbjsiOiLFhyIsIm5jYXJvbjsiOiLFiCIsIk5jZWRpbDsiOiLFhSIsIm5jZWRpbDsiOiLFhiIsIm5jb25nOyI6IuKJhyIsIm5jb25nZG90OyI6IuKprcy4IiwibmN1cDsiOiLiqYIiLCJOY3k7Ijoi0J0iLCJuY3k7Ijoi0L0iLCJuZGFzaDsiOiLigJMiLCJuZTsiOiLiiaAiLCJuZWFyaGs7Ijoi4qSkIiwibmVBcnI7Ijoi4oeXIiwibmVhcnI7Ijoi4oaXIiwibmVhcnJvdzsiOiLihpciLCJuZWRvdDsiOiLiiZDMuCIsIk5lZ2F0aXZlTWVkaXVtU3BhY2U7Ijoi4oCLIiwiTmVnYXRpdmVUaGlja1NwYWNlOyI6IuKAiyIsIk5lZ2F0aXZlVGhpblNwYWNlOyI6IuKAiyIsIk5lZ2F0aXZlVmVyeVRoaW5TcGFjZTsiOiLigIsiLCJuZXF1aXY7Ijoi4omiIiwibmVzZWFyOyI6IuKkqCIsIm5lc2ltOyI6IuKJgsy4IiwiTmVzdGVkR3JlYXRlckdyZWF0ZXI7Ijoi4omrIiwiTmVzdGVkTGVzc0xlc3M7Ijoi4omqIiwiTmV3TGluZTsiOmAKYCwibmV4aXN0OyI6IuKIhCIsIm5leGlzdHM7Ijoi4oiEIiwiTmZyOyI6IvCdlJEiLCJuZnI7Ijoi8J2UqyIsIm5nRTsiOiLiiafMuCIsIm5nZTsiOiLiibEiLCJuZ2VxOyI6IuKJsSIsIm5nZXFxOyI6IuKJp8y4IiwibmdlcXNsYW50OyI6IuKpvsy4IiwibmdlczsiOiLiqb7MuCIsIm5HZzsiOiLii5nMuCIsIm5nc2ltOyI6IuKJtSIsIm5HdDsiOiLiiavig5IiLCJuZ3Q7Ijoi4omvIiwibmd0cjsiOiLiia8iLCJuR3R2OyI6IuKJq8y4IiwibmhBcnI7Ijoi4oeOIiwibmhhcnI7Ijoi4oauIiwibmhwYXI7Ijoi4quyIiwibmk7Ijoi4oiLIiwibmlzOyI6IuKLvCIsIm5pc2Q7Ijoi4ou6Iiwibml2OyI6IuKIiyIsIk5KY3k7Ijoi0IoiLCJuamN5OyI6ItGaIiwibmxBcnI7Ijoi4oeNIiwibmxhcnI7Ijoi4oaaIiwibmxkcjsiOiLigKUiLCJubEU7Ijoi4ommzLgiLCJubGU7Ijoi4omwIiwibkxlZnRhcnJvdzsiOiLih40iLCJubGVmdGFycm93OyI6IuKGmiIsIm5MZWZ0cmlnaHRhcnJvdzsiOiLih44iLCJubGVmdHJpZ2h0YXJyb3c7Ijoi4oauIiwibmxlcTsiOiLiibAiLCJubGVxcTsiOiLiiabMuCIsIm5sZXFzbGFudDsiOiLiqb3MuCIsIm5sZXM7Ijoi4qm9zLgiLCJubGVzczsiOiLiia4iLCJuTGw7Ijoi4ouYzLgiLCJubHNpbTsiOiLiibQiLCJuTHQ7Ijoi4omq4oOSIiwibmx0OyI6IuKJriIsIm5sdHJpOyI6IuKLqiIsIm5sdHJpZTsiOiLii6wiLCJuTHR2OyI6IuKJqsy4Iiwibm1pZDsiOiLiiKQiLCJOb0JyZWFrOyI6IuKBoCIsIk5vbkJyZWFraW5nU3BhY2U7IjoiwqAiLCJOb3BmOyI6IuKElSIsIm5vcGY7Ijoi8J2VnyIsIk5vdDsiOiLiq6wiLCJub3Q7IjoiwqwiLG5vdDoiwqwiLCJOb3RDb25ncnVlbnQ7Ijoi4omiIiwiTm90Q3VwQ2FwOyI6IuKJrSIsIk5vdERvdWJsZVZlcnRpY2FsQmFyOyI6IuKIpiIsIk5vdEVsZW1lbnQ7Ijoi4oiJIiwiTm90RXF1YWw7Ijoi4omgIiwiTm90RXF1YWxUaWxkZTsiOiLiiYLMuCIsIk5vdEV4aXN0czsiOiLiiIQiLCJOb3RHcmVhdGVyOyI6IuKJryIsIk5vdEdyZWF0ZXJFcXVhbDsiOiLiibEiLCJOb3RHcmVhdGVyRnVsbEVxdWFsOyI6IuKJp8y4IiwiTm90R3JlYXRlckdyZWF0ZXI7Ijoi4omrzLgiLCJOb3RHcmVhdGVyTGVzczsiOiLiibkiLCJOb3RHcmVhdGVyU2xhbnRFcXVhbDsiOiLiqb7MuCIsIk5vdEdyZWF0ZXJUaWxkZTsiOiLiibUiLCJOb3RIdW1wRG93bkh1bXA7Ijoi4omOzLgiLCJOb3RIdW1wRXF1YWw7Ijoi4omPzLgiLCJub3RpbjsiOiLiiIkiLCJub3RpbmRvdDsiOiLii7XMuCIsIm5vdGluRTsiOiLii7nMuCIsIm5vdGludmE7Ijoi4oiJIiwibm90aW52YjsiOiLii7ciLCJub3RpbnZjOyI6IuKLtiIsIk5vdExlZnRUcmlhbmdsZTsiOiLii6oiLCJOb3RMZWZ0VHJpYW5nbGVCYXI7Ijoi4qePzLgiLCJOb3RMZWZ0VHJpYW5nbGVFcXVhbDsiOiLii6wiLCJOb3RMZXNzOyI6IuKJriIsIk5vdExlc3NFcXVhbDsiOiLiibAiLCJOb3RMZXNzR3JlYXRlcjsiOiLiibgiLCJOb3RMZXNzTGVzczsiOiLiiarMuCIsIk5vdExlc3NTbGFudEVxdWFsOyI6IuKpvcy4IiwiTm90TGVzc1RpbGRlOyI6IuKJtCIsIk5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyOyI6IuKqosy4IiwiTm90TmVzdGVkTGVzc0xlc3M7Ijoi4qqhzLgiLCJub3RuaTsiOiLiiIwiLCJub3RuaXZhOyI6IuKIjCIsIm5vdG5pdmI7Ijoi4ou+Iiwibm90bml2YzsiOiLii70iLCJOb3RQcmVjZWRlczsiOiLiioAiLCJOb3RQcmVjZWRlc0VxdWFsOyI6IuKqr8y4IiwiTm90UHJlY2VkZXNTbGFudEVxdWFsOyI6IuKLoCIsIk5vdFJldmVyc2VFbGVtZW50OyI6IuKIjCIsIk5vdFJpZ2h0VHJpYW5nbGU7Ijoi4ourIiwiTm90UmlnaHRUcmlhbmdsZUJhcjsiOiLip5DMuCIsIk5vdFJpZ2h0VHJpYW5nbGVFcXVhbDsiOiLii60iLCJOb3RTcXVhcmVTdWJzZXQ7Ijoi4oqPzLgiLCJOb3RTcXVhcmVTdWJzZXRFcXVhbDsiOiLii6IiLCJOb3RTcXVhcmVTdXBlcnNldDsiOiLiipDMuCIsIk5vdFNxdWFyZVN1cGVyc2V0RXF1YWw7Ijoi4oujIiwiTm90U3Vic2V0OyI6IuKKguKDkiIsIk5vdFN1YnNldEVxdWFsOyI6IuKKiCIsIk5vdFN1Y2NlZWRzOyI6IuKKgSIsIk5vdFN1Y2NlZWRzRXF1YWw7Ijoi4qqwzLgiLCJOb3RTdWNjZWVkc1NsYW50RXF1YWw7Ijoi4ouhIiwiTm90U3VjY2VlZHNUaWxkZTsiOiLiib/MuCIsIk5vdFN1cGVyc2V0OyI6IuKKg+KDkiIsIk5vdFN1cGVyc2V0RXF1YWw7Ijoi4oqJIiwiTm90VGlsZGU7Ijoi4omBIiwiTm90VGlsZGVFcXVhbDsiOiLiiYQiLCJOb3RUaWxkZUZ1bGxFcXVhbDsiOiLiiYciLCJOb3RUaWxkZVRpbGRlOyI6IuKJiSIsIk5vdFZlcnRpY2FsQmFyOyI6IuKIpCIsIm5wYXI7Ijoi4oimIiwibnBhcmFsbGVsOyI6IuKIpiIsIm5wYXJzbDsiOiLiq73ig6UiLCJucGFydDsiOiLiiILMuCIsIm5wb2xpbnQ7Ijoi4qiUIiwibnByOyI6IuKKgCIsIm5wcmN1ZTsiOiLii6AiLCJucHJlOyI6IuKqr8y4IiwibnByZWM7Ijoi4oqAIiwibnByZWNlcTsiOiLiqq/MuCIsIm5yQXJyOyI6IuKHjyIsIm5yYXJyOyI6IuKGmyIsIm5yYXJyYzsiOiLipLPMuCIsIm5yYXJydzsiOiLihp3MuCIsIm5SaWdodGFycm93OyI6IuKHjyIsIm5yaWdodGFycm93OyI6IuKGmyIsIm5ydHJpOyI6IuKLqyIsIm5ydHJpZTsiOiLii60iLCJuc2M7Ijoi4oqBIiwibnNjY3VlOyI6IuKLoSIsIm5zY2U7Ijoi4qqwzLgiLCJOc2NyOyI6IvCdkqkiLCJuc2NyOyI6IvCdk4MiLCJuc2hvcnRtaWQ7Ijoi4oikIiwibnNob3J0cGFyYWxsZWw7Ijoi4oimIiwibnNpbTsiOiLiiYEiLCJuc2ltZTsiOiLiiYQiLCJuc2ltZXE7Ijoi4omEIiwibnNtaWQ7Ijoi4oikIiwibnNwYXI7Ijoi4oimIiwibnNxc3ViZTsiOiLii6IiLCJuc3FzdXBlOyI6IuKLoyIsIm5zdWI7Ijoi4oqEIiwibnN1YkU7Ijoi4quFzLgiLCJuc3ViZTsiOiLiiogiLCJuc3Vic2V0OyI6IuKKguKDkiIsIm5zdWJzZXRlcTsiOiLiiogiLCJuc3Vic2V0ZXFxOyI6IuKrhcy4IiwibnN1Y2M7Ijoi4oqBIiwibnN1Y2NlcTsiOiLiqrDMuCIsIm5zdXA7Ijoi4oqFIiwibnN1cEU7Ijoi4quGzLgiLCJuc3VwZTsiOiLiiokiLCJuc3Vwc2V0OyI6IuKKg+KDkiIsIm5zdXBzZXRlcTsiOiLiiokiLCJuc3Vwc2V0ZXFxOyI6IuKrhsy4IiwibnRnbDsiOiLiibkiLCJOdGlsZGU7Ijoiw5EiLE50aWxkZToiw5EiLCJudGlsZGU7Ijoiw7EiLG50aWxkZToiw7EiLCJudGxnOyI6IuKJuCIsIm50cmlhbmdsZWxlZnQ7Ijoi4ouqIiwibnRyaWFuZ2xlbGVmdGVxOyI6IuKLrCIsIm50cmlhbmdsZXJpZ2h0OyI6IuKLqyIsIm50cmlhbmdsZXJpZ2h0ZXE7Ijoi4outIiwiTnU7Ijoizp0iLCJudTsiOiLOvSIsIm51bTsiOiIjIiwibnVtZXJvOyI6IuKEliIsIm51bXNwOyI6IuKAhyIsIm52YXA7Ijoi4omN4oOSIiwiblZEYXNoOyI6IuKKryIsIm5WZGFzaDsiOiLiiq4iLCJudkRhc2g7Ijoi4oqtIiwibnZkYXNoOyI6IuKKrCIsIm52Z2U7Ijoi4oml4oOSIiwibnZndDsiOiI+4oOSIiwibnZIYXJyOyI6IuKkhCIsIm52aW5maW47Ijoi4qeeIiwibnZsQXJyOyI6IuKkgiIsIm52bGU7Ijoi4omk4oOSIiwibnZsdDsiOiI84oOSIiwibnZsdHJpZTsiOiLiirTig5IiLCJudnJBcnI7Ijoi4qSDIiwibnZydHJpZTsiOiLiirXig5IiLCJudnNpbTsiOiLiiLzig5IiLCJud2FyaGs7Ijoi4qSjIiwibndBcnI7Ijoi4oeWIiwibndhcnI7Ijoi4oaWIiwibndhcnJvdzsiOiLihpYiLCJud25lYXI7Ijoi4qSnIiwiT2FjdXRlOyI6IsOTIixPYWN1dGU6IsOTIiwib2FjdXRlOyI6IsOzIixvYWN1dGU6IsOzIiwib2FzdDsiOiLiipsiLCJvY2lyOyI6IuKKmiIsIk9jaXJjOyI6IsOUIixPY2lyYzoiw5QiLCJvY2lyYzsiOiLDtCIsb2NpcmM6IsO0IiwiT2N5OyI6ItCeIiwib2N5OyI6ItC+Iiwib2Rhc2g7Ijoi4oqdIiwiT2RibGFjOyI6IsWQIiwib2RibGFjOyI6IsWRIiwib2RpdjsiOiLiqLgiLCJvZG90OyI6IuKKmSIsIm9kc29sZDsiOiLiprwiLCJPRWxpZzsiOiLFkiIsIm9lbGlnOyI6IsWTIiwib2ZjaXI7Ijoi4qa/IiwiT2ZyOyI6IvCdlJIiLCJvZnI7Ijoi8J2UrCIsIm9nb247Ijoiy5siLCJPZ3JhdmU7Ijoiw5IiLE9ncmF2ZToiw5IiLCJvZ3JhdmU7Ijoiw7IiLG9ncmF2ZToiw7IiLCJvZ3Q7Ijoi4qeBIiwib2hiYXI7Ijoi4qa1Iiwib2htOyI6Is6pIiwib2ludDsiOiLiiK4iLCJvbGFycjsiOiLihroiLCJvbGNpcjsiOiLipr4iLCJvbGNyb3NzOyI6IuKmuyIsIm9saW5lOyI6IuKAviIsIm9sdDsiOiLip4AiLCJPbWFjcjsiOiLFjCIsIm9tYWNyOyI6IsWNIiwiT21lZ2E7IjoizqkiLCJvbWVnYTsiOiLPiSIsIk9taWNyb247Ijoizp8iLCJvbWljcm9uOyI6Is6/Iiwib21pZDsiOiLiprYiLCJvbWludXM7Ijoi4oqWIiwiT29wZjsiOiLwnZWGIiwib29wZjsiOiLwnZWgIiwib3BhcjsiOiLiprciLCJPcGVuQ3VybHlEb3VibGVRdW90ZTsiOiLigJwiLCJPcGVuQ3VybHlRdW90ZTsiOiLigJgiLCJvcGVycDsiOiLiprkiLCJvcGx1czsiOiLiipUiLCJPcjsiOiLiqZQiLCJvcjsiOiLiiKgiLCJvcmFycjsiOiLihrsiLCJvcmQ7Ijoi4qmdIiwib3JkZXI7Ijoi4oS0Iiwib3JkZXJvZjsiOiLihLQiLCJvcmRmOyI6IsKqIixvcmRmOiLCqiIsIm9yZG07IjoiwroiLG9yZG06IsK6Iiwib3JpZ29mOyI6IuKKtiIsIm9yb3I7Ijoi4qmWIiwib3JzbG9wZTsiOiLiqZciLCJvcnY7Ijoi4qmbIiwib1M7Ijoi4pOIIiwiT3NjcjsiOiLwnZKqIiwib3NjcjsiOiLihLQiLCJPc2xhc2g7Ijoiw5giLE9zbGFzaDoiw5giLCJvc2xhc2g7Ijoiw7giLG9zbGFzaDoiw7giLCJvc29sOyI6IuKKmCIsIk90aWxkZTsiOiLDlSIsT3RpbGRlOiLDlSIsIm90aWxkZTsiOiLDtSIsb3RpbGRlOiLDtSIsIk90aW1lczsiOiLiqLciLCJvdGltZXM7Ijoi4oqXIiwib3RpbWVzYXM7Ijoi4qi2IiwiT3VtbDsiOiLDliIsT3VtbDoiw5YiLCJvdW1sOyI6IsO2IixvdW1sOiLDtiIsIm92YmFyOyI6IuKMvSIsIk92ZXJCYXI7Ijoi4oC+IiwiT3ZlckJyYWNlOyI6IuKPniIsIk92ZXJCcmFja2V0OyI6IuKOtCIsIk92ZXJQYXJlbnRoZXNpczsiOiLij5wiLCJwYXI7Ijoi4oilIiwicGFyYTsiOiLCtiIscGFyYToiwrYiLCJwYXJhbGxlbDsiOiLiiKUiLCJwYXJzaW07Ijoi4quzIiwicGFyc2w7Ijoi4qu9IiwicGFydDsiOiLiiIIiLCJQYXJ0aWFsRDsiOiLiiIIiLCJQY3k7Ijoi0J8iLCJwY3k7Ijoi0L8iLCJwZXJjbnQ7IjoiJSIsInBlcmlvZDsiOiIuIiwicGVybWlsOyI6IuKAsCIsInBlcnA7Ijoi4oqlIiwicGVydGVuazsiOiLigLEiLCJQZnI7Ijoi8J2UkyIsInBmcjsiOiLwnZStIiwiUGhpOyI6Is6mIiwicGhpOyI6Is+GIiwicGhpdjsiOiLPlSIsInBobW1hdDsiOiLihLMiLCJwaG9uZTsiOiLimI4iLCJQaTsiOiLOoCIsInBpOyI6Is+AIiwicGl0Y2hmb3JrOyI6IuKLlCIsInBpdjsiOiLPliIsInBsYW5jazsiOiLihI8iLCJwbGFuY2toOyI6IuKEjiIsInBsYW5rdjsiOiLihI8iLCJwbHVzOyI6IisiLCJwbHVzYWNpcjsiOiLiqKMiLCJwbHVzYjsiOiLiip4iLCJwbHVzY2lyOyI6IuKooiIsInBsdXNkbzsiOiLiiJQiLCJwbHVzZHU7Ijoi4qilIiwicGx1c2U7Ijoi4qmyIiwiUGx1c01pbnVzOyI6IsKxIiwicGx1c21uOyI6IsKxIixwbHVzbW46IsKxIiwicGx1c3NpbTsiOiLiqKYiLCJwbHVzdHdvOyI6IuKopyIsInBtOyI6IsKxIiwiUG9pbmNhcmVwbGFuZTsiOiLihIwiLCJwb2ludGludDsiOiLiqJUiLCJQb3BmOyI6IuKEmSIsInBvcGY7Ijoi8J2VoSIsInBvdW5kOyI6IsKjIixwb3VuZDoiwqMiLCJQcjsiOiLiqrsiLCJwcjsiOiLiiboiLCJwcmFwOyI6IuKqtyIsInByY3VlOyI6IuKJvCIsInByRTsiOiLiqrMiLCJwcmU7Ijoi4qqvIiwicHJlYzsiOiLiiboiLCJwcmVjYXBwcm94OyI6IuKqtyIsInByZWNjdXJseWVxOyI6IuKJvCIsIlByZWNlZGVzOyI6IuKJuiIsIlByZWNlZGVzRXF1YWw7Ijoi4qqvIiwiUHJlY2VkZXNTbGFudEVxdWFsOyI6IuKJvCIsIlByZWNlZGVzVGlsZGU7Ijoi4om+IiwicHJlY2VxOyI6IuKqryIsInByZWNuYXBwcm94OyI6IuKquSIsInByZWNuZXFxOyI6IuKqtSIsInByZWNuc2ltOyI6IuKLqCIsInByZWNzaW07Ijoi4om+IiwiUHJpbWU7Ijoi4oCzIiwicHJpbWU7Ijoi4oCyIiwicHJpbWVzOyI6IuKEmSIsInBybmFwOyI6IuKquSIsInBybkU7Ijoi4qq1IiwicHJuc2ltOyI6IuKLqCIsInByb2Q7Ijoi4oiPIiwiUHJvZHVjdDsiOiLiiI8iLCJwcm9mYWxhcjsiOiLijK4iLCJwcm9mbGluZTsiOiLijJIiLCJwcm9mc3VyZjsiOiLijJMiLCJwcm9wOyI6IuKInSIsIlByb3BvcnRpb247Ijoi4oi3IiwiUHJvcG9ydGlvbmFsOyI6IuKInSIsInByb3B0bzsiOiLiiJ0iLCJwcnNpbTsiOiLiib4iLCJwcnVyZWw7Ijoi4oqwIiwiUHNjcjsiOiLwnZKrIiwicHNjcjsiOiLwnZOFIiwiUHNpOyI6Is6oIiwicHNpOyI6Is+IIiwicHVuY3NwOyI6IuKAiCIsIlFmcjsiOiLwnZSUIiwicWZyOyI6IvCdlK4iLCJxaW50OyI6IuKojCIsIlFvcGY7Ijoi4oSaIiwicW9wZjsiOiLwnZWiIiwicXByaW1lOyI6IuKBlyIsIlFzY3I7Ijoi8J2SrCIsInFzY3I7Ijoi8J2ThiIsInF1YXRlcm5pb25zOyI6IuKEjSIsInF1YXRpbnQ7Ijoi4qiWIiwicXVlc3Q7IjoiPyIsInF1ZXN0ZXE7Ijoi4omfIiwiUVVPVDsiOiciJyxRVU9UOiciJywicXVvdDsiOiciJyxxdW90OiciJywickFhcnI7Ijoi4oebIiwicmFjZTsiOiLiiL3MsSIsIlJhY3V0ZTsiOiLFlCIsInJhY3V0ZTsiOiLFlSIsInJhZGljOyI6IuKImiIsInJhZW1wdHl2OyI6IuKmsyIsIlJhbmc7Ijoi4p+rIiwicmFuZzsiOiLin6kiLCJyYW5nZDsiOiLippIiLCJyYW5nZTsiOiLipqUiLCJyYW5nbGU7Ijoi4p+pIiwicmFxdW87IjoiwrsiLHJhcXVvOiLCuyIsIlJhcnI7Ijoi4oagIiwickFycjsiOiLih5IiLCJyYXJyOyI6IuKGkiIsInJhcnJhcDsiOiLipbUiLCJyYXJyYjsiOiLih6UiLCJyYXJyYmZzOyI6IuKkoCIsInJhcnJjOyI6IuKksyIsInJhcnJmczsiOiLipJ4iLCJyYXJyaGs7Ijoi4oaqIiwicmFycmxwOyI6IuKGrCIsInJhcnJwbDsiOiLipYUiLCJyYXJyc2ltOyI6IuKltCIsIlJhcnJ0bDsiOiLipJYiLCJyYXJydGw7Ijoi4oajIiwicmFycnc7Ijoi4oadIiwickF0YWlsOyI6IuKknCIsInJhdGFpbDsiOiLipJoiLCJyYXRpbzsiOiLiiLYiLCJyYXRpb25hbHM7Ijoi4oSaIiwiUkJhcnI7Ijoi4qSQIiwickJhcnI7Ijoi4qSPIiwicmJhcnI7Ijoi4qSNIiwicmJicms7Ijoi4p2zIiwicmJyYWNlOyI6In0iLCJyYnJhY2s7IjoiXSIsInJicmtlOyI6IuKmjCIsInJicmtzbGQ7Ijoi4qaOIiwicmJya3NsdTsiOiLippAiLCJSY2Fyb247IjoixZgiLCJyY2Fyb247IjoixZkiLCJSY2VkaWw7IjoixZYiLCJyY2VkaWw7IjoixZciLCJyY2VpbDsiOiLijIkiLCJyY3ViOyI6In0iLCJSY3k7Ijoi0KAiLCJyY3k7Ijoi0YAiLCJyZGNhOyI6IuKktyIsInJkbGRoYXI7Ijoi4qWpIiwicmRxdW87Ijoi4oCdIiwicmRxdW9yOyI6IuKAnSIsInJkc2g7Ijoi4oazIiwiUmU7Ijoi4oScIiwicmVhbDsiOiLihJwiLCJyZWFsaW5lOyI6IuKEmyIsInJlYWxwYXJ0OyI6IuKEnCIsInJlYWxzOyI6IuKEnSIsInJlY3Q7Ijoi4patIiwiUkVHOyI6IsKuIixSRUc6IsKuIiwicmVnOyI6IsKuIixyZWc6IsKuIiwiUmV2ZXJzZUVsZW1lbnQ7Ijoi4oiLIiwiUmV2ZXJzZUVxdWlsaWJyaXVtOyI6IuKHiyIsIlJldmVyc2VVcEVxdWlsaWJyaXVtOyI6IuKlryIsInJmaXNodDsiOiLipb0iLCJyZmxvb3I7Ijoi4oyLIiwiUmZyOyI6IuKEnCIsInJmcjsiOiLwnZSvIiwickhhcjsiOiLipaQiLCJyaGFyZDsiOiLih4EiLCJyaGFydTsiOiLih4AiLCJyaGFydWw7Ijoi4qWsIiwiUmhvOyI6Is6hIiwicmhvOyI6Is+BIiwicmhvdjsiOiLPsSIsIlJpZ2h0QW5nbGVCcmFja2V0OyI6IuKfqSIsIlJpZ2h0QXJyb3c7Ijoi4oaSIiwiUmlnaHRhcnJvdzsiOiLih5IiLCJyaWdodGFycm93OyI6IuKGkiIsIlJpZ2h0QXJyb3dCYXI7Ijoi4oelIiwiUmlnaHRBcnJvd0xlZnRBcnJvdzsiOiLih4QiLCJyaWdodGFycm93dGFpbDsiOiLihqMiLCJSaWdodENlaWxpbmc7Ijoi4oyJIiwiUmlnaHREb3VibGVCcmFja2V0OyI6IuKfpyIsIlJpZ2h0RG93blRlZVZlY3RvcjsiOiLipZ0iLCJSaWdodERvd25WZWN0b3I7Ijoi4oeCIiwiUmlnaHREb3duVmVjdG9yQmFyOyI6IuKllSIsIlJpZ2h0Rmxvb3I7Ijoi4oyLIiwicmlnaHRoYXJwb29uZG93bjsiOiLih4EiLCJyaWdodGhhcnBvb251cDsiOiLih4AiLCJyaWdodGxlZnRhcnJvd3M7Ijoi4oeEIiwicmlnaHRsZWZ0aGFycG9vbnM7Ijoi4oeMIiwicmlnaHRyaWdodGFycm93czsiOiLih4kiLCJyaWdodHNxdWlnYXJyb3c7Ijoi4oadIiwiUmlnaHRUZWU7Ijoi4oqiIiwiUmlnaHRUZWVBcnJvdzsiOiLihqYiLCJSaWdodFRlZVZlY3RvcjsiOiLipZsiLCJyaWdodHRocmVldGltZXM7Ijoi4ouMIiwiUmlnaHRUcmlhbmdsZTsiOiLiirMiLCJSaWdodFRyaWFuZ2xlQmFyOyI6IuKnkCIsIlJpZ2h0VHJpYW5nbGVFcXVhbDsiOiLiirUiLCJSaWdodFVwRG93blZlY3RvcjsiOiLipY8iLCJSaWdodFVwVGVlVmVjdG9yOyI6IuKlnCIsIlJpZ2h0VXBWZWN0b3I7Ijoi4oa+IiwiUmlnaHRVcFZlY3RvckJhcjsiOiLipZQiLCJSaWdodFZlY3RvcjsiOiLih4AiLCJSaWdodFZlY3RvckJhcjsiOiLipZMiLCJyaW5nOyI6IsuaIiwicmlzaW5nZG90c2VxOyI6IuKJkyIsInJsYXJyOyI6IuKHhCIsInJsaGFyOyI6IuKHjCIsInJsbTsiOiLigI8iLCJybW91c3Q7Ijoi4o6xIiwicm1vdXN0YWNoZTsiOiLijrEiLCJybm1pZDsiOiLiq64iLCJyb2FuZzsiOiLin60iLCJyb2FycjsiOiLih74iLCJyb2JyazsiOiLin6ciLCJyb3BhcjsiOiLipoYiLCJSb3BmOyI6IuKEnSIsInJvcGY7Ijoi8J2VoyIsInJvcGx1czsiOiLiqK4iLCJyb3RpbWVzOyI6IuKotSIsIlJvdW5kSW1wbGllczsiOiLipbAiLCJycGFyOyI6IikiLCJycGFyZ3Q7Ijoi4qaUIiwicnBwb2xpbnQ7Ijoi4qiSIiwicnJhcnI7Ijoi4oeJIiwiUnJpZ2h0YXJyb3c7Ijoi4oebIiwicnNhcXVvOyI6IuKAuiIsIlJzY3I7Ijoi4oSbIiwicnNjcjsiOiLwnZOHIiwiUnNoOyI6IuKGsSIsInJzaDsiOiLihrEiLCJyc3FiOyI6Il0iLCJyc3F1bzsiOiLigJkiLCJyc3F1b3I7Ijoi4oCZIiwicnRocmVlOyI6IuKLjCIsInJ0aW1lczsiOiLii4oiLCJydHJpOyI6IuKWuSIsInJ0cmllOyI6IuKKtSIsInJ0cmlmOyI6IuKWuCIsInJ0cmlsdHJpOyI6IuKnjiIsIlJ1bGVEZWxheWVkOyI6IuKntCIsInJ1bHVoYXI7Ijoi4qWoIiwicng7Ijoi4oSeIiwiU2FjdXRlOyI6IsWaIiwic2FjdXRlOyI6IsWbIiwic2JxdW87Ijoi4oCaIiwiU2M7Ijoi4qq8Iiwic2M7Ijoi4om7Iiwic2NhcDsiOiLiqrgiLCJTY2Fyb247IjoixaAiLCJzY2Fyb247IjoixaEiLCJzY2N1ZTsiOiLiib0iLCJzY0U7Ijoi4qq0Iiwic2NlOyI6IuKqsCIsIlNjZWRpbDsiOiLFniIsInNjZWRpbDsiOiLFnyIsIlNjaXJjOyI6IsWcIiwic2NpcmM7IjoixZ0iLCJzY25hcDsiOiLiqroiLCJzY25FOyI6IuKqtiIsInNjbnNpbTsiOiLii6kiLCJzY3BvbGludDsiOiLiqJMiLCJzY3NpbTsiOiLiib8iLCJTY3k7Ijoi0KEiLCJzY3k7Ijoi0YEiLCJzZG90OyI6IuKLhSIsInNkb3RiOyI6IuKKoSIsInNkb3RlOyI6IuKppiIsInNlYXJoazsiOiLipKUiLCJzZUFycjsiOiLih5giLCJzZWFycjsiOiLihpgiLCJzZWFycm93OyI6IuKGmCIsInNlY3Q7IjoiwqciLHNlY3Q6IsKnIiwic2VtaTsiOiI7Iiwic2Vzd2FyOyI6IuKkqSIsInNldG1pbnVzOyI6IuKIliIsInNldG1uOyI6IuKIliIsInNleHQ7Ijoi4py2IiwiU2ZyOyI6IvCdlJYiLCJzZnI7Ijoi8J2UsCIsInNmcm93bjsiOiLijKIiLCJzaGFycDsiOiLima8iLCJTSENIY3k7Ijoi0KkiLCJzaGNoY3k7Ijoi0YkiLCJTSGN5OyI6ItCoIiwic2hjeTsiOiLRiCIsIlNob3J0RG93bkFycm93OyI6IuKGkyIsIlNob3J0TGVmdEFycm93OyI6IuKGkCIsInNob3J0bWlkOyI6IuKIoyIsInNob3J0cGFyYWxsZWw7Ijoi4oilIiwiU2hvcnRSaWdodEFycm93OyI6IuKGkiIsIlNob3J0VXBBcnJvdzsiOiLihpEiLCJzaHk7Ijoiwq0iLHNoeToiwq0iLCJTaWdtYTsiOiLOoyIsInNpZ21hOyI6Is+DIiwic2lnbWFmOyI6Is+CIiwic2lnbWF2OyI6Is+CIiwic2ltOyI6IuKIvCIsInNpbWRvdDsiOiLiqaoiLCJzaW1lOyI6IuKJgyIsInNpbWVxOyI6IuKJgyIsInNpbWc7Ijoi4qqeIiwic2ltZ0U7Ijoi4qqgIiwic2ltbDsiOiLiqp0iLCJzaW1sRTsiOiLiqp8iLCJzaW1uZTsiOiLiiYYiLCJzaW1wbHVzOyI6IuKopCIsInNpbXJhcnI7Ijoi4qWyIiwic2xhcnI7Ijoi4oaQIiwiU21hbGxDaXJjbGU7Ijoi4oiYIiwic21hbGxzZXRtaW51czsiOiLiiJYiLCJzbWFzaHA7Ijoi4qizIiwic21lcGFyc2w7Ijoi4qekIiwic21pZDsiOiLiiKMiLCJzbWlsZTsiOiLijKMiLCJzbXQ7Ijoi4qqqIiwic210ZTsiOiLiqqwiLCJzbXRlczsiOiLiqqzvuIAiLCJTT0ZUY3k7Ijoi0KwiLCJzb2Z0Y3k7Ijoi0YwiLCJzb2w7IjoiLyIsInNvbGI7Ijoi4qeEIiwic29sYmFyOyI6IuKMvyIsIlNvcGY7Ijoi8J2ViiIsInNvcGY7Ijoi8J2VpCIsInNwYWRlczsiOiLimaAiLCJzcGFkZXN1aXQ7Ijoi4pmgIiwic3BhcjsiOiLiiKUiLCJzcWNhcDsiOiLiipMiLCJzcWNhcHM7Ijoi4oqT77iAIiwic3FjdXA7Ijoi4oqUIiwic3FjdXBzOyI6IuKKlO+4gCIsIlNxcnQ7Ijoi4oiaIiwic3FzdWI7Ijoi4oqPIiwic3FzdWJlOyI6IuKKkSIsInNxc3Vic2V0OyI6IuKKjyIsInNxc3Vic2V0ZXE7Ijoi4oqRIiwic3FzdXA7Ijoi4oqQIiwic3FzdXBlOyI6IuKKkiIsInNxc3Vwc2V0OyI6IuKKkCIsInNxc3Vwc2V0ZXE7Ijoi4oqSIiwic3F1OyI6IuKWoSIsIlNxdWFyZTsiOiLilqEiLCJzcXVhcmU7Ijoi4pahIiwiU3F1YXJlSW50ZXJzZWN0aW9uOyI6IuKKkyIsIlNxdWFyZVN1YnNldDsiOiLiio8iLCJTcXVhcmVTdWJzZXRFcXVhbDsiOiLiipEiLCJTcXVhcmVTdXBlcnNldDsiOiLiipAiLCJTcXVhcmVTdXBlcnNldEVxdWFsOyI6IuKKkiIsIlNxdWFyZVVuaW9uOyI6IuKKlCIsInNxdWFyZjsiOiLilqoiLCJzcXVmOyI6IuKWqiIsInNyYXJyOyI6IuKGkiIsIlNzY3I7Ijoi8J2SriIsInNzY3I7Ijoi8J2TiCIsInNzZXRtbjsiOiLiiJYiLCJzc21pbGU7Ijoi4oyjIiwic3N0YXJmOyI6IuKLhiIsIlN0YXI7Ijoi4ouGIiwic3RhcjsiOiLimIYiLCJzdGFyZjsiOiLimIUiLCJzdHJhaWdodGVwc2lsb247Ijoiz7UiLCJzdHJhaWdodHBoaTsiOiLPlSIsInN0cm5zOyI6IsKvIiwiU3ViOyI6IuKLkCIsInN1YjsiOiLiioIiLCJzdWJkb3Q7Ijoi4qq9Iiwic3ViRTsiOiLiq4UiLCJzdWJlOyI6IuKKhiIsInN1YmVkb3Q7Ijoi4quDIiwic3VibXVsdDsiOiLiq4EiLCJzdWJuRTsiOiLiq4siLCJzdWJuZTsiOiLiiooiLCJzdWJwbHVzOyI6IuKqvyIsInN1YnJhcnI7Ijoi4qW5IiwiU3Vic2V0OyI6IuKLkCIsInN1YnNldDsiOiLiioIiLCJzdWJzZXRlcTsiOiLiioYiLCJzdWJzZXRlcXE7Ijoi4quFIiwiU3Vic2V0RXF1YWw7Ijoi4oqGIiwic3Vic2V0bmVxOyI6IuKKiiIsInN1YnNldG5lcXE7Ijoi4quLIiwic3Vic2ltOyI6IuKrhyIsInN1YnN1YjsiOiLiq5UiLCJzdWJzdXA7Ijoi4quTIiwic3VjYzsiOiLiibsiLCJzdWNjYXBwcm94OyI6IuKquCIsInN1Y2NjdXJseWVxOyI6IuKJvSIsIlN1Y2NlZWRzOyI6IuKJuyIsIlN1Y2NlZWRzRXF1YWw7Ijoi4qqwIiwiU3VjY2VlZHNTbGFudEVxdWFsOyI6IuKJvSIsIlN1Y2NlZWRzVGlsZGU7Ijoi4om/Iiwic3VjY2VxOyI6IuKqsCIsInN1Y2NuYXBwcm94OyI6IuKquiIsInN1Y2NuZXFxOyI6IuKqtiIsInN1Y2Nuc2ltOyI6IuKLqSIsInN1Y2NzaW07Ijoi4om/IiwiU3VjaFRoYXQ7Ijoi4oiLIiwiU3VtOyI6IuKIkSIsInN1bTsiOiLiiJEiLCJzdW5nOyI6IuKZqiIsIlN1cDsiOiLii5EiLCJzdXA7Ijoi4oqDIiwic3VwMTsiOiLCuSIsc3VwMToiwrkiLCJzdXAyOyI6IsKyIixzdXAyOiLCsiIsInN1cDM7IjoiwrMiLHN1cDM6IsKzIiwic3VwZG90OyI6IuKqviIsInN1cGRzdWI7Ijoi4quYIiwic3VwRTsiOiLiq4YiLCJzdXBlOyI6IuKKhyIsInN1cGVkb3Q7Ijoi4quEIiwiU3VwZXJzZXQ7Ijoi4oqDIiwiU3VwZXJzZXRFcXVhbDsiOiLiiociLCJzdXBoc29sOyI6IuKfiSIsInN1cGhzdWI7Ijoi4quXIiwic3VwbGFycjsiOiLipbsiLCJzdXBtdWx0OyI6IuKrgiIsInN1cG5FOyI6IuKrjCIsInN1cG5lOyI6IuKKiyIsInN1cHBsdXM7Ijoi4quAIiwiU3Vwc2V0OyI6IuKLkSIsInN1cHNldDsiOiLiioMiLCJzdXBzZXRlcTsiOiLiiociLCJzdXBzZXRlcXE7Ijoi4quGIiwic3Vwc2V0bmVxOyI6IuKKiyIsInN1cHNldG5lcXE7Ijoi4quMIiwic3Vwc2ltOyI6IuKriCIsInN1cHN1YjsiOiLiq5QiLCJzdXBzdXA7Ijoi4quWIiwic3dhcmhrOyI6IuKkpiIsInN3QXJyOyI6IuKHmSIsInN3YXJyOyI6IuKGmSIsInN3YXJyb3c7Ijoi4oaZIiwic3dud2FyOyI6IuKkqiIsInN6bGlnOyI6IsOfIixzemxpZzoiw58iLCJUYWI7IjoiCSIsInRhcmdldDsiOiLijJYiLCJUYXU7IjoizqQiLCJ0YXU7Ijoiz4QiLCJ0YnJrOyI6IuKOtCIsIlRjYXJvbjsiOiLFpCIsInRjYXJvbjsiOiLFpSIsIlRjZWRpbDsiOiLFoiIsInRjZWRpbDsiOiLFoyIsIlRjeTsiOiLQoiIsInRjeTsiOiLRgiIsInRkb3Q7Ijoi4oObIiwidGVscmVjOyI6IuKMlSIsIlRmcjsiOiLwnZSXIiwidGZyOyI6IvCdlLEiLCJ0aGVyZTQ7Ijoi4oi0IiwiVGhlcmVmb3JlOyI6IuKItCIsInRoZXJlZm9yZTsiOiLiiLQiLCJUaGV0YTsiOiLOmCIsInRoZXRhOyI6Is64IiwidGhldGFzeW07Ijoiz5EiLCJ0aGV0YXY7Ijoiz5EiLCJ0aGlja2FwcHJveDsiOiLiiYgiLCJ0aGlja3NpbTsiOiLiiLwiLCJUaGlja1NwYWNlOyI6IuKBn+KAiiIsInRoaW5zcDsiOiLigIkiLCJUaGluU3BhY2U7Ijoi4oCJIiwidGhrYXA7Ijoi4omIIiwidGhrc2ltOyI6IuKIvCIsIlRIT1JOOyI6IsOeIixUSE9STjoiw54iLCJ0aG9ybjsiOiLDviIsdGhvcm46IsO+IiwiVGlsZGU7Ijoi4oi8IiwidGlsZGU7Ijoiy5wiLCJUaWxkZUVxdWFsOyI6IuKJgyIsIlRpbGRlRnVsbEVxdWFsOyI6IuKJhSIsIlRpbGRlVGlsZGU7Ijoi4omIIiwidGltZXM7Ijoiw5ciLHRpbWVzOiLDlyIsInRpbWVzYjsiOiLiiqAiLCJ0aW1lc2JhcjsiOiLiqLEiLCJ0aW1lc2Q7Ijoi4qiwIiwidGludDsiOiLiiK0iLCJ0b2VhOyI6IuKkqCIsInRvcDsiOiLiiqQiLCJ0b3Bib3Q7Ijoi4oy2IiwidG9wY2lyOyI6IuKrsSIsIlRvcGY7Ijoi8J2ViyIsInRvcGY7Ijoi8J2VpSIsInRvcGZvcms7Ijoi4quaIiwidG9zYTsiOiLipKkiLCJ0cHJpbWU7Ijoi4oC0IiwiVFJBREU7Ijoi4oSiIiwidHJhZGU7Ijoi4oSiIiwidHJpYW5nbGU7Ijoi4pa1IiwidHJpYW5nbGVkb3duOyI6IuKWvyIsInRyaWFuZ2xlbGVmdDsiOiLil4MiLCJ0cmlhbmdsZWxlZnRlcTsiOiLiirQiLCJ0cmlhbmdsZXE7Ijoi4omcIiwidHJpYW5nbGVyaWdodDsiOiLilrkiLCJ0cmlhbmdsZXJpZ2h0ZXE7Ijoi4oq1IiwidHJpZG90OyI6IuKXrCIsInRyaWU7Ijoi4omcIiwidHJpbWludXM7Ijoi4qi6IiwiVHJpcGxlRG90OyI6IuKDmyIsInRyaXBsdXM7Ijoi4qi5IiwidHJpc2I7Ijoi4qeNIiwidHJpdGltZTsiOiLiqLsiLCJ0cnBleml1bTsiOiLij6IiLCJUc2NyOyI6IvCdkq8iLCJ0c2NyOyI6IvCdk4kiLCJUU2N5OyI6ItCmIiwidHNjeTsiOiLRhiIsIlRTSGN5OyI6ItCLIiwidHNoY3k7Ijoi0ZsiLCJUc3Ryb2s7IjoixaYiLCJ0c3Ryb2s7IjoixaciLCJ0d2l4dDsiOiLiiawiLCJ0d29oZWFkbGVmdGFycm93OyI6IuKGniIsInR3b2hlYWRyaWdodGFycm93OyI6IuKGoCIsIlVhY3V0ZTsiOiLDmiIsVWFjdXRlOiLDmiIsInVhY3V0ZTsiOiLDuiIsdWFjdXRlOiLDuiIsIlVhcnI7Ijoi4oafIiwidUFycjsiOiLih5EiLCJ1YXJyOyI6IuKGkSIsIlVhcnJvY2lyOyI6IuKliSIsIlVicmN5OyI6ItCOIiwidWJyY3k7Ijoi0Z4iLCJVYnJldmU7IjoixawiLCJ1YnJldmU7Ijoixa0iLCJVY2lyYzsiOiLDmyIsVWNpcmM6IsObIiwidWNpcmM7Ijoiw7siLHVjaXJjOiLDuyIsIlVjeTsiOiLQoyIsInVjeTsiOiLRgyIsInVkYXJyOyI6IuKHhSIsIlVkYmxhYzsiOiLFsCIsInVkYmxhYzsiOiLFsSIsInVkaGFyOyI6IuKlriIsInVmaXNodDsiOiLipb4iLCJVZnI7Ijoi8J2UmCIsInVmcjsiOiLwnZSyIiwiVWdyYXZlOyI6IsOZIixVZ3JhdmU6IsOZIiwidWdyYXZlOyI6IsO5Iix1Z3JhdmU6IsO5IiwidUhhcjsiOiLipaMiLCJ1aGFybDsiOiLihr8iLCJ1aGFycjsiOiLihr4iLCJ1aGJsazsiOiLiloAiLCJ1bGNvcm47Ijoi4oycIiwidWxjb3JuZXI7Ijoi4oycIiwidWxjcm9wOyI6IuKMjyIsInVsdHJpOyI6IuKXuCIsIlVtYWNyOyI6IsWqIiwidW1hY3I7IjoixasiLCJ1bWw7IjoiwqgiLHVtbDoiwqgiLCJVbmRlckJhcjsiOiJfIiwiVW5kZXJCcmFjZTsiOiLij58iLCJVbmRlckJyYWNrZXQ7Ijoi4o61IiwiVW5kZXJQYXJlbnRoZXNpczsiOiLij50iLCJVbmlvbjsiOiLii4MiLCJVbmlvblBsdXM7Ijoi4oqOIiwiVW9nb247IjoixbIiLCJ1b2dvbjsiOiLFsyIsIlVvcGY7Ijoi8J2VjCIsInVvcGY7Ijoi8J2VpiIsIlVwQXJyb3c7Ijoi4oaRIiwiVXBhcnJvdzsiOiLih5EiLCJ1cGFycm93OyI6IuKGkSIsIlVwQXJyb3dCYXI7Ijoi4qSSIiwiVXBBcnJvd0Rvd25BcnJvdzsiOiLih4UiLCJVcERvd25BcnJvdzsiOiLihpUiLCJVcGRvd25hcnJvdzsiOiLih5UiLCJ1cGRvd25hcnJvdzsiOiLihpUiLCJVcEVxdWlsaWJyaXVtOyI6IuKlriIsInVwaGFycG9vbmxlZnQ7Ijoi4oa/IiwidXBoYXJwb29ucmlnaHQ7Ijoi4oa+IiwidXBsdXM7Ijoi4oqOIiwiVXBwZXJMZWZ0QXJyb3c7Ijoi4oaWIiwiVXBwZXJSaWdodEFycm93OyI6IuKGlyIsIlVwc2k7Ijoiz5IiLCJ1cHNpOyI6Is+FIiwidXBzaWg7Ijoiz5IiLCJVcHNpbG9uOyI6Is6lIiwidXBzaWxvbjsiOiLPhSIsIlVwVGVlOyI6IuKKpSIsIlVwVGVlQXJyb3c7Ijoi4oalIiwidXB1cGFycm93czsiOiLih4giLCJ1cmNvcm47Ijoi4oydIiwidXJjb3JuZXI7Ijoi4oydIiwidXJjcm9wOyI6IuKMjiIsIlVyaW5nOyI6IsWuIiwidXJpbmc7Ijoixa8iLCJ1cnRyaTsiOiLil7kiLCJVc2NyOyI6IvCdkrAiLCJ1c2NyOyI6IvCdk4oiLCJ1dGRvdDsiOiLii7AiLCJVdGlsZGU7IjoixagiLCJ1dGlsZGU7IjoixakiLCJ1dHJpOyI6IuKWtSIsInV0cmlmOyI6IuKWtCIsInV1YXJyOyI6IuKHiCIsIlV1bWw7Ijoiw5wiLFV1bWw6IsOcIiwidXVtbDsiOiLDvCIsdXVtbDoiw7wiLCJ1d2FuZ2xlOyI6IuKmpyIsInZhbmdydDsiOiLippwiLCJ2YXJlcHNpbG9uOyI6Is+1IiwidmFya2FwcGE7Ijoiz7AiLCJ2YXJub3RoaW5nOyI6IuKIhSIsInZhcnBoaTsiOiLPlSIsInZhcnBpOyI6Is+WIiwidmFycHJvcHRvOyI6IuKInSIsInZBcnI7Ijoi4oeVIiwidmFycjsiOiLihpUiLCJ2YXJyaG87Ijoiz7EiLCJ2YXJzaWdtYTsiOiLPgiIsInZhcnN1YnNldG5lcTsiOiLiiorvuIAiLCJ2YXJzdWJzZXRuZXFxOyI6IuKri++4gCIsInZhcnN1cHNldG5lcTsiOiLiiovvuIAiLCJ2YXJzdXBzZXRuZXFxOyI6IuKrjO+4gCIsInZhcnRoZXRhOyI6Is+RIiwidmFydHJpYW5nbGVsZWZ0OyI6IuKKsiIsInZhcnRyaWFuZ2xlcmlnaHQ7Ijoi4oqzIiwiVmJhcjsiOiLiq6siLCJ2QmFyOyI6IuKrqCIsInZCYXJ2OyI6IuKrqSIsIlZjeTsiOiLQkiIsInZjeTsiOiLQsiIsIlZEYXNoOyI6IuKKqyIsIlZkYXNoOyI6IuKKqSIsInZEYXNoOyI6IuKKqCIsInZkYXNoOyI6IuKKoiIsIlZkYXNobDsiOiLiq6YiLCJWZWU7Ijoi4ouBIiwidmVlOyI6IuKIqCIsInZlZWJhcjsiOiLiirsiLCJ2ZWVlcTsiOiLiiZoiLCJ2ZWxsaXA7Ijoi4ouuIiwiVmVyYmFyOyI6IuKAliIsInZlcmJhcjsiOiJ8IiwiVmVydDsiOiLigJYiLCJ2ZXJ0OyI6InwiLCJWZXJ0aWNhbEJhcjsiOiLiiKMiLCJWZXJ0aWNhbExpbmU7IjoifCIsIlZlcnRpY2FsU2VwYXJhdG9yOyI6IuKdmCIsIlZlcnRpY2FsVGlsZGU7Ijoi4omAIiwiVmVyeVRoaW5TcGFjZTsiOiLigIoiLCJWZnI7Ijoi8J2UmSIsInZmcjsiOiLwnZSzIiwidmx0cmk7Ijoi4oqyIiwidm5zdWI7Ijoi4oqC4oOSIiwidm5zdXA7Ijoi4oqD4oOSIiwiVm9wZjsiOiLwnZWNIiwidm9wZjsiOiLwnZWnIiwidnByb3A7Ijoi4oidIiwidnJ0cmk7Ijoi4oqzIiwiVnNjcjsiOiLwnZKxIiwidnNjcjsiOiLwnZOLIiwidnN1Ym5FOyI6IuKri++4gCIsInZzdWJuZTsiOiLiiorvuIAiLCJ2c3VwbkU7Ijoi4quM77iAIiwidnN1cG5lOyI6IuKKi++4gCIsIlZ2ZGFzaDsiOiLiiqoiLCJ2emlnemFnOyI6IuKmmiIsIldjaXJjOyI6IsW0Iiwid2NpcmM7IjoixbUiLCJ3ZWRiYXI7Ijoi4qmfIiwiV2VkZ2U7Ijoi4ouAIiwid2VkZ2U7Ijoi4oinIiwid2VkZ2VxOyI6IuKJmSIsIndlaWVycDsiOiLihJgiLCJXZnI7Ijoi8J2UmiIsIndmcjsiOiLwnZS0IiwiV29wZjsiOiLwnZWOIiwid29wZjsiOiLwnZWoIiwid3A7Ijoi4oSYIiwid3I7Ijoi4omAIiwid3JlYXRoOyI6IuKJgCIsIldzY3I7Ijoi8J2SsiIsIndzY3I7Ijoi8J2TjCIsInhjYXA7Ijoi4ouCIiwieGNpcmM7Ijoi4pevIiwieGN1cDsiOiLii4MiLCJ4ZHRyaTsiOiLilr0iLCJYZnI7Ijoi8J2UmyIsInhmcjsiOiLwnZS1IiwieGhBcnI7Ijoi4p+6IiwieGhhcnI7Ijoi4p+3IiwiWGk7Ijoizp4iLCJ4aTsiOiLOviIsInhsQXJyOyI6IuKfuCIsInhsYXJyOyI6IuKftSIsInhtYXA7Ijoi4p+8IiwieG5pczsiOiLii7siLCJ4b2RvdDsiOiLiqIAiLCJYb3BmOyI6IvCdlY8iLCJ4b3BmOyI6IvCdlakiLCJ4b3BsdXM7Ijoi4qiBIiwieG90aW1lOyI6IuKogiIsInhyQXJyOyI6IuKfuSIsInhyYXJyOyI6IuKftiIsIlhzY3I7Ijoi8J2SsyIsInhzY3I7Ijoi8J2TjSIsInhzcWN1cDsiOiLiqIYiLCJ4dXBsdXM7Ijoi4qiEIiwieHV0cmk7Ijoi4pazIiwieHZlZTsiOiLii4EiLCJ4d2VkZ2U7Ijoi4ouAIiwiWWFjdXRlOyI6IsOdIixZYWN1dGU6IsOdIiwieWFjdXRlOyI6IsO9Iix5YWN1dGU6IsO9IiwiWUFjeTsiOiLQryIsInlhY3k7Ijoi0Y8iLCJZY2lyYzsiOiLFtiIsInljaXJjOyI6IsW3IiwiWWN5OyI6ItCrIiwieWN5OyI6ItGLIiwieWVuOyI6IsKlIix5ZW46IsKlIiwiWWZyOyI6IvCdlJwiLCJ5ZnI7Ijoi8J2UtiIsIllJY3k7Ijoi0IciLCJ5aWN5OyI6ItGXIiwiWW9wZjsiOiLwnZWQIiwieW9wZjsiOiLwnZWqIiwiWXNjcjsiOiLwnZK0IiwieXNjcjsiOiLwnZOOIiwiWVVjeTsiOiLQriIsInl1Y3k7Ijoi0Y4iLCJZdW1sOyI6IsW4IiwieXVtbDsiOiLDvyIseXVtbDoiw78iLCJaYWN1dGU7IjoixbkiLCJ6YWN1dGU7IjoixboiLCJaY2Fyb247Ijoixb0iLCJ6Y2Fyb247Ijoixb4iLCJaY3k7Ijoi0JciLCJ6Y3k7Ijoi0LciLCJaZG90OyI6IsW7IiwiemRvdDsiOiLFvCIsInplZXRyZjsiOiLihKgiLCJaZXJvV2lkdGhTcGFjZTsiOiLigIsiLCJaZXRhOyI6Is6WIiwiemV0YTsiOiLOtiIsIlpmcjsiOiLihKgiLCJ6ZnI7Ijoi8J2UtyIsIlpIY3k7Ijoi0JYiLCJ6aGN5OyI6ItC2IiwiemlncmFycjsiOiLih50iLCJab3BmOyI6IuKEpCIsInpvcGY7Ijoi8J2VqyIsIlpzY3I7Ijoi8J2StSIsInpzY3I7Ijoi8J2TjyIsInp3ajsiOiLigI0iLCJ6d25qOyI6IuKAjCJ9O2Z1bmN0aW9uIFFlKGUsdCl7aWYoZS5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoZVtuXSE9PXRbbl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbnUoZSx0KXt2YXIgbj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gbj4wP2UubGFzdEluZGV4T2YodCk9PT1uOm49PT0wP2U9PT10OiExfWZ1bmN0aW9uIFFhKGUsdCl7Zm9yKHZhciBuPSIiO3Q+MDspKHQmMSk9PT0xJiYobis9ZSksZSs9ZSx0PXQ+Pj4xO3JldHVybiBufXZhciBpdT05NyxydT0xMjIsYXU9NjUsc3U9OTAsb3U9NDgsbHU9NTc7ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbj1lLmNoYXJDb2RlQXQodCk7cmV0dXJuIGl1PD1uJiZuPD1ydXx8YXU8PW4mJm48PXN1fHxvdTw9biYmbjw9bHV9ZnVuY3Rpb24gbW4oZSl7cmV0dXJuIHR5cGVvZiBlPCJ1In1mdW5jdGlvbiB1dShlKXtpZihlKXJldHVybiB0eXBlb2YgZT09InN0cmluZyI/e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTplfTp7a2luZDoibWFya2Rvd24iLHZhbHVlOmUudmFsdWV9fXZhciBZYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt2YXIgaT10aGlzO3RoaXMuaWQ9dCx0aGlzLl90YWdzPVtdLHRoaXMuX3RhZ01hcD17fSx0aGlzLl92YWx1ZVNldE1hcD17fSx0aGlzLl90YWdzPW4udGFnc3x8W10sdGhpcy5fZ2xvYmFsQXR0cmlidXRlcz1uLmdsb2JhbEF0dHJpYnV0ZXN8fFtdLHRoaXMuX3RhZ3MuZm9yRWFjaChmdW5jdGlvbihyKXtpLl90YWdNYXBbci5uYW1lLnRvTG93ZXJDYXNlKCldPXJ9KSxuLnZhbHVlU2V0cyYmbi52YWx1ZVNldHMuZm9yRWFjaChmdW5jdGlvbihyKXtpLl92YWx1ZVNldE1hcFtyLm5hbWVdPXIudmFsdWVzfSl9cmV0dXJuIGUucHJvdG90eXBlLmlzQXBwbGljYWJsZT1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5nZXRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSxlLnByb3RvdHlwZS5wcm92aWRlVGFncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90YWdzfSxlLnByb3RvdHlwZS5wcm92aWRlQXR0cmlidXRlcz1mdW5jdGlvbih0KXt2YXIgbj1bXSxpPWZ1bmN0aW9uKGEpe24ucHVzaChhKX0scj10aGlzLl90YWdNYXBbdC50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gciYmci5hdHRyaWJ1dGVzLmZvckVhY2goaSksdGhpcy5fZ2xvYmFsQXR0cmlidXRlcy5mb3JFYWNoKGkpLG59LGUucHJvdG90eXBlLnByb3ZpZGVWYWx1ZXM9ZnVuY3Rpb24odCxuKXt2YXIgaT10aGlzLHI9W107bj1uLnRvTG93ZXJDYXNlKCk7dmFyIGE9ZnVuY3Rpb24obyl7by5mb3JFYWNoKGZ1bmN0aW9uKGwpe2wubmFtZS50b0xvd2VyQ2FzZSgpPT09biYmKGwudmFsdWVzJiZsLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKHUpe3IucHVzaCh1KX0pLGwudmFsdWVTZXQmJmkuX3ZhbHVlU2V0TWFwW2wudmFsdWVTZXRdJiZpLl92YWx1ZVNldE1hcFtsLnZhbHVlU2V0XS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3IucHVzaCh1KX0pKX0pfSxzPXRoaXMuX3RhZ01hcFt0LnRvTG93ZXJDYXNlKCldO3JldHVybiBzJiZhKHMuYXR0cmlidXRlcyksYSh0aGlzLl9nbG9iYWxBdHRyaWJ1dGVzKSxyfSxlfSgpO2Z1bmN0aW9uIHR0KGUsdCxuKXt0PT09dm9pZCAwJiYodD17fSk7dmFyIGk9e2tpbmQ6bj8ibWFya2Rvd24iOiJwbGFpbnRleHQiLHZhbHVlOiIifTtpZihlLmRlc2NyaXB0aW9uJiZ0LmRvY3VtZW50YXRpb24hPT0hMSl7dmFyIHI9dXUoZS5kZXNjcmlwdGlvbik7ciYmKGkudmFsdWUrPXIudmFsdWUpfWlmKGUucmVmZXJlbmNlcyYmZS5yZWZlcmVuY2VzLmxlbmd0aD4wJiZ0LnJlZmVyZW5jZXMhPT0hMSYmKGkudmFsdWUubGVuZ3RoJiYoaS52YWx1ZSs9YAoKYCksbj9pLnZhbHVlKz1lLnJlZmVyZW5jZXMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiJbIi5jb25jYXQoYS5uYW1lLCJdKCIpLmNvbmNhdChhLnVybCwiKSIpfSkuam9pbigiIHwgIik6aS52YWx1ZSs9ZS5yZWZlcmVuY2VzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iIi5jb25jYXQoYS5uYW1lLCI6ICIpLmNvbmNhdChhLnVybCl9KS5qb2luKGAKYCkpLGkudmFsdWUhPT0iIilyZXR1cm4gaX12YXIgWmE9ZnVuY3Rpb24oZSx0LG4saSl7ZnVuY3Rpb24gcihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIG4/YTpuZXcgbihmdW5jdGlvbihzKXtzKGEpfSl9cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoZnVuY3Rpb24oYSxzKXtmdW5jdGlvbiBvKGMpe3RyeXt1KGkubmV4dChjKSl9Y2F0Y2goZCl7cyhkKX19ZnVuY3Rpb24gbChjKXt0cnl7dShpLnRocm93KGMpKX1jYXRjaChkKXtzKGQpfX1mdW5jdGlvbiB1KGMpe2MuZG9uZT9hKGMudmFsdWUpOnIoYy52YWx1ZSkudGhlbihvLGwpfXUoKGk9aS5hcHBseShlLFtdKSkubmV4dCgpKX0pfSxLYT1mdW5jdGlvbihlLHQpe3ZhciBuPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihhWzBdJjEpdGhyb3cgYVsxXTtyZXR1cm4gYVsxXX0sdHJ5czpbXSxvcHM6W119LGkscixhLHM7cmV0dXJuIHM9e25leHQ6bygwKSx0aHJvdzpvKDEpLHJldHVybjpvKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoc1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzO2Z1bmN0aW9uIG8odSl7cmV0dXJuIGZ1bmN0aW9uKGMpe3JldHVybiBsKFt1LGNdKX19ZnVuY3Rpb24gbCh1KXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO247KXRyeXtpZihpPTEsciYmKGE9dVswXSYyP3IucmV0dXJuOnVbMF0/ci50aHJvd3x8KChhPXIucmV0dXJuKSYmYS5jYWxsKHIpLDApOnIubmV4dCkmJiEoYT1hLmNhbGwocix1WzFdKSkuZG9uZSlyZXR1cm4gYTtzd2l0Y2gocj0wLGEmJih1PVt1WzBdJjIsYS52YWx1ZV0pLHVbMF0pe2Nhc2UgMDpjYXNlIDE6YT11O2JyZWFrO2Nhc2UgNDpyZXR1cm4gbi5sYWJlbCsrLHt2YWx1ZTp1WzFdLGRvbmU6ITF9O2Nhc2UgNTpuLmxhYmVsKysscj11WzFdLHU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp1PW4ub3BzLnBvcCgpLG4udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGE9bi50cnlzLCEoYT1hLmxlbmd0aD4wJiZhW2EubGVuZ3RoLTFdKSYmKHVbMF09PT02fHx1WzBdPT09Mikpe249MDtjb250aW51ZX1pZih1WzBdPT09MyYmKCFhfHx1WzFdPmFbMF0mJnVbMV08YVszXSkpe24ubGFiZWw9dVsxXTticmVha31pZih1WzBdPT09NiYmbi5sYWJlbDxhWzFdKXtuLmxhYmVsPWFbMV0sYT11O2JyZWFrfWlmKGEmJm4ubGFiZWw8YVsyXSl7bi5sYWJlbD1hWzJdLG4ub3BzLnB1c2godSk7YnJlYWt9YVsyXSYmbi5vcHMucG9wKCksbi50cnlzLnBvcCgpO2NvbnRpbnVlfXU9dC5jYWxsKGUsbil9Y2F0Y2goYyl7dT1bNixjXSxyPTB9ZmluYWxseXtpPWE9MH1pZih1WzBdJjUpdGhyb3cgdVsxXTtyZXR1cm57dmFsdWU6dVswXT91WzFdOnZvaWQgMCxkb25lOiEwfX19LGN1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLnJlYWREaXJlY3Rvcnk9dCx0aGlzLmF0cmlidXRlQ29tcGxldGlvbnM9W119cmV0dXJuIGUucHJvdG90eXBlLm9uSHRtbEF0dHJpYnV0ZVZhbHVlPWZ1bmN0aW9uKHQpe2Z1KHQudGFnLHQuYXR0cmlidXRlKSYmdGhpcy5hdHJpYnV0ZUNvbXBsZXRpb25zLnB1c2godCl9LGUucHJvdG90eXBlLmNvbXB1dGVDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4pe3JldHVybiBaYSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaSxyLGEscyxvLGwsdSxjLGQsbTtyZXR1cm4gS2EodGhpcyxmdW5jdGlvbihmKXtzd2l0Y2goZi5sYWJlbCl7Y2FzZSAwOmk9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0scj0wLGE9dGhpcy5hdHJpYnV0ZUNvbXBsZXRpb25zLGYubGFiZWw9MTtjYXNlIDE6cmV0dXJuIHI8YS5sZW5ndGg/KHM9YVtyXSxvPWR1KHQuZ2V0VGV4dChzLnJhbmdlKSksbXUobyk/bz09PSIuInx8bz09PSIuLiI/KGkuaXNJbmNvbXBsZXRlPSEwLFszLDRdKTpbMywyXTpbMyw0XSk6WzMsNV07Y2FzZSAyOnJldHVybiBsPXB1KHMudmFsdWUsbyxzLnJhbmdlKSxbNCx0aGlzLnByb3ZpZGVQYXRoU3VnZ2VzdGlvbnMocy52YWx1ZSxsLHQsbildO2Nhc2UgMzpmb3IodT1mLnNlbnQoKSxjPTAsZD11O2M8ZC5sZW5ndGg7YysrKW09ZFtjXSxpLml0ZW1zLnB1c2gobSk7Zi5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gcisrLFszLDFdO2Nhc2UgNTpyZXR1cm5bMixpXX19KX0pfSxlLnByb3RvdHlwZS5wcm92aWRlUGF0aFN1Z2dlc3Rpb25zPWZ1bmN0aW9uKHQsbixpLHIpe3JldHVybiBaYSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYSxzLG8sbCx1LGMsZCxtLGY7cmV0dXJuIEthKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDppZihhPXQuc3Vic3RyaW5nKDAsdC5sYXN0SW5kZXhPZigiLyIpKzEpLHM9ci5yZXNvbHZlUmVmZXJlbmNlKGF8fCIuIixpLnVyaSksIXMpcmV0dXJuWzMsNF07Yi5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gYi50cnlzLnB1c2goWzEsMywsNF0pLG89W10sWzQsdGhpcy5yZWFkRGlyZWN0b3J5KHMpXTtjYXNlIDI6Zm9yKGw9Yi5zZW50KCksdT0wLGM9bDt1PGMubGVuZ3RoO3UrKylkPWNbdV0sbT1kWzBdLGY9ZFsxXSxtLmNoYXJDb2RlQXQoMCkhPT1odSYmby5wdXNoKGd1KG0sZj09PW9pLkRpcmVjdG9yeSxuKSk7cmV0dXJuWzIsb107Y2FzZSAzOnJldHVybiBiLnNlbnQoKSxbMyw0XTtjYXNlIDQ6cmV0dXJuWzIsW11dfX0pfSl9LGV9KCksaHU9NDY7ZnVuY3Rpb24gZHUoZSl7cmV0dXJuIFFlKGUsIiciKXx8UWUoZSwnIicpP2Uuc2xpY2UoMSwtMSk6ZX1mdW5jdGlvbiBtdShlKXtyZXR1cm4hKFFlKGUsImh0dHAiKXx8UWUoZSwiaHR0cHMiKXx8UWUoZSwiLy8iKSl9ZnVuY3Rpb24gZnUoZSx0KXtpZih0PT09InNyYyJ8fHQ9PT0iaHJlZiIpcmV0dXJuITA7dmFyIG49dnVbZV07cmV0dXJuIG4/dHlwZW9mIG49PSJzdHJpbmciP249PT10Om4uaW5kZXhPZih0KSE9PS0xOiExfWZ1bmN0aW9uIHB1KGUsdCxuKXt2YXIgaSxyPWUubGFzdEluZGV4T2YoIi8iKTtpZihyPT09LTEpaT1idShuLDEsLTEpO2Vsc2V7dmFyIGE9dC5zbGljZShyKzEpLHM9VXQobi5lbmQsLTEtYS5sZW5ndGgpLG89YS5pbmRleE9mKCIgIiksbD12b2lkIDA7byE9PS0xP2w9VXQocyxvKTpsPVV0KG4uZW5kLC0xKSxpPVkuY3JlYXRlKHMsbCl9cmV0dXJuIGl9ZnVuY3Rpb24gZ3UoZSx0LG4pe3JldHVybiB0PyhlPWUrIi8iLHtsYWJlbDplLGtpbmQ6YmUuRm9sZGVyLHRleHRFZGl0OnNlLnJlcGxhY2UobixlKSxjb21tYW5kOnt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9fSk6e2xhYmVsOmUsa2luZDpiZS5GaWxlLHRleHRFZGl0OnNlLnJlcGxhY2UobixlKX19ZnVuY3Rpb24gVXQoZSx0KXtyZXR1cm4gY2UuY3JlYXRlKGUubGluZSxlLmNoYXJhY3Rlcit0KX1mdW5jdGlvbiBidShlLHQsbil7dmFyIGk9VXQoZS5zdGFydCx0KSxyPVV0KGUuZW5kLG4pO3JldHVybiBZLmNyZWF0ZShpLHIpfXZhciB2dT17YToiaHJlZiIsYXJlYToiaHJlZiIsYm9keToiYmFja2dyb3VuZCIsZGVsOiJjaXRlIixmb3JtOiJhY3Rpb24iLGZyYW1lOlsic3JjIiwibG9uZ2Rlc2MiXSxpbWc6WyJzcmMiLCJsb25nZGVzYyJdLGluczoiY2l0ZSIsbGluazoiaHJlZiIsb2JqZWN0OiJkYXRhIixxOiJjaXRlIixzY3JpcHQ6InNyYyIsYXVkaW86InNyYyIsYnV0dG9uOiJmb3JtYWN0aW9uIixjb21tYW5kOiJpY29uIixlbWJlZDoic3JjIixodG1sOiJtYW5pZmVzdCIsaW5wdXQ6WyJzcmMiLCJmb3JtYWN0aW9uIl0sc291cmNlOiJzcmMiLHRyYWNrOiJzcmMiLHZpZGVvOlsic3JjIiwicG9zdGVyIl19LF91PWZ1bmN0aW9uKGUsdCxuLGkpe2Z1bmN0aW9uIHIoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBuP2E6bmV3IG4oZnVuY3Rpb24ocyl7cyhhKX0pfXJldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKGZ1bmN0aW9uKGEscyl7ZnVuY3Rpb24gbyhjKXt0cnl7dShpLm5leHQoYykpfWNhdGNoKGQpe3MoZCl9fWZ1bmN0aW9uIGwoYyl7dHJ5e3UoaS50aHJvdyhjKSl9Y2F0Y2goZCl7cyhkKX19ZnVuY3Rpb24gdShjKXtjLmRvbmU/YShjLnZhbHVlKTpyKGMudmFsdWUpLnRoZW4obyxsKX11KChpPWkuYXBwbHkoZSxbXSkpLm5leHQoKSl9KX0sd3U9ZnVuY3Rpb24oZSx0KXt2YXIgbj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoYVswXSYxKXRocm93IGFbMV07cmV0dXJuIGFbMV19LHRyeXM6W10sb3BzOltdfSxpLHIsYSxzO3JldHVybiBzPXtuZXh0Om8oMCksdGhyb3c6bygxKSxyZXR1cm46bygyKX0sdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmKHNbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscztmdW5jdGlvbiBvKHUpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gbChbdSxjXSl9fWZ1bmN0aW9uIGwodSl7aWYoaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtuOyl0cnl7aWYoaT0xLHImJihhPXVbMF0mMj9yLnJldHVybjp1WzBdP3IudGhyb3d8fCgoYT1yLnJldHVybikmJmEuY2FsbChyKSwwKTpyLm5leHQpJiYhKGE9YS5jYWxsKHIsdVsxXSkpLmRvbmUpcmV0dXJuIGE7c3dpdGNoKHI9MCxhJiYodT1bdVswXSYyLGEudmFsdWVdKSx1WzBdKXtjYXNlIDA6Y2FzZSAxOmE9dTticmVhaztjYXNlIDQ6cmV0dXJuIG4ubGFiZWwrKyx7dmFsdWU6dVsxXSxkb25lOiExfTtjYXNlIDU6bi5sYWJlbCsrLHI9dVsxXSx1PVswXTtjb250aW51ZTtjYXNlIDc6dT1uLm9wcy5wb3AoKSxuLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZihhPW4udHJ5cywhKGE9YS5sZW5ndGg+MCYmYVthLmxlbmd0aC0xXSkmJih1WzBdPT09Nnx8dVswXT09PTIpKXtuPTA7Y29udGludWV9aWYodVswXT09PTMmJighYXx8dVsxXT5hWzBdJiZ1WzFdPGFbM10pKXtuLmxhYmVsPXVbMV07YnJlYWt9aWYodVswXT09PTYmJm4ubGFiZWw8YVsxXSl7bi5sYWJlbD1hWzFdLGE9dTticmVha31pZihhJiZuLmxhYmVsPGFbMl0pe24ubGFiZWw9YVsyXSxuLm9wcy5wdXNoKHUpO2JyZWFrfWFbMl0mJm4ub3BzLnBvcCgpLG4udHJ5cy5wb3AoKTtjb250aW51ZX11PXQuY2FsbChlLG4pfWNhdGNoKGMpe3U9WzYsY10scj0wfWZpbmFsbHl7aT1hPTB9aWYodVswXSY1KXRocm93IHVbMV07cmV0dXJue3ZhbHVlOnVbMF0/dVsxXTp2b2lkIDAsZG9uZTohMH19fSx5dT1LbigpLHh1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3RoaXMubHNPcHRpb25zPXQsdGhpcy5kYXRhTWFuYWdlcj1uLHRoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0Q29tcGxldGlvblBhcnRpY2lwYW50cz1mdW5jdGlvbih0KXt0aGlzLmNvbXBsZXRpb25QYXJ0aWNpcGFudHM9dHx8W119LGUucHJvdG90eXBlLmRvQ29tcGxldGUyPWZ1bmN0aW9uKHQsbixpLHIsYSl7cmV0dXJuIF91KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzLG8sbCx1O3JldHVybiB3dSh0aGlzLGZ1bmN0aW9uKGMpe3N3aXRjaChjLmxhYmVsKXtjYXNlIDA6aWYoIXRoaXMubHNPcHRpb25zLmZpbGVTeXN0ZW1Qcm92aWRlcnx8IXRoaXMubHNPcHRpb25zLmZpbGVTeXN0ZW1Qcm92aWRlci5yZWFkRGlyZWN0b3J5KXJldHVyblsyLHRoaXMuZG9Db21wbGV0ZSh0LG4saSxhKV07cz1uZXcgY3UodGhpcy5sc09wdGlvbnMuZmlsZVN5c3RlbVByb3ZpZGVyLnJlYWREaXJlY3RvcnkpLG89dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzLHRoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1bc10uY29uY2F0KG8pLGw9dGhpcy5kb0NvbXBsZXRlKHQsbixpLGEpLGMubGFiZWw9MTtjYXNlIDE6cmV0dXJuIGMudHJ5cy5wdXNoKFsxLCwzLDRdKSxbNCxzLmNvbXB1dGVDb21wbGV0aW9ucyh0LHIpXTtjYXNlIDI6cmV0dXJuIHU9Yy5zZW50KCksWzIse2lzSW5jb21wbGV0ZTpsLmlzSW5jb21wbGV0ZXx8dS5pc0luY29tcGxldGUsaXRlbXM6dS5pdGVtcy5jb25jYXQobC5pdGVtcyl9XTtjYXNlIDM6cmV0dXJuIHRoaXMuY29tcGxldGlvblBhcnRpY2lwYW50cz1vLFs3XTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9LGUucHJvdG90eXBlLmRvQ29tcGxldGU9ZnVuY3Rpb24odCxuLGkscil7dmFyIGE9dGhpcy5fZG9Db21wbGV0ZSh0LG4saSxyKTtyZXR1cm4gdGhpcy5jb252ZXJ0Q29tcGxldGlvbkxpc3QoYSl9LGUucHJvdG90eXBlLl9kb0NvbXBsZXRlPWZ1bmN0aW9uKHQsbixpLHIpe3ZhciBhPXtpc0luY29tcGxldGU6ITEsaXRlbXM6W119LHM9dGhpcy5jb21wbGV0aW9uUGFydGljaXBhbnRzLG89dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhUHJvdmlkZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKEkpe3JldHVybiBJLmlzQXBwbGljYWJsZSh0Lmxhbmd1YWdlSWQpJiYoIXJ8fHJbSS5nZXRJZCgpXSE9PSExKX0pLGw9dGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCksdT10LmdldFRleHQoKSxjPXQub2Zmc2V0QXQobiksZD1pLmZpbmROb2RlQmVmb3JlKGMpO2lmKCFkKXJldHVybiBhO3ZhciBtPXdlKHUsZC5zdGFydCksZj0iIixiO2Z1bmN0aW9uIHAoSSx6KXtyZXR1cm4gej09PXZvaWQgMCYmKHo9YyksST5jJiYoST1jKSx7c3RhcnQ6dC5wb3NpdGlvbkF0KEkpLGVuZDp0LnBvc2l0aW9uQXQoeil9fWZ1bmN0aW9uIHcoSSx6KXt2YXIgQj1wKEkseik7cmV0dXJuIG8uZm9yRWFjaChmdW5jdGlvbihYKXtYLnByb3ZpZGVUYWdzKCkuZm9yRWFjaChmdW5jdGlvbihRKXthLml0ZW1zLnB1c2goe2xhYmVsOlEubmFtZSxraW5kOmJlLlByb3BlcnR5LGRvY3VtZW50YXRpb246dHQoUSx2b2lkIDAsbCksdGV4dEVkaXQ6c2UucmVwbGFjZShCLFEubmFtZSksaW5zZXJ0VGV4dEZvcm1hdDpSZS5QbGFpblRleHR9KX0pfSksYX1mdW5jdGlvbiB4KEkpe2Zvcih2YXIgej1JO3o+MDspe3ZhciBCPXUuY2hhckF0KHotMSk7aWYoYApccmAuaW5kZXhPZihCKT49MClyZXR1cm4gdS5zdWJzdHJpbmcoeixJKTtpZighZm4oQikpcmV0dXJuIG51bGw7ei0tfXJldHVybiB1LnN1YnN0cmluZygwLEkpfWZ1bmN0aW9uIF8oSSx6LEIpe0I9PT12b2lkIDAmJihCPWMpO3ZhciBYPXAoSSxCKSxRPWVzKHUsQixWLldpdGhpbkVuZFRhZyxVLkVuZFRhZ0Nsb3NlKT8iIjoiPiIsSj1kO2Zvcih6JiYoSj1KLnBhcmVudCk7Sjspe3ZhciBaPUoudGFnO2lmKFomJighSi5jbG9zZWR8fEouZW5kVGFnU3RhcnQmJkouZW5kVGFnU3RhcnQ+Yykpe3ZhciBmZT17bGFiZWw6Ii8iK1osa2luZDpiZS5Qcm9wZXJ0eSxmaWx0ZXJUZXh0OiIvIitaLHRleHRFZGl0OnNlLnJlcGxhY2UoWCwiLyIrWitRKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlBsYWluVGV4dH0sSGU9eChKLnN0YXJ0KSxZZT14KEktMSk7aWYoSGUhPT1udWxsJiZZZSE9PW51bGwmJkhlIT09WWUpe3ZhciB4ZT1IZSsiPC8iK1orUTtmZS50ZXh0RWRpdD1zZS5yZXBsYWNlKHAoSS0xLVllLmxlbmd0aCkseGUpLGZlLmZpbHRlclRleHQ9WWUrIjwvIitafXJldHVybiBhLml0ZW1zLnB1c2goZmUpLGF9Sj1KLnBhcmVudH1yZXR1cm4genx8by5mb3JFYWNoKGZ1bmN0aW9uKG50KXtudC5wcm92aWRlVGFncygpLmZvckVhY2goZnVuY3Rpb24oTWUpe2EuaXRlbXMucHVzaCh7bGFiZWw6Ii8iK01lLm5hbWUsa2luZDpiZS5Qcm9wZXJ0eSxkb2N1bWVudGF0aW9uOnR0KE1lLHZvaWQgMCxsKSxmaWx0ZXJUZXh0OiIvIitNZS5uYW1lK1EsdGV4dEVkaXQ6c2UucmVwbGFjZShYLCIvIitNZS5uYW1lK1EpLGluc2VydFRleHRGb3JtYXQ6UmUuUGxhaW5UZXh0fSl9KX0pLGF9ZnVuY3Rpb24geShJLHope2lmKHImJnIuaGlkZUF1dG9Db21wbGV0ZVByb3Bvc2FscylyZXR1cm4gYTtpZighZG4oeikpe3ZhciBCPXQucG9zaXRpb25BdChJKTthLml0ZW1zLnB1c2goe2xhYmVsOiI8LyIreisiPiIsa2luZDpiZS5Qcm9wZXJ0eSxmaWx0ZXJUZXh0OiI8LyIreisiPiIsdGV4dEVkaXQ6c2UuaW5zZXJ0KEIsIiQwPC8iK3orIj4iKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlNuaXBwZXR9KX1yZXR1cm4gYX1mdW5jdGlvbiBFKEkseil7cmV0dXJuIHcoSSx6KSxfKEksITAseiksYX1mdW5jdGlvbiBSKCl7dmFyIEk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZC5hdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHope0lbel09ITB9KSxJfWZ1bmN0aW9uIFAoSSx6KXt2YXIgQjt6PT09dm9pZCAwJiYoej1jKTtmb3IodmFyIFg9YztYPHomJnVbWF0hPT0iPCI7KVgrKzt2YXIgUT11LnN1YnN0cmluZyhJLHopLEo9cChJLFgpLFo9IiI7aWYoIWVzKHUseixWLkFmdGVyQXR0cmlidXRlTmFtZSxVLkRlbGltaXRlckFzc2lnbikpe3ZhciBmZT0oQj1yPy5hdHRyaWJ1dGVEZWZhdWx0VmFsdWUpIT09bnVsbCYmQiE9PXZvaWQgMD9COiJkb3VibGVxdW90ZXMiO2ZlPT09ImVtcHR5Ij9aPSI9JDEiOmZlPT09InNpbmdsZXF1b3RlcyI/Wj0iPSckMSciOlo9Jz0iJDEiJ312YXIgSGU9UigpO3JldHVybiBIZVtRXT0hMSxvLmZvckVhY2goZnVuY3Rpb24oWWUpe1llLnByb3ZpZGVBdHRyaWJ1dGVzKGYpLmZvckVhY2goZnVuY3Rpb24oeGUpe2lmKCFIZVt4ZS5uYW1lXSl7SGVbeGUubmFtZV09ITA7dmFyIG50PXhlLm5hbWUsTWU7eGUudmFsdWVTZXQhPT0idiImJloubGVuZ3RoJiYobnQ9bnQrWiwoeGUudmFsdWVTZXR8fHhlLm5hbWU9PT0ic3R5bGUiKSYmKE1lPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSksYS5pdGVtcy5wdXNoKHtsYWJlbDp4ZS5uYW1lLGtpbmQ6eGUudmFsdWVTZXQ9PT0iaGFuZGxlciI/YmUuRnVuY3Rpb246YmUuVmFsdWUsZG9jdW1lbnRhdGlvbjp0dCh4ZSx2b2lkIDAsbCksdGV4dEVkaXQ6c2UucmVwbGFjZShKLG50KSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlNuaXBwZXQsY29tbWFuZDpNZX0pfX0pfSksdihKLEhlKSxhfWZ1bmN0aW9uIHYoSSx6KXt2YXIgQj0iZGF0YS0iLFg9e307WFtCXT0iIi5jb25jYXQoQiwnJDE9IiQyIicpO2Z1bmN0aW9uIFEoSil7Si5hdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKFope1FlKFosQikmJiFYW1pdJiYheltaXSYmKFhbWl09WisnPSIkMSInKX0pLEouY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihaKXtyZXR1cm4gUShaKX0pfWkmJmkucm9vdHMuZm9yRWFjaChmdW5jdGlvbihKKXtyZXR1cm4gUShKKX0pLE9iamVjdC5rZXlzKFgpLmZvckVhY2goZnVuY3Rpb24oSil7cmV0dXJuIGEuaXRlbXMucHVzaCh7bGFiZWw6SixraW5kOmJlLlZhbHVlLHRleHRFZGl0OnNlLnJlcGxhY2UoSSxYW0pdKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlNuaXBwZXR9KX0pfWZ1bmN0aW9uIGcoSSx6KXt6PT09dm9pZCAwJiYoej1jKTt2YXIgQixYLFE7aWYoYz5JJiZjPD16JiZUdSh1W0ldKSl7dmFyIEo9SSsxLFo9ejt6PkkmJnVbei0xXT09PXVbSV0mJlotLTt2YXIgZmU9a3UodSxjLEopLEhlPUF1KHUsYyxaKTtCPXAoZmUsSGUpLFE9Yz49SiYmYzw9Wj91LnN1YnN0cmluZyhKLGMpOiIiLFg9ITF9ZWxzZSBCPXAoSSx6KSxRPXUuc3Vic3RyaW5nKEksYyksWD0hMDtpZihzLmxlbmd0aD4wKWZvcih2YXIgWWU9Zi50b0xvd2VyQ2FzZSgpLHhlPWIudG9Mb3dlckNhc2UoKSxudD1wKEkseiksTWU9MCxkcz1zO01lPGRzLmxlbmd0aDtNZSsrKXt2YXIgbXM9ZHNbTWVdO21zLm9uSHRtbEF0dHJpYnV0ZVZhbHVlJiZtcy5vbkh0bWxBdHRyaWJ1dGVWYWx1ZSh7ZG9jdW1lbnQ6dCxwb3NpdGlvbjpuLHRhZzpZZSxhdHRyaWJ1dGU6eGUsdmFsdWU6USxyYW5nZTpudH0pfXJldHVybiBvLmZvckVhY2goZnVuY3Rpb24oYWMpe2FjLnByb3ZpZGVWYWx1ZXMoZixiKS5mb3JFYWNoKGZ1bmN0aW9uKHBuKXt2YXIgZnM9WD8nIicrcG4ubmFtZSsnIic6cG4ubmFtZTthLml0ZW1zLnB1c2goe2xhYmVsOnBuLm5hbWUsZmlsdGVyVGV4dDpmcyxraW5kOmJlLlVuaXQsZG9jdW1lbnRhdGlvbjp0dChwbix2b2lkIDAsbCksdGV4dEVkaXQ6c2UucmVwbGFjZShCLGZzKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlBsYWluVGV4dH0pfSl9KSxTKCksYX1mdW5jdGlvbiBUKEkpe3JldHVybiBjPT09bS5nZXRUb2tlbkVuZCgpJiYoTj1tLnNjYW4oKSxOPT09SSYmbS5nZXRUb2tlbk9mZnNldCgpPT09Yyk/bS5nZXRUb2tlbkVuZCgpOmN9ZnVuY3Rpb24gcSgpe2Zvcih2YXIgST0wLHo9cztJPHoubGVuZ3RoO0krKyl7dmFyIEI9eltJXTtCLm9uSHRtbENvbnRlbnQmJkIub25IdG1sQ29udGVudCh7ZG9jdW1lbnQ6dCxwb3NpdGlvbjpufSl9cmV0dXJuIFMoKX1mdW5jdGlvbiBTKCl7Zm9yKHZhciBJPWMtMSx6PW4uY2hhcmFjdGVyO0k+PTAmJkh0KHUsSSk7KUktLSx6LS07aWYoST49MCYmdVtJXT09PSImIil7dmFyIEI9WS5jcmVhdGUoY2UuY3JlYXRlKG4ubGluZSx6LTEpLG4pO2Zvcih2YXIgWCBpbiB6dClpZihudShYLCI7Iikpe3ZhciBRPSImIitYO2EuaXRlbXMucHVzaCh7bGFiZWw6USxraW5kOmJlLktleXdvcmQsZG9jdW1lbnRhdGlvbjp5dSgiZW50aXR5LnByb3Bvc2UiLCJDaGFyYWN0ZXIgZW50aXR5IHJlcHJlc2VudGluZyAnIi5jb25jYXQoenRbWF0sIiciKSksdGV4dEVkaXQ6c2UucmVwbGFjZShCLFEpLGluc2VydFRleHRGb3JtYXQ6UmUuUGxhaW5UZXh0fSl9fXJldHVybiBhfWZ1bmN0aW9uIGsoSSx6KXt2YXIgQj1wKEkseik7YS5pdGVtcy5wdXNoKHtsYWJlbDoiIURPQ1RZUEUiLGtpbmQ6YmUuUHJvcGVydHksZG9jdW1lbnRhdGlvbjoiQSBwcmVhbWJsZSBmb3IgYW4gSFRNTCBkb2N1bWVudC4iLHRleHRFZGl0OnNlLnJlcGxhY2UoQiwiIURPQ1RZUEUgaHRtbD4iKSxpbnNlcnRUZXh0Rm9ybWF0OlJlLlBsYWluVGV4dH0pfWZvcih2YXIgTj1tLnNjYW4oKTtOIT09VS5FT1MmJm0uZ2V0VG9rZW5PZmZzZXQoKTw9Yzspe3N3aXRjaChOKXtjYXNlIFUuU3RhcnRUYWdPcGVuOmlmKG0uZ2V0VG9rZW5FbmQoKT09PWMpe3ZhciBEPVQoVS5TdGFydFRhZyk7cmV0dXJuIG4ubGluZT09PTAmJmsoYyxEKSxFKGMsRCl9YnJlYWs7Y2FzZSBVLlN0YXJ0VGFnOmlmKG0uZ2V0VG9rZW5PZmZzZXQoKTw9YyYmYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiB3KG0uZ2V0VG9rZW5PZmZzZXQoKSxtLmdldFRva2VuRW5kKCkpO2Y9bS5nZXRUb2tlblRleHQoKTticmVhaztjYXNlIFUuQXR0cmlidXRlTmFtZTppZihtLmdldFRva2VuT2Zmc2V0KCk8PWMmJmM8PW0uZ2V0VG9rZW5FbmQoKSlyZXR1cm4gUChtLmdldFRva2VuT2Zmc2V0KCksbS5nZXRUb2tlbkVuZCgpKTtiPW0uZ2V0VG9rZW5UZXh0KCk7YnJlYWs7Y2FzZSBVLkRlbGltaXRlckFzc2lnbjppZihtLmdldFRva2VuRW5kKCk9PT1jKXt2YXIgRD1UKFUuQXR0cmlidXRlVmFsdWUpO3JldHVybiBnKGMsRCl9YnJlYWs7Y2FzZSBVLkF0dHJpYnV0ZVZhbHVlOmlmKG0uZ2V0VG9rZW5PZmZzZXQoKTw9YyYmYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiBnKG0uZ2V0VG9rZW5PZmZzZXQoKSxtLmdldFRva2VuRW5kKCkpO2JyZWFrO2Nhc2UgVS5XaGl0ZXNwYWNlOmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSlzd2l0Y2gobS5nZXRTY2FubmVyU3RhdGUoKSl7Y2FzZSBWLkFmdGVyT3BlbmluZ1N0YXJ0VGFnOnZhciBIPW0uZ2V0VG9rZW5PZmZzZXQoKSxGPVQoVS5TdGFydFRhZyk7cmV0dXJuIEUoSCxGKTtjYXNlIFYuV2l0aGluVGFnOmNhc2UgVi5BZnRlckF0dHJpYnV0ZU5hbWU6cmV0dXJuIFAobS5nZXRUb2tlbkVuZCgpKTtjYXNlIFYuQmVmb3JlQXR0cmlidXRlVmFsdWU6cmV0dXJuIGcobS5nZXRUb2tlbkVuZCgpKTtjYXNlIFYuQWZ0ZXJPcGVuaW5nRW5kVGFnOnJldHVybiBfKG0uZ2V0VG9rZW5PZmZzZXQoKS0xLCExKTtjYXNlIFYuV2l0aGluQ29udGVudDpyZXR1cm4gcSgpfWJyZWFrO2Nhc2UgVS5FbmRUYWdPcGVuOmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSl7dmFyIEw9bS5nZXRUb2tlbk9mZnNldCgpKzEsQT1UKFUuRW5kVGFnKTtyZXR1cm4gXyhMLCExLEEpfWJyZWFrO2Nhc2UgVS5FbmRUYWc6aWYoYzw9bS5nZXRUb2tlbkVuZCgpKWZvcih2YXIgTT1tLmdldFRva2VuT2Zmc2V0KCktMTtNPj0wOyl7dmFyIFc9dS5jaGFyQXQoTSk7aWYoVz09PSIvIilyZXR1cm4gXyhNLCExLG0uZ2V0VG9rZW5FbmQoKSk7aWYoIWZuKFcpKWJyZWFrO00tLX1icmVhaztjYXNlIFUuU3RhcnRUYWdDbG9zZTppZihjPD1tLmdldFRva2VuRW5kKCkmJmYpcmV0dXJuIHkobS5nZXRUb2tlbkVuZCgpLGYpO2JyZWFrO2Nhc2UgVS5Db250ZW50OmlmKGM8PW0uZ2V0VG9rZW5FbmQoKSlyZXR1cm4gcSgpO2JyZWFrO2RlZmF1bHQ6aWYoYzw9bS5nZXRUb2tlbkVuZCgpKXJldHVybiBhO2JyZWFrfU49bS5zY2FuKCl9cmV0dXJuIGF9LGUucHJvdG90eXBlLmRvUXVvdGVDb21wbGV0ZT1mdW5jdGlvbih0LG4saSxyKXt2YXIgYSxzPXQub2Zmc2V0QXQobik7aWYoczw9MClyZXR1cm4gbnVsbDt2YXIgbz0oYT1yPy5hdHRyaWJ1dGVEZWZhdWx0VmFsdWUpIT09bnVsbCYmYSE9PXZvaWQgMD9hOiJkb3VibGVxdW90ZXMiO2lmKG89PT0iZW1wdHkiKXJldHVybiBudWxsO3ZhciBsPXQuZ2V0VGV4dCgpLmNoYXJBdChzLTEpO2lmKGwhPT0iPSIpcmV0dXJuIG51bGw7dmFyIHU9bz09PSJkb3VibGVxdW90ZXMiPyciJDEiJzoiJyQxJyIsYz1pLmZpbmROb2RlQmVmb3JlKHMpO2lmKGMmJmMuYXR0cmlidXRlcyYmYy5zdGFydDxzJiYoIWMuZW5kVGFnU3RhcnR8fGMuZW5kVGFnU3RhcnQ+cykpZm9yKHZhciBkPXdlKHQuZ2V0VGV4dCgpLGMuc3RhcnQpLG09ZC5zY2FuKCk7bSE9PVUuRU9TJiZkLmdldFRva2VuRW5kKCk8PXM7KXtpZihtPT09VS5BdHRyaWJ1dGVOYW1lJiZkLmdldFRva2VuRW5kKCk9PT1zLTEpcmV0dXJuIG09ZC5zY2FuKCksbSE9PVUuRGVsaW1pdGVyQXNzaWdufHwobT1kLnNjYW4oKSxtPT09VS5Vbmtub3dufHxtPT09VS5BdHRyaWJ1dGVWYWx1ZSk/bnVsbDp1O209ZC5zY2FuKCl9cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmRvVGFnQ29tcGxldGU9ZnVuY3Rpb24odCxuLGkpe3ZhciByPXQub2Zmc2V0QXQobik7aWYocjw9MClyZXR1cm4gbnVsbDt2YXIgYT10LmdldFRleHQoKS5jaGFyQXQoci0xKTtpZihhPT09Ij4iKXt2YXIgcz1pLmZpbmROb2RlQmVmb3JlKHIpO2lmKHMmJnMudGFnJiYhZG4ocy50YWcpJiZzLnN0YXJ0PHImJighcy5lbmRUYWdTdGFydHx8cy5lbmRUYWdTdGFydD5yKSlmb3IodmFyIG89d2UodC5nZXRUZXh0KCkscy5zdGFydCksbD1vLnNjYW4oKTtsIT09VS5FT1MmJm8uZ2V0VG9rZW5FbmQoKTw9cjspe2lmKGw9PT1VLlN0YXJ0VGFnQ2xvc2UmJm8uZ2V0VG9rZW5FbmQoKT09PXIpcmV0dXJuIiQwPC8iLmNvbmNhdChzLnRhZywiPiIpO2w9by5zY2FuKCl9fWVsc2UgaWYoYT09PSIvIil7Zm9yKHZhciBzPWkuZmluZE5vZGVCZWZvcmUocik7cyYmcy5jbG9zZWQmJiEocy5lbmRUYWdTdGFydCYmcy5lbmRUYWdTdGFydD5yKTspcz1zLnBhcmVudDtpZihzJiZzLnRhZylmb3IodmFyIG89d2UodC5nZXRUZXh0KCkscy5zdGFydCksbD1vLnNjYW4oKTtsIT09VS5FT1MmJm8uZ2V0VG9rZW5FbmQoKTw9cjspe2lmKGw9PT1VLkVuZFRhZ09wZW4mJm8uZ2V0VG9rZW5FbmQoKT09PXIpcmV0dXJuIiIuY29uY2F0KHMudGFnLCI+Iik7bD1vLnNjYW4oKX19cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLmNvbnZlcnRDb21wbGV0aW9uTGlzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCl8fHQuaXRlbXMuZm9yRWFjaChmdW5jdGlvbihuKXtuLmRvY3VtZW50YXRpb24mJnR5cGVvZiBuLmRvY3VtZW50YXRpb24hPSJzdHJpbmciJiYobi5kb2N1bWVudGF0aW9uPXtraW5kOiJwbGFpbnRleHQiLHZhbHVlOm4uZG9jdW1lbnRhdGlvbi52YWx1ZX0pfSksdH0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRNYXJrZG93bj1mdW5jdGlvbigpe3ZhciB0LG4saTtpZighbW4odGhpcy5zdXBwb3J0c01hcmtkb3duKSl7aWYoIW1uKHRoaXMubHNPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcykpcmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bj0hMCx0aGlzLnN1cHBvcnRzTWFya2Rvd247dmFyIHI9KGk9KG49KHQ9dGhpcy5sc09wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudCk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LmNvbXBsZXRpb24pPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5jb21wbGV0aW9uSXRlbSk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmRvY3VtZW50YXRpb25Gb3JtYXQ7dGhpcy5zdXBwb3J0c01hcmtkb3duPUFycmF5LmlzQXJyYXkocikmJnIuaW5kZXhPZihFZS5NYXJrZG93bikhPT0tMX1yZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3dufSxlfSgpO2Z1bmN0aW9uIFR1KGUpe3JldHVybi9eWyInXSokLy50ZXN0KGUpfWZ1bmN0aW9uIGZuKGUpe3JldHVybi9eXHMqJC8udGVzdChlKX1mdW5jdGlvbiBlcyhlLHQsbixpKXtmb3IodmFyIHI9d2UoZSx0LG4pLGE9ci5zY2FuKCk7YT09PVUuV2hpdGVzcGFjZTspYT1yLnNjYW4oKTtyZXR1cm4gYT09PWl9ZnVuY3Rpb24ga3UoZSx0LG4pe2Zvcig7dD5uJiYhZm4oZVt0LTFdKTspdC0tO3JldHVybiB0fWZ1bmN0aW9uIEF1KGUsdCxuKXtmb3IoO3Q8biYmIWZuKGVbdF0pOyl0Kys7cmV0dXJuIHR9dmFyIFN1PUtuKCksTHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dGhpcy5sc09wdGlvbnM9dCx0aGlzLmRhdGFNYW5hZ2VyPW59cmV0dXJuIGUucHJvdG90eXBlLmRvSG92ZXI9ZnVuY3Rpb24odCxuLGkscil7dmFyIGE9dGhpcy5jb252ZXJ0Q29udGVudHMuYmluZCh0aGlzKSxzPXRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpLG89dC5vZmZzZXRBdChuKSxsPWkuZmluZE5vZGVBdChvKSx1PXQuZ2V0VGV4dCgpO2lmKCFsfHwhbC50YWcpcmV0dXJuIG51bGw7dmFyIGM9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhUHJvdmlkZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKGspe3JldHVybiBrLmlzQXBwbGljYWJsZSh0Lmxhbmd1YWdlSWQpfSk7ZnVuY3Rpb24gZChrLE4sRCl7Zm9yKHZhciBIPWZ1bmN0aW9uKFcpe3ZhciBJPW51bGw7aWYoVy5wcm92aWRlVGFncygpLmZvckVhY2goZnVuY3Rpb24oeil7aWYoei5uYW1lLnRvTG93ZXJDYXNlKCk9PT1rLnRvTG93ZXJDYXNlKCkpe3ZhciBCPXR0KHoscixzKTtCfHwoQj17a2luZDpzPyJtYXJrZG93biI6InBsYWludGV4dCIsdmFsdWU6IiJ9KSxJPXtjb250ZW50czpCLHJhbmdlOk59fX0pLEkpcmV0dXJuIEkuY29udGVudHM9YShJLmNvbnRlbnRzKSx7dmFsdWU6SX19LEY9MCxMPWM7RjxMLmxlbmd0aDtGKyspe3ZhciBBPUxbRl0sTT1IKEEpO2lmKHR5cGVvZiBNPT0ib2JqZWN0IilyZXR1cm4gTS52YWx1ZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtKGssTixEKXtmb3IodmFyIEg9ZnVuY3Rpb24oVyl7dmFyIEk9bnVsbDtpZihXLnByb3ZpZGVBdHRyaWJ1dGVzKGspLmZvckVhY2goZnVuY3Rpb24oeil7aWYoTj09PXoubmFtZSYmei5kZXNjcmlwdGlvbil7dmFyIEI9dHQoeixyLHMpO0I/ST17Y29udGVudHM6QixyYW5nZTpEfTpJPW51bGx9fSksSSlyZXR1cm4gSS5jb250ZW50cz1hKEkuY29udGVudHMpLHt2YWx1ZTpJfX0sRj0wLEw9YztGPEwubGVuZ3RoO0YrKyl7dmFyIEE9TFtGXSxNPUgoQSk7aWYodHlwZW9mIE09PSJvYmplY3QiKXJldHVybiBNLnZhbHVlfXJldHVybiBudWxsfWZ1bmN0aW9uIGYoayxOLEQsSCl7Zm9yKHZhciBGPWZ1bmN0aW9uKEkpe3ZhciB6PW51bGw7aWYoSS5wcm92aWRlVmFsdWVzKGssTikuZm9yRWFjaChmdW5jdGlvbihCKXtpZihEPT09Qi5uYW1lJiZCLmRlc2NyaXB0aW9uKXt2YXIgWD10dChCLHIscyk7WD96PXtjb250ZW50czpYLHJhbmdlOkh9Ono9bnVsbH19KSx6KXJldHVybiB6LmNvbnRlbnRzPWEoei5jb250ZW50cykse3ZhbHVlOnp9fSxMPTAsQT1jO0w8QS5sZW5ndGg7TCsrKXt2YXIgTT1BW0xdLFc9RihNKTtpZih0eXBlb2YgVz09Im9iamVjdCIpcmV0dXJuIFcudmFsdWV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYihrLE4pe3ZhciBEPXgoayk7Zm9yKHZhciBIIGluIHp0KXt2YXIgRj1udWxsLEw9IiYiK0g7aWYoRD09PUwpe3ZhciBBPXp0W0hdLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCksTT0iVSsiO2lmKEEubGVuZ3RoPDQpZm9yKHZhciBXPTQtQS5sZW5ndGgsST0wO0k8VzspTSs9IjAiLEkrPTE7TSs9QTt2YXIgej1TdSgiZW50aXR5LnByb3Bvc2UiLCJDaGFyYWN0ZXIgZW50aXR5IHJlcHJlc2VudGluZyAnIi5jb25jYXQoenRbSF0sIicsIHVuaWNvZGUgZXF1aXZhbGVudCAnIikuY29uY2F0KE0sIiciKSk7ej9GPXtjb250ZW50czp6LHJhbmdlOk59OkY9bnVsbH1pZihGKXJldHVybiBGLmNvbnRlbnRzPWEoRi5jb250ZW50cyksRn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBwKGssTil7Zm9yKHZhciBEPXdlKHQuZ2V0VGV4dCgpLE4pLEg9RC5zY2FuKCk7SCE9PVUuRU9TJiYoRC5nZXRUb2tlbkVuZCgpPG98fEQuZ2V0VG9rZW5FbmQoKT09PW8mJkghPT1rKTspSD1ELnNjYW4oKTtyZXR1cm4gSD09PWsmJm88PUQuZ2V0VG9rZW5FbmQoKT97c3RhcnQ6dC5wb3NpdGlvbkF0KEQuZ2V0VG9rZW5PZmZzZXQoKSksZW5kOnQucG9zaXRpb25BdChELmdldFRva2VuRW5kKCkpfTpudWxsfWZ1bmN0aW9uIHcoKXtmb3IodmFyIGs9by0xLE49bi5jaGFyYWN0ZXI7az49MCYmSHQodSxrKTspay0tLE4tLTtmb3IodmFyIEQ9aysxLEg9TjtIdCh1LEQpOylEKyssSCsrO2lmKGs+PTAmJnVba109PT0iJiIpe3ZhciBGPW51bGw7cmV0dXJuIHVbRF09PT0iOyI/Rj1ZLmNyZWF0ZShjZS5jcmVhdGUobi5saW5lLE4pLGNlLmNyZWF0ZShuLmxpbmUsSCsxKSk6Rj1ZLmNyZWF0ZShjZS5jcmVhdGUobi5saW5lLE4pLGNlLmNyZWF0ZShuLmxpbmUsSCkpLEZ9cmV0dXJuIG51bGx9ZnVuY3Rpb24geChrKXtmb3IodmFyIE49by0xLEQ9IiYiO04+PTAmJkh0KGssTik7KU4tLTtmb3IoTj1OKzE7SHQoayxOKTspRCs9a1tOXSxOKz0xO3JldHVybiBEKz0iOyIsRH1pZihsLmVuZFRhZ1N0YXJ0JiZvPj1sLmVuZFRhZ1N0YXJ0KXt2YXIgXz1wKFUuRW5kVGFnLGwuZW5kVGFnU3RhcnQpO3JldHVybiBfP2QobC50YWcsXyk6bnVsbH12YXIgeT1wKFUuU3RhcnRUYWcsbC5zdGFydCk7aWYoeSlyZXR1cm4gZChsLnRhZyx5KTt2YXIgRT1wKFUuQXR0cmlidXRlTmFtZSxsLnN0YXJ0KTtpZihFKXt2YXIgUj1sLnRhZyxQPXQuZ2V0VGV4dChFKTtyZXR1cm4gbShSLFAsRSl9dmFyIHY9dygpO2lmKHYpcmV0dXJuIGIodSx2KTtmdW5jdGlvbiBnKGssTil7Zm9yKHZhciBEPXdlKHQuZ2V0VGV4dCgpLGspLEg9RC5zY2FuKCksRj12b2lkIDA7SCE9PVUuRU9TJiZELmdldFRva2VuRW5kKCk8PU47KUg9RC5zY2FuKCksSD09PVUuQXR0cmlidXRlTmFtZSYmKEY9RC5nZXRUb2tlblRleHQoKSk7cmV0dXJuIEZ9dmFyIFQ9cChVLkF0dHJpYnV0ZVZhbHVlLGwuc3RhcnQpO2lmKFQpe3ZhciBSPWwudGFnLHE9Q3UodC5nZXRUZXh0KFQpKSxTPWcobC5zdGFydCx0Lm9mZnNldEF0KFQuc3RhcnQpKTtpZihTKXJldHVybiBmKFIsUyxxLFQpfXJldHVybiBudWxsfSxlLnByb3RvdHlwZS5jb252ZXJ0Q29udGVudHM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpKXtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHQ7aWYoImtpbmQiaW4gdClyZXR1cm57a2luZDoicGxhaW50ZXh0Iix2YWx1ZTp0LnZhbHVlfTtpZihBcnJheS5pc0FycmF5KHQpKXQubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09InN0cmluZyI/bjpuLnZhbHVlfSk7ZWxzZSByZXR1cm4gdC52YWx1ZX1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZG9lc1N1cHBvcnRNYXJrZG93bj1mdW5jdGlvbigpe3ZhciB0LG4saTtpZighbW4odGhpcy5zdXBwb3J0c01hcmtkb3duKSl7aWYoIW1uKHRoaXMubHNPcHRpb25zLmNsaWVudENhcGFiaWxpdGllcykpcmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bj0hMCx0aGlzLnN1cHBvcnRzTWFya2Rvd247dmFyIHI9KGk9KG49KHQ9dGhpcy5sc09wdGlvbnMuY2xpZW50Q2FwYWJpbGl0aWVzKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQudGV4dERvY3VtZW50KT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uaG92ZXIpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5jb250ZW50Rm9ybWF0O3RoaXMuc3VwcG9ydHNNYXJrZG93bj1BcnJheS5pc0FycmF5KHIpJiZyLmluZGV4T2YoRWUuTWFya2Rvd24pIT09LTF9cmV0dXJuIHRoaXMuc3VwcG9ydHNNYXJrZG93bn0sZX0oKTtmdW5jdGlvbiBDdShlKXtyZXR1cm4gZS5sZW5ndGg8PTE/ZS5yZXBsYWNlKC9bJyJdLywiIik6KChlWzBdPT09IicifHxlWzBdPT09JyInKSYmKGU9ZS5zbGljZSgxKSksKGVbZS5sZW5ndGgtMV09PT0iJyJ8fGVbZS5sZW5ndGgtMV09PT0nIicpJiYoZT1lLnNsaWNlKDAsLTEpKSxlKX1mdW5jdGlvbiBFdShlLHQpe3JldHVybiBlfXZhciB0czsoZnVuY3Rpb24oKXt2YXIgZT1bLCxmdW5jdGlvbihyKXtmdW5jdGlvbiBhKGwpe3RoaXMuX19wYXJlbnQ9bCx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PTAsdGhpcy5fX2luZGVudF9jb3VudD0tMSx0aGlzLl9fYWxpZ25tZW50X2NvdW50PTAsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXg9MCx0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ9MCx0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ9LTEsdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50PTAsdGhpcy5fX2l0ZW1zPVtdfWEucHJvdG90eXBlLmNsb25lX2VtcHR5PWZ1bmN0aW9uKCl7dmFyIGw9bmV3IGEodGhpcy5fX3BhcmVudCk7cmV0dXJuIGwuc2V0X2luZGVudCh0aGlzLl9faW5kZW50X2NvdW50LHRoaXMuX19hbGlnbm1lbnRfY291bnQpLGx9LGEucHJvdG90eXBlLml0ZW09ZnVuY3Rpb24obCl7cmV0dXJuIGw8MD90aGlzLl9faXRlbXNbdGhpcy5fX2l0ZW1zLmxlbmd0aCtsXTp0aGlzLl9faXRlbXNbbF19LGEucHJvdG90eXBlLmhhc19tYXRjaD1mdW5jdGlvbihsKXtmb3IodmFyIHU9dGhpcy5fX2l0ZW1zLmxlbmd0aC0xO3U+PTA7dS0tKWlmKHRoaXMuX19pdGVtc1t1XS5tYXRjaChsKSlyZXR1cm4hMDtyZXR1cm4hMX0sYS5wcm90b3R5cGUuc2V0X2luZGVudD1mdW5jdGlvbihsLHUpe3RoaXMuaXNfZW1wdHkoKSYmKHRoaXMuX19pbmRlbnRfY291bnQ9bHx8MCx0aGlzLl9fYWxpZ25tZW50X2NvdW50PXV8fDAsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc2l6ZSh0aGlzLl9faW5kZW50X2NvdW50LHRoaXMuX19hbGlnbm1lbnRfY291bnQpKX0sYS5wcm90b3R5cGUuX3NldF93cmFwX3BvaW50PWZ1bmN0aW9uKCl7dGhpcy5fX3BhcmVudC53cmFwX2xpbmVfbGVuZ3RoJiYodGhpcy5fX3dyYXBfcG9pbnRfaW5kZXg9dGhpcy5fX2l0ZW1zLmxlbmd0aCx0aGlzLl9fd3JhcF9wb2ludF9jaGFyYWN0ZXJfY291bnQ9dGhpcy5fX2NoYXJhY3Rlcl9jb3VudCx0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ9dGhpcy5fX3BhcmVudC5uZXh0X2xpbmUuX19pbmRlbnRfY291bnQsdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50PXRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9fYWxpZ25tZW50X2NvdW50KX0sYS5wcm90b3R5cGUuX3Nob3VsZF93cmFwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX193cmFwX3BvaW50X2luZGV4JiZ0aGlzLl9fY2hhcmFjdGVyX2NvdW50PnRoaXMuX19wYXJlbnQud3JhcF9saW5lX2xlbmd0aCYmdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50PnRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9fY2hhcmFjdGVyX2NvdW50fSxhLnByb3RvdHlwZS5fYWxsb3dfd3JhcD1mdW5jdGlvbigpe2lmKHRoaXMuX3Nob3VsZF93cmFwKCkpe3RoaXMuX19wYXJlbnQuYWRkX25ld19saW5lKCk7dmFyIGw9dGhpcy5fX3BhcmVudC5jdXJyZW50X2xpbmU7cmV0dXJuIGwuc2V0X2luZGVudCh0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQsdGhpcy5fX3dyYXBfcG9pbnRfYWxpZ25tZW50X2NvdW50KSxsLl9faXRlbXM9dGhpcy5fX2l0ZW1zLnNsaWNlKHRoaXMuX193cmFwX3BvaW50X2luZGV4KSx0aGlzLl9faXRlbXM9dGhpcy5fX2l0ZW1zLnNsaWNlKDAsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZXgpLGwuX19jaGFyYWN0ZXJfY291bnQrPXRoaXMuX19jaGFyYWN0ZXJfY291bnQtdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50LHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9dGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50LGwuX19pdGVtc1swXT09PSIgIiYmKGwuX19pdGVtcy5zcGxpY2UoMCwxKSxsLl9fY2hhcmFjdGVyX2NvdW50LT0xKSwhMH1yZXR1cm4hMX0sYS5wcm90b3R5cGUuaXNfZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2l0ZW1zLmxlbmd0aD09PTB9LGEucHJvdG90eXBlLmxhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc19lbXB0eSgpP251bGw6dGhpcy5fX2l0ZW1zW3RoaXMuX19pdGVtcy5sZW5ndGgtMV19LGEucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24obCl7dGhpcy5fX2l0ZW1zLnB1c2gobCk7dmFyIHU9bC5sYXN0SW5kZXhPZihgCmApO3UhPT0tMT90aGlzLl9fY2hhcmFjdGVyX2NvdW50PWwubGVuZ3RoLXU6dGhpcy5fX2NoYXJhY3Rlcl9jb3VudCs9bC5sZW5ndGh9LGEucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3ZhciBsPW51bGw7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8KGw9dGhpcy5fX2l0ZW1zLnBvcCgpLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPWwubGVuZ3RoKSxsfSxhLnByb3RvdHlwZS5fcmVtb3ZlX2luZGVudD1mdW5jdGlvbigpe3RoaXMuX19pbmRlbnRfY291bnQ+MCYmKHRoaXMuX19pbmRlbnRfY291bnQtPTEsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09dGhpcy5fX3BhcmVudC5pbmRlbnRfc2l6ZSl9LGEucHJvdG90eXBlLl9yZW1vdmVfd3JhcF9pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQ+MCYmKHRoaXMuX193cmFwX3BvaW50X2luZGVudF9jb3VudC09MSl9LGEucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGFzdCgpPT09IiAiOyl0aGlzLl9faXRlbXMucG9wKCksdGhpcy5fX2NoYXJhY3Rlcl9jb3VudC09MX0sYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgbD0iIjtyZXR1cm4gdGhpcy5pc19lbXB0eSgpP3RoaXMuX19wYXJlbnQuaW5kZW50X2VtcHR5X2xpbmVzJiYobD10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQpKToobD10aGlzLl9fcGFyZW50LmdldF9pbmRlbnRfc3RyaW5nKHRoaXMuX19pbmRlbnRfY291bnQsdGhpcy5fX2FsaWdubWVudF9jb3VudCksbCs9dGhpcy5fX2l0ZW1zLmpvaW4oIiIpKSxsfTtmdW5jdGlvbiBzKGwsdSl7dGhpcy5fX2NhY2hlPVsiIl0sdGhpcy5fX2luZGVudF9zaXplPWwuaW5kZW50X3NpemUsdGhpcy5fX2luZGVudF9zdHJpbmc9bC5pbmRlbnRfY2hhcixsLmluZGVudF93aXRoX3RhYnN8fCh0aGlzLl9faW5kZW50X3N0cmluZz1uZXcgQXJyYXkobC5pbmRlbnRfc2l6ZSsxKS5qb2luKGwuaW5kZW50X2NoYXIpKSx1PXV8fCIiLGwuaW5kZW50X2xldmVsPjAmJih1PW5ldyBBcnJheShsLmluZGVudF9sZXZlbCsxKS5qb2luKHRoaXMuX19pbmRlbnRfc3RyaW5nKSksdGhpcy5fX2Jhc2Vfc3RyaW5nPXUsdGhpcy5fX2Jhc2Vfc3RyaW5nX2xlbmd0aD11Lmxlbmd0aH1zLnByb3RvdHlwZS5nZXRfaW5kZW50X3NpemU9ZnVuY3Rpb24obCx1KXt2YXIgYz10aGlzLl9fYmFzZV9zdHJpbmdfbGVuZ3RoO3JldHVybiB1PXV8fDAsbDwwJiYoYz0wKSxjKz1sKnRoaXMuX19pbmRlbnRfc2l6ZSxjKz11LGN9LHMucHJvdG90eXBlLmdldF9pbmRlbnRfc3RyaW5nPWZ1bmN0aW9uKGwsdSl7dmFyIGM9dGhpcy5fX2Jhc2Vfc3RyaW5nO3JldHVybiB1PXV8fDAsbDwwJiYobD0wLGM9IiIpLHUrPWwqdGhpcy5fX2luZGVudF9zaXplLHRoaXMuX19lbnN1cmVfY2FjaGUodSksYys9dGhpcy5fX2NhY2hlW3VdLGN9LHMucHJvdG90eXBlLl9fZW5zdXJlX2NhY2hlPWZ1bmN0aW9uKGwpe2Zvcig7bD49dGhpcy5fX2NhY2hlLmxlbmd0aDspdGhpcy5fX2FkZF9jb2x1bW4oKX0scy5wcm90b3R5cGUuX19hZGRfY29sdW1uPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5fX2NhY2hlLmxlbmd0aCx1PTAsYz0iIjt0aGlzLl9faW5kZW50X3NpemUmJmw+PXRoaXMuX19pbmRlbnRfc2l6ZSYmKHU9TWF0aC5mbG9vcihsL3RoaXMuX19pbmRlbnRfc2l6ZSksbC09dSp0aGlzLl9faW5kZW50X3NpemUsYz1uZXcgQXJyYXkodSsxKS5qb2luKHRoaXMuX19pbmRlbnRfc3RyaW5nKSksbCYmKGMrPW5ldyBBcnJheShsKzEpLmpvaW4oIiAiKSksdGhpcy5fX2NhY2hlLnB1c2goYyl9O2Z1bmN0aW9uIG8obCx1KXt0aGlzLl9faW5kZW50X2NhY2hlPW5ldyBzKGwsdSksdGhpcy5yYXc9ITEsdGhpcy5fZW5kX3dpdGhfbmV3bGluZT1sLmVuZF93aXRoX25ld2xpbmUsdGhpcy5pbmRlbnRfc2l6ZT1sLmluZGVudF9zaXplLHRoaXMud3JhcF9saW5lX2xlbmd0aD1sLndyYXBfbGluZV9sZW5ndGgsdGhpcy5pbmRlbnRfZW1wdHlfbGluZXM9bC5pbmRlbnRfZW1wdHlfbGluZXMsdGhpcy5fX2xpbmVzPVtdLHRoaXMucHJldmlvdXNfbGluZT1udWxsLHRoaXMuY3VycmVudF9saW5lPW51bGwsdGhpcy5uZXh0X2xpbmU9bmV3IGEodGhpcyksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPSExLHRoaXMuX19hZGRfb3V0cHV0bGluZSgpfW8ucHJvdG90eXBlLl9fYWRkX291dHB1dGxpbmU9ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5jdXJyZW50X2xpbmUsdGhpcy5jdXJyZW50X2xpbmU9dGhpcy5uZXh0X2xpbmUuY2xvbmVfZW1wdHkoKSx0aGlzLl9fbGluZXMucHVzaCh0aGlzLmN1cnJlbnRfbGluZSl9LG8ucHJvdG90eXBlLmdldF9saW5lX251bWJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fbGluZXMubGVuZ3RofSxvLnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZz1mdW5jdGlvbihsLHUpe3JldHVybiB0aGlzLl9faW5kZW50X2NhY2hlLmdldF9pbmRlbnRfc3RyaW5nKGwsdSl9LG8ucHJvdG90eXBlLmdldF9pbmRlbnRfc2l6ZT1mdW5jdGlvbihsLHUpe3JldHVybiB0aGlzLl9faW5kZW50X2NhY2hlLmdldF9pbmRlbnRfc2l6ZShsLHUpfSxvLnByb3RvdHlwZS5pc19lbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnByZXZpb3VzX2xpbmUmJnRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCl9LG8ucHJvdG90eXBlLmFkZF9uZXdfbGluZT1mdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5pc19lbXB0eSgpfHwhbCYmdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKT8hMToodGhpcy5yYXd8fHRoaXMuX19hZGRfb3V0cHV0bGluZSgpLCEwKX0sby5wcm90b3R5cGUuZ2V0X2NvZGU9ZnVuY3Rpb24obCl7dGhpcy50cmltKCEwKTt2YXIgdT10aGlzLmN1cnJlbnRfbGluZS5wb3AoKTt1JiYodVt1Lmxlbmd0aC0xXT09PWAKYCYmKHU9dS5yZXBsYWNlKC9cbiskL2csIiIpKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKHUpKSx0aGlzLl9lbmRfd2l0aF9uZXdsaW5lJiZ0aGlzLl9fYWRkX291dHB1dGxpbmUoKTt2YXIgYz10aGlzLl9fbGluZXMuam9pbihgCmApO3JldHVybiBsIT09YApgJiYoYz1jLnJlcGxhY2UoL1tcbl0vZyxsKSksY30sby5wcm90b3R5cGUuc2V0X3dyYXBfcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRfbGluZS5fc2V0X3dyYXBfcG9pbnQoKX0sby5wcm90b3R5cGUuc2V0X2luZGVudD1mdW5jdGlvbihsLHUpe3JldHVybiBsPWx8fDAsdT11fHwwLHRoaXMubmV4dF9saW5lLnNldF9pbmRlbnQobCx1KSx0aGlzLl9fbGluZXMubGVuZ3RoPjE/KHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQobCx1KSwhMCk6KHRoaXMuY3VycmVudF9saW5lLnNldF9pbmRlbnQoKSwhMSl9LG8ucHJvdG90eXBlLmFkZF9yYXdfdG9rZW49ZnVuY3Rpb24obCl7Zm9yKHZhciB1PTA7dTxsLm5ld2xpbmVzO3UrKyl0aGlzLl9fYWRkX291dHB1dGxpbmUoKTt0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KC0xKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGwud2hpdGVzcGFjZV9iZWZvcmUpLHRoaXMuY3VycmVudF9saW5lLnB1c2gobC50ZXh0KSx0aGlzLnNwYWNlX2JlZm9yZV90b2tlbj0hMSx0aGlzLm5vbl9icmVha2luZ19zcGFjZT0hMSx0aGlzLnByZXZpb3VzX3Rva2VuX3dyYXBwZWQ9ITF9LG8ucHJvdG90eXBlLmFkZF90b2tlbj1mdW5jdGlvbihsKXt0aGlzLl9fYWRkX3NwYWNlX2JlZm9yZV90b2tlbigpLHRoaXMuY3VycmVudF9saW5lLnB1c2gobCksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPXRoaXMuY3VycmVudF9saW5lLl9hbGxvd193cmFwKCl9LG8ucHJvdG90eXBlLl9fYWRkX3NwYWNlX2JlZm9yZV90b2tlbj1mdW5jdGlvbigpe3RoaXMuc3BhY2VfYmVmb3JlX3Rva2VuJiYhdGhpcy5qdXN0X2FkZGVkX25ld2xpbmUoKSYmKHRoaXMubm9uX2JyZWFraW5nX3NwYWNlfHx0aGlzLnNldF93cmFwX3BvaW50KCksdGhpcy5jdXJyZW50X2xpbmUucHVzaCgiICIpKX0sby5wcm90b3R5cGUucmVtb3ZlX2luZGVudD1mdW5jdGlvbihsKXtmb3IodmFyIHU9dGhpcy5fX2xpbmVzLmxlbmd0aDtsPHU7KXRoaXMuX19saW5lc1tsXS5fcmVtb3ZlX2luZGVudCgpLGwrKzt0aGlzLmN1cnJlbnRfbGluZS5fcmVtb3ZlX3dyYXBfaW5kZW50KCl9LG8ucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24obCl7Zm9yKGw9bD09PXZvaWQgMD8hMTpsLHRoaXMuY3VycmVudF9saW5lLnRyaW0oKTtsJiZ0aGlzLl9fbGluZXMubGVuZ3RoPjEmJnRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCk7KXRoaXMuX19saW5lcy5wb3AoKSx0aGlzLmN1cnJlbnRfbGluZT10aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aC0xXSx0aGlzLmN1cnJlbnRfbGluZS50cmltKCk7dGhpcy5wcmV2aW91c19saW5lPXRoaXMuX19saW5lcy5sZW5ndGg+MT90aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aC0yXTpudWxsfSxvLnByb3RvdHlwZS5qdXN0X2FkZGVkX25ld2xpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKX0sby5wcm90b3R5cGUuanVzdF9hZGRlZF9ibGFua2xpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc19lbXB0eSgpfHx0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpJiZ0aGlzLnByZXZpb3VzX2xpbmUuaXNfZW1wdHkoKX0sby5wcm90b3R5cGUuZW5zdXJlX2VtcHR5X2xpbmVfYWJvdmU9ZnVuY3Rpb24obCx1KXtmb3IodmFyIGM9dGhpcy5fX2xpbmVzLmxlbmd0aC0yO2M+PTA7KXt2YXIgZD10aGlzLl9fbGluZXNbY107aWYoZC5pc19lbXB0eSgpKWJyZWFrO2lmKGQuaXRlbSgwKS5pbmRleE9mKGwpIT09MCYmZC5pdGVtKC0xKSE9PXUpe3RoaXMuX19saW5lcy5zcGxpY2UoYysxLDAsbmV3IGEodGhpcykpLHRoaXMucHJldmlvdXNfbGluZT10aGlzLl9fbGluZXNbdGhpcy5fX2xpbmVzLmxlbmd0aC0yXTticmVha31jLS19fSxyLmV4cG9ydHMuT3V0cHV0PW99LCwsLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEobCx1KXt0aGlzLnJhd19vcHRpb25zPXMobCx1KSx0aGlzLmRpc2FibGVkPXRoaXMuX2dldF9ib29sZWFuKCJkaXNhYmxlZCIpLHRoaXMuZW9sPXRoaXMuX2dldF9jaGFyYWN0ZXJzKCJlb2wiLCJhdXRvIiksdGhpcy5lbmRfd2l0aF9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJlbmRfd2l0aF9uZXdsaW5lIiksdGhpcy5pbmRlbnRfc2l6ZT10aGlzLl9nZXRfbnVtYmVyKCJpbmRlbnRfc2l6ZSIsNCksdGhpcy5pbmRlbnRfY2hhcj10aGlzLl9nZXRfY2hhcmFjdGVycygiaW5kZW50X2NoYXIiLCIgIiksdGhpcy5pbmRlbnRfbGV2ZWw9dGhpcy5fZ2V0X251bWJlcigiaW5kZW50X2xldmVsIiksdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfYm9vbGVhbigicHJlc2VydmVfbmV3bGluZXMiLCEwKSx0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfbnVtYmVyKCJtYXhfcHJlc2VydmVfbmV3bGluZXMiLDMyNzg2KSx0aGlzLnByZXNlcnZlX25ld2xpbmVzfHwodGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXM9MCksdGhpcy5pbmRlbnRfd2l0aF90YWJzPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfd2l0aF90YWJzIix0aGlzLmluZGVudF9jaGFyPT09IgkiKSx0aGlzLmluZGVudF93aXRoX3RhYnMmJih0aGlzLmluZGVudF9jaGFyPSIJIix0aGlzLmluZGVudF9zaXplPT09MSYmKHRoaXMuaW5kZW50X3NpemU9NCkpLHRoaXMud3JhcF9saW5lX2xlbmd0aD10aGlzLl9nZXRfbnVtYmVyKCJ3cmFwX2xpbmVfbGVuZ3RoIix0aGlzLl9nZXRfbnVtYmVyKCJtYXhfY2hhciIpKSx0aGlzLmluZGVudF9lbXB0eV9saW5lcz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2VtcHR5X2xpbmVzIiksdGhpcy50ZW1wbGF0aW5nPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgidGVtcGxhdGluZyIsWyJhdXRvIiwibm9uZSIsImRqYW5nbyIsImVyYiIsImhhbmRsZWJhcnMiLCJwaHAiLCJzbWFydHkiXSxbImF1dG8iXSl9YS5wcm90b3R5cGUuX2dldF9hcnJheT1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD11fHxbXTtyZXR1cm4gdHlwZW9mIGM9PSJvYmplY3QiP2MhPT1udWxsJiZ0eXBlb2YgYy5jb25jYXQ9PSJmdW5jdGlvbiImJihkPWMuY29uY2F0KCkpOnR5cGVvZiBjPT0ic3RyaW5nIiYmKGQ9Yy5zcGxpdCgvW15hLXpBLVowLTlfXC9cLV0rLykpLGR9LGEucHJvdG90eXBlLl9nZXRfYm9vbGVhbj1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD1jPT09dm9pZCAwPyEhdTohIWM7cmV0dXJuIGR9LGEucHJvdG90eXBlLl9nZXRfY2hhcmFjdGVycz1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD11fHwiIjtyZXR1cm4gdHlwZW9mIGM9PSJzdHJpbmciJiYoZD1jLnJlcGxhY2UoL1xcci8sIlxyIikucmVwbGFjZSgvXFxuLyxgCmApLnJlcGxhY2UoL1xcdC8sIgkiKSksZH0sYS5wcm90b3R5cGUuX2dldF9udW1iZXI9ZnVuY3Rpb24obCx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW2xdO3U9cGFyc2VJbnQodSwxMCksaXNOYU4odSkmJih1PTApO3ZhciBkPXBhcnNlSW50KGMsMTApO3JldHVybiBpc05hTihkKSYmKGQ9dSksZH0sYS5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb249ZnVuY3Rpb24obCx1LGMpe3ZhciBkPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdChsLHUsYyk7aWYoZC5sZW5ndGghPT0xKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrbCtgJyBjYW4gb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CmArdStgCllvdSBwYXNzZWQgaW46ICdgK3RoaXMucmF3X29wdGlvbnNbbF0rIiciKTtyZXR1cm4gZFswXX0sYS5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb25fbGlzdD1mdW5jdGlvbihsLHUsYyl7aWYoIXV8fHUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdGlvbiBsaXN0IGNhbm5vdCBiZSBlbXB0eS4iKTtpZihjPWN8fFt1WzBdXSwhdGhpcy5faXNfdmFsaWRfc2VsZWN0aW9uKGMsdSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERlZmF1bHQgVmFsdWUhIik7dmFyIGQ9dGhpcy5fZ2V0X2FycmF5KGwsYyk7aWYoIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihkLHUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrbCtgJyBjYW4gY29udGFpbiBvbmx5IHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpgK3UrYApZb3UgcGFzc2VkIGluOiAnYCt0aGlzLnJhd19vcHRpb25zW2xdKyInIik7cmV0dXJuIGR9LGEucHJvdG90eXBlLl9pc192YWxpZF9zZWxlY3Rpb249ZnVuY3Rpb24obCx1KXtyZXR1cm4gbC5sZW5ndGgmJnUubGVuZ3RoJiYhbC5zb21lKGZ1bmN0aW9uKGMpe3JldHVybiB1LmluZGV4T2YoYyk9PT0tMX0pfTtmdW5jdGlvbiBzKGwsdSl7dmFyIGM9e307bD1vKGwpO3ZhciBkO2ZvcihkIGluIGwpZCE9PXUmJihjW2RdPWxbZF0pO2lmKHUmJmxbdV0pZm9yKGQgaW4gbFt1XSljW2RdPWxbdV1bZF07cmV0dXJuIGN9ZnVuY3Rpb24gbyhsKXt2YXIgdT17fSxjO2ZvcihjIGluIGwpe3ZhciBkPWMucmVwbGFjZSgvLS9nLCJfIik7dVtkXT1sW2NdfXJldHVybiB1fXIuZXhwb3J0cy5PcHRpb25zPWEsci5leHBvcnRzLm5vcm1hbGl6ZU9wdHM9byxyLmV4cG9ydHMubWVyZ2VPcHRzPXN9LCxmdW5jdGlvbihyKXt2YXIgYT1SZWdFeHAucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzdGlja3kiKTtmdW5jdGlvbiBzKG8pe3RoaXMuX19pbnB1dD1vfHwiIix0aGlzLl9faW5wdXRfbGVuZ3RoPXRoaXMuX19pbnB1dC5sZW5ndGgsdGhpcy5fX3Bvc2l0aW9uPTB9cy5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj0wfSxzLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fX3Bvc2l0aW9uPjAmJih0aGlzLl9fcG9zaXRpb24tPTEpfSxzLnByb3RvdHlwZS5oYXNOZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wb3NpdGlvbjx0aGlzLl9faW5wdXRfbGVuZ3RofSxzLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIG89bnVsbDtyZXR1cm4gdGhpcy5oYXNOZXh0KCkmJihvPXRoaXMuX19pbnB1dC5jaGFyQXQodGhpcy5fX3Bvc2l0aW9uKSx0aGlzLl9fcG9zaXRpb24rPTEpLG99LHMucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24obyl7dmFyIGw9bnVsbDtyZXR1cm4gbz1vfHwwLG8rPXRoaXMuX19wb3NpdGlvbixvPj0wJiZvPHRoaXMuX19pbnB1dF9sZW5ndGgmJihsPXRoaXMuX19pbnB1dC5jaGFyQXQobykpLGx9LHMucHJvdG90eXBlLl9fbWF0Y2g9ZnVuY3Rpb24obyxsKXtvLmxhc3RJbmRleD1sO3ZhciB1PW8uZXhlYyh0aGlzLl9faW5wdXQpO3JldHVybiB1JiYhKGEmJm8uc3RpY2t5KSYmdS5pbmRleCE9PWwmJih1PW51bGwpLHV9LHMucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24obyxsKXtyZXR1cm4gbD1sfHwwLGwrPXRoaXMuX19wb3NpdGlvbixsPj0wJiZsPHRoaXMuX19pbnB1dF9sZW5ndGg/ISF0aGlzLl9fbWF0Y2gobyxsKTohMX0scy5wcm90b3R5cGUudGVzdENoYXI9ZnVuY3Rpb24obyxsKXt2YXIgdT10aGlzLnBlZWsobCk7cmV0dXJuIG8ubGFzdEluZGV4PTAsdSE9PW51bGwmJm8udGVzdCh1KX0scy5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX21hdGNoKG8sdGhpcy5fX3Bvc2l0aW9uKTtyZXR1cm4gbD90aGlzLl9fcG9zaXRpb24rPWxbMF0ubGVuZ3RoOmw9bnVsbCxsfSxzLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKG8sbCx1KXt2YXIgYz0iIixkO3JldHVybiBvJiYoZD10aGlzLm1hdGNoKG8pLGQmJihjKz1kWzBdKSksbCYmKGR8fCFvKSYmKGMrPXRoaXMucmVhZFVudGlsKGwsdSkpLGN9LHMucHJvdG90eXBlLnJlYWRVbnRpbD1mdW5jdGlvbihvLGwpe3ZhciB1PSIiLGM9dGhpcy5fX3Bvc2l0aW9uO28ubGFzdEluZGV4PXRoaXMuX19wb3NpdGlvbjt2YXIgZD1vLmV4ZWModGhpcy5fX2lucHV0KTtyZXR1cm4gZD8oYz1kLmluZGV4LGwmJihjKz1kWzBdLmxlbmd0aCkpOmM9dGhpcy5fX2lucHV0X2xlbmd0aCx1PXRoaXMuX19pbnB1dC5zdWJzdHJpbmcodGhpcy5fX3Bvc2l0aW9uLGMpLHRoaXMuX19wb3NpdGlvbj1jLHV9LHMucHJvdG90eXBlLnJlYWRVbnRpbEFmdGVyPWZ1bmN0aW9uKG8pe3JldHVybiB0aGlzLnJlYWRVbnRpbChvLCEwKX0scy5wcm90b3R5cGUuZ2V0X3JlZ2V4cD1mdW5jdGlvbihvLGwpe3ZhciB1PW51bGwsYz0iZyI7cmV0dXJuIGwmJmEmJihjPSJ5IiksdHlwZW9mIG89PSJzdHJpbmciJiZvIT09IiI/dT1uZXcgUmVnRXhwKG8sYyk6byYmKHU9bmV3IFJlZ0V4cChvLnNvdXJjZSxjKSksdX0scy5wcm90b3R5cGUuZ2V0X2xpdGVyYWxfcmVnZXhwPWZ1bmN0aW9uKG8pe3JldHVybiBSZWdFeHAoby5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpKX0scy5wcm90b3R5cGUucGVla1VudGlsQWZ0ZXI9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX3Bvc2l0aW9uLHU9dGhpcy5yZWFkVW50aWxBZnRlcihvKTtyZXR1cm4gdGhpcy5fX3Bvc2l0aW9uPWwsdX0scy5wcm90b3R5cGUubG9va0JhY2s9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX3Bvc2l0aW9uLTE7cmV0dXJuIGw+PW8ubGVuZ3RoJiZ0aGlzLl9faW5wdXQuc3Vic3RyaW5nKGwtby5sZW5ndGgsbCkudG9Mb3dlckNhc2UoKT09PW99LHIuZXhwb3J0cy5JbnB1dFNjYW5uZXI9c30sLCwsLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEocyxvKXtzPXR5cGVvZiBzPT0ic3RyaW5nIj9zOnMuc291cmNlLG89dHlwZW9mIG89PSJzdHJpbmciP286by5zb3VyY2UsdGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybj1uZXcgUmVnRXhwKHMrLyBiZWF1dGlmeSggXHcrWzpdXHcrKSsgLy5zb3VyY2UrbywiZyIpLHRoaXMuX19kaXJlY3RpdmVfcGF0dGVybj0vIChcdyspWzpdKFx3KykvZyx0aGlzLl9fZGlyZWN0aXZlc19lbmRfaWdub3JlX3BhdHRlcm49bmV3IFJlZ0V4cChzKy9cc2JlYXV0aWZ5XHNpZ25vcmU6ZW5kXHMvLnNvdXJjZStvLCJnIil9YS5wcm90b3R5cGUuZ2V0X2RpcmVjdGl2ZXM9ZnVuY3Rpb24ocyl7aWYoIXMubWF0Y2godGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybikpcmV0dXJuIG51bGw7dmFyIG89e307dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmxhc3RJbmRleD0wO2Zvcih2YXIgbD10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhzKTtsOylvW2xbMV1dPWxbMl0sbD10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhzKTtyZXR1cm4gb30sYS5wcm90b3R5cGUucmVhZElnbm9yZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVhZFVudGlsQWZ0ZXIodGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuKX0sci5leHBvcnRzLkRpcmVjdGl2ZXM9YX0sLGZ1bmN0aW9uKHIsYSxzKXt2YXIgbz1zKDE2KS5CZWF1dGlmaWVyLGw9cygxNykuT3B0aW9ucztmdW5jdGlvbiB1KGMsZCl7dmFyIG09bmV3IG8oYyxkKTtyZXR1cm4gbS5iZWF1dGlmeSgpfXIuZXhwb3J0cz11LHIuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBuZXcgbH19LGZ1bmN0aW9uKHIsYSxzKXt2YXIgbz1zKDE3KS5PcHRpb25zLGw9cygyKS5PdXRwdXQsdT1zKDgpLklucHV0U2Nhbm5lcixjPXMoMTMpLkRpcmVjdGl2ZXMsZD1uZXcgYygvXC9cKi8sL1wqXC8vKSxtPS9cclxufFtcclxuXS8sZj0vXHJcbnxbXHJcbl0vZyxiPS9ccy8scD0vKD86XHN8XG4pKy9nLHc9L1wvXCooPzpbXHNcU10qPykoKD86XCpcLyl8JCkvZyx4PS9cL1wvKD86W15cblxyXHUyMDI4XHUyMDI5XSopL2c7ZnVuY3Rpb24gXyh5LEUpe3RoaXMuX3NvdXJjZV90ZXh0PXl8fCIiLHRoaXMuX29wdGlvbnM9bmV3IG8oRSksdGhpcy5fY2g9bnVsbCx0aGlzLl9pbnB1dD1udWxsLHRoaXMuTkVTVEVEX0FUX1JVTEU9eyJAcGFnZSI6ITAsIkBmb250LWZhY2UiOiEwLCJAa2V5ZnJhbWVzIjohMCwiQG1lZGlhIjohMCwiQHN1cHBvcnRzIjohMCwiQGRvY3VtZW50IjohMH0sdGhpcy5DT05ESVRJT05BTF9HUk9VUF9SVUxFPXsiQG1lZGlhIjohMCwiQHN1cHBvcnRzIjohMCwiQGRvY3VtZW50IjohMH19Xy5wcm90b3R5cGUuZWF0U3RyaW5nPWZ1bmN0aW9uKHkpe3ZhciBFPSIiO2Zvcih0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCk7dGhpcy5fY2g7KXtpZihFKz10aGlzLl9jaCx0aGlzLl9jaD09PSJcXCIpRSs9dGhpcy5faW5wdXQubmV4dCgpO2Vsc2UgaWYoeS5pbmRleE9mKHRoaXMuX2NoKSE9PS0xfHx0aGlzLl9jaD09PWAKYClicmVhazt0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCl9cmV0dXJuIEV9LF8ucHJvdG90eXBlLmVhdFdoaXRlc3BhY2U9ZnVuY3Rpb24oeSl7Zm9yKHZhciBFPWIudGVzdCh0aGlzLl9pbnB1dC5wZWVrKCkpLFI9MDtiLnRlc3QodGhpcy5faW5wdXQucGVlaygpKTspdGhpcy5fY2g9dGhpcy5faW5wdXQubmV4dCgpLHkmJnRoaXMuX2NoPT09YApgJiYoUj09PTB8fFI8dGhpcy5fb3B0aW9ucy5tYXhfcHJlc2VydmVfbmV3bGluZXMpJiYoUisrLHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoITApKTtyZXR1cm4gRX0sXy5wcm90b3R5cGUuZm91bmROZXN0ZWRQc2V1ZG9DbGFzcz1mdW5jdGlvbigpe2Zvcih2YXIgeT0wLEU9MSxSPXRoaXMuX2lucHV0LnBlZWsoRSk7Ujspe2lmKFI9PT0ieyIpcmV0dXJuITA7aWYoUj09PSIoIil5Kz0xO2Vsc2UgaWYoUj09PSIpIil7aWYoeT09PTApcmV0dXJuITE7eS09MX1lbHNlIGlmKFI9PT0iOyJ8fFI9PT0ifSIpcmV0dXJuITE7RSsrLFI9dGhpcy5faW5wdXQucGVlayhFKX1yZXR1cm4hMX0sXy5wcm90b3R5cGUucHJpbnRfc3RyaW5nPWZ1bmN0aW9uKHkpe3RoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuX2luZGVudExldmVsKSx0aGlzLl9vdXRwdXQubm9uX2JyZWFraW5nX3NwYWNlPSEwLHRoaXMuX291dHB1dC5hZGRfdG9rZW4oeSl9LF8ucHJvdG90eXBlLnByZXNlcnZlU2luZ2xlU3BhY2U9ZnVuY3Rpb24oeSl7eSYmKHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApfSxfLnByb3RvdHlwZS5pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9pbmRlbnRMZXZlbCsrfSxfLnByb3RvdHlwZS5vdXRkZW50PWZ1bmN0aW9uKCl7dGhpcy5faW5kZW50TGV2ZWw+MCYmdGhpcy5faW5kZW50TGV2ZWwtLX0sXy5wcm90b3R5cGUuYmVhdXRpZnk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vcHRpb25zLmRpc2FibGVkKXJldHVybiB0aGlzLl9zb3VyY2VfdGV4dDt2YXIgeT10aGlzLl9zb3VyY2VfdGV4dCxFPXRoaXMuX29wdGlvbnMuZW9sO0U9PT0iYXV0byImJihFPWAKYCx5JiZtLnRlc3QoeXx8IiIpJiYoRT15Lm1hdGNoKG0pWzBdKSkseT15LnJlcGxhY2UoZixgCmApO3ZhciBSPXkubWF0Y2goL15bXHQgXSovKVswXTt0aGlzLl9vdXRwdXQ9bmV3IGwodGhpcy5fb3B0aW9ucyxSKSx0aGlzLl9pbnB1dD1uZXcgdSh5KSx0aGlzLl9pbmRlbnRMZXZlbD0wLHRoaXMuX25lc3RlZExldmVsPTAsdGhpcy5fY2g9bnVsbDtmb3IodmFyIFA9MCx2PSExLGc9ITEsVD0hMSxxPSExLFM9ITEsaz10aGlzLl9jaCxOLEQsSDtOPXRoaXMuX2lucHV0LnJlYWQocCksRD1OIT09IiIsSD1rLHRoaXMuX2NoPXRoaXMuX2lucHV0Lm5leHQoKSx0aGlzLl9jaD09PSJcXCImJnRoaXMuX2lucHV0Lmhhc05leHQoKSYmKHRoaXMuX2NoKz10aGlzLl9pbnB1dC5uZXh0KCkpLGs9dGhpcy5fY2gsdGhpcy5fY2g7KWlmKHRoaXMuX2NoPT09Ii8iJiZ0aGlzLl9pbnB1dC5wZWVrKCk9PT0iKiIpe3RoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSx0aGlzLl9pbnB1dC5iYWNrKCk7dmFyIEY9dGhpcy5faW5wdXQucmVhZCh3KSxMPWQuZ2V0X2RpcmVjdGl2ZXMoRik7TCYmTC5pZ25vcmU9PT0ic3RhcnQiJiYoRis9ZC5yZWFkSWdub3JlZCh0aGlzLl9pbnB1dCkpLHRoaXMucHJpbnRfc3RyaW5nKEYpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpfWVsc2UgaWYodGhpcy5fY2g9PT0iLyImJnRoaXMuX2lucHV0LnBlZWsoKT09PSIvIil0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMuX2lucHV0LmJhY2soKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9pbnB1dC5yZWFkKHgpKSx0aGlzLmVhdFdoaXRlc3BhY2UoITApO2Vsc2UgaWYodGhpcy5fY2g9PT0iQCIpaWYodGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKEQpLHRoaXMuX2lucHV0LnBlZWsoKT09PSJ7Iil0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCt0aGlzLmVhdFN0cmluZygifSIpKTtlbHNle3RoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTt2YXIgQT10aGlzLl9pbnB1dC5wZWVrVW50aWxBZnRlcigvWzogLDt7fSgpW1xdXC89JyJdL2cpO0EubWF0Y2goL1sgOl0kLykmJihBPXRoaXMuZWF0U3RyaW5nKCI6ICIpLnJlcGxhY2UoL1xzJC8sIiIpLHRoaXMucHJpbnRfc3RyaW5nKEEpLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApLEE9QS5yZXBsYWNlKC9ccyQvLCIiKSxBPT09ImV4dGVuZCI/cT0hMDpBPT09ImltcG9ydCImJihTPSEwKSxBIGluIHRoaXMuTkVTVEVEX0FUX1JVTEU/KHRoaXMuX25lc3RlZExldmVsKz0xLEEgaW4gdGhpcy5DT05ESVRJT05BTF9HUk9VUF9SVUxFJiYoVD0hMCkpOiF2JiZQPT09MCYmQS5pbmRleE9mKCI6IikhPT0tMSYmKGc9ITAsdGhpcy5pbmRlbnQoKSl9ZWxzZSB0aGlzLl9jaD09PSIjIiYmdGhpcy5faW5wdXQucGVlaygpPT09InsiPyh0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoRCksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2grdGhpcy5lYXRTdHJpbmcoIn0iKSkpOnRoaXMuX2NoPT09InsiPyhnJiYoZz0hMSx0aGlzLm91dGRlbnQoKSksVD8oVD0hMSx2PXRoaXMuX2luZGVudExldmVsPj10aGlzLl9uZXN0ZWRMZXZlbCk6dj10aGlzLl9pbmRlbnRMZXZlbD49dGhpcy5fbmVzdGVkTGV2ZWwtMSx0aGlzLl9vcHRpb25zLm5ld2xpbmVfYmV0d2Vlbl9ydWxlcyYmdiYmdGhpcy5fb3V0cHV0LnByZXZpb3VzX2xpbmUmJnRoaXMuX291dHB1dC5wcmV2aW91c19saW5lLml0ZW0oLTEpIT09InsiJiZ0aGlzLl9vdXRwdXQuZW5zdXJlX2VtcHR5X2xpbmVfYWJvdmUoIi8iLCIsIiksdGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCx0aGlzLl9vcHRpb25zLmJyYWNlX3N0eWxlPT09ImV4cGFuZCI/KHRoaXMuX291dHB1dC5hZGRfbmV3X2xpbmUoKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5pbmRlbnQoKSx0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLl9pbmRlbnRMZXZlbCkpOih0aGlzLmluZGVudCgpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCkpOnRoaXMuX2NoPT09In0iPyh0aGlzLm91dGRlbnQoKSx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCksSD09PSJ7IiYmdGhpcy5fb3V0cHV0LnRyaW0oITApLFM9ITEscT0hMSxnJiYodGhpcy5vdXRkZW50KCksZz0hMSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHY9ITEsdGhpcy5fbmVzdGVkTGV2ZWwmJnRoaXMuX25lc3RlZExldmVsLS0sdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCksdGhpcy5fb3B0aW9ucy5uZXdsaW5lX2JldHdlZW5fcnVsZXMmJiF0aGlzLl9vdXRwdXQuanVzdF9hZGRlZF9ibGFua2xpbmUoKSYmdGhpcy5faW5wdXQucGVlaygpIT09In0iJiZ0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCEwKSk6dGhpcy5fY2g9PT0iOiI/KHZ8fFQpJiYhKHRoaXMuX2lucHV0Lmxvb2tCYWNrKCImIil8fHRoaXMuZm91bmROZXN0ZWRQc2V1ZG9DbGFzcygpKSYmIXRoaXMuX2lucHV0Lmxvb2tCYWNrKCIoIikmJiFxJiZQPT09MD8odGhpcy5wcmludF9zdHJpbmcoIjoiKSxnfHwoZz0hMCx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5pbmRlbnQoKSkpOih0aGlzLl9pbnB1dC5sb29rQmFjaygiICIpJiYodGhpcy5fb3V0cHV0LnNwYWNlX2JlZm9yZV90b2tlbj0hMCksdGhpcy5faW5wdXQucGVlaygpPT09IjoiPyh0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCksdGhpcy5wcmludF9zdHJpbmcoIjo6IikpOnRoaXMucHJpbnRfc3RyaW5nKCI6IikpOnRoaXMuX2NoPT09JyInfHx0aGlzLl9jaD09PSInIj8odGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKEQpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoK3RoaXMuZWF0U3RyaW5nKHRoaXMuX2NoKSksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSk6dGhpcy5fY2g9PT0iOyI/UD09PTA/KGcmJih0aGlzLm91dGRlbnQoKSxnPSExKSxxPSExLFM9ITEsdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5faW5wdXQucGVlaygpIT09Ii8iJiZ0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKCkpOih0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCEwKSx0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPSEwKTp0aGlzLl9jaD09PSIoIj90aGlzLl9pbnB1dC5sb29rQmFjaygidXJsIik/KHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSx0aGlzLmVhdFdoaXRlc3BhY2UoKSxQKyssdGhpcy5pbmRlbnQoKSx0aGlzLl9jaD10aGlzLl9pbnB1dC5uZXh0KCksdGhpcy5fY2g9PT0iKSJ8fHRoaXMuX2NoPT09JyInfHx0aGlzLl9jaD09PSInIj90aGlzLl9pbnB1dC5iYWNrKCk6dGhpcy5fY2gmJih0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCt0aGlzLmVhdFN0cmluZygiKSIpKSxQJiYoUC0tLHRoaXMub3V0ZGVudCgpKSkpOih0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoRCksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSgpLFArKyx0aGlzLmluZGVudCgpKTp0aGlzLl9jaD09PSIpIj8oUCYmKFAtLSx0aGlzLm91dGRlbnQoKSksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpKTp0aGlzLl9jaD09PSIsIj8odGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuZWF0V2hpdGVzcGFjZSghMCksdGhpcy5fb3B0aW9ucy5zZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZSYmIWcmJlA9PT0wJiYhUyYmIXE/dGhpcy5fb3V0cHV0LmFkZF9uZXdfbGluZSgpOnRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApOih0aGlzLl9jaD09PSI+Inx8dGhpcy5fY2g9PT0iKyJ8fHRoaXMuX2NoPT09In4iKSYmIWcmJlA9PT0wP3RoaXMuX29wdGlvbnMuc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3I/KHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITAsdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpLHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApOih0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCksdGhpcy5lYXRXaGl0ZXNwYWNlKCksdGhpcy5fY2gmJmIudGVzdCh0aGlzLl9jaCkmJih0aGlzLl9jaD0iIikpOnRoaXMuX2NoPT09Il0iP3RoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKTp0aGlzLl9jaD09PSJbIj8odGhpcy5wcmVzZXJ2ZVNpbmdsZVNwYWNlKEQpLHRoaXMucHJpbnRfc3RyaW5nKHRoaXMuX2NoKSk6dGhpcy5fY2g9PT0iPSI/KHRoaXMuZWF0V2hpdGVzcGFjZSgpLHRoaXMucHJpbnRfc3RyaW5nKCI9IiksYi50ZXN0KHRoaXMuX2NoKSYmKHRoaXMuX2NoPSIiKSk6dGhpcy5fY2g9PT0iISImJiF0aGlzLl9pbnB1dC5sb29rQmFjaygiXFwiKT8odGhpcy5wcmludF9zdHJpbmcoIiAiKSx0aGlzLnByaW50X3N0cmluZyh0aGlzLl9jaCkpOih0aGlzLnByZXNlcnZlU2luZ2xlU3BhY2UoRCksdGhpcy5wcmludF9zdHJpbmcodGhpcy5fY2gpKTt2YXIgTT10aGlzLl9vdXRwdXQuZ2V0X2NvZGUoRSk7cmV0dXJuIE19LHIuZXhwb3J0cy5CZWF1dGlmaWVyPV99LGZ1bmN0aW9uKHIsYSxzKXt2YXIgbz1zKDYpLk9wdGlvbnM7ZnVuY3Rpb24gbCh1KXtvLmNhbGwodGhpcyx1LCJjc3MiKSx0aGlzLnNlbGVjdG9yX3NlcGFyYXRvcl9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJzZWxlY3Rvcl9zZXBhcmF0b3JfbmV3bGluZSIsITApLHRoaXMubmV3bGluZV9iZXR3ZWVuX3J1bGVzPXRoaXMuX2dldF9ib29sZWFuKCJuZXdsaW5lX2JldHdlZW5fcnVsZXMiLCEwKTt2YXIgYz10aGlzLl9nZXRfYm9vbGVhbigic3BhY2VfYXJvdW5kX3NlbGVjdG9yX3NlcGFyYXRvciIpO3RoaXMuc3BhY2VfYXJvdW5kX2NvbWJpbmF0b3I9dGhpcy5fZ2V0X2Jvb2xlYW4oInNwYWNlX2Fyb3VuZF9jb21iaW5hdG9yIil8fGM7dmFyIGQ9dGhpcy5fZ2V0X3NlbGVjdGlvbl9saXN0KCJicmFjZV9zdHlsZSIsWyJjb2xsYXBzZSIsImV4cGFuZCIsImVuZC1leHBhbmQiLCJub25lIiwicHJlc2VydmUtaW5saW5lIl0pO3RoaXMuYnJhY2Vfc3R5bGU9ImNvbGxhcHNlIjtmb3IodmFyIG09MDttPGQubGVuZ3RoO20rKylkW21dIT09ImV4cGFuZCI/dGhpcy5icmFjZV9zdHlsZT0iY29sbGFwc2UiOnRoaXMuYnJhY2Vfc3R5bGU9ZFttXX1sLnByb3RvdHlwZT1uZXcgbyxyLmV4cG9ydHMuT3B0aW9ucz1sfV0sdD17fTtmdW5jdGlvbiBuKHIpe3ZhciBhPXRbcl07aWYoYSE9PXZvaWQgMClyZXR1cm4gYS5leHBvcnRzO3ZhciBzPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKHMscy5leHBvcnRzLG4pLHMuZXhwb3J0c312YXIgaT1uKDE1KTt0cz1pfSkoKTt2YXIgUnU9dHMsbnM7KGZ1bmN0aW9uKCl7dmFyIGU9WywsZnVuY3Rpb24ocil7ZnVuY3Rpb24gYShsKXt0aGlzLl9fcGFyZW50PWwsdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD0wLHRoaXMuX19pbmRlbnRfY291bnQ9LTEsdGhpcy5fX2FsaWdubWVudF9jb3VudD0wLHRoaXMuX193cmFwX3BvaW50X2luZGV4PTAsdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50PTAsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50PS0xLHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudD0wLHRoaXMuX19pdGVtcz1bXX1hLnByb3RvdHlwZS5jbG9uZV9lbXB0eT1mdW5jdGlvbigpe3ZhciBsPW5ldyBhKHRoaXMuX19wYXJlbnQpO3JldHVybiBsLnNldF9pbmRlbnQodGhpcy5fX2luZGVudF9jb3VudCx0aGlzLl9fYWxpZ25tZW50X2NvdW50KSxsfSxhLnByb3RvdHlwZS5pdGVtPWZ1bmN0aW9uKGwpe3JldHVybiBsPDA/dGhpcy5fX2l0ZW1zW3RoaXMuX19pdGVtcy5sZW5ndGgrbF06dGhpcy5fX2l0ZW1zW2xdfSxhLnByb3RvdHlwZS5oYXNfbWF0Y2g9ZnVuY3Rpb24obCl7Zm9yKHZhciB1PXRoaXMuX19pdGVtcy5sZW5ndGgtMTt1Pj0wO3UtLSlpZih0aGlzLl9faXRlbXNbdV0ubWF0Y2gobCkpcmV0dXJuITA7cmV0dXJuITF9LGEucHJvdG90eXBlLnNldF9pbmRlbnQ9ZnVuY3Rpb24obCx1KXt0aGlzLmlzX2VtcHR5KCkmJih0aGlzLl9faW5kZW50X2NvdW50PWx8fDAsdGhpcy5fX2FsaWdubWVudF9jb3VudD11fHwwLHRoaXMuX19jaGFyYWN0ZXJfY291bnQ9dGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3NpemUodGhpcy5fX2luZGVudF9jb3VudCx0aGlzLl9fYWxpZ25tZW50X2NvdW50KSl9LGEucHJvdG90eXBlLl9zZXRfd3JhcF9wb2ludD1mdW5jdGlvbigpe3RoaXMuX19wYXJlbnQud3JhcF9saW5lX2xlbmd0aCYmKHRoaXMuX193cmFwX3BvaW50X2luZGV4PXRoaXMuX19pdGVtcy5sZW5ndGgsdGhpcy5fX3dyYXBfcG9pbnRfY2hhcmFjdGVyX2NvdW50PXRoaXMuX19jaGFyYWN0ZXJfY291bnQsdGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50PXRoaXMuX19wYXJlbnQubmV4dF9saW5lLl9faW5kZW50X2NvdW50LHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudD10aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2FsaWdubWVudF9jb3VudCl9LGEucHJvdG90eXBlLl9zaG91bGRfd3JhcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fd3JhcF9wb2ludF9pbmRleCYmdGhpcy5fX2NoYXJhY3Rlcl9jb3VudD50aGlzLl9fcGFyZW50LndyYXBfbGluZV9sZW5ndGgmJnRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudD50aGlzLl9fcGFyZW50Lm5leHRfbGluZS5fX2NoYXJhY3Rlcl9jb3VudH0sYS5wcm90b3R5cGUuX2FsbG93X3dyYXA9ZnVuY3Rpb24oKXtpZih0aGlzLl9zaG91bGRfd3JhcCgpKXt0aGlzLl9fcGFyZW50LmFkZF9uZXdfbGluZSgpO3ZhciBsPXRoaXMuX19wYXJlbnQuY3VycmVudF9saW5lO3JldHVybiBsLnNldF9pbmRlbnQodGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50LHRoaXMuX193cmFwX3BvaW50X2FsaWdubWVudF9jb3VudCksbC5fX2l0ZW1zPXRoaXMuX19pdGVtcy5zbGljZSh0aGlzLl9fd3JhcF9wb2ludF9pbmRleCksdGhpcy5fX2l0ZW1zPXRoaXMuX19pdGVtcy5zbGljZSgwLHRoaXMuX193cmFwX3BvaW50X2luZGV4KSxsLl9fY2hhcmFjdGVyX2NvdW50Kz10aGlzLl9fY2hhcmFjdGVyX2NvdW50LXRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudCx0aGlzLl9fY2hhcmFjdGVyX2NvdW50PXRoaXMuX193cmFwX3BvaW50X2NoYXJhY3Rlcl9jb3VudCxsLl9faXRlbXNbMF09PT0iICImJihsLl9faXRlbXMuc3BsaWNlKDAsMSksbC5fX2NoYXJhY3Rlcl9jb3VudC09MSksITB9cmV0dXJuITF9LGEucHJvdG90eXBlLmlzX2VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pdGVtcy5sZW5ndGg9PT0wfSxhLnByb3RvdHlwZS5sYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKT9udWxsOnRoaXMuX19pdGVtc1t0aGlzLl9faXRlbXMubGVuZ3RoLTFdfSxhLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGwpe3RoaXMuX19pdGVtcy5wdXNoKGwpO3ZhciB1PWwubGFzdEluZGV4T2YoYApgKTt1IT09LTE/dGhpcy5fX2NoYXJhY3Rlcl9jb3VudD1sLmxlbmd0aC11OnRoaXMuX19jaGFyYWN0ZXJfY291bnQrPWwubGVuZ3RofSxhLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt2YXIgbD1udWxsO3JldHVybiB0aGlzLmlzX2VtcHR5KCl8fChsPXRoaXMuX19pdGVtcy5wb3AoKSx0aGlzLl9fY2hhcmFjdGVyX2NvdW50LT1sLmxlbmd0aCksbH0sYS5wcm90b3R5cGUuX3JlbW92ZV9pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9faW5kZW50X2NvdW50PjAmJih0aGlzLl9faW5kZW50X2NvdW50LT0xLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPXRoaXMuX19wYXJlbnQuaW5kZW50X3NpemUpfSxhLnByb3RvdHlwZS5fcmVtb3ZlX3dyYXBfaW5kZW50PWZ1bmN0aW9uKCl7dGhpcy5fX3dyYXBfcG9pbnRfaW5kZW50X2NvdW50PjAmJih0aGlzLl9fd3JhcF9wb2ludF9pbmRlbnRfY291bnQtPTEpfSxhLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxhc3QoKT09PSIgIjspdGhpcy5fX2l0ZW1zLnBvcCgpLHRoaXMuX19jaGFyYWN0ZXJfY291bnQtPTF9LGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGw9IiI7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKT90aGlzLl9fcGFyZW50LmluZGVudF9lbXB0eV9saW5lcyYmKGw9dGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3N0cmluZyh0aGlzLl9faW5kZW50X2NvdW50KSk6KGw9dGhpcy5fX3BhcmVudC5nZXRfaW5kZW50X3N0cmluZyh0aGlzLl9faW5kZW50X2NvdW50LHRoaXMuX19hbGlnbm1lbnRfY291bnQpLGwrPXRoaXMuX19pdGVtcy5qb2luKCIiKSksbH07ZnVuY3Rpb24gcyhsLHUpe3RoaXMuX19jYWNoZT1bIiJdLHRoaXMuX19pbmRlbnRfc2l6ZT1sLmluZGVudF9zaXplLHRoaXMuX19pbmRlbnRfc3RyaW5nPWwuaW5kZW50X2NoYXIsbC5pbmRlbnRfd2l0aF90YWJzfHwodGhpcy5fX2luZGVudF9zdHJpbmc9bmV3IEFycmF5KGwuaW5kZW50X3NpemUrMSkuam9pbihsLmluZGVudF9jaGFyKSksdT11fHwiIixsLmluZGVudF9sZXZlbD4wJiYodT1uZXcgQXJyYXkobC5pbmRlbnRfbGV2ZWwrMSkuam9pbih0aGlzLl9faW5kZW50X3N0cmluZykpLHRoaXMuX19iYXNlX3N0cmluZz11LHRoaXMuX19iYXNlX3N0cmluZ19sZW5ndGg9dS5sZW5ndGh9cy5wcm90b3R5cGUuZ2V0X2luZGVudF9zaXplPWZ1bmN0aW9uKGwsdSl7dmFyIGM9dGhpcy5fX2Jhc2Vfc3RyaW5nX2xlbmd0aDtyZXR1cm4gdT11fHwwLGw8MCYmKGM9MCksYys9bCp0aGlzLl9faW5kZW50X3NpemUsYys9dSxjfSxzLnByb3RvdHlwZS5nZXRfaW5kZW50X3N0cmluZz1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMuX19iYXNlX3N0cmluZztyZXR1cm4gdT11fHwwLGw8MCYmKGw9MCxjPSIiKSx1Kz1sKnRoaXMuX19pbmRlbnRfc2l6ZSx0aGlzLl9fZW5zdXJlX2NhY2hlKHUpLGMrPXRoaXMuX19jYWNoZVt1XSxjfSxzLnByb3RvdHlwZS5fX2Vuc3VyZV9jYWNoZT1mdW5jdGlvbihsKXtmb3IoO2w+PXRoaXMuX19jYWNoZS5sZW5ndGg7KXRoaXMuX19hZGRfY29sdW1uKCl9LHMucHJvdG90eXBlLl9fYWRkX2NvbHVtbj1mdW5jdGlvbigpe3ZhciBsPXRoaXMuX19jYWNoZS5sZW5ndGgsdT0wLGM9IiI7dGhpcy5fX2luZGVudF9zaXplJiZsPj10aGlzLl9faW5kZW50X3NpemUmJih1PU1hdGguZmxvb3IobC90aGlzLl9faW5kZW50X3NpemUpLGwtPXUqdGhpcy5fX2luZGVudF9zaXplLGM9bmV3IEFycmF5KHUrMSkuam9pbih0aGlzLl9faW5kZW50X3N0cmluZykpLGwmJihjKz1uZXcgQXJyYXkobCsxKS5qb2luKCIgIikpLHRoaXMuX19jYWNoZS5wdXNoKGMpfTtmdW5jdGlvbiBvKGwsdSl7dGhpcy5fX2luZGVudF9jYWNoZT1uZXcgcyhsLHUpLHRoaXMucmF3PSExLHRoaXMuX2VuZF93aXRoX25ld2xpbmU9bC5lbmRfd2l0aF9uZXdsaW5lLHRoaXMuaW5kZW50X3NpemU9bC5pbmRlbnRfc2l6ZSx0aGlzLndyYXBfbGluZV9sZW5ndGg9bC53cmFwX2xpbmVfbGVuZ3RoLHRoaXMuaW5kZW50X2VtcHR5X2xpbmVzPWwuaW5kZW50X2VtcHR5X2xpbmVzLHRoaXMuX19saW5lcz1bXSx0aGlzLnByZXZpb3VzX2xpbmU9bnVsbCx0aGlzLmN1cnJlbnRfbGluZT1udWxsLHRoaXMubmV4dF9saW5lPW5ldyBhKHRoaXMpLHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuPSExLHRoaXMubm9uX2JyZWFraW5nX3NwYWNlPSExLHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZD0hMSx0aGlzLl9fYWRkX291dHB1dGxpbmUoKX1vLnByb3RvdHlwZS5fX2FkZF9vdXRwdXRsaW5lPWZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91c19saW5lPXRoaXMuY3VycmVudF9saW5lLHRoaXMuY3VycmVudF9saW5lPXRoaXMubmV4dF9saW5lLmNsb25lX2VtcHR5KCksdGhpcy5fX2xpbmVzLnB1c2godGhpcy5jdXJyZW50X2xpbmUpfSxvLnByb3RvdHlwZS5nZXRfbGluZV9udW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2xpbmVzLmxlbmd0aH0sby5wcm90b3R5cGUuZ2V0X2luZGVudF9zdHJpbmc9ZnVuY3Rpb24obCx1KXtyZXR1cm4gdGhpcy5fX2luZGVudF9jYWNoZS5nZXRfaW5kZW50X3N0cmluZyhsLHUpfSxvLnByb3RvdHlwZS5nZXRfaW5kZW50X3NpemU9ZnVuY3Rpb24obCx1KXtyZXR1cm4gdGhpcy5fX2luZGVudF9jYWNoZS5nZXRfaW5kZW50X3NpemUobCx1KX0sby5wcm90b3R5cGUuaXNfZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wcmV2aW91c19saW5lJiZ0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpfSxvLnByb3RvdHlwZS5hZGRfbmV3X2xpbmU9ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8IWwmJnRoaXMuanVzdF9hZGRlZF9uZXdsaW5lKCk/ITE6KHRoaXMucmF3fHx0aGlzLl9fYWRkX291dHB1dGxpbmUoKSwhMCl9LG8ucHJvdG90eXBlLmdldF9jb2RlPWZ1bmN0aW9uKGwpe3RoaXMudHJpbSghMCk7dmFyIHU9dGhpcy5jdXJyZW50X2xpbmUucG9wKCk7dSYmKHVbdS5sZW5ndGgtMV09PT1gCmAmJih1PXUucmVwbGFjZSgvXG4rJC9nLCIiKSksdGhpcy5jdXJyZW50X2xpbmUucHVzaCh1KSksdGhpcy5fZW5kX3dpdGhfbmV3bGluZSYmdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7dmFyIGM9dGhpcy5fX2xpbmVzLmpvaW4oYApgKTtyZXR1cm4gbCE9PWAKYCYmKGM9Yy5yZXBsYWNlKC9bXG5dL2csbCkpLGN9LG8ucHJvdG90eXBlLnNldF93cmFwX3BvaW50PWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50X2xpbmUuX3NldF93cmFwX3BvaW50KCl9LG8ucHJvdG90eXBlLnNldF9pbmRlbnQ9ZnVuY3Rpb24obCx1KXtyZXR1cm4gbD1sfHwwLHU9dXx8MCx0aGlzLm5leHRfbGluZS5zZXRfaW5kZW50KGwsdSksdGhpcy5fX2xpbmVzLmxlbmd0aD4xPyh0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KGwsdSksITApOih0aGlzLmN1cnJlbnRfbGluZS5zZXRfaW5kZW50KCksITEpfSxvLnByb3RvdHlwZS5hZGRfcmF3X3Rva2VuPWZ1bmN0aW9uKGwpe2Zvcih2YXIgdT0wO3U8bC5uZXdsaW5lczt1KyspdGhpcy5fX2FkZF9vdXRwdXRsaW5lKCk7dGhpcy5jdXJyZW50X2xpbmUuc2V0X2luZGVudCgtMSksdGhpcy5jdXJyZW50X2xpbmUucHVzaChsLndoaXRlc3BhY2VfYmVmb3JlKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGwudGV4dCksdGhpcy5zcGFjZV9iZWZvcmVfdG9rZW49ITEsdGhpcy5ub25fYnJlYWtpbmdfc3BhY2U9ITEsdGhpcy5wcmV2aW91c190b2tlbl93cmFwcGVkPSExfSxvLnByb3RvdHlwZS5hZGRfdG9rZW49ZnVuY3Rpb24obCl7dGhpcy5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW4oKSx0aGlzLmN1cnJlbnRfbGluZS5wdXNoKGwpLHRoaXMuc3BhY2VfYmVmb3JlX3Rva2VuPSExLHRoaXMubm9uX2JyZWFraW5nX3NwYWNlPSExLHRoaXMucHJldmlvdXNfdG9rZW5fd3JhcHBlZD10aGlzLmN1cnJlbnRfbGluZS5fYWxsb3dfd3JhcCgpfSxvLnByb3RvdHlwZS5fX2FkZF9zcGFjZV9iZWZvcmVfdG9rZW49ZnVuY3Rpb24oKXt0aGlzLnNwYWNlX2JlZm9yZV90b2tlbiYmIXRoaXMuanVzdF9hZGRlZF9uZXdsaW5lKCkmJih0aGlzLm5vbl9icmVha2luZ19zcGFjZXx8dGhpcy5zZXRfd3JhcF9wb2ludCgpLHRoaXMuY3VycmVudF9saW5lLnB1c2goIiAiKSl9LG8ucHJvdG90eXBlLnJlbW92ZV9pbmRlbnQ9ZnVuY3Rpb24obCl7Zm9yKHZhciB1PXRoaXMuX19saW5lcy5sZW5ndGg7bDx1Oyl0aGlzLl9fbGluZXNbbF0uX3JlbW92ZV9pbmRlbnQoKSxsKys7dGhpcy5jdXJyZW50X2xpbmUuX3JlbW92ZV93cmFwX2luZGVudCgpfSxvLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKGwpe2ZvcihsPWw9PT12b2lkIDA/ITE6bCx0aGlzLmN1cnJlbnRfbGluZS50cmltKCk7bCYmdGhpcy5fX2xpbmVzLmxlbmd0aD4xJiZ0aGlzLmN1cnJlbnRfbGluZS5pc19lbXB0eSgpOyl0aGlzLl9fbGluZXMucG9wKCksdGhpcy5jdXJyZW50X2xpbmU9dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMV0sdGhpcy5jdXJyZW50X2xpbmUudHJpbSgpO3RoaXMucHJldmlvdXNfbGluZT10aGlzLl9fbGluZXMubGVuZ3RoPjE/dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMl06bnVsbH0sby5wcm90b3R5cGUuanVzdF9hZGRlZF9uZXdsaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudF9saW5lLmlzX2VtcHR5KCl9LG8ucHJvdG90eXBlLmp1c3RfYWRkZWRfYmxhbmtsaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNfZW1wdHkoKXx8dGhpcy5jdXJyZW50X2xpbmUuaXNfZW1wdHkoKSYmdGhpcy5wcmV2aW91c19saW5lLmlzX2VtcHR5KCl9LG8ucHJvdG90eXBlLmVuc3VyZV9lbXB0eV9saW5lX2Fib3ZlPWZ1bmN0aW9uKGwsdSl7Zm9yKHZhciBjPXRoaXMuX19saW5lcy5sZW5ndGgtMjtjPj0wOyl7dmFyIGQ9dGhpcy5fX2xpbmVzW2NdO2lmKGQuaXNfZW1wdHkoKSlicmVhaztpZihkLml0ZW0oMCkuaW5kZXhPZihsKSE9PTAmJmQuaXRlbSgtMSkhPT11KXt0aGlzLl9fbGluZXMuc3BsaWNlKGMrMSwwLG5ldyBhKHRoaXMpKSx0aGlzLnByZXZpb3VzX2xpbmU9dGhpcy5fX2xpbmVzW3RoaXMuX19saW5lcy5sZW5ndGgtMl07YnJlYWt9Yy0tfX0sci5leHBvcnRzLk91dHB1dD1vfSxmdW5jdGlvbihyKXtmdW5jdGlvbiBhKHMsbyxsLHUpe3RoaXMudHlwZT1zLHRoaXMudGV4dD1vLHRoaXMuY29tbWVudHNfYmVmb3JlPW51bGwsdGhpcy5uZXdsaW5lcz1sfHwwLHRoaXMud2hpdGVzcGFjZV9iZWZvcmU9dXx8IiIsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGwsdGhpcy5vcGVuZWQ9bnVsbCx0aGlzLmNsb3NlZD1udWxsLHRoaXMuZGlyZWN0aXZlcz1udWxsfXIuZXhwb3J0cy5Ub2tlbj1hfSwsLGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEobCx1KXt0aGlzLnJhd19vcHRpb25zPXMobCx1KSx0aGlzLmRpc2FibGVkPXRoaXMuX2dldF9ib29sZWFuKCJkaXNhYmxlZCIpLHRoaXMuZW9sPXRoaXMuX2dldF9jaGFyYWN0ZXJzKCJlb2wiLCJhdXRvIiksdGhpcy5lbmRfd2l0aF9uZXdsaW5lPXRoaXMuX2dldF9ib29sZWFuKCJlbmRfd2l0aF9uZXdsaW5lIiksdGhpcy5pbmRlbnRfc2l6ZT10aGlzLl9nZXRfbnVtYmVyKCJpbmRlbnRfc2l6ZSIsNCksdGhpcy5pbmRlbnRfY2hhcj10aGlzLl9nZXRfY2hhcmFjdGVycygiaW5kZW50X2NoYXIiLCIgIiksdGhpcy5pbmRlbnRfbGV2ZWw9dGhpcy5fZ2V0X251bWJlcigiaW5kZW50X2xldmVsIiksdGhpcy5wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfYm9vbGVhbigicHJlc2VydmVfbmV3bGluZXMiLCEwKSx0aGlzLm1heF9wcmVzZXJ2ZV9uZXdsaW5lcz10aGlzLl9nZXRfbnVtYmVyKCJtYXhfcHJlc2VydmVfbmV3bGluZXMiLDMyNzg2KSx0aGlzLnByZXNlcnZlX25ld2xpbmVzfHwodGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXM9MCksdGhpcy5pbmRlbnRfd2l0aF90YWJzPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfd2l0aF90YWJzIix0aGlzLmluZGVudF9jaGFyPT09IgkiKSx0aGlzLmluZGVudF93aXRoX3RhYnMmJih0aGlzLmluZGVudF9jaGFyPSIJIix0aGlzLmluZGVudF9zaXplPT09MSYmKHRoaXMuaW5kZW50X3NpemU9NCkpLHRoaXMud3JhcF9saW5lX2xlbmd0aD10aGlzLl9nZXRfbnVtYmVyKCJ3cmFwX2xpbmVfbGVuZ3RoIix0aGlzLl9nZXRfbnVtYmVyKCJtYXhfY2hhciIpKSx0aGlzLmluZGVudF9lbXB0eV9saW5lcz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2VtcHR5X2xpbmVzIiksdGhpcy50ZW1wbGF0aW5nPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdCgidGVtcGxhdGluZyIsWyJhdXRvIiwibm9uZSIsImRqYW5nbyIsImVyYiIsImhhbmRsZWJhcnMiLCJwaHAiLCJzbWFydHkiXSxbImF1dG8iXSl9YS5wcm90b3R5cGUuX2dldF9hcnJheT1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD11fHxbXTtyZXR1cm4gdHlwZW9mIGM9PSJvYmplY3QiP2MhPT1udWxsJiZ0eXBlb2YgYy5jb25jYXQ9PSJmdW5jdGlvbiImJihkPWMuY29uY2F0KCkpOnR5cGVvZiBjPT0ic3RyaW5nIiYmKGQ9Yy5zcGxpdCgvW15hLXpBLVowLTlfXC9cLV0rLykpLGR9LGEucHJvdG90eXBlLl9nZXRfYm9vbGVhbj1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD1jPT09dm9pZCAwPyEhdTohIWM7cmV0dXJuIGR9LGEucHJvdG90eXBlLl9nZXRfY2hhcmFjdGVycz1mdW5jdGlvbihsLHUpe3ZhciBjPXRoaXMucmF3X29wdGlvbnNbbF0sZD11fHwiIjtyZXR1cm4gdHlwZW9mIGM9PSJzdHJpbmciJiYoZD1jLnJlcGxhY2UoL1xcci8sIlxyIikucmVwbGFjZSgvXFxuLyxgCmApLnJlcGxhY2UoL1xcdC8sIgkiKSksZH0sYS5wcm90b3R5cGUuX2dldF9udW1iZXI9ZnVuY3Rpb24obCx1KXt2YXIgYz10aGlzLnJhd19vcHRpb25zW2xdO3U9cGFyc2VJbnQodSwxMCksaXNOYU4odSkmJih1PTApO3ZhciBkPXBhcnNlSW50KGMsMTApO3JldHVybiBpc05hTihkKSYmKGQ9dSksZH0sYS5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb249ZnVuY3Rpb24obCx1LGMpe3ZhciBkPXRoaXMuX2dldF9zZWxlY3Rpb25fbGlzdChsLHUsYyk7aWYoZC5sZW5ndGghPT0xKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrbCtgJyBjYW4gb25seSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CmArdStgCllvdSBwYXNzZWQgaW46ICdgK3RoaXMucmF3X29wdGlvbnNbbF0rIiciKTtyZXR1cm4gZFswXX0sYS5wcm90b3R5cGUuX2dldF9zZWxlY3Rpb25fbGlzdD1mdW5jdGlvbihsLHUsYyl7aWYoIXV8fHUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdGlvbiBsaXN0IGNhbm5vdCBiZSBlbXB0eS4iKTtpZihjPWN8fFt1WzBdXSwhdGhpcy5faXNfdmFsaWRfc2VsZWN0aW9uKGMsdSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERlZmF1bHQgVmFsdWUhIik7dmFyIGQ9dGhpcy5fZ2V0X2FycmF5KGwsYyk7aWYoIXRoaXMuX2lzX3ZhbGlkX3NlbGVjdGlvbihkLHUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHRpb24gVmFsdWU6IFRoZSBvcHRpb24gJyIrbCtgJyBjYW4gY29udGFpbiBvbmx5IHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpgK3UrYApZb3UgcGFzc2VkIGluOiAnYCt0aGlzLnJhd19vcHRpb25zW2xdKyInIik7cmV0dXJuIGR9LGEucHJvdG90eXBlLl9pc192YWxpZF9zZWxlY3Rpb249ZnVuY3Rpb24obCx1KXtyZXR1cm4gbC5sZW5ndGgmJnUubGVuZ3RoJiYhbC5zb21lKGZ1bmN0aW9uKGMpe3JldHVybiB1LmluZGV4T2YoYyk9PT0tMX0pfTtmdW5jdGlvbiBzKGwsdSl7dmFyIGM9e307bD1vKGwpO3ZhciBkO2ZvcihkIGluIGwpZCE9PXUmJihjW2RdPWxbZF0pO2lmKHUmJmxbdV0pZm9yKGQgaW4gbFt1XSljW2RdPWxbdV1bZF07cmV0dXJuIGN9ZnVuY3Rpb24gbyhsKXt2YXIgdT17fSxjO2ZvcihjIGluIGwpe3ZhciBkPWMucmVwbGFjZSgvLS9nLCJfIik7dVtkXT1sW2NdfXJldHVybiB1fXIuZXhwb3J0cy5PcHRpb25zPWEsci5leHBvcnRzLm5vcm1hbGl6ZU9wdHM9byxyLmV4cG9ydHMubWVyZ2VPcHRzPXN9LCxmdW5jdGlvbihyKXt2YXIgYT1SZWdFeHAucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJzdGlja3kiKTtmdW5jdGlvbiBzKG8pe3RoaXMuX19pbnB1dD1vfHwiIix0aGlzLl9faW5wdXRfbGVuZ3RoPXRoaXMuX19pbnB1dC5sZW5ndGgsdGhpcy5fX3Bvc2l0aW9uPTB9cy5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj0wfSxzLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5fX3Bvc2l0aW9uPjAmJih0aGlzLl9fcG9zaXRpb24tPTEpfSxzLnByb3RvdHlwZS5oYXNOZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19wb3NpdGlvbjx0aGlzLl9faW5wdXRfbGVuZ3RofSxzLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIG89bnVsbDtyZXR1cm4gdGhpcy5oYXNOZXh0KCkmJihvPXRoaXMuX19pbnB1dC5jaGFyQXQodGhpcy5fX3Bvc2l0aW9uKSx0aGlzLl9fcG9zaXRpb24rPTEpLG99LHMucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24obyl7dmFyIGw9bnVsbDtyZXR1cm4gbz1vfHwwLG8rPXRoaXMuX19wb3NpdGlvbixvPj0wJiZvPHRoaXMuX19pbnB1dF9sZW5ndGgmJihsPXRoaXMuX19pbnB1dC5jaGFyQXQobykpLGx9LHMucHJvdG90eXBlLl9fbWF0Y2g9ZnVuY3Rpb24obyxsKXtvLmxhc3RJbmRleD1sO3ZhciB1PW8uZXhlYyh0aGlzLl9faW5wdXQpO3JldHVybiB1JiYhKGEmJm8uc3RpY2t5KSYmdS5pbmRleCE9PWwmJih1PW51bGwpLHV9LHMucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24obyxsKXtyZXR1cm4gbD1sfHwwLGwrPXRoaXMuX19wb3NpdGlvbixsPj0wJiZsPHRoaXMuX19pbnB1dF9sZW5ndGg/ISF0aGlzLl9fbWF0Y2gobyxsKTohMX0scy5wcm90b3R5cGUudGVzdENoYXI9ZnVuY3Rpb24obyxsKXt2YXIgdT10aGlzLnBlZWsobCk7cmV0dXJuIG8ubGFzdEluZGV4PTAsdSE9PW51bGwmJm8udGVzdCh1KX0scy5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX21hdGNoKG8sdGhpcy5fX3Bvc2l0aW9uKTtyZXR1cm4gbD90aGlzLl9fcG9zaXRpb24rPWxbMF0ubGVuZ3RoOmw9bnVsbCxsfSxzLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKG8sbCx1KXt2YXIgYz0iIixkO3JldHVybiBvJiYoZD10aGlzLm1hdGNoKG8pLGQmJihjKz1kWzBdKSksbCYmKGR8fCFvKSYmKGMrPXRoaXMucmVhZFVudGlsKGwsdSkpLGN9LHMucHJvdG90eXBlLnJlYWRVbnRpbD1mdW5jdGlvbihvLGwpe3ZhciB1PSIiLGM9dGhpcy5fX3Bvc2l0aW9uO28ubGFzdEluZGV4PXRoaXMuX19wb3NpdGlvbjt2YXIgZD1vLmV4ZWModGhpcy5fX2lucHV0KTtyZXR1cm4gZD8oYz1kLmluZGV4LGwmJihjKz1kWzBdLmxlbmd0aCkpOmM9dGhpcy5fX2lucHV0X2xlbmd0aCx1PXRoaXMuX19pbnB1dC5zdWJzdHJpbmcodGhpcy5fX3Bvc2l0aW9uLGMpLHRoaXMuX19wb3NpdGlvbj1jLHV9LHMucHJvdG90eXBlLnJlYWRVbnRpbEFmdGVyPWZ1bmN0aW9uKG8pe3JldHVybiB0aGlzLnJlYWRVbnRpbChvLCEwKX0scy5wcm90b3R5cGUuZ2V0X3JlZ2V4cD1mdW5jdGlvbihvLGwpe3ZhciB1PW51bGwsYz0iZyI7cmV0dXJuIGwmJmEmJihjPSJ5IiksdHlwZW9mIG89PSJzdHJpbmciJiZvIT09IiI/dT1uZXcgUmVnRXhwKG8sYyk6byYmKHU9bmV3IFJlZ0V4cChvLnNvdXJjZSxjKSksdX0scy5wcm90b3R5cGUuZ2V0X2xpdGVyYWxfcmVnZXhwPWZ1bmN0aW9uKG8pe3JldHVybiBSZWdFeHAoby5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpKX0scy5wcm90b3R5cGUucGVla1VudGlsQWZ0ZXI9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX3Bvc2l0aW9uLHU9dGhpcy5yZWFkVW50aWxBZnRlcihvKTtyZXR1cm4gdGhpcy5fX3Bvc2l0aW9uPWwsdX0scy5wcm90b3R5cGUubG9va0JhY2s9ZnVuY3Rpb24obyl7dmFyIGw9dGhpcy5fX3Bvc2l0aW9uLTE7cmV0dXJuIGw+PW8ubGVuZ3RoJiZ0aGlzLl9faW5wdXQuc3Vic3RyaW5nKGwtby5sZW5ndGgsbCkudG9Mb3dlckNhc2UoKT09PW99LHIuZXhwb3J0cy5JbnB1dFNjYW5uZXI9c30sZnVuY3Rpb24ocixhLHMpe3ZhciBvPXMoOCkuSW5wdXRTY2FubmVyLGw9cygzKS5Ub2tlbix1PXMoMTApLlRva2VuU3RyZWFtLGM9cygxMSkuV2hpdGVzcGFjZVBhdHRlcm4sZD17U1RBUlQ6IlRLX1NUQVJUIixSQVc6IlRLX1JBVyIsRU9GOiJUS19FT0YifSxtPWZ1bmN0aW9uKGYsYil7dGhpcy5faW5wdXQ9bmV3IG8oZiksdGhpcy5fb3B0aW9ucz1ifHx7fSx0aGlzLl9fdG9rZW5zPW51bGwsdGhpcy5fcGF0dGVybnM9e30sdGhpcy5fcGF0dGVybnMud2hpdGVzcGFjZT1uZXcgYyh0aGlzLl9pbnB1dCl9O20ucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKCl7dGhpcy5faW5wdXQucmVzdGFydCgpLHRoaXMuX190b2tlbnM9bmV3IHUsdGhpcy5fcmVzZXQoKTtmb3IodmFyIGYsYj1uZXcgbChkLlNUQVJULCIiKSxwPW51bGwsdz1bXSx4PW5ldyB1O2IudHlwZSE9PWQuRU9GOyl7Zm9yKGY9dGhpcy5fZ2V0X25leHRfdG9rZW4oYixwKTt0aGlzLl9pc19jb21tZW50KGYpOyl4LmFkZChmKSxmPXRoaXMuX2dldF9uZXh0X3Rva2VuKGIscCk7eC5pc0VtcHR5KCl8fChmLmNvbW1lbnRzX2JlZm9yZT14LHg9bmV3IHUpLGYucGFyZW50PXAsdGhpcy5faXNfb3BlbmluZyhmKT8ody5wdXNoKHApLHA9Zik6cCYmdGhpcy5faXNfY2xvc2luZyhmLHApJiYoZi5vcGVuZWQ9cCxwLmNsb3NlZD1mLHA9dy5wb3AoKSxmLnBhcmVudD1wKSxmLnByZXZpb3VzPWIsYi5uZXh0PWYsdGhpcy5fX3Rva2Vucy5hZGQoZiksYj1mfXJldHVybiB0aGlzLl9fdG9rZW5zfSxtLnByb3RvdHlwZS5faXNfZmlyc3RfdG9rZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3Rva2Vucy5pc0VtcHR5KCl9LG0ucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe30sbS5wcm90b3R5cGUuX2dldF9uZXh0X3Rva2VuPWZ1bmN0aW9uKGYsYil7dGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt2YXIgcD10aGlzLl9pbnB1dC5yZWFkKC8uKy9nKTtyZXR1cm4gcD90aGlzLl9jcmVhdGVfdG9rZW4oZC5SQVcscCk6dGhpcy5fY3JlYXRlX3Rva2VuKGQuRU9GLCIiKX0sbS5wcm90b3R5cGUuX2lzX2NvbW1lbnQ9ZnVuY3Rpb24oZil7cmV0dXJuITF9LG0ucHJvdG90eXBlLl9pc19vcGVuaW5nPWZ1bmN0aW9uKGYpe3JldHVybiExfSxtLnByb3RvdHlwZS5faXNfY2xvc2luZz1mdW5jdGlvbihmLGIpe3JldHVybiExfSxtLnByb3RvdHlwZS5fY3JlYXRlX3Rva2VuPWZ1bmN0aW9uKGYsYil7dmFyIHA9bmV3IGwoZixiLHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2UubmV3bGluZV9jb3VudCx0aGlzLl9wYXR0ZXJucy53aGl0ZXNwYWNlLndoaXRlc3BhY2VfYmVmb3JlX3Rva2VuKTtyZXR1cm4gcH0sbS5wcm90b3R5cGUuX3JlYWRXaGl0ZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhdHRlcm5zLndoaXRlc3BhY2UucmVhZCgpfSxyLmV4cG9ydHMuVG9rZW5pemVyPW0sci5leHBvcnRzLlRPS0VOPWR9LGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEocyl7dGhpcy5fX3Rva2Vucz1bXSx0aGlzLl9fdG9rZW5zX2xlbmd0aD10aGlzLl9fdG9rZW5zLmxlbmd0aCx0aGlzLl9fcG9zaXRpb249MCx0aGlzLl9fcGFyZW50X3Rva2VuPXN9YS5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMuX19wb3NpdGlvbj0wfSxhLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX190b2tlbnNfbGVuZ3RoPT09MH0sYS5wcm90b3R5cGUuaGFzTmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcG9zaXRpb248dGhpcy5fX3Rva2Vuc19sZW5ndGh9LGEucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgcz1udWxsO3JldHVybiB0aGlzLmhhc05leHQoKSYmKHM9dGhpcy5fX3Rva2Vuc1t0aGlzLl9fcG9zaXRpb25dLHRoaXMuX19wb3NpdGlvbis9MSksc30sYS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbihzKXt2YXIgbz1udWxsO3JldHVybiBzPXN8fDAscys9dGhpcy5fX3Bvc2l0aW9uLHM+PTAmJnM8dGhpcy5fX3Rva2Vuc19sZW5ndGgmJihvPXRoaXMuX190b2tlbnNbc10pLG99LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbihzKXt0aGlzLl9fcGFyZW50X3Rva2VuJiYocy5wYXJlbnQ9dGhpcy5fX3BhcmVudF90b2tlbiksdGhpcy5fX3Rva2Vucy5wdXNoKHMpLHRoaXMuX190b2tlbnNfbGVuZ3RoKz0xfSxyLmV4cG9ydHMuVG9rZW5TdHJlYW09YX0sZnVuY3Rpb24ocixhLHMpe3ZhciBvPXMoMTIpLlBhdHRlcm47ZnVuY3Rpb24gbCh1LGMpe28uY2FsbCh0aGlzLHUsYyksYz90aGlzLl9saW5lX3JlZ2V4cD10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKGMuX2xpbmVfcmVnZXhwKTp0aGlzLl9fc2V0X3doaXRlc3BhY2VfcGF0dGVybnMoIiIsIiIpLHRoaXMubmV3bGluZV9jb3VudD0wLHRoaXMud2hpdGVzcGFjZV9iZWZvcmVfdG9rZW49IiJ9bC5wcm90b3R5cGU9bmV3IG8sbC5wcm90b3R5cGUuX19zZXRfd2hpdGVzcGFjZV9wYXR0ZXJucz1mdW5jdGlvbih1LGMpe3UrPSJcXHQgIixjKz0iXFxuXFxyIix0aGlzLl9tYXRjaF9wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAoIlsiK3UrYysiXSsiLCEwKSx0aGlzLl9uZXdsaW5lX3JlZ2V4cD10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKCJcXHJcXG58WyIrYysiXSIpfSxsLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKCl7dGhpcy5uZXdsaW5lX2NvdW50PTAsdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbj0iIjt2YXIgdT10aGlzLl9pbnB1dC5yZWFkKHRoaXMuX21hdGNoX3BhdHRlcm4pO2lmKHU9PT0iICIpdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbj0iICI7ZWxzZSBpZih1KXt2YXIgYz10aGlzLl9fc3BsaXQodGhpcy5fbmV3bGluZV9yZWdleHAsdSk7dGhpcy5uZXdsaW5lX2NvdW50PWMubGVuZ3RoLTEsdGhpcy53aGl0ZXNwYWNlX2JlZm9yZV90b2tlbj1jW3RoaXMubmV3bGluZV9jb3VudF19cmV0dXJuIHV9LGwucHJvdG90eXBlLm1hdGNoaW5nPWZ1bmN0aW9uKHUsYyl7dmFyIGQ9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIGQuX19zZXRfd2hpdGVzcGFjZV9wYXR0ZXJucyh1LGMpLGQuX3VwZGF0ZSgpLGR9LGwucHJvdG90eXBlLl9jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGwodGhpcy5faW5wdXQsdGhpcyl9LGwucHJvdG90eXBlLl9fc3BsaXQ9ZnVuY3Rpb24odSxjKXt1Lmxhc3RJbmRleD0wO2Zvcih2YXIgZD0wLG09W10sZj11LmV4ZWMoYyk7ZjspbS5wdXNoKGMuc3Vic3RyaW5nKGQsZi5pbmRleCkpLGQ9Zi5pbmRleCtmWzBdLmxlbmd0aCxmPXUuZXhlYyhjKTtyZXR1cm4gZDxjLmxlbmd0aD9tLnB1c2goYy5zdWJzdHJpbmcoZCxjLmxlbmd0aCkpOm0ucHVzaCgiIiksbX0sci5leHBvcnRzLldoaXRlc3BhY2VQYXR0ZXJuPWx9LGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEocyxvKXt0aGlzLl9pbnB1dD1zLHRoaXMuX3N0YXJ0aW5nX3BhdHRlcm49bnVsbCx0aGlzLl9tYXRjaF9wYXR0ZXJuPW51bGwsdGhpcy5fdW50aWxfcGF0dGVybj1udWxsLHRoaXMuX3VudGlsX2FmdGVyPSExLG8mJih0aGlzLl9zdGFydGluZ19wYXR0ZXJuPXRoaXMuX2lucHV0LmdldF9yZWdleHAoby5fc3RhcnRpbmdfcGF0dGVybiwhMCksdGhpcy5fbWF0Y2hfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKG8uX21hdGNoX3BhdHRlcm4sITApLHRoaXMuX3VudGlsX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChvLl91bnRpbF9wYXR0ZXJuKSx0aGlzLl91bnRpbF9hZnRlcj1vLl91bnRpbF9hZnRlcil9YS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbigpe3ZhciBzPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybik7cmV0dXJuKCF0aGlzLl9zdGFydGluZ19wYXR0ZXJufHxzKSYmKHMrPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybix0aGlzLl91bnRpbF9wYXR0ZXJuLHRoaXMuX3VudGlsX2FmdGVyKSksc30sYS5wcm90b3R5cGUucmVhZF9tYXRjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLl9tYXRjaF9wYXR0ZXJuKX0sYS5wcm90b3R5cGUudW50aWxfYWZ0ZXI9ZnVuY3Rpb24ocyl7dmFyIG89dGhpcy5fY3JlYXRlKCk7cmV0dXJuIG8uX3VudGlsX2FmdGVyPSEwLG8uX3VudGlsX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChzKSxvLl91cGRhdGUoKSxvfSxhLnByb3RvdHlwZS51bnRpbD1mdW5jdGlvbihzKXt2YXIgbz10aGlzLl9jcmVhdGUoKTtyZXR1cm4gby5fdW50aWxfYWZ0ZXI9ITEsby5fdW50aWxfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHMpLG8uX3VwZGF0ZSgpLG99LGEucHJvdG90eXBlLnN0YXJ0aW5nX3dpdGg9ZnVuY3Rpb24ocyl7dmFyIG89dGhpcy5fY3JlYXRlKCk7cmV0dXJuIG8uX3N0YXJ0aW5nX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cChzLCEwKSxvLl91cGRhdGUoKSxvfSxhLnByb3RvdHlwZS5tYXRjaGluZz1mdW5jdGlvbihzKXt2YXIgbz10aGlzLl9jcmVhdGUoKTtyZXR1cm4gby5fbWF0Y2hfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKHMsITApLG8uX3VwZGF0ZSgpLG99LGEucHJvdG90eXBlLl9jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEodGhpcy5faW5wdXQsdGhpcyl9LGEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt9LHIuZXhwb3J0cy5QYXR0ZXJuPWF9LGZ1bmN0aW9uKHIpe2Z1bmN0aW9uIGEocyxvKXtzPXR5cGVvZiBzPT0ic3RyaW5nIj9zOnMuc291cmNlLG89dHlwZW9mIG89PSJzdHJpbmciP286by5zb3VyY2UsdGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybj1uZXcgUmVnRXhwKHMrLyBiZWF1dGlmeSggXHcrWzpdXHcrKSsgLy5zb3VyY2UrbywiZyIpLHRoaXMuX19kaXJlY3RpdmVfcGF0dGVybj0vIChcdyspWzpdKFx3KykvZyx0aGlzLl9fZGlyZWN0aXZlc19lbmRfaWdub3JlX3BhdHRlcm49bmV3IFJlZ0V4cChzKy9cc2JlYXV0aWZ5XHNpZ25vcmU6ZW5kXHMvLnNvdXJjZStvLCJnIil9YS5wcm90b3R5cGUuZ2V0X2RpcmVjdGl2ZXM9ZnVuY3Rpb24ocyl7aWYoIXMubWF0Y2godGhpcy5fX2RpcmVjdGl2ZXNfYmxvY2tfcGF0dGVybikpcmV0dXJuIG51bGw7dmFyIG89e307dGhpcy5fX2RpcmVjdGl2ZV9wYXR0ZXJuLmxhc3RJbmRleD0wO2Zvcih2YXIgbD10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhzKTtsOylvW2xbMV1dPWxbMl0sbD10aGlzLl9fZGlyZWN0aXZlX3BhdHRlcm4uZXhlYyhzKTtyZXR1cm4gb30sYS5wcm90b3R5cGUucmVhZElnbm9yZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVhZFVudGlsQWZ0ZXIodGhpcy5fX2RpcmVjdGl2ZXNfZW5kX2lnbm9yZV9wYXR0ZXJuKX0sci5leHBvcnRzLkRpcmVjdGl2ZXM9YX0sZnVuY3Rpb24ocixhLHMpe3ZhciBvPXMoMTIpLlBhdHRlcm4sbD17ZGphbmdvOiExLGVyYjohMSxoYW5kbGViYXJzOiExLHBocDohMSxzbWFydHk6ITF9O2Z1bmN0aW9uIHUoYyxkKXtvLmNhbGwodGhpcyxjLGQpLHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuPW51bGwsdGhpcy5fZGlzYWJsZWQ9T2JqZWN0LmFzc2lnbih7fSxsKSx0aGlzLl9leGNsdWRlZD1PYmplY3QuYXNzaWduKHt9LGwpLGQmJih0aGlzLl9fdGVtcGxhdGVfcGF0dGVybj10aGlzLl9pbnB1dC5nZXRfcmVnZXhwKGQuX190ZW1wbGF0ZV9wYXR0ZXJuKSx0aGlzLl9leGNsdWRlZD1PYmplY3QuYXNzaWduKHRoaXMuX2V4Y2x1ZGVkLGQuX2V4Y2x1ZGVkKSx0aGlzLl9kaXNhYmxlZD1PYmplY3QuYXNzaWduKHRoaXMuX2Rpc2FibGVkLGQuX2Rpc2FibGVkKSk7dmFyIG09bmV3IG8oYyk7dGhpcy5fX3BhdHRlcm5zPXtoYW5kbGViYXJzX2NvbW1lbnQ6bS5zdGFydGluZ193aXRoKC97eyEtLS8pLnVudGlsX2FmdGVyKC8tLX19LyksaGFuZGxlYmFyc191bmVzY2FwZWQ6bS5zdGFydGluZ193aXRoKC97e3svKS51bnRpbF9hZnRlcigvfX19LyksaGFuZGxlYmFyczptLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LykscGhwOm0uc3RhcnRpbmdfd2l0aCgvPFw/KD86Wz0gXXxwaHApLykudW50aWxfYWZ0ZXIoL1w/Pi8pLGVyYjptLnN0YXJ0aW5nX3dpdGgoLzwlW14lXS8pLnVudGlsX2FmdGVyKC9bXiVdJT4vKSxkamFuZ286bS5zdGFydGluZ193aXRoKC97JS8pLnVudGlsX2FmdGVyKC8lfS8pLGRqYW5nb192YWx1ZTptLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LyksZGphbmdvX2NvbW1lbnQ6bS5zdGFydGluZ193aXRoKC97Iy8pLnVudGlsX2FmdGVyKC8jfS8pLHNtYXJ0eTptLnN0YXJ0aW5nX3dpdGgoL3soPz1bXn17XHNcbl0pLykudW50aWxfYWZ0ZXIoL1teXHNcbl19Lyksc21hcnR5X2NvbW1lbnQ6bS5zdGFydGluZ193aXRoKC97XCovKS51bnRpbF9hZnRlcigvXCp9Lyksc21hcnR5X2xpdGVyYWw6bS5zdGFydGluZ193aXRoKC97bGl0ZXJhbH0vKS51bnRpbF9hZnRlcigve1wvbGl0ZXJhbH0vKX19dS5wcm90b3R5cGU9bmV3IG8sdS5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdSh0aGlzLl9pbnB1dCx0aGlzKX0sdS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX19zZXRfdGVtcGxhdGVkX3BhdHRlcm4oKX0sdS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbihjKXt2YXIgZD10aGlzLl9jcmVhdGUoKTtyZXR1cm4gZC5fZGlzYWJsZWRbY109ITAsZC5fdXBkYXRlKCksZH0sdS5wcm90b3R5cGUucmVhZF9vcHRpb25zPWZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMuX2NyZWF0ZSgpO2Zvcih2YXIgbSBpbiBsKWQuX2Rpc2FibGVkW21dPWMudGVtcGxhdGluZy5pbmRleE9mKG0pPT09LTE7cmV0dXJuIGQuX3VwZGF0ZSgpLGR9LHUucHJvdG90eXBlLmV4Y2x1ZGU9ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5fY3JlYXRlKCk7cmV0dXJuIGQuX2V4Y2x1ZGVkW2NdPSEwLGQuX3VwZGF0ZSgpLGR9LHUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oKXt2YXIgYz0iIjt0aGlzLl9tYXRjaF9wYXR0ZXJuP2M9dGhpcy5faW5wdXQucmVhZCh0aGlzLl9zdGFydGluZ19wYXR0ZXJuKTpjPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fc3RhcnRpbmdfcGF0dGVybix0aGlzLl9fdGVtcGxhdGVfcGF0dGVybik7Zm9yKHZhciBkPXRoaXMuX3JlYWRfdGVtcGxhdGUoKTtkOyl0aGlzLl9tYXRjaF9wYXR0ZXJuP2QrPXRoaXMuX2lucHV0LnJlYWQodGhpcy5fbWF0Y2hfcGF0dGVybik6ZCs9dGhpcy5faW5wdXQucmVhZFVudGlsKHRoaXMuX190ZW1wbGF0ZV9wYXR0ZXJuKSxjKz1kLGQ9dGhpcy5fcmVhZF90ZW1wbGF0ZSgpO3JldHVybiB0aGlzLl91bnRpbF9hZnRlciYmKGMrPXRoaXMuX2lucHV0LnJlYWRVbnRpbEFmdGVyKHRoaXMuX3VudGlsX3BhdHRlcm4pKSxjfSx1LnByb3RvdHlwZS5fX3NldF90ZW1wbGF0ZWRfcGF0dGVybj1mdW5jdGlvbigpe3ZhciBjPVtdO3RoaXMuX2Rpc2FibGVkLnBocHx8Yy5wdXNoKHRoaXMuX19wYXR0ZXJucy5waHAuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSx0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzfHxjLnB1c2godGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnMuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSx0aGlzLl9kaXNhYmxlZC5lcmJ8fGMucHVzaCh0aGlzLl9fcGF0dGVybnMuZXJiLl9zdGFydGluZ19wYXR0ZXJuLnNvdXJjZSksdGhpcy5fZGlzYWJsZWQuZGphbmdvfHwoYy5wdXNoKHRoaXMuX19wYXR0ZXJucy5kamFuZ28uX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSxjLnB1c2godGhpcy5fX3BhdHRlcm5zLmRqYW5nb192YWx1ZS5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLGMucHVzaCh0aGlzLl9fcGF0dGVybnMuZGphbmdvX2NvbW1lbnQuX3N0YXJ0aW5nX3BhdHRlcm4uc291cmNlKSksdGhpcy5fZGlzYWJsZWQuc21hcnR5fHxjLnB1c2godGhpcy5fX3BhdHRlcm5zLnNtYXJ0eS5fc3RhcnRpbmdfcGF0dGVybi5zb3VyY2UpLHRoaXMuX3VudGlsX3BhdHRlcm4mJmMucHVzaCh0aGlzLl91bnRpbF9wYXR0ZXJuLnNvdXJjZSksdGhpcy5fX3RlbXBsYXRlX3BhdHRlcm49dGhpcy5faW5wdXQuZ2V0X3JlZ2V4cCgiKD86IitjLmpvaW4oInwiKSsiKSIpfSx1LnByb3RvdHlwZS5fcmVhZF90ZW1wbGF0ZT1mdW5jdGlvbigpe3ZhciBjPSIiLGQ9dGhpcy5faW5wdXQucGVlaygpO2lmKGQ9PT0iPCIpe3ZhciBtPXRoaXMuX2lucHV0LnBlZWsoMSk7IXRoaXMuX2Rpc2FibGVkLnBocCYmIXRoaXMuX2V4Y2x1ZGVkLnBocCYmbT09PSI/IiYmKGM9Y3x8dGhpcy5fX3BhdHRlcm5zLnBocC5yZWFkKCkpLCF0aGlzLl9kaXNhYmxlZC5lcmImJiF0aGlzLl9leGNsdWRlZC5lcmImJm09PT0iJSImJihjPWN8fHRoaXMuX19wYXR0ZXJucy5lcmIucmVhZCgpKX1lbHNlIGQ9PT0ieyImJighdGhpcy5fZGlzYWJsZWQuaGFuZGxlYmFycyYmIXRoaXMuX2V4Y2x1ZGVkLmhhbmRsZWJhcnMmJihjPWN8fHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX2NvbW1lbnQucmVhZCgpLGM9Y3x8dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfdW5lc2NhcGVkLnJlYWQoKSxjPWN8fHRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzLnJlYWQoKSksdGhpcy5fZGlzYWJsZWQuZGphbmdvfHwoIXRoaXMuX2V4Y2x1ZGVkLmRqYW5nbyYmIXRoaXMuX2V4Y2x1ZGVkLmhhbmRsZWJhcnMmJihjPWN8fHRoaXMuX19wYXR0ZXJucy5kamFuZ29fdmFsdWUucmVhZCgpKSx0aGlzLl9leGNsdWRlZC5kamFuZ298fChjPWN8fHRoaXMuX19wYXR0ZXJucy5kamFuZ29fY29tbWVudC5yZWFkKCksYz1jfHx0aGlzLl9fcGF0dGVybnMuZGphbmdvLnJlYWQoKSkpLHRoaXMuX2Rpc2FibGVkLnNtYXJ0eXx8dGhpcy5fZGlzYWJsZWQuZGphbmdvJiZ0aGlzLl9kaXNhYmxlZC5oYW5kbGViYXJzJiYoYz1jfHx0aGlzLl9fcGF0dGVybnMuc21hcnR5X2NvbW1lbnQucmVhZCgpLGM9Y3x8dGhpcy5fX3BhdHRlcm5zLnNtYXJ0eV9saXRlcmFsLnJlYWQoKSxjPWN8fHRoaXMuX19wYXR0ZXJucy5zbWFydHkucmVhZCgpKSk7cmV0dXJuIGN9LHIuZXhwb3J0cy5UZW1wbGF0YWJsZVBhdHRlcm49dX0sLCwsZnVuY3Rpb24ocixhLHMpe3ZhciBvPXMoMTkpLkJlYXV0aWZpZXIsbD1zKDIwKS5PcHRpb25zO2Z1bmN0aW9uIHUoYyxkLG0sZil7dmFyIGI9bmV3IG8oYyxkLG0sZik7cmV0dXJuIGIuYmVhdXRpZnkoKX1yLmV4cG9ydHM9dSxyLmV4cG9ydHMuZGVmYXVsdE9wdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx9fSxmdW5jdGlvbihyLGEscyl7dmFyIG89cygyMCkuT3B0aW9ucyxsPXMoMikuT3V0cHV0LHU9cygyMSkuVG9rZW5pemVyLGM9cygyMSkuVE9LRU4sZD0vXHJcbnxbXHJcbl0vLG09L1xyXG58W1xyXG5dL2csZj1mdW5jdGlvbih2LGcpe3RoaXMuaW5kZW50X2xldmVsPTAsdGhpcy5hbGlnbm1lbnRfc2l6ZT0wLHRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzPXYubWF4X3ByZXNlcnZlX25ld2xpbmVzLHRoaXMucHJlc2VydmVfbmV3bGluZXM9di5wcmVzZXJ2ZV9uZXdsaW5lcyx0aGlzLl9vdXRwdXQ9bmV3IGwodixnKX07Zi5wcm90b3R5cGUuY3VycmVudF9saW5lX2hhc19tYXRjaD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5fb3V0cHV0LmN1cnJlbnRfbGluZS5oYXNfbWF0Y2godil9LGYucHJvdG90eXBlLnNldF9zcGFjZV9iZWZvcmVfdG9rZW49ZnVuY3Rpb24odixnKXt0aGlzLl9vdXRwdXQuc3BhY2VfYmVmb3JlX3Rva2VuPXYsdGhpcy5fb3V0cHV0Lm5vbl9icmVha2luZ19zcGFjZT1nfSxmLnByb3RvdHlwZS5zZXRfd3JhcF9wb2ludD1mdW5jdGlvbigpe3RoaXMuX291dHB1dC5zZXRfaW5kZW50KHRoaXMuaW5kZW50X2xldmVsLHRoaXMuYWxpZ25tZW50X3NpemUpLHRoaXMuX291dHB1dC5zZXRfd3JhcF9wb2ludCgpfSxmLnByb3RvdHlwZS5hZGRfcmF3X3Rva2VuPWZ1bmN0aW9uKHYpe3RoaXMuX291dHB1dC5hZGRfcmF3X3Rva2VuKHYpfSxmLnByb3RvdHlwZS5wcmludF9wcmVzZXJ2ZWRfbmV3bGluZXM9ZnVuY3Rpb24odil7dmFyIGc9MDt2LnR5cGUhPT1jLlRFWFQmJnYucHJldmlvdXMudHlwZSE9PWMuVEVYVCYmKGc9di5uZXdsaW5lcz8xOjApLHRoaXMucHJlc2VydmVfbmV3bGluZXMmJihnPXYubmV3bGluZXM8dGhpcy5tYXhfcHJlc2VydmVfbmV3bGluZXMrMT92Lm5ld2xpbmVzOnRoaXMubWF4X3ByZXNlcnZlX25ld2xpbmVzKzEpO2Zvcih2YXIgVD0wO1Q8ZztUKyspdGhpcy5wcmludF9uZXdsaW5lKFQ+MCk7cmV0dXJuIGchPT0wfSxmLnByb3RvdHlwZS50cmF2ZXJzZV93aGl0ZXNwYWNlPWZ1bmN0aW9uKHYpe3JldHVybiB2LndoaXRlc3BhY2VfYmVmb3JlfHx2Lm5ld2xpbmVzPyh0aGlzLnByaW50X3ByZXNlcnZlZF9uZXdsaW5lcyh2KXx8KHRoaXMuX291dHB1dC5zcGFjZV9iZWZvcmVfdG9rZW49ITApLCEwKTohMX0sZi5wcm90b3R5cGUucHJldmlvdXNfdG9rZW5fd3JhcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vdXRwdXQucHJldmlvdXNfdG9rZW5fd3JhcHBlZH0sZi5wcm90b3R5cGUucHJpbnRfbmV3bGluZT1mdW5jdGlvbih2KXt0aGlzLl9vdXRwdXQuYWRkX25ld19saW5lKHYpfSxmLnByb3RvdHlwZS5wcmludF90b2tlbj1mdW5jdGlvbih2KXt2LnRleHQmJih0aGlzLl9vdXRwdXQuc2V0X2luZGVudCh0aGlzLmluZGVudF9sZXZlbCx0aGlzLmFsaWdubWVudF9zaXplKSx0aGlzLl9vdXRwdXQuYWRkX3Rva2VuKHYudGV4dCkpfSxmLnByb3RvdHlwZS5pbmRlbnQ9ZnVuY3Rpb24oKXt0aGlzLmluZGVudF9sZXZlbCsrfSxmLnByb3RvdHlwZS5nZXRfZnVsbF9pbmRlbnQ9ZnVuY3Rpb24odil7cmV0dXJuIHY9dGhpcy5pbmRlbnRfbGV2ZWwrKHZ8fDApLHY8MT8iIjp0aGlzLl9vdXRwdXQuZ2V0X2luZGVudF9zdHJpbmcodil9O3ZhciBiPWZ1bmN0aW9uKHYpe2Zvcih2YXIgZz1udWxsLFQ9di5uZXh0O1QudHlwZSE9PWMuRU9GJiZ2LmNsb3NlZCE9PVQ7KXtpZihULnR5cGU9PT1jLkFUVFJJQlVURSYmVC50ZXh0PT09InR5cGUiKXtULm5leHQmJlQubmV4dC50eXBlPT09Yy5FUVVBTFMmJlQubmV4dC5uZXh0JiZULm5leHQubmV4dC50eXBlPT09Yy5WQUxVRSYmKGc9VC5uZXh0Lm5leHQudGV4dCk7YnJlYWt9VD1ULm5leHR9cmV0dXJuIGd9LHA9ZnVuY3Rpb24odixnKXt2YXIgVD1udWxsLHE9bnVsbDtyZXR1cm4gZy5jbG9zZWQ/KHY9PT0ic2NyaXB0Ij9UPSJ0ZXh0L2phdmFzY3JpcHQiOnY9PT0ic3R5bGUiJiYoVD0idGV4dC9jc3MiKSxUPWIoZyl8fFQsVC5zZWFyY2goInRleHQvY3NzIik+LTE/cT0iY3NzIjpULnNlYXJjaCgvbW9kdWxlfCgodGV4dHxhcHBsaWNhdGlvbnxkb2pvKVwvKHgtKT8oamF2YXNjcmlwdHxlY21hc2NyaXB0fGpzY3JpcHR8bGl2ZXNjcmlwdHwobGRcKyk/anNvbnxtZXRob2R8YXNwZWN0KSkvKT4tMT9xPSJqYXZhc2NyaXB0IjpULnNlYXJjaCgvKHRleHR8YXBwbGljYXRpb258ZG9qbylcLyh4LSk/KGh0bWwpLyk+LTE/cT0iaHRtbCI6VC5zZWFyY2goL3Rlc3RcL251bGwvKT4tMSYmKHE9Im51bGwiKSxxKTpudWxsfTtmdW5jdGlvbiB3KHYsZyl7cmV0dXJuIGcuaW5kZXhPZih2KSE9PS0xfWZ1bmN0aW9uIHgodixnLFQpe3RoaXMucGFyZW50PXZ8fG51bGwsdGhpcy50YWc9Zz9nLnRhZ19uYW1lOiIiLHRoaXMuaW5kZW50X2xldmVsPVR8fDAsdGhpcy5wYXJzZXJfdG9rZW49Z3x8bnVsbH1mdW5jdGlvbiBfKHYpe3RoaXMuX3ByaW50ZXI9dix0aGlzLl9jdXJyZW50X2ZyYW1lPW51bGx9Xy5wcm90b3R5cGUuZ2V0X3BhcnNlcl90b2tlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50X2ZyYW1lP3RoaXMuX2N1cnJlbnRfZnJhbWUucGFyc2VyX3Rva2VuOm51bGx9LF8ucHJvdG90eXBlLnJlY29yZF90YWc9ZnVuY3Rpb24odil7dmFyIGc9bmV3IHgodGhpcy5fY3VycmVudF9mcmFtZSx2LHRoaXMuX3ByaW50ZXIuaW5kZW50X2xldmVsKTt0aGlzLl9jdXJyZW50X2ZyYW1lPWd9LF8ucHJvdG90eXBlLl90cnlfcG9wX2ZyYW1lPWZ1bmN0aW9uKHYpe3ZhciBnPW51bGw7cmV0dXJuIHYmJihnPXYucGFyc2VyX3Rva2VuLHRoaXMuX3ByaW50ZXIuaW5kZW50X2xldmVsPXYuaW5kZW50X2xldmVsLHRoaXMuX2N1cnJlbnRfZnJhbWU9di5wYXJlbnQpLGd9LF8ucHJvdG90eXBlLl9nZXRfZnJhbWU9ZnVuY3Rpb24odixnKXtmb3IodmFyIFQ9dGhpcy5fY3VycmVudF9mcmFtZTtUJiZ2LmluZGV4T2YoVC50YWcpPT09LTE7KXtpZihnJiZnLmluZGV4T2YoVC50YWcpIT09LTEpe1Q9bnVsbDticmVha31UPVQucGFyZW50fXJldHVybiBUfSxfLnByb3RvdHlwZS50cnlfcG9wPWZ1bmN0aW9uKHYsZyl7dmFyIFQ9dGhpcy5fZ2V0X2ZyYW1lKFt2XSxnKTtyZXR1cm4gdGhpcy5fdHJ5X3BvcF9mcmFtZShUKX0sXy5wcm90b3R5cGUuaW5kZW50X3RvX3RhZz1mdW5jdGlvbih2KXt2YXIgZz10aGlzLl9nZXRfZnJhbWUodik7ZyYmKHRoaXMuX3ByaW50ZXIuaW5kZW50X2xldmVsPWcuaW5kZW50X2xldmVsKX07ZnVuY3Rpb24geSh2LGcsVCxxKXt0aGlzLl9zb3VyY2VfdGV4dD12fHwiIixnPWd8fHt9LHRoaXMuX2pzX2JlYXV0aWZ5PVQsdGhpcy5fY3NzX2JlYXV0aWZ5PXEsdGhpcy5fdGFnX3N0YWNrPW51bGw7dmFyIFM9bmV3IG8oZywiaHRtbCIpO3RoaXMuX29wdGlvbnM9Uyx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2U9dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXMuc3Vic3RyKDAsNSk9PT0iZm9yY2UiLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZV9leHBhbmRfbXVsdGlsaW5lPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzPT09ImZvcmNlLWV4cGFuZC1tdWx0aWxpbmUiLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19mb3JjZV9hbGlnbmVkPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzPT09ImZvcmNlLWFsaWduZWQiLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19hbGlnbmVkX211bHRpcGxlPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzPT09ImFsaWduZWQtbXVsdGlwbGUiLHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZT10aGlzLl9vcHRpb25zLndyYXBfYXR0cmlidXRlcy5zdWJzdHIoMCw4KT09PSJwcmVzZXJ2ZSIsdGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX3ByZXNlcnZlX2FsaWduZWQ9dGhpcy5fb3B0aW9ucy53cmFwX2F0dHJpYnV0ZXM9PT0icHJlc2VydmUtYWxpZ25lZCJ9eS5wcm90b3R5cGUuYmVhdXRpZnk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vcHRpb25zLmRpc2FibGVkKXJldHVybiB0aGlzLl9zb3VyY2VfdGV4dDt2YXIgdj10aGlzLl9zb3VyY2VfdGV4dCxnPXRoaXMuX29wdGlvbnMuZW9sO3RoaXMuX29wdGlvbnMuZW9sPT09ImF1dG8iJiYoZz1gCmAsdiYmZC50ZXN0KHYpJiYoZz12Lm1hdGNoKGQpWzBdKSksdj12LnJlcGxhY2UobSxgCmApO3ZhciBUPXYubWF0Y2goL15bXHQgXSovKVswXSxxPXt0ZXh0OiIiLHR5cGU6IiJ9LFM9bmV3IEUsaz1uZXcgZih0aGlzLl9vcHRpb25zLFQpLE49bmV3IHUodix0aGlzLl9vcHRpb25zKS50b2tlbml6ZSgpO3RoaXMuX3RhZ19zdGFjaz1uZXcgXyhrKTtmb3IodmFyIEQ9bnVsbCxIPU4ubmV4dCgpO0gudHlwZSE9PWMuRU9GOylILnR5cGU9PT1jLlRBR19PUEVOfHxILnR5cGU9PT1jLkNPTU1FTlQ/KEQ9dGhpcy5faGFuZGxlX3RhZ19vcGVuKGssSCxTLHEpLFM9RCk6SC50eXBlPT09Yy5BVFRSSUJVVEV8fEgudHlwZT09PWMuRVFVQUxTfHxILnR5cGU9PT1jLlZBTFVFfHxILnR5cGU9PT1jLlRFWFQmJiFTLnRhZ19jb21wbGV0ZT9EPXRoaXMuX2hhbmRsZV9pbnNpZGVfdGFnKGssSCxTLE4pOkgudHlwZT09PWMuVEFHX0NMT1NFP0Q9dGhpcy5faGFuZGxlX3RhZ19jbG9zZShrLEgsUyk6SC50eXBlPT09Yy5URVhUP0Q9dGhpcy5faGFuZGxlX3RleHQoayxILFMpOmsuYWRkX3Jhd190b2tlbihIKSxxPUQsSD1OLm5leHQoKTt2YXIgRj1rLl9vdXRwdXQuZ2V0X2NvZGUoZyk7cmV0dXJuIEZ9LHkucHJvdG90eXBlLl9oYW5kbGVfdGFnX2Nsb3NlPWZ1bmN0aW9uKHYsZyxUKXt2YXIgcT17dGV4dDpnLnRleHQsdHlwZTpnLnR5cGV9O3JldHVybiB2LmFsaWdubWVudF9zaXplPTAsVC50YWdfY29tcGxldGU9ITAsdi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKGcubmV3bGluZXN8fGcud2hpdGVzcGFjZV9iZWZvcmUhPT0iIiwhMCksVC5pc191bmZvcm1hdHRlZD92LmFkZF9yYXdfdG9rZW4oZyk6KFQudGFnX3N0YXJ0X2NoYXI9PT0iPCImJih2LnNldF9zcGFjZV9iZWZvcmVfdG9rZW4oZy50ZXh0WzBdPT09Ii8iLCEwKSx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZSYmVC5oYXNfd3JhcHBlZF9hdHRycyYmdi5wcmludF9uZXdsaW5lKCExKSksdi5wcmludF90b2tlbihnKSksVC5pbmRlbnRfY29udGVudCYmIShULmlzX3VuZm9ybWF0dGVkfHxULmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpJiYodi5pbmRlbnQoKSxULmluZGVudF9jb250ZW50PSExKSwhVC5pc19pbmxpbmVfZWxlbWVudCYmIShULmlzX3VuZm9ybWF0dGVkfHxULmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpJiZ2LnNldF93cmFwX3BvaW50KCkscX0seS5wcm90b3R5cGUuX2hhbmRsZV9pbnNpZGVfdGFnPWZ1bmN0aW9uKHYsZyxULHEpe3ZhciBTPVQuaGFzX3dyYXBwZWRfYXR0cnMsaz17dGV4dDpnLnRleHQsdHlwZTpnLnR5cGV9O2lmKHYuc2V0X3NwYWNlX2JlZm9yZV90b2tlbihnLm5ld2xpbmVzfHxnLndoaXRlc3BhY2VfYmVmb3JlIT09IiIsITApLFQuaXNfdW5mb3JtYXR0ZWQpdi5hZGRfcmF3X3Rva2VuKGcpO2Vsc2UgaWYoVC50YWdfc3RhcnRfY2hhcj09PSJ7IiYmZy50eXBlPT09Yy5URVhUKXYucHJpbnRfcHJlc2VydmVkX25ld2xpbmVzKGcpPyhnLm5ld2xpbmVzPTAsdi5hZGRfcmF3X3Rva2VuKGcpKTp2LnByaW50X3Rva2VuKGcpO2Vsc2V7aWYoZy50eXBlPT09Yy5BVFRSSUJVVEU/KHYuc2V0X3NwYWNlX2JlZm9yZV90b2tlbighMCksVC5hdHRyX2NvdW50Kz0xKTooZy50eXBlPT09Yy5FUVVBTFN8fGcudHlwZT09PWMuVkFMVUUmJmcucHJldmlvdXMudHlwZT09PWMuRVFVQUxTKSYmdi5zZXRfc3BhY2VfYmVmb3JlX3Rva2VuKCExKSxnLnR5cGU9PT1jLkFUVFJJQlVURSYmVC50YWdfc3RhcnRfY2hhcj09PSI8IiYmKCh0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfcHJlc2VydmV8fHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZV9hbGlnbmVkKSYmKHYudHJhdmVyc2Vfd2hpdGVzcGFjZShnKSxTPVN8fGcubmV3bGluZXMhPT0wKSx0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2UpKXt2YXIgTj1ULmF0dHJfY291bnQ+MTtpZih0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfZXhwYW5kX211bHRpbGluZSYmVC5hdHRyX2NvdW50PT09MSl7dmFyIEQ9ITAsSD0wLEY7ZG97aWYoRj1xLnBlZWsoSCksRi50eXBlPT09Yy5BVFRSSUJVVEUpe0Q9ITE7YnJlYWt9SCs9MX13aGlsZShIPDQmJkYudHlwZSE9PWMuRU9GJiZGLnR5cGUhPT1jLlRBR19DTE9TRSk7Tj0hRH1OJiYodi5wcmludF9uZXdsaW5lKCExKSxTPSEwKX12LnByaW50X3Rva2VuKGcpLFM9U3x8di5wcmV2aW91c190b2tlbl93cmFwcGVkKCksVC5oYXNfd3JhcHBlZF9hdHRycz1TfXJldHVybiBrfSx5LnByb3RvdHlwZS5faGFuZGxlX3RleHQ9ZnVuY3Rpb24odixnLFQpe3ZhciBxPXt0ZXh0OmcudGV4dCx0eXBlOiJUS19DT05URU5UIn07cmV0dXJuIFQuY3VzdG9tX2JlYXV0aWZpZXJfbmFtZT90aGlzLl9wcmludF9jdXN0b21fYmVhdGlmaWVyX3RleHQodixnLFQpOlQuaXNfdW5mb3JtYXR0ZWR8fFQuaXNfY29udGVudF91bmZvcm1hdHRlZD92LmFkZF9yYXdfdG9rZW4oZyk6KHYudHJhdmVyc2Vfd2hpdGVzcGFjZShnKSx2LnByaW50X3Rva2VuKGcpKSxxfSx5LnByb3RvdHlwZS5fcHJpbnRfY3VzdG9tX2JlYXRpZmllcl90ZXh0PWZ1bmN0aW9uKHYsZyxUKXt2YXIgcT10aGlzO2lmKGcudGV4dCE9PSIiKXt2YXIgUz1nLnRleHQsayxOPTEsRD0iIixIPSIiO1QuY3VzdG9tX2JlYXV0aWZpZXJfbmFtZT09PSJqYXZhc2NyaXB0IiYmdHlwZW9mIHRoaXMuX2pzX2JlYXV0aWZ5PT0iZnVuY3Rpb24iP2s9dGhpcy5fanNfYmVhdXRpZnk6VC5jdXN0b21fYmVhdXRpZmllcl9uYW1lPT09ImNzcyImJnR5cGVvZiB0aGlzLl9jc3NfYmVhdXRpZnk9PSJmdW5jdGlvbiI/az10aGlzLl9jc3NfYmVhdXRpZnk6VC5jdXN0b21fYmVhdXRpZmllcl9uYW1lPT09Imh0bWwiJiYoaz1mdW5jdGlvbihJLHope3ZhciBCPW5ldyB5KEkseixxLl9qc19iZWF1dGlmeSxxLl9jc3NfYmVhdXRpZnkpO3JldHVybiBCLmJlYXV0aWZ5KCl9KSx0aGlzLl9vcHRpb25zLmluZGVudF9zY3JpcHRzPT09ImtlZXAiP049MDp0aGlzLl9vcHRpb25zLmluZGVudF9zY3JpcHRzPT09InNlcGFyYXRlIiYmKE49LXYuaW5kZW50X2xldmVsKTt2YXIgRj12LmdldF9mdWxsX2luZGVudChOKTtpZihTPVMucmVwbGFjZSgvXG5bIFx0XSokLywiIiksVC5jdXN0b21fYmVhdXRpZmllcl9uYW1lIT09Imh0bWwiJiZTWzBdPT09IjwiJiZTLm1hdGNoKC9eKDwhLS18PCFcW0NEQVRBXFspLykpe3ZhciBMPS9eKDwhLS1bXlxuXSp8PCFcW0NEQVRBXFspKFxuPykoWyBcdFxuXSopKFtcc1xTXSopKC0tPnxdXT4pJC8uZXhlYyhTKTtpZighTCl7di5hZGRfcmF3X3Rva2VuKGcpO3JldHVybn1EPUYrTFsxXStgCmAsUz1MWzRdLExbNV0mJihIPUYrTFs1XSksUz1TLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLChMWzJdfHxMWzNdLmluZGV4T2YoYApgKSE9PS0xKSYmKEw9TFszXS5tYXRjaCgvWyBcdF0rJC8pLEwmJihnLndoaXRlc3BhY2VfYmVmb3JlPUxbMF0pKX1pZihTKWlmKGspe3ZhciBBPWZ1bmN0aW9uKCl7dGhpcy5lb2w9YApgfTtBLnByb3RvdHlwZT10aGlzLl9vcHRpb25zLnJhd19vcHRpb25zO3ZhciBNPW5ldyBBO1M9ayhGK1MsTSl9ZWxzZXt2YXIgVz1nLndoaXRlc3BhY2VfYmVmb3JlO1cmJihTPVMucmVwbGFjZShuZXcgUmVnRXhwKGAKKGArVysiKT8iLCJnIiksYApgKSksUz1GK1MucmVwbGFjZSgvXG4vZyxgCmArRil9RCYmKFM/Uz1EK1MrYApgK0g6Uz1EK0gpLHYucHJpbnRfbmV3bGluZSghMSksUyYmKGcudGV4dD1TLGcud2hpdGVzcGFjZV9iZWZvcmU9IiIsZy5uZXdsaW5lcz0wLHYuYWRkX3Jhd190b2tlbihnKSx2LnByaW50X25ld2xpbmUoITApKX19LHkucHJvdG90eXBlLl9oYW5kbGVfdGFnX29wZW49ZnVuY3Rpb24odixnLFQscSl7dmFyIFM9dGhpcy5fZ2V0X3RhZ19vcGVuX3Rva2VuKGcpO3JldHVybihULmlzX3VuZm9ybWF0dGVkfHxULmlzX2NvbnRlbnRfdW5mb3JtYXR0ZWQpJiYhVC5pc19lbXB0eV9lbGVtZW50JiZnLnR5cGU9PT1jLlRBR19PUEVOJiZnLnRleHQuaW5kZXhPZigiPC8iKT09PTA/KHYuYWRkX3Jhd190b2tlbihnKSxTLnN0YXJ0X3RhZ190b2tlbj10aGlzLl90YWdfc3RhY2sudHJ5X3BvcChTLnRhZ19uYW1lKSk6KHYudHJhdmVyc2Vfd2hpdGVzcGFjZShnKSx0aGlzLl9zZXRfdGFnX3Bvc2l0aW9uKHYsZyxTLFQscSksUy5pc19pbmxpbmVfZWxlbWVudHx8di5zZXRfd3JhcF9wb2ludCgpLHYucHJpbnRfdG9rZW4oZykpLCh0aGlzLl9pc193cmFwX2F0dHJpYnV0ZXNfZm9yY2VfYWxpZ25lZHx8dGhpcy5faXNfd3JhcF9hdHRyaWJ1dGVzX2FsaWduZWRfbXVsdGlwbGV8fHRoaXMuX2lzX3dyYXBfYXR0cmlidXRlc19wcmVzZXJ2ZV9hbGlnbmVkKSYmKFMuYWxpZ25tZW50X3NpemU9Zy50ZXh0Lmxlbmd0aCsxKSwhUy50YWdfY29tcGxldGUmJiFTLmlzX3VuZm9ybWF0dGVkJiYodi5hbGlnbm1lbnRfc2l6ZT1TLmFsaWdubWVudF9zaXplKSxTfTt2YXIgRT1mdW5jdGlvbih2LGcpe2lmKHRoaXMucGFyZW50PXZ8fG51bGwsdGhpcy50ZXh0PSIiLHRoaXMudHlwZT0iVEtfVEFHX09QRU4iLHRoaXMudGFnX25hbWU9IiIsdGhpcy5pc19pbmxpbmVfZWxlbWVudD0hMSx0aGlzLmlzX3VuZm9ybWF0dGVkPSExLHRoaXMuaXNfY29udGVudF91bmZvcm1hdHRlZD0hMSx0aGlzLmlzX2VtcHR5X2VsZW1lbnQ9ITEsdGhpcy5pc19zdGFydF90YWc9ITEsdGhpcy5pc19lbmRfdGFnPSExLHRoaXMuaW5kZW50X2NvbnRlbnQ9ITEsdGhpcy5tdWx0aWxpbmVfY29udGVudD0hMSx0aGlzLmN1c3RvbV9iZWF1dGlmaWVyX25hbWU9bnVsbCx0aGlzLnN0YXJ0X3RhZ190b2tlbj1udWxsLHRoaXMuYXR0cl9jb3VudD0wLHRoaXMuaGFzX3dyYXBwZWRfYXR0cnM9ITEsdGhpcy5hbGlnbm1lbnRfc2l6ZT0wLHRoaXMudGFnX2NvbXBsZXRlPSExLHRoaXMudGFnX3N0YXJ0X2NoYXI9IiIsdGhpcy50YWdfY2hlY2s9IiIsIWcpdGhpcy50YWdfY29tcGxldGU9ITA7ZWxzZXt2YXIgVDt0aGlzLnRhZ19zdGFydF9jaGFyPWcudGV4dFswXSx0aGlzLnRleHQ9Zy50ZXh0LHRoaXMudGFnX3N0YXJ0X2NoYXI9PT0iPCI/KFQ9Zy50ZXh0Lm1hdGNoKC9ePChbXlxzPl0qKS8pLHRoaXMudGFnX2NoZWNrPVQ/VFsxXToiIik6KFQ9Zy50ZXh0Lm1hdGNoKC9ee3soPzpbXF5dfCNcKj8pPyhbXlxzfV0rKS8pLHRoaXMudGFnX2NoZWNrPVQ/VFsxXToiIixnLnRleHQ9PT0ie3sjPiImJnRoaXMudGFnX2NoZWNrPT09Ij4iJiZnLm5leHQhPT1udWxsJiYodGhpcy50YWdfY2hlY2s9Zy5uZXh0LnRleHQpKSx0aGlzLnRhZ19jaGVjaz10aGlzLnRhZ19jaGVjay50b0xvd2VyQ2FzZSgpLGcudHlwZT09PWMuQ09NTUVOVCYmKHRoaXMudGFnX2NvbXBsZXRlPSEwKSx0aGlzLmlzX3N0YXJ0X3RhZz10aGlzLnRhZ19jaGVjay5jaGFyQXQoMCkhPT0iLyIsdGhpcy50YWdfbmFtZT10aGlzLmlzX3N0YXJ0X3RhZz90aGlzLnRhZ19jaGVjazp0aGlzLnRhZ19jaGVjay5zdWJzdHIoMSksdGhpcy5pc19lbmRfdGFnPSF0aGlzLmlzX3N0YXJ0X3RhZ3x8Zy5jbG9zZWQmJmcuY2xvc2VkLnRleHQ9PT0iLz4iLHRoaXMuaXNfZW5kX3RhZz10aGlzLmlzX2VuZF90YWd8fHRoaXMudGFnX3N0YXJ0X2NoYXI9PT0ieyImJih0aGlzLnRleHQubGVuZ3RoPDN8fC9bXiNcXl0vLnRlc3QodGhpcy50ZXh0LmNoYXJBdCgyKSkpfX07eS5wcm90b3R5cGUuX2dldF90YWdfb3Blbl90b2tlbj1mdW5jdGlvbih2KXt2YXIgZz1uZXcgRSh0aGlzLl90YWdfc3RhY2suZ2V0X3BhcnNlcl90b2tlbigpLHYpO3JldHVybiBnLmFsaWdubWVudF9zaXplPXRoaXMuX29wdGlvbnMud3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplLGcuaXNfZW5kX3RhZz1nLmlzX2VuZF90YWd8fHcoZy50YWdfY2hlY2ssdGhpcy5fb3B0aW9ucy52b2lkX2VsZW1lbnRzKSxnLmlzX2VtcHR5X2VsZW1lbnQ9Zy50YWdfY29tcGxldGV8fGcuaXNfc3RhcnRfdGFnJiZnLmlzX2VuZF90YWcsZy5pc191bmZvcm1hdHRlZD0hZy50YWdfY29tcGxldGUmJncoZy50YWdfY2hlY2ssdGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZCksZy5pc19jb250ZW50X3VuZm9ybWF0dGVkPSFnLmlzX2VtcHR5X2VsZW1lbnQmJncoZy50YWdfY2hlY2ssdGhpcy5fb3B0aW9ucy5jb250ZW50X3VuZm9ybWF0dGVkKSxnLmlzX2lubGluZV9lbGVtZW50PXcoZy50YWdfbmFtZSx0aGlzLl9vcHRpb25zLmlubGluZSl8fGcudGFnX3N0YXJ0X2NoYXI9PT0ieyIsZ30seS5wcm90b3R5cGUuX3NldF90YWdfcG9zaXRpb249ZnVuY3Rpb24odixnLFQscSxTKXtpZihULmlzX2VtcHR5X2VsZW1lbnR8fChULmlzX2VuZF90YWc/VC5zdGFydF90YWdfdG9rZW49dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoVC50YWdfbmFtZSk6KHRoaXMuX2RvX29wdGlvbmFsX2VuZF9lbGVtZW50KFQpJiYoVC5pc19pbmxpbmVfZWxlbWVudHx8di5wcmludF9uZXdsaW5lKCExKSksdGhpcy5fdGFnX3N0YWNrLnJlY29yZF90YWcoVCksKFQudGFnX25hbWU9PT0ic2NyaXB0Inx8VC50YWdfbmFtZT09PSJzdHlsZSIpJiYhKFQuaXNfdW5mb3JtYXR0ZWR8fFQuaXNfY29udGVudF91bmZvcm1hdHRlZCkmJihULmN1c3RvbV9iZWF1dGlmaWVyX25hbWU9cChULnRhZ19jaGVjayxnKSkpKSx3KFQudGFnX2NoZWNrLHRoaXMuX29wdGlvbnMuZXh0cmFfbGluZXJzKSYmKHYucHJpbnRfbmV3bGluZSghMSksdi5fb3V0cHV0Lmp1c3RfYWRkZWRfYmxhbmtsaW5lKCl8fHYucHJpbnRfbmV3bGluZSghMCkpLFQuaXNfZW1wdHlfZWxlbWVudCl7aWYoVC50YWdfc3RhcnRfY2hhcj09PSJ7IiYmVC50YWdfY2hlY2s9PT0iZWxzZSIpe3RoaXMuX3RhZ19zdGFjay5pbmRlbnRfdG9fdGFnKFsiaWYiLCJ1bmxlc3MiLCJlYWNoIl0pLFQuaW5kZW50X2NvbnRlbnQ9ITA7dmFyIGs9di5jdXJyZW50X2xpbmVfaGFzX21hdGNoKC97eyNpZi8pO2t8fHYucHJpbnRfbmV3bGluZSghMSl9VC50YWdfbmFtZT09PSIhLS0iJiZTLnR5cGU9PT1jLlRBR19DTE9TRSYmcS5pc19lbmRfdGFnJiZULnRleHQuaW5kZXhPZihgCmApPT09LTF8fChULmlzX2lubGluZV9lbGVtZW50fHxULmlzX3VuZm9ybWF0dGVkfHx2LnByaW50X25ld2xpbmUoITEpLHRoaXMuX2NhbGNsdWF0ZV9wYXJlbnRfbXVsdGlsaW5lKHYsVCkpfWVsc2UgaWYoVC5pc19lbmRfdGFnKXt2YXIgTj0hMTtOPVQuc3RhcnRfdGFnX3Rva2VuJiZULnN0YXJ0X3RhZ190b2tlbi5tdWx0aWxpbmVfY29udGVudCxOPU58fCFULmlzX2lubGluZV9lbGVtZW50JiYhKHEuaXNfaW5saW5lX2VsZW1lbnR8fHEuaXNfdW5mb3JtYXR0ZWQpJiYhKFMudHlwZT09PWMuVEFHX0NMT1NFJiZULnN0YXJ0X3RhZ190b2tlbj09PXEpJiZTLnR5cGUhPT0iVEtfQ09OVEVOVCIsKFQuaXNfY29udGVudF91bmZvcm1hdHRlZHx8VC5pc191bmZvcm1hdHRlZCkmJihOPSExKSxOJiZ2LnByaW50X25ld2xpbmUoITEpfWVsc2UgVC5pbmRlbnRfY29udGVudD0hVC5jdXN0b21fYmVhdXRpZmllcl9uYW1lLFQudGFnX3N0YXJ0X2NoYXI9PT0iPCImJihULnRhZ19uYW1lPT09Imh0bWwiP1QuaW5kZW50X2NvbnRlbnQ9dGhpcy5fb3B0aW9ucy5pbmRlbnRfaW5uZXJfaHRtbDpULnRhZ19uYW1lPT09ImhlYWQiP1QuaW5kZW50X2NvbnRlbnQ9dGhpcy5fb3B0aW9ucy5pbmRlbnRfaGVhZF9pbm5lcl9odG1sOlQudGFnX25hbWU9PT0iYm9keSImJihULmluZGVudF9jb250ZW50PXRoaXMuX29wdGlvbnMuaW5kZW50X2JvZHlfaW5uZXJfaHRtbCkpLCEoVC5pc19pbmxpbmVfZWxlbWVudHx8VC5pc191bmZvcm1hdHRlZCkmJihTLnR5cGUhPT0iVEtfQ09OVEVOVCJ8fFQuaXNfY29udGVudF91bmZvcm1hdHRlZCkmJnYucHJpbnRfbmV3bGluZSghMSksdGhpcy5fY2FsY2x1YXRlX3BhcmVudF9tdWx0aWxpbmUodixUKX0seS5wcm90b3R5cGUuX2NhbGNsdWF0ZV9wYXJlbnRfbXVsdGlsaW5lPWZ1bmN0aW9uKHYsZyl7Zy5wYXJlbnQmJnYuX291dHB1dC5qdXN0X2FkZGVkX25ld2xpbmUoKSYmISgoZy5pc19pbmxpbmVfZWxlbWVudHx8Zy5pc191bmZvcm1hdHRlZCkmJmcucGFyZW50LmlzX2lubGluZV9lbGVtZW50KSYmKGcucGFyZW50Lm11bHRpbGluZV9jb250ZW50PSEwKX07dmFyIFI9WyJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYmxvY2txdW90ZSIsImRldGFpbHMiLCJkaXYiLCJkbCIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkZXIiLCJociIsIm1haW4iLCJuYXYiLCJvbCIsInAiLCJwcmUiLCJzZWN0aW9uIiwidGFibGUiLCJ1bCJdLFA9WyJhIiwiYXVkaW8iLCJkZWwiLCJpbnMiLCJtYXAiLCJub3NjcmlwdCIsInZpZGVvIl07eS5wcm90b3R5cGUuX2RvX29wdGlvbmFsX2VuZF9lbGVtZW50PWZ1bmN0aW9uKHYpe3ZhciBnPW51bGw7aWYoISh2LmlzX2VtcHR5X2VsZW1lbnR8fCF2LmlzX3N0YXJ0X3RhZ3x8IXYucGFyZW50KSl7aWYodi50YWdfbmFtZT09PSJib2R5IilnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJoZWFkIik7ZWxzZSBpZih2LnRhZ19uYW1lPT09ImxpIilnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJsaSIsWyJvbCIsInVsIl0pO2Vsc2UgaWYodi50YWdfbmFtZT09PSJkZCJ8fHYudGFnX25hbWU9PT0iZHQiKWc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImR0IixbImRsIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImRkIixbImRsIl0pO2Vsc2UgaWYodi5wYXJlbnQudGFnX25hbWU9PT0icCImJlIuaW5kZXhPZih2LnRhZ19uYW1lKSE9PS0xKXt2YXIgVD12LnBhcmVudC5wYXJlbnQ7KCFUfHxQLmluZGV4T2YoVC50YWdfbmFtZSk9PT0tMSkmJihnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJwIikpfWVsc2Ugdi50YWdfbmFtZT09PSJycCJ8fHYudGFnX25hbWU9PT0icnQiPyhnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJydCIsWyJydWJ5IiwicnRjIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInJwIixbInJ1YnkiLCJydGMiXSkpOnYudGFnX25hbWU9PT0ib3B0Z3JvdXAiP2c9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoIm9wdGdyb3VwIixbInNlbGVjdCJdKTp2LnRhZ19uYW1lPT09Im9wdGlvbiI/Zz1nfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgib3B0aW9uIixbInNlbGVjdCIsImRhdGFsaXN0Iiwib3B0Z3JvdXAiXSk6di50YWdfbmFtZT09PSJjb2xncm91cCI/Zz1nfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY2FwdGlvbiIsWyJ0YWJsZSJdKTp2LnRhZ19uYW1lPT09InRoZWFkIj8oZz1nfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY2FwdGlvbiIsWyJ0YWJsZSJdKSxnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjb2xncm91cCIsWyJ0YWJsZSJdKSk6di50YWdfbmFtZT09PSJ0Ym9keSJ8fHYudGFnX25hbWU9PT0idGZvb3QiPyhnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjYXB0aW9uIixbInRhYmxlIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoImNvbGdyb3VwIixbInRhYmxlIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRoZWFkIixbInRhYmxlIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRib2R5IixbInRhYmxlIl0pKTp2LnRhZ19uYW1lPT09InRyIj8oZz1nfHx0aGlzLl90YWdfc3RhY2sudHJ5X3BvcCgiY2FwdGlvbiIsWyJ0YWJsZSJdKSxnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJjb2xncm91cCIsWyJ0YWJsZSJdKSxnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJ0ciIsWyJ0YWJsZSIsInRoZWFkIiwidGJvZHkiLCJ0Zm9vdCJdKSk6KHYudGFnX25hbWU9PT0idGgifHx2LnRhZ19uYW1lPT09InRkIikmJihnPWd8fHRoaXMuX3RhZ19zdGFjay50cnlfcG9wKCJ0ZCIsWyJ0YWJsZSIsInRoZWFkIiwidGJvZHkiLCJ0Zm9vdCIsInRyIl0pLGc9Z3x8dGhpcy5fdGFnX3N0YWNrLnRyeV9wb3AoInRoIixbInRhYmxlIiwidGhlYWQiLCJ0Ym9keSIsInRmb290IiwidHIiXSkpO3JldHVybiB2LnBhcmVudD10aGlzLl90YWdfc3RhY2suZ2V0X3BhcnNlcl90b2tlbigpLGd9fSxyLmV4cG9ydHMuQmVhdXRpZmllcj15fSxmdW5jdGlvbihyLGEscyl7dmFyIG89cyg2KS5PcHRpb25zO2Z1bmN0aW9uIGwodSl7by5jYWxsKHRoaXMsdSwiaHRtbCIpLHRoaXMudGVtcGxhdGluZy5sZW5ndGg9PT0xJiZ0aGlzLnRlbXBsYXRpbmdbMF09PT0iYXV0byImJih0aGlzLnRlbXBsYXRpbmc9WyJkamFuZ28iLCJlcmIiLCJoYW5kbGViYXJzIiwicGhwIl0pLHRoaXMuaW5kZW50X2lubmVyX2h0bWw9dGhpcy5fZ2V0X2Jvb2xlYW4oImluZGVudF9pbm5lcl9odG1sIiksdGhpcy5pbmRlbnRfYm9keV9pbm5lcl9odG1sPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfYm9keV9pbm5lcl9odG1sIiwhMCksdGhpcy5pbmRlbnRfaGVhZF9pbm5lcl9odG1sPXRoaXMuX2dldF9ib29sZWFuKCJpbmRlbnRfaGVhZF9pbm5lcl9odG1sIiwhMCksdGhpcy5pbmRlbnRfaGFuZGxlYmFycz10aGlzLl9nZXRfYm9vbGVhbigiaW5kZW50X2hhbmRsZWJhcnMiLCEwKSx0aGlzLndyYXBfYXR0cmlidXRlcz10aGlzLl9nZXRfc2VsZWN0aW9uKCJ3cmFwX2F0dHJpYnV0ZXMiLFsiYXV0byIsImZvcmNlIiwiZm9yY2UtYWxpZ25lZCIsImZvcmNlLWV4cGFuZC1tdWx0aWxpbmUiLCJhbGlnbmVkLW11bHRpcGxlIiwicHJlc2VydmUiLCJwcmVzZXJ2ZS1hbGlnbmVkIl0pLHRoaXMud3JhcF9hdHRyaWJ1dGVzX2luZGVudF9zaXplPXRoaXMuX2dldF9udW1iZXIoIndyYXBfYXR0cmlidXRlc19pbmRlbnRfc2l6ZSIsdGhpcy5pbmRlbnRfc2l6ZSksdGhpcy5leHRyYV9saW5lcnM9dGhpcy5fZ2V0X2FycmF5KCJleHRyYV9saW5lcnMiLFsiaGVhZCIsImJvZHkiLCIvaHRtbCJdKSx0aGlzLmlubGluZT10aGlzLl9nZXRfYXJyYXkoImlubGluZSIsWyJhIiwiYWJiciIsImFyZWEiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNpdGUiLCJjb2RlIiwiZGF0YSIsImRhdGFsaXN0IiwiZGVsIiwiZGZuIiwiZW0iLCJlbWJlZCIsImkiLCJpZnJhbWUiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImtleWdlbiIsImxhYmVsIiwibWFwIiwibWFyayIsIm1hdGgiLCJtZXRlciIsIm5vc2NyaXB0Iiwib2JqZWN0Iiwib3V0cHV0IiwicHJvZ3Jlc3MiLCJxIiwicnVieSIsInMiLCJzYW1wIiwic2VsZWN0Iiwic21hbGwiLCJzcGFuIiwic3Ryb25nIiwic3ViIiwic3VwIiwic3ZnIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRpbWUiLCJ1IiwidmFyIiwidmlkZW8iLCJ3YnIiLCJ0ZXh0IiwiYWNyb255bSIsImJpZyIsInN0cmlrZSIsInR0Il0pLHRoaXMudm9pZF9lbGVtZW50cz10aGlzLl9nZXRfYXJyYXkoInZvaWRfZWxlbWVudHMiLFsiYXJlYSIsImJhc2UiLCJiciIsImNvbCIsImVtYmVkIiwiaHIiLCJpbWciLCJpbnB1dCIsImtleWdlbiIsImxpbmsiLCJtZW51aXRlbSIsIm1ldGEiLCJwYXJhbSIsInNvdXJjZSIsInRyYWNrIiwid2JyIiwiIWRvY3R5cGUiLCI/eG1sIiwiYmFzZWZvbnQiLCJpc2luZGV4Il0pLHRoaXMudW5mb3JtYXR0ZWQ9dGhpcy5fZ2V0X2FycmF5KCJ1bmZvcm1hdHRlZCIsW10pLHRoaXMuY29udGVudF91bmZvcm1hdHRlZD10aGlzLl9nZXRfYXJyYXkoImNvbnRlbnRfdW5mb3JtYXR0ZWQiLFsicHJlIiwidGV4dGFyZWEiXSksdGhpcy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcj10aGlzLl9nZXRfY2hhcmFjdGVycygidW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIiKSx0aGlzLmluZGVudF9zY3JpcHRzPXRoaXMuX2dldF9zZWxlY3Rpb24oImluZGVudF9zY3JpcHRzIixbIm5vcm1hbCIsImtlZXAiLCJzZXBhcmF0ZSJdKX1sLnByb3RvdHlwZT1uZXcgbyxyLmV4cG9ydHMuT3B0aW9ucz1sfSxmdW5jdGlvbihyLGEscyl7dmFyIG89cyg5KS5Ub2tlbml6ZXIsbD1zKDkpLlRPS0VOLHU9cygxMykuRGlyZWN0aXZlcyxjPXMoMTQpLlRlbXBsYXRhYmxlUGF0dGVybixkPXMoMTIpLlBhdHRlcm4sbT17VEFHX09QRU46IlRLX1RBR19PUEVOIixUQUdfQ0xPU0U6IlRLX1RBR19DTE9TRSIsQVRUUklCVVRFOiJUS19BVFRSSUJVVEUiLEVRVUFMUzoiVEtfRVFVQUxTIixWQUxVRToiVEtfVkFMVUUiLENPTU1FTlQ6IlRLX0NPTU1FTlQiLFRFWFQ6IlRLX1RFWFQiLFVOS05PV046IlRLX1VOS05PV04iLFNUQVJUOmwuU1RBUlQsUkFXOmwuUkFXLEVPRjpsLkVPRn0sZj1uZXcgdSgvPFwhLS0vLC8tLT4vKSxiPWZ1bmN0aW9uKHAsdyl7by5jYWxsKHRoaXMscCx3KSx0aGlzLl9jdXJyZW50X3RhZ19uYW1lPSIiO3ZhciB4PW5ldyBjKHRoaXMuX2lucHV0KS5yZWFkX29wdGlvbnModGhpcy5fb3B0aW9ucyksXz1uZXcgZCh0aGlzLl9pbnB1dCk7aWYodGhpcy5fX3BhdHRlcm5zPXt3b3JkOngudW50aWwoL1tcblxyXHQgPF0vKSxzaW5nbGVfcXVvdGU6eC51bnRpbF9hZnRlcigvJy8pLGRvdWJsZV9xdW90ZTp4LnVudGlsX2FmdGVyKC8iLyksYXR0cmlidXRlOngudW50aWwoL1tcblxyXHQgPT5dfFwvPi8pLGVsZW1lbnRfbmFtZTp4LnVudGlsKC9bXG5cclx0ID5cL10vKSxoYW5kbGViYXJzX2NvbW1lbnQ6Xy5zdGFydGluZ193aXRoKC97eyEtLS8pLnVudGlsX2FmdGVyKC8tLX19LyksaGFuZGxlYmFyczpfLnN0YXJ0aW5nX3dpdGgoL3t7LykudW50aWxfYWZ0ZXIoL319LyksaGFuZGxlYmFyc19vcGVuOl8udW50aWwoL1tcblxyXHQgfV0vKSxoYW5kbGViYXJzX3Jhd19jbG9zZTpfLnVudGlsKC99fS8pLGNvbW1lbnQ6Xy5zdGFydGluZ193aXRoKC88IS0tLykudW50aWxfYWZ0ZXIoLy0tPi8pLGNkYXRhOl8uc3RhcnRpbmdfd2l0aCgvPCFcW0NEQVRBXFsvKS51bnRpbF9hZnRlcigvXV0+LyksY29uZGl0aW9uYWxfY29tbWVudDpfLnN0YXJ0aW5nX3dpdGgoLzwhXFsvKS51bnRpbF9hZnRlcigvXT4vKSxwcm9jZXNzaW5nOl8uc3RhcnRpbmdfd2l0aCgvPFw/LykudW50aWxfYWZ0ZXIoL1w/Pi8pfSx0aGlzLl9vcHRpb25zLmluZGVudF9oYW5kbGViYXJzJiYodGhpcy5fX3BhdHRlcm5zLndvcmQ9dGhpcy5fX3BhdHRlcm5zLndvcmQuZXhjbHVkZSgiaGFuZGxlYmFycyIpKSx0aGlzLl91bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlcj1udWxsLHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXIpe3ZhciB5PXRoaXMuX2lucHV0LmdldF9saXRlcmFsX3JlZ2V4cCh0aGlzLl9vcHRpb25zLnVuZm9ybWF0dGVkX2NvbnRlbnRfZGVsaW1pdGVyKTt0aGlzLl9fcGF0dGVybnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXI9Xy5tYXRjaGluZyh5KS51bnRpbF9hZnRlcih5KX19O2IucHJvdG90eXBlPW5ldyBvLGIucHJvdG90eXBlLl9pc19jb21tZW50PWZ1bmN0aW9uKHApe3JldHVybiExfSxiLnByb3RvdHlwZS5faXNfb3BlbmluZz1mdW5jdGlvbihwKXtyZXR1cm4gcC50eXBlPT09bS5UQUdfT1BFTn0sYi5wcm90b3R5cGUuX2lzX2Nsb3Npbmc9ZnVuY3Rpb24ocCx3KXtyZXR1cm4gcC50eXBlPT09bS5UQUdfQ0xPU0UmJncmJigocC50ZXh0PT09Ij4ifHxwLnRleHQ9PT0iLz4iKSYmdy50ZXh0WzBdPT09IjwifHxwLnRleHQ9PT0ifX0iJiZ3LnRleHRbMF09PT0ieyImJncudGV4dFsxXT09PSJ7Iil9LGIucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRfdGFnX25hbWU9IiJ9LGIucHJvdG90eXBlLl9nZXRfbmV4dF90b2tlbj1mdW5jdGlvbihwLHcpe3ZhciB4PW51bGw7dGhpcy5fcmVhZFdoaXRlc3BhY2UoKTt2YXIgXz10aGlzLl9pbnB1dC5wZWVrKCk7cmV0dXJuIF89PT1udWxsP3RoaXMuX2NyZWF0ZV90b2tlbihtLkVPRiwiIik6KHg9eHx8dGhpcy5fcmVhZF9vcGVuX2hhbmRsZWJhcnMoXyx3KSx4PXh8fHRoaXMuX3JlYWRfYXR0cmlidXRlKF8scCx3KSx4PXh8fHRoaXMuX3JlYWRfY2xvc2UoXyx3KSx4PXh8fHRoaXMuX3JlYWRfcmF3X2NvbnRlbnQoXyxwLHcpLHg9eHx8dGhpcy5fcmVhZF9jb250ZW50X3dvcmQoXykseD14fHx0aGlzLl9yZWFkX2NvbW1lbnRfb3JfY2RhdGEoXykseD14fHx0aGlzLl9yZWFkX3Byb2Nlc3NpbmcoXykseD14fHx0aGlzLl9yZWFkX29wZW4oXyx3KSx4PXh8fHRoaXMuX2NyZWF0ZV90b2tlbihtLlVOS05PV04sdGhpcy5faW5wdXQubmV4dCgpKSx4KX0sYi5wcm90b3R5cGUuX3JlYWRfY29tbWVudF9vcl9jZGF0YT1mdW5jdGlvbihwKXt2YXIgdz1udWxsLHg9bnVsbCxfPW51bGw7aWYocD09PSI8Iil7dmFyIHk9dGhpcy5faW5wdXQucGVlaygxKTt5PT09IiEiJiYoeD10aGlzLl9fcGF0dGVybnMuY29tbWVudC5yZWFkKCkseD8oXz1mLmdldF9kaXJlY3RpdmVzKHgpLF8mJl8uaWdub3JlPT09InN0YXJ0IiYmKHgrPWYucmVhZElnbm9yZWQodGhpcy5faW5wdXQpKSk6eD10aGlzLl9fcGF0dGVybnMuY2RhdGEucmVhZCgpKSx4JiYodz10aGlzLl9jcmVhdGVfdG9rZW4obS5DT01NRU5ULHgpLHcuZGlyZWN0aXZlcz1fKX1yZXR1cm4gd30sYi5wcm90b3R5cGUuX3JlYWRfcHJvY2Vzc2luZz1mdW5jdGlvbihwKXt2YXIgdz1udWxsLHg9bnVsbCxfPW51bGw7aWYocD09PSI8Iil7dmFyIHk9dGhpcy5faW5wdXQucGVlaygxKTsoeT09PSIhInx8eT09PSI/IikmJih4PXRoaXMuX19wYXR0ZXJucy5jb25kaXRpb25hbF9jb21tZW50LnJlYWQoKSx4PXh8fHRoaXMuX19wYXR0ZXJucy5wcm9jZXNzaW5nLnJlYWQoKSkseCYmKHc9dGhpcy5fY3JlYXRlX3Rva2VuKG0uQ09NTUVOVCx4KSx3LmRpcmVjdGl2ZXM9Xyl9cmV0dXJuIHd9LGIucHJvdG90eXBlLl9yZWFkX29wZW49ZnVuY3Rpb24ocCx3KXt2YXIgeD1udWxsLF89bnVsbDtyZXR1cm4gd3x8cD09PSI8IiYmKHg9dGhpcy5faW5wdXQubmV4dCgpLHRoaXMuX2lucHV0LnBlZWsoKT09PSIvIiYmKHgrPXRoaXMuX2lucHV0Lm5leHQoKSkseCs9dGhpcy5fX3BhdHRlcm5zLmVsZW1lbnRfbmFtZS5yZWFkKCksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfT1BFTix4KSksX30sYi5wcm90b3R5cGUuX3JlYWRfb3Blbl9oYW5kbGViYXJzPWZ1bmN0aW9uKHAsdyl7dmFyIHg9bnVsbCxfPW51bGw7cmV0dXJuIHd8fHRoaXMuX29wdGlvbnMuaW5kZW50X2hhbmRsZWJhcnMmJnA9PT0ieyImJnRoaXMuX2lucHV0LnBlZWsoMSk9PT0ieyImJih0aGlzLl9pbnB1dC5wZWVrKDIpPT09IiEiPyh4PXRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX2NvbW1lbnQucmVhZCgpLHg9eHx8dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnMucmVhZCgpLF89dGhpcy5fY3JlYXRlX3Rva2VuKG0uQ09NTUVOVCx4KSk6KHg9dGhpcy5fX3BhdHRlcm5zLmhhbmRsZWJhcnNfb3Blbi5yZWFkKCksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfT1BFTix4KSkpLF99LGIucHJvdG90eXBlLl9yZWFkX2Nsb3NlPWZ1bmN0aW9uKHAsdyl7dmFyIHg9bnVsbCxfPW51bGw7cmV0dXJuIHcmJih3LnRleHRbMF09PT0iPCImJihwPT09Ij4ifHxwPT09Ii8iJiZ0aGlzLl9pbnB1dC5wZWVrKDEpPT09Ij4iKT8oeD10aGlzLl9pbnB1dC5uZXh0KCkscD09PSIvIiYmKHgrPXRoaXMuX2lucHV0Lm5leHQoKSksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfQ0xPU0UseCkpOncudGV4dFswXT09PSJ7IiYmcD09PSJ9IiYmdGhpcy5faW5wdXQucGVlaygxKT09PSJ9IiYmKHRoaXMuX2lucHV0Lm5leHQoKSx0aGlzLl9pbnB1dC5uZXh0KCksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5UQUdfQ0xPU0UsIn19IikpKSxffSxiLnByb3RvdHlwZS5fcmVhZF9hdHRyaWJ1dGU9ZnVuY3Rpb24ocCx3LHgpe3ZhciBfPW51bGwseT0iIjtpZih4JiZ4LnRleHRbMF09PT0iPCIpaWYocD09PSI9IilfPXRoaXMuX2NyZWF0ZV90b2tlbihtLkVRVUFMUyx0aGlzLl9pbnB1dC5uZXh0KCkpO2Vsc2UgaWYocD09PSciJ3x8cD09PSInIil7dmFyIEU9dGhpcy5faW5wdXQubmV4dCgpO3A9PT0nIic/RSs9dGhpcy5fX3BhdHRlcm5zLmRvdWJsZV9xdW90ZS5yZWFkKCk6RSs9dGhpcy5fX3BhdHRlcm5zLnNpbmdsZV9xdW90ZS5yZWFkKCksXz10aGlzLl9jcmVhdGVfdG9rZW4obS5WQUxVRSxFKX1lbHNlIHk9dGhpcy5fX3BhdHRlcm5zLmF0dHJpYnV0ZS5yZWFkKCkseSYmKHcudHlwZT09PW0uRVFVQUxTP189dGhpcy5fY3JlYXRlX3Rva2VuKG0uVkFMVUUseSk6Xz10aGlzLl9jcmVhdGVfdG9rZW4obS5BVFRSSUJVVEUseSkpO3JldHVybiBffSxiLnByb3RvdHlwZS5faXNfY29udGVudF91bmZvcm1hdHRlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy52b2lkX2VsZW1lbnRzLmluZGV4T2YocCk9PT0tMSYmKHRoaXMuX29wdGlvbnMuY29udGVudF91bmZvcm1hdHRlZC5pbmRleE9mKHApIT09LTF8fHRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWQuaW5kZXhPZihwKSE9PS0xKX0sYi5wcm90b3R5cGUuX3JlYWRfcmF3X2NvbnRlbnQ9ZnVuY3Rpb24ocCx3LHgpe3ZhciBfPSIiO2lmKHgmJngudGV4dFswXT09PSJ7IilfPXRoaXMuX19wYXR0ZXJucy5oYW5kbGViYXJzX3Jhd19jbG9zZS5yZWFkKCk7ZWxzZSBpZih3LnR5cGU9PT1tLlRBR19DTE9TRSYmdy5vcGVuZWQudGV4dFswXT09PSI8IiYmdy50ZXh0WzBdIT09Ii8iKXt2YXIgeT13Lm9wZW5lZC50ZXh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO2lmKHk9PT0ic2NyaXB0Inx8eT09PSJzdHlsZSIpe3ZhciBFPXRoaXMuX3JlYWRfY29tbWVudF9vcl9jZGF0YShwKTtpZihFKXJldHVybiBFLnR5cGU9bS5URVhULEU7Xz10aGlzLl9pbnB1dC5yZWFkVW50aWwobmV3IFJlZ0V4cCgiPC8iK3krIltcXG5cXHJcXHQgXSo/PiIsImlnIikpfWVsc2UgdGhpcy5faXNfY29udGVudF91bmZvcm1hdHRlZCh5KSYmKF89dGhpcy5faW5wdXQucmVhZFVudGlsKG5ldyBSZWdFeHAoIjwvIit5KyJbXFxuXFxyXFx0IF0qPz4iLCJpZyIpKSl9cmV0dXJuIF8/dGhpcy5fY3JlYXRlX3Rva2VuKG0uVEVYVCxfKTpudWxsfSxiLnByb3RvdHlwZS5fcmVhZF9jb250ZW50X3dvcmQ9ZnVuY3Rpb24ocCl7dmFyIHc9IiI7aWYodGhpcy5fb3B0aW9ucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlciYmcD09PXRoaXMuX29wdGlvbnMudW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXJbMF0mJih3PXRoaXMuX19wYXR0ZXJucy51bmZvcm1hdHRlZF9jb250ZW50X2RlbGltaXRlci5yZWFkKCkpLHd8fCh3PXRoaXMuX19wYXR0ZXJucy53b3JkLnJlYWQoKSksdylyZXR1cm4gdGhpcy5fY3JlYXRlX3Rva2VuKG0uVEVYVCx3KX0sci5leHBvcnRzLlRva2VuaXplcj1iLHIuZXhwb3J0cy5UT0tFTj1tfV0sdD17fTtmdW5jdGlvbiBuKHIpe3ZhciBhPXRbcl07aWYoYSE9PXZvaWQgMClyZXR1cm4gYS5leHBvcnRzO3ZhciBzPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKHMscy5leHBvcnRzLG4pLHMuZXhwb3J0c312YXIgaT1uKDE4KTtucz1pfSkoKTtmdW5jdGlvbiBNdShlLHQpe3JldHVybiBucyhlLHQsRXUsUnUpfWZ1bmN0aW9uIER1KGUsdCxuKXt2YXIgaT1lLmdldFRleHQoKSxyPSEwLGE9MCxzPW4udGFiU2l6ZXx8NDtpZih0KXtmb3IodmFyIG89ZS5vZmZzZXRBdCh0LnN0YXJ0KSxsPW87bD4wJiZycyhpLGwtMSk7KWwtLTtsPT09MHx8aXMoaSxsLTEpP289bDpsPG8mJihvPWwrMSk7Zm9yKHZhciB1PWUub2Zmc2V0QXQodC5lbmQpLGM9dTtjPGkubGVuZ3RoJiZycyhpLGMpOyljKys7KGM9PT1pLmxlbmd0aHx8aXMoaSxjKSkmJih1PWMpLHQ9WS5jcmVhdGUoZS5wb3NpdGlvbkF0KG8pLGUucG9zaXRpb25BdCh1KSk7dmFyIGQ9aS5zdWJzdHJpbmcoMCxvKTtpZihuZXcgUmVnRXhwKC8uKls8XVtePl0qJC8pLnRlc3QoZCkpcmV0dXJuIGk9aS5zdWJzdHJpbmcobyx1KSxbe3JhbmdlOnQsbmV3VGV4dDppfV07aWYocj11PT09aS5sZW5ndGgsaT1pLnN1YnN0cmluZyhvLHUpLG8hPT0wKXt2YXIgbT1lLm9mZnNldEF0KGNlLmNyZWF0ZSh0LnN0YXJ0LmxpbmUsMCkpO2E9enUoZS5nZXRUZXh0KCksbSxuKX19ZWxzZSB0PVkuY3JlYXRlKGNlLmNyZWF0ZSgwLDApLGUucG9zaXRpb25BdChpLmxlbmd0aCkpO3ZhciBmPXtpbmRlbnRfc2l6ZTpzLGluZGVudF9jaGFyOm4uaW5zZXJ0U3BhY2VzPyIgIjoiCSIsaW5kZW50X2VtcHR5X2xpbmVzOnllKG4sImluZGVudEVtcHR5TGluZXMiLCExKSx3cmFwX2xpbmVfbGVuZ3RoOnllKG4sIndyYXBMaW5lTGVuZ3RoIiwxMjApLHVuZm9ybWF0dGVkOnVpKG4sInVuZm9ybWF0dGVkIix2b2lkIDApLGNvbnRlbnRfdW5mb3JtYXR0ZWQ6dWkobiwiY29udGVudFVuZm9ybWF0dGVkIix2b2lkIDApLGluZGVudF9pbm5lcl9odG1sOnllKG4sImluZGVudElubmVySHRtbCIsITEpLHByZXNlcnZlX25ld2xpbmVzOnllKG4sInByZXNlcnZlTmV3TGluZXMiLCEwKSxtYXhfcHJlc2VydmVfbmV3bGluZXM6eWUobiwibWF4UHJlc2VydmVOZXdMaW5lcyIsMzI3ODYpLGluZGVudF9oYW5kbGViYXJzOnllKG4sImluZGVudEhhbmRsZWJhcnMiLCExKSxlbmRfd2l0aF9uZXdsaW5lOnImJnllKG4sImVuZFdpdGhOZXdsaW5lIiwhMSksZXh0cmFfbGluZXJzOnVpKG4sImV4dHJhTGluZXJzIix2b2lkIDApLHdyYXBfYXR0cmlidXRlczp5ZShuLCJ3cmFwQXR0cmlidXRlcyIsImF1dG8iKSx3cmFwX2F0dHJpYnV0ZXNfaW5kZW50X3NpemU6eWUobiwid3JhcEF0dHJpYnV0ZXNJbmRlbnRTaXplIix2b2lkIDApLGVvbDpgCmAsaW5kZW50X3NjcmlwdHM6eWUobiwiaW5kZW50U2NyaXB0cyIsIm5vcm1hbCIpLHRlbXBsYXRpbmc6SXUobiwiYWxsIiksdW5mb3JtYXR0ZWRfY29udGVudF9kZWxpbWl0ZXI6eWUobiwidW5mb3JtYXR0ZWRDb250ZW50RGVsaW1pdGVyIiwiIil9LGI9TXUoTnUoaSksZik7aWYoYT4wKXt2YXIgcD1uLmluc2VydFNwYWNlcz9RYSgiICIscyphKTpRYSgiCSIsYSk7Yj1iLnNwbGl0KGAKYCkuam9pbihgCmArcCksdC5zdGFydC5jaGFyYWN0ZXI9PT0wJiYoYj1wK2IpfXJldHVyblt7cmFuZ2U6dCxuZXdUZXh0OmJ9XX1mdW5jdGlvbiBOdShlKXtyZXR1cm4gZS5yZXBsYWNlKC9eXHMrLywiIil9ZnVuY3Rpb24geWUoZSx0LG4pe2lmKGUmJmUuaGFzT3duUHJvcGVydHkodCkpe3ZhciBpPWVbdF07aWYoaSE9PW51bGwpcmV0dXJuIGl9cmV0dXJuIG59ZnVuY3Rpb24gdWkoZSx0LG4pe3ZhciBpPXllKGUsdCxudWxsKTtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP2kubGVuZ3RoPjA/aS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gci50cmltKCkudG9Mb3dlckNhc2UoKX0pOltdOm59ZnVuY3Rpb24gSXUoZSx0KXt2YXIgbj15ZShlLCJ0ZW1wbGF0aW5nIix0KTtyZXR1cm4gbj09PSEwP1siYXV0byJdOlsibm9uZSJdfWZ1bmN0aW9uIHp1KGUsdCxuKXtmb3IodmFyIGk9dCxyPTAsYT1uLnRhYlNpemV8fDQ7aTxlLmxlbmd0aDspe3ZhciBzPWUuY2hhckF0KGkpO2lmKHM9PT0iICIpcisrO2Vsc2UgaWYocz09PSIJIilyKz1hO2Vsc2UgYnJlYWs7aSsrfXJldHVybiBNYXRoLmZsb29yKHIvYSl9ZnVuY3Rpb24gaXMoZSx0KXtyZXR1cm5gXHIKYC5pbmRleE9mKGUuY2hhckF0KHQpKSE9PS0xfWZ1bmN0aW9uIHJzKGUsdCl7cmV0dXJuIiAJIi5pbmRleE9mKGUuY2hhckF0KHQpKSE9PS0xfXZhciBhczthcz0oKCk9Pnt2YXIgZT17NDcwOmk9PntmdW5jdGlvbiByKG8pe2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkobykpfWZ1bmN0aW9uIGEobyxsKXtmb3IodmFyIHUsYz0iIixkPTAsbT0tMSxmPTAsYj0wO2I8PW8ubGVuZ3RoOysrYil7aWYoYjxvLmxlbmd0aCl1PW8uY2hhckNvZGVBdChiKTtlbHNle2lmKHU9PT00NylicmVhazt1PTQ3fWlmKHU9PT00Nyl7aWYoIShtPT09Yi0xfHxmPT09MSkpaWYobSE9PWItMSYmZj09PTIpe2lmKGMubGVuZ3RoPDJ8fGQhPT0yfHxjLmNoYXJDb2RlQXQoYy5sZW5ndGgtMSkhPT00Nnx8Yy5jaGFyQ29kZUF0KGMubGVuZ3RoLTIpIT09NDYpe2lmKGMubGVuZ3RoPjIpe3ZhciBwPWMubGFzdEluZGV4T2YoIi8iKTtpZihwIT09Yy5sZW5ndGgtMSl7cD09PS0xPyhjPSIiLGQ9MCk6ZD0oYz1jLnNsaWNlKDAscCkpLmxlbmd0aC0xLWMubGFzdEluZGV4T2YoIi8iKSxtPWIsZj0wO2NvbnRpbnVlfX1lbHNlIGlmKGMubGVuZ3RoPT09Mnx8Yy5sZW5ndGg9PT0xKXtjPSIiLGQ9MCxtPWIsZj0wO2NvbnRpbnVlfX1sJiYoYy5sZW5ndGg+MD9jKz0iLy4uIjpjPSIuLiIsZD0yKX1lbHNlIGMubGVuZ3RoPjA/Yys9Ii8iK28uc2xpY2UobSsxLGIpOmM9by5zbGljZShtKzEsYiksZD1iLW0tMTttPWIsZj0wfWVsc2UgdT09PTQ2JiZmIT09LTE/KytmOmY9LTF9cmV0dXJuIGN9dmFyIHM9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIG8sbD0iIix1PSExLGM9YXJndW1lbnRzLmxlbmd0aC0xO2M+PS0xJiYhdTtjLS0pe3ZhciBkO2M+PTA/ZD1hcmd1bWVudHNbY106KG89PT12b2lkIDAmJihvPXByb2Nlc3MuY3dkKCkpLGQ9bykscihkKSxkLmxlbmd0aCE9PTAmJihsPWQrIi8iK2wsdT1kLmNoYXJDb2RlQXQoMCk9PT00Nyl9cmV0dXJuIGw9YShsLCF1KSx1P2wubGVuZ3RoPjA/Ii8iK2w6Ii8iOmwubGVuZ3RoPjA/bDoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihvKXtpZihyKG8pLG8ubGVuZ3RoPT09MClyZXR1cm4iLiI7dmFyIGw9by5jaGFyQ29kZUF0KDApPT09NDcsdT1vLmNoYXJDb2RlQXQoby5sZW5ndGgtMSk9PT00NztyZXR1cm4obz1hKG8sIWwpKS5sZW5ndGghPT0wfHxsfHwobz0iLiIpLG8ubGVuZ3RoPjAmJnUmJihvKz0iLyIpLGw/Ii8iK286b30saXNBYnNvbHV0ZTpmdW5jdGlvbihvKXtyZXR1cm4gcihvKSxvLmxlbmd0aD4wJiZvLmNoYXJDb2RlQXQoMCk9PT00N30sam9pbjpmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIG8sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDsrK2wpe3ZhciB1PWFyZ3VtZW50c1tsXTtyKHUpLHUubGVuZ3RoPjAmJihvPT09dm9pZCAwP289dTpvKz0iLyIrdSl9cmV0dXJuIG89PT12b2lkIDA/Ii4iOnMubm9ybWFsaXplKG8pfSxyZWxhdGl2ZTpmdW5jdGlvbihvLGwpe2lmKHIobykscihsKSxvPT09bHx8KG89cy5yZXNvbHZlKG8pKT09PShsPXMucmVzb2x2ZShsKSkpcmV0dXJuIiI7Zm9yKHZhciB1PTE7dTxvLmxlbmd0aCYmby5jaGFyQ29kZUF0KHUpPT09NDc7Kyt1KTtmb3IodmFyIGM9by5sZW5ndGgsZD1jLXUsbT0xO208bC5sZW5ndGgmJmwuY2hhckNvZGVBdChtKT09PTQ3OysrbSk7Zm9yKHZhciBmPWwubGVuZ3RoLW0sYj1kPGY/ZDpmLHA9LTEsdz0wO3c8PWI7Kyt3KXtpZih3PT09Yil7aWYoZj5iKXtpZihsLmNoYXJDb2RlQXQobSt3KT09PTQ3KXJldHVybiBsLnNsaWNlKG0rdysxKTtpZih3PT09MClyZXR1cm4gbC5zbGljZShtK3cpfWVsc2UgZD5iJiYoby5jaGFyQ29kZUF0KHUrdyk9PT00Nz9wPXc6dz09PTAmJihwPTApKTticmVha312YXIgeD1vLmNoYXJDb2RlQXQodSt3KTtpZih4IT09bC5jaGFyQ29kZUF0KG0rdykpYnJlYWs7eD09PTQ3JiYocD13KX12YXIgXz0iIjtmb3Iodz11K3ArMTt3PD1jOysrdyl3IT09YyYmby5jaGFyQ29kZUF0KHcpIT09NDd8fChfLmxlbmd0aD09PTA/Xys9Ii4uIjpfKz0iLy4uIik7cmV0dXJuIF8ubGVuZ3RoPjA/XytsLnNsaWNlKG0rcCk6KG0rPXAsbC5jaGFyQ29kZUF0KG0pPT09NDcmJisrbSxsLnNsaWNlKG0pKX0sX21ha2VMb25nOmZ1bmN0aW9uKG8pe3JldHVybiBvfSxkaXJuYW1lOmZ1bmN0aW9uKG8pe2lmKHIobyksby5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIGw9by5jaGFyQ29kZUF0KDApLHU9bD09PTQ3LGM9LTEsZD0hMCxtPW8ubGVuZ3RoLTE7bT49MTstLW0paWYoKGw9by5jaGFyQ29kZUF0KG0pKT09PTQ3KXtpZighZCl7Yz1tO2JyZWFrfX1lbHNlIGQ9ITE7cmV0dXJuIGM9PT0tMT91PyIvIjoiLiI6dSYmYz09PTE/Ii8vIjpvLnNsaWNlKDAsYyl9LGJhc2VuYW1lOmZ1bmN0aW9uKG8sbCl7aWYobCE9PXZvaWQgMCYmdHlwZW9mIGwhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtyKG8pO3ZhciB1LGM9MCxkPS0xLG09ITA7aWYobCE9PXZvaWQgMCYmbC5sZW5ndGg+MCYmbC5sZW5ndGg8PW8ubGVuZ3RoKXtpZihsLmxlbmd0aD09PW8ubGVuZ3RoJiZsPT09bylyZXR1cm4iIjt2YXIgZj1sLmxlbmd0aC0xLGI9LTE7Zm9yKHU9by5sZW5ndGgtMTt1Pj0wOy0tdSl7dmFyIHA9by5jaGFyQ29kZUF0KHUpO2lmKHA9PT00Nyl7aWYoIW0pe2M9dSsxO2JyZWFrfX1lbHNlIGI9PT0tMSYmKG09ITEsYj11KzEpLGY+PTAmJihwPT09bC5jaGFyQ29kZUF0KGYpPy0tZj09LTEmJihkPXUpOihmPS0xLGQ9YikpfXJldHVybiBjPT09ZD9kPWI6ZD09PS0xJiYoZD1vLmxlbmd0aCksby5zbGljZShjLGQpfWZvcih1PW8ubGVuZ3RoLTE7dT49MDstLXUpaWYoby5jaGFyQ29kZUF0KHUpPT09NDcpe2lmKCFtKXtjPXUrMTticmVha319ZWxzZSBkPT09LTEmJihtPSExLGQ9dSsxKTtyZXR1cm4gZD09PS0xPyIiOm8uc2xpY2UoYyxkKX0sZXh0bmFtZTpmdW5jdGlvbihvKXtyKG8pO2Zvcih2YXIgbD0tMSx1PTAsYz0tMSxkPSEwLG09MCxmPW8ubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciBiPW8uY2hhckNvZGVBdChmKTtpZihiIT09NDcpYz09PS0xJiYoZD0hMSxjPWYrMSksYj09PTQ2P2w9PT0tMT9sPWY6bSE9PTEmJihtPTEpOmwhPT0tMSYmKG09LTEpO2Vsc2UgaWYoIWQpe3U9ZisxO2JyZWFrfX1yZXR1cm4gbD09PS0xfHxjPT09LTF8fG09PT0wfHxtPT09MSYmbD09PWMtMSYmbD09PXUrMT8iIjpvLnNsaWNlKGwsYyl9LGZvcm1hdDpmdW5jdGlvbihvKXtpZihvPT09bnVsbHx8dHlwZW9mIG8hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBvKTtyZXR1cm4gZnVuY3Rpb24obCx1KXt2YXIgYz11LmRpcnx8dS5yb290LGQ9dS5iYXNlfHwodS5uYW1lfHwiIikrKHUuZXh0fHwiIik7cmV0dXJuIGM/Yz09PXUucm9vdD9jK2Q6YysiLyIrZDpkfSgwLG8pfSxwYXJzZTpmdW5jdGlvbihvKXtyKG8pO3ZhciBsPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihvLmxlbmd0aD09PTApcmV0dXJuIGw7dmFyIHUsYz1vLmNoYXJDb2RlQXQoMCksZD1jPT09NDc7ZD8obC5yb290PSIvIix1PTEpOnU9MDtmb3IodmFyIG09LTEsZj0wLGI9LTEscD0hMCx3PW8ubGVuZ3RoLTEseD0wO3c+PXU7LS13KWlmKChjPW8uY2hhckNvZGVBdCh3KSkhPT00NyliPT09LTEmJihwPSExLGI9dysxKSxjPT09NDY/bT09PS0xP209dzp4IT09MSYmKHg9MSk6bSE9PS0xJiYoeD0tMSk7ZWxzZSBpZighcCl7Zj13KzE7YnJlYWt9cmV0dXJuIG09PT0tMXx8Yj09PS0xfHx4PT09MHx8eD09PTEmJm09PT1iLTEmJm09PT1mKzE/YiE9PS0xJiYobC5iYXNlPWwubmFtZT1mPT09MCYmZD9vLnNsaWNlKDEsYik6by5zbGljZShmLGIpKTooZj09PTAmJmQ/KGwubmFtZT1vLnNsaWNlKDEsbSksbC5iYXNlPW8uc2xpY2UoMSxiKSk6KGwubmFtZT1vLnNsaWNlKGYsbSksbC5iYXNlPW8uc2xpY2UoZixiKSksbC5leHQ9by5zbGljZShtLGIpKSxmPjA/bC5kaXI9by5zbGljZSgwLGYtMSk6ZCYmKGwuZGlyPSIvIiksbH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07cy5wb3NpeD1zLGkuZXhwb3J0cz1zfSw0NDc6KGkscixhKT0+e3ZhciBzO2lmKGEucihyKSxhLmQocix7VVJJOigpPT5fLFV0aWxzOigpPT5OfSksdHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiKXM9cHJvY2Vzcy5wbGF0Zm9ybT09PSJ3aW4zMiI7ZWxzZSBpZih0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0Iil7dmFyIG89bmF2aWdhdG9yLnVzZXJBZ2VudDtzPW8uaW5kZXhPZigiV2luZG93cyIpPj0wfXZhciBsLHUsYz0obD1mdW5jdGlvbihMLEEpe3JldHVybihsPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihNLFcpe00uX19wcm90b19fPVd9fHxmdW5jdGlvbihNLFcpe2Zvcih2YXIgSSBpbiBXKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChXLEkpJiYoTVtJXT1XW0ldKX0pKEwsQSl9LGZ1bmN0aW9uKEwsQSl7aWYodHlwZW9mIEEhPSJmdW5jdGlvbiImJkEhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoQSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gTSgpe3RoaXMuY29uc3RydWN0b3I9TH1sKEwsQSksTC5wcm90b3R5cGU9QT09PW51bGw/T2JqZWN0LmNyZWF0ZShBKTooTS5wcm90b3R5cGU9QS5wcm90b3R5cGUsbmV3IE0pfSksZD0vXlx3W1x3XGQrLi1dKiQvLG09L15cLy8sZj0vXlwvXC8vO2Z1bmN0aW9uIGIoTCxBKXtpZighTC5zY2hlbWUmJkEpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KEwuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KEwucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoTC5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoTC5mcmFnbWVudCwnIn0nKSk7aWYoTC5zY2hlbWUmJiFkLnRlc3QoTC5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihMLnBhdGgpe2lmKEwuYXV0aG9yaXR5KXtpZighbS50ZXN0KEwucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihmLnRlc3QoTC5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX19dmFyIHA9IiIsdz0iLyIseD0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LyxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTChBLE0sVyxJLHosQil7Qj09PXZvaWQgMCYmKEI9ITEpLHR5cGVvZiBBPT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9QS5zY2hlbWV8fHAsdGhpcy5hdXRob3JpdHk9QS5hdXRob3JpdHl8fHAsdGhpcy5wYXRoPUEucGF0aHx8cCx0aGlzLnF1ZXJ5PUEucXVlcnl8fHAsdGhpcy5mcmFnbWVudD1BLmZyYWdtZW50fHxwKToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oWCxRKXtyZXR1cm4gWHx8UT9YOiJmaWxlIn0oQSxCKSx0aGlzLmF1dGhvcml0eT1NfHxwLHRoaXMucGF0aD1mdW5jdGlvbihYLFEpe3N3aXRjaChYKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6UT9RWzBdIT09dyYmKFE9dytRKTpRPXd9cmV0dXJuIFF9KHRoaXMuc2NoZW1lLFd8fHApLHRoaXMucXVlcnk9SXx8cCx0aGlzLmZyYWdtZW50PXp8fHAsYih0aGlzLEIpKX1yZXR1cm4gTC5pc1VyaT1mdW5jdGlvbihBKXtyZXR1cm4gQSBpbnN0YW5jZW9mIEx8fCEhQSYmdHlwZW9mIEEuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIEEuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2YgQS5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIEEucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2YgQS5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2YgQS5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2YgQS53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgQS50b1N0cmluZz09ImZ1bmN0aW9uIn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEwucHJvdG90eXBlLCJmc1BhdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxMLnByb3RvdHlwZS53aXRoPWZ1bmN0aW9uKEEpe2lmKCFBKXJldHVybiB0aGlzO3ZhciBNPUEuc2NoZW1lLFc9QS5hdXRob3JpdHksST1BLnBhdGgsej1BLnF1ZXJ5LEI9QS5mcmFnbWVudDtyZXR1cm4gTT09PXZvaWQgMD9NPXRoaXMuc2NoZW1lOk09PT1udWxsJiYoTT1wKSxXPT09dm9pZCAwP1c9dGhpcy5hdXRob3JpdHk6Vz09PW51bGwmJihXPXApLEk9PT12b2lkIDA/ST10aGlzLnBhdGg6ST09PW51bGwmJihJPXApLHo9PT12b2lkIDA/ej10aGlzLnF1ZXJ5Ono9PT1udWxsJiYoej1wKSxCPT09dm9pZCAwP0I9dGhpcy5mcmFnbWVudDpCPT09bnVsbCYmKEI9cCksTT09PXRoaXMuc2NoZW1lJiZXPT09dGhpcy5hdXRob3JpdHkmJkk9PT10aGlzLnBhdGgmJno9PT10aGlzLnF1ZXJ5JiZCPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBFKE0sVyxJLHosQil9LEwucGFyc2U9ZnVuY3Rpb24oQSxNKXtNPT09dm9pZCAwJiYoTT0hMSk7dmFyIFc9eC5leGVjKEEpO3JldHVybiBXP25ldyBFKFdbMl18fHAsayhXWzRdfHxwKSxrKFdbNV18fHApLGsoV1s3XXx8cCksayhXWzldfHxwKSxNKTpuZXcgRShwLHAscCxwLHApfSxMLmZpbGU9ZnVuY3Rpb24oQSl7dmFyIE09cDtpZihzJiYoQT1BLnJlcGxhY2UoL1xcL2csdykpLEFbMF09PT13JiZBWzFdPT09dyl7dmFyIFc9QS5pbmRleE9mKHcsMik7Vz09PS0xPyhNPUEuc3Vic3RyaW5nKDIpLEE9dyk6KE09QS5zdWJzdHJpbmcoMixXKSxBPUEuc3Vic3RyaW5nKFcpfHx3KX1yZXR1cm4gbmV3IEUoImZpbGUiLE0sQSxwLHApfSxMLmZyb209ZnVuY3Rpb24oQSl7dmFyIE09bmV3IEUoQS5zY2hlbWUsQS5hdXRob3JpdHksQS5wYXRoLEEucXVlcnksQS5mcmFnbWVudCk7cmV0dXJuIGIoTSwhMCksTX0sTC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQSl7cmV0dXJuIEE9PT12b2lkIDAmJihBPSExKSxUKHRoaXMsQSl9LEwucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxMLnJldml2ZT1mdW5jdGlvbihBKXtpZihBKXtpZihBIGluc3RhbmNlb2YgTClyZXR1cm4gQTt2YXIgTT1uZXcgRShBKTtyZXR1cm4gTS5fZm9ybWF0dGVkPUEuZXh0ZXJuYWwsTS5fZnNQYXRoPUEuX3NlcD09PXk/QS5mc1BhdGg6bnVsbCxNfXJldHVybiBBfSxMfSgpLHk9cz8xOnZvaWQgMCxFPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIEEoKXt2YXIgTT1MIT09bnVsbCYmTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIE0uX2Zvcm1hdHRlZD1udWxsLE0uX2ZzUGF0aD1udWxsLE19cmV0dXJuIGMoQSxMKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9Zyh0aGlzKSksdGhpcy5fZnNQYXRofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLEEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKE0pe3JldHVybiBNPT09dm9pZCAwJiYoTT0hMSksTT9UKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9VCh0aGlzLCExKSksdGhpcy5fZm9ybWF0dGVkKX0sQS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIE09eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKE0uZnNQYXRoPXRoaXMuX2ZzUGF0aCxNLl9zZXA9eSksdGhpcy5fZm9ybWF0dGVkJiYoTS5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKE0ucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYoTS5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYoTS5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJihNLnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJihNLmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLE19LEF9KF8pLFI9KCh1PXt9KVs1OF09IiUzQSIsdVs0N109IiUyRiIsdVs2M109IiUzRiIsdVszNV09IiUyMyIsdVs5MV09IiU1QiIsdVs5M109IiU1RCIsdVs2NF09IiU0MCIsdVszM109IiUyMSIsdVszNl09IiUyNCIsdVszOF09IiUyNiIsdVszOV09IiUyNyIsdVs0MF09IiUyOCIsdVs0MV09IiUyOSIsdVs0Ml09IiUyQSIsdVs0M109IiUyQiIsdVs0NF09IiUyQyIsdVs1OV09IiUzQiIsdVs2MV09IiUzRCIsdVszMl09IiUyMCIsdSk7ZnVuY3Rpb24gUChMLEEpe2Zvcih2YXIgTT12b2lkIDAsVz0tMSxJPTA7STxMLmxlbmd0aDtJKyspe3ZhciB6PUwuY2hhckNvZGVBdChJKTtpZih6Pj05NyYmejw9MTIyfHx6Pj02NSYmejw9OTB8fHo+PTQ4JiZ6PD01N3x8ej09PTQ1fHx6PT09NDZ8fHo9PT05NXx8ej09PTEyNnx8QSYmej09PTQ3KVchPT0tMSYmKE0rPWVuY29kZVVSSUNvbXBvbmVudChMLnN1YnN0cmluZyhXLEkpKSxXPS0xKSxNIT09dm9pZCAwJiYoTSs9TC5jaGFyQXQoSSkpO2Vsc2V7TT09PXZvaWQgMCYmKE09TC5zdWJzdHIoMCxJKSk7dmFyIEI9Ult6XTtCIT09dm9pZCAwPyhXIT09LTEmJihNKz1lbmNvZGVVUklDb21wb25lbnQoTC5zdWJzdHJpbmcoVyxJKSksVz0tMSksTSs9Qik6Vz09PS0xJiYoVz1JKX19cmV0dXJuIFchPT0tMSYmKE0rPWVuY29kZVVSSUNvbXBvbmVudChMLnN1YnN0cmluZyhXKSkpLE0hPT12b2lkIDA/TTpMfWZ1bmN0aW9uIHYoTCl7Zm9yKHZhciBBPXZvaWQgMCxNPTA7TTxMLmxlbmd0aDtNKyspe3ZhciBXPUwuY2hhckNvZGVBdChNKTtXPT09MzV8fFc9PT02Mz8oQT09PXZvaWQgMCYmKEE9TC5zdWJzdHIoMCxNKSksQSs9UltXXSk6QSE9PXZvaWQgMCYmKEErPUxbTV0pfXJldHVybiBBIT09dm9pZCAwP0E6TH1mdW5jdGlvbiBnKEwsQSl7dmFyIE07cmV0dXJuIE09TC5hdXRob3JpdHkmJkwucGF0aC5sZW5ndGg+MSYmTC5zY2hlbWU9PT0iZmlsZSI/Ii8vIi5jb25jYXQoTC5hdXRob3JpdHkpLmNvbmNhdChMLnBhdGgpOkwucGF0aC5jaGFyQ29kZUF0KDApPT09NDcmJihMLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJkwucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8TC5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZMLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmTC5wYXRoLmNoYXJDb2RlQXQoMik9PT01OD9MLnBhdGhbMV0udG9Mb3dlckNhc2UoKStMLnBhdGguc3Vic3RyKDIpOkwucGF0aCxzJiYoTT1NLnJlcGxhY2UoL1wvL2csIlxcIikpLE19ZnVuY3Rpb24gVChMLEEpe3ZhciBNPUE/djpQLFc9IiIsST1MLnNjaGVtZSx6PUwuYXV0aG9yaXR5LEI9TC5wYXRoLFg9TC5xdWVyeSxRPUwuZnJhZ21lbnQ7aWYoSSYmKFcrPUksVys9IjoiKSwoenx8ST09PSJmaWxlIikmJihXKz13LFcrPXcpLHope3ZhciBKPXouaW5kZXhPZigiQCIpO2lmKEohPT0tMSl7dmFyIFo9ei5zdWJzdHIoMCxKKTt6PXouc3Vic3RyKEorMSksKEo9Wi5pbmRleE9mKCI6IikpPT09LTE/Vys9TShaLCExKTooVys9TShaLnN1YnN0cigwLEopLCExKSxXKz0iOiIsVys9TShaLnN1YnN0cihKKzEpLCExKSksVys9IkAifShKPSh6PXoudG9Mb3dlckNhc2UoKSkuaW5kZXhPZigiOiIpKT09PS0xP1crPU0oeiwhMSk6KFcrPU0oei5zdWJzdHIoMCxKKSwhMSksVys9ei5zdWJzdHIoSikpfWlmKEIpe2lmKEIubGVuZ3RoPj0zJiZCLmNoYXJDb2RlQXQoMCk9PT00NyYmQi5jaGFyQ29kZUF0KDIpPT09NTgpKGZlPUIuY2hhckNvZGVBdCgxKSk+PTY1JiZmZTw9OTAmJihCPSIvIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShmZSszMiksIjoiKS5jb25jYXQoQi5zdWJzdHIoMykpKTtlbHNlIGlmKEIubGVuZ3RoPj0yJiZCLmNoYXJDb2RlQXQoMSk9PT01OCl7dmFyIGZlOyhmZT1CLmNoYXJDb2RlQXQoMCkpPj02NSYmZmU8PTkwJiYoQj0iIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShmZSszMiksIjoiKS5jb25jYXQoQi5zdWJzdHIoMikpKX1XKz1NKEIsITApfXJldHVybiBYJiYoVys9Ij8iLFcrPU0oWCwhMSkpLFEmJihXKz0iIyIsVys9QT9ROlAoUSwhMSkpLFd9ZnVuY3Rpb24gcShMKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChMKX1jYXRjaHtyZXR1cm4gTC5sZW5ndGg+Mz9MLnN1YnN0cigwLDMpK3EoTC5zdWJzdHIoMykpOkx9fXZhciBTPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIGsoTCl7cmV0dXJuIEwubWF0Y2goUyk/TC5yZXBsYWNlKFMsZnVuY3Rpb24oQSl7cmV0dXJuIHEoQSl9KTpMfXZhciBOLEQ9YSg0NzApLEg9ZnVuY3Rpb24oTCxBLE0pe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgVyxJPTAsej1BLmxlbmd0aDtJPHo7SSsrKSFXJiZJIGluIEF8fChXfHwoVz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChBLDAsSSkpLFdbSV09QVtJXSk7cmV0dXJuIEwuY29uY2F0KFd8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEEpKX0sRj1ELnBvc2l4fHxEOyhmdW5jdGlvbihMKXtMLmpvaW5QYXRoPWZ1bmN0aW9uKEEpe2Zvcih2YXIgTT1bXSxXPTE7Vzxhcmd1bWVudHMubGVuZ3RoO1crKylNW1ctMV09YXJndW1lbnRzW1ddO3JldHVybiBBLndpdGgoe3BhdGg6Ri5qb2luLmFwcGx5KEYsSChbQS5wYXRoXSxNLCExKSl9KX0sTC5yZXNvbHZlUGF0aD1mdW5jdGlvbihBKXtmb3IodmFyIE09W10sVz0xO1c8YXJndW1lbnRzLmxlbmd0aDtXKyspTVtXLTFdPWFyZ3VtZW50c1tXXTt2YXIgST1BLnBhdGh8fCIvIjtyZXR1cm4gQS53aXRoKHtwYXRoOkYucmVzb2x2ZS5hcHBseShGLEgoW0ldLE0sITEpKX0pfSxMLmRpcm5hbWU9ZnVuY3Rpb24oQSl7dmFyIE09Ri5kaXJuYW1lKEEucGF0aCk7cmV0dXJuIE0ubGVuZ3RoPT09MSYmTS5jaGFyQ29kZUF0KDApPT09NDY/QTpBLndpdGgoe3BhdGg6TX0pfSxMLmJhc2VuYW1lPWZ1bmN0aW9uKEEpe3JldHVybiBGLmJhc2VuYW1lKEEucGF0aCl9LEwuZXh0bmFtZT1mdW5jdGlvbihBKXtyZXR1cm4gRi5leHRuYW1lKEEucGF0aCl9fSkoTnx8KE49e30pKX19LHQ9e307ZnVuY3Rpb24gbihpKXtpZih0W2ldKXJldHVybiB0W2ldLmV4cG9ydHM7dmFyIHI9dFtpXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbaV0ocixyLmV4cG9ydHMsbiksci5leHBvcnRzfXJldHVybiBuLmQ9KGkscik9Pntmb3IodmFyIGEgaW4gciluLm8ocixhKSYmIW4ubyhpLGEpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxhLHtlbnVtZXJhYmxlOiEwLGdldDpyW2FdfSl9LG4ubz0oaSxyKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksciksbi5yPWk9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuKDQ0Nyl9KSgpO3ZhcntVUkk6SHUsVXRpbHM6Y2N9PWFzO2Z1bmN0aW9uIGNpKGUpe3ZhciB0PWVbMF0sbj1lW2UubGVuZ3RoLTFdO3JldHVybiB0PT09biYmKHQ9PT0iJyJ8fHQ9PT0nIicpJiYoZT1lLnN1YnN0cigxLGUubGVuZ3RoLTIpKSxlfWZ1bmN0aW9uIFV1KGUsdCl7cmV0dXJuIWUubGVuZ3RofHx0PT09ImhhbmRsZWJhcnMiJiYve3t8fX0vLnRlc3QoZSk/ITE6L1xiKHdbXHdcZCsuLV0qOlwvXC8pP1teXHMoKTw+XSsoPzpcKFtcd1xkXStcKXwoW15bOnB1bmN0Ol1cc118XC8/KSkvLnRlc3QoZSl9ZnVuY3Rpb24gV3UoZSx0LG4saSl7aWYoISgvXlxzKmphdmFzY3JpcHRcOi9pLnRlc3QodCl8fC9bXG5ccl0vLnRlc3QodCkpKXtpZih0PXQucmVwbGFjZSgvXlxzKi9nLCIiKSwvXmh0dHBzPzpcL1wvL2kudGVzdCh0KXx8L15maWxlOlwvXC8vaS50ZXN0KHQpKXJldHVybiB0O2lmKC9eXCMvaS50ZXN0KHQpKXJldHVybiBlK3Q7aWYoL15cL1wvL2kudGVzdCh0KSl7dmFyIHI9UWUoZSwiaHR0cHM6Ly8iKT8iaHR0cHMiOiJodHRwIjtyZXR1cm4gcisiOiIrdC5yZXBsYWNlKC9eXHMqL2csIiIpfXJldHVybiBuP24ucmVzb2x2ZVJlZmVyZW5jZSh0LGl8fGUpOnR9fWZ1bmN0aW9uIEZ1KGUsdCxuLGkscixhKXt2YXIgcz1jaShuKTtpZihVdShzLGUubGFuZ3VhZ2VJZCkpe3MubGVuZ3RoPG4ubGVuZ3RoJiYoaSsrLHItLSk7dmFyIG89V3UoZS51cmkscyx0LGEpO2lmKCEoIW98fCFQdShvKSkpcmV0dXJue3JhbmdlOlkuY3JlYXRlKGUucG9zaXRpb25BdChpKSxlLnBvc2l0aW9uQXQocikpLHRhcmdldDpvfX19ZnVuY3Rpb24gUHUoZSl7dHJ5e3JldHVybiBIdS5wYXJzZShlKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gQnUoZSx0KXtmb3IodmFyIG49W10saT13ZShlLmdldFRleHQoKSwwKSxyPWkuc2NhbigpLGE9dm9pZCAwLHM9ITEsbz12b2lkIDAsbD17fTtyIT09VS5FT1M7KXtzd2l0Y2gocil7Y2FzZSBVLlN0YXJ0VGFnOmlmKCFvKXt2YXIgdT1pLmdldFRva2VuVGV4dCgpLnRvTG93ZXJDYXNlKCk7cz11PT09ImJhc2UifWJyZWFrO2Nhc2UgVS5BdHRyaWJ1dGVOYW1lOmE9aS5nZXRUb2tlblRleHQoKS50b0xvd2VyQ2FzZSgpO2JyZWFrO2Nhc2UgVS5BdHRyaWJ1dGVWYWx1ZTppZihhPT09InNyYyJ8fGE9PT0iaHJlZiIpe3ZhciBjPWkuZ2V0VG9rZW5UZXh0KCk7aWYoIXMpe3ZhciBkPUZ1KGUsdCxjLGkuZ2V0VG9rZW5PZmZzZXQoKSxpLmdldFRva2VuRW5kKCksbyk7ZCYmbi5wdXNoKGQpfXMmJnR5cGVvZiBvPiJ1IiYmKG89Y2koYyksbyYmdCYmKG89dC5yZXNvbHZlUmVmZXJlbmNlKG8sZS51cmkpKSkscz0hMSxhPXZvaWQgMH1lbHNlIGlmKGE9PT0iaWQiKXt2YXIgbT1jaShpLmdldFRva2VuVGV4dCgpKTtsW21dPWkuZ2V0VG9rZW5PZmZzZXQoKX1icmVha31yPWkuc2NhbigpfWZvcih2YXIgZj0wLGI9bjtmPGIubGVuZ3RoO2YrKyl7dmFyIGQ9YltmXSxwPWUudXJpKyIjIjtpZihkLnRhcmdldCYmUWUoZC50YXJnZXQscCkpe3ZhciB3PWQudGFyZ2V0LnN1YnN0cihwLmxlbmd0aCkseD1sW3ddO2lmKHghPT12b2lkIDApe3ZhciBfPWUucG9zaXRpb25BdCh4KTtkLnRhcmdldD0iIi5jb25jYXQocCkuY29uY2F0KF8ubGluZSsxLCIsIikuY29uY2F0KF8uY2hhcmFjdGVyKzEpfX19cmV0dXJuIG59ZnVuY3Rpb24gcXUoZSx0LG4pe3ZhciBpPWUub2Zmc2V0QXQodCkscj1uLmZpbmROb2RlQXQoaSk7aWYoIXIudGFnKXJldHVybltdO3ZhciBhPVtdLHM9bHMoVS5TdGFydFRhZyxlLHIuc3RhcnQpLG89dHlwZW9mIHIuZW5kVGFnU3RhcnQ9PSJudW1iZXIiJiZscyhVLkVuZFRhZyxlLHIuZW5kVGFnU3RhcnQpO3JldHVybihzJiZvcyhzLHQpfHxvJiZvcyhvLHQpKSYmKHMmJmEucHVzaCh7a2luZDp1bi5SZWFkLHJhbmdlOnN9KSxvJiZhLnB1c2goe2tpbmQ6dW4uUmVhZCxyYW5nZTpvfSkpLGF9ZnVuY3Rpb24gc3MoZSx0KXtyZXR1cm4gZS5saW5lPHQubGluZXx8ZS5saW5lPT09dC5saW5lJiZlLmNoYXJhY3Rlcjw9dC5jaGFyYWN0ZXJ9ZnVuY3Rpb24gb3MoZSx0KXtyZXR1cm4gc3MoZS5zdGFydCx0KSYmc3ModCxlLmVuZCl9ZnVuY3Rpb24gbHMoZSx0LG4pe2Zvcih2YXIgaT13ZSh0LmdldFRleHQoKSxuKSxyPWkuc2NhbigpO3IhPT1VLkVPUyYmciE9PWU7KXI9aS5zY2FuKCk7cmV0dXJuIHIhPT1VLkVPUz97c3RhcnQ6dC5wb3NpdGlvbkF0KGkuZ2V0VG9rZW5PZmZzZXQoKSksZW5kOnQucG9zaXRpb25BdChpLmdldFRva2VuRW5kKCkpfTpudWxsfWZ1bmN0aW9uIE91KGUsdCl7dmFyIG49W107cmV0dXJuIHQucm9vdHMuZm9yRWFjaChmdW5jdGlvbihpKXt1cyhlLGksIiIsbil9KSxufWZ1bmN0aW9uIHVzKGUsdCxuLGkpe3ZhciByPVZ1KHQpLGE9dG4uY3JlYXRlKGUudXJpLFkuY3JlYXRlKGUucG9zaXRpb25BdCh0LnN0YXJ0KSxlLnBvc2l0aW9uQXQodC5lbmQpKSkscz17bmFtZTpyLGxvY2F0aW9uOmEsY29udGFpbmVyTmFtZTpuLGtpbmQ6cmkuRmllbGR9O2kucHVzaChzKSx0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24obyl7dXMoZSxvLHIsaSl9KX1mdW5jdGlvbiBWdShlKXt2YXIgdD1lLnRhZztpZihlLmF0dHJpYnV0ZXMpe3ZhciBuPWUuYXR0cmlidXRlcy5pZCxpPWUuYXR0cmlidXRlcy5jbGFzcztuJiYodCs9IiMiLmNvbmNhdChuLnJlcGxhY2UoL1tcIlwnXS9nLCIiKSkpLGkmJih0Kz1pLnJlcGxhY2UoL1tcIlwnXS9nLCIiKS5zcGxpdCgvXHMrLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiIuIi5jb25jYXQocil9KS5qb2luKCIiKSl9cmV0dXJuIHR8fCI/In1mdW5jdGlvbiBqdShlLHQsbixpKXt2YXIgcixhPWUub2Zmc2V0QXQodCkscz1pLmZpbmROb2RlQXQoYSk7aWYoIXMudGFnfHwhR3UocyxhLHMudGFnKSlyZXR1cm4gbnVsbDt2YXIgbz1bXSxsPXtzdGFydDplLnBvc2l0aW9uQXQocy5zdGFydCsxKSxlbmQ6ZS5wb3NpdGlvbkF0KHMuc3RhcnQrMStzLnRhZy5sZW5ndGgpfTtpZihvLnB1c2goe3JhbmdlOmwsbmV3VGV4dDpufSkscy5lbmRUYWdTdGFydCl7dmFyIHU9e3N0YXJ0OmUucG9zaXRpb25BdChzLmVuZFRhZ1N0YXJ0KzIpLGVuZDplLnBvc2l0aW9uQXQocy5lbmRUYWdTdGFydCsyK3MudGFnLmxlbmd0aCl9O28ucHVzaCh7cmFuZ2U6dSxuZXdUZXh0Om59KX12YXIgYz0ocj17fSxyW2UudXJpLnRvU3RyaW5nKCldPW8scik7cmV0dXJue2NoYW5nZXM6Y319ZnVuY3Rpb24gR3UoZSx0LG4pe3JldHVybiBlLmVuZFRhZ1N0YXJ0JiZlLmVuZFRhZ1N0YXJ0KzI8PXQmJnQ8PWUuZW5kVGFnU3RhcnQrMituLmxlbmd0aD8hMDplLnN0YXJ0KzE8PXQmJnQ8PWUuc3RhcnQrMStuLmxlbmd0aH1mdW5jdGlvbiAkdShlLHQsbil7dmFyIGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKTtpZighci50YWd8fCFyLmVuZFRhZ1N0YXJ0KXJldHVybiBudWxsO2lmKHIuc3RhcnQrMTw9aSYmaTw9ci5zdGFydCsxK3IudGFnLmxlbmd0aCl7dmFyIGE9aS0xLXIuc3RhcnQrci5lbmRUYWdTdGFydCsyO3JldHVybiBlLnBvc2l0aW9uQXQoYSl9aWYoci5lbmRUYWdTdGFydCsyPD1pJiZpPD1yLmVuZFRhZ1N0YXJ0KzIrci50YWcubGVuZ3RoKXt2YXIgYT1pLTItci5lbmRUYWdTdGFydCtyLnN0YXJ0KzE7cmV0dXJuIGUucG9zaXRpb25BdChhKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBjcyhlLHQsbil7dmFyIGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKSxhPXIudGFnP3IudGFnLmxlbmd0aDowO3JldHVybiByLmVuZFRhZ1N0YXJ0JiYoci5zdGFydCsxPD1pJiZpPD1yLnN0YXJ0KzErYXx8ci5lbmRUYWdTdGFydCsyPD1pJiZpPD1yLmVuZFRhZ1N0YXJ0KzIrYSk/W1kuY3JlYXRlKGUucG9zaXRpb25BdChyLnN0YXJ0KzEpLGUucG9zaXRpb25BdChyLnN0YXJ0KzErYSkpLFkuY3JlYXRlKGUucG9zaXRpb25BdChyLmVuZFRhZ1N0YXJ0KzIpLGUucG9zaXRpb25BdChyLmVuZFRhZ1N0YXJ0KzIrYSkpXTpudWxsfWZ1bmN0aW9uIFh1KGUsdCl7ZT1lLnNvcnQoZnVuY3Rpb24oYixwKXt2YXIgdz1iLnN0YXJ0TGluZS1wLnN0YXJ0TGluZTtyZXR1cm4gdz09PTAmJih3PWIuZW5kTGluZS1wLmVuZExpbmUpLHd9KTtmb3IodmFyIG49dm9pZCAwLGk9W10scj1bXSxhPVtdLHM9ZnVuY3Rpb24oYixwKXtyW2JdPXAscDwzMCYmKGFbcF09KGFbcF18fDApKzEpfSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPWVbb107aWYoIW4pbj1sLHMobywwKTtlbHNlIGlmKGwuc3RhcnRMaW5lPm4uc3RhcnRMaW5lKXtpZihsLmVuZExpbmU8PW4uZW5kTGluZSlpLnB1c2gobiksbj1sLHMobyxpLmxlbmd0aCk7ZWxzZSBpZihsLnN0YXJ0TGluZT5uLmVuZExpbmUpe2RvIG49aS5wb3AoKTt3aGlsZShuJiZsLnN0YXJ0TGluZT5uLmVuZExpbmUpO24mJmkucHVzaChuKSxuPWwscyhvLGkubGVuZ3RoKX19fWZvcih2YXIgdT0wLGM9MCxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBkPWFbb107aWYoZCl7aWYoZCt1PnQpe2M9bzticmVha311Kz1kfX1mb3IodmFyIG09W10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgZj1yW29dO3R5cGVvZiBmPT0ibnVtYmVyIiYmKGY8Y3x8Zj09PWMmJnUrKzx0KSYmbS5wdXNoKGVbb10pfXJldHVybiBtfWZ1bmN0aW9uIEp1KGUsdCl7dmFyIG49d2UoZS5nZXRUZXh0KCkpLGk9bi5zY2FuKCkscj1bXSxhPVtdLHM9bnVsbCxvPS0xO2Z1bmN0aW9uIGwoXyl7ci5wdXNoKF8pLG89Xy5zdGFydExpbmV9Zm9yKDtpIT09VS5FT1M7KXtzd2l0Y2goaSl7Y2FzZSBVLlN0YXJ0VGFnOnt2YXIgdT1uLmdldFRva2VuVGV4dCgpLGM9ZS5wb3NpdGlvbkF0KG4uZ2V0VG9rZW5PZmZzZXQoKSkubGluZTthLnB1c2goe3N0YXJ0TGluZTpjLHRhZ05hbWU6dX0pLHM9dTticmVha31jYXNlIFUuRW5kVGFnOntzPW4uZ2V0VG9rZW5UZXh0KCk7YnJlYWt9Y2FzZSBVLlN0YXJ0VGFnQ2xvc2U6aWYoIXN8fCFkbihzKSlicmVhaztjYXNlIFUuRW5kVGFnQ2xvc2U6Y2FzZSBVLlN0YXJ0VGFnU2VsZkNsb3NlOntmb3IodmFyIGQ9YS5sZW5ndGgtMTtkPj0wJiZhW2RdLnRhZ05hbWUhPT1zOylkLS07aWYoZD49MCl7dmFyIG09YVtkXTthLmxlbmd0aD1kO3ZhciBmPWUucG9zaXRpb25BdChuLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsYz1tLnN0YXJ0TGluZSxiPWYtMTtiPmMmJm8hPT1jJiZsKHtzdGFydExpbmU6YyxlbmRMaW5lOmJ9KX1icmVha31jYXNlIFUuQ29tbWVudDp7dmFyIGM9ZS5wb3NpdGlvbkF0KG4uZ2V0VG9rZW5PZmZzZXQoKSkubGluZSxwPW4uZ2V0VG9rZW5UZXh0KCksdz1wLm1hdGNoKC9eXHMqIyhyZWdpb25cYil8KGVuZHJlZ2lvblxiKS8pO2lmKHcpaWYod1sxXSlhLnB1c2goe3N0YXJ0TGluZTpjLHRhZ05hbWU6IiJ9KTtlbHNle2Zvcih2YXIgZD1hLmxlbmd0aC0xO2Q+PTAmJmFbZF0udGFnTmFtZS5sZW5ndGg7KWQtLTtpZihkPj0wKXt2YXIgbT1hW2RdO2EubGVuZ3RoPWQ7dmFyIGI9YztjPW0uc3RhcnRMaW5lLGI+YyYmbyE9PWMmJmwoe3N0YXJ0TGluZTpjLGVuZExpbmU6YixraW5kOm5uLlJlZ2lvbn0pfX1lbHNle3ZhciBiPWUucG9zaXRpb25BdChuLmdldFRva2VuT2Zmc2V0KCkrbi5nZXRUb2tlbkxlbmd0aCgpKS5saW5lO2M8YiYmbCh7c3RhcnRMaW5lOmMsZW5kTGluZTpiLGtpbmQ6bm4uQ29tbWVudH0pfWJyZWFrfX1pPW4uc2NhbigpfXZhciB4PXQmJnQucmFuZ2VMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRTtyZXR1cm4gci5sZW5ndGg+eD9YdShyLHgpOnJ9ZnVuY3Rpb24gUXUoZSx0KXtmdW5jdGlvbiBuKGkpe2Zvcih2YXIgcj1ZdShlLGkpLGE9dm9pZCAwLHM9dm9pZCAwLG89ci5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGw9cltvXTsoIWF8fGxbMF0hPT1hWzBdfHxsWzFdIT09YVsxXSkmJihzPWNuLmNyZWF0ZShZLmNyZWF0ZShlLnBvc2l0aW9uQXQocltvXVswXSksZS5wb3NpdGlvbkF0KHJbb11bMV0pKSxzKSksYT1sfXJldHVybiBzfHwocz1jbi5jcmVhdGUoWS5jcmVhdGUoaSxpKSkpLHN9cmV0dXJuIHQubWFwKG4pfWZ1bmN0aW9uIFl1KGUsdCl7dmFyIG49SmEoZS5nZXRUZXh0KCkpLGk9ZS5vZmZzZXRBdCh0KSxyPW4uZmluZE5vZGVBdChpKSxhPVp1KHIpO2lmKHIuc3RhcnRUYWdFbmQmJiFyLmVuZFRhZ1N0YXJ0KXtpZihyLnN0YXJ0VGFnRW5kIT09ci5lbmQpcmV0dXJuW1tyLnN0YXJ0LHIuZW5kXV07dmFyIHM9WS5jcmVhdGUoZS5wb3NpdGlvbkF0KHIuc3RhcnRUYWdFbmQtMiksZS5wb3NpdGlvbkF0KHIuc3RhcnRUYWdFbmQpKSxvPWUuZ2V0VGV4dChzKTtvPT09Ii8+Ij9hLnVuc2hpZnQoW3Iuc3RhcnQrMSxyLnN0YXJ0VGFnRW5kLTJdKTphLnVuc2hpZnQoW3Iuc3RhcnQrMSxyLnN0YXJ0VGFnRW5kLTFdKTt2YXIgbD1ocyhlLHIsaSk7cmV0dXJuIGE9bC5jb25jYXQoYSksYX1pZighci5zdGFydFRhZ0VuZHx8IXIuZW5kVGFnU3RhcnQpcmV0dXJuIGE7aWYoYS51bnNoaWZ0KFtyLnN0YXJ0LHIuZW5kXSksci5zdGFydDxpJiZpPHIuc3RhcnRUYWdFbmQpe2EudW5zaGlmdChbci5zdGFydCsxLHIuc3RhcnRUYWdFbmQtMV0pO3ZhciBsPWhzKGUscixpKTtyZXR1cm4gYT1sLmNvbmNhdChhKSxhfWVsc2UgcmV0dXJuIHIuc3RhcnRUYWdFbmQ8PWkmJmk8PXIuZW5kVGFnU3RhcnQ/KGEudW5zaGlmdChbci5zdGFydFRhZ0VuZCxyLmVuZFRhZ1N0YXJ0XSksYSk6KGk+PXIuZW5kVGFnU3RhcnQrMiYmYS51bnNoaWZ0KFtyLmVuZFRhZ1N0YXJ0KzIsci5lbmQtMV0pLGEpfWZ1bmN0aW9uIFp1KGUpe2Zvcih2YXIgdD1lLG49ZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RhcnRUYWdFbmQmJnIuZW5kVGFnU3RhcnQmJnIuc3RhcnRUYWdFbmQ8ci5lbmRUYWdTdGFydD9bW3Iuc3RhcnRUYWdFbmQsci5lbmRUYWdTdGFydF0sW3Iuc3RhcnQsci5lbmRdXTpbW3Iuc3RhcnQsci5lbmRdXX0saT1bXTt0LnBhcmVudDspdD10LnBhcmVudCxuKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIGkucHVzaChyKX0pO3JldHVybiBpfWZ1bmN0aW9uIGhzKGUsdCxuKXtmb3IodmFyIGk9WS5jcmVhdGUoZS5wb3NpdGlvbkF0KHQuc3RhcnQpLGUucG9zaXRpb25BdCh0LmVuZCkpLHI9ZS5nZXRUZXh0KGkpLGE9bi10LnN0YXJ0LHM9d2Uociksbz1zLnNjYW4oKSxsPXQuc3RhcnQsdT1bXSxjPSExLGQ9LTE7byE9PVUuRU9TOyl7c3dpdGNoKG8pe2Nhc2UgVS5BdHRyaWJ1dGVOYW1lOntpZihhPHMuZ2V0VG9rZW5PZmZzZXQoKSl7Yz0hMTticmVha31hPD1zLmdldFRva2VuRW5kKCkmJnUudW5zaGlmdChbcy5nZXRUb2tlbk9mZnNldCgpLHMuZ2V0VG9rZW5FbmQoKV0pLGM9ITAsZD1zLmdldFRva2VuT2Zmc2V0KCk7YnJlYWt9Y2FzZSBVLkF0dHJpYnV0ZVZhbHVlOntpZighYylicmVhazt2YXIgbT1zLmdldFRva2VuVGV4dCgpO2lmKGE8cy5nZXRUb2tlbk9mZnNldCgpKXt1LnB1c2goW2Qscy5nZXRUb2tlbkVuZCgpXSk7YnJlYWt9YT49cy5nZXRUb2tlbk9mZnNldCgpJiZhPD1zLmdldFRva2VuRW5kKCkmJih1LnVuc2hpZnQoW3MuZ2V0VG9rZW5PZmZzZXQoKSxzLmdldFRva2VuRW5kKCldKSwobVswXT09PSciJyYmbVttLmxlbmd0aC0xXT09PSciJ3x8bVswXT09PSInIiYmbVttLmxlbmd0aC0xXT09PSInIikmJmE+PXMuZ2V0VG9rZW5PZmZzZXQoKSsxJiZhPD1zLmdldFRva2VuRW5kKCktMSYmdS51bnNoaWZ0KFtzLmdldFRva2VuT2Zmc2V0KCkrMSxzLmdldFRva2VuRW5kKCktMV0pLHUucHVzaChbZCxzLmdldFRva2VuRW5kKCldKSk7YnJlYWt9fW89cy5zY2FuKCl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybltmWzBdK2wsZlsxXStsXX0pfXZhciBLdT17dmVyc2lvbjoxLjEsdGFnczpbe25hbWU6Imh0bWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBodG1sIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgcm9vdCBvZiBhbiBIVE1MIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJtYW5pZmVzdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSBVUkkgb2YgYSByZXNvdXJjZSBtYW5pZmVzdCBpbmRpY2F0aW5nIHJlc291cmNlcyB0aGF0IHNob3VsZCBiZSBjYWNoZWQgbG9jYWxseS4gU2VlIFtVc2luZyB0aGUgYXBwbGljYXRpb24gY2FjaGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvVXNpbmdfdGhlX2FwcGxpY2F0aW9uX2NhY2hlKSBmb3IgZGV0YWlscy4ifX0se25hbWU6InZlcnNpb24iLGRlc2NyaXB0aW9uOidTcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlIEhUTUwgW0RvY3VtZW50IFR5cGUgRGVmaW5pdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9EVEQgIkRvY3VtZW50IFR5cGUgRGVmaW5pdGlvbjogSW4gSFRNTCwgdGhlIGRvY3R5cGUgaXMgdGhlIHJlcXVpcmVkICI8IURPQ1RZUEUgaHRtbD4iIHByZWFtYmxlIGZvdW5kIGF0IHRoZSB0b3Agb2YgYWxsIGRvY3VtZW50cy4gSXRzIHNvbGUgcHVycG9zZSBpcyB0byBwcmV2ZW50IGEgYnJvd3NlciBmcm9tIHN3aXRjaGluZyBpbnRvIHNvLWNhbGxlZCDigJxxdWlya3MgbW9kZeKAnSB3aGVuIHJlbmRlcmluZyBhIGRvY3VtZW50OyB0aGF0IGlzLCB0aGUgIjwhRE9DVFlQRSBodG1sPiIgZG9jdHlwZSBlbnN1cmVzIHRoYXQgdGhlIGJyb3dzZXIgbWFrZXMgYSBiZXN0LWVmZm9ydCBhdHRlbXB0IGF0IGZvbGxvd2luZyB0aGUgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbnMsIHJhdGhlciB0aGFuIHVzaW5nIGEgZGlmZmVyZW50IHJlbmRlcmluZyBtb2RlIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggc29tZSBzcGVjaWZpY2F0aW9ucy4iKSB0aGF0IGdvdmVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnQuIFRoaXMgYXR0cmlidXRlIGlzIG5vdCBuZWVkZWQsIGJlY2F1c2UgaXQgaXMgcmVkdW5kYW50IHdpdGggdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gdGhlIGRvY3VtZW50IHR5cGUgZGVjbGFyYXRpb24uJ30se25hbWU6InhtbG5zIixkZXNjcmlwdGlvbjonU3BlY2lmaWVzIHRoZSBYTUwgTmFtZXNwYWNlIG9mIHRoZSBkb2N1bWVudC4gRGVmYXVsdCB2YWx1ZSBpcyBgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiYC4gVGhpcyBpcyByZXF1aXJlZCBpbiBkb2N1bWVudHMgcGFyc2VkIHdpdGggWE1MIHBhcnNlcnMsIGFuZCBvcHRpb25hbCBpbiB0ZXh0L2h0bWwgZG9jdW1lbnRzLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaHRtbCJ9XX0se25hbWU6ImhlYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZWFkIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgbWV0YWRhdGEgZm9yIHRoZSBEb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToicHJvZmlsZSIsZGVzY3JpcHRpb246IlRoZSBVUklzIG9mIG9uZSBvciBtb3JlIG1ldGFkYXRhIHByb2ZpbGVzLCBzZXBhcmF0ZWQgYnkgd2hpdGUgc3BhY2UuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9oZWFkIn1dfSx7bmFtZToidGl0bGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0aXRsZSBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGRvY3VtZW50J3MgdGl0bGUgb3IgbmFtZS4gQXV0aG9ycyBzaG91bGQgdXNlIHRpdGxlcyB0aGF0IGlkZW50aWZ5IHRoZWlyIGRvY3VtZW50cyBldmVuIHdoZW4gdGhleSBhcmUgdXNlZCBvdXQgb2YgY29udGV4dCwgZm9yIGV4YW1wbGUgaW4gYSB1c2VyJ3MgaGlzdG9yeSBvciBib29rbWFya3MsIG9yIGluIHNlYXJjaCByZXN1bHRzLiBUaGUgZG9jdW1lbnQncyB0aXRsZSBpcyBvZnRlbiBkaWZmZXJlbnQgZnJvbSBpdHMgZmlyc3QgaGVhZGluZywgc2luY2UgdGhlIGZpcnN0IGhlYWRpbmcgZG9lcyBub3QgaGF2ZSB0byBzdGFuZCBhbG9uZSB3aGVuIHRha2VuIG91dCBvZiBjb250ZXh0LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RpdGxlIn1dfSx7bmFtZToiYmFzZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJhc2UgZWxlbWVudCBhbGxvd3MgYXV0aG9ycyB0byBzcGVjaWZ5IHRoZSBkb2N1bWVudCBiYXNlIFVSTCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlc29sdmluZyByZWxhdGl2ZSBVUkxzLCBhbmQgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgYnJvd3NpbmcgY29udGV4dCBmb3IgdGhlIHB1cnBvc2VzIG9mIGZvbGxvd2luZyBoeXBlcmxpbmtzLiBUaGUgZWxlbWVudCBkb2VzIG5vdCByZXByZXNlbnQgYW55IGNvbnRlbnQgYmV5b25kIHRoaXMgaW5mb3JtYXRpb24uIn0sYXR0cmlidXRlczpbe25hbWU6ImhyZWYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBiYXNlIFVSTCB0byBiZSB1c2VkIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50IGZvciByZWxhdGl2ZSBVUkwgYWRkcmVzc2VzLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQsIHRoaXMgZWxlbWVudCBtdXN0IGNvbWUgYmVmb3JlIGFueSBvdGhlciBlbGVtZW50cyB3aXRoIGF0dHJpYnV0ZXMgd2hvc2UgdmFsdWVzIGFyZSBVUkxzLiBBYnNvbHV0ZSBhbmQgcmVsYXRpdmUgVVJMcyBhcmUgYWxsb3dlZC4ifX0se25hbWU6InRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBuYW1lIG9yIGtleXdvcmQgaW5kaWNhdGluZyB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0byBkaXNwbGF5IHRoZSByZXN1bHQgd2hlbiBoeXBlcmxpbmtzIG9yIGZvcm1zIGNhdXNlIG5hdmlnYXRpb24sIGZvciBlbGVtZW50cyB0aGF0IGRvIG5vdCBoYXZlIGFuIGV4cGxpY2l0IHRhcmdldCByZWZlcmVuY2UuIEl0IGlzIGEgbmFtZSBvZiwgb3Iga2V5d29yZCBmb3IsIGEgX2Jyb3dzaW5nIGNvbnRleHRfIChmb3IgZXhhbXBsZTogdGFiLCB3aW5kb3csIG9yIGlubGluZSBmcmFtZSkuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOlxuXG4qICAgYF9zZWxmYDogTG9hZCB0aGUgcmVzdWx0IGludG8gdGhlIHNhbWUgYnJvd3NpbmcgY29udGV4dCBhcyB0aGUgY3VycmVudCBvbmUuIFRoaXMgdmFsdWUgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLlxuKiAgIGBfYmxhbmtgOiBMb2FkIHRoZSByZXN1bHQgaW50byBhIG5ldyB1bm5hbWVkIGJyb3dzaW5nIGNvbnRleHQuXG4qICAgYF9wYXJlbnRgOiBMb2FkIHRoZSByZXN1bHQgaW50byB0aGUgcGFyZW50IGJyb3dzaW5nIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgb25lLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgb3B0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgYF90b3BgOiBMb2FkIHRoZSByZXN1bHQgaW50byB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKHRoYXQgaXMsIHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgb25lLCBhbmQgaGFzIG5vIHBhcmVudCkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCB0aGlzIGVsZW1lbnQgbXVzdCBjb21lIGJlZm9yZSBhbnkgb3RoZXIgZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVzIHdob3NlIHZhbHVlcyBhcmUgVVJMcy4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9iYXNlIn1dfSx7bmFtZToibGluayIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxpbmsgZWxlbWVudCBhbGxvd3MgYXV0aG9ycyB0byBsaW5rIHRoZWlyIGRvY3VtZW50IHRvIG90aGVyIHJlc291cmNlcy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiaHJlZiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBbVVJMXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1VSTCAiVVJMOiBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkgaXMgYSB0ZXh0IHN0cmluZyBzcGVjaWZ5aW5nIHdoZXJlIGEgcmVzb3VyY2UgY2FuIGJlIGZvdW5kIG9uIHRoZSBJbnRlcm5ldC4iKSBvZiB0aGUgbGlua2VkIHJlc291cmNlLiBBIFVSTCBjYW4gYmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUuJ319LHtuYW1lOiJjcm9zc29yaWdpbiIsdmFsdWVTZXQ6InhvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRlcyB3aGV0aGVyIFtDT1JTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0NPUlMgIkNPUlM6IENPUlMgKENyb3NzLU9yaWdpbiBSZXNvdXJjZSBTaGFyaW5nKSBpcyBhIHN5c3RlbSwgY29uc2lzdGluZyBvZiB0cmFuc21pdHRpbmcgSFRUUCBoZWFkZXJzLCB0aGF0IGRldGVybWluZXMgd2hldGhlciBicm93c2VycyBibG9jayBmcm9udGVuZCBKYXZhU2NyaXB0IGNvZGUgZnJvbSBhY2Nlc3NpbmcgcmVzcG9uc2VzIGZvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuIikgbXVzdCBiZSB1c2VkIHdoZW4gZmV0Y2hpbmcgdGhlIHJlc291cmNlLiBbQ09SUy1lbmFibGVkIGltYWdlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX0VuYWJsZWRfSW1hZ2UpIGNhbiBiZSByZXVzZWQgaW4gdGhlIFtgPGNhbnZhcz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FudmFzICJVc2UgdGhlIEhUTUwgPGNhbnZhcz4gZWxlbWVudCB3aXRoIGVpdGhlciB0aGUgY2FudmFzIHNjcmlwdGluZyBBUEkgb3IgdGhlIFdlYkdMIEFQSSB0byBkcmF3IGdyYXBoaWNzIGFuZCBhbmltYXRpb25zLiIpIGVsZW1lbnQgd2l0aG91dCBiZWluZyBfdGFpbnRlZF8uIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmU6XG5cbmBhbm9ueW1vdXNgXG5cbkEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QgKGkuZS4gd2l0aCBhbiBbYE9yaWdpbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9PcmlnaW4gIlRoZSBPcmlnaW4gcmVxdWVzdCBoZWFkZXIgaW5kaWNhdGVzIHdoZXJlIGEgZmV0Y2ggb3JpZ2luYXRlcyBmcm9tLiBJdCBkb2VzblwndCBpbmNsdWRlIGFueSBwYXRoIGluZm9ybWF0aW9uLCBidXQgb25seSB0aGUgc2VydmVyIG5hbWUuIEl0IGlzIHNlbnQgd2l0aCBDT1JTIHJlcXVlc3RzLCBhcyB3ZWxsIGFzIHdpdGggUE9TVCByZXF1ZXN0cy4gSXQgaXMgc2ltaWxhciB0byB0aGUgUmVmZXJlciBoZWFkZXIsIGJ1dCwgdW5saWtlIHRoaXMgaGVhZGVyLCBpdCBkb2VzblwndCBkaXNjbG9zZSB0aGUgd2hvbGUgcGF0aC4iKSBIVFRQIGhlYWRlcikgaXMgcGVyZm9ybWVkLCBidXQgbm8gY3JlZGVudGlhbCBpcyBzZW50IChpLmUuIG5vIGNvb2tpZSwgWC41MDkgY2VydGlmaWNhdGUsIG9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24pLiBJZiB0aGUgc2VydmVyIGRvZXMgbm90IGdpdmUgY3JlZGVudGlhbHMgdG8gdGhlIG9yaWdpbiBzaXRlIChieSBub3Qgc2V0dGluZyB0aGUgW2BBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luICJUaGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luIHJlc3BvbnNlIGhlYWRlciBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzcG9uc2UgY2FuIGJlIHNoYXJlZCB3aXRoIHJlcXVlc3RpbmcgY29kZSBmcm9tIHRoZSBnaXZlbiBvcmlnaW4uIikgSFRUUCBoZWFkZXIpIHRoZSBpbWFnZSB3aWxsIGJlIHRhaW50ZWQgYW5kIGl0cyB1c2FnZSByZXN0cmljdGVkLlxuXG5gdXNlLWNyZWRlbnRpYWxzYFxuXG5BIGNyb3NzLW9yaWdpbiByZXF1ZXN0IChpLmUuIHdpdGggYW4gYE9yaWdpbmAgSFRUUCBoZWFkZXIpIGlzIHBlcmZvcm1lZCBhbG9uZyB3aXRoIGEgY3JlZGVudGlhbCBzZW50IChpLmUuIGEgY29va2llLCBjZXJ0aWZpY2F0ZSwgYW5kL29yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gaXMgcGVyZm9ybWVkKS4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBnaXZlIGNyZWRlbnRpYWxzIHRvIHRoZSBvcmlnaW4gc2l0ZSAodGhyb3VnaCBbYEFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzICJUaGUgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMgcmVzcG9uc2UgaGVhZGVyIHRlbGxzIGJyb3dzZXJzIHdoZXRoZXIgdG8gZXhwb3NlIHRoZSByZXNwb25zZSB0byBmcm9udGVuZCBKYXZhU2NyaXB0IGNvZGUgd2hlbiB0aGUgcmVxdWVzdFwncyBjcmVkZW50aWFscyBtb2RlIChSZXF1ZXN0LmNyZWRlbnRpYWxzKSBpcyAiaW5jbHVkZSIuIikgSFRUUCBoZWFkZXIpLCB0aGUgcmVzb3VyY2Ugd2lsbCBiZSBfdGFpbnRlZF8gYW5kIGl0cyB1c2FnZSByZXN0cmljdGVkLlxuXG5JZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBwcmVzZW50LCB0aGUgcmVzb3VyY2UgaXMgZmV0Y2hlZCB3aXRob3V0IGEgW0NPUlNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ09SUyAiQ09SUzogQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIGlzIGEgc3lzdGVtLCBjb25zaXN0aW5nIG9mIHRyYW5zbWl0dGluZyBIVFRQIGhlYWRlcnMsIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGJyb3dzZXJzIGJsb2NrIGZyb250ZW5kIEphdmFTY3JpcHQgY29kZSBmcm9tIGFjY2Vzc2luZyByZXNwb25zZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy4iKSByZXF1ZXN0IChpLmUuIHdpdGhvdXQgc2VuZGluZyB0aGUgYE9yaWdpbmAgSFRUUCBoZWFkZXIpLCBwcmV2ZW50aW5nIGl0cyBub24tdGFpbnRlZCB1c2FnZS4gSWYgaW52YWxpZCwgaXQgaXMgaGFuZGxlZCBhcyBpZiB0aGUgZW51bWVyYXRlZCBrZXl3b3JkICoqYW5vbnltb3VzKiogd2FzIHVzZWQuIFNlZSBbQ09SUyBzZXR0aW5ncyBhdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uJ319LHtuYW1lOiJyZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIG5hbWVzIGEgcmVsYXRpb25zaGlwIG9mIHRoZSBsaW5rZWQgZG9jdW1lbnQgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQuIFRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBbbGluayB0eXBlcyB2YWx1ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvTGlua190eXBlcykuIn19LHtuYW1lOiJtZWRpYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBtZWRpYSB0aGF0IHRoZSBsaW5rZWQgcmVzb3VyY2UgYXBwbGllcyB0by4gSXRzIHZhbHVlIG11c3QgYmUgYSBtZWRpYSB0eXBlIC8gW21lZGlhIHF1ZXJ5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvTWVkaWFfcXVlcmllcykuIFRoaXMgYXR0cmlidXRlIGlzIG1haW5seSB1c2VmdWwgd2hlbiBsaW5raW5nIHRvIGV4dGVybmFsIHN0eWxlc2hlZXRzIOKAlCBpdCBhbGxvd3MgdGhlIHVzZXIgYWdlbnQgdG8gcGljayB0aGUgYmVzdCBhZGFwdGVkIG9uZSBmb3IgdGhlIGRldmljZSBpdCBydW5zIG9uLlxuXG4qKk5vdGVzOioqXG5cbiogICBJbiBIVE1MIDQsIHRoaXMgY2FuIG9ubHkgYmUgYSBzaW1wbGUgd2hpdGUtc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRpb24gbGl0ZXJhbHMsIGkuZS4sIFttZWRpYSB0eXBlcyBhbmQgZ3JvdXBzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQG1lZGlhKSwgd2hlcmUgZGVmaW5lZCBhbmQgYWxsb3dlZCBhcyB2YWx1ZXMgZm9yIHRoaXMgYXR0cmlidXRlLCBzdWNoIGFzIGBwcmludGAsIGBzY3JlZW5gLCBgYXVyYWxgLCBgYnJhaWxsZWAuIEhUTUw1IGV4dGVuZGVkIHRoaXMgdG8gYW55IGtpbmQgb2YgW21lZGlhIHF1ZXJpZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9NZWRpYV9xdWVyaWVzKSwgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGFsbG93ZWQgdmFsdWVzIG9mIEhUTUwgNC5cbiogICBCcm93c2VycyBub3Qgc3VwcG9ydGluZyBbQ1NTMyBNZWRpYSBRdWVyaWVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvTWVkaWFfcXVlcmllcykgd29uJ3QgbmVjZXNzYXJpbHkgcmVjb2duaXplIHRoZSBhZGVxdWF0ZSBsaW5rOyBkbyBub3QgZm9yZ2V0IHRvIHNldCBmYWxsYmFjayBsaW5rcywgdGhlIHJlc3RyaWN0ZWQgc2V0IG9mIG1lZGlhIHF1ZXJpZXMgZGVmaW5lZCBpbiBIVE1MIDQuIn19LHtuYW1lOiJocmVmbGFuZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBsYW5ndWFnZSBvZiB0aGUgbGlua2VkIHJlc291cmNlLiBJdCBpcyBwdXJlbHkgYWR2aXNvcnkuIEFsbG93ZWQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IFtCQ1A0N10oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL2JjcC9iY3A0Ny50eHQpLiBVc2UgdGhpcyBhdHRyaWJ1dGUgb25seSBpZiB0aGUgW2BocmVmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EjYXR0ci1ocmVmKSBhdHRyaWJ1dGUgaXMgcHJlc2VudC4ifX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHRoZSBjb250ZW50IGxpbmtlZCB0by4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGEgTUlNRSB0eXBlIHN1Y2ggYXMgKip0ZXh0L2h0bWwqKiwgKip0ZXh0L2NzcyoqLCBhbmQgc28gb24uIFRoZSBjb21tb24gdXNlIG9mIHRoaXMgYXR0cmlidXRlIGlzIHRvIGRlZmluZSB0aGUgdHlwZSBvZiBzdHlsZXNoZWV0IGJlaW5nIHJlZmVyZW5jZWQgKHN1Y2ggYXMgKip0ZXh0L2NzcyoqKSwgYnV0IGdpdmVuIHRoYXQgQ1NTIGlzIHRoZSBvbmx5IHN0eWxlc2hlZXQgbGFuZ3VhZ2UgdXNlZCBvbiB0aGUgd2ViLCBub3Qgb25seSBpcyBpdCBwb3NzaWJsZSB0byBvbWl0IHRoZSBgdHlwZWAgYXR0cmlidXRlLCBidXQgaXMgYWN0dWFsbHkgbm93IHJlY29tbWVuZGVkIHByYWN0aWNlLiBJdCBpcyBhbHNvIHVzZWQgb24gYHJlbD0icHJlbG9hZCJgIGxpbmsgdHlwZXMsIHRvIG1ha2Ugc3VyZSB0aGUgYnJvd3NlciBvbmx5IGRvd25sb2FkcyBmaWxlIHR5cGVzIHRoYXQgaXQgc3VwcG9ydHMuJ319LHtuYW1lOiJzaXplcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgc2l6ZXMgb2YgdGhlIGljb25zIGZvciB2aXN1YWwgbWVkaWEgY29udGFpbmVkIGluIHRoZSByZXNvdXJjZS4gSXQgbXVzdCBiZSBwcmVzZW50IG9ubHkgaWYgdGhlIFtgcmVsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWwpIGNvbnRhaW5zIGEgdmFsdWUgb2YgYGljb25gIG9yIGEgbm9uLXN0YW5kYXJkIHR5cGUgc3VjaCBhcyBBcHBsZSdzIGBhcHBsZS10b3VjaC1pY29uYC4gSXQgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgYW55YCwgbWVhbmluZyB0aGF0IHRoZSBpY29uIGNhbiBiZSBzY2FsZWQgdG8gYW55IHNpemUgYXMgaXQgaXMgaW4gYSB2ZWN0b3IgZm9ybWF0LCBsaWtlIGBpbWFnZS9zdmcreG1sYC5cbiogICBhIHdoaXRlLXNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHNpemVzLCBlYWNoIGluIHRoZSBmb3JtYXQgYF88d2lkdGggaW4gcGl4ZWxzPl94XzxoZWlnaHQgaW4gcGl4ZWxzPl9gIG9yIGBfPHdpZHRoIGluIHBpeGVscz5fWF88aGVpZ2h0IGluIHBpeGVscz5fYC4gRWFjaCBvZiB0aGVzZSBzaXplcyBtdXN0IGJlIGNvbnRhaW5lZCBpbiB0aGUgcmVzb3VyY2UuXG5cbioqTm90ZToqKiBNb3N0IGljb24gZm9ybWF0cyBhcmUgb25seSBhYmxlIHRvIHN0b3JlIG9uZSBzaW5nbGUgaWNvbjsgdGhlcmVmb3JlIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIFtgc2l6ZXNgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItc2l6ZXMpIGNvbnRhaW5zIG9ubHkgb25lIGVudHJ5LiBNUydzIElDTyBmb3JtYXQgZG9lcywgYXMgd2VsbCBhcyBBcHBsZSdzIElDTlMuIElDTyBpcyBtb3JlIHViaXF1aXRvdXM7IHlvdSBzaG91bGQgZGVmaW5pdGVseSB1c2UgaXQuIn19LHtuYW1lOiJhcyIsZGVzY3JpcHRpb246J1RoaXMgYXR0cmlidXRlIGlzIG9ubHkgdXNlZCB3aGVuIGByZWw9InByZWxvYWQiYCBvciBgcmVsPSJwcmVmZXRjaCJgIGhhcyBiZWVuIHNldCBvbiB0aGUgYDxsaW5rPmAgZWxlbWVudC4gSXQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGNvbnRlbnQgYmVpbmcgbG9hZGVkIGJ5IHRoZSBgPGxpbms+YCwgd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBjb250ZW50IHByaW9yaXRpemF0aW9uLCByZXF1ZXN0IG1hdGNoaW5nLCBhcHBsaWNhdGlvbiBvZiBjb3JyZWN0IFtjb250ZW50IHNlY3VyaXR5IHBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9DU1ApLCBhbmQgc2V0dGluZyBvZiBjb3JyZWN0IFtgQWNjZXB0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2VwdCAiVGhlIEFjY2VwdCByZXF1ZXN0IEhUVFAgaGVhZGVyIGFkdmVydGlzZXMgd2hpY2ggY29udGVudCB0eXBlcywgZXhwcmVzc2VkIGFzIE1JTUUgdHlwZXMsIHRoZSBjbGllbnQgaXMgYWJsZSB0byB1bmRlcnN0YW5kLiBVc2luZyBjb250ZW50IG5lZ290aWF0aW9uLCB0aGUgc2VydmVyIHRoZW4gc2VsZWN0cyBvbmUgb2YgdGhlIHByb3Bvc2FscywgdXNlcyBpdCBhbmQgaW5mb3JtcyB0aGUgY2xpZW50IG9mIGl0cyBjaG9pY2Ugd2l0aCB0aGUgQ29udGVudC1UeXBlIHJlc3BvbnNlIGhlYWRlci4gQnJvd3NlcnMgc2V0IGFkZXF1YXRlIHZhbHVlcyBmb3IgdGhpcyBoZWFkZXIgZGVwZW5kaW5nIG9uwqB0aGUgY29udGV4dCB3aGVyZSB0aGUgcmVxdWVzdCBpcyBkb25lOiB3aGVuIGZldGNoaW5nIGEgQ1NTIHN0eWxlc2hlZXQgYSBkaWZmZXJlbnQgdmFsdWUgaXMgc2V0IGZvciB0aGUgcmVxdWVzdCB0aGFuIHdoZW4gZmV0Y2hpbmcgYW4gaW1hZ2UswqB2aWRlbyBvciBhIHNjcmlwdC4iKSByZXF1ZXN0IGhlYWRlci4nfSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiB0aGUgcmVzb3VyY2UuIFByaW9yaXR5IGhpbnRzIGFyZSBkZWxlZ2F0ZWQgdXNpbmcgdGhlIHZhbHVlczoifSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246JyoqYGF1dG9gKio6IEluZGljYXRlc8KgKipub8KgcHJlZmVyZW5jZSoqLiBUaGUgYnJvd3NlciBtYXkgdXNlIGl0cyBvd24gaGV1cmlzdGljcyB0byBkZWNpZGUgdGhlIHByaW9yaXR5IG9mIHRoZSByZXNvdXJjZS5cblxuKipgaGlnaGAqKjogSW5kaWNhdGVzIHRvIHRoZcKgYnJvd3NlcsKgdGhhdCB0aGUgcmVzb3VyY2UgaXMgb2bCoCoqaGlnaCoqIHByaW9yaXR5LlxuXG4qKmBsb3dgKio6wqBJbmRpY2F0ZXMgdG8gdGhlwqBicm93c2VywqB0aGF0IHRoZSByZXNvdXJjZSBpcyBvZsKgKipsb3cqKiBwcmlvcml0eS5cblxuKipOb3RlOioqIFRoZSBgaW1wb3J0YW5jZWAgYXR0cmlidXRlIG1heSBvbmx5IGJlIHVzZWQgZm9yIHRoZSBgPGxpbms+YCBlbGVtZW50IGlmIGByZWw9InByZWxvYWQiYCBvciBgcmVsPSJwcmVmZXRjaCJgIGlzIHByZXNlbnQuJ30se25hbWU6ImludGVncml0eSIsZGVzY3JpcHRpb246IkNvbnRhaW5zIGlubGluZSBtZXRhZGF0YSDigJQgYSBiYXNlNjQtZW5jb2RlZCBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIHJlc291cmNlIChmaWxlKSB5b3XigJlyZSB0ZWxsaW5nIHRoZSBicm93c2VyIHRvIGZldGNoLiBUaGUgYnJvd3NlciBjYW4gdXNlIHRoaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZldGNoZWQgcmVzb3VyY2UgaGFzIGJlZW4gZGVsaXZlcmVkIGZyZWUgb2YgdW5leHBlY3RlZCBtYW5pcHVsYXRpb24uIFNlZSBbU3VicmVzb3VyY2UgSW50ZWdyaXR5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TdWJyZXNvdXJjZV9JbnRlZ3JpdHkpLiJ9LHtuYW1lOiJyZWZlcnJlcnBvbGljeSIsZGVzY3JpcHRpb246J0Egc3RyaW5nIGluZGljYXRpbmcgd2hpY2ggcmVmZXJyZXIgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgdGhlIHJlc291cmNlOlxuXG4qICAgYG5vLXJlZmVycmVyYCBtZWFucyB0aGF0IHRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciAiVGhlIFJlZmVyZXIgcmVxdWVzdCBoZWFkZXIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIHdlYiBwYWdlIGZyb20gd2hpY2ggYSBsaW5rIHRvIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIHBhZ2Ugd2FzIGZvbGxvd2VkLiBUaGUgUmVmZXJlciBoZWFkZXIgYWxsb3dzIHNlcnZlcnMgdG8gaWRlbnRpZnkgd2hlcmUgcGVvcGxlIGFyZSB2aXNpdGluZyB0aGVtIGZyb20gYW5kIG1heSB1c2UgdGhhdCBkYXRhIGZvciBhbmFseXRpY3MsIGxvZ2dpbmcsIG9yIG9wdGltaXplZCBjYWNoaW5nLCBmb3IgZXhhbXBsZS4iKSBoZWFkZXIgd2lsbCBub3QgYmUgc2VudC5cbiogICBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGVgIG1lYW5zIHRoYXQgbm8gW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgYmUgc2VudCB3aGVuIG5hdmlnYXRpbmcgdG8gYW4gb3JpZ2luIHdpdGhvdXQgVExTIChIVFRQUykuIFRoaXMgaXMgYSB1c2VyIGFnZW504oCZcyBkZWZhdWx0IGJlaGF2aW9yLCBpZiBubyBwb2xpY3kgaXMgb3RoZXJ3aXNlIHNwZWNpZmllZC5cbiogICBgb3JpZ2luYCBtZWFucyB0aGF0IHRoZSByZWZlcnJlciB3aWxsIGJlIHRoZSBvcmlnaW4gb2YgdGhlIHBhZ2UsIHdoaWNoIGlzIHJvdWdobHkgdGhlIHNjaGVtZSwgdGhlIGhvc3QsIGFuZCB0aGUgcG9ydC5cbiogICBgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luYCBtZWFucyB0aGF0IG5hdmlnYXRpbmcgdG8gb3RoZXIgb3JpZ2lucyB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIHNjaGVtZSwgdGhlIGhvc3QsIGFuZCB0aGUgcG9ydCwgd2hpbGUgbmF2aWdhdGluZyBvbiB0aGUgc2FtZSBvcmlnaW4gd2lsbCBpbmNsdWRlIHRoZSByZWZlcnJlclwncyBwYXRoLlxuKiAgIGB1bnNhZmUtdXJsYCBtZWFucyB0aGF0IHRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBhbmQgdGhlIHBhdGggKGJ1dCBub3QgdGhlIGZyYWdtZW50LCBwYXNzd29yZCwgb3IgdXNlcm5hbWUpLiBUaGlzIGNhc2UgaXMgdW5zYWZlIGJlY2F1c2UgaXQgY2FuIGxlYWsgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLid9LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246J1RoZSBgdGl0bGVgIGF0dHJpYnV0ZSBoYXMgc3BlY2lhbCBzZW1hbnRpY3Mgb24gdGhlIGA8bGluaz5gIGVsZW1lbnQuIFdoZW4gdXNlZCBvbiBhIGA8bGluayByZWw9InN0eWxlc2hlZXQiPmAgaXQgZGVmaW5lcyBhIFtwcmVmZXJyZWQgb3IgYW4gYWx0ZXJuYXRlIHN0eWxlc2hlZXRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9BbHRlcm5hdGl2ZV9zdHlsZV9zaGVldHMpLiBJbmNvcnJlY3RseSB1c2luZyBpdCBtYXkgW2NhdXNlIHRoZSBzdHlsZXNoZWV0IHRvIGJlIGlnbm9yZWRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ29ycmVjdGx5X1VzaW5nX1RpdGxlc19XaXRoX0V4dGVybmFsX1N0eWxlc2hlZXRzKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsifV19LHtuYW1lOiJtZXRhIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbWV0YSBlbGVtZW50IHJlcHJlc2VudHMgdmFyaW91cyBraW5kcyBvZiBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgdGhlIHRpdGxlLCBiYXNlLCBsaW5rLCBzdHlsZSwgYW5kIHNjcmlwdCBlbGVtZW50cy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTpgVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgbmFtZSBvZiBhIHBpZWNlIG9mIGRvY3VtZW50LWxldmVsIG1ldGFkYXRhLiBJdCBzaG91bGQgbm90IGJlIHNldCBpZiBvbmUgb2YgdGhlIGF0dHJpYnV0ZXMgW1xgaXRlbXByb3BcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcyNhdHRyLWl0ZW1wcm9wKSwgW1xgaHR0cC1lcXVpdlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWh0dHAtZXF1aXYpIG9yIFtcYGNoYXJzZXRcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jaGFyc2V0KSBpcyBhbHNvIHNldC4KClRoaXMgbWV0YWRhdGEgbmFtZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGNvbnRhaW5lZCBieSB0aGUgW1xgY29udGVudFxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNvbnRlbnQpIGF0dHJpYnV0ZS4gVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIG5hbWUgYXR0cmlidXRlIGFyZToKCiogICBcYGFwcGxpY2F0aW9uLW5hbWVcYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiBydW5uaW5nIGluIHRoZSB3ZWIgcGFnZS4KICAgIAogICAgKipOb3RlOioqCiAgICAKICAgICogICBCcm93c2VycyBtYXkgdXNlIHRoaXMgdG8gaWRlbnRpZnkgdGhlIGFwcGxpY2F0aW9uLiBJdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgW1xgPHRpdGxlPlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGl0bGUgIlRoZSBIVE1MIFRpdGxlIGVsZW1lbnQgKDx0aXRsZT4pIGRlZmluZXMgdGhlIGRvY3VtZW50J3MgdGl0bGUgdGhhdCBpcyBzaG93biBpbiBhIGJyb3dzZXIncyB0aXRsZSBiYXIgb3IgYSBwYWdlJ3MgdGFiLiIpIGVsZW1lbnQsIHdoaWNoIHVzdWFsbHkgY29udGFpbiB0aGUgYXBwbGljYXRpb24gbmFtZSwgYnV0IG1heSBhbHNvIGNvbnRhaW4gaW5mb3JtYXRpb24gbGlrZSB0aGUgZG9jdW1lbnQgbmFtZSBvciBhIHN0YXR1cy4KICAgICogICBTaW1wbGUgd2ViIHBhZ2VzIHNob3VsZG4ndCBkZWZpbmUgYW4gYXBwbGljYXRpb24tbmFtZS4KICAgIAoqICAgXGBhdXRob3JcYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudCdzIGF1dGhvci4KKiAgIFxgZGVzY3JpcHRpb25cYCB3aGljaCBjb250YWlucyBhIHNob3J0IGFuZCBhY2N1cmF0ZSBzdW1tYXJ5IG9mIHRoZSBjb250ZW50IG9mIHRoZSBwYWdlLiBTZXZlcmFsIGJyb3dzZXJzLCBsaWtlIEZpcmVmb3ggYW5kIE9wZXJhLCB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBkZXNjcmlwdGlvbiBvZiBib29rbWFya2VkIHBhZ2VzLgoqICAgXGBnZW5lcmF0b3JcYCB3aGljaCBjb250YWlucyB0aGUgaWRlbnRpZmllciBvZiB0aGUgc29mdHdhcmUgdGhhdCBnZW5lcmF0ZWQgdGhlIHBhZ2UuCiogICBcYGtleXdvcmRzXGAgd2hpY2ggY29udGFpbnMgd29yZHMgcmVsZXZhbnQgdG8gdGhlIHBhZ2UncyBjb250ZW50IHNlcGFyYXRlZCBieSBjb21tYXMuCiogICBcYHJlZmVycmVyXGAgd2hpY2ggY29udHJvbHMgdGhlIFtcYFJlZmVyZXJcYCBIVFRQIGhlYWRlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIpIGF0dGFjaGVkIHRvIHJlcXVlc3RzIHNlbnQgZnJvbSB0aGUgZG9jdW1lbnQ6CiAgICAKICAgIFZhbHVlcyBmb3IgdGhlIFxgY29udGVudFxgIGF0dHJpYnV0ZSBvZiBcYDxtZXRhIG5hbWU9InJlZmVycmVyIj5cYAogICAgCiAgICBcYG5vLXJlZmVycmVyXGAKICAgIAogICAgRG8gbm90IHNlbmQgYSBIVFRQIFxgUmVmZXJyZXJcYCBoZWFkZXIuCiAgICAKICAgIFxgb3JpZ2luXGAKICAgIAogICAgU2VuZCB0aGUgW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9PcmlnaW4pIG9mIHRoZSBkb2N1bWVudC4KICAgIAogICAgXGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZVxgCiAgICAKICAgIFNlbmQgdGhlIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvT3JpZ2luKSBhcyBhIHJlZmVycmVyIHRvIFVSTHMgYXMgc2VjdXJlIGFzIHRoZSBjdXJyZW50IHBhZ2UsIChodHRwc+KGkmh0dHBzKSwgYnV0IGRvZXMgbm90IHNlbmQgYSByZWZlcnJlciB0byBsZXNzIHNlY3VyZSBVUkxzIChodHRwc+KGkmh0dHApLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KICAgIAogICAgXGBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5cYAogICAgCiAgICBTZW5kIHRoZSBmdWxsIFVSTCAoc3RyaXBwZWQgb2YgcGFyYW1ldGVycykgZm9yIHNhbWUtb3JpZ2luIHJlcXVlc3RzLCBidXQgb25seSBzZW5kIHRoZSBbb3JpZ2luXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L09yaWdpbikgZm9yIG90aGVyIGNhc2VzLgogICAgCiAgICBcYHNhbWUtb3JpZ2luXGAKICAgIAogICAgQSByZWZlcnJlciB3aWxsIGJlIHNlbnQgZm9yIFtzYW1lLXNpdGUgb3JpZ2luc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2FtZS1vcmlnaW5fcG9saWN5KSwgYnV0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyB3aWxsIGNvbnRhaW4gbm8gcmVmZXJyZXIgaW5mb3JtYXRpb24uCiAgICAKICAgIFxgc3RyaWN0LW9yaWdpblxgCiAgICAKICAgIE9ubHkgc2VuZCB0aGUgb3JpZ2luIG9mIHRoZSBkb2N1bWVudCBhcyB0aGUgcmVmZXJyZXIgdG8gYS1wcmlvcmkgYXMtbXVjaC1zZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQUyksIGJ1dCBkb24ndCBzZW5kIGl0IHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQKS4KICAgIAogICAgXGBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luXGAKICAgIAogICAgU2VuZCBhIGZ1bGwgVVJMIHdoZW4gcGVyZm9ybWluZyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QsIG9ubHkgc2VuZCB0aGUgb3JpZ2luIG9mIHRoZSBkb2N1bWVudCB0byBhLXByaW9yaSBhcy1tdWNoLXNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFMtPkhUVFBTKSwgYW5kIHNlbmQgbm8gaGVhZGVyIHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBTLT5IVFRQKS4KICAgIAogICAgXGB1bnNhZmUtVVJMXGAKICAgIAogICAgU2VuZCB0aGUgZnVsbCBVUkwgKHN0cmlwcGVkIG9mIHBhcmFtZXRlcnMpIGZvciBzYW1lLW9yaWdpbiBvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuCiAgICAKICAgICoqTm90ZXM6KioKICAgIAogICAgKiAgIFNvbWUgYnJvd3NlcnMgc3VwcG9ydCB0aGUgZGVwcmVjYXRlZCB2YWx1ZXMgb2YgXGBhbHdheXNcYCwgXGBkZWZhdWx0XGAsIGFuZCBcYG5ldmVyXGAgZm9yIHJlZmVycmVyLgogICAgKiAgIER5bmFtaWNhbGx5IGluc2VydGluZyBcYDxtZXRhIG5hbWU9InJlZmVycmVyIj5cYCAod2l0aCBbXGBkb2N1bWVudC53cml0ZVxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvd3JpdGUpIG9yIFtcYGFwcGVuZENoaWxkXGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ob2RlL2FwcGVuZENoaWxkKSkgbWFrZXMgdGhlIHJlZmVycmVyIGJlaGF2aW91ciB1bnByZWRpY3RhYmxlLgogICAgKiAgIFdoZW4gc2V2ZXJhbCBjb25mbGljdGluZyBwb2xpY2llcyBhcmUgZGVmaW5lZCwgdGhlIG5vLXJlZmVycmVyIHBvbGljeSBpcyBhcHBsaWVkLgogICAgCgpUaGlzIGF0dHJpYnV0ZSBtYXkgYWxzbyBoYXZlIGEgdmFsdWUgdGFrZW4gZnJvbSB0aGUgZXh0ZW5kZWQgbGlzdCBkZWZpbmVkIG9uIFtXSEFUV0cgV2lraSBNZXRhRXh0ZW5zaW9ucyBwYWdlXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL01ldGFFeHRlbnNpb25zKS4gQWx0aG91Z2ggbm9uZSBoYXZlIGJlZW4gZm9ybWFsbHkgYWNjZXB0ZWQgeWV0LCBhIGZldyBjb21tb25seSB1c2VkIG5hbWVzIGFyZToKCiogICBcYGNyZWF0b3JcYCB3aGljaCBkZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjcmVhdG9yIG9mIHRoZSBkb2N1bWVudCwgc3VjaCBhcyBhbiBvcmdhbml6YXRpb24gb3IgaW5zdGl0dXRpb24uIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLCBzZXZlcmFsIFtcYDxtZXRhPlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSAiVGhlIEhUTUwgPG1ldGE+IGVsZW1lbnQgcmVwcmVzZW50cyBtZXRhZGF0YSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBieSBvdGhlciBIVE1MIG1ldGEtcmVsYXRlZCBlbGVtZW50cywgbGlrZSA8YmFzZT4sIDxsaW5rPiwgPHNjcmlwdD4sIDxzdHlsZT4gb3IgPHRpdGxlPi4iKSBlbGVtZW50cyBzaG91bGQgYmUgdXNlZC4KKiAgIFxgZ29vZ2xlYm90XGAsIGEgc3lub255bSBvZiBcYHJvYm90c1xgLCBpcyBvbmx5IGZvbGxvd2VkIGJ5IEdvb2dsZWJvdCAodGhlIGluZGV4aW5nIGNyYXdsZXIgZm9yIEdvb2dsZSkuCiogICBcYHB1Ymxpc2hlclxgIHdoaWNoIGRlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGRvY3VtZW50J3MgcHVibGlzaGVyLgoqICAgXGByb2JvdHNcYCB3aGljaCBkZWZpbmVzIHRoZSBiZWhhdmlvdXIgdGhhdCBjb29wZXJhdGl2ZSBjcmF3bGVycywgb3IgInJvYm90cyIsIHNob3VsZCB1c2Ugd2l0aCB0aGUgcGFnZS4gSXQgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgdmFsdWVzIGJlbG93OgogICAgCiAgICBWYWx1ZXMgZm9yIHRoZSBjb250ZW50IG9mIFxgPG1ldGEgbmFtZT0icm9ib3RzIj5cYAogICAgCiAgICBWYWx1ZQogICAgCiAgICBEZXNjcmlwdGlvbgogICAgCiAgICBVc2VkIGJ5CiAgICAKICAgIFxgaW5kZXhcYAogICAgCiAgICBBbGxvd3MgdGhlIHJvYm90IHRvIGluZGV4IHRoZSBwYWdlIChkZWZhdWx0KS4KICAgIAogICAgQWxsCiAgICAKICAgIFxgbm9pbmRleFxgCiAgICAKICAgIFJlcXVlc3RzIHRoZSByb2JvdCB0byBub3QgaW5kZXggdGhlIHBhZ2UuCiAgICAKICAgIEFsbAogICAgCiAgICBcYGZvbGxvd1xgCiAgICAKICAgIEFsbG93cyB0aGUgcm9ib3QgdG8gZm9sbG93IHRoZSBsaW5rcyBvbiB0aGUgcGFnZSAoZGVmYXVsdCkuCiAgICAKICAgIEFsbAogICAgCiAgICBcYG5vZm9sbG93XGAKICAgIAogICAgUmVxdWVzdHMgdGhlIHJvYm90IHRvIG5vdCBmb2xsb3cgdGhlIGxpbmtzIG9uIHRoZSBwYWdlLgogICAgCiAgICBBbGwKICAgIAogICAgXGBub25lXGAKICAgIAogICAgRXF1aXZhbGVudCB0byBcYG5vaW5kZXgsIG5vZm9sbG93XGAKICAgIAogICAgW0dvb2dsZV0oaHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vd2VibWFzdGVycy9hbnN3ZXIvNzk4MTIpCiAgICAKICAgIFxgbm9vZHBcYAogICAgCiAgICBQcmV2ZW50cyB1c2luZyB0aGUgW09wZW4gRGlyZWN0b3J5IFByb2plY3RdKGh0dHBzOi8vd3d3LmRtb3oub3JnLykgZGVzY3JpcHRpb24sIGlmIGFueSwgYXMgdGhlIHBhZ2UgZGVzY3JpcHRpb24gaW4gc2VhcmNoIGVuZ2luZSByZXN1bHRzLgogICAgCiAgICBbR29vZ2xlXShodHRwczovL3N1cHBvcnQuZ29vZ2xlLmNvbS93ZWJtYXN0ZXJzL2Fuc3dlci8zNTYyNCNub2Rtb3opLCBbWWFob29dKGh0dHBzOi8vaGVscC55YWhvby5jb20va2Ivc2VhcmNoLWZvci1kZXNrdG9wL21ldGEtdGFncy1yb2JvdHN0eHQteWFob28tc2VhcmNoLXNsbjIyMTMuaHRtbCNjb250NSksIFtCaW5nXShodHRwczovL3d3dy5iaW5nLmNvbS93ZWJtYXN0ZXIvaGVscC93aGljaC1yb2JvdHMtbWV0YXRhZ3MtZG9lcy1iaW5nLXN1cHBvcnQtNTE5OGQyNDApCiAgICAKICAgIFxgbm9hcmNoaXZlXGAKICAgIAogICAgUmVxdWVzdHMgdGhlIHNlYXJjaCBlbmdpbmUgbm90IHRvIGNhY2hlIHRoZSBwYWdlIGNvbnRlbnQuCiAgICAKICAgIFtHb29nbGVdKGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3dlYm1hc3RlcnMvY29udHJvbC1jcmF3bC1pbmRleC9kb2NzL3JvYm90c19tZXRhX3RhZyN2YWxpZC1pbmRleGluZy0tc2VydmluZy1kaXJlY3RpdmVzKSwgW1lhaG9vXShodHRwczovL2hlbHAueWFob28uY29tL2tiL3NlYXJjaC1mb3ItZGVza3RvcC9TTE4yMjEzLmh0bWwpLCBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKQogICAgCiAgICBcYG5vc25pcHBldFxgCiAgICAKICAgIFByZXZlbnRzIGRpc3BsYXlpbmcgYW55IGRlc2NyaXB0aW9uIG9mIHRoZSBwYWdlIGluIHNlYXJjaCBlbmdpbmUgcmVzdWx0cy4KICAgIAogICAgW0dvb2dsZV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vd2VibWFzdGVycy9jb250cm9sLWNyYXdsLWluZGV4L2RvY3Mvcm9ib3RzX21ldGFfdGFnI3ZhbGlkLWluZGV4aW5nLS1zZXJ2aW5nLWRpcmVjdGl2ZXMpLCBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKQogICAgCiAgICBcYG5vaW1hZ2VpbmRleFxgCiAgICAKICAgIFJlcXVlc3RzIHRoaXMgcGFnZSBub3QgdG8gYXBwZWFyIGFzIHRoZSByZWZlcnJpbmcgcGFnZSBvZiBhbiBpbmRleGVkIGltYWdlLgogICAgCiAgICBbR29vZ2xlXShodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWJtYXN0ZXJzL2NvbnRyb2wtY3Jhd2wtaW5kZXgvZG9jcy9yb2JvdHNfbWV0YV90YWcjdmFsaWQtaW5kZXhpbmctLXNlcnZpbmctZGlyZWN0aXZlcykKICAgIAogICAgXGBub2NhY2hlXGAKICAgIAogICAgU3lub255bSBvZiBcYG5vYXJjaGl2ZVxgLgogICAgCiAgICBbQmluZ10oaHR0cHM6Ly93d3cuYmluZy5jb20vd2VibWFzdGVyL2hlbHAvd2hpY2gtcm9ib3RzLW1ldGF0YWdzLWRvZXMtYmluZy1zdXBwb3J0LTUxOThkMjQwKQogICAgCiAgICAqKk5vdGVzOioqCiAgICAKICAgICogICBPbmx5IGNvb3BlcmF0aXZlIHJvYm90cyBmb2xsb3cgdGhlc2UgcnVsZXMuIERvIG5vdCBleHBlY3QgdG8gcHJldmVudCBlLW1haWwgaGFydmVzdGVycyB3aXRoIHRoZW0uCiAgICAqICAgVGhlIHJvYm90IHN0aWxsIG5lZWRzIHRvIGFjY2VzcyB0aGUgcGFnZSBpbiBvcmRlciB0byByZWFkIHRoZXNlIHJ1bGVzLiBUbyBwcmV2ZW50IGJhbmR3aWR0aCBjb25zdW1wdGlvbiwgdXNlIGEgX1tyb2JvdHMudHh0XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3JvYm90cy50eHQgInJvYm90cy50eHQ6IFJvYm90cy50eHQgaXMgYSBmaWxlIHdoaWNoIGlzIHVzdWFsbHkgcGxhY2VkIGluIHRoZSByb290IG9mIGFueSB3ZWJzaXRlLiBJdCBkZWNpZGVzIHdoZXRoZXLCoGNyYXdsZXJzIGFyZSBwZXJtaXR0ZWQgb3IgZm9yYmlkZGVuIGFjY2VzcyB0byB0aGUgd2ViIHNpdGUuIilfIGZpbGUuCiAgICAqICAgSWYgeW91IHdhbnQgdG8gcmVtb3ZlIGEgcGFnZSwgXGBub2luZGV4XGAgd2lsbCB3b3JrLCBidXQgb25seSBhZnRlciB0aGUgcm9ib3QgdmlzaXRzIHRoZSBwYWdlIGFnYWluLiBFbnN1cmUgdGhhdCB0aGUgXGByb2JvdHMudHh0XGAgZmlsZSBpcyBub3QgcHJldmVudGluZyByZXZpc2l0cy4KICAgICogICBTb21lIHZhbHVlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBsaWtlIFxgaW5kZXhcYCBhbmQgXGBub2luZGV4XGAsIG9yIFxgZm9sbG93XGAgYW5kIFxgbm9mb2xsb3dcYC4gSW4gdGhlc2UgY2FzZXMgdGhlIHJvYm90J3MgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZCBhbmQgbWF5IHZhcnkgYmV0d2VlbiB0aGVtLgogICAgKiAgIFNvbWUgY3Jhd2xlciByb2JvdHMsIGxpa2UgR29vZ2xlLCBZYWhvbyBhbmQgQmluZywgc3VwcG9ydCB0aGUgc2FtZSB2YWx1ZXMgZm9yIHRoZSBIVFRQIGhlYWRlciBcYFgtUm9ib3RzLVRhZ1xgOyB0aGlzIGFsbG93cyBub24tSFRNTCBkb2N1bWVudHMgbGlrZSBpbWFnZXMgdG8gdXNlIHRoZXNlIHJ1bGVzLgogICAgCiogICBcYHNsdXJwXGAsIGlzIGEgc3lub255bSBvZiBcYHJvYm90c1xgLCBidXQgb25seSBmb3IgU2x1cnAgLSB0aGUgY3Jhd2xlciBmb3IgWWFob28gU2VhcmNoLgoqICAgXGB2aWV3cG9ydFxgLCB3aGljaCBnaXZlcyBoaW50cyBhYm91dCB0aGUgc2l6ZSBvZiB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBbdmlld3BvcnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvdmlld3BvcnQgInZpZXdwb3J0OiBBIHZpZXdwb3J0IHJlcHJlc2VudHMgYSBwb2x5Z29uYWwgKG5vcm1hbGx5IHJlY3Rhbmd1bGFyKSBhcmVhIGluIGNvbXB1dGVyIGdyYXBoaWNzIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHZpZXdlZC4gSW4gd2ViIGJyb3dzZXIgdGVybXMsIGl0IHJlZmVycyB0byB0aGUgcGFydCBvZiB0aGUgZG9jdW1lbnQgeW91J3JlIHZpZXdpbmcgd2hpY2ggaXMgY3VycmVudGx5IHZpc2libGUgaW4gaXRzIHdpbmRvdyAob3IgdGhlIHNjcmVlbiwgaWYgdGhlIGRvY3VtZW50IGlzIGJlaW5nIHZpZXdlZCBpbiBmdWxsIHNjcmVlbiBtb2RlKS4gQ29udGVudCBvdXRzaWRlIHRoZSB2aWV3cG9ydCBpcyBub3QgdmlzaWJsZSBvbnNjcmVlbiB1bnRpbCBzY3JvbGxlZCBpbnRvIHZpZXcuIikuIFVzZWQgYnkgbW9iaWxlIGRldmljZXMgb25seS4KICAgIAogICAgVmFsdWVzIGZvciB0aGUgY29udGVudCBvZiBcYDxtZXRhIG5hbWU9InZpZXdwb3J0Ij5cYAogICAgCiAgICBWYWx1ZQogICAgCiAgICBQb3NzaWJsZSBzdWJ2YWx1ZXMKICAgIAogICAgRGVzY3JpcHRpb24KICAgIAogICAgXGB3aWR0aFxgCiAgICAKICAgIEEgcG9zaXRpdmUgaW50ZWdlciBudW1iZXIsIG9yIHRoZSB0ZXh0IFxgZGV2aWNlLXdpZHRoXGAKICAgIAogICAgRGVmaW5lcyB0aGUgcGl4ZWwgd2lkdGggb2YgdGhlIHZpZXdwb3J0IHRoYXQgeW91IHdhbnQgdGhlIHdlYiBzaXRlIHRvIGJlIHJlbmRlcmVkIGF0LgogICAgCiAgICBcYGhlaWdodFxgCiAgICAKICAgIEEgcG9zaXRpdmUgaW50ZWdlciwgb3IgdGhlIHRleHQgXGBkZXZpY2UtaGVpZ2h0XGAKICAgIAogICAgRGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC4gTm90IHVzZWQgYnkgYW55IGJyb3dzZXIuCiAgICAKICAgIFxgaW5pdGlhbC1zY2FsZVxgCiAgICAKICAgIEEgcG9zaXRpdmUgbnVtYmVyIGJldHdlZW4gXGAwLjBcYCBhbmQgXGAxMC4wXGAKICAgIAogICAgRGVmaW5lcyB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgZGV2aWNlIHdpZHRoIChcYGRldmljZS13aWR0aFxgIGluIHBvcnRyYWl0IG1vZGUgb3IgXGBkZXZpY2UtaGVpZ2h0XGAgaW4gbGFuZHNjYXBlIG1vZGUpIGFuZCB0aGUgdmlld3BvcnQgc2l6ZS4KICAgIAogICAgXGBtYXhpbXVtLXNjYWxlXGAKICAgIAogICAgQSBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiBcYDAuMFxgIGFuZCBcYDEwLjBcYAogICAgCiAgICBEZWZpbmVzIHRoZSBtYXhpbXVtIGFtb3VudCB0byB6b29tIGluLiBJdCBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIFxgbWluaW11bS1zY2FsZVxgIG9yIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkLiBCcm93c2VyIHNldHRpbmdzIGNhbiBpZ25vcmUgdGhpcyBydWxlIGFuZCBpT1MxMCsgaWdub3JlcyBpdCBieSBkZWZhdWx0LgogICAgCiAgICBcYG1pbmltdW0tc2NhbGVcYAogICAgCiAgICBBIHBvc2l0aXZlIG51bWJlciBiZXR3ZWVuIFxgMC4wXGAgYW5kIFxgMTAuMFxgCiAgICAKICAgIERlZmluZXMgdGhlIG1pbmltdW0gem9vbSBsZXZlbC4gSXQgbXVzdCBiZSBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBcYG1heGltdW0tc2NhbGVcYCBvciB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4gQnJvd3NlciBzZXR0aW5ncyBjYW4gaWdub3JlIHRoaXMgcnVsZSBhbmQgaU9TMTArIGlnbm9yZXMgaXQgYnkgZGVmYXVsdC4KICAgIAogICAgXGB1c2VyLXNjYWxhYmxlXGAKICAgIAogICAgXGB5ZXNcYCBvciBcYG5vXGAKICAgIAogICAgSWYgc2V0IHRvIFxgbm9cYCwgdGhlIHVzZXIgaXMgbm90IGFibGUgdG8gem9vbSBpbiB0aGUgd2VicGFnZS4gVGhlIGRlZmF1bHQgaXMgXGB5ZXNcYC4gQnJvd3NlciBzZXR0aW5ncyBjYW4gaWdub3JlIHRoaXMgcnVsZSwgYW5kIGlPUzEwKyBpZ25vcmVzIGl0IGJ5IGRlZmF1bHQuCiAgICAKICAgIFNwZWNpZmljYXRpb24KICAgIAogICAgU3RhdHVzCiAgICAKICAgIENvbW1lbnQKICAgIAogICAgW0NTUyBEZXZpY2UgQWRhcHRhdGlvbiAgCiAgICBUaGUgZGVmaW5pdGlvbiBvZiAnPG1ldGEgbmFtZT0idmlld3BvcnQiPicgaW4gdGhhdCBzcGVjaWZpY2F0aW9uLl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1kZXZpY2UtYWRhcHQvI3ZpZXdwb3J0LW1ldGEpCiAgICAKICAgIFdvcmtpbmcgRHJhZnQKICAgIAogICAgTm9uLW5vcm1hdGl2ZWx5IGRlc2NyaWJlcyB0aGUgVmlld3BvcnQgTUVUQSBlbGVtZW50CiAgICAKICAgIFNlZSBhbHNvOiBbXGBAdmlld3BvcnRcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0B2aWV3cG9ydCAiVGhlIEB2aWV3cG9ydCBDU1MgYXQtcnVsZSBsZXRzIHlvdSBjb25maWd1cmUgdGhlIHZpZXdwb3J0IHRocm91Z2ggd2hpY2ggdGhlIGRvY3VtZW50IGlzIHZpZXdlZC4gSXQncyBwcmltYXJpbHkgdXNlZCBmb3IgbW9iaWxlIGRldmljZXMsIGJ1dCBpcyBhbHNvIHVzZWQgYnkgZGVza3RvcCBicm93c2VycyB0aGF0IHN1cHBvcnQgZmVhdHVyZXMgbGlrZSAic25hcCB0byBlZGdlIiAoc3VjaCBhcyBNaWNyb3NvZnQgRWRnZSkuIikKICAgIAogICAgKipOb3RlczoqKgogICAgCiAgICAqICAgVGhvdWdoIHVuc3RhbmRhcmRpemVkLCB0aGlzIGRlY2xhcmF0aW9uIGlzIHJlc3BlY3RlZCBieSBtb3N0IG1vYmlsZSBicm93c2VycyBkdWUgdG8gZGUtZmFjdG8gZG9taW5hbmNlLgogICAgKiAgIFRoZSBkZWZhdWx0IHZhbHVlcyBtYXkgdmFyeSBiZXR3ZWVuIGRldmljZXMgYW5kIGJyb3dzZXJzLgogICAgKiAgIFRvIGxlYXJuIGFib3V0IHRoaXMgZGVjbGFyYXRpb24gaW4gRmlyZWZveCBmb3IgTW9iaWxlLCBzZWUgW3RoaXMgYXJ0aWNsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb2JpbGUvVmlld3BvcnRfbWV0YV90YWcgIk1vYmlsZS9WaWV3cG9ydCBtZXRhIHRhZyIpLmB9fSx7bmFtZToiaHR0cC1lcXVpdiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonRGVmaW5lcyBhIHByYWdtYSBkaXJlY3RpdmUuIFRoZSBhdHRyaWJ1dGUgaXMgbmFtZWQgYCoqaHR0cC1lcXVpdioqKGFsZW50KWAgYmVjYXVzZSBhbGwgdGhlIGFsbG93ZWQgdmFsdWVzIGFyZSBuYW1lcyBvZiBwYXJ0aWN1bGFyIEhUVFAgaGVhZGVyczpcblxuKiAgIGAiY29udGVudC1sYW5ndWFnZSJgICBcbiAgICBEZWZpbmVzIHRoZSBkZWZhdWx0IGxhbmd1YWdlIG9mIHRoZSBwYWdlLiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgW2xhbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvbGFuZykgYXR0cmlidXRlIG9uIGFueSBlbGVtZW50LlxuICAgIFxuICAgICoqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgdmFsdWUsIGFzIGl0IGlzIG9ic29sZXRlLiBQcmVmZXIgdGhlIGBsYW5nYCBhdHRyaWJ1dGUgb24gdGhlIFtgPGh0bWw+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2h0bWwgIlRoZSBIVE1MIDxodG1sPiBlbGVtZW50IHJlcHJlc2VudHMgdGhlIHJvb3QgKHRvcC1sZXZlbCBlbGVtZW50KSBvZiBhbiBIVE1MIGRvY3VtZW50LCBzbyBpdCBpcyBhbHNvIHJlZmVycmVkIHRvIGFzIHRoZSByb290IGVsZW1lbnQuIEFsbCBvdGhlciBlbGVtZW50cyBtdXN0IGJlIGRlc2NlbmRhbnRzIG9mIHRoaXMgZWxlbWVudC4iKSBlbGVtZW50LlxuICAgIFxuKiAgIGAiY29udGVudC1zZWN1cml0eS1wb2xpY3kiYCAgXG4gICAgQWxsb3dzIHBhZ2UgYXV0aG9ycyB0byBkZWZpbmUgYSBbY29udGVudCBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NlY3VyaXR5L0NTUC9DU1BfcG9saWN5X2RpcmVjdGl2ZXMpIGZvciB0aGUgY3VycmVudCBwYWdlLiBDb250ZW50IHBvbGljaWVzIG1vc3RseSBzcGVjaWZ5IGFsbG93ZWQgc2VydmVyIG9yaWdpbnMgYW5kIHNjcmlwdCBlbmRwb2ludHMgd2hpY2ggaGVscCBndWFyZCBhZ2FpbnN0IGNyb3NzLXNpdGUgc2NyaXB0aW5nIGF0dGFja3MuXG4qICAgYCJjb250ZW50LXR5cGUiYCAgXG4gICAgRGVmaW5lcyB0aGUgW01JTUUgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9NSU1FX3R5cGUpIG9mIHRoZSBkb2N1bWVudCwgZm9sbG93ZWQgYnkgaXRzIGNoYXJhY3RlciBlbmNvZGluZy4gSXQgZm9sbG93cyB0aGUgc2FtZSBzeW50YXggYXMgdGhlIEhUVFAgYGNvbnRlbnQtdHlwZWAgZW50aXR5LWhlYWRlciBmaWVsZCwgYnV0IGFzIGl0IGlzIGluc2lkZSBhIEhUTUwgcGFnZSwgbW9zdCB2YWx1ZXMgb3RoZXIgdGhhbiBgdGV4dC9odG1sYCBhcmUgaW1wb3NzaWJsZS4gVGhlcmVmb3JlIHRoZSB2YWxpZCBzeW50YXggZm9yIGl0cyBgY29udGVudGAgaXMgdGhlIHN0cmluZyBcJ2B0ZXh0L2h0bWxgXCcgZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgc2V0IHdpdGggdGhlIGZvbGxvd2luZyBzeW50YXg6IFwnYDsgY2hhcnNldD1fSUFOQWNoYXJzZXRfYFwnLCB3aGVyZSBgSUFOQWNoYXJzZXRgIGlzIHRoZSBfcHJlZmVycmVkIE1JTUUgbmFtZV8gZm9yIGEgY2hhcmFjdGVyIHNldCBhcyBbZGVmaW5lZCBieSB0aGUgSUFOQS5dKGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzKVxuICAgIFxuICAgICoqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgdmFsdWUsIGFzIGl0IGlzIG9ic29sZXRlLiBVc2UgdGhlIFtgY2hhcnNldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY2hhcnNldCkgYXR0cmlidXRlIG9uIHRoZSBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQuXG4gICAgXG4gICAgKipOb3RlOioqIEFzIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgY2FuXCd0IGNoYW5nZSBkb2N1bWVudHNcJyB0eXBlcyBpbiBYSFRNTCBvciBIVE1MNVwncyBYSFRNTCBzZXJpYWxpemF0aW9uLCBuZXZlciBzZXQgdGhlIE1JTUUgdHlwZSB0byBhbiBYSFRNTCBNSU1FIHR5cGUgd2l0aCBgPG1ldGE+YC5cbiAgICBcbiogICBgInJlZnJlc2giYCAgXG4gICAgVGhpcyBpbnN0cnVjdGlvbiBzcGVjaWZpZXM6XG4gICAgKiAgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgcGFnZSBzaG91bGQgYmUgcmVsb2FkZWQgLSBvbmx5IGlmIHRoZSBbYGNvbnRlbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLWNvbnRlbnQpIGF0dHJpYnV0ZSBjb250YWlucyBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAgKiAgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgcGFnZSBzaG91bGQgcmVkaXJlY3QgdG8gYW5vdGhlciAtIG9ubHkgaWYgdGhlIFtgY29udGVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhI2F0dHItY29udGVudCkgYXR0cmlidXRlIGNvbnRhaW5zIGEgcG9zaXRpdmUgaW50ZWdlciBmb2xsb3dlZCBieSB0aGUgc3RyaW5nIFwnYDt1cmw9YFwnLCBhbmQgYSB2YWxpZCBVUkwuXG4qICAgYCJzZXQtY29va2llImAgIFxuICAgIERlZmluZXMgYSBbY29va2llXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL2Nvb2tpZSkgZm9yIHRoZSBwYWdlLiBJdHMgY29udGVudCBtdXN0IGZvbGxvdyB0aGUgc3ludGF4IGRlZmluZWQgaW4gdGhlIFtJRVRGIEhUVFAgQ29va2llIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWh0dHBzdGF0ZS1jb29raWUtMTQpLlxuICAgIFxuICAgICoqV2FybmluZzoqKiBEbyBub3QgdXNlIHRoaXMgaW5zdHJ1Y3Rpb24sIGFzIGl0IGlzIG9ic29sZXRlLiBVc2UgdGhlIEhUVFAgaGVhZGVyIFtgU2V0LUNvb2tpZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9TZXQtQ29va2llKSBpbnN0ZWFkLid9fSx7bmFtZToiY29udGVudCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgdGhlIHZhbHVlIGZvciB0aGUgW2BodHRwLWVxdWl2YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1odHRwLWVxdWl2KSBvciBbYG5hbWVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWV0YSNhdHRyLW5hbWUpIGF0dHJpYnV0ZSwgZGVwZW5kaW5nIG9uIHdoaWNoIGlzIHVzZWQuIn19LHtuYW1lOiJjaGFyc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBkZWNsYXJlcyB0aGUgcGFnZVwncyBjaGFyYWN0ZXIgZW5jb2RpbmcuIEl0IG11c3QgY29udGFpbiBhIFtzdGFuZGFyZCBJQU5BIE1JTUUgbmFtZSBmb3IgY2hhcmFjdGVyIGVuY29kaW5nc10oaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMpLiBBbHRob3VnaCB0aGUgc3RhbmRhcmQgZG9lc25cJ3QgcmVxdWVzdCBhIHNwZWNpZmljIGVuY29kaW5nLCBpdCBzdWdnZXN0czpcblxuKiAgIEF1dGhvcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIFtgVVRGLThgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L1VURi04KS5cbiogICBBdXRob3JzIHNob3VsZCBub3QgdXNlIEFTQ0lJLWluY29tcGF0aWJsZSBlbmNvZGluZ3MgdG8gYXZvaWQgc2VjdXJpdHkgcmlzazogYnJvd3NlcnMgbm90IHN1cHBvcnRpbmcgdGhlbSBtYXkgaW50ZXJwcmV0IGhhcm1mdWwgY29udGVudCBhcyBIVE1MLiBUaGlzIGhhcHBlbnMgd2l0aCB0aGUgYEpJU19DNjIyNi0xOTgzYCwgYEpJU19YMDIxMi0xOTkwYCwgYEhaLUdCLTIzMTJgLCBgSk9IQUJgLCB0aGUgSVNPLTIwMjIgZmFtaWx5IGFuZCB0aGUgRUJDRElDIGZhbWlseS5cblxuKipOb3RlOioqIEFTQ0lJLWluY29tcGF0aWJsZSBlbmNvZGluZ3MgYXJlIHRob3NlIHRoYXQgZG9uXCd0IG1hcCB0aGUgOC1iaXQgY29kZSBwb2ludHMgYDB4MjBgIHRvIGAweDdFYCB0byB0aGUgYDB4MDAyMGAgdG8gYDB4MDA3RWAgVW5pY29kZSBjb2RlIHBvaW50cylcblxuKiAgIEF1dGhvcnMgKiptdXN0IG5vdCoqIHVzZSBgQ0VTVS04YCwgYFVURi03YCwgYEJPQ1UtMWAgYW5kL29yIGBTQ1NVYCBhcyBbY3Jvc3Mtc2l0ZSBzY3JpcHRpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ3Jvc3Mtc2l0ZV9zY3JpcHRpbmcpIGF0dGFja3Mgd2l0aCB0aGVzZSBlbmNvZGluZ3MgaGF2ZSBiZWVuIGRlbW9uc3RyYXRlZC5cbiogICBBdXRob3JzIHNob3VsZCBub3QgdXNlIGBVVEYtMzJgIGJlY2F1c2Ugbm90IGFsbCBIVE1MNSBlbmNvZGluZyBhbGdvcml0aG1zIGNhbiBkaXN0aW5ndWlzaCBpdCBmcm9tIGBVVEYtMTZgLlxuXG4qKk5vdGVzOioqXG5cbiogICBUaGUgZGVjbGFyZWQgY2hhcmFjdGVyIGVuY29kaW5nIG11c3QgbWF0Y2ggdGhlIG9uZSB0aGUgcGFnZSB3YXMgc2F2ZWQgd2l0aCB0byBhdm9pZCBnYXJibGVkIGNoYXJhY3RlcnMgYW5kIHNlY3VyaXR5IGhvbGVzLlxuKiAgIFRoZSBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQgZGVjbGFyaW5nIHRoZSBlbmNvZGluZyBtdXN0IGJlIGluc2lkZSB0aGUgW2A8aGVhZD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaGVhZCAiVGhlIEhUTUwgPGhlYWQ+IGVsZW1lbnQgcHJvdmlkZXMgZ2VuZXJhbCBpbmZvcm1hdGlvbiAobWV0YWRhdGEpIGFib3V0IHRoZSBkb2N1bWVudCwgaW5jbHVkaW5nIGl0cyB0aXRsZSBhbmQgbGlua3MgdG8gaXRzwqBzY3JpcHRzIGFuZCBzdHlsZSBzaGVldHMuIikgZWxlbWVudCBhbmQgKip3aXRoaW4gdGhlIGZpcnN0IDEwMjQgYnl0ZXMqKiBvZiB0aGUgSFRNTCBhcyBzb21lIGJyb3dzZXJzIG9ubHkgbG9vayBhdCB0aG9zZSBieXRlcyBiZWZvcmUgY2hvb3NpbmcgYW4gZW5jb2RpbmcuXG4qICAgVGhpcyBbYDxtZXRhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tZXRhICJUaGUgSFRNTCA8bWV0YT4gZWxlbWVudCByZXByZXNlbnRzIG1ldGFkYXRhIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IG90aGVyIEhUTUwgbWV0YS1yZWxhdGVkIGVsZW1lbnRzLCBsaWtlIDxiYXNlPiwgPGxpbms+LCA8c2NyaXB0PiwgPHN0eWxlPiBvciA8dGl0bGU+LiIpIGVsZW1lbnQgaXMgb25seSBvbmUgcGFydCBvZiB0aGUgW2FsZ29yaXRobSB0byBkZXRlcm1pbmUgYSBwYWdlXCdzIGNoYXJhY3RlciBzZXRdKGh0dHBzOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjZW5jb2Rpbmctc25pZmZpbmctYWxnb3JpdGhtICJBbGdvcml0aG0gY2hhcnNldCBwYWdlIikuIFRoZSBbYENvbnRlbnQtVHlwZWAgaGVhZGVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1UeXBlKSBhbmQgYW55IFtCeXRlLU9yZGVyIE1hcmtzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0J5dGUtT3JkZXJfTWFyayAiVGhlIGRlZmluaXRpb24gb2YgdGhhdCB0ZXJtIChCeXRlLU9yZGVyIE1hcmtzKSBoYXMgbm90IGJlZW4gd3JpdHRlbiB5ZXQ7IHBsZWFzZSBjb25zaWRlciBjb250cmlidXRpbmcgaXQhIikgb3ZlcnJpZGUgdGhpcyBlbGVtZW50LlxuKiAgIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGRlZmluZSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nLiBJZiBhIHBhZ2VcJ3MgZW5jb2RpbmcgaXMgdW5kZWZpbmVkLCBjcm9zcy1zY3JpcHRpbmcgdGVjaG5pcXVlcyBhcmUgcG9zc2libGUsIHN1Y2ggYXMgdGhlIFtgVVRGLTdgIGZhbGxiYWNrIGNyb3NzLXNjcmlwdGluZyB0ZWNobmlxdWVdKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvZG9jdHlwZS1taXJyb3Ivd2lraS9BcnRpY2xlVXRmNykuXG4qICAgVGhlIFtgPG1ldGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEgIlRoZSBIVE1MIDxtZXRhPiBlbGVtZW50IHJlcHJlc2VudHMgbWV0YWRhdGEgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYnkgb3RoZXIgSFRNTCBtZXRhLXJlbGF0ZWQgZWxlbWVudHMsIGxpa2UgPGJhc2U+LCA8bGluaz4sIDxzY3JpcHQ+LCA8c3R5bGU+IG9yIDx0aXRsZT4uIikgZWxlbWVudCB3aXRoIGEgYGNoYXJzZXRgIGF0dHJpYnV0ZSBpcyBhIHN5bm9ueW0gZm9yIHRoZSBwcmUtSFRNTDUgYDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PV9JQU5BY2hhcnNldF8iPmAsIHdoZXJlIF9gSUFOQWNoYXJzZXRgXyBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGVxdWl2YWxlbnQgW2BjaGFyc2V0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jaGFyc2V0KSBhdHRyaWJ1dGUuIFRoaXMgc3ludGF4IGlzIHN0aWxsIGFsbG93ZWQsIGFsdGhvdWdoIG5vIGxvbmdlciByZWNvbW1lbmRlZC4nfX0se25hbWU6InNjaGVtZSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIHNjaGVtZSBpbiB3aGljaCBtZXRhZGF0YSBpcyBkZXNjcmliZWQuIEEgc2NoZW1lIGlzIGEgY29udGV4dCBsZWFkaW5nIHRvIHRoZSBjb3JyZWN0IGludGVycHJldGF0aW9ucyBvZiB0aGUgW2Bjb250ZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEjYXR0ci1jb250ZW50KSB2YWx1ZSwgbGlrZSBhIGZvcm1hdC5cblxuKipXYXJuaW5nOioqIERvIG5vdCB1c2UgdGhpcyB2YWx1ZSwgYXMgaXQgaXMgb2Jzb2xldGUuIFRoZXJlIGlzIG5vIHJlcGxhY2VtZW50IGFzIHRoZXJlIHdhcyBubyByZWFsIHVzYWdlIGZvciBpdC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGEifV19LHtuYW1lOiJzdHlsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHN0eWxlIGVsZW1lbnQgYWxsb3dzIGF1dGhvcnMgdG8gZW1iZWQgc3R5bGUgaW5mb3JtYXRpb24gaW4gdGhlaXIgZG9jdW1lbnRzLiBUaGUgc3R5bGUgZWxlbWVudCBpcyBvbmUgb2Ygc2V2ZXJhbCBpbnB1dHMgdG8gdGhlIHN0eWxpbmcgcHJvY2Vzc2luZyBtb2RlbC4gVGhlIGVsZW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGNvbnRlbnQgZm9yIHRoZSB1c2VyLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJtZWRpYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB3aGljaCBtZWRpYSB0aGUgc3R5bGUgc2hvdWxkIGJlIGFwcGxpZWQgdG8uIEl0cyB2YWx1ZSBpcyBhIFttZWRpYSBxdWVyeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvR3VpZGUvQ1NTL01lZGlhX3F1ZXJpZXMpLCB3aGljaCBkZWZhdWx0cyB0byBgYWxsYCBpZiB0aGUgYXR0cmlidXRlIGlzIG1pc3NpbmcuIn19LHtuYW1lOiJub25jZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBjcnlwdG9ncmFwaGljIG5vbmNlIChudW1iZXIgdXNlZCBvbmNlKSB1c2VkIHRvIHdoaXRlbGlzdCBpbmxpbmUgc3R5bGVzIGluIGEgW3N0eWxlLXNyYyBDb250ZW50LVNlY3VyaXR5LVBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3N0eWxlLXNyYykuIFRoZSBzZXJ2ZXIgbXVzdCBnZW5lcmF0ZSBhIHVuaXF1ZSBub25jZSB2YWx1ZSBlYWNoIHRpbWUgaXQgdHJhbnNtaXRzIGEgcG9saWN5LiBJdCBpcyBjcml0aWNhbCB0byBwcm92aWRlIGEgbm9uY2UgdGhhdCBjYW5ub3QgYmUgZ3Vlc3NlZCBhcyBieXBhc3NpbmcgYSByZXNvdXJjZeKAmXMgcG9saWN5IGlzIG90aGVyd2lzZSB0cml2aWFsLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgZGVmaW5lcyB0aGUgc3R5bGluZyBsYW5ndWFnZSBhcyBhIE1JTUUgdHlwZSAoY2hhcnNldCBzaG91bGQgbm90IGJlIHNwZWNpZmllZCkuIFRoaXMgYXR0cmlidXRlIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBgdGV4dC9jc3NgIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQg4oCUIHRoZXJlIGlzIHZlcnkgbGl0dGxlIHJlYXNvbiB0byBpbmNsdWRlIHRoaXMgaW4gbW9kZXJuIHdlYiBkb2N1bWVudHMuIn19LHtuYW1lOiJzY29wZWQiLHZhbHVlU2V0OiJ2In0se25hbWU6InRpdGxlIixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIFthbHRlcm5hdGl2ZSBzdHlsZSBzaGVldF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0FsdGVybmF0aXZlX3N0eWxlX3NoZWV0cykgc2V0cy4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N0eWxlIn1dfSx7bmFtZToiYm9keSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJvZHkgZWxlbWVudCByZXByZXNlbnRzIHRoZSBjb250ZW50IG9mIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToib25hZnRlcnByaW50IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIGFmdGVyIHRoZSB1c2VyIGhhcyBwcmludGVkIHRoZSBkb2N1bWVudC4ifX0se25hbWU6Im9uYmVmb3JlcHJpbnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciByZXF1ZXN0cyBwcmludGluZyBvZiB0aGUgZG9jdW1lbnQuIn19LHtuYW1lOiJvbmJlZm9yZXVubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBhYm91dCB0byBiZSB1bmxvYWRlZC4ifX0se25hbWU6Im9uaGFzaGNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIHBhcnQgKHN0YXJ0aW5nIHdpdGggdGhlIGhhc2ggKGAnIydgKSBjaGFyYWN0ZXIpIG9mIHRoZSBkb2N1bWVudCdzIGN1cnJlbnQgYWRkcmVzcyBoYXMgY2hhbmdlZC4ifX0se25hbWU6Im9ubGFuZ3VhZ2VjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcHJlZmVycmVkIGxhbmd1YWdlcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25tZXNzYWdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGhhcyByZWNlaXZlZCBhIG1lc3NhZ2UuIn19LHtuYW1lOiJvbm9mZmxpbmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBuZXR3b3JrIGNvbW11bmljYXRpb24gaGFzIGZhaWxlZC4ifX0se25hbWU6Im9ub25saW5lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gbmV0d29yayBjb21tdW5pY2F0aW9uIGhhcyBiZWVuIHJlc3RvcmVkLiJ9fSx7bmFtZToib25wYWdlaGlkZSJ9LHtuYW1lOiJvbnBhZ2VzaG93In0se25hbWU6Im9ucG9wc3RhdGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciBoYXMgbmF2aWdhdGVkIHNlc3Npb24gaGlzdG9yeS4ifX0se25hbWU6Im9uc3RvcmFnZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzdG9yYWdlIGFyZWEgaGFzIGNoYW5nZWQuIn19LHtuYW1lOiJvbnVubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBnb2luZyBhd2F5LiJ9fSx7bmFtZToiYWxpbmsiLGRlc2NyaXB0aW9uOidDb2xvciBvZiB0ZXh0IGZvciBoeXBlcmxpbmtzIHdoZW4gc2VsZWN0ZWQuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yICJUaGUgY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGZvcmVncm91bmQgY29sb3IgdmFsdWUgb2YgYW4gZWxlbWVudFwncyB0ZXh0IGFuZCB0ZXh0IGRlY29yYXRpb25zLCBhbmQgc2V0cyB0aGUgY3VycmVudGNvbG9yIHZhbHVlLiIpIHByb3BlcnR5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFtgOmFjdGl2ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy86YWN0aXZlICJUaGUgOmFjdGl2ZSBDU1MgcHNldWRvLWNsYXNzIHJlcHJlc2VudHMgYW4gZWxlbWVudCAoc3VjaCBhcyBhIGJ1dHRvbikgdGhhdCBpcyBiZWluZyBhY3RpdmF0ZWQgYnkgdGhlIHVzZXIuIikgcHNldWRvLWNsYXNzIGluc3RlYWQuXyd9LHtuYW1lOiJiYWNrZ3JvdW5kIixkZXNjcmlwdGlvbjonVVJJIG9mIGEgaW1hZ2UgdG8gdXNlIGFzIGEgYmFja2dyb3VuZC4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgYmFja2dyb3VuZGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9iYWNrZ3JvdW5kICJUaGUgYmFja2dyb3VuZCBzaG9ydGhhbmQgQ1NTIHByb3BlcnR5IHNldHMgYWxsIGJhY2tncm91bmQgc3R5bGUgcHJvcGVydGllcyBhdCBvbmNlLCBzdWNoIGFzIGNvbG9yLCBpbWFnZSwgb3JpZ2luIGFuZCBzaXplLCBvciByZXBlYXQgbWV0aG9kLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJiZ2NvbG9yIixkZXNjcmlwdGlvbjonQmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIGRvY3VtZW50LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BiYWNrZ3JvdW5kLWNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQtY29sb3IgIlRoZSBiYWNrZ3JvdW5kLWNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGVsZW1lbnQuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6ImJvdHRvbW1hcmdpbiIsZGVzY3JpcHRpb246J1RoZSBtYXJnaW4gb2YgdGhlIGJvdHRvbSBvZiB0aGUgYm9keS4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgbWFyZ2luLWJvdHRvbWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4tYm90dG9tICJUaGUgbWFyZ2luLWJvdHRvbSBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIGJvdHRvbSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJsZWZ0bWFyZ2luIixkZXNjcmlwdGlvbjonVGhlIG1hcmdpbiBvZiB0aGUgbGVmdCBvZiB0aGUgYm9keS4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgbWFyZ2luLWxlZnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLWxlZnQgIlRoZSBtYXJnaW4tbGVmdCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgbWFyZ2luIGFyZWEgb24gdGhlIGxlZnQgc2lkZSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJsaW5rIixkZXNjcmlwdGlvbjonQ29sb3Igb2YgdGV4dCBmb3IgdW52aXNpdGVkIGh5cGVydGV4dCBsaW5rcy4gX1RoaXMgbWV0aG9kIGlzIG5vbi1jb25mb3JtaW5nLCB1c2UgQ1NTIFtgY29sb3JgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY29sb3IgIlRoZSBjb2xvciBDU1MgcHJvcGVydHkgc2V0cyB0aGUgZm9yZWdyb3VuZCBjb2xvciB2YWx1ZSBvZiBhbiBlbGVtZW50XCdzIHRleHQgYW5kIHRleHQgZGVjb3JhdGlvbnMsIGFuZCBzZXRzIHRoZSBjdXJyZW50Y29sb3IgdmFsdWUuIikgcHJvcGVydHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgW2A6bGlua2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy86bGluayAiVGhlIDpsaW5rIENTUyBwc2V1ZG8tY2xhc3MgcmVwcmVzZW50cyBhbiBlbGVtZW50IHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiB2aXNpdGVkLiBJdCBtYXRjaGVzIGV2ZXJ5IHVudmlzaXRlZCA8YT4sIDxhcmVhPiwgb3IgPGxpbms+IGVsZW1lbnQgdGhhdCBoYXMgYW4gaHJlZiBhdHRyaWJ1dGUuIikgcHNldWRvLWNsYXNzIGluc3RlYWQuXyd9LHtuYW1lOiJvbmJsdXIiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGxvc2VzIGZvY3VzLiJ9LHtuYW1lOiJvbmVycm9yIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBmYWlscyB0byBsb2FkIHByb3Blcmx5LiJ9LHtuYW1lOiJvbmZvY3VzIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCByZWNlaXZlcyBmb2N1cy4ifSx7bmFtZToib25sb2FkIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZy4ifSx7bmFtZToib25yZWRvIixkZXNjcmlwdGlvbjoiRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSB1c2VyIGhhcyBtb3ZlZCBmb3J3YXJkIGluIHVuZG8gdHJhbnNhY3Rpb24gaGlzdG9yeS4ifSx7bmFtZToib25yZXNpemUiLGRlc2NyaXB0aW9uOiJGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGhhcyBiZWVuIHJlc2l6ZWQuIn0se25hbWU6Im9udW5kbyIsZGVzY3JpcHRpb246IkZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdXNlciBoYXMgbW92ZWQgYmFja3dhcmQgaW4gdW5kbyB0cmFuc2FjdGlvbiBoaXN0b3J5LiJ9LHtuYW1lOiJyaWdodG1hcmdpbiIsZGVzY3JpcHRpb246J1RoZSBtYXJnaW4gb2YgdGhlIHJpZ2h0IG9mIHRoZSBib2R5LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BtYXJnaW4tcmlnaHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLXJpZ2h0ICJUaGUgbWFyZ2luLXJpZ2h0IENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGluc3RlYWQuXyd9LHtuYW1lOiJ0ZXh0IixkZXNjcmlwdGlvbjonRm9yZWdyb3VuZCBjb2xvciBvZiB0ZXh0LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2Bjb2xvcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvciAiVGhlIGNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHZhbHVlIG9mIGFuIGVsZW1lbnRcJ3MgdGV4dCBhbmQgdGV4dCBkZWNvcmF0aW9ucywgYW5kIHNldHMgdGhlIGN1cnJlbnRjb2xvciB2YWx1ZS4iKSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBpbnN0ZWFkLl8nfSx7bmFtZToidG9wbWFyZ2luIixkZXNjcmlwdGlvbjonVGhlIG1hcmdpbiBvZiB0aGUgdG9wIG9mIHRoZSBib2R5LiBfVGhpcyBtZXRob2QgaXMgbm9uLWNvbmZvcm1pbmcsIHVzZSBDU1MgW2BtYXJnaW4tdG9wYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi10b3AgIlRoZSBtYXJnaW4tdG9wIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgdG9wIG9mIGFuIGVsZW1lbnQuIEEgcG9zaXRpdmUgdmFsdWUgcGxhY2VzIGl0IGZhcnRoZXIgZnJvbSBpdHMgbmVpZ2hib3JzLCB3aGlsZSBhIG5lZ2F0aXZlIHZhbHVlIHBsYWNlcyBpdCBjbG9zZXIuIikgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgaW5zdGVhZC5fJ30se25hbWU6InZsaW5rIixkZXNjcmlwdGlvbjonQ29sb3Igb2YgdGV4dCBmb3IgdmlzaXRlZCBoeXBlcnRleHQgbGlua3MuIF9UaGlzIG1ldGhvZCBpcyBub24tY29uZm9ybWluZywgdXNlIENTUyBbYGNvbG9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yICJUaGUgY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGZvcmVncm91bmQgY29sb3IgdmFsdWUgb2YgYW4gZWxlbWVudFwncyB0ZXh0IGFuZCB0ZXh0IGRlY29yYXRpb25zLCBhbmQgc2V0cyB0aGUgY3VycmVudGNvbG9yIHZhbHVlLiIpIHByb3BlcnR5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFtgOnZpc2l0ZWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvOnZpc2l0ZWQgIlRoZSA6dmlzaXRlZCBDU1MgcHNldWRvLWNsYXNzIHJlcHJlc2VudHMgbGlua3MgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSB2aXNpdGVkLiBGb3IgcHJpdmFjeSByZWFzb25zLCB0aGUgc3R5bGVzIHRoYXQgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHRoaXMgc2VsZWN0b3IgYXJlIHZlcnkgbGltaXRlZC4iKSBwc2V1ZG8tY2xhc3MgaW5zdGVhZC5fJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9ib2R5In1dfSx7bmFtZToiYXJ0aWNsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFydGljbGUgZWxlbWVudCByZXByZXNlbnRzIGEgY29tcGxldGUsIG9yIHNlbGYtY29udGFpbmVkLCBjb21wb3NpdGlvbiBpbiBhIGRvY3VtZW50LCBwYWdlLCBhcHBsaWNhdGlvbiwgb3Igc2l0ZSBhbmQgdGhhdCBpcywgaW4gcHJpbmNpcGxlLCBpbmRlcGVuZGVudGx5IGRpc3RyaWJ1dGFibGUgb3IgcmV1c2FibGUsIGUuZy4gaW4gc3luZGljYXRpb24uIFRoaXMgY291bGQgYmUgYSBmb3J1bSBwb3N0LCBhIG1hZ2F6aW5lIG9yIG5ld3NwYXBlciBhcnRpY2xlLCBhIGJsb2cgZW50cnksIGEgdXNlci1zdWJtaXR0ZWQgY29tbWVudCwgYW4gaW50ZXJhY3RpdmUgd2lkZ2V0IG9yIGdhZGdldCwgb3IgYW55IG90aGVyIGluZGVwZW5kZW50IGl0ZW0gb2YgY29udGVudC4gRWFjaCBhcnRpY2xlIHNob3VsZCBiZSBpZGVudGlmaWVkLCB0eXBpY2FsbHkgYnkgaW5jbHVkaW5nIGEgaGVhZGluZyAoaDHigJNoNiBlbGVtZW50KSBhcyBhIGNoaWxkIG9mIHRoZSBhcnRpY2xlIGVsZW1lbnQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYXJ0aWNsZSJ9XX0se25hbWU6InNlY3Rpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzZWN0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyBhIGdlbmVyaWMgc2VjdGlvbiBvZiBhIGRvY3VtZW50IG9yIGFwcGxpY2F0aW9uLiBBIHNlY3Rpb24sIGluIHRoaXMgY29udGV4dCwgaXMgYSB0aGVtYXRpYyBncm91cGluZyBvZiBjb250ZW50LiBFYWNoIHNlY3Rpb24gc2hvdWxkIGJlIGlkZW50aWZpZWQsIHR5cGljYWxseSBieSBpbmNsdWRpbmcgYSBoZWFkaW5nICggaDEtIGg2IGVsZW1lbnQpIGFzIGEgY2hpbGQgb2YgdGhlIHNlY3Rpb24gZWxlbWVudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWN0aW9uIn1dfSx7bmFtZToibmF2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmF2IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gb2YgYSBwYWdlIHRoYXQgbGlua3MgdG8gb3RoZXIgcGFnZXMgb3IgdG8gcGFydHMgd2l0aGluIHRoZSBwYWdlOiBhIHNlY3Rpb24gd2l0aCBuYXZpZ2F0aW9uIGxpbmtzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L25hdiJ9XX0se25hbWU6ImFzaWRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYXNpZGUgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBvZiBhIHBhZ2UgdGhhdCBjb25zaXN0cyBvZiBjb250ZW50IHRoYXQgaXMgdGFuZ2VudGlhbGx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRlbnQgYXJvdW5kIHRoZSBhc2lkZSBlbGVtZW50LCBhbmQgd2hpY2ggY291bGQgYmUgY29uc2lkZXJlZCBzZXBhcmF0ZSBmcm9tIHRoYXQgY29udGVudC4gU3VjaCBzZWN0aW9ucyBhcmUgb2Z0ZW4gcmVwcmVzZW50ZWQgYXMgc2lkZWJhcnMgaW4gcHJpbnRlZCB0eXBvZ3JhcGh5LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FzaWRlIn1dfSx7bmFtZToiaDEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoMSBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6ImgyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDIgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoMyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGgzIGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaDQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoNCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZWN0aW9uIGhlYWRpbmcuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvSGVhZGluZ19FbGVtZW50cyJ9XX0se25hbWU6Img1IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaDUgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbiBoZWFkaW5nLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L0hlYWRpbmdfRWxlbWVudHMifV19LHtuYW1lOiJoNiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGg2IGVsZW1lbnQgcmVwcmVzZW50cyBhIHNlY3Rpb24gaGVhZGluZy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9IZWFkaW5nX0VsZW1lbnRzIn1dfSx7bmFtZToiaGVhZGVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaGVhZGVyIGVsZW1lbnQgcmVwcmVzZW50cyBpbnRyb2R1Y3RvcnkgY29udGVudCBmb3IgaXRzIG5lYXJlc3QgYW5jZXN0b3Igc2VjdGlvbmluZyBjb250ZW50IG9yIHNlY3Rpb25pbmcgcm9vdCBlbGVtZW50LiBBIGhlYWRlciB0eXBpY2FsbHkgY29udGFpbnMgYSBncm91cCBvZiBpbnRyb2R1Y3Rvcnkgb3IgbmF2aWdhdGlvbmFsIGFpZHMuIFdoZW4gdGhlIG5lYXJlc3QgYW5jZXN0b3Igc2VjdGlvbmluZyBjb250ZW50IG9yIHNlY3Rpb25pbmcgcm9vdCBlbGVtZW50IGlzIHRoZSBib2R5IGVsZW1lbnQsIHRoZW4gaXQgYXBwbGllcyB0byB0aGUgd2hvbGUgcGFnZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9oZWFkZXIifV19LHtuYW1lOiJmb290ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmb290ZXIgZWxlbWVudCByZXByZXNlbnRzIGEgZm9vdGVyIGZvciBpdHMgbmVhcmVzdCBhbmNlc3RvciBzZWN0aW9uaW5nIGNvbnRlbnQgb3Igc2VjdGlvbmluZyByb290IGVsZW1lbnQuIEEgZm9vdGVyIHR5cGljYWxseSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBpdHMgc2VjdGlvbiBzdWNoIGFzIHdobyB3cm90ZSBpdCwgbGlua3MgdG8gcmVsYXRlZCBkb2N1bWVudHMsIGNvcHlyaWdodCBkYXRhLCBhbmQgdGhlIGxpa2UuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9vdGVyIn1dfSx7bmFtZToiYWRkcmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGFkZHJlc3MgZWxlbWVudCByZXByZXNlbnRzIHRoZSBjb250YWN0IGluZm9ybWF0aW9uIGZvciBpdHMgbmVhcmVzdCBhcnRpY2xlIG9yIGJvZHkgZWxlbWVudCBhbmNlc3Rvci4gSWYgdGhhdCBpcyB0aGUgYm9keSBlbGVtZW50LCB0aGVuIHRoZSBjb250YWN0IGluZm9ybWF0aW9uIGFwcGxpZXMgdG8gdGhlIGRvY3VtZW50IGFzIGEgd2hvbGUuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYWRkcmVzcyJ9XX0se25hbWU6InAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwIGVsZW1lbnQgcmVwcmVzZW50cyBhIHBhcmFncmFwaC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9wIn1dfSx7bmFtZToiaHIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBociBlbGVtZW50IHJlcHJlc2VudHMgYSBwYXJhZ3JhcGgtbGV2ZWwgdGhlbWF0aWMgYnJlYWssIGUuZy4gYSBzY2VuZSBjaGFuZ2UgaW4gYSBzdG9yeSwgb3IgYSB0cmFuc2l0aW9uIHRvIGFub3RoZXIgdG9waWMgd2l0aGluIGEgc2VjdGlvbiBvZiBhIHJlZmVyZW5jZSBib29rLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246IlNldHMgdGhlIGFsaWdubWVudCBvZiB0aGUgcnVsZSBvbiB0aGUgcGFnZS4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBgbGVmdGAuIn0se25hbWU6ImNvbG9yIixkZXNjcmlwdGlvbjoiU2V0cyB0aGUgY29sb3Igb2YgdGhlIHJ1bGUgdGhyb3VnaCBjb2xvciBuYW1lIG9yIGhleGFkZWNpbWFsIHZhbHVlLiJ9LHtuYW1lOiJub3NoYWRlIixkZXNjcmlwdGlvbjoiU2V0cyB0aGUgcnVsZSB0byBoYXZlIG5vIHNoYWRpbmcuIn0se25hbWU6InNpemUiLGRlc2NyaXB0aW9uOiJTZXRzIHRoZSBoZWlnaHQsIGluIHBpeGVscywgb2YgdGhlIHJ1bGUuIn0se25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjoiU2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBydWxlIG9uIHRoZSBwYWdlIHRocm91Z2ggYSBwaXhlbCBvciBwZXJjZW50YWdlIHZhbHVlLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaHIifV19LHtuYW1lOiJwcmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwcmUgZWxlbWVudCByZXByZXNlbnRzIGEgYmxvY2sgb2YgcHJlZm9ybWF0dGVkIHRleHQsIGluIHdoaWNoIHN0cnVjdHVyZSBpcyByZXByZXNlbnRlZCBieSB0eXBvZ3JhcGhpYyBjb252ZW50aW9ucyByYXRoZXIgdGhhbiBieSBlbGVtZW50cy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29scyIsZGVzY3JpcHRpb246J0NvbnRhaW5zIHRoZSBfcHJlZmVycmVkXyBjb3VudCBvZiBjaGFyYWN0ZXJzIHRoYXQgYSBsaW5lIHNob3VsZCBoYXZlLiBJdCB3YXMgYSBub24tc3RhbmRhcmQgc3lub255bSBvZiBbYHdpZHRoYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3ByZSNhdHRyLXdpZHRoKS4gVG8gYWNoaWV2ZSBzdWNoIGFuIGVmZmVjdCwgdXNlIENTUyBbYHdpZHRoYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3dpZHRoICJUaGUgd2lkdGggQ1NTIHByb3BlcnR5IHNldHMgYW4gZWxlbWVudFwncyB3aWR0aC4gQnkgZGVmYXVsdCBpdCBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgY29udGVudCBhcmVhLCBidXQgaWYgYm94LXNpemluZyBpcyBzZXQgdG8gYm9yZGVyLWJveCwgaXQgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGJvcmRlciBhcmVhLiIpIGluc3RlYWQuJ30se25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjonQ29udGFpbnMgdGhlIF9wcmVmZXJyZWRfIGNvdW50IG9mIGNoYXJhY3RlcnMgdGhhdCBhIGxpbmUgc2hvdWxkIGhhdmUuIFRob3VnaCB0ZWNobmljYWxseSBzdGlsbCBpbXBsZW1lbnRlZCwgdGhpcyBhdHRyaWJ1dGUgaGFzIG5vIHZpc3VhbCBlZmZlY3Q7IHRvIGFjaGlldmUgc3VjaCBhbiBlZmZlY3QsIHVzZSBDU1MgW2B3aWR0aGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy93aWR0aCAiVGhlIHdpZHRoIENTUyBwcm9wZXJ0eSBzZXRzIGFuIGVsZW1lbnRcJ3Mgd2lkdGguIEJ5IGRlZmF1bHQgaXQgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbnRlbnQgYXJlYSwgYnV0IGlmIGJveC1zaXppbmcgaXMgc2V0IHRvIGJvcmRlci1ib3gsIGl0IHNldHMgdGhlIHdpZHRoIG9mIHRoZSBib3JkZXIgYXJlYS4iKSBpbnN0ZWFkLid9LHtuYW1lOiJ3cmFwIixkZXNjcmlwdGlvbjonSXMgYSBfaGludF8gaW5kaWNhdGluZyBob3cgdGhlIG92ZXJmbG93IG11c3QgaGFwcGVuLiBJbiBtb2Rlcm4gYnJvd3NlciB0aGlzIGhpbnQgaXMgaWdub3JlZCBhbmQgbm8gdmlzdWFsIGVmZmVjdCByZXN1bHRzIGluIGl0cyBwcmVzZW50OyB0byBhY2hpZXZlIHN1Y2ggYW4gZWZmZWN0LCB1c2UgQ1NTIFtgd2hpdGUtc3BhY2VgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1Mvd2hpdGUtc3BhY2UgIlRoZSB3aGl0ZS1zcGFjZSBDU1MgcHJvcGVydHkgc2V0cyBob3cgd2hpdGUgc3BhY2UgaW5zaWRlIGFuIGVsZW1lbnQgaXMgaGFuZGxlZC4iKSBpbnN0ZWFkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcHJlIn1dfSx7bmFtZToiYmxvY2txdW90ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJsb2NrcXVvdGUgZWxlbWVudCByZXByZXNlbnRzIGNvbnRlbnQgdGhhdCBpcyBxdW90ZWQgZnJvbSBhbm90aGVyIHNvdXJjZSwgb3B0aW9uYWxseSB3aXRoIGEgY2l0YXRpb24gd2hpY2ggbXVzdCBiZSB3aXRoaW4gYSBmb290ZXIgb3IgY2l0ZSBlbGVtZW50LCBhbmQgb3B0aW9uYWxseSB3aXRoIGluLWxpbmUgY2hhbmdlcyBzdWNoIGFzIGFubm90YXRpb25zIGFuZCBhYmJyZXZpYXRpb25zLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIFVSTCB0aGF0IGRlc2lnbmF0ZXMgYSBzb3VyY2UgZG9jdW1lbnQgb3IgbWVzc2FnZSBmb3IgdGhlIGluZm9ybWF0aW9uIHF1b3RlZC4gVGhpcyBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgdG8gcG9pbnQgdG8gaW5mb3JtYXRpb24gZXhwbGFpbmluZyB0aGUgY29udGV4dCBvciB0aGUgcmVmZXJlbmNlIGZvciB0aGUgcXVvdGUuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYmxvY2txdW90ZSJ9XX0se25hbWU6Im9sIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgb2wgZWxlbWVudCByZXByZXNlbnRzIGEgbGlzdCBvZiBpdGVtcywgd2hlcmUgdGhlIGl0ZW1zIGhhdmUgYmVlbiBpbnRlbnRpb25hbGx5IG9yZGVyZWQsIHN1Y2ggdGhhdCBjaGFuZ2luZyB0aGUgb3JkZXIgd291bGQgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToicmV2ZXJzZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IHRoZSBpdGVtcyBvZiB0aGUgbGlzdCBhcmUgc3BlY2lmaWVkIGluIHJldmVyc2VkIG9yZGVyLiJ9fSx7bmFtZToic3RhcnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgaW50ZWdlciBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBzdGFydCB2YWx1ZSBmb3IgbnVtYmVyaW5nIHRoZSBpbmRpdmlkdWFsIGxpc3QgaXRlbXMuIEFsdGhvdWdoIHRoZSBvcmRlcmluZyB0eXBlIG9mIGxpc3QgZWxlbWVudHMgbWlnaHQgYmUgUm9tYW4gbnVtZXJhbHMsIHN1Y2ggYXMgWFhYSSwgb3IgbGV0dGVycywgdGhlIHZhbHVlIG9mIHN0YXJ0IGlzIGFsd2F5cyByZXByZXNlbnRlZCBhcyBhIG51bWJlci4gVG8gc3RhcnQgbnVtYmVyaW5nIGVsZW1lbnRzIGZyb20gdGhlIGxldHRlciAiQyIsIHVzZSBgPG9sIHN0YXJ0PSIzIj5gLlxuXG4qKk5vdGUqKjogVGhpcyBhdHRyaWJ1dGUgd2FzIGRlcHJlY2F0ZWQgaW4gSFRNTDQsIGJ1dCByZWludHJvZHVjZWQgaW4gSFRNTDUuJ319LHtuYW1lOiJ0eXBlIix2YWx1ZVNldDoibHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgbnVtYmVyaW5nIHR5cGU6XG5cbiogICBgJ2EnYCBpbmRpY2F0ZXMgbG93ZXJjYXNlIGxldHRlcnMsXG4qICAgYCdBJ2AgaW5kaWNhdGVzIHVwcGVyY2FzZSBsZXR0ZXJzLFxuKiAgIGAnaSdgIGluZGljYXRlcyBsb3dlcmNhc2UgUm9tYW4gbnVtZXJhbHMsXG4qICAgYCdJJ2AgaW5kaWNhdGVzIHVwcGVyY2FzZSBSb21hbiBudW1lcmFscyxcbiogICBhbmQgYCcxJ2AgaW5kaWNhdGVzIG51bWJlcnMgKGRlZmF1bHQpLlxuXG5UaGUgdHlwZSBzZXQgaXMgdXNlZCBmb3IgdGhlIGVudGlyZSBsaXN0IHVubGVzcyBhIGRpZmZlcmVudCBbYHR5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGkjYXR0ci10eXBlKSBhdHRyaWJ1dGUgaXMgdXNlZCB3aXRoaW4gYW4gZW5jbG9zZWQgW2A8bGk+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpIFwiVGhlIEhUTUwgPGxpPiBlbGVtZW50IGlzIHVzZWQgdG8gcmVwcmVzZW50IGFuIGl0ZW0gaW4gYSBsaXN0LiBJdCBtdXN0IGJlIGNvbnRhaW5lZCBpbiBhIHBhcmVudCBlbGVtZW50OiBhbiBvcmRlcmVkIGxpc3QgKDxvbD4pLCBhbiB1bm9yZGVyZWQgbGlzdCAoPHVsPiksIG9yIGEgbWVudSAoPG1lbnU+KS4gSW4gbWVudXMgYW5kIHVub3JkZXJlZCBsaXN0cywgbGlzdCBpdGVtcyBhcmUgdXN1YWxseSBkaXNwbGF5ZWQgdXNpbmcgYnVsbGV0IHBvaW50cy4gSW4gb3JkZXJlZCBsaXN0cywgdGhleSBhcmUgdXN1YWxseSBkaXNwbGF5ZWQgd2l0aCBhbiBhc2NlbmRpbmcgY291bnRlciBvbiB0aGUgbGVmdCwgc3VjaCBhcyBhIG51bWJlciBvciBsZXR0ZXIuXCIpIGVsZW1lbnQuXG5cbioqTm90ZToqKiBUaGlzIGF0dHJpYnV0ZSB3YXMgZGVwcmVjYXRlZCBpbiBIVE1MNCwgYnV0IHJlaW50cm9kdWNlZCBpbiBIVE1MNS5cblxuVW5sZXNzIHRoZSB2YWx1ZSBvZiB0aGUgbGlzdCBudW1iZXIgbWF0dGVycyAoZS5nLiBpbiBsZWdhbCBvciB0ZWNobmljYWwgZG9jdW1lbnRzIHdoZXJlIGl0ZW1zIGFyZSB0byBiZSByZWZlcmVuY2VkIGJ5IHRoZWlyIG51bWJlci9sZXR0ZXIpLCB0aGUgQ1NTIFtgbGlzdC1zdHlsZS10eXBlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2xpc3Qtc3R5bGUtdHlwZSBcIlRoZSBsaXN0LXN0eWxlLXR5cGUgQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmtlciAoc3VjaCBhcyBhIGRpc2MsIGNoYXJhY3Rlciwgb3IgY3VzdG9tIGNvdW50ZXIgc3R5bGUpIG9mIGEgbGlzdCBpdGVtIGVsZW1lbnQuXCIpIHByb3BlcnR5IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuIn19LHtuYW1lOiJjb21wYWN0IixkZXNjcmlwdGlvbjonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBoaW50cyB0aGF0IHRoZSBsaXN0IHNob3VsZCBiZSByZW5kZXJlZCBpbiBhIGNvbXBhY3Qgc3R5bGUuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGF0dHJpYnV0ZSBkZXBlbmRzIG9uIHRoZSB1c2VyIGFnZW50IGFuZCBpdCBkb2VzblwndCB3b3JrIGluIGFsbCBicm93c2Vycy5cblxuKipXYXJuaW5nOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUsIGFzIGl0IGhhcyBiZWVuIGRlcHJlY2F0ZWQ6IHRoZSBbYDxvbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2wgIlRoZSBIVE1MIDxvbD4gZWxlbWVudCByZXByZXNlbnRzIGFuIG9yZGVyZWQgbGlzdCBvZiBpdGVtcywgdHlwaWNhbGx5IHJlbmRlcmVkIGFzIGEgbnVtYmVyZWQgbGlzdC4iKSBlbGVtZW50IHNob3VsZCBiZSBzdHlsZWQgdXNpbmcgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpLiBUbyBnaXZlIGFuIGVmZmVjdCBzaW1pbGFyIHRvIHRoZSBgY29tcGFjdGAgYXR0cmlidXRlLCB0aGUgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpIHByb3BlcnR5IFtgbGluZS1oZWlnaHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbGluZS1oZWlnaHQgIlRoZSBsaW5lLWhlaWdodCBDU1MgcHJvcGVydHkgc2V0cyB0aGUgYW1vdW50IG9mIHNwYWNlIHVzZWQgZm9yIGxpbmVzLCBzdWNoIGFzIGluIHRleHQuIE9uIGJsb2NrLWxldmVsIGVsZW1lbnRzLCBpdCBzcGVjaWZpZXMgdGhlIG1pbmltdW0gaGVpZ2h0IG9mIGxpbmUgYm94ZXMgd2l0aGluIHRoZSBlbGVtZW50LiBPbiBub24tcmVwbGFjZWQgaW5saW5lIGVsZW1lbnRzLCBpdCBzcGVjaWZpZXMgdGhlIGhlaWdodCB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIGxpbmUgYm94IGhlaWdodC4iKSBjYW4gYmUgdXNlZCB3aXRoIGEgdmFsdWUgb2YgYDgwJWAuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vbCJ9XX0se25hbWU6InVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdWwgZWxlbWVudCByZXByZXNlbnRzIGEgbGlzdCBvZiBpdGVtcywgd2hlcmUgdGhlIG9yZGVyIG9mIHRoZSBpdGVtcyBpcyBub3QgaW1wb3J0YW50IOKAlCB0aGF0IGlzLCB3aGVyZSBjaGFuZ2luZyB0aGUgb3JkZXIgd291bGQgbm90IG1hdGVyaWFsbHkgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29tcGFjdCIsZGVzY3JpcHRpb246J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaGludHMgdGhhdCB0aGUgbGlzdCBzaG91bGQgYmUgcmVuZGVyZWQgaW4gYSBjb21wYWN0IHN0eWxlLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBhdHRyaWJ1dGUgZGVwZW5kcyBvbiB0aGUgdXNlciBhZ2VudCBhbmQgaXQgZG9lc25cJ3Qgd29yayBpbiBhbGwgYnJvd3NlcnMuXG5cbioqVXNhZ2Ugbm90ZTrCoCoqRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSwgYXMgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZDogdGhlIFtgPHVsPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC91bCAiVGhlIEhUTUwgPHVsPiBlbGVtZW50IHJlcHJlc2VudHMgYW4gdW5vcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIGJ1bGxldGVkIGxpc3QuIikgZWxlbWVudCBzaG91bGQgYmUgc3R5bGVkIHVzaW5nIFtDU1NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTKS4gVG8gZ2l2ZSBhIHNpbWlsYXIgZWZmZWN0IGFzIHRoZSBgY29tcGFjdGAgYXR0cmlidXRlLCB0aGUgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpIHByb3BlcnR5IFtsaW5lLWhlaWdodF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvbGluZS1oZWlnaHQpIGNhbiBiZSB1c2VkIHdpdGggYSB2YWx1ZSBvZiBgODAlYC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3VsIn1dfSx7bmFtZToibGkiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBsaSBlbGVtZW50IHJlcHJlc2VudHMgYSBsaXN0IGl0ZW0uIElmIGl0cyBwYXJlbnQgZWxlbWVudCBpcyBhbiBvbCwgdWwsIG9yIG1lbnUgZWxlbWVudCwgdGhlbiB0aGUgZWxlbWVudCBpcyBhbiBpdGVtIG9mIHRoZSBwYXJlbnQgZWxlbWVudCdzIGxpc3QsIGFzIGRlZmluZWQgZm9yIHRob3NlIGVsZW1lbnRzLiBPdGhlcndpc2UsIHRoZSBsaXN0IGl0ZW0gaGFzIG5vIGRlZmluZWQgbGlzdC1yZWxhdGVkIHJlbGF0aW9uc2hpcCB0byBhbnkgb3RoZXIgbGkgZWxlbWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgaW50ZWdlciBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSBjdXJyZW50IG9yZGluYWwgdmFsdWUgb2YgdGhlIGxpc3QgaXRlbSBhcyBkZWZpbmVkIGJ5IHRoZSBbYDxvbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2wgIlRoZSBIVE1MIDxvbD4gZWxlbWVudCByZXByZXNlbnRzIGFuIG9yZGVyZWQgbGlzdCBvZiBpdGVtcywgdHlwaWNhbGx5IHJlbmRlcmVkIGFzIGEgbnVtYmVyZWQgbGlzdC4iKSBlbGVtZW50LiBUaGUgb25seSBhbGxvd2VkIHZhbHVlIGZvciB0aGlzIGF0dHJpYnV0ZSBpcyBhIG51bWJlciwgZXZlbiBpZiB0aGUgbGlzdCBpcyBkaXNwbGF5ZWQgd2l0aCBSb21hbiBudW1lcmFscyBvciBsZXR0ZXJzLiBMaXN0IGl0ZW1zIHRoYXQgZm9sbG93IHRoaXMgb25lIGNvbnRpbnVlIG51bWJlcmluZyBmcm9tIHRoZSB2YWx1ZSBzZXQuIFRoZSAqKnZhbHVlKiogYXR0cmlidXRlIGhhcyBubyBtZWFuaW5nIGZvciB1bm9yZGVyZWQgbGlzdHMgKFtgPHVsPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC91bCAiVGhlIEhUTUwgPHVsPiBlbGVtZW50IHJlcHJlc2VudHMgYW4gdW5vcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIGJ1bGxldGVkIGxpc3QuIikpIG9yIGZvciBtZW51cyAoW2A8bWVudT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWVudSAiVGhlIEhUTUwgPG1lbnU+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIGNvbW1hbmRzIHRoYXQgYSB1c2VyIGNhbiBwZXJmb3JtIG9yIGFjdGl2YXRlLiBUaGlzIGluY2x1ZGVzIGJvdGggbGlzdCBtZW51cywgd2hpY2ggbWlnaHQgYXBwZWFyIGFjcm9zcyB0aGUgdG9wIG9mIGEgc2NyZWVuLCBhcyB3ZWxsIGFzIGNvbnRleHQgbWVudXMsIHN1Y2ggYXMgdGhvc2UgdGhhdCBtaWdodCBhcHBlYXIgdW5kZXJuZWF0aCBhIGJ1dHRvbiBhZnRlciBpdCBoYXMgYmVlbiBjbGlja2VkLiIpKS5cblxuKipOb3RlKio6IFRoaXMgYXR0cmlidXRlIHdhcyBkZXByZWNhdGVkIGluIEhUTUw0LCBidXQgcmVpbnRyb2R1Y2VkIGluIEhUTUw1LlxuXG4qKk5vdGU6KiogUHJpb3IgdG8gR2Vja2/CoDkuMCwgbmVnYXRpdmUgdmFsdWVzIHdlcmUgaW5jb3JyZWN0bHkgY29udmVydGVkIHRvIDAuIFN0YXJ0aW5nIGluIEdlY2tvwqA5LjAgYWxsIGludGVnZXIgdmFsdWVzIGFyZSBjb3JyZWN0bHkgcGFyc2VkLid9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246J1RoaXMgY2hhcmFjdGVyIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIG51bWJlcmluZyB0eXBlOlxuXG4qICAgYGFgOiBsb3dlcmNhc2UgbGV0dGVyc1xuKiAgIGBBYDogdXBwZXJjYXNlIGxldHRlcnNcbiogICBgaWA6IGxvd2VyY2FzZSBSb21hbiBudW1lcmFsc1xuKiAgIGBJYDogdXBwZXJjYXNlIFJvbWFuIG51bWVyYWxzXG4qICAgYDFgOiBudW1iZXJzXG5cblRoaXMgdHlwZSBvdmVycmlkZXMgdGhlIG9uZSB1c2VkIGJ5IGl0cyBwYXJlbnQgW2A8b2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29sICJUaGUgSFRNTCA8b2w+IGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcmRlcmVkIGxpc3Qgb2YgaXRlbXMsIHR5cGljYWxseSByZW5kZXJlZCBhcyBhIG51bWJlcmVkIGxpc3QuIikgZWxlbWVudCwgaWYgYW55LlxuXG4qKlVzYWdlIG5vdGU6KiogVGhpcyBhdHRyaWJ1dGUgaGFzIGJlZW4gZGVwcmVjYXRlZDogdXNlIHRoZSBDU1MgW2BsaXN0LXN0eWxlLXR5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbGlzdC1zdHlsZS10eXBlICJUaGUgbGlzdC1zdHlsZS10eXBlIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJrZXIgKHN1Y2ggYXMgYSBkaXNjLCBjaGFyYWN0ZXIsIG9yIGN1c3RvbSBjb3VudGVyIHN0eWxlKSBvZiBhIGxpc3QgaXRlbSBlbGVtZW50LiIpIHByb3BlcnR5IGluc3RlYWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saSJ9XX0se25hbWU6ImRsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGwgZWxlbWVudCByZXByZXNlbnRzIGFuIGFzc29jaWF0aW9uIGxpc3QgY29uc2lzdGluZyBvZiB6ZXJvIG9yIG1vcmUgbmFtZS12YWx1ZSBncm91cHMgKGEgZGVzY3JpcHRpb24gbGlzdCkuIEEgbmFtZS12YWx1ZSBncm91cCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBuYW1lcyAoZHQgZWxlbWVudHMpIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHZhbHVlcyAoZGQgZWxlbWVudHMpLCBpZ25vcmluZyBhbnkgbm9kZXMgb3RoZXIgdGhhbiBkdCBhbmQgZGQgZWxlbWVudHMuIFdpdGhpbiBhIHNpbmdsZSBkbCBlbGVtZW50LCB0aGVyZSBzaG91bGQgbm90IGJlIG1vcmUgdGhhbiBvbmUgZHQgZWxlbWVudCBmb3IgZWFjaCBuYW1lLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RsIn1dfSx7bmFtZToiZHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkdCBlbGVtZW50IHJlcHJlc2VudHMgdGhlIHRlcm0sIG9yIG5hbWUsIHBhcnQgb2YgYSB0ZXJtLWRlc2NyaXB0aW9uIGdyb3VwIGluIGEgZGVzY3JpcHRpb24gbGlzdCAoZGwgZWxlbWVudCkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZHQifV19LHtuYW1lOiJkZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRkIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgZGVzY3JpcHRpb24sIGRlZmluaXRpb24sIG9yIHZhbHVlLCBwYXJ0IG9mIGEgdGVybS1kZXNjcmlwdGlvbiBncm91cCBpbiBhIGRlc2NyaXB0aW9uIGxpc3QgKGRsIGVsZW1lbnQpLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJub3dyYXAiLGRlc2NyaXB0aW9uOiJJZiB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvIGB5ZXNgLCB0aGUgZGVmaW5pdGlvbiB0ZXh0IHdpbGwgbm90IHdyYXAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBub2AuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZCJ9XX0se25hbWU6ImZpZ3VyZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZpZ3VyZSBlbGVtZW50IHJlcHJlc2VudHMgc29tZSBmbG93IGNvbnRlbnQsIG9wdGlvbmFsbHkgd2l0aCBhIGNhcHRpb24sIHRoYXQgaXMgc2VsZi1jb250YWluZWQgKGxpa2UgYSBjb21wbGV0ZSBzZW50ZW5jZSkgYW5kIGlzIHR5cGljYWxseSByZWZlcmVuY2VkIGFzIGEgc2luZ2xlIHVuaXQgZnJvbSB0aGUgbWFpbiBmbG93IG9mIHRoZSBkb2N1bWVudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9maWd1cmUifV19LHtuYW1lOiJmaWdjYXB0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZmlnY2FwdGlvbiBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIG9yIGxlZ2VuZCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWdjYXB0aW9uIGVsZW1lbnQncyBwYXJlbnQgZmlndXJlIGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9maWdjYXB0aW9uIn1dfSx7bmFtZToibWFpbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1haW4gZWxlbWVudCByZXByZXNlbnRzIHRoZSBtYWluIGNvbnRlbnQgb2YgdGhlIGJvZHkgb2YgYSBkb2N1bWVudCBvciBhcHBsaWNhdGlvbi4gVGhlIG1haW4gY29udGVudCBhcmVhIGNvbnNpc3RzIG9mIGNvbnRlbnQgdGhhdCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIG9yIGV4cGFuZHMgdXBvbiB0aGUgY2VudHJhbCB0b3BpYyBvZiBhIGRvY3VtZW50IG9yIGNlbnRyYWwgZnVuY3Rpb25hbGl0eSBvZiBhbiBhcHBsaWNhdGlvbi4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tYWluIn1dfSx7bmFtZToiZGl2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGl2IGVsZW1lbnQgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhdCBhbGwuIEl0IHJlcHJlc2VudHMgaXRzIGNoaWxkcmVuLiBJdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBjbGFzcywgbGFuZywgYW5kIHRpdGxlIGF0dHJpYnV0ZXMgdG8gbWFyayB1cCBzZW1hbnRpY3MgY29tbW9uIHRvIGEgZ3JvdXAgb2YgY29uc2VjdXRpdmUgZWxlbWVudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGl2In1dfSx7bmFtZToiYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGEgZWxlbWVudCBoYXMgYW4gaHJlZiBhdHRyaWJ1dGUsIHRoZW4gaXQgcmVwcmVzZW50cyBhIGh5cGVybGluayAoYSBoeXBlcnRleHQgYW5jaG9yKSBsYWJlbGVkIGJ5IGl0cyBjb250ZW50cy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiaHJlZiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29udGFpbnMgYSBVUkwgb3IgYSBVUkwgZnJhZ21lbnQgdGhhdCB0aGUgaHlwZXJsaW5rIHBvaW50cyB0by4ifX0se25hbWU6InRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonU3BlY2lmaWVzIHdoZXJlIHRvIGRpc3BsYXkgdGhlIGxpbmtlZCBVUkwuIEl0IGlzIGEgbmFtZSBvZiwgb3Iga2V5d29yZCBmb3IsIGEgX2Jyb3dzaW5nIGNvbnRleHRfOiBhIHRhYiwgd2luZG93LCBvciBgPGlmcmFtZT5gLiBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGhhdmUgc3BlY2lhbCBtZWFuaW5nczpcblxuKiAgIGBfc2VsZmA6IExvYWQgdGhlIFVSTCBpbnRvIHRoZSBzYW1lIGJyb3dzaW5nIGNvbnRleHQgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuKiAgIGBfYmxhbmtgOiBMb2FkIHRoZSBVUkwgaW50byBhIG5ldyBicm93c2luZyBjb250ZXh0LiBUaGlzIGlzIHVzdWFsbHkgYSB0YWIsIGJ1dCB1c2VycyBjYW4gY29uZmlndXJlIGJyb3dzZXJzIHRvIHVzZSBuZXcgd2luZG93cyBpbnN0ZWFkLlxuKiAgIGBfcGFyZW50YDogTG9hZCB0aGUgVVJMIGludG8gdGhlIHBhcmVudCBicm93c2luZyBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9uZS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgYF90b3BgOiBMb2FkIHRoZSBVUkwgaW50byB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKHRoYXQgaXMsIHRoZSAiaGlnaGVzdCIgYnJvd3NpbmcgY29udGV4dCB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50IG9uZSwgYW5kIGhhcyBubyBwYXJlbnQpLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cblxuKipOb3RlOioqIFdoZW4gdXNpbmcgYHRhcmdldGAsIGNvbnNpZGVyIGFkZGluZyBgcmVsPSJub3JlZmVycmVyImAgdG8gYXZvaWQgZXhwbG9pdGF0aW9uIG9mIHRoZSBgd2luZG93Lm9wZW5lcmAgQVBJLlxuXG4qKk5vdGU6KiogTGlua2luZyB0byBhbm90aGVyIHBhZ2UgdXNpbmcgYHRhcmdldD0iX2JsYW5rImAgd2lsbCBydW4gdGhlIG5ldyBwYWdlIG9uIHRoZSBzYW1lIHByb2Nlc3MgYXMgeW91ciBwYWdlLiBJZiB0aGUgbmV3IHBhZ2UgaXMgZXhlY3V0aW5nIGV4cGVuc2l2ZSBKUywgeW91ciBwYWdlXCdzIHBlcmZvcm1hbmNlIG1heSBzdWZmZXIuIFRvIGF2b2lkIHRoaXMgdXNlIGByZWw9Im5vb3BlbmVyImAuJ319LHtuYW1lOiJkb3dubG9hZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhpcyBhdHRyaWJ1dGUgaW5zdHJ1Y3RzIGJyb3dzZXJzIHRvIGRvd25sb2FkIGEgVVJMIGluc3RlYWQgb2YgbmF2aWdhdGluZyB0byBpdCwgc28gdGhlIHVzZXIgd2lsbCBiZSBwcm9tcHRlZCB0byBzYXZlIGl0IGFzIGEgbG9jYWwgZmlsZS4gSWYgdGhlIGF0dHJpYnV0ZSBoYXMgYSB2YWx1ZSwgaXQgaXMgdXNlZCBhcyB0aGUgcHJlLWZpbGxlZCBmaWxlIG5hbWUgaW4gdGhlIFNhdmUgcHJvbXB0ICh0aGUgdXNlciBjYW4gc3RpbGwgY2hhbmdlIHRoZSBmaWxlIG5hbWUgaWYgdGhleSB3YW50KS4gVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIHZhbHVlcywgdGhvdWdoIGAvYCBhbmQgYFxcYCBhcmUgY29udmVydGVkIHRvIHVuZGVyc2NvcmVzLiBNb3N0IGZpbGUgc3lzdGVtcyBsaW1pdCBzb21lIHB1bmN0dWF0aW9uIGluIGZpbGUgbmFtZXMsIGFuZCBicm93c2VycyB3aWxsIGFkanVzdCB0aGUgc3VnZ2VzdGVkIG5hbWUgYWNjb3JkaW5nbHkuXG5cbioqTm90ZXM6KipcblxuKiAgIFRoaXMgYXR0cmlidXRlIG9ubHkgd29ya3MgZm9yIFtzYW1lLW9yaWdpbiBVUkxzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TYW1lLW9yaWdpbl9wb2xpY3kpLlxuKiAgIEFsdGhvdWdoIEhUVFAocykgVVJMcyBuZWVkIHRvIGJlIGluIHRoZSBzYW1lLW9yaWdpbiwgW2BibG9iOmAgVVJMc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC5jcmVhdGVPYmplY3RVUkwpIGFuZCBbYGRhdGE6YCBVUkxzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL0RhdGFfVVJJcykgYXJlIGFsbG93ZWQgc28gdGhhdCBjb250ZW50IGdlbmVyYXRlZCBieSBKYXZhU2NyaXB0LCBzdWNoIGFzIHBpY3R1cmVzIGNyZWF0ZWQgaW4gYW4gaW1hZ2UtZWRpdG9yIFdlYiBhcHAsIGNhbiBiZSBkb3dubG9hZGVkLlxuKiAgIElmIHRoZSBIVFRQIGhlYWRlciBbYENvbnRlbnQtRGlzcG9zaXRpb246YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtRGlzcG9zaXRpb24pIGdpdmVzIGEgZGlmZmVyZW50IGZpbGVuYW1lIHRoYW4gdGhpcyBhdHRyaWJ1dGUsIHRoZSBIVFRQIGhlYWRlciB0YWtlcyBwcmlvcml0eSBvdmVyIHRoaXMgYXR0cmlidXRlLlxuKiAgIElmIGBDb250ZW50LURpc3Bvc2l0aW9uOmAgaXMgc2V0IHRvIGBpbmxpbmVgLCBGaXJlZm94IHByaW9yaXRpemVzIGBDb250ZW50LURpc3Bvc2l0aW9uYCwgbGlrZSB0aGUgZmlsZW5hbWUgY2FzZSwgd2hpbGUgQ2hyb21lIHByaW9yaXRpemVzIHRoZSBgZG93bmxvYWRgIGF0dHJpYnV0ZS4ifX0se25hbWU6InBpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0NvbnRhaW5zIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVVJMcyB0byB3aGljaCwgd2hlbiB0aGUgaHlwZXJsaW5rIGlzIGZvbGxvd2VkLCBbYFBPU1RgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL01ldGhvZHMvUE9TVCAiVGhlIEhUVFAgUE9TVCBtZXRob2Qgc2VuZHMgZGF0YSB0byB0aGUgc2VydmVyLiBUaGUgdHlwZSBvZiB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdCBpcyBpbmRpY2F0ZWQgYnkgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuIikgcmVxdWVzdHMgd2l0aCB0aGUgYm9keSBgUElOR2Agd2lsbCBiZSBzZW50IGJ5IHRoZSBicm93c2VyIChpbiB0aGUgYmFja2dyb3VuZCkuIFR5cGljYWxseSB1c2VkIGZvciB0cmFja2luZy4nfX0se25hbWU6InJlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU3BlY2lmaWVzIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHRhcmdldCBvYmplY3QgdG8gdGhlIGxpbmsgb2JqZWN0LiBUaGUgdmFsdWUgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBbbGluayB0eXBlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9MaW5rX3R5cGVzKS4ifX0se25hbWU6ImhyZWZsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIGh1bWFuIGxhbmd1YWdlIG9mIHRoZSBsaW5rZWQgcmVzb3VyY2UuIEl0IGlzIHB1cmVseSBhZHZpc29yeSwgd2l0aCBubyBidWlsdC1pbiBmdW5jdGlvbmFsaXR5LiBBbGxvd2VkIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSBbQkNQNDddKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9iY3AvYmNwNDcudHh0ICJUYWdzIGZvciBJZGVudGlmeWluZyBMYW5ndWFnZXMiKS4nfX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1NwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSBpbiB0aGUgZm9ybSBvZiBhIFtNSU1FIHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvTUlNRV90eXBlICJNSU1FIHR5cGU6IEHCoE1JTUUgdHlwZcKgKG5vdyBwcm9wZXJseSBjYWxsZWQgIm1lZGlhIHR5cGUiLCBidXTCoGFsc28gc29tZXRpbWVzICJjb250ZW50IHR5cGUiKSBpcyBhIHN0cmluZyBzZW50IGFsb25nwqB3aXRoIGEgZmlsZSBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIHRoZSBmaWxlIChkZXNjcmliaW5nIHRoZSBjb250ZW50IGZvcm1hdCwgZm9yIGV4YW1wbGUsIGEgc291bmQgZmlsZSBtaWdodCBiZSBsYWJlbGVkwqBhdWRpby9vZ2csIG9yIGFuIGltYWdlIGZpbGXCoGltYWdlL3BuZykuIikgZm9yIHRoZSBsaW5rZWQgVVJMLiBJdCBpcyBwdXJlbHkgYWR2aXNvcnksIHdpdGggbm8gYnVpbHQtaW4gZnVuY3Rpb25hbGl0eS4nfX0se25hbWU6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjoiSW5kaWNhdGVzIHdoaWNoIFtyZWZlcnJlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIpIHRvIHNlbmQgd2hlbiBmZXRjaGluZyB0aGUgVVJMOlxuXG4qICAgYCduby1yZWZlcnJlcidgIG1lYW5zIHRoZSBgUmVmZXJlcjpgIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnYCBtZWFucyBubyBgUmVmZXJlcjpgIGhlYWRlciB3aWxsIGJlIHNlbnQgd2hlbiBuYXZpZ2F0aW5nIHRvIGFuIG9yaWdpbiB3aXRob3V0IEhUVFBTLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuKiAgIGAnb3JpZ2luJ2AgbWVhbnMgdGhlIHJlZmVycmVyIHdpbGwgYmUgdGhlIFtvcmlnaW5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvT3JpZ2luKSBvZiB0aGUgcGFnZSwgbm90IGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhZnRlciB0aGUgZG9tYWluLlxuKiAgIGAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ2AgbWVhbmluZyB0aGF0IG5hdmlnYXRpb25zIHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0IGFuZCB0aGUgcG9ydCwgd2hpbGUgbmF2aWdhdGlvbnMgb24gdGhlIHNhbWUgb3JpZ2luIHdpbGwgaW5jbHVkZSB0aGUgcmVmZXJyZXIncyBwYXRoLlxuKiAgIGAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidgXG4qICAgYCd1bnNhZmUtdXJsJ2AgbWVhbnMgdGhlIHJlZmVycmVyIHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luIGFuZCBwYXRoLCBidXQgbm90IHRoZSBmcmFnbWVudCwgcGFzc3dvcmQsIG9yIHVzZXJuYW1lLiBUaGlzIGlzIHVuc2FmZSBiZWNhdXNlIGl0IGNhbiBsZWFrIGRhdGEgZnJvbSBzZWN1cmUgVVJMcyB0byBpbnNlY3VyZSBvbmVzLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYSJ9XX0se25hbWU6ImVtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZW0gZWxlbWVudCByZXByZXNlbnRzIHN0cmVzcyBlbXBoYXNpcyBvZiBpdHMgY29udGVudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZW0ifV19LHtuYW1lOiJzdHJvbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzdHJvbmcgZWxlbWVudCByZXByZXNlbnRzIHN0cm9uZyBpbXBvcnRhbmNlLCBzZXJpb3VzbmVzcywgb3IgdXJnZW5jeSBmb3IgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3N0cm9uZyJ9XX0se25hbWU6InNtYWxsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc21hbGwgZWxlbWVudCByZXByZXNlbnRzIHNpZGUgY29tbWVudHMgc3VjaCBhcyBzbWFsbCBwcmludC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbWFsbCJ9XX0se25hbWU6InMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzIGVsZW1lbnQgcmVwcmVzZW50cyBjb250ZW50cyB0aGF0IGFyZSBubyBsb25nZXIgYWNjdXJhdGUgb3Igbm8gbG9uZ2VyIHJlbGV2YW50LiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3MifV19LHtuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY2l0ZSBlbGVtZW50IHJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYSBjcmVhdGl2ZSB3b3JrLiBJdCBtdXN0IGluY2x1ZGUgdGhlIHRpdGxlIG9mIHRoZSB3b3JrIG9yIHRoZSBuYW1lIG9mIHRoZSBhdXRob3IocGVyc29uLCBwZW9wbGUgb3Igb3JnYW5pemF0aW9uKSBvciBhbiBVUkwgcmVmZXJlbmNlLCBvciBhIHJlZmVyZW5jZSBpbiBhYmJyZXZpYXRlZCBmb3JtIGFzIHBlciB0aGUgY29udmVudGlvbnMgdXNlZCBmb3IgdGhlIGFkZGl0aW9uIG9mIGNpdGF0aW9uIG1ldGFkYXRhLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NpdGUifV19LHtuYW1lOiJxIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcSBlbGVtZW50IHJlcHJlc2VudHMgc29tZSBwaHJhc2luZyBjb250ZW50IHF1b3RlZCBmcm9tIGFub3RoZXIgc291cmNlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgYSBVUkwgdGhhdCBkZXNpZ25hdGVzIGEgc291cmNlIGRvY3VtZW50IG9yIG1lc3NhZ2UgZm9yIHRoZSBpbmZvcm1hdGlvbiBxdW90ZWQuIFRoaXMgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHBvaW50IHRvIGluZm9ybWF0aW9uIGV4cGxhaW5pbmcgdGhlIGNvbnRleHQgb3IgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIHF1b3RlLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3EifV19LHtuYW1lOiJkZm4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkZm4gZWxlbWVudCByZXByZXNlbnRzIHRoZSBkZWZpbmluZyBpbnN0YW5jZSBvZiBhIHRlcm0uIFRoZSBwYXJhZ3JhcGgsIGRlc2NyaXB0aW9uIGxpc3QgZ3JvdXAsIG9yIHNlY3Rpb24gdGhhdCBpcyB0aGUgbmVhcmVzdCBhbmNlc3RvciBvZiB0aGUgZGZuIGVsZW1lbnQgbXVzdCBhbHNvIGNvbnRhaW4gdGhlIGRlZmluaXRpb24ocykgZm9yIHRoZSB0ZXJtIGdpdmVuIGJ5IHRoZSBkZm4gZWxlbWVudC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZm4ifV19LHtuYW1lOiJhYmJyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYWJiciBlbGVtZW50IHJlcHJlc2VudHMgYW4gYWJicmV2aWF0aW9uIG9yIGFjcm9ueW0sIG9wdGlvbmFsbHkgd2l0aCBpdHMgZXhwYW5zaW9uLiBUaGUgdGl0bGUgYXR0cmlidXRlIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgYW4gZXhwYW5zaW9uIG9mIHRoZSBhYmJyZXZpYXRpb24uIFRoZSBhdHRyaWJ1dGUsIGlmIHNwZWNpZmllZCwgbXVzdCBjb250YWluIGFuIGV4cGFuc2lvbiBvZiB0aGUgYWJicmV2aWF0aW9uLCBhbmQgbm90aGluZyBlbHNlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FiYnIifV19LHtuYW1lOiJydWJ5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcnVieSBlbGVtZW50IGFsbG93cyBvbmUgb3IgbW9yZSBzcGFucyBvZiBwaHJhc2luZyBjb250ZW50IHRvIGJlIG1hcmtlZCB3aXRoIHJ1YnkgYW5ub3RhdGlvbnMuIFJ1YnkgYW5ub3RhdGlvbnMgYXJlIHNob3J0IHJ1bnMgb2YgdGV4dCBwcmVzZW50ZWQgYWxvbmdzaWRlIGJhc2UgdGV4dCwgcHJpbWFyaWx5IHVzZWQgaW4gRWFzdCBBc2lhbiB0eXBvZ3JhcGh5IGFzIGEgZ3VpZGUgZm9yIHByb251bmNpYXRpb24gb3IgdG8gaW5jbHVkZSBvdGhlciBhbm5vdGF0aW9ucy4gSW4gSmFwYW5lc2UsIHRoaXMgZm9ybSBvZiB0eXBvZ3JhcGh5IGlzIGFsc28ga25vd24gYXMgZnVyaWdhbmEuIFJ1YnkgdGV4dCBjYW4gYXBwZWFyIG9uIGVpdGhlciBzaWRlLCBhbmQgc29tZXRpbWVzIGJvdGggc2lkZXMsIG9mIHRoZSBiYXNlIHRleHQsIGFuZCBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIGl0cyBwb3NpdGlvbiB1c2luZyBDU1MuIEEgbW9yZSBjb21wbGV0ZSBpbnRyb2R1Y3Rpb24gdG8gcnVieSBjYW4gYmUgZm91bmQgaW4gdGhlIFVzZSBDYXNlcyAmIEV4cGxvcmF0b3J5IEFwcHJvYWNoZXMgZm9yIFJ1YnkgTWFya3VwIGRvY3VtZW50IGFzIHdlbGwgYXMgaW4gQ1NTIFJ1YnkgTW9kdWxlIExldmVsIDEuIFtSVUJZLVVDXSBbQ1NTUlVCWV0ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9ydWJ5In1dfSx7bmFtZToicmIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByYiBlbGVtZW50IG1hcmtzIHRoZSBiYXNlIHRleHQgY29tcG9uZW50IG9mIGEgcnVieSBhbm5vdGF0aW9uLiBXaGVuIGl0IGlzIHRoZSBjaGlsZCBvZiBhIHJ1YnkgZWxlbWVudCwgaXQgZG9lc24ndCByZXByZXNlbnQgYW55dGhpbmcgaXRzZWxmLCBidXQgaXRzIHBhcmVudCBydWJ5IGVsZW1lbnQgdXNlcyBpdCBhcyBwYXJ0IG9mIGRldGVybWluaW5nIHdoYXQgaXQgcmVwcmVzZW50cy4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9yYiJ9XX0se25hbWU6InJ0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcnQgZWxlbWVudCBtYXJrcyB0aGUgcnVieSB0ZXh0IGNvbXBvbmVudCBvZiBhIHJ1YnkgYW5ub3RhdGlvbi4gV2hlbiBpdCBpcyB0aGUgY2hpbGQgb2YgYSBydWJ5IGVsZW1lbnQgb3Igb2YgYW4gcnRjIGVsZW1lbnQgdGhhdCBpcyBpdHNlbGYgdGhlIGNoaWxkIG9mIGEgcnVieSBlbGVtZW50LCBpdCBkb2Vzbid0IHJlcHJlc2VudCBhbnl0aGluZyBpdHNlbGYsIGJ1dCBpdHMgYW5jZXN0b3IgcnVieSBlbGVtZW50IHVzZXMgaXQgYXMgcGFydCBvZiBkZXRlcm1pbmluZyB3aGF0IGl0IHJlcHJlc2VudHMuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcnQifV19LHtuYW1lOiJycCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHJwIGVsZW1lbnQgaXMgdXNlZCB0byBwcm92aWRlIGZhbGxiYWNrIHRleHQgdG8gYmUgc2hvd24gYnkgdXNlciBhZ2VudHMgdGhhdCBkb24ndCBzdXBwb3J0IHJ1YnkgYW5ub3RhdGlvbnMuIE9uZSB3aWRlc3ByZWFkIGNvbnZlbnRpb24gaXMgdG8gcHJvdmlkZSBwYXJlbnRoZXNlcyBhcm91bmQgdGhlIHJ1YnkgdGV4dCBjb21wb25lbnQgb2YgYSBydWJ5IGFubm90YXRpb24uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcnAifV19LHtuYW1lOiJ0aW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGltZSBlbGVtZW50IHJlcHJlc2VudHMgaXRzIGNvbnRlbnRzLCBhbG9uZyB3aXRoIGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtIG9mIHRob3NlIGNvbnRlbnRzIGluIHRoZSBkYXRldGltZSBhdHRyaWJ1dGUuIFRoZSBraW5kIG9mIGNvbnRlbnQgaXMgbGltaXRlZCB0byB2YXJpb3VzIGtpbmRzIG9mIGRhdGVzLCB0aW1lcywgdGltZS16b25lIG9mZnNldHMsIGFuZCBkdXJhdGlvbnMsIGFzIGRlc2NyaWJlZCBiZWxvdy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGF0ZXRpbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgdGltZSBhbmQvb3IgZGF0ZSBvZiB0aGUgZWxlbWVudCBhbmQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIGZvcm1hdHMgZGVzY3JpYmVkIGJlbG93LiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RpbWUifV19LHtuYW1lOiJjb2RlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgY29kZSBlbGVtZW50IHJlcHJlc2VudHMgYSBmcmFnbWVudCBvZiBjb21wdXRlciBjb2RlLiBUaGlzIGNvdWxkIGJlIGFuIFhNTCBlbGVtZW50IG5hbWUsIGEgZmlsZSBuYW1lLCBhIGNvbXB1dGVyIHByb2dyYW0sIG9yIGFueSBvdGhlciBzdHJpbmcgdGhhdCBhIGNvbXB1dGVyIHdvdWxkIHJlY29nbml6ZS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2RlIn1dfSx7bmFtZToidmFyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdmFyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHZhcmlhYmxlLiBUaGlzIGNvdWxkIGJlIGFuIGFjdHVhbCB2YXJpYWJsZSBpbiBhIG1hdGhlbWF0aWNhbCBleHByZXNzaW9uIG9yIHByb2dyYW1taW5nIGNvbnRleHQsIGFuIGlkZW50aWZpZXIgcmVwcmVzZW50aW5nIGEgY29uc3RhbnQsIGEgc3ltYm9sIGlkZW50aWZ5aW5nIGEgcGh5c2ljYWwgcXVhbnRpdHksIGEgZnVuY3Rpb24gcGFyYW1ldGVyLCBvciBqdXN0IGJlIGEgdGVybSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgaW4gcHJvc2UuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmFyIn1dfSx7bmFtZToic2FtcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNhbXAgZWxlbWVudCByZXByZXNlbnRzIHNhbXBsZSBvciBxdW90ZWQgb3V0cHV0IGZyb20gYW5vdGhlciBwcm9ncmFtIG9yIGNvbXB1dGluZyBzeXN0ZW0uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2FtcCJ9XX0se25hbWU6ImtiZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGtiZCBlbGVtZW50IHJlcHJlc2VudHMgdXNlciBpbnB1dCAodHlwaWNhbGx5IGtleWJvYXJkIGlucHV0LCBhbHRob3VnaCBpdCBtYXkgYWxzbyBiZSB1c2VkIHRvIHJlcHJlc2VudCBvdGhlciBpbnB1dCwgc3VjaCBhcyB2b2ljZSBjb21tYW5kcykuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQva2JkIn1dfSx7bmFtZToic3ViIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc3ViIGVsZW1lbnQgcmVwcmVzZW50cyBhIHN1YnNjcmlwdC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdWIifV19LHtuYW1lOiJzdXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzdXAgZWxlbWVudCByZXByZXNlbnRzIGEgc3VwZXJzY3JpcHQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3VwIn1dfSx7bmFtZToiaSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGkgZWxlbWVudCByZXByZXNlbnRzIGEgc3BhbiBvZiB0ZXh0IGluIGFuIGFsdGVybmF0ZSB2b2ljZSBvciBtb29kLCBvciBvdGhlcndpc2Ugb2Zmc2V0IGZyb20gdGhlIG5vcm1hbCBwcm9zZSBpbiBhIG1hbm5lciBpbmRpY2F0aW5nIGEgZGlmZmVyZW50IHF1YWxpdHkgb2YgdGV4dCwgc3VjaCBhcyBhIHRheG9ub21pYyBkZXNpZ25hdGlvbiwgYSB0ZWNobmljYWwgdGVybSwgYW4gaWRpb21hdGljIHBocmFzZSBmcm9tIGFub3RoZXIgbGFuZ3VhZ2UsIHRyYW5zbGl0ZXJhdGlvbiwgYSB0aG91Z2h0LCBvciBhIHNoaXAgbmFtZSBpbiBXZXN0ZXJuIHRleHRzLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2kifV19LHtuYW1lOiJiIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYiBlbGVtZW50IHJlcHJlc2VudHMgYSBzcGFuIG9mIHRleHQgdG8gd2hpY2ggYXR0ZW50aW9uIGlzIGJlaW5nIGRyYXduIGZvciB1dGlsaXRhcmlhbiBwdXJwb3NlcyB3aXRob3V0IGNvbnZleWluZyBhbnkgZXh0cmEgaW1wb3J0YW5jZSBhbmQgd2l0aCBubyBpbXBsaWNhdGlvbiBvZiBhbiBhbHRlcm5hdGUgdm9pY2Ugb3IgbW9vZCwgc3VjaCBhcyBrZXkgd29yZHMgaW4gYSBkb2N1bWVudCBhYnN0cmFjdCwgcHJvZHVjdCBuYW1lcyBpbiBhIHJldmlldywgYWN0aW9uYWJsZSB3b3JkcyBpbiBpbnRlcmFjdGl2ZSB0ZXh0LWRyaXZlbiBzb2Z0d2FyZSwgb3IgYW4gYXJ0aWNsZSBsZWRlLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2IifV19LHtuYW1lOiJ1IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdSBlbGVtZW50IHJlcHJlc2VudHMgYSBzcGFuIG9mIHRleHQgd2l0aCBhbiB1bmFydGljdWxhdGVkLCB0aG91Z2ggZXhwbGljaXRseSByZW5kZXJlZCwgbm9uLXRleHR1YWwgYW5ub3RhdGlvbiwgc3VjaCBhcyBsYWJlbGluZyB0aGUgdGV4dCBhcyBiZWluZyBhIHByb3BlciBuYW1lIGluIENoaW5lc2UgdGV4dCAoYSBDaGluZXNlIHByb3BlciBuYW1lIG1hcmspLCBvciBsYWJlbGluZyB0aGUgdGV4dCBhcyBiZWluZyBtaXNzcGVsdC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC91In1dfSx7bmFtZToibWFyayIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1hcmsgZWxlbWVudCByZXByZXNlbnRzIGEgcnVuIG9mIHRleHQgaW4gb25lIGRvY3VtZW50IG1hcmtlZCBvciBoaWdobGlnaHRlZCBmb3IgcmVmZXJlbmNlIHB1cnBvc2VzLCBkdWUgdG8gaXRzIHJlbGV2YW5jZSBpbiBhbm90aGVyIGNvbnRleHQuIFdoZW4gdXNlZCBpbiBhIHF1b3RhdGlvbiBvciBvdGhlciBibG9jayBvZiB0ZXh0IHJlZmVycmVkIHRvIGZyb20gdGhlIHByb3NlLCBpdCBpbmRpY2F0ZXMgYSBoaWdobGlnaHQgdGhhdCB3YXMgbm90IG9yaWdpbmFsbHkgcHJlc2VudCBidXQgd2hpY2ggaGFzIGJlZW4gYWRkZWQgdG8gYnJpbmcgdGhlIHJlYWRlcidzIGF0dGVudGlvbiB0byBhIHBhcnQgb2YgdGhlIHRleHQgdGhhdCBtaWdodCBub3QgaGF2ZSBiZWVuIGNvbnNpZGVyZWQgaW1wb3J0YW50IGJ5IHRoZSBvcmlnaW5hbCBhdXRob3Igd2hlbiB0aGUgYmxvY2sgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiwgYnV0IHdoaWNoIGlzIG5vdyB1bmRlciBwcmV2aW91c2x5IHVuZXhwZWN0ZWQgc2NydXRpbnkuIFdoZW4gdXNlZCBpbiB0aGUgbWFpbiBwcm9zZSBvZiBhIGRvY3VtZW50LCBpdCBpbmRpY2F0ZXMgYSBwYXJ0IG9mIHRoZSBkb2N1bWVudCB0aGF0IGhhcyBiZWVuIGhpZ2hsaWdodGVkIGR1ZSB0byBpdHMgbGlrZWx5IHJlbGV2YW5jZSB0byB0aGUgdXNlcidzIGN1cnJlbnQgYWN0aXZpdHkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbWFyayJ9XX0se25hbWU6ImJkaSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGJkaSBlbGVtZW50IHJlcHJlc2VudHMgYSBzcGFuIG9mIHRleHQgdGhhdCBpcyB0byBiZSBpc29sYXRlZCBmcm9tIGl0cyBzdXJyb3VuZGluZ3MgZm9yIHRoZSBwdXJwb3NlcyBvZiBiaWRpcmVjdGlvbmFsIHRleHQgZm9ybWF0dGluZy4gW0JJREldIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYmRpIn1dfSx7bmFtZToiYmRvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgYmRvIGVsZW1lbnQgcmVwcmVzZW50cyBleHBsaWNpdCB0ZXh0IGRpcmVjdGlvbmFsaXR5IGZvcm1hdHRpbmcgY29udHJvbCBmb3IgaXRzIGNoaWxkcmVuLiBJdCBhbGxvd3MgYXV0aG9ycyB0byBvdmVycmlkZSB0aGUgVW5pY29kZSBiaWRpcmVjdGlvbmFsIGFsZ29yaXRobSBieSBleHBsaWNpdGx5IHNwZWNpZnlpbmcgYSBkaXJlY3Rpb24gb3ZlcnJpZGUuIFtCSURJXSJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJkaXIiLGRlc2NyaXB0aW9uOiJUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRleHQgc2hvdWxkIGJlIHJlbmRlcmVkIGluIHRoaXMgZWxlbWVudCdzIGNvbnRlbnRzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGx0cmA6IEluZGljYXRlcyB0aGF0IHRoZSB0ZXh0IHNob3VsZCBnbyBpbiBhIGxlZnQtdG8tcmlnaHQgZGlyZWN0aW9uLlxuKiAgIGBydGxgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgdGV4dCBzaG91bGQgZ28gaW4gYSByaWdodC10by1sZWZ0IGRpcmVjdGlvbi4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2JkbyJ9XX0se25hbWU6InNwYW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBzcGFuIGVsZW1lbnQgZG9lc24ndCBtZWFuIGFueXRoaW5nIG9uIGl0cyBvd24sIGJ1dCBjYW4gYmUgdXNlZnVsIHdoZW4gdXNlZCB0b2dldGhlciB3aXRoIHRoZSBnbG9iYWwgYXR0cmlidXRlcywgZS5nLiBjbGFzcywgbGFuZywgb3IgZGlyLiBJdCByZXByZXNlbnRzIGl0cyBjaGlsZHJlbi4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zcGFuIn1dfSx7bmFtZToiYnIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBiciBlbGVtZW50IHJlcHJlc2VudHMgYSBsaW5lIGJyZWFrLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjbGVhciIsZGVzY3JpcHRpb246IkluZGljYXRlcyB3aGVyZSB0byBiZWdpbiB0aGUgbmV4dCBsaW5lIGFmdGVyIHRoZSBicmVhay4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2JyIn1dfSx7bmFtZToid2JyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgd2JyIGVsZW1lbnQgcmVwcmVzZW50cyBhIGxpbmUgYnJlYWsgb3Bwb3J0dW5pdHkuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvd2JyIn1dfSx7bmFtZToiaW5zIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaW5zIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBhZGRpdGlvbiB0byB0aGUgZG9jdW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImNpdGUiLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBVUkkgb2YgYSByZXNvdXJjZSB0aGF0IGV4cGxhaW5zIHRoZSBjaGFuZ2UsIHN1Y2ggYXMgYSBsaW5rIHRvIG1lZXRpbmcgbWludXRlcyBvciBhIHRpY2tldCBpbiBhIHRyb3VibGVzaG9vdGluZyBzeXN0ZW0uIn0se25hbWU6ImRhdGV0aW1lIixkZXNjcmlwdGlvbjonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSB0aW1lIGFuZCBkYXRlIG9mIHRoZSBjaGFuZ2UgYW5kIG11c3QgYmUgYSB2YWxpZCBkYXRlIHdpdGggYW4gb3B0aW9uYWwgdGltZSBzdHJpbmcuIElmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgcGFyc2VkIGFzIGEgZGF0ZSB3aXRoIGFuIG9wdGlvbmFsIHRpbWUgc3RyaW5nLCB0aGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgdGltZSBzdGFtcC4gRm9yIHRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyB3aXRob3V0IGEgdGltZSwgc2VlIFtGb3JtYXQgb2YgYSB2YWxpZCBkYXRlIHN0cmluZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMjRm9ybWF0X29mX2FfdmFsaWRfZGF0ZV9zdHJpbmcgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKSBpbiBbRGF0ZSBhbmQgdGltZSBmb3JtYXRzIHVzZWQgaW4gSFRNTF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKS4gVGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIGlmIGl0IGluY2x1ZGVzIGJvdGggZGF0ZSBhbmQgdGltZSBpcyBjb3ZlcmVkIGluIFtGb3JtYXQgb2YgYSB2YWxpZCBsb2NhbCBkYXRlIGFuZCB0aW1lIHN0cmluZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMjRm9ybWF0X29mX2FfdmFsaWRfbG9jYWxfZGF0ZV9hbmRfdGltZV9zdHJpbmcgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKSBpbiBbRGF0ZSBhbmQgdGltZSBmb3JtYXRzIHVzZWQgaW4gSFRNTF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9EYXRlX2FuZF90aW1lX2Zvcm1hdHMgIkNlcnRhaW4gSFRNTCBlbGVtZW50cyB1c2UgZGF0ZSBhbmQvb3IgdGltZSB2YWx1ZXMuIFRoZSBmb3JtYXRzIG9mIHRoZSBzdHJpbmdzIHRoYXQgc3BlY2lmeSB0aGVzZSBhcmUgZGVzY3JpYmVkIGluIHRoaXMgYXJ0aWNsZS4iKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucyJ9XX0se25hbWU6ImRlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRlbCBlbGVtZW50IHJlcHJlc2VudHMgYSByZW1vdmFsIGZyb20gdGhlIGRvY3VtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjaXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIFVSSSBmb3IgYSByZXNvdXJjZSB0aGF0IGV4cGxhaW5zIHRoZSBjaGFuZ2UgKGZvciBleGFtcGxlLCBtZWV0aW5nIG1pbnV0ZXMpLiJ9fSx7bmFtZToiZGF0ZXRpbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgdGltZSBhbmQgZGF0ZSBvZiB0aGUgY2hhbmdlIGFuZCBtdXN0IGJlIGEgdmFsaWQgZGF0ZSBzdHJpbmcgd2l0aCBhbiBvcHRpb25hbCB0aW1lLiBJZiB0aGUgdmFsdWUgY2Fubm90IGJlIHBhcnNlZCBhcyBhIGRhdGUgd2l0aCBhbiBvcHRpb25hbCB0aW1lIHN0cmluZywgdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHRpbWUgc3RhbXAuIEZvciB0aGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgd2l0aG91dCBhIHRpbWUsIHNlZSBbRm9ybWF0IG9mIGEgdmFsaWQgZGF0ZSBzdHJpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzI0Zvcm1hdF9vZl9hX3ZhbGlkX2RhdGVfc3RyaW5nICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikgaW4gW0RhdGUgYW5kIHRpbWUgZm9ybWF0cyB1c2VkIGluIEhUTUxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikuIFRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpZiBpdCBpbmNsdWRlcyBib3RoIGRhdGUgYW5kIHRpbWUgaXMgY292ZXJlZCBpbiBbRm9ybWF0IG9mIGEgdmFsaWQgbG9jYWwgZGF0ZSBhbmQgdGltZSBzdHJpbmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzI0Zvcm1hdF9vZl9hX3ZhbGlkX2xvY2FsX2RhdGVfYW5kX3RpbWVfc3RyaW5nICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikgaW4gW0RhdGUgYW5kIHRpbWUgZm9ybWF0cyB1c2VkIGluIEhUTUxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRGF0ZV9hbmRfdGltZV9mb3JtYXRzICJDZXJ0YWluIEhUTUwgZWxlbWVudHMgdXNlIGRhdGUgYW5kL29yIHRpbWUgdmFsdWVzLiBUaGUgZm9ybWF0cyBvZiB0aGUgc3RyaW5ncyB0aGF0IHNwZWNpZnkgdGhlc2UgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIGFydGljbGUuIikuJ319XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGVsIn1dfSx7bmFtZToicGljdHVyZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBpY3R1cmUgZWxlbWVudCBpcyBhIGNvbnRhaW5lciB3aGljaCBwcm92aWRlcyBtdWx0aXBsZSBzb3VyY2VzIHRvIGl0cyBjb250YWluZWQgaW1nIGVsZW1lbnQgdG8gYWxsb3cgYXV0aG9ycyB0byBkZWNsYXJhdGl2ZWx5IGNvbnRyb2wgb3IgZ2l2ZSBoaW50cyB0byB0aGUgdXNlciBhZ2VudCBhYm91dCB3aGljaCBpbWFnZSByZXNvdXJjZSB0byB1c2UsIGJhc2VkIG9uIHRoZSBzY3JlZW4gcGl4ZWwgZGVuc2l0eSwgdmlld3BvcnQgc2l6ZSwgaW1hZ2UgZm9ybWF0LCBhbmQgb3RoZXIgZmFjdG9ycy4gSXQgcmVwcmVzZW50cyBpdHMgY2hpbGRyZW4uIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcGljdHVyZSJ9XX0se25hbWU6ImltZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gaW1nIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBpbWFnZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWx0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIGFuIGFsdGVybmF0aXZlIHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGltYWdlLlxuXG4qKk5vdGU6KiogQnJvd3NlcnMgZG8gbm90IGFsd2F5cyBkaXNwbGF5IHRoZSBpbWFnZSByZWZlcmVuY2VkIGJ5IHRoZSBlbGVtZW50LiBUaGlzIGlzIHRoZSBjYXNlIGZvciBub24tZ3JhcGhpY2FsIGJyb3dzZXJzIChpbmNsdWRpbmcgdGhvc2UgdXNlZCBieSBwZW9wbGUgd2l0aCB2aXN1YWwgaW1wYWlybWVudHMpLCBpZiB0aGUgdXNlciBjaG9vc2VzIG5vdCB0byBkaXNwbGF5IGltYWdlcywgb3IgaWYgdGhlIGJyb3dzZXIgY2Fubm90IGRpc3BsYXkgdGhlIGltYWdlIGJlY2F1c2UgaXQgaXMgaW52YWxpZCBvciBhbiBbdW5zdXBwb3J0ZWQgdHlwZV0oI1N1cHBvcnRlZF9pbWFnZV9mb3JtYXRzKS4gSW4gdGhlc2UgY2FzZXMsIHRoZSBicm93c2VyIG1heSByZXBsYWNlIHRoZSBpbWFnZSB3aXRoIHRoZSB0ZXh0IGRlZmluZWQgaW4gdGhpcyBlbGVtZW50XCdzIGBhbHRgIGF0dHJpYnV0ZS4gWW91IHNob3VsZCwgZm9yIHRoZXNlIHJlYXNvbnMgYW5kIG90aGVycywgcHJvdmlkZSBhIHVzZWZ1bCB2YWx1ZSBmb3IgYGFsdGAgd2hlbmV2ZXIgcG9zc2libGUuXG5cbioqTm90ZToqKiBPbWl0dGluZyB0aGlzIGF0dHJpYnV0ZSBhbHRvZ2V0aGVyIGluZGljYXRlcyB0aGF0IHRoZSBpbWFnZSBpcyBhIGtleSBwYXJ0IG9mIHRoZSBjb250ZW50LCBhbmQgbm8gdGV4dHVhbCBlcXVpdmFsZW50IGlzIGF2YWlsYWJsZS4gU2V0dGluZyB0aGlzIGF0dHJpYnV0ZSB0byBhbiBlbXB0eSBzdHJpbmcgKGBhbHQ9IiJgKSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGltYWdlIGlzIF9ub3RfIGEga2V5IHBhcnQgb2YgdGhlIGNvbnRlbnQgKGRlY29yYXRpdmUpLCBhbmQgdGhhdCBub24tdmlzdWFsIGJyb3dzZXJzIG1heSBvbWl0IGl0IGZyb20gcmVuZGVyaW5nLid9fSx7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaW1hZ2UgVVJMLiBUaGlzIGF0dHJpYnV0ZSBpcyBtYW5kYXRvcnkgZm9yIHRoZSBgPGltZz5gIGVsZW1lbnQuIE9uIGJyb3dzZXJzIHN1cHBvcnRpbmcgYHNyY3NldGAsIGBzcmNgIGlzIHRyZWF0ZWQgbGlrZSBhIGNhbmRpZGF0ZSBpbWFnZSB3aXRoIGEgcGl4ZWwgZGVuc2l0eSBkZXNjcmlwdG9yIGAxeGAgdW5sZXNzIGFuIGltYWdlIHdpdGggdGhpcyBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGBzcmNzZXQsYCBvciB1bmxlc3MgYHNyY3NldGAgY29udGFpbnMgJ2B3YCcgZGVzY3JpcHRvcnMuIn19LHtuYW1lOiJzcmNzZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgbGlzdCBvZiBvbmUgb3IgbW9yZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMgaW5kaWNhdGluZyBhIHNldCBvZiBwb3NzaWJsZSBpbWFnZSBzb3VyY2VzIGZvciB0aGUgdXNlciBhZ2VudCB0byB1c2UuIEVhY2ggc3RyaW5nIGlzIGNvbXBvc2VkIG9mOlxuXG4xLiAgYSBVUkwgdG8gYW4gaW1hZ2UsXG4yLiAgb3B0aW9uYWxseSwgd2hpdGVzcGFjZSBmb2xsb3dlZCBieSBvbmUgb2Y6XG4gICAgKiAgIEEgd2lkdGggZGVzY3JpcHRvciwgb3IgYSBwb3NpdGl2ZSBpbnRlZ2VyIGRpcmVjdGx5IGZvbGxvd2VkIGJ5ICdgd2AnLiBUaGUgd2lkdGggZGVzY3JpcHRvciBpcyBkaXZpZGVkIGJ5IHRoZSBzb3VyY2Ugc2l6ZSBnaXZlbiBpbiB0aGUgYHNpemVzYCBhdHRyaWJ1dGUgdG8gY2FsY3VsYXRlIHRoZSBlZmZlY3RpdmUgcGl4ZWwgZGVuc2l0eS5cbiAgICAqICAgQSBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IsIHdoaWNoIGlzIGEgcG9zaXRpdmUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGRpcmVjdGx5IGZvbGxvd2VkIGJ5ICdgeGAnLlxuXG5JZiBubyBkZXNjcmlwdG9yIGlzIHNwZWNpZmllZCwgdGhlIHNvdXJjZSBpcyBhc3NpZ25lZCB0aGUgZGVmYXVsdCBkZXNjcmlwdG9yOiBgMXhgLlxuXG5JdCBpcyBpbmNvcnJlY3QgdG8gbWl4IHdpZHRoIGRlc2NyaXB0b3JzIGFuZCBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3JzIGluIHRoZSBzYW1lIGBzcmNzZXRgIGF0dHJpYnV0ZS4gRHVwbGljYXRlIGRlc2NyaXB0b3JzIChmb3IgaW5zdGFuY2UsIHR3byBzb3VyY2VzIGluIHRoZSBzYW1lIGBzcmNzZXRgIHdoaWNoIGFyZSBib3RoIGRlc2NyaWJlZCB3aXRoICdgMnhgJykgYXJlIGFsc28gaW52YWxpZC5cblxuVGhlIHVzZXIgYWdlbnQgc2VsZWN0cyBhbnkgb25lIG9mIHRoZSBhdmFpbGFibGUgc291cmNlcyBhdCBpdHMgZGlzY3JldGlvbi4gVGhpcyBwcm92aWRlcyB0aGVtIHdpdGggc2lnbmlmaWNhbnQgbGVld2F5IHRvIHRhaWxvciB0aGVpciBzZWxlY3Rpb24gYmFzZWQgb24gdGhpbmdzIGxpa2UgdXNlciBwcmVmZXJlbmNlcyBvciBiYW5kd2lkdGggY29uZGl0aW9ucy4gU2VlIG91ciBbUmVzcG9uc2l2ZSBpbWFnZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTGVhcm4vSFRNTC9NdWx0aW1lZGlhX2FuZF9lbWJlZGRpbmcvUmVzcG9uc2l2ZV9pbWFnZXMpIHR1dG9yaWFsIGZvciBhbiBleGFtcGxlLiJ9fSx7bmFtZToiY3Jvc3NvcmlnaW4iLHZhbHVlU2V0OiJ4byIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgaWYgdGhlIGZldGNoaW5nIG9mIHRoZSByZWxhdGVkIGltYWdlIG11c3QgYmUgZG9uZSB1c2luZyBDT1JTIG9yIG5vdC4gW0NPUlMtZW5hYmxlZCBpbWFnZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ09SU19FbmFibGVkX0ltYWdlKSBjYW4gYmUgcmV1c2VkIGluIHRoZSBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhbnZhcyAiVXNlIHRoZSBIVE1MIDxjYW52YXM+IGVsZW1lbnQgd2l0aCBlaXRoZXIgdGhlIGNhbnZhcyBzY3JpcHRpbmcgQVBJIG9yIHRoZSBXZWJHTCBBUEkgdG8gZHJhdyBncmFwaGljcyBhbmQgYW5pbWF0aW9ucy4iKSBlbGVtZW50IHdpdGhvdXQgYmVpbmcgIlt0YWludGVkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfZW5hYmxlZF9pbWFnZSNXaGF0X2lzX2FfdGFpbnRlZF9jYW52YXMpLiIgVGhlIGFsbG93ZWQgdmFsdWVzIGFyZTonfX0se25hbWU6InVzZW1hcCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIHBhcnRpYWwgVVJMIChzdGFydGluZyB3aXRoIFwnI1wnKSBvZiBhbiBbaW1hZ2UgbWFwXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0hUTUwvRWxlbWVudC9tYXApIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudC5cblxuKipOb3RlOioqIFlvdSBjYW5ub3QgdXNlIHRoaXMgYXR0cmlidXRlIGlmIHRoZSBgPGltZz5gIGVsZW1lbnQgaXMgYSBkZXNjZW5kYW50IG9mIGFuIFtgPGE+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EgIlRoZSBIVE1MIDxhPiBlbGVtZW50IChvciBhbmNob3IgZWxlbWVudCkgY3JlYXRlcyBhIGh5cGVybGluayB0byBvdGhlciB3ZWIgcGFnZXMsIGZpbGVzLCBsb2NhdGlvbnMgd2l0aGluIHRoZSBzYW1lIHBhZ2UsIGVtYWlsIGFkZHJlc3Nlcywgb3IgYW55IG90aGVyIFVSTC4iKSBvciBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgZWxlbWVudC4nfX0se25hbWU6ImlzbWFwIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgaW1hZ2UgaXMgcGFydCBvZiBhIHNlcnZlci1zaWRlIG1hcC4gSWYgc28sIHRoZSBwcmVjaXNlIGNvb3JkaW5hdGVzIG9mIGEgY2xpY2sgYXJlIHNlbnQgdG8gdGhlIHNlcnZlci5cblxuKipOb3RlOioqIFRoaXMgYXR0cmlidXRlIGlzIGFsbG93ZWQgb25seSBpZiB0aGUgYDxpbWc+YCBlbGVtZW50IGlzIGEgZGVzY2VuZGFudCBvZiBhbiBbYDxhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hICJUaGUgSFRNTCA8YT4gZWxlbWVudCAob3IgYW5jaG9yIGVsZW1lbnQpIGNyZWF0ZXMgYSBoeXBlcmxpbmsgdG8gb3RoZXIgd2ViIHBhZ2VzLCBmaWxlcywgbG9jYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBwYWdlLCBlbWFpbCBhZGRyZXNzZXMsIG9yIGFueSBvdGhlciBVUkwuIikgZWxlbWVudCB3aXRoIGEgdmFsaWQgW2BocmVmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2EjYXR0ci1ocmVmKSBhdHRyaWJ1dGUuJ319LHtuYW1lOiJ3aWR0aCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLiJ9fSx7bmFtZToiaGVpZ2h0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLiJ9fSx7bmFtZToiZGVjb2RpbmciLGRlc2NyaXB0aW9uOiJQcm92aWRlcyBhbiBpbWFnZSBkZWNvZGluZyBoaW50IHRvIHRoZSBicm93c2VyLiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlOiJ9LHtuYW1lOiJkZWNvZGluZyIsZGVzY3JpcHRpb246YFxgc3luY1xgCgpEZWNvZGUgdGhlIGltYWdlIHN5bmNocm9ub3VzbHkgZm9yIGF0b21pYyBwcmVzZW50YXRpb24gd2l0aCBvdGhlciBjb250ZW50LgoKXGBhc3luY1xgCgpEZWNvZGUgdGhlIGltYWdlIGFzeW5jaHJvbm91c2x5IHRvIHJlZHVjZSBkZWxheSBpbiBwcmVzZW50aW5nIG90aGVyIGNvbnRlbnQuCgpcYGF1dG9cYAoKRGVmYXVsdCBtb2RlLCB3aGljaCBpbmRpY2F0ZXMgbm8gcHJlZmVyZW5jZSBmb3IgdGhlIGRlY29kaW5nIG1vZGUuIFRoZSBicm93c2VyIGRlY2lkZXMgd2hhdCBpcyBiZXN0IGZvciB0aGUgdXNlci5gfSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246IkluZGljYXRlcyB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiB0aGUgcmVzb3VyY2UuIFByaW9yaXR5IGhpbnRzIGFyZSBkZWxlZ2F0ZWQgdXNpbmcgdGhlIHZhbHVlczoifSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246ImBhdXRvYDogSW5kaWNhdGVzwqAqKm5vwqBwcmVmZXJlbmNlKiouIFRoZSBicm93c2VyIG1heSB1c2UgaXRzIG93biBoZXVyaXN0aWNzIHRvIGRlY2lkZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGltYWdlLlxuXG5gaGlnaGA6IEluZGljYXRlcyB0byB0aGXCoGJyb3dzZXLCoHRoYXQgdGhlIGltYWdlIGlzIG9mwqAqKmhpZ2gqKiBwcmlvcml0eS5cblxuYGxvd2A6wqBJbmRpY2F0ZXMgdG8gdGhlwqBicm93c2VywqB0aGF0IHRoZSBpbWFnZSBpcyBvZsKgKipsb3cqKiBwcmlvcml0eS4ifSx7bmFtZToiaW50cmluc2ljc2l6ZSIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIHRlbGxzIHRoZSBicm93c2VyIHRvIGlnbm9yZSB0aGUgYWN0dWFsIGludHJpbnNpYyBzaXplIG9mIHRoZSBpbWFnZSBhbmQgcHJldGVuZCBpdOKAmXMgdGhlIHNpemUgc3BlY2lmaWVkIGluIHRoZSBhdHRyaWJ1dGUuIFNwZWNpZmljYWxseSwgdGhlIGltYWdlIHdvdWxkIHJhc3RlciBhdCB0aGVzZSBkaW1lbnNpb25zIGFuZCBgbmF0dXJhbFdpZHRoYC9gbmF0dXJhbEhlaWdodGAgb24gaW1hZ2VzIHdvdWxkIHJldHVybiB0aGUgdmFsdWVzIHNwZWNpZmllZCBpbiB0aGlzIGF0dHJpYnV0ZS4gW0V4cGxhaW5lcl0oaHR0cHM6Ly9naXRodWIuY29tL29qYW52YWZhaS9pbnRyaW5zaWNzaXplLWF0dHJpYnV0ZSksIFtleGFtcGxlc10oaHR0cHM6Ly9nb29nbGVjaHJvbWUuZ2l0aHViLmlvL3NhbXBsZXMvaW50cmluc2ljLXNpemUvaW5kZXguaHRtbCkifSx7bmFtZToicmVmZXJyZXJwb2xpY3kiLGRlc2NyaXB0aW9uOiJBIHN0cmluZyBpbmRpY2F0aW5nIHdoaWNoIHJlZmVycmVyIHRvIHVzZSB3aGVuIGZldGNoaW5nIHRoZSByZXNvdXJjZTpcblxuKiAgIGBuby1yZWZlcnJlcjpgIFRoZSBbYFJlZmVyZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJlciBcIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuXCIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZTpgIE5vIGBSZWZlcmVyYCBoZWFkZXIgd2lsbCBiZSBzZW50IHdoZW4gbmF2aWdhdGluZyB0byBhbiBvcmlnaW4gd2l0aG91dCBUTFMgKEhUVFBTKS4gVGhpcyBpcyBhIHVzZXIgYWdlbnTigJlzIGRlZmF1bHQgYmVoYXZpb3IgaWYgbm8gcG9saWN5IGlzIG90aGVyd2lzZSBzcGVjaWZpZWQuXG4qICAgYG9yaWdpbjpgIFRoZSBgUmVmZXJlcmAgaGVhZGVyIHdpbGwgaW5jbHVkZSB0aGUgcGFnZSBvZiBvcmlnaW4ncyBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbjpgIE5hdmlnYXRpbmcgdG8gb3RoZXIgb3JpZ2lucyB3aWxsIGxpbWl0IHRoZSBpbmNsdWRlZCByZWZlcnJhbCBkYXRhIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0IGFuZCB0aGUgcG9ydCwgd2hpbGUgbmF2aWdhdGluZyBmcm9tIHRoZSBzYW1lIG9yaWdpbiB3aWxsIGluY2x1ZGUgdGhlIHJlZmVycmVyJ3MgZnVsbCBwYXRoLlxuKiAgIGB1bnNhZmUtdXJsOmAgVGhlIGBSZWZlcmVyYCBoZWFkZXIgd2lsbCBpbmNsdWRlIHRoZSBvcmlnaW4gYW5kIHRoZSBwYXRoLCBidXQgbm90IHRoZSBmcmFnbWVudCwgcGFzc3dvcmQsIG9yIHVzZXJuYW1lLiBUaGlzIGNhc2UgaXMgdW5zYWZlIGJlY2F1c2UgaXQgY2FuIGxlYWsgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLiJ9LHtuYW1lOiJzaXplcyIsZGVzY3JpcHRpb246IkEgbGlzdCBvZiBvbmUgb3IgbW9yZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMgaW5kaWNhdGluZyBhIHNldCBvZiBzb3VyY2Ugc2l6ZXMuIEVhY2ggc291cmNlIHNpemUgY29uc2lzdHMgb2Y6XG5cbjEuICBhIG1lZGlhIGNvbmRpdGlvbi4gVGhpcyBtdXN0IGJlIG9taXR0ZWQgZm9yIHRoZSBsYXN0IGl0ZW0uXG4yLiAgYSBzb3VyY2Ugc2l6ZSB2YWx1ZS5cblxuU291cmNlIHNpemUgdmFsdWVzIHNwZWNpZnkgdGhlIGludGVuZGVkIGRpc3BsYXkgc2l6ZSBvZiB0aGUgaW1hZ2UuIFVzZXIgYWdlbnRzIHVzZSB0aGUgY3VycmVudCBzb3VyY2Ugc2l6ZSB0byBzZWxlY3Qgb25lIG9mIHRoZSBzb3VyY2VzIHN1cHBsaWVkIGJ5IHRoZSBgc3Jjc2V0YCBhdHRyaWJ1dGUsIHdoZW4gdGhvc2Ugc291cmNlcyBhcmUgZGVzY3JpYmVkIHVzaW5nIHdpZHRoICgnYHdgJykgZGVzY3JpcHRvcnMuIFRoZSBzZWxlY3RlZCBzb3VyY2Ugc2l6ZSBhZmZlY3RzIHRoZSBpbnRyaW5zaWMgc2l6ZSBvZiB0aGUgaW1hZ2UgKHRoZSBpbWFnZeKAmXMgZGlzcGxheSBzaXplIGlmIG5vIENTUyBzdHlsaW5nIGlzIGFwcGxpZWQpLiBJZiB0aGUgYHNyY3NldGAgYXR0cmlidXRlIGlzIGFic2VudCwgb3IgY29udGFpbnMgbm8gdmFsdWVzIHdpdGggYSB3aWR0aCAoYHdgKSBkZXNjcmlwdG9yLCB0aGVuIHRoZSBgc2l6ZXNgIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0LiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW1nIn1dfSx7bmFtZToiaWZyYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgaWZyYW1lIGVsZW1lbnQgcmVwcmVzZW50cyBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBVUkwgb2YgdGhlIHBhZ2UgdG8gZW1iZWQuIFVzZSBhIHZhbHVlIG9mIGBhYm91dDpibGFua2AgdG8gZW1iZWQgYW4gZW1wdHkgcGFnZSB0aGF0IGNvbmZvcm1zIHRvIHRoZSBbc2FtZS1vcmlnaW4gcG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TYW1lLW9yaWdpbl9wb2xpY3kjSW5oZXJpdGVkX29yaWdpbnMpLiBBbHNvIG5vdGUgdGhhdCBwcm9ncmFtYXRpY2FsbHkgcmVtb3ZpbmcgYW4gYDxpZnJhbWU+YFwncyBzcmMgYXR0cmlidXRlIChlLmcuIHZpYSBbYEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9yZW1vdmVBdHRyaWJ1dGUgIlRoZSBFbGVtZW50IG1ldGhvZCByZW1vdmVBdHRyaWJ1dGUoKSByZW1vdmVzIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZnJvbSB0aGUgZWxlbWVudC4iKSkgY2F1c2VzIGBhYm91dDpibGFua2AgdG8gYmUgbG9hZGVkIGluIHRoZSBmcmFtZSBpbiBGaXJlZm94IChmcm9tIHZlcnNpb24gNjUpLCBDaHJvbWl1bS1iYXNlZCBicm93c2VycywgYW5kIFNhZmFyaS9pT1MuJ319LHtuYW1lOiJzcmNkb2MiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklubGluZSBIVE1MIHRvIGVtYmVkLCBvdmVycmlkaW5nIHRoZSBgc3JjYCBhdHRyaWJ1dGUuIElmIGEgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgc3JjZG9jYCBhdHRyaWJ1dGUsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBVUkwgaW4gdGhlIGBzcmNgIGF0dHJpYnV0ZS4ifX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0EgdGFyZ2V0YWJsZSBuYW1lIGZvciB0aGUgZW1iZWRkZWQgYnJvd3NpbmcgY29udGV4dC4gVGhpcyBjYW4gYmUgdXNlZCBpbiB0aGUgYHRhcmdldGAgYXR0cmlidXRlIG9mIHRoZSBbYDxhPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hICJUaGUgSFRNTCA8YT4gZWxlbWVudCAob3IgYW5jaG9yIGVsZW1lbnQpIGNyZWF0ZXMgYSBoeXBlcmxpbmsgdG8gb3RoZXIgd2ViIHBhZ2VzLCBmaWxlcywgbG9jYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBwYWdlLCBlbWFpbCBhZGRyZXNzZXMsIG9yIGFueSBvdGhlciBVUkwuIiksIFtgPGZvcm0+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0gIlRoZSBIVE1MIDxmb3JtPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkb2N1bWVudCBzZWN0aW9uIHRoYXQgY29udGFpbnMgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHN1Ym1pdHRpbmcgaW5mb3JtYXRpb24gdG8gYSB3ZWIgc2VydmVyLiIpLCBvciBbYDxiYXNlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9iYXNlICJUaGUgSFRNTCA8YmFzZT4gZWxlbWVudCBzcGVjaWZpZXMgdGhlIGJhc2UgVVJMIHRvIHVzZSBmb3IgYWxsIHJlbGF0aXZlIFVSTHMgY29udGFpbmVkIHdpdGhpbiBhIGRvY3VtZW50LiBUaGVyZSBjYW4gYmUgb25seSBvbmUgPGJhc2U+IGVsZW1lbnQgaW4gYSBkb2N1bWVudC4iKSBlbGVtZW50czsgdGhlIGBmb3JtdGFyZ2V0YCBhdHRyaWJ1dGUgb2YgdGhlIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIG9yIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBlbGVtZW50czsgb3IgdGhlIGB3aW5kb3dOYW1lYCBwYXJhbWV0ZXIgaW4gdGhlIFtgd2luZG93Lm9wZW4oKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvb3BlbiAiVGhlwqBXaW5kb3cgaW50ZXJmYWNlXCdzIG9wZW4oKSBtZXRob2QgbG9hZHMgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpbnRvIHRoZSBicm93c2luZyBjb250ZXh0ICh3aW5kb3csIDxpZnJhbWU+IG9yIHRhYikgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuIElmIHRoZSBuYW1lIGRvZXNuXCd0IGV4aXN0LCB0aGVuIGEgbmV3IHdpbmRvdyBpcyBvcGVuZWQgYW5kIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgaXMgbG9hZGVkIGludG8gaXRzIGJyb3dzaW5nIGNvbnRleHQuIikgbWV0aG9kLid9fSx7bmFtZToic2FuZGJveCIsdmFsdWVTZXQ6InNiIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBcHBsaWVzIGV4dHJhIHJlc3RyaWN0aW9ucyB0byB0aGUgY29udGVudCBpbiB0aGUgZnJhbWUuIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGNhbiBlaXRoZXIgYmUgZW1wdHkgdG8gYXBwbHkgYWxsIHJlc3RyaWN0aW9ucywgb3Igc3BhY2Utc2VwYXJhdGVkIHRva2VucyB0byBsaWZ0IHBhcnRpY3VsYXIgcmVzdHJpY3Rpb25zOlxuXG4qICAgYGFsbG93LWZvcm1zYDogQWxsb3dzIHRoZSByZXNvdXJjZSB0byBzdWJtaXQgZm9ybXMuIElmIHRoaXMga2V5d29yZCBpcyBub3QgdXNlZCwgZm9ybSBzdWJtaXNzaW9uIGlzIGJsb2NrZWQuXG4qICAgYGFsbG93LW1vZGFsc2A6IExldHMgdGhlIHJlc291cmNlIFtvcGVuIG1vZGFsIHdpbmRvd3NdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbmRib3hlZC1tb2RhbHMtZmxhZykuXG4qICAgYGFsbG93LW9yaWVudGF0aW9uLWxvY2tgOiBMZXRzIHRoZSByZXNvdXJjZSBbbG9jayB0aGUgc2NyZWVuIG9yaWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2NyZWVuL2xvY2tPcmllbnRhdGlvbikuXG4qICAgYGFsbG93LXBvaW50ZXItbG9ja2A6IExldHMgdGhlIHJlc291cmNlIHVzZSB0aGUgW1BvaW50ZXIgTG9jayBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViQVBJL1BvaW50ZXJfTG9jaykuXG4qICAgYGFsbG93LXBvcHVwc2A6IEFsbG93cyBwb3B1cHMgKHN1Y2ggYXMgYHdpbmRvdy5vcGVuKClgLCBgdGFyZ2V0PSJfYmxhbmsiYCwgb3IgYHNob3dNb2RhbERpYWxvZygpYCkuIElmIHRoaXMga2V5d29yZCBpcyBub3QgdXNlZCwgdGhlIHBvcHVwIHdpbGwgc2lsZW50bHkgZmFpbCB0byBvcGVuLlxuKiAgIGBhbGxvdy1wb3B1cHMtdG8tZXNjYXBlLXNhbmRib3hgOiBMZXRzIHRoZSBzYW5kYm94ZWQgZG9jdW1lbnQgb3BlbiBuZXcgd2luZG93cyB3aXRob3V0IHRob3NlIHdpbmRvd3MgaW5oZXJpdGluZyB0aGUgc2FuZGJveGluZy4gRm9yIGV4YW1wbGUsIHRoaXMgY2FuIHNhZmVseSBzYW5kYm94IGFuIGFkdmVydGlzZW1lbnQgd2l0aG91dCBmb3JjaW5nIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyB1cG9uIHRoZSBwYWdlIHRoZSBhZCBsaW5rcyB0by5cbiogICBgYWxsb3ctcHJlc2VudGF0aW9uYDogTGV0cyB0aGUgcmVzb3VyY2Ugc3RhcnQgYSBbcHJlc2VudGF0aW9uIHNlc3Npb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9QcmVzZW50YXRpb25SZXF1ZXN0KS5cbiogICBgYWxsb3ctc2FtZS1vcmlnaW5gOiBJZiB0aGlzIHRva2VuIGlzIG5vdCB1c2VkLCB0aGUgcmVzb3VyY2UgaXMgdHJlYXRlZCBhcyBiZWluZyBmcm9tIGEgc3BlY2lhbCBvcmlnaW4gdGhhdCBhbHdheXMgZmFpbHMgdGhlIFtzYW1lLW9yaWdpbiBwb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3Nhcnkvc2FtZS1vcmlnaW5fcG9saWN5ICJzYW1lLW9yaWdpbiBwb2xpY3k6IFRoZSBzYW1lLW9yaWdpbiBwb2xpY3kgaXMgYSBjcml0aWNhbCBzZWN1cml0eSBtZWNoYW5pc20gdGhhdCByZXN0cmljdHMgaG93IGEgZG9jdW1lbnQgb3Igc2NyaXB0IGxvYWRlZCBmcm9tIG9uZSBvcmlnaW4gY2FuIGludGVyYWN0IHdpdGggYSByZXNvdXJjZSBmcm9tIGFub3RoZXIgb3JpZ2luLiIpLlxuKiAgIGBhbGxvdy1zY3JpcHRzYDogTGV0cyB0aGUgcmVzb3VyY2UgcnVuIHNjcmlwdHMgKGJ1dCBub3QgY3JlYXRlIHBvcHVwIHdpbmRvd3MpLlxuKiAgIGBhbGxvdy1zdG9yYWdlLWFjY2Vzcy1ieS11c2VyLWFjdGl2YXRpb25gIDogTGV0cyB0aGUgcmVzb3VyY2UgcmVxdWVzdCBhY2Nlc3MgdG8gdGhlIHBhcmVudFwncyBzdG9yYWdlIGNhcGFiaWxpdGllcyB3aXRoIHRoZSBbU3RvcmFnZSBBY2Nlc3MgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3RvcmFnZV9BY2Nlc3NfQVBJKS5cbiogICBgYWxsb3ctdG9wLW5hdmlnYXRpb25gOiBMZXRzIHRoZSByZXNvdXJjZSBuYXZpZ2F0ZSB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKHRoZSBvbmUgbmFtZWQgYF90b3BgKS5cbiogICBgYWxsb3ctdG9wLW5hdmlnYXRpb24tYnktdXNlci1hY3RpdmF0aW9uYDogTGV0cyB0aGUgcmVzb3VyY2UgbmF2aWdhdGUgdGhlIHRvcC1sZXZlbCBicm93c2luZyBjb250ZXh0LCBidXQgb25seSBpZiBpbml0aWF0ZWQgYnkgYSB1c2VyIGdlc3R1cmUuXG5cbioqTm90ZXMgYWJvdXQgc2FuZGJveGluZzoqKlxuXG4qICAgV2hlbiB0aGUgZW1iZWRkZWQgZG9jdW1lbnQgaGFzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgZW1iZWRkaW5nIHBhZ2UsIGl0IGlzICoqc3Ryb25nbHkgZGlzY291cmFnZWQqKiB0byB1c2UgYm90aCBgYWxsb3ctc2NyaXB0c2AgYW5kIGBhbGxvdy1zYW1lLW9yaWdpbmAsIGFzIHRoYXQgbGV0cyB0aGUgZW1iZWRkZWQgZG9jdW1lbnQgcmVtb3ZlIHRoZSBgc2FuZGJveGAgYXR0cmlidXRlIOKAlCBtYWtpbmcgaXQgbm8gbW9yZSBzZWN1cmUgdGhhbiBub3QgdXNpbmcgdGhlIGBzYW5kYm94YCBhdHRyaWJ1dGUgYXQgYWxsLlxuKiAgIFNhbmRib3hpbmcgaXMgdXNlbGVzcyBpZiB0aGUgYXR0YWNrZXIgY2FuIGRpc3BsYXkgY29udGVudCBvdXRzaWRlIGEgc2FuZGJveGVkIGBpZnJhbWVgIOKAlCBzdWNoIGFzIGlmIHRoZSB2aWV3ZXIgb3BlbnMgdGhlIGZyYW1lIGluIGEgbmV3IHRhYi4gU3VjaCBjb250ZW50IHNob3VsZCBiZSBhbHNvIHNlcnZlZCBmcm9tIGEgX3NlcGFyYXRlIG9yaWdpbl8gdG8gbGltaXQgcG90ZW50aWFsIGRhbWFnZS5cbiogICBUaGUgYHNhbmRib3hgIGF0dHJpYnV0ZSBpcyB1bnN1cHBvcnRlZCBpbiBJbnRlcm5ldCBFeHBsb3JlciA5IGFuZCBlYXJsaWVyLid9fSx7bmFtZToic2VhbWxlc3MiLHZhbHVlU2V0OiJ2In0se25hbWU6ImFsbG93ZnVsbHNjcmVlbiIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1NldCB0byBgdHJ1ZWAgaWYgdGhlIGA8aWZyYW1lPmAgY2FuIGFjdGl2YXRlIGZ1bGxzY3JlZW4gbW9kZSBieSBjYWxsaW5nIHRoZSBbYHJlcXVlc3RGdWxsc2NyZWVuKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9yZXF1ZXN0RnVsbHNjcmVlbiAiVGhlIEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKSBtZXRob2QgaXNzdWVzIGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IHRvIG1ha2UgdGhlIGVsZW1lbnQgYmUgZGlzcGxheWVkIGluIGZ1bGwtc2NyZWVuIG1vZGUuIikgbWV0aG9kLid9fSx7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB3aWR0aCBvZiB0aGUgZnJhbWUgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdCBpcyBgMzAwYC4ifX0se25hbWU6ImhlaWdodCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhlaWdodCBvZiB0aGUgZnJhbWUgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdCBpcyBgMTUwYC4ifX0se25hbWU6ImFsbG93IixkZXNjcmlwdGlvbjoiU3BlY2lmaWVzIGEgW2ZlYXR1cmUgcG9saWN5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0ZlYXR1cmVfUG9saWN5KSBmb3IgdGhlIGA8aWZyYW1lPmAuIn0se25hbWU6ImFsbG93cGF5bWVudHJlcXVlc3QiLGRlc2NyaXB0aW9uOiJTZXQgdG8gYHRydWVgIGlmIGEgY3Jvc3Mtb3JpZ2luIGA8aWZyYW1lPmAgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaW52b2tlIHRoZSBbUGF5bWVudCBSZXF1ZXN0IEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BheW1lbnRfUmVxdWVzdF9BUEkpLiJ9LHtuYW1lOiJhbGxvd3BheW1lbnRyZXF1ZXN0IixkZXNjcmlwdGlvbjonVGhpcyBhdHRyaWJ1dGUgaXMgY29uc2lkZXJlZCBhIGxlZ2FjeSBhdHRyaWJ1dGUgYW5kIHJlZGVmaW5lZCBhcyBgYWxsb3c9InBheW1lbnQiYC4nfSx7bmFtZToiY3NwIixkZXNjcmlwdGlvbjonQSBbQ29udGVudCBTZWN1cml0eSBQb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQ1NQKSBlbmZvcmNlZCBmb3IgdGhlIGVtYmVkZGVkIHJlc291cmNlLiBTZWUgW2BIVE1MSUZyYW1lRWxlbWVudC5jc3BgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTElGcmFtZUVsZW1lbnQvY3NwICJUaGUgY3NwIHByb3BlcnR5IG9mIHRoZSBIVE1MSUZyYW1lRWxlbWVudCBpbnRlcmZhY2Ugc3BlY2lmaWVzIHRoZSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB0aGF0IGFuIGVtYmVkZGVkIGRvY3VtZW50IG11c3QgYWdyZWUgdG8gZW5mb3JjZSB1cG9uIGl0c2VsZi4iKSBmb3IgZGV0YWlscy4nfSx7bmFtZToiaW1wb3J0YW5jZSIsZGVzY3JpcHRpb246YFRoZSBkb3dubG9hZCBwcmlvcml0eSBvZiB0aGUgcmVzb3VyY2UgaW4gdGhlIFxgPGlmcmFtZT5cYCdzIFxgc3JjXGAgYXR0cmlidXRlLiBBbGxvd2VkIHZhbHVlczoKClxgYXV0b1xgIChkZWZhdWx0KQoKTm8gcHJlZmVyZW5jZS4gVGhlIGJyb3dzZXIgdXNlcyBpdHMgb3duIGhldXJpc3RpY3MgdG8gZGVjaWRlIHRoZSBwcmlvcml0eSBvZiB0aGUgcmVzb3VyY2UuCgpcYGhpZ2hcYAoKVGhlIHJlc291cmNlIHNob3VsZCBiZSBkb3dubG9hZGVkIGJlZm9yZSBvdGhlciBsb3dlci1wcmlvcml0eSBwYWdlIHJlc291cmNlcy4KClxgbG93XGAKClRoZSByZXNvdXJjZSBzaG91bGQgYmUgZG93bmxvYWRlZCBhZnRlciBvdGhlciBoaWdoZXItcHJpb3JpdHkgcGFnZSByZXNvdXJjZXMuYH0se25hbWU6InJlZmVycmVycG9saWN5IixkZXNjcmlwdGlvbjonSW5kaWNhdGVzIHdoaWNoIFtyZWZlcnJlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlZmVycmVyKSB0byBzZW5kIHdoZW4gZmV0Y2hpbmcgdGhlIGZyYW1lXCdzIHJlc291cmNlOlxuXG4qICAgYG5vLXJlZmVycmVyYDogVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZWAgKGRlZmF1bHQpOiBUaGUgW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQgdG8gW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9vcmlnaW4gIm9yaWdpbjogV2ViIGNvbnRlbnRcJ3Mgb3JpZ2luIGlzIGRlZmluZWQgYnkgdGhlIHNjaGVtZSAocHJvdG9jb2wpLCBob3N0IChkb21haW4pLCBhbmQgcG9ydCBvZiB0aGUgVVJMIHVzZWQgdG8gYWNjZXNzIGl0LiBUd28gb2JqZWN0cyBoYXZlIHRoZSBzYW1lIG9yaWdpbiBvbmx5IHdoZW4gdGhlIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgYWxsIG1hdGNoLiIpcyB3aXRob3V0IFtUTFNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvVExTICJUTFM6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSwgcHJldmlvdXNseSBrbm93biBhcyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSwgaXMgYSBwcm90b2NvbCB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0byBjb21tdW5pY2F0ZSBzZWN1cmVseSBhY3Jvc3MgYSBuZXR3b3JrLCBwcmV2ZW50aW5nIHRhbXBlcmluZyB3aXRoIGFuZCBlYXZlc2Ryb3BwaW5nIG9uIGVtYWlsLCB3ZWIgYnJvd3NpbmcsIG1lc3NhZ2luZywgYW5kIG90aGVyIHByb3RvY29scy4iKSAoW0hUVFBTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0hUVFBTICJIVFRQUzogSFRUUFMgKEhUVFAgU2VjdXJlKSBpcyBhbiBlbmNyeXB0ZWQgdmVyc2lvbiBvZiB0aGUgSFRUUCBwcm90b2NvbC4gSXQgdXN1YWxseSB1c2VzIFNTTCBvciBUTFMgdG8gZW5jcnlwdCBhbGwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGEgY2xpZW50IGFuZCBhIHNlcnZlci4gVGhpcyBzZWN1cmUgY29ubmVjdGlvbiBhbGxvd3MgY2xpZW50cyB0byBzYWZlbHkgZXhjaGFuZ2Ugc2Vuc2l0aXZlIGRhdGEgd2l0aCBhIHNlcnZlciwgZm9yIGV4YW1wbGUgZm9yIGJhbmtpbmcgYWN0aXZpdGllcyBvciBvbmxpbmUgc2hvcHBpbmcuIikpLlxuKiAgIGBvcmlnaW5gOiBUaGUgc2VudCByZWZlcnJlciB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcmVmZXJyaW5nIHBhZ2U6IGl0cyBbc2NoZW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0FyY2hpdmUvTW96aWxsYS9VUklTY2hlbWUpLCBbaG9zdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9ob3N0ICJob3N0OiBBIGhvc3QgaXMgYSBkZXZpY2UgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCAob3IgYSBsb2NhbCBuZXR3b3JrKS4gU29tZSBob3N0cyBjYWxsZWQgc2VydmVycyBvZmZlciBhZGRpdGlvbmFsIHNlcnZpY2VzIGxpa2Ugc2VydmluZyB3ZWJwYWdlcyBvciBzdG9yaW5nIGZpbGVzIGFuZCBlbWFpbHMuIiksIGFuZCBbcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9wb3J0ICJwb3J0OiBGb3IgYSBjb21wdXRlciBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrIHdpdGggYW4gSVAgYWRkcmVzcywgYSBwb3J0IGlzIGEgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gUG9ydHMgYXJlIGRlc2lnbmF0ZWQgYnkgbnVtYmVycywgYW5kIGJlbG93IDEwMjQgZWFjaCBwb3J0IGlzIGFzc29jaWF0ZWQgYnkgZGVmYXVsdCB3aXRoIGEgc3BlY2lmaWMgcHJvdG9jb2wuIikuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmA6IFRoZSByZWZlcnJlciBzZW50IHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuIE5hdmlnYXRpb25zIG9uIHRoZSBzYW1lIG9yaWdpbiB3aWxsIHN0aWxsIGluY2x1ZGUgdGhlIHBhdGguXG4qICAgYHNhbWUtb3JpZ2luYDogQSByZWZlcnJlciB3aWxsIGJlIHNlbnQgZm9yIFtzYW1lIG9yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9TYW1lLW9yaWdpbl9wb2xpY3kgInNhbWUgb3JpZ2luOiBUaGUgc2FtZS1vcmlnaW4gcG9saWN5IGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgbWVjaGFuaXNtIHRoYXQgcmVzdHJpY3RzIGhvdyBhIGRvY3VtZW50IG9yIHNjcmlwdCBsb2FkZWQgZnJvbSBvbmUgb3JpZ2luIGNhbiBpbnRlcmFjdCB3aXRoIGEgcmVzb3VyY2UgZnJvbSBhbm90aGVyIG9yaWdpbi4iKSwgYnV0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyB3aWxsIGNvbnRhaW4gbm8gcmVmZXJyZXIgaW5mb3JtYXRpb24uXG4qICAgYHN0cmljdC1vcmlnaW5gOiBPbmx5IHNlbmQgdGhlIG9yaWdpbiBvZiB0aGUgZG9jdW1lbnQgYXMgdGhlIHJlZmVycmVyIHdoZW4gdGhlIHByb3RvY29sIHNlY3VyaXR5IGxldmVsIHN0YXlzIHRoZSBzYW1lIChIVFRQU+KGkkhUVFBTKSwgYnV0IGRvblwndCBzZW5kIGl0IHRvIGEgbGVzcyBzZWN1cmUgZGVzdGluYXRpb24gKEhUVFBT4oaSSFRUUCkuXG4qICAgYHN0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW5gOiBTZW5kIGEgZnVsbCBVUkwgd2hlbiBwZXJmb3JtaW5nIGEgc2FtZS1vcmlnaW4gcmVxdWVzdCwgb25seSBzZW5kIHRoZSBvcmlnaW4gd2hlbiB0aGUgcHJvdG9jb2wgc2VjdXJpdHkgbGV2ZWwgc3RheXMgdGhlIHNhbWUgKEhUVFBT4oaSSFRUUFMpLCBhbmQgc2VuZCBubyBoZWFkZXIgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoSFRUUFPihpJIVFRQKS5cbiogICBgdW5zYWZlLXVybGA6IFRoZSByZWZlcnJlciB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbiBfYW5kXyB0aGUgcGF0aCAoYnV0IG5vdCB0aGUgW2ZyYWdtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9oYXNoKSwgW3Bhc3N3b3JkXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy9wYXNzd29yZCksIG9yIFt1c2VybmFtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMvdXNlcm5hbWUpKS4gKipUaGlzIHZhbHVlIGlzIHVuc2FmZSoqLCBiZWNhdXNlIGl0IGxlYWtzIG9yaWdpbnMgYW5kIHBhdGhzIGZyb20gVExTLXByb3RlY3RlZCByZXNvdXJjZXMgdG8gaW5zZWN1cmUgb3JpZ2lucy4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lmcmFtZSJ9XX0se25hbWU6ImVtYmVkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZW1iZWQgZWxlbWVudCBwcm92aWRlcyBhbiBpbnRlZ3JhdGlvbiBwb2ludCBmb3IgYW4gZXh0ZXJuYWwgKHR5cGljYWxseSBub24tSFRNTCkgYXBwbGljYXRpb24gb3IgaW50ZXJhY3RpdmUgY29udGVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgVVJMwqBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZW1iZWRkZWQuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgTUlNRcKgdHlwZSB0byB1c2UgdG8gc2VsZWN0IHRoZSBwbHVnLWluIHRvIGluc3RhbnRpYXRlLiJ9fSx7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkaXNwbGF5ZWQgd2lkdGggb2YgdGhlIHJlc291cmNlLCBpbiBbQ1NTIHBpeGVsc10oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMvI3B4KS4gVGhpcyBtdXN0IGJlIGFuIGFic29sdXRlIHZhbHVlOyBwZXJjZW50YWdlcyBhcmUgX25vdF8gYWxsb3dlZC4ifX0se25hbWU6ImhlaWdodCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGRpc3BsYXllZCBoZWlnaHQgb2YgdGhlIHJlc291cmNlLCBpbiBbQ1NTIHBpeGVsc10oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMvI3B4KS4gVGhpcyBtdXN0IGJlIGFuIGFic29sdXRlIHZhbHVlOyBwZXJjZW50YWdlcyBhcmUgX25vdF8gYWxsb3dlZC4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9lbWJlZCJ9XX0se25hbWU6Im9iamVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG9iamVjdCBlbGVtZW50IGNhbiByZXByZXNlbnQgYW4gZXh0ZXJuYWwgcmVzb3VyY2UsIHdoaWNoLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlLCB3aWxsIGVpdGhlciBiZSB0cmVhdGVkIGFzIGFuIGltYWdlLCBhcyBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBvciBhcyBhbiBleHRlcm5hbCByZXNvdXJjZSB0byBiZSBwcm9jZXNzZWQgYnkgYSBwbHVnaW4uIn0sYXR0cmlidXRlczpbe25hbWU6ImRhdGEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBhZGRyZXNzIG9mIHRoZSByZXNvdXJjZSBhcyBhIHZhbGlkIFVSTC4gQXQgbGVhc3Qgb25lIG9mICoqZGF0YSoqIGFuZCAqKnR5cGUqKiBtdXN0IGJlIGRlZmluZWQuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgW2NvbnRlbnQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9Db250ZW50X3R5cGUpIG9mIHRoZSByZXNvdXJjZSBzcGVjaWZpZWQgYnkgKipkYXRhKiouIEF0IGxlYXN0IG9uZSBvZiAqKmRhdGEqKiBhbmQgKip0eXBlKiogbXVzdCBiZSBkZWZpbmVkLiJ9fSx7bmFtZToidHlwZW11c3RtYXRjaCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIGlmIHRoZSAqKnR5cGUqKiBhdHRyaWJ1dGUgYW5kIHRoZSBhY3R1YWwgW2NvbnRlbnQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9Db250ZW50X3R5cGUpIG9mIHRoZSByZXNvdXJjZSBtdXN0IG1hdGNoIHRvIGJlIHVzZWQuIn19LHtuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmFtZSBvZiB2YWxpZCBicm93c2luZyBjb250ZXh0IChIVE1MNSksIG9yIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIChIVE1MIDQpLiJ9fSx7bmFtZToidXNlbWFwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGhhc2gtbmFtZSByZWZlcmVuY2UgdG8gYSBbYDxtYXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21hcCBcIlRoZSBIVE1MIDxtYXA+IGVsZW1lbnQgaXMgdXNlZCB3aXRoIDxhcmVhPiBlbGVtZW50cyB0byBkZWZpbmUgYW4gaW1hZ2UgbWFwIChhIGNsaWNrYWJsZSBsaW5rIGFyZWEpLlwiKSBlbGVtZW50OyB0aGF0IGlzIGEgJyMnIGZvbGxvd2VkIGJ5IHRoZSB2YWx1ZSBvZiBhIFtgbmFtZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tYXAjYXR0ci1uYW1lKSBvZiBhIG1hcCBlbGVtZW50LiJ9fSx7bmFtZToiZm9ybSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIGZvcm0gZWxlbWVudCwgaWYgYW55LCB0aGF0IHRoZSBvYmplY3QgZWxlbWVudCBpcyBhc3NvY2lhdGVkIHdpdGggKGl0cyBfZm9ybSBvd25lcl8pLiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIElEIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4nfX0se25hbWU6IndpZHRoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgd2lkdGggb2YgdGhlIGRpc3BsYXkgcmVzb3VyY2UsIGluIFtDU1MgcGl4ZWxzXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy8jcHgpLiAtLSAoQWJzb2x1dGUgdmFsdWVzIG9ubHkuIFtOTyBwZXJjZW50YWdlc10oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZW1iZWRkZWQtY29udGVudC5odG1sI2RpbWVuc2lvbi1hdHRyaWJ1dGVzKSkifX0se25hbWU6ImhlaWdodCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGhlaWdodCBvZiB0aGUgZGlzcGxheWVkIHJlc291cmNlLCBpbiBbQ1NTIHBpeGVsc10oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMvI3B4KS4gLS0gKEFic29sdXRlIHZhbHVlcyBvbmx5LiBbTk8gcGVyY2VudGFnZXNdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2VtYmVkZGVkLWNvbnRlbnQuaHRtbCNkaW1lbnNpb24tYXR0cmlidXRlcykpIn19LHtuYW1lOiJhcmNoaXZlIixkZXNjcmlwdGlvbjoiQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVUklzIGZvciBhcmNoaXZlcyBvZiByZXNvdXJjZXMgZm9yIHRoZSBvYmplY3QuIn0se25hbWU6ImJvcmRlciIsZGVzY3JpcHRpb246IlRoZSB3aWR0aCBvZiBhIGJvcmRlciBhcm91bmQgdGhlIGNvbnRyb2wsIGluIHBpeGVscy4ifSx7bmFtZToiY2xhc3NpZCIsZGVzY3JpcHRpb246IlRoZSBVUkkgb2YgdGhlIG9iamVjdCdzIGltcGxlbWVudGF0aW9uLiBJdCBjYW4gYmUgdXNlZCB0b2dldGhlciB3aXRoLCBvciBpbiBwbGFjZSBvZiwgdGhlICoqZGF0YSoqIGF0dHJpYnV0ZS4ifSx7bmFtZToiY29kZWJhc2UiLGRlc2NyaXB0aW9uOiJUaGUgYmFzZSBwYXRoIHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBVUklzIHNwZWNpZmllZCBieSAqKmNsYXNzaWQqKiwgKipkYXRhKiosIG9yICoqYXJjaGl2ZSoqLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyB0aGUgYmFzZSBVUkkgb2YgdGhlIGN1cnJlbnQgZG9jdW1lbnQuIn0se25hbWU6ImNvZGV0eXBlIixkZXNjcmlwdGlvbjoiVGhlIGNvbnRlbnQgdHlwZSBvZiB0aGUgZGF0YSBzcGVjaWZpZWQgYnkgKipjbGFzc2lkKiouIn0se25hbWU6ImRlY2xhcmUiLGRlc2NyaXB0aW9uOiJUaGUgcHJlc2VuY2Ugb2YgdGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBtYWtlcyB0aGlzIGVsZW1lbnQgYSBkZWNsYXJhdGlvbiBvbmx5LiBUaGUgb2JqZWN0IG11c3QgYmUgaW5zdGFudGlhdGVkIGJ5IGEgc3Vic2VxdWVudCBgPG9iamVjdD5gIGVsZW1lbnQuIEluIEhUTUw1LCByZXBlYXQgdGhlIDxvYmplY3Q+IGVsZW1lbnQgY29tcGxldGVseSBlYWNoIHRoYXQgdGhhdCB0aGUgcmVzb3VyY2UgaXMgcmV1c2VkLiJ9LHtuYW1lOiJzdGFuZGJ5IixkZXNjcmlwdGlvbjoiQSBtZXNzYWdlIHRoYXQgdGhlIGJyb3dzZXIgY2FuIHNob3cgd2hpbGUgbG9hZGluZyB0aGUgb2JqZWN0J3MgaW1wbGVtZW50YXRpb24gYW5kIGRhdGEuIn0se25hbWU6InRhYmluZGV4IixkZXNjcmlwdGlvbjoiVGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSB0YWJiaW5nIG5hdmlnYXRpb24gb3JkZXIgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50LiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2JqZWN0In1dfSx7bmFtZToicGFyYW0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwYXJhbSBlbGVtZW50IGRlZmluZXMgcGFyYW1ldGVycyBmb3IgcGx1Z2lucyBpbnZva2VkIGJ5IG9iamVjdCBlbGVtZW50cy4gSXQgZG9lcyBub3QgcmVwcmVzZW50IGFueXRoaW5nIG9uIGl0cyBvd24uIn0sYXR0cmlidXRlczpbe25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6Ik5hbWUgb2YgdGhlIHBhcmFtZXRlci4ifX0se25hbWU6InZhbHVlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJTcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuIn19LHtuYW1lOiJ0eXBlIixkZXNjcmlwdGlvbjonT25seSB1c2VkIGlmIHRoZSBgdmFsdWV0eXBlYCBpcyBzZXQgdG8gInJlZiIuIFNwZWNpZmllcyB0aGUgTUlNRSB0eXBlIG9mIHZhbHVlcyBmb3VuZCBhdCB0aGUgVVJJIHNwZWNpZmllZCBieSB2YWx1ZS4nfSx7bmFtZToidmFsdWV0eXBlIixkZXNjcmlwdGlvbjpgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBcYHZhbHVlXGAgYXR0cmlidXRlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgoKKiAgIGRhdGE6IERlZmF1bHQgdmFsdWUuIFRoZSB2YWx1ZSBpcyBwYXNzZWQgdG8gdGhlIG9iamVjdCdzIGltcGxlbWVudGF0aW9uIGFzIGEgc3RyaW5nLgoqICAgcmVmOiBUaGUgdmFsdWUgaXMgYSBVUkkgdG8gYSByZXNvdXJjZSB3aGVyZSBydW4tdGltZSB2YWx1ZXMgYXJlIHN0b3JlZC4KKiAgIG9iamVjdDogQW4gSUQgb2YgYW5vdGhlciBbXGA8b2JqZWN0PlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvb2JqZWN0ICJUaGUgSFRNTCA8b2JqZWN0PiBlbGVtZW50IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgcmVzb3VyY2UsIHdoaWNoIGNhbiBiZSB0cmVhdGVkIGFzIGFuIGltYWdlLCBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBvciBhIHJlc291cmNlIHRvIGJlIGhhbmRsZWQgYnkgYSBwbHVnaW4uIikgaW4gdGhlIHNhbWUgZG9jdW1lbnQuYH1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9wYXJhbSJ9XX0se25hbWU6InZpZGVvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHZpZGVvIGVsZW1lbnQgaXMgdXNlZCBmb3IgcGxheWluZyB2aWRlb3Mgb3IgbW92aWVzLCBhbmQgYXVkaW8gZmlsZXMgd2l0aCBjYXB0aW9ucy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIn0se25hbWU6ImNyb3Nzb3JpZ2luIix2YWx1ZVNldDoieG8ifSx7bmFtZToicG9zdGVyIn0se25hbWU6InByZWxvYWQiLHZhbHVlU2V0OiJwbCJ9LHtuYW1lOiJhdXRvcGxheSIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGU7IGlmIHNwZWNpZmllZCwgdGhlIHZpZGVvIGF1dG9tYXRpY2FsbHkgYmVnaW5zIHRvIHBsYXkgYmFjayBhcyBzb29uIGFzIGl0IGNhbiBkbyBzbyB3aXRob3V0IHN0b3BwaW5nIHRvIGZpbmlzaCBsb2FkaW5nIHRoZSBkYXRhLiJ9fSx7bmFtZToibWVkaWFncm91cCJ9LHtuYW1lOiJsb29wIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJtdXRlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiY29udHJvbHMiLHZhbHVlU2V0OiJ2In0se25hbWU6IndpZHRoIn0se25hbWU6ImhlaWdodCJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmlkZW8ifV19LHtuYW1lOiJhdWRpbyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gYXVkaW8gZWxlbWVudCByZXByZXNlbnRzIGEgc291bmQgb3IgYXVkaW8gc3RyZWFtLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBVUkwgb2YgdGhlIGF1ZGlvIHRvIGVtYmVkLiBUaGlzIGlzIHN1YmplY3QgdG8gW0hUVFAgYWNjZXNzIGNvbnRyb2xzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0hUVFBfYWNjZXNzX2NvbnRyb2wpLiBUaGlzIGlzIG9wdGlvbmFsOyB5b3UgbWF5IGluc3RlYWQgdXNlIHRoZSBbYDxzb3VyY2U+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NvdXJjZSAiVGhlIEhUTUwgPHNvdXJjZT4gZWxlbWVudCBzcGVjaWZpZXMgbXVsdGlwbGUgbWVkaWEgcmVzb3VyY2VzIGZvciB0aGUgPHBpY3R1cmU+LCB0aGUgPGF1ZGlvPiBlbGVtZW50LCBvciB0aGUgPHZpZGVvPiBlbGVtZW50LiIpIGVsZW1lbnQgd2l0aGluIHRoZSBhdWRpbyBibG9jayB0byBzcGVjaWZ5IHRoZSBhdWRpbyB0byBlbWJlZC4nfX0se25hbWU6ImNyb3Nzb3JpZ2luIix2YWx1ZVNldDoieG8iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIENPUlMgdG8gZmV0Y2ggdGhlIHJlbGF0ZWQgaW1hZ2UuIFtDT1JTLWVuYWJsZWQgcmVzb3VyY2VzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NPUlNfRW5hYmxlZF9JbWFnZSkgY2FuIGJlIHJldXNlZCBpbiB0aGUgW2A8Y2FudmFzPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMgIlVzZSB0aGUgSFRNTCA8Y2FudmFzPiBlbGVtZW50IHdpdGggZWl0aGVyIHRoZSBjYW52YXMgc2NyaXB0aW5nIEFQSSBvciB0aGUgV2ViR0wgQVBJIHRvIGRyYXcgZ3JhcGhpY3MgYW5kIGFuaW1hdGlvbnMuIikgZWxlbWVudCB3aXRob3V0IGJlaW5nIF90YWludGVkXy4gVGhlIGFsbG93ZWQgdmFsdWVzIGFyZTpcblxuYW5vbnltb3VzXG5cblNlbmRzIGEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3Qgd2l0aG91dCBhIGNyZWRlbnRpYWwuIEluIG90aGVyIHdvcmRzLCBpdCBzZW5kcyB0aGUgYE9yaWdpbjpgIEhUVFAgaGVhZGVyIHdpdGhvdXQgYSBjb29raWUsIFguNTA5IGNlcnRpZmljYXRlLCBvciBwZXJmb3JtaW5nIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24uIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgZ2l2ZSBjcmVkZW50aWFscyB0byB0aGUgb3JpZ2luIHNpdGUgKGJ5IG5vdCBzZXR0aW5nIHRoZSBgQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOmAgSFRUUCBoZWFkZXIpLCB0aGUgaW1hZ2Ugd2lsbCBiZSBfdGFpbnRlZF8sIGFuZCBpdHMgdXNhZ2UgcmVzdHJpY3RlZC5cblxudXNlLWNyZWRlbnRpYWxzXG5cblNlbmRzIGEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3Qgd2l0aCBhIGNyZWRlbnRpYWwuIEluIG90aGVyIHdvcmRzLCBpdCBzZW5kcyB0aGUgYE9yaWdpbjpgIEhUVFAgaGVhZGVyIHdpdGggYSBjb29raWUsIGEgY2VydGlmaWNhdGUsIG9yIHBlcmZvcm1pbmcgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbi4gSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBnaXZlIGNyZWRlbnRpYWxzIHRvIHRoZSBvcmlnaW4gc2l0ZSAodGhyb3VnaCBgQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHM6YCBIVFRQIGhlYWRlciksIHRoZSBpbWFnZSB3aWxsIGJlIF90YWludGVkXyBhbmQgaXRzIHVzYWdlIHJlc3RyaWN0ZWQuXG5cbldoZW4gbm90IHByZXNlbnQsIHRoZSByZXNvdXJjZSBpcyBmZXRjaGVkIHdpdGhvdXQgYSBDT1JTIHJlcXVlc3QgKGkuZS4gd2l0aG91dCBzZW5kaW5nIHRoZSBgT3JpZ2luOmAgSFRUUCBoZWFkZXIpLCBwcmV2ZW50aW5nIGl0cyBub24tdGFpbnRlZCB1c2VkIGluIFtgPGNhbnZhcz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FudmFzICJVc2UgdGhlIEhUTUwgPGNhbnZhcz4gZWxlbWVudCB3aXRoIGVpdGhlciB0aGUgY2FudmFzIHNjcmlwdGluZyBBUEkgb3IgdGhlIFdlYkdMIEFQSSB0byBkcmF3IGdyYXBoaWNzIGFuZCBhbmltYXRpb25zLiIpIGVsZW1lbnRzLiBJZiBpbnZhbGlkLCBpdCBpcyBoYW5kbGVkIGFzIGlmIHRoZSBlbnVtZXJhdGVkIGtleXdvcmQgKiphbm9ueW1vdXMqKiB3YXMgdXNlZC4gU2VlIFtDT1JTIHNldHRpbmdzIGF0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLid9fSx7bmFtZToicHJlbG9hZCIsdmFsdWVTZXQ6InBsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgYSBoaW50IHRvIHRoZSBicm93c2VyIGFib3V0IHdoYXQgdGhlIGF1dGhvciB0aGlua3Mgd2lsbCBsZWFkIHRvIHRoZSBiZXN0IHVzZXIgZXhwZXJpZW5jZS4gSXQgbWF5IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYG5vbmVgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgYXVkaW8gc2hvdWxkIG5vdCBiZSBwcmVsb2FkZWQuXG4qICAgYG1ldGFkYXRhYDogSW5kaWNhdGVzIHRoYXQgb25seSBhdWRpbyBtZXRhZGF0YSAoZS5nLiBsZW5ndGgpIGlzIGZldGNoZWQuXG4qICAgYGF1dG9gOiBJbmRpY2F0ZXMgdGhhdCB0aGUgd2hvbGUgYXVkaW8gZmlsZSBjYW4gYmUgZG93bmxvYWRlZCwgZXZlbiBpZiB0aGUgdXNlciBpcyBub3QgZXhwZWN0ZWQgdG8gdXNlIGl0LlxuKiAgIF9lbXB0eSBzdHJpbmdfOiBBIHN5bm9ueW0gb2YgdGhlIGBhdXRvYCB2YWx1ZS5cblxuSWYgbm90IHNldCwgYHByZWxvYWRgJ3MgZGVmYXVsdCB2YWx1ZSBpcyBicm93c2VyLWRlZmluZWQgKGkuZS4gZWFjaCBicm93c2VyIG1heSBoYXZlIGl0cyBvd24gZGVmYXVsdCB2YWx1ZSkuIFRoZSBzcGVjIGFkdmlzZXMgaXQgdG8gYmUgc2V0IHRvIGBtZXRhZGF0YWAuXG5cbioqVXNhZ2Ugbm90ZXM6KipcblxuKiAgIFRoZSBgYXV0b3BsYXlgIGF0dHJpYnV0ZSBoYXMgcHJlY2VkZW5jZSBvdmVywqBgcHJlbG9hZGAuIElmIGBhdXRvcGxheWAgaXMgc3BlY2lmaWVkLCB0aGUgYnJvd3NlciB3b3VsZCBvYnZpb3VzbHkgbmVlZCB0byBzdGFydCBkb3dubG9hZGluZyB0aGUgYXVkaW8gZm9yIHBsYXliYWNrLlxuKiAgIFRoZSBicm93c2VyIGlzIG5vdCBmb3JjZWQgYnkgdGhlIHNwZWNpZmljYXRpb24gdG8gZm9sbG93IHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZTsgaXQgaXMgYSBtZXJlIGhpbnQuIn19LHtuYW1lOiJhdXRvcGxheSIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6YEEgQm9vbGVhbiBhdHRyaWJ1dGU6wqBpZiBzcGVjaWZpZWQsIHRoZSBhdWRpbyB3aWxsIGF1dG9tYXRpY2FsbHkgYmVnaW4gcGxheWJhY2sgYXMgc29vbiBhcyBpdCBjYW4gZG8gc28sIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGVudGlyZSBhdWRpbyBmaWxlIHRvIGZpbmlzaCBkb3dubG9hZGluZy4KCioqTm90ZSoqOiBTaXRlcyB0aGF0IGF1dG9tYXRpY2FsbHkgcGxheSBhdWRpbyAob3IgdmlkZW9zIHdpdGggYW4gYXVkaW8gdHJhY2spIGNhbiBiZSBhbiB1bnBsZWFzYW50IGV4cGVyaWVuY2UgZm9yIHVzZXJzLCBzbyBzaG91bGQgYmUgYXZvaWRlZCB3aGVuIHBvc3NpYmxlLiBJZiB5b3UgbXVzdCBvZmZlciBhdXRvcGxheSBmdW5jdGlvbmFsaXR5LCB5b3Ugc2hvdWxkIG1ha2UgaXQgb3B0LWluIChyZXF1aXJpbmcgYSB1c2VyIHRvIHNwZWNpZmljYWxseSBlbmFibGUgaXQpLiBIb3dldmVyLCB0aGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBjcmVhdGluZyBtZWRpYSBlbGVtZW50cyB3aG9zZSBzb3VyY2Ugd2lsbCBiZSBzZXQgYXQgYSBsYXRlciB0aW1lLCB1bmRlciB1c2VyIGNvbnRyb2wuYH19LHtuYW1lOiJtZWRpYWdyb3VwIn0se25hbWU6Imxvb3AiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIEJvb2xlYW4gYXR0cmlidXRlOsKgaWYgc3BlY2lmaWVkLCB0aGUgYXVkaW8gcGxheWVyIHdpbGzCoGF1dG9tYXRpY2FsbHkgc2VlayBiYWNrIHRvIHRoZSBzdGFydMKgdXBvbiByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBhdWRpby4ifX0se25hbWU6Im11dGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBhdWRpbyB3aWxsIGJlIGluaXRpYWxseSBzaWxlbmNlZC4gSXRzIGRlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC4ifX0se25hbWU6ImNvbnRyb2xzIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhpcyBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIGJyb3dzZXIgd2lsbCBvZmZlciBjb250cm9scyB0byBhbGxvdyB0aGUgdXNlciB0byBjb250cm9sIGF1ZGlvIHBsYXliYWNrLCBpbmNsdWRpbmcgdm9sdW1lLCBzZWVraW5nLCBhbmQgcGF1c2UvcmVzdW1lIHBsYXliYWNrLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2F1ZGlvIn1dfSx7bmFtZToic291cmNlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgc291cmNlIGVsZW1lbnQgYWxsb3dzIGF1dGhvcnMgdG8gc3BlY2lmeSBtdWx0aXBsZSBhbHRlcm5hdGl2ZSBtZWRpYSByZXNvdXJjZXMgZm9yIG1lZGlhIGVsZW1lbnRzLiBJdCBkb2VzIG5vdCByZXByZXNlbnQgYW55dGhpbmcgb24gaXRzIG93bi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3JjIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidSZXF1aXJlZCBmb3IgW2A8YXVkaW8+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2F1ZGlvICJUaGUgSFRNTCA8YXVkaW8+IGVsZW1lbnQgaXMgdXNlZCB0byBlbWJlZCBzb3VuZCBjb250ZW50IGluIGRvY3VtZW50cy4gSXQgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgYXVkaW8gc291cmNlcywgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIHNyYyBhdHRyaWJ1dGUgb3IgdGhlIDxzb3VyY2U+IGVsZW1lbnQ6wqB0aGUgYnJvd3NlciB3aWxsIGNob29zZSB0aGUgbW9zdCBzdWl0YWJsZSBvbmUuIEl0IGNhbiBhbHNvIGJlIHRoZSBkZXN0aW5hdGlvbiBmb3Igc3RyZWFtZWQgbWVkaWEsIHVzaW5nIGEgTWVkaWFTdHJlYW0uIikgYW5kIFtgPHZpZGVvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC92aWRlbyAiVGhlIEhUTUwgVmlkZW8gZWxlbWVudCAoPHZpZGVvPikgZW1iZWRzIGEgbWVkaWEgcGxheWVyIHdoaWNoIHN1cHBvcnRzIHZpZGVvIHBsYXliYWNrIGludG8gdGhlIGRvY3VtZW50LiIpLCBhZGRyZXNzIG9mIHRoZSBtZWRpYSByZXNvdXJjZS4gVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzIGlnbm9yZWQgd2hlbiB0aGUgYDxzb3VyY2U+YCBlbGVtZW50IGlzIHBsYWNlZCBpbnNpZGUgYSBbYDxwaWN0dXJlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9waWN0dXJlICJUaGUgSFRNTCA8cGljdHVyZT4gZWxlbWVudCBjb250YWlucyB6ZXJvIG9yIG1vcmUgPHNvdXJjZT4gZWxlbWVudHMgYW5kIG9uZSA8aW1nPiBlbGVtZW50IHRvIHByb3ZpZGUgdmVyc2lvbnMgb2YgYW4gaW1hZ2UgZm9yIGRpZmZlcmVudCBkaXNwbGF5L2RldmljZSBzY2VuYXJpb3MuIikgZWxlbWVudC4nfX0se25hbWU6InR5cGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBNSU1FLXR5cGUgb2YgdGhlIHJlc291cmNlLCBvcHRpb25hbGx5IHdpdGggYSBgY29kZWNzYCBwYXJhbWV0ZXIuIFNlZSBbUkZDIDQyODFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MjgxKSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHNwZWNpZnkgY29kZWNzLiJ9fSx7bmFtZToic2l6ZXMiLGRlc2NyaXB0aW9uOidJcyBhIGxpc3Qgb2Ygc291cmNlIHNpemVzIHRoYXQgZGVzY3JpYmVzIHRoZSBmaW5hbCByZW5kZXJlZCB3aWR0aCBvZiB0aGUgaW1hZ2UgcmVwcmVzZW50ZWQgYnkgdGhlIHNvdXJjZS4gRWFjaCBzb3VyY2Ugc2l6ZSBjb25zaXN0cyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIGNvbmRpdGlvbi1sZW5ndGggcGFpcnMuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCBieSB0aGUgYnJvd3NlciB0byBkZXRlcm1pbmUsIGJlZm9yZSBsYXlpbmcgdGhlIHBhZ2Ugb3V0LCB3aGljaCBpbWFnZSBkZWZpbmVkIGluIFtgc3Jjc2V0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NvdXJjZSNhdHRyLXNyY3NldCkgdG8gdXNlLiAgXG5UaGUgYHNpemVzYCBhdHRyaWJ1dGUgaGFzIGFuIGVmZmVjdCBvbmx5IHdoZW4gdGhlIFtgPHNvdXJjZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlICJUaGUgSFRNTCA8c291cmNlPiBlbGVtZW50IHNwZWNpZmllcyBtdWx0aXBsZSBtZWRpYSByZXNvdXJjZXMgZm9yIHRoZSA8cGljdHVyZT4sIHRoZSA8YXVkaW8+IGVsZW1lbnQsIG9yIHRoZSA8dmlkZW8+IGVsZW1lbnQuIikgZWxlbWVudCBpcyB0aGUgZGlyZWN0IGNoaWxkIG9mIGEgW2A8cGljdHVyZT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvcGljdHVyZSAiVGhlIEhUTUwgPHBpY3R1cmU+IGVsZW1lbnQgY29udGFpbnMgemVybyBvciBtb3JlIDxzb3VyY2U+IGVsZW1lbnRzIGFuZCBvbmUgPGltZz4gZWxlbWVudCB0byBwcm92aWRlIHZlcnNpb25zIG9mIGFuIGltYWdlIGZvciBkaWZmZXJlbnQgZGlzcGxheS9kZXZpY2Ugc2NlbmFyaW9zLiIpIGVsZW1lbnQuJ30se25hbWU6InNyY3NldCIsZGVzY3JpcHRpb246IkEgbGlzdCBvZiBvbmUgb3IgbW9yZSBzdHJpbmdzIHNlcGFyYXRlZCBieSBjb21tYXMgaW5kaWNhdGluZyBhIHNldCBvZiBwb3NzaWJsZSBpbWFnZXMgcmVwcmVzZW50ZWQgYnkgdGhlIHNvdXJjZSBmb3IgdGhlIGJyb3dzZXIgdG8gdXNlLiBFYWNoIHN0cmluZyBpcyBjb21wb3NlZCBvZjpcblxuMS4gIG9uZSBVUkwgdG8gYW4gaW1hZ2UsXG4yLiAgYSB3aWR0aCBkZXNjcmlwdG9yLCB0aGF0IGlzIGEgcG9zaXRpdmUgaW50ZWdlciBkaXJlY3RseSBmb2xsb3dlZCBieSBgJ3cnYC4gVGhlIGRlZmF1bHQgdmFsdWUsIGlmIG1pc3NpbmcsIGlzIHRoZSBpbmZpbml0eS5cbjMuICBhIHBpeGVsIGRlbnNpdHkgZGVzY3JpcHRvciwgdGhhdCBpcyBhIHBvc2l0aXZlIGZsb2F0aW5nIG51bWJlciBkaXJlY3RseSBmb2xsb3dlZCBieSBgJ3gnYC4gVGhlIGRlZmF1bHQgdmFsdWUsIGlmIG1pc3NpbmcsIGlzIGAxeGAuXG5cbkVhY2ggc3RyaW5nIGluIHRoZSBsaXN0IG11c3QgaGF2ZSBhdCBsZWFzdCBhIHdpZHRoIGRlc2NyaXB0b3Igb3IgYSBwaXhlbCBkZW5zaXR5IGRlc2NyaXB0b3IgdG8gYmUgdmFsaWQuIEFtb25nIHRoZSBsaXN0LCB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIHN0cmluZyBjb250YWluaW5nIHRoZSBzYW1lIHR1cGxlIG9mIHdpZHRoIGRlc2NyaXB0b3IgYW5kIHBpeGVsIGRlbnNpdHkgZGVzY3JpcHRvci4gIFxuVGhlIGJyb3dzZXIgY2hvb3NlcyB0aGUgbW9zdCBhZGVxdWF0ZSBpbWFnZSB0byBkaXNwbGF5IGF0IGEgZ2l2ZW4gcG9pbnQgb2YgdGltZS4gIFxuVGhlIGBzcmNzZXRgIGF0dHJpYnV0ZSBoYXMgYW4gZWZmZWN0IG9ubHkgd2hlbiB0aGUgW2A8c291cmNlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zb3VyY2UgXCJUaGUgSFRNTCA8c291cmNlPiBlbGVtZW50IHNwZWNpZmllcyBtdWx0aXBsZSBtZWRpYSByZXNvdXJjZXMgZm9yIHRoZSA8cGljdHVyZT4sIHRoZSA8YXVkaW8+IGVsZW1lbnQsIG9yIHRoZSA8dmlkZW8+IGVsZW1lbnQuXCIpIGVsZW1lbnQgaXMgdGhlIGRpcmVjdCBjaGlsZCBvZiBhIFtgPHBpY3R1cmU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUgXCJUaGUgSFRNTCA8cGljdHVyZT4gZWxlbWVudCBjb250YWlucyB6ZXJvIG9yIG1vcmUgPHNvdXJjZT4gZWxlbWVudHMgYW5kIG9uZSA8aW1nPiBlbGVtZW50IHRvIHByb3ZpZGUgdmVyc2lvbnMgb2YgYW4gaW1hZ2UgZm9yIGRpZmZlcmVudCBkaXNwbGF5L2RldmljZSBzY2VuYXJpb3MuXCIpIGVsZW1lbnQuIn0se25hbWU6Im1lZGlhIixkZXNjcmlwdGlvbjonW01lZGlhIHF1ZXJ5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9NZWRpYV9xdWVyaWVzKSBvZiB0aGUgcmVzb3VyY2VcJ3MgaW50ZW5kZWQgbWVkaWE7IHRoaXMgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBhIFtgPHBpY3R1cmU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3BpY3R1cmUgIlRoZSBIVE1MIDxwaWN0dXJlPiBlbGVtZW50IGNvbnRhaW5zIHplcm8gb3IgbW9yZSA8c291cmNlPiBlbGVtZW50cyBhbmQgb25lIDxpbWc+IGVsZW1lbnQgdG8gcHJvdmlkZSB2ZXJzaW9ucyBvZiBhbiBpbWFnZSBmb3IgZGlmZmVyZW50IGRpc3BsYXkvZGV2aWNlIHNjZW5hcmlvcy4iKSBlbGVtZW50Lid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc291cmNlIn1dfSx7bmFtZToidHJhY2siLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0cmFjayBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIHNwZWNpZnkgZXhwbGljaXQgZXh0ZXJuYWwgdGltZWQgdGV4dCB0cmFja3MgZm9yIG1lZGlhIGVsZW1lbnRzLiBJdCBkb2VzIG5vdCByZXByZXNlbnQgYW55dGhpbmcgb24gaXRzIG93bi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGVmYXVsdCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB0cmFjayBzaG91bGQgYmUgZW5hYmxlZCB1bmxlc3MgdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBpbmRpY2F0ZSB0aGF0IGFub3RoZXIgdHJhY2sgaXMgbW9yZSBhcHByb3ByaWF0ZS4gVGhpcyBtYXkgb25seSBiZSB1c2VkIG9uIG9uZSBgdHJhY2tgIGVsZW1lbnQgcGVyIG1lZGlhIGVsZW1lbnQuIn19LHtuYW1lOiJraW5kIix2YWx1ZVNldDoidGsiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkhvdyB0aGUgdGV4dCB0cmFjayBpcyBtZWFudCB0byBiZSB1c2VkLiBJZiBvbWl0dGVkIHRoZSBkZWZhdWx0IGtpbmQgaXMgYHN1YnRpdGxlc2AuIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQsIGl0IHdpbGwgdXNlIHRoZSBgc3VidGl0bGVzYC4gSWYgdGhlIGF0dHJpYnV0ZSBjb250YWlucyBhbiBpbnZhbGlkIHZhbHVlLCBpdCB3aWxsIHVzZSBgbWV0YWRhdGFgLiAoVmVyc2lvbnMgb2YgQ2hyb21lIGVhcmxpZXIgdGhhbiA1MiB0cmVhdGVkIGFuIGludmFsaWQgdmFsdWUgYXMgYHN1YnRpdGxlc2AuKcKgVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBhcmUgYWxsb3dlZDpcblxuKiAgIGBzdWJ0aXRsZXNgXG4gICAgKiAgIFN1YnRpdGxlcyBwcm92aWRlIHRyYW5zbGF0aW9uIG9mIGNvbnRlbnQgdGhhdCBjYW5ub3QgYmUgdW5kZXJzdG9vZCBieSB0aGUgdmlld2VyLiBGb3IgZXhhbXBsZSBkaWFsb2d1ZSBvciB0ZXh0IHRoYXQgaXMgbm90IEVuZ2xpc2ggaW4gYW4gRW5nbGlzaCBsYW5ndWFnZSBmaWxtLlxuICAgICogICBTdWJ0aXRsZXMgbWF5IGNvbnRhaW4gYWRkaXRpb25hbCBjb250ZW50LCB1c3VhbGx5IGV4dHJhIGJhY2tncm91bmQgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlIHRoZSB0ZXh0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFN0YXIgV2FycyBmaWxtcywgb3IgdGhlIGRhdGUsIHRpbWUsIGFuZCBsb2NhdGlvbiBvZiBhIHNjZW5lLlxuKiAgIGBjYXB0aW9uc2BcbiAgICAqICAgQ2xvc2VkIGNhcHRpb25zIHByb3ZpZGUgYSB0cmFuc2NyaXB0aW9uIGFuZCBwb3NzaWJseSBhIHRyYW5zbGF0aW9uIG9mIGF1ZGlvLlxuICAgICogICBJdCBtYXkgaW5jbHVkZSBpbXBvcnRhbnQgbm9uLXZlcmJhbCBpbmZvcm1hdGlvbiBzdWNoIGFzIG11c2ljIGN1ZXMgb3Igc291bmQgZWZmZWN0cy4gSXQgbWF5IGluZGljYXRlIHRoZSBjdWUncyBzb3VyY2UgKGUuZy4gbXVzaWMsIHRleHQsIGNoYXJhY3RlcikuXG4gICAgKiAgIFN1aXRhYmxlIGZvciB1c2VycyB3aG8gYXJlIGRlYWYgb3Igd2hlbiB0aGUgc291bmQgaXMgbXV0ZWQuXG4qICAgYGRlc2NyaXB0aW9uc2BcbiAgICAqICAgVGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgdmlkZW8gY29udGVudC5cbiAgICAqICAgU3VpdGFibGUgZm9yIHVzZXJzIHdobyBhcmUgYmxpbmQgb3Igd2hlcmUgdGhlIHZpZGVvIGNhbm5vdCBiZSBzZWVuLlxuKiAgIGBjaGFwdGVyc2BcbiAgICAqICAgQ2hhcHRlciB0aXRsZXMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgd2hlbiB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHRoZSBtZWRpYSByZXNvdXJjZS5cbiogICBgbWV0YWRhdGFgXG4gICAgKiAgIFRyYWNrcyB1c2VkIGJ5IHNjcmlwdHMuIE5vdCB2aXNpYmxlIHRvIHRoZSB1c2VyLiJ9fSx7bmFtZToibGFiZWwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgdXNlci1yZWFkYWJsZSB0aXRsZSBvZiB0aGUgdGV4dCB0cmFjayB3aGljaCBpcyB1c2VkIGJ5IHRoZSBicm93c2VyIHdoZW4gbGlzdGluZyBhdmFpbGFibGUgdGV4dCB0cmFja3MuIn19LHtuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0FkZHJlc3Mgb2YgdGhlIHRyYWNrIChgLnZ0dGAgZmlsZSkuIE11c3QgYmUgYSB2YWxpZCBVUkwuIFRoaXMgYXR0cmlidXRlIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBpdHMgVVJMIHZhbHVlIG11c3QgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGRvY3VtZW50IOKAlCB1bmxlc3MgdGhlIFtgPGF1ZGlvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9hdWRpbyAiVGhlIEhUTUwgPGF1ZGlvPiBlbGVtZW50IGlzIHVzZWQgdG8gZW1iZWQgc291bmQgY29udGVudCBpbiBkb2N1bWVudHMuIEl0IG1heSBjb250YWluIG9uZSBvciBtb3JlIGF1ZGlvIHNvdXJjZXMsIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBzcmMgYXR0cmlidXRlIG9yIHRoZSA8c291cmNlPiBlbGVtZW50OsKgdGhlIGJyb3dzZXIgd2lsbCBjaG9vc2UgdGhlIG1vc3Qgc3VpdGFibGUgb25lLiBJdCBjYW4gYWxzbyBiZSB0aGUgZGVzdGluYXRpb24gZm9yIHN0cmVhbWVkIG1lZGlhLCB1c2luZyBhIE1lZGlhU3RyZWFtLiIpIG9yIFtgPHZpZGVvPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC92aWRlbyAiVGhlIEhUTUwgVmlkZW8gZWxlbWVudCAoPHZpZGVvPikgZW1iZWRzIGEgbWVkaWEgcGxheWVyIHdoaWNoIHN1cHBvcnRzIHZpZGVvIHBsYXliYWNrIGludG8gdGhlIGRvY3VtZW50LiIpIHBhcmVudCBlbGVtZW50IG9mIHRoZSBgdHJhY2tgIGVsZW1lbnQgaGFzIGEgW2Bjcm9zc29yaWdpbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQ09SU19zZXR0aW5nc19hdHRyaWJ1dGVzKSBhdHRyaWJ1dGUuJ319LHtuYW1lOiJzcmNsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJMYW5ndWFnZSBvZiB0aGUgdHJhY2sgdGV4dCBkYXRhLiBJdCBtdXN0IGJlIGEgdmFsaWQgW0JDUCA0N10oaHR0cHM6Ly9yMTJhLmdpdGh1Yi5pby9hcHAtc3VidGFncy8pIGxhbmd1YWdlIHRhZy4gSWYgdGhlIGBraW5kYCBhdHRyaWJ1dGUgaXMgc2V0IHRvwqBgc3VidGl0bGVzLGAgdGhlbiBgc3JjbGFuZ2AgbXVzdCBiZSBkZWZpbmVkLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RyYWNrIn1dfSx7bmFtZToibWFwIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbWFwIGVsZW1lbnQsIGluIGNvbmp1bmN0aW9uIHdpdGggYW4gaW1nIGVsZW1lbnQgYW5kIGFueSBhcmVhIGVsZW1lbnQgZGVzY2VuZGFudHMsIGRlZmluZXMgYW4gaW1hZ2UgbWFwLiBUaGUgZWxlbWVudCByZXByZXNlbnRzIGl0cyBjaGlsZHJlbi4ifSxhdHRyaWJ1dGVzOlt7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgYXR0cmlidXRlIGdpdmVzIHRoZSBtYXAgYSBuYW1lIHNvIHRoYXQgaXQgY2FuIGJlIHJlZmVyZW5jZWQuIFRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBwcmVzZW50IGFuZCBtdXN0IGhhdmUgYSBub24tZW1wdHkgdmFsdWUgd2l0aCBubyBzcGFjZSBjaGFyYWN0ZXJzLiBUaGUgdmFsdWUgb2YgdGhlIG5hbWUgYXR0cmlidXRlIG11c3Qgbm90IGJlIGEgY29tcGF0aWJpbGl0eS1jYXNlbGVzcyBtYXRjaCBmb3IgdGhlIHZhbHVlIG9mIHRoZSBuYW1lIGF0dHJpYnV0ZSBvZiBhbm90aGVyIG1hcCBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGUgaWQgYXR0cmlidXRlIGlzIGFsc28gc3BlY2lmaWVkLCBib3RoIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21hcCJ9XX0se25hbWU6ImFyZWEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBhcmVhIGVsZW1lbnQgcmVwcmVzZW50cyBlaXRoZXIgYSBoeXBlcmxpbmsgd2l0aCBzb21lIHRleHQgYW5kIGEgY29ycmVzcG9uZGluZyBhcmVhIG9uIGFuIGltYWdlIG1hcCwgb3IgYSBkZWFkIGFyZWEgb24gYW4gaW1hZ2UgbWFwLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbHQifSx7bmFtZToiY29vcmRzIn0se25hbWU6InNoYXBlIix2YWx1ZVNldDoic2gifSx7bmFtZToiaHJlZiJ9LHtuYW1lOiJ0YXJnZXQifSx7bmFtZToiZG93bmxvYWQifSx7bmFtZToicGluZyJ9LHtuYW1lOiJyZWwifSx7bmFtZToiaHJlZmxhbmcifSx7bmFtZToidHlwZSJ9LHtuYW1lOiJhY2Nlc3NrZXkiLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgYSBrZXlib2FyZCBuYXZpZ2F0aW9uIGFjY2VsZXJhdG9yIGZvciB0aGUgZWxlbWVudC4gUHJlc3NpbmcgQUxUIG9yIGEgc2ltaWxhciBrZXkgaW4gYXNzb2NpYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBzZWxlY3RzIHRoZSBmb3JtIGNvbnRyb2wgY29ycmVsYXRlZCB3aXRoIHRoYXQga2V5IHNlcXVlbmNlLiBQYWdlIGRlc2lnbmVycyBhcmUgZm9yZXdhcm5lZCB0byBhdm9pZCBrZXkgc2VxdWVuY2VzIGFscmVhZHkgYm91bmQgdG8gYnJvd3NlcnMuIFRoaXMgYXR0cmlidXRlIGlzIGdsb2JhbCBzaW5jZSBIVE1MNS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2FyZWEifV19LHtuYW1lOiJ0YWJsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRhYmxlIGVsZW1lbnQgcmVwcmVzZW50cyBkYXRhIHdpdGggbW9yZSB0aGFuIG9uZSBkaW1lbnNpb24sIGluIHRoZSBmb3JtIG9mIGEgdGFibGUuIn0sYXR0cmlidXRlczpbe25hbWU6ImJvcmRlciJ9LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIGhvdyB0aGUgdGFibGUgbXVzdCBiZSBhbGlnbmVkIGluc2lkZSB0aGUgY29udGFpbmluZyBkb2N1bWVudC4gSXQgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBsZWZ0OiB0aGUgdGFibGUgaXMgZGlzcGxheWVkIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGRvY3VtZW50O1xuKiAgIGNlbnRlcjogdGhlIHRhYmxlIGlzIGRpc3BsYXllZCBpbiB0aGUgY2VudGVyIG9mIHRoZSBkb2N1bWVudDtcbiogICByaWdodDogdGhlIHRhYmxlIGlzIGRpc3BsYXllZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgZG9jdW1lbnQuXG5cbioqVXNhZ2UgTm90ZSoqXG5cbiogICAqKkRvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUqKiwgYXMgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVGhlIFtgPHRhYmxlPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90YWJsZSAiVGhlIEhUTUwgPHRhYmxlPiBlbGVtZW50IHJlcHJlc2VudHMgdGFidWxhciBkYXRhIOKAlCB0aGF0IGlzLCBpbmZvcm1hdGlvbiBwcmVzZW50ZWQgaW4gYSB0d28tZGltZW5zaW9uYWwgdGFibGUgY29tcHJpc2VkIG9mIHJvd3MgYW5kIGNvbHVtbnMgb2YgY2VsbHMgY29udGFpbmluZyBkYXRhLiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykuIFNldCBbYG1hcmdpbi1sZWZ0YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21hcmdpbi1sZWZ0ICJUaGUgbWFyZ2luLWxlZnQgQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmdpbiBhcmVhIG9uIHRoZSBsZWZ0IHNpZGUgb2YgYW4gZWxlbWVudC4gQSBwb3NpdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgZmFydGhlciBmcm9tIGl0cyBuZWlnaGJvcnMsIHdoaWxlIGEgbmVnYXRpdmUgdmFsdWUgcGxhY2VzIGl0IGNsb3Nlci4iKSBhbmQgW2BtYXJnaW4tcmlnaHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWFyZ2luLXJpZ2h0ICJUaGUgbWFyZ2luLXJpZ2h0IENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXJnaW4gYXJlYSBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhbiBlbGVtZW50LiBBIHBvc2l0aXZlIHZhbHVlIHBsYWNlcyBpdCBmYXJ0aGVyIGZyb20gaXRzIG5laWdoYm9ycywgd2hpbGUgYSBuZWdhdGl2ZSB2YWx1ZSBwbGFjZXMgaXQgY2xvc2VyLiIpIHRvIGBhdXRvYCBvciBbYG1hcmdpbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXJnaW4gIlRoZSBtYXJnaW4gQ1NTIHByb3BlcnR5IHNldHMgdGhlIG1hcmdpbiBhcmVhIG9uIGFsbCBmb3VyIHNpZGVzIG9mIGFuIGVsZW1lbnQuIEl0IGlzIGEgc2hvcnRoYW5kIGZvciBtYXJnaW4tdG9wLCBtYXJnaW4tcmlnaHQsIG1hcmdpbi1ib3R0b20sIGFuZCBtYXJnaW4tbGVmdC4iKSB0byBgMCBhdXRvYCB0byBhY2hpZXZlIGFuIGVmZmVjdCB0aGF0IGlzIHNpbWlsYXIgdG8gdGhlIGFsaWduIGF0dHJpYnV0ZS5cbiogICBQcmlvciB0byBGaXJlZm94IDQsIEZpcmVmb3ggYWxzbyBzdXBwb3J0ZWQgdGhlIGBtaWRkbGVgLCBgYWJzbWlkZGxlYCwgYW5kIGBhYnNjZW50ZXJgIHZhbHVlcyBhcyBzeW5vbnltcyBvZiBgY2VudGVyYCwgaW4gcXVpcmtzIG1vZGUgb25seS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RhYmxlIn1dfSx7bmFtZToiY2FwdGlvbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNhcHRpb24gZWxlbWVudCByZXByZXNlbnRzIHRoZSB0aXRsZSBvZiB0aGUgdGFibGUgdGhhdCBpcyBpdHMgcGFyZW50LCBpZiBpdCBoYXMgYSBwYXJlbnQgYW5kIHRoYXQgaXMgYSB0YWJsZSBlbGVtZW50LiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246YFRoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGVzIGhvdyB0aGUgY2FwdGlvbiBtdXN0IGJlIGFsaWduZWQgd2l0aCByZXNwZWN0IHRvIHRoZSB0YWJsZS4gSXQgbWF5IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgoKXGBsZWZ0XGAKClRoZSBjYXB0aW9uIGlzIGRpc3BsYXllZCB0byB0aGUgbGVmdCBvZiB0aGUgdGFibGUuCgpcYHRvcFxgCgpUaGUgY2FwdGlvbiBpcyBkaXNwbGF5ZWQgYWJvdmUgdGhlIHRhYmxlLgoKXGByaWdodFxgCgpUaGUgY2FwdGlvbiBpcyBkaXNwbGF5ZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSB0YWJsZS4KClxgYm90dG9tXGAKClRoZSBjYXB0aW9uIGlzIGRpc3BsYXllZCBiZWxvdyB0aGUgdGFibGUuCgoqKlVzYWdlIG5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSwgYXMgaXQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVGhlIFtcYDxjYXB0aW9uPlxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY2FwdGlvbiAiVGhlIEhUTUwgVGFibGUgQ2FwdGlvbiBlbGVtZW50ICg8Y2FwdGlvbj4pIHNwZWNpZmllcyB0aGUgY2FwdGlvbiAob3IgdGl0bGUpIG9mIGEgdGFibGUsIGFuZCBpZiB1c2VkIGlzIGFsd2F5cyB0aGUgZmlyc3QgY2hpbGQgb2YgYSA8dGFibGU+LiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyB0aGUgW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MpIHByb3BlcnRpZXMgW1xgY2FwdGlvbi1zaWRlXGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jYXB0aW9uLXNpZGUgIlRoZSBjYXB0aW9uLXNpZGUgQ1NTIHByb3BlcnR5IHB1dHMgdGhlIGNvbnRlbnQgb2YgYSB0YWJsZSdzIDxjYXB0aW9uPiBvbiB0aGUgc3BlY2lmaWVkIHNpZGUuIFRoZSB2YWx1ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSB3cml0aW5nLW1vZGUgb2YgdGhlIHRhYmxlLiIpIGFuZCBbXGB0ZXh0LWFsaWduXGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKS5gfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NhcHRpb24ifV19LHtuYW1lOiJjb2xncm91cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNvbGdyb3VwIGVsZW1lbnQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIG9uZSBvciBtb3JlIGNvbHVtbnMgaW4gdGhlIHRhYmxlIHRoYXQgaXMgaXRzIHBhcmVudCwgaWYgaXQgaGFzIGEgcGFyZW50IGFuZCB0aGF0IGlzIGEgdGFibGUgZWxlbWVudC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToic3BhbiJ9LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBob3Jpem9udGFsIGFsaWdubWVudCBvZiBlYWNoIGNvbHVtbiBjZWxsIGNvbnRlbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbFxuKiAgIGBjZW50ZXJgLCBjZW50ZXJpbmcgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiogICBgcmlnaHRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGxcbiogICBganVzdGlmeWAsIGluc2VydGluZyBzcGFjZXMgaW50byB0aGUgdGV4dHVhbCBjb250ZW50IHNvIHRoYXQgdGhlIGNvbnRlbnQgaXMganVzdGlmaWVkIGluIHRoZSBjZWxsXG4qICAgYGNoYXJgLCBhbGlnbmluZyB0aGUgdGV4dHVhbCBjb250ZW50IG9uIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIG1pbmltYWwgb2Zmc2V0LCBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sI2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgYGxlZnRgIHZhbHVlIGlzIGFzc3VtZWQuIFRoZSBkZXNjZW5kYW50IFtgPGNvbD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sICJUaGUgSFRNTCA8Y29sPiBlbGVtZW50IGRlZmluZXMgYSBjb2x1bW4gd2l0aGluIGEgdGFibGUgYW5kIGlzIHVzZWQgZm9yIGRlZmluaW5nIGNvbW1vbiBzZW1hbnRpY3Mgb24gYWxsIGNvbW1vbiBjZWxscy4gSXQgaXMgZ2VuZXJhbGx5IGZvdW5kIHdpdGhpbiBhIDxjb2xncm91cD4gZWxlbWVudC4iKSBlbGVtZW50cyBtYXkgb3ZlcnJpZGUgdGhpcyB2YWx1ZSB1c2luZyB0aGVpciBvd24gW2BhbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1hbGlnbikgYXR0cmlidXRlLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSAobm90IHN1cHBvcnRlZCkgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXM6XG4gICAgKiAgIERvIG5vdCB0cnkgdG8gc2V0IHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgb24gYSBzZWxlY3RvciBnaXZpbmcgYSBbYDxjb2xncm91cD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvY29sZ3JvdXAgIlRoZSBIVE1MIDxjb2xncm91cD4gZWxlbWVudCBkZWZpbmVzIGEgZ3JvdXAgb2YgY29sdW1ucyB3aXRoaW4gYSB0YWJsZS4iKSBlbGVtZW50LiBCZWNhdXNlIFtgPHRkPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCAiVGhlIEhUTUwgPHRkPiBlbGVtZW50IGRlZmluZXMgYSBjZWxsIG9mIGEgdGFibGUgdGhhdCBjb250YWlucyBkYXRhLiBJdCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIHRhYmxlIG1vZGVsLiIpIGVsZW1lbnRzIGFyZSBub3QgZGVzY2VuZGFudCBvZiB0aGUgW2A8Y29sZ3JvdXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwICJUaGUgSFRNTCA8Y29sZ3JvdXA+IGVsZW1lbnQgZGVmaW5lcyBhIGdyb3VwIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUuIikgZWxlbWVudCwgdGhleSB3b25cJ3QgaW5oZXJpdCBpdC5cbiAgICAqICAgSWYgdGhlIHRhYmxlIGRvZXNuXCd0IHVzZSBhIFtgY29sc3BhbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNvbHNwYW4pIGF0dHJpYnV0ZSwgdXNlIG9uZSBgdGQ6bnRoLWNoaWxkKGFuK2IpYCBDU1Mgc2VsZWN0b3IgcGVyIGNvbHVtbiwgd2hlcmUgYSBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRoZSBjb2x1bW5zIGluIHRoZSB0YWJsZSBhbmQgYiBpcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiB0aGlzIGNvbHVtbiBpbiB0aGUgdGFibGUuIE9ubHkgYWZ0ZXIgdGhpcyBzZWxlY3RvciB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IGNhbiBiZSB1c2VkLlxuICAgICogICBJZiB0aGUgdGFibGUgZG9lcyB1c2UgYSBbYGNvbHNwYW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jb2xzcGFuKSBhdHRyaWJ1dGUsIHRoZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGNvbWJpbmluZyBhZGVxdWF0ZSBDU1MgYXR0cmlidXRlIHNlbGVjdG9ycyBsaWtlIGBbY29sc3Bhbj1uXWAsIHRob3VnaCB0aGlzIGlzIG5vdCB0cml2aWFsLlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwI2F0dHItY2hhcikgYXMgdGhlIHZhbHVlIG9mIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgVW5pbXBsZW1lbnRlZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwIn1dfSx7bmFtZToiY29sIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiBhIGNvbCBlbGVtZW50IGhhcyBhIHBhcmVudCBhbmQgdGhhdCBpcyBhIGNvbGdyb3VwIGVsZW1lbnQgdGhhdCBpdHNlbGYgaGFzIGEgcGFyZW50IHRoYXQgaXMgYSB0YWJsZSBlbGVtZW50LCB0aGVuIHRoZSBjb2wgZWxlbWVudCByZXByZXNlbnRzIG9uZSBvciBtb3JlIGNvbHVtbnMgaW4gdGhlIGNvbHVtbiBncm91cCByZXByZXNlbnRlZCBieSB0aGF0IGNvbGdyb3VwLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcGFuIn0se25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY29sdW1uIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIGl0cyB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgW2BhbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2xncm91cCNhdHRyLWFsaWduKSBvZiB0aGUgW2A8Y29sZ3JvdXA+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbGdyb3VwICJUaGUgSFRNTCA8Y29sZ3JvdXA+IGVsZW1lbnQgZGVmaW5lcyBhIGdyb3VwIG9mIGNvbHVtbnMgd2l0aGluIGEgdGFibGUuIikgZWxlbWVudCB0aGlzIGA8Y29sPmAgZWxlbWVudCBiZWxvbmdzIHRvby4gSWYgdGhlcmUgYXJlIG5vbmUsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzOlxuICAgICogICBEbyBub3QgdHJ5IHRvIHNldCB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGEgc2VsZWN0b3IgZ2l2aW5nIGEgW2A8Y29sPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wgIlRoZSBIVE1MIDxjb2w+IGVsZW1lbnQgZGVmaW5lcyBhIGNvbHVtbiB3aXRoaW4gYSB0YWJsZSBhbmQgaXMgdXNlZCBmb3IgZGVmaW5pbmcgY29tbW9uIHNlbWFudGljcyBvbiBhbGwgY29tbW9uIGNlbGxzLiBJdCBpcyBnZW5lcmFsbHkgZm91bmQgd2l0aGluIGEgPGNvbGdyb3VwPiBlbGVtZW50LiIpIGVsZW1lbnQuIEJlY2F1c2UgW2A8dGQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkICJUaGUgSFRNTCA8dGQ+IGVsZW1lbnQgZGVmaW5lcyBhIGNlbGwgb2YgYSB0YWJsZSB0aGF0IGNvbnRhaW5zIGRhdGEuIEl0IHBhcnRpY2lwYXRlcyBpbiB0aGUgdGFibGUgbW9kZWwuIikgZWxlbWVudHMgYXJlIG5vdCBkZXNjZW5kYW50IG9mIHRoZSBbYDxjb2w+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCAiVGhlIEhUTUwgPGNvbD4gZWxlbWVudCBkZWZpbmVzIGEgY29sdW1uIHdpdGhpbiBhIHRhYmxlIGFuZCBpcyB1c2VkIGZvciBkZWZpbmluZyBjb21tb24gc2VtYW50aWNzIG9uIGFsbCBjb21tb24gY2VsbHMuIEl0IGlzIGdlbmVyYWxseSBmb3VuZCB3aXRoaW4gYSA8Y29sZ3JvdXA+IGVsZW1lbnQuIikgZWxlbWVudCwgdGhleSB3b25cJ3QgaW5oZXJpdCBpdC5cbiAgICAqICAgSWYgdGhlIHRhYmxlIGRvZXNuXCd0IHVzZSBhIFtgY29sc3BhbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCNhdHRyLWNvbHNwYW4pIGF0dHJpYnV0ZSwgdXNlIHRoZSBgdGQ6bnRoLWNoaWxkKGFuK2IpYCBDU1Mgc2VsZWN0b3IuIFNldCBgYWAgdG8gemVybyBhbmQgYGJgIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uIGluIHRoZSB0YWJsZSwgZS5nLiBgdGQ6bnRoLWNoaWxkKDIpIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH1gIHRvIHJpZ2h0LWFsaWduIHRoZSBzZWNvbmQgY29sdW1uLlxuICAgICogICBJZiB0aGUgdGFibGUgZG9lcyB1c2UgYSBbYGNvbHNwYW5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jb2xzcGFuKSBhdHRyaWJ1dGUsIHRoZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGNvbWJpbmluZyBhZGVxdWF0ZSBDU1MgYXR0cmlidXRlIHNlbGVjdG9ycyBsaWtlIGBbY29sc3Bhbj1uXWAsIHRob3VnaCB0aGlzIGlzIG5vdCB0cml2aWFsLlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2NvbCNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jb2wifV19LHtuYW1lOiJ0Ym9keSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRib2R5IGVsZW1lbnQgcmVwcmVzZW50cyBhIGJsb2NrIG9mIHJvd3MgdGhhdCBjb25zaXN0IG9mIGEgYm9keSBvZiBkYXRhIGZvciB0aGUgcGFyZW50IHRhYmxlIGVsZW1lbnQsIGlmIHRoZSB0Ym9keSBlbGVtZW50IGhhcyBhIHBhcmVudCBhbmQgaXQgaXMgYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiYWxpZ24iLGRlc2NyaXB0aW9uOidUaGlzIGVudW1lcmF0ZWQgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgZWFjaCBjZWxsIGNvbnRlbnQgd2lsbCBiZSBoYW5kbGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGxlZnRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbFxuKiAgIGBjZW50ZXJgLCBjZW50ZXJpbmcgdGhlIGNvbnRlbnQgaW4gdGhlIGNlbGxcbiogICBgcmlnaHRgLCBhbGlnbmluZyB0aGUgY29udGVudCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGxcbiogICBganVzdGlmeWAsIGluc2VydGluZyBzcGFjZXMgaW50byB0aGUgdGV4dHVhbCBjb250ZW50IHNvIHRoYXQgdGhlIGNvbnRlbnQgaXMganVzdGlmaWVkIGluIHRoZSBjZWxsXG4qICAgYGNoYXJgLCBhbGlnbmluZyB0aGUgdGV4dHVhbCBjb250ZW50IG9uIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2l0aCBhIG1pbmltYWwgb2Zmc2V0LCBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGJvZHkjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rib2R5I2F0dHItY2hhcm9mZikgYXR0cmlidXRlcy5cblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldCwgdGhlIGBsZWZ0YCB2YWx1ZSBpcyBhc3N1bWVkLlxuXG4qKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSAobm90IHN1cHBvcnRlZCkgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIHVzZSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBvbiBpdC5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGNoYXJgIHZhbHVlLCBpbiBDU1MzLCB5b3UgY2FuIHVzZSB0aGUgdmFsdWUgb2YgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXIpIGFzIHRoZSB2YWx1ZSBvZiB0aGUgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IFVuaW1wbGVtZW50ZWQuJ31dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSJ9XX0se25hbWU6InRoZWFkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdGhlYWQgZWxlbWVudCByZXByZXNlbnRzIHRoZSBibG9jayBvZiByb3dzIHRoYXQgY29uc2lzdCBvZiB0aGUgY29sdW1uIGxhYmVscyAoaGVhZGVycykgZm9yIHRoZSBwYXJlbnQgdGFibGUgZWxlbWVudCwgaWYgdGhlIHRoZWFkIGVsZW1lbnQgaGFzIGEgcGFyZW50IGFuZCBpdCBpcyBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBob3Jpem9udGFsIGFsaWdubWVudCBvZiBlYWNoIGNlbGwgY29udGVudCB3aWxsIGJlIGhhbmRsZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgbGVmdGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSBsZWZ0IG9mIHRoZSBjZWxsXG4qICAgYGNlbnRlcmAsIGNlbnRlcmluZyB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuKiAgIGByaWdodGAsIGFsaWduaW5nIHRoZSBjb250ZW50IHRvIHRoZSByaWdodCBvZiB0aGUgY2VsbFxuKiAgIGBqdXN0aWZ5YCwgaW5zZXJ0aW5nIHNwYWNlcyBpbnRvIHRoZSB0ZXh0dWFsIGNvbnRlbnQgc28gdGhhdCB0aGUgY29udGVudCBpcyBqdXN0aWZpZWQgaW4gdGhlIGNlbGxcbiogICBgY2hhcmAsIGFsaWduaW5nIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb24gYSBzcGVjaWFsIGNoYXJhY3RlciB3aXRoIGEgbWluaW1hbCBvZmZzZXQsIGRlZmluZWQgYnkgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aGVhZCNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGhlYWQjYXR0ci1jaGFyb2ZmKSBhdHRyaWJ1dGVzIFVuaW1wbGVtZW50ZWQgKHNlZSBbYnVnwqAyMjEyXShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyICJjaGFyYWN0ZXIgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZCAoYWxpZ249Y2hhciwgY2hhcm9mZj0sIHRleHQtYWxpZ246PHN0cmluZz4pIikpLlxuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgYGxlZnRgIHZhbHVlIGlzIGFzc3VtZWQuXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIChub3Qgc3VwcG9ydGVkKSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLlxuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBsZWZ0YCwgYGNlbnRlcmAsIGByaWdodGAgb3IgYGp1c3RpZnlgIHZhbHVlcywgdXNlIHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IG9uIGl0LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGluIENTUzMsIHlvdSBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoZWFkI2F0dHItY2hhcikgYXMgdGhlIHZhbHVlIG9mIHRoZSBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgVW5pbXBsZW1lbnRlZC4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoZWFkIn1dfSx7bmFtZToidGZvb3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0Zm9vdCBlbGVtZW50IHJlcHJlc2VudHMgdGhlIGJsb2NrIG9mIHJvd3MgdGhhdCBjb25zaXN0IG9mIHRoZSBjb2x1bW4gc3VtbWFyaWVzIChmb290ZXJzKSBmb3IgdGhlIHBhcmVudCB0YWJsZSBlbGVtZW50LCBpZiB0aGUgdGZvb3QgZWxlbWVudCBoYXMgYSBwYXJlbnQgYW5kIGl0IGlzIGEgdGFibGUuIn0sYXR0cmlidXRlczpbe25hbWU6ImFsaWduIixkZXNjcmlwdGlvbjonVGhpcyBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBzcGVjaWZpZXMgaG93IGhvcml6b250YWwgYWxpZ25tZW50IG9mIGVhY2ggY2VsbCBjb250ZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIGxlZnQgb2YgdGhlIGNlbGxcbiogICBgY2VudGVyYCwgY2VudGVyaW5nIHRoZSBjb250ZW50IGluIHRoZSBjZWxsXG4qICAgYHJpZ2h0YCwgYWxpZ25pbmcgdGhlIGNvbnRlbnQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjZWxsXG4qICAgYGp1c3RpZnlgLCBpbnNlcnRpbmcgc3BhY2VzIGludG8gdGhlIHRleHR1YWwgY29udGVudCBzbyB0aGF0IHRoZSBjb250ZW50IGlzIGp1c3RpZmllZCBpbiB0aGUgY2VsbFxuKiAgIGBjaGFyYCwgYWxpZ25pbmcgdGhlIHRleHR1YWwgY29udGVudCBvbiBhIHNwZWNpYWwgY2hhcmFjdGVyIHdpdGggYSBtaW5pbWFsIG9mZnNldCwgZGVmaW5lZCBieSB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Rib2R5I2F0dHItY2hhcikgYW5kIFtgY2hhcm9mZmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90Ym9keSNhdHRyLWNoYXJvZmYpIGF0dHJpYnV0ZXMgVW5pbXBsZW1lbnRlZCAoc2VlIFtidWfCoDIyMTJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTIgImNoYXJhY3RlciBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkIChhbGlnbj1jaGFyLCBjaGFyb2ZmPSwgdGV4dC1hbGlnbjo8c3RyaW5nPikiKSkuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBgbGVmdGAgdmFsdWUgaXMgYXNzdW1lZC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgKG5vdCBzdXBwb3J0ZWQpIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuXG5cbiogICBUbyBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCBvciBganVzdGlmeWAgdmFsdWVzLCB1c2UgdGhlIENTUyBbYHRleHQtYWxpZ25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvdGV4dC1hbGlnbiAiVGhlIHRleHQtYWxpZ24gQ1NTIHByb3BlcnR5IHNldHMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIGFuIGlubGluZSBvciB0YWJsZS1jZWxsIGJveC4gVGhpcyBtZWFucyBpdCB3b3JrcyBsaWtlIHZlcnRpY2FsLWFsaWduIGJ1dCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24uIikgcHJvcGVydHkgb24gaXQuXG4qICAgVG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIGBjaGFyYCB2YWx1ZSwgaW4gQ1NTMywgeW91IGNhbiB1c2UgdGhlIHZhbHVlIG9mIHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGZvb3QjYXR0ci1jaGFyKSBhcyB0aGUgdmFsdWUgb2YgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSBVbmltcGxlbWVudGVkLid9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGZvb3QifV19LHtuYW1lOiJ0ciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRyIGVsZW1lbnQgcmVwcmVzZW50cyBhIHJvdyBvZiBjZWxscyBpbiBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J0EgW2BET01TdHJpbmdgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NU3RyaW5nICJET01TdHJpbmcgaXMgYSBVVEYtMTYgU3RyaW5nLiBBcyBKYXZhU2NyaXB0IGFscmVhZHkgdXNlcyBzdWNoIHN0cmluZ3MsIERPTVN0cmluZyBpcyBtYXBwZWQgZGlyZWN0bHkgdG8gYSBTdHJpbmcuIikgd2hpY2ggc3BlY2lmaWVzIGhvdyB0aGUgY2VsbFwncyBjb250ZXh0IHNob3VsZCBiZSBhbGlnbmVkIGhvcml6b250YWxseSB3aXRoaW4gdGhlIGNlbGxzIGluIHRoZSByb3c7IHRoaXMgaXMgc2hvcnRoYW5kIGZvciB1c2luZyBgYWxpZ25gIG9uIGV2ZXJ5IGNlbGwgaW4gdGhlIHJvdyBpbmRpdmlkdWFsbHkuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbmBsZWZ0YFxuXG5BbGlnbiB0aGUgY29udGVudCBvZiBlYWNoIGNlbGwgYXQgaXRzIGxlZnQgZWRnZS5cblxuYGNlbnRlcmBcblxuQ2VudGVyIHRoZSBjb250ZW50cyBvZiBlYWNoIGNlbGwgYmV0d2VlbiB0aGVpciBsZWZ0IGFuZCByaWdodCBlZGdlcy5cblxuYHJpZ2h0YFxuXG5BbGlnbiB0aGUgY29udGVudCBvZiBlYWNoIGNlbGwgYXQgaXRzIHJpZ2h0IGVkZ2UuXG5cbmBqdXN0aWZ5YFxuXG5XaWRlbiB3aGl0ZXNwYWNlcyB3aXRoaW4gdGhlIHRleHQgb2YgZWFjaCBjZWxsIHNvIHRoYXQgdGhlIHRleHQgZmlsbHMgdGhlIGZ1bGwgd2lkdGggb2YgZWFjaCBjZWxsIChmdWxsIGp1c3RpZmljYXRpb24pLlxuXG5gY2hhcmBcblxuQWxpZ24gZWFjaCBjZWxsIGluIHRoZSByb3cgb24gYSBzcGVjaWZpYyBjaGFyYWN0ZXIgKHN1Y2ggdGhhdCBlYWNoIHJvdyBpbiB0aGUgY29sdW1uIHRoYXQgaXMgY29uZmlndXJlZCB0aGlzIHdheSB3aWxsIGhvcml6b250YWxseSBhbGlnbiBpdHMgY2VsbHMgb24gdGhhdCBjaGFyYWN0ZXIpLiBUaGlzIHVzZXMgdGhlIFtgY2hhcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ciNhdHRyLWNoYXIpIGFuZCBbYGNoYXJvZmZgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdHIjYXR0ci1jaGFyb2ZmKSB0byBlc3RhYmxpc2ggdGhlIGFsaWdubWVudCBjaGFyYWN0ZXIgKHR5cGljYWxseSAiLiIgb3IgIiwiIHdoZW4gYWxpZ25pbmcgbnVtZXJpY2FsIGRhdGEpIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgZm9sbG93IHRoZSBhbGlnbm1lbnQgY2hhcmFjdGVyLiBUaGlzIGFsaWdubWVudCB0eXBlIHdhcyBuZXZlciB3aWRlbHkgc3VwcG9ydGVkLlxuXG5JZiBubyB2YWx1ZSBpcyBleHByZXNzbHkgc2V0IGZvciBgYWxpZ25gLCB0aGUgcGFyZW50IG5vZGVcJ3MgdmFsdWUgaXMgaW5oZXJpdGVkLlxuXG5JbnN0ZWFkIG9mIHVzaW5nIHRoZSBvYnNvbGV0ZSBgYWxpZ25gIGF0dHJpYnV0ZSwgeW91IHNob3VsZCBpbnN0ZWFkIHVzZSB0aGUgQ1NTIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0byBlc3RhYmxpc2ggYGxlZnRgLCBgY2VudGVyYCwgYHJpZ2h0YCwgb3IgYGp1c3RpZnlgIGFsaWdubWVudCBmb3IgdGhlIHJvd1wncyBjZWxscy4gVG8gYXBwbHkgY2hhcmFjdGVyLWJhc2VkIGFsaWdubWVudCwgc2V0IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBhbGlnbm1lbnQgY2hhcmFjdGVyIChzdWNoIGFzIGAiLiJgIG9yIGAiLCJgKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RyIn1dfSx7bmFtZToidGQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0ZCBlbGVtZW50IHJlcHJlc2VudHMgYSBkYXRhIGNlbGwgaW4gYSB0YWJsZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiY29sc3BhbiJ9LHtuYW1lOiJyb3dzcGFuIn0se25hbWU6ImhlYWRlcnMifSx7bmFtZToiYWJiciIsZGVzY3JpcHRpb246YFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgc2hvcnQgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNlbGwncyBjb250ZW50LiBTb21lIHVzZXItYWdlbnRzLCBzdWNoIGFzIHNwZWVjaCByZWFkZXJzLCBtYXkgcHJlc2VudCB0aGlzIGRlc2NyaXB0aW9uIGJlZm9yZSB0aGUgY29udGVudCBpdHNlbGYuCgoqKk5vdGU6KiogRG8gbm90IHVzZSB0aGlzIGF0dHJpYnV0ZSBhcyBpdCBpcyBvYnNvbGV0ZSBpbiB0aGUgbGF0ZXN0IHN0YW5kYXJkLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHB1dCB0aGUgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gaW5zaWRlIHRoZSBjZWxsIGFuZCBwbGFjZSB0aGUgbG9uZyBjb250ZW50IGluIHRoZSAqKnRpdGxlKiogYXR0cmlidXRlLmB9LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyB0aGUgY2VsbCBjb250ZW50XCdzIGhvcml6b250YWwgYWxpZ25tZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbC5cbiogICBgY2VudGVyYDogVGhlIGNvbnRlbnQgaXMgY2VudGVyZWQgaW4gdGhlIGNlbGwuXG4qICAgYHJpZ2h0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGwuXG4qICAgYGp1c3RpZnlgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIHN0cmV0Y2hlZCBvdXQgaW5zaWRlIHRoZSBjZWxsIHNvIHRoYXQgaXQgY292ZXJzIGl0cyBlbnRpcmUgd2lkdGguXG4qICAgYGNoYXJgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gYSBjaGFyYWN0ZXIgaW5zaWRlIHRoZSBgPHRoPmAgZWxlbWVudCB3aXRoIG1pbmltYWwgb2Zmc2V0LiBUaGlzIGNoYXJhY3RlciBpcyBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGQjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY2hhcm9mZikgYXR0cmlidXRlcyBVbmltcGxlbWVudGVkIChzZWUgW2J1Z8KgMjIxMl0oaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMiAiY2hhcmFjdGVyIGFsaWdubWVudCBub3QgaW1wbGVtZW50ZWQgKGFsaWduPWNoYXIsIGNoYXJvZmY9LCB0ZXh0LWFsaWduOjxzdHJpbmc+KSIpKS5cblxuVGhlIGRlZmF1bHQgdmFsdWUgd2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIGlzIGBsZWZ0YC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIGFwcGx5IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBlbGVtZW50LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGdpdmUgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0aGUgc2FtZSB2YWx1ZSB5b3Ugd291bGQgdXNlIGZvciB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkI2F0dHItY2hhcikuIFVuaW1wbGVtZW50ZWQgaW4gQ1NTMy4nfSx7bmFtZToiYXhpcyIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5ncy4gRWFjaCBzdHJpbmcgaXMgdGhlIGBpZGAgb2YgYSBncm91cCBvZiBjZWxscyB0aGF0IHRoaXMgaGVhZGVyIGFwcGxpZXMgdG8uXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQuIn0se25hbWU6ImJnY29sb3IiLGRlc2NyaXB0aW9uOmBUaGlzIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGVhY2ggY2VsbCBpbiBhIGNvbHVtbi4gSXQgY29uc2lzdHMgb2YgYSA2LWRpZ2l0IGhleGFkZWNpbWFsIGNvZGUgYXMgZGVmaW5lZCBpbiBbc1JHQl0oaHR0cHM6Ly93d3cudzMub3JnL0dyYXBoaWNzL0NvbG9yL3NSR0IpIGFuZCBpcyBwcmVmaXhlZCBieSAnIycuIFRoaXMgYXR0cmlidXRlIG1heSBiZSB1c2VkIHdpdGggb25lIG9mIHNpeHRlZW4gcHJlZGVmaW5lZCBjb2xvciBzdHJpbmdzOgoKwqAKClxgYmxhY2tcYCA9ICIjMDAwMDAwIgoKwqAKClxgZ3JlZW5cYCA9ICIjMDA4MDAwIgoKwqAKClxgc2lsdmVyXGAgPSAiI0MwQzBDMCIKCsKgCgpcYGxpbWVcYCA9ICIjMDBGRjAwIgoKwqAKClxgZ3JheVxgID0gIiM4MDgwODAiCgrCoAoKXGBvbGl2ZVxgID0gIiM4MDgwMDAiCgrCoAoKXGB3aGl0ZVxgID0gIiNGRkZGRkYiCgrCoAoKXGB5ZWxsb3dcYCA9ICIjRkZGRjAwIgoKwqAKClxgbWFyb29uXGAgPSAiIzgwMDAwMCIKCsKgCgpcYG5hdnlcYCA9ICIjMDAwMDgwIgoKwqAKClxgcmVkXGAgPSAiI0ZGMDAwMCIKCsKgCgpcYGJsdWVcYCA9ICIjMDAwMEZGIgoKwqAKClxgcHVycGxlXGAgPSAiIzgwMDA4MCIKCsKgCgpcYHRlYWxcYCA9ICIjMDA4MDgwIgoKwqAKClxgZnVjaHNpYVxgID0gIiNGRjAwRkYiCgrCoAoKXGBhcXVhXGAgPSAiIzAwRkZGRiIKCioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlLCBhcyBpdCBpcyBub24tc3RhbmRhcmQgYW5kIG9ubHkgaW1wbGVtZW50ZWQgaW4gc29tZSB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXI6IFRoZSBbXGA8dGQ+XGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZCAiVGhlIEhUTUwgPHRkPiBlbGVtZW50IGRlZmluZXMgYSBjZWxsIG9mIGEgdGFibGUgdGhhdCBjb250YWlucyBkYXRhLiBJdCBwYXJ0aWNpcGF0ZXMgaW4gdGhlIHRhYmxlIG1vZGVsLiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykuIFRvIGNyZWF0ZSBhIHNpbWlsYXIgZWZmZWN0IHVzZSB0aGUgW1xgYmFja2dyb3VuZC1jb2xvclxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYmFja2dyb3VuZC1jb2xvciAiVGhlIGJhY2tncm91bmQtY29sb3IgQ1NTIHByb3BlcnR5IHNldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgYW4gZWxlbWVudC4iKSBwcm9wZXJ0eSBpbiBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUykgaW5zdGVhZC5gfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RkIn1dfSx7bmFtZToidGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB0aCBlbGVtZW50IHJlcHJlc2VudHMgYSBoZWFkZXIgY2VsbCBpbiBhIHRhYmxlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJjb2xzcGFuIn0se25hbWU6InJvd3NwYW4ifSx7bmFtZToiaGVhZGVycyJ9LHtuYW1lOiJzY29wZSIsdmFsdWVTZXQ6InMifSx7bmFtZToic29ydGVkIn0se25hbWU6ImFiYnIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgc2hvcnQgYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNlbGwncyBjb250ZW50LiBTb21lIHVzZXItYWdlbnRzLCBzdWNoIGFzIHNwZWVjaCByZWFkZXJzLCBtYXkgcHJlc2VudCB0aGlzIGRlc2NyaXB0aW9uIGJlZm9yZSB0aGUgY29udGVudCBpdHNlbGYuIn19LHtuYW1lOiJhbGlnbiIsZGVzY3JpcHRpb246J1RoaXMgZW51bWVyYXRlZCBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyB0aGUgY2VsbCBjb250ZW50XCdzIGhvcml6b250YWwgYWxpZ25tZW50IHdpbGwgYmUgaGFuZGxlZC4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBsZWZ0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgbGVmdCBvZiB0aGUgY2VsbC5cbiogICBgY2VudGVyYDogVGhlIGNvbnRlbnQgaXMgY2VudGVyZWQgaW4gdGhlIGNlbGwuXG4qICAgYHJpZ2h0YDogVGhlIGNvbnRlbnQgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQgb2YgdGhlIGNlbGwuXG4qICAgYGp1c3RpZnlgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIHN0cmV0Y2hlZCBvdXQgaW5zaWRlIHRoZSBjZWxsIHNvIHRoYXQgaXQgY292ZXJzIGl0cyBlbnRpcmUgd2lkdGguXG4qICAgYGNoYXJgICh3aXRoIHRleHQgb25seSk6IFRoZSBjb250ZW50IGlzIGFsaWduZWQgdG8gYSBjaGFyYWN0ZXIgaW5zaWRlIHRoZSBgPHRoPmAgZWxlbWVudCB3aXRoIG1pbmltYWwgb2Zmc2V0LiBUaGlzIGNoYXJhY3RlciBpcyBkZWZpbmVkIGJ5IHRoZSBbYGNoYXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGgjYXR0ci1jaGFyKSBhbmQgW2BjaGFyb2ZmYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoI2F0dHItY2hhcm9mZikgYXR0cmlidXRlcy5cblxuVGhlIGRlZmF1bHQgdmFsdWUgd2hlbiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIGlzIGBsZWZ0YC5cblxuKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUgYXMgaXQgaXMgb2Jzb2xldGUgaW4gdGhlIGxhdGVzdCBzdGFuZGFyZC5cblxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgbGVmdGAsIGBjZW50ZXJgLCBgcmlnaHRgIG9yIGBqdXN0aWZ5YCB2YWx1ZXMsIGFwcGx5IHRoZSBDU1MgW2B0ZXh0LWFsaWduYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3RleHQtYWxpZ24gIlRoZSB0ZXh0LWFsaWduIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiBhbiBpbmxpbmUgb3IgdGFibGUtY2VsbCBib3guIFRoaXMgbWVhbnMgaXQgd29ya3MgbGlrZSB2ZXJ0aWNhbC1hbGlnbiBidXQgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLiIpIHByb3BlcnR5IHRvIHRoZSBlbGVtZW50LlxuKiAgIFRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgY2hhcmAgdmFsdWUsIGdpdmUgdGhlIFtgdGV4dC1hbGlnbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy90ZXh0LWFsaWduICJUaGUgdGV4dC1hbGlnbiBDU1MgcHJvcGVydHkgc2V0cyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgYW4gaW5saW5lIG9yIHRhYmxlLWNlbGwgYm94LiBUaGlzIG1lYW5zIGl0IHdvcmtzIGxpa2UgdmVydGljYWwtYWxpZ24gYnV0IGluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbi4iKSBwcm9wZXJ0eSB0aGUgc2FtZSB2YWx1ZSB5b3Ugd291bGQgdXNlIGZvciB0aGUgW2BjaGFyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoI2F0dHItY2hhcikuIFVuaW1wbGVtZW50ZWQgaW4gQ1NTMy4nfSx7bmFtZToiYXhpcyIsZGVzY3JpcHRpb246IlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3RyaW5ncy4gRWFjaCBzdHJpbmcgaXMgdGhlIGBpZGAgb2YgYSBncm91cCBvZiBjZWxscyB0aGF0IHRoaXMgaGVhZGVyIGFwcGxpZXMgdG8uXG5cbioqTm90ZToqKiBEbyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIGFzIGl0IGlzIG9ic29sZXRlIGluIHRoZSBsYXRlc3Qgc3RhbmRhcmQ6IHVzZSB0aGUgW2BzY29wZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90aCNhdHRyLXNjb3BlKSBhdHRyaWJ1dGUgaW5zdGVhZC4ifSx7bmFtZToiYmdjb2xvciIsZGVzY3JpcHRpb246YFRoaXMgYXR0cmlidXRlIGRlZmluZXMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgZWFjaCBjZWxsIGluIGEgY29sdW1uLiBJdCBjb25zaXN0cyBvZiBhIDYtZGlnaXQgaGV4YWRlY2ltYWwgY29kZSBhcyBkZWZpbmVkIGluIFtzUkdCXShodHRwczovL3d3dy53My5vcmcvR3JhcGhpY3MvQ29sb3Ivc1JHQikgYW5kIGlzIHByZWZpeGVkIGJ5ICcjJy4gVGhpcyBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgd2l0aCBvbmUgb2Ygc2l4dGVlbiBwcmVkZWZpbmVkIGNvbG9yIHN0cmluZ3M6CgrCoAoKXGBibGFja1xgID0gIiMwMDAwMDAiCgrCoAoKXGBncmVlblxgID0gIiMwMDgwMDAiCgrCoAoKXGBzaWx2ZXJcYCA9ICIjQzBDMEMwIgoKwqAKClxgbGltZVxgID0gIiMwMEZGMDAiCgrCoAoKXGBncmF5XGAgPSAiIzgwODA4MCIKCsKgCgpcYG9saXZlXGAgPSAiIzgwODAwMCIKCsKgCgpcYHdoaXRlXGAgPSAiI0ZGRkZGRiIKCsKgCgpcYHllbGxvd1xgID0gIiNGRkZGMDAiCgrCoAoKXGBtYXJvb25cYCA9ICIjODAwMDAwIgoKwqAKClxgbmF2eVxgID0gIiMwMDAwODAiCgrCoAoKXGByZWRcYCA9ICIjRkYwMDAwIgoKwqAKClxgYmx1ZVxgID0gIiMwMDAwRkYiCgrCoAoKXGBwdXJwbGVcYCA9ICIjODAwMDgwIgoKwqAKClxgdGVhbFxgID0gIiMwMDgwODAiCgrCoAoKXGBmdWNoc2lhXGAgPSAiI0ZGMDBGRiIKCsKgCgpcYGFxdWFcYCA9ICIjMDBGRkZGIgoKKipOb3RlOioqIERvIG5vdCB1c2UgdGhpcyBhdHRyaWJ1dGUsIGFzIGl0IGlzIG5vbi1zdGFuZGFyZCBhbmQgb25seSBpbXBsZW1lbnRlZCBpbiBzb21lIHZlcnNpb25zIG9mIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcjogVGhlIFtcYDx0aD5cYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RoICJUaGUgSFRNTCA8dGg+IGVsZW1lbnQgZGVmaW5lcyBhIGNlbGwgYXMgaGVhZGVyIG9mIGEgZ3JvdXAgb2YgdGFibGUgY2VsbHMuIFRoZSBleGFjdCBuYXR1cmUgb2YgdGhpcyBncm91cCBpcyBkZWZpbmVkIGJ5IHRoZSBzY29wZSBhbmQgaGVhZGVycyBhdHRyaWJ1dGVzLiIpIGVsZW1lbnQgc2hvdWxkIGJlIHN0eWxlZCB1c2luZyBbQ1NTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MpLiBUbyBjcmVhdGUgYSBzaW1pbGFyIGVmZmVjdCB1c2UgdGhlIFtcYGJhY2tncm91bmQtY29sb3JcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2JhY2tncm91bmQtY29sb3IgIlRoZSBiYWNrZ3JvdW5kLWNvbG9yIENTUyBwcm9wZXJ0eSBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGFuIGVsZW1lbnQuIikgcHJvcGVydHkgaW4gW0NTU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTKSBpbnN0ZWFkLmB9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGgifV19LHtuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZm9ybSBlbGVtZW50IHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cywgc29tZSBvZiB3aGljaCBjYW4gcmVwcmVzZW50IGVkaXRhYmxlIHZhbHVlcyB0aGF0IGNhbiBiZSBzdWJtaXR0ZWQgdG8gYSBzZXJ2ZXIgZm9yIHByb2Nlc3NpbmcuIn0sYXR0cmlidXRlczpbe25hbWU6ImFjY2VwdC1jaGFyc2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIHNwYWNlLSBvciBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzIHRoYXQgdGhlIHNlcnZlciBhY2NlcHRzLiBUaGUgYnJvd3NlciB1c2VzIHRoZW0gaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZC4gVGhlIGRlZmF1bHQgdmFsdWUsIHRoZSByZXNlcnZlZCBzdHJpbmcgYCJVTktOT1dOImAsIGluZGljYXRlcyB0aGUgc2FtZSBlbmNvZGluZyBhcyB0aGF0IG9mIHRoZSBkb2N1bWVudCBjb250YWluaW5nIHRoZSBmb3JtIGVsZW1lbnQuICBcbkluIHByZXZpb3VzIHZlcnNpb25zIG9mIEhUTUwsIHRoZSBkaWZmZXJlbnQgY2hhcmFjdGVyIGVuY29kaW5ncyBjb3VsZCBiZSBkZWxpbWl0ZWQgYnkgc3BhY2VzIG9yIGNvbW1hcy4gSW4gSFRNTDUsIG9ubHkgc3BhY2VzIGFyZSBhbGxvd2VkIGFzIGRlbGltaXRlcnMuJ319LHtuYW1lOiJhY3Rpb24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBVUkkgb2YgYSBwcm9ncmFtIHRoYXQgcHJvY2Vzc2VzIHRoZSBmb3JtIGluZm9ybWF0aW9uLiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgW2Bmb3JtYWN0aW9uYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiNhdHRyLWZvcm1hY3Rpb24pIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50Lid9fSx7bmFtZToiYXV0b2NvbXBsZXRlIix2YWx1ZVNldDoibyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgaW5wdXQgZWxlbWVudHMgY2FuIGJ5IGRlZmF1bHQgaGF2ZSB0aGVpciB2YWx1ZXMgYXV0b21hdGljYWxseSBjb21wbGV0ZWQgYnkgdGhlIGJyb3dzZXIuIFRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhbiBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgb24gYW4gZWxlbWVudCBiZWxvbmdpbmcgdG8gdGhlIGZvcm0uIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgb2ZmYDogVGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IGVudGVyIGEgdmFsdWUgaW50byBlYWNoIGZpZWxkIGZvciBldmVyeSB1c2UsIG9yIHRoZSBkb2N1bWVudCBwcm92aWRlcyBpdHMgb3duIGF1dG8tY29tcGxldGlvbiBtZXRob2Q7IHRoZSBicm93c2VyIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgY29tcGxldGUgZW50cmllcy5cbiogICBgb25gOiBUaGUgYnJvd3NlciBjYW4gYXV0b21hdGljYWxseSBjb21wbGV0ZSB2YWx1ZXMgYmFzZWQgb24gdmFsdWVzIHRoYXQgdGhlIHVzZXIgaGFzIHByZXZpb3VzbHkgZW50ZXJlZCBpbiB0aGUgZm9ybS5cblxuRm9yIG1vc3QgbW9kZXJuIGJyb3dzZXJzIChpbmNsdWRpbmcgRmlyZWZveCAzOCssIEdvb2dsZSBDaHJvbWUgMzQrLCBJRSAxMSspIHNldHRpbmcgdGhlIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgd2lsbCBub3QgcHJldmVudCBhIGJyb3dzZXIncyBwYXNzd29yZCBtYW5hZ2VyIGZyb20gYXNraW5nIHRoZSB1c2VyIGlmIHRoZXkgd2FudCB0byBzdG9yZSBsb2dpbiBmaWVsZHMgKHVzZXJuYW1lIGFuZCBwYXNzd29yZCksIGlmIHRoZSB1c2VyIHBlcm1pdHMgdGhlIHN0b3JhZ2UgdGhlIGJyb3dzZXIgd2lsbCBhdXRvZmlsbCB0aGUgbG9naW4gdGhlIG5leHQgdGltZSB0aGUgdXNlciB2aXNpdHMgdGhlIHBhZ2UuIFNlZSBbVGhlIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUgYW5kIGxvZ2luIGZpZWxkc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJpbmdfeW91cl9zaXRlL1R1cm5pbmdfb2ZmX2Zvcm1fYXV0b2NvbXBsZXRpb24jVGhlX2F1dG9jb21wbGV0ZV9hdHRyaWJ1dGVfYW5kX2xvZ2luX2ZpZWxkcykuIn19LHtuYW1lOiJlbmN0eXBlIix2YWx1ZVNldDoiZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1doZW4gdGhlIHZhbHVlIG9mIHRoZSBgbWV0aG9kYCBhdHRyaWJ1dGUgaXMgYHBvc3RgLCBlbmN0eXBlIGlzIHRoZSBbTUlNRSB0eXBlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NaW1lX3R5cGUpIG9mIGNvbnRlbnQgdGhhdCBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSB0byB0aGUgc2VydmVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGA6IFRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWA6IFRoZSB2YWx1ZSB1c2VkIGZvciBhbiBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50IHdpdGggdGhlIGB0eXBlYCBhdHRyaWJ1dGUgc2V0IHRvICJmaWxlIi5cbiogICBgdGV4dC9wbGFpbmA6IChIVE1MNSlcblxuVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybWVuY3R5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybWVuY3R5cGUpIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBvciBbYDxpbnB1dD5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBlbGVtZW50Lid9fSx7bmFtZToibWV0aG9kIix2YWx1ZVNldDoibSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIFtIVFRQXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQKSBtZXRob2QgdGhhdCB0aGUgYnJvd3NlciB1c2VzIHRvIHN1Ym1pdCB0aGUgZm9ybS4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBwb3N0YDogQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW1BPU1QgbWV0aG9kXShodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM5Lmh0bWwjc2VjOS41KSA7IGZvcm0gZGF0YSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGZvcm0gYW5kIHNlbnQgdG8gdGhlIHNlcnZlci5cbiogICBgZ2V0YDogQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW0dFVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjMpOyBmb3JtIGRhdGEgYXJlIGFwcGVuZGVkIHRvIHRoZSBgYWN0aW9uYCBhdHRyaWJ1dGUgVVJJIHdpdGggYSBcJz9cJyBhcyBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0aW5nIFVSSSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBmb3JtIGhhcyBubyBzaWRlLWVmZmVjdHMgYW5kIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy5cbiogICBgZGlhbG9nYDogVXNlIHdoZW4gdGhlIGZvcm0gaXMgaW5zaWRlIGHCoFtgPGRpYWxvZz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGlhbG9nICJUaGUgSFRNTCA8ZGlhbG9nPiBlbGVtZW50IHJlcHJlc2VudHMgYSBkaWFsb2cgYm94IG9yIG90aGVyIGludGVyYWN0aXZlIGNvbXBvbmVudCwgc3VjaCBhcyBhbiBpbnNwZWN0b3Igb3Igd2luZG93LiIpIGVsZW1lbnQgdG8gY2xvc2UgdGhlIGRpYWxvZyB3aGVuIHN1Ym1pdHRlZC5cblxuVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIFtgZm9ybW1ldGhvZGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1mb3JtbWV0aG9kKSBhdHRyaWJ1dGUgb24gYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgb3IgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHRoZSBmb3JtLiBJbiBIVE1MIDQsIGl0cyB1c2UgaXMgZGVwcmVjYXRlZCAoYGlkYCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkKS4gSXQgbXVzdCBiZSB1bmlxdWUgYW1vbmcgdGhlIGZvcm1zIGluIGEgZG9jdW1lbnQgYW5kIG5vdCBqdXN0IGFuIGVtcHR5IHN0cmluZyBpbiBIVE1MIDUuIn19LHtuYW1lOiJub3ZhbGlkYXRlIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZm9ybSBpcyBub3QgdG8gYmUgdmFsaWRhdGVkIHdoZW4gc3VibWl0dGVkLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkIChhbmQgdGhlcmVmb3JlIHRoZSBmb3JtIGlzIHZhbGlkYXRlZCksIHRoaXMgZGVmYXVsdCBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgW2Bmb3Jtbm92YWxpZGF0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1mb3Jtbm92YWxpZGF0ZSkgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIG9yIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQgYmVsb25naW5nIHRvIHRoZSBmb3JtLid9fSx7bmFtZToidGFyZ2V0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidBIG5hbWUgb3Iga2V5d29yZCBpbmRpY2F0aW5nIHdoZXJlIHRvIGRpc3BsYXkgdGhlIHJlc3BvbnNlIHRoYXQgaXMgcmVjZWl2ZWQgYWZ0ZXIgc3VibWl0dGluZyB0aGUgZm9ybS4gSW4gSFRNTCA0LCB0aGlzIGlzIHRoZSBuYW1lL2tleXdvcmQgZm9yIGEgZnJhbWUuIEluIEhUTUw1LCBpdCBpcyBhIG5hbWUva2V5d29yZCBmb3IgYSBfYnJvd3NpbmcgY29udGV4dF8gKGZvciBleGFtcGxlLCB0YWIsIHdpbmRvdywgb3IgaW5saW5lIGZyYW1lKS4gVGhlIGZvbGxvd2luZyBrZXl3b3JkcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6XG5cbiogICBgX3NlbGZgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBzYW1lIEhUTUwgNCBmcmFtZSAob3IgSFRNTDUgYnJvd3NpbmcgY29udGV4dCkgYXMgdGhlIGN1cnJlbnQgb25lLiBUaGlzIHZhbHVlIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgX2JsYW5rYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byBhIG5ldyB1bm5hbWVkIEhUTUwgNCB3aW5kb3cgb3IgSFRNTDUgYnJvd3NpbmcgY29udGV4dC5cbiogICBgX3BhcmVudGA6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gdGhlIEhUTUwgNCBmcmFtZXNldCBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgZnJhbWUsIG9yIEhUTUw1IHBhcmVudCBicm93c2luZyBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9uZS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLlxuKiAgIGBfdG9wYDogSFRNTCA0OiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSBmdWxsIG9yaWdpbmFsIHdpbmRvdywgYW5kIGNhbmNlbCBhbGwgb3RoZXIgZnJhbWVzLiBIVE1MNTogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQgKGkuZS4sIHRoZSBicm93c2luZyBjb250ZXh0IHRoYXQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgb25lLCBhbmQgaGFzIG5vIHBhcmVudCkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCwgdGhpcyBvcHRpb24gYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYF9zZWxmYC5cbiogICBfaWZyYW1lbmFtZV86IFRoZSByZXNwb25zZSBpcyBkaXNwbGF5ZWQgaW4gYSBuYW1lZCBbYDxpZnJhbWU+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lmcmFtZSAiVGhlIEhUTUwgSW5saW5lIEZyYW1lIGVsZW1lbnQgKDxpZnJhbWU+KSByZXByZXNlbnRzIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIGVtYmVkZGluZyBhbm90aGVyIEhUTUwgcGFnZSBpbnRvIHRoZSBjdXJyZW50IG9uZS4iKS5cblxuSFRNTDU6IFRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBbYGZvcm10YXJnZXRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2F0dHItZm9ybXRhcmdldCkgYXR0cmlidXRlIG9uIGEgW2A8YnV0dG9uPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24gIlRoZSBIVE1MIDxidXR0b24+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNsaWNrYWJsZSBidXR0b24sIHdoaWNoIGNhbiBiZSB1c2VkIGluIGZvcm1zIG9yIGFueXdoZXJlIGluIGEgZG9jdW1lbnQgdGhhdCBuZWVkcyBzaW1wbGUsIHN0YW5kYXJkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5LiIpIG9yIFtgPGlucHV0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCAiVGhlIEhUTUwgPGlucHV0PiBlbGVtZW50IGlzIHVzZWQgdG8gY3JlYXRlIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciB3ZWItYmFzZWQgZm9ybXMgaW4gb3JkZXIgdG8gYWNjZXB0IGRhdGEgZnJvbSB0aGUgdXNlcjsgYSB3aWRlIHZhcmlldHkgb2YgdHlwZXMgb2YgaW5wdXQgZGF0YSBhbmQgY29udHJvbCB3aWRnZXRzIGFyZSBhdmFpbGFibGUsIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGFuZCB1c2VyIGFnZW50LiIpIGVsZW1lbnQuJ319LHtuYW1lOiJhY2NlcHQiLGRlc2NyaXB0aW9uOidBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNvbnRlbnQgdHlwZXMgdGhhdCB0aGUgc2VydmVyIGFjY2VwdHMuXG5cbioqVXNhZ2Ugbm90ZToqKiBUaGlzIGF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkIGluIEhUTUw1IGFuZCBzaG91bGQgbm8gbG9uZ2VyIGJlIHVzZWQuIEluc3RlYWQsIHVzZSB0aGUgW2BhY2NlcHRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjYXR0ci1hY2NlcHQpIGF0dHJpYnV0ZSBvZiB0aGUgc3BlY2lmaWMgW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudC4nfSx7bmFtZToiYXV0b2NhcGl0YWxpemUiLGRlc2NyaXB0aW9uOiJUaGlzIGlzIGEgbm9uc3RhbmRhcmQgYXR0cmlidXRlIHVzZWQgYnkgaU9TIFNhZmFyaSBNb2JpbGUgd2hpY2ggY29udHJvbHMgd2hldGhlciBhbmQgaG93IHRoZSB0ZXh0IHZhbHVlIGZvciB0ZXh0dWFsIGZvcm0gY29udHJvbCBkZXNjZW5kYW50cyBzaG91bGQgYmUgYXV0b21hdGljYWxseSBjYXBpdGFsaXplZCBhcyBpdCBpcyBlbnRlcmVkL2VkaXRlZCBieSB0aGUgdXNlci4gSWYgdGhlIGBhdXRvY2FwaXRhbGl6ZWAgYXR0cmlidXRlIGlzIHNwZWNpZmllZCBvbiBhbiBpbmRpdmlkdWFsIGZvcm0gY29udHJvbCBkZXNjZW5kYW50LCBpdCB0cnVtcHMgdGhlIGZvcm0td2lkZSBgYXV0b2NhcGl0YWxpemVgIHNldHRpbmcuIFRoZSBub24tZGVwcmVjYXRlZCB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBpbiBpT1MgNSBhbmQgbGF0ZXIuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBzZW50ZW5jZXNgLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG5vbmVgOiBDb21wbGV0ZWx5IGRpc2FibGVzIGF1dG9tYXRpYyBjYXBpdGFsaXphdGlvblxuKiAgIGBzZW50ZW5jZXNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlciBvZiBzZW50ZW5jZXMuXG4qICAgYHdvcmRzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygd29yZHMuXG4qICAgYGNoYXJhY3RlcnNgOiBBdXRvbWF0aWNhbGx5IGNhcGl0YWxpemUgYWxsIGNoYXJhY3RlcnMuXG4qICAgYG9uYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS5cbiogICBgb2ZmYDogRGVwcmVjYXRlZCBzaW5jZSBpT1MgNS4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0ifV19LHtuYW1lOiJsYWJlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxhYmVsIGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gaW4gYSB1c2VyIGludGVyZmFjZS4gVGhlIGNhcHRpb24gY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGZvcm0gY29udHJvbCwga25vd24gYXMgdGhlIGxhYmVsIGVsZW1lbnQncyBsYWJlbGVkIGNvbnRyb2wsIGVpdGhlciB1c2luZyB0aGUgZm9yIGF0dHJpYnV0ZSwgb3IgYnkgcHV0dGluZyB0aGUgZm9ybSBjb250cm9sIGluc2lkZSB0aGUgbGFiZWwgZWxlbWVudCBpdHNlbGYuIn0sYXR0cmlidXRlczpbe25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IHdpdGggd2hpY2ggdGhlIGxhYmVsIGlzIGFzc29jaWF0ZWQgKGl0cyBfZm9ybSBvd25lcl8pLiBJZiBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGlzIHRoZSBgaWRgIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gVGhpcyBsZXRzIHlvdSBwbGFjZSBsYWJlbCBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgdGhlaXIgZm9ybSBlbGVtZW50cy4nfX0se25hbWU6ImZvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIFtgaWRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItaWQpIG9mIGEgW2xhYmVsYWJsZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvR3VpZGUvSFRNTC9Db250ZW50X2NhdGVnb3JpZXMjRm9ybV9sYWJlbGFibGUpIGZvcm0tcmVsYXRlZCBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50IGFzIHRoZSBgPGxhYmVsPmAgZWxlbWVudC4gVGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHdpdGggYW4gYGlkYCBtYXRjaGluZyB0aGUgdmFsdWUgb2YgdGhlIGBmb3JgIGF0dHJpYnV0ZSBpcyB0aGUgX2xhYmVsZWQgY29udHJvbF8gZm9yIHRoaXMgbGFiZWwgZWxlbWVudCwgaWYgaXQgaXMgYSBsYWJlbGFibGUgZWxlbWVudC4gSWYgaXQgaXPCoG5vdCBsYWJlbGFibGUgdGhlbiB0aGUgYGZvcmAgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QuIElmIHRoZXJlIGFyZSBvdGhlciBlbGVtZW50cyB3aGljaCBhbHNvIG1hdGNoIHRoZSBgaWRgIHZhbHVlLCBsYXRlciBpbiB0aGUgZG9jdW1lbnQsIHRoZXkgYXJlIG5vdCBjb25zaWRlcmVkLlxuXG4qKk5vdGUqKjogQSBgPGxhYmVsPmAgZWxlbWVudCBjYW4gaGF2ZSBib3RoIGEgYGZvcmAgYXR0cmlidXRlIGFuZCBhIGNvbnRhaW5lZCBjb250cm9sIGVsZW1lbnQsIGFzIGxvbmcgYXMgdGhlIGBmb3JgIGF0dHJpYnV0ZSBwb2ludHMgdG8gdGhlIGNvbnRhaW5lZCBjb250cm9sIGVsZW1lbnQuIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGFiZWwifV19LHtuYW1lOiJpbnB1dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGlucHV0IGVsZW1lbnQgcmVwcmVzZW50cyBhIHR5cGVkIGRhdGEgZmllbGQsIHVzdWFsbHkgd2l0aCBhIGZvcm0gY29udHJvbCB0byBhbGxvdyB0aGUgdXNlciB0byBlZGl0IHRoZSBkYXRhLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhY2NlcHQifSx7bmFtZToiYWx0In0se25hbWU6ImF1dG9jb21wbGV0ZSIsdmFsdWVTZXQ6ImlucHV0YXV0b2NvbXBsZXRlIn0se25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYifSx7bmFtZToiY2hlY2tlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiZGlybmFtZSJ9LHtuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToiZm9ybSJ9LHtuYW1lOiJmb3JtYWN0aW9uIn0se25hbWU6ImZvcm1lbmN0eXBlIix2YWx1ZVNldDoiZXQifSx7bmFtZToiZm9ybW1ldGhvZCIsdmFsdWVTZXQ6ImZtIn0se25hbWU6ImZvcm1ub3ZhbGlkYXRlIix2YWx1ZVNldDoidiJ9LHtuYW1lOiJmb3JtdGFyZ2V0In0se25hbWU6ImhlaWdodCJ9LHtuYW1lOiJpbnB1dG1vZGUiLHZhbHVlU2V0OiJpbSJ9LHtuYW1lOiJsaXN0In0se25hbWU6Im1heCJ9LHtuYW1lOiJtYXhsZW5ndGgifSx7bmFtZToibWluIn0se25hbWU6Im1pbmxlbmd0aCJ9LHtuYW1lOiJtdWx0aXBsZSIsdmFsdWVTZXQ6InYifSx7bmFtZToibmFtZSJ9LHtuYW1lOiJwYXR0ZXJuIn0se25hbWU6InBsYWNlaG9sZGVyIn0se25hbWU6InJlYWRvbmx5Iix2YWx1ZVNldDoidiJ9LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYifSx7bmFtZToic2l6ZSJ9LHtuYW1lOiJzcmMifSx7bmFtZToic3RlcCJ9LHtuYW1lOiJ0eXBlIix2YWx1ZVNldDoidCJ9LHtuYW1lOiJ2YWx1ZSJ9LHtuYW1lOiJ3aWR0aCJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQifV19LHtuYW1lOiJidXR0b24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBidXR0b24gZWxlbWVudCByZXByZXNlbnRzIGEgYnV0dG9uIGxhYmVsZWQgYnkgaXRzIGNvbnRlbnRzLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvZm9jdXMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhhdCB0aGUgYnV0dG9uIHNob3VsZCBoYXZlIGlucHV0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHMsIHVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgaXQsIGZvciBleGFtcGxlIGJ5IHR5cGluZyBpbiBhIGRpZmZlcmVudCBjb250cm9sLiBPbmx5IG9uZSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudCBpbiBhIGRvY3VtZW50IGNhbiBoYXZlIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllZC4ifX0se25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciBjYW5ub3QgaW50ZXJhY3Qgd2l0aCB0aGUgYnV0dG9uLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYnV0dG9uIGluaGVyaXRzIGl0cyBzZXR0aW5nIGZyb20gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCwgZm9yIGV4YW1wbGUgW2A8ZmllbGRzZXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZWxkc2V0ICJUaGUgSFRNTCA8ZmllbGRzZXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBncm91cCBzZXZlcmFsIGNvbnRyb2xzIGFzIHdlbGwgYXMgbGFiZWxzICg8bGFiZWw+KSB3aXRoaW4gYSB3ZWIgZm9ybS4iKTsgaWYgdGhlcmUgaXMgbm8gY29udGFpbmluZyBlbGVtZW50IHdpdGggdGhlICoqZGlzYWJsZWQqKiBhdHRyaWJ1dGUgc2V0LCB0aGVuIHRoZSBidXR0b24gaXMgZW5hYmxlZC5cblxuRmlyZWZveCB3aWxsLCB1bmxpa2Ugb3RoZXIgYnJvd3NlcnMsIGJ5IGRlZmF1bHQsIFtwZXJzaXN0IHRoZSBkeW5hbWljIGRpc2FibGVkIHN0YXRlXShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTg1ODM5L2J1Zy13aXRoLWZpcmVmb3gtZGlzYWJsZWQtYXR0cmlidXRlLW9mLWlucHV0LW5vdC1yZXNldHRpbmctd2hlbi1yZWZyZXNoaW5nKSBvZiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBhY3Jvc3MgcGFnZSBsb2Fkcy4gVXNlIHRoZSBbYGF1dG9jb21wbGV0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jYXR0ci1hdXRvY29tcGxldGUpIGF0dHJpYnV0ZSB0byBjb250cm9sIHRoaXMgZmVhdHVyZS4nfX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQgdGhhdCB0aGUgYnV0dG9uIGlzIGFzc29jaWF0ZWQgd2l0aCAoaXRzIF9mb3JtIG93bmVyXykuIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG11c3QgYmUgdGhlICoqaWQqKiBhdHRyaWJ1dGUgb2YgYSBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYDxidXR0b24+YCBlbGVtZW50IHdpbGwgYmUgYXNzb2NpYXRlZCB0byBhbiBhbmNlc3RvciBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50LCBpZiBvbmUgZXhpc3RzLiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHlvdSB0byBhc3NvY2lhdGUgYDxidXR0b24+YCBlbGVtZW50cyB0byBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKSBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudHMuJ319LHtuYW1lOiJmb3JtYWN0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgVVJJIG9mIGEgcHJvZ3JhbSB0aGF0IHByb2Nlc3NlcyB0aGUgaW5mb3JtYXRpb24gc3VibWl0dGVkIGJ5IHRoZSBidXR0b24uIElmIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIHRoZSBbYGFjdGlvbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItYWN0aW9uKSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvbidzIGZvcm0gb3duZXIuIn19LHtuYW1lOiJmb3JtZW5jdHlwZSIsdmFsdWVTZXQ6ImV0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJZiB0aGUgYnV0dG9uIGlzIGEgc3VibWl0IGJ1dHRvbiwgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGNvbnRlbnQgdGhhdCBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSB0byB0aGUgc2VydmVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGA6IFRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZC5cbiogICBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWA6IFVzZSB0aGlzIHZhbHVlIGlmIHlvdSBhcmUgdXNpbmcgYW4gW2A8aW5wdXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudCB3aXRoIHRoZSBbYHR5cGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjYXR0ci10eXBlKSBhdHRyaWJ1dGUgc2V0IHRvIGBmaWxlYC5cbiogICBgdGV4dC9wbGFpbmBcblxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgZW5jdHlwZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItZW5jdHlwZSkgYXR0cmlidXRlIG9mIHRoZSBidXR0b25cJ3MgZm9ybSBvd25lci4nfX0se25hbWU6ImZvcm1tZXRob2QiLHZhbHVlU2V0OiJmbSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgSFRUUCBtZXRob2QgdGhhdCB0aGUgYnJvd3NlciB1c2VzIHRvIHN1Ym1pdCB0aGUgZm9ybS4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBwb3N0YDogVGhlIGRhdGEgZnJvbSB0aGUgZm9ybSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGZvcm0gYW5kIHNlbnQgdG8gdGhlIHNlcnZlci5cbiogICBgZ2V0YDogVGhlIGRhdGEgZnJvbSB0aGUgZm9ybSBhcmUgYXBwZW5kZWQgdG8gdGhlICoqZm9ybSoqIGF0dHJpYnV0ZSBVUkksIHdpdGggYSAnPycgYXMgYSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0aW5nIFVSSSBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHRoZSBmb3JtIGhhcyBubyBzaWRlLWVmZmVjdHMgYW5kIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy5cblxuSWYgc3BlY2lmaWVkLCB0aGlzIGF0dHJpYnV0ZSBvdmVycmlkZXMgdGhlIFtgbWV0aG9kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1tZXRob2QpIGF0dHJpYnV0ZSBvZiB0aGUgYnV0dG9uJ3MgZm9ybSBvd25lci4ifX0se25hbWU6ImZvcm1ub3ZhbGlkYXRlIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoYXQgdGhlIGZvcm0gaXMgbm90IHRvIGJlIHZhbGlkYXRlZCB3aGVuIGl0IGlzIHN1Ym1pdHRlZC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIFtgbm92YWxpZGF0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItbm92YWxpZGF0ZSkgYXR0cmlidXRlIG9mIHRoZSBidXR0b24ncyBmb3JtIG93bmVyLiJ9fSx7bmFtZToiZm9ybXRhcmdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGJ1dHRvbiBpcyBhIHN1Ym1pdCBidXR0b24sIHRoaXMgYXR0cmlidXRlIGlzIGEgbmFtZSBvciBrZXl3b3JkIGluZGljYXRpbmcgd2hlcmUgdG8gZGlzcGxheSB0aGUgcmVzcG9uc2UgdGhhdCBpcyByZWNlaXZlZCBhZnRlciBzdWJtaXR0aW5nIHRoZSBmb3JtLiBUaGlzIGlzIGEgbmFtZSBvZiwgb3Iga2V5d29yZCBmb3IsIGEgX2Jyb3dzaW5nIGNvbnRleHRfIChmb3IgZXhhbXBsZSwgdGFiLCB3aW5kb3csIG9yIGlubGluZSBmcmFtZSkuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIHRoZSBbYHRhcmdldGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtI2F0dHItdGFyZ2V0KSBhdHRyaWJ1dGUgb2YgdGhlIGJ1dHRvbidzIGZvcm0gb3duZXIuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOlxuXG4qICAgYF9zZWxmYDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgc2FtZSBicm93c2luZyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IG9uZS4gVGhpcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQuXG4qICAgYF9ibGFua2A6IExvYWQgdGhlIHJlc3BvbnNlIGludG8gYSBuZXcgdW5uYW1lZCBicm93c2luZyBjb250ZXh0LlxuKiAgIGBfcGFyZW50YDogTG9hZCB0aGUgcmVzcG9uc2UgaW50byB0aGUgcGFyZW50IGJyb3dzaW5nIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgb25lLiBJZiB0aGVyZSBpcyBubyBwYXJlbnQsIHRoaXMgb3B0aW9uIGJlaGF2ZXMgdGhlIHNhbWUgd2F5IGFzIGBfc2VsZmAuXG4qICAgYF90b3BgOiBMb2FkIHRoZSByZXNwb25zZSBpbnRvIHRoZSB0b3AtbGV2ZWwgYnJvd3NpbmcgY29udGV4dCAodGhhdCBpcywgdGhlIGJyb3dzaW5nIGNvbnRleHQgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBvbmUsIGFuZCBoYXMgbm8gcGFyZW50KS4gSWYgdGhlcmUgaXMgbm8gcGFyZW50LCB0aGlzIG9wdGlvbiBiZWhhdmVzIHRoZSBzYW1lIHdheSBhcyBgX3NlbGZgLiJ9fSx7bmFtZToibmFtZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5hbWUgb2YgdGhlIGJ1dHRvbiwgd2hpY2ggaXMgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0gZGF0YS4ifX0se25hbWU6InR5cGUiLHZhbHVlU2V0OiJidCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHR5cGUgb2YgdGhlIGJ1dHRvbi4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBzdWJtaXRgOiBUaGUgYnV0dG9uIHN1Ym1pdHMgdGhlIGZvcm0gZGF0YSB0byB0aGUgc2VydmVyLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgb3IgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkeW5hbWljYWxseSBjaGFuZ2VkIHRvIGFuIGVtcHR5IG9yIGludmFsaWQgdmFsdWUuXG4qICAgYHJlc2V0YDogVGhlIGJ1dHRvbiByZXNldHMgYWxsIHRoZSBjb250cm9scyB0byB0aGVpciBpbml0aWFsIHZhbHVlcy5cbiogICBgYnV0dG9uYDogVGhlIGJ1dHRvbiBoYXMgbm8gZGVmYXVsdCBiZWhhdmlvci4gSXQgY2FuIGhhdmUgY2xpZW50LXNpZGUgc2NyaXB0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQncyBldmVudHMsIHdoaWNoIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZXZlbnRzIG9jY3VyLiJ9fSx7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBidXR0b24uIEl0IGRlZmluZXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnV0dG9uIHdoaWNoIGlzIHN1Ym1pdHRlZCB3aXRoIHRoZSBmb3JtIGRhdGEuIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIgaW4gcGFyYW1zIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLiJ9fSx7bmFtZToiYXV0b2NvbXBsZXRlIixkZXNjcmlwdGlvbjonVGhlIHVzZSBvZiB0aGlzIGF0dHJpYnV0ZSBvbiBhIFtgPGJ1dHRvbj5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uICJUaGUgSFRNTCA8YnV0dG9uPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjbGlja2FibGUgYnV0dG9uLCB3aGljaCBjYW4gYmUgdXNlZCBpbiBmb3JtcyBvciBhbnl3aGVyZSBpbiBhIGRvY3VtZW50IHRoYXQgbmVlZHMgc2ltcGxlLCBzdGFuZGFyZCBidXR0b24gZnVuY3Rpb25hbGl0eS4iKSBpcyBub25zdGFuZGFyZCBhbmQgRmlyZWZveC1zcGVjaWZpYy4gQnkgZGVmYXVsdCwgdW5saWtlIG90aGVyIGJyb3dzZXJzLCBbRmlyZWZveCBwZXJzaXN0cyB0aGUgZHluYW1pYyBkaXNhYmxlZCBzdGF0ZV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTk4NTgzOS9idWctd2l0aC1maXJlZm94LWRpc2FibGVkLWF0dHJpYnV0ZS1vZi1pbnB1dC1ub3QtcmVzZXR0aW5nLXdoZW4tcmVmcmVzaGluZykgb2YgYSBbYDxidXR0b24+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiAiVGhlIEhUTUwgPGJ1dHRvbj4gZWxlbWVudCByZXByZXNlbnRzIGEgY2xpY2thYmxlIGJ1dHRvbiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gZm9ybXMgb3IgYW55d2hlcmUgaW4gYSBkb2N1bWVudCB0aGF0IG5lZWRzIHNpbXBsZSwgc3RhbmRhcmQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkuIikgYWNyb3NzIHBhZ2UgbG9hZHMuIFNldHRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHRvIGBvZmZgIChpLmUuIGBhdXRvY29tcGxldGU9Im9mZiJgKSBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuIFNlZSBbYnVnwqA2NTQwNzJdKGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDA3MiAiaWYgZGlzYWJsZWQgc3RhdGUgaXMgY2hhbmdlZCB3aXRoIGphdmFzY3JpcHQsIHRoZSBub3JtYWwgc3RhdGUgZG9lc25cJ3QgcmV0dXJuIGFmdGVyIHJlZnJlc2hpbmcgdGhlIHBhZ2UiKS4nfV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2J1dHRvbiJ9XX0se25hbWU6InNlbGVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNlbGVjdCBlbGVtZW50IHJlcHJlc2VudHMgYSBjb250cm9sIGZvciBzZWxlY3RpbmcgYW1vbmdzdCBhIHNldCBvZiBvcHRpb25zLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvY29tcGxldGUiLHZhbHVlU2V0OiJpbnB1dGF1dG9jb21wbGV0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonQSBbYERPTVN0cmluZ2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01TdHJpbmcgIkRPTVN0cmluZyBpcyBhIFVURi0xNiBTdHJpbmcuIEFzIEphdmFTY3JpcHQgYWxyZWFkeSB1c2VzIHN1Y2ggc3RyaW5ncywgRE9NU3RyaW5nIGlzIG1hcHBlZCBkaXJlY3RseSB0byBhIFN0cmluZy4iKSBwcm92aWRpbmcgYSBoaW50IGZvciBhIFt1c2VyIGFnZW50XCdzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L3VzZXJfYWdlbnQgInVzZXIgYWdlbnRcJ3M6IEEgdXNlciBhZ2VudCBpcyBhIGNvbXB1dGVyIHByb2dyYW0gcmVwcmVzZW50aW5nIGEgcGVyc29uLCBmb3IgZXhhbXBsZSwgYSBicm93c2VyIGluIGEgV2ViIGNvbnRleHQuIikgYXV0b2NvbXBsZXRlIGZlYXR1cmUuIFNlZSBbVGhlIEhUTUwgYXV0b2NvbXBsZXRlIGF0dHJpYnV0ZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9BdHRyaWJ1dGVzL2F1dG9jb21wbGV0ZSkgZm9yIGEgY29tcGxldGUgbGlzdCBvZiB2YWx1ZXMgYW5kIGRldGFpbHMgb24gaG93IHRvIHVzZSBhdXRvY29tcGxldGUuJ319LHtuYW1lOiJhdXRvZm9jdXMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhhdCBhIGZvcm0gY29udHJvbCBzaG91bGQgaGF2ZSBpbnB1dCBmb2N1cyB3aGVuIHRoZSBwYWdlIGxvYWRzLiBPbmx5IG9uZSBmb3JtIGVsZW1lbnQgaW4gYSBkb2N1bWVudCBjYW4gaGF2ZSB0aGUgYGF1dG9mb2N1c2AgYXR0cmlidXRlLiJ9fSx7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBpbnRlcmFjdCB3aXRoIHRoZSBjb250cm9sLiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY29udHJvbCBpbmhlcml0cyBpdHMgc2V0dGluZyBmcm9tIHRoZSBjb250YWluaW5nIGVsZW1lbnQsIGZvciBleGFtcGxlIGBmaWVsZHNldGA7IGlmIHRoZXJlIGlzIG5vIGNvbnRhaW5pbmcgZWxlbWVudCB3aXRoIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBzZXQsIHRoZW4gdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgdGhlIGZvcm0gZWxlbWVudCB0b8Kgd2hpY2jCoHRoZSBzZWxlY3QgZWxlbWVudCBpcyBhc3NvY2lhdGVkwqAodGhhdCBpcywgaXRzICJmb3JtIG93bmVyIikuIElmIHRoaXMgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgaXRzIHZhbHVlIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIGBpZGAgb2YgYSBmb3JtIGVsZW1lbnQgaW4gdGhlIHNhbWUgZG9jdW1lbnQuIFRoaXMgZW5hYmxlcyB5b3UgdG8gcGxhY2Ugc2VsZWN0IGVsZW1lbnRzIGFueXdoZXJlIHdpdGhpbiBhIGRvY3VtZW50LCBub3QganVzdCBhcyBkZXNjZW5kYW50cyBvZiB0aGVpciBmb3JtIGVsZW1lbnRzLid9fSx7bmFtZToibXVsdGlwbGUiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IG11bHRpcGxlIG9wdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGluIHRoZSBsaXN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIG9ubHkgb25lIG9wdGlvbiBjYW4gYmUgc2VsZWN0ZWQgYXQgYSB0aW1lLiBXaGVuIGBtdWx0aXBsZWAgaXMgc3BlY2lmaWVkLCBtb3N0IGJyb3dzZXJzIHdpbGwgc2hvdyBhIHNjcm9sbGluZyBsaXN0IGJveCBpbnN0ZWFkIG9mIGEgc2luZ2xlIGxpbmUgZHJvcGRvd24uIn19LHtuYW1lOiJuYW1lIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wuIn19LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGF0IGFuIG9wdGlvbiB3aXRoIGEgbm9uLWVtcHR5IHN0cmluZyB2YWx1ZSBtdXN0IGJlIHNlbGVjdGVkLiJ9fSx7bmFtZToic2l6ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWYgdGhlIGNvbnRyb2wgaXMgcHJlc2VudGVkIGFzIGEgc2Nyb2xsaW5nIGxpc3QgYm94IChlLmcuIHdoZW4gYG11bHRpcGxlYCBpcyBzcGVjaWZpZWQpLCB0aGlzIGF0dHJpYnV0ZSByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbGlzdCB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIGF0IG9uZSB0aW1lLiBCcm93c2VycyBhcmUgbm90IHJlcXVpcmVkIHRvIHByZXNlbnQgYSBzZWxlY3QgZWxlbWVudCBhcyBhIHNjcm9sbGVkIGxpc3QgYm94LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLlxuXG4qKk5vdGU6KiogQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igc2l6ZSBzaG91bGQgYmUgMTsgaG93ZXZlciwgaW4gcHJhY3RpY2UsIHRoaXMgaGFzIGJlZW4gZm91bmQgdG8gYnJlYWsgc29tZSB3ZWIgc2l0ZXMsIGFuZCBubyBvdGhlciBicm93c2VyIGN1cnJlbnRseSBkb2VzIHRoYXQsIHNvIE1vemlsbGEgaGFzIG9wdGVkIHRvIGNvbnRpbnVlIHRvIHJldHVybiAwIGZvciB0aGUgdGltZSBiZWluZyB3aXRoIEZpcmVmb3guIn19XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2VsZWN0In1dfSx7bmFtZToiZGF0YWxpc3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkYXRhbGlzdCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZXQgb2Ygb3B0aW9uIGVsZW1lbnRzIHRoYXQgcmVwcmVzZW50IHByZWRlZmluZWQgb3B0aW9ucyBmb3Igb3RoZXIgY29udHJvbHMuIEluIHRoZSByZW5kZXJpbmcsIHRoZSBkYXRhbGlzdCBlbGVtZW50IHJlcHJlc2VudHMgbm90aGluZyBhbmQgaXQsIGFsb25nIHdpdGggaXRzIGNoaWxkcmVuLCBzaG91bGQgYmUgaGlkZGVuLiJ9LGF0dHJpYnV0ZXM6W10scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RhdGFsaXN0In1dfSx7bmFtZToib3B0Z3JvdXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvcHRncm91cCBlbGVtZW50IHJlcHJlc2VudHMgYSBncm91cCBvZiBvcHRpb24gZWxlbWVudHMgd2l0aCBhIGNvbW1vbiBsYWJlbC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCwgbm9uZSBvZiB0aGUgaXRlbXMgaW4gdGhpcyBvcHRpb24gZ3JvdXAgaXMgc2VsZWN0YWJsZS4gT2Z0ZW4gYnJvd3NlcnMgZ3JleSBvdXQgc3VjaCBjb250cm9sIGFuZCBpdCB3b24ndCByZWNlaXZlIGFueSBicm93c2luZyBldmVudHMsIGxpa2UgbW91c2UgY2xpY2tzIG9yIGZvY3VzLXJlbGF0ZWQgb25lcy4ifX0se25hbWU6ImxhYmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbmFtZSBvZiB0aGUgZ3JvdXAgb2Ygb3B0aW9ucywgd2hpY2ggdGhlIGJyb3dzZXIgY2FuIHVzZSB3aGVuIGxhYmVsaW5nIHRoZSBvcHRpb25zIGluIHRoZSB1c2VyIGludGVyZmFjZS4gVGhpcyBhdHRyaWJ1dGUgaXMgbWFuZGF0b3J5IGlmIHRoaXMgZWxlbWVudCBpcyB1c2VkLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L29wdGdyb3VwIn1dfSx7bmFtZToib3B0aW9uIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgb3B0aW9uIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBvcHRpb24gaW4gYSBzZWxlY3QgZWxlbWVudCBvciBhcyBwYXJ0IG9mIGEgbGlzdCBvZiBzdWdnZXN0aW9ucyBpbiBhIGRhdGFsaXN0IGVsZW1lbnQuIn0sYXR0cmlidXRlczpbe25hbWU6ImRpc2FibGVkIix2YWx1ZVNldDoidiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonSWYgdGhpcyBCb29sZWFuIGF0dHJpYnV0ZSBpcyBzZXQsIHRoaXMgb3B0aW9uIGlzIG5vdCBjaGVja2FibGUuIE9mdGVuIGJyb3dzZXJzIGdyZXkgb3V0IHN1Y2ggY29udHJvbCBhbmQgaXQgd29uXCd0IHJlY2VpdmUgYW55IGJyb3dzaW5nIGV2ZW50LCBsaWtlIG1vdXNlIGNsaWNrcyBvciBmb2N1cy1yZWxhdGVkIG9uZXMuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQsIHRoZSBlbGVtZW50IGNhbiBzdGlsbCBiZSBkaXNhYmxlZCBpZiBvbmUgb2YgaXRzIGFuY2VzdG9ycyBpcyBhIGRpc2FibGVkIFtgPG9wdGdyb3VwPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vcHRncm91cCAiVGhlIEhUTUwgPG9wdGdyb3VwPiBlbGVtZW50IGNyZWF0ZXMgYSBncm91cGluZyBvZiBvcHRpb25zIHdpdGhpbiBhIDxzZWxlY3Q+IGVsZW1lbnQuIikgZWxlbWVudC4nfX0se25hbWU6ImxhYmVsIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBpcyB0ZXh0IGZvciB0aGUgbGFiZWwgaW5kaWNhdGluZyB0aGUgbWVhbmluZyBvZiB0aGUgb3B0aW9uLiBJZiB0aGUgYGxhYmVsYCBhdHRyaWJ1dGUgaXNuJ3QgZGVmaW5lZCwgaXRzIHZhbHVlIGlzIHRoYXQgb2YgdGhlIGVsZW1lbnQgdGV4dCBjb250ZW50LiJ9fSx7bmFtZToic2VsZWN0ZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJZiBwcmVzZW50LCB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSBvcHRpb24gaXMgaW5pdGlhbGx5IHNlbGVjdGVkLiBJZiB0aGUgYDxvcHRpb24+YCBlbGVtZW50IGlzIHRoZSBkZXNjZW5kYW50IG9mIGEgW2A8c2VsZWN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QgIlRoZSBIVE1MIDxzZWxlY3Q+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbnRyb2wgdGhhdCBwcm92aWRlcyBhIG1lbnUgb2Ygb3B0aW9ucyIpIGVsZW1lbnQgd2hvc2UgW2BtdWx0aXBsZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QjYXR0ci1tdWx0aXBsZSkgYXR0cmlidXRlIGlzIG5vdCBzZXQsIG9ubHkgb25lIHNpbmdsZSBgPG9wdGlvbj5gIG9mIHRoaXMgW2A8c2VsZWN0PmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zZWxlY3QgIlRoZSBIVE1MIDxzZWxlY3Q+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNvbnRyb2wgdGhhdCBwcm92aWRlcyBhIG1lbnUgb2Ygb3B0aW9ucyIpIGVsZW1lbnQgbWF5IGhhdmUgdGhlIGBzZWxlY3RlZGAgYXR0cmlidXRlLid9fSx7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBjb250ZW50IG9mIHRoaXMgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIHZhbHVlIHRvIGJlIHN1Ym1pdHRlZCB3aXRoIHRoZSBmb3JtLCBzaG91bGQgdGhpcyBvcHRpb24gYmUgc2VsZWN0ZWQuwqBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBvbWl0dGVkLCB0aGUgdmFsdWUgaXMgdGFrZW4gZnJvbSB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBvcHRpb24gZWxlbWVudC4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vcHRpb24ifV19LHtuYW1lOiJ0ZXh0YXJlYSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRleHRhcmVhIGVsZW1lbnQgcmVwcmVzZW50cyBhIG11bHRpbGluZSBwbGFpbiB0ZXh0IGVkaXQgY29udHJvbCBmb3IgdGhlIGVsZW1lbnQncyByYXcgdmFsdWUuIFRoZSBjb250ZW50cyBvZiB0aGUgY29udHJvbCByZXByZXNlbnQgdGhlIGNvbnRyb2wncyBkZWZhdWx0IHZhbHVlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJhdXRvY29tcGxldGUiLHZhbHVlU2V0OiJpbnB1dGF1dG9jb21wbGV0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGNvbXBsZXRlZCBieSB0aGUgYnJvd3Nlci4gUG9zc2libGUgdmFsdWVzIGFyZTpcblxuKiAgIGBvZmZgOiBUaGUgdXNlciBtdXN0IGV4cGxpY2l0bHkgZW50ZXIgYSB2YWx1ZSBpbnRvIHRoaXMgZmllbGQgZm9yIGV2ZXJ5IHVzZSwgb3IgdGhlIGRvY3VtZW50IHByb3ZpZGVzIGl0cyBvd24gYXV0by1jb21wbGV0aW9uIG1ldGhvZDsgdGhlIGJyb3dzZXIgZG9lcyBub3QgYXV0b21hdGljYWxseSBjb21wbGV0ZSB0aGUgZW50cnkuXG4qICAgYG9uYDogVGhlIGJyb3dzZXIgY2FuIGF1dG9tYXRpY2FsbHkgY29tcGxldGUgdGhlIHZhbHVlIGJhc2VkIG9uIHZhbHVlcyB0aGF0IHRoZSB1c2VyIGhhcyBlbnRlcmVkIGR1cmluZyBwcmV2aW91cyB1c2VzLlxuXG5JZiB0aGUgYGF1dG9jb21wbGV0ZWAgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQgb24gYSBgPHRleHRhcmVhPmAgZWxlbWVudCwgdGhlbiB0aGUgYnJvd3NlciB1c2VzIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgdmFsdWUgb2YgdGhlIGA8dGV4dGFyZWE+YCBlbGVtZW50XCdzIGZvcm0gb3duZXIuIFRoZSBmb3JtIG93bmVyIGlzIGVpdGhlciB0aGUgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCB0aGF0IHRoaXMgYDx0ZXh0YXJlYT5gIGVsZW1lbnQgaXMgYSBkZXNjZW5kYW50IG9mIG9yIHRoZSBmb3JtIGVsZW1lbnQgd2hvc2UgYGlkYCBpcyBzcGVjaWZpZWQgYnkgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGlucHV0IGVsZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFtgYXV0b2NvbXBsZXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2Zvcm0jYXR0ci1hdXRvY29tcGxldGUpIGF0dHJpYnV0ZSBpbiBbYDxmb3JtPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9mb3JtICJUaGUgSFRNTCA8Zm9ybT4gZWxlbWVudCByZXByZXNlbnRzIGEgZG9jdW1lbnQgc2VjdGlvbiB0aGF0IGNvbnRhaW5zIGludGVyYWN0aXZlIGNvbnRyb2xzIGZvciBzdWJtaXR0aW5nIGluZm9ybWF0aW9uIHRvIGEgd2ViIHNlcnZlci4iKS4nfX0se25hbWU6ImF1dG9mb2N1cyIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSB0aGF0IGEgZm9ybSBjb250cm9sIHNob3VsZCBoYXZlIGlucHV0IGZvY3VzIHdoZW4gdGhlIHBhZ2UgbG9hZHMuIE9ubHkgb25lIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50IGluIGEgZG9jdW1lbnQgY2FuIGhhdmUgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVkLiJ9fSx7bmFtZToiY29scyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHZpc2libGUgd2lkdGggb2YgdGhlIHRleHQgY29udHJvbCwgaW4gYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGhzLiBJZiBpdCBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBgMjBgLiJ9fSx7bmFtZToiZGlybmFtZSJ9LHtuYW1lOiJkaXNhYmxlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgY2Fubm90IGludGVyYWN0IHdpdGggdGhlIGNvbnRyb2wuIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250cm9sIGluaGVyaXRzIGl0cyBzZXR0aW5nIGZyb20gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCwgZm9yIGV4YW1wbGUgW2A8ZmllbGRzZXQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ZpZWxkc2V0ICJUaGUgSFRNTCA8ZmllbGRzZXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBncm91cCBzZXZlcmFsIGNvbnRyb2xzIGFzIHdlbGwgYXMgbGFiZWxzICg8bGFiZWw+KSB3aXRoaW4gYSB3ZWIgZm9ybS4iKTsgaWYgdGhlcmUgaXMgbm8gY29udGFpbmluZyBlbGVtZW50IHdoZW4gdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlIGlzIHNldCwgdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4nfX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBmb3JtIGVsZW1lbnQgdGhhdCB0aGUgYDx0ZXh0YXJlYT5gIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgImZvcm0gb3duZXIiKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSB0aGUgYGlkYCBvZiBhIGZvcm0gZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGA8dGV4dGFyZWE+YCBlbGVtZW50IG11c3QgYmUgYSBkZXNjZW5kYW50IG9mIGEgZm9ybSBlbGVtZW50LiBUaGlzIGF0dHJpYnV0ZSBlbmFibGVzIHlvdSB0byBwbGFjZSBgPHRleHRhcmVhPmAgZWxlbWVudHMgYW55d2hlcmUgd2l0aGluIGEgZG9jdW1lbnQsIG5vdCBqdXN0IGFzIGRlc2NlbmRhbnRzIG9mIGZvcm0gZWxlbWVudHMuJ319LHtuYW1lOiJpbnB1dG1vZGUiLHZhbHVlU2V0OiJpbSJ9LHtuYW1lOiJtYXhsZW5ndGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzICh1bmljb2RlIGNvZGUgcG9pbnRzKSB0aGF0IHRoZSB1c2VyIGNhbiBlbnRlci4gSWYgdGhpcyB2YWx1ZSBpc24ndCBzcGVjaWZpZWQsIHRoZSB1c2VyIGNhbiBlbnRlciBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuIn19LHtuYW1lOiJtaW5sZW5ndGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzICh1bmljb2RlIGNvZGUgcG9pbnRzKSByZXF1aXJlZCB0aGF0IHRoZSB1c2VyIHNob3VsZCBlbnRlci4ifX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBuYW1lIG9mIHRoZSBjb250cm9sLiJ9fSx7bmFtZToicGxhY2Vob2xkZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0EgaGludCB0byB0aGUgdXNlciBvZiB3aGF0IGNhbiBiZSBlbnRlcmVkIGluIHRoZSBjb250cm9sLiBDYXJyaWFnZSByZXR1cm5zIG9yIGxpbmUtZmVlZHMgd2l0aGluIHRoZSBwbGFjZWhvbGRlciB0ZXh0IG11c3QgYmUgdHJlYXRlZCBhcyBsaW5lIGJyZWFrcyB3aGVuIHJlbmRlcmluZyB0aGUgaGludC5cblxuKipOb3RlOioqIFBsYWNlaG9sZGVycyBzaG91bGQgb25seSBiZSB1c2VkIHRvIHNob3cgYW4gZXhhbXBsZSBvZiB0aGUgdHlwZSBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIGVudGVyZWQgaW50byBhIGZvcm07IHRoZXkgYXJlIF9ub3RfIGEgc3Vic3RpdHV0ZSBmb3IgYSBwcm9wZXIgW2A8bGFiZWw+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xhYmVsICJUaGUgSFRNTCA8bGFiZWw+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGNhcHRpb24gZm9yIGFuIGl0ZW0gaW4gYSB1c2VyIGludGVyZmFjZS4iKSBlbGVtZW50IHRpZWQgdG8gdGhlIGlucHV0LiBTZWUgW0xhYmVscyBhbmQgcGxhY2Vob2xkZXJzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjTGFiZWxzX2FuZF9wbGFjZWhvbGRlcnMgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBpbiBbPGlucHV0PjogVGhlIElucHV0IChGb3JtIElucHV0KSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQgIlRoZSBIVE1MIDxpbnB1dD4gZWxlbWVudCBpcyB1c2VkIHRvIGNyZWF0ZSBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igd2ViLWJhc2VkIGZvcm1zIGluIG9yZGVyIHRvIGFjY2VwdCBkYXRhIGZyb20gdGhlIHVzZXI7IGEgd2lkZSB2YXJpZXR5IG9mIHR5cGVzIG9mIGlucHV0IGRhdGEgYW5kIGNvbnRyb2wgd2lkZ2V0cyBhcmUgYXZhaWxhYmxlLCBkZXBlbmRpbmcgb24gdGhlIGRldmljZSBhbmQgdXNlciBhZ2VudC4iKSBmb3IgYSBmdWxsIGV4cGxhbmF0aW9uLid9fSx7bmFtZToicmVhZG9ubHkiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIGNhbm5vdCBtb2RpZnkgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sLiBVbmxpa2UgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLCB0aGUgYHJlYWRvbmx5YCBhdHRyaWJ1dGUgZG9lcyBub3QgcHJldmVudCB0aGUgdXNlciBmcm9tIGNsaWNraW5nIG9yIHNlbGVjdGluZyBpbiB0aGUgY29udHJvbC4gVGhlIHZhbHVlIG9mIGEgcmVhZC1vbmx5IGNvbnRyb2wgaXMgc3RpbGwgc3VibWl0dGVkIHdpdGggdGhlIGZvcm0uIn19LHtuYW1lOiJyZXF1aXJlZCIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IHRoZSB1c2VyIG11c3QgZmlsbCBpbiBhIHZhbHVlIGJlZm9yZSBzdWJtaXR0aW5nIGEgZm9ybS4ifX0se25hbWU6InJvd3MiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBudW1iZXIgb2YgdmlzaWJsZSB0ZXh0IGxpbmVzIGZvciB0aGUgY29udHJvbC4ifX0se25hbWU6IndyYXAiLHZhbHVlU2V0OiJ3IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgaG93IHRoZSBjb250cm9sIHdyYXBzIHRleHQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG5cbiogICBgaGFyZGA6IFRoZSBicm93c2VyIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBsaW5lIGJyZWFrcyAoQ1IrTEYpIHNvIHRoYXQgZWFjaCBsaW5lIGhhcyBubyBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sOyB0aGUgYGNvbHNgIGF0dHJpYnV0ZSBtdXN0IGFsc28gYmUgc3BlY2lmaWVkIGZvciB0aGlzIHRvIHRha2UgZWZmZWN0LlxuKiAgIGBzb2Z0YDogVGhlIGJyb3dzZXIgZW5zdXJlcyB0aGF0IGFsbCBsaW5lIGJyZWFrcyBpbiB0aGUgdmFsdWUgY29uc2lzdCBvZiBhIENSK0xGIHBhaXIsIGJ1dCBkb2VzIG5vdCBpbnNlcnQgYW55IGFkZGl0aW9uYWwgbGluZSBicmVha3MuXG4qICAgYG9mZmAgOiBMaWtlIGBzb2Z0YCBidXQgY2hhbmdlcyBhcHBlYXJhbmNlIHRvIGB3aGl0ZS1zcGFjZTogcHJlYCBzbyBsaW5lIHNlZ21lbnRzIGV4Y2VlZGluZyBgY29sc2AgYXJlIG5vdCB3cmFwcGVkIGFuZCB0aGUgYDx0ZXh0YXJlYT5gIGJlY29tZXMgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5cbklmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIGBzb2Z0YCBpcyBpdHMgZGVmYXVsdCB2YWx1ZS4ifX0se25hbWU6ImF1dG9jYXBpdGFsaXplIixkZXNjcmlwdGlvbjoiVGhpcyBpcyBhIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUgc3VwcG9ydGVkIGJ5IFdlYktpdCBvbiBpT1MgKHRoZXJlZm9yZSBuZWFybHkgYWxsIGJyb3dzZXJzIHJ1bm5pbmcgb24gaU9TLCBpbmNsdWRpbmcgU2FmYXJpLCBGaXJlZm94LCBhbmQgQ2hyb21lKSwgd2hpY2ggY29udHJvbHMgd2hldGhlciBhbmQgaG93IHRoZSB0ZXh0IHZhbHVlIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGNhcGl0YWxpemVkIGFzIGl0IGlzIGVudGVyZWQvZWRpdGVkIGJ5IHRoZSB1c2VyLiBUaGUgbm9uLWRlcHJlY2F0ZWQgdmFsdWVzIGFyZSBhdmFpbGFibGUgaW4gaU9TIDUgYW5kIGxhdGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOlxuXG4qICAgYG5vbmVgOiBDb21wbGV0ZWx5IGRpc2FibGVzIGF1dG9tYXRpYyBjYXBpdGFsaXphdGlvbi5cbiogICBgc2VudGVuY2VzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2Ygc2VudGVuY2VzLlxuKiAgIGB3b3Jkc2A6IEF1dG9tYXRpY2FsbHkgY2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyIG9mIHdvcmRzLlxuKiAgIGBjaGFyYWN0ZXJzYDogQXV0b21hdGljYWxseSBjYXBpdGFsaXplIGFsbCBjaGFyYWN0ZXJzLlxuKiAgIGBvbmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuXG4qICAgYG9mZmA6IERlcHJlY2F0ZWQgc2luY2UgaU9TIDUuIn0se25hbWU6InNwZWxsY2hlY2siLGRlc2NyaXB0aW9uOiJTcGVjaWZpZXMgd2hldGhlciB0aGUgYDx0ZXh0YXJlYT5gIGlzIHN1YmplY3QgdG8gc3BlbGwgY2hlY2tpbmcgYnkgdGhlIHVuZGVybHlpbmcgYnJvd3Nlci9PUy4gdGhlIHZhbHVlIGNhbiBiZTpcblxuKiAgIGB0cnVlYDogSW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBpdHMgc3BlbGxpbmcgYW5kIGdyYW1tYXIgY2hlY2tlZC5cbiogICBgZGVmYXVsdGAgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyB0byBhY3QgYWNjb3JkaW5nIHRvIGEgZGVmYXVsdCBiZWhhdmlvciwgcG9zc2libHkgYmFzZWQgb24gdGhlIHBhcmVudCBlbGVtZW50J3Mgb3duIGBzcGVsbGNoZWNrYCB2YWx1ZS5cbiogICBgZmFsc2VgIDogSW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIG5vdCBiZSBzcGVsbCBjaGVja2VkLiJ9XSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGV4dGFyZWEifV19LHtuYW1lOiJvdXRwdXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBvdXRwdXQgZWxlbWVudCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYSBjYWxjdWxhdGlvbiBwZXJmb3JtZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBvciB0aGUgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uIn0sYXR0cmlidXRlczpbe25hbWU6ImZvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBvdGhlciBlbGVtZW50c+KAmSBbYGlkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pZClzLCBpbmRpY2F0aW5nIHRoYXQgdGhvc2UgZWxlbWVudHMgY29udHJpYnV0ZWQgaW5wdXQgdmFsdWVzIHRvIChvciBvdGhlcndpc2UgYWZmZWN0ZWQpIHRoZSBjYWxjdWxhdGlvbi4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBbZm9ybSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSkgdGhhdCB0aGlzIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgImZvcm0gb3duZXIiKS4gVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBgaWRgIG9mIGEgZm9ybSBlbGVtZW50IGluIHRoZSBzYW1lIGRvY3VtZW50LiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgb3V0cHV0IGVsZW1lbnQgbXVzdCBiZSBhIGRlc2NlbmRhbnQgb2YgYSBmb3JtIGVsZW1lbnQuIFRoaXMgYXR0cmlidXRlIGVuYWJsZXMgeW91IHRvIHBsYWNlIG91dHB1dCBlbGVtZW50cyBhbnl3aGVyZSB3aXRoaW4gYSBkb2N1bWVudCwgbm90IGp1c3QgYXMgZGVzY2VuZGFudHMgb2YgdGhlaXIgZm9ybSBlbGVtZW50cy4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBuYW1lIG9mIHRoZSBlbGVtZW50LCBleHBvc2VkIGluIHRoZSBbYEhUTUxGb3JtRWxlbWVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRm9ybUVsZW1lbnQgIlRoZSBIVE1MRm9ybUVsZW1lbnQgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSA8Zm9ybT4gZWxlbWVudCBpbiB0aGUgRE9NOyBpdCBhbGxvd3MgYWNjZXNzIHRvIGFuZCBpbiBzb21lIGNhc2VzIG1vZGlmaWNhdGlvbiBvZiBhc3BlY3RzIG9mIHRoZSBmb3JtLCBhcyB3ZWxsIGFzIGFjY2VzcyB0byBpdHMgY29tcG9uZW50IGVsZW1lbnRzLiIpIEFQSS4nfX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9vdXRwdXQifV19LHtuYW1lOiJwcm9ncmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHByb2dyZXNzIGVsZW1lbnQgcmVwcmVzZW50cyB0aGUgY29tcGxldGlvbiBwcm9ncmVzcyBvZiBhIHRhc2suIFRoZSBwcm9ncmVzcyBpcyBlaXRoZXIgaW5kZXRlcm1pbmF0ZSwgaW5kaWNhdGluZyB0aGF0IHByb2dyZXNzIGlzIGJlaW5nIG1hZGUgYnV0IHRoYXQgaXQgaXMgbm90IGNsZWFyIGhvdyBtdWNoIG1vcmUgd29yayByZW1haW5zIHRvIGJlIGRvbmUgYmVmb3JlIHRoZSB0YXNrIGlzIGNvbXBsZXRlIChlLmcuIGJlY2F1c2UgdGhlIHRhc2sgaXMgd2FpdGluZyBmb3IgYSByZW1vdGUgaG9zdCB0byByZXNwb25kKSwgb3IgdGhlIHByb2dyZXNzIGlzIGEgbnVtYmVyIGluIHRoZSByYW5nZSB6ZXJvIHRvIGEgbWF4aW11bSwgZ2l2aW5nIHRoZSBmcmFjdGlvbiBvZiB3b3JrIHRoYXQgaGFzIHNvIGZhciBiZWVuIGNvbXBsZXRlZC4ifSxhdHRyaWJ1dGVzOlt7bmFtZToidmFsdWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBob3cgbXVjaCBvZiB0aGUgdGFzayB0aGF0IGhhcyBiZWVuIGNvbXBsZXRlZC4gSXQgbXVzdCBiZSBhIHZhbGlkIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZXR3ZWVuIDAgYW5kIGBtYXhgLCBvciBiZXR3ZWVuIDAgYW5kIDEgaWYgYG1heGAgaXMgb21pdHRlZC4gSWYgdGhlcmUgaXMgbm8gYHZhbHVlYCBhdHRyaWJ1dGUsIHRoZSBwcm9ncmVzcyBiYXIgaXMgaW5kZXRlcm1pbmF0ZTsgdGhpcyBpbmRpY2F0ZXMgdGhhdCBhbiBhY3Rpdml0eSBpcyBvbmdvaW5nIHdpdGggbm8gaW5kaWNhdGlvbiBvZiBob3cgbG9uZyBpdCBpcyBleHBlY3RlZCB0byB0YWtlLiJ9fSx7bmFtZToibWF4IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGlzIGF0dHJpYnV0ZSBkZXNjcmliZXMgaG93IG11Y2ggd29yayB0aGUgdGFzayBpbmRpY2F0ZWQgYnkgdGhlIGBwcm9ncmVzc2AgZWxlbWVudCByZXF1aXJlcy4gVGhlIGBtYXhgIGF0dHJpYnV0ZSwgaWYgcHJlc2VudCwgbXVzdCBoYXZlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGJlIGEgdmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiJ9fV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Byb2dyZXNzIn1dfSx7bmFtZToibWV0ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZXRlciBlbGVtZW50IHJlcHJlc2VudHMgYSBzY2FsYXIgbWVhc3VyZW1lbnQgd2l0aGluIGEga25vd24gcmFuZ2UsIG9yIGEgZnJhY3Rpb25hbCB2YWx1ZTsgZm9yIGV4YW1wbGUgZGlzayB1c2FnZSwgdGhlIHJlbGV2YW5jZSBvZiBhIHF1ZXJ5IHJlc3VsdCwgb3IgdGhlIGZyYWN0aW9uIG9mIGEgdm90aW5nIHBvcHVsYXRpb24gdG8gaGF2ZSBzZWxlY3RlZCBhIHBhcnRpY3VsYXIgY2FuZGlkYXRlLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJ2YWx1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGN1cnJlbnQgbnVtZXJpYyB2YWx1ZS4gVGhpcyBtdXN0IGJlIGJldHdlZW4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIChgbWluYCBhdHRyaWJ1dGUgYW5kIGBtYXhgIGF0dHJpYnV0ZSkgaWYgdGhleSBhcmUgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCBvciBtYWxmb3JtZWQsIHRoZSB2YWx1ZSBpcyAwLiBJZiBzcGVjaWZpZWQsIGJ1dCBub3Qgd2l0aGluIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgYG1pbmAgYXR0cmlidXRlIGFuZCBgbWF4YCBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbmVhcmVzdCBlbmQgb2YgdGhlIHJhbmdlLlxuXG4qKlVzYWdlIG5vdGU6KiogVW5sZXNzIHRoZSBgdmFsdWVgIGF0dHJpYnV0ZSBpcyBiZXR3ZWVuIGAwYCBhbmQgYDFgIChpbmNsdXNpdmUpLCB0aGUgYG1pbmAgYW5kIGBtYXhgIGF0dHJpYnV0ZXMgc2hvdWxkIGRlZmluZSB0aGUgcmFuZ2Ugc28gdGhhdCB0aGUgYHZhbHVlYCBhdHRyaWJ1dGUncyB2YWx1ZSBpcyB3aXRoaW4gaXQuIn19LHtuYW1lOiJtaW4iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBsb3dlciBudW1lcmljIGJvdW5kIG9mIHRoZSBtZWFzdXJlZCByYW5nZS4gVGhpcyBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSAoYG1heGAgYXR0cmlidXRlKSwgaWYgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCwgdGhlIG1pbmltdW0gdmFsdWUgaXMgMC4ifX0se25hbWU6Im1heCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVwcGVyIG51bWVyaWMgYm91bmQgb2YgdGhlIG1lYXN1cmVkIHJhbmdlLiBUaGlzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlIChgbWluYCBhdHRyaWJ1dGUpLCBpZiBzcGVjaWZpZWQuIElmIHVuc3BlY2lmaWVkLCB0aGUgbWF4aW11bSB2YWx1ZSBpcyAxLiJ9fSx7bmFtZToibG93IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXBwZXIgbnVtZXJpYyBib3VuZCBvZiB0aGUgbG93IGVuZCBvZiB0aGUgbWVhc3VyZWQgcmFuZ2UuIFRoaXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWUgKGBtaW5gIGF0dHJpYnV0ZSksIGFuZCBpdCBhbHNvIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBoaWdoIHZhbHVlIGFuZCBtYXhpbXVtIHZhbHVlIChgaGlnaGAgYXR0cmlidXRlIGFuZCBgbWF4YCBhdHRyaWJ1dGUsIHJlc3BlY3RpdmVseSksIGlmIGFueSBhcmUgc3BlY2lmaWVkLiBJZiB1bnNwZWNpZmllZCwgb3IgaWYgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlLCB0aGUgYGxvd2AgdmFsdWUgaXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gdmFsdWUuIn19LHtuYW1lOiJoaWdoIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgbG93ZXIgbnVtZXJpYyBib3VuZCBvZiB0aGUgaGlnaCBlbmQgb2YgdGhlIG1lYXN1cmVkIHJhbmdlLiBUaGlzIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlIChgbWF4YCBhdHRyaWJ1dGUpLCBhbmQgaXQgYWxzbyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbG93IHZhbHVlIGFuZCBtaW5pbXVtIHZhbHVlIChgbG93YCBhdHRyaWJ1dGUgYW5kICoqbWluKiogYXR0cmlidXRlLCByZXNwZWN0aXZlbHkpLCBpZiBhbnkgYXJlIHNwZWNpZmllZC4gSWYgdW5zcGVjaWZpZWQsIG9yIGlmIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSwgdGhlIGBoaWdoYCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSB2YWx1ZS4ifX0se25hbWU6Im9wdGltdW0iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgb3B0aW1hbCBudW1lcmljIHZhbHVlLiBJdCBtdXN0IGJlIHdpdGhpbiB0aGUgcmFuZ2UgKGFzIGRlZmluZWQgYnkgdGhlIGBtaW5gIGF0dHJpYnV0ZSBhbmQgYG1heGAgYXR0cmlidXRlKS4gV2hlbiB1c2VkIHdpdGggdGhlIGBsb3dgIGF0dHJpYnV0ZSBhbmQgYGhpZ2hgIGF0dHJpYnV0ZSwgaXQgZ2l2ZXMgYW4gaW5kaWNhdGlvbiB3aGVyZSBhbG9uZyB0aGUgcmFuZ2UgaXMgY29uc2lkZXJlZCBwcmVmZXJhYmxlLiBGb3IgZXhhbXBsZSwgaWYgaXQgaXMgYmV0d2VlbiB0aGUgYG1pbmAgYXR0cmlidXRlIGFuZCB0aGUgYGxvd2AgYXR0cmlidXRlLCB0aGVuIHRoZSBsb3dlciByYW5nZSBpcyBjb25zaWRlcmVkIHByZWZlcnJlZC4ifX0se25hbWU6ImZvcm0iLGRlc2NyaXB0aW9uOiJUaGlzIGF0dHJpYnV0ZSBhc3NvY2lhdGVzIHRoZSBlbGVtZW50IHdpdGggYSBgZm9ybWAgZWxlbWVudCB0aGF0IGhhcyBvd25lcnNoaXAgb2YgdGhlIGBtZXRlcmAgZWxlbWVudC4gRm9yIGV4YW1wbGUsIGEgYG1ldGVyYCBtaWdodCBiZSBkaXNwbGF5aW5nIGEgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBhbiBgaW5wdXRgIGVsZW1lbnQgb2YgYHR5cGVgIF9udW1iZXJfLiBUaGlzIGF0dHJpYnV0ZSBpcyBvbmx5IHVzZWQgaWYgdGhlIGBtZXRlcmAgZWxlbWVudCBpcyBiZWluZyB1c2VkIGFzIGEgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnQ7IGV2ZW4gdGhlbiwgaXQgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIGVsZW1lbnQgYXBwZWFycyBhcyBhIGRlc2NlbmRhbnQgb2YgYSBgZm9ybWAgZWxlbWVudC4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21ldGVyIn1dfSx7bmFtZToiZmllbGRzZXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBmaWVsZHNldCBlbGVtZW50IHJlcHJlc2VudHMgYSBzZXQgb2YgZm9ybSBjb250cm9scyBvcHRpb25hbGx5IGdyb3VwZWQgdW5kZXIgYSBjb21tb24gbmFtZS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToiZGlzYWJsZWQiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJZiB0aGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCwgYWxsIGZvcm0gY29udHJvbHMgdGhhdCBhcmUgZGVzY2VuZGFudHMgb2YgdGhlIGA8ZmllbGRzZXQ+YCwgYXJlIGRpc2FibGVkLCBtZWFuaW5nIHRoZXkgYXJlIG5vdCBlZGl0YWJsZSBhbmQgd29uJ3QgYmUgc3VibWl0dGVkIGFsb25nIHdpdGggdGhlIGA8Zm9ybT5gLiBUaGV5IHdvbid0IHJlY2VpdmUgYW55IGJyb3dzaW5nIGV2ZW50cywgbGlrZSBtb3VzZSBjbGlja3Mgb3IgZm9jdXMtcmVsYXRlZCBldmVudHMuIEJ5IGRlZmF1bHQgYnJvd3NlcnMgZGlzcGxheSBzdWNoIGNvbnRyb2xzIGdyYXllZCBvdXQuIE5vdGUgdGhhdCBmb3JtIGVsZW1lbnRzIGluc2lkZSB0aGUgW2A8bGVnZW5kPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9sZWdlbmQgXCJUaGUgSFRNTCA8bGVnZW5kPiBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGZvciB0aGUgY29udGVudCBvZiBpdHMgcGFyZW50IDxmaWVsZHNldD4uXCIpIGVsZW1lbnQgd29uJ3QgYmUgZGlzYWJsZWQuIn19LHtuYW1lOiJmb3JtIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidUaGlzIGF0dHJpYnV0ZSB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlIG9mIGEgW2A8Zm9ybT5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZm9ybSAiVGhlIEhUTUwgPGZvcm0+IGVsZW1lbnQgcmVwcmVzZW50cyBhIGRvY3VtZW50IHNlY3Rpb24gdGhhdCBjb250YWlucyBpbnRlcmFjdGl2ZSBjb250cm9scyBmb3Igc3VibWl0dGluZyBpbmZvcm1hdGlvbiB0byBhIHdlYiBzZXJ2ZXIuIikgZWxlbWVudCB5b3Ugd2FudCB0aGUgYDxmaWVsZHNldD5gIHRvIGJlIHBhcnQgb2YsIGV2ZW4gaWYgaXQgaXMgbm90IGluc2lkZSB0aGUgZm9ybS4nfX0se25hbWU6Im5hbWUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ3JvdXAuXG5cbioqTm90ZSoqOiBUaGUgY2FwdGlvbiBmb3IgdGhlIGZpZWxkc2V0IGlzIGdpdmVuIGJ5IHRoZSBmaXJzdCBbYDxsZWdlbmQ+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xlZ2VuZCAiVGhlIEhUTUwgPGxlZ2VuZD4gZWxlbWVudCByZXByZXNlbnRzIGEgY2FwdGlvbiBmb3IgdGhlIGNvbnRlbnQgb2YgaXRzIHBhcmVudCA8ZmllbGRzZXQ+LiIpIGVsZW1lbnQgbmVzdGVkIGluc2lkZSBpdC4nfX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9maWVsZHNldCJ9XX0se25hbWU6ImxlZ2VuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxlZ2VuZCBlbGVtZW50IHJlcHJlc2VudHMgYSBjYXB0aW9uIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udGVudHMgb2YgdGhlIGxlZ2VuZCBlbGVtZW50J3MgcGFyZW50IGZpZWxkc2V0IGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9sZWdlbmQifV19LHtuYW1lOiJkZXRhaWxzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGV0YWlscyBlbGVtZW50IHJlcHJlc2VudHMgYSBkaXNjbG9zdXJlIHdpZGdldCBmcm9tIHdoaWNoIHRoZSB1c2VyIGNhbiBvYnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvciBjb250cm9scy4ifSxhdHRyaWJ1dGVzOlt7bmFtZToib3BlbiIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBkZXRhaWxzIOKAlCB0aGF0IGlzLCB0aGUgY29udGVudHMgb2YgdGhlIGA8ZGV0YWlscz5gIGVsZW1lbnQg4oCUIGFyZSBjdXJyZW50bHkgdmlzaWJsZS4gVGhlIGRlZmF1bHQsIGBmYWxzZWAsIG1lYW5zIHRoZSBkZXRhaWxzIGFyZSBub3QgdmlzaWJsZS4ifX1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9kZXRhaWxzIn1dfSx7bmFtZToic3VtbWFyeSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHN1bW1hcnkgZWxlbWVudCByZXByZXNlbnRzIGEgc3VtbWFyeSwgY2FwdGlvbiwgb3IgbGVnZW5kIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udGVudHMgb2YgdGhlIHN1bW1hcnkgZWxlbWVudCdzIHBhcmVudCBkZXRhaWxzIGVsZW1lbnQsIGlmIGFueS4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zdW1tYXJ5In1dfSx7bmFtZToiZGlhbG9nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgZGlhbG9nIGVsZW1lbnQgcmVwcmVzZW50cyBhIHBhcnQgb2YgYW4gYXBwbGljYXRpb24gdGhhdCBhIHVzZXIgaW50ZXJhY3RzIHdpdGggdG8gcGVyZm9ybSBhIHRhc2ssIGZvciBleGFtcGxlIGEgZGlhbG9nIGJveCwgaW5zcGVjdG9yLCBvciB3aW5kb3cuIn0sYXR0cmlidXRlczpbe25hbWU6Im9wZW4iLGRlc2NyaXB0aW9uOiJJbmRpY2F0ZXMgdGhhdCB0aGUgZGlhbG9nIGlzIGFjdGl2ZSBhbmQgYXZhaWxhYmxlIGZvciBpbnRlcmFjdGlvbi4gV2hlbiB0aGUgYG9wZW5gIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LCB0aGUgZGlhbG9nIHNob3VsZG4ndCBiZSBzaG93biB0byB0aGUgdXNlci4ifV0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2RpYWxvZyJ9XX0se25hbWU6InNjcmlwdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHNjcmlwdCBlbGVtZW50IGFsbG93cyBhdXRob3JzIHRvIGluY2x1ZGUgZHluYW1pYyBzY3JpcHQgYW5kIGRhdGEgYmxvY2tzIGluIHRoZWlyIGRvY3VtZW50cy4gVGhlIGVsZW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGNvbnRlbnQgZm9yIHRoZSB1c2VyLiJ9LGF0dHJpYnV0ZXM6W3tuYW1lOiJzcmMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgVVJJIG9mIGFuIGV4dGVybmFsIHNjcmlwdDsgdGhpcyBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBlbWJlZGRpbmcgYSBzY3JpcHQgZGlyZWN0bHkgd2l0aGluIGEgZG9jdW1lbnQuXG5cbklmIGEgYHNjcmlwdGAgZWxlbWVudCBoYXMgYSBgc3JjYCBhdHRyaWJ1dGUgc3BlY2lmaWVkLCBpdCBzaG91bGQgbm90IGhhdmUgYSBzY3JpcHQgZW1iZWRkZWQgaW5zaWRlIGl0cyB0YWdzLiJ9fSx7bmFtZToidHlwZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHNjcmlwdCByZXByZXNlbnRlZC4gVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHdpbGwgYmUgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllczpcblxuKiAgICoqT21pdHRlZCBvciBhIEphdmFTY3JpcHQgTUlNRSB0eXBlOioqIEZvciBIVE1MNS1jb21wbGlhbnQgYnJvd3NlcnMgdGhpcyBpbmRpY2F0ZXMgdGhlIHNjcmlwdCBpcyBKYXZhU2NyaXB0LiBIVE1MNSBzcGVjaWZpY2F0aW9uIHVyZ2VzIGF1dGhvcnMgdG8gb21pdCB0aGUgYXR0cmlidXRlIHJhdGhlciB0aGFuIHByb3ZpZGUgYSByZWR1bmRhbnQgTUlNRSB0eXBlLiBJbiBlYXJsaWVyIGJyb3dzZXJzLCB0aGlzIGlkZW50aWZpZWQgdGhlIHNjcmlwdGluZyBsYW5ndWFnZSBvZiB0aGUgZW1iZWRkZWQgb3IgaW1wb3J0ZWQgKHZpYSB0aGUgYHNyY2AgYXR0cmlidXRlKSBjb2RlLiBKYXZhU2NyaXB0IE1JTUUgdHlwZXMgYXJlIFtsaXN0ZWQgaW4gdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvTUlNRV90eXBlcyNKYXZhU2NyaXB0X3R5cGVzKS5cbiogICAqKmBtb2R1bGVgOioqIEZvciBIVE1MNS1jb21wbGlhbnQgYnJvd3NlcnMgdGhlIGNvZGUgaXMgdHJlYXRlZCBhcyBhIEphdmFTY3JpcHQgbW9kdWxlLiBUaGUgcHJvY2Vzc2luZyBvZiB0aGUgc2NyaXB0IGNvbnRlbnRzIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgYGNoYXJzZXRgIGFuZCBgZGVmZXJgIGF0dHJpYnV0ZXMuIEZvciBpbmZvcm1hdGlvbiBvbiB1c2luZyBgbW9kdWxlYCwgc2VlIFtFUzYgaW4gRGVwdGg6IE1vZHVsZXNdKGh0dHBzOi8vaGFja3MubW96aWxsYS5vcmcvMjAxNS8wOC9lczYtaW4tZGVwdGgtbW9kdWxlcy8pLiBDb2RlIG1heSBiZWhhdmUgZGlmZmVyZW50bHkgd2hlbiB0aGUgYG1vZHVsZWAga2V5d29yZCBpcyB1c2VkLlxuKiAgICoqQW55IG90aGVyIHZhbHVlOioqIFRoZSBlbWJlZGRlZCBjb250ZW50IGlzIHRyZWF0ZWQgYXMgYSBkYXRhIGJsb2NrIHdoaWNoIHdvblwndCBiZSBwcm9jZXNzZWQgYnkgdGhlIGJyb3dzZXIuIERldmVsb3BlcnMgbXVzdCB1c2UgYSB2YWxpZCBNSU1FIHR5cGUgdGhhdCBpcyBub3QgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZSB0byBkZW5vdGUgZGF0YSBibG9ja3MuIFRoZSBgc3JjYCBhdHRyaWJ1dGUgd2lsbCBiZSBpZ25vcmVkLlxuXG4qKk5vdGU6KiogaW4gRmlyZWZveCB5b3UgY291bGQgc3BlY2lmeSB0aGUgdmVyc2lvbiBvZiBKYXZhU2NyaXB0IGNvbnRhaW5lZCBpbiBhIGA8c2NyaXB0PmAgZWxlbWVudCBieSBpbmNsdWRpbmcgYSBub24tc3RhbmRhcmQgYHZlcnNpb25gIHBhcmFtZXRlciBpbnNpZGUgdGhlIGB0eXBlYCBhdHRyaWJ1dGUg4oCUIGZvciBleGFtcGxlIGB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQ7dmVyc2lvbj0xLjgiYC4gVGhpcyBoYXMgYmVlbiByZW1vdmVkIGluIEZpcmVmb3ggNTkgKHNlZSBbYnVnwqAxNDI4NzQ1XShodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI4NzQ1ICJGSVhFRDogUmVtb3ZlIHN1cHBvcnQgZm9yIHZlcnNpb24gcGFyYW1ldGVyIGZyb20gc2NyaXB0IGxvYWRlciIpKS4nfX0se25hbWU6ImNoYXJzZXQifSx7bmFtZToiYXN5bmMiLHZhbHVlU2V0OiJ2IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOmBUaGlzIGlzIGEgQm9vbGVhbiBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGF0IHRoZSBicm93c2VyIHNob3VsZCwgaWYgcG9zc2libGUsIGxvYWQgdGhlIHNjcmlwdCBhc3luY2hyb25vdXNseS4KClRoaXMgYXR0cmlidXRlIG11c3Qgbm90IGJlIHVzZWQgaWYgdGhlIFxgc3JjXGAgYXR0cmlidXRlIGlzIGFic2VudCAoaS5lLiBmb3IgaW5saW5lIHNjcmlwdHMpLiBJZiBpdCBpcyBpbmNsdWRlZCBpbiB0aGlzIGNhc2UgaXQgd2lsbCBoYXZlIG5vIGVmZmVjdC4KCkJyb3dzZXJzIHVzdWFsbHkgYXNzdW1lIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIGFuZCBsb2FkIHNjcmlwdHMgc3luY2hyb25vdXNseSwgKGkuZS4gXGBhc3luYz0iZmFsc2UiXGApIGR1cmluZyBIVE1MIHBhcnNpbmcuCgpEeW5hbWljYWxseSBpbnNlcnRlZCBzY3JpcHRzICh1c2luZyBbXGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KClcYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L2NyZWF0ZUVsZW1lbnQgIkluIGFuIEhUTUwgZG9jdW1lbnQsIHRoZSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCkgbWV0aG9kIGNyZWF0ZXMgdGhlIEhUTUwgZWxlbWVudCBzcGVjaWZpZWQgYnkgdGFnTmFtZSwgb3IgYW4gSFRNTFVua25vd25FbGVtZW50IGlmIHRhZ05hbWUgaXNuJ3QgcmVjb2duaXplZC4iKSkgbG9hZCBhc3luY2hyb25vdXNseSBieSBkZWZhdWx0LCBzbyB0byB0dXJuIG9uIHN5bmNocm9ub3VzIGxvYWRpbmcgKGkuZS4gc2NyaXB0cyBsb2FkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgaW5zZXJ0ZWQpIHNldCBcYGFzeW5jPSJmYWxzZSJcYC4KClNlZSBbQnJvd3NlciBjb21wYXRpYmlsaXR5XSgjQnJvd3Nlcl9jb21wYXRpYmlsaXR5KSBmb3Igbm90ZXMgb24gYnJvd3NlciBzdXBwb3J0LiBTZWUgYWxzbyBbQXN5bmMgc2NyaXB0cyBmb3IgYXNtLmpzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dhbWVzL1RlY2huaXF1ZXMvQXN5bmNfc2NyaXB0cykuYH19LHtuYW1lOiJkZWZlciIsdmFsdWVTZXQ6InYiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1RoaXMgQm9vbGVhbiBhdHRyaWJ1dGUgaXMgc2V0IHRvIGluZGljYXRlIHRvIGEgYnJvd3NlciB0aGF0IHRoZSBzY3JpcHQgaXMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBiZWVuIHBhcnNlZCwgYnV0IGJlZm9yZSBmaXJpbmcgW2BET01Db250ZW50TG9hZGVkYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL0RPTUNvbnRlbnRMb2FkZWQgIi9lbi1VUy9kb2NzL1dlYi9FdmVudHMvRE9NQ29udGVudExvYWRlZCIpLlxuXG5TY3JpcHRzIHdpdGggdGhlIGBkZWZlcmAgYXR0cmlidXRlIHdpbGwgcHJldmVudCB0aGUgYERPTUNvbnRlbnRMb2FkZWRgIGV2ZW50IGZyb20gZmlyaW5nIHVudGlsIHRoZSBzY3JpcHQgaGFzIGxvYWRlZCBhbmQgZmluaXNoZWQgZXZhbHVhdGluZy5cblxuVGhpcyBhdHRyaWJ1dGUgbXVzdCBub3QgYmUgdXNlZCBpZiB0aGUgYHNyY2AgYXR0cmlidXRlIGlzIGFic2VudCAoaS5lLiBmb3IgaW5saW5lIHNjcmlwdHMpLCBpbiB0aGlzIGNhc2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QuXG5cblRvIGFjaGlldmUgYSBzaW1pbGFyIGVmZmVjdCBmb3IgZHluYW1pY2FsbHkgaW5zZXJ0ZWQgc2NyaXB0cyB1c2UgYGFzeW5jPSJmYWxzZSJgIGluc3RlYWQuIFNjcmlwdHMgd2l0aCB0aGUgYGRlZmVyYCBhdHRyaWJ1dGUgd2lsbCBleGVjdXRlIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhciBpbiB0aGUgZG9jdW1lbnQuJ319LHtuYW1lOiJjcm9zc29yaWdpbiIsdmFsdWVTZXQ6InhvIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidOb3JtYWwgYHNjcmlwdGAgZWxlbWVudHMgcGFzcyBtaW5pbWFsIGluZm9ybWF0aW9uIHRvIHRoZSBbYHdpbmRvdy5vbmVycm9yYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dsb2JhbEV2ZW50SGFuZGxlcnMvb25lcnJvciAiVGhlIG9uZXJyb3IgcHJvcGVydHkgb2YgdGhlIEdsb2JhbEV2ZW50SGFuZGxlcnMgbWl4aW4gaXMgYW4gRXZlbnRIYW5kbGVyIHRoYXQgcHJvY2Vzc2VzIGVycm9yIGV2ZW50cy4iKSBmb3Igc2NyaXB0cyB3aGljaCBkbyBub3QgcGFzcyB0aGUgc3RhbmRhcmQgW0NPUlNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvQ09SUyAiQ09SUzogQ09SUyAoQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcpIGlzIGEgc3lzdGVtLCBjb25zaXN0aW5nIG9mIHRyYW5zbWl0dGluZyBIVFRQIGhlYWRlcnMsIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGJyb3dzZXJzIGJsb2NrIGZyb250ZW5kIEphdmFTY3JpcHQgY29kZSBmcm9tIGFjY2Vzc2luZyByZXNwb25zZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy4iKSBjaGVja3MuIFRvIGFsbG93IGVycm9yIGxvZ2dpbmcgZm9yIHNpdGVzIHdoaWNoIHVzZSBhIHNlcGFyYXRlIGRvbWFpbiBmb3Igc3RhdGljIG1lZGlhLCB1c2UgdGhpcyBhdHRyaWJ1dGUuIFNlZSBbQ09SUyBzZXR0aW5ncyBhdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIGEgbW9yZSBkZXNjcmlwdGl2ZSBleHBsYW5hdGlvbiBvZiBpdHMgdmFsaWQgYXJndW1lbnRzLid9fSx7bmFtZToibm9uY2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgY3J5cHRvZ3JhcGhpYyBub25jZSAobnVtYmVyIHVzZWQgb25jZSkgdG8gd2hpdGVsaXN0IGlubGluZSBzY3JpcHRzIGluIGEgW3NjcmlwdC1zcmMgQ29udGVudC1TZWN1cml0eS1Qb2xpY3ldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LVNlY3VyaXR5LVBvbGljeS9zY3JpcHQtc3JjKS4gVGhlIHNlcnZlciBtdXN0IGdlbmVyYXRlIGEgdW5pcXVlIG5vbmNlIHZhbHVlIGVhY2ggdGltZSBpdCB0cmFuc21pdHMgYSBwb2xpY3kuIEl0IGlzIGNyaXRpY2FsIHRvIHByb3ZpZGUgYSBub25jZSB0aGF0IGNhbm5vdCBiZSBndWVzc2VkIGFzIGJ5cGFzc2luZyBhIHJlc291cmNlJ3MgcG9saWN5IGlzIG90aGVyd2lzZSB0cml2aWFsLiJ9fSx7bmFtZToiaW50ZWdyaXR5IixkZXNjcmlwdGlvbjoiVGhpcyBhdHRyaWJ1dGUgY29udGFpbnMgaW5saW5lIG1ldGFkYXRhIHRoYXQgYSB1c2VyIGFnZW50IGNhbiB1c2UgdG8gdmVyaWZ5IHRoYXQgYSBmZXRjaGVkIHJlc291cmNlIGhhcyBiZWVuIGRlbGl2ZXJlZCBmcmVlIG9mIHVuZXhwZWN0ZWQgbWFuaXB1bGF0aW9uLiBTZWUgW1N1YnJlc291cmNlIEludGVncml0eV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU3VicmVzb3VyY2VfSW50ZWdyaXR5KS4ifSx7bmFtZToibm9tb2R1bGUiLGRlc2NyaXB0aW9uOiJUaGlzIEJvb2xlYW4gYXR0cmlidXRlIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzY3JpcHQgc2hvdWxkIG5vdCBiZSBleGVjdXRlZCBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgW0VTMjAxNSBtb2R1bGVzXShodHRwczovL2hhY2tzLm1vemlsbGEub3JnLzIwMTUvMDgvZXM2LWluLWRlcHRoLW1vZHVsZXMvKSDigJQgaW4gZWZmZWN0LCB0aGlzIGNhbiBiZSB1c2VkIHRvIHNlcnZlIGZhbGxiYWNrIHNjcmlwdHMgdG8gb2xkZXIgYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBtb2R1bGFyIEphdmFTY3JpcHQgY29kZS4ifSx7bmFtZToicmVmZXJyZXJwb2xpY3kiLGRlc2NyaXB0aW9uOidJbmRpY2F0ZXMgd2hpY2ggW3JlZmVycmVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvcmVmZXJyZXIpIHRvIHNlbmQgd2hlbiBmZXRjaGluZyB0aGUgc2NyaXB0LCBvciByZXNvdXJjZXMgZmV0Y2hlZCBieSB0aGUgc2NyaXB0OlxuXG4qICAgYG5vLXJlZmVycmVyYDogVGhlIFtgUmVmZXJlcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcmVyICJUaGUgUmVmZXJlciByZXF1ZXN0IGhlYWRlciBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgd2ViIHBhZ2UgZnJvbSB3aGljaCBhIGxpbmsgdG8gdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgcGFnZSB3YXMgZm9sbG93ZWQuIFRoZSBSZWZlcmVyIGhlYWRlciBhbGxvd3Mgc2VydmVycyB0byBpZGVudGlmeSB3aGVyZSBwZW9wbGUgYXJlIHZpc2l0aW5nIHRoZW0gZnJvbSBhbmQgbWF5IHVzZSB0aGF0IGRhdGEgZm9yIGFuYWx5dGljcywgbG9nZ2luZywgb3Igb3B0aW1pemVkIGNhY2hpbmcsIGZvciBleGFtcGxlLiIpIGhlYWRlciB3aWxsIG5vdCBiZSBzZW50LlxuKiAgIGBuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZWAgKGRlZmF1bHQpOiBUaGUgW2BSZWZlcmVyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVyZXIgIlRoZSBSZWZlcmVyIHJlcXVlc3QgaGVhZGVyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyB3ZWIgcGFnZSBmcm9tIHdoaWNoIGEgbGluayB0byB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlIHdhcyBmb2xsb3dlZC4gVGhlIFJlZmVyZXIgaGVhZGVyIGFsbG93cyBzZXJ2ZXJzIHRvIGlkZW50aWZ5IHdoZXJlIHBlb3BsZSBhcmUgdmlzaXRpbmcgdGhlbSBmcm9tIGFuZCBtYXkgdXNlIHRoYXQgZGF0YSBmb3IgYW5hbHl0aWNzLCBsb2dnaW5nLCBvciBvcHRpbWl6ZWQgY2FjaGluZywgZm9yIGV4YW1wbGUuIikgaGVhZGVyIHdpbGwgbm90IGJlIHNlbnQgdG8gW29yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9vcmlnaW4gIm9yaWdpbjogV2ViIGNvbnRlbnRcJ3Mgb3JpZ2luIGlzIGRlZmluZWQgYnkgdGhlIHNjaGVtZSAocHJvdG9jb2wpLCBob3N0IChkb21haW4pLCBhbmQgcG9ydCBvZiB0aGUgVVJMIHVzZWQgdG8gYWNjZXNzIGl0LiBUd28gb2JqZWN0cyBoYXZlIHRoZSBzYW1lIG9yaWdpbiBvbmx5IHdoZW4gdGhlIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgYWxsIG1hdGNoLiIpcyB3aXRob3V0IFtUTFNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvR2xvc3NhcnkvVExTICJUTFM6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSwgcHJldmlvdXNseSBrbm93biBhcyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSwgaXMgYSBwcm90b2NvbCB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0byBjb21tdW5pY2F0ZSBzZWN1cmVseSBhY3Jvc3MgYSBuZXR3b3JrLCBwcmV2ZW50aW5nIHRhbXBlcmluZyB3aXRoIGFuZCBlYXZlc2Ryb3BwaW5nIG9uIGVtYWlsLCB3ZWIgYnJvd3NpbmcsIG1lc3NhZ2luZywgYW5kIG90aGVyIHByb3RvY29scy4iKSAoW0hUVFBTXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0dsb3NzYXJ5L0hUVFBTICJIVFRQUzogSFRUUFMgKEhUVFAgU2VjdXJlKSBpcyBhbiBlbmNyeXB0ZWQgdmVyc2lvbiBvZiB0aGUgSFRUUCBwcm90b2NvbC4gSXQgdXN1YWxseSB1c2VzIFNTTCBvciBUTFMgdG8gZW5jcnlwdCBhbGwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGEgY2xpZW50IGFuZCBhIHNlcnZlci4gVGhpcyBzZWN1cmUgY29ubmVjdGlvbiBhbGxvd3MgY2xpZW50cyB0byBzYWZlbHkgZXhjaGFuZ2Ugc2Vuc2l0aXZlIGRhdGEgd2l0aCBhIHNlcnZlciwgZm9yIGV4YW1wbGUgZm9yIGJhbmtpbmcgYWN0aXZpdGllcyBvciBvbmxpbmUgc2hvcHBpbmcuIikpLlxuKiAgIGBvcmlnaW5gOiBUaGUgc2VudCByZWZlcnJlciB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIG9yaWdpbiBvZiB0aGUgcmVmZXJyaW5nIHBhZ2U6IGl0cyBbc2NoZW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0FyY2hpdmUvTW96aWxsYS9VUklTY2hlbWUpLCBbaG9zdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9ob3N0ICJob3N0OiBBIGhvc3QgaXMgYSBkZXZpY2UgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldCAob3IgYSBsb2NhbCBuZXR3b3JrKS4gU29tZSBob3N0cyBjYWxsZWQgc2VydmVycyBvZmZlciBhZGRpdGlvbmFsIHNlcnZpY2VzIGxpa2Ugc2VydmluZyB3ZWJwYWdlcyBvciBzdG9yaW5nIGZpbGVzIGFuZCBlbWFpbHMuIiksIGFuZCBbcG9ydF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9wb3J0ICJwb3J0OiBGb3IgYSBjb21wdXRlciBjb25uZWN0ZWQgdG8gYSBuZXR3b3JrIHdpdGggYW4gSVAgYWRkcmVzcywgYSBwb3J0IGlzIGEgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gUG9ydHMgYXJlIGRlc2lnbmF0ZWQgYnkgbnVtYmVycywgYW5kIGJlbG93IDEwMjQgZWFjaCBwb3J0IGlzIGFzc29jaWF0ZWQgYnkgZGVmYXVsdCB3aXRoIGEgc3BlY2lmaWMgcHJvdG9jb2wuIikuXG4qICAgYG9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbmA6IFRoZSByZWZlcnJlciBzZW50IHRvIG90aGVyIG9yaWdpbnMgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBzY2hlbWUsIHRoZSBob3N0LCBhbmQgdGhlIHBvcnQuIE5hdmlnYXRpb25zIG9uIHRoZSBzYW1lIG9yaWdpbiB3aWxsIHN0aWxsIGluY2x1ZGUgdGhlIHBhdGguXG4qICAgYHNhbWUtb3JpZ2luYDogQSByZWZlcnJlciB3aWxsIGJlIHNlbnQgZm9yIFtzYW1lIG9yaWdpbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9HbG9zc2FyeS9TYW1lLW9yaWdpbl9wb2xpY3kgInNhbWUgb3JpZ2luOiBUaGUgc2FtZS1vcmlnaW4gcG9saWN5IGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgbWVjaGFuaXNtIHRoYXQgcmVzdHJpY3RzIGhvdyBhIGRvY3VtZW50IG9yIHNjcmlwdCBsb2FkZWQgZnJvbSBvbmUgb3JpZ2luIGNhbiBpbnRlcmFjdCB3aXRoIGEgcmVzb3VyY2UgZnJvbSBhbm90aGVyIG9yaWdpbi4iKSwgYnV0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cyB3aWxsIGNvbnRhaW4gbm8gcmVmZXJyZXIgaW5mb3JtYXRpb24uXG4qICAgYHN0cmljdC1vcmlnaW5gOiBPbmx5IHNlbmQgdGhlIG9yaWdpbiBvZiB0aGUgZG9jdW1lbnQgYXMgdGhlIHJlZmVycmVyIHdoZW4gdGhlIHByb3RvY29sIHNlY3VyaXR5IGxldmVsIHN0YXlzIHRoZSBzYW1lIChlLmcuIEhUVFBT4oaSSFRUUFMpLCBidXQgZG9uXCd0IHNlbmQgaXQgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoZS5nLiBIVFRQU+KGkkhUVFApLlxuKiAgIGBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luYDogU2VuZCBhIGZ1bGwgVVJMIHdoZW4gcGVyZm9ybWluZyBhIHNhbWUtb3JpZ2luIHJlcXVlc3QsIGJ1dCBvbmx5IHNlbmQgdGhlIG9yaWdpbiB3aGVuIHRoZSBwcm90b2NvbCBzZWN1cml0eSBsZXZlbCBzdGF5cyB0aGUgc2FtZSAoZS5nLkhUVFBT4oaSSFRUUFMpLCBhbmQgc2VuZCBubyBoZWFkZXIgdG8gYSBsZXNzIHNlY3VyZSBkZXN0aW5hdGlvbiAoZS5nLiBIVFRQU+KGkkhUVFApLlxuKiAgIGB1bnNhZmUtdXJsYDogVGhlIHJlZmVycmVyIHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luIF9hbmRfIHRoZSBwYXRoIChidXQgbm90IHRoZSBbZnJhZ21lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzL2hhc2gpLCBbcGFzc3dvcmRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzL3Bhc3N3b3JkKSwgb3IgW3VzZXJuYW1lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy91c2VybmFtZSkpLiAqKlRoaXMgdmFsdWUgaXMgdW5zYWZlKiosIGJlY2F1c2UgaXQgbGVha3Mgb3JpZ2lucyBhbmQgcGF0aHMgZnJvbSBUTFMtcHJvdGVjdGVkIHJlc291cmNlcyB0byBpbnNlY3VyZSBvcmlnaW5zLlxuXG4qKk5vdGUqKjogQW4gZW1wdHkgc3RyaW5nIHZhbHVlIChgIiJgKSBpcyBib3RoIHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgYSBmYWxsYmFjayB2YWx1ZSBpZiBgcmVmZXJyZXJwb2xpY3lgIGlzIG5vdCBzdXBwb3J0ZWQuIElmIGByZWZlcnJlcnBvbGljeWAgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIG9uIHRoZSBgPHNjcmlwdD5gIGVsZW1lbnQsIGl0IHdpbGwgYWRvcHQgYSBoaWdoZXItbGV2ZWwgcmVmZXJyZXIgcG9saWN5LCBpLmUuIG9uZSBzZXQgb24gdGhlIHdob2xlIGRvY3VtZW50IG9yIGRvbWFpbi4gSWYgYSBoaWdoZXItbGV2ZWwgcG9saWN5IGlzIG5vdCBhdmFpbGFibGUswqB0aGUgZW1wdHkgc3RyaW5nIGlzIHRyZWF0ZWQgYXMgYmVpbmcgZXF1aXZhbGVudCB0byBgbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGVgLid9LHtuYW1lOiJ0ZXh0IixkZXNjcmlwdGlvbjoiTGlrZSB0aGUgYHRleHRDb250ZW50YCBhdHRyaWJ1dGUsIHRoaXMgYXR0cmlidXRlIHNldHMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZWxlbWVudC4gVW5saWtlIHRoZSBgdGV4dENvbnRlbnRgIGF0dHJpYnV0ZSwgaG93ZXZlciwgdGhpcyBhdHRyaWJ1dGUgaXMgZXZhbHVhdGVkIGFzIGV4ZWN1dGFibGUgY29kZSBhZnRlciB0aGUgbm9kZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBET00uIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQifV19LHtuYW1lOiJub3NjcmlwdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG5vc2NyaXB0IGVsZW1lbnQgcmVwcmVzZW50cyBub3RoaW5nIGlmIHNjcmlwdGluZyBpcyBlbmFibGVkLCBhbmQgcmVwcmVzZW50cyBpdHMgY2hpbGRyZW4gaWYgc2NyaXB0aW5nIGlzIGRpc2FibGVkLiBJdCBpcyB1c2VkIHRvIHByZXNlbnQgZGlmZmVyZW50IG1hcmt1cCB0byB1c2VyIGFnZW50cyB0aGF0IHN1cHBvcnQgc2NyaXB0aW5nIGFuZCB0aG9zZSB0aGF0IGRvbid0IHN1cHBvcnQgc2NyaXB0aW5nLCBieSBhZmZlY3RpbmcgaG93IHRoZSBkb2N1bWVudCBpcyBwYXJzZWQuIn0sYXR0cmlidXRlczpbXSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbm9zY3JpcHQifV19LHtuYW1lOiJ0ZW1wbGF0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRlbXBsYXRlIGVsZW1lbnQgaXMgdXNlZCB0byBkZWNsYXJlIGZyYWdtZW50cyBvZiBIVE1MIHRoYXQgY2FuIGJlIGNsb25lZCBhbmQgaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50IGJ5IHNjcmlwdC4ifSxhdHRyaWJ1dGVzOltdLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC90ZW1wbGF0ZSJ9XX0se25hbWU6ImNhbnZhcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNhbnZhcyBlbGVtZW50IHByb3ZpZGVzIHNjcmlwdHMgd2l0aCBhIHJlc29sdXRpb24tZGVwZW5kZW50IGJpdG1hcCBjYW52YXMsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgZ3JhcGhzLCBnYW1lIGdyYXBoaWNzLCBhcnQsIG9yIG90aGVyIHZpc3VhbCBpbWFnZXMgb24gdGhlIGZseS4ifSxhdHRyaWJ1dGVzOlt7bmFtZToid2lkdGgiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB3aWR0aCBvZiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBpbiBDU1MgcGl4ZWxzLiBEZWZhdWx0cyB0byAzMDAuIn19LHtuYW1lOiJoZWlnaHQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBoZWlnaHQgb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgaW4gQ1NTIHBpeGVscy4gRGVmYXVsdHMgdG8gMTUwLiJ9fSx7bmFtZToibW96LW9wYXF1ZSIsZGVzY3JpcHRpb246IkxldHMgdGhlIGNhbnZhcyBrbm93IHdoZXRoZXIgb3Igbm90IHRyYW5zbHVjZW5jeSB3aWxsIGJlIGEgZmFjdG9yLiBJZiB0aGUgY2FudmFzIGtub3dzIHRoZXJlJ3Mgbm8gdHJhbnNsdWNlbmN5LCBwYWludGluZyBwZXJmb3JtYW5jZSBjYW4gYmUgb3B0aW1pemVkLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IE1vemlsbGEtYmFzZWQgYnJvd3NlcnM7IHVzZSB0aGUgc3RhbmRhcmRpemVkIFtgY2FudmFzLmdldENvbnRleHQoJzJkJywgeyBhbHBoYTogZmFsc2UgfSlgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTENhbnZhc0VsZW1lbnQvZ2V0Q29udGV4dCBcIlRoZSBIVE1MQ2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCkgbWV0aG9kIHJldHVybnMgYSBkcmF3aW5nIGNvbnRleHQgb24gdGhlIGNhbnZhcywgb3IgbnVsbCBpZiB0aGUgY29udGV4dCBpZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuXCIpIGluc3RlYWQuIn1dLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYW52YXMifV19XSxnbG9iYWxBdHRyaWJ1dGVzOlt7bmFtZToiYWNjZXNza2V5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQcm92aWRlcyBhIGhpbnQgZm9yIGdlbmVyYXRpbmcgYSBrZXlib2FyZCBzaG9ydGN1dCBmb3IgdGhlIGN1cnJlbnQgZWxlbWVudC4gVGhpcyBhdHRyaWJ1dGUgY29uc2lzdHMgb2YgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXJzLiBUaGUgYnJvd3NlciBzaG91bGQgdXNlIHRoZSBmaXJzdCBvbmUgdGhhdCBleGlzdHMgb24gdGhlIGNvbXB1dGVyIGtleWJvYXJkIGxheW91dC4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2FjY2Vzc2tleSJ9XX0se25hbWU6ImF1dG9jYXBpdGFsaXplIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJDb250cm9scyB3aGV0aGVyIGFuZCBob3cgdGV4dCBpbnB1dCBpcyBhdXRvbWF0aWNhbGx5IGNhcGl0YWxpemVkIGFzIGl0IGlzIGVudGVyZWQvZWRpdGVkIGJ5IHRoZSB1c2VyLiBJdCBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGBvZmZgIG9yIGBub25lYCwgbm8gYXV0b2NhcGl0YWxpemF0aW9uIGlzIGFwcGxpZWQgKGFsbCBsZXR0ZXJzIGRlZmF1bHQgdG8gbG93ZXJjYXNlKVxuKiAgIGBvbmAgb3IgYHNlbnRlbmNlc2AsIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCBzZW50ZW5jZSBkZWZhdWx0cyB0byBhIGNhcGl0YWwgbGV0dGVyOyBhbGwgb3RoZXIgbGV0dGVycyBkZWZhdWx0IHRvIGxvd2VyY2FzZVxuKiAgIGB3b3Jkc2AsIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGRlZmF1bHRzIHRvIGEgY2FwaXRhbCBsZXR0ZXI7IGFsbCBvdGhlciBsZXR0ZXJzIGRlZmF1bHQgdG8gbG93ZXJjYXNlXG4qICAgYGNoYXJhY3RlcnNgLCBhbGwgbGV0dGVycyBzaG91bGQgZGVmYXVsdCB0byB1cHBlcmNhc2UifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2F1dG9jYXBpdGFsaXplIn1dfSx7bmFtZToiY2xhc3MiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0Egc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIGNsYXNzZXMgb2YgdGhlIGVsZW1lbnQuIENsYXNzZXMgYWxsb3dzIENTUyBhbmQgSmF2YVNjcmlwdCB0byBzZWxlY3QgYW5kIGFjY2VzcyBzcGVjaWZpYyBlbGVtZW50cyB2aWEgdGhlIFtjbGFzcyBzZWxlY3RvcnNdKC9lbi1VUy9kb2NzL1dlYi9DU1MvQ2xhc3Nfc2VsZWN0b3JzKSBvciBmdW5jdGlvbnMgbGlrZSB0aGUgbWV0aG9kIFtgRG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgpYF0oL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICJyZXR1cm5zIGFuIGFycmF5LWxpa2Ugb2JqZWN0IG9mIGFsbCBjaGlsZCBlbGVtZW50cyB3aGljaCBoYXZlIGFsbCBvZiB0aGUgZ2l2ZW4gY2xhc3MgbmFtZXMuIikuJ30scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9jbGFzcyJ9XX0se25hbWU6ImNvbnRlbnRlZGl0YWJsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGluZyBpZiB0aGUgZWxlbWVudCBzaG91bGQgYmUgZWRpdGFibGUgYnkgdGhlIHVzZXIuIElmIHNvLCB0aGUgYnJvd3NlciBtb2RpZmllcyBpdHMgd2lkZ2V0IHRvIGFsbG93IGVkaXRpbmcuIFRoZSBhdHRyaWJ1dGUgbXVzdCB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcblxuKiAgIGB0cnVlYCBvciB0aGUgX2VtcHR5IHN0cmluZ18sIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IG11c3QgYmUgZWRpdGFibGU7XG4qICAgYGZhbHNlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgbXVzdCBub3QgYmUgZWRpdGFibGUuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9jb250ZW50ZWRpdGFibGUifV19LHtuYW1lOiJjb250ZXh0bWVudSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonVGhlIGBbKippZCoqXSgjYXR0ci1pZClgIG9mIGEgW2A8bWVudT5gXSgvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21lbnUgIlRoZSBIVE1MIDxtZW51PiBlbGVtZW50IHJlcHJlc2VudHMgYSBncm91cCBvZiBjb21tYW5kcyB0aGF0IGEgdXNlciBjYW4gcGVyZm9ybSBvciBhY3RpdmF0ZS4gVGhpcyBpbmNsdWRlcyBib3RoIGxpc3QgbWVudXMsIHdoaWNoIG1pZ2h0IGFwcGVhciBhY3Jvc3MgdGhlIHRvcCBvZiBhIHNjcmVlbiwgYXMgd2VsbCBhcyBjb250ZXh0IG1lbnVzLCBzdWNoIGFzIHRob3NlIHRoYXQgbWlnaHQgYXBwZWFyIHVuZGVybmVhdGggYSBidXR0b24gYWZ0ZXIgaXQgaGFzIGJlZW4gY2xpY2tlZC4iKSB0byB1c2UgYXMgdGhlIGNvbnRleHR1YWwgbWVudSBmb3IgdGhpcyBlbGVtZW50Lid9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvY29udGV4dG1lbnUifV19LHtuYW1lOiJkaXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRpbmcgdGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgbHRyYCwgd2hpY2ggbWVhbnMgX2xlZnQgdG8gcmlnaHRfIGFuZCBpcyB0byBiZSB1c2VkIGZvciBsYW5ndWFnZXMgdGhhdCBhcmUgd3JpdHRlbiBmcm9tIHRoZSBsZWZ0IHRvIHRoZSByaWdodCAobGlrZSBFbmdsaXNoKTtcbiogICBgcnRsYCwgd2hpY2ggbWVhbnMgX3JpZ2h0IHRvIGxlZnRfIGFuZCBpcyB0byBiZSB1c2VkIGZvciBsYW5ndWFnZXMgdGhhdCBhcmUgd3JpdHRlbiBmcm9tIHRoZSByaWdodCB0byB0aGUgbGVmdCAobGlrZSBBcmFiaWMpO1xuKiAgIGBhdXRvYCwgd2hpY2ggbGV0cyB0aGUgdXNlciBhZ2VudCBkZWNpZGUuIEl0IHVzZXMgYSBiYXNpYyBhbGdvcml0aG0gYXMgaXQgcGFyc2VzIHRoZSBjaGFyYWN0ZXJzIGluc2lkZSB0aGUgZWxlbWVudCB1bnRpbCBpdCBmaW5kcyBhIGNoYXJhY3RlciB3aXRoIGEgc3Ryb25nIGRpcmVjdGlvbmFsaXR5LCB0aGVuIGl0IGFwcGxpZXMgdGhhdCBkaXJlY3Rpb25hbGl0eSB0byB0aGUgd2hvbGUgZWxlbWVudC4ifSx2YWx1ZVNldDoiZCIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9kaXIifV19LHtuYW1lOiJkcmFnZ2FibGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVudW1lcmF0ZWQgYXR0cmlidXRlIGluZGljYXRpbmcgd2hldGhlciB0aGUgZWxlbWVudCBjYW4gYmUgZHJhZ2dlZCwgdXNpbmcgdGhlIFtEcmFnIGFuZCBEcm9wIEFQSV0oL2VuLXVzL2RvY3MvRHJhZ0Ryb3AvRHJhZ19hbmRfRHJvcCkuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYHRydWVgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBtYXkgYmUgZHJhZ2dlZFxuKiAgIGBmYWxzZWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IG1heSBub3QgYmUgZHJhZ2dlZC4ifSx2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9kcmFnZ2FibGUifV19LHtuYW1lOiJkcm9wem9uZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZW51bWVyYXRlZCBhdHRyaWJ1dGUgaW5kaWNhdGluZyB3aGF0IHR5cGVzIG9mIGNvbnRlbnQgY2FuIGJlIGRyb3BwZWQgb24gYW4gZWxlbWVudCwgdXNpbmcgdGhlIFtEcmFnIGFuZCBEcm9wIEFQSV0oL2VuLVVTL2RvY3MvRHJhZ0Ryb3AvRHJhZ19hbmRfRHJvcCkuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgYGNvcHlgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBkcm9wcGluZyB3aWxsIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGVsZW1lbnQgdGhhdCB3YXMgZHJhZ2dlZFxuKiAgIGBtb3ZlYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgdGhhdCB3YXMgZHJhZ2dlZCB3aWxsIGJlIG1vdmVkIHRvIHRoaXMgbmV3IGxvY2F0aW9uLlxuKiAgIGBsaW5rYCwgd2lsbCBjcmVhdGUgYSBsaW5rIHRvIHRoZSBkcmFnZ2VkIGRhdGEuIn19LHtuYW1lOiJleHBvcnRwYXJ0cyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVXNlZCB0byB0cmFuc2l0aXZlbHkgZXhwb3J0IHNoYWRvdyBwYXJ0cyBmcm9tIGEgbmVzdGVkIHNoYWRvdyB0cmVlIGludG8gYSBjb250YWluaW5nIGxpZ2h0IHRyZWUuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9leHBvcnRwYXJ0cyJ9XX0se25hbWU6ImhpZGRlbiIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBCb29sZWFuIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBub3QgeWV0LCBvciBpcyBubyBsb25nZXIsIF9yZWxldmFudF8uIEZvciBleGFtcGxlLCBpdCBjYW4gYmUgdXNlZCB0byBoaWRlIGVsZW1lbnRzIG9mIHRoZSBwYWdlIHRoYXQgY2FuJ3QgYmUgdXNlZCB1bnRpbCB0aGUgbG9naW4gcHJvY2VzcyBoYXMgYmVlbiBjb21wbGV0ZWQuIFRoZSBicm93c2VyIHdvbid0IHJlbmRlciBzdWNoIGVsZW1lbnRzLiBUaGlzIGF0dHJpYnV0ZSBtdXN0IG5vdCBiZSB1c2VkIHRvIGhpZGUgY29udGVudCB0aGF0IGNvdWxkIGxlZ2l0aW1hdGVseSBiZSBzaG93bi4ifSx2YWx1ZVNldDoidiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9oaWRkZW4ifV19LHtuYW1lOiJpZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhIHVuaXF1ZSBpZGVudGlmaWVyIChJRCkgd2hpY2ggbXVzdCBiZSB1bmlxdWUgaW4gdGhlIHdob2xlIGRvY3VtZW50LiBJdHMgcHVycG9zZSBpcyB0byBpZGVudGlmeSB0aGUgZWxlbWVudCB3aGVuIGxpbmtpbmcgKHVzaW5nIGEgZnJhZ21lbnQgaWRlbnRpZmllciksIHNjcmlwdGluZywgb3Igc3R5bGluZyAod2l0aCBDU1MpLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaWQifV19LHtuYW1lOiJpbnB1dG1vZGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J1Byb3ZpZGVzIGEgaGludCB0byBicm93c2VycyBhcyB0byB0aGUgdHlwZSBvZiB2aXJ0dWFsIGtleWJvYXJkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIHdoZW4gZWRpdGluZyB0aGlzIGVsZW1lbnQgb3IgaXRzIGNvbnRlbnRzLiBVc2VkIHByaW1hcmlseSBvbiBbYDxpbnB1dD5gXSgvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0ICJUaGUgSFRNTCA8aW5wdXQ+IGVsZW1lbnQgaXMgdXNlZCB0byBjcmVhdGUgaW50ZXJhY3RpdmUgY29udHJvbHMgZm9yIHdlYi1iYXNlZCBmb3JtcyBpbiBvcmRlciB0byBhY2NlcHQgZGF0YSBmcm9tIHRoZSB1c2VyOyBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBpbnB1dCBkYXRhIGFuZCBjb250cm9sIHdpZGdldHMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgYW5kIHVzZXIgYWdlbnQuIikgZWxlbWVudHMsIGJ1dCBpcyB1c2FibGUgb24gYW55IGVsZW1lbnQgd2hpbGUgaW4gYFtjb250ZW50ZWRpdGFibGVdKC9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzI2F0dHItY29udGVudGVkaXRhYmxlKWAgbW9kZS4nfSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2lucHV0bW9kZSJ9XX0se25hbWU6ImlzIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhhdCBhIHN0YW5kYXJkIEhUTUwgZWxlbWVudCBzaG91bGQgYmVoYXZlIGxpa2UgYSByZWdpc3RlcmVkIGN1c3RvbSBidWlsdC1pbiBlbGVtZW50IChzZWUgW1VzaW5nIGN1c3RvbSBlbGVtZW50c10oL2VuLVVTL2RvY3MvV2ViL1dlYl9Db21wb25lbnRzL1VzaW5nX2N1c3RvbV9lbGVtZW50cykgZm9yIG1vcmUgZGV0YWlscykuIn0scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9pcyJ9XX0se25hbWU6Iml0ZW1pZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVuaXF1ZSwgZ2xvYmFsIGlkZW50aWZpZXIgb2YgYW4gaXRlbS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2l0ZW1pZCJ9XX0se25hbWU6Iml0ZW1wcm9wIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJVc2VkIHRvIGFkZCBwcm9wZXJ0aWVzIHRvIGFuIGl0ZW0uIEV2ZXJ5IEhUTUwgZWxlbWVudCBtYXkgaGF2ZSBhbiBgaXRlbXByb3BgIGF0dHJpYnV0ZSBzcGVjaWZpZWQsIHdoZXJlIGFuIGBpdGVtcHJvcGAgY29uc2lzdHMgb2YgYSBuYW1lIGFuZCB2YWx1ZSBwYWlyLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXByb3AifV19LHtuYW1lOiJpdGVtcmVmIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBkZXNjZW5kYW50cyBvZiBhbiBlbGVtZW50IHdpdGggdGhlIGBpdGVtc2NvcGVgIGF0dHJpYnV0ZSBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpdGVtIHVzaW5nIGFuIGBpdGVtcmVmYC4gSXQgcHJvdmlkZXMgYSBsaXN0IG9mIGVsZW1lbnQgaWRzIChub3QgYGl0ZW1pZGBzKSB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBlbHNld2hlcmUgaW4gdGhlIGRvY3VtZW50LiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXJlZiJ9XX0se25hbWU6Iml0ZW1zY29wZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiYGl0ZW1zY29wZWAgKHVzdWFsbHkpIHdvcmtzIGFsb25nIHdpdGggYFtpdGVtdHlwZV0oL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMjYXR0ci1pdGVtdHlwZSlgIHRvIHNwZWNpZnkgdGhhdCB0aGUgSFRNTCBjb250YWluZWQgaW4gYSBibG9jayBpcyBhYm91dCBhIHBhcnRpY3VsYXIgaXRlbS4gYGl0ZW1zY29wZWAgY3JlYXRlcyB0aGUgSXRlbSBhbmQgZGVmaW5lcyB0aGUgc2NvcGUgb2YgdGhlIGBpdGVtdHlwZWAgYXNzb2NpYXRlZCB3aXRoIGl0LiBgaXRlbXR5cGVgIGlzIGEgdmFsaWQgVVJMIG9mIGEgdm9jYWJ1bGFyeSAoc3VjaCBhcyBbc2NoZW1hLm9yZ10oaHR0cHM6Ly9zY2hlbWEub3JnLykpIHRoYXQgZGVzY3JpYmVzIHRoZSBpdGVtIGFuZCBpdHMgcHJvcGVydGllcyBjb250ZXh0LiJ9LHZhbHVlU2V0OiJ2IixyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2l0ZW1zY29wZSJ9XX0se25hbWU6Iml0ZW10eXBlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJTcGVjaWZpZXMgdGhlIFVSTCBvZiB0aGUgdm9jYWJ1bGFyeSB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZWZpbmUgYGl0ZW1wcm9wYHMgKGl0ZW0gcHJvcGVydGllcykgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiBgW2l0ZW1zY29wZV0oL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMjYXR0ci1pdGVtc2NvcGUpYCBpcyB1c2VkIHRvIHNldCB0aGUgc2NvcGUgb2Ygd2hlcmUgaW4gdGhlIGRhdGEgc3RydWN0dXJlIHRoZSB2b2NhYnVsYXJ5IHNldCBieSBgaXRlbXR5cGVgIHdpbGwgYmUgYWN0aXZlLiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvaXRlbXR5cGUifV19LHtuYW1lOiJsYW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJIZWxwcyBkZWZpbmUgdGhlIGxhbmd1YWdlIG9mIGFuIGVsZW1lbnQ6IHRoZSBsYW5ndWFnZSB0aGF0IG5vbi1lZGl0YWJsZSBlbGVtZW50cyBhcmUgaW4sIG9yIHRoZSBsYW5ndWFnZSB0aGF0IGVkaXRhYmxlIGVsZW1lbnRzIHNob3VsZCBiZSB3cml0dGVuIGluIGJ5IHRoZSB1c2VyLiBUaGUgYXR0cmlidXRlIGNvbnRhaW5zIG9uZSDigJxsYW5ndWFnZSB0YWfigJ0gKG1hZGUgb2YgaHlwaGVuLXNlcGFyYXRlZCDigJxsYW5ndWFnZSBzdWJ0YWdz4oCdKSBpbiB0aGUgZm9ybWF0IGRlZmluZWQgaW4gW19UYWdzIGZvciBJZGVudGlmeWluZyBMYW5ndWFnZXMgKEJDUDQ3KV9dKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9iY3AvYmNwNDcudHh0KS4gWyoqeG1sOmxhbmcqKl0oI2F0dHIteG1sOmxhbmcpIGhhcyBwcmlvcml0eSBvdmVyIGl0LiJ9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvbGFuZyJ9XX0se25hbWU6InBhcnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0Egc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHBhcnQgbmFtZXMgb2YgdGhlIGVsZW1lbnQuIFBhcnQgbmFtZXMgYWxsb3dzIENTUyB0byBzZWxlY3QgYW5kIHN0eWxlIHNwZWNpZmljIGVsZW1lbnRzIGluIGEgc2hhZG93IHRyZWUgdmlhIHRoZSBbYDo6cGFydGBdKC9lbi1VUy9kb2NzL1dlYi9DU1MvOjpwYXJ0ICJUaGUgOjpwYXJ0IENTUyBwc2V1ZG8tZWxlbWVudCByZXByZXNlbnRzIGFueSBlbGVtZW50IHdpdGhpbiBhIHNoYWRvdyB0cmVlIHRoYXQgaGFzIGEgbWF0Y2hpbmcgcGFydCBhdHRyaWJ1dGUuIikgcHNldWRvLWVsZW1lbnQuJ30scmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9wYXJ0In1dfSx7bmFtZToicm9sZSIsdmFsdWVTZXQ6InJvbGVzIn0se25hbWU6InNsb3QiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFzc2lnbnMgYSBzbG90IGluIGEgW3NoYWRvdyBET01dKC9lbi1VUy9kb2NzL1dlYi9XZWJfQ29tcG9uZW50cy9TaGFkb3dfRE9NKSBzaGFkb3cgdHJlZSB0byBhbiBlbGVtZW50OiBBbiBlbGVtZW50IHdpdGggYSBgc2xvdGAgYXR0cmlidXRlIGlzIGFzc2lnbmVkIHRvIHRoZSBzbG90IGNyZWF0ZWQgYnkgdGhlIFtgPHNsb3Q+YF0oL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zbG90IFwiVGhlIEhUTUwgPHNsb3Q+IGVsZW1lbnTigJRwYXJ0IG9mIHRoZSBXZWIgQ29tcG9uZW50cyB0ZWNobm9sb2d5IHN1aXRl4oCUaXMgYSBwbGFjZWhvbGRlciBpbnNpZGUgYSB3ZWIgY29tcG9uZW50IHRoYXQgeW91IGNhbiBmaWxsIHdpdGggeW91ciBvd24gbWFya3VwLCB3aGljaCBsZXRzIHlvdSBjcmVhdGUgc2VwYXJhdGUgRE9NIHRyZWVzIGFuZCBwcmVzZW50IHRoZW0gdG9nZXRoZXIuXCIpIGVsZW1lbnQgd2hvc2UgYFtuYW1lXSgvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Nsb3QjYXR0ci1uYW1lKWAgYXR0cmlidXRlJ3MgdmFsdWUgbWF0Y2hlcyB0aGF0IGBzbG90YCBhdHRyaWJ1dGUncyB2YWx1ZS4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3Nsb3QifV19LHtuYW1lOiJzcGVsbGNoZWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSBkZWZpbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnQgbWF5IGJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIGVycm9ycy4gSXQgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG5cbiogICBgdHJ1ZWAsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSwgaWYgcG9zc2libGUsIGNoZWNrZWQgZm9yIHNwZWxsaW5nIGVycm9ycztcbiogICBgZmFsc2VgLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgbm90IGJlIGNoZWNrZWQgZm9yIHNwZWxsaW5nIGVycm9ycy4ifSx2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6Ik1ETiBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9zcGVsbGNoZWNrIn1dfSx7bmFtZToic3R5bGUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0NvbnRhaW5zIFtDU1NdKC9lbi1VUy9kb2NzL1dlYi9DU1MpIHN0eWxpbmcgZGVjbGFyYXRpb25zIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQuIE5vdGUgdGhhdCBpdCBpcyByZWNvbW1lbmRlZCBmb3Igc3R5bGVzIHRvIGJlIGRlZmluZWQgaW4gYSBzZXBhcmF0ZSBmaWxlIG9yIGZpbGVzLiBUaGlzIGF0dHJpYnV0ZSBhbmQgdGhlIFtgPHN0eWxlPmBdKC9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc3R5bGUgIlRoZSBIVE1MIDxzdHlsZT4gZWxlbWVudCBjb250YWlucyBzdHlsZSBpbmZvcm1hdGlvbiBmb3IgYSBkb2N1bWVudCwgb3IgcGFydCBvZiBhIGRvY3VtZW50LiIpIGVsZW1lbnQgaGF2ZSBtYWlubHkgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgZm9yIHF1aWNrIHN0eWxpbmcsIGZvciBleGFtcGxlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLid9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvc3R5bGUifV19LHtuYW1lOiJ0YWJpbmRleCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTpgQW4gaW50ZWdlciBhdHRyaWJ1dGUgaW5kaWNhdGluZyBpZiB0aGUgZWxlbWVudCBjYW4gdGFrZSBpbnB1dCBmb2N1cyAoaXMgX2ZvY3VzYWJsZV8pLCBpZiBpdCBzaG91bGQgcGFydGljaXBhdGUgdG8gc2VxdWVudGlhbCBrZXlib2FyZCBuYXZpZ2F0aW9uLCBhbmQgaWYgc28sIGF0IHdoYXQgcG9zaXRpb24uIEl0IGNhbiB0YWtlIHNldmVyYWwgdmFsdWVzOgoKKiAgIGEgX25lZ2F0aXZlIHZhbHVlXyBtZWFucyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBmb2N1c2FibGUsIGJ1dCBzaG91bGQgbm90IGJlIHJlYWNoYWJsZSB2aWEgc2VxdWVudGlhbCBrZXlib2FyZCBuYXZpZ2F0aW9uOwoqICAgXGAwXGAgbWVhbnMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgZm9jdXNhYmxlIGFuZCByZWFjaGFibGUgdmlhIHNlcXVlbnRpYWwga2V5Ym9hcmQgbmF2aWdhdGlvbiwgYnV0IGl0cyByZWxhdGl2ZSBvcmRlciBpcyBkZWZpbmVkIGJ5IHRoZSBwbGF0Zm9ybSBjb252ZW50aW9uOwoqICAgYSBfcG9zaXRpdmUgdmFsdWVfIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGZvY3VzYWJsZSBhbmQgcmVhY2hhYmxlIHZpYSBzZXF1ZW50aWFsIGtleWJvYXJkIG5hdmlnYXRpb247IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZWxlbWVudHMgYXJlIGZvY3VzZWQgaXMgdGhlIGluY3JlYXNpbmcgdmFsdWUgb2YgdGhlIFsqKnRhYmluZGV4KipdKCNhdHRyLXRhYmluZGV4KS4gSWYgc2V2ZXJhbCBlbGVtZW50cyBzaGFyZSB0aGUgc2FtZSB0YWJpbmRleCwgdGhlaXIgcmVsYXRpdmUgb3JkZXIgZm9sbG93cyB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbnMgaW4gdGhlIGRvY3VtZW50LmB9LHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdGFiaW5kZXgifV19LHtuYW1lOiJ0aXRsZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29udGFpbnMgYSB0ZXh0IHJlcHJlc2VudGluZyBhZHZpc29yeSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBlbGVtZW50IGl0IGJlbG9uZ3MgdG8uIFN1Y2ggaW5mb3JtYXRpb24gY2FuIHR5cGljYWxseSwgYnV0IG5vdCBuZWNlc3NhcmlseSwgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGFzIGEgdG9vbHRpcC4ifSxyZWZlcmVuY2VzOlt7bmFtZToiTUROIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RpdGxlIn1dfSx7bmFtZToidHJhbnNsYXRlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbnVtZXJhdGVkIGF0dHJpYnV0ZSB0aGF0IGlzIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGUgdmFsdWVzIGFuZCB0aGUgdmFsdWVzIG9mIGl0cyBbYFRleHRgXSgvZW4tVVMvZG9jcy9XZWIvQVBJL1RleHQgXCJUaGUgVGV4dCBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgdGV4dHVhbCBjb250ZW50IG9mIEVsZW1lbnQgb3IgQXR0ci4gSWYgYW4gZWxlbWVudCBoYXMgbm8gbWFya3VwIHdpdGhpbiBpdHMgY29udGVudCwgaXQgaGFzIGEgc2luZ2xlIGNoaWxkIGltcGxlbWVudGluZyBUZXh0IHRoYXQgY29udGFpbnMgdGhlIGVsZW1lbnQncyB0ZXh0LiBIb3dldmVyLCBpZiB0aGUgZWxlbWVudCBjb250YWlucyBtYXJrdXAsIGl0IGlzIHBhcnNlZCBpbnRvIGluZm9ybWF0aW9uIGl0ZW1zIGFuZCBUZXh0IG5vZGVzIHRoYXQgZm9ybSBpdHMgY2hpbGRyZW4uXCIpIG5vZGUgY2hpbGRyZW4gYXJlIHRvIGJlIHRyYW5zbGF0ZWQgd2hlbiB0aGUgcGFnZSBpcyBsb2NhbGl6ZWQsIG9yIHdoZXRoZXIgdG8gbGVhdmUgdGhlbSB1bmNoYW5nZWQuIEl0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuXG4qICAgZW1wdHkgc3RyaW5nIGFuZCBgeWVzYCwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgd2lsbCBiZSB0cmFuc2xhdGVkLlxuKiAgIGBub2AsIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IHdpbGwgbm90IGJlIHRyYW5zbGF0ZWQuIn0sdmFsdWVTZXQ6InkiLHJlZmVyZW5jZXM6W3tuYW1lOiJNRE4gUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdHJhbnNsYXRlIn1dfSx7bmFtZToib25hYm9ydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGxvYWRpbmcgb2YgYSByZXNvdXJjZSBoYXMgYmVlbiBhYm9ydGVkLiJ9fSx7bmFtZToib25ibHVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IGhhcyBsb3N0IGZvY3VzIChkb2VzIG5vdCBidWJibGUpLiJ9fSx7bmFtZToib25jYW5wbGF5IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdXNlciBhZ2VudCBjYW4gcGxheSB0aGUgbWVkaWEsIGJ1dCBlc3RpbWF0ZXMgdGhhdCBub3QgZW5vdWdoIGRhdGEgaGFzIGJlZW4gbG9hZGVkIHRvIHBsYXkgdGhlIG1lZGlhIHVwIHRvIGl0cyBlbmQgd2l0aG91dCBoYXZpbmcgdG8gc3RvcCBmb3IgZnVydGhlciBidWZmZXJpbmcgb2YgY29udGVudC4ifX0se25hbWU6Im9uY2FucGxheXRocm91Z2giLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1c2VyIGFnZW50IGNhbiBwbGF5IHRoZSBtZWRpYSB1cCB0byBpdHMgZW5kIHdpdGhvdXQgaGF2aW5nIHRvIHN0b3AgZm9yIGZ1cnRoZXIgYnVmZmVyaW5nIG9mIGNvbnRlbnQuIn19LHtuYW1lOiJvbmNoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCBmb3IgPGlucHV0PiwgPHNlbGVjdD4sIGFuZCA8dGV4dGFyZWE+IGVsZW1lbnRzIHdoZW4gYSBjaGFuZ2UgdG8gdGhlIGVsZW1lbnQncyB2YWx1ZSBpcyBjb21taXR0ZWQgYnkgdGhlIHVzZXIuIn19LHtuYW1lOiJvbmNsaWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBidXR0b24gaGFzIGJlZW4gcHJlc3NlZCBhbmQgcmVsZWFzZWQgb24gYW4gZWxlbWVudC4ifX0se25hbWU6Im9uY29udGV4dG1lbnUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByaWdodCBidXR0b24gb2YgdGhlIG1vdXNlIGlzIGNsaWNrZWQgKGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIGRpc3BsYXllZCkuIn19LHtuYW1lOiJvbmRibGNsaWNrIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBidXR0b24gaXMgY2xpY2tlZCB0d2ljZSBvbiBhbiBlbGVtZW50LiJ9fSx7bmFtZToib25kcmFnIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGlzIGJlaW5nIGRyYWdnZWQgKGV2ZXJ5IDM1MG1zKS4ifX0se25hbWU6Im9uZHJhZ2VuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBkcmFnIG9wZXJhdGlvbiBpcyBiZWluZyBlbmRlZCAoYnkgcmVsZWFzaW5nIGEgbW91c2UgYnV0dG9uIG9yIGhpdHRpbmcgdGhlIGVzY2FwZSBrZXkpLiJ9fSx7bmFtZToib25kcmFnZW50ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgZHJhZ2dlZCBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGVudGVycyBhIHZhbGlkIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToib25kcmFnbGVhdmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgZHJhZ2dlZCBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uIGxlYXZlcyBhIHZhbGlkIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToib25kcmFnb3ZlciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQW4gZWxlbWVudCBvciB0ZXh0IHNlbGVjdGlvbiBpcyBiZWluZyBkcmFnZ2VkIG92ZXIgYSB2YWxpZCBkcm9wIHRhcmdldCAoZXZlcnkgMzUwbXMpLiJ9fSx7bmFtZToib25kcmFnc3RhcnQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB1c2VyIHN0YXJ0cyBkcmFnZ2luZyBhbiBlbGVtZW50IG9yIHRleHQgc2VsZWN0aW9uLiJ9fSx7bmFtZToib25kcm9wIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBbiBlbGVtZW50IGlzIGRyb3BwZWQgb24gYSB2YWxpZCBkcm9wIHRhcmdldC4ifX0se25hbWU6Im9uZHVyYXRpb25jaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkdXJhdGlvbiBhdHRyaWJ1dGUgaGFzIGJlZW4gdXBkYXRlZC4ifX0se25hbWU6Im9uZW1wdGllZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIG1lZGlhIGhhcyBiZWNvbWUgZW1wdHk7IGZvciBleGFtcGxlLCB0aGlzIGV2ZW50IGlzIHNlbnQgaWYgdGhlIG1lZGlhIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkIChvciBwYXJ0aWFsbHkgbG9hZGVkKSwgYW5kIHRoZSBsb2FkKCkgbWV0aG9kIGlzIGNhbGxlZCB0byByZWxvYWQgaXQuIn19LHtuYW1lOiJvbmVuZGVkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBoYXMgc3RvcHBlZCBiZWNhdXNlIHRoZSBlbmQgb2YgdGhlIG1lZGlhIHdhcyByZWFjaGVkLiJ9fSx7bmFtZToib25lcnJvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4ifX0se25hbWU6Im9uZm9jdXMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkFuIGVsZW1lbnQgaGFzIHJlY2VpdmVkIGZvY3VzIChkb2VzIG5vdCBidWJibGUpLiJ9fSx7bmFtZToib25mb3JtY2hhbmdlIn0se25hbWU6Im9uZm9ybWlucHV0In0se25hbWU6Im9uaW5wdXQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSB2YWx1ZSBvZiBhbiBlbGVtZW50IGNoYW5nZXMgb3IgdGhlIGNvbnRlbnQgb2YgYW4gZWxlbWVudCB3aXRoIHRoZSBhdHRyaWJ1dGUgY29udGVudGVkaXRhYmxlIGlzIG1vZGlmaWVkLiJ9fSx7bmFtZToib25pbnZhbGlkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHN1Ym1pdHRhYmxlIGVsZW1lbnQgaGFzIGJlZW4gY2hlY2tlZCBhbmQgZG9lc24ndCBzYXRpc2Z5IGl0cyBjb25zdHJhaW50cy4ifX0se25hbWU6Im9ua2V5ZG93biIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcHJlc3NlZCBkb3duLiJ9fSx7bmFtZToib25rZXlwcmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcHJlc3NlZCBkb3duIGFuZCB0aGF0IGtleSBub3JtYWxseSBwcm9kdWNlcyBhIGNoYXJhY3RlciB2YWx1ZSAodXNlIGlucHV0IGluc3RlYWQpLiJ9fSx7bmFtZToib25rZXl1cCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBrZXkgaXMgcmVsZWFzZWQuIn19LHtuYW1lOiJvbmxvYWQiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcmVzb3VyY2UgYW5kIGl0cyBkZXBlbmRlbnQgcmVzb3VyY2VzIGhhdmUgZmluaXNoZWQgbG9hZGluZy4ifX0se25hbWU6Im9ubG9hZGVkZGF0YSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIGZpcnN0IGZyYW1lIG9mIHRoZSBtZWRpYSBoYXMgZmluaXNoZWQgbG9hZGluZy4ifX0se25hbWU6Im9ubG9hZGVkbWV0YWRhdGEiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBtZXRhZGF0YSBoYXMgYmVlbiBsb2FkZWQuIn19LHtuYW1lOiJvbmxvYWRzdGFydCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUHJvZ3Jlc3MgaGFzIGJlZ3VuLiJ9fSx7bmFtZToib25tb3VzZWRvd24iLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiAodXN1YWxseSBhIG1vdXNlKSBpcyBwcmVzc2VkIG9uIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbm1vdXNlbW92ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb3ZlciBhbiBlbGVtZW50LiJ9fSx7bmFtZToib25tb3VzZW91dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb2ZmIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZCBvciBvZmYgb25lIG9mIGl0cyBjaGlsZHJlbi4ifX0se25hbWU6Im9ubW91c2VvdmVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZCBvciBvbnRvIG9uZSBvZiBpdHMgY2hpbGRyZW4uIn19LHtuYW1lOiJvbm1vdXNldXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgcG9pbnRpbmcgZGV2aWNlIGJ1dHRvbiBpcyByZWxlYXNlZCBvdmVyIGFuIGVsZW1lbnQuIn19LHtuYW1lOiJvbm1vdXNld2hlZWwifSx7bmFtZToib25tb3VzZWVudGVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIHBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvbnRvIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZC4ifX0se25hbWU6Im9ubW91c2VsZWF2ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBwb2ludGluZyBkZXZpY2UgaXMgbW92ZWQgb2ZmIHRoZSBlbGVtZW50IHRoYXQgaGFzIHRoZSBsaXN0ZW5lciBhdHRhY2hlZC4ifX0se25hbWU6Im9ucGF1c2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBsYXliYWNrIGhhcyBiZWVuIHBhdXNlZC4ifX0se25hbWU6Im9ucGxheSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiUGxheWJhY2sgaGFzIGJlZ3VuLiJ9fSx7bmFtZToib25wbGF5aW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBpcyByZWFkeSB0byBzdGFydCBhZnRlciBoYXZpbmcgYmVlbiBwYXVzZWQgb3IgZGVsYXllZCBkdWUgdG8gbGFjayBvZiBkYXRhLiJ9fSx7bmFtZToib25wcm9ncmVzcyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW4gcHJvZ3Jlc3MuIn19LHtuYW1lOiJvbnJhdGVjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwbGF5YmFjayByYXRlIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25yZXNldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBmb3JtIGlzIHJlc2V0LiJ9fSx7bmFtZToib25yZXNpemUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkb2N1bWVudCB2aWV3IGhhcyBiZWVuIHJlc2l6ZWQuIn19LHtuYW1lOiJvbnJlYWR5c3RhdGVjaGFuZ2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBvZiBhIGRvY3VtZW50IGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib25zY3JvbGwiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBkb2N1bWVudCB2aWV3IG9yIGFuIGVsZW1lbnQgaGFzIGJlZW4gc2Nyb2xsZWQuIn19LHtuYW1lOiJvbnNlZWtlZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBzZWVrIG9wZXJhdGlvbiBjb21wbGV0ZWQuIn19LHtuYW1lOiJvbnNlZWtpbmciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkEgc2VlayBvcGVyYXRpb24gYmVnYW4uIn19LHtuYW1lOiJvbnNlbGVjdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiU29tZSB0ZXh0IGlzIGJlaW5nIHNlbGVjdGVkLiJ9fSx7bmFtZToib25zaG93IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJBIGNvbnRleHRtZW51IGV2ZW50IHdhcyBmaXJlZCBvbi9idWJibGVkIHRvIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSBjb250ZXh0bWVudSBhdHRyaWJ1dGUifX0se25hbWU6Im9uc3RhbGxlZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHVzZXIgYWdlbnQgaXMgdHJ5aW5nIHRvIGZldGNoIG1lZGlhIGRhdGEsIGJ1dCBkYXRhIGlzIHVuZXhwZWN0ZWRseSBub3QgZm9ydGhjb21pbmcuIn19LHtuYW1lOiJvbnN1Ym1pdCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQSBmb3JtIGlzIHN1Ym1pdHRlZC4ifX0se25hbWU6Im9uc3VzcGVuZCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiTWVkaWEgZGF0YSBsb2FkaW5nIGhhcyBiZWVuIHN1c3BlbmRlZC4ifX0se25hbWU6Im9udGltZXVwZGF0ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHRpbWUgaW5kaWNhdGVkIGJ5IHRoZSBjdXJyZW50VGltZSBhdHRyaWJ1dGUgaGFzIGJlZW4gdXBkYXRlZC4ifX0se25hbWU6Im9udm9sdW1lY2hhbmdlIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgdm9sdW1lIGhhcyBjaGFuZ2VkLiJ9fSx7bmFtZToib253YWl0aW5nIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJQbGF5YmFjayBoYXMgc3RvcHBlZCBiZWNhdXNlIG9mIGEgdGVtcG9yYXJ5IGxhY2sgb2YgZGF0YS4ifX0se25hbWU6Im9ucG9pbnRlcmNhbmNlbCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgaXMgdW5saWtlbHkgdG8gcHJvZHVjZSBhbnkgbW9yZSBldmVudHMuIn19LHtuYW1lOiJvbnBvaW50ZXJkb3duIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRlciBlbnRlcnMgdGhlIGFjdGl2ZSBidXR0b25zIHN0YXRlLiJ9fSx7bmFtZToib25wb2ludGVyZW50ZXIiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBpbnNpZGUgdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVybGVhdmUiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlBvaW50aW5nIGRldmljZSBpcyBtb3ZlZCBvdXQgb2YgdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVybG9ja2NoYW5nZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgd2FzIGxvY2tlZCBvciByZWxlYXNlZC4ifX0se25hbWU6Im9ucG9pbnRlcmxvY2tlcnJvciIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSXQgd2FzIGltcG9zc2libGUgdG8gbG9jayB0aGUgcG9pbnRlciBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgb3IgYmVjYXVzZSB0aGUgcGVybWlzc2lvbiB3YXMgZGVuaWVkLiJ9fSx7bmFtZToib25wb2ludGVybW92ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50ZXIgY2hhbmdlZCBjb29yZGluYXRlcy4ifX0se25hbWU6Im9ucG9pbnRlcm91dCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiVGhlIHBvaW50aW5nIGRldmljZSBtb3ZlZCBvdXQgb2YgaGl0LXRlc3RpbmcgYm91bmRhcnkgb3IgbGVhdmVzIGRldGVjdGFibGUgaG92ZXIgcmFuZ2UuIn19LHtuYW1lOiJvbnBvaW50ZXJvdmVyIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJUaGUgcG9pbnRpbmcgZGV2aWNlIGlzIG1vdmVkIGludG8gdGhlIGhpdC10ZXN0aW5nIGJvdW5kYXJ5LiJ9fSx7bmFtZToib25wb2ludGVydXAiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlRoZSBwb2ludGVyIGxlYXZlcyB0aGUgYWN0aXZlIGJ1dHRvbnMgc3RhdGUuIn19LHtuYW1lOiJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hY3RpdmVkZXNjZW5kYW50In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB3aGVuIERPTSBmb2N1cyBpcyBvbiBhIFtgY29tcG9zaXRlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jY29tcG9zaXRlKSB3aWRnZXQsIFtgdGV4dGJveGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RleHRib3gpLCBbYGdyb3VwYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JvdXApLCBvciBbYGFwcGxpY2F0aW9uYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXBwbGljYXRpb24pLiJ9fSx7bmFtZToiYXJpYS1hdG9taWMiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtYXRvbWljIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIFthc3Npc3RpdmUgdGVjaG5vbG9naWVzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tYXNzaXN0aXZlLXRlY2hub2xvZ3kpIHdpbGwgcHJlc2VudCBhbGwsIG9yIG9ubHkgcGFydHMgb2YsIHRoZSBjaGFuZ2VkIHJlZ2lvbiBiYXNlZCBvbiB0aGUgY2hhbmdlIG5vdGlmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgW2BhcmlhLXJlbGV2YW50YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZWxldmFudCkgYXR0cmlidXRlLiJ9fSx7bmFtZToiYXJpYS1hdXRvY29tcGxldGUiLHZhbHVlU2V0OiJhdXRvY29tcGxldGUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1hdXRvY29tcGxldGUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgaW5wdXR0aW5nIHRleHQgY291bGQgdHJpZ2dlciBkaXNwbGF5IG9mIG9uZSBvciBtb3JlIHByZWRpY3Rpb25zIG9mIHRoZSB1c2VyJ3MgaW50ZW5kZWQgdmFsdWUgZm9yIGFuIGlucHV0IGFuZCBzcGVjaWZpZXMgaG93IHByZWRpY3Rpb25zIHdvdWxkIGJlIHByZXNlbnRlZCBpZiB0aGV5IGFyZSBtYWRlLiJ9fSx7bmFtZToiYXJpYS1idXN5Iix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWJ1c3kifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIGFuIGVsZW1lbnQgaXMgYmVpbmcgbW9kaWZpZWQgYW5kIHRoYXQgYXNzaXN0aXZlIHRlY2hub2xvZ2llcyBfTUFZXyB3YW50IHRvIHdhaXQgdW50aWwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbXBsZXRlIGJlZm9yZSBleHBvc2luZyB0aGVtIHRvIHRoZSB1c2VyLiJ9fSx7bmFtZToiYXJpYS1jaGVja2VkIix2YWx1ZVNldDoidHJpc3RhdGUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jaGVja2VkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6J0luZGljYXRlcyB0aGUgY3VycmVudCAiY2hlY2tlZCIgW3N0YXRlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tc3RhdGUpIG9mIGNoZWNrYm94ZXMsIHJhZGlvIGJ1dHRvbnMsIGFuZCBvdGhlciBbd2lkZ2V0c10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXdpZGdldCkuIFNlZSByZWxhdGVkIFtgYXJpYS1wcmVzc2VkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wcmVzc2VkKSBhbmQgW2BhcmlhLXNlbGVjdGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZWxlY3RlZCkuJ319LHtuYW1lOiJhcmlhLWNvbGNvdW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sY291bnQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNvbGluZGV4YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xpbmRleCkuIn19LHtuYW1lOiJhcmlhLWNvbGluZGV4IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29saW5kZXgifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhbiBbZWxlbWVudCdzXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgY29sdW1uIGluZGV4IG9yIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgd2l0aGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1jb2xjb3VudGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sY291bnQpIGFuZCBbYGFyaWEtY29sc3BhbmBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29sc3BhbikuIn19LHtuYW1lOiJhcmlhLWNvbHNwYW4iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xzcGFuIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHNwYW5uZWQgYnkgYSBjZWxsIG9yIGdyaWRjZWxsIHdpdGhpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtY29saW5kZXhgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbGluZGV4KSBhbmQgW2BhcmlhLXJvd3NwYW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd3NwYW4pLiJ9fSx7bmFtZToiYXJpYS1jb250cm9scyIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNvbnRyb2xzIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSB3aG9zZSBjb250ZW50cyBvciBwcmVzZW5jZSBhcmUgY29udHJvbGxlZCBieSB0aGUgY3VycmVudCBlbGVtZW50LiBTZWUgcmVsYXRlZCBbYGFyaWEtb3duc2BdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtb3ducykuIn19LHtuYW1lOiJhcmlhLWN1cnJlbnQiLHZhbHVlU2V0OiJjdXJyZW50IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY3VycmVudCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IGl0ZW0gd2l0aGluIGEgY29udGFpbmVyIG9yIHNldCBvZiByZWxhdGVkIGVsZW1lbnRzLiJ9fSx7bmFtZToiYXJpYS1kZXNjcmliZWRieSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgKG9yIGVsZW1lbnRzKSB0aGF0IGRlc2NyaWJlcyB0aGUgW29iamVjdF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9iamVjdCkuIFNlZSByZWxhdGVkIFtgYXJpYS1sYWJlbGxlZGJ5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbGxlZGJ5KS4ifX0se25hbWU6ImFyaWEtZGlzYWJsZWQiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGlzYWJsZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgW3BlcmNlaXZhYmxlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tcGVyY2VpdmFibGUpIGJ1dCBkaXNhYmxlZCwgc28gaXQgaXMgbm90IGVkaXRhYmxlIG9yIG90aGVyd2lzZSBbb3BlcmFibGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1vcGVyYWJsZSkuIFNlZSByZWxhdGVkIFtgYXJpYS1oaWRkZW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWhpZGRlbikgYW5kIFtgYXJpYS1yZWFkb25seWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcmVhZG9ubHkpLiJ9fSx7bmFtZToiYXJpYS1kcm9wZWZmZWN0Iix2YWx1ZVNldDoiZHJvcGVmZmVjdCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRyb3BlZmZlY3QifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiXFxbRGVwcmVjYXRlZCBpbiBBUklBIDEuMVxcXSBJbmRpY2F0ZXMgd2hhdCBmdW5jdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCB3aGVuIGEgZHJhZ2dlZCBvYmplY3QgaXMgcmVsZWFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0LiJ9fSx7bmFtZToiYXJpYS1lcnJvcm1lc3NhZ2UiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1lcnJvcm1lc3NhZ2UifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB0aGF0IHByb3ZpZGVzIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBbb2JqZWN0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tb2JqZWN0KS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWludmFsaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWludmFsaWQpIGFuZCBbYGFyaWEtZGVzY3JpYmVkYnlgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWRlc2NyaWJlZGJ5KS4ifX0se25hbWU6ImFyaWEtZXhwYW5kZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZXhwYW5kZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQsIG9yIGFub3RoZXIgZ3JvdXBpbmcgZWxlbWVudCBpdCBjb250cm9scywgaXMgY3VycmVudGx5IGV4cGFuZGVkIG9yIGNvbGxhcHNlZC4ifX0se25hbWU6ImFyaWEtZmxvd3RvIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZmxvd3RvIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgdGhlIG5leHQgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIGluIGFuIGFsdGVybmF0ZSByZWFkaW5nIG9yZGVyIG9mIGNvbnRlbnQgd2hpY2gsIGF0IHRoZSB1c2VyJ3MgZGlzY3JldGlvbiwgYWxsb3dzIGFzc2lzdGl2ZSB0ZWNobm9sb2d5IHRvIG92ZXJyaWRlIHRoZSBnZW5lcmFsIGRlZmF1bHQgb2YgcmVhZGluZyBpbiBkb2N1bWVudCBzb3VyY2Ugb3JkZXIuIn19LHtuYW1lOiJhcmlhLWdyYWJiZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZ3JhYmJlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOmBcXFtEZXByZWNhdGVkIGluIEFSSUEgMS4xXFxdIEluZGljYXRlcyBhbiBlbGVtZW50J3MgImdyYWJiZWQiIFtzdGF0ZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXN0YXRlKSBpbiBhIGRyYWctYW5kLWRyb3Agb3BlcmF0aW9uLmB9fSx7bmFtZToiYXJpYS1oYXNwb3B1cCIsdmFsdWVTZXQ6Imhhc3BvcHVwIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtaGFzcG9wdXAifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBhdmFpbGFiaWxpdHkgYW5kIHR5cGUgb2YgaW50ZXJhY3RpdmUgcG9wdXAgZWxlbWVudCwgc3VjaCBhcyBtZW51IG9yIGRpYWxvZywgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkuIn19LHtuYW1lOiJhcmlhLWhpZGRlbiIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1oaWRkZW4ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgZXhwb3NlZCB0byBhbiBhY2Nlc3NpYmlsaXR5IEFQSS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWRpc2FibGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1kaXNhYmxlZCkuIn19LHtuYW1lOiJhcmlhLWludmFsaWQiLHZhbHVlU2V0OiJpbnZhbGlkIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtaW52YWxpZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIGVudGVyZWQgdmFsdWUgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gU2VlIHJlbGF0ZWQgW2BhcmlhLWVycm9ybWVzc2FnZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZXJyb3JtZXNzYWdlKS4ifX0se25hbWU6ImFyaWEtbGFiZWwiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIGEgc3RyaW5nIHZhbHVlIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNlZSByZWxhdGVkIFtgYXJpYS1sYWJlbGxlZGJ5YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1sYWJlbGxlZGJ5KS4ifX0se25hbWU6ImFyaWEtbGFiZWxsZWRieSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxhYmVsbGVkYnkifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIHRoYXQgbGFiZWxzIHRoZSBjdXJyZW50IGVsZW1lbnQuIFNlZSByZWxhdGVkIFtgYXJpYS1kZXNjcmliZWRieWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGVzY3JpYmVkYnkpLiJ9fSx7bmFtZToiYXJpYS1sZXZlbCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWxldmVsIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIGhpZXJhcmNoaWNhbCBsZXZlbCBvZiBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIHdpdGhpbiBhIHN0cnVjdHVyZS4ifX0se25hbWU6ImFyaWEtbGl2ZSIsdmFsdWVTZXQ6ImxpdmUiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1saXZlIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGF0IGFuIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgd2lsbCBiZSB1cGRhdGVkLCBhbmQgZGVzY3JpYmVzIHRoZSB0eXBlcyBvZiB1cGRhdGVzIHRoZSBbdXNlciBhZ2VudHNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi11c2VyLWFnZW50KSwgW2Fzc2lzdGl2ZSB0ZWNobm9sb2dpZXNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1hc3Npc3RpdmUtdGVjaG5vbG9neSksIGFuZCB1c2VyIGNhbiBleHBlY3QgZnJvbSB0aGUgW2xpdmUgcmVnaW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tbGl2ZS1yZWdpb24pLiJ9fSx7bmFtZToiYXJpYS1tb2RhbCIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1tb2RhbCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hldGhlciBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIGlzIG1vZGFsIHdoZW4gZGlzcGxheWVkLiJ9fSx7bmFtZToiYXJpYS1tdWx0aWxpbmUiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtbXVsdGlsaW5lIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB3aGV0aGVyIGEgdGV4dCBib3ggYWNjZXB0cyBtdWx0aXBsZSBsaW5lcyBvZiBpbnB1dCBvciBvbmx5IGEgc2luZ2xlIGxpbmUuIn19LHtuYW1lOiJhcmlhLW11bHRpc2VsZWN0YWJsZSIsdmFsdWVTZXQ6ImIiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1tdWx0aXNlbGVjdGFibGUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgbWF5IHNlbGVjdCBtb3JlIHRoYW4gb25lIGl0ZW0gZnJvbSB0aGUgY3VycmVudCBzZWxlY3RhYmxlIGRlc2NlbmRhbnRzLiJ9fSx7bmFtZToiYXJpYS1vcmllbnRhdGlvbiIsdmFsdWVTZXQ6Im9yaWVudGF0aW9uIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtb3JpZW50YXRpb24ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVsZW1lbnQncyBvcmllbnRhdGlvbiBpcyBob3Jpem9udGFsLCB2ZXJ0aWNhbCwgb3IgdW5rbm93bi9hbWJpZ3VvdXMuIn19LHtuYW1lOiJhcmlhLW93bnMiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1vd25zIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IklkZW50aWZpZXMgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSAob3IgZWxlbWVudHMpIGluIG9yZGVyIHRvIGRlZmluZSBhIHZpc3VhbCwgZnVuY3Rpb25hbCwgb3IgY29udGV4dHVhbCBwYXJlbnQvY2hpbGQgW3JlbGF0aW9uc2hpcF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXJlbGF0aW9uc2hpcCkgYmV0d2VlbiBET00gZWxlbWVudHMgd2hlcmUgdGhlIERPTSBoaWVyYXJjaHkgY2Fubm90IGJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSByZWxhdGlvbnNoaXAuIFNlZSByZWxhdGVkIFtgYXJpYS1jb250cm9sc2BdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY29udHJvbHMpLiJ9fSx7bmFtZToiYXJpYS1wbGFjZWhvbGRlciIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXBsYWNlaG9sZGVyIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYSBzaG9ydCBoaW50IChhIHdvcmQgb3Igc2hvcnQgcGhyYXNlKSBpbnRlbmRlZCB0byBhaWQgdGhlIHVzZXIgd2l0aCBkYXRhIGVudHJ5IHdoZW4gdGhlIGNvbnRyb2wgaGFzIG5vIHZhbHVlLiBBIGhpbnQgY291bGQgYmUgYSBzYW1wbGUgdmFsdWUgb3IgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0LiJ9fSx7bmFtZToiYXJpYS1wb3NpbnNldCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXBvc2luc2V0In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYW4gW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSdzIG51bWJlciBvciBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBzZXQgb2YgbGlzdGl0ZW1zIG9yIHRyZWVpdGVtcy4gTm90IHJlcXVpcmVkIGlmIGFsbCBlbGVtZW50cyBpbiB0aGUgc2V0IGFyZSBwcmVzZW50IGluIHRoZSBET00uIFNlZSByZWxhdGVkIFtgYXJpYS1zZXRzaXplYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1zZXRzaXplKS4ifX0se25hbWU6ImFyaWEtcHJlc3NlZCIsdmFsdWVTZXQ6InRyaXN0YXRlIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcHJlc3NlZCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOidJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgInByZXNzZWQiIFtzdGF0ZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLXN0YXRlKSBvZiB0b2dnbGUgYnV0dG9ucy4gU2VlIHJlbGF0ZWQgW2BhcmlhLWNoZWNrZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWNoZWNrZWQpIGFuZCBbYGFyaWEtc2VsZWN0ZWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNlbGVjdGVkKS4nfX0se25hbWU6ImFyaWEtcmVhZG9ubHkiLHZhbHVlU2V0OiJiIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcmVhZG9ubHkifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoYXQgdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgaXMgbm90IGVkaXRhYmxlLCBidXQgaXMgb3RoZXJ3aXNlIFtvcGVyYWJsZV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9wZXJhYmxlKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLWRpc2FibGVkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1kaXNhYmxlZCkuIn19LHtuYW1lOiJhcmlhLXJlbGV2YW50Iix2YWx1ZVNldDoicmVsZXZhbnQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yZWxldmFudCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgd2hhdCBub3RpZmljYXRpb25zIHRoZSB1c2VyIGFnZW50IHdpbGwgdHJpZ2dlciB3aGVuIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgd2l0aGluIGEgbGl2ZSByZWdpb24gaXMgbW9kaWZpZWQuIFNlZSByZWxhdGVkIFtgYXJpYS1hdG9taWNgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLWF0b21pYykuIn19LHtuYW1lOiJhcmlhLXJlcXVpcmVkIix2YWx1ZVNldDoiYiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJlcXVpcmVkIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGF0IHVzZXIgaW5wdXQgaXMgcmVxdWlyZWQgb24gdGhlIFtlbGVtZW50XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tZWxlbWVudCkgYmVmb3JlIGEgZm9ybSBtYXkgYmUgc3VibWl0dGVkLiJ9fSx7bmFtZToiYXJpYS1yb2xlZGVzY3JpcHRpb24iLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb2xlZGVzY3JpcHRpb24ifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyBhIGh1bWFuLXJlYWRhYmxlLCBhdXRob3ItbG9jYWxpemVkIGRlc2NyaXB0aW9uIGZvciB0aGUgW3JvbGVdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1yb2xlKSBvZiBhbiBbZWxlbWVudF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpLiJ9fSx7bmFtZToiYXJpYS1yb3djb3VudCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2NvdW50In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIGEgW2B0YWJsZWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RhYmxlKSwgW2BncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZ3JpZCksIG9yIFtgdHJlZWdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0cmVlZ3JpZCkuIFNlZSByZWxhdGVkIFtgYXJpYS1yb3dpbmRleGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93aW5kZXgpLiJ9fSx7bmFtZToiYXJpYS1yb3dpbmRleCIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2luZGV4In1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgYW4gW2VsZW1lbnQnc10oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLWVsZW1lbnQpIHJvdyBpbmRleCBvciBwb3NpdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIHdpdGhpbiBhIFtgdGFibGVgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyN0YWJsZSksIFtgZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2dyaWQpLCBvciBbYHRyZWVncmlkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdHJlZWdyaWQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtcm93Y291bnRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd2NvdW50KSBhbmQgW2BhcmlhLXJvd3NwYW5gXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXJvd3NwYW4pLiJ9fSx7bmFtZToiYXJpYS1yb3dzcGFuIixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtcm93c3BhbiJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBudW1iZXIgb2Ygcm93cyBzcGFubmVkIGJ5IGEgY2VsbCBvciBncmlkY2VsbCB3aXRoaW4gYSBbYHRhYmxlYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jdGFibGUpLCBbYGdyaWRgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNncmlkKSwgb3IgW2B0cmVlZ3JpZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI3RyZWVncmlkKS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXJvd2luZGV4YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1yb3dpbmRleCkgYW5kIFtgYXJpYS1jb2xzcGFuYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1jb2xzcGFuKS4ifX0se25hbWU6ImFyaWEtc2VsZWN0ZWQiLHZhbHVlU2V0OiJ1IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtc2VsZWN0ZWQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZTonSW5kaWNhdGVzIHRoZSBjdXJyZW50ICJzZWxlY3RlZCIgW3N0YXRlXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4tc3RhdGUpIG9mIHZhcmlvdXMgW3dpZGdldHNdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtY2hlY2tlZGBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtY2hlY2tlZCkgYW5kIFtgYXJpYS1wcmVzc2VkYF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wcmVzc2VkKS4nfX0se25hbWU6ImFyaWEtc2V0c2l6ZSIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXNldHNpemUifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBjdXJyZW50IHNldCBvZiBsaXN0aXRlbXMgb3IgdHJlZWl0ZW1zLiBOb3QgcmVxdWlyZWQgaWYgYWxsIGVsZW1lbnRzIGluIHRoZSBzZXQgYXJlIHByZXNlbnQgaW4gdGhlIERPTS4gU2VlIHJlbGF0ZWQgW2BhcmlhLXBvc2luc2V0YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS1wb3NpbnNldCkuIn19LHtuYW1lOiJhcmlhLXNvcnQiLHZhbHVlU2V0OiJzb3J0IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtc29ydCJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgaWYgaXRlbXMgaW4gYSB0YWJsZSBvciBncmlkIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcgb3JkZXIuIn19LHtuYW1lOiJhcmlhLXZhbHVlbWF4IixyZWZlcmVuY2VzOlt7bmFtZToiV0FJLUFSSUEgUmVmZXJlbmNlIix1cmw6Imh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtdmFsdWVtYXgifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIGZvciBhIHJhbmdlIFt3aWRnZXRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiJ9fSx7bmFtZToiYXJpYS12YWx1ZW1pbiIscmVmZXJlbmNlczpbe25hbWU6IldBSS1BUklBIFJlZmVyZW5jZSIsdXJsOiJodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVlbWluIn1dLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkRlZmluZXMgdGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZSBmb3IgYSByYW5nZSBbd2lkZ2V0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4ifX0se25hbWU6ImFyaWEtdmFsdWVub3ciLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZW5vdyJ9XSxkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJEZWZpbmVzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBhIHJhbmdlIFt3aWRnZXRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi13aWRnZXQpLiBTZWUgcmVsYXRlZCBbYGFyaWEtdmFsdWV0ZXh0YF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZXRleHQpLiJ9fSx7bmFtZToiYXJpYS12YWx1ZXRleHQiLHJlZmVyZW5jZXM6W3tuYW1lOiJXQUktQVJJQSBSZWZlcmVuY2UiLHVybDoiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jYXJpYS12YWx1ZXRleHQifV0sZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiRGVmaW5lcyB0aGUgaHVtYW4gcmVhZGFibGUgdGV4dCBhbHRlcm5hdGl2ZSBvZiBbYGFyaWEtdmFsdWVub3dgXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNhcmlhLXZhbHVlbm93KSBmb3IgYSByYW5nZSBbd2lkZ2V0XShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEtMS4xLyNkZm4td2lkZ2V0KS4ifX0se25hbWU6ImFyaWEtZGV0YWlscyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSWRlbnRpZmllcyB0aGUgW2VsZW1lbnRdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2Rmbi1lbGVtZW50KSB0aGF0IHByb3ZpZGVzIGEgZGV0YWlsZWQsIGV4dGVuZGVkIGRlc2NyaXB0aW9uIGZvciB0aGUgW29iamVjdF0oaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLTEuMS8jZGZuLW9iamVjdCkuIFNlZSByZWxhdGVkIFtgYXJpYS1kZXNjcmliZWRieWBdKGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS0xLjEvI2FyaWEtZGVzY3JpYmVkYnkpLiJ9fSx7bmFtZToiYXJpYS1rZXlzaG9ydGN1dHMiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyBrZXlib2FyZCBzaG9ydGN1dHMgdGhhdCBhbiBhdXRob3IgaGFzIGltcGxlbWVudGVkIHRvIGFjdGl2YXRlIG9yIGdpdmUgZm9jdXMgdG8gYW4gZWxlbWVudC4ifX1dLHZhbHVlU2V0czpbe25hbWU6ImIiLHZhbHVlczpbe25hbWU6InRydWUifSx7bmFtZToiZmFsc2UifV19LHtuYW1lOiJ1Iix2YWx1ZXM6W3tuYW1lOiJ0cnVlIn0se25hbWU6ImZhbHNlIn0se25hbWU6InVuZGVmaW5lZCJ9XX0se25hbWU6Im8iLHZhbHVlczpbe25hbWU6Im9uIn0se25hbWU6Im9mZiJ9XX0se25hbWU6InkiLHZhbHVlczpbe25hbWU6InllcyJ9LHtuYW1lOiJubyJ9XX0se25hbWU6InciLHZhbHVlczpbe25hbWU6InNvZnQifSx7bmFtZToiaGFyZCJ9XX0se25hbWU6ImQiLHZhbHVlczpbe25hbWU6Imx0ciJ9LHtuYW1lOiJydGwifSx7bmFtZToiYXV0byJ9XX0se25hbWU6Im0iLHZhbHVlczpbe25hbWU6ImdldCIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiQ29ycmVzcG9uZHMgdG8gdGhlIEhUVFAgW0dFVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjMpOyBmb3JtIGRhdGEgYXJlIGFwcGVuZGVkIHRvIHRoZSBgYWN0aW9uYCBhdHRyaWJ1dGUgVVJJIHdpdGggYSAnPycgYXMgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdGluZyBVUkkgaXMgc2VudCB0byB0aGUgc2VydmVyLiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB0aGUgZm9ybSBoYXMgbm8gc2lkZS1lZmZlY3RzIGFuZCBjb250YWlucyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuIn19LHtuYW1lOiJwb3N0IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJDb3JyZXNwb25kcyB0byB0aGUgSFRUUCBbUE9TVCBtZXRob2RdKGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzkuaHRtbCNzZWM5LjUpOyBmb3JtIGRhdGEgYXJlIGluY2x1ZGVkIGluIHRoZSBib2R5IG9mIHRoZSBmb3JtIGFuZCBzZW50IHRvIHRoZSBzZXJ2ZXIuIn19LHtuYW1lOiJkaWFsb2ciLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IlVzZSB3aGVuIHRoZSBmb3JtIGlzIGluc2lkZSBhIFtgPGRpYWxvZz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvZGlhbG9nKSBlbGVtZW50IHRvIGNsb3NlIHRoZSBkaWFsb2cgd2hlbiBzdWJtaXR0ZWQuIn19XX0se25hbWU6ImZtIix2YWx1ZXM6W3tuYW1lOiJnZXQifSx7bmFtZToicG9zdCJ9XX0se25hbWU6InMiLHZhbHVlczpbe25hbWU6InJvdyJ9LHtuYW1lOiJjb2wifSx7bmFtZToicm93Z3JvdXAifSx7bmFtZToiY29sZ3JvdXAifV19LHtuYW1lOiJ0Iix2YWx1ZXM6W3tuYW1lOiJoaWRkZW4ifSx7bmFtZToidGV4dCJ9LHtuYW1lOiJzZWFyY2gifSx7bmFtZToidGVsIn0se25hbWU6InVybCJ9LHtuYW1lOiJlbWFpbCJ9LHtuYW1lOiJwYXNzd29yZCJ9LHtuYW1lOiJkYXRldGltZSJ9LHtuYW1lOiJkYXRlIn0se25hbWU6Im1vbnRoIn0se25hbWU6IndlZWsifSx7bmFtZToidGltZSJ9LHtuYW1lOiJkYXRldGltZS1sb2NhbCJ9LHtuYW1lOiJudW1iZXIifSx7bmFtZToicmFuZ2UifSx7bmFtZToiY29sb3IifSx7bmFtZToiY2hlY2tib3gifSx7bmFtZToicmFkaW8ifSx7bmFtZToiZmlsZSJ9LHtuYW1lOiJzdWJtaXQifSx7bmFtZToiaW1hZ2UifSx7bmFtZToicmVzZXQifSx7bmFtZToiYnV0dG9uIn1dfSx7bmFtZToiaW0iLHZhbHVlczpbe25hbWU6InZlcmJhdGltIn0se25hbWU6ImxhdGluIn0se25hbWU6ImxhdGluLW5hbWUifSx7bmFtZToibGF0aW4tcHJvc2UifSx7bmFtZToiZnVsbC13aWR0aC1sYXRpbiJ9LHtuYW1lOiJrYW5hIn0se25hbWU6ImthbmEtbmFtZSJ9LHtuYW1lOiJrYXRha2FuYSJ9LHtuYW1lOiJudW1lcmljIn0se25hbWU6InRlbCJ9LHtuYW1lOiJlbWFpbCJ9LHtuYW1lOiJ1cmwifV19LHtuYW1lOiJidCIsdmFsdWVzOlt7bmFtZToiYnV0dG9uIn0se25hbWU6InN1Ym1pdCJ9LHtuYW1lOiJyZXNldCJ9LHtuYW1lOiJtZW51In1dfSx7bmFtZToibHQiLHZhbHVlczpbe25hbWU6IjEifSx7bmFtZToiYSJ9LHtuYW1lOiJBIn0se25hbWU6ImkifSx7bmFtZToiSSJ9XX0se25hbWU6Im10Iix2YWx1ZXM6W3tuYW1lOiJjb250ZXh0In0se25hbWU6InRvb2xiYXIifV19LHtuYW1lOiJtaXQiLHZhbHVlczpbe25hbWU6ImNvbW1hbmQifSx7bmFtZToiY2hlY2tib3gifSx7bmFtZToicmFkaW8ifV19LHtuYW1lOiJldCIsdmFsdWVzOlt7bmFtZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn0se25hbWU6Im11bHRpcGFydC9mb3JtLWRhdGEifSx7bmFtZToidGV4dC9wbGFpbiJ9XX0se25hbWU6InRrIix2YWx1ZXM6W3tuYW1lOiJzdWJ0aXRsZXMifSx7bmFtZToiY2FwdGlvbnMifSx7bmFtZToiZGVzY3JpcHRpb25zIn0se25hbWU6ImNoYXB0ZXJzIn0se25hbWU6Im1ldGFkYXRhIn1dfSx7bmFtZToicGwiLHZhbHVlczpbe25hbWU6Im5vbmUifSx7bmFtZToibWV0YWRhdGEifSx7bmFtZToiYXV0byJ9XX0se25hbWU6InNoIix2YWx1ZXM6W3tuYW1lOiJjaXJjbGUifSx7bmFtZToiZGVmYXVsdCJ9LHtuYW1lOiJwb2x5In0se25hbWU6InJlY3QifV19LHtuYW1lOiJ4byIsdmFsdWVzOlt7bmFtZToiYW5vbnltb3VzIn0se25hbWU6InVzZS1jcmVkZW50aWFscyJ9XX0se25hbWU6InNiIix2YWx1ZXM6W3tuYW1lOiJhbGxvdy1mb3JtcyJ9LHtuYW1lOiJhbGxvdy1tb2RhbHMifSx7bmFtZToiYWxsb3ctcG9pbnRlci1sb2NrIn0se25hbWU6ImFsbG93LXBvcHVwcyJ9LHtuYW1lOiJhbGxvdy1wb3B1cHMtdG8tZXNjYXBlLXNhbmRib3gifSx7bmFtZToiYWxsb3ctc2FtZS1vcmlnaW4ifSx7bmFtZToiYWxsb3ctc2NyaXB0cyJ9LHtuYW1lOiJhbGxvdy10b3AtbmF2aWdhdGlvbiJ9XX0se25hbWU6InRyaXN0YXRlIix2YWx1ZXM6W3tuYW1lOiJ0cnVlIn0se25hbWU6ImZhbHNlIn0se25hbWU6Im1peGVkIn0se25hbWU6InVuZGVmaW5lZCJ9XX0se25hbWU6ImlucHV0YXV0b2NvbXBsZXRlIix2YWx1ZXM6W3tuYW1lOiJhZGRpdGlvbmFsLW5hbWUifSx7bmFtZToiYWRkcmVzcy1sZXZlbDEifSx7bmFtZToiYWRkcmVzcy1sZXZlbDIifSx7bmFtZToiYWRkcmVzcy1sZXZlbDMifSx7bmFtZToiYWRkcmVzcy1sZXZlbDQifSx7bmFtZToiYWRkcmVzcy1saW5lMSJ9LHtuYW1lOiJhZGRyZXNzLWxpbmUyIn0se25hbWU6ImFkZHJlc3MtbGluZTMifSx7bmFtZToiYmRheSJ9LHtuYW1lOiJiZGF5LXllYXIifSx7bmFtZToiYmRheS1kYXkifSx7bmFtZToiYmRheS1tb250aCJ9LHtuYW1lOiJiaWxsaW5nIn0se25hbWU6ImNjLWFkZGl0aW9uYWwtbmFtZSJ9LHtuYW1lOiJjYy1jc2MifSx7bmFtZToiY2MtZXhwIn0se25hbWU6ImNjLWV4cC1tb250aCJ9LHtuYW1lOiJjYy1leHAteWVhciJ9LHtuYW1lOiJjYy1mYW1pbHktbmFtZSJ9LHtuYW1lOiJjYy1naXZlbi1uYW1lIn0se25hbWU6ImNjLW5hbWUifSx7bmFtZToiY2MtbnVtYmVyIn0se25hbWU6ImNjLXR5cGUifSx7bmFtZToiY291bnRyeSJ9LHtuYW1lOiJjb3VudHJ5LW5hbWUifSx7bmFtZToiY3VycmVudC1wYXNzd29yZCJ9LHtuYW1lOiJlbWFpbCJ9LHtuYW1lOiJmYW1pbHktbmFtZSJ9LHtuYW1lOiJmYXgifSx7bmFtZToiZ2l2ZW4tbmFtZSJ9LHtuYW1lOiJob21lIn0se25hbWU6Imhvbm9yaWZpYy1wcmVmaXgifSx7bmFtZToiaG9ub3JpZmljLXN1ZmZpeCJ9LHtuYW1lOiJpbXBwIn0se25hbWU6Imxhbmd1YWdlIn0se25hbWU6Im1vYmlsZSJ9LHtuYW1lOiJuYW1lIn0se25hbWU6Im5ldy1wYXNzd29yZCJ9LHtuYW1lOiJuaWNrbmFtZSJ9LHtuYW1lOiJvcmdhbml6YXRpb24ifSx7bmFtZToib3JnYW5pemF0aW9uLXRpdGxlIn0se25hbWU6InBhZ2VyIn0se25hbWU6InBob3RvIn0se25hbWU6InBvc3RhbC1jb2RlIn0se25hbWU6InNleCJ9LHtuYW1lOiJzaGlwcGluZyJ9LHtuYW1lOiJzdHJlZXQtYWRkcmVzcyJ9LHtuYW1lOiJ0ZWwtYXJlYS1jb2RlIn0se25hbWU6InRlbCJ9LHtuYW1lOiJ0ZWwtY291bnRyeS1jb2RlIn0se25hbWU6InRlbC1leHRlbnNpb24ifSx7bmFtZToidGVsLWxvY2FsIn0se25hbWU6InRlbC1sb2NhbC1wcmVmaXgifSx7bmFtZToidGVsLWxvY2FsLXN1ZmZpeCJ9LHtuYW1lOiJ0ZWwtbmF0aW9uYWwifSx7bmFtZToidHJhbnNhY3Rpb24tYW1vdW50In0se25hbWU6InRyYW5zYWN0aW9uLWN1cnJlbmN5In0se25hbWU6InVybCJ9LHtuYW1lOiJ1c2VybmFtZSJ9LHtuYW1lOiJ3b3JrIn1dfSx7bmFtZToiYXV0b2NvbXBsZXRlIix2YWx1ZXM6W3tuYW1lOiJpbmxpbmUifSx7bmFtZToibGlzdCJ9LHtuYW1lOiJib3RoIn0se25hbWU6Im5vbmUifV19LHtuYW1lOiJjdXJyZW50Iix2YWx1ZXM6W3tuYW1lOiJwYWdlIn0se25hbWU6InN0ZXAifSx7bmFtZToibG9jYXRpb24ifSx7bmFtZToiZGF0ZSJ9LHtuYW1lOiJ0aW1lIn0se25hbWU6InRydWUifSx7bmFtZToiZmFsc2UifV19LHtuYW1lOiJkcm9wZWZmZWN0Iix2YWx1ZXM6W3tuYW1lOiJjb3B5In0se25hbWU6Im1vdmUifSx7bmFtZToibGluayJ9LHtuYW1lOiJleGVjdXRlIn0se25hbWU6InBvcHVwIn0se25hbWU6Im5vbmUifV19LHtuYW1lOiJpbnZhbGlkIix2YWx1ZXM6W3tuYW1lOiJncmFtbWFyIn0se25hbWU6ImZhbHNlIn0se25hbWU6InNwZWxsaW5nIn0se25hbWU6InRydWUifV19LHtuYW1lOiJsaXZlIix2YWx1ZXM6W3tuYW1lOiJvZmYifSx7bmFtZToicG9saXRlIn0se25hbWU6ImFzc2VydGl2ZSJ9XX0se25hbWU6Im9yaWVudGF0aW9uIix2YWx1ZXM6W3tuYW1lOiJ2ZXJ0aWNhbCJ9LHtuYW1lOiJob3Jpem9udGFsIn0se25hbWU6InVuZGVmaW5lZCJ9XX0se25hbWU6InJlbGV2YW50Iix2YWx1ZXM6W3tuYW1lOiJhZGRpdGlvbnMifSx7bmFtZToicmVtb3ZhbHMifSx7bmFtZToidGV4dCJ9LHtuYW1lOiJhbGwifSx7bmFtZToiYWRkaXRpb25zIHRleHQifV19LHtuYW1lOiJzb3J0Iix2YWx1ZXM6W3tuYW1lOiJhc2NlbmRpbmcifSx7bmFtZToiZGVzY2VuZGluZyJ9LHtuYW1lOiJub25lIn0se25hbWU6Im90aGVyIn1dfSx7bmFtZToicm9sZXMiLHZhbHVlczpbe25hbWU6ImFsZXJ0In0se25hbWU6ImFsZXJ0ZGlhbG9nIn0se25hbWU6ImJ1dHRvbiJ9LHtuYW1lOiJjaGVja2JveCJ9LHtuYW1lOiJkaWFsb2cifSx7bmFtZToiZ3JpZGNlbGwifSx7bmFtZToibGluayJ9LHtuYW1lOiJsb2cifSx7bmFtZToibWFycXVlZSJ9LHtuYW1lOiJtZW51aXRlbSJ9LHtuYW1lOiJtZW51aXRlbWNoZWNrYm94In0se25hbWU6Im1lbnVpdGVtcmFkaW8ifSx7bmFtZToib3B0aW9uIn0se25hbWU6InByb2dyZXNzYmFyIn0se25hbWU6InJhZGlvIn0se25hbWU6InNjcm9sbGJhciJ9LHtuYW1lOiJzZWFyY2hib3gifSx7bmFtZToic2xpZGVyIn0se25hbWU6InNwaW5idXR0b24ifSx7bmFtZToic3RhdHVzIn0se25hbWU6InN3aXRjaCJ9LHtuYW1lOiJ0YWIifSx7bmFtZToidGFicGFuZWwifSx7bmFtZToidGV4dGJveCJ9LHtuYW1lOiJ0aW1lciJ9LHtuYW1lOiJ0b29sdGlwIn0se25hbWU6InRyZWVpdGVtIn0se25hbWU6ImNvbWJvYm94In0se25hbWU6ImdyaWQifSx7bmFtZToibGlzdGJveCJ9LHtuYW1lOiJtZW51In0se25hbWU6Im1lbnViYXIifSx7bmFtZToicmFkaW9ncm91cCJ9LHtuYW1lOiJ0YWJsaXN0In0se25hbWU6InRyZWUifSx7bmFtZToidHJlZWdyaWQifSx7bmFtZToiYXBwbGljYXRpb24ifSx7bmFtZToiYXJ0aWNsZSJ9LHtuYW1lOiJjZWxsIn0se25hbWU6ImNvbHVtbmhlYWRlciJ9LHtuYW1lOiJkZWZpbml0aW9uIn0se25hbWU6ImRpcmVjdG9yeSJ9LHtuYW1lOiJkb2N1bWVudCJ9LHtuYW1lOiJmZWVkIn0se25hbWU6ImZpZ3VyZSJ9LHtuYW1lOiJncm91cCJ9LHtuYW1lOiJoZWFkaW5nIn0se25hbWU6ImltZyJ9LHtuYW1lOiJsaXN0In0se25hbWU6Imxpc3RpdGVtIn0se25hbWU6Im1hdGgifSx7bmFtZToibm9uZSJ9LHtuYW1lOiJub3RlIn0se25hbWU6InByZXNlbnRhdGlvbiJ9LHtuYW1lOiJyZWdpb24ifSx7bmFtZToicm93In0se25hbWU6InJvd2dyb3VwIn0se25hbWU6InJvd2hlYWRlciJ9LHtuYW1lOiJzZXBhcmF0b3IifSx7bmFtZToidGFibGUifSx7bmFtZToidGVybSJ9LHtuYW1lOiJ0ZXh0In0se25hbWU6InRvb2xiYXIifSx7bmFtZToiYmFubmVyIn0se25hbWU6ImNvbXBsZW1lbnRhcnkifSx7bmFtZToiY29udGVudGluZm8ifSx7bmFtZToiZm9ybSJ9LHtuYW1lOiJtYWluIn0se25hbWU6Im5hdmlnYXRpb24ifSx7bmFtZToicmVnaW9uIn0se25hbWU6InNlYXJjaCJ9LHtuYW1lOiJkb2MtYWJzdHJhY3QifSx7bmFtZToiZG9jLWFja25vd2xlZGdtZW50cyJ9LHtuYW1lOiJkb2MtYWZ0ZXJ3b3JkIn0se25hbWU6ImRvYy1hcHBlbmRpeCJ9LHtuYW1lOiJkb2MtYmFja2xpbmsifSx7bmFtZToiZG9jLWJpYmxpb2VudHJ5In0se25hbWU6ImRvYy1iaWJsaW9ncmFwaHkifSx7bmFtZToiZG9jLWJpYmxpb3JlZiJ9LHtuYW1lOiJkb2MtY2hhcHRlciJ9LHtuYW1lOiJkb2MtY29sb3Bob24ifSx7bmFtZToiZG9jLWNvbmNsdXNpb24ifSx7bmFtZToiZG9jLWNvdmVyIn0se25hbWU6ImRvYy1jcmVkaXQifSx7bmFtZToiZG9jLWNyZWRpdHMifSx7bmFtZToiZG9jLWRlZGljYXRpb24ifSx7bmFtZToiZG9jLWVuZG5vdGUifSx7bmFtZToiZG9jLWVuZG5vdGVzIn0se25hbWU6ImRvYy1lcGlncmFwaCJ9LHtuYW1lOiJkb2MtZXBpbG9ndWUifSx7bmFtZToiZG9jLWVycmF0YSJ9LHtuYW1lOiJkb2MtZXhhbXBsZSJ9LHtuYW1lOiJkb2MtZm9vdG5vdGUifSx7bmFtZToiZG9jLWZvcmV3b3JkIn0se25hbWU6ImRvYy1nbG9zc2FyeSJ9LHtuYW1lOiJkb2MtZ2xvc3NyZWYifSx7bmFtZToiZG9jLWluZGV4In0se25hbWU6ImRvYy1pbnRyb2R1Y3Rpb24ifSx7bmFtZToiZG9jLW5vdGVyZWYifSx7bmFtZToiZG9jLW5vdGljZSJ9LHtuYW1lOiJkb2MtcGFnZWJyZWFrIn0se25hbWU6ImRvYy1wYWdlbGlzdCJ9LHtuYW1lOiJkb2MtcGFydCJ9LHtuYW1lOiJkb2MtcHJlZmFjZSJ9LHtuYW1lOiJkb2MtcHJvbG9ndWUifSx7bmFtZToiZG9jLXB1bGxxdW90ZSJ9LHtuYW1lOiJkb2MtcW5hIn0se25hbWU6ImRvYy1zdWJ0aXRsZSJ9LHtuYW1lOiJkb2MtdGlwIn0se25hbWU6ImRvYy10b2MifV19LHtuYW1lOiJtZXRhbmFtZXMiLHZhbHVlczpbe25hbWU6ImFwcGxpY2F0aW9uLW5hbWUifSx7bmFtZToiYXV0aG9yIn0se25hbWU6ImRlc2NyaXB0aW9uIn0se25hbWU6ImZvcm1hdC1kZXRlY3Rpb24ifSx7bmFtZToiZ2VuZXJhdG9yIn0se25hbWU6ImtleXdvcmRzIn0se25hbWU6InB1Ymxpc2hlciJ9LHtuYW1lOiJyZWZlcnJlciJ9LHtuYW1lOiJyb2JvdHMifSx7bmFtZToidGhlbWUtY29sb3IifSx7bmFtZToidmlld3BvcnQifV19LHtuYW1lOiJoYXNwb3B1cCIsdmFsdWVzOlt7bmFtZToiZmFsc2UiLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IihkZWZhdWx0KSBJbmRpY2F0ZXMgdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIHBvcHVwLiJ9fSx7bmFtZToidHJ1ZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIG1lbnUuIn19LHtuYW1lOiJtZW51IixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIHBvcHVwIGlzIGEgbWVudS4ifX0se25hbWU6Imxpc3Rib3giLGRlc2NyaXB0aW9uOntraW5kOiJtYXJrZG93biIsdmFsdWU6IkluZGljYXRlcyB0aGUgcG9wdXAgaXMgYSBsaXN0Ym94LiJ9fSx7bmFtZToidHJlZSIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIHRyZWUuIn19LHtuYW1lOiJncmlkIixkZXNjcmlwdGlvbjp7a2luZDoibWFya2Rvd24iLHZhbHVlOiJJbmRpY2F0ZXMgdGhlIHBvcHVwIGlzIGEgZ3JpZC4ifX0se25hbWU6ImRpYWxvZyIsZGVzY3JpcHRpb246e2tpbmQ6Im1hcmtkb3duIix2YWx1ZToiSW5kaWNhdGVzIHRoZSBwb3B1cCBpcyBhIGRpYWxvZy4ifX1dfV19LGVjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmRhdGFQcm92aWRlcnM9W10sdGhpcy5zZXREYXRhUHJvdmlkZXJzKHQudXNlRGVmYXVsdERhdGFQcm92aWRlciE9PSExLHQuY3VzdG9tRGF0YVByb3ZpZGVyc3x8W10pfXJldHVybiBlLnByb3RvdHlwZS5zZXREYXRhUHJvdmlkZXJzPWZ1bmN0aW9uKHQsbil7dmFyIGk7dGhpcy5kYXRhUHJvdmlkZXJzPVtdLHQmJnRoaXMuZGF0YVByb3ZpZGVycy5wdXNoKG5ldyBZYSgiaHRtbDUiLEt1KSksKGk9dGhpcy5kYXRhUHJvdmlkZXJzKS5wdXNoLmFwcGx5KGksbil9LGUucHJvdG90eXBlLmdldERhdGFQcm92aWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJzfSxlfSgpLHRjPXt9O2Z1bmN0aW9uIG5jKGUpe2U9PT12b2lkIDAmJihlPXRjKTt2YXIgdD1uZXcgZWMoZSksbj1uZXcgTHUoZSx0KSxpPW5ldyB4dShlLHQpO3JldHVybntzZXREYXRhUHJvdmlkZXJzOnQuc2V0RGF0YVByb3ZpZGVycy5iaW5kKHQpLGNyZWF0ZVNjYW5uZXI6d2UscGFyc2VIVE1MRG9jdW1lbnQ6ZnVuY3Rpb24ocil7cmV0dXJuIEphKHIuZ2V0VGV4dCgpKX0sZG9Db21wbGV0ZTppLmRvQ29tcGxldGUuYmluZChpKSxkb0NvbXBsZXRlMjppLmRvQ29tcGxldGUyLmJpbmQoaSksc2V0Q29tcGxldGlvblBhcnRpY2lwYW50czppLnNldENvbXBsZXRpb25QYXJ0aWNpcGFudHMuYmluZChpKSxkb0hvdmVyOm4uZG9Ib3Zlci5iaW5kKG4pLGZvcm1hdDpEdSxmaW5kRG9jdW1lbnRIaWdobGlnaHRzOnF1LGZpbmREb2N1bWVudExpbmtzOkJ1LGZpbmREb2N1bWVudFN5bWJvbHM6T3UsZ2V0Rm9sZGluZ1JhbmdlczpKdSxnZXRTZWxlY3Rpb25SYW5nZXM6UXUsZG9RdW90ZUNvbXBsZXRlOmkuZG9RdW90ZUNvbXBsZXRlLmJpbmQoaSksZG9UYWdDb21wbGV0ZTppLmRvVGFnQ29tcGxldGUuYmluZChpKSxkb1JlbmFtZTpqdSxmaW5kTWF0Y2hpbmdUYWdQb3NpdGlvbjokdSxmaW5kT25UeXBlUmVuYW1lUmFuZ2VzOmNzLGZpbmRMaW5rZWRFZGl0aW5nUmFuZ2VzOmNzfX1mdW5jdGlvbiBpYyhlLHQpe3JldHVybiBuZXcgWWEoZSx0KX12YXIgcmM9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9jdHg9ZSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzPXQubGFuZ3VhZ2VTZXR0aW5ncyx0aGlzLl9sYW5ndWFnZUlkPXQubGFuZ3VhZ2VJZDtjb25zdCBuPXRoaXMuX2xhbmd1YWdlU2V0dGluZ3MuZGF0YSxpPW4/LnVzZURlZmF1bHREYXRhUHJvdmlkZXIscj1bXTtpZihuPy5kYXRhUHJvdmlkZXJzKWZvcihjb25zdCBhIGluIG4uZGF0YVByb3ZpZGVycylyLnB1c2goaWMoYSxuLmRhdGFQcm92aWRlcnNbYV0pKTt0aGlzLl9sYW5ndWFnZVNlcnZpY2U9bmMoe3VzZURlZmF1bHREYXRhUHJvdmlkZXI6aSxjdXN0b21EYXRhUHJvdmlkZXJzOnJ9KX1hc3luYyBkb0NvbXBsZXRlKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUhUTUxEb2N1bWVudChuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0NvbXBsZXRlKG4sdCxpLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MmJnRoaXMuX2xhbmd1YWdlU2V0dGluZ3Muc3VnZ2VzdCkpfWFzeW5jIGZvcm1hdChlLHQsbil7bGV0IGk9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFpKXJldHVybltdO2xldCByPXsuLi50aGlzLl9sYW5ndWFnZVNldHRpbmdzLmZvcm1hdCwuLi5ufSxhPXRoaXMuX2xhbmd1YWdlU2VydmljZS5mb3JtYXQoaSx0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoYSl9YXN5bmMgZG9Ib3ZlcihlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQobikscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9Ib3ZlcihuLHQsaSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBmaW5kRG9jdW1lbnRIaWdobGlnaHRzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUhUTUxEb2N1bWVudChuKSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRIaWdobGlnaHRzKG4sdCxpKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGZpbmREb2N1bWVudExpbmtzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50TGlua3ModCxudWxsKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4pfWFzeW5jIGZpbmREb2N1bWVudFN5bWJvbHMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUhUTUxEb2N1bWVudCh0KSxpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRTeW1ib2xzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyBnZXRGb2xkaW5nUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRGb2xkaW5nUmFuZ2VzKG4sdCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShpKX1hc3luYyBnZXRTZWxlY3Rpb25SYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldFNlbGVjdGlvblJhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgZG9SZW5hbWUoZSx0LG4pe2xldCBpPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighaSlyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VIVE1MRG9jdW1lbnQoaSksYT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9SZW5hbWUoaSx0LG4scik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShhKX1fZ2V0VGV4dERvY3VtZW50KGUpe2xldCB0PXRoaXMuX2N0eC5nZXRNaXJyb3JNb2RlbHMoKTtmb3IobGV0IG4gb2YgdClpZihuLnVyaS50b1N0cmluZygpPT09ZSlyZXR1cm4gYWkuY3JlYXRlKGUsdGhpcy5fbGFuZ3VhZ2VJZCxuLnZlcnNpb24sbi5nZXRWYWx1ZSgpKTtyZXR1cm4gbnVsbH19O3NlbGYub25tZXNzYWdlPSgpPT57Y2EoKGUsdCk9Pm5ldyByYyhlLHQpKX19KSgpOwo=",I=Z=>Uint8Array.from(atob(Z),l=>l.charCodeAt(0)),G=typeof self<"u"&&self.Blob&&new Blob([I(d)],{type:"text/javascript;charset=utf-8"});function W(Z){let l;try{if(l=G&&(self.URL||self.webkitURL).createObjectURL(G),!l)throw"";const b=new Worker(l,{name:Z==null?void 0:Z.name});return b.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(l)}),b}catch(b){return new Worker("data:text/javascript;base64,"+d,{name:Z==null?void 0:Z.name})}finally{l&&(self.URL||self.webkitURL).revokeObjectURL(l)}}export{W as default};