@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.
- package/dist/@vtj/materials/assets/antdv/index.umd.js +2 -2
- package/dist/@vtj/materials/assets/charts/index.umd.js +2 -2
- package/dist/@vtj/materials/assets/element/index.umd.js +2 -2
- package/dist/@vtj/materials/assets/ui/index.umd.js +2 -2
- package/dist/@vtj/materials/deps/@vtj/charts/index.umd.js +2 -2
- package/dist/@vtj/materials/deps/@vtj/icons/index.umd.js +2 -2
- package/dist/@vtj/materials/deps/@vtj/ui/index.umd.js +3 -3
- package/dist/@vtj/materials/deps/@vtj/utils/index.umd.js +19 -19
- package/dist/@vtj/materials/deps/vue/vue.global.prod.js +6 -6
- package/dist/assets/{@element-plus-DOIBKHWA.js → @element-plus-Cgg_PG6o.js} +1 -1
- package/dist/assets/@vue-BMgKlbMt.js +29 -0
- package/dist/assets/{@vueuse-Cpfo139p.js → @vueuse-Da6sINV5.js} +1 -1
- package/dist/assets/{Editor-DjXowHju-DZgD7aKd.js → Editor-Dtm2GYTx-BAttFuUH.js} +1 -1
- package/dist/assets/{css.worker-DsXsg0f9-CEcCZxtT.js → css.worker-CR2iVKPT-BaTqWy85.js} +1 -1
- package/dist/assets/{editor.worker-C6rtsk95-XsdejOxF.js → editor.worker-B3qW_3p_-B11RYRPo.js} +1 -1
- package/dist/assets/{element-plus-CBB2HTOK.js → element-plus-CJN-gD58.js} +1 -1
- package/dist/assets/{extension-CS9YvITT.js → extension-nTnTqQUl.js} +49 -49
- package/dist/assets/{html.worker-DOZaicN7-Dzznz_ni.js → html.worker-LqL7r0rA-3U9Bjz6a.js} +1 -1
- package/dist/assets/{index-CJLWo3b0.js → index-BatgCnAt.js} +2 -2
- package/dist/assets/{index-hVRl253k.js → index-bTb23IoD.js} +1 -1
- package/dist/assets/{json.worker-Bm0JMgNu-DV_Vc8JJ.js → json.worker-CIGjlMXB-odpG_8-U.js} +1 -1
- package/dist/assets/{preview-BOSHGJxr.js → preview-DP4a059W.js} +2 -2
- package/dist/assets/{ts.worker-CdTDJbmm-BhFdT8k5.js → ts.worker-CJ90jexB-BCB1mae0.js} +1 -1
- package/dist/assets/{vue-BEpF3lV5.js → vue-C1-U25CX.js} +2 -2
- package/dist/assets/{vue-router-CbemHIRz.js → vue-router-Bq8aHj2u.js} +1 -1
- package/dist/index.html +6 -6
- package/package.json +11 -11
- package/dist/assets/@vue-CBNdbwf4.js +0 -29
|
@@ -1 +1 @@
|
|
|
1
|
-
const m="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NsYXNzIFBhe2NvbnN0cnVjdG9yKCl7dGhpcy5saXN0ZW5lcnM9W10sdGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyPWZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyB0LnN0YWNrP3V0LmlzRXJyb3JOb1RlbGVtZXRyeSh0KT9uZXcgdXQodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6bmV3IEVycm9yKHQubWVzc2FnZStgCgpgK3Quc3RhY2spOnR9LDApfX1lbWl0KHQpe3RoaXMubGlzdGVuZXJzLmZvckVhY2gobj0+e24odCl9KX1vblVuZXhwZWN0ZWRFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCksdGhpcy5lbWl0KHQpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IodCl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKHQpfX1jb25zdCBGYT1uZXcgUGE7ZnVuY3Rpb24gRHIoZSl7SWEoZSl8fEZhLm9uVW5leHBlY3RlZEVycm9yKGUpfWZ1bmN0aW9uIFZyKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3R7bmFtZTp0LG1lc3NhZ2U6bn09ZSxyPWUuc3RhY2t0cmFjZXx8ZS5zdGFjaztyZXR1cm57JGlzRXJyb3I6ITAsbmFtZTp0LG1lc3NhZ2U6bixzdGFjazpyLG5vVGVsZW1ldHJ5OnV0LmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qga249IkNhbmNlbGVkIjtmdW5jdGlvbiBJYShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhPyEwOmUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09a24mJmUubWVzc2FnZT09PWtufWNsYXNzIERhIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcihrbiksdGhpcy5uYW1lPXRoaXMubWVzc2FnZX19Y2xhc3MgdXQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkNvZGVFeHBlY3RlZEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQpe2lmKHQgaW5zdGFuY2VvZiB1dClyZXR1cm4gdDtjb25zdCBuPW5ldyB1dDtyZXR1cm4gbi5tZXNzYWdlPXQubWVzc2FnZSxuLnN0YWNrPXQuc3RhY2ssbn1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KHQpe3JldHVybiB0Lm5hbWU9PT0iQ29kZUV4cGVjdGVkRXJyb3IifX1jbGFzcyBqZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHR8fCJBbiB1bmV4cGVjdGVkIGJ1ZyBvY2N1cnJlZC4iKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxqZS5wcm90b3R5cGUpfX1mdW5jdGlvbiBWYShlLHQpe2NvbnN0IG49dGhpcztsZXQgcj0hMSxpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByfHwocj0hMCxpPWUuYXBwbHkobixhcmd1bWVudHMpKSxpfX12YXIgWnQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoYil7cmV0dXJuIGImJnR5cGVvZiBiPT0ib2JqZWN0IiYmdHlwZW9mIGJbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1lLmlzPXQ7Y29uc3Qgbj1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiByKCl7cmV0dXJuIG59ZS5lbXB0eT1yO2Z1bmN0aW9uKmkoYil7eWllbGQgYn1lLnNpbmdsZT1pO2Z1bmN0aW9uIHMoYil7cmV0dXJuIHQoYik/YjppKGIpfWUud3JhcD1zO2Z1bmN0aW9uIGEoYil7cmV0dXJuIGJ8fG59ZS5mcm9tPWE7ZnVuY3Rpb24qbyhiKXtmb3IobGV0IEw9Yi5sZW5ndGgtMTtMPj0wO0wtLSl5aWVsZCBiW0xdfWUucmV2ZXJzZT1vO2Z1bmN0aW9uIGwoYil7cmV0dXJuIWJ8fGJbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lPT09ITB9ZS5pc0VtcHR5PWw7ZnVuY3Rpb24gdShiKXtyZXR1cm4gYltTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfWUuZmlyc3Q9dTtmdW5jdGlvbiBmKGIsTCl7Zm9yKGNvbnN0IFMgb2YgYilpZihMKFMpKXJldHVybiEwO3JldHVybiExfWUuc29tZT1mO2Z1bmN0aW9uIGgoYixMKXtmb3IoY29uc3QgUyBvZiBiKWlmKEwoUykpcmV0dXJuIFN9ZS5maW5kPWg7ZnVuY3Rpb24qZChiLEwpe2Zvcihjb25zdCBTIG9mIGIpTChTKSYmKHlpZWxkIFMpfWUuZmlsdGVyPWQ7ZnVuY3Rpb24qZyhiLEwpe2xldCBTPTA7Zm9yKGNvbnN0IF8gb2YgYil5aWVsZCBMKF8sUysrKX1lLm1hcD1nO2Z1bmN0aW9uKm0oLi4uYil7Zm9yKGNvbnN0IEwgb2YgYil5aWVsZCpMfWUuY29uY2F0PW07ZnVuY3Rpb24gdihiLEwsUyl7bGV0IF89Uztmb3IoY29uc3QgTiBvZiBiKV89TChfLE4pO3JldHVybiBffWUucmVkdWNlPXY7ZnVuY3Rpb24qcChiLEwsUz1iLmxlbmd0aCl7Zm9yKEw8MCYmKEwrPWIubGVuZ3RoKSxTPDA/Uys9Yi5sZW5ndGg6Uz5iLmxlbmd0aCYmKFM9Yi5sZW5ndGgpO0w8UztMKyspeWllbGQgYltMXX1lLnNsaWNlPXA7ZnVuY3Rpb24geChiLEw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXtjb25zdCBTPVtdO2lmKEw9PT0wKXJldHVybltTLGJdO2NvbnN0IF89YltTeW1ib2wuaXRlcmF0b3JdKCk7Zm9yKGxldCBOPTA7TjxMO04rKyl7Y29uc3QgQT1fLm5leHQoKTtpZihBLmRvbmUpcmV0dXJuW1MsZS5lbXB0eSgpXTtTLnB1c2goQS52YWx1ZSl9cmV0dXJuW1Mse1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIF99fV19ZS5jb25zdW1lPXg7YXN5bmMgZnVuY3Rpb24geShiKXtjb25zdCBMPVtdO2ZvciBhd2FpdChjb25zdCBTIG9mIGIpTC5wdXNoKFMpO3JldHVybiBQcm9taXNlLnJlc29sdmUoTCl9ZS5hc3luY1RvQXJyYXk9eX0pKFp0fHwoWnQ9e30pKTtmdW5jdGlvbiBjYyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBmYyhlLHQpe31mdW5jdGlvbiBPcihlKXtpZihadC5pcyhlKSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKWlmKG4pdHJ5e24uZGlzcG9zZSgpfWNhdGNoKHIpe3QucHVzaChyKX1pZih0Lmxlbmd0aD09PTEpdGhyb3cgdFswXTtpZih0Lmxlbmd0aD4xKXRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcih0LCJFbmNvdW50ZXJlZCBlcnJvcnMgd2hpbGUgZGlzcG9zaW5nIG9mIHN0b3JlIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/W106ZX1lbHNlIGlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gT2EoLi4uZSl7cmV0dXJuIFl0KCgpPT5PcihlKSl9ZnVuY3Rpb24gWXQoZSl7cmV0dXJue2Rpc3Bvc2U6VmEoKCk9PntlKCl9KX19Y2xhc3MgY3R7Y29uc3RydWN0b3IoKXt0aGlzLl90b0Rpc3Bvc2U9bmV3IFNldCx0aGlzLl9pc0Rpc3Bvc2VkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5faXNEaXNwb3NlZD0hMCx0aGlzLmNsZWFyKCkpfWdldCBpc0Rpc3Bvc2VkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWR9Y2xlYXIoKXtpZih0aGlzLl90b0Rpc3Bvc2Uuc2l6ZSE9PTApdHJ5e09yKHRoaXMuX3RvRGlzcG9zZSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKHQpe2lmKCF0KXJldHVybiB0O2lmKHQ9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/Y3QuRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HfHxjb25zb2xlLndhcm4obmV3IEVycm9yKCJUcnlpbmcgdG8gYWRkIGEgZGlzcG9zYWJsZSB0byBhIERpc3Bvc2FibGVTdG9yZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuIFRoZSBhZGRlZCBvYmplY3Qgd2lsbCBiZSBsZWFrZWQhIikuc3RhY2spOnRoaXMuX3RvRGlzcG9zZS5hZGQodCksdH1kZWxldGVBbmRMZWFrKHQpe3QmJnRoaXMuX3RvRGlzcG9zZS5oYXModCkmJnRoaXMuX3RvRGlzcG9zZS5kZWxldGUodCl9fWN0LkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBNdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyBjdCx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3Rlcih0KXtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQodCl9fU10Lk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBRe2NvbnN0cnVjdG9yKHQpe3RoaXMuZWxlbWVudD10LHRoaXMubmV4dD1RLlVuZGVmaW5lZCx0aGlzLnByZXY9US5VbmRlZmluZWR9fVEuVW5kZWZpbmVkPW5ldyBRKHZvaWQgMCk7Y2xhc3MgamF7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1RLlVuZGVmaW5lZCx0aGlzLl9sYXN0PVEuVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1RLlVuZGVmaW5lZH1jbGVhcigpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PVEuVW5kZWZpbmVkOyl7Y29uc3Qgbj10Lm5leHQ7dC5wcmV2PVEuVW5kZWZpbmVkLHQubmV4dD1RLlVuZGVmaW5lZCx0PW59dGhpcy5fZmlyc3Q9US5VbmRlZmluZWQsdGhpcy5fbGFzdD1RLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITEpfXB1c2godCl7cmV0dXJuIHRoaXMuX2luc2VydCh0LCEwKX1faW5zZXJ0KHQsbil7Y29uc3Qgcj1uZXcgUSh0KTtpZih0aGlzLl9maXJzdD09PVEuVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PXIsdGhpcy5fbGFzdD1yO2Vsc2UgaWYobil7Y29uc3Qgcz10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9cixyLnByZXY9cyxzLm5leHQ9cn1lbHNle2NvbnN0IHM9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9cixyLm5leHQ9cyxzLnByZXY9cn10aGlzLl9zaXplKz0xO2xldCBpPSExO3JldHVybigpPT57aXx8KGk9ITAsdGhpcy5fcmVtb3ZlKHIpKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PVEuVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksdH19cG9wKCl7aWYodGhpcy5fbGFzdCE9PVEuVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLHR9fV9yZW1vdmUodCl7aWYodC5wcmV2IT09US5VbmRlZmluZWQmJnQubmV4dCE9PVEuVW5kZWZpbmVkKXtjb25zdCBuPXQucHJldjtuLm5leHQ9dC5uZXh0LHQubmV4dC5wcmV2PW59ZWxzZSB0LnByZXY9PT1RLlVuZGVmaW5lZCYmdC5uZXh0PT09US5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PVEuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9US5VbmRlZmluZWQpOnQubmV4dD09PVEuVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9US5VbmRlZmluZWQpOnQucHJldj09PVEuVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PVEuVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PVEuVW5kZWZpbmVkOyl5aWVsZCB0LmVsZW1lbnQsdD10Lm5leHR9fWNvbnN0IHFhPWdsb2JhbFRoaXMucGVyZm9ybWFuY2UmJnR5cGVvZiBnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIjtjbGFzcyBLdHtzdGF0aWMgY3JlYXRlKHQpe3JldHVybiBuZXcgS3QodCl9Y29uc3RydWN0b3IodCl7dGhpcy5fbm93PXFhJiZ0PT09ITE/RGF0ZS5ub3c6Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZS5ub3cuYmluZChnbG9iYWxUaGlzLnBlcmZvcm1hbmNlKSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfXJlc2V0KCl7dGhpcy5fc3RhcnRUaW1lPXRoaXMuX25vdygpLHRoaXMuX3N0b3BUaW1lPS0xfWVsYXBzZWQoKXtyZXR1cm4gdGhpcy5fc3RvcFRpbWUhPT0tMT90aGlzLl9zdG9wVGltZS10aGlzLl9zdGFydFRpbWU6dGhpcy5fbm93KCktdGhpcy5fc3RhcnRUaW1lfX12YXIgRW47KGZ1bmN0aW9uKGUpe2UuTm9uZT0oKT0+TXQuTm9uZTtmdW5jdGlvbiB0KEMsdyl7cmV0dXJuIGgoQywoKT0+e30sMCx2b2lkIDAsITAsdm9pZCAwLHcpfWUuZGVmZXI9dDtmdW5jdGlvbiBuKEMpe3JldHVybih3LFQ9bnVsbCxGKT0+e2xldCBWPSExLE87cmV0dXJuIE89QyhSPT57aWYoIVYpcmV0dXJuIE8/Ty5kaXNwb3NlKCk6Vj0hMCx3LmNhbGwoVCxSKX0sbnVsbCxGKSxWJiZPLmRpc3Bvc2UoKSxPfX1lLm9uY2U9bjtmdW5jdGlvbiByKEMsdyxUKXtyZXR1cm4gdSgoRixWPW51bGwsTyk9PkMoUj0+Ri5jYWxsKFYsdyhSKSksbnVsbCxPKSxUKX1lLm1hcD1yO2Z1bmN0aW9uIGkoQyx3LFQpe3JldHVybiB1KChGLFY9bnVsbCxPKT0+QyhSPT57dyhSKSxGLmNhbGwoVixSKX0sbnVsbCxPKSxUKX1lLmZvckVhY2g9aTtmdW5jdGlvbiBzKEMsdyxUKXtyZXR1cm4gdSgoRixWPW51bGwsTyk9PkMoUj0+dyhSKSYmRi5jYWxsKFYsUiksbnVsbCxPKSxUKX1lLmZpbHRlcj1zO2Z1bmN0aW9uIGEoQyl7cmV0dXJuIEN9ZS5zaWduYWw9YTtmdW5jdGlvbiBvKC4uLkMpe3JldHVybih3LFQ9bnVsbCxGKT0+e2NvbnN0IFY9T2EoLi4uQy5tYXAoTz0+TyhSPT53LmNhbGwoVCxSKSkpKTtyZXR1cm4gZihWLEYpfX1lLmFueT1vO2Z1bmN0aW9uIGwoQyx3LFQsRil7bGV0IFY9VDtyZXR1cm4gcihDLE89PihWPXcoVixPKSxWKSxGKX1lLnJlZHVjZT1sO2Z1bmN0aW9uIHUoQyx3KXtsZXQgVDtjb25zdCBGPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7VD1DKFYuZmlyZSxWKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtUPy5kaXNwb3NlKCl9fSxWPW5ldyBBZShGKTtyZXR1cm4gdz8uYWRkKFYpLFYuZXZlbnR9ZnVuY3Rpb24gZihDLHcpe3JldHVybiB3IGluc3RhbmNlb2YgQXJyYXk/dy5wdXNoKEMpOncmJncuYWRkKEMpLEN9ZnVuY3Rpb24gaChDLHcsVD0xMDAsRj0hMSxWPSExLE8sUil7bGV0IGssUCxELEI9MCxVO2NvbnN0IEc9e2xlYWtXYXJuaW5nVGhyZXNob2xkOk8sb25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe2s9QyhsZT0+e0IrKyxQPXcoUCxsZSksRiYmIUQmJihkZS5maXJlKFApLFA9dm9pZCAwKSxVPSgpPT57Y29uc3QgYmU9UDtQPXZvaWQgMCxEPXZvaWQgMCwoIUZ8fEI+MSkmJmRlLmZpcmUoYmUpLEI9MH0sdHlwZW9mIFQ9PSJudW1iZXIiPyhjbGVhclRpbWVvdXQoRCksRD1zZXRUaW1lb3V0KFUsVCkpOkQ9PT12b2lkIDAmJihEPTAscXVldWVNaWNyb3Rhc2soVSkpfSl9LG9uV2lsbFJlbW92ZUxpc3RlbmVyKCl7ViYmQj4wJiZVPy4oKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtVPXZvaWQgMCxrLmRpc3Bvc2UoKX19LGRlPW5ldyBBZShHKTtyZXR1cm4gUj8uYWRkKGRlKSxkZS5ldmVudH1lLmRlYm91bmNlPWg7ZnVuY3Rpb24gZChDLHc9MCxUKXtyZXR1cm4gZS5kZWJvdW5jZShDLChGLFYpPT5GPyhGLnB1c2goViksRik6W1ZdLHcsdm9pZCAwLCEwLHZvaWQgMCxUKX1lLmFjY3VtdWxhdGU9ZDtmdW5jdGlvbiBnKEMsdz0oRixWKT0+Rj09PVYsVCl7bGV0IEY9ITAsVjtyZXR1cm4gcyhDLE89Pntjb25zdCBSPUZ8fCF3KE8sVik7cmV0dXJuIEY9ITEsVj1PLFJ9LFQpfWUubGF0Y2g9ZztmdW5jdGlvbiBtKEMsdyxUKXtyZXR1cm5bZS5maWx0ZXIoQyx3LFQpLGUuZmlsdGVyKEMsRj0+IXcoRiksVCldfWUuc3BsaXQ9bTtmdW5jdGlvbiB2KEMsdz0hMSxUPVtdLEYpe2xldCBWPVQuc2xpY2UoKSxPPUMoUD0+e1Y/Vi5wdXNoKFApOmsuZmlyZShQKX0pO0YmJkYuYWRkKE8pO2NvbnN0IFI9KCk9PntWPy5mb3JFYWNoKFA9PmsuZmlyZShQKSksVj1udWxsfSxrPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe098fChPPUMoUD0+ay5maXJlKFApKSxGJiZGLmFkZChPKSl9LG9uRGlkQWRkRmlyc3RMaXN0ZW5lcigpe1YmJih3P3NldFRpbWVvdXQoUik6UigpKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtPJiZPLmRpc3Bvc2UoKSxPPW51bGx9fSk7cmV0dXJuIEYmJkYuYWRkKGspLGsuZXZlbnR9ZS5idWZmZXI9djtmdW5jdGlvbiBwKEMsdyl7cmV0dXJuKEYsVixPKT0+e2NvbnN0IFI9dyhuZXcgeSk7cmV0dXJuIEMoZnVuY3Rpb24oayl7Y29uc3QgUD1SLmV2YWx1YXRlKGspO1AhPT14JiZGLmNhbGwoVixQKX0sdm9pZCAwLE8pfX1lLmNoYWluPXA7Y29uc3QgeD1TeW1ib2woIkhhbHRDaGFpbmFibGUiKTtjbGFzcyB5e2NvbnN0cnVjdG9yKCl7dGhpcy5zdGVwcz1bXX1tYXAodyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaCh3KSx0aGlzfWZvckVhY2godyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChUPT4odyhUKSxUKSksdGhpc31maWx0ZXIodyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChUPT53KFQpP1Q6eCksdGhpc31yZWR1Y2UodyxUKXtsZXQgRj1UO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goVj0+KEY9dyhGLFYpLEYpKSx0aGlzfWxhdGNoKHc9KFQsRik9PlQ9PT1GKXtsZXQgVD0hMCxGO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goVj0+e2NvbnN0IE89VHx8IXcoVixGKTtyZXR1cm4gVD0hMSxGPVYsTz9WOnh9KSx0aGlzfWV2YWx1YXRlKHcpe2Zvcihjb25zdCBUIG9mIHRoaXMuc3RlcHMpaWYodz1UKHcpLHc9PT14KWJyZWFrO3JldHVybiB3fX1mdW5jdGlvbiBiKEMsdyxUPUY9PkYpe2NvbnN0IEY9KC4uLmspPT5SLmZpcmUoVCguLi5rKSksVj0oKT0+Qy5vbih3LEYpLE89KCk9PkMucmVtb3ZlTGlzdGVuZXIodyxGKSxSPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjpWLG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOk99KTtyZXR1cm4gUi5ldmVudH1lLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWI7ZnVuY3Rpb24gTChDLHcsVD1GPT5GKXtjb25zdCBGPSguLi5rKT0+Ui5maXJlKFQoLi4uaykpLFY9KCk9PkMuYWRkRXZlbnRMaXN0ZW5lcih3LEYpLE89KCk9PkMucmVtb3ZlRXZlbnRMaXN0ZW5lcih3LEYpLFI9bmV3IEFlKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOlYsb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6T30pO3JldHVybiBSLmV2ZW50fWUuZnJvbURPTUV2ZW50RW1pdHRlcj1MO2Z1bmN0aW9uIFMoQyl7cmV0dXJuIG5ldyBQcm9taXNlKHc9Pm4oQykodykpfWUudG9Qcm9taXNlPVM7ZnVuY3Rpb24gXyhDKXtjb25zdCB3PW5ldyBBZTtyZXR1cm4gQy50aGVuKFQ9Pnt3LmZpcmUoVCl9LCgpPT57dy5maXJlKHZvaWQgMCl9KS5maW5hbGx5KCgpPT57dy5kaXNwb3NlKCl9KSx3LmV2ZW50fWUuZnJvbVByb21pc2U9XztmdW5jdGlvbiBOKEMsdyxUKXtyZXR1cm4gdyhUKSxDKEY9PncoRikpfWUucnVuQW5kU3Vic2NyaWJlPU47Y2xhc3MgQXtjb25zdHJ1Y3Rvcih3LFQpe3RoaXMuX29ic2VydmFibGU9dyx0aGlzLl9jb3VudGVyPTAsdGhpcy5faGFzQ2hhbmdlZD0hMTtjb25zdCBGPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT57dy5hZGRPYnNlcnZlcih0aGlzKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9Pnt3LnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBBZShGKSxUJiZULmFkZCh0aGlzLmVtaXR0ZXIpfWJlZ2luVXBkYXRlKHcpe3RoaXMuX2NvdW50ZXIrK31oYW5kbGVQb3NzaWJsZUNoYW5nZSh3KXt9aGFuZGxlQ2hhbmdlKHcsVCl7dGhpcy5faGFzQ2hhbmdlZD0hMH1lbmRVcGRhdGUodyl7dGhpcy5fY291bnRlci0tLHRoaXMuX2NvdW50ZXI9PT0wJiYodGhpcy5fb2JzZXJ2YWJsZS5yZXBvcnRDaGFuZ2VzKCksdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5fb2JzZXJ2YWJsZS5nZXQoKSkpKX19ZnVuY3Rpb24gTShDLHcpe3JldHVybiBuZXcgQShDLHcpLmVtaXR0ZXIuZXZlbnR9ZS5mcm9tT2JzZXJ2YWJsZT1NO2Z1bmN0aW9uIEkoQyl7cmV0dXJuKHcsVCxGKT0+e2xldCBWPTAsTz0hMTtjb25zdCBSPXtiZWdpblVwZGF0ZSgpe1YrK30sZW5kVXBkYXRlKCl7Vi0tLFY9PT0wJiYoQy5yZXBvcnRDaGFuZ2VzKCksTyYmKE89ITEsdy5jYWxsKFQpKSl9LGhhbmRsZVBvc3NpYmxlQ2hhbmdlKCl7fSxoYW5kbGVDaGFuZ2UoKXtPPSEwfX07Qy5hZGRPYnNlcnZlcihSKSxDLnJlcG9ydENoYW5nZXMoKTtjb25zdCBrPXtkaXNwb3NlKCl7Qy5yZW1vdmVPYnNlcnZlcihSKX19O3JldHVybiBGIGluc3RhbmNlb2YgY3Q/Ri5hZGQoayk6QXJyYXkuaXNBcnJheShGKSYmRi5wdXNoKGspLGt9fWUuZnJvbU9ic2VydmFibGVMaWdodD1JfSkoRW58fChFbj17fSkpO2NsYXNzIGZ0e2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXJDb3VudD0wLHRoaXMuaW52b2NhdGlvbkNvdW50PTAsdGhpcy5lbGFwc2VkT3ZlcmFsbD0wLHRoaXMuZHVyYXRpb25zPVtdLHRoaXMubmFtZT1gJHt0fV8ke2Z0Ll9pZFBvb2wrK31gLGZ0LmFsbC5hZGQodGhpcyl9c3RhcnQodCl7dGhpcy5fc3RvcFdhdGNoPW5ldyBLdCx0aGlzLmxpc3RlbmVyQ291bnQ9dH1zdG9wKCl7aWYodGhpcy5fc3RvcFdhdGNoKXtjb25zdCB0PXRoaXMuX3N0b3BXYXRjaC5lbGFwc2VkKCk7dGhpcy5kdXJhdGlvbnMucHVzaCh0KSx0aGlzLmVsYXBzZWRPdmVyYWxsKz10LHRoaXMuaW52b2NhdGlvbkNvdW50Kz0xLHRoaXMuX3N0b3BXYXRjaD12b2lkIDB9fX1mdC5hbGw9bmV3IFNldCxmdC5faWRQb29sPTA7bGV0IEJhPS0xO2NsYXNzIFVhe2NvbnN0cnVjdG9yKHQsbj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE4KS5zbGljZSgyLDUpKXt0aGlzLnRocmVzaG9sZD10LHRoaXMubmFtZT1uLHRoaXMuX3dhcm5Db3VudGRvd249MH1kaXNwb3NlKCl7dmFyIHQ7KHQ9dGhpcy5fc3RhY2tzKT09PW51bGx8fHQ9PT12b2lkIDB8fHQuY2xlYXIoKX1jaGVjayh0LG4pe2NvbnN0IHI9dGhpcy50aHJlc2hvbGQ7aWYocjw9MHx8bjxyKXJldHVybjt0aGlzLl9zdGFja3N8fCh0aGlzLl9zdGFja3M9bmV3IE1hcCk7Y29uc3QgaT10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO2lmKHRoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxpKzEpLHRoaXMuX3dhcm5Db3VudGRvd24tPTEsdGhpcy5fd2FybkNvdW50ZG93bjw9MCl7dGhpcy5fd2FybkNvdW50ZG93bj1yKi41O2xldCBzLGE9MDtmb3IoY29uc3RbbyxsXW9mIHRoaXMuX3N0YWNrcykoIXN8fGE8bCkmJihzPW8sYT1sKTtjb25zb2xlLndhcm4oYFske3RoaXMubmFtZX1dIHBvdGVudGlhbCBsaXN0ZW5lciBMRUFLIGRldGVjdGVkLCBoYXZpbmcgJHtufSBsaXN0ZW5lcnMgYWxyZWFkeS4gTU9TVCBmcmVxdWVudCBsaXN0ZW5lciAoJHthfSk6YCksY29uc29sZS53YXJuKHMpfXJldHVybigpPT57Y29uc3Qgcz10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO3RoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxzLTEpfX19Y2xhc3MgTW57c3RhdGljIGNyZWF0ZSgpe3ZhciB0O3JldHVybiBuZXcgTW4oKHQ9bmV3IEVycm9yKCkuc3RhY2spIT09bnVsbCYmdCE9PXZvaWQgMD90OiIiKX1jb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXR9cHJpbnQoKXtjb25zb2xlLndhcm4odGhpcy52YWx1ZS5zcGxpdChgCmApLnNsaWNlKDIpLmpvaW4oYApgKSl9fWNsYXNzIFJue2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH19Y29uc3QgJGE9MjtjbGFzcyBBZXtjb25zdHJ1Y3Rvcih0KXt2YXIgbixyLGkscyxhO3RoaXMuX3NpemU9MCx0aGlzLl9vcHRpb25zPXQsdGhpcy5fbGVha2FnZU1vbj0hKChuPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8bj09PXZvaWQgMCkmJm4ubGVha1dhcm5pbmdUaHJlc2hvbGQ/bmV3IFVhKChpPShyPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5sZWFrV2FybmluZ1RocmVzaG9sZCkhPT1udWxsJiZpIT09dm9pZCAwP2k6QmEpOnZvaWQgMCx0aGlzLl9wZXJmTW9uPSEoKHM9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxzPT09dm9pZCAwKSYmcy5fcHJvZk5hbWU/bmV3IGZ0KHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT0oYT10aGlzLl9vcHRpb25zKT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEuZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIHQsbixyLGk7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCwoKHQ9dGhpcy5fZGVsaXZlcnlRdWV1ZSk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LmN1cnJlbnQpPT09dGhpcyYmdGhpcy5fZGVsaXZlcnlRdWV1ZS5yZXNldCgpLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz12b2lkIDAsdGhpcy5fc2l6ZT0wKSwocj0obj10aGlzLl9vcHRpb25zKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4ub25EaWRSZW1vdmVMYXN0TGlzdGVuZXIpPT09bnVsbHx8cj09PXZvaWQgMHx8ci5jYWxsKG4pLChpPXRoaXMuX2xlYWthZ2VNb24pPT09bnVsbHx8aT09PXZvaWQgMHx8aS5kaXNwb3NlKCkpfWdldCBldmVudCgpe3ZhciB0O3JldHVybih0PXRoaXMuX2V2ZW50KSE9PW51bGwmJnQhPT12b2lkIDB8fCh0aGlzLl9ldmVudD0obixyLGkpPT57dmFyIHMsYSxvLGwsdTtpZih0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKjMpcmV0dXJuIGNvbnNvbGUud2FybihgWyR7dGhpcy5fbGVha2FnZU1vbi5uYW1lfV0gUkVGVVNFUyB0byBhY2NlcHQgbmV3IGxpc3RlbmVycyBiZWNhdXNlIGl0IGV4Y2VlZGVkIGl0cyB0aHJlc2hvbGQgYnkgZmFyYCksTXQuTm9uZTtpZih0aGlzLl9kaXNwb3NlZClyZXR1cm4gTXQuTm9uZTtyJiYobj1uLmJpbmQocikpO2NvbnN0IGY9bmV3IFJuKG4pO2xldCBoO3RoaXMuX2xlYWthZ2VNb24mJnRoaXMuX3NpemU+PU1hdGguY2VpbCh0aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZCouMikmJihmLnN0YWNrPU1uLmNyZWF0ZSgpLGg9dGhpcy5fbGVha2FnZU1vbi5jaGVjayhmLnN0YWNrLHRoaXMuX3NpemUrMSkpLHRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiBSbj8oKHU9dGhpcy5fZGVsaXZlcnlRdWV1ZSkhPT1udWxsJiZ1IT09dm9pZCAwfHwodGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgV2EpLHRoaXMuX2xpc3RlbmVycz1bdGhpcy5fbGlzdGVuZXJzLGZdKTp0aGlzLl9saXN0ZW5lcnMucHVzaChmKTooKGE9KHM9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzLm9uV2lsbEFkZEZpcnN0TGlzdGVuZXIpPT09bnVsbHx8YT09PXZvaWQgMHx8YS5jYWxsKHMsdGhpcyksdGhpcy5fbGlzdGVuZXJzPWYsKGw9KG89dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxvPT09dm9pZCAwP3ZvaWQgMDpvLm9uRGlkQWRkRmlyc3RMaXN0ZW5lcik9PT1udWxsfHxsPT09dm9pZCAwfHxsLmNhbGwobyx0aGlzKSksdGhpcy5fc2l6ZSsrO2NvbnN0IGQ9WXQoKCk9PntoPy4oKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcihmKX0pO3JldHVybiBpIGluc3RhbmNlb2YgY3Q/aS5hZGQoZCk6QXJyYXkuaXNBcnJheShpKSYmaS5wdXNoKGQpLGR9KSx0aGlzLl9ldmVudH1fcmVtb3ZlTGlzdGVuZXIodCl7dmFyIG4scixpLHM7aWYoKHI9KG49dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLm9uV2lsbFJlbW92ZUxpc3RlbmVyKT09PW51bGx8fHI9PT12b2lkIDB8fHIuY2FsbChuLHRoaXMpLCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2lmKHRoaXMuX3NpemU9PT0xKXt0aGlzLl9saXN0ZW5lcnM9dm9pZCAwLChzPShpPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcik9PT1udWxsfHxzPT09dm9pZCAwfHxzLmNhbGwoaSx0aGlzKSx0aGlzLl9zaXplPTA7cmV0dXJufWNvbnN0IGE9dGhpcy5fbGlzdGVuZXJzLG89YS5pbmRleE9mKHQpO2lmKG89PT0tMSl0aHJvdyBjb25zb2xlLmxvZygiZGlzcG9zZWQ/Iix0aGlzLl9kaXNwb3NlZCksY29uc29sZS5sb2coInNpemU/Iix0aGlzLl9zaXplKSxjb25zb2xlLmxvZygiYXJyPyIsSlNPTi5zdHJpbmdpZnkodGhpcy5fbGlzdGVuZXJzKSksbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gZGlzcG9zZSB1bmtub3duIGxpc3RlbmVyIik7dGhpcy5fc2l6ZS0tLGFbb109dm9pZCAwO2NvbnN0IGw9dGhpcy5fZGVsaXZlcnlRdWV1ZS5jdXJyZW50PT09dGhpcztpZih0aGlzLl9zaXplKiRhPD1hLmxlbmd0aCl7bGV0IHU9MDtmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdP2FbdSsrXT1hW2ZdOmwmJih0aGlzLl9kZWxpdmVyeVF1ZXVlLmVuZC0tLHU8dGhpcy5fZGVsaXZlcnlRdWV1ZS5pJiZ0aGlzLl9kZWxpdmVyeVF1ZXVlLmktLSk7YS5sZW5ndGg9dX19X2RlbGl2ZXIodCxuKXt2YXIgcjtpZighdClyZXR1cm47Y29uc3QgaT0oKHI9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm9uTGlzdGVuZXJFcnJvcil8fERyO2lmKCFpKXt0LnZhbHVlKG4pO3JldHVybn10cnl7dC52YWx1ZShuKX1jYXRjaChzKXtpKHMpfX1fZGVsaXZlclF1ZXVlKHQpe2NvbnN0IG49dC5jdXJyZW50Ll9saXN0ZW5lcnM7Zm9yKDt0Lmk8dC5lbmQ7KXRoaXMuX2RlbGl2ZXIoblt0LmkrK10sdC52YWx1ZSk7dC5yZXNldCgpfWZpcmUodCl7dmFyIG4scixpLHM7aWYoISgobj10aGlzLl9kZWxpdmVyeVF1ZXVlKT09PW51bGx8fG49PT12b2lkIDApJiZuLmN1cnJlbnQmJih0aGlzLl9kZWxpdmVyUXVldWUodGhpcy5fZGVsaXZlcnlRdWV1ZSksKHI9dGhpcy5fcGVyZk1vbik9PT1udWxsfHxyPT09dm9pZCAwfHxyLnN0b3AoKSksKGk9dGhpcy5fcGVyZk1vbik9PT1udWxsfHxpPT09dm9pZCAwfHxpLnN0YXJ0KHRoaXMuX3NpemUpLHRoaXMuX2xpc3RlbmVycylpZih0aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiBSbil0aGlzLl9kZWxpdmVyKHRoaXMuX2xpc3RlbmVycyx0KTtlbHNle2NvbnN0IGE9dGhpcy5fZGVsaXZlcnlRdWV1ZTthLmVucXVldWUodGhpcyx0LHRoaXMuX2xpc3RlbmVycy5sZW5ndGgpLHRoaXMuX2RlbGl2ZXJRdWV1ZShhKX0ocz10aGlzLl9wZXJmTW9uKT09PW51bGx8fHM9PT12b2lkIDB8fHMuc3RvcCgpfWhhc0xpc3RlbmVycygpe3JldHVybiB0aGlzLl9zaXplPjB9fWNsYXNzIFdhe2NvbnN0cnVjdG9yKCl7dGhpcy5pPS0xLHRoaXMuZW5kPTB9ZW5xdWV1ZSh0LG4scil7dGhpcy5pPTAsdGhpcy5lbmQ9cix0aGlzLmN1cnJlbnQ9dCx0aGlzLnZhbHVlPW59cmVzZXQoKXt0aGlzLmk9dGhpcy5lbmQsdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLnZhbHVlPXZvaWQgMH19ZnVuY3Rpb24gSGEoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1mdW5jdGlvbiB6YShlKXtsZXQgdD1bXTtmb3IoO09iamVjdC5wcm90b3R5cGUhPT1lOyl0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gdH1mdW5jdGlvbiBUbihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIHphKGUpKXR5cGVvZiBlW25dPT0iZnVuY3Rpb24iJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gR2EoZSx0KXtjb25zdCBuPWk9PmZ1bmN0aW9uKCl7Y29uc3Qgcz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoaSxzKX0scj17fTtmb3IoY29uc3QgaSBvZiBlKXJbaV09bihpKTtyZXR1cm4gcn1sZXQgSmE9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQubG9jYXRpb24mJmRvY3VtZW50LmxvY2F0aW9uLmhhc2guaW5kZXhPZigicHNldWRvPXRydWUiKT49MDtmdW5jdGlvbiBYYShlLHQpe2xldCBuO3JldHVybiB0Lmxlbmd0aD09PTA/bj1lOm49ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywocixpKT0+e2NvbnN0IHM9aVswXSxhPXRbc107bGV0IG89cjtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmciP289YToodHlwZW9mIGE9PSJudW1iZXIifHx0eXBlb2YgYT09ImJvb2xlYW4ifHxhPT09dm9pZCAwfHxhPT09bnVsbCkmJihvPVN0cmluZyhhKSksb30pLEphJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKSxufWZ1bmN0aW9uIFooZSx0LC4uLm4pe3JldHVybiBYYSh0LG4pfWZ1bmN0aW9uIGhjKGUpe312YXIgUG4sRm47Y29uc3QgaHQ9ImVuIjtsZXQgSW49ITEsRG49ITEsVm49ITEsZW4sT249aHQsanI9aHQsUWEsQ2U7Y29uc3QgbnQ9Z2xvYmFsVGhpcztsZXQgdWU7dHlwZW9mIG50LnZzY29kZTwidSImJnR5cGVvZiBudC52c2NvZGUucHJvY2VzczwidSI/dWU9bnQudnNjb2RlLnByb2Nlc3M6dHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YoKFBuPXByb2Nlc3M9PW51bGw/dm9pZCAwOnByb2Nlc3MudmVyc2lvbnMpPT09bnVsbHx8UG49PT12b2lkIDA/dm9pZCAwOlBuLm5vZGUpPT0ic3RyaW5nIiYmKHVlPXByb2Nlc3MpO2NvbnN0IFphPXR5cGVvZigoRm49dWU/LnZlcnNpb25zKT09PW51bGx8fEZuPT09dm9pZCAwP3ZvaWQgMDpGbi5lbGVjdHJvbik9PSJzdHJpbmciJiZ1ZT8udHlwZT09PSJyZW5kZXJlciI7aWYodHlwZW9mIHVlPT0ib2JqZWN0Iil7SW49dWUucGxhdGZvcm09PT0id2luMzIiLERuPXVlLnBsYXRmb3JtPT09ImRhcndpbiIsVm49dWUucGxhdGZvcm09PT0ibGludXgiLFZuJiZ1ZS5lbnYuU05BUCYmdWUuZW52LlNOQVBfUkVWSVNJT04sdWUuZW52LkNJfHx1ZS5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLGVuPWh0LE9uPWh0O2NvbnN0IGU9dWUuZW52LlZTQ09ERV9OTFNfQ09ORklHO2lmKGUpdHJ5e2NvbnN0IHQ9SlNPTi5wYXJzZShlKSxuPXQuYXZhaWxhYmxlTGFuZ3VhZ2VzWyIqIl07ZW49dC5sb2NhbGUsanI9dC5vc0xvY2FsZSxPbj1ufHxodCxRYT10Ll90cmFuc2xhdGlvbnNDb25maWdGaWxlfWNhdGNoe319ZWxzZSB0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmIVphPyhDZT1uYXZpZ2F0b3IudXNlckFnZW50LEluPUNlLmluZGV4T2YoIldpbmRvd3MiKT49MCxEbj1DZS5pbmRleE9mKCJNYWNpbnRvc2giKT49MCwoQ2UuaW5kZXhPZigiTWFjaW50b3NoIik+PTB8fENlLmluZGV4T2YoImlQYWQiKT49MHx8Q2UuaW5kZXhPZigiaVBob25lIik+PTApJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4wLFZuPUNlLmluZGV4T2YoIkxpbnV4Iik+PTAsQ2U/LmluZGV4T2YoIk1vYmkiKT49MCxaKHtrZXk6ImVuc3VyZUxvYWRlclBsdWdpbklzTG9hZGVkIixjb21tZW50Olsie0xvY2tlZH0iXX0sIl8iKSxlbj1odCxPbj1lbixqcj1uYXZpZ2F0b3IubGFuZ3VhZ2UpOmNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2NvbnN0IFJ0PUluLFlhPURuLFRlPUNlLEthPXR5cGVvZiBudC5wb3N0TWVzc2FnZT09ImZ1bmN0aW9uIiYmIW50LmltcG9ydFNjcmlwdHM7KCgpPT57aWYoS2Epe2NvbnN0IGU9W107bnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbj0+e2lmKG4uZGF0YSYmbi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKWZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3Qgcz1lW3JdO2lmKHMuaWQ9PT1uLmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspe2Uuc3BsaWNlKHIsMSkscy5jYWxsYmFjaygpO3JldHVybn19fSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksbnQucG9zdE1lc3NhZ2Uoe3ZzY29kZVNjaGVkdWxlQXN5bmNXb3JrOnJ9LCIqIil9fXJldHVybiBlPT5zZXRUaW1lb3V0KGUpfSkoKTtjb25zdCBlbz0hIShUZSYmVGUuaW5kZXhPZigiQ2hyb21lIik+PTApO1RlJiZUZS5pbmRleE9mKCJGaXJlZm94Iik+PTAsIWVvJiZUZSYmVGUuaW5kZXhPZigiU2FmYXJpIik+PTAsVGUmJlRlLmluZGV4T2YoIkVkZy8iKT49MCxUZSYmVGUuaW5kZXhPZigiQW5kcm9pZCIpPj0wO2NsYXNzIHRve2NvbnN0cnVjdG9yKHQsbj1KU09OLnN0cmluZ2lmeSl7dGhpcy5mbj10LHRoaXMuX2NvbXB1dGVLZXk9bix0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQodCl7Y29uc3Qgbj10aGlzLl9jb21wdXRlS2V5KHQpO3JldHVybiB0aGlzLmxhc3RBcmdLZXkhPT1uJiYodGhpcy5sYXN0QXJnS2V5PW4sdGhpcy5sYXN0Q2FjaGU9dGhpcy5mbih0KSksdGhpcy5sYXN0Q2FjaGV9fWNsYXNzIHFye2NvbnN0cnVjdG9yKHQpe3RoaXMuZXhlY3V0b3I9dCx0aGlzLl9kaWRSdW49ITF9Z2V0IHZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKHQpe3RoaXMuX2Vycm9yPXR9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19dmFyIGR0O2Z1bmN0aW9uIG5vKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9ZnVuY3Rpb24gcm8oZSl7cmV0dXJuIGUuc3BsaXQoL1xyXG58XHJ8XG4vKX1mdW5jdGlvbiBpbyhlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KHQpO2lmKHIhPT0zMiYmciE9PTkpcmV0dXJuIHR9cmV0dXJuLTF9ZnVuY3Rpb24gc28oZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihyIT09MzImJnIhPT05KXJldHVybiBufXJldHVybi0xfWZ1bmN0aW9uIEJyKGUpe3JldHVybiBlPj02NSYmZTw9OTB9ZnVuY3Rpb24gam4oZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBhbyhlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfWZ1bmN0aW9uIG9vKGUsdCl7cmV0dXJuKGUtNTUyOTY8PDEwKSsodC01NjMyMCkrNjU1MzZ9ZnVuY3Rpb24gbG8oZSx0LG4pe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pO2lmKGpuKHIpJiZuKzE8dCl7Y29uc3QgaT1lLmNoYXJDb2RlQXQobisxKTtpZihhbyhpKSlyZXR1cm4gb28ocixpKX1yZXR1cm4gcn1jb25zdCB1bz0vXltcdFxuXHJceDIwLVx4N0VdKiQvO2Z1bmN0aW9uIGNvKGUpe3JldHVybiB1by50ZXN0KGUpfWNsYXNzIHJ0e3N0YXRpYyBnZXRJbnN0YW5jZSh0KXtyZXR1cm4gZHQuY2FjaGUuZ2V0KEFycmF5LmZyb20odCkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIGR0Ll9sb2NhbGVzLnZhbHVlfWNvbnN0cnVjdG9yKHQpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9dH1pc0FtYmlndW91cyh0KXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXModCl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUodCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KHQpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1kdD1ydCxydC5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyBxcigoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1LDExOTg0NiwxMDldLCJfZGVmYXVsdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJjcyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZGUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImVzIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImZyIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sIml0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJqYSI6WzgyMTEsNDUsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MjkyLDQ0LDY1MzA3LDU5XSwia28iOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInBsIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInB0LUJSIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInFwcy1wbG9jIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInJ1IjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywzMDUsMTA1LDkyMSw3MywxMDA5LDExMiwyMTUsMTIwLDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwidHIiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiemgtaGFucyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4OCw0MCw2NTI4OSw0MV0sInpoLWhhbnQiOls4MjExLDQ1LDY1Mzc0LDEyNiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUzMDcsNTldfScpKSxydC5jYWNoZT1uZXcgdG8oZT0+e2Z1bmN0aW9uIHQodSl7Y29uc3QgZj1uZXcgTWFwO2ZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCs9MilmLnNldCh1W2hdLHVbaCsxXSk7cmV0dXJuIGZ9ZnVuY3Rpb24gbih1LGYpe2NvbnN0IGg9bmV3IE1hcCh1KTtmb3IoY29uc3RbZCxnXW9mIGYpaC5zZXQoZCxnKTtyZXR1cm4gaH1mdW5jdGlvbiByKHUsZil7aWYoIXUpcmV0dXJuIGY7Y29uc3QgaD1uZXcgTWFwO2Zvcihjb25zdFtkLGddb2YgdSlmLmhhcyhkKSYmaC5zZXQoZCxnKTtyZXR1cm4gaH1jb25zdCBpPWR0LmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWU7bGV0IHM9ZS5maWx0ZXIodT0+IXUuc3RhcnRzV2l0aCgiXyIpJiZ1IGluIGkpO3MubGVuZ3RoPT09MCYmKHM9WyJfZGVmYXVsdCJdKTtsZXQgYTtmb3IoY29uc3QgdSBvZiBzKXtjb25zdCBmPXQoaVt1XSk7YT1yKGEsZil9Y29uc3Qgbz10KGkuX2NvbW1vbiksbD1uKG8sYSk7cmV0dXJuIG5ldyBkdChsKX0pLHJ0Ll9sb2NhbGVzPW5ldyBxcigoKT0+T2JqZWN0LmtleXMoZHQuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS52YWx1ZSkuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpO2NsYXNzIEhle3N0YXRpYyBnZXRSYXdEYXRhKCl7cmV0dXJuIEpTT04ucGFyc2UoIls5LDEwLDExLDEyLDEzLDMyLDEyNywxNjAsMTczLDg0NywxNTY0LDQ0NDcsNDQ0OCw2MDY4LDYwNjksNjE1NSw2MTU2LDYxNTcsNjE1OCw3MzU1LDczNTYsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4MjM0LDgyMzUsODIzNiw4MjM3LDgyMzgsODIzOSw4Mjg3LDgyODgsODI4OSw4MjkwLDgyOTEsODI5Miw4MjkzLDgyOTQsODI5NSw4Mjk2LDgyOTcsODI5OCw4Mjk5LDgzMDAsODMwMSw4MzAyLDgzMDMsMTAyNDAsMTIyODgsMTI2NDQsNjUwMjQsNjUwMjUsNjUwMjYsNjUwMjcsNjUwMjgsNjUwMjksNjUwMzAsNjUwMzEsNjUwMzIsNjUwMzMsNjUwMzQsNjUwMzUsNjUwMzYsNjUwMzcsNjUwMzgsNjUwMzksNjUyNzksNjU0NDAsNjU1MjAsNjU1MjEsNjU1MjIsNjU1MjMsNjU1MjQsNjU1MjUsNjU1MjYsNjU1MjcsNjU1MjgsNjU1MzIsNzg4NDQsMTE5MTU1LDExOTE1NiwxMTkxNTcsMTE5MTU4LDExOTE1OSwxMTkxNjAsMTE5MTYxLDExOTE2Miw5MTc1MDQsOTE3NTA1LDkxNzUwNiw5MTc1MDcsOTE3NTA4LDkxNzUwOSw5MTc1MTAsOTE3NTExLDkxNzUxMiw5MTc1MTMsOTE3NTE0LDkxNzUxNSw5MTc1MTYsOTE3NTE3LDkxNzUxOCw5MTc1MTksOTE3NTIwLDkxNzUyMSw5MTc1MjIsOTE3NTIzLDkxNzUyNCw5MTc1MjUsOTE3NTI2LDkxNzUyNyw5MTc1MjgsOTE3NTI5LDkxNzUzMCw5MTc1MzEsOTE3NTMyLDkxNzUzMyw5MTc1MzQsOTE3NTM1LDkxNzUzNiw5MTc1MzcsOTE3NTM4LDkxNzUzOSw5MTc1NDAsOTE3NTQxLDkxNzU0Miw5MTc1NDMsOTE3NTQ0LDkxNzU0NSw5MTc1NDYsOTE3NTQ3LDkxNzU0OCw5MTc1NDksOTE3NTUwLDkxNzU1MSw5MTc1NTIsOTE3NTUzLDkxNzU1NCw5MTc1NTUsOTE3NTU2LDkxNzU1Nyw5MTc1NTgsOTE3NTU5LDkxNzU2MCw5MTc1NjEsOTE3NTYyLDkxNzU2Myw5MTc1NjQsOTE3NTY1LDkxNzU2Niw5MTc1NjcsOTE3NTY4LDkxNzU2OSw5MTc1NzAsOTE3NTcxLDkxNzU3Miw5MTc1NzMsOTE3NTc0LDkxNzU3NSw5MTc1NzYsOTE3NTc3LDkxNzU3OCw5MTc1NzksOTE3NTgwLDkxNzU4MSw5MTc1ODIsOTE3NTgzLDkxNzU4NCw5MTc1ODUsOTE3NTg2LDkxNzU4Nyw5MTc1ODgsOTE3NTg5LDkxNzU5MCw5MTc1OTEsOTE3NTkyLDkxNzU5Myw5MTc1OTQsOTE3NTk1LDkxNzU5Niw5MTc1OTcsOTE3NTk4LDkxNzU5OSw5MTc2MDAsOTE3NjAxLDkxNzYwMiw5MTc2MDMsOTE3NjA0LDkxNzYwNSw5MTc2MDYsOTE3NjA3LDkxNzYwOCw5MTc2MDksOTE3NjEwLDkxNzYxMSw5MTc2MTIsOTE3NjEzLDkxNzYxNCw5MTc2MTUsOTE3NjE2LDkxNzYxNyw5MTc2MTgsOTE3NjE5LDkxNzYyMCw5MTc2MjEsOTE3NjIyLDkxNzYyMyw5MTc2MjQsOTE3NjI1LDkxNzYyNiw5MTc2MjcsOTE3NjI4LDkxNzYyOSw5MTc2MzAsOTE3NjMxLDkxNzc2MCw5MTc3NjEsOTE3NzYyLDkxNzc2Myw5MTc3NjQsOTE3NzY1LDkxNzc2Niw5MTc3NjcsOTE3NzY4LDkxNzc2OSw5MTc3NzAsOTE3NzcxLDkxNzc3Miw5MTc3NzMsOTE3Nzc0LDkxNzc3NSw5MTc3NzYsOTE3Nzc3LDkxNzc3OCw5MTc3NzksOTE3NzgwLDkxNzc4MSw5MTc3ODIsOTE3NzgzLDkxNzc4NCw5MTc3ODUsOTE3Nzg2LDkxNzc4Nyw5MTc3ODgsOTE3Nzg5LDkxNzc5MCw5MTc3OTEsOTE3NzkyLDkxNzc5Myw5MTc3OTQsOTE3Nzk1LDkxNzc5Niw5MTc3OTcsOTE3Nzk4LDkxNzc5OSw5MTc4MDAsOTE3ODAxLDkxNzgwMiw5MTc4MDMsOTE3ODA0LDkxNzgwNSw5MTc4MDYsOTE3ODA3LDkxNzgwOCw5MTc4MDksOTE3ODEwLDkxNzgxMSw5MTc4MTIsOTE3ODEzLDkxNzgxNCw5MTc4MTUsOTE3ODE2LDkxNzgxNyw5MTc4MTgsOTE3ODE5LDkxNzgyMCw5MTc4MjEsOTE3ODIyLDkxNzgyMyw5MTc4MjQsOTE3ODI1LDkxNzgyNiw5MTc4MjcsOTE3ODI4LDkxNzgyOSw5MTc4MzAsOTE3ODMxLDkxNzgzMiw5MTc4MzMsOTE3ODM0LDkxNzgzNSw5MTc4MzYsOTE3ODM3LDkxNzgzOCw5MTc4MzksOTE3ODQwLDkxNzg0MSw5MTc4NDIsOTE3ODQzLDkxNzg0NCw5MTc4NDUsOTE3ODQ2LDkxNzg0Nyw5MTc4NDgsOTE3ODQ5LDkxNzg1MCw5MTc4NTEsOTE3ODUyLDkxNzg1Myw5MTc4NTQsOTE3ODU1LDkxNzg1Niw5MTc4NTcsOTE3ODU4LDkxNzg1OSw5MTc4NjAsOTE3ODYxLDkxNzg2Miw5MTc4NjMsOTE3ODY0LDkxNzg2NSw5MTc4NjYsOTE3ODY3LDkxNzg2OCw5MTc4NjksOTE3ODcwLDkxNzg3MSw5MTc4NzIsOTE3ODczLDkxNzg3NCw5MTc4NzUsOTE3ODc2LDkxNzg3Nyw5MTc4NzgsOTE3ODc5LDkxNzg4MCw5MTc4ODEsOTE3ODgyLDkxNzg4Myw5MTc4ODQsOTE3ODg1LDkxNzg4Niw5MTc4ODcsOTE3ODg4LDkxNzg4OSw5MTc4OTAsOTE3ODkxLDkxNzg5Miw5MTc4OTMsOTE3ODk0LDkxNzg5NSw5MTc4OTYsOTE3ODk3LDkxNzg5OCw5MTc4OTksOTE3OTAwLDkxNzkwMSw5MTc5MDIsOTE3OTAzLDkxNzkwNCw5MTc5MDUsOTE3OTA2LDkxNzkwNyw5MTc5MDgsOTE3OTA5LDkxNzkxMCw5MTc5MTEsOTE3OTEyLDkxNzkxMyw5MTc5MTQsOTE3OTE1LDkxNzkxNiw5MTc5MTcsOTE3OTE4LDkxNzkxOSw5MTc5MjAsOTE3OTIxLDkxNzkyMiw5MTc5MjMsOTE3OTI0LDkxNzkyNSw5MTc5MjYsOTE3OTI3LDkxNzkyOCw5MTc5MjksOTE3OTMwLDkxNzkzMSw5MTc5MzIsOTE3OTMzLDkxNzkzNCw5MTc5MzUsOTE3OTM2LDkxNzkzNyw5MTc5MzgsOTE3OTM5LDkxNzk0MCw5MTc5NDEsOTE3OTQyLDkxNzk0Myw5MTc5NDQsOTE3OTQ1LDkxNzk0Niw5MTc5NDcsOTE3OTQ4LDkxNzk0OSw5MTc5NTAsOTE3OTUxLDkxNzk1Miw5MTc5NTMsOTE3OTU0LDkxNzk1NSw5MTc5NTYsOTE3OTU3LDkxNzk1OCw5MTc5NTksOTE3OTYwLDkxNzk2MSw5MTc5NjIsOTE3OTYzLDkxNzk2NCw5MTc5NjUsOTE3OTY2LDkxNzk2Nyw5MTc5NjgsOTE3OTY5LDkxNzk3MCw5MTc5NzEsOTE3OTcyLDkxNzk3Myw5MTc5NzQsOTE3OTc1LDkxNzk3Niw5MTc5NzcsOTE3OTc4LDkxNzk3OSw5MTc5ODAsOTE3OTgxLDkxNzk4Miw5MTc5ODMsOTE3OTg0LDkxNzk4NSw5MTc5ODYsOTE3OTg3LDkxNzk4OCw5MTc5ODksOTE3OTkwLDkxNzk5MSw5MTc5OTIsOTE3OTkzLDkxNzk5NCw5MTc5OTUsOTE3OTk2LDkxNzk5Nyw5MTc5OTgsOTE3OTk5XSIpfXN0YXRpYyBnZXREYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF8fCh0aGlzLl9kYXRhPW5ldyBTZXQoSGUuZ2V0UmF3RGF0YSgpKSksdGhpcy5fZGF0YX1zdGF0aWMgaXNJbnZpc2libGVDaGFyYWN0ZXIodCl7cmV0dXJuIEhlLmdldERhdGEoKS5oYXModCl9c3RhdGljIGdldCBjb2RlUG9pbnRzKCl7cmV0dXJuIEhlLmdldERhdGEoKX19SGUuX2RhdGE9dm9pZCAwO2NvbnN0IGZvPSIkaW5pdGlhbGl6ZSI7Y2xhc3MgaG97Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy5tZXRob2Q9cix0aGlzLmFyZ3M9aSx0aGlzLnR5cGU9MH19Y2xhc3MgVXJ7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy52c1dvcmtlcj10LHRoaXMuc2VxPW4sdGhpcy5yZXM9cix0aGlzLmVycj1pLHRoaXMudHlwZT0xfX1jbGFzcyBnb3tjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50TmFtZT1yLHRoaXMuYXJnPWksdGhpcy50eXBlPTJ9fWNsYXNzIG1ve2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50PXIsdGhpcy50eXBlPTN9fWNsYXNzIHBve2NvbnN0cnVjdG9yKHQsbil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy50eXBlPTR9fWNsYXNzIHZve2NvbnN0cnVjdG9yKHQpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9dCx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKHQpe3RoaXMuX3dvcmtlcklkPXR9c2VuZE1lc3NhZ2UodCxuKXtjb25zdCByPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKGkscyk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tyXT17cmVzb2x2ZTppLHJlamVjdDpzfSx0aGlzLl9zZW5kKG5ldyBobyh0aGlzLl93b3JrZXJJZCxyLHQsbikpfSl9bGlzdGVuKHQsbil7bGV0IHI9bnVsbDtjb25zdCBpPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e3I9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQocixpKSx0aGlzLl9zZW5kKG5ldyBnbyh0aGlzLl93b3JrZXJJZCxyLHQsbikpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e3RoaXMuX3BlbmRpbmdFbWl0dGVycy5kZWxldGUociksdGhpcy5fc2VuZChuZXcgcG8odGhpcy5fd29ya2VySWQscikpLHI9bnVsbH19KTtyZXR1cm4gaS5ldmVudH1oYW5kbGVNZXNzYWdlKHQpeyF0fHwhdC52c1dvcmtlcnx8dGhpcy5fd29ya2VySWQhPT0tMSYmdC52c1dvcmtlciE9PXRoaXMuX3dvcmtlcklkfHx0aGlzLl9oYW5kbGVNZXNzYWdlKHQpfV9oYW5kbGVNZXNzYWdlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKHQpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UodCk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UodCk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KX19X2hhbmRsZVJlcGx5TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdKXtjb25zb2xlLndhcm4oIkdvdCByZXBseSB0byB1bmtub3duIHNlcSIpO3JldHVybn1jb25zdCBuPXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdLHQuZXJyKXtsZXQgcj10LmVycjt0LmVyci4kaXNFcnJvciYmKHI9bmV3IEVycm9yLHIubmFtZT10LmVyci5uYW1lLHIubWVzc2FnZT10LmVyci5tZXNzYWdlLHIuc3RhY2s9dC5lcnIuc3RhY2spLG4ucmVqZWN0KHIpO3JldHVybn1uLnJlc29sdmUodC5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZSh0Lm1ldGhvZCx0LmFyZ3MpLnRoZW4oaT0+e3RoaXMuX3NlbmQobmV3IFVyKHRoaXMuX3dvcmtlcklkLG4saSx2b2lkIDApKX0saT0+e2kuZGV0YWlsIGluc3RhbmNlb2YgRXJyb3ImJihpLmRldGFpbD1WcihpLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IFVyKHRoaXMuX3dvcmtlcklkLG4sdm9pZCAwLFZyKGkpKSl9KX1faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKHQpe2NvbnN0IG49dC5yZXEscj10aGlzLl9oYW5kbGVyLmhhbmRsZUV2ZW50KHQuZXZlbnROYW1lLHQuYXJnKShpPT57dGhpcy5fc2VuZChuZXcgbW8odGhpcy5fd29ya2VySWQsbixpKSl9KTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldChuLHIpfV9oYW5kbGVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFbWl0dGVycy5oYXModC5yZXEpKXtjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKTtyZXR1cm59dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldCh0LnJlcSkuZmlyZSh0LmV2ZW50KX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFdmVudHMuaGFzKHQucmVxKSl7Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIik7cmV0dXJufXRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KHQucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUodC5yZXEpfV9zZW5kKHQpe2NvbnN0IG49W107aWYodC50eXBlPT09MClmb3IobGV0IHI9MDtyPHQuYXJncy5sZW5ndGg7cisrKXQuYXJnc1tyXWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJm4ucHVzaCh0LmFyZ3Nbcl0pO2Vsc2UgdC50eXBlPT09MSYmdC5yZXMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmbi5wdXNoKHQucmVzKTt0aGlzLl9oYW5kbGVyLnNlbmRNZXNzYWdlKHQsbil9fWZ1bmN0aW9uICRyKGUpe3JldHVybiBlWzBdPT09Im8iJiZlWzFdPT09Im4iJiZCcihlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIFdyKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZCcihlLmNoYXJDb2RlQXQoOSkpfWZ1bmN0aW9uIGJvKGUsdCxuKXtjb25zdCByPWE9PmZ1bmN0aW9uKCl7Y29uc3Qgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoYSxvKX0saT1hPT5mdW5jdGlvbihvKXtyZXR1cm4gbihhLG8pfSxzPXt9O2Zvcihjb25zdCBhIG9mIGUpe2lmKFdyKGEpKXtzW2FdPWkoYSk7Y29udGludWV9aWYoJHIoYSkpe3NbYV09bihhLHZvaWQgMCk7Y29udGludWV9c1thXT1yKGEpfXJldHVybiBzfWNsYXNzIHhve2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5PW4sdGhpcy5fcmVxdWVzdEhhbmRsZXI9bnVsbCx0aGlzLl9wcm90b2NvbD1uZXcgdm8oe3NlbmRNZXNzYWdlOihyLGkpPT57dChyLGkpfSxoYW5kbGVNZXNzYWdlOihyLGkpPT50aGlzLl9oYW5kbGVNZXNzYWdlKHIsaSksaGFuZGxlRXZlbnQ6KHIsaSk9PnRoaXMuX2hhbmRsZUV2ZW50KHIsaSl9KX1vbm1lc3NhZ2UodCl7dGhpcy5fcHJvdG9jb2wuaGFuZGxlTWVzc2FnZSh0KX1faGFuZGxlTWVzc2FnZSh0LG4pe2lmKHQ9PT1mbylyZXR1cm4gdGhpcy5pbml0aWFsaXplKG5bMF0sblsxXSxuWzJdLG5bM10pO2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcnx8dHlwZW9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyW3RdIT0iZnVuY3Rpb24iKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK3QpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9yZXF1ZXN0SGFuZGxlclt0XS5hcHBseSh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKSl9Y2F0Y2gocil7cmV0dXJuIFByb21pc2UucmVqZWN0KHIpfX1faGFuZGxlRXZlbnQodCxuKXtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIik7aWYoV3IodCkpe2NvbnN0IHI9dGhpcy5fcmVxdWVzdEhhbmRsZXJbdF0uY2FsbCh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZHluYW1pYyBldmVudCAke3R9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gcn1pZigkcih0KSl7Y29uc3Qgcj10aGlzLl9yZXF1ZXN0SGFuZGxlclt0XTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZXZlbnQgJHt0fSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIHJ9dGhyb3cgbmV3IEVycm9yKGBNYWxmb3JtZWQgZXZlbnQgbmFtZSAke3R9YCl9aW5pdGlhbGl6ZSh0LG4scixpKXt0aGlzLl9wcm90b2NvbC5zZXRXb3JrZXJJZCh0KTtjb25zdCBvPWJvKGksKGwsdSk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKGwsdSksKGwsdSk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihsLHUpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkobyksUHJvbWlzZS5yZXNvbHZlKFRuKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOihuJiYodHlwZW9mIG4uYmFzZVVybDwidSImJmRlbGV0ZSBuLmJhc2VVcmwsdHlwZW9mIG4ucGF0aHM8InUiJiZ0eXBlb2Ygbi5wYXRocy52czwidSImJmRlbGV0ZSBuLnBhdGhzLnZzLHR5cGVvZiBuLnRydXN0ZWRUeXBlc1BvbGljeTwidSImJmRlbGV0ZSBuLnRydXN0ZWRUeXBlc1BvbGljeSxuLmNhdGNoRXJyb3I9ITAsZ2xvYmFsVGhpcy5yZXF1aXJlLmNvbmZpZyhuKSksbmV3IFByb21pc2UoKGwsdSk9Pntjb25zdCBmPWdsb2JhbFRoaXMucmVxdWlyZTtmKFtyXSxoPT57aWYodGhpcy5fcmVxdWVzdEhhbmRsZXI9aC5jcmVhdGUobyksIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXt1KG5ldyBFcnJvcigiTm8gUmVxdWVzdEhhbmRsZXIhIikpO3JldHVybn1sKFRuKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSl9LHUpfSkpfX1jbGFzcyB6ZXtjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnQ9dCx0aGlzLm9yaWdpbmFsTGVuZ3RoPW4sdGhpcy5tb2RpZmllZFN0YXJ0PXIsdGhpcy5tb2RpZmllZExlbmd0aD1pfWdldE9yaWdpbmFsRW5kKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxTdGFydCt0aGlzLm9yaWdpbmFsTGVuZ3RofWdldE1vZGlmaWVkRW5kKCl7cmV0dXJuIHRoaXMubW9kaWZpZWRTdGFydCt0aGlzLm1vZGlmaWVkTGVuZ3RofX1mdW5jdGlvbiBIcihlLHQpe3JldHVybih0PDw1KS10K2V8MH1mdW5jdGlvbiB5byhlLHQpe3Q9SHIoMTQ5NDE3LHQpO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0PUhyKGUuY2hhckNvZGVBdChuKSx0KTtyZXR1cm4gdH1jbGFzcyB6cntjb25zdHJ1Y3Rvcih0KXt0aGlzLnNvdXJjZT10fWdldEVsZW1lbnRzKCl7Y29uc3QgdD10aGlzLnNvdXJjZSxuPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspbltyXT10LmNoYXJDb2RlQXQocik7cmV0dXJuIG59fWZ1bmN0aW9uIHdvKGUsdCxuKXtyZXR1cm4gbmV3IEdlKG5ldyB6cihlKSxuZXcgenIodCkpLkNvbXB1dGVEaWZmKG4pLmNoYW5nZXN9Y2xhc3MgZ3R7c3RhdGljIEFzc2VydCh0LG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcihuKX19Y2xhc3MgbXR7c3RhdGljIENvcHkodCxuLHIsaSxzKXtmb3IobGV0IGE9MDthPHM7YSsrKXJbaSthXT10W24rYV19c3RhdGljIENvcHkyKHQsbixyLGkscyl7Zm9yKGxldCBhPTA7YTxzO2ErKylyW2krYV09dFtuK2FdfX1jbGFzcyBHcntjb25zdHJ1Y3Rvcigpe3RoaXMubV9jaGFuZ2VzPVtdLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTB9TWFya05leHRDaGFuZ2UoKXsodGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMubV9jaGFuZ2VzLnB1c2gobmV3IHplKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHRoaXMubV9vcmlnaW5hbENvdW50LHRoaXMubV9tb2RpZmllZFN0YXJ0LHRoaXMubV9tb2RpZmllZENvdW50KSksdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNH1BZGRPcmlnaW5hbEVsZW1lbnQodCxuKXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCxuKSx0aGlzLm1fb3JpZ2luYWxDb3VudCsrfUFkZE1vZGlmaWVkRWxlbWVudCh0LG4pe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHQpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LG4pLHRoaXMubV9tb2RpZmllZENvdW50Kyt9Z2V0Q2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzfWdldFJldmVyc2VDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXMucmV2ZXJzZSgpLHRoaXMubV9jaGFuZ2VzfX1jbGFzcyBHZXtjb25zdHJ1Y3Rvcih0LG4scj1udWxsKXt0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZT1yLHRoaXMuX29yaWdpbmFsU2VxdWVuY2U9dCx0aGlzLl9tb2RpZmllZFNlcXVlbmNlPW47Y29uc3RbaSxzLGFdPUdlLl9nZXRFbGVtZW50cyh0KSxbbyxsLHVdPUdlLl9nZXRFbGVtZW50cyhuKTt0aGlzLl9oYXNTdHJpbmdzPWEmJnUsdGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50cz1pLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2g9cyx0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzPW8sdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaD1sLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W119c3RhdGljIF9pc1N0cmluZ0FycmF5KHQpe3JldHVybiB0Lmxlbmd0aD4wJiZ0eXBlb2YgdFswXT09InN0cmluZyJ9c3RhdGljIF9nZXRFbGVtZW50cyh0KXtjb25zdCBuPXQuZ2V0RWxlbWVudHMoKTtpZihHZS5faXNTdHJpbmdBcnJheShuKSl7Y29uc3Qgcj1uZXcgSW50MzJBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBpPTAscz1uLmxlbmd0aDtpPHM7aSsrKXJbaV09eW8obltpXSwwKTtyZXR1cm5bbixyLCEwXX1yZXR1cm4gbiBpbnN0YW5jZW9mIEludDMyQXJyYXk/W1tdLG4sITFdOltbXSxuZXcgSW50MzJBcnJheShuKSwhMV19RWxlbWVudHNBcmVFcXVhbCh0LG4pe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdIT09dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtuXT8hMTp0aGlzLl9oYXNTdHJpbmdzP3RoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW25dOiEwfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwodCxuKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsbikpcmV0dXJuITE7Y29uc3Qgcj1HZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLHQpLGk9R2UuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSxuKTtyZXR1cm4gcj09PWl9c3RhdGljIF9nZXRTdHJpY3RFbGVtZW50KHQsbil7cmV0dXJuIHR5cGVvZiB0LmdldFN0cmljdEVsZW1lbnQ9PSJmdW5jdGlvbiI/dC5nZXRTdHJpY3RFbGVtZW50KG4pOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbbl06ITB9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbbl06ITB9Q29tcHV0ZURpZmYodCl7cmV0dXJuIHRoaXMuX0NvbXB1dGVEaWZmKDAsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMSwwLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsdCl9X0NvbXB1dGVEaWZmKHQsbixyLGkscyl7Y29uc3QgYT1bITFdO2xldCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCxuLHIsaSxhKTtyZXR1cm4gcyYmKG89dGhpcy5QcmV0dGlmeUNoYW5nZXMobykpLHtxdWl0RWFybHk6YVswXSxjaGFuZ2VzOm99fUNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsbixyLGkscyl7Zm9yKHNbMF09ITE7dDw9biYmcjw9aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQscik7KXQrKyxyKys7Zm9yKDtuPj10JiZpPj1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobixpKTspbi0tLGktLTtpZih0Pm58fHI+aSl7bGV0IGg7cmV0dXJuIHI8PWk/KGd0LkFzc2VydCh0PT09bisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxoPVtuZXcgemUodCwwLHIsaS1yKzEpXSk6dDw9bj8oZ3QuQXNzZXJ0KHI9PT1pKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGg9W25ldyB6ZSh0LG4tdCsxLHIsMCldKTooZ3QuQXNzZXJ0KHQ9PT1uKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGd0LkFzc2VydChyPT09aSsxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxoPVtdKSxofWNvbnN0IGE9WzBdLG89WzBdLGw9dGhpcy5Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLHIsaSxhLG8scyksdT1hWzBdLGY9b1swXTtpZihsIT09bnVsbClyZXR1cm4gbDtpZighc1swXSl7Y29uc3QgaD10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsdSxyLGYscyk7bGV0IGQ9W107cmV0dXJuIHNbMF0/ZD1bbmV3IHplKHUrMSxuLSh1KzEpKzEsZisxLGktKGYrMSkrMSldOmQ9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh1KzEsbixmKzEsaSxzKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhoLGQpfXJldHVybltuZXcgemUodCxuLXQrMSxyLGktcisxKV19V0FMS1RSQUNFKHQsbixyLGkscyxhLG8sbCx1LGYsaCxkLGcsbSx2LHAseCx5KXtsZXQgYj1udWxsLEw9bnVsbCxTPW5ldyBHcixfPW4sTj1yLEE9Z1swXS1wWzBdLWksTT0tMTA3Mzc0MTgyNCxJPXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCBDPUErdDtDPT09X3x8QzxOJiZ1W0MtMV08dVtDKzFdPyhoPXVbQysxXSxtPWgtQS1pLGg8TSYmUy5NYXJrTmV4dENoYW5nZSgpLE09aCxTLkFkZE1vZGlmaWVkRWxlbWVudChoKzEsbSksQT1DKzEtdCk6KGg9dVtDLTFdKzEsbT1oLUEtaSxoPE0mJlMuTWFya05leHRDaGFuZ2UoKSxNPWgtMSxTLkFkZE9yaWdpbmFsRWxlbWVudChoLG0rMSksQT1DLTEtdCksST49MCYmKHU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W0ldLHQ9dVswXSxfPTEsTj11Lmxlbmd0aC0xKX13aGlsZSgtLUk+PS0xKTtpZihiPVMuZ2V0UmV2ZXJzZUNoYW5nZXMoKSx5WzBdKXtsZXQgQz1nWzBdKzEsdz1wWzBdKzE7aWYoYiE9PW51bGwmJmIubGVuZ3RoPjApe2NvbnN0IFQ9YltiLmxlbmd0aC0xXTtDPU1hdGgubWF4KEMsVC5nZXRPcmlnaW5hbEVuZCgpKSx3PU1hdGgubWF4KHcsVC5nZXRNb2RpZmllZEVuZCgpKX1MPVtuZXcgemUoQyxkLUMrMSx3LHYtdysxKV19ZWxzZXtTPW5ldyBHcixfPWEsTj1vLEE9Z1swXS1wWzBdLWwsTT0xMDczNzQxODI0LEk9eD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IEM9QStzO0M9PT1ffHxDPE4mJmZbQy0xXT49ZltDKzFdPyhoPWZbQysxXS0xLG09aC1BLWwsaD5NJiZTLk1hcmtOZXh0Q2hhbmdlKCksTT1oKzEsUy5BZGRPcmlnaW5hbEVsZW1lbnQoaCsxLG0rMSksQT1DKzEtcyk6KGg9ZltDLTFdLG09aC1BLWwsaD5NJiZTLk1hcmtOZXh0Q2hhbmdlKCksTT1oLFMuQWRkTW9kaWZpZWRFbGVtZW50KGgrMSxtKzEpLEE9Qy0xLXMpLEk+PTAmJihmPXRoaXMubV9yZXZlcnNlSGlzdG9yeVtJXSxzPWZbMF0sXz0xLE49Zi5sZW5ndGgtMSl9d2hpbGUoLS1JPj0tMSk7TD1TLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoYixMKX1Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLHIsaSxzLGEsbyl7bGV0IGw9MCx1PTAsZj0wLGg9MCxkPTAsZz0wO3QtLSxyLS0sc1swXT0wLGFbMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IG09bi10KyhpLXIpLHY9bSsxLHA9bmV3IEludDMyQXJyYXkodikseD1uZXcgSW50MzJBcnJheSh2KSx5PWktcixiPW4tdCxMPXQtcixTPW4taSxOPShiLXkpJTI9PT0wO3BbeV09dCx4W2JdPW4sb1swXT0hMTtmb3IobGV0IEE9MTtBPD1tLzIrMTtBKyspe2xldCBNPTAsST0wO2Y9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZCh5LUEsQSx5LHYpLGg9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZCh5K0EsQSx5LHYpO2ZvcihsZXQgdz1mO3c8PWg7dys9Mil7dz09PWZ8fHc8aCYmcFt3LTFdPHBbdysxXT9sPXBbdysxXTpsPXBbdy0xXSsxLHU9bC0ody15KS1MO2NvbnN0IFQ9bDtmb3IoO2w8biYmdTxpJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobCsxLHUrMSk7KWwrKyx1Kys7aWYocFt3XT1sLGwrdT5NK0kmJihNPWwsST11KSwhTiYmTWF0aC5hYnMody1iKTw9QS0xJiZsPj14W3ddKXJldHVybiBzWzBdPWwsYVswXT11LFQ8PXhbd10mJkE8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoeSxmLGgsTCxiLGQsZyxTLHAseCxsLG4scyx1LGksYSxOLG8pOm51bGx9Y29uc3QgQz0oTS10KyhJLXIpLUEpLzI7aWYodGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUhPT1udWxsJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoTSxDKSlyZXR1cm4gb1swXT0hMCxzWzBdPU0sYVswXT1JLEM+MCYmQTw9MTQ0OD90aGlzLldBTEtUUkFDRSh5LGYsaCxMLGIsZCxnLFMscCx4LGwsbixzLHUsaSxhLE4sbyk6KHQrKyxyKyssW25ldyB6ZSh0LG4tdCsxLHIsaS1yKzEpXSk7ZD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGItQSxBLGIsdiksZz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGIrQSxBLGIsdik7Zm9yKGxldCB3PWQ7dzw9Zzt3Kz0yKXt3PT09ZHx8dzxnJiZ4W3ctMV0+PXhbdysxXT9sPXhbdysxXS0xOmw9eFt3LTFdLHU9bC0ody1iKS1TO2NvbnN0IFQ9bDtmb3IoO2w+dCYmdT5yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobCx1KTspbC0tLHUtLTtpZih4W3ddPWwsTiYmTWF0aC5hYnMody15KTw9QSYmbDw9cFt3XSlyZXR1cm4gc1swXT1sLGFbMF09dSxUPj1wW3ddJiZBPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKHksZixoLEwsYixkLGcsUyxwLHgsbCxuLHMsdSxpLGEsTixvKTpudWxsfWlmKEE8PTE0NDcpe2xldCB3PW5ldyBJbnQzMkFycmF5KGgtZisyKTt3WzBdPXktZisxLG10LkNvcHkyKHAsZix3LDEsaC1mKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKHcpLHc9bmV3IEludDMyQXJyYXkoZy1kKzIpLHdbMF09Yi1kKzEsbXQuQ29weTIoeCxkLHcsMSxnLWQrMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2godyl9fXJldHVybiB0aGlzLldBTEtUUkFDRSh5LGYsaCxMLGIsZCxnLFMscCx4LGwsbixzLHUsaSxhLE4sbyl9UHJldHRpZnlDaGFuZ2VzKHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCByPXRbbl0saT1uPHQubGVuZ3RoLTE/dFtuKzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgscz1uPHQubGVuZ3RoLTE/dFtuKzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsYT1yLm9yaWdpbmFsTGVuZ3RoPjAsbz1yLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtyLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aDxpJiZyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aDxzJiYoIWF8fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHIub3JpZ2luYWxTdGFydCxyLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aCkpJiYoIW98fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKHIubW9kaWZpZWRTdGFydCxyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgdT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoci5vcmlnaW5hbFN0YXJ0LHIubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKHIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoLHIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoKSYmIXUpYnJlYWs7ci5vcmlnaW5hbFN0YXJ0Kyssci5tb2RpZmllZFN0YXJ0Kyt9Y29uc3QgbD1bbnVsbF07aWYobjx0Lmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKHRbbl0sdFtuKzFdLGwpKXt0W25dPWxbMF0sdC5zcGxpY2UobisxLDEpLG4tLTtjb250aW51ZX19Zm9yKGxldCBuPXQubGVuZ3RoLTE7bj49MDtuLS0pe2NvbnN0IHI9dFtuXTtsZXQgaT0wLHM9MDtpZihuPjApe2NvbnN0IGg9dFtuLTFdO2k9aC5vcmlnaW5hbFN0YXJ0K2gub3JpZ2luYWxMZW5ndGgscz1oLm1vZGlmaWVkU3RhcnQraC5tb2RpZmllZExlbmd0aH1jb25zdCBhPXIub3JpZ2luYWxMZW5ndGg+MCxvPXIubW9kaWZpZWRMZW5ndGg+MDtsZXQgbD0wLHU9dGhpcy5fYm91bmRhcnlTY29yZShyLm9yaWdpbmFsU3RhcnQsci5vcmlnaW5hbExlbmd0aCxyLm1vZGlmaWVkU3RhcnQsci5tb2RpZmllZExlbmd0aCk7Zm9yKGxldCBoPTE7O2grKyl7Y29uc3QgZD1yLm9yaWdpbmFsU3RhcnQtaCxnPXIubW9kaWZpZWRTdGFydC1oO2lmKGQ8aXx8ZzxzfHxhJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwoZCxkK3Iub3JpZ2luYWxMZW5ndGgpfHxvJiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoZyxnK3IubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2NvbnN0IHY9KGQ9PT1pJiZnPT09cz81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUoZCxyLm9yaWdpbmFsTGVuZ3RoLGcsci5tb2RpZmllZExlbmd0aCk7dj51JiYodT12LGw9aCl9ci5vcmlnaW5hbFN0YXJ0LT1sLHIubW9kaWZpZWRTdGFydC09bDtjb25zdCBmPVtudWxsXTtpZihuPjAmJnRoaXMuQ2hhbmdlc092ZXJsYXAodFtuLTFdLHRbbl0sZikpe3Rbbi0xXT1mWzBdLHQuc3BsaWNlKG4sMSksbisrO2NvbnRpbnVlfX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgbj0xLHI9dC5sZW5ndGg7bjxyO24rKyl7Y29uc3QgaT10W24tMV0scz10W25dLGE9cy5vcmlnaW5hbFN0YXJ0LWkub3JpZ2luYWxTdGFydC1pLm9yaWdpbmFsTGVuZ3RoLG89aS5vcmlnaW5hbFN0YXJ0LGw9cy5vcmlnaW5hbFN0YXJ0K3Mub3JpZ2luYWxMZW5ndGgsdT1sLW8sZj1pLm1vZGlmaWVkU3RhcnQsaD1zLm1vZGlmaWVkU3RhcnQrcy5tb2RpZmllZExlbmd0aCxkPWgtZjtpZihhPDUmJnU8MjAmJmQ8MjApe2NvbnN0IGc9dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShvLHUsZixkLGEpO2lmKGcpe2NvbnN0W20sdl09ZzsobSE9PWkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RofHx2IT09aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgpJiYoaS5vcmlnaW5hbExlbmd0aD1tLWkub3JpZ2luYWxTdGFydCxpLm1vZGlmaWVkTGVuZ3RoPXYtaS5tb2RpZmllZFN0YXJ0LHMub3JpZ2luYWxTdGFydD1tK2Escy5tb2RpZmllZFN0YXJ0PXYrYSxzLm9yaWdpbmFsTGVuZ3RoPWwtcy5vcmlnaW5hbFN0YXJ0LHMubW9kaWZpZWRMZW5ndGg9aC1zLm1vZGlmaWVkU3RhcnQpfX19cmV0dXJuIHR9X2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UodCxuLHIsaSxzKXtpZihuPHN8fGk8cylyZXR1cm4gbnVsbDtjb25zdCBhPXQrbi1zKzEsbz1yK2ktcysxO2xldCBsPTAsdT0wLGY9MDtmb3IobGV0IGg9dDtoPGE7aCsrKWZvcihsZXQgZD1yO2Q8bztkKyspe2NvbnN0IGc9dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUoaCxkLHMpO2c+MCYmZz5sJiYobD1nLHU9aCxmPWQpfXJldHVybiBsPjA/W3UsZl06bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxuLHIpe2xldCBpPTA7Zm9yKGxldCBzPTA7czxyO3MrKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0K3MsbitzKSlyZXR1cm4gMDtpKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3Qrc10ubGVuZ3RofXJldHVybiBpfV9PcmlnaW5hbElzQm91bmRhcnkodCl7cmV0dXJuIHQ8PTB8fHQ+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTE/ITA6dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF0pfV9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKXtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkodCl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeSh0LTEpKXJldHVybiEwO2lmKG4+MCl7Y29uc3Qgcj10K247aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHItMSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShyKSlyZXR1cm4hMH1yZXR1cm4hMX1fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpe3JldHVybiB0PD0wfHx0Pj10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xPyEwOnRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KHQsbil7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkodC0xKSlyZXR1cm4hMDtpZihuPjApe2NvbnN0IHI9dCtuO2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShyLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkocikpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUodCxuLHIsaSl7Y29uc3Qgcz10aGlzLl9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKT8xOjAsYT10aGlzLl9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkocixpKT8xOjA7cmV0dXJuIHMrYX1Db25jYXRlbmF0ZUNoYW5nZXModCxuKXtjb25zdCByPVtdO2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBuLmxlbmd0aD4wP246dDtpZih0aGlzLkNoYW5nZXNPdmVybGFwKHRbdC5sZW5ndGgtMV0sblswXSxyKSl7Y29uc3QgaT1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgtMSk7cmV0dXJuIG10LkNvcHkodCwwLGksMCx0Lmxlbmd0aC0xKSxpW3QubGVuZ3RoLTFdPXJbMF0sbXQuQ29weShuLDEsaSx0Lmxlbmd0aCxuLmxlbmd0aC0xKSxpfWVsc2V7Y29uc3QgaT1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgpO3JldHVybiBtdC5Db3B5KHQsMCxpLDAsdC5sZW5ndGgpLG10LkNvcHkobiwwLGksdC5sZW5ndGgsbi5sZW5ndGgpLGl9fUNoYW5nZXNPdmVybGFwKHQsbixyKXtpZihndC5Bc3NlcnQodC5vcmlnaW5hbFN0YXJ0PD1uLm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZ3QuQXNzZXJ0KHQubW9kaWZpZWRTdGFydDw9bi5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoPj1uLm9yaWdpbmFsU3RhcnR8fHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoPj1uLm1vZGlmaWVkU3RhcnQpe2NvbnN0IGk9dC5vcmlnaW5hbFN0YXJ0O2xldCBzPXQub3JpZ2luYWxMZW5ndGg7Y29uc3QgYT10Lm1vZGlmaWVkU3RhcnQ7bGV0IG89dC5tb2RpZmllZExlbmd0aDtyZXR1cm4gdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydCYmKHM9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtdC5vcmlnaW5hbFN0YXJ0KSx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0JiYobz1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC10Lm1vZGlmaWVkU3RhcnQpLHJbMF09bmV3IHplKGkscyxhLG8pLCEwfWVsc2UgcmV0dXJuIHJbMF09bnVsbCwhMX1DbGlwRGlhZ29uYWxCb3VuZCh0LG4scixpKXtpZih0Pj0wJiZ0PGkpcmV0dXJuIHQ7Y29uc3Qgcz1yLGE9aS1yLTEsbz1uJTI9PT0wO2lmKHQ8MCl7Y29uc3QgbD1zJTI9PT0wO3JldHVybiBvPT09bD8wOjF9ZWxzZXtjb25zdCBsPWElMj09PTA7cmV0dXJuIG89PT1sP2ktMTppLTJ9fX12YXIgSnI9e0VOVl9UWVBFOiJsb2NhbCIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifTtsZXQgcHQ7Y29uc3QgcW49Z2xvYmFsVGhpcy52c2NvZGU7aWYodHlwZW9mIHFuPCJ1IiYmdHlwZW9mIHFuLnByb2Nlc3M8InUiKXtjb25zdCBlPXFuLnByb2Nlc3M7cHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZCgpe3JldHVybiBlLmN3ZCgpfX19ZWxzZSB0eXBlb2YgcHJvY2VzczwidSI/cHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gSnJ9LGN3ZCgpe3JldHVybiBKci5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06cHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBSdD8id2luMzIiOllhPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZCgpe3JldHVybiIvIn19O2NvbnN0IHRuPXB0LmN3ZCxfbz1wdC5lbnYsU289cHQucGxhdGZvcm0sTG89NjUsTm89OTcsQW89OTAsQ289MTIyLEplPTQ2LG9lPTQ3LGdlPTkyLFhlPTU4LGtvPTYzO2NsYXNzIFhyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLHIpe2xldCBpO3R5cGVvZiBuPT0ic3RyaW5nIiYmbi5pbmRleE9mKCJub3QgIik9PT0wPyhpPSJtdXN0IG5vdCBiZSIsbj1uLnJlcGxhY2UoL15ub3QgLywiIikpOmk9Im11c3QgYmUiO2NvbnN0IHM9dC5pbmRleE9mKCIuIikhPT0tMT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IGE9YFRoZSAiJHt0fSIgJHtzfSAke2l9IG9mIHR5cGUgJHtufWA7YSs9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiByfWAsc3VwZXIoYSksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIEVvKGUsdCl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgWHIodCwiT2JqZWN0IixlKX1mdW5jdGlvbiBlZShlLHQpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgWHIodCwic3RyaW5nIixlKX1jb25zdCBRZT1Tbz09PSJ3aW4zMiI7ZnVuY3Rpb24gVyhlKXtyZXR1cm4gZT09PW9lfHxlPT09Z2V9ZnVuY3Rpb24gQm4oZSl7cmV0dXJuIGU9PT1vZX1mdW5jdGlvbiBaZShlKXtyZXR1cm4gZT49TG8mJmU8PUFvfHxlPj1ObyYmZTw9Q299ZnVuY3Rpb24gbm4oZSx0LG4scil7bGV0IGk9IiIscz0wLGE9LTEsbz0wLGw9MDtmb3IobGV0IHU9MDt1PD1lLmxlbmd0aDsrK3Upe2lmKHU8ZS5sZW5ndGgpbD1lLmNoYXJDb2RlQXQodSk7ZWxzZXtpZihyKGwpKWJyZWFrO2w9b2V9aWYocihsKSl7aWYoIShhPT09dS0xfHxvPT09MSkpaWYobz09PTIpe2lmKGkubGVuZ3RoPDJ8fHMhPT0yfHxpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT1KZXx8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTIpIT09SmUpe2lmKGkubGVuZ3RoPjIpe2NvbnN0IGY9aS5sYXN0SW5kZXhPZihuKTtmPT09LTE/KGk9IiIscz0wKTooaT1pLnNsaWNlKDAsZikscz1pLmxlbmd0aC0xLWkubGFzdEluZGV4T2YobikpLGE9dSxvPTA7Y29udGludWV9ZWxzZSBpZihpLmxlbmd0aCE9PTApe2k9IiIscz0wLGE9dSxvPTA7Y29udGludWV9fXQmJihpKz1pLmxlbmd0aD4wP2Ake259Li5gOiIuLiIscz0yKX1lbHNlIGkubGVuZ3RoPjA/aSs9YCR7bn0ke2Uuc2xpY2UoYSsxLHUpfWA6aT1lLnNsaWNlKGErMSx1KSxzPXUtYS0xO2E9dSxvPTB9ZWxzZSBsPT09SmUmJm8hPT0tMT8rK286bz0tMX1yZXR1cm4gaX1mdW5jdGlvbiBRcihlLHQpe0VvKHQsInBhdGhPYmplY3QiKTtjb25zdCBuPXQuZGlyfHx0LnJvb3Qscj10LmJhc2V8fGAke3QubmFtZXx8IiJ9JHt0LmV4dHx8IiJ9YDtyZXR1cm4gbj9uPT09dC5yb290P2Ake259JHtyfWA6YCR7bn0ke2V9JHtyfWA6cn1jb25zdCBoZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSIiLHI9ITE7Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49LTE7aS0tKXtsZXQgcztpZihpPj0wKXtpZihzPWVbaV0sZWUocywicGF0aCIpLHMubGVuZ3RoPT09MCljb250aW51ZX1lbHNlIHQubGVuZ3RoPT09MD9zPXRuKCk6KHM9X29bYD0ke3R9YF18fHRuKCksKHM9PT12b2lkIDB8fHMuc2xpY2UoMCwyKS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpJiZzLmNoYXJDb2RlQXQoMik9PT1nZSkmJihzPWAke3R9XFxgKSk7Y29uc3QgYT1zLmxlbmd0aDtsZXQgbz0wLGw9IiIsdT0hMTtjb25zdCBmPXMuY2hhckNvZGVBdCgwKTtpZihhPT09MSlXKGYpJiYobz0xLHU9ITApO2Vsc2UgaWYoVyhmKSlpZih1PSEwLFcocy5jaGFyQ29kZUF0KDEpKSl7bGV0IGg9MixkPWg7Zm9yKDtoPGEmJiFXKHMuY2hhckNvZGVBdChoKSk7KWgrKztpZihoPGEmJmghPT1kKXtjb25zdCBnPXMuc2xpY2UoZCxoKTtmb3IoZD1oO2g8YSYmVyhzLmNoYXJDb2RlQXQoaCkpOyloKys7aWYoaDxhJiZoIT09ZCl7Zm9yKGQ9aDtoPGEmJiFXKHMuY2hhckNvZGVBdChoKSk7KWgrKzsoaD09PWF8fGghPT1kKSYmKGw9YFxcXFwke2d9XFwke3Muc2xpY2UoZCxoKX1gLG89aCl9fX1lbHNlIG89MTtlbHNlIFplKGYpJiZzLmNoYXJDb2RlQXQoMSk9PT1YZSYmKGw9cy5zbGljZSgwLDIpLG89MixhPjImJlcocy5jaGFyQ29kZUF0KDIpKSYmKHU9ITAsbz0zKSk7aWYobC5sZW5ndGg+MClpZih0Lmxlbmd0aD4wKXtpZihsLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSB0PWw7aWYocil7aWYodC5sZW5ndGg+MClicmVha31lbHNlIGlmKG49YCR7cy5zbGljZShvKX1cXCR7bn1gLHI9dSx1JiZ0Lmxlbmd0aD4wKWJyZWFrfXJldHVybiBuPW5uKG4sIXIsIlxcIixXKSxyP2Ake3R9XFwke259YDpgJHt0fSR7bn1gfHwiLiJ9LG5vcm1hbGl6ZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49MCxyLGk9ITE7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoMCk7aWYodD09PTEpcmV0dXJuIEJuKHMpPyJcXCI6ZTtpZihXKHMpKWlmKGk9ITAsVyhlLmNoYXJDb2RlQXQoMSkpKXtsZXQgbz0yLGw9bztmb3IoO288dCYmIVcoZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG88dCYmbyE9PWwpe2NvbnN0IHU9ZS5zbGljZShsLG8pO2ZvcihsPW87bzx0JiZXKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT1sKXtmb3IobD1vO288dCYmIVcoZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG89PT10KXJldHVybmBcXFxcJHt1fVxcJHtlLnNsaWNlKGwpfVxcYDtvIT09bCYmKHI9YFxcXFwke3V9XFwke2Uuc2xpY2UobCxvKX1gLG49byl9fX1lbHNlIG49MTtlbHNlIFplKHMpJiZlLmNoYXJDb2RlQXQoMSk9PT1YZSYmKHI9ZS5zbGljZSgwLDIpLG49Mix0PjImJlcoZS5jaGFyQ29kZUF0KDIpKSYmKGk9ITAsbj0zKSk7bGV0IGE9bjx0P25uKGUuc2xpY2UobiksIWksIlxcIixXKToiIjtyZXR1cm4gYS5sZW5ndGg9PT0wJiYhaSYmKGE9Ii4iKSxhLmxlbmd0aD4wJiZXKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHI9PT12b2lkIDA/aT9gXFwke2F9YDphOmk/YCR7cn1cXCR7YX1gOmAke3J9JHthfWB9LGlzQWJzb2x1dGUoZSl7ZWUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIFcobil8fHQ+MiYmWmUobikmJmUuY2hhckNvZGVBdCgxKT09PVhlJiZXKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdCxuO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7KytzKXtjb25zdCBhPWVbc107ZWUoYSwicGF0aCIpLGEubGVuZ3RoPjAmJih0PT09dm9pZCAwP3Q9bj1hOnQrPWBcXCR7YX1gKX1pZih0PT09dm9pZCAwKXJldHVybiIuIjtsZXQgcj0hMCxpPTA7aWYodHlwZW9mIG49PSJzdHJpbmciJiZXKG4uY2hhckNvZGVBdCgwKSkpeysraTtjb25zdCBzPW4ubGVuZ3RoO3M+MSYmVyhuLmNoYXJDb2RlQXQoMSkpJiYoKytpLHM+MiYmKFcobi5jaGFyQ29kZUF0KDIpKT8rK2k6cj0hMSkpfWlmKHIpe2Zvcig7aTx0Lmxlbmd0aCYmVyh0LmNoYXJDb2RlQXQoaSkpOylpKys7aT49MiYmKHQ9YFxcJHt0LnNsaWNlKGkpfWApfXJldHVybiBoZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoZWUoZSwiZnJvbSIpLGVlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1oZS5yZXNvbHZlKGUpLHI9aGUucmVzb2x2ZSh0KTtpZihuPT09cnx8KGU9bi50b0xvd2VyQ2FzZSgpLHQ9ci50b0xvd2VyQ2FzZSgpLGU9PT10KSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09Z2U7KWkrKztsZXQgcz1lLmxlbmd0aDtmb3IoO3MtMT5pJiZlLmNoYXJDb2RlQXQocy0xKT09PWdlOylzLS07Y29uc3QgYT1zLWk7bGV0IG89MDtmb3IoO288dC5sZW5ndGgmJnQuY2hhckNvZGVBdChvKT09PWdlOylvKys7bGV0IGw9dC5sZW5ndGg7Zm9yKDtsLTE+byYmdC5jaGFyQ29kZUF0KGwtMSk9PT1nZTspbC0tO2NvbnN0IHU9bC1vLGY9YTx1P2E6dTtsZXQgaD0tMSxkPTA7Zm9yKDtkPGY7ZCsrKXtjb25zdCBtPWUuY2hhckNvZGVBdChpK2QpO2lmKG0hPT10LmNoYXJDb2RlQXQobytkKSlicmVhazttPT09Z2UmJihoPWQpfWlmKGQhPT1mKXtpZihoPT09LTEpcmV0dXJuIHJ9ZWxzZXtpZih1PmYpe2lmKHQuY2hhckNvZGVBdChvK2QpPT09Z2UpcmV0dXJuIHIuc2xpY2UobytkKzEpO2lmKGQ9PT0yKXJldHVybiByLnNsaWNlKG8rZCl9YT5mJiYoZS5jaGFyQ29kZUF0KGkrZCk9PT1nZT9oPWQ6ZD09PTImJihoPTMpKSxoPT09LTEmJihoPTApfWxldCBnPSIiO2ZvcihkPWkraCsxO2Q8PXM7KytkKShkPT09c3x8ZS5jaGFyQ29kZUF0KGQpPT09Z2UpJiYoZys9Zy5sZW5ndGg9PT0wPyIuLiI6IlxcLi4iKTtyZXR1cm4gbys9aCxnLmxlbmd0aD4wP2Ake2d9JHtyLnNsaWNlKG8sbCl9YDooci5jaGFyQ29kZUF0KG8pPT09Z2UmJisrbyxyLnNsaWNlKG8sbCkpfSx0b05hbWVzcGFjZWRQYXRoKGUpe2lmKHR5cGVvZiBlIT0ic3RyaW5nInx8ZS5sZW5ndGg9PT0wKXJldHVybiBlO2NvbnN0IHQ9aGUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1nZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09Z2Upe2NvbnN0IG49dC5jaGFyQ29kZUF0KDIpO2lmKG4hPT1rbyYmbiE9PUplKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihaZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT1YZSYmdC5jaGFyQ29kZUF0KDIpPT09Z2UpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKHQ9PT0xKXJldHVybiBXKGkpP2U6Ii4iO2lmKFcoaSkpe2lmKG49cj0xLFcoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IG89MixsPW87Zm9yKDtvPHQmJiFXKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT1sKXtmb3IobD1vO288dCYmVyhlLmNoYXJDb2RlQXQobykpOylvKys7aWYobzx0JiZvIT09bCl7Zm9yKGw9bztvPHQmJiFXKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPT09dClyZXR1cm4gZTtvIT09bCYmKG49cj1vKzEpfX19fWVsc2UgWmUoaSkmJmUuY2hhckNvZGVBdCgxKT09PVhlJiYobj10PjImJlcoZS5jaGFyQ29kZUF0KDIpKT8zOjIscj1uKTtsZXQgcz0tMSxhPSEwO2ZvcihsZXQgbz10LTE7bz49cjstLW8paWYoVyhlLmNoYXJDb2RlQXQobykpKXtpZighYSl7cz1vO2JyZWFrfX1lbHNlIGE9ITE7aWYocz09PS0xKXtpZihuPT09LTEpcmV0dXJuIi4iO3M9bn1yZXR1cm4gZS5zbGljZSgwLHMpfSxiYXNlbmFtZShlLHQpe3QhPT12b2lkIDAmJmVlKHQsImV4dCIpLGVlKGUsInBhdGgiKTtsZXQgbj0wLHI9LTEsaT0hMCxzO2lmKGUubGVuZ3RoPj0yJiZaZShlLmNoYXJDb2RlQXQoMCkpJiZlLmNoYXJDb2RlQXQoMSk9PT1YZSYmKG49MiksdCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLG89LTE7Zm9yKHM9ZS5sZW5ndGgtMTtzPj1uOy0tcyl7Y29uc3QgbD1lLmNoYXJDb2RlQXQocyk7aWYoVyhsKSl7aWYoIWkpe249cysxO2JyZWFrfX1lbHNlIG89PT0tMSYmKGk9ITEsbz1zKzEpLGE+PTAmJihsPT09dC5jaGFyQ29kZUF0KGEpPy0tYT09PS0xJiYocj1zKTooYT0tMSxyPW8pKX1yZXR1cm4gbj09PXI/cj1vOnI9PT0tMSYmKHI9ZS5sZW5ndGgpLGUuc2xpY2UobixyKX1mb3Iocz1lLmxlbmd0aC0xO3M+PW47LS1zKWlmKFcoZS5jaGFyQ29kZUF0KHMpKSl7aWYoIWkpe249cysxO2JyZWFrfX1lbHNlIHI9PT0tMSYmKGk9ITEscj1zKzEpO3JldHVybiByPT09LTE/IiI6ZS5zbGljZShuLHIpfSxleHRuYW1lKGUpe2VlKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEscz0hMCxhPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PVhlJiZaZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgbz1lLmxlbmd0aC0xO28+PXQ7LS1vKXtjb25zdCBsPWUuY2hhckNvZGVBdChvKTtpZihXKGwpKXtpZighcyl7cj1vKzE7YnJlYWt9Y29udGludWV9aT09PS0xJiYocz0hMSxpPW8rMSksbD09PUplP249PT0tMT9uPW86YSE9PTEmJihhPTEpOm4hPT0tMSYmKGE9LTEpfXJldHVybiBuPT09LTF8fGk9PT0tMXx8YT09PTB8fGE9PT0xJiZuPT09aS0xJiZuPT09cisxPyIiOmUuc2xpY2UobixpKX0sZm9ybWF0OlFyLmJpbmQobnVsbCwiXFwiKSxwYXJzZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5sZW5ndGg7bGV0IHI9MCxpPWUuY2hhckNvZGVBdCgwKTtpZihuPT09MSlyZXR1cm4gVyhpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihXKGkpKXtpZihyPTEsVyhlLmNoYXJDb2RlQXQoMSkpKXtsZXQgaD0yLGQ9aDtmb3IoO2g8biYmIVcoZS5jaGFyQ29kZUF0KGgpKTspaCsrO2lmKGg8biYmaCE9PWQpe2ZvcihkPWg7aDxuJiZXKGUuY2hhckNvZGVBdChoKSk7KWgrKztpZihoPG4mJmghPT1kKXtmb3IoZD1oO2g8biYmIVcoZS5jaGFyQ29kZUF0KGgpKTspaCsrO2g9PT1uP3I9aDpoIT09ZCYmKHI9aCsxKX19fX1lbHNlIGlmKFplKGkpJiZlLmNoYXJDb2RlQXQoMSk9PT1YZSl7aWYobjw9MilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpZihyPTIsVyhlLmNoYXJDb2RlQXQoMikpKXtpZihuPT09MylyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBzPS0xLGE9cixvPS0xLGw9ITAsdT1lLmxlbmd0aC0xLGY9MDtmb3IoO3U+PXI7LS11KXtpZihpPWUuY2hhckNvZGVBdCh1KSxXKGkpKXtpZighbCl7YT11KzE7YnJlYWt9Y29udGludWV9bz09PS0xJiYobD0hMSxvPXUrMSksaT09PUplP3M9PT0tMT9zPXU6ZiE9PTEmJihmPTEpOnMhPT0tMSYmKGY9LTEpfXJldHVybiBvIT09LTEmJihzPT09LTF8fGY9PT0wfHxmPT09MSYmcz09PW8tMSYmcz09PWErMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UoYSxvKToodC5uYW1lPWUuc2xpY2UoYSxzKSx0LmJhc2U9ZS5zbGljZShhLG8pLHQuZXh0PWUuc2xpY2UocyxvKSkpLGE+MCYmYSE9PXI/dC5kaXI9ZS5zbGljZSgwLGEtMSk6dC5kaXI9dC5yb290LHR9LHNlcDoiXFwiLGRlbGltaXRlcjoiOyIsd2luMzI6bnVsbCxwb3NpeDpudWxsfSxNbz0oKCk9PntpZihRZSl7Y29uc3QgZT0vXFwvZztyZXR1cm4oKT0+e2NvbnN0IHQ9dG4oKS5yZXBsYWNlKGUsIi8iKTtyZXR1cm4gdC5zbGljZSh0LmluZGV4T2YoIi8iKSl9fXJldHVybigpPT50bigpfSkoKSxtZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSExO2ZvcihsZXQgcj1lLmxlbmd0aC0xO3I+PS0xJiYhbjtyLS0pe2NvbnN0IGk9cj49MD9lW3JdOk1vKCk7ZWUoaSwicGF0aCIpLGkubGVuZ3RoIT09MCYmKHQ9YCR7aX0vJHt0fWAsbj1pLmNoYXJDb2RlQXQoMCk9PT1vZSl9cmV0dXJuIHQ9bm4odCwhbiwiLyIsQm4pLG4/YC8ke3R9YDp0Lmxlbmd0aD4wP3Q6Ii4ifSxub3JtYWxpemUoZSl7aWYoZWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1vZSxuPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKT09PW9lO3JldHVybiBlPW5uKGUsIXQsIi8iLEJuKSxlLmxlbmd0aD09PTA/dD8iLyI6bj8iLi8iOiIuIjoobiYmKGUrPSIvIiksdD9gLyR7ZX1gOmUpfSxpc0Fic29sdXRlKGUpe3JldHVybiBlZShlLCJwYXRoIiksZS5sZW5ndGg+MCYmZS5jaGFyQ29kZUF0KDApPT09b2V9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbil7Y29uc3Qgcj1lW25dO2VlKHIsInBhdGgiKSxyLmxlbmd0aD4wJiYodD09PXZvaWQgMD90PXI6dCs9YC8ke3J9YCl9cmV0dXJuIHQ9PT12b2lkIDA/Ii4iOm1lLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihlZShlLCJmcm9tIiksZWUodCwidG8iKSxlPT09dHx8KGU9bWUucmVzb2x2ZShlKSx0PW1lLnJlc29sdmUodCksZT09PXQpKXJldHVybiIiO2NvbnN0IG49MSxyPWUubGVuZ3RoLGk9ci1uLHM9MSxhPXQubGVuZ3RoLXMsbz1pPGE/aTphO2xldCBsPS0xLHU9MDtmb3IoO3U8bzt1Kyspe2NvbnN0IGg9ZS5jaGFyQ29kZUF0KG4rdSk7aWYoaCE9PXQuY2hhckNvZGVBdChzK3UpKWJyZWFrO2g9PT1vZSYmKGw9dSl9aWYodT09PW8paWYoYT5vKXtpZih0LmNoYXJDb2RlQXQocyt1KT09PW9lKXJldHVybiB0LnNsaWNlKHMrdSsxKTtpZih1PT09MClyZXR1cm4gdC5zbGljZShzK3UpfWVsc2UgaT5vJiYoZS5jaGFyQ29kZUF0KG4rdSk9PT1vZT9sPXU6dT09PTAmJihsPTApKTtsZXQgZj0iIjtmb3IodT1uK2wrMTt1PD1yOysrdSkodT09PXJ8fGUuY2hhckNvZGVBdCh1KT09PW9lKSYmKGYrPWYubGVuZ3RoPT09MD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtmfSR7dC5zbGljZShzK2wpfWB9LHRvTmFtZXNwYWNlZFBhdGgoZSl7cmV0dXJuIGV9LGRpcm5hbWUoZSl7aWYoZWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1vZTtsZXQgbj0tMSxyPSEwO2ZvcihsZXQgaT1lLmxlbmd0aC0xO2k+PTE7LS1pKWlmKGUuY2hhckNvZGVBdChpKT09PW9lKXtpZighcil7bj1pO2JyZWFrfX1lbHNlIHI9ITE7cmV0dXJuIG49PT0tMT90PyIvIjoiLiI6dCYmbj09PTE/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dCE9PXZvaWQgMCYmZWUodCwiZXh0IiksZWUoZSwicGF0aCIpO2xldCBuPTAscj0tMSxpPSEwLHM7aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLG89LTE7Zm9yKHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7Y29uc3QgbD1lLmNoYXJDb2RlQXQocyk7aWYobD09PW9lKXtpZighaSl7bj1zKzE7YnJlYWt9fWVsc2Ugbz09PS0xJiYoaT0hMSxvPXMrMSksYT49MCYmKGw9PT10LmNoYXJDb2RlQXQoYSk/LS1hPT09LTEmJihyPXMpOihhPS0xLHI9bykpfXJldHVybiBuPT09cj9yPW86cj09PS0xJiYocj1lLmxlbmd0aCksZS5zbGljZShuLHIpfWZvcihzPWUubGVuZ3RoLTE7cz49MDstLXMpaWYoZS5jaGFyQ29kZUF0KHMpPT09b2Upe2lmKCFpKXtuPXMrMTticmVha319ZWxzZSByPT09LTEmJihpPSExLHI9cysxKTtyZXR1cm4gcj09PS0xPyIiOmUuc2xpY2UobixyKX0sZXh0bmFtZShlKXtlZShlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLHI9LTEsaT0hMCxzPTA7Zm9yKGxldCBhPWUubGVuZ3RoLTE7YT49MDstLWEpe2NvbnN0IG89ZS5jaGFyQ29kZUF0KGEpO2lmKG89PT1vZSl7aWYoIWkpe249YSsxO2JyZWFrfWNvbnRpbnVlfXI9PT0tMSYmKGk9ITEscj1hKzEpLG89PT1KZT90PT09LTE/dD1hOnMhPT0xJiYocz0xKTp0IT09LTEmJihzPS0xKX1yZXR1cm4gdD09PS0xfHxyPT09LTF8fHM9PT0wfHxzPT09MSYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpRci5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09b2U7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxzPTAsYT0tMSxvPSEwLGw9ZS5sZW5ndGgtMSx1PTA7Zm9yKDtsPj1yOy0tbCl7Y29uc3QgZj1lLmNoYXJDb2RlQXQobCk7aWYoZj09PW9lKXtpZighbyl7cz1sKzE7YnJlYWt9Y29udGludWV9YT09PS0xJiYobz0hMSxhPWwrMSksZj09PUplP2k9PT0tMT9pPWw6dSE9PTEmJih1PTEpOmkhPT0tMSYmKHU9LTEpfWlmKGEhPT0tMSl7Y29uc3QgZj1zPT09MCYmbj8xOnM7aT09PS0xfHx1PT09MHx8dT09PTEmJmk9PT1hLTEmJmk9PT1zKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGYsYSk6KHQubmFtZT1lLnNsaWNlKGYsaSksdC5iYXNlPWUuc2xpY2UoZixhKSx0LmV4dD1lLnNsaWNlKGksYSkpfXJldHVybiBzPjA/dC5kaXI9ZS5zbGljZSgwLHMtMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07bWUud2luMzI9aGUud2luMzI9aGUsbWUucG9zaXg9aGUucG9zaXg9bWUsUWU/aGUubm9ybWFsaXplOm1lLm5vcm1hbGl6ZSxRZT9oZS5yZXNvbHZlOm1lLnJlc29sdmUsUWU/aGUucmVsYXRpdmU6bWUucmVsYXRpdmUsUWU/aGUuZGlybmFtZTptZS5kaXJuYW1lLFFlP2hlLmJhc2VuYW1lOm1lLmJhc2VuYW1lLFFlP2hlLmV4dG5hbWU6bWUuZXh0bmFtZSxRZT9oZS5zZXA6bWUuc2VwO2NvbnN0IFJvPS9eXHdbXHdcZCsuLV0qJC8sVG89L15cLy8sUG89L15cL1wvLztmdW5jdGlvbiBGbyhlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVJvLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpe2lmKGUuYXV0aG9yaXR5KXtpZighVG8udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoUG8udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1mdW5jdGlvbiBJbyhlLHQpe3JldHVybiFlJiYhdD8iZmlsZSI6ZX1mdW5jdGlvbiBEbyhlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09a2UmJih0PWtlK3QpOnQ9a2U7YnJlYWt9cmV0dXJuIHR9Y29uc3QgWT0iIixrZT0iLyIsVm89L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87bGV0IFVuPWNsYXNzIENue3N0YXRpYyBpc1VyaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENuPyEwOnQ/dHlwZW9mIHQuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIHQuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2YgdC5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHQucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2YgdC5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2YgdC53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIjohMX1jb25zdHJ1Y3Rvcih0LG4scixpLHMsYT0hMSl7dHlwZW9mIHQ9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT10LnNjaGVtZXx8WSx0aGlzLmF1dGhvcml0eT10LmF1dGhvcml0eXx8WSx0aGlzLnBhdGg9dC5wYXRofHxZLHRoaXMucXVlcnk9dC5xdWVyeXx8WSx0aGlzLmZyYWdtZW50PXQuZnJhZ21lbnR8fFkpOih0aGlzLnNjaGVtZT1Jbyh0LGEpLHRoaXMuYXV0aG9yaXR5PW58fFksdGhpcy5wYXRoPURvKHRoaXMuc2NoZW1lLHJ8fFkpLHRoaXMucXVlcnk9aXx8WSx0aGlzLmZyYWdtZW50PXN8fFksRm8odGhpcyxhKSl9Z2V0IGZzUGF0aCgpe3JldHVybiAkbih0aGlzLCExKX13aXRoKHQpe2lmKCF0KXJldHVybiB0aGlzO2xldHtzY2hlbWU6bixhdXRob3JpdHk6cixwYXRoOmkscXVlcnk6cyxmcmFnbWVudDphfT10O3JldHVybiBuPT09dm9pZCAwP249dGhpcy5zY2hlbWU6bj09PW51bGwmJihuPVkpLHI9PT12b2lkIDA/cj10aGlzLmF1dGhvcml0eTpyPT09bnVsbCYmKHI9WSksaT09PXZvaWQgMD9pPXRoaXMucGF0aDppPT09bnVsbCYmKGk9WSkscz09PXZvaWQgMD9zPXRoaXMucXVlcnk6cz09PW51bGwmJihzPVkpLGE9PT12b2lkIDA/YT10aGlzLmZyYWdtZW50OmE9PT1udWxsJiYoYT1ZKSxuPT09dGhpcy5zY2hlbWUmJnI9PT10aGlzLmF1dGhvcml0eSYmaT09PXRoaXMucGF0aCYmcz09PXRoaXMucXVlcnkmJmE9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IHZ0KG4scixpLHMsYSl9c3RhdGljIHBhcnNlKHQsbj0hMSl7Y29uc3Qgcj1Wby5leGVjKHQpO3JldHVybiByP25ldyB2dChyWzJdfHxZLHJuKHJbNF18fFkpLHJuKHJbNV18fFkpLHJuKHJbN118fFkpLHJuKHJbOV18fFkpLG4pOm5ldyB2dChZLFksWSxZLFkpfXN0YXRpYyBmaWxlKHQpe2xldCBuPVk7aWYoUnQmJih0PXQucmVwbGFjZSgvXFwvZyxrZSkpLHRbMF09PT1rZSYmdFsxXT09PWtlKXtjb25zdCByPXQuaW5kZXhPZihrZSwyKTtyPT09LTE/KG49dC5zdWJzdHJpbmcoMiksdD1rZSk6KG49dC5zdWJzdHJpbmcoMixyKSx0PXQuc3Vic3RyaW5nKHIpfHxrZSl9cmV0dXJuIG5ldyB2dCgiZmlsZSIsbix0LFksWSl9c3RhdGljIGZyb20odCxuKXtyZXR1cm4gbmV3IHZ0KHQuc2NoZW1lLHQuYXV0aG9yaXR5LHQucGF0aCx0LnF1ZXJ5LHQuZnJhZ21lbnQsbil9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gUnQmJnQuc2NoZW1lPT09ImZpbGUiP3I9Q24uZmlsZShoZS5qb2luKCRuKHQsITApLC4uLm4pKS5wYXRoOnI9bWUuam9pbih0LnBhdGgsLi4ubiksdC53aXRoKHtwYXRoOnJ9KX10b1N0cmluZyh0PSExKXtyZXR1cm4gV24odGhpcyx0KX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKHQpe3ZhciBuLHI7aWYodCl7aWYodCBpbnN0YW5jZW9mIENuKXJldHVybiB0O3tjb25zdCBpPW5ldyB2dCh0KTtyZXR1cm4gaS5fZm9ybWF0dGVkPShuPXQuZXh0ZXJuYWwpIT09bnVsbCYmbiE9PXZvaWQgMD9uOm51bGwsaS5fZnNQYXRoPXQuX3NlcD09PVpyJiYocj10LmZzUGF0aCkhPT1udWxsJiZyIT09dm9pZCAwP3I6bnVsbCxpfX1lbHNlIHJldHVybiB0fX07Y29uc3QgWnI9UnQ/MTp2b2lkIDA7Y2xhc3MgdnQgZXh0ZW5kcyBVbntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9ybWF0dGVkPW51bGwsdGhpcy5fZnNQYXRoPW51bGx9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9JG4odGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyh0PSExKXtyZXR1cm4gdD9Xbih0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPVduKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IHQ9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKHQuZnNQYXRoPXRoaXMuX2ZzUGF0aCx0Ll9zZXA9WnIpLHRoaXMuX2Zvcm1hdHRlZCYmKHQuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJih0LnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKHQuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKHQuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYodC5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYodC5mcmFnbWVudD10aGlzLmZyYWdtZW50KSx0fX1jb25zdCBZcj17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIEtyKGUsdCxuKXtsZXQgcixpPS0xO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKXtjb25zdCBhPWUuY2hhckNvZGVBdChzKTtpZihhPj05NyYmYTw9MTIyfHxhPj02NSYmYTw9OTB8fGE+PTQ4JiZhPD01N3x8YT09PTQ1fHxhPT09NDZ8fGE9PT05NXx8YT09PTEyNnx8dCYmYT09PTQ3fHxuJiZhPT09OTF8fG4mJmE9PT05M3x8biYmYT09PTU4KWkhPT0tMSYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhpLHMpKSxpPS0xKSxyIT09dm9pZCAwJiYocis9ZS5jaGFyQXQocykpO2Vsc2V7cj09PXZvaWQgMCYmKHI9ZS5zdWJzdHIoMCxzKSk7Y29uc3Qgbz1ZclthXTtvIT09dm9pZCAwPyhpIT09LTEmJihyKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcoaSxzKSksaT0tMSkscis9byk6aT09PS0xJiYoaT1zKX19cmV0dXJuIGkhPT0tMSYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhpKSkpLHIhPT12b2lkIDA/cjplfWZ1bmN0aW9uIE9vKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtyPT09MzV8fHI9PT02Mz8odD09PXZvaWQgMCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9WXJbcl0pOnQhPT12b2lkIDAmJih0Kz1lW25dKX1yZXR1cm4gdCE9PXZvaWQgMD90OmV9ZnVuY3Rpb24gJG4oZSx0KXtsZXQgbjtyZXR1cm4gZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmZS5zY2hlbWU9PT0iZmlsZSI/bj1gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6ZS5wYXRoLmNoYXJDb2RlQXQoMCk9PT00NyYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiZlLnBhdGguY2hhckNvZGVBdCgyKT09PTU4P3Q/bj1lLnBhdGguc3Vic3RyKDEpOm49ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTpuPWUucGF0aCxSdCYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIFduKGUsdCl7Y29uc3Qgbj10P09vOktyO2xldCByPSIiLHtzY2hlbWU6aSxhdXRob3JpdHk6cyxwYXRoOmEscXVlcnk6byxmcmFnbWVudDpsfT1lO2lmKGkmJihyKz1pLHIrPSI6IiksKHN8fGk9PT0iZmlsZSIpJiYocis9a2Uscis9a2UpLHMpe2xldCB1PXMuaW5kZXhPZigiQCIpO2lmKHUhPT0tMSl7Y29uc3QgZj1zLnN1YnN0cigwLHUpO3M9cy5zdWJzdHIodSsxKSx1PWYubGFzdEluZGV4T2YoIjoiKSx1PT09LTE/cis9bihmLCExLCExKToocis9bihmLnN1YnN0cigwLHUpLCExLCExKSxyKz0iOiIscis9bihmLnN1YnN0cih1KzEpLCExLCEwKSkscis9IkAifXM9cy50b0xvd2VyQ2FzZSgpLHU9cy5sYXN0SW5kZXhPZigiOiIpLHU9PT0tMT9yKz1uKHMsITEsITApOihyKz1uKHMuc3Vic3RyKDAsdSksITEsITApLHIrPXMuc3Vic3RyKHUpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmYS5jaGFyQ29kZUF0KDApPT09NDcmJmEuY2hhckNvZGVBdCgyKT09PTU4KXtjb25zdCB1PWEuY2hhckNvZGVBdCgxKTt1Pj02NSYmdTw9OTAmJihhPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHUrMzIpfToke2Euc3Vic3RyKDMpfWApfWVsc2UgaWYoYS5sZW5ndGg+PTImJmEuY2hhckNvZGVBdCgxKT09PTU4KXtjb25zdCB1PWEuY2hhckNvZGVBdCgwKTt1Pj02NSYmdTw9OTAmJihhPWAke1N0cmluZy5mcm9tQ2hhckNvZGUodSszMil9OiR7YS5zdWJzdHIoMil9YCl9cis9bihhLCEwLCExKX1yZXR1cm4gbyYmKHIrPSI/IixyKz1uKG8sITEsITEpKSxsJiYocis9IiMiLHIrPXQ/bDpLcihsLCExLCExKSkscn1mdW5jdGlvbiBlaShlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaHtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK2VpKGUuc3Vic3RyKDMpKTplfX1jb25zdCB0aT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBybihlKXtyZXR1cm4gZS5tYXRjaCh0aSk/ZS5yZXBsYWNlKHRpLHQ9PmVpKHQpKTplfWxldCBQZT1jbGFzcyBsdHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZU51bWJlcj10LHRoaXMuY29sdW1uPW59d2l0aCh0PXRoaXMubGluZU51bWJlcixuPXRoaXMuY29sdW1uKXtyZXR1cm4gdD09PXRoaXMubGluZU51bWJlciYmbj09PXRoaXMuY29sdW1uP3RoaXM6bmV3IGx0KHQsbil9ZGVsdGEodD0wLG49MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrdCx0aGlzLmNvbHVtbituKX1lcXVhbHModCl7cmV0dXJuIGx0LmVxdWFscyh0aGlzLHQpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4hdCYmIW4/ITA6ISF0JiYhIW4mJnQubGluZU51bWJlcj09PW4ubGluZU51bWJlciYmdC5jb2x1bW49PT1uLmNvbHVtbn1pc0JlZm9yZSh0KXtyZXR1cm4gbHQuaXNCZWZvcmUodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmUodCxuKXtyZXR1cm4gdC5saW5lTnVtYmVyPG4ubGluZU51bWJlcj8hMDpuLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyPyExOnQuY29sdW1uPG4uY29sdW1ufWlzQmVmb3JlT3JFcXVhbCh0KXtyZXR1cm4gbHQuaXNCZWZvcmVPckVxdWFsKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbCh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI8bi5saW5lTnVtYmVyPyEwOm4ubGluZU51bWJlcjx0LmxpbmVOdW1iZXI/ITE6dC5jb2x1bW48PW4uY29sdW1ufXN0YXRpYyBjb21wYXJlKHQsbil7Y29uc3Qgcj10LmxpbmVOdW1iZXJ8MCxpPW4ubGluZU51bWJlcnwwO2lmKHI9PT1pKXtjb25zdCBzPXQuY29sdW1ufDAsYT1uLmNvbHVtbnwwO3JldHVybiBzLWF9cmV0dXJuIHItaX1jbG9uZSgpe3JldHVybiBuZXcgbHQodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdCh0KXtyZXR1cm4gbmV3IGx0KHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5saW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuY29sdW1uPT0ibnVtYmVyIn10b0pTT04oKXtyZXR1cm57bGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuY29sdW1ufX19LHNlPWNsYXNzIG5le2NvbnN0cnVjdG9yKHQsbixyLGkpe3Q+cnx8dD09PXImJm4+aT8odGhpcy5zdGFydExpbmVOdW1iZXI9cix0aGlzLnN0YXJ0Q29sdW1uPWksdGhpcy5lbmRMaW5lTnVtYmVyPXQsdGhpcy5lbmRDb2x1bW49bik6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5zdGFydENvbHVtbj1uLHRoaXMuZW5kTGluZU51bWJlcj1yLHRoaXMuZW5kQ29sdW1uPWkpfWlzRW1wdHkoKXtyZXR1cm4gbmUuaXNFbXB0eSh0aGlzKX1zdGF0aWMgaXNFbXB0eSh0KXtyZXR1cm4gdC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbn1jb250YWluc1Bvc2l0aW9uKHQpe3JldHVybiBuZS5jb250YWluc1Bvc2l0aW9uKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUG9zaXRpb24odCxuKXtyZXR1cm4hKG4ubGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5saW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5saW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uY29sdW1uPHQuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5jb2x1bW4+dC5lbmRDb2x1bW4pfXN0YXRpYyBzdHJpY3RDb250YWluc1Bvc2l0aW9uKHQsbil7cmV0dXJuIShuLmxpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmNvbHVtbjw9dC5zdGFydENvbHVtbnx8bi5saW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmNvbHVtbj49dC5lbmRDb2x1bW4pfWNvbnRhaW5zUmFuZ2UodCl7cmV0dXJuIG5lLmNvbnRhaW5zUmFuZ2UodGhpcyx0KX1zdGF0aWMgY29udGFpbnNSYW5nZSh0LG4pe3JldHVybiEobi5zdGFydExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLnN0YXJ0Q29sdW1uPHQuc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5lbmRDb2x1bW4+dC5lbmRDb2x1bW4pfXN0cmljdENvbnRhaW5zUmFuZ2UodCl7cmV0dXJuIG5lLnN0cmljdENvbnRhaW5zUmFuZ2UodGhpcyx0KX1zdGF0aWMgc3RyaWN0Q29udGFpbnNSYW5nZSh0LG4pe3JldHVybiEobi5zdGFydExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLnN0YXJ0Q29sdW1uPD10LnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPj10LmVuZENvbHVtbil9cGx1c1JhbmdlKHQpe3JldHVybiBuZS5wbHVzUmFuZ2UodGhpcyx0KX1zdGF0aWMgcGx1c1JhbmdlKHQsbil7bGV0IHIsaSxzLGE7cmV0dXJuIG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyPyhyPW4uc3RhcnRMaW5lTnVtYmVyLGk9bi5zdGFydENvbHVtbik6bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlcj8ocj1uLnN0YXJ0TGluZU51bWJlcixpPU1hdGgubWluKG4uc3RhcnRDb2x1bW4sdC5zdGFydENvbHVtbikpOihyPXQuc3RhcnRMaW5lTnVtYmVyLGk9dC5zdGFydENvbHVtbiksbi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcj8ocz1uLmVuZExpbmVOdW1iZXIsYT1uLmVuZENvbHVtbik6bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyPyhzPW4uZW5kTGluZU51bWJlcixhPU1hdGgubWF4KG4uZW5kQ29sdW1uLHQuZW5kQ29sdW1uKSk6KHM9dC5lbmRMaW5lTnVtYmVyLGE9dC5lbmRDb2x1bW4pLG5ldyBuZShyLGkscyxhKX1pbnRlcnNlY3RSYW5nZXModCl7cmV0dXJuIG5lLmludGVyc2VjdFJhbmdlcyh0aGlzLHQpfXN0YXRpYyBpbnRlcnNlY3RSYW5nZXModCxuKXtsZXQgcj10LnN0YXJ0TGluZU51bWJlcixpPXQuc3RhcnRDb2x1bW4scz10LmVuZExpbmVOdW1iZXIsYT10LmVuZENvbHVtbjtjb25zdCBvPW4uc3RhcnRMaW5lTnVtYmVyLGw9bi5zdGFydENvbHVtbix1PW4uZW5kTGluZU51bWJlcixmPW4uZW5kQ29sdW1uO3JldHVybiByPG8/KHI9byxpPWwpOnI9PT1vJiYoaT1NYXRoLm1heChpLGwpKSxzPnU/KHM9dSxhPWYpOnM9PT11JiYoYT1NYXRoLm1pbihhLGYpKSxyPnN8fHI9PT1zJiZpPmE/bnVsbDpuZXcgbmUocixpLHMsYSl9ZXF1YWxzUmFuZ2UodCl7cmV0dXJuIG5lLmVxdWFsc1JhbmdlKHRoaXMsdCl9c3RhdGljIGVxdWFsc1JhbmdlKHQsbil7cmV0dXJuIXQmJiFuPyEwOiEhdCYmISFuJiZ0LnN0YXJ0TGluZU51bWJlcj09PW4uc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPT09bi5zdGFydENvbHVtbiYmdC5lbmRMaW5lTnVtYmVyPT09bi5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj09PW4uZW5kQ29sdW1ufWdldEVuZFBvc2l0aW9uKCl7cmV0dXJuIG5lLmdldEVuZFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRFbmRQb3NpdGlvbih0KXtyZXR1cm4gbmV3IFBlKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9Z2V0U3RhcnRQb3NpdGlvbigpe3JldHVybiBuZS5nZXRTdGFydFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRTdGFydFBvc2l0aW9uKHQpe3JldHVybiBuZXcgUGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMuZW5kTGluZU51bWJlcisiLCIrdGhpcy5lbmRDb2x1bW4rIl0ifXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBuZSh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLHQsbil9c2V0U3RhcnRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgbmUodCxuLHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbil9Y29sbGFwc2VUb1N0YXJ0KCl7cmV0dXJuIG5lLmNvbGxhcHNlVG9TdGFydCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb1N0YXJ0KHQpe3JldHVybiBuZXcgbmUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX1jb2xsYXBzZVRvRW5kKCl7cmV0dXJuIG5lLmNvbGxhcHNlVG9FbmQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9FbmQodCl7cmV0dXJuIG5ldyBuZSh0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKX1kZWx0YSh0KXtyZXR1cm4gbmV3IG5lKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5zdGFydENvbHVtbix0aGlzLmVuZExpbmVOdW1iZXIrdCx0aGlzLmVuZENvbHVtbil9c3RhdGljIGZyb21Qb3NpdGlvbnModCxuPXQpe3JldHVybiBuZXcgbmUodC5saW5lTnVtYmVyLHQuY29sdW1uLG4ubGluZU51bWJlcixuLmNvbHVtbil9c3RhdGljIGxpZnQodCl7cmV0dXJuIHQ/bmV3IG5lKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKTpudWxsfXN0YXRpYyBpc0lSYW5nZSh0KXtyZXR1cm4gdCYmdHlwZW9mIHQuc3RhcnRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuc3RhcnRDb2x1bW49PSJudW1iZXIiJiZ0eXBlb2YgdC5lbmRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuZW5kQ29sdW1uPT0ibnVtYmVyIn1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nT3JUb3VjaGluZyh0LG4pe3JldHVybiEodC5lbmRMaW5lTnVtYmVyPG4uc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48bi5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5lbmRDb2x1bW48dC5zdGFydENvbHVtbil9c3RhdGljIGFyZUludGVyc2VjdGluZyh0LG4pe3JldHVybiEodC5lbmRMaW5lTnVtYmVyPG4uc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48PW4uc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKHQsbil7aWYodCYmbil7Y29uc3Qgcz10LnN0YXJ0TGluZU51bWJlcnwwLGE9bi5zdGFydExpbmVOdW1iZXJ8MDtpZihzPT09YSl7Y29uc3Qgbz10LnN0YXJ0Q29sdW1ufDAsbD1uLnN0YXJ0Q29sdW1ufDA7aWYobz09PWwpe2NvbnN0IHU9dC5lbmRMaW5lTnVtYmVyfDAsZj1uLmVuZExpbmVOdW1iZXJ8MDtpZih1PT09Zil7Y29uc3QgaD10LmVuZENvbHVtbnwwLGQ9bi5lbmRDb2x1bW58MDtyZXR1cm4gaC1kfXJldHVybiB1LWZ9cmV0dXJuIG8tbH1yZXR1cm4gcy1hfXJldHVybih0PzE6MCktKG4/MTowKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nRW5kcyh0LG4pe3JldHVybiB0LmVuZExpbmVOdW1iZXI9PT1uLmVuZExpbmVOdW1iZXI/dC5lbmRDb2x1bW49PT1uLmVuZENvbHVtbj90LnN0YXJ0TGluZU51bWJlcj09PW4uc3RhcnRMaW5lTnVtYmVyP3Quc3RhcnRDb2x1bW4tbi5zdGFydENvbHVtbjp0LnN0YXJ0TGluZU51bWJlci1uLnN0YXJ0TGluZU51bWJlcjp0LmVuZENvbHVtbi1uLmVuZENvbHVtbjp0LmVuZExpbmVOdW1iZXItbi5lbmRMaW5lTnVtYmVyfXN0YXRpYyBzcGFuc011bHRpcGxlTGluZXModCl7cmV0dXJuIHQuZW5kTGluZU51bWJlcj50LnN0YXJ0TGluZU51bWJlcn10b0pTT04oKXtyZXR1cm4gdGhpc319O2Z1bmN0aW9uIGpvKGUsdCxuPShyLGkpPT5yPT09aSl7aWYoZT09PXQpcmV0dXJuITA7aWYoIWV8fCF0fHxlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKylpZighbihlW3JdLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uKnFvKGUsdCl7bGV0IG4scjtmb3IoY29uc3QgaSBvZiBlKXIhPT12b2lkIDAmJnQocixpKT9uLnB1c2goaSk6KG4mJih5aWVsZCBuKSxuPVtpXSkscj1pO24mJih5aWVsZCBuKX1mdW5jdGlvbiBCbyhlLHQpe2ZvcihsZXQgbj0wO248PWUubGVuZ3RoO24rKyl0KG49PT0wP3ZvaWQgMDplW24tMV0sbj09PWUubGVuZ3RoP3ZvaWQgMDplW25dKX1mdW5jdGlvbiBVbyhlLHQpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQobj09PTA/dm9pZCAwOmVbbi0xXSxlW25dLG4rMT09PWUubGVuZ3RoP3ZvaWQgMDplW24rMV0pfWZ1bmN0aW9uICRvKGUsdCl7Zm9yKGNvbnN0IG4gb2YgdCllLnB1c2gobil9dmFyIG5pOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHMpe3JldHVybiBzPDB9ZS5pc0xlc3NUaGFuPXQ7ZnVuY3Rpb24gbihzKXtyZXR1cm4gczw9MH1lLmlzTGVzc1RoYW5PckVxdWFsPW47ZnVuY3Rpb24gcihzKXtyZXR1cm4gcz4wfWUuaXNHcmVhdGVyVGhhbj1yO2Z1bmN0aW9uIGkocyl7cmV0dXJuIHM9PT0wfWUuaXNOZWl0aGVyTGVzc09yR3JlYXRlclRoYW49aSxlLmdyZWF0ZXJUaGFuPTEsZS5sZXNzVGhhbj0tMSxlLm5laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj0wfSkobml8fChuaT17fSkpO2Z1bmN0aW9uIHNuKGUsdCl7cmV0dXJuKG4scik9PnQoZShuKSxlKHIpKX1jb25zdCBhbj0oZSx0KT0+ZS10O2Z1bmN0aW9uIFdvKGUpe3JldHVybih0LG4pPT4tZSh0LG4pfWZ1bmN0aW9uIHJpKGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6ZXwwfWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTplfDB9Y2xhc3MgSG97Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZXM9dCx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodC5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKHQsbil7dD1idCh0KTtjb25zdCByPXRoaXMudmFsdWVzLGk9dGhpcy5wcmVmaXhTdW0scz1uLmxlbmd0aDtyZXR1cm4gcz09PTA/ITE6KHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShyLmxlbmd0aCtzKSx0aGlzLnZhbHVlcy5zZXQoci5zdWJhcnJheSgwLHQpLDApLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KHQpLHQrcyksdGhpcy52YWx1ZXMuc2V0KG4sdCksdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KGkuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1zZXRWYWx1ZSh0LG4pe3JldHVybiB0PWJ0KHQpLG49YnQobiksdGhpcy52YWx1ZXNbdF09PT1uPyExOih0aGlzLnZhbHVlc1t0XT1uLHQtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09dC0xKSwhMCl9cmVtb3ZlVmFsdWVzKHQsbil7dD1idCh0KSxuPWJ0KG4pO2NvbnN0IHI9dGhpcy52YWx1ZXMsaT10aGlzLnByZWZpeFN1bTtpZih0Pj1yLmxlbmd0aClyZXR1cm4hMTtjb25zdCBzPXIubGVuZ3RoLXQ7cmV0dXJuIG4+PXMmJihuPXMpLG49PT0wPyExOih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkoci5sZW5ndGgtbiksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkoMCx0KSwwKSx0aGlzLnZhbHVlcy5zZXQoci5zdWJhcnJheSh0K24pLHQpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHQtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09dC0xKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChpLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9Z2V0VG90YWxTdW0oKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoPT09MD8wOnRoaXMuX2dldFByZWZpeFN1bSh0aGlzLnZhbHVlcy5sZW5ndGgtMSl9Z2V0UHJlZml4U3VtKHQpe3JldHVybiB0PDA/MDoodD1idCh0KSx0aGlzLl9nZXRQcmVmaXhTdW0odCkpfV9nZXRQcmVmaXhTdW0odCl7aWYodDw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKXJldHVybiB0aGlzLnByZWZpeFN1bVt0XTtsZXQgbj10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMTtuPT09MCYmKHRoaXMucHJlZml4U3VtWzBdPXRoaXMudmFsdWVzWzBdLG4rKyksdD49dGhpcy52YWx1ZXMubGVuZ3RoJiYodD10aGlzLnZhbHVlcy5sZW5ndGgtMSk7Zm9yKGxldCByPW47cjw9dDtyKyspdGhpcy5wcmVmaXhTdW1bcl09dGhpcy5wcmVmaXhTdW1bci0xXSt0aGlzLnZhbHVlc1tyXTtyZXR1cm4gdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPU1hdGgubWF4KHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSx0KSx0aGlzLnByZWZpeFN1bVt0XX1nZXRJbmRleE9mKHQpe3Q9TWF0aC5mbG9vcih0KSx0aGlzLmdldFRvdGFsU3VtKCk7bGV0IG49MCxyPXRoaXMudmFsdWVzLmxlbmd0aC0xLGk9MCxzPTAsYT0wO2Zvcig7bjw9cjspaWYoaT1uKyhyLW4pLzJ8MCxzPXRoaXMucHJlZml4U3VtW2ldLGE9cy10aGlzLnZhbHVlc1tpXSx0PGEpcj1pLTE7ZWxzZSBpZih0Pj1zKW49aSsxO2Vsc2UgYnJlYWs7cmV0dXJuIG5ldyB6byhpLHQtYSl9fWNsYXNzIHpve2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pbmRleD10LHRoaXMucmVtYWluZGVyPW4sdGhpcy5fcHJlZml4U3VtSW5kZXhPZlJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLmluZGV4PXQsdGhpcy5yZW1haW5kZXI9bn19Y2xhc3MgR297Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5fdXJpPXQsdGhpcy5fbGluZXM9bix0aGlzLl9lb2w9cix0aGlzLl92ZXJzaW9uSWQ9aSx0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIHRoaXMuX2NhY2hlZFRleHRWYWx1ZT09PW51bGwmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHModCl7dC5lb2wmJnQuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPXQuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3Qgbj10LmNoYW5nZXM7Zm9yKGNvbnN0IHIgb2Ygbil0aGlzLl9hY2NlcHREZWxldGVSYW5nZShyLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBQZShyLnJhbmdlLnN0YXJ0TGluZU51bWJlcixyLnJhbmdlLnN0YXJ0Q29sdW1uKSxyLnRleHQpO3RoaXMuX3ZlcnNpb25JZD10LnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXtjb25zdCB0PXRoaXMuX2VvbC5sZW5ndGgsbj10aGlzLl9saW5lcy5sZW5ndGgscj1uZXcgVWludDMyQXJyYXkobik7Zm9yKGxldCBpPTA7aTxuO2krKylyW2ldPXRoaXMuX2xpbmVzW2ldLmxlbmd0aCt0O3RoaXMuX2xpbmVTdGFydHM9bmV3IEhvKHIpfX1fc2V0TGluZVRleHQodCxuKXt0aGlzLl9saW5lc1t0XT1uLHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuc2V0VmFsdWUodCx0aGlzLl9saW5lc1t0XS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aCl9X2FjY2VwdERlbGV0ZVJhbmdlKHQpe2lmKHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyKXtpZih0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW4pcmV0dXJuO3RoaXMuX3NldExpbmVUZXh0KHQuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5lbmRDb2x1bW4tMSkpO3JldHVybn10aGlzLl9zZXRMaW5lVGV4dCh0LnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbdC5lbmRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmVuZENvbHVtbi0xKSksdGhpcy5fbGluZXMuc3BsaWNlKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlciksdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5yZW1vdmVWYWx1ZXModC5zdGFydExpbmVOdW1iZXIsdC5lbmRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyKX1fYWNjZXB0SW5zZXJ0VGV4dCh0LG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm47Y29uc3Qgcj1ybyhuKTtpZihyLmxlbmd0aD09PTEpe3RoaXMuX3NldExpbmVUZXh0KHQubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LmNvbHVtbi0xKStyWzBdK3RoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSkpO3JldHVybn1yW3IubGVuZ3RoLTFdKz10aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KHQubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LmNvbHVtbi0xKStyWzBdKTtjb25zdCBpPW5ldyBVaW50MzJBcnJheShyLmxlbmd0aC0xKTtmb3IobGV0IHM9MTtzPHIubGVuZ3RoO3MrKyl0aGlzLl9saW5lcy5zcGxpY2UodC5saW5lTnVtYmVyK3MtMSwwLHJbc10pLGlbcy0xXT1yW3NdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKHQubGluZU51bWJlcixpKX19Y29uc3QgSm89ImB+IUAjJCVeJiooKS09K1t7XX1cXHw7OidcIiwuPD4vPyI7ZnVuY3Rpb24gWG8oZT0iIil7bGV0IHQ9IigtP1xcZCpcXC5cXGRcXHcqKXwoW14iO2Zvcihjb25zdCBuIG9mIEpvKWUuaW5kZXhPZihuKT49MHx8KHQrPSJcXCIrbik7cmV0dXJuIHQrPSJcXHNdKykiLG5ldyBSZWdFeHAodCwiZyIpfWNvbnN0IGlpPVhvKCk7ZnVuY3Rpb24gc2koZSl7bGV0IHQ9aWk7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH1jb25zdCBhaT1uZXcgamE7YWkudW5zaGlmdCh7bWF4TGVuOjFlMyx3aW5kb3dTaXplOjE1LHRpbWVCdWRnZXQ6MTUwfSk7ZnVuY3Rpb24gSG4oZSx0LG4scixpKXtpZih0PXNpKHQpLGl8fChpPVp0LmZpcnN0KGFpKSksbi5sZW5ndGg+aS5tYXhMZW4pe2xldCB1PWUtaS5tYXhMZW4vMjtyZXR1cm4gdTwwP3U9MDpyKz11LG49bi5zdWJzdHJpbmcodSxlK2kubWF4TGVuLzIpLEhuKGUsdCxuLHIsaSl9Y29uc3Qgcz1EYXRlLm5vdygpLGE9ZS0xLXI7bGV0IG89LTEsbD1udWxsO2ZvcihsZXQgdT0xOyEoRGF0ZS5ub3coKS1zPj1pLnRpbWVCdWRnZXQpO3UrKyl7Y29uc3QgZj1hLWkud2luZG93U2l6ZSp1O3QubGFzdEluZGV4PU1hdGgubWF4KDAsZik7Y29uc3QgaD1Rbyh0LG4sYSxvKTtpZighaCYmbHx8KGw9aCxmPD0wKSlicmVhaztvPWZ9aWYobCl7Y29uc3QgdT17d29yZDpsWzBdLHN0YXJ0Q29sdW1uOnIrMStsLmluZGV4LGVuZENvbHVtbjpyKzErbC5pbmRleCtsWzBdLmxlbmd0aH07cmV0dXJuIHQubGFzdEluZGV4PTAsdX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBRbyhlLHQsbixyKXtsZXQgaTtmb3IoO2k9ZS5leGVjKHQpOyl7Y29uc3Qgcz1pLmluZGV4fHwwO2lmKHM8PW4mJmUubGFzdEluZGV4Pj1uKXJldHVybiBpO2lmKHI+MCYmcz5yKXJldHVybiBudWxsfXJldHVybiBudWxsfWNsYXNzIHpue2NvbnN0cnVjdG9yKHQpe2NvbnN0IG49cmkodCk7dGhpcy5fZGVmYXVsdFZhbHVlPW4sdGhpcy5fYXNjaWlNYXA9em4uX2NyZWF0ZUFzY2lpTWFwKG4pLHRoaXMuX21hcD1uZXcgTWFwfXN0YXRpYyBfY3JlYXRlQXNjaWlNYXAodCl7Y29uc3Qgbj1uZXcgVWludDhBcnJheSgyNTYpO3JldHVybiBuLmZpbGwodCksbn1zZXQodCxuKXtjb25zdCByPXJpKG4pO3Q+PTAmJnQ8MjU2P3RoaXMuX2FzY2lpTWFwW3RdPXI6dGhpcy5fbWFwLnNldCh0LHIpfWdldCh0KXtyZXR1cm4gdD49MCYmdDwyNTY/dGhpcy5fYXNjaWlNYXBbdF06dGhpcy5fbWFwLmdldCh0KXx8dGhpcy5fZGVmYXVsdFZhbHVlfWNsZWFyKCl7dGhpcy5fYXNjaWlNYXAuZmlsbCh0aGlzLl9kZWZhdWx0VmFsdWUpLHRoaXMuX21hcC5jbGVhcigpfX1jbGFzcyBab3tjb25zdHJ1Y3Rvcih0LG4scil7Y29uc3QgaT1uZXcgVWludDhBcnJheSh0Km4pO2ZvcihsZXQgcz0wLGE9dCpuO3M8YTtzKyspaVtzXT1yO3RoaXMuX2RhdGE9aSx0aGlzLnJvd3M9dCx0aGlzLmNvbHM9bn1nZXQodCxuKXtyZXR1cm4gdGhpcy5fZGF0YVt0KnRoaXMuY29scytuXX1zZXQodCxuLHIpe3RoaXMuX2RhdGFbdCp0aGlzLmNvbHMrbl09cn19Y2xhc3MgWW97Y29uc3RydWN0b3IodCl7bGV0IG49MCxyPTA7Zm9yKGxldCBzPTAsYT10Lmxlbmd0aDtzPGE7cysrKXtjb25zdFtvLGwsdV09dFtzXTtsPm4mJihuPWwpLG8+ciYmKHI9byksdT5yJiYocj11KX1uKysscisrO2NvbnN0IGk9bmV3IFpvKHIsbiwwKTtmb3IobGV0IHM9MCxhPXQubGVuZ3RoO3M8YTtzKyspe2NvbnN0W28sbCx1XT10W3NdO2kuc2V0KG8sbCx1KX10aGlzLl9zdGF0ZXM9aSx0aGlzLl9tYXhDaGFyQ29kZT1ufW5leHRTdGF0ZSh0LG4pe3JldHVybiBuPDB8fG4+PXRoaXMuX21heENoYXJDb2RlPzA6dGhpcy5fc3RhdGVzLmdldCh0LG4pfX1sZXQgR249bnVsbDtmdW5jdGlvbiBLbygpe3JldHVybiBHbj09PW51bGwmJihHbj1uZXcgWW8oW1sxLDEwNCwyXSxbMSw3MiwyXSxbMSwxMDIsNl0sWzEsNzAsNl0sWzIsMTE2LDNdLFsyLDg0LDNdLFszLDExNiw0XSxbMyw4NCw0XSxbNCwxMTIsNV0sWzQsODAsNV0sWzUsMTE1LDldLFs1LDgzLDldLFs1LDU4LDEwXSxbNiwxMDUsN10sWzYsNzMsN10sWzcsMTA4LDhdLFs3LDc2LDhdLFs4LDEwMSw5XSxbOCw2OSw5XSxbOSw1OCwxMF0sWzEwLDQ3LDExXSxbMTEsNDcsMTJdXSkpLEdufWxldCBUdD1udWxsO2Z1bmN0aW9uIGVsKCl7aWYoVHQ9PT1udWxsKXtUdD1uZXcgem4oMCk7Y29uc3QgZT1gIAk8Pici44CB44CC772h772k77yM77yO77ya77yb4oCY44CI44CM44CO44CU77yI77y7772b772i772j772d77y977yJ44CV44CP44CN44CJ4oCZ772A772e4oCmYDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylUdC5zZXQoZS5jaGFyQ29kZUF0KG4pLDEpO2NvbnN0IHQ9Ii4sOzoiO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKVR0LnNldCh0LmNoYXJDb2RlQXQobiksMil9cmV0dXJuIFR0fWNsYXNzIG9ue3N0YXRpYyBfY3JlYXRlTGluayh0LG4scixpLHMpe2xldCBhPXMtMTtkb3tjb25zdCBvPW4uY2hhckNvZGVBdChhKTtpZih0LmdldChvKSE9PTIpYnJlYWs7YS0tfXdoaWxlKGE+aSk7aWYoaT4wKXtjb25zdCBvPW4uY2hhckNvZGVBdChpLTEpLGw9bi5jaGFyQ29kZUF0KGEpOyhvPT09NDAmJmw9PT00MXx8bz09PTkxJiZsPT09OTN8fG89PT0xMjMmJmw9PT0xMjUpJiZhLS19cmV0dXJue3JhbmdlOntzdGFydExpbmVOdW1iZXI6cixzdGFydENvbHVtbjppKzEsZW5kTGluZU51bWJlcjpyLGVuZENvbHVtbjphKzJ9LHVybDpuLnN1YnN0cmluZyhpLGErMSl9fXN0YXRpYyBjb21wdXRlTGlua3ModCxuPUtvKCkpe2NvbnN0IHI9ZWwoKSxpPVtdO2ZvcihsZXQgcz0xLGE9dC5nZXRMaW5lQ291bnQoKTtzPD1hO3MrKyl7Y29uc3Qgbz10LmdldExpbmVDb250ZW50KHMpLGw9by5sZW5ndGg7bGV0IHU9MCxmPTAsaD0wLGQ9MSxnPSExLG09ITEsdj0hMSxwPSExO2Zvcig7dTxsOyl7bGV0IHg9ITE7Y29uc3QgeT1vLmNoYXJDb2RlQXQodSk7aWYoZD09PTEzKXtsZXQgYjtzd2l0Y2goeSl7Y2FzZSA0MDpnPSEwLGI9MDticmVhaztjYXNlIDQxOmI9Zz8wOjE7YnJlYWs7Y2FzZSA5MTp2PSEwLG09ITAsYj0wO2JyZWFrO2Nhc2UgOTM6dj0hMSxiPW0/MDoxO2JyZWFrO2Nhc2UgMTIzOnA9ITAsYj0wO2JyZWFrO2Nhc2UgMTI1OmI9cD8wOjE7YnJlYWs7Y2FzZSAzOTpjYXNlIDM0OmNhc2UgOTY6aD09PXk/Yj0xOmg9PT0zOXx8aD09PTM0fHxoPT09OTY/Yj0wOmI9MTticmVhaztjYXNlIDQyOmI9aD09PTQyPzE6MDticmVhaztjYXNlIDEyNDpiPWg9PT0xMjQ/MTowO2JyZWFrO2Nhc2UgMzI6Yj12PzA6MTticmVhaztkZWZhdWx0OmI9ci5nZXQoeSl9Yj09PTEmJihpLnB1c2gob24uX2NyZWF0ZUxpbmsocixvLHMsZix1KSkseD0hMCl9ZWxzZSBpZihkPT09MTIpe2xldCBiO3k9PT05MT8obT0hMCxiPTApOmI9ci5nZXQoeSksYj09PTE/eD0hMDpkPTEzfWVsc2UgZD1uLm5leHRTdGF0ZShkLHkpLGQ9PT0wJiYoeD0hMCk7eCYmKGQ9MSxnPSExLG09ITEscD0hMSxmPXUrMSxoPXkpLHUrK31kPT09MTMmJmkucHVzaChvbi5fY3JlYXRlTGluayhyLG8scyxmLGwpKX1yZXR1cm4gaX19ZnVuY3Rpb24gdGwoZSl7cmV0dXJuIWV8fHR5cGVvZiBlLmdldExpbmVDb3VudCE9ImZ1bmN0aW9uInx8dHlwZW9mIGUuZ2V0TGluZUNvbnRlbnQhPSJmdW5jdGlvbiI/W106b24uY29tcHV0ZUxpbmtzKGUpfWNsYXNzIEpue2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFZhbHVlU2V0PVtbInRydWUiLCJmYWxzZSJdLFsiVHJ1ZSIsIkZhbHNlIl0sWyJQcml2YXRlIiwiUHVibGljIiwiRnJpZW5kIiwiUmVhZE9ubHkiLCJQYXJ0aWFsIiwiUHJvdGVjdGVkIiwiV3JpdGVPbmx5Il0sWyJwdWJsaWMiLCJwcm90ZWN0ZWQiLCJwcml2YXRlIl1dfW5hdmlnYXRlVmFsdWVTZXQodCxuLHIsaSxzKXtpZih0JiZuKXtjb25zdCBhPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KG4scyk7aWYoYSlyZXR1cm57cmFuZ2U6dCx2YWx1ZTphfX1pZihyJiZpKXtjb25zdCBhPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KGkscyk7aWYoYSlyZXR1cm57cmFuZ2U6cix2YWx1ZTphfX1yZXR1cm4gbnVsbH1kb05hdmlnYXRlVmFsdWVTZXQodCxuKXtjb25zdCByPXRoaXMubnVtYmVyUmVwbGFjZSh0LG4pO3JldHVybiByIT09bnVsbD9yOnRoaXMudGV4dFJlcGxhY2UodCxuKX1udW1iZXJSZXBsYWNlKHQsbil7Y29uc3Qgcj1NYXRoLnBvdygxMCx0Lmxlbmd0aC0odC5sYXN0SW5kZXhPZigiLiIpKzEpKTtsZXQgaT1OdW1iZXIodCk7Y29uc3Qgcz1wYXJzZUZsb2F0KHQpO3JldHVybiFpc05hTihpKSYmIWlzTmFOKHMpJiZpPT09cz9pPT09MCYmIW4/bnVsbDooaT1NYXRoLmZsb29yKGkqciksaSs9bj9yOi1yLFN0cmluZyhpL3IpKTpudWxsfXRleHRSZXBsYWNlKHQsbil7cmV0dXJuIHRoaXMudmFsdWVTZXRzUmVwbGFjZSh0aGlzLl9kZWZhdWx0VmFsdWVTZXQsdCxuKX12YWx1ZVNldHNSZXBsYWNlKHQsbixyKXtsZXQgaT1udWxsO2ZvcihsZXQgcz0wLGE9dC5sZW5ndGg7aT09PW51bGwmJnM8YTtzKyspaT10aGlzLnZhbHVlU2V0UmVwbGFjZSh0W3NdLG4scik7cmV0dXJuIGl9dmFsdWVTZXRSZXBsYWNlKHQsbixyKXtsZXQgaT10LmluZGV4T2Yobik7cmV0dXJuIGk+PTA/KGkrPXI/MTotMSxpPDA/aT10Lmxlbmd0aC0xOmklPXQubGVuZ3RoLHRbaV0pOm51bGx9fUpuLklOU1RBTkNFPW5ldyBKbjtjb25zdCBvaT1PYmplY3QuZnJlZXplKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1zZXRUaW1lb3V0KGUuYmluZCh0KSwwKTtyZXR1cm57ZGlzcG9zZSgpe2NsZWFyVGltZW91dChuKX19fSk7dmFyIGxuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPT09ZS5Ob25lfHxuPT09ZS5DYW5jZWxsZWR8fG4gaW5zdGFuY2VvZiB1bj8hMDohbnx8dHlwZW9mIG4hPSJvYmplY3QiPyExOnR5cGVvZiBuLmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkPT0iYm9vbGVhbiImJnR5cGVvZiBuLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkPT0iZnVuY3Rpb24ifWUuaXNDYW5jZWxsYXRpb25Ub2tlbj10LGUuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpFbi5Ob25lfSksZS5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6b2l9KX0pKGxufHwobG49e30pKTtjbGFzcyB1bntjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/b2k6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBBZSksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBubHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXQmJnQub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IHVuKSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIHVuJiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1sbi5DYW5jZWxsZWR9ZGlzcG9zZSh0PSExKXt2YXIgbjt0JiZ0aGlzLmNhbmNlbCgpLChuPXRoaXMuX3BhcmVudExpc3RlbmVyKT09PW51bGx8fG49PT12b2lkIDB8fG4uZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgdW4mJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1sbi5Ob25lfX1jbGFzcyBYbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUodCxuKXt0aGlzLl9rZXlDb2RlVG9TdHJbdF09bix0aGlzLl9zdHJUb0tleUNvZGVbbi50b0xvd2VyQ2FzZSgpXT10fWtleUNvZGVUb1N0cih0KXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW3RdfXN0clRvS2V5Q29kZSh0KXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IGNuPW5ldyBYbixRbj1uZXcgWG4sWm49bmV3IFhuLHJsPW5ldyBBcnJheSgyMzApLGlsPU9iamVjdC5jcmVhdGUobnVsbCksc2w9T2JqZWN0LmNyZWF0ZShudWxsKTsoZnVuY3Rpb24oKXtjb25zdCBlPSIiLHQ9W1sxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLGUsZV0sWzEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMSwyLCJTdXBlciIsMCxlLDAsZSxlLGVdLFsxLDMsIkZuIiwwLGUsMCxlLGUsZV0sWzEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzEsNSwiU3VzcGVuZCIsMCxlLDAsZSxlLGVdLFsxLDYsIlJlc3VtZSIsMCxlLDAsZSxlLGVdLFsxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzEsOCwiU2xlZXAiLDAsZSwwLCJWS19TTEVFUCIsZSxlXSxbMSw5LCJXYWtlVXAiLDAsZSwwLGUsZSxlXSxbMCwxMCwiS2V5QSIsMzEsIkEiLDY1LCJWS19BIixlLGVdLFswLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLGUsZV0sWzAsMTIsIktleUMiLDMzLCJDIiw2NywiVktfQyIsZSxlXSxbMCwxMywiS2V5RCIsMzQsIkQiLDY4LCJWS19EIixlLGVdLFswLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLGUsZV0sWzAsMTUsIktleUYiLDM2LCJGIiw3MCwiVktfRiIsZSxlXSxbMCwxNiwiS2V5RyIsMzcsIkciLDcxLCJWS19HIixlLGVdLFswLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLGUsZV0sWzAsMTgsIktleUkiLDM5LCJJIiw3MywiVktfSSIsZSxlXSxbMCwxOSwiS2V5SiIsNDAsIkoiLDc0LCJWS19KIixlLGVdLFswLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLGUsZV0sWzAsMjEsIktleUwiLDQyLCJMIiw3NiwiVktfTCIsZSxlXSxbMCwyMiwiS2V5TSIsNDMsIk0iLDc3LCJWS19NIixlLGVdLFswLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLGUsZV0sWzAsMjQsIktleU8iLDQ1LCJPIiw3OSwiVktfTyIsZSxlXSxbMCwyNSwiS2V5UCIsNDYsIlAiLDgwLCJWS19QIixlLGVdLFswLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLGUsZV0sWzAsMjcsIktleVIiLDQ4LCJSIiw4MiwiVktfUiIsZSxlXSxbMCwyOCwiS2V5UyIsNDksIlMiLDgzLCJWS19TIixlLGVdLFswLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLGUsZV0sWzAsMzAsIktleVUiLDUxLCJVIiw4NSwiVktfVSIsZSxlXSxbMCwzMSwiS2V5ViIsNTIsIlYiLDg2LCJWS19WIixlLGVdLFswLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLGUsZV0sWzAsMzMsIktleVgiLDU0LCJYIiw4OCwiVktfWCIsZSxlXSxbMCwzNCwiS2V5WSIsNTUsIlkiLDg5LCJWS19ZIixlLGVdLFswLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLGUsZV0sWzAsMzYsIkRpZ2l0MSIsMjIsIjEiLDQ5LCJWS18xIixlLGVdLFswLDM3LCJEaWdpdDIiLDIzLCIyIiw1MCwiVktfMiIsZSxlXSxbMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLGUsZV0sWzAsMzksIkRpZ2l0NCIsMjUsIjQiLDUyLCJWS180IixlLGVdLFswLDQwLCJEaWdpdDUiLDI2LCI1Iiw1MywiVktfNSIsZSxlXSxbMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLGUsZV0sWzAsNDIsIkRpZ2l0NyIsMjgsIjciLDU1LCJWS183IixlLGVdLFswLDQzLCJEaWdpdDgiLDI5LCI4Iiw1NiwiVktfOCIsZSxlXSxbMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLGUsZV0sWzAsNDUsIkRpZ2l0MCIsMjEsIjAiLDQ4LCJWS18wIixlLGVdLFsxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzEsNDcsIkVzY2FwZSIsOSwiRXNjYXBlIiwyNywiVktfRVNDQVBFIixlLGVdLFsxLDQ4LCJCYWNrc3BhY2UiLDEsIkJhY2tzcGFjZSIsOCwiVktfQkFDSyIsZSxlXSxbMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFswLDUxLCJNaW51cyIsODgsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFswLDUyLCJFcXVhbCIsODYsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbMCw1MywiQnJhY2tldExlZnQiLDkyLCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzAsNTQsIkJyYWNrZXRSaWdodCIsOTQsIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbMCw1NSwiQmFja3NsYXNoIiw5MywiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsNTYsIkludGxIYXNoIiwwLGUsMCxlLGUsZV0sWzAsNTcsIlNlbWljb2xvbiIsODUsIjsiLDE4NiwiVktfT0VNXzEiLCI7IiwiT0VNXzEiXSxbMCw1OCwiUXVvdGUiLDk1LCInIiwyMjIsIlZLX09FTV83IiwiJyIsIk9FTV83Il0sWzAsNTksIkJhY2txdW90ZSIsOTEsImAiLDE5MiwiVktfT0VNXzMiLCJgIiwiT0VNXzMiXSxbMCw2MCwiQ29tbWEiLDg3LCIsIiwxODgsIlZLX09FTV9DT01NQSIsIiwiLCJPRU1fQ09NTUEiXSxbMCw2MSwiUGVyaW9kIiw4OSwiLiIsMTkwLCJWS19PRU1fUEVSSU9EIiwiLiIsIk9FTV9QRVJJT0QiXSxbMCw2MiwiU2xhc2giLDkwLCIvIiwxOTEsIlZLX09FTV8yIiwiLyIsIk9FTV8yIl0sWzEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLGUsZV0sWzEsNjQsIkYxIiw1OSwiRjEiLDExMiwiVktfRjEiLGUsZV0sWzEsNjUsIkYyIiw2MCwiRjIiLDExMywiVktfRjIiLGUsZV0sWzEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLGUsZV0sWzEsNjcsIkY0Iiw2MiwiRjQiLDExNSwiVktfRjQiLGUsZV0sWzEsNjgsIkY1Iiw2MywiRjUiLDExNiwiVktfRjUiLGUsZV0sWzEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLGUsZV0sWzEsNzAsIkY3Iiw2NSwiRjciLDExOCwiVktfRjciLGUsZV0sWzEsNzEsIkY4Iiw2NiwiRjgiLDExOSwiVktfRjgiLGUsZV0sWzEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLGUsZV0sWzEsNzMsIkYxMCIsNjgsIkYxMCIsMTIxLCJWS19GMTAiLGUsZV0sWzEsNzQsIkYxMSIsNjksIkYxMSIsMTIyLCJWS19GMTEiLGUsZV0sWzEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLGUsZV0sWzEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzEsNzcsIlNjcm9sbExvY2siLDg0LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsZSxlXSxbMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIixlLGVdLFsxLDgwLCJIb21lIiwxNCwiSG9tZSIsMzYsIlZLX0hPTUUiLGUsZV0sWzEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIixlLGVdLFsxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLGUsZV0sWzEsODMsIkVuZCIsMTMsIkVuZCIsMzUsIlZLX0VORCIsZSxlXSxbMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLGUsZV0sWzEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsZV0sWzEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IixlXSxbMSw4NywiQXJyb3dEb3duIiwxOCwiRG93bkFycm93Iiw0MCwiVktfRE9XTiIsIkRvd24iLGVdLFsxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLGVdLFsxLDg5LCJOdW1Mb2NrIiw4MywiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIixlLGVdLFsxLDkwLCJOdW1wYWREaXZpZGUiLDExMywiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDgsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsZSxlXSxbMSw5MiwiTnVtcGFkU3VidHJhY3QiLDExMSwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIixlLGVdLFsxLDkzLCJOdW1wYWRBZGQiLDEwOSwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzEsOTQsIk51bXBhZEVudGVyIiwzLGUsMCxlLGUsZV0sWzEsOTUsIk51bXBhZDEiLDk5LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsZSxlXSxbMSw5NiwiTnVtcGFkMiIsMTAwLCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsZSxlXSxbMSw5NywiTnVtcGFkMyIsMTAxLCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbMSw5OCwiTnVtcGFkNCIsMTAyLCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLGUsZV0sWzEsOTksIk51bXBhZDUiLDEwMywiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IixlLGVdLFsxLDEwMCwiTnVtcGFkNiIsMTA0LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEsMTAxLCJOdW1wYWQ3IiwxMDUsIk51bVBhZDciLDEwMywiVktfTlVNUEFENyIsZSxlXSxbMSwxMDIsIk51bXBhZDgiLDEwNiwiTnVtUGFkOCIsMTA0LCJWS19OVU1QQUQ4IixlLGVdLFsxLDEwMywiTnVtcGFkOSIsMTA3LCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzEsMTA0LCJOdW1wYWQwIiw5OCwiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMTIsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLGUsZV0sWzAsMTA2LCJJbnRsQmFja3NsYXNoIiw5NywiT0VNXzEwMiIsMjI2LCJWS19PRU1fMTAyIixlLGVdLFsxLDEwNywiQ29udGV4dE1lbnUiLDU4LCJDb250ZXh0TWVudSIsOTMsZSxlLGVdLFsxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMSwxMDksIk51bXBhZEVxdWFsIiwwLGUsMCxlLGUsZV0sWzEsMTEwLCJGMTMiLDcxLCJGMTMiLDEyNCwiVktfRjEzIixlLGVdLFsxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsZSxlXSxbMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLGUsZV0sWzEsMTEzLCJGMTYiLDc0LCJGMTYiLDEyNywiVktfRjE2IixlLGVdLFsxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsZSxlXSxbMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLGUsZV0sWzEsMTE2LCJGMTkiLDc3LCJGMTkiLDEzMCwiVktfRjE5IixlLGVdLFsxLDExNywiRjIwIiw3OCwiRjIwIiwxMzEsIlZLX0YyMCIsZSxlXSxbMSwxMTgsIkYyMSIsNzksIkYyMSIsMTMyLCJWS19GMjEiLGUsZV0sWzEsMTE5LCJGMjIiLDgwLCJGMjIiLDEzMywiVktfRjIyIixlLGVdLFsxLDEyMCwiRjIzIiw4MSwiRjIzIiwxMzQsIlZLX0YyMyIsZSxlXSxbMSwxMjEsIkYyNCIsODIsIkYyNCIsMTM1LCJWS19GMjQiLGUsZV0sWzEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzEsMTIzLCJIZWxwIiwwLGUsMCxlLGUsZV0sWzEsMTI0LCJTZWxlY3QiLDAsZSwwLGUsZSxlXSxbMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzEsMTI2LCJVbmRvIiwwLGUsMCxlLGUsZV0sWzEsMTI3LCJDdXQiLDAsZSwwLGUsZSxlXSxbMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMSwxMjksIlBhc3RlIiwwLGUsMCxlLGUsZV0sWzEsMTMwLCJGaW5kIiwwLGUsMCxlLGUsZV0sWzEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExNywiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFsxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTE4LCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsZSxlXSxbMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE5LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLGUsZV0sWzEsMTM0LCJOdW1wYWRDb21tYSIsMTEwLCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsZSxlXSxbMCwxMzUsIkludGxSbyIsMTE1LCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzEsMTM2LCJLYW5hTW9kZSIsMCxlLDAsZSxlLGVdLFswLDEzNywiSW50bFllbiIsMCxlLDAsZSxlLGVdLFsxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDEzOSwiTm9uQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDE0MCwiTGFuZzEiLDAsZSwwLGUsZSxlXSxbMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzEsMTQyLCJMYW5nMyIsMCxlLDAsZSxlLGVdLFsxLDE0MywiTGFuZzQiLDAsZSwwLGUsZSxlXSxbMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzEsMTQ1LCJBYm9ydCIsMCxlLDAsZSxlLGVdLFsxLDE0NiwiUHJvcHMiLDAsZSwwLGUsZSxlXSxbMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFsxLDE0OCwiTnVtcGFkUGFyZW5SaWdodCIsMCxlLDAsZSxlLGVdLFsxLDE0OSwiTnVtcGFkQmFja3NwYWNlIiwwLGUsMCxlLGUsZV0sWzEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFsxLDE1MSwiTnVtcGFkTWVtb3J5UmVjYWxsIiwwLGUsMCxlLGUsZV0sWzEsMTUyLCJOdW1wYWRNZW1vcnlDbGVhciIsMCxlLDAsZSxlLGVdLFsxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzEsMTU0LCJOdW1wYWRNZW1vcnlTdWJ0cmFjdCIsMCxlLDAsZSxlLGVdLFsxLDE1NSwiTnVtcGFkQ2xlYXIiLDEzMSwiQ2xlYXIiLDEyLCJWS19DTEVBUiIsZSxlXSxbMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbMSwwLGUsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLGUsZV0sWzEsMCxlLDQsIlNoaWZ0IiwxNiwiVktfU0hJRlQiLGUsZV0sWzEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzEsMCxlLDU3LCJNZXRhIiw5MSwiVktfQ09NTUFORCIsZSxlXSxbMSwxNTcsIkNvbnRyb2xMZWZ0Iiw1LGUsMCwiVktfTENPTlRST0wiLGUsZV0sWzEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzEsMTU5LCJBbHRMZWZ0Iiw2LGUsMCwiVktfTE1FTlUiLGUsZV0sWzEsMTYwLCJNZXRhTGVmdCIsNTcsZSwwLCJWS19MV0lOIixlLGVdLFsxLDE2MSwiQ29udHJvbFJpZ2h0Iiw1LGUsMCwiVktfUkNPTlRST0wiLGUsZV0sWzEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFsxLDE2MywiQWx0UmlnaHQiLDYsZSwwLCJWS19STUVOVSIsZSxlXSxbMSwxNjQsIk1ldGFSaWdodCIsNTcsZSwwLCJWS19SV0lOIixlLGVdLFsxLDE2NSwiQnJpZ2h0bmVzc1VwIiwwLGUsMCxlLGUsZV0sWzEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFsxLDE2NywiTWVkaWFQbGF5IiwwLGUsMCxlLGUsZV0sWzEsMTY4LCJNZWRpYVJlY29yZCIsMCxlLDAsZSxlLGVdLFsxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFsxLDE3MCwiTWVkaWFSZXdpbmQiLDAsZSwwLGUsZSxlXSxbMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMjQsIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyNSwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLGUsZV0sWzEsMTczLCJNZWRpYVN0b3AiLDEyNiwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLGUsZV0sWzEsMTc0LCJFamVjdCIsMCxlLDAsZSxlLGVdLFsxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyNywiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsZSxlXSxbMSwxNzYsIk1lZGlhU2VsZWN0IiwxMjgsIkxhdW5jaE1lZGlhUGxheWVyIiwxODEsIlZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QiLGUsZV0sWzEsMTc3LCJMYXVuY2hNYWlsIiwxMjksIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzEsMTc4LCJMYXVuY2hBcHAyIiwxMzAsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLGUsZV0sWzEsMTc5LCJMYXVuY2hBcHAxIiwwLGUsMCwiVktfTUVESUFfTEFVTkNIX0FQUDEiLGUsZV0sWzEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCxlLDAsZSxlLGVdLFsxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTIwLCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIixlLGVdLFsxLDE4MywiQnJvd3NlckhvbWUiLDEyMSwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxLDE4NCwiQnJvd3NlckJhY2siLDEyMiwiQnJvd3NlckJhY2siLDE2NiwiVktfQlJPV1NFUl9CQUNLIixlLGVdLFsxLDE4NSwiQnJvd3NlckZvcndhcmQiLDEyMywiQnJvd3NlckZvcndhcmQiLDE2NywiVktfQlJPV1NFUl9GT1JXQVJEIixlLGVdLFsxLDE4NiwiQnJvd3NlclN0b3AiLDAsZSwwLCJWS19CUk9XU0VSX1NUT1AiLGUsZV0sWzEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsZSwwLCJWS19CUk9XU0VSX0ZBVk9SSVRFUyIsZSxlXSxbMSwxODksIlpvb21Ub2dnbGUiLDAsZSwwLGUsZSxlXSxbMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFsxLDE5MSwiTWFpbEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxOTIsIk1haWxTZW5kIiwwLGUsMCxlLGUsZV0sWzEsMCxlLDExNCwiS2V5SW5Db21wb3NpdGlvbiIsMjI5LGUsZSxlXSxbMSwwLGUsMTE2LCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzEsMCxlLDk2LCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0tBTkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IQU5HVUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0ZJTkFMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NPTlZFUlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19OT05DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTU9ERUNIQU5HRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NFTEVDVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhFQ1VURSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NOQVBTSE9UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FQUFMiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUk9DRVNTS0VZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX1NCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX0RCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NSU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhTRUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BMQVkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19aT09NIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEExIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfT0VNX0NMRUFSIixlLGVdXSxuPVtdLHI9W107Zm9yKGNvbnN0IGkgb2YgdCl7Y29uc3RbcyxhLG8sbCx1LGYsaCxkLGddPWk7aWYoclthXXx8KHJbYV09ITAsaWxbb109YSxzbFtvLnRvTG93ZXJDYXNlKCldPWEpLCFuW2xdKXtpZihuW2xdPSEwLCF1KXRocm93IG5ldyBFcnJvcihgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG1pc3NpbmcgZm9yIGtleSBjb2RlICR7bH0gYXJvdW5kIHNjYW4gY29kZSAke299YCk7Y24uZGVmaW5lKGwsdSksUW4uZGVmaW5lKGwsZHx8dSksWm4uZGVmaW5lKGwsZ3x8ZHx8dSl9ZiYmKHJsW2ZdPWwpfX0pKCk7dmFyIGxpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG8pe3JldHVybiBjbi5rZXlDb2RlVG9TdHIobyl9ZS50b1N0cmluZz10O2Z1bmN0aW9uIG4obyl7cmV0dXJuIGNuLnN0clRvS2V5Q29kZShvKX1lLmZyb21TdHJpbmc9bjtmdW5jdGlvbiByKG8pe3JldHVybiBRbi5rZXlDb2RlVG9TdHIobyl9ZS50b1VzZXJTZXR0aW5nc1VTPXI7ZnVuY3Rpb24gaShvKXtyZXR1cm4gWm4ua2V5Q29kZVRvU3RyKG8pfWUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWk7ZnVuY3Rpb24gcyhvKXtyZXR1cm4gUW4uc3RyVG9LZXlDb2RlKG8pfHxabi5zdHJUb0tleUNvZGUobyl9ZS5mcm9tVXNlclNldHRpbmdzPXM7ZnVuY3Rpb24gYShvKXtpZihvPj05OCYmbzw9MTEzKXJldHVybiBudWxsO3N3aXRjaChvKXtjYXNlIDE2OnJldHVybiJVcCI7Y2FzZSAxODpyZXR1cm4iRG93biI7Y2FzZSAxNTpyZXR1cm4iTGVmdCI7Y2FzZSAxNzpyZXR1cm4iUmlnaHQifXJldHVybiBjbi5rZXlDb2RlVG9TdHIobyl9ZS50b0VsZWN0cm9uQWNjZWxlcmF0b3I9YX0pKGxpfHwobGk9e30pKTtmdW5jdGlvbiBhbChlLHQpe2NvbnN0IG49KHQmNjU1MzUpPDwxNj4+PjA7cmV0dXJuKGV8bik+Pj4wfWNsYXNzIHhlIGV4dGVuZHMgc2V7Y29uc3RydWN0b3IodCxuLHIsaSl7c3VwZXIodCxuLHIsaSksdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9dCx0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPW4sdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXI9cix0aGlzLnBvc2l0aW9uQ29sdW1uPWl9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMucG9zaXRpb25MaW5lTnVtYmVyKyIsIit0aGlzLnBvc2l0aW9uQ29sdW1uKyJdIn1lcXVhbHNTZWxlY3Rpb24odCl7cmV0dXJuIHhlLnNlbGVjdGlvbnNFcXVhbCh0aGlzLHQpfXN0YXRpYyBzZWxlY3Rpb25zRXF1YWwodCxuKXtyZXR1cm4gdC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT1uLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmdC5zZWxlY3Rpb25TdGFydENvbHVtbj09PW4uc2VsZWN0aW9uU3RhcnRDb2x1bW4mJnQucG9zaXRpb25MaW5lTnVtYmVyPT09bi5wb3NpdGlvbkxpbmVOdW1iZXImJnQucG9zaXRpb25Db2x1bW49PT1uLnBvc2l0aW9uQ29sdW1ufWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXRoaXMuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dGhpcy5zdGFydENvbHVtbj8wOjF9c2V0RW5kUG9zaXRpb24odCxuKXtyZXR1cm4gdGhpcy5nZXREaXJlY3Rpb24oKT09PTA/bmV3IHhlKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sdCxuKTpuZXcgeGUodCxuLHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4pfWdldFBvc2l0aW9uKCl7cmV0dXJuIG5ldyBQZSh0aGlzLnBvc2l0aW9uTGluZU51bWJlcix0aGlzLnBvc2l0aW9uQ29sdW1uKX1nZXRTZWxlY3Rpb25TdGFydCgpe3JldHVybiBuZXcgUGUodGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbil9c2V0U3RhcnRQb3NpdGlvbih0LG4pe3JldHVybiB0aGlzLmdldERpcmVjdGlvbigpPT09MD9uZXcgeGUodCxuLHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbik6bmV3IHhlKHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbix0LG4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IHhlKHQubGluZU51bWJlcix0LmNvbHVtbixuLmxpbmVOdW1iZXIsbi5jb2x1bW4pfXN0YXRpYyBmcm9tUmFuZ2UodCxuKXtyZXR1cm4gbj09PTA/bmV3IHhlKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKTpuZXcgeGUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBsaWZ0U2VsZWN0aW9uKHQpe3JldHVybiBuZXcgeGUodC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdC5zZWxlY3Rpb25TdGFydENvbHVtbix0LnBvc2l0aW9uTGluZU51bWJlcix0LnBvc2l0aW9uQ29sdW1uKX1zdGF0aWMgc2VsZWN0aW9uc0FyckVxdWFsKHQsbil7aWYodCYmIW58fCF0JiZuKXJldHVybiExO2lmKCF0JiYhbilyZXR1cm4hMDtpZih0Lmxlbmd0aCE9PW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLGk9dC5sZW5ndGg7cjxpO3IrKylpZighdGhpcy5zZWxlY3Rpb25zRXF1YWwodFtyXSxuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgaXNJU2VsZWN0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5zZWxlY3Rpb25TdGFydENvbHVtbj09Im51bWJlciImJnR5cGVvZiB0LnBvc2l0aW9uTGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnBvc2l0aW9uQ29sdW1uPT0ibnVtYmVyIn1zdGF0aWMgY3JlYXRlV2l0aERpcmVjdGlvbih0LG4scixpLHMpe3JldHVybiBzPT09MD9uZXcgeGUodCxuLHIsaSk6bmV3IHhlKHIsaSx0LG4pfX1jb25zdCB1aT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGMoZSx0KXtpZihIYSh0KSl7Y29uc3Qgbj11aVt0XTtpZihuPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgJHtlfSByZWZlcmVuY2VzIGFuIHVua25vd24gY29kaWNvbjogJHt0fWApO3Q9bn1yZXR1cm4gdWlbZV09dCx7aWQ6ZX19Y29uc3Qgb2w9e2FkZDpjKCJhZGQiLDZlNCkscGx1czpjKCJwbHVzIiw2ZTQpLGdpc3ROZXc6YygiZ2lzdC1uZXciLDZlNCkscmVwb0NyZWF0ZTpjKCJyZXBvLWNyZWF0ZSIsNmU0KSxsaWdodGJ1bGI6YygibGlnaHRidWxiIiw2MDAwMSksbGlnaHRCdWxiOmMoImxpZ2h0LWJ1bGIiLDYwMDAxKSxyZXBvOmMoInJlcG8iLDYwMDAyKSxyZXBvRGVsZXRlOmMoInJlcG8tZGVsZXRlIiw2MDAwMiksZ2lzdEZvcms6YygiZ2lzdC1mb3JrIiw2MDAwMykscmVwb0ZvcmtlZDpjKCJyZXBvLWZvcmtlZCIsNjAwMDMpLGdpdFB1bGxSZXF1ZXN0OmMoImdpdC1wdWxsLXJlcXVlc3QiLDYwMDA0KSxnaXRQdWxsUmVxdWVzdEFiYW5kb25lZDpjKCJnaXQtcHVsbC1yZXF1ZXN0LWFiYW5kb25lZCIsNjAwMDQpLHJlY29yZEtleXM6YygicmVjb3JkLWtleXMiLDYwMDA1KSxrZXlib2FyZDpjKCJrZXlib2FyZCIsNjAwMDUpLHRhZzpjKCJ0YWciLDYwMDA2KSxnaXRQdWxsUmVxdWVzdExhYmVsOmMoImdpdC1wdWxsLXJlcXVlc3QtbGFiZWwiLDYwMDA2KSx0YWdBZGQ6YygidGFnLWFkZCIsNjAwMDYpLHRhZ1JlbW92ZTpjKCJ0YWctcmVtb3ZlIiw2MDAwNikscGVyc29uOmMoInBlcnNvbiIsNjAwMDcpLHBlcnNvbkZvbGxvdzpjKCJwZXJzb24tZm9sbG93Iiw2MDAwNykscGVyc29uT3V0bGluZTpjKCJwZXJzb24tb3V0bGluZSIsNjAwMDcpLHBlcnNvbkZpbGxlZDpjKCJwZXJzb24tZmlsbGVkIiw2MDAwNyksZ2l0QnJhbmNoOmMoImdpdC1icmFuY2giLDYwMDA4KSxnaXRCcmFuY2hDcmVhdGU6YygiZ2l0LWJyYW5jaC1jcmVhdGUiLDYwMDA4KSxnaXRCcmFuY2hEZWxldGU6YygiZ2l0LWJyYW5jaC1kZWxldGUiLDYwMDA4KSxzb3VyY2VDb250cm9sOmMoInNvdXJjZS1jb250cm9sIiw2MDAwOCksbWlycm9yOmMoIm1pcnJvciIsNjAwMDkpLG1pcnJvclB1YmxpYzpjKCJtaXJyb3ItcHVibGljIiw2MDAwOSksc3RhcjpjKCJzdGFyIiw2MDAxMCksc3RhckFkZDpjKCJzdGFyLWFkZCIsNjAwMTApLHN0YXJEZWxldGU6Yygic3Rhci1kZWxldGUiLDYwMDEwKSxzdGFyRW1wdHk6Yygic3Rhci1lbXB0eSIsNjAwMTApLGNvbW1lbnQ6YygiY29tbWVudCIsNjAwMTEpLGNvbW1lbnRBZGQ6YygiY29tbWVudC1hZGQiLDYwMDExKSxhbGVydDpjKCJhbGVydCIsNjAwMTIpLHdhcm5pbmc6Yygid2FybmluZyIsNjAwMTIpLHNlYXJjaDpjKCJzZWFyY2giLDYwMDEzKSxzZWFyY2hTYXZlOmMoInNlYXJjaC1zYXZlIiw2MDAxMyksbG9nT3V0OmMoImxvZy1vdXQiLDYwMDE0KSxzaWduT3V0OmMoInNpZ24tb3V0Iiw2MDAxNCksbG9nSW46YygibG9nLWluIiw2MDAxNSksc2lnbkluOmMoInNpZ24taW4iLDYwMDE1KSxleWU6YygiZXllIiw2MDAxNiksZXllVW53YXRjaDpjKCJleWUtdW53YXRjaCIsNjAwMTYpLGV5ZVdhdGNoOmMoImV5ZS13YXRjaCIsNjAwMTYpLGNpcmNsZUZpbGxlZDpjKCJjaXJjbGUtZmlsbGVkIiw2MDAxNykscHJpbWl0aXZlRG90OmMoInByaW1pdGl2ZS1kb3QiLDYwMDE3KSxjbG9zZURpcnR5OmMoImNsb3NlLWRpcnR5Iiw2MDAxNyksZGVidWdCcmVha3BvaW50OmMoImRlYnVnLWJyZWFrcG9pbnQiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnREaXNhYmxlZDpjKCJkZWJ1Zy1icmVha3BvaW50LWRpc2FibGVkIiw2MDAxNyksZGVidWdIaW50OmMoImRlYnVnLWhpbnQiLDYwMDE3KSx0ZXJtaW5hbERlY29yYXRpb25TdWNjZXNzOmMoInRlcm1pbmFsLWRlY29yYXRpb24tc3VjY2VzcyIsNjAwMTcpLHByaW1pdGl2ZVNxdWFyZTpjKCJwcmltaXRpdmUtc3F1YXJlIiw2MDAxOCksZWRpdDpjKCJlZGl0Iiw2MDAxOSkscGVuY2lsOmMoInBlbmNpbCIsNjAwMTkpLGluZm86YygiaW5mbyIsNjAwMjApLGlzc3VlT3BlbmVkOmMoImlzc3VlLW9wZW5lZCIsNjAwMjApLGdpc3RQcml2YXRlOmMoImdpc3QtcHJpdmF0ZSIsNjAwMjEpLGdpdEZvcmtQcml2YXRlOmMoImdpdC1mb3JrLXByaXZhdGUiLDYwMDIxKSxsb2NrOmMoImxvY2siLDYwMDIxKSxtaXJyb3JQcml2YXRlOmMoIm1pcnJvci1wcml2YXRlIiw2MDAyMSksY2xvc2U6YygiY2xvc2UiLDYwMDIyKSxyZW1vdmVDbG9zZTpjKCJyZW1vdmUtY2xvc2UiLDYwMDIyKSx4OmMoIngiLDYwMDIyKSxyZXBvU3luYzpjKCJyZXBvLXN5bmMiLDYwMDIzKSxzeW5jOmMoInN5bmMiLDYwMDIzKSxjbG9uZTpjKCJjbG9uZSIsNjAwMjQpLGRlc2t0b3BEb3dubG9hZDpjKCJkZXNrdG9wLWRvd25sb2FkIiw2MDAyNCksYmVha2VyOmMoImJlYWtlciIsNjAwMjUpLG1pY3Jvc2NvcGU6YygibWljcm9zY29wZSIsNjAwMjUpLHZtOmMoInZtIiw2MDAyNiksZGV2aWNlRGVza3RvcDpjKCJkZXZpY2UtZGVza3RvcCIsNjAwMjYpLGZpbGU6YygiZmlsZSIsNjAwMjcpLGZpbGVUZXh0OmMoImZpbGUtdGV4dCIsNjAwMjcpLG1vcmU6YygibW9yZSIsNjAwMjgpLGVsbGlwc2lzOmMoImVsbGlwc2lzIiw2MDAyOCksa2ViYWJIb3Jpem9udGFsOmMoImtlYmFiLWhvcml6b250YWwiLDYwMDI4KSxtYWlsUmVwbHk6YygibWFpbC1yZXBseSIsNjAwMjkpLHJlcGx5OmMoInJlcGx5Iiw2MDAyOSksb3JnYW5pemF0aW9uOmMoIm9yZ2FuaXphdGlvbiIsNjAwMzApLG9yZ2FuaXphdGlvbkZpbGxlZDpjKCJvcmdhbml6YXRpb24tZmlsbGVkIiw2MDAzMCksb3JnYW5pemF0aW9uT3V0bGluZTpjKCJvcmdhbml6YXRpb24tb3V0bGluZSIsNjAwMzApLG5ld0ZpbGU6YygibmV3LWZpbGUiLDYwMDMxKSxmaWxlQWRkOmMoImZpbGUtYWRkIiw2MDAzMSksbmV3Rm9sZGVyOmMoIm5ldy1mb2xkZXIiLDYwMDMyKSxmaWxlRGlyZWN0b3J5Q3JlYXRlOmMoImZpbGUtZGlyZWN0b3J5LWNyZWF0ZSIsNjAwMzIpLHRyYXNoOmMoInRyYXNoIiw2MDAzMyksdHJhc2hjYW46YygidHJhc2hjYW4iLDYwMDMzKSxoaXN0b3J5OmMoImhpc3RvcnkiLDYwMDM0KSxjbG9jazpjKCJjbG9jayIsNjAwMzQpLGZvbGRlcjpjKCJmb2xkZXIiLDYwMDM1KSxmaWxlRGlyZWN0b3J5OmMoImZpbGUtZGlyZWN0b3J5Iiw2MDAzNSksc3ltYm9sRm9sZGVyOmMoInN5bWJvbC1mb2xkZXIiLDYwMDM1KSxsb2dvR2l0aHViOmMoImxvZ28tZ2l0aHViIiw2MDAzNiksbWFya0dpdGh1YjpjKCJtYXJrLWdpdGh1YiIsNjAwMzYpLGdpdGh1YjpjKCJnaXRodWIiLDYwMDM2KSx0ZXJtaW5hbDpjKCJ0ZXJtaW5hbCIsNjAwMzcpLGNvbnNvbGU6YygiY29uc29sZSIsNjAwMzcpLHJlcGw6YygicmVwbCIsNjAwMzcpLHphcDpjKCJ6YXAiLDYwMDM4KSxzeW1ib2xFdmVudDpjKCJzeW1ib2wtZXZlbnQiLDYwMDM4KSxlcnJvcjpjKCJlcnJvciIsNjAwMzkpLHN0b3A6Yygic3RvcCIsNjAwMzkpLHZhcmlhYmxlOmMoInZhcmlhYmxlIiw2MDA0MCksc3ltYm9sVmFyaWFibGU6Yygic3ltYm9sLXZhcmlhYmxlIiw2MDA0MCksYXJyYXk6YygiYXJyYXkiLDYwMDQyKSxzeW1ib2xBcnJheTpjKCJzeW1ib2wtYXJyYXkiLDYwMDQyKSxzeW1ib2xNb2R1bGU6Yygic3ltYm9sLW1vZHVsZSIsNjAwNDMpLHN5bWJvbFBhY2thZ2U6Yygic3ltYm9sLXBhY2thZ2UiLDYwMDQzKSxzeW1ib2xOYW1lc3BhY2U6Yygic3ltYm9sLW5hbWVzcGFjZSIsNjAwNDMpLHN5bWJvbE9iamVjdDpjKCJzeW1ib2wtb2JqZWN0Iiw2MDA0Myksc3ltYm9sTWV0aG9kOmMoInN5bWJvbC1tZXRob2QiLDYwMDQ0KSxzeW1ib2xGdW5jdGlvbjpjKCJzeW1ib2wtZnVuY3Rpb24iLDYwMDQ0KSxzeW1ib2xDb25zdHJ1Y3RvcjpjKCJzeW1ib2wtY29uc3RydWN0b3IiLDYwMDQ0KSxzeW1ib2xCb29sZWFuOmMoInN5bWJvbC1ib29sZWFuIiw2MDA0Nyksc3ltYm9sTnVsbDpjKCJzeW1ib2wtbnVsbCIsNjAwNDcpLHN5bWJvbE51bWVyaWM6Yygic3ltYm9sLW51bWVyaWMiLDYwMDQ4KSxzeW1ib2xOdW1iZXI6Yygic3ltYm9sLW51bWJlciIsNjAwNDgpLHN5bWJvbFN0cnVjdHVyZTpjKCJzeW1ib2wtc3RydWN0dXJlIiw2MDA0OSksc3ltYm9sU3RydWN0OmMoInN5bWJvbC1zdHJ1Y3QiLDYwMDQ5KSxzeW1ib2xQYXJhbWV0ZXI6Yygic3ltYm9sLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbFR5cGVQYXJhbWV0ZXI6Yygic3ltYm9sLXR5cGUtcGFyYW1ldGVyIiw2MDA1MCksc3ltYm9sS2V5OmMoInN5bWJvbC1rZXkiLDYwMDUxKSxzeW1ib2xUZXh0OmMoInN5bWJvbC10ZXh0Iiw2MDA1MSksc3ltYm9sUmVmZXJlbmNlOmMoInN5bWJvbC1yZWZlcmVuY2UiLDYwMDUyKSxnb1RvRmlsZTpjKCJnby10by1maWxlIiw2MDA1Miksc3ltYm9sRW51bTpjKCJzeW1ib2wtZW51bSIsNjAwNTMpLHN5bWJvbFZhbHVlOmMoInN5bWJvbC12YWx1ZSIsNjAwNTMpLHN5bWJvbFJ1bGVyOmMoInN5bWJvbC1ydWxlciIsNjAwNTQpLHN5bWJvbFVuaXQ6Yygic3ltYm9sLXVuaXQiLDYwMDU0KSxhY3RpdmF0ZUJyZWFrcG9pbnRzOmMoImFjdGl2YXRlLWJyZWFrcG9pbnRzIiw2MDA1NSksYXJjaGl2ZTpjKCJhcmNoaXZlIiw2MDA1NiksYXJyb3dCb3RoOmMoImFycm93LWJvdGgiLDYwMDU3KSxhcnJvd0Rvd246YygiYXJyb3ctZG93biIsNjAwNTgpLGFycm93TGVmdDpjKCJhcnJvdy1sZWZ0Iiw2MDA1OSksYXJyb3dSaWdodDpjKCJhcnJvdy1yaWdodCIsNjAwNjApLGFycm93U21hbGxEb3duOmMoImFycm93LXNtYWxsLWRvd24iLDYwMDYxKSxhcnJvd1NtYWxsTGVmdDpjKCJhcnJvdy1zbWFsbC1sZWZ0Iiw2MDA2MiksYXJyb3dTbWFsbFJpZ2h0OmMoImFycm93LXNtYWxsLXJpZ2h0Iiw2MDA2MyksYXJyb3dTbWFsbFVwOmMoImFycm93LXNtYWxsLXVwIiw2MDA2NCksYXJyb3dVcDpjKCJhcnJvdy11cCIsNjAwNjUpLGJlbGw6YygiYmVsbCIsNjAwNjYpLGJvbGQ6YygiYm9sZCIsNjAwNjcpLGJvb2s6YygiYm9vayIsNjAwNjgpLGJvb2ttYXJrOmMoImJvb2ttYXJrIiw2MDA2OSksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkOmMoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtdW52ZXJpZmllZCIsNjAwNzApLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsOmMoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkOmMoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtZGlzYWJsZWQiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZDpjKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtdW52ZXJpZmllZCIsNjAwNzIpLGRlYnVnQnJlYWtwb2ludERhdGE6YygiZGVidWctYnJlYWtwb2ludC1kYXRhIiw2MDA3MyksZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkOmMoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS1kaXNhYmxlZCIsNjAwNzMpLGRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ6YygiZGVidWctYnJlYWtwb2ludC1sb2ctdW52ZXJpZmllZCIsNjAwNzQpLGRlYnVnQnJlYWtwb2ludExvZzpjKCJkZWJ1Zy1icmVha3BvaW50LWxvZyIsNjAwNzUpLGRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkOmMoImRlYnVnLWJyZWFrcG9pbnQtbG9nLWRpc2FibGVkIiw2MDA3NSksYnJpZWZjYXNlOmMoImJyaWVmY2FzZSIsNjAwNzYpLGJyb2FkY2FzdDpjKCJicm9hZGNhc3QiLDYwMDc3KSxicm93c2VyOmMoImJyb3dzZXIiLDYwMDc4KSxidWc6YygiYnVnIiw2MDA3OSksY2FsZW5kYXI6YygiY2FsZW5kYXIiLDYwMDgwKSxjYXNlU2Vuc2l0aXZlOmMoImNhc2Utc2Vuc2l0aXZlIiw2MDA4MSksY2hlY2s6YygiY2hlY2siLDYwMDgyKSxjaGVja2xpc3Q6YygiY2hlY2tsaXN0Iiw2MDA4MyksY2hldnJvbkRvd246YygiY2hldnJvbi1kb3duIiw2MDA4NCksY2hldnJvbkxlZnQ6YygiY2hldnJvbi1sZWZ0Iiw2MDA4NSksY2hldnJvblJpZ2h0OmMoImNoZXZyb24tcmlnaHQiLDYwMDg2KSxjaGV2cm9uVXA6YygiY2hldnJvbi11cCIsNjAwODcpLGNocm9tZUNsb3NlOmMoImNocm9tZS1jbG9zZSIsNjAwODgpLGNocm9tZU1heGltaXplOmMoImNocm9tZS1tYXhpbWl6ZSIsNjAwODkpLGNocm9tZU1pbmltaXplOmMoImNocm9tZS1taW5pbWl6ZSIsNjAwOTApLGNocm9tZVJlc3RvcmU6YygiY2hyb21lLXJlc3RvcmUiLDYwMDkxKSxjaXJjbGVPdXRsaW5lOmMoImNpcmNsZS1vdXRsaW5lIiw2MDA5MiksY2lyY2xlOmMoImNpcmNsZSIsNjAwOTIpLGRlYnVnQnJlYWtwb2ludFVudmVyaWZpZWQ6YygiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIiw2MDA5MiksdGVybWluYWxEZWNvcmF0aW9uSW5jb21wbGV0ZTpjKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWluY29tcGxldGUiLDYwMDkyKSxjaXJjbGVTbGFzaDpjKCJjaXJjbGUtc2xhc2giLDYwMDkzKSxjaXJjdWl0Qm9hcmQ6YygiY2lyY3VpdC1ib2FyZCIsNjAwOTQpLGNsZWFyQWxsOmMoImNsZWFyLWFsbCIsNjAwOTUpLGNsaXBweTpjKCJjbGlwcHkiLDYwMDk2KSxjbG9zZUFsbDpjKCJjbG9zZS1hbGwiLDYwMDk3KSxjbG91ZERvd25sb2FkOmMoImNsb3VkLWRvd25sb2FkIiw2MDA5OCksY2xvdWRVcGxvYWQ6YygiY2xvdWQtdXBsb2FkIiw2MDA5OSksY29kZTpjKCJjb2RlIiw2MDEwMCksY29sbGFwc2VBbGw6YygiY29sbGFwc2UtYWxsIiw2MDEwMSksY29sb3JNb2RlOmMoImNvbG9yLW1vZGUiLDYwMTAyKSxjb21tZW50RGlzY3Vzc2lvbjpjKCJjb21tZW50LWRpc2N1c3Npb24iLDYwMTAzKSxjcmVkaXRDYXJkOmMoImNyZWRpdC1jYXJkIiw2MDEwNSksZGFzaDpjKCJkYXNoIiw2MDEwOCksZGFzaGJvYXJkOmMoImRhc2hib2FyZCIsNjAxMDkpLGRhdGFiYXNlOmMoImRhdGFiYXNlIiw2MDExMCksZGVidWdDb250aW51ZTpjKCJkZWJ1Zy1jb250aW51ZSIsNjAxMTEpLGRlYnVnRGlzY29ubmVjdDpjKCJkZWJ1Zy1kaXNjb25uZWN0Iiw2MDExMiksZGVidWdQYXVzZTpjKCJkZWJ1Zy1wYXVzZSIsNjAxMTMpLGRlYnVnUmVzdGFydDpjKCJkZWJ1Zy1yZXN0YXJ0Iiw2MDExNCksZGVidWdTdGFydDpjKCJkZWJ1Zy1zdGFydCIsNjAxMTUpLGRlYnVnU3RlcEludG86YygiZGVidWctc3RlcC1pbnRvIiw2MDExNiksZGVidWdTdGVwT3V0OmMoImRlYnVnLXN0ZXAtb3V0Iiw2MDExNyksZGVidWdTdGVwT3ZlcjpjKCJkZWJ1Zy1zdGVwLW92ZXIiLDYwMTE4KSxkZWJ1Z1N0b3A6YygiZGVidWctc3RvcCIsNjAxMTkpLGRlYnVnOmMoImRlYnVnIiw2MDEyMCksZGV2aWNlQ2FtZXJhVmlkZW86YygiZGV2aWNlLWNhbWVyYS12aWRlbyIsNjAxMjEpLGRldmljZUNhbWVyYTpjKCJkZXZpY2UtY2FtZXJhIiw2MDEyMiksZGV2aWNlTW9iaWxlOmMoImRldmljZS1tb2JpbGUiLDYwMTIzKSxkaWZmQWRkZWQ6YygiZGlmZi1hZGRlZCIsNjAxMjQpLGRpZmZJZ25vcmVkOmMoImRpZmYtaWdub3JlZCIsNjAxMjUpLGRpZmZNb2RpZmllZDpjKCJkaWZmLW1vZGlmaWVkIiw2MDEyNiksZGlmZlJlbW92ZWQ6YygiZGlmZi1yZW1vdmVkIiw2MDEyNyksZGlmZlJlbmFtZWQ6YygiZGlmZi1yZW5hbWVkIiw2MDEyOCksZGlmZjpjKCJkaWZmIiw2MDEyOSksZGlmZlNpZGVieXNpZGU6YygiZGlmZi1zaWRlYnlzaWRlIiw2MDEyOSksZGlzY2FyZDpjKCJkaXNjYXJkIiw2MDEzMCksZWRpdG9yTGF5b3V0OmMoImVkaXRvci1sYXlvdXQiLDYwMTMxKSxlbXB0eVdpbmRvdzpjKCJlbXB0eS13aW5kb3ciLDYwMTMyKSxleGNsdWRlOmMoImV4Y2x1ZGUiLDYwMTMzKSxleHRlbnNpb25zOmMoImV4dGVuc2lvbnMiLDYwMTM0KSxleWVDbG9zZWQ6YygiZXllLWNsb3NlZCIsNjAxMzUpLGZpbGVCaW5hcnk6YygiZmlsZS1iaW5hcnkiLDYwMTM2KSxmaWxlQ29kZTpjKCJmaWxlLWNvZGUiLDYwMTM3KSxmaWxlTWVkaWE6YygiZmlsZS1tZWRpYSIsNjAxMzgpLGZpbGVQZGY6YygiZmlsZS1wZGYiLDYwMTM5KSxmaWxlU3VibW9kdWxlOmMoImZpbGUtc3VibW9kdWxlIiw2MDE0MCksZmlsZVN5bWxpbmtEaXJlY3Rvcnk6YygiZmlsZS1zeW1saW5rLWRpcmVjdG9yeSIsNjAxNDEpLGZpbGVTeW1saW5rRmlsZTpjKCJmaWxlLXN5bWxpbmstZmlsZSIsNjAxNDIpLGZpbGVaaXA6YygiZmlsZS16aXAiLDYwMTQzKSxmaWxlczpjKCJmaWxlcyIsNjAxNDQpLGZpbHRlcjpjKCJmaWx0ZXIiLDYwMTQ1KSxmbGFtZTpjKCJmbGFtZSIsNjAxNDYpLGZvbGREb3duOmMoImZvbGQtZG93biIsNjAxNDcpLGZvbGRVcDpjKCJmb2xkLXVwIiw2MDE0OCksZm9sZDpjKCJmb2xkIiw2MDE0OSksZm9sZGVyQWN0aXZlOmMoImZvbGRlci1hY3RpdmUiLDYwMTUwKSxmb2xkZXJPcGVuZWQ6YygiZm9sZGVyLW9wZW5lZCIsNjAxNTEpLGdlYXI6YygiZ2VhciIsNjAxNTIpLGdpZnQ6YygiZ2lmdCIsNjAxNTMpLGdpc3RTZWNyZXQ6YygiZ2lzdC1zZWNyZXQiLDYwMTU0KSxnaXN0OmMoImdpc3QiLDYwMTU1KSxnaXRDb21taXQ6YygiZ2l0LWNvbW1pdCIsNjAxNTYpLGdpdENvbXBhcmU6YygiZ2l0LWNvbXBhcmUiLDYwMTU3KSxjb21wYXJlQ2hhbmdlczpjKCJjb21wYXJlLWNoYW5nZXMiLDYwMTU3KSxnaXRNZXJnZTpjKCJnaXQtbWVyZ2UiLDYwMTU4KSxnaXRodWJBY3Rpb246YygiZ2l0aHViLWFjdGlvbiIsNjAxNTkpLGdpdGh1YkFsdDpjKCJnaXRodWItYWx0Iiw2MDE2MCksZ2xvYmU6YygiZ2xvYmUiLDYwMTYxKSxncmFiYmVyOmMoImdyYWJiZXIiLDYwMTYyKSxncmFwaDpjKCJncmFwaCIsNjAxNjMpLGdyaXBwZXI6YygiZ3JpcHBlciIsNjAxNjQpLGhlYXJ0OmMoImhlYXJ0Iiw2MDE2NSksaG9tZTpjKCJob21lIiw2MDE2NiksaG9yaXpvbnRhbFJ1bGU6YygiaG9yaXpvbnRhbC1ydWxlIiw2MDE2NyksaHVib3Q6YygiaHVib3QiLDYwMTY4KSxpbmJveDpjKCJpbmJveCIsNjAxNjkpLGlzc3VlUmVvcGVuZWQ6YygiaXNzdWUtcmVvcGVuZWQiLDYwMTcxKSxpc3N1ZXM6YygiaXNzdWVzIiw2MDE3MiksaXRhbGljOmMoIml0YWxpYyIsNjAxNzMpLGplcnNleTpjKCJqZXJzZXkiLDYwMTc0KSxqc29uOmMoImpzb24iLDYwMTc1KSxrZWJhYlZlcnRpY2FsOmMoImtlYmFiLXZlcnRpY2FsIiw2MDE3Niksa2V5OmMoImtleSIsNjAxNzcpLGxhdzpjKCJsYXciLDYwMTc4KSxsaWdodGJ1bGJBdXRvZml4OmMoImxpZ2h0YnVsYi1hdXRvZml4Iiw2MDE3OSksbGlua0V4dGVybmFsOmMoImxpbmstZXh0ZXJuYWwiLDYwMTgwKSxsaW5rOmMoImxpbmsiLDYwMTgxKSxsaXN0T3JkZXJlZDpjKCJsaXN0LW9yZGVyZWQiLDYwMTgyKSxsaXN0VW5vcmRlcmVkOmMoImxpc3QtdW5vcmRlcmVkIiw2MDE4MyksbGl2ZVNoYXJlOmMoImxpdmUtc2hhcmUiLDYwMTg0KSxsb2FkaW5nOmMoImxvYWRpbmciLDYwMTg1KSxsb2NhdGlvbjpjKCJsb2NhdGlvbiIsNjAxODYpLG1haWxSZWFkOmMoIm1haWwtcmVhZCIsNjAxODcpLG1haWw6YygibWFpbCIsNjAxODgpLG1hcmtkb3duOmMoIm1hcmtkb3duIiw2MDE4OSksbWVnYXBob25lOmMoIm1lZ2FwaG9uZSIsNjAxOTApLG1lbnRpb246YygibWVudGlvbiIsNjAxOTEpLG1pbGVzdG9uZTpjKCJtaWxlc3RvbmUiLDYwMTkyKSxnaXRQdWxsUmVxdWVzdE1pbGVzdG9uZTpjKCJnaXQtcHVsbC1yZXF1ZXN0LW1pbGVzdG9uZSIsNjAxOTIpLG1vcnRhckJvYXJkOmMoIm1vcnRhci1ib2FyZCIsNjAxOTMpLG1vdmU6YygibW92ZSIsNjAxOTQpLG11bHRpcGxlV2luZG93czpjKCJtdWx0aXBsZS13aW5kb3dzIiw2MDE5NSksbXV0ZTpjKCJtdXRlIiw2MDE5Niksbm9OZXdsaW5lOmMoIm5vLW5ld2xpbmUiLDYwMTk3KSxub3RlOmMoIm5vdGUiLDYwMTk4KSxvY3RvZmFjZTpjKCJvY3RvZmFjZSIsNjAxOTkpLG9wZW5QcmV2aWV3OmMoIm9wZW4tcHJldmlldyIsNjAyMDApLHBhY2thZ2U6YygicGFja2FnZSIsNjAyMDEpLHBhaW50Y2FuOmMoInBhaW50Y2FuIiw2MDIwMikscGluOmMoInBpbiIsNjAyMDMpLHBsYXk6YygicGxheSIsNjAyMDQpLHJ1bjpjKCJydW4iLDYwMjA0KSxwbHVnOmMoInBsdWciLDYwMjA1KSxwcmVzZXJ2ZUNhc2U6YygicHJlc2VydmUtY2FzZSIsNjAyMDYpLHByZXZpZXc6YygicHJldmlldyIsNjAyMDcpLHByb2plY3Q6YygicHJvamVjdCIsNjAyMDgpLHB1bHNlOmMoInB1bHNlIiw2MDIwOSkscXVlc3Rpb246YygicXVlc3Rpb24iLDYwMjEwKSxxdW90ZTpjKCJxdW90ZSIsNjAyMTEpLHJhZGlvVG93ZXI6YygicmFkaW8tdG93ZXIiLDYwMjEyKSxyZWFjdGlvbnM6YygicmVhY3Rpb25zIiw2MDIxMykscmVmZXJlbmNlczpjKCJyZWZlcmVuY2VzIiw2MDIxNCkscmVmcmVzaDpjKCJyZWZyZXNoIiw2MDIxNSkscmVnZXg6YygicmVnZXgiLDYwMjE2KSxyZW1vdGVFeHBsb3JlcjpjKCJyZW1vdGUtZXhwbG9yZXIiLDYwMjE3KSxyZW1vdGU6YygicmVtb3RlIiw2MDIxOCkscmVtb3ZlOmMoInJlbW92ZSIsNjAyMTkpLHJlcGxhY2VBbGw6YygicmVwbGFjZS1hbGwiLDYwMjIwKSxyZXBsYWNlOmMoInJlcGxhY2UiLDYwMjIxKSxyZXBvQ2xvbmU6YygicmVwby1jbG9uZSIsNjAyMjIpLHJlcG9Gb3JjZVB1c2g6YygicmVwby1mb3JjZS1wdXNoIiw2MDIyMykscmVwb1B1bGw6YygicmVwby1wdWxsIiw2MDIyNCkscmVwb1B1c2g6YygicmVwby1wdXNoIiw2MDIyNSkscmVwb3J0OmMoInJlcG9ydCIsNjAyMjYpLHJlcXVlc3RDaGFuZ2VzOmMoInJlcXVlc3QtY2hhbmdlcyIsNjAyMjcpLHJvY2tldDpjKCJyb2NrZXQiLDYwMjI4KSxyb290Rm9sZGVyT3BlbmVkOmMoInJvb3QtZm9sZGVyLW9wZW5lZCIsNjAyMjkpLHJvb3RGb2xkZXI6Yygicm9vdC1mb2xkZXIiLDYwMjMwKSxyc3M6YygicnNzIiw2MDIzMSkscnVieTpjKCJydWJ5Iiw2MDIzMiksc2F2ZUFsbDpjKCJzYXZlLWFsbCIsNjAyMzMpLHNhdmVBczpjKCJzYXZlLWFzIiw2MDIzNCksc2F2ZTpjKCJzYXZlIiw2MDIzNSksc2NyZWVuRnVsbDpjKCJzY3JlZW4tZnVsbCIsNjAyMzYpLHNjcmVlbk5vcm1hbDpjKCJzY3JlZW4tbm9ybWFsIiw2MDIzNyksc2VhcmNoU3RvcDpjKCJzZWFyY2gtc3RvcCIsNjAyMzgpLHNlcnZlcjpjKCJzZXJ2ZXIiLDYwMjQwKSxzZXR0aW5nc0dlYXI6Yygic2V0dGluZ3MtZ2VhciIsNjAyNDEpLHNldHRpbmdzOmMoInNldHRpbmdzIiw2MDI0Miksc2hpZWxkOmMoInNoaWVsZCIsNjAyNDMpLHNtaWxleTpjKCJzbWlsZXkiLDYwMjQ0KSxzb3J0UHJlY2VkZW5jZTpjKCJzb3J0LXByZWNlZGVuY2UiLDYwMjQ1KSxzcGxpdEhvcml6b250YWw6Yygic3BsaXQtaG9yaXpvbnRhbCIsNjAyNDYpLHNwbGl0VmVydGljYWw6Yygic3BsaXQtdmVydGljYWwiLDYwMjQ3KSxzcXVpcnJlbDpjKCJzcXVpcnJlbCIsNjAyNDgpLHN0YXJGdWxsOmMoInN0YXItZnVsbCIsNjAyNDkpLHN0YXJIYWxmOmMoInN0YXItaGFsZiIsNjAyNTApLHN5bWJvbENsYXNzOmMoInN5bWJvbC1jbGFzcyIsNjAyNTEpLHN5bWJvbENvbG9yOmMoInN5bWJvbC1jb2xvciIsNjAyNTIpLHN5bWJvbENvbnN0YW50OmMoInN5bWJvbC1jb25zdGFudCIsNjAyNTMpLHN5bWJvbEVudW1NZW1iZXI6Yygic3ltYm9sLWVudW0tbWVtYmVyIiw2MDI1NCksc3ltYm9sRmllbGQ6Yygic3ltYm9sLWZpZWxkIiw2MDI1NSksc3ltYm9sRmlsZTpjKCJzeW1ib2wtZmlsZSIsNjAyNTYpLHN5bWJvbEludGVyZmFjZTpjKCJzeW1ib2wtaW50ZXJmYWNlIiw2MDI1Nyksc3ltYm9sS2V5d29yZDpjKCJzeW1ib2wta2V5d29yZCIsNjAyNTgpLHN5bWJvbE1pc2M6Yygic3ltYm9sLW1pc2MiLDYwMjU5KSxzeW1ib2xPcGVyYXRvcjpjKCJzeW1ib2wtb3BlcmF0b3IiLDYwMjYwKSxzeW1ib2xQcm9wZXJ0eTpjKCJzeW1ib2wtcHJvcGVydHkiLDYwMjYxKSx3cmVuY2g6Yygid3JlbmNoIiw2MDI2MSksd3JlbmNoU3ViYWN0aW9uOmMoIndyZW5jaC1zdWJhY3Rpb24iLDYwMjYxKSxzeW1ib2xTbmlwcGV0OmMoInN5bWJvbC1zbmlwcGV0Iiw2MDI2MiksdGFza2xpc3Q6YygidGFza2xpc3QiLDYwMjYzKSx0ZWxlc2NvcGU6YygidGVsZXNjb3BlIiw2MDI2NCksdGV4dFNpemU6YygidGV4dC1zaXplIiw2MDI2NSksdGhyZWVCYXJzOmMoInRocmVlLWJhcnMiLDYwMjY2KSx0aHVtYnNkb3duOmMoInRodW1ic2Rvd24iLDYwMjY3KSx0aHVtYnN1cDpjKCJ0aHVtYnN1cCIsNjAyNjgpLHRvb2xzOmMoInRvb2xzIiw2MDI2OSksdHJpYW5nbGVEb3duOmMoInRyaWFuZ2xlLWRvd24iLDYwMjcwKSx0cmlhbmdsZUxlZnQ6YygidHJpYW5nbGUtbGVmdCIsNjAyNzEpLHRyaWFuZ2xlUmlnaHQ6YygidHJpYW5nbGUtcmlnaHQiLDYwMjcyKSx0cmlhbmdsZVVwOmMoInRyaWFuZ2xlLXVwIiw2MDI3MyksdHdpdHRlcjpjKCJ0d2l0dGVyIiw2MDI3NCksdW5mb2xkOmMoInVuZm9sZCIsNjAyNzUpLHVubG9jazpjKCJ1bmxvY2siLDYwMjc2KSx1bm11dGU6YygidW5tdXRlIiw2MDI3NyksdW52ZXJpZmllZDpjKCJ1bnZlcmlmaWVkIiw2MDI3OCksdmVyaWZpZWQ6YygidmVyaWZpZWQiLDYwMjc5KSx2ZXJzaW9uczpjKCJ2ZXJzaW9ucyIsNjAyODApLHZtQWN0aXZlOmMoInZtLWFjdGl2ZSIsNjAyODEpLHZtT3V0bGluZTpjKCJ2bS1vdXRsaW5lIiw2MDI4Miksdm1SdW5uaW5nOmMoInZtLXJ1bm5pbmciLDYwMjgzKSx3YXRjaDpjKCJ3YXRjaCIsNjAyODQpLHdoaXRlc3BhY2U6Yygid2hpdGVzcGFjZSIsNjAyODUpLHdob2xlV29yZDpjKCJ3aG9sZS13b3JkIiw2MDI4Niksd2luZG93OmMoIndpbmRvdyIsNjAyODcpLHdvcmRXcmFwOmMoIndvcmQtd3JhcCIsNjAyODgpLHpvb21JbjpjKCJ6b29tLWluIiw2MDI4OSksem9vbU91dDpjKCJ6b29tLW91dCIsNjAyOTApLGxpc3RGaWx0ZXI6YygibGlzdC1maWx0ZXIiLDYwMjkxKSxsaXN0RmxhdDpjKCJsaXN0LWZsYXQiLDYwMjkyKSxsaXN0U2VsZWN0aW9uOmMoImxpc3Qtc2VsZWN0aW9uIiw2MDI5Myksc2VsZWN0aW9uOmMoInNlbGVjdGlvbiIsNjAyOTMpLGxpc3RUcmVlOmMoImxpc3QtdHJlZSIsNjAyOTQpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uVW52ZXJpZmllZDpjKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLDYwMjk1KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbjpjKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIiw2MDI5NiksZGVidWdCcmVha3BvaW50RnVuY3Rpb25EaXNhYmxlZDpjKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIiw2MDI5NiksZGVidWdTdGFja2ZyYW1lQWN0aXZlOmMoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIiw2MDI5NyksY2lyY2xlU21hbGxGaWxsZWQ6YygiY2lyY2xlLXNtYWxsLWZpbGxlZCIsNjAyOTgpLGRlYnVnU3RhY2tmcmFtZURvdDpjKCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIsNjAyOTgpLHRlcm1pbmFsRGVjb3JhdGlvbk1hcms6YygidGVybWluYWwtZGVjb3JhdGlvbi1tYXJrIiw2MDI5OCksZGVidWdTdGFja2ZyYW1lOmMoImRlYnVnLXN0YWNrZnJhbWUiLDYwMjk5KSxkZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkOmMoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIsNjAyOTkpLGRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkOmMoImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLDYwMzAwKSxzeW1ib2xTdHJpbmc6Yygic3ltYm9sLXN0cmluZyIsNjAzMDEpLGRlYnVnUmV2ZXJzZUNvbnRpbnVlOmMoImRlYnVnLXJldmVyc2UtY29udGludWUiLDYwMzAyKSxkZWJ1Z1N0ZXBCYWNrOmMoImRlYnVnLXN0ZXAtYmFjayIsNjAzMDMpLGRlYnVnUmVzdGFydEZyYW1lOmMoImRlYnVnLXJlc3RhcnQtZnJhbWUiLDYwMzA0KSxkZWJ1Z0FsdDpjKCJkZWJ1Zy1hbHQiLDYwMzA1KSxjYWxsSW5jb21pbmc6YygiY2FsbC1pbmNvbWluZyIsNjAzMDYpLGNhbGxPdXRnb2luZzpjKCJjYWxsLW91dGdvaW5nIiw2MDMwNyksbWVudTpjKCJtZW51Iiw2MDMwOCksZXhwYW5kQWxsOmMoImV4cGFuZC1hbGwiLDYwMzA5KSxmZWVkYmFjazpjKCJmZWVkYmFjayIsNjAzMTApLGdpdFB1bGxSZXF1ZXN0UmV2aWV3ZXI6YygiZ2l0LXB1bGwtcmVxdWVzdC1yZXZpZXdlciIsNjAzMTApLGdyb3VwQnlSZWZUeXBlOmMoImdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMSksdW5ncm91cEJ5UmVmVHlwZTpjKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMiksYWNjb3VudDpjKCJhY2NvdW50Iiw2MDMxMyksZ2l0UHVsbFJlcXVlc3RBc3NpZ25lZTpjKCJnaXQtcHVsbC1yZXF1ZXN0LWFzc2lnbmVlIiw2MDMxMyksYmVsbERvdDpjKCJiZWxsLWRvdCIsNjAzMTQpLGRlYnVnQ29uc29sZTpjKCJkZWJ1Zy1jb25zb2xlIiw2MDMxNSksbGlicmFyeTpjKCJsaWJyYXJ5Iiw2MDMxNiksb3V0cHV0OmMoIm91dHB1dCIsNjAzMTcpLHJ1bkFsbDpjKCJydW4tYWxsIiw2MDMxOCksc3luY0lnbm9yZWQ6Yygic3luYy1pZ25vcmVkIiw2MDMxOSkscGlubmVkOmMoInBpbm5lZCIsNjAzMjApLGdpdGh1YkludmVydGVkOmMoImdpdGh1Yi1pbnZlcnRlZCIsNjAzMjEpLHNlcnZlclByb2Nlc3M6Yygic2VydmVyLXByb2Nlc3MiLDYwMzIyKSxzZXJ2ZXJFbnZpcm9ubWVudDpjKCJzZXJ2ZXItZW52aXJvbm1lbnQiLDYwMzIzKSxwYXNzOmMoInBhc3MiLDYwMzI0KSxpc3N1ZUNsb3NlZDpjKCJpc3N1ZS1jbG9zZWQiLDYwMzI0KSxzdG9wQ2lyY2xlOmMoInN0b3AtY2lyY2xlIiw2MDMyNSkscGxheUNpcmNsZTpjKCJwbGF5LWNpcmNsZSIsNjAzMjYpLHJlY29yZDpjKCJyZWNvcmQiLDYwMzI3KSxkZWJ1Z0FsdFNtYWxsOmMoImRlYnVnLWFsdC1zbWFsbCIsNjAzMjgpLHZtQ29ubmVjdDpjKCJ2bS1jb25uZWN0Iiw2MDMyOSksY2xvdWQ6YygiY2xvdWQiLDYwMzMwKSxtZXJnZTpjKCJtZXJnZSIsNjAzMzEpLGV4cG9ydDpjKCJleHBvcnQiLDYwMzMyKSxncmFwaExlZnQ6YygiZ3JhcGgtbGVmdCIsNjAzMzMpLG1hZ25ldDpjKCJtYWduZXQiLDYwMzM0KSxub3RlYm9vazpjKCJub3RlYm9vayIsNjAzMzUpLHJlZG86YygicmVkbyIsNjAzMzYpLGNoZWNrQWxsOmMoImNoZWNrLWFsbCIsNjAzMzcpLHBpbm5lZERpcnR5OmMoInBpbm5lZC1kaXJ0eSIsNjAzMzgpLHBhc3NGaWxsZWQ6YygicGFzcy1maWxsZWQiLDYwMzM5KSxjaXJjbGVMYXJnZUZpbGxlZDpjKCJjaXJjbGUtbGFyZ2UtZmlsbGVkIiw2MDM0MCksY2lyY2xlTGFyZ2U6YygiY2lyY2xlLWxhcmdlIiw2MDM0MSksY2lyY2xlTGFyZ2VPdXRsaW5lOmMoImNpcmNsZS1sYXJnZS1vdXRsaW5lIiw2MDM0MSksY29tYmluZTpjKCJjb21iaW5lIiw2MDM0MiksZ2F0aGVyOmMoImdhdGhlciIsNjAzNDIpLHRhYmxlOmMoInRhYmxlIiw2MDM0MyksdmFyaWFibGVHcm91cDpjKCJ2YXJpYWJsZS1ncm91cCIsNjAzNDQpLHR5cGVIaWVyYXJjaHk6YygidHlwZS1oaWVyYXJjaHkiLDYwMzQ1KSx0eXBlSGllcmFyY2h5U3ViOmMoInR5cGUtaGllcmFyY2h5LXN1YiIsNjAzNDYpLHR5cGVIaWVyYXJjaHlTdXBlcjpjKCJ0eXBlLWhpZXJhcmNoeS1zdXBlciIsNjAzNDcpLGdpdFB1bGxSZXF1ZXN0Q3JlYXRlOmMoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIiw2MDM0OCkscnVuQWJvdmU6YygicnVuLWFib3ZlIiw2MDM0OSkscnVuQmVsb3c6YygicnVuLWJlbG93Iiw2MDM1MCksbm90ZWJvb2tUZW1wbGF0ZTpjKCJub3RlYm9vay10ZW1wbGF0ZSIsNjAzNTEpLGRlYnVnUmVydW46YygiZGVidWctcmVydW4iLDYwMzUyKSx3b3Jrc3BhY2VUcnVzdGVkOmMoIndvcmtzcGFjZS10cnVzdGVkIiw2MDM1Myksd29ya3NwYWNlVW50cnVzdGVkOmMoIndvcmtzcGFjZS11bnRydXN0ZWQiLDYwMzU0KSx3b3Jrc3BhY2VVbmtub3duOmMoIndvcmtzcGFjZS11bmtub3duIiw2MDM1NSksdGVybWluYWxDbWQ6YygidGVybWluYWwtY21kIiw2MDM1NiksdGVybWluYWxEZWJpYW46YygidGVybWluYWwtZGViaWFuIiw2MDM1NyksdGVybWluYWxMaW51eDpjKCJ0ZXJtaW5hbC1saW51eCIsNjAzNTgpLHRlcm1pbmFsUG93ZXJzaGVsbDpjKCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIiw2MDM1OSksdGVybWluYWxUbXV4OmMoInRlcm1pbmFsLXRtdXgiLDYwMzYwKSx0ZXJtaW5hbFVidW50dTpjKCJ0ZXJtaW5hbC11YnVudHUiLDYwMzYxKSx0ZXJtaW5hbEJhc2g6YygidGVybWluYWwtYmFzaCIsNjAzNjIpLGFycm93U3dhcDpjKCJhcnJvdy1zd2FwIiw2MDM2MyksY29weTpjKCJjb3B5Iiw2MDM2NCkscGVyc29uQWRkOmMoInBlcnNvbi1hZGQiLDYwMzY1KSxmaWx0ZXJGaWxsZWQ6YygiZmlsdGVyLWZpbGxlZCIsNjAzNjYpLHdhbmQ6Yygid2FuZCIsNjAzNjcpLGRlYnVnTGluZUJ5TGluZTpjKCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLDYwMzY4KSxpbnNwZWN0OmMoImluc3BlY3QiLDYwMzY5KSxsYXllcnM6YygibGF5ZXJzIiw2MDM3MCksbGF5ZXJzRG90OmMoImxheWVycy1kb3QiLDYwMzcxKSxsYXllcnNBY3RpdmU6YygibGF5ZXJzLWFjdGl2ZSIsNjAzNzIpLGNvbXBhc3M6YygiY29tcGFzcyIsNjAzNzMpLGNvbXBhc3NEb3Q6YygiY29tcGFzcy1kb3QiLDYwMzc0KSxjb21wYXNzQWN0aXZlOmMoImNvbXBhc3MtYWN0aXZlIiw2MDM3NSksYXp1cmU6YygiYXp1cmUiLDYwMzc2KSxpc3N1ZURyYWZ0OmMoImlzc3VlLWRyYWZ0Iiw2MDM3NyksZ2l0UHVsbFJlcXVlc3RDbG9zZWQ6YygiZ2l0LXB1bGwtcmVxdWVzdC1jbG9zZWQiLDYwMzc4KSxnaXRQdWxsUmVxdWVzdERyYWZ0OmMoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLDYwMzc5KSxkZWJ1Z0FsbDpjKCJkZWJ1Zy1hbGwiLDYwMzgwKSxkZWJ1Z0NvdmVyYWdlOmMoImRlYnVnLWNvdmVyYWdlIiw2MDM4MSkscnVuRXJyb3JzOmMoInJ1bi1lcnJvcnMiLDYwMzgyKSxmb2xkZXJMaWJyYXJ5OmMoImZvbGRlci1saWJyYXJ5Iiw2MDM4MyksZGVidWdDb250aW51ZVNtYWxsOmMoImRlYnVnLWNvbnRpbnVlLXNtYWxsIiw2MDM4NCksYmVha2VyU3RvcDpjKCJiZWFrZXItc3RvcCIsNjAzODUpLGdyYXBoTGluZTpjKCJncmFwaC1saW5lIiw2MDM4NiksZ3JhcGhTY2F0dGVyOmMoImdyYXBoLXNjYXR0ZXIiLDYwMzg3KSxwaWVDaGFydDpjKCJwaWUtY2hhcnQiLDYwMzg4KSxicmFja2V0OmMoImJyYWNrZXQiLDYwMTc1KSxicmFja2V0RG90OmMoImJyYWNrZXQtZG90Iiw2MDM4OSksYnJhY2tldEVycm9yOmMoImJyYWNrZXQtZXJyb3IiLDYwMzkwKSxsb2NrU21hbGw6YygibG9jay1zbWFsbCIsNjAzOTEpLGF6dXJlRGV2b3BzOmMoImF6dXJlLWRldm9wcyIsNjAzOTIpLHZlcmlmaWVkRmlsbGVkOmMoInZlcmlmaWVkLWZpbGxlZCIsNjAzOTMpLG5ld2xpbmU6YygibmV3bGluZSIsNjAzOTQpLGxheW91dDpjKCJsYXlvdXQiLDYwMzk1KSxsYXlvdXRBY3Rpdml0eWJhckxlZnQ6YygibGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQiLDYwMzk2KSxsYXlvdXRBY3Rpdml0eWJhclJpZ2h0OmMoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIsNjAzOTcpLGxheW91dFBhbmVsTGVmdDpjKCJsYXlvdXQtcGFuZWwtbGVmdCIsNjAzOTgpLGxheW91dFBhbmVsQ2VudGVyOmMoImxheW91dC1wYW5lbC1jZW50ZXIiLDYwMzk5KSxsYXlvdXRQYW5lbEp1c3RpZnk6YygibGF5b3V0LXBhbmVsLWp1c3RpZnkiLDYwNDAwKSxsYXlvdXRQYW5lbFJpZ2h0OmMoImxheW91dC1wYW5lbC1yaWdodCIsNjA0MDEpLGxheW91dFBhbmVsOmMoImxheW91dC1wYW5lbCIsNjA0MDIpLGxheW91dFNpZGViYXJMZWZ0OmMoImxheW91dC1zaWRlYmFyLWxlZnQiLDYwNDAzKSxsYXlvdXRTaWRlYmFyUmlnaHQ6YygibGF5b3V0LXNpZGViYXItcmlnaHQiLDYwNDA0KSxsYXlvdXRTdGF0dXNiYXI6YygibGF5b3V0LXN0YXR1c2JhciIsNjA0MDUpLGxheW91dE1lbnViYXI6YygibGF5b3V0LW1lbnViYXIiLDYwNDA2KSxsYXlvdXRDZW50ZXJlZDpjKCJsYXlvdXQtY2VudGVyZWQiLDYwNDA3KSx0YXJnZXQ6YygidGFyZ2V0Iiw2MDQwOCksaW5kZW50OmMoImluZGVudCIsNjA0MDkpLHJlY29yZFNtYWxsOmMoInJlY29yZC1zbWFsbCIsNjA0MTApLGVycm9yU21hbGw6YygiZXJyb3Itc21hbGwiLDYwNDExKSx0ZXJtaW5hbERlY29yYXRpb25FcnJvcjpjKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWVycm9yIiw2MDQxMSksYXJyb3dDaXJjbGVEb3duOmMoImFycm93LWNpcmNsZS1kb3duIiw2MDQxMiksYXJyb3dDaXJjbGVMZWZ0OmMoImFycm93LWNpcmNsZS1sZWZ0Iiw2MDQxMyksYXJyb3dDaXJjbGVSaWdodDpjKCJhcnJvdy1jaXJjbGUtcmlnaHQiLDYwNDE0KSxhcnJvd0NpcmNsZVVwOmMoImFycm93LWNpcmNsZS11cCIsNjA0MTUpLGxheW91dFNpZGViYXJSaWdodE9mZjpjKCJsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYiLDYwNDE2KSxsYXlvdXRQYW5lbE9mZjpjKCJsYXlvdXQtcGFuZWwtb2ZmIiw2MDQxNyksbGF5b3V0U2lkZWJhckxlZnRPZmY6YygibGF5b3V0LXNpZGViYXItbGVmdC1vZmYiLDYwNDE4KSxibGFuazpjKCJibGFuayIsNjA0MTkpLGhlYXJ0RmlsbGVkOmMoImhlYXJ0LWZpbGxlZCIsNjA0MjApLG1hcDpjKCJtYXAiLDYwNDIxKSxtYXBIb3Jpem9udGFsOmMoIm1hcC1ob3Jpem9udGFsIiw2MDQyMSksZm9sZEhvcml6b250YWw6YygiZm9sZC1ob3Jpem9udGFsIiw2MDQyMSksbWFwRmlsbGVkOmMoIm1hcC1maWxsZWQiLDYwNDIyKSxtYXBIb3Jpem9udGFsRmlsbGVkOmMoIm1hcC1ob3Jpem9udGFsLWZpbGxlZCIsNjA0MjIpLGZvbGRIb3Jpem9udGFsRmlsbGVkOmMoImZvbGQtaG9yaXpvbnRhbC1maWxsZWQiLDYwNDIyKSxjaXJjbGVTbWFsbDpjKCJjaXJjbGUtc21hbGwiLDYwNDIzKSxiZWxsU2xhc2g6YygiYmVsbC1zbGFzaCIsNjA0MjQpLGJlbGxTbGFzaERvdDpjKCJiZWxsLXNsYXNoLWRvdCIsNjA0MjUpLGNvbW1lbnRVbnJlc29sdmVkOmMoImNvbW1lbnQtdW5yZXNvbHZlZCIsNjA0MjYpLGdpdFB1bGxSZXF1ZXN0R29Ub0NoYW5nZXM6YygiZ2l0LXB1bGwtcmVxdWVzdC1nby10by1jaGFuZ2VzIiw2MDQyNyksZ2l0UHVsbFJlcXVlc3ROZXdDaGFuZ2VzOmMoImdpdC1wdWxsLXJlcXVlc3QtbmV3LWNoYW5nZXMiLDYwNDI4KSxzZWFyY2hGdXp6eTpjKCJzZWFyY2gtZnV6enkiLDYwNDI5KSxjb21tZW50RHJhZnQ6YygiY29tbWVudC1kcmFmdCIsNjA0MzApLHNlbmQ6Yygic2VuZCIsNjA0MzEpLHNwYXJrbGU6Yygic3BhcmtsZSIsNjA0MzIpLGluc2VydDpjKCJpbnNlcnQiLDYwNDMzKSxtaWM6YygibWljIiw2MDQzNCksdGh1bWJzZG93bkZpbGxlZDpjKCJ0aHVtYnNkb3duLWZpbGxlZCIsNjA0MzUpLHRodW1ic3VwRmlsbGVkOmMoInRodW1ic3VwLWZpbGxlZCIsNjA0MzYpLGNvZmZlZTpjKCJjb2ZmZWUiLDYwNDM3KSxzbmFrZTpjKCJzbmFrZSIsNjA0MzgpLGdhbWU6YygiZ2FtZSIsNjA0MzkpLHZyOmMoInZyIiw2MDQ0MCksY2hpcDpjKCJjaGlwIiw2MDQ0MSkscGlhbm86YygicGlhbm8iLDYwNDQyKSxtdXNpYzpjKCJtdXNpYyIsNjA0NDMpLG1pY0ZpbGxlZDpjKCJtaWMtZmlsbGVkIiw2MDQ0NCkscmVwb0ZldGNoOmMoInJlcG8tZmV0Y2giLDYwNDQ1KSxjb3BpbG90OmMoImNvcGlsb3QiLDYwNDQ2KSxsaWdodGJ1bGJTcGFya2xlOmMoImxpZ2h0YnVsYi1zcGFya2xlIiw2MDQ0Nykscm9ib3Q6Yygicm9ib3QiLDYwNDQ4KSxzcGFya2xlRmlsbGVkOmMoInNwYXJrbGUtZmlsbGVkIiw2MDQ0OSksZGlmZlNpbmdsZTpjKCJkaWZmLXNpbmdsZSIsNjA0NTApLGRpZmZNdWx0aXBsZTpjKCJkaWZmLW11bHRpcGxlIiw2MDQ1MSksc3Vycm91bmRXaXRoOmMoInN1cnJvdW5kLXdpdGgiLDYwNDUyKSxzaGFyZTpjKCJzaGFyZSIsNjA0NTMpLGdpdFN0YXNoOmMoImdpdC1zdGFzaCIsNjA0NTQpLGdpdFN0YXNoQXBwbHk6YygiZ2l0LXN0YXNoLWFwcGx5Iiw2MDQ1NSksZ2l0U3Rhc2hQb3A6YygiZ2l0LXN0YXNoLXBvcCIsNjA0NTYpLHZzY29kZTpjKCJ2c2NvZGUiLDYwNDU3KSx2c2NvZGVJbnNpZGVyczpjKCJ2c2NvZGUtaW5zaWRlcnMiLDYwNDU4KSxjb2RlT3NzOmMoImNvZGUtb3NzIiw2MDQ1OSkscnVuQ292ZXJhZ2U6YygicnVuLWNvdmVyYWdlIiw2MDQ2MCkscnVuQWxsQ292ZXJhZ2U6YygicnVuLWFsbC1jb3ZlcmFnZSIsNjA0NjEpLGNvdmVyYWdlOmMoImNvdmVyYWdlIiw2MDQ2MiksZ2l0aHViUHJvamVjdDpjKCJnaXRodWItcHJvamVjdCIsNjA0NjMpLG1hcFZlcnRpY2FsOmMoIm1hcC12ZXJ0aWNhbCIsNjA0NjQpLGZvbGRWZXJ0aWNhbDpjKCJmb2xkLXZlcnRpY2FsIiw2MDQ2NCksbWFwVmVydGljYWxGaWxsZWQ6YygibWFwLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpLGZvbGRWZXJ0aWNhbEZpbGxlZDpjKCJmb2xkLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpfSxsbD17ZGlhbG9nRXJyb3I6YygiZGlhbG9nLWVycm9yIiwiZXJyb3IiKSxkaWFsb2dXYXJuaW5nOmMoImRpYWxvZy13YXJuaW5nIiwid2FybmluZyIpLGRpYWxvZ0luZm86YygiZGlhbG9nLWluZm8iLCJpbmZvIiksZGlhbG9nQ2xvc2U6YygiZGlhbG9nLWNsb3NlIiwiY2xvc2UiKSx0cmVlSXRlbUV4cGFuZGVkOmMoInRyZWUtaXRlbS1leHBhbmRlZCIsImNoZXZyb24tZG93biIpLHRyZWVGaWx0ZXJPblR5cGVPbjpjKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIiwibGlzdC1maWx0ZXIiKSx0cmVlRmlsdGVyT25UeXBlT2ZmOmMoInRyZWUtZmlsdGVyLW9uLXR5cGUtb2ZmIiwibGlzdC1zZWxlY3Rpb24iKSx0cmVlRmlsdGVyQ2xlYXI6YygidHJlZS1maWx0ZXItY2xlYXIiLCJjbG9zZSIpLHRyZWVJdGVtTG9hZGluZzpjKCJ0cmVlLWl0ZW0tbG9hZGluZyIsImxvYWRpbmciKSxtZW51U2VsZWN0aW9uOmMoIm1lbnUtc2VsZWN0aW9uIiwiY2hlY2siKSxtZW51U3VibWVudTpjKCJtZW51LXN1Ym1lbnUiLCJjaGV2cm9uLXJpZ2h0IiksbWVudUJhck1vcmU6YygibWVudWJhci1tb3JlIiwibW9yZSIpLHNjcm9sbGJhckJ1dHRvbkxlZnQ6Yygic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IiwidHJpYW5nbGUtbGVmdCIpLHNjcm9sbGJhckJ1dHRvblJpZ2h0OmMoInNjcm9sbGJhci1idXR0b24tcmlnaHQiLCJ0cmlhbmdsZS1yaWdodCIpLHNjcm9sbGJhckJ1dHRvblVwOmMoInNjcm9sbGJhci1idXR0b24tdXAiLCJ0cmlhbmdsZS11cCIpLHNjcm9sbGJhckJ1dHRvbkRvd246Yygic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIiwidHJpYW5nbGUtZG93biIpLHRvb2xCYXJNb3JlOmMoInRvb2xiYXItbW9yZSIsIm1vcmUiKSxxdWlja0lucHV0QmFjazpjKCJxdWljay1pbnB1dC1iYWNrIiwiYXJyb3ctbGVmdCIpLGRyb3BEb3duQnV0dG9uOmMoImRyb3AtZG93bi1idXR0b24iLDYwMDg0KSxzeW1ib2xDdXN0b21Db2xvcjpjKCJzeW1ib2wtY3VzdG9tY29sb3IiLDYwMjUyKSxleHBvcnRJY29uOmMoImV4cG9ydCIsNjAzMzIpLHdvcmtzcGFjZVVuc3BlY2lmaWVkOmMoIndvcmtzcGFjZS11bnNwZWNpZmllZCIsNjAzNTUpLG5ld0xpbmU6YygibmV3bGluZSIsNjAzOTQpLHRodW1ic0Rvd25GaWxsZWQ6YygidGh1bWJzZG93bi1maWxsZWQiLDYwNDM1KSx0aHVtYnNVcEZpbGxlZDpjKCJ0aHVtYnN1cC1maWxsZWQiLDYwNDM2KSxnaXRGZXRjaDpjKCJnaXQtZmV0Y2giLDYwNDQ1KSxsaWdodGJ1bGJTcGFya2xlQXV0b2ZpeDpjKCJsaWdodGJ1bGItc3BhcmtsZS1hdXRvZml4Iiw2MDQ0NyksZGVidWdCcmVha3BvaW50UGVuZGluZzpjKCJkZWJ1Zy1icmVha3BvaW50LXBlbmRpbmciLDYwMzc3KX0scT17Li4ub2wsLi4ubGx9O2NsYXNzIHVse2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHM9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgQWUsdGhpcy5vbkRpZENoYW5nZT10aGlzLl9vbkRpZENoYW5nZS5ldmVudCx0aGlzLl9jb2xvck1hcD1udWxsfWhhbmRsZUNoYW5nZSh0KXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOnQsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIodCxuKXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuc2V0KHQsbiksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSxZdCgoKT0+e3RoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KT09PW4mJih0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5kZWxldGUodCksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSl9KX1nZXQodCl7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KXx8bnVsbH1yZWdpc3RlckZhY3RvcnkodCxuKXt2YXIgcjsocj10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpKT09PW51bGx8fHI9PT12b2lkIDB8fHIuZGlzcG9zZSgpO2NvbnN0IGk9bmV3IGNsKHRoaXMsdCxuKTtyZXR1cm4gdGhpcy5fZmFjdG9yaWVzLnNldCh0LGkpLFl0KCgpPT57Y29uc3Qgcz10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpOyFzfHxzIT09aXx8KHRoaXMuX2ZhY3Rvcmllcy5kZWxldGUodCkscy5kaXNwb3NlKCkpfSl9YXN5bmMgZ2V0T3JDcmVhdGUodCl7Y29uc3Qgbj10aGlzLmdldCh0KTtpZihuKXJldHVybiBuO2NvbnN0IHI9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtyZXR1cm4hcnx8ci5pc1Jlc29sdmVkP251bGw6KGF3YWl0IHIucmVzb2x2ZSgpLHRoaXMuZ2V0KHQpKX1pc1Jlc29sdmVkKHQpe2lmKHRoaXMuZ2V0KHQpKXJldHVybiEwO2NvbnN0IHI9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtyZXR1cm4hISghcnx8ci5pc1Jlc29sdmVkKX1zZXRDb2xvck1hcCh0KXt0aGlzLl9jb2xvck1hcD10LHRoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6QXJyYXkuZnJvbSh0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5rZXlzKCkpLGNoYW5nZWRDb2xvck1hcDohMH0pfWdldENvbG9yTWFwKCl7cmV0dXJuIHRoaXMuX2NvbG9yTWFwfWdldERlZmF1bHRCYWNrZ3JvdW5kKCl7cmV0dXJuIHRoaXMuX2NvbG9yTWFwJiZ0aGlzLl9jb2xvck1hcC5sZW5ndGg+Mj90aGlzLl9jb2xvck1hcFsyXTpudWxsfX1jbGFzcyBjbCBleHRlbmRzIE10e2dldCBpc1Jlc29sdmVkKCl7cmV0dXJuIHRoaXMuX2lzUmVzb2x2ZWR9Y29uc3RydWN0b3IodCxuLHIpe3N1cGVyKCksdGhpcy5fcmVnaXN0cnk9dCx0aGlzLl9sYW5ndWFnZUlkPW4sdGhpcy5fZmFjdG9yeT1yLHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5fcmVzb2x2ZVByb21pc2U9bnVsbCx0aGlzLl9pc1Jlc29sdmVkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkPSEwLHN1cGVyLmRpc3Bvc2UoKX1hc3luYyByZXNvbHZlKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVQcm9taXNlfHwodGhpcy5fcmVzb2x2ZVByb21pc2U9dGhpcy5fY3JlYXRlKCkpLHRoaXMuX3Jlc29sdmVQcm9taXNlfWFzeW5jIF9jcmVhdGUoKXtjb25zdCB0PWF3YWl0IHRoaXMuX2ZhY3RvcnkudG9rZW5pemF0aW9uU3VwcG9ydDt0aGlzLl9pc1Jlc29sdmVkPSEwLHQmJiF0aGlzLl9pc0Rpc3Bvc2VkJiZ0aGlzLl9yZWdpc3Rlcih0aGlzLl9yZWdpc3RyeS5yZWdpc3Rlcih0aGlzLl9sYW5ndWFnZUlkLHQpKX19Y2xhc3MgZmx7Y29uc3RydWN0b3IodCxuLHIpe3RoaXMub2Zmc2V0PXQsdGhpcy50eXBlPW4sdGhpcy5sYW5ndWFnZT1yLHRoaXMuX3Rva2VuQnJhbmQ9dm9pZCAwfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMub2Zmc2V0KyIsICIrdGhpcy50eXBlKyIpIn19dmFyIGNpOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxxLnN5bWJvbE1ldGhvZCksdC5zZXQoMSxxLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgyLHEuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMscS5zeW1ib2xGaWVsZCksdC5zZXQoNCxxLnN5bWJvbFZhcmlhYmxlKSx0LnNldCg1LHEuc3ltYm9sQ2xhc3MpLHQuc2V0KDYscS5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcscS5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDgscS5zeW1ib2xNb2R1bGUpLHQuc2V0KDkscS5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAscS5zeW1ib2xFdmVudCksdC5zZXQoMTEscS5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIscS5zeW1ib2xVbml0KSx0LnNldCgxMyxxLnN5bWJvbFZhbHVlKSx0LnNldCgxNSxxLnN5bWJvbEVudW0pLHQuc2V0KDE0LHEuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LHEuc3ltYm9sRW51bSksdC5zZXQoMTYscS5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyxxLnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LHEuc3ltYm9sU25pcHBldCksdC5zZXQoMTgscS5zeW1ib2xUZXh0KSx0LnNldCgxOSxxLnN5bWJvbENvbG9yKSx0LnNldCgyMCxxLnN5bWJvbEZpbGUpLHQuc2V0KDIxLHEuc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMixxLnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxxLnN5bWJvbEZvbGRlciksdC5zZXQoMjQscS5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSxxLmFjY291bnQpLHQuc2V0KDI2LHEuaXNzdWVzKTtmdW5jdGlvbiBuKHMpe2xldCBhPXQuZ2V0KHMpO3JldHVybiBhfHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitzKSxhPXEuc3ltYm9sUHJvcGVydHkpLGF9ZS50b0ljb249bjtjb25zdCByPW5ldyBNYXA7ci5zZXQoIm1ldGhvZCIsMCksci5zZXQoImZ1bmN0aW9uIiwxKSxyLnNldCgiY29uc3RydWN0b3IiLDIpLHIuc2V0KCJmaWVsZCIsMyksci5zZXQoInZhcmlhYmxlIiw0KSxyLnNldCgiY2xhc3MiLDUpLHIuc2V0KCJzdHJ1Y3QiLDYpLHIuc2V0KCJpbnRlcmZhY2UiLDcpLHIuc2V0KCJtb2R1bGUiLDgpLHIuc2V0KCJwcm9wZXJ0eSIsOSksci5zZXQoImV2ZW50IiwxMCksci5zZXQoIm9wZXJhdG9yIiwxMSksci5zZXQoInVuaXQiLDEyKSxyLnNldCgidmFsdWUiLDEzKSxyLnNldCgiY29uc3RhbnQiLDE0KSxyLnNldCgiZW51bSIsMTUpLHIuc2V0KCJlbnVtLW1lbWJlciIsMTYpLHIuc2V0KCJlbnVtTWVtYmVyIiwxNiksci5zZXQoImtleXdvcmQiLDE3KSxyLnNldCgic25pcHBldCIsMjcpLHIuc2V0KCJ0ZXh0IiwxOCksci5zZXQoImNvbG9yIiwxOSksci5zZXQoImZpbGUiLDIwKSxyLnNldCgicmVmZXJlbmNlIiwyMSksci5zZXQoImN1c3RvbWNvbG9yIiwyMiksci5zZXQoImZvbGRlciIsMjMpLHIuc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLHIuc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCksci5zZXQoImFjY291bnQiLDI1KSxyLnNldCgiaXNzdWUiLDI2KTtmdW5jdGlvbiBpKHMsYSl7bGV0IG89ci5nZXQocyk7cmV0dXJuIHR5cGVvZiBvPiJ1IiYmIWEmJihvPTkpLG99ZS5mcm9tU3RyaW5nPWl9KShjaXx8KGNpPXt9KSk7dmFyIGZpOyhmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifSkoZml8fChmaT17fSkpO3ZhciBoaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuUGFzdGVBcz0xXT0iUGFzdGVBcyJ9KShoaXx8KGhpPXt9KSk7dmFyIGRpOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KShkaXx8KGRpPXt9KSk7dmFyIGdpOyhmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifSkoZ2l8fChnaT17fSkpLFooIkFycmF5IiwiYXJyYXkiKSxaKCJCb29sZWFuIiwiYm9vbGVhbiIpLFooIkNsYXNzIiwiY2xhc3MiKSxaKCJDb25zdGFudCIsImNvbnN0YW50IiksWigiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIpLFooIkVudW0iLCJlbnVtZXJhdGlvbiIpLFooIkVudW1NZW1iZXIiLCJlbnVtZXJhdGlvbiBtZW1iZXIiKSxaKCJFdmVudCIsImV2ZW50IiksWigiRmllbGQiLCJmaWVsZCIpLFooIkZpbGUiLCJmaWxlIiksWigiRnVuY3Rpb24iLCJmdW5jdGlvbiIpLFooIkludGVyZmFjZSIsImludGVyZmFjZSIpLFooIktleSIsImtleSIpLFooIk1ldGhvZCIsIm1ldGhvZCIpLFooIk1vZHVsZSIsIm1vZHVsZSIpLFooIk5hbWVzcGFjZSIsIm5hbWVzcGFjZSIpLFooIk51bGwiLCJudWxsIiksWigiTnVtYmVyIiwibnVtYmVyIiksWigiT2JqZWN0Iiwib2JqZWN0IiksWigiT3BlcmF0b3IiLCJvcGVyYXRvciIpLFooIlBhY2thZ2UiLCJwYWNrYWdlIiksWigiUHJvcGVydHkiLCJwcm9wZXJ0eSIpLFooIlN0cmluZyIsInN0cmluZyIpLFooIlN0cnVjdCIsInN0cnVjdCIpLFooIlR5cGVQYXJhbWV0ZXIiLCJ0eXBlIHBhcmFtZXRlciIpLFooIlZhcmlhYmxlIiwidmFyaWFibGUiKTt2YXIgbWk7KGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLHEuc3ltYm9sRmlsZSksdC5zZXQoMSxxLnN5bWJvbE1vZHVsZSksdC5zZXQoMixxLnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyxxLnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQscS5zeW1ib2xDbGFzcyksdC5zZXQoNSxxLnN5bWJvbE1ldGhvZCksdC5zZXQoNixxLnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LHEuc3ltYm9sRmllbGQpLHQuc2V0KDgscS5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSxxLnN5bWJvbEVudW0pLHQuc2V0KDEwLHEuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCgxMSxxLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMixxLnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxxLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNCxxLnN5bWJvbFN0cmluZyksdC5zZXQoMTUscS5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LHEuc3ltYm9sQm9vbGVhbiksdC5zZXQoMTcscS5zeW1ib2xBcnJheSksdC5zZXQoMTgscS5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LHEuc3ltYm9sS2V5KSx0LnNldCgyMCxxLnN5bWJvbE51bGwpLHQuc2V0KDIxLHEuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIscS5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDIzLHEuc3ltYm9sRXZlbnQpLHQuc2V0KDI0LHEuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LHEuc3ltYm9sVHlwZVBhcmFtZXRlcik7ZnVuY3Rpb24gbihyKXtsZXQgaT10LmdldChyKTtyZXR1cm4gaXx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK3IpLGk9cS5zeW1ib2xQcm9wZXJ0eSksaX1lLnRvSWNvbj1ufSkobWl8fChtaT17fSkpO3ZhciBwaTsoZnVuY3Rpb24oZSl7ZVtlLkFJR2VuZXJhdGVkPTFdPSJBSUdlbmVyYXRlZCJ9KShwaXx8KHBpPXt9KSk7dmFyIHZpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiFufHx0eXBlb2YgbiE9Im9iamVjdCI/ITE6dHlwZW9mIG4uaWQ9PSJzdHJpbmciJiZ0eXBlb2Ygbi50aXRsZT09InN0cmluZyJ9ZS5pcz10fSkodml8fCh2aT17fSkpO3ZhciBiaTsoZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KShiaXx8KGJpPXt9KSksbmV3IHVsO3ZhciB4aTsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoeGl8fCh4aT17fSkpO3ZhciB5aTsoZnVuY3Rpb24oZSl7ZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5EaXNhYmxlZD0xXT0iRGlzYWJsZWQiLGVbZS5FbmFibGVkPTJdPSJFbmFibGVkIn0pKHlpfHwoeWk9e30pKTt2YXIgd2k7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLkF1dG89Ml09IkF1dG8ifSkod2l8fCh3aT17fSkpO3ZhciBfaTsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwV2hpdGVzcGFjZT0xXT0iS2VlcFdoaXRlc3BhY2UiLGVbZS5JbnNlcnRBc1NuaXBwZXQ9NF09Ikluc2VydEFzU25pcHBldCJ9KShfaXx8KF9pPXt9KSk7dmFyIFNpOyhmdW5jdGlvbihlKXtlW2UuTWV0aG9kPTBdPSJNZXRob2QiLGVbZS5GdW5jdGlvbj0xXT0iRnVuY3Rpb24iLGVbZS5Db25zdHJ1Y3Rvcj0yXT0iQ29uc3RydWN0b3IiLGVbZS5GaWVsZD0zXT0iRmllbGQiLGVbZS5WYXJpYWJsZT00XT0iVmFyaWFibGUiLGVbZS5DbGFzcz01XT0iQ2xhc3MiLGVbZS5TdHJ1Y3Q9Nl09IlN0cnVjdCIsZVtlLkludGVyZmFjZT03XT0iSW50ZXJmYWNlIixlW2UuTW9kdWxlPThdPSJNb2R1bGUiLGVbZS5Qcm9wZXJ0eT05XT0iUHJvcGVydHkiLGVbZS5FdmVudD0xMF09IkV2ZW50IixlW2UuT3BlcmF0b3I9MTFdPSJPcGVyYXRvciIsZVtlLlVuaXQ9MTJdPSJVbml0IixlW2UuVmFsdWU9MTNdPSJWYWx1ZSIsZVtlLkNvbnN0YW50PTE0XT0iQ29uc3RhbnQiLGVbZS5FbnVtPTE1XT0iRW51bSIsZVtlLkVudW1NZW1iZXI9MTZdPSJFbnVtTWVtYmVyIixlW2UuS2V5d29yZD0xN109IktleXdvcmQiLGVbZS5UZXh0PTE4XT0iVGV4dCIsZVtlLkNvbG9yPTE5XT0iQ29sb3IiLGVbZS5GaWxlPTIwXT0iRmlsZSIsZVtlLlJlZmVyZW5jZT0yMV09IlJlZmVyZW5jZSIsZVtlLkN1c3RvbWNvbG9yPTIyXT0iQ3VzdG9tY29sb3IiLGVbZS5Gb2xkZXI9MjNdPSJGb2xkZXIiLGVbZS5UeXBlUGFyYW1ldGVyPTI0XT0iVHlwZVBhcmFtZXRlciIsZVtlLlVzZXI9MjVdPSJVc2VyIixlW2UuSXNzdWU9MjZdPSJJc3N1ZSIsZVtlLlNuaXBwZXQ9MjddPSJTbmlwcGV0In0pKFNpfHwoU2k9e30pKTt2YXIgTGk7KGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0pKExpfHwoTGk9e30pKTt2YXIgTmk7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9MV09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5UcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zPTJdPSJUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zIn0pKE5pfHwoTmk9e30pKTt2YXIgQWk7KGZ1bmN0aW9uKGUpe2VbZS5FWEFDVD0wXT0iRVhBQ1QiLGVbZS5BQk9WRT0xXT0iQUJPVkUiLGVbZS5CRUxPVz0yXT0iQkVMT1cifSkoQWl8fChBaT17fSkpO3ZhciBDaTsoZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0pKENpfHwoQ2k9e30pKTt2YXIga2k7KGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKGtpfHwoa2k9e30pKTt2YXIgRWk7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KShFaXx8KEVpPXt9KSk7dmFyIE1pOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0pKE1pfHwoTWk9e30pKTt2YXIgUmk7KGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hcmlhUmVxdWlyZWQ9NV09ImFyaWFSZXF1aXJlZCIsZVtlLmF1dG9DbG9zaW5nQnJhY2tldHM9Nl09ImF1dG9DbG9zaW5nQnJhY2tldHMiLGVbZS5hdXRvQ2xvc2luZ0NvbW1lbnRzPTddPSJhdXRvQ2xvc2luZ0NvbW1lbnRzIixlW2Uuc2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uPThdPSJzY3JlZW5SZWFkZXJBbm5vdW5jZUlubGluZVN1Z2dlc3Rpb24iLGVbZS5hdXRvQ2xvc2luZ0RlbGV0ZT05XT0iYXV0b0Nsb3NpbmdEZWxldGUiLGVbZS5hdXRvQ2xvc2luZ092ZXJ0eXBlPTEwXT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPTExXT0iYXV0b0Nsb3NpbmdRdW90ZXMiLGVbZS5hdXRvSW5kZW50PTEyXT0iYXV0b0luZGVudCIsZVtlLmF1dG9tYXRpY0xheW91dD0xM109ImF1dG9tYXRpY0xheW91dCIsZVtlLmF1dG9TdXJyb3VuZD0xNF09ImF1dG9TdXJyb3VuZCIsZVtlLmJyYWNrZXRQYWlyQ29sb3JpemF0aW9uPTE1XT0iYnJhY2tldFBhaXJDb2xvcml6YXRpb24iLGVbZS5ndWlkZXM9MTZdPSJndWlkZXMiLGVbZS5jb2RlTGVucz0xN109ImNvZGVMZW5zIixlW2UuY29kZUxlbnNGb250RmFtaWx5PTE4XT0iY29kZUxlbnNGb250RmFtaWx5IixlW2UuY29kZUxlbnNGb250U2l6ZT0xOV09ImNvZGVMZW5zRm9udFNpemUiLGVbZS5jb2xvckRlY29yYXRvcnM9MjBdPSJjb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNMaW1pdD0yMV09ImNvbG9yRGVjb3JhdG9yc0xpbWl0IixlW2UuY29sdW1uU2VsZWN0aW9uPTIyXT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MjNdPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTI0XT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yNV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjZdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTI3XT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yOF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yOV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MzBdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0zMV09ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0zMl09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0zM109ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzRdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTM1XT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zNl09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzddPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbFdoaXRlc3BhY2VSZW5kZXJpbmc9MzhdPSJleHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzldPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT00MF09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9NDFdPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9NDJdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9NDNdPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTQ0XT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD00NV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00Nl09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQ3XT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQ4XT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00OV09ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz01MF09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz01MV09ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT01Ml09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD01M109ImZvbnRXZWlnaHQiLGVbZS5mb250VmFyaWF0aW9ucz01NF09ImZvbnRWYXJpYXRpb25zIixlW2UuZm9ybWF0T25QYXN0ZT01NV09ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTZdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01N109ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTU4XT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01OV09ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj02MF09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTYxXT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD02Ml09ImlubGluZVN1Z2dlc3QiLGVbZS5pbmxpbmVFZGl0PTYzXT0iaW5saW5lRWRpdCIsZVtlLmxldHRlclNwYWNpbmc9NjRdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTY1XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjZdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjddPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjhdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjldPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz03MF09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz03MV09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz03Ml09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTczXT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NzRdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTc1XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzZdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03N109Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzhdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03OV09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5tdWx0aUN1cnNvckxpbWl0PTgwXT0ibXVsdGlDdXJzb3JMaW1pdCIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTgxXT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTgyXT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz04M109Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9ODRdPSJwYWRkaW5nIixlW2UucGFzdGVBcz04NV09InBhc3RlQXMiLGVbZS5wYXJhbWV0ZXJIaW50cz04Nl09InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz04N109InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5kZWZpbml0aW9uTGlua09wZW5zSW5QZWVrPTg4XT0iZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlayIsZVtlLnF1aWNrU3VnZ2VzdGlvbnM9ODldPSJxdWlja1N1Z2dlc3Rpb25zIixlW2UucXVpY2tTdWdnZXN0aW9uc0RlbGF5PTkwXT0icXVpY2tTdWdnZXN0aW9uc0RlbGF5IixlW2UucmVhZE9ubHk9OTFdPSJyZWFkT25seSIsZVtlLnJlYWRPbmx5TWVzc2FnZT05Ml09InJlYWRPbmx5TWVzc2FnZSIsZVtlLnJlbmFtZU9uVHlwZT05M109InJlbmFtZU9uVHlwZSIsZVtlLnJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzPTk0XT0icmVuZGVyQ29udHJvbENoYXJhY3RlcnMiLGVbZS5yZW5kZXJGaW5hbE5ld2xpbmU9OTVdPSJyZW5kZXJGaW5hbE5ld2xpbmUiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0PTk2XT0icmVuZGVyTGluZUhpZ2hsaWdodCIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzPTk3XT0icmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXMiLGVbZS5yZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnM9OThdPSJyZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnMiLGVbZS5yZW5kZXJXaGl0ZXNwYWNlPTk5XT0icmVuZGVyV2hpdGVzcGFjZSIsZVtlLnJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmc9MTAwXT0icmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZyIsZVtlLnJvdW5kZWRTZWxlY3Rpb249MTAxXT0icm91bmRlZFNlbGVjdGlvbiIsZVtlLnJ1bGVycz0xMDJdPSJydWxlcnMiLGVbZS5zY3JvbGxiYXI9MTAzXT0ic2Nyb2xsYmFyIixlW2Uuc2Nyb2xsQmV5b25kTGFzdENvbHVtbj0xMDRdPSJzY3JvbGxCZXlvbmRMYXN0Q29sdW1uIixlW2Uuc2Nyb2xsQmV5b25kTGFzdExpbmU9MTA1XT0ic2Nyb2xsQmV5b25kTGFzdExpbmUiLGVbZS5zY3JvbGxQcmVkb21pbmFudEF4aXM9MTA2XT0ic2Nyb2xsUHJlZG9taW5hbnRBeGlzIixlW2Uuc2VsZWN0aW9uQ2xpcGJvYXJkPTEwN109InNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLnNlbGVjdGlvbkhpZ2hsaWdodD0xMDhdPSJzZWxlY3Rpb25IaWdobGlnaHQiLGVbZS5zZWxlY3RPbkxpbmVOdW1iZXJzPTEwOV09InNlbGVjdE9uTGluZU51bWJlcnMiLGVbZS5zaG93Rm9sZGluZ0NvbnRyb2xzPTExMF09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTExMV09InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTEyXT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTEzXT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTE0XT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5U2Nyb2xsPTExNV09InN0aWNreVNjcm9sbCIsZVtlLnN0aWNreVRhYlN0b3BzPTExNl09InN0aWNreVRhYlN0b3BzIixlW2Uuc3RvcFJlbmRlcmluZ0xpbmVBZnRlcj0xMTddPSJzdG9wUmVuZGVyaW5nTGluZUFmdGVyIixlW2Uuc3VnZ2VzdD0xMThdPSJzdWdnZXN0IixlW2Uuc3VnZ2VzdEZvbnRTaXplPTExOV09InN1Z2dlc3RGb250U2l6ZSIsZVtlLnN1Z2dlc3RMaW5lSGVpZ2h0PTEyMF09InN1Z2dlc3RMaW5lSGVpZ2h0IixlW2Uuc3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnM9MTIxXT0ic3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnMiLGVbZS5zdWdnZXN0U2VsZWN0aW9uPTEyMl09InN1Z2dlc3RTZWxlY3Rpb24iLGVbZS50YWJDb21wbGV0aW9uPTEyM109InRhYkNvbXBsZXRpb24iLGVbZS50YWJJbmRleD0xMjRdPSJ0YWJJbmRleCIsZVtlLnVuaWNvZGVIaWdobGlnaHRpbmc9MTI1XT0idW5pY29kZUhpZ2hsaWdodGluZyIsZVtlLnVudXN1YWxMaW5lVGVybWluYXRvcnM9MTI2XT0idW51c3VhbExpbmVUZXJtaW5hdG9ycyIsZVtlLnVzZVNoYWRvd0RPTT0xMjddPSJ1c2VTaGFkb3dET00iLGVbZS51c2VUYWJTdG9wcz0xMjhdPSJ1c2VUYWJTdG9wcyIsZVtlLndvcmRCcmVhaz0xMjldPSJ3b3JkQnJlYWsiLGVbZS53b3JkU2VnbWVudGVyTG9jYWxlcz0xMzBdPSJ3b3JkU2VnbWVudGVyTG9jYWxlcyIsZVtlLndvcmRTZXBhcmF0b3JzPTEzMV09IndvcmRTZXBhcmF0b3JzIixlW2Uud29yZFdyYXA9MTMyXT0id29yZFdyYXAiLGVbZS53b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzPTEzM109IndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycz0xMzRdPSJ3b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQ29sdW1uPTEzNV09IndvcmRXcmFwQ29sdW1uIixlW2Uud29yZFdyYXBPdmVycmlkZTE9MTM2XT0id29yZFdyYXBPdmVycmlkZTEiLGVbZS53b3JkV3JhcE92ZXJyaWRlMj0xMzddPSJ3b3JkV3JhcE92ZXJyaWRlMiIsZVtlLndyYXBwaW5nSW5kZW50PTEzOF09IndyYXBwaW5nSW5kZW50IixlW2Uud3JhcHBpbmdTdHJhdGVneT0xMzldPSJ3cmFwcGluZ1N0cmF0ZWd5IixlW2Uuc2hvd0RlcHJlY2F0ZWQ9MTQwXT0ic2hvd0RlcHJlY2F0ZWQiLGVbZS5pbmxheUhpbnRzPTE0MV09ImlubGF5SGludHMiLGVbZS5lZGl0b3JDbGFzc05hbWU9MTQyXT0iZWRpdG9yQ2xhc3NOYW1lIixlW2UucGl4ZWxSYXRpbz0xNDNdPSJwaXhlbFJhdGlvIixlW2UudGFiRm9jdXNNb2RlPTE0NF09InRhYkZvY3VzTW9kZSIsZVtlLmxheW91dEluZm89MTQ1XT0ibGF5b3V0SW5mbyIsZVtlLndyYXBwaW5nSW5mbz0xNDZdPSJ3cmFwcGluZ0luZm8iLGVbZS5kZWZhdWx0Q29sb3JEZWNvcmF0b3JzPTE0N109ImRlZmF1bHRDb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNBY3RpdmF0ZWRPbj0xNDhdPSJjb2xvckRlY29yYXRvcnNBY3RpdmF0ZWRPbiIsZVtlLmlubGluZUNvbXBsZXRpb25zQWNjZXNzaWJpbGl0eVZlcmJvc2U9MTQ5XT0iaW5saW5lQ29tcGxldGlvbnNBY2Nlc3NpYmlsaXR5VmVyYm9zZSJ9KShSaXx8KFJpPXt9KSk7dmFyIFRpOyhmdW5jdGlvbihlKXtlW2UuVGV4dERlZmluZWQ9MF09IlRleHREZWZpbmVkIixlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KShUaXx8KFRpPXt9KSk7dmFyIFBpOyhmdW5jdGlvbihlKXtlW2UuTEY9MF09IkxGIixlW2UuQ1JMRj0xXT0iQ1JMRiJ9KShQaXx8KFBpPXt9KSk7dmFyIEZpOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9M109IlJpZ2h0In0pKEZpfHwoRmk9e30pKTt2YXIgSWk7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuSW5kZW50PTFdPSJJbmRlbnQiLGVbZS5JbmRlbnRPdXRkZW50PTJdPSJJbmRlbnRPdXRkZW50IixlW2UuT3V0ZGVudD0zXT0iT3V0ZGVudCJ9KShJaXx8KElpPXt9KSk7dmFyIERpOyhmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0pKERpfHwoRGk9e30pKTt2YXIgVmk7KGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSkoVml8fChWaT17fSkpO3ZhciBPaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0pKE9pfHwoT2k9e30pKTt2YXIgamk7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLkF1dG9tYXRpYz0xXT0iQXV0b21hdGljIn0pKGppfHwoamk9e30pKTt2YXIgWW47KGZ1bmN0aW9uKGUpe2VbZS5EZXBlbmRzT25LYkxheW91dD0tMV09IkRlcGVuZHNPbktiTGF5b3V0IixlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkJhY2tzcGFjZT0xXT0iQmFja3NwYWNlIixlW2UuVGFiPTJdPSJUYWIiLGVbZS5FbnRlcj0zXT0iRW50ZXIiLGVbZS5TaGlmdD00XT0iU2hpZnQiLGVbZS5DdHJsPTVdPSJDdHJsIixlW2UuQWx0PTZdPSJBbHQiLGVbZS5QYXVzZUJyZWFrPTddPSJQYXVzZUJyZWFrIixlW2UuQ2Fwc0xvY2s9OF09IkNhcHNMb2NrIixlW2UuRXNjYXBlPTldPSJFc2NhcGUiLGVbZS5TcGFjZT0xMF09IlNwYWNlIixlW2UuUGFnZVVwPTExXT0iUGFnZVVwIixlW2UuUGFnZURvd249MTJdPSJQYWdlRG93biIsZVtlLkVuZD0xM109IkVuZCIsZVtlLkhvbWU9MTRdPSJIb21lIixlW2UuTGVmdEFycm93PTE1XT0iTGVmdEFycm93IixlW2UuVXBBcnJvdz0xNl09IlVwQXJyb3ciLGVbZS5SaWdodEFycm93PTE3XT0iUmlnaHRBcnJvdyIsZVtlLkRvd25BcnJvdz0xOF09IkRvd25BcnJvdyIsZVtlLkluc2VydD0xOV09Ikluc2VydCIsZVtlLkRlbGV0ZT0yMF09IkRlbGV0ZSIsZVtlLkRpZ2l0MD0yMV09IkRpZ2l0MCIsZVtlLkRpZ2l0MT0yMl09IkRpZ2l0MSIsZVtlLkRpZ2l0Mj0yM109IkRpZ2l0MiIsZVtlLkRpZ2l0Mz0yNF09IkRpZ2l0MyIsZVtlLkRpZ2l0ND0yNV09IkRpZ2l0NCIsZVtlLkRpZ2l0NT0yNl09IkRpZ2l0NSIsZVtlLkRpZ2l0Nj0yN109IkRpZ2l0NiIsZVtlLkRpZ2l0Nz0yOF09IkRpZ2l0NyIsZVtlLkRpZ2l0OD0yOV09IkRpZ2l0OCIsZVtlLkRpZ2l0OT0zMF09IkRpZ2l0OSIsZVtlLktleUE9MzFdPSJLZXlBIixlW2UuS2V5Qj0zMl09IktleUIiLGVbZS5LZXlDPTMzXT0iS2V5QyIsZVtlLktleUQ9MzRdPSJLZXlEIixlW2UuS2V5RT0zNV09IktleUUiLGVbZS5LZXlGPTM2XT0iS2V5RiIsZVtlLktleUc9MzddPSJLZXlHIixlW2UuS2V5SD0zOF09IktleUgiLGVbZS5LZXlJPTM5XT0iS2V5SSIsZVtlLktleUo9NDBdPSJLZXlKIixlW2UuS2V5Sz00MV09IktleUsiLGVbZS5LZXlMPTQyXT0iS2V5TCIsZVtlLktleU09NDNdPSJLZXlNIixlW2UuS2V5Tj00NF09IktleU4iLGVbZS5LZXlPPTQ1XT0iS2V5TyIsZVtlLktleVA9NDZdPSJLZXlQIixlW2UuS2V5UT00N109IktleVEiLGVbZS5LZXlSPTQ4XT0iS2V5UiIsZVtlLktleVM9NDldPSJLZXlTIixlW2UuS2V5VD01MF09IktleVQiLGVbZS5LZXlVPTUxXT0iS2V5VSIsZVtlLktleVY9NTJdPSJLZXlWIixlW2UuS2V5Vz01M109IktleVciLGVbZS5LZXlYPTU0XT0iS2V5WCIsZVtlLktleVk9NTVdPSJLZXlZIixlW2UuS2V5Wj01Nl09IktleVoiLGVbZS5NZXRhPTU3XT0iTWV0YSIsZVtlLkNvbnRleHRNZW51PTU4XT0iQ29udGV4dE1lbnUiLGVbZS5GMT01OV09IkYxIixlW2UuRjI9NjBdPSJGMiIsZVtlLkYzPTYxXT0iRjMiLGVbZS5GND02Ml09IkY0IixlW2UuRjU9NjNdPSJGNSIsZVtlLkY2PTY0XT0iRjYiLGVbZS5GNz02NV09IkY3IixlW2UuRjg9NjZdPSJGOCIsZVtlLkY5PTY3XT0iRjkiLGVbZS5GMTA9NjhdPSJGMTAiLGVbZS5GMTE9NjldPSJGMTEiLGVbZS5GMTI9NzBdPSJGMTIiLGVbZS5GMTM9NzFdPSJGMTMiLGVbZS5GMTQ9NzJdPSJGMTQiLGVbZS5GMTU9NzNdPSJGMTUiLGVbZS5GMTY9NzRdPSJGMTYiLGVbZS5GMTc9NzVdPSJGMTciLGVbZS5GMTg9NzZdPSJGMTgiLGVbZS5GMTk9NzddPSJGMTkiLGVbZS5GMjA9NzhdPSJGMjAiLGVbZS5GMjE9NzldPSJGMjEiLGVbZS5GMjI9ODBdPSJGMjIiLGVbZS5GMjM9ODFdPSJGMjMiLGVbZS5GMjQ9ODJdPSJGMjQiLGVbZS5OdW1Mb2NrPTgzXT0iTnVtTG9jayIsZVtlLlNjcm9sbExvY2s9ODRdPSJTY3JvbGxMb2NrIixlW2UuU2VtaWNvbG9uPTg1XT0iU2VtaWNvbG9uIixlW2UuRXF1YWw9ODZdPSJFcXVhbCIsZVtlLkNvbW1hPTg3XT0iQ29tbWEiLGVbZS5NaW51cz04OF09Ik1pbnVzIixlW2UuUGVyaW9kPTg5XT0iUGVyaW9kIixlW2UuU2xhc2g9OTBdPSJTbGFzaCIsZVtlLkJhY2txdW90ZT05MV09IkJhY2txdW90ZSIsZVtlLkJyYWNrZXRMZWZ0PTkyXT0iQnJhY2tldExlZnQiLGVbZS5CYWNrc2xhc2g9OTNdPSJCYWNrc2xhc2giLGVbZS5CcmFja2V0UmlnaHQ9OTRdPSJCcmFja2V0UmlnaHQiLGVbZS5RdW90ZT05NV09IlF1b3RlIixlW2UuT0VNXzg9OTZdPSJPRU1fOCIsZVtlLkludGxCYWNrc2xhc2g9OTddPSJJbnRsQmFja3NsYXNoIixlW2UuTnVtcGFkMD05OF09Ik51bXBhZDAiLGVbZS5OdW1wYWQxPTk5XT0iTnVtcGFkMSIsZVtlLk51bXBhZDI9MTAwXT0iTnVtcGFkMiIsZVtlLk51bXBhZDM9MTAxXT0iTnVtcGFkMyIsZVtlLk51bXBhZDQ9MTAyXT0iTnVtcGFkNCIsZVtlLk51bXBhZDU9MTAzXT0iTnVtcGFkNSIsZVtlLk51bXBhZDY9MTA0XT0iTnVtcGFkNiIsZVtlLk51bXBhZDc9MTA1XT0iTnVtcGFkNyIsZVtlLk51bXBhZDg9MTA2XT0iTnVtcGFkOCIsZVtlLk51bXBhZDk9MTA3XT0iTnVtcGFkOSIsZVtlLk51bXBhZE11bHRpcGx5PTEwOF09Ik51bXBhZE11bHRpcGx5IixlW2UuTnVtcGFkQWRkPTEwOV09Ik51bXBhZEFkZCIsZVtlLk5VTVBBRF9TRVBBUkFUT1I9MTEwXT0iTlVNUEFEX1NFUEFSQVRPUiIsZVtlLk51bXBhZFN1YnRyYWN0PTExMV09Ik51bXBhZFN1YnRyYWN0IixlW2UuTnVtcGFkRGVjaW1hbD0xMTJdPSJOdW1wYWREZWNpbWFsIixlW2UuTnVtcGFkRGl2aWRlPTExM109Ik51bXBhZERpdmlkZSIsZVtlLktFWV9JTl9DT01QT1NJVElPTj0xMTRdPSJLRVlfSU5fQ09NUE9TSVRJT04iLGVbZS5BQk5UX0MxPTExNV09IkFCTlRfQzEiLGVbZS5BQk5UX0MyPTExNl09IkFCTlRfQzIiLGVbZS5BdWRpb1ZvbHVtZU11dGU9MTE3XT0iQXVkaW9Wb2x1bWVNdXRlIixlW2UuQXVkaW9Wb2x1bWVVcD0xMThdPSJBdWRpb1ZvbHVtZVVwIixlW2UuQXVkaW9Wb2x1bWVEb3duPTExOV09IkF1ZGlvVm9sdW1lRG93biIsZVtlLkJyb3dzZXJTZWFyY2g9MTIwXT0iQnJvd3NlclNlYXJjaCIsZVtlLkJyb3dzZXJIb21lPTEyMV09IkJyb3dzZXJIb21lIixlW2UuQnJvd3NlckJhY2s9MTIyXT0iQnJvd3NlckJhY2siLGVbZS5Ccm93c2VyRm9yd2FyZD0xMjNdPSJCcm93c2VyRm9yd2FyZCIsZVtlLk1lZGlhVHJhY2tOZXh0PTEyNF09Ik1lZGlhVHJhY2tOZXh0IixlW2UuTWVkaWFUcmFja1ByZXZpb3VzPTEyNV09Ik1lZGlhVHJhY2tQcmV2aW91cyIsZVtlLk1lZGlhU3RvcD0xMjZdPSJNZWRpYVN0b3AiLGVbZS5NZWRpYVBsYXlQYXVzZT0xMjddPSJNZWRpYVBsYXlQYXVzZSIsZVtlLkxhdW5jaE1lZGlhUGxheWVyPTEyOF09IkxhdW5jaE1lZGlhUGxheWVyIixlW2UuTGF1bmNoTWFpbD0xMjldPSJMYXVuY2hNYWlsIixlW2UuTGF1bmNoQXBwMj0xMzBdPSJMYXVuY2hBcHAyIixlW2UuQ2xlYXI9MTMxXT0iQ2xlYXIiLGVbZS5NQVhfVkFMVUU9MTMyXT0iTUFYX1ZBTFVFIn0pKFlufHwoWW49e30pKTt2YXIgS247KGZ1bmN0aW9uKGUpe2VbZS5IaW50PTFdPSJIaW50IixlW2UuSW5mbz0yXT0iSW5mbyIsZVtlLldhcm5pbmc9NF09Ildhcm5pbmciLGVbZS5FcnJvcj04XT0iRXJyb3IifSkoS258fChLbj17fSkpO3ZhciBlcjsoZnVuY3Rpb24oZSl7ZVtlLlVubmVjZXNzYXJ5PTFdPSJVbm5lY2Vzc2FyeSIsZVtlLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQifSkoZXJ8fChlcj17fSkpO3ZhciBxaTsoZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifSkocWl8fChxaT17fSkpO3ZhciBCaTsoZnVuY3Rpb24oZSl7ZVtlLk5vcm1hbD0xXT0iTm9ybWFsIixlW2UuVW5kZXJsaW5lZD0yXT0iVW5kZXJsaW5lZCJ9KShCaXx8KEJpPXt9KSk7dmFyIFVpOyhmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT0iVU5LTk9XTiIsZVtlLlRFWFRBUkVBPTFdPSJURVhUQVJFQSIsZVtlLkdVVFRFUl9HTFlQSF9NQVJHSU49Ml09IkdVVFRFUl9HTFlQSF9NQVJHSU4iLGVbZS5HVVRURVJfTElORV9OVU1CRVJTPTNdPSJHVVRURVJfTElORV9OVU1CRVJTIixlW2UuR1VUVEVSX0xJTkVfREVDT1JBVElPTlM9NF09IkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TIixlW2UuR1VUVEVSX1ZJRVdfWk9ORT01XT0iR1VUVEVSX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfVEVYVD02XT0iQ09OVEVOVF9URVhUIixlW2UuQ09OVEVOVF9FTVBUWT03XT0iQ09OVEVOVF9FTVBUWSIsZVtlLkNPTlRFTlRfVklFV19aT05FPThdPSJDT05URU5UX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfV0lER0VUPTldPSJDT05URU5UX1dJREdFVCIsZVtlLk9WRVJWSUVXX1JVTEVSPTEwXT0iT1ZFUlZJRVdfUlVMRVIiLGVbZS5TQ1JPTExCQVI9MTFdPSJTQ1JPTExCQVIiLGVbZS5PVkVSTEFZX1dJREdFVD0xMl09Ik9WRVJMQVlfV0lER0VUIixlW2UuT1VUU0lERV9FRElUT1I9MTNdPSJPVVRTSURFX0VESVRPUiJ9KShVaXx8KFVpPXt9KSk7dmFyICRpOyhmdW5jdGlvbihlKXtlW2UuQUlHZW5lcmF0ZWQ9MV09IkFJR2VuZXJhdGVkIn0pKCRpfHwoJGk9e30pKTt2YXIgV2k7KGZ1bmN0aW9uKGUpe2VbZS5UT1BfUklHSFRfQ09STkVSPTBdPSJUT1BfUklHSFRfQ09STkVSIixlW2UuQk9UVE9NX1JJR0hUX0NPUk5FUj0xXT0iQk9UVE9NX1JJR0hUX0NPUk5FUiIsZVtlLlRPUF9DRU5URVI9Ml09IlRPUF9DRU5URVIifSkoV2l8fChXaT17fSkpO3ZhciBIaTsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSkoSGl8fChIaT17fSkpO3ZhciB6aTsoZnVuY3Rpb24oZSl7ZVtlLldvcmQ9MF09IldvcmQiLGVbZS5MaW5lPTFdPSJMaW5lIixlW2UuU3VnZ2VzdD0yXT0iU3VnZ2VzdCJ9KSh6aXx8KHppPXt9KSk7dmFyIEdpOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0wXT0iTGVmdCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLk5vbmU9Ml09Ik5vbmUiLGVbZS5MZWZ0T2ZJbmplY3RlZFRleHQ9M109IkxlZnRPZkluamVjdGVkVGV4dCIsZVtlLlJpZ2h0T2ZJbmplY3RlZFRleHQ9NF09IlJpZ2h0T2ZJbmplY3RlZFRleHQifSkoR2l8fChHaT17fSkpO3ZhciBKaTsoZnVuY3Rpb24oZSl7ZVtlLk9mZj0wXT0iT2ZmIixlW2UuT249MV09Ik9uIixlW2UuUmVsYXRpdmU9Ml09IlJlbGF0aXZlIixlW2UuSW50ZXJ2YWw9M109IkludGVydmFsIixlW2UuQ3VzdG9tPTRdPSJDdXN0b20ifSkoSml8fChKaT17fSkpO3ZhciBYaTsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5UZXh0PTFdPSJUZXh0IixlW2UuQmxvY2tzPTJdPSJCbG9ja3MifSkoWGl8fChYaT17fSkpO3ZhciBRaTsoZnVuY3Rpb24oZSl7ZVtlLlNtb290aD0wXT0iU21vb3RoIixlW2UuSW1tZWRpYXRlPTFdPSJJbW1lZGlhdGUifSkoUWl8fChRaT17fSkpO3ZhciBaaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG89MV09IkF1dG8iLGVbZS5IaWRkZW49Ml09IkhpZGRlbiIsZVtlLlZpc2libGU9M109IlZpc2libGUifSkoWml8fChaaT17fSkpO3ZhciB0cjsoZnVuY3Rpb24oZSl7ZVtlLkxUUj0wXT0iTFRSIixlW2UuUlRMPTFdPSJSVEwifSkodHJ8fCh0cj17fSkpO3ZhciBZaTsoZnVuY3Rpb24oZSl7ZS5PZmY9Im9mZiIsZS5PbkNvZGU9Im9uQ29kZSIsZS5Pbj0ib24ifSkoWWl8fChZaT17fSkpO3ZhciBLaTsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifSkoS2l8fChLaT17fSkpO3ZhciBlczsoZnVuY3Rpb24oZSl7ZVtlLkZpbGU9MF09IkZpbGUiLGVbZS5Nb2R1bGU9MV09Ik1vZHVsZSIsZVtlLk5hbWVzcGFjZT0yXT0iTmFtZXNwYWNlIixlW2UuUGFja2FnZT0zXT0iUGFja2FnZSIsZVtlLkNsYXNzPTRdPSJDbGFzcyIsZVtlLk1ldGhvZD01XT0iTWV0aG9kIixlW2UuUHJvcGVydHk9Nl09IlByb3BlcnR5IixlW2UuRmllbGQ9N109IkZpZWxkIixlW2UuQ29uc3RydWN0b3I9OF09IkNvbnN0cnVjdG9yIixlW2UuRW51bT05XT0iRW51bSIsZVtlLkludGVyZmFjZT0xMF09IkludGVyZmFjZSIsZVtlLkZ1bmN0aW9uPTExXT0iRnVuY3Rpb24iLGVbZS5WYXJpYWJsZT0xMl09IlZhcmlhYmxlIixlW2UuQ29uc3RhbnQ9MTNdPSJDb25zdGFudCIsZVtlLlN0cmluZz0xNF09IlN0cmluZyIsZVtlLk51bWJlcj0xNV09Ik51bWJlciIsZVtlLkJvb2xlYW49MTZdPSJCb29sZWFuIixlW2UuQXJyYXk9MTddPSJBcnJheSIsZVtlLk9iamVjdD0xOF09Ik9iamVjdCIsZVtlLktleT0xOV09IktleSIsZVtlLk51bGw9MjBdPSJOdWxsIixlW2UuRW51bU1lbWJlcj0yMV09IkVudW1NZW1iZXIiLGVbZS5TdHJ1Y3Q9MjJdPSJTdHJ1Y3QiLGVbZS5FdmVudD0yM109IkV2ZW50IixlW2UuT3BlcmF0b3I9MjRdPSJPcGVyYXRvciIsZVtlLlR5cGVQYXJhbWV0ZXI9MjVdPSJUeXBlUGFyYW1ldGVyIn0pKGVzfHwoZXM9e30pKTt2YXIgdHM7KGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0pKHRzfHwodHM9e30pKTt2YXIgbnM7KGZ1bmN0aW9uKGUpe2VbZS5IaWRkZW49MF09IkhpZGRlbiIsZVtlLkJsaW5rPTFdPSJCbGluayIsZVtlLlNtb290aD0yXT0iU21vb3RoIixlW2UuUGhhc2U9M109IlBoYXNlIixlW2UuRXhwYW5kPTRdPSJFeHBhbmQiLGVbZS5Tb2xpZD01XT0iU29saWQifSkobnN8fChucz17fSkpO3ZhciByczsoZnVuY3Rpb24oZSl7ZVtlLkxpbmU9MV09IkxpbmUiLGVbZS5CbG9jaz0yXT0iQmxvY2siLGVbZS5VbmRlcmxpbmU9M109IlVuZGVybGluZSIsZVtlLkxpbmVUaGluPTRdPSJMaW5lVGhpbiIsZVtlLkJsb2NrT3V0bGluZT01XT0iQmxvY2tPdXRsaW5lIixlW2UuVW5kZXJsaW5lVGhpbj02XT0iVW5kZXJsaW5lVGhpbiJ9KShyc3x8KHJzPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0wXT0iQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLk5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0xXT0iTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZT0yXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZSIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdBZnRlcj0zXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyIn0pKGlzfHwoaXM9e30pKTt2YXIgc3M7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuU2FtZT0xXT0iU2FtZSIsZVtlLkluZGVudD0yXT0iSW5kZW50IixlW2UuRGVlcEluZGVudD0zXT0iRGVlcEluZGVudCJ9KShzc3x8KHNzPXt9KSk7Y2xhc3MgUHR7c3RhdGljIGNob3JkKHQsbil7cmV0dXJuIGFsKHQsbil9fVB0LkN0cmxDbWQ9MjA0OCxQdC5TaGlmdD0xMDI0LFB0LkFsdD01MTIsUHQuV2luQ3RybD0yNTY7ZnVuY3Rpb24gaGwoKXtyZXR1cm57ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLENhbmNlbGxhdGlvblRva2VuU291cmNlOm5sLEVtaXR0ZXI6QWUsS2V5Q29kZTpZbixLZXlNb2Q6UHQsUG9zaXRpb246UGUsUmFuZ2U6c2UsU2VsZWN0aW9uOnhlLFNlbGVjdGlvbkRpcmVjdGlvbjp0cixNYXJrZXJTZXZlcml0eTpLbixNYXJrZXJUYWc6ZXIsVXJpOlVuLFRva2VuOmZsfX12YXIgYXM7Y2xhc3MgZGx7Y29uc3RydWN0b3IoKXt0aGlzW2FzXT0iTGlua2VkTWFwIix0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGU9MH1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZSsrfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5faGVhZCYmIXRoaXMuX3RhaWx9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1nZXQgZmlyc3QoKXt2YXIgdDtyZXR1cm4odD10aGlzLl9oZWFkKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQudmFsdWV9Z2V0IGxhc3QoKXt2YXIgdDtyZXR1cm4odD10aGlzLl90YWlsKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQudmFsdWV9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfWdldCh0LG49MCl7Y29uc3Qgcj10aGlzLl9tYXAuZ2V0KHQpO2lmKHIpcmV0dXJuIG4hPT0wJiZ0aGlzLnRvdWNoKHIsbiksci52YWx1ZX1zZXQodCxuLHI9MCl7bGV0IGk9dGhpcy5fbWFwLmdldCh0KTtpZihpKWkudmFsdWU9bixyIT09MCYmdGhpcy50b3VjaChpLHIpO2Vsc2V7c3dpdGNoKGk9e2tleTp0LHZhbHVlOm4sbmV4dDp2b2lkIDAscHJldmlvdXM6dm9pZCAwfSxyKXtjYXNlIDA6dGhpcy5hZGRJdGVtTGFzdChpKTticmVhaztjYXNlIDE6dGhpcy5hZGRJdGVtRmlyc3QoaSk7YnJlYWs7Y2FzZSAyOnRoaXMuYWRkSXRlbUxhc3QoaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmFkZEl0ZW1MYXN0KGkpO2JyZWFrfXRoaXMuX21hcC5zZXQodCxpKSx0aGlzLl9zaXplKyt9cmV0dXJuIHRoaXN9ZGVsZXRlKHQpe3JldHVybiEhdGhpcy5yZW1vdmUodCl9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtpZihuKXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXMucmVtb3ZlSXRlbShuKSx0aGlzLl9zaXplLS0sbi52YWx1ZX1zaGlmdCgpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbClyZXR1cm47aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7Y29uc3QgdD10aGlzLl9oZWFkO3JldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQua2V5KSx0aGlzLnJlbW92ZUl0ZW0odCksdGhpcy5fc2l6ZS0tLHQudmFsdWV9Zm9yRWFjaCh0LG4pe2NvbnN0IHI9dGhpcy5fc3RhdGU7bGV0IGk9dGhpcy5faGVhZDtmb3IoO2k7KXtpZihuP3QuYmluZChuKShpLnZhbHVlLGkua2V5LHRoaXMpOnQoaS52YWx1ZSxpLmtleSx0aGlzKSx0aGlzLl9zdGF0ZSE9PXIpdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aT1pLm5leHR9fWtleXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgcj10aGlzLl9oZWFkO2NvbnN0IGk9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIGl9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYocil7Y29uc3Qgcz17dmFsdWU6ci5rZXksZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9dmFsdWVzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IHI9dGhpcy5faGVhZDtjb25zdCBpPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBpfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKHIpe2NvbnN0IHM9e3ZhbHVlOnIudmFsdWUsZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9ZW50cmllcygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCByPXRoaXMuX2hlYWQ7Y29uc3QgaT17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gaX0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihyKXtjb25zdCBzPXt2YWx1ZTpbci5rZXksci52YWx1ZV0sZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9Wyhhcz1TeW1ib2wudG9TdHJpbmdUYWcsU3ltYm9sLml0ZXJhdG9yKV0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9dHJpbU9sZCh0KXtpZih0Pj10aGlzLnNpemUpcmV0dXJuO2lmKHQ9PT0wKXt0aGlzLmNsZWFyKCk7cmV0dXJufWxldCBuPXRoaXMuX2hlYWQscj10aGlzLnNpemU7Zm9yKDtuJiZyPnQ7KXRoaXMuX21hcC5kZWxldGUobi5rZXkpLG49bi5uZXh0LHItLTt0aGlzLl9oZWFkPW4sdGhpcy5fc2l6ZT1yLG4mJihuLnByZXZpb3VzPXZvaWQgMCksdGhpcy5fc3RhdGUrK31hZGRJdGVtRmlyc3QodCl7aWYoIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsKXRoaXMuX3RhaWw9dDtlbHNlIGlmKHRoaXMuX2hlYWQpdC5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz10O2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0aGlzLl9oZWFkPXQsdGhpcy5fc3RhdGUrK31hZGRJdGVtTGFzdCh0KXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpdGhpcy5faGVhZD10O2Vsc2UgaWYodGhpcy5fdGFpbCl0LnByZXZpb3VzPXRoaXMuX3RhaWwsdGhpcy5fdGFpbC5uZXh0PXQ7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3RoaXMuX3RhaWw9dCx0aGlzLl9zdGF0ZSsrfXJlbW92ZUl0ZW0odCl7aWYodD09PXRoaXMuX2hlYWQmJnQ9PT10aGlzLl90YWlsKXRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwO2Vsc2UgaWYodD09PXRoaXMuX2hlYWQpe2lmKCF0Lm5leHQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0Lm5leHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9dC5uZXh0fWVsc2UgaWYodD09PXRoaXMuX3RhaWwpe2lmKCF0LnByZXZpb3VzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dC5wcmV2aW91cy5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPXQucHJldmlvdXN9ZWxzZXtjb25zdCBuPXQubmV4dCxyPXQucHJldmlvdXM7aWYoIW58fCFyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7bi5wcmV2aW91cz1yLHIubmV4dD1ufXQubmV4dD12b2lkIDAsdC5wcmV2aW91cz12b2lkIDAsdGhpcy5fc3RhdGUrK310b3VjaCh0LG4pe2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2lmKCEobiE9PTEmJm4hPT0yKSl7aWYobj09PTEpe2lmKHQ9PT10aGlzLl9oZWFkKXJldHVybjtjb25zdCByPXQubmV4dCxpPXQucHJldmlvdXM7dD09PXRoaXMuX3RhaWw/KGkubmV4dD12b2lkIDAsdGhpcy5fdGFpbD1pKTooci5wcmV2aW91cz1pLGkubmV4dD1yKSx0LnByZXZpb3VzPXZvaWQgMCx0Lm5leHQ9dGhpcy5faGVhZCx0aGlzLl9oZWFkLnByZXZpb3VzPXQsdGhpcy5faGVhZD10LHRoaXMuX3N0YXRlKyt9ZWxzZSBpZihuPT09Mil7aWYodD09PXRoaXMuX3RhaWwpcmV0dXJuO2NvbnN0IHI9dC5uZXh0LGk9dC5wcmV2aW91czt0PT09dGhpcy5faGVhZD8oci5wcmV2aW91cz12b2lkIDAsdGhpcy5faGVhZD1yKTooci5wcmV2aW91cz1pLGkubmV4dD1yKSx0Lm5leHQ9dm9pZCAwLHQucHJldmlvdXM9dGhpcy5fdGFpbCx0aGlzLl90YWlsLm5leHQ9dCx0aGlzLl90YWlsPXQsdGhpcy5fc3RhdGUrK319fXRvSlNPTigpe2NvbnN0IHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgobixyKT0+e3QucHVzaChbcixuXSl9KSx0fWZyb21KU09OKHQpe3RoaXMuY2xlYXIoKTtmb3IoY29uc3RbbixyXW9mIHQpdGhpcy5zZXQobixyKX19Y2xhc3MgZ2wgZXh0ZW5kcyBkbHtjb25zdHJ1Y3Rvcih0LG49MSl7c3VwZXIoKSx0aGlzLl9saW1pdD10LHRoaXMuX3JhdGlvPU1hdGgubWluKE1hdGgubWF4KDAsbiksMSl9Z2V0IGxpbWl0KCl7cmV0dXJuIHRoaXMuX2xpbWl0fXNldCBsaW1pdCh0KXt0aGlzLl9saW1pdD10LHRoaXMuY2hlY2tUcmltKCl9Z2V0KHQsbj0yKXtyZXR1cm4gc3VwZXIuZ2V0KHQsbil9cGVlayh0KXtyZXR1cm4gc3VwZXIuZ2V0KHQsMCl9c2V0KHQsbil7cmV0dXJuIHN1cGVyLnNldCh0LG4sMiksdGhpcy5jaGVja1RyaW0oKSx0aGlzfWNoZWNrVHJpbSgpe3RoaXMuc2l6ZT50aGlzLl9saW1pdCYmdGhpcy50cmltT2xkKE1hdGgucm91bmQodGhpcy5fbGltaXQqdGhpcy5fcmF0aW8pKX19Y2xhc3MgbWx7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfWFkZCh0LG4pe2xldCByPXRoaXMubWFwLmdldCh0KTtyfHwocj1uZXcgU2V0LHRoaXMubWFwLnNldCh0LHIpKSxyLmFkZChuKX1kZWxldGUodCxuKXtjb25zdCByPXRoaXMubWFwLmdldCh0KTtyJiYoci5kZWxldGUobiksci5zaXplPT09MCYmdGhpcy5tYXAuZGVsZXRlKHQpKX1mb3JFYWNoKHQsbil7Y29uc3Qgcj10aGlzLm1hcC5nZXQodCk7ciYmci5mb3JFYWNoKG4pfWdldCh0KXtjb25zdCBuPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gbnx8bmV3IFNldH19bmV3IGdsKDEwKTt2YXIgb3M7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0pKG9zfHwob3M9e30pKTt2YXIgbHM7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD0zXT0iUmlnaHQifSkobHN8fChscz17fSkpO3ZhciB1czsoZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KSh1c3x8KHVzPXt9KSk7ZnVuY3Rpb24gcGwoZSx0LG4scixpKXtpZihyPT09MClyZXR1cm4hMDtjb25zdCBzPXQuY2hhckNvZGVBdChyLTEpO2lmKGUuZ2V0KHMpIT09MHx8cz09PTEzfHxzPT09MTApcmV0dXJuITA7aWYoaT4wKXtjb25zdCBhPXQuY2hhckNvZGVBdChyKTtpZihlLmdldChhKSE9PTApcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdmwoZSx0LG4scixpKXtpZihyK2k9PT1uKXJldHVybiEwO2NvbnN0IHM9dC5jaGFyQ29kZUF0KHIraSk7aWYoZS5nZXQocykhPT0wfHxzPT09MTN8fHM9PT0xMClyZXR1cm4hMDtpZihpPjApe2NvbnN0IGE9dC5jaGFyQ29kZUF0KHIraS0xKTtpZihlLmdldChhKSE9PTApcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gYmwoZSx0LG4scixpKXtyZXR1cm4gcGwoZSx0LG4scixpKSYmdmwoZSx0LG4scixpKX1jbGFzcyB4bHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX3dvcmRTZXBhcmF0b3JzPXQsdGhpcy5fc2VhcmNoUmVnZXg9bix0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KHQpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD10LHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dCh0KXtjb25zdCBuPXQubGVuZ3RoO2xldCByO2Rve2lmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgrdGhpcy5fcHJldk1hdGNoTGVuZ3RoPT09bnx8KHI9dGhpcy5fc2VhcmNoUmVnZXguZXhlYyh0KSwhcikpcmV0dXJuIG51bGw7Y29uc3QgaT1yLmluZGV4LHM9clswXS5sZW5ndGg7aWYoaT09PXRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgmJnM9PT10aGlzLl9wcmV2TWF0Y2hMZW5ndGgpe2lmKHM9PT0wKXtsbyh0LG4sdGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4KT42NTUzNT90aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTI6dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0xO2NvbnRpbnVlfXJldHVybiBudWxsfWlmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9aSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9cywhdGhpcy5fd29yZFNlcGFyYXRvcnN8fGJsKHRoaXMuX3dvcmRTZXBhcmF0b3JzLHQsbixpLHMpKXJldHVybiByfXdoaWxlKHIpO3JldHVybiBudWxsfX1mdW5jdGlvbiB5bChlLHQ9IlVucmVhY2hhYmxlIil7dGhyb3cgbmV3IEVycm9yKHQpfWZ1bmN0aW9uIGZuKGUpe2lmKCFlKCkpe2RlYnVnZ2VyO2UoKSxEcihuZXcgamUoIkFzc2VydGlvbiBGYWlsZWQiKSl9fWZ1bmN0aW9uIGNzKGUsdCl7bGV0IG49MDtmb3IoO248ZS5sZW5ndGgtMTspe2NvbnN0IHI9ZVtuXSxpPWVbbisxXTtpZighdChyLGkpKXJldHVybiExO24rK31yZXR1cm4hMH1jbGFzcyB3bHtzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQsbixyKXtjb25zdCBpPXI/ci5zdGFydExpbmVOdW1iZXI6MSxzPXI/ci5lbmRMaW5lTnVtYmVyOnQuZ2V0TGluZUNvdW50KCksYT1uZXcgZnMobiksbz1hLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgbDtvPT09ImFsbE5vbkJhc2ljQXNjaWkiP2w9bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bD1uZXcgUmVnRXhwKGAke19sKEFycmF5LmZyb20obykpfWAsImciKTtjb25zdCB1PW5ldyB4bChudWxsLGwpLGY9W107bGV0IGg9ITEsZCxnPTAsbT0wLHY9MDtlOmZvcihsZXQgcD1pLHg9cztwPD14O3ArKyl7Y29uc3QgeT10LmdldExpbmVDb250ZW50KHApLGI9eS5sZW5ndGg7dS5yZXNldCgwKTtkbyBpZihkPXUubmV4dCh5KSxkKXtsZXQgTD1kLmluZGV4LFM9ZC5pbmRleCtkWzBdLmxlbmd0aDtpZihMPjApe2NvbnN0IE09eS5jaGFyQ29kZUF0KEwtMSk7am4oTSkmJkwtLX1pZihTKzE8Yil7Y29uc3QgTT15LmNoYXJDb2RlQXQoUy0xKTtqbihNKSYmUysrfWNvbnN0IF89eS5zdWJzdHJpbmcoTCxTKTtsZXQgTj1IbihMKzEsaWkseSwwKTtOJiZOLmVuZENvbHVtbjw9TCsxJiYoTj1udWxsKTtjb25zdCBBPWEuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShfLE4/Ti53b3JkOm51bGwpO2lmKEEhPT0wKXtpZihBPT09Mz9nKys6QT09PTI/bSsrOkE9PT0xP3YrKzp5bCgpLGYubGVuZ3RoPj0xZTMpe2g9ITA7YnJlYWsgZX1mLnB1c2gobmV3IHNlKHAsTCsxLHAsUysxKSl9fXdoaWxlKGQpfXJldHVybntyYW5nZXM6ZixoYXNNb3JlOmgsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6ZyxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDptLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDp2fX1zdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRSZWFzb24odCxuKXtjb25zdCByPW5ldyBmcyhuKTtzd2l0Y2goci5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKHQsbnVsbCkpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDI6cmV0dXJue2tpbmQ6MX07Y2FzZSAzOntjb25zdCBzPXQuY29kZVBvaW50QXQoMCksYT1yLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0UHJpbWFyeUNvbmZ1c2FibGUocyksbz1ydC5nZXRMb2NhbGVzKCkuZmlsdGVyKGw9PiFydC5nZXRJbnN0YW5jZShuZXcgU2V0KFsuLi5uLmFsbG93ZWRMb2NhbGVzLGxdKSkuaXNBbWJpZ3VvdXMocykpO3JldHVybntraW5kOjAsY29uZnVzYWJsZVdpdGg6U3RyaW5nLmZyb21Db2RlUG9pbnQoYSksbm90QW1iaWd1b3VzSW5Mb2NhbGVzOm99fWNhc2UgMTpyZXR1cm57a2luZDoyfX19fWZ1bmN0aW9uIF9sKGUsdCl7cmV0dXJuYFske25vKGUubWFwKHI9PlN0cmluZy5mcm9tQ29kZVBvaW50KHIpKS5qb2luKCIiKSl9XWB9Y2xhc3MgZnN7Y29uc3RydWN0b3IodCl7dGhpcy5vcHRpb25zPXQsdGhpcy5hbGxvd2VkQ29kZVBvaW50cz1uZXcgU2V0KHQuYWxsb3dlZENvZGVQb2ludHMpLHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycz1ydC5nZXRJbnN0YW5jZShuZXcgU2V0KHQuYWxsb3dlZExvY2FsZXMpKX1nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCl7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuImFsbE5vbkJhc2ljQXNjaWkiO2NvbnN0IHQ9bmV3IFNldDtpZih0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycylmb3IoY29uc3QgbiBvZiBIZS5jb2RlUG9pbnRzKWhzKFN0cmluZy5mcm9tQ29kZVBvaW50KG4pKXx8dC5hZGQobik7aWYodGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMpZm9yKGNvbnN0IG4gb2YgdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCkpdC5hZGQobik7Zm9yKGNvbnN0IG4gb2YgdGhpcy5hbGxvd2VkQ29kZVBvaW50cyl0LmRlbGV0ZShuKTtyZXR1cm4gdH1zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKHQsbil7Y29uc3Qgcj10LmNvZGVQb2ludEF0KDApO2lmKHRoaXMuYWxsb3dlZENvZGVQb2ludHMuaGFzKHIpKXJldHVybiAwO2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiAxO2xldCBpPSExLHM9ITE7aWYobilmb3IoY29uc3QgYSBvZiBuKXtjb25zdCBvPWEuY29kZVBvaW50QXQoMCksbD1jbyhhKTtpPWl8fGwsIWwmJiF0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMobykmJiFIZS5pc0ludmlzaWJsZUNoYXJhY3RlcihvKSYmKHM9ITApfXJldHVybiFpJiZzPzA6dGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMmJiFocyh0KSYmSGUuaXNJbnZpc2libGVDaGFyYWN0ZXIocik/Mjp0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycyYmdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHIpPzM6MH19ZnVuY3Rpb24gaHMoZSl7cmV0dXJuIGU9PT0iICJ8fGU9PT1gCmB8fGU9PT0iCSJ9Y2xhc3MgaG57Y29uc3RydWN0b3IodCxuLHIpe3RoaXMuY2hhbmdlcz10LHRoaXMubW92ZXM9bix0aGlzLmhpdFRpbWVvdXQ9cn19Y2xhc3MgU2x7Y29uc3RydWN0b3IodCxuKXt0aGlzLmxpbmVSYW5nZU1hcHBpbmc9dCx0aGlzLmNoYW5nZXM9bn19Y2xhc3MgentzdGF0aWMgYWRkUmFuZ2UodCxuKXtsZXQgcj0wO2Zvcig7cjxuLmxlbmd0aCYmbltyXS5lbmRFeGNsdXNpdmU8dC5zdGFydDspcisrO2xldCBpPXI7Zm9yKDtpPG4ubGVuZ3RoJiZuW2ldLnN0YXJ0PD10LmVuZEV4Y2x1c2l2ZTspaSsrO2lmKHI9PT1pKW4uc3BsaWNlKHIsMCx0KTtlbHNle2NvbnN0IHM9TWF0aC5taW4odC5zdGFydCxuW3JdLnN0YXJ0KSxhPU1hdGgubWF4KHQuZW5kRXhjbHVzaXZlLG5baS0xXS5lbmRFeGNsdXNpdmUpO24uc3BsaWNlKHIsaS1yLG5ldyB6KHMsYSkpfX1zdGF0aWMgdHJ5Q3JlYXRlKHQsbil7aWYoISh0Pm4pKXJldHVybiBuZXcgeih0LG4pfXN0YXRpYyBvZkxlbmd0aCh0KXtyZXR1cm4gbmV3IHooMCx0KX1zdGF0aWMgb2ZTdGFydEFuZExlbmd0aCh0LG4pe3JldHVybiBuZXcgeih0LHQrbil9Y29uc3RydWN0b3IodCxuKXtpZih0aGlzLnN0YXJ0PXQsdGhpcy5lbmRFeGNsdXNpdmU9bix0Pm4pdGhyb3cgbmV3IGplKGBJbnZhbGlkIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKX1nZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLnN0YXJ0PT09dGhpcy5lbmRFeGNsdXNpdmV9ZGVsdGEodCl7cmV0dXJuIG5ldyB6KHRoaXMuc3RhcnQrdCx0aGlzLmVuZEV4Y2x1c2l2ZSt0KX1kZWx0YVN0YXJ0KHQpe3JldHVybiBuZXcgeih0aGlzLnN0YXJ0K3QsdGhpcy5lbmRFeGNsdXNpdmUpfWRlbHRhRW5kKHQpe3JldHVybiBuZXcgeih0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlK3QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmRFeGNsdXNpdmUtdGhpcy5zdGFydH10b1N0cmluZygpe3JldHVybmBbJHt0aGlzLnN0YXJ0fSwgJHt0aGlzLmVuZEV4Y2x1c2l2ZX0pYH1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5zdGFydDw9dCYmdDx0aGlzLmVuZEV4Y2x1c2l2ZX1qb2luKHQpe3JldHVybiBuZXcgeihNYXRoLm1pbih0aGlzLnN0YXJ0LHQuc3RhcnQpLE1hdGgubWF4KHRoaXMuZW5kRXhjbHVzaXZlLHQuZW5kRXhjbHVzaXZlKSl9aW50ZXJzZWN0KHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydCx0LnN0YXJ0KSxyPU1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLHQuZW5kRXhjbHVzaXZlKTtpZihuPD1yKXJldHVybiBuZXcgeihuLHIpfWludGVyc2VjdHModCl7Y29uc3Qgbj1NYXRoLm1heCh0aGlzLnN0YXJ0LHQuc3RhcnQpLHI9TWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUsdC5lbmRFeGNsdXNpdmUpO3JldHVybiBuPHJ9aXNCZWZvcmUodCl7cmV0dXJuIHRoaXMuZW5kRXhjbHVzaXZlPD10LnN0YXJ0fWlzQWZ0ZXIodCl7cmV0dXJuIHRoaXMuc3RhcnQ+PXQuZW5kRXhjbHVzaXZlfXNsaWNlKHQpe3JldHVybiB0LnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUpfXN1YnN0cmluZyh0KXtyZXR1cm4gdC5zdWJzdHJpbmcodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSl9Y2xpcCh0KXtpZih0aGlzLmlzRW1wdHkpdGhyb3cgbmV3IGplKGBJbnZhbGlkIGNsaXBwaW5nIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKTtyZXR1cm4gTWF0aC5tYXgodGhpcy5zdGFydCxNYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZS0xLHQpKX1jbGlwQ3ljbGljKHQpe2lmKHRoaXMuaXNFbXB0eSl0aHJvdyBuZXcgamUoYEludmFsaWQgY2xpcHBpbmcgcmFuZ2U6ICR7dGhpcy50b1N0cmluZygpfWApO3JldHVybiB0PHRoaXMuc3RhcnQ/dGhpcy5lbmRFeGNsdXNpdmUtKHRoaXMuc3RhcnQtdCkldGhpcy5sZW5ndGg6dD49dGhpcy5lbmRFeGNsdXNpdmU/dGhpcy5zdGFydCsodC10aGlzLnN0YXJ0KSV0aGlzLmxlbmd0aDp0fWZvckVhY2godCl7Zm9yKGxldCBuPXRoaXMuc3RhcnQ7bjx0aGlzLmVuZEV4Y2x1c2l2ZTtuKyspdChuKX19ZnVuY3Rpb24geHQoZSx0KXtjb25zdCBuPUZ0KGUsdCk7cmV0dXJuIG49PT0tMT92b2lkIDA6ZVtuXX1mdW5jdGlvbiBGdChlLHQsbj0wLHI9ZS5sZW5ndGgpe2xldCBpPW4scz1yO2Zvcig7aTxzOyl7Y29uc3QgYT1NYXRoLmZsb29yKChpK3MpLzIpO3QoZVthXSk/aT1hKzE6cz1hfXJldHVybiBpLTF9ZnVuY3Rpb24gTGwoZSx0KXtjb25zdCBuPW5yKGUsdCk7cmV0dXJuIG49PT1lLmxlbmd0aD92b2lkIDA6ZVtuXX1mdW5jdGlvbiBucihlLHQsbj0wLHI9ZS5sZW5ndGgpe2xldCBpPW4scz1yO2Zvcig7aTxzOyl7Y29uc3QgYT1NYXRoLmZsb29yKChpK3MpLzIpO3QoZVthXSk/cz1hOmk9YSsxfXJldHVybiBpfWNsYXNzIEl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2FycmF5PXQsdGhpcy5fZmluZExhc3RNb25vdG9ub3VzTGFzdElkeD0wfWZpbmRMYXN0TW9ub3Rvbm91cyh0KXtpZihJdC5hc3NlcnRJbnZhcmlhbnRzKXtpZih0aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGUpe2Zvcihjb25zdCByIG9mIHRoaXMuX2FycmF5KWlmKHRoaXMuX3ByZXZGaW5kTGFzdFByZWRpY2F0ZShyKSYmIXQocikpdGhyb3cgbmV3IEVycm9yKCJNb25vdG9ub3VzQXJyYXk6IGN1cnJlbnQgcHJlZGljYXRlIG11c3QgYmUgd2Vha2VyIHRoYW4gKG9yIGVxdWFsIHRvKSB0aGUgcHJldmlvdXMgcHJlZGljYXRlLiIpfXRoaXMuX3ByZXZGaW5kTGFzdFByZWRpY2F0ZT10fWNvbnN0IG49RnQodGhpcy5fYXJyYXksdCx0aGlzLl9maW5kTGFzdE1vbm90b25vdXNMYXN0SWR4KTtyZXR1cm4gdGhpcy5fZmluZExhc3RNb25vdG9ub3VzTGFzdElkeD1uKzEsbj09PS0xP3ZvaWQgMDp0aGlzLl9hcnJheVtuXX19SXQuYXNzZXJ0SW52YXJpYW50cz0hMTtjbGFzcyBIe3N0YXRpYyBmcm9tUmFuZ2VJbmNsdXNpdmUodCl7cmV0dXJuIG5ldyBIKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlcisxKX1zdGF0aWMgam9pbk1hbnkodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybltdO2xldCBuPW5ldyBGZSh0WzBdLnNsaWNlKCkpO2ZvcihsZXQgcj0xO3I8dC5sZW5ndGg7cisrKW49bi5nZXRVbmlvbihuZXcgRmUodFtyXS5zbGljZSgpKSk7cmV0dXJuIG4ucmFuZ2VzfXN0YXRpYyBqb2luKHQpe2lmKHQubGVuZ3RoPT09MCl0aHJvdyBuZXcgamUoImxpbmVSYW5nZXMgY2Fubm90IGJlIGVtcHR5Iik7bGV0IG49dFswXS5zdGFydExpbmVOdW1iZXIscj10WzBdLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7Zm9yKGxldCBpPTE7aTx0Lmxlbmd0aDtpKyspbj1NYXRoLm1pbihuLHRbaV0uc3RhcnRMaW5lTnVtYmVyKSxyPU1hdGgubWF4KHIsdFtpXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gbmV3IEgobixyKX1zdGF0aWMgb2ZMZW5ndGgodCxuKXtyZXR1cm4gbmV3IEgodCx0K24pfXN0YXRpYyBkZXNlcmlhbGl6ZSh0KXtyZXR1cm4gbmV3IEgodFswXSx0WzFdKX1jb25zdHJ1Y3Rvcih0LG4pe2lmKHQ+bil0aHJvdyBuZXcgamUoYHN0YXJ0TGluZU51bWJlciAke3R9IGNhbm5vdCBiZSBhZnRlciBlbmRMaW5lTnVtYmVyRXhjbHVzaXZlICR7bn1gKTt0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT1ufWNvbnRhaW5zKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjw9dCYmdDx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI9PT10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZGVsdGEodCl7cmV0dXJuIG5ldyBIKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWRlbHRhTGVuZ3RoKHQpe3JldHVybiBuZXcgSCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrdCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtdGhpcy5zdGFydExpbmVOdW1iZXJ9am9pbih0KXtyZXR1cm4gbmV3IEgoTWF0aC5taW4odGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLE1hdGgubWF4KHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKX10b1N0cmluZygpe3JldHVybmBbJHt0aGlzLnN0YXJ0TGluZU51bWJlcn0sJHt0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9KWB9aW50ZXJzZWN0KHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLHI9TWF0aC5taW4odGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7aWYobjw9cilyZXR1cm4gbmV3IEgobixyKX1pbnRlcnNlY3RzU3RyaWN0KHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1vdmVybGFwT3JUb3VjaCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmdC5zdGFydExpbmVOdW1iZXI8PXRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1lcXVhbHModCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJnRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX10b0luY2x1c2l2ZVJhbmdlKCl7cmV0dXJuIHRoaXMuaXNFbXB0eT9udWxsOm5ldyBzZSh0aGlzLnN0YXJ0TGluZU51bWJlciwxLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKX10b0V4Y2x1c2l2ZVJhbmdlKCl7cmV0dXJuIG5ldyBzZSh0aGlzLnN0YXJ0TGluZU51bWJlciwxLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKX1tYXBUb0xpbmVBcnJheSh0KXtjb25zdCBuPVtdO2ZvcihsZXQgcj10aGlzLnN0YXJ0TGluZU51bWJlcjtyPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTtyKyspbi5wdXNoKHQocikpO3JldHVybiBufWZvckVhY2godCl7Zm9yKGxldCBuPXRoaXMuc3RhcnRMaW5lTnVtYmVyO248dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO24rKyl0KG4pfXNlcmlhbGl6ZSgpe3JldHVyblt0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmVdfWluY2x1ZGVzKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjw9dCYmdDx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9dG9PZmZzZXRSYW5nZSgpe3JldHVybiBuZXcgeih0aGlzLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xKX19Y2xhc3MgRmV7Y29uc3RydWN0b3IodD1bXSl7dGhpcy5fbm9ybWFsaXplZFJhbmdlcz10fWdldCByYW5nZXMoKXtyZXR1cm4gdGhpcy5fbm9ybWFsaXplZFJhbmdlc31hZGRSYW5nZSh0KXtpZih0Lmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IG49bnIodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxpPT5pLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PXQuc3RhcnRMaW5lTnVtYmVyKSxyPUZ0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsaT0+aS5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkrMTtpZihuPT09cil0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLnNwbGljZShuLDAsdCk7ZWxzZSBpZihuPT09ci0xKXtjb25zdCBpPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbbl07dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tuXT1pLmpvaW4odCl9ZWxzZXtjb25zdCBpPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbbl0uam9pbih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzW3ItMV0pLmpvaW4odCk7dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5zcGxpY2UobixyLW4saSl9fWNvbnRhaW5zKHQpe2NvbnN0IG49eHQodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxyPT5yLnN0YXJ0TGluZU51bWJlcjw9dCk7cmV0dXJuISFuJiZuLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+dH1pbnRlcnNlY3RzKHQpe2NvbnN0IG49eHQodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxyPT5yLnN0YXJ0TGluZU51bWJlcjx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpO3JldHVybiEhbiYmbi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnQuc3RhcnRMaW5lTnVtYmVyfWdldFVuaW9uKHQpe2lmKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoPT09MClyZXR1cm4gdDtpZih0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD09PTApcmV0dXJuIHRoaXM7Y29uc3Qgbj1bXTtsZXQgcj0wLGk9MCxzPW51bGw7Zm9yKDtyPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RofHxpPHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoOyl7bGV0IGE9bnVsbDtpZihyPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoJiZpPHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoKXtjb25zdCBvPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbcl0sbD10Ll9ub3JtYWxpemVkUmFuZ2VzW2ldO28uc3RhcnRMaW5lTnVtYmVyPGwuc3RhcnRMaW5lTnVtYmVyPyhhPW8scisrKTooYT1sLGkrKyl9ZWxzZSByPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoPyhhPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbcl0scisrKTooYT10Ll9ub3JtYWxpemVkUmFuZ2VzW2ldLGkrKyk7cz09PW51bGw/cz1hOnMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT49YS5zdGFydExpbmVOdW1iZXI/cz1uZXcgSChzLnN0YXJ0TGluZU51bWJlcixNYXRoLm1heChzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSk6KG4ucHVzaChzKSxzPWEpfXJldHVybiBzIT09bnVsbCYmbi5wdXNoKHMpLG5ldyBGZShuKX1zdWJ0cmFjdEZyb20odCl7Y29uc3Qgbj1ucih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLGE9PmEuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT49dC5zdGFydExpbmVOdW1iZXIpLHI9RnQodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxhPT5hLnN0YXJ0TGluZU51bWJlcjw9dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSsxO2lmKG49PT1yKXJldHVybiBuZXcgRmUoW3RdKTtjb25zdCBpPVtdO2xldCBzPXQuc3RhcnRMaW5lTnVtYmVyO2ZvcihsZXQgYT1uO2E8cjthKyspe2NvbnN0IG89dGhpcy5fbm9ybWFsaXplZFJhbmdlc1thXTtvLnN0YXJ0TGluZU51bWJlcj5zJiZpLnB1c2gobmV3IEgocyxvLnN0YXJ0TGluZU51bWJlcikpLHM9by5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfXJldHVybiBzPHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmaS5wdXNoKG5ldyBIKHMsdC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSksbmV3IEZlKGkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubWFwKHQ9PnQudG9TdHJpbmcoKSkuam9pbigiLCAiKX1nZXRJbnRlcnNlY3Rpb24odCl7Y29uc3Qgbj1bXTtsZXQgcj0wLGk9MDtmb3IoO3I8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGgmJmk8dC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg7KXtjb25zdCBzPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbcl0sYT10Ll9ub3JtYWxpemVkUmFuZ2VzW2ldLG89cy5pbnRlcnNlY3QoYSk7byYmIW8uaXNFbXB0eSYmbi5wdXNoKG8pLHMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxhLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU/cisrOmkrK31yZXR1cm4gbmV3IEZlKG4pfWdldFdpdGhEZWx0YSh0KXtyZXR1cm4gbmV3IEZlKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubWFwKG49Pm4uZGVsdGEodCkpKX19Y2xhc3MgRWV7c3RhdGljIGludmVyc2UodCxuLHIpe2NvbnN0IGk9W107bGV0IHM9MSxhPTE7Zm9yKGNvbnN0IGwgb2YgdCl7Y29uc3QgdT1uZXcgRWUobmV3IEgocyxsLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciksbmV3IEgoYSxsLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpO3UubW9kaWZpZWQuaXNFbXB0eXx8aS5wdXNoKHUpLHM9bC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGE9bC5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWNvbnN0IG89bmV3IEVlKG5ldyBIKHMsbisxKSxuZXcgSChhLHIrMSkpO3JldHVybiBvLm1vZGlmaWVkLmlzRW1wdHl8fGkucHVzaChvKSxpfXN0YXRpYyBjbGlwKHQsbixyKXtjb25zdCBpPVtdO2Zvcihjb25zdCBzIG9mIHQpe2NvbnN0IGE9cy5vcmlnaW5hbC5pbnRlcnNlY3Qobiksbz1zLm1vZGlmaWVkLmludGVyc2VjdChyKTthJiYhYS5pc0VtcHR5JiZvJiYhby5pc0VtcHR5JiZpLnB1c2gobmV3IEVlKGEsbykpfXJldHVybiBpfWNvbnN0cnVjdG9yKHQsbil7dGhpcy5vcmlnaW5hbD10LHRoaXMubW9kaWZpZWQ9bn10b1N0cmluZygpe3JldHVybmB7JHt0aGlzLm9yaWdpbmFsLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWQudG9TdHJpbmcoKX19YH1mbGlwKCl7cmV0dXJuIG5ldyBFZSh0aGlzLm1vZGlmaWVkLHRoaXMub3JpZ2luYWwpfWpvaW4odCl7cmV0dXJuIG5ldyBFZSh0aGlzLm9yaWdpbmFsLmpvaW4odC5vcmlnaW5hbCksdGhpcy5tb2RpZmllZC5qb2luKHQubW9kaWZpZWQpKX19Y2xhc3MgcWUgZXh0ZW5kcyBFZXtzdGF0aWMgZnJvbVJhbmdlTWFwcGluZ3ModCl7Y29uc3Qgbj1ILmpvaW4odC5tYXAoaT0+SC5mcm9tUmFuZ2VJbmNsdXNpdmUoaS5vcmlnaW5hbFJhbmdlKSkpLHI9SC5qb2luKHQubWFwKGk9PkguZnJvbVJhbmdlSW5jbHVzaXZlKGkubW9kaWZpZWRSYW5nZSkpKTtyZXR1cm4gbmV3IHFlKG4scix0KX1jb25zdHJ1Y3Rvcih0LG4scil7c3VwZXIodCxuKSx0aGlzLmlubmVyQ2hhbmdlcz1yfWZsaXAoKXt2YXIgdDtyZXR1cm4gbmV3IHFlKHRoaXMubW9kaWZpZWQsdGhpcy5vcmlnaW5hbCwodD10aGlzLmlubmVyQ2hhbmdlcyk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0Lm1hcChuPT5uLmZsaXAoKSkpfXdpdGhJbm5lckNoYW5nZXNGcm9tTGluZVJhbmdlcygpe3JldHVybiBuZXcgcWUodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLFtuZXcgeXQodGhpcy5vcmlnaW5hbC50b0V4Y2x1c2l2ZVJhbmdlKCksdGhpcy5tb2RpZmllZC50b0V4Y2x1c2l2ZVJhbmdlKCkpXSl9fWNsYXNzIHl0e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vcmlnaW5hbFJhbmdlPXQsdGhpcy5tb2RpZmllZFJhbmdlPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbFJhbmdlLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWRSYW5nZS50b1N0cmluZygpfX1gfWZsaXAoKXtyZXR1cm4gbmV3IHl0KHRoaXMubW9kaWZpZWRSYW5nZSx0aGlzLm9yaWdpbmFsUmFuZ2UpfX1jb25zdCBObD0zO2NsYXNzIEFse2NvbXB1dGVEaWZmKHQsbixyKXt2YXIgaTtjb25zdCBhPW5ldyBFbCh0LG4se21heENvbXB1dGF0aW9uVGltZTpyLm1heENvbXB1dGF0aW9uVGltZU1zLHNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlOnIuaWdub3JlVHJpbVdoaXRlc3BhY2Usc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZE1ha2VQcmV0dHlEaWZmOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITB9KS5jb21wdXRlRGlmZigpLG89W107bGV0IGw9bnVsbDtmb3IoY29uc3QgdSBvZiBhLmNoYW5nZXMpe2xldCBmO3Uub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09MD9mPW5ldyBIKHUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIrMSx1Lm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyKzEpOmY9bmV3IEgodS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcix1Lm9yaWdpbmFsRW5kTGluZU51bWJlcisxKTtsZXQgaDt1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PTA/aD1uZXcgSCh1Lm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyKzEsdS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcisxKTpoPW5ldyBIKHUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsdS5tb2RpZmllZEVuZExpbmVOdW1iZXIrMSk7bGV0IGQ9bmV3IHFlKGYsaCwoaT11LmNoYXJDaGFuZ2VzKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkubWFwKGc9Pm5ldyB5dChuZXcgc2UoZy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcixnLm9yaWdpbmFsU3RhcnRDb2x1bW4sZy5vcmlnaW5hbEVuZExpbmVOdW1iZXIsZy5vcmlnaW5hbEVuZENvbHVtbiksbmV3IHNlKGcubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsZy5tb2RpZmllZFN0YXJ0Q29sdW1uLGcubW9kaWZpZWRFbmRMaW5lTnVtYmVyLGcubW9kaWZpZWRFbmRDb2x1bW4pKSkpO2wmJihsLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1kLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcnx8bC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09ZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpJiYoZD1uZXcgcWUobC5vcmlnaW5hbC5qb2luKGQub3JpZ2luYWwpLGwubW9kaWZpZWQuam9pbihkLm1vZGlmaWVkKSxsLmlubmVyQ2hhbmdlcyYmZC5pbm5lckNoYW5nZXM/bC5pbm5lckNoYW5nZXMuY29uY2F0KGQuaW5uZXJDaGFuZ2VzKTp2b2lkIDApLG8ucG9wKCkpLG8ucHVzaChkKSxsPWR9cmV0dXJuIGZuKCgpPT5jcyhvLCh1LGYpPT5mLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci11Lm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1mLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci11Lm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnUub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciYmdS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPGYubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyKSksbmV3IGhuKG8sW10sYS5xdWl0RWFybHkpfX1mdW5jdGlvbiBkcyhlLHQsbixyKXtyZXR1cm4gbmV3IEdlKGUsdCxuKS5Db21wdXRlRGlmZihyKX1sZXQgZ3M9Y2xhc3N7Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1bXSxyPVtdO2ZvcihsZXQgaT0wLHM9dC5sZW5ndGg7aTxzO2krKyluW2ldPXJyKHRbaV0sMSkscltpXT1pcih0W2ldLDEpO3RoaXMubGluZXM9dCx0aGlzLl9zdGFydENvbHVtbnM9bix0aGlzLl9lbmRDb2x1bW5zPXJ9Z2V0RWxlbWVudHMoKXtjb25zdCB0PVtdO2ZvcihsZXQgbj0wLHI9dGhpcy5saW5lcy5sZW5ndGg7bjxyO24rKyl0W25dPXRoaXMubGluZXNbbl0uc3Vic3RyaW5nKHRoaXMuX3N0YXJ0Q29sdW1uc1tuXS0xLHRoaXMuX2VuZENvbHVtbnNbbl0tMSk7cmV0dXJuIHR9Z2V0U3RyaWN0RWxlbWVudCh0KXtyZXR1cm4gdGhpcy5saW5lc1t0XX1nZXRTdGFydExpbmVOdW1iZXIodCl7cmV0dXJuIHQrMX1nZXRFbmRMaW5lTnVtYmVyKHQpe3JldHVybiB0KzF9Y3JlYXRlQ2hhclNlcXVlbmNlKHQsbixyKXtjb25zdCBpPVtdLHM9W10sYT1bXTtsZXQgbz0wO2ZvcihsZXQgbD1uO2w8PXI7bCsrKXtjb25zdCB1PXRoaXMubGluZXNbbF0sZj10P3RoaXMuX3N0YXJ0Q29sdW1uc1tsXToxLGg9dD90aGlzLl9lbmRDb2x1bW5zW2xdOnUubGVuZ3RoKzE7Zm9yKGxldCBkPWY7ZDxoO2QrKylpW29dPXUuY2hhckNvZGVBdChkLTEpLHNbb109bCsxLGFbb109ZCxvKys7IXQmJmw8ciYmKGlbb109MTAsc1tvXT1sKzEsYVtvXT11Lmxlbmd0aCsxLG8rKyl9cmV0dXJuIG5ldyBDbChpLHMsYSl9fTtjbGFzcyBDbHtjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5fY2hhckNvZGVzPXQsdGhpcy5fbGluZU51bWJlcnM9bix0aGlzLl9jb2x1bW5zPXJ9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5fY2hhckNvZGVzLm1hcCgodCxuKT0+KHQ9PT0xMD8iXFxuIjpTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKStgLSgke3RoaXMuX2xpbmVOdW1iZXJzW25dfSwke3RoaXMuX2NvbHVtbnNbbl19KWApLmpvaW4oIiwgIikrIl0ifV9hc3NlcnRJbmRleCh0LG4pe2lmKHQ8MHx8dD49bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIGluZGV4Iil9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fY2hhckNvZGVzfWdldFN0YXJ0TGluZU51bWJlcih0KXtyZXR1cm4gdD4wJiZ0PT09dGhpcy5fbGluZU51bWJlcnMubGVuZ3RoP3RoaXMuZ2V0RW5kTGluZU51bWJlcih0LTEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9saW5lTnVtYmVyc1t0XSl9Z2V0RW5kTGluZU51bWJlcih0KXtyZXR1cm4gdD09PS0xP3RoaXMuZ2V0U3RhcnRMaW5lTnVtYmVyKHQrMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2NoYXJDb2Rlc1t0XT09PTEwP3RoaXMuX2xpbmVOdW1iZXJzW3RdKzE6dGhpcy5fbGluZU51bWJlcnNbdF0pfWdldFN0YXJ0Q29sdW1uKHQpe3JldHVybiB0PjAmJnQ9PT10aGlzLl9jb2x1bW5zLmxlbmd0aD90aGlzLmdldEVuZENvbHVtbih0LTEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2NvbHVtbnMpLHRoaXMuX2NvbHVtbnNbdF0pfWdldEVuZENvbHVtbih0KXtyZXR1cm4gdD09PS0xP3RoaXMuZ2V0U3RhcnRDb2x1bW4odCsxKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jaGFyQ29kZXNbdF09PT0xMD8xOnRoaXMuX2NvbHVtbnNbdF0rMSl9fWNsYXNzIHd0e2NvbnN0cnVjdG9yKHQsbixyLGkscyxhLG8sbCl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj10LHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj1uLHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXIsdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1pLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9cyx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49YSx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1vLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49bH1zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UodCxuLHIpe2NvbnN0IGk9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxzPW4uZ2V0U3RhcnRDb2x1bW4odC5vcmlnaW5hbFN0YXJ0KSxhPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxvPW4uZ2V0RW5kQ29sdW1uKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpLGw9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSx1PXIuZ2V0U3RhcnRDb2x1bW4odC5tb2RpZmllZFN0YXJ0KSxmPXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSxoPXIuZ2V0RW5kQ29sdW1uKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO3JldHVybiBuZXcgd3QoaSxzLGEsbyxsLHUsZixoKX19ZnVuY3Rpb24ga2woZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3QgdD1bZVswXV07bGV0IG49dFswXTtmb3IobGV0IHI9MSxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IHM9ZVtyXSxhPXMub3JpZ2luYWxTdGFydC0obi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpLG89cy5tb2RpZmllZFN0YXJ0LShuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCk7TWF0aC5taW4oYSxvKTxObD8obi5vcmlnaW5hbExlbmd0aD1zLm9yaWdpbmFsU3RhcnQrcy5vcmlnaW5hbExlbmd0aC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1zLm1vZGlmaWVkU3RhcnQrcy5tb2RpZmllZExlbmd0aC1uLm1vZGlmaWVkU3RhcnQpOih0LnB1c2gocyksbj1zKX1yZXR1cm4gdH1jbGFzcyBEdHtjb25zdHJ1Y3Rvcih0LG4scixpLHMpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9dCx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9cix0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1pLHRoaXMuY2hhckNoYW5nZXM9c31zdGF0aWMgY3JlYXRlRnJvbURpZmZSZXN1bHQodCxuLHIsaSxzLGEsbyl7bGV0IGwsdSxmLGgsZDtpZihuLm9yaWdpbmFsTGVuZ3RoPT09MD8obD1yLmdldFN0YXJ0TGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQpLTEsdT0wKToobD1yLmdldFN0YXJ0TGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQpLHU9ci5nZXRFbmRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLTEpKSxuLm1vZGlmaWVkTGVuZ3RoPT09MD8oZj1pLmdldFN0YXJ0TGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQpLTEsaD0wKTooZj1pLmdldFN0YXJ0TGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQpLGg9aS5nZXRFbmRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLTEpKSxhJiZuLm9yaWdpbmFsTGVuZ3RoPjAmJm4ub3JpZ2luYWxMZW5ndGg8MjAmJm4ubW9kaWZpZWRMZW5ndGg+MCYmbi5tb2RpZmllZExlbmd0aDwyMCYmcygpKXtjb25zdCBnPXIuY3JlYXRlQ2hhclNlcXVlbmNlKHQsbi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLTEpLG09aS5jcmVhdGVDaGFyU2VxdWVuY2UodCxuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgtMSk7aWYoZy5nZXRFbGVtZW50cygpLmxlbmd0aD4wJiZtLmdldEVsZW1lbnRzKCkubGVuZ3RoPjApe2xldCB2PWRzKGcsbSxzLCEwKS5jaGFuZ2VzO28mJih2PWtsKHYpKSxkPVtdO2ZvcihsZXQgcD0wLHg9di5sZW5ndGg7cDx4O3ArKylkLnB1c2god3QuY3JlYXRlRnJvbURpZmZDaGFuZ2UodltwXSxnLG0pKX19cmV0dXJuIG5ldyBEdChsLHUsZixoLGQpfX1jbGFzcyBFbHtjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9ci5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPXIuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPXIuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1yLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz10LHRoaXMubW9kaWZpZWRMaW5lcz1uLHRoaXMub3JpZ2luYWw9bmV3IGdzKHQpLHRoaXMubW9kaWZpZWQ9bmV3IGdzKG4pLHRoaXMuY29udGludWVMaW5lRGlmZj1tcyhyLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPW1zKHIubWF4Q29tcHV0YXRpb25UaW1lPT09MD8wOk1hdGgubWluKHIubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYodGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm9yaWdpbmFsLmxpbmVzWzBdLmxlbmd0aD09PTApcmV0dXJuIHRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoPT09MSYmdGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg9PT0wP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczp2b2lkIDB9XX07aWYodGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD09PTApcmV0dXJue3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6MSxjaGFyQ2hhbmdlczp2b2lkIDB9XX07Y29uc3QgdD1kcyh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLG49dC5jaGFuZ2VzLHI9dC5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3Qgbz1bXTtmb3IobGV0IGw9MCx1PW4ubGVuZ3RoO2w8dTtsKyspby5wdXNoKER0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsbltsXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6cixjaGFuZ2VzOm99fWNvbnN0IGk9W107bGV0IHM9MCxhPTA7Zm9yKGxldCBvPS0xLGw9bi5sZW5ndGg7bzxsO28rKyl7Y29uc3QgdT1vKzE8bD9uW28rMV06bnVsbCxmPXU/dS5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsaD11P3UubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7czxmJiZhPGg7KXtjb25zdCBkPXRoaXMub3JpZ2luYWxMaW5lc1tzXSxnPXRoaXMubW9kaWZpZWRMaW5lc1thXTtpZihkIT09Zyl7e2xldCBtPXJyKGQsMSksdj1ycihnLDEpO2Zvcig7bT4xJiZ2PjE7KXtjb25zdCBwPWQuY2hhckNvZGVBdChtLTIpLHg9Zy5jaGFyQ29kZUF0KHYtMik7aWYocCE9PXgpYnJlYWs7bS0tLHYtLX0obT4xfHx2PjEpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGkscysxLDEsbSxhKzEsMSx2KX17bGV0IG09aXIoZCwxKSx2PWlyKGcsMSk7Y29uc3QgcD1kLmxlbmd0aCsxLHg9Zy5sZW5ndGgrMTtmb3IoO208cCYmdjx4Oyl7Y29uc3QgeT1kLmNoYXJDb2RlQXQobS0xKSxiPWQuY2hhckNvZGVBdCh2LTEpO2lmKHkhPT1iKWJyZWFrO20rKyx2Kyt9KG08cHx8djx4KSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShpLHMrMSxtLHAsYSsxLHYseCl9fXMrKyxhKyt9dSYmKGkucHVzaChEdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHUsdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKSxzKz11Lm9yaWdpbmFsTGVuZ3RoLGErPXUubW9kaWZpZWRMZW5ndGgpfXJldHVybntxdWl0RWFybHk6cixjaGFuZ2VzOml9fV9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixyLGkscyxhLG8pe2lmKHRoaXMuX21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixyLGkscyxhLG8pKXJldHVybjtsZXQgbDt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmKGw9W25ldyB3dChuLHIsbixpLHMsYSxzLG8pXSksdC5wdXNoKG5ldyBEdChuLG4scyxzLGwpKX1fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLHIsaSxzLGEsbyl7Y29uc3QgbD10Lmxlbmd0aDtpZihsPT09MClyZXR1cm4hMTtjb25zdCB1PXRbbC0xXTtyZXR1cm4gdS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT0wfHx1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PTA/ITE6dS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT1uJiZ1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PXM/KHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzLnB1c2gobmV3IHd0KG4scixuLGkscyxhLHMsbykpLCEwKTp1Lm9yaWdpbmFsRW5kTGluZU51bWJlcisxPT09biYmdS5tb2RpZmllZEVuZExpbmVOdW1iZXIrMT09PXM/KHUub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdS5tb2RpZmllZEVuZExpbmVOdW1iZXI9cyx0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcy5wdXNoKG5ldyB3dChuLHIsbixpLHMsYSxzLG8pKSwhMCk6ITF9fWZ1bmN0aW9uIHJyKGUsdCl7Y29uc3Qgbj1pbyhlKTtyZXR1cm4gbj09PS0xP3Q6bisxfWZ1bmN0aW9uIGlyKGUsdCl7Y29uc3Qgbj1zbyhlKTtyZXR1cm4gbj09PS0xP3Q6bisyfWZ1bmN0aW9uIG1zKGUpe2lmKGU9PT0wKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfWNsYXNzIEJle3N0YXRpYyB0cml2aWFsKHQsbil7cmV0dXJuIG5ldyBCZShbbmV3IEsoei5vZkxlbmd0aCh0Lmxlbmd0aCksei5vZkxlbmd0aChuLmxlbmd0aCkpXSwhMSl9c3RhdGljIHRyaXZpYWxUaW1lZE91dCh0LG4pe3JldHVybiBuZXcgQmUoW25ldyBLKHoub2ZMZW5ndGgodC5sZW5ndGgpLHoub2ZMZW5ndGgobi5sZW5ndGgpKV0sITApfWNvbnN0cnVjdG9yKHQsbil7dGhpcy5kaWZmcz10LHRoaXMuaGl0VGltZW91dD1ufX1jbGFzcyBLe3N0YXRpYyBpbnZlcnQodCxuKXtjb25zdCByPVtdO3JldHVybiBCbyh0LChpLHMpPT57ci5wdXNoKEsuZnJvbU9mZnNldFBhaXJzKGk/aS5nZXRFbmRFeGNsdXNpdmVzKCk6eWUuemVybyxzP3MuZ2V0U3RhcnRzKCk6bmV3IHllKG4sKGk/aS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLWkuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTowKStuKSkpfSkscn1zdGF0aWMgZnJvbU9mZnNldFBhaXJzKHQsbil7cmV0dXJuIG5ldyBLKG5ldyB6KHQub2Zmc2V0MSxuLm9mZnNldDEpLG5ldyB6KHQub2Zmc2V0MixuLm9mZnNldDIpKX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc2VxMVJhbmdlPXQsdGhpcy5zZXEyUmFuZ2U9bn1zd2FwKCl7cmV0dXJuIG5ldyBLKHRoaXMuc2VxMlJhbmdlLHRoaXMuc2VxMVJhbmdlKX10b1N0cmluZygpe3JldHVybmAke3RoaXMuc2VxMVJhbmdlfSA8LT4gJHt0aGlzLnNlcTJSYW5nZX1gfWpvaW4odCl7cmV0dXJuIG5ldyBLKHRoaXMuc2VxMVJhbmdlLmpvaW4odC5zZXExUmFuZ2UpLHRoaXMuc2VxMlJhbmdlLmpvaW4odC5zZXEyUmFuZ2UpKX1kZWx0YSh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgSyh0aGlzLnNlcTFSYW5nZS5kZWx0YSh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YSh0KSl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgSyh0aGlzLnNlcTFSYW5nZS5kZWx0YVN0YXJ0KHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhU3RhcnQodCkpfWRlbHRhRW5kKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBLKHRoaXMuc2VxMVJhbmdlLmRlbHRhRW5kKHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhRW5kKHQpKX1pbnRlcnNlY3QodCl7Y29uc3Qgbj10aGlzLnNlcTFSYW5nZS5pbnRlcnNlY3QodC5zZXExUmFuZ2UpLHI9dGhpcy5zZXEyUmFuZ2UuaW50ZXJzZWN0KHQuc2VxMlJhbmdlKTtpZighKCFufHwhcikpcmV0dXJuIG5ldyBLKG4scil9Z2V0U3RhcnRzKCl7cmV0dXJuIG5ldyB5ZSh0aGlzLnNlcTFSYW5nZS5zdGFydCx0aGlzLnNlcTJSYW5nZS5zdGFydCl9Z2V0RW5kRXhjbHVzaXZlcygpe3JldHVybiBuZXcgeWUodGhpcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHRoaXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSl9fWNsYXNzIHlle2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vZmZzZXQxPXQsdGhpcy5vZmZzZXQyPW59dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm9mZnNldDF9IDwtPiAke3RoaXMub2Zmc2V0Mn1gfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyB5ZSh0aGlzLm9mZnNldDErdCx0aGlzLm9mZnNldDIrdCl9ZXF1YWxzKHQpe3JldHVybiB0aGlzLm9mZnNldDE9PT10Lm9mZnNldDEmJnRoaXMub2Zmc2V0Mj09PXQub2Zmc2V0Mn19eWUuemVybz1uZXcgeWUoMCwwKSx5ZS5tYXg9bmV3IHllKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtjbGFzcyBWdHtpc1ZhbGlkKCl7cmV0dXJuITB9fVZ0Lmluc3RhbmNlPW5ldyBWdDtjbGFzcyBNbHtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnRpbWVvdXQ9dCx0aGlzLnN0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMudmFsaWQ9ITAsdDw9MCl0aHJvdyBuZXcgamUoInRpbWVvdXQgbXVzdCBiZSBwb3NpdGl2ZSIpfWlzVmFsaWQoKXtpZighKERhdGUubm93KCktdGhpcy5zdGFydFRpbWU8dGhpcy50aW1lb3V0KSYmdGhpcy52YWxpZCl7dGhpcy52YWxpZD0hMTtkZWJ1Z2dlcn1yZXR1cm4gdGhpcy52YWxpZH19Y2xhc3Mgc3J7Y29uc3RydWN0b3IodCxuKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bix0aGlzLmFycmF5PVtdLHRoaXMuYXJyYXk9bmV3IEFycmF5KHQqbil9Z2V0KHQsbil7cmV0dXJuIHRoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdfXNldCh0LG4scil7dGhpcy5hcnJheVt0K24qdGhpcy53aWR0aF09cn19ZnVuY3Rpb24gYXIoZSl7cmV0dXJuIGU9PT0zMnx8ZT09PTl9Y2xhc3MgX3R7c3RhdGljIGdldEtleSh0KXtsZXQgbj10aGlzLmNocktleXMuZ2V0KHQpO3JldHVybiBuPT09dm9pZCAwJiYobj10aGlzLmNocktleXMuc2l6ZSx0aGlzLmNocktleXMuc2V0KHQsbikpLG59Y29uc3RydWN0b3IodCxuLHIpe3RoaXMucmFuZ2U9dCx0aGlzLmxpbmVzPW4sdGhpcy5zb3VyY2U9cix0aGlzLmhpc3RvZ3JhbT1bXTtsZXQgaT0wO2ZvcihsZXQgcz10LnN0YXJ0TGluZU51bWJlci0xO3M8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTE7cysrKXtjb25zdCBhPW5bc107Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKyspe2krKztjb25zdCB1PWFbbF0sZj1fdC5nZXRLZXkodSk7dGhpcy5oaXN0b2dyYW1bZl09KHRoaXMuaGlzdG9ncmFtW2ZdfHwwKSsxfWkrKztjb25zdCBvPV90LmdldEtleShgCmApO3RoaXMuaGlzdG9ncmFtW29dPSh0aGlzLmhpc3RvZ3JhbVtvXXx8MCkrMX10aGlzLnRvdGFsQ291bnQ9aX1jb21wdXRlU2ltaWxhcml0eSh0KXt2YXIgbixyO2xldCBpPTA7Y29uc3Qgcz1NYXRoLm1heCh0aGlzLmhpc3RvZ3JhbS5sZW5ndGgsdC5oaXN0b2dyYW0ubGVuZ3RoKTtmb3IobGV0IGE9MDthPHM7YSsrKWkrPU1hdGguYWJzKCgobj10aGlzLmhpc3RvZ3JhbVthXSkhPT1udWxsJiZuIT09dm9pZCAwP246MCktKChyPXQuaGlzdG9ncmFtW2FdKSE9PW51bGwmJnIhPT12b2lkIDA/cjowKSk7cmV0dXJuIDEtaS8odGhpcy50b3RhbENvdW50K3QudG90YWxDb3VudCl9fV90LmNocktleXM9bmV3IE1hcDtjbGFzcyBSbHtjb21wdXRlKHQsbixyPVZ0Lmluc3RhbmNlLGkpe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBCZS50cml2aWFsKHQsbik7Y29uc3Qgcz1uZXcgc3IodC5sZW5ndGgsbi5sZW5ndGgpLGE9bmV3IHNyKHQubGVuZ3RoLG4ubGVuZ3RoKSxvPW5ldyBzcih0Lmxlbmd0aCxuLmxlbmd0aCk7Zm9yKGxldCBtPTA7bTx0Lmxlbmd0aDttKyspZm9yKGxldCB2PTA7djxuLmxlbmd0aDt2Kyspe2lmKCFyLmlzVmFsaWQoKSlyZXR1cm4gQmUudHJpdmlhbFRpbWVkT3V0KHQsbik7Y29uc3QgcD1tPT09MD8wOnMuZ2V0KG0tMSx2KSx4PXY9PT0wPzA6cy5nZXQobSx2LTEpO2xldCB5O3QuZ2V0RWxlbWVudChtKT09PW4uZ2V0RWxlbWVudCh2KT8obT09PTB8fHY9PT0wP3k9MDp5PXMuZ2V0KG0tMSx2LTEpLG0+MCYmdj4wJiZhLmdldChtLTEsdi0xKT09PTMmJih5Kz1vLmdldChtLTEsdi0xKSkseSs9aT9pKG0sdik6MSk6eT0tMTtjb25zdCBiPU1hdGgubWF4KHAseCx5KTtpZihiPT09eSl7Y29uc3QgTD1tPjAmJnY+MD9vLmdldChtLTEsdi0xKTowO28uc2V0KG0sdixMKzEpLGEuc2V0KG0sdiwzKX1lbHNlIGI9PT1wPyhvLnNldChtLHYsMCksYS5zZXQobSx2LDEpKTpiPT09eCYmKG8uc2V0KG0sdiwwKSxhLnNldChtLHYsMikpO3Muc2V0KG0sdixiKX1jb25zdCBsPVtdO2xldCB1PXQubGVuZ3RoLGY9bi5sZW5ndGg7ZnVuY3Rpb24gaChtLHYpeyhtKzEhPT11fHx2KzEhPT1mKSYmbC5wdXNoKG5ldyBLKG5ldyB6KG0rMSx1KSxuZXcgeih2KzEsZikpKSx1PW0sZj12fWxldCBkPXQubGVuZ3RoLTEsZz1uLmxlbmd0aC0xO2Zvcig7ZD49MCYmZz49MDspYS5nZXQoZCxnKT09PTM/KGgoZCxnKSxkLS0sZy0tKTphLmdldChkLGcpPT09MT9kLS06Zy0tO3JldHVybiBoKC0xLC0xKSxsLnJldmVyc2UoKSxuZXcgQmUobCwhMSl9fWNsYXNzIHBze2NvbXB1dGUodCxuLHI9VnQuaW5zdGFuY2Upe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBCZS50cml2aWFsKHQsbik7Y29uc3QgaT10LHM9bjtmdW5jdGlvbiBhKHYscCl7Zm9yKDt2PGkubGVuZ3RoJiZwPHMubGVuZ3RoJiZpLmdldEVsZW1lbnQodik9PT1zLmdldEVsZW1lbnQocCk7KXYrKyxwKys7cmV0dXJuIHZ9bGV0IG89MDtjb25zdCBsPW5ldyBUbDtsLnNldCgwLGEoMCwwKSk7Y29uc3QgdT1uZXcgUGw7dS5zZXQoMCxsLmdldCgwKT09PTA/bnVsbDpuZXcgdnMobnVsbCwwLDAsbC5nZXQoMCkpKTtsZXQgZj0wO2U6Zm9yKDs7KXtpZihvKyssIXIuaXNWYWxpZCgpKXJldHVybiBCZS50cml2aWFsVGltZWRPdXQoaSxzKTtjb25zdCB2PS1NYXRoLm1pbihvLHMubGVuZ3RoK28lMikscD1NYXRoLm1pbihvLGkubGVuZ3RoK28lMik7Zm9yKGY9djtmPD1wO2YrPTIpe2NvbnN0IHg9Zj09PXA/LTE6bC5nZXQoZisxKSx5PWY9PT12Py0xOmwuZ2V0KGYtMSkrMSxiPU1hdGgubWluKE1hdGgubWF4KHgseSksaS5sZW5ndGgpLEw9Yi1mO2lmKGI+aS5sZW5ndGh8fEw+cy5sZW5ndGgpY29udGludWU7Y29uc3QgUz1hKGIsTCk7bC5zZXQoZixTKTtjb25zdCBfPWI9PT14P3UuZ2V0KGYrMSk6dS5nZXQoZi0xKTtpZih1LnNldChmLFMhPT1iP25ldyB2cyhfLGIsTCxTLWIpOl8pLGwuZ2V0KGYpPT09aS5sZW5ndGgmJmwuZ2V0KGYpLWY9PT1zLmxlbmd0aClicmVhayBlfX1sZXQgaD11LmdldChmKTtjb25zdCBkPVtdO2xldCBnPWkubGVuZ3RoLG09cy5sZW5ndGg7Zm9yKDs7KXtjb25zdCB2PWg/aC54K2gubGVuZ3RoOjAscD1oP2gueStoLmxlbmd0aDowO2lmKCh2IT09Z3x8cCE9PW0pJiZkLnB1c2gobmV3IEsobmV3IHoodixnKSxuZXcgeihwLG0pKSksIWgpYnJlYWs7Zz1oLngsbT1oLnksaD1oLnByZXZ9cmV0dXJuIGQucmV2ZXJzZSgpLG5ldyBCZShkLCExKX19Y2xhc3MgdnN7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5wcmV2PXQsdGhpcy54PW4sdGhpcy55PXIsdGhpcy5sZW5ndGg9aX19Y2xhc3MgVGx7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKSx0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKX1nZXQodCl7cmV0dXJuIHQ8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF0pOnRoaXMucG9zaXRpdmVBcnJbdF19c2V0KHQsbil7aWYodDwwKXtpZih0PS10LTEsdD49dGhpcy5uZWdhdGl2ZUFyci5sZW5ndGgpe2NvbnN0IHI9dGhpcy5uZWdhdGl2ZUFycjt0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KHIubGVuZ3RoKjIpLHRoaXMubmVnYXRpdmVBcnIuc2V0KHIpfXRoaXMubmVnYXRpdmVBcnJbdF09bn1lbHNle2lmKHQ+PXRoaXMucG9zaXRpdmVBcnIubGVuZ3RoKXtjb25zdCByPXRoaXMucG9zaXRpdmVBcnI7dGhpcy5wb3NpdGl2ZUFycj1uZXcgSW50MzJBcnJheShyLmxlbmd0aCoyKSx0aGlzLnBvc2l0aXZlQXJyLnNldChyKX10aGlzLnBvc2l0aXZlQXJyW3RdPW59fX1jbGFzcyBQbHtjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpdmVBcnI9W10sdGhpcy5uZWdhdGl2ZUFycj1bXX1nZXQodCl7cmV0dXJuIHQ8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF0pOnRoaXMucG9zaXRpdmVBcnJbdF19c2V0KHQsbil7dDwwPyh0PS10LTEsdGhpcy5uZWdhdGl2ZUFyclt0XT1uKTp0aGlzLnBvc2l0aXZlQXJyW3RdPW59fWNsYXNzIGRue2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLmxpbmVzPXQsdGhpcy5jb25zaWRlcldoaXRlc3BhY2VDaGFuZ2VzPXIsdGhpcy5lbGVtZW50cz1bXSx0aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZT1bXSx0aGlzLmFkZGl0aW9uYWxPZmZzZXRCeUxpbmU9W107bGV0IGk9ITE7bi5zdGFydD4wJiZuLmVuZEV4Y2x1c2l2ZT49dC5sZW5ndGgmJihuPW5ldyB6KG4uc3RhcnQtMSxuLmVuZEV4Y2x1c2l2ZSksaT0hMCksdGhpcy5saW5lUmFuZ2U9bix0aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZVswXT0wO2ZvcihsZXQgcz10aGlzLmxpbmVSYW5nZS5zdGFydDtzPHRoaXMubGluZVJhbmdlLmVuZEV4Y2x1c2l2ZTtzKyspe2xldCBhPXRbc10sbz0wO2lmKGkpbz1hLmxlbmd0aCxhPSIiLGk9ITE7ZWxzZSBpZighcil7Y29uc3QgbD1hLnRyaW1TdGFydCgpO289YS5sZW5ndGgtbC5sZW5ndGgsYT1sLnRyaW1FbmQoKX10aGlzLmFkZGl0aW9uYWxPZmZzZXRCeUxpbmUucHVzaChvKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrKyl0aGlzLmVsZW1lbnRzLnB1c2goYS5jaGFyQ29kZUF0KGwpKTtzPHQubGVuZ3RoLTEmJih0aGlzLmVsZW1lbnRzLnB1c2goMTApLHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lW3MtdGhpcy5saW5lUmFuZ2Uuc3RhcnQrMV09dGhpcy5lbGVtZW50cy5sZW5ndGgpfXRoaXMuYWRkaXRpb25hbE9mZnNldEJ5TGluZS5wdXNoKDApfXRvU3RyaW5nKCl7cmV0dXJuYFNsaWNlOiAiJHt0aGlzLnRleHR9ImB9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5nZXRUZXh0KG5ldyB6KDAsdGhpcy5sZW5ndGgpKX1nZXRUZXh0KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzLnNsaWNlKHQuc3RhcnQsdC5lbmRFeGNsdXNpdmUpLm1hcChuPT5TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKS5qb2luKCIiKX1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPXhzKHQ+MD90aGlzLmVsZW1lbnRzW3QtMV06LTEpLHI9eHModDx0aGlzLmVsZW1lbnRzLmxlbmd0aD90aGlzLmVsZW1lbnRzW3RdOi0xKTtpZihuPT09NyYmcj09PTgpcmV0dXJuIDA7aWYobj09PTgpcmV0dXJuIDE1MDtsZXQgaT0wO3JldHVybiBuIT09ciYmKGkrPTEwLG49PT0wJiZyPT09MSYmKGkrPTEpKSxpKz1icyhuKSxpKz1icyhyKSxpfXRyYW5zbGF0ZU9mZnNldCh0KXtpZih0aGlzLmxpbmVSYW5nZS5pc0VtcHR5KXJldHVybiBuZXcgUGUodGhpcy5saW5lUmFuZ2Uuc3RhcnQrMSwxKTtjb25zdCBuPUZ0KHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lLHI9PnI8PXQpO3JldHVybiBuZXcgUGUodGhpcy5saW5lUmFuZ2Uuc3RhcnQrbisxLHQtdGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVbbl0rdGhpcy5hZGRpdGlvbmFsT2Zmc2V0QnlMaW5lW25dKzEpfXRyYW5zbGF0ZVJhbmdlKHQpe3JldHVybiBzZS5mcm9tUG9zaXRpb25zKHRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQpLHRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuZW5kRXhjbHVzaXZlKSl9ZmluZFdvcmRDb250YWluaW5nKHQpe2lmKHQ8MHx8dD49dGhpcy5lbGVtZW50cy5sZW5ndGh8fCFvcih0aGlzLmVsZW1lbnRzW3RdKSlyZXR1cm47bGV0IG49dDtmb3IoO24+MCYmb3IodGhpcy5lbGVtZW50c1tuLTFdKTspbi0tO2xldCByPXQ7Zm9yKDtyPHRoaXMuZWxlbWVudHMubGVuZ3RoJiZvcih0aGlzLmVsZW1lbnRzW3JdKTspcisrO3JldHVybiBuZXcgeihuLHIpfWNvdW50TGluZXNJbih0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPZmZzZXQodC5lbmRFeGNsdXNpdmUpLmxpbmVOdW1iZXItdGhpcy50cmFuc2xhdGVPZmZzZXQodC5zdGFydCkubGluZU51bWJlcn1pc1N0cm9uZ2x5RXF1YWwodCxuKXtyZXR1cm4gdGhpcy5lbGVtZW50c1t0XT09PXRoaXMuZWxlbWVudHNbbl19ZXh0ZW5kVG9GdWxsTGluZXModCl7dmFyIG4scjtjb25zdCBpPShuPXh0KHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lLGE9PmE8PXQuc3RhcnQpKSE9PW51bGwmJm4hPT12b2lkIDA/bjowLHM9KHI9TGwodGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmUsYT0+dC5lbmRFeGNsdXNpdmU8PWEpKSE9PW51bGwmJnIhPT12b2lkIDA/cjp0aGlzLmVsZW1lbnRzLmxlbmd0aDtyZXR1cm4gbmV3IHooaSxzKX19ZnVuY3Rpb24gb3IoZSl7cmV0dXJuIGU+PTk3JiZlPD0xMjJ8fGU+PTY1JiZlPD05MHx8ZT49NDgmJmU8PTU3fWNvbnN0IEZsPXswOjAsMTowLDI6MCwzOjEwLDQ6Miw1OjMwLDY6Myw3OjEwLDg6MTB9O2Z1bmN0aW9uIGJzKGUpe3JldHVybiBGbFtlXX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4gZT09PTEwPzg6ZT09PTEzPzc6YXIoZSk/NjplPj05NyYmZTw9MTIyPzA6ZT49NjUmJmU8PTkwPzE6ZT49NDgmJmU8PTU3PzI6ZT09PS0xPzM6ZT09PTQ0fHxlPT09NTk/NTo0fWZ1bmN0aW9uIElsKGUsdCxuLHIsaSxzKXtsZXR7bW92ZXM6YSxleGNsdWRlZENoYW5nZXM6b309VmwoZSx0LG4scyk7aWYoIXMuaXNWYWxpZCgpKXJldHVybltdO2NvbnN0IGw9ZS5maWx0ZXIoZj0+IW8uaGFzKGYpKSx1PU9sKGwscixpLHQsbixzKTtyZXR1cm4gJG8oYSx1KSxhPWpsKGEpLGE9YS5maWx0ZXIoZj0+e2NvbnN0IGg9Zi5vcmlnaW5hbC50b09mZnNldFJhbmdlKCkuc2xpY2UodCkubWFwKGc9PmcudHJpbSgpKTtyZXR1cm4gaC5qb2luKGAKYCkubGVuZ3RoPj0xNSYmRGwoaCxnPT5nLmxlbmd0aD49Mik+PTJ9KSxhPXFsKGUsYSksYX1mdW5jdGlvbiBEbChlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIpJiZuKys7cmV0dXJuIG59ZnVuY3Rpb24gVmwoZSx0LG4scil7Y29uc3QgaT1bXSxzPWUuZmlsdGVyKGw9PmwubW9kaWZpZWQuaXNFbXB0eSYmbC5vcmlnaW5hbC5sZW5ndGg+PTMpLm1hcChsPT5uZXcgX3QobC5vcmlnaW5hbCx0LGwpKSxhPW5ldyBTZXQoZS5maWx0ZXIobD0+bC5vcmlnaW5hbC5pc0VtcHR5JiZsLm1vZGlmaWVkLmxlbmd0aD49MykubWFwKGw9Pm5ldyBfdChsLm1vZGlmaWVkLG4sbCkpKSxvPW5ldyBTZXQ7Zm9yKGNvbnN0IGwgb2Ygcyl7bGV0IHU9LTEsZjtmb3IoY29uc3QgaCBvZiBhKXtjb25zdCBkPWwuY29tcHV0ZVNpbWlsYXJpdHkoaCk7ZD51JiYodT1kLGY9aCl9aWYodT4uOSYmZiYmKGEuZGVsZXRlKGYpLGkucHVzaChuZXcgRWUobC5yYW5nZSxmLnJhbmdlKSksby5hZGQobC5zb3VyY2UpLG8uYWRkKGYuc291cmNlKSksIXIuaXNWYWxpZCgpKXJldHVybnttb3ZlczppLGV4Y2x1ZGVkQ2hhbmdlczpvfX1yZXR1cm57bW92ZXM6aSxleGNsdWRlZENoYW5nZXM6b319ZnVuY3Rpb24gT2woZSx0LG4scixpLHMpe2NvbnN0IGE9W10sbz1uZXcgbWw7Zm9yKGNvbnN0IGQgb2YgZSlmb3IobGV0IGc9ZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI7ZzxkLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMjtnKyspe2NvbnN0IG09YCR7dFtnLTFdfToke3RbZysxLTFdfToke3RbZysyLTFdfWA7by5hZGQobSx7cmFuZ2U6bmV3IEgoZyxnKzMpfSl9Y29uc3QgbD1bXTtlLnNvcnQoc24oZD0+ZC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsYW4pKTtmb3IoY29uc3QgZCBvZiBlKXtsZXQgZz1bXTtmb3IobGV0IG09ZC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI7bTxkLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMjttKyspe2NvbnN0IHY9YCR7blttLTFdfToke25bbSsxLTFdfToke25bbSsyLTFdfWAscD1uZXcgSChtLG0rMykseD1bXTtvLmZvckVhY2godiwoe3JhbmdlOnl9KT0+e2Zvcihjb25zdCBMIG9mIGcpaWYoTC5vcmlnaW5hbExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT15LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJkwubW9kaWZpZWRMaW5lUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSsxPT09cC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKXtMLm9yaWdpbmFsTGluZVJhbmdlPW5ldyBIKEwub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHkuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSksTC5tb2RpZmllZExpbmVSYW5nZT1uZXcgSChMLm1vZGlmaWVkTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlcixwLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLHgucHVzaChMKTtyZXR1cm59Y29uc3QgYj17bW9kaWZpZWRMaW5lUmFuZ2U6cCxvcmlnaW5hbExpbmVSYW5nZTp5fTtsLnB1c2goYikseC5wdXNoKGIpfSksZz14fWlmKCFzLmlzVmFsaWQoKSlyZXR1cm5bXX1sLnNvcnQoV28oc24oZD0+ZC5tb2RpZmllZExpbmVSYW5nZS5sZW5ndGgsYW4pKSk7Y29uc3QgdT1uZXcgRmUsZj1uZXcgRmU7Zm9yKGNvbnN0IGQgb2YgbCl7Y29uc3QgZz1kLm1vZGlmaWVkTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlci1kLm9yaWdpbmFsTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlcixtPXUuc3VidHJhY3RGcm9tKGQubW9kaWZpZWRMaW5lUmFuZ2UpLHY9Zi5zdWJ0cmFjdEZyb20oZC5vcmlnaW5hbExpbmVSYW5nZSkuZ2V0V2l0aERlbHRhKGcpLHA9bS5nZXRJbnRlcnNlY3Rpb24odik7Zm9yKGNvbnN0IHggb2YgcC5yYW5nZXMpe2lmKHgubGVuZ3RoPDMpY29udGludWU7Y29uc3QgeT14LGI9eC5kZWx0YSgtZyk7YS5wdXNoKG5ldyBFZShiLHkpKSx1LmFkZFJhbmdlKHkpLGYuYWRkUmFuZ2UoYil9fWEuc29ydChzbihkPT5kLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixhbikpO2NvbnN0IGg9bmV3IEl0KGUpO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtjb25zdCBnPWFbZF0sbT1oLmZpbmRMYXN0TW9ub3Rvbm91cyhfPT5fLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjw9Zy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpLHY9eHQoZSxfPT5fLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjw9Zy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpLHA9TWF0aC5tYXgoZy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItbS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItdi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpLHg9aC5maW5kTGFzdE1vbm90b25vdXMoXz0+Xy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI8Zy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSx5PXh0KGUsXz0+Xy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8Zy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSxiPU1hdGgubWF4KHgub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS1nLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUseS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLWcubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7bGV0IEw7Zm9yKEw9MDtMPHA7TCsrKXtjb25zdCBfPWcub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLUwtMSxOPWcubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLUwtMTtpZihfPnIubGVuZ3RofHxOPmkubGVuZ3RofHx1LmNvbnRhaW5zKE4pfHxmLmNvbnRhaW5zKF8pfHwheXMocltfLTFdLGlbTi0xXSxzKSlicmVha31MPjAmJihmLmFkZFJhbmdlKG5ldyBIKGcub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLUwsZy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpKSx1LmFkZFJhbmdlKG5ldyBIKGcubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLUwsZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKSk7bGV0IFM7Zm9yKFM9MDtTPGI7UysrKXtjb25zdCBfPWcub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStTLE49Zy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK1M7aWYoXz5yLmxlbmd0aHx8Tj5pLmxlbmd0aHx8dS5jb250YWlucyhOKXx8Zi5jb250YWlucyhfKXx8IXlzKHJbXy0xXSxpW04tMV0scykpYnJlYWt9Uz4wJiYoZi5hZGRSYW5nZShuZXcgSChnLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK1MpKSx1LmFkZFJhbmdlKG5ldyBIKGcubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxnLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUykpKSwoTD4wfHxTPjApJiYoYVtkXT1uZXcgRWUobmV3IEgoZy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItTCxnLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUyksbmV3IEgoZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItTCxnLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUykpKX1yZXR1cm4gYX1mdW5jdGlvbiB5cyhlLHQsbil7aWYoZS50cmltKCk9PT10LnRyaW0oKSlyZXR1cm4hMDtpZihlLmxlbmd0aD4zMDAmJnQubGVuZ3RoPjMwMClyZXR1cm4hMTtjb25zdCBpPW5ldyBwcygpLmNvbXB1dGUobmV3IGRuKFtlXSxuZXcgeigwLDEpLCExKSxuZXcgZG4oW3RdLG5ldyB6KDAsMSksITEpLG4pO2xldCBzPTA7Y29uc3QgYT1LLmludmVydChpLmRpZmZzLGUubGVuZ3RoKTtmb3IoY29uc3QgZiBvZiBhKWYuc2VxMVJhbmdlLmZvckVhY2goaD0+e2FyKGUuY2hhckNvZGVBdChoKSl8fHMrK30pO2Z1bmN0aW9uIG8oZil7bGV0IGg9MDtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylhcihmLmNoYXJDb2RlQXQoZCkpfHxoKys7cmV0dXJuIGh9Y29uc3QgbD1vKGUubGVuZ3RoPnQubGVuZ3RoP2U6dCk7cmV0dXJuIHMvbD4uNiYmbD4xMH1mdW5jdGlvbiBqbChlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIGU7ZS5zb3J0KHNuKG49Pm4ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLGFuKSk7Y29uc3QgdD1bZVswXV07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHI9dFt0Lmxlbmd0aC0xXSxpPWVbbl0scz1pLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1yLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYT1pLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1yLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aWYocz49MCYmYT49MCYmcythPD0yKXt0W3QubGVuZ3RoLTFdPXIuam9pbihpKTtjb250aW51ZX10LnB1c2goaSl9cmV0dXJuIHR9ZnVuY3Rpb24gcWwoZSx0KXtjb25zdCBuPW5ldyBJdChlKTtyZXR1cm4gdD10LmZpbHRlcihyPT57Y29uc3QgaT1uLmZpbmRMYXN0TW9ub3Rvbm91cyhvPT5vLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxyLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpfHxuZXcgRWUobmV3IEgoMSwxKSxuZXcgSCgxLDEpKSxzPXh0KGUsbz0+by5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8ci5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gaSE9PXN9KSx0fWZ1bmN0aW9uIHdzKGUsdCxuKXtsZXQgcj1uO3JldHVybiByPV9zKGUsdCxyKSxyPV9zKGUsdCxyKSxyPUJsKGUsdCxyKSxyfWZ1bmN0aW9uIF9zKGUsdCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuIG47Y29uc3Qgcj1bXTtyLnB1c2goblswXSk7Zm9yKGxldCBzPTE7czxuLmxlbmd0aDtzKyspe2NvbnN0IGE9cltyLmxlbmd0aC0xXTtsZXQgbz1uW3NdO2lmKG8uc2VxMVJhbmdlLmlzRW1wdHl8fG8uc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IGw9by5zZXExUmFuZ2Uuc3RhcnQtYS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTE7dTw9bCYmIShlLmdldEVsZW1lbnQoby5zZXExUmFuZ2Uuc3RhcnQtdSkhPT1lLmdldEVsZW1lbnQoby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLXUpfHx0LmdldEVsZW1lbnQoby5zZXEyUmFuZ2Uuc3RhcnQtdSkhPT10LmdldEVsZW1lbnQoby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLXUpKTt1KyspO2lmKHUtLSx1PT09bCl7cltyLmxlbmd0aC0xXT1uZXcgSyhuZXcgeihhLnNlcTFSYW5nZS5zdGFydCxvLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUtbCksbmV3IHooYS5zZXEyUmFuZ2Uuc3RhcnQsby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLWwpKTtjb250aW51ZX1vPW8uZGVsdGEoLXUpfXIucHVzaChvKX1jb25zdCBpPVtdO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGgtMTtzKyspe2NvbnN0IGE9cltzKzFdO2xldCBvPXJbc107aWYoby5zZXExUmFuZ2UuaXNFbXB0eXx8by5zZXEyUmFuZ2UuaXNFbXB0eSl7Y29uc3QgbD1hLnNlcTFSYW5nZS5zdGFydC1vLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU7bGV0IHU7Zm9yKHU9MDt1PGwmJiEoIWUuaXNTdHJvbmdseUVxdWFsKG8uc2VxMVJhbmdlLnN0YXJ0K3Usby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlK3UpfHwhdC5pc1N0cm9uZ2x5RXF1YWwoby5zZXEyUmFuZ2Uuc3RhcnQrdSxvLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrdSkpO3UrKyk7aWYodT09PWwpe3JbcysxXT1uZXcgSyhuZXcgeihvLnNlcTFSYW5nZS5zdGFydCtsLGEuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSksbmV3IHooby5zZXEyUmFuZ2Uuc3RhcnQrbCxhLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUpKTtjb250aW51ZX11PjAmJihvPW8uZGVsdGEodSkpfWkucHVzaChvKX1yZXR1cm4gci5sZW5ndGg+MCYmaS5wdXNoKHJbci5sZW5ndGgtMV0pLGl9ZnVuY3Rpb24gQmwoZSx0LG4pe2lmKCFlLmdldEJvdW5kYXJ5U2NvcmV8fCF0LmdldEJvdW5kYXJ5U2NvcmUpcmV0dXJuIG47Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspe2NvbnN0IGk9cj4wP25bci0xXTp2b2lkIDAscz1uW3JdLGE9cisxPG4ubGVuZ3RoP25bcisxXTp2b2lkIDAsbz1uZXcgeihpP2kuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxOjAsYT9hLnNlcTFSYW5nZS5zdGFydC0xOmUubGVuZ3RoKSxsPW5ldyB6KGk/aS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKzE6MCxhP2Euc2VxMlJhbmdlLnN0YXJ0LTE6dC5sZW5ndGgpO3Muc2VxMVJhbmdlLmlzRW1wdHk/bltyXT1TcyhzLGUsdCxvLGwpOnMuc2VxMlJhbmdlLmlzRW1wdHkmJihuW3JdPVNzKHMuc3dhcCgpLHQsZSxsLG8pLnN3YXAoKSl9cmV0dXJuIG59ZnVuY3Rpb24gU3MoZSx0LG4scixpKXtsZXQgYT0xO2Zvcig7ZS5zZXExUmFuZ2Uuc3RhcnQtYT49ci5zdGFydCYmZS5zZXEyUmFuZ2Uuc3RhcnQtYT49aS5zdGFydCYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQtYSxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtYSkmJmE8MTAwOylhKys7YS0tO2xldCBvPTA7Zm9yKDtlLnNlcTFSYW5nZS5zdGFydCtvPHIuZW5kRXhjbHVzaXZlJiZlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbzxpLmVuZEV4Y2x1c2l2ZSYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQrbyxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbykmJm88MTAwOylvKys7aWYoYT09PTAmJm89PT0wKXJldHVybiBlO2xldCBsPTAsdT0tMTtmb3IobGV0IGY9LWE7Zjw9bztmKyspe2NvbnN0IGg9ZS5zZXEyUmFuZ2Uuc3RhcnQrZixkPWUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStmLGc9ZS5zZXExUmFuZ2Uuc3RhcnQrZixtPXQuZ2V0Qm91bmRhcnlTY29yZShnKStuLmdldEJvdW5kYXJ5U2NvcmUoaCkrbi5nZXRCb3VuZGFyeVNjb3JlKGQpO20+dSYmKHU9bSxsPWYpfXJldHVybiBlLmRlbHRhKGwpfWZ1bmN0aW9uIFVsKGUsdCxuKXtjb25zdCByPVtdO2Zvcihjb25zdCBpIG9mIG4pe2NvbnN0IHM9cltyLmxlbmd0aC0xXTtpZighcyl7ci5wdXNoKGkpO2NvbnRpbnVlfWkuc2VxMVJhbmdlLnN0YXJ0LXMuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mnx8aS5zZXEyUmFuZ2Uuc3RhcnQtcy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlPD0yP3Jbci5sZW5ndGgtMV09bmV3IEsocy5zZXExUmFuZ2Uuam9pbihpLnNlcTFSYW5nZSkscy5zZXEyUmFuZ2Uuam9pbihpLnNlcTJSYW5nZSkpOnIucHVzaChpKX1yZXR1cm4gcn1mdW5jdGlvbiAkbChlLHQsbil7Y29uc3Qgcj1LLmludmVydChuLGUubGVuZ3RoKSxpPVtdO2xldCBzPW5ldyB5ZSgwLDApO2Z1bmN0aW9uIGEobCx1KXtpZihsLm9mZnNldDE8cy5vZmZzZXQxfHxsLm9mZnNldDI8cy5vZmZzZXQyKXJldHVybjtjb25zdCBmPWUuZmluZFdvcmRDb250YWluaW5nKGwub2Zmc2V0MSksaD10LmZpbmRXb3JkQ29udGFpbmluZyhsLm9mZnNldDIpO2lmKCFmfHwhaClyZXR1cm47bGV0IGQ9bmV3IEsoZixoKTtjb25zdCBnPWQuaW50ZXJzZWN0KHUpO2xldCBtPWcuc2VxMVJhbmdlLmxlbmd0aCx2PWcuc2VxMlJhbmdlLmxlbmd0aDtmb3IoO3IubGVuZ3RoPjA7KXtjb25zdCBwPXJbMF07aWYoIShwLnNlcTFSYW5nZS5pbnRlcnNlY3RzKGQuc2VxMVJhbmdlKXx8cC5zZXEyUmFuZ2UuaW50ZXJzZWN0cyhkLnNlcTJSYW5nZSkpKWJyZWFrO2NvbnN0IHk9ZS5maW5kV29yZENvbnRhaW5pbmcocC5zZXExUmFuZ2Uuc3RhcnQpLGI9dC5maW5kV29yZENvbnRhaW5pbmcocC5zZXEyUmFuZ2Uuc3RhcnQpLEw9bmV3IEsoeSxiKSxTPUwuaW50ZXJzZWN0KHApO2lmKG0rPVMuc2VxMVJhbmdlLmxlbmd0aCx2Kz1TLnNlcTJSYW5nZS5sZW5ndGgsZD1kLmpvaW4oTCksZC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPj1wLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpci5zaGlmdCgpO2Vsc2UgYnJlYWt9bSt2PChkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoKSoyLzMmJmkucHVzaChkKSxzPWQuZ2V0RW5kRXhjbHVzaXZlcygpfWZvcig7ci5sZW5ndGg+MDspe2NvbnN0IGw9ci5zaGlmdCgpO2wuc2VxMVJhbmdlLmlzRW1wdHl8fChhKGwuZ2V0U3RhcnRzKCksbCksYShsLmdldEVuZEV4Y2x1c2l2ZXMoKS5kZWx0YSgtMSksbCkpfXJldHVybiBXbChuLGkpfWZ1bmN0aW9uIFdsKGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCByPWVbMF0saT10WzBdO2xldCBzO3ImJighaXx8ci5zZXExUmFuZ2Uuc3RhcnQ8aS5zZXExUmFuZ2Uuc3RhcnQpP3M9ZS5zaGlmdCgpOnM9dC5zaGlmdCgpLG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49cy5zZXExUmFuZ2Uuc3RhcnQ/bltuLmxlbmd0aC0xXT1uW24ubGVuZ3RoLTFdLmpvaW4ocyk6bi5wdXNoKHMpfXJldHVybiBufWZ1bmN0aW9uIEhsKGUsdCxuKXtsZXQgcj1uO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gcjtsZXQgaT0wLHM7ZG97cz0hMTtjb25zdCBhPVtyWzBdXTtmb3IobGV0IG89MTtvPHIubGVuZ3RoO28rKyl7bGV0IGY9ZnVuY3Rpb24oZCxnKXtjb25zdCBtPW5ldyB6KHUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxsLnNlcTFSYW5nZS5zdGFydCk7cmV0dXJuIGUuZ2V0VGV4dChtKS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGg8PTQmJihkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoPjV8fGcuc2VxMVJhbmdlLmxlbmd0aCtnLnNlcTJSYW5nZS5sZW5ndGg+NSl9O2NvbnN0IGw9cltvXSx1PWFbYS5sZW5ndGgtMV07Zih1LGwpPyhzPSEwLGFbYS5sZW5ndGgtMV09YVthLmxlbmd0aC0xXS5qb2luKGwpKTphLnB1c2gobCl9cj1hfXdoaWxlKGkrKzwxMCYmcyk7cmV0dXJuIHJ9ZnVuY3Rpb24gemwoZSx0LG4pe2xldCByPW47aWYoci5sZW5ndGg9PT0wKXJldHVybiByO2xldCBpPTAscztkb3tzPSExO2NvbnN0IG89W3JbMF1dO2ZvcihsZXQgbD0xO2w8ci5sZW5ndGg7bCsrKXtsZXQgaD1mdW5jdGlvbihnLG0pe2NvbnN0IHY9bmV3IHooZi5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHUuc2VxMVJhbmdlLnN0YXJ0KTtpZihlLmNvdW50TGluZXNJbih2KT41fHx2Lmxlbmd0aD41MDApcmV0dXJuITE7Y29uc3QgeD1lLmdldFRleHQodikudHJpbSgpO2lmKHgubGVuZ3RoPjIwfHx4LnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RoPjEpcmV0dXJuITE7Y29uc3QgeT1lLmNvdW50TGluZXNJbihnLnNlcTFSYW5nZSksYj1nLnNlcTFSYW5nZS5sZW5ndGgsTD10LmNvdW50TGluZXNJbihnLnNlcTJSYW5nZSksUz1nLnNlcTJSYW5nZS5sZW5ndGgsXz1lLmNvdW50TGluZXNJbihtLnNlcTFSYW5nZSksTj1tLnNlcTFSYW5nZS5sZW5ndGgsQT10LmNvdW50TGluZXNJbihtLnNlcTJSYW5nZSksTT1tLnNlcTJSYW5nZS5sZW5ndGgsST0yKjQwKzUwO2Z1bmN0aW9uIEModyl7cmV0dXJuIE1hdGgubWluKHcsSSl9cmV0dXJuIE1hdGgucG93KE1hdGgucG93KEMoeSo0MCtiKSwxLjUpK01hdGgucG93KEMoTCo0MCtTKSwxLjUpLDEuNSkrTWF0aC5wb3coTWF0aC5wb3coQyhfKjQwK04pLDEuNSkrTWF0aC5wb3coQyhBKjQwK00pLDEuNSksMS41KT4oSSoqMS41KSoqMS41KjEuM307Y29uc3QgdT1yW2xdLGY9b1tvLmxlbmd0aC0xXTtoKGYsdSk/KHM9ITAsb1tvLmxlbmd0aC0xXT1vW28ubGVuZ3RoLTFdLmpvaW4odSkpOm8ucHVzaCh1KX1yPW99d2hpbGUoaSsrPDEwJiZzKTtjb25zdCBhPVtdO3JldHVybiBVbyhyLChvLGwsdSk9PntsZXQgZj1sO2Z1bmN0aW9uIGgoeCl7cmV0dXJuIHgubGVuZ3RoPjAmJngudHJpbSgpLmxlbmd0aDw9MyYmbC5zZXExUmFuZ2UubGVuZ3RoK2wuc2VxMlJhbmdlLmxlbmd0aD4xMDB9Y29uc3QgZD1lLmV4dGVuZFRvRnVsbExpbmVzKGwuc2VxMVJhbmdlKSxnPWUuZ2V0VGV4dChuZXcgeihkLnN0YXJ0LGwuc2VxMVJhbmdlLnN0YXJ0KSk7aChnKSYmKGY9Zi5kZWx0YVN0YXJ0KC1nLmxlbmd0aCkpO2NvbnN0IG09ZS5nZXRUZXh0KG5ldyB6KGwuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxkLmVuZEV4Y2x1c2l2ZSkpO2gobSkmJihmPWYuZGVsdGFFbmQobS5sZW5ndGgpKTtjb25zdCB2PUsuZnJvbU9mZnNldFBhaXJzKG8/by5nZXRFbmRFeGNsdXNpdmVzKCk6eWUuemVybyx1P3UuZ2V0U3RhcnRzKCk6eWUubWF4KSxwPWYuaW50ZXJzZWN0KHYpO2EubGVuZ3RoPjAmJnAuZ2V0U3RhcnRzKCkuZXF1YWxzKGFbYS5sZW5ndGgtMV0uZ2V0RW5kRXhjbHVzaXZlcygpKT9hW2EubGVuZ3RoLTFdPWFbYS5sZW5ndGgtMV0uam9pbihwKTphLnB1c2gocCl9KSxhfWNsYXNzIExze2NvbnN0cnVjdG9yKHQsbil7dGhpcy50cmltbWVkSGFzaD10LHRoaXMubGluZXM9bn1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLnRyaW1tZWRIYXNoW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaC5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPXQ9PT0wPzA6TnModGhpcy5saW5lc1t0LTFdKSxyPXQ9PT10aGlzLmxpbmVzLmxlbmd0aD8wOk5zKHRoaXMubGluZXNbdF0pO3JldHVybiAxZTMtKG4rcil9Z2V0VGV4dCh0KXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSh0LnN0YXJ0LHQuZW5kRXhjbHVzaXZlKS5qb2luKGAKYCl9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMubGluZXNbdF09PT10aGlzLmxpbmVzW25dfX1mdW5jdGlvbiBOcyhlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmKGUuY2hhckNvZGVBdCh0KT09PTMyfHxlLmNoYXJDb2RlQXQodCk9PT05KTspdCsrO3JldHVybiB0fWNsYXNzIEdse2NvbnN0cnVjdG9yKCl7dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nPW5ldyBSbCx0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobT1uZXcgcHN9Y29tcHV0ZURpZmYodCxuLHIpe2lmKHQubGVuZ3RoPD0xJiZqbyh0LG4sKFMsXyk9PlM9PT1fKSlyZXR1cm4gbmV3IGhuKFtdLFtdLCExKTtpZih0Lmxlbmd0aD09PTEmJnRbMF0ubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0xJiZuWzBdLmxlbmd0aD09PTApcmV0dXJuIG5ldyBobihbbmV3IHFlKG5ldyBIKDEsdC5sZW5ndGgrMSksbmV3IEgoMSxuLmxlbmd0aCsxKSxbbmV3IHl0KG5ldyBzZSgxLDEsdC5sZW5ndGgsdFswXS5sZW5ndGgrMSksbmV3IHNlKDEsMSxuLmxlbmd0aCxuWzBdLmxlbmd0aCsxKSldKV0sW10sITEpO2NvbnN0IGk9ci5tYXhDb21wdXRhdGlvblRpbWVNcz09PTA/VnQuaW5zdGFuY2U6bmV3IE1sKHIubWF4Q29tcHV0YXRpb25UaW1lTXMpLHM9IXIuaWdub3JlVHJpbVdoaXRlc3BhY2UsYT1uZXcgTWFwO2Z1bmN0aW9uIG8oUyl7bGV0IF89YS5nZXQoUyk7cmV0dXJuIF89PT12b2lkIDAmJihfPWEuc2l6ZSxhLnNldChTLF8pKSxffWNvbnN0IGw9dC5tYXAoUz0+byhTLnRyaW0oKSkpLHU9bi5tYXAoUz0+byhTLnRyaW0oKSkpLGY9bmV3IExzKGwsdCksaD1uZXcgTHModSxuKSxkPWYubGVuZ3RoK2gubGVuZ3RoPDE3MDA/dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nLmNvbXB1dGUoZixoLGksKFMsXyk9PnRbU109PT1uW19dP25bX10ubGVuZ3RoPT09MD8uMToxK01hdGgubG9nKDErbltfXS5sZW5ndGgpOi45OSk6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZShmLGgpO2xldCBnPWQuZGlmZnMsbT1kLmhpdFRpbWVvdXQ7Zz13cyhmLGgsZyksZz1IbChmLGgsZyk7Y29uc3Qgdj1bXSxwPVM9PntpZihzKWZvcihsZXQgXz0wO188UztfKyspe2NvbnN0IE49eCtfLEE9eStfO2lmKHRbTl0hPT1uW0FdKXtjb25zdCBNPXRoaXMucmVmaW5lRGlmZih0LG4sbmV3IEsobmV3IHooTixOKzEpLG5ldyB6KEEsQSsxKSksaSxzKTtmb3IoY29uc3QgSSBvZiBNLm1hcHBpbmdzKXYucHVzaChJKTtNLmhpdFRpbWVvdXQmJihtPSEwKX19fTtsZXQgeD0wLHk9MDtmb3IoY29uc3QgUyBvZiBnKXtmbigoKT0+Uy5zZXExUmFuZ2Uuc3RhcnQteD09PVMuc2VxMlJhbmdlLnN0YXJ0LXkpO2NvbnN0IF89Uy5zZXExUmFuZ2Uuc3RhcnQteDtwKF8pLHg9Uy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHk9Uy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlO2NvbnN0IE49dGhpcy5yZWZpbmVEaWZmKHQsbixTLGkscyk7Ti5oaXRUaW1lb3V0JiYobT0hMCk7Zm9yKGNvbnN0IEEgb2YgTi5tYXBwaW5ncyl2LnB1c2goQSl9cCh0Lmxlbmd0aC14KTtjb25zdCBiPUFzKHYsdCxuKTtsZXQgTD1bXTtyZXR1cm4gci5jb21wdXRlTW92ZXMmJihMPXRoaXMuY29tcHV0ZU1vdmVzKGIsdCxuLGwsdSxpLHMpKSxmbigoKT0+e2Z1bmN0aW9uIFMoTixBKXtpZihOLmxpbmVOdW1iZXI8MXx8Ti5saW5lTnVtYmVyPkEubGVuZ3RoKXJldHVybiExO2NvbnN0IE09QVtOLmxpbmVOdW1iZXItMV07cmV0dXJuIShOLmNvbHVtbjwxfHxOLmNvbHVtbj5NLmxlbmd0aCsxKX1mdW5jdGlvbiBfKE4sQSl7cmV0dXJuIShOLnN0YXJ0TGluZU51bWJlcjwxfHxOLnN0YXJ0TGluZU51bWJlcj5BLmxlbmd0aCsxfHxOLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8MXx8Ti5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPkEubGVuZ3RoKzEpfWZvcihjb25zdCBOIG9mIGIpe2lmKCFOLmlubmVyQ2hhbmdlcylyZXR1cm4hMTtmb3IoY29uc3QgQSBvZiBOLmlubmVyQ2hhbmdlcylpZighKFMoQS5tb2RpZmllZFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSxuKSYmUyhBLm1vZGlmaWVkUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKSxuKSYmUyhBLm9yaWdpbmFsUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpLHQpJiZTKEEub3JpZ2luYWxSYW5nZS5nZXRFbmRQb3NpdGlvbigpLHQpKSlyZXR1cm4hMTtpZighXyhOLm1vZGlmaWVkLG4pfHwhXyhOLm9yaWdpbmFsLHQpKXJldHVybiExfXJldHVybiEwfSksbmV3IGhuKGIsTCxtKX1jb21wdXRlTW92ZXModCxuLHIsaSxzLGEsbyl7cmV0dXJuIElsKHQsbixyLGkscyxhKS5tYXAoZj0+e2NvbnN0IGg9dGhpcy5yZWZpbmVEaWZmKG4scixuZXcgSyhmLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKSxmLm1vZGlmaWVkLnRvT2Zmc2V0UmFuZ2UoKSksYSxvKSxkPUFzKGgubWFwcGluZ3MsbixyLCEwKTtyZXR1cm4gbmV3IFNsKGYsZCl9KX1yZWZpbmVEaWZmKHQsbixyLGkscyl7Y29uc3QgYT1uZXcgZG4odCxyLnNlcTFSYW5nZSxzKSxvPW5ldyBkbihuLHIuc2VxMlJhbmdlLHMpLGw9YS5sZW5ndGgrby5sZW5ndGg8NTAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKGEsbyxpKTp0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobS5jb21wdXRlKGEsbyxpKTtsZXQgdT1sLmRpZmZzO3JldHVybiB1PXdzKGEsbyx1KSx1PSRsKGEsbyx1KSx1PVVsKGEsbyx1KSx1PXpsKGEsbyx1KSx7bWFwcGluZ3M6dS5tYXAoaD0+bmV3IHl0KGEudHJhbnNsYXRlUmFuZ2UoaC5zZXExUmFuZ2UpLG8udHJhbnNsYXRlUmFuZ2UoaC5zZXEyUmFuZ2UpKSksaGl0VGltZW91dDpsLmhpdFRpbWVvdXR9fX1mdW5jdGlvbiBBcyhlLHQsbixyPSExKXtjb25zdCBpPVtdO2Zvcihjb25zdCBzIG9mIHFvKGUubWFwKGE9PkpsKGEsdCxuKSksKGEsbyk9PmEub3JpZ2luYWwub3ZlcmxhcE9yVG91Y2goby5vcmlnaW5hbCl8fGEubW9kaWZpZWQub3ZlcmxhcE9yVG91Y2goby5tb2RpZmllZCkpKXtjb25zdCBhPXNbMF0sbz1zW3MubGVuZ3RoLTFdO2kucHVzaChuZXcgcWUoYS5vcmlnaW5hbC5qb2luKG8ub3JpZ2luYWwpLGEubW9kaWZpZWQuam9pbihvLm1vZGlmaWVkKSxzLm1hcChsPT5sLmlubmVyQ2hhbmdlc1swXSkpKX1yZXR1cm4gZm4oKCk9PiFyJiZpLmxlbmd0aD4wJiYoaVswXS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIhPT1pWzBdLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcnx8bi5sZW5ndGgtaVtpLmxlbmd0aC0xXS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlIT09dC5sZW5ndGgtaVtpLmxlbmd0aC0xXS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKT8hMTpjcyhpLChzLGEpPT5hLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1zLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1hLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1zLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxhLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciYmcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPGEubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyKSksaX1mdW5jdGlvbiBKbChlLHQsbil7bGV0IHI9MCxpPTA7ZS5tb2RpZmllZFJhbmdlLmVuZENvbHVtbj09PTEmJmUub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW49PT0xJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3I8PWUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyJiZlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3I8PWUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyJiYoaT0tMSksZS5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLTE+PW5bZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlci0xXS5sZW5ndGgmJmUub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbi0xPj10W2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyPD1lLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcitpJiZlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyPD1lLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcitpJiYocj0xKTtjb25zdCBzPW5ldyBIKGUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIrcixlLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcisxK2kpLGE9bmV3IEgoZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcityLGUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyKzEraSk7cmV0dXJuIG5ldyBxZShzLGEsW2VdKX1jb25zdCBDcz17Z2V0TGVnYWN5OigpPT5uZXcgQWwsZ2V0RGVmYXVsdDooKT0+bmV3IEdsfTtmdW5jdGlvbiBZZShlLHQpe2NvbnN0IG49TWF0aC5wb3coMTAsdCk7cmV0dXJuIE1hdGgucm91bmQoZSpuKS9ufWNsYXNzIGFle2NvbnN0cnVjdG9yKHQsbixyLGk9MSl7dGhpcy5fcmdiYUJyYW5kPXZvaWQgMCx0aGlzLnI9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsdCkpfDAsdGhpcy5nPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLG4pKXwwLHRoaXMuYj1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxyKSl8MCx0aGlzLmE9WWUoTWF0aC5tYXgoTWF0aC5taW4oMSxpKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQucj09PW4uciYmdC5nPT09bi5nJiZ0LmI9PT1uLmImJnQuYT09PW4uYX19Y2xhc3MgTGV7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5faHNsYUJyYW5kPXZvaWQgMCx0aGlzLmg9TWF0aC5tYXgoTWF0aC5taW4oMzYwLHQpLDApfDAsdGhpcy5zPVllKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5sPVllKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyksdGhpcy5hPVllKE1hdGgubWF4KE1hdGgubWluKDEsaSksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0Lmg9PT1uLmgmJnQucz09PW4ucyYmdC5sPT09bi5sJiZ0LmE9PT1uLmF9c3RhdGljIGZyb21SR0JBKHQpe2NvbnN0IG49dC5yLzI1NSxyPXQuZy8yNTUsaT10LmIvMjU1LHM9dC5hLGE9TWF0aC5tYXgobixyLGkpLG89TWF0aC5taW4obixyLGkpO2xldCBsPTAsdT0wO2NvbnN0IGY9KG8rYSkvMixoPWEtbztpZihoPjApe3N3aXRjaCh1PU1hdGgubWluKGY8PS41P2gvKDIqZik6aC8oMi0yKmYpLDEpLGEpe2Nhc2UgbjpsPShyLWkpL2grKHI8aT82OjApO2JyZWFrO2Nhc2UgcjpsPShpLW4pL2grMjticmVhaztjYXNlIGk6bD0obi1yKS9oKzQ7YnJlYWt9bCo9NjAsbD1NYXRoLnJvdW5kKGwpfXJldHVybiBuZXcgTGUobCx1LGYscyl9c3RhdGljIF9odWUycmdiKHQsbixyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/dCsobi10KSo2KnI6cjwxLzI/bjpyPDIvMz90KyhuLXQpKigyLzMtcikqNjp0fXN0YXRpYyB0b1JHQkEodCl7Y29uc3Qgbj10LmgvMzYwLHtzOnIsbDppLGE6c309dDtsZXQgYSxvLGw7aWYocj09PTApYT1vPWw9aTtlbHNle2NvbnN0IHU9aTwuNT9pKigxK3IpOmkrci1pKnIsZj0yKmktdTthPUxlLl9odWUycmdiKGYsdSxuKzEvMyksbz1MZS5faHVlMnJnYihmLHUsbiksbD1MZS5faHVlMnJnYihmLHUsbi0xLzMpfXJldHVybiBuZXcgYWUoTWF0aC5yb3VuZChhKjI1NSksTWF0aC5yb3VuZChvKjI1NSksTWF0aC5yb3VuZChsKjI1NSkscyl9fWNsYXNzIFN0e2NvbnN0cnVjdG9yKHQsbixyLGkpe3RoaXMuX2hzdmFCcmFuZD12b2lkIDAsdGhpcy5oPU1hdGgubWF4KE1hdGgubWluKDM2MCx0KSwwKXwwLHRoaXMucz1ZZShNYXRoLm1heChNYXRoLm1pbigxLG4pLDApLDMpLHRoaXMudj1ZZShNYXRoLm1heChNYXRoLm1pbigxLHIpLDApLDMpLHRoaXMuYT1ZZShNYXRoLm1heChNYXRoLm1pbigxLGkpLDApLDMpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4gdC5oPT09bi5oJiZ0LnM9PT1uLnMmJnQudj09PW4udiYmdC5hPT09bi5hfXN0YXRpYyBmcm9tUkdCQSh0KXtjb25zdCBuPXQuci8yNTUscj10LmcvMjU1LGk9dC5iLzI1NSxzPU1hdGgubWF4KG4scixpKSxhPU1hdGgubWluKG4scixpKSxvPXMtYSxsPXM9PT0wPzA6by9zO2xldCB1O3JldHVybiBvPT09MD91PTA6cz09PW4/dT0oKHItaSkvbyU2KzYpJTY6cz09PXI/dT0oaS1uKS9vKzI6dT0obi1yKS9vKzQsbmV3IFN0KE1hdGgucm91bmQodSo2MCksbCxzLHQuYSl9c3RhdGljIHRvUkdCQSh0KXtjb25zdHtoOm4sczpyLHY6aSxhOnN9PXQsYT1pKnIsbz1hKigxLU1hdGguYWJzKG4vNjAlMi0xKSksbD1pLWE7bGV0W3UsZixoXT1bMCwwLDBdO3JldHVybiBuPDYwPyh1PWEsZj1vKTpuPDEyMD8odT1vLGY9YSk6bjwxODA/KGY9YSxoPW8pOm48MjQwPyhmPW8saD1hKTpuPDMwMD8odT1vLGg9YSk6bjw9MzYwJiYodT1hLGg9byksdT1NYXRoLnJvdW5kKCh1K2wpKjI1NSksZj1NYXRoLnJvdW5kKChmK2wpKjI1NSksaD1NYXRoLnJvdW5kKChoK2wpKjI1NSksbmV3IGFlKHUsZixoLHMpfX1sZXQgcmU9Y2xhc3MgTmV7c3RhdGljIGZyb21IZXgodCl7cmV0dXJuIE5lLkZvcm1hdC5DU1MucGFyc2VIZXgodCl8fE5lLnJlZH1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIXQmJiFuPyEwOiF0fHwhbj8hMTp0LmVxdWFscyhuKX1nZXQgaHNsYSgpe3JldHVybiB0aGlzLl9oc2xhP3RoaXMuX2hzbGE6TGUuZnJvbVJHQkEodGhpcy5yZ2JhKX1nZXQgaHN2YSgpe3JldHVybiB0aGlzLl9oc3ZhP3RoaXMuX2hzdmE6U3QuZnJvbVJHQkEodGhpcy5yZ2JhKX1jb25zdHJ1Y3Rvcih0KXtpZih0KWlmKHQgaW5zdGFuY2VvZiBhZSl0aGlzLnJnYmE9dDtlbHNlIGlmKHQgaW5zdGFuY2VvZiBMZSl0aGlzLl9oc2xhPXQsdGhpcy5yZ2JhPUxlLnRvUkdCQSh0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBTdCl0aGlzLl9oc3ZhPXQsdGhpcy5yZ2JhPVN0LnRvUkdCQSh0KTtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciBjdG9yIGFyZ3VtZW50Iik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIG5lZWRzIGEgdmFsdWUiKX1lcXVhbHModCl7cmV0dXJuISF0JiZhZS5lcXVhbHModGhpcy5yZ2JhLHQucmdiYSkmJkxlLmVxdWFscyh0aGlzLmhzbGEsdC5oc2xhKSYmU3QuZXF1YWxzKHRoaXMuaHN2YSx0LmhzdmEpfWdldFJlbGF0aXZlTHVtaW5hbmNlKCl7Y29uc3QgdD1OZS5fcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodGhpcy5yZ2JhLnIpLG49TmUuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5nKSxyPU5lLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuYiksaT0uMjEyNip0Ky43MTUyKm4rLjA3MjIqcjtyZXR1cm4gWWUoaSw0KX1zdGF0aWMgX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHQpe2NvbnN0IG49dC8yNTU7cmV0dXJuIG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9aXNMaWdodGVyKCl7cmV0dXJuKHRoaXMucmdiYS5yKjI5OSt0aGlzLnJnYmEuZyo1ODcrdGhpcy5yZ2JhLmIqMTE0KS8xZTM+PTEyOH1pc0xpZ2h0ZXJUaGFuKHQpe2NvbnN0IG49dGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHI9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPnJ9aXNEYXJrZXJUaGFuKHQpe2NvbnN0IG49dGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHI9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPHJ9bGlnaHRlbih0KXtyZXR1cm4gbmV3IE5lKG5ldyBMZSh0aGlzLmhzbGEuaCx0aGlzLmhzbGEucyx0aGlzLmhzbGEubCt0aGlzLmhzbGEubCp0LHRoaXMuaHNsYS5hKSl9ZGFya2VuKHQpe3JldHVybiBuZXcgTmUobmV3IExlKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sLXRoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX10cmFuc3BhcmVudCh0KXtjb25zdHtyOm4sZzpyLGI6aSxhOnN9PXRoaXMucmdiYTtyZXR1cm4gbmV3IE5lKG5ldyBhZShuLHIsaSxzKnQpKX1pc1RyYW5zcGFyZW50KCl7cmV0dXJuIHRoaXMucmdiYS5hPT09MH1pc09wYXF1ZSgpe3JldHVybiB0aGlzLnJnYmEuYT09PTF9b3Bwb3NpdGUoKXtyZXR1cm4gbmV3IE5lKG5ldyBhZSgyNTUtdGhpcy5yZ2JhLnIsMjU1LXRoaXMucmdiYS5nLDI1NS10aGlzLnJnYmEuYix0aGlzLnJnYmEuYSkpfW1ha2VPcGFxdWUodCl7aWYodGhpcy5pc09wYXF1ZSgpfHx0LnJnYmEuYSE9PTEpcmV0dXJuIHRoaXM7Y29uc3R7cjpuLGc6cixiOmksYTpzfT10aGlzLnJnYmE7cmV0dXJuIG5ldyBOZShuZXcgYWUodC5yZ2JhLnItcyoodC5yZ2JhLnItbiksdC5yZ2JhLmctcyoodC5yZ2JhLmctciksdC5yZ2JhLmItcyoodC5yZ2JhLmItaSksMSkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RvU3RyaW5nfHwodGhpcy5fdG9TdHJpbmc9TmUuRm9ybWF0LkNTUy5mb3JtYXQodGhpcykpLHRoaXMuX3RvU3RyaW5nfXN0YXRpYyBnZXRMaWdodGVyQ29sb3IodCxuLHIpe2lmKHQuaXNMaWdodGVyVGhhbihuKSlyZXR1cm4gdDtyPXJ8fC41O2NvbnN0IGk9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHM9bi5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiByPXIqKHMtaSkvcyx0LmxpZ2h0ZW4ocil9c3RhdGljIGdldERhcmtlckNvbG9yKHQsbixyKXtpZih0LmlzRGFya2VyVGhhbihuKSlyZXR1cm4gdDtyPXJ8fC41O2NvbnN0IGk9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHM9bi5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiByPXIqKGktcykvaSx0LmRhcmtlbihyKX19O3JlLndoaXRlPW5ldyByZShuZXcgYWUoMjU1LDI1NSwyNTUsMSkpLHJlLmJsYWNrPW5ldyByZShuZXcgYWUoMCwwLDAsMSkpLHJlLnJlZD1uZXcgcmUobmV3IGFlKDI1NSwwLDAsMSkpLHJlLmJsdWU9bmV3IHJlKG5ldyBhZSgwLDAsMjU1LDEpKSxyZS5ncmVlbj1uZXcgcmUobmV3IGFlKDAsMjU1LDAsMSkpLHJlLmN5YW49bmV3IHJlKG5ldyBhZSgwLDI1NSwyNTUsMSkpLHJlLmxpZ2h0Z3JleT1uZXcgcmUobmV3IGFlKDIxMSwyMTEsMjExLDEpKSxyZS50cmFuc3BhcmVudD1uZXcgcmUobmV3IGFlKDAsMCwwLDApKSxmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIoZyl7cmV0dXJuIGcucmdiYS5hPT09MT9gcmdiKCR7Zy5yZ2JhLnJ9LCAke2cucmdiYS5nfSwgJHtnLnJnYmEuYn0pYDplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQShnKX1uLmZvcm1hdFJHQj1yO2Z1bmN0aW9uIGkoZyl7cmV0dXJuYHJnYmEoJHtnLnJnYmEucn0sICR7Zy5yZ2JhLmd9LCAke2cucmdiYS5ifSwgJHsrZy5yZ2JhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdFJHQkE9aTtmdW5jdGlvbiBzKGcpe3JldHVybiBnLmhzbGEuYT09PTE/YGhzbCgke2cuaHNsYS5ofSwgJHsoZy5oc2xhLnMqMTAwKS50b0ZpeGVkKDIpfSUsICR7KGcuaHNsYS5sKjEwMCkudG9GaXhlZCgyKX0lKWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhTTEEoZyl9bi5mb3JtYXRIU0w9cztmdW5jdGlvbiBhKGcpe3JldHVybmBoc2xhKCR7Zy5oc2xhLmh9LCAkeyhnLmhzbGEucyoxMDApLnRvRml4ZWQoMil9JSwgJHsoZy5oc2xhLmwqMTAwKS50b0ZpeGVkKDIpfSUsICR7Zy5oc2xhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdEhTTEE9YTtmdW5jdGlvbiBvKGcpe2NvbnN0IG09Zy50b1N0cmluZygxNik7cmV0dXJuIG0ubGVuZ3RoIT09Mj8iMCIrbTptfWZ1bmN0aW9uIGwoZyl7cmV0dXJuYCMke28oZy5yZ2JhLnIpfSR7byhnLnJnYmEuZyl9JHtvKGcucmdiYS5iKX1gfW4uZm9ybWF0SGV4PWw7ZnVuY3Rpb24gdShnLG09ITEpe3JldHVybiBtJiZnLnJnYmEuYT09PTE/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleChnKTpgIyR7byhnLnJnYmEucil9JHtvKGcucmdiYS5nKX0ke28oZy5yZ2JhLmIpfSR7byhNYXRoLnJvdW5kKGcucmdiYS5hKjI1NSkpfWB9bi5mb3JtYXRIZXhBPXU7ZnVuY3Rpb24gZihnKXtyZXR1cm4gZy5pc09wYXF1ZSgpP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgoZyk6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEoZyl9bi5mb3JtYXQ9ZjtmdW5jdGlvbiBoKGcpe2NvbnN0IG09Zy5sZW5ndGg7aWYobT09PTB8fGcuY2hhckNvZGVBdCgwKSE9PTM1KXJldHVybiBudWxsO2lmKG09PT03KXtjb25zdCB2PTE2KmQoZy5jaGFyQ29kZUF0KDEpKStkKGcuY2hhckNvZGVBdCgyKSkscD0xNipkKGcuY2hhckNvZGVBdCgzKSkrZChnLmNoYXJDb2RlQXQoNCkpLHg9MTYqZChnLmNoYXJDb2RlQXQoNSkpK2QoZy5jaGFyQ29kZUF0KDYpKTtyZXR1cm4gbmV3IGUobmV3IGFlKHYscCx4LDEpKX1pZihtPT09OSl7Y29uc3Qgdj0xNipkKGcuY2hhckNvZGVBdCgxKSkrZChnLmNoYXJDb2RlQXQoMikpLHA9MTYqZChnLmNoYXJDb2RlQXQoMykpK2QoZy5jaGFyQ29kZUF0KDQpKSx4PTE2KmQoZy5jaGFyQ29kZUF0KDUpKStkKGcuY2hhckNvZGVBdCg2KSkseT0xNipkKGcuY2hhckNvZGVBdCg3KSkrZChnLmNoYXJDb2RlQXQoOCkpO3JldHVybiBuZXcgZShuZXcgYWUodixwLHgseS8yNTUpKX1pZihtPT09NCl7Y29uc3Qgdj1kKGcuY2hhckNvZGVBdCgxKSkscD1kKGcuY2hhckNvZGVBdCgyKSkseD1kKGcuY2hhckNvZGVBdCgzKSk7cmV0dXJuIG5ldyBlKG5ldyBhZSgxNip2K3YsMTYqcCtwLDE2KngreCkpfWlmKG09PT01KXtjb25zdCB2PWQoZy5jaGFyQ29kZUF0KDEpKSxwPWQoZy5jaGFyQ29kZUF0KDIpKSx4PWQoZy5jaGFyQ29kZUF0KDMpKSx5PWQoZy5jaGFyQ29kZUF0KDQpKTtyZXR1cm4gbmV3IGUobmV3IGFlKDE2KnYrdiwxNipwK3AsMTYqeCt4LCgxNip5K3kpLzI1NSkpfXJldHVybiBudWxsfW4ucGFyc2VIZXg9aDtmdW5jdGlvbiBkKGcpe3N3aXRjaChnKXtjYXNlIDQ4OnJldHVybiAwO2Nhc2UgNDk6cmV0dXJuIDE7Y2FzZSA1MDpyZXR1cm4gMjtjYXNlIDUxOnJldHVybiAzO2Nhc2UgNTI6cmV0dXJuIDQ7Y2FzZSA1MzpyZXR1cm4gNTtjYXNlIDU0OnJldHVybiA2O2Nhc2UgNTU6cmV0dXJuIDc7Y2FzZSA1NjpyZXR1cm4gODtjYXNlIDU3OnJldHVybiA5O2Nhc2UgOTc6cmV0dXJuIDEwO2Nhc2UgNjU6cmV0dXJuIDEwO2Nhc2UgOTg6cmV0dXJuIDExO2Nhc2UgNjY6cmV0dXJuIDExO2Nhc2UgOTk6cmV0dXJuIDEyO2Nhc2UgNjc6cmV0dXJuIDEyO2Nhc2UgMTAwOnJldHVybiAxMztjYXNlIDY4OnJldHVybiAxMztjYXNlIDEwMTpyZXR1cm4gMTQ7Y2FzZSA2OTpyZXR1cm4gMTQ7Y2FzZSAxMDI6cmV0dXJuIDE1O2Nhc2UgNzA6cmV0dXJuIDE1fXJldHVybiAwfX0pKHQuQ1NTfHwodC5DU1M9e30pKX0pKGUuRm9ybWF0fHwoZS5Gb3JtYXQ9e30pKX0ocmV8fChyZT17fSkpO2Z1bmN0aW9uIGtzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3Qgcj1OdW1iZXIobik7KHJ8fHI9PT0wJiZuLnJlcGxhY2UoL1xzL2csIiIpIT09IiIpJiZ0LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24gbHIoZSx0LG4scil7cmV0dXJue3JlZDplLzI1NSxibHVlOm4vMjU1LGdyZWVuOnQvMjU1LGFscGhhOnJ9fWZ1bmN0aW9uIE90KGUsdCl7Y29uc3Qgbj10LmluZGV4LHI9dFswXS5sZW5ndGg7aWYoIW4pcmV0dXJuO2NvbnN0IGk9ZS5wb3NpdGlvbkF0KG4pO3JldHVybntzdGFydExpbmVOdW1iZXI6aS5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOmkuY29sdW1uLGVuZExpbmVOdW1iZXI6aS5saW5lTnVtYmVyLGVuZENvbHVtbjppLmNvbHVtbityfX1mdW5jdGlvbiBYbChlLHQpe2lmKCFlKXJldHVybjtjb25zdCBuPXJlLkZvcm1hdC5DU1MucGFyc2VIZXgodCk7aWYobilyZXR1cm57cmFuZ2U6ZSxjb2xvcjpscihuLnJnYmEucixuLnJnYmEuZyxuLnJnYmEuYixuLnJnYmEuYSl9fWZ1bmN0aW9uIEVzKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCBpPXRbMF0udmFsdWVzKCkscz1rcyhpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpscihzWzBdLHNbMV0sc1syXSxuP3NbM106MSl9fWZ1bmN0aW9uIE1zKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCBpPXRbMF0udmFsdWVzKCkscz1rcyhpKSxhPW5ldyByZShuZXcgTGUoc1swXSxzWzFdLzEwMCxzWzJdLzEwMCxuP3NbM106MSkpO3JldHVybntyYW5nZTplLGNvbG9yOmxyKGEucmdiYS5yLGEucmdiYS5nLGEucmdiYS5iLGEucmdiYS5hKX19ZnVuY3Rpb24ganQoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP1suLi5lLm1hdGNoQWxsKHQpXTplLmZpbmRNYXRjaGVzKHQpfWZ1bmN0aW9uIFFsKGUpe2NvbnN0IHQ9W10scj1qdChlLC9cYihyZ2J8cmdiYXxoc2x8aHNsYSkoXChbMC05XHMsLlwlXSpcKSl8KCMpKFtBLUZhLWYwLTldezN9KVxifCgjKShbQS1GYS1mMC05XXs0fSlcYnwoIykoW0EtRmEtZjAtOV17Nn0pXGJ8KCMpKFtBLUZhLWYwLTldezh9KVxiL2dtKTtpZihyLmxlbmd0aD4wKWZvcihjb25zdCBpIG9mIHIpe2NvbnN0IHM9aS5maWx0ZXIodT0+dSE9PXZvaWQgMCksYT1zWzFdLG89c1syXTtpZighbyljb250aW51ZTtsZXQgbDtpZihhPT09InJnYiIpe2NvbnN0IHU9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqXCkkL2dtO2w9RXMoT3QoZSxpKSxqdChvLHUpLCExKX1lbHNlIGlmKGE9PT0icmdiYSIpe2NvbnN0IHU9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO2w9RXMoT3QoZSxpKSxqdChvLHUpLCEwKX1lbHNlIGlmKGE9PT0iaHNsIil7Y29uc3QgdT0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccypcKSQvZ207bD1NcyhPdChlLGkpLGp0KG8sdSksITEpfWVsc2UgaWYoYT09PSJoc2xhIil7Y29uc3QgdT0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccyosXHMqKDBbLl1bMC05XSt8Wy5dWzAtOV0rfFswMV1bLl18WzAxXSlccypcKSQvZ207bD1NcyhPdChlLGkpLGp0KG8sdSksITApfWVsc2UgYT09PSIjIiYmKGw9WGwoT3QoZSxpKSxhK28pKTtsJiZ0LnB1c2gobCl9cmV0dXJuIHR9ZnVuY3Rpb24gWmwoZSl7cmV0dXJuIWV8fHR5cGVvZiBlLmdldFZhbHVlIT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5wb3NpdGlvbkF0IT0iZnVuY3Rpb24iP1tdOlFsKGUpfWNvbnN0IFJzPS9cYk1BUks6XHMqKC4qKSQvZCxZbD0vXi0rfC0rJC9nO2Z1bmN0aW9uIEtsKGUsdCl7dmFyIG47bGV0IHI9W107aWYodC5maW5kUmVnaW9uU2VjdGlvbkhlYWRlcnMmJighKChuPXQuZm9sZGluZ1J1bGVzKT09PW51bGx8fG49PT12b2lkIDApJiZuLm1hcmtlcnMpKXtjb25zdCBpPWV1KGUsdCk7cj1yLmNvbmNhdChpKX1pZih0LmZpbmRNYXJrU2VjdGlvbkhlYWRlcnMpe2NvbnN0IGk9dHUoZSk7cj1yLmNvbmNhdChpKX1yZXR1cm4gcn1mdW5jdGlvbiBldShlLHQpe2NvbnN0IG49W10scj1lLmdldExpbmVDb3VudCgpO2ZvcihsZXQgaT0xO2k8PXI7aSsrKXtjb25zdCBzPWUuZ2V0TGluZUNvbnRlbnQoaSksYT1zLm1hdGNoKHQuZm9sZGluZ1J1bGVzLm1hcmtlcnMuc3RhcnQpO2lmKGEpe2NvbnN0IG89e3N0YXJ0TGluZU51bWJlcjppLHN0YXJ0Q29sdW1uOmFbMF0ubGVuZ3RoKzEsZW5kTGluZU51bWJlcjppLGVuZENvbHVtbjpzLmxlbmd0aCsxfTtpZihvLmVuZENvbHVtbj5vLnN0YXJ0Q29sdW1uKXtjb25zdCBsPXtyYW5nZTpvLC4uLlRzKHMuc3Vic3RyaW5nKGFbMF0ubGVuZ3RoKSksc2hvdWxkQmVJbkNvbW1lbnRzOiExfTsobC50ZXh0fHxsLmhhc1NlcGFyYXRvckxpbmUpJiZuLnB1c2gobCl9fX1yZXR1cm4gbn1mdW5jdGlvbiB0dShlKXtjb25zdCB0PVtdLG49ZS5nZXRMaW5lQ291bnQoKTtmb3IobGV0IHI9MTtyPD1uO3IrKyl7Y29uc3QgaT1lLmdldExpbmVDb250ZW50KHIpO251KGkscix0KX1yZXR1cm4gdH1mdW5jdGlvbiBudShlLHQsbil7UnMubGFzdEluZGV4PTA7Y29uc3Qgcj1Scy5leGVjKGUpO2lmKHIpe2NvbnN0IGk9ci5pbmRpY2VzWzFdWzBdKzEscz1yLmluZGljZXNbMV1bMV0rMSxhPXtzdGFydExpbmVOdW1iZXI6dCxzdGFydENvbHVtbjppLGVuZExpbmVOdW1iZXI6dCxlbmRDb2x1bW46c307aWYoYS5lbmRDb2x1bW4+YS5zdGFydENvbHVtbil7Y29uc3Qgbz17cmFuZ2U6YSwuLi5UcyhyWzFdKSxzaG91bGRCZUluQ29tbWVudHM6ITB9OyhvLnRleHR8fG8uaGFzU2VwYXJhdG9yTGluZSkmJm4ucHVzaChvKX19fWZ1bmN0aW9uIFRzKGUpe2U9ZS50cmltKCk7Y29uc3QgdD1lLnN0YXJ0c1dpdGgoIi0iKTtyZXR1cm4gZT1lLnJlcGxhY2UoWWwsIiIpLHt0ZXh0OmUsaGFzU2VwYXJhdG9yTGluZTp0fX1jbGFzcyBydSBleHRlbmRzIEdve2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWZpbmRNYXRjaGVzKHQpe2NvbnN0IG49W107Zm9yKGxldCByPTA7cjx0aGlzLl9saW5lcy5sZW5ndGg7cisrKXtjb25zdCBpPXRoaXMuX2xpbmVzW3JdLHM9dGhpcy5vZmZzZXRBdChuZXcgUGUocisxLDEpKSxhPWkubWF0Y2hBbGwodCk7Zm9yKGNvbnN0IG8gb2YgYSkoby5pbmRleHx8by5pbmRleD09PTApJiYoby5pbmRleD1vLmluZGV4K3MpLG4ucHVzaChvKX1yZXR1cm4gbn1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudCh0KXtyZXR1cm4gdGhpcy5fbGluZXNbdC0xXX1nZXRXb3JkQXRQb3NpdGlvbih0LG4pe2NvbnN0IHI9SG4odC5jb2x1bW4sc2kobiksdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLDApO3JldHVybiByP25ldyBzZSh0LmxpbmVOdW1iZXIsci5zdGFydENvbHVtbix0LmxpbmVOdW1iZXIsci5lbmRDb2x1bW4pOm51bGx9d29yZHModCl7Y29uc3Qgbj10aGlzLl9saW5lcyxyPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCBpPTAscz0iIixhPTAsbz1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKGE8by5sZW5ndGgpe2NvbnN0IGw9cy5zdWJzdHJpbmcob1thXS5zdGFydCxvW2FdLmVuZCk7YSs9MSx5aWVsZCBsfWVsc2UgaWYoaTxuLmxlbmd0aClzPW5baV0sbz1yKHMsdCksYT0wLGkrPTE7ZWxzZSBicmVha319fWdldExpbmVXb3Jkcyh0LG4pe2NvbnN0IHI9dGhpcy5fbGluZXNbdC0xXSxpPXRoaXMuX3dvcmRlbml6ZShyLG4pLHM9W107Zm9yKGNvbnN0IGEgb2YgaSlzLnB1c2goe3dvcmQ6ci5zdWJzdHJpbmcoYS5zdGFydCxhLmVuZCksc3RhcnRDb2x1bW46YS5zdGFydCsxLGVuZENvbHVtbjphLmVuZCsxfSk7cmV0dXJuIHN9X3dvcmRlbml6ZSh0LG4pe2NvbnN0IHI9W107bGV0IGk7Zm9yKG4ubGFzdEluZGV4PTA7KGk9bi5leGVjKHQpKSYmaVswXS5sZW5ndGghPT0wOylyLnB1c2goe3N0YXJ0OmkuaW5kZXgsZW5kOmkuaW5kZXgraVswXS5sZW5ndGh9KTtyZXR1cm4gcn1nZXRWYWx1ZUluUmFuZ2UodCl7aWYodD10aGlzLl92YWxpZGF0ZVJhbmdlKHQpLHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyKXJldHVybiB0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5zdGFydENvbHVtbi0xLHQuZW5kQ29sdW1uLTEpO2NvbnN0IG49dGhpcy5fZW9sLHI9dC5zdGFydExpbmVOdW1iZXItMSxpPXQuZW5kTGluZU51bWJlci0xLHM9W107cy5wdXNoKHRoaXMuX2xpbmVzW3JdLnN1YnN0cmluZyh0LnN0YXJ0Q29sdW1uLTEpKTtmb3IobGV0IGE9cisxO2E8aTthKyspcy5wdXNoKHRoaXMuX2xpbmVzW2FdKTtyZXR1cm4gcy5wdXNoKHRoaXMuX2xpbmVzW2ldLnN1YnN0cmluZygwLHQuZW5kQ29sdW1uLTEpKSxzLmpvaW4obil9b2Zmc2V0QXQodCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih0KSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCksdGhpcy5fbGluZVN0YXJ0cy5nZXRQcmVmaXhTdW0odC5saW5lTnVtYmVyLTIpKyh0LmNvbHVtbi0xKX1wb3NpdGlvbkF0KHQpe3Q9TWF0aC5mbG9vcih0KSx0PU1hdGgubWF4KDAsdCksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpO2NvbnN0IG49dGhpcy5fbGluZVN0YXJ0cy5nZXRJbmRleE9mKHQpLHI9dGhpcy5fbGluZXNbbi5pbmRleF0ubGVuZ3RoO3JldHVybntsaW5lTnVtYmVyOjErbi5pbmRleCxjb2x1bW46MStNYXRoLm1pbihuLnJlbWFpbmRlcixyKX19X3ZhbGlkYXRlUmFuZ2UodCl7Y29uc3Qgbj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSkscj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixjb2x1bW46dC5lbmRDb2x1bW59KTtyZXR1cm4gbi5saW5lTnVtYmVyIT09dC5zdGFydExpbmVOdW1iZXJ8fG4uY29sdW1uIT09dC5zdGFydENvbHVtbnx8ci5saW5lTnVtYmVyIT09dC5lbmRMaW5lTnVtYmVyfHxyLmNvbHVtbiE9PXQuZW5kQ29sdW1uP3tzdGFydExpbmVOdW1iZXI6bi5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOm4uY29sdW1uLGVuZExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGVuZENvbHVtbjpyLmNvbHVtbn06dH1fdmFsaWRhdGVQb3NpdGlvbih0KXtpZighUGUuaXNJUG9zaXRpb24odCkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9zaXRpb24iKTtsZXR7bGluZU51bWJlcjpuLGNvbHVtbjpyfT10LGk9ITE7aWYobjwxKW49MSxyPTEsaT0hMDtlbHNlIGlmKG4+dGhpcy5fbGluZXMubGVuZ3RoKW49dGhpcy5fbGluZXMubGVuZ3RoLHI9dGhpcy5fbGluZXNbbi0xXS5sZW5ndGgrMSxpPSEwO2Vsc2V7Y29uc3Qgcz10aGlzLl9saW5lc1tuLTFdLmxlbmd0aCsxO3I8MT8ocj0xLGk9ITApOnI+cyYmKHI9cyxpPSEwKX1yZXR1cm4gaT97bGluZU51bWJlcjpuLGNvbHVtbjpyfTp0fX1jbGFzcyBpdHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX2hvc3Q9dCx0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT1uLHRoaXMuX2ZvcmVpZ25Nb2R1bGU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCl9X2dldE1vZGVsKHQpe3JldHVybiB0aGlzLl9tb2RlbHNbdF19X2dldE1vZGVscygpe2NvbnN0IHQ9W107cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21vZGVscykuZm9yRWFjaChuPT50LnB1c2godGhpcy5fbW9kZWxzW25dKSksdH1hY2NlcHROZXdNb2RlbCh0KXt0aGlzLl9tb2RlbHNbdC51cmxdPW5ldyBydShVbi5wYXJzZSh0LnVybCksdC5saW5lcyx0LkVPTCx0LnZlcnNpb25JZCl9YWNjZXB0TW9kZWxDaGFuZ2VkKHQsbil7aWYoIXRoaXMuX21vZGVsc1t0XSlyZXR1cm47dGhpcy5fbW9kZWxzW3RdLm9uRXZlbnRzKG4pfWFjY2VwdFJlbW92ZWRNb2RlbCh0KXt0aGlzLl9tb2RlbHNbdF0mJmRlbGV0ZSB0aGlzLl9tb2RlbHNbdF19YXN5bmMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQsbixyKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBpP3dsLmNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhpLG4scik6e3JhbmdlczpbXSxoYXNNb3JlOiExLGFtYmlndW91c0NoYXJhY3RlckNvdW50OjAsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6MCxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6MH19YXN5bmMgZmluZFNlY3Rpb25IZWFkZXJzKHQsbil7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gcj9LbChyLG4pOltdfWFzeW5jIGNvbXB1dGVEaWZmKHQsbixyLGkpe2NvbnN0IHM9dGhpcy5fZ2V0TW9kZWwodCksYT10aGlzLl9nZXRNb2RlbChuKTtyZXR1cm4hc3x8IWE/bnVsbDppdC5jb21wdXRlRGlmZihzLGEscixpKX1zdGF0aWMgY29tcHV0ZURpZmYodCxuLHIsaSl7Y29uc3Qgcz1pPT09ImFkdmFuY2VkIj9Dcy5nZXREZWZhdWx0KCk6Q3MuZ2V0TGVnYWN5KCksYT10LmdldExpbmVzQ29udGVudCgpLG89bi5nZXRMaW5lc0NvbnRlbnQoKSxsPXMuY29tcHV0ZURpZmYoYSxvLHIpLHU9bC5jaGFuZ2VzLmxlbmd0aD4wPyExOnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbCh0LG4pO2Z1bmN0aW9uIGYoaCl7cmV0dXJuIGgubWFwKGQ9Pnt2YXIgZztyZXR1cm5bZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsZC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGQubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLGQubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwoZz1kLmlubmVyQ2hhbmdlcyk9PT1udWxsfHxnPT09dm9pZCAwP3ZvaWQgMDpnLm1hcChtPT5bbS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcixtLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4sbS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIsbS5vcmlnaW5hbFJhbmdlLmVuZENvbHVtbixtLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLG0ubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbixtLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcixtLm1vZGlmaWVkUmFuZ2UuZW5kQ29sdW1uXSldfSl9cmV0dXJue2lkZW50aWNhbDp1LHF1aXRFYXJseTpsLmhpdFRpbWVvdXQsY2hhbmdlczpmKGwuY2hhbmdlcyksbW92ZXM6bC5tb3Zlcy5tYXAoaD0+W2gubGluZVJhbmdlTWFwcGluZy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsaC5saW5lUmFuZ2VNYXBwaW5nLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsaC5saW5lUmFuZ2VNYXBwaW5nLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixoLmxpbmVSYW5nZU1hcHBpbmcubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxmKGguY2hhbmdlcyldKX19c3RhdGljIF9tb2RlbHNBcmVJZGVudGljYWwodCxuKXtjb25zdCByPXQuZ2V0TGluZUNvdW50KCksaT1uLmdldExpbmVDb3VudCgpO2lmKHIhPT1pKXJldHVybiExO2ZvcihsZXQgcz0xO3M8PXI7cysrKXtjb25zdCBhPXQuZ2V0TGluZUNvbnRlbnQocyksbz1uLmdldExpbmVDb250ZW50KHMpO2lmKGEhPT1vKXJldHVybiExfXJldHVybiEwfWFzeW5jIGNvbXB1dGVNb3JlTWluaW1hbEVkaXRzKHQsbixyKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKHQpO2lmKCFpKXJldHVybiBuO2NvbnN0IHM9W107bGV0IGE7bj1uLnNsaWNlKDApLnNvcnQoKGwsdSk9PntpZihsLnJhbmdlJiZ1LnJhbmdlKXJldHVybiBzZS5jb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMobC5yYW5nZSx1LnJhbmdlKTtjb25zdCBmPWwucmFuZ2U/MDoxLGg9dS5yYW5nZT8wOjE7cmV0dXJuIGYtaH0pO2xldCBvPTA7Zm9yKGxldCBsPTE7bDxuLmxlbmd0aDtsKyspc2UuZ2V0RW5kUG9zaXRpb24obltvXS5yYW5nZSkuZXF1YWxzKHNlLmdldFN0YXJ0UG9zaXRpb24obltsXS5yYW5nZSkpPyhuW29dLnJhbmdlPXNlLmZyb21Qb3NpdGlvbnMoc2UuZ2V0U3RhcnRQb3NpdGlvbihuW29dLnJhbmdlKSxzZS5nZXRFbmRQb3NpdGlvbihuW2xdLnJhbmdlKSksbltvXS50ZXh0Kz1uW2xdLnRleHQpOihvKyssbltvXT1uW2xdKTtuLmxlbmd0aD1vKzE7Zm9yKGxldHtyYW5nZTpsLHRleHQ6dSxlb2w6Zn1vZiBuKXtpZih0eXBlb2YgZj09Im51bWJlciImJihhPWYpLHNlLmlzRW1wdHkobCkmJiF1KWNvbnRpbnVlO2NvbnN0IGg9aS5nZXRWYWx1ZUluUmFuZ2UobCk7aWYodT11LnJlcGxhY2UoL1xyXG58XG58XHIvZyxpLmVvbCksaD09PXUpY29udGludWU7aWYoTWF0aC5tYXgodS5sZW5ndGgsaC5sZW5ndGgpPml0Ll9kaWZmTGltaXQpe3MucHVzaCh7cmFuZ2U6bCx0ZXh0OnV9KTtjb250aW51ZX1jb25zdCBkPXdvKGgsdSxyKSxnPWkub2Zmc2V0QXQoc2UubGlmdChsKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBtIG9mIGQpe2NvbnN0IHY9aS5wb3NpdGlvbkF0KGcrbS5vcmlnaW5hbFN0YXJ0KSxwPWkucG9zaXRpb25BdChnK20ub3JpZ2luYWxTdGFydCttLm9yaWdpbmFsTGVuZ3RoKSx4PXt0ZXh0OnUuc3Vic3RyKG0ubW9kaWZpZWRTdGFydCxtLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnYubGluZU51bWJlcixzdGFydENvbHVtbjp2LmNvbHVtbixlbmRMaW5lTnVtYmVyOnAubGluZU51bWJlcixlbmRDb2x1bW46cC5jb2x1bW59fTtpLmdldFZhbHVlSW5SYW5nZSh4LnJhbmdlKSE9PXgudGV4dCYmcy5wdXNoKHgpfX1yZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIiJiZzLnB1c2goe2VvbDphLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHN9YXN5bmMgY29tcHV0ZUxpbmtzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/dGwobik6bnVsbH1hc3luYyBjb21wdXRlRGVmYXVsdERvY3VtZW50Q29sb3JzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/Wmwobik6bnVsbH1hc3luYyB0ZXh0dWFsU3VnZ2VzdCh0LG4scixpKXtjb25zdCBzPW5ldyBLdCxhPW5ldyBSZWdFeHAocixpKSxvPW5ldyBTZXQ7ZTpmb3IoY29uc3QgbCBvZiB0KXtjb25zdCB1PXRoaXMuX2dldE1vZGVsKGwpO2lmKHUpe2Zvcihjb25zdCBmIG9mIHUud29yZHMoYSkpaWYoIShmPT09bnx8IWlzTmFOKE51bWJlcihmKSkpJiYoby5hZGQoZiksby5zaXplPml0Ll9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShvKSxkdXJhdGlvbjpzLmVsYXBzZWQoKX19YXN5bmMgY29tcHV0ZVdvcmRSYW5nZXModCxuLHIsaSl7Y29uc3Qgcz10aGlzLl9nZXRNb2RlbCh0KTtpZighcylyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBhPW5ldyBSZWdFeHAocixpKSxvPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBsPW4uc3RhcnRMaW5lTnVtYmVyO2w8bi5lbmRMaW5lTnVtYmVyO2wrKyl7Y29uc3QgdT1zLmdldExpbmVXb3JkcyhsLGEpO2Zvcihjb25zdCBmIG9mIHUpe2lmKCFpc05hTihOdW1iZXIoZi53b3JkKSkpY29udGludWU7bGV0IGg9b1tmLndvcmRdO2h8fChoPVtdLG9bZi53b3JkXT1oKSxoLnB1c2goe3N0YXJ0TGluZU51bWJlcjpsLHN0YXJ0Q29sdW1uOmYuc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjpsLGVuZENvbHVtbjpmLmVuZENvbHVtbn0pfX1yZXR1cm4gb31hc3luYyBuYXZpZ2F0ZVZhbHVlU2V0KHQsbixyLGkscyl7Y29uc3QgYT10aGlzLl9nZXRNb2RlbCh0KTtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBvPW5ldyBSZWdFeHAoaSxzKTtuLnN0YXJ0Q29sdW1uPT09bi5lbmRDb2x1bW4mJihuPXtzdGFydExpbmVOdW1iZXI6bi5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46bi5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOm4uZW5kTGluZU51bWJlcixlbmRDb2x1bW46bi5lbmRDb2x1bW4rMX0pO2NvbnN0IGw9YS5nZXRWYWx1ZUluUmFuZ2UobiksdT1hLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOm4uc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjpuLnN0YXJ0Q29sdW1ufSxvKTtpZighdSlyZXR1cm4gbnVsbDtjb25zdCBmPWEuZ2V0VmFsdWVJblJhbmdlKHUpO3JldHVybiBKbi5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KG4sbCx1LGYscil9bG9hZEZvcmVpZ25Nb2R1bGUodCxuLHIpe2NvbnN0IGE9e2hvc3Q6R2EociwobyxsKT0+dGhpcy5faG9zdC5maHIobyxsKSksZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGEsbiksUHJvbWlzZS5yZXNvbHZlKFRuKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcih0LG4pe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHx0eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVt0XSE9ImZ1bmN0aW9uIilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIit0KSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVt0XS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLG4pKX1jYXRjaChyKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qocil9fX1pdC5fZGlmZkxpbWl0PTFlNSxpdC5fc3VnZ2VzdGlvbnNMaW1pdD0xZTQsdHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiImJihnbG9iYWxUaGlzLm1vbmFjbz1obCgpKTtsZXQgdXI9ITE7ZnVuY3Rpb24gUHMoZSl7aWYodXIpcmV0dXJuO3VyPSEwO2NvbnN0IHQ9bmV3IHhvKG49PntnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKG4pfSxuPT5uZXcgaXQobixlKSk7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9bj0+e3Qub25tZXNzYWdlKG4uZGF0YSl9fWdsb2JhbFRoaXMub25tZXNzYWdlPWU9Pnt1cnx8UHMobnVsbCl9Oy8qIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBWZXJzaW9uOiAwLjQ4LjAoMDAzN2IxM2ZiNWQxODZmZGYxZTdkZjUxYTk0MTZhMmRlMmI4YzY3MCkKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvbW9uYWNvLWVkaXRvci9ibG9iL21haW4vTElDRU5TRS50eHQKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovZnVuY3Rpb24gY3IoZSx0KXt0PT09dm9pZCAwJiYodD0hMSk7dmFyIG49ZS5sZW5ndGgscj0wLGk9IiIscz0wLGE9MTYsbz0wLGw9MCx1PTAsZj0wLGg9MDtmdW5jdGlvbiBkKGIsTCl7Zm9yKHZhciBTPTAsXz0wO1M8Ynx8IUw7KXt2YXIgTj1lLmNoYXJDb2RlQXQocik7aWYoTj49NDgmJk48PTU3KV89XyoxNitOLTQ4O2Vsc2UgaWYoTj49NjUmJk48PTcwKV89XyoxNitOLTY1KzEwO2Vsc2UgaWYoTj49OTcmJk48PTEwMilfPV8qMTYrTi05NysxMDtlbHNlIGJyZWFrO3IrKyxTKyt9cmV0dXJuIFM8YiYmKF89LTEpLF99ZnVuY3Rpb24gZyhiKXtyPWIsaT0iIixzPTAsYT0xNixoPTB9ZnVuY3Rpb24gbSgpe3ZhciBiPXI7aWYoZS5jaGFyQ29kZUF0KHIpPT09NDgpcisrO2Vsc2UgZm9yKHIrKztyPGUubGVuZ3RoJiZMdChlLmNoYXJDb2RlQXQocikpOylyKys7aWYocjxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KHIpPT09NDYpaWYocisrLHI8ZS5sZW5ndGgmJkx0KGUuY2hhckNvZGVBdChyKSkpZm9yKHIrKztyPGUubGVuZ3RoJiZMdChlLmNoYXJDb2RlQXQocikpOylyKys7ZWxzZSByZXR1cm4gaD0zLGUuc3Vic3RyaW5nKGIscik7dmFyIEw9cjtpZihyPGUubGVuZ3RoJiYoZS5jaGFyQ29kZUF0KHIpPT09Njl8fGUuY2hhckNvZGVBdChyKT09PTEwMSkpaWYocisrLChyPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQocik9PT00M3x8ZS5jaGFyQ29kZUF0KHIpPT09NDUpJiZyKysscjxlLmxlbmd0aCYmTHQoZS5jaGFyQ29kZUF0KHIpKSl7Zm9yKHIrKztyPGUubGVuZ3RoJiZMdChlLmNoYXJDb2RlQXQocikpOylyKys7TD1yfWVsc2UgaD0zO3JldHVybiBlLnN1YnN0cmluZyhiLEwpfWZ1bmN0aW9uIHYoKXtmb3IodmFyIGI9IiIsTD1yOzspe2lmKHI+PW4pe2IrPWUuc3Vic3RyaW5nKEwsciksaD0yO2JyZWFrfXZhciBTPWUuY2hhckNvZGVBdChyKTtpZihTPT09MzQpe2IrPWUuc3Vic3RyaW5nKEwscikscisrO2JyZWFrfWlmKFM9PT05Mil7aWYoYis9ZS5zdWJzdHJpbmcoTCxyKSxyKysscj49bil7aD0yO2JyZWFrfXZhciBfPWUuY2hhckNvZGVBdChyKyspO3N3aXRjaChfKXtjYXNlIDM0OmIrPSciJzticmVhaztjYXNlIDkyOmIrPSJcXCI7YnJlYWs7Y2FzZSA0NzpiKz0iLyI7YnJlYWs7Y2FzZSA5ODpiKz0iXGIiO2JyZWFrO2Nhc2UgMTAyOmIrPSJcZiI7YnJlYWs7Y2FzZSAxMTA6Yis9YApgO2JyZWFrO2Nhc2UgMTE0OmIrPSJcciI7YnJlYWs7Y2FzZSAxMTY6Yis9IgkiO2JyZWFrO2Nhc2UgMTE3OnZhciBOPWQoNCwhMCk7Tj49MD9iKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE4pOmg9NDticmVhaztkZWZhdWx0Omg9NX1MPXI7Y29udGludWV9aWYoUz49MCYmUzw9MzEpaWYocXQoUykpe2IrPWUuc3Vic3RyaW5nKEwsciksaD0yO2JyZWFrfWVsc2UgaD02O3IrK31yZXR1cm4gYn1mdW5jdGlvbiBwKCl7aWYoaT0iIixoPTAscz1yLGw9byxmPXUscj49bilyZXR1cm4gcz1uLGE9MTc7dmFyIGI9ZS5jaGFyQ29kZUF0KHIpO2lmKGZyKGIpKXtkbyByKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZShiKSxiPWUuY2hhckNvZGVBdChyKTt3aGlsZShmcihiKSk7cmV0dXJuIGE9MTV9aWYocXQoYikpcmV0dXJuIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGIpLGI9PT0xMyYmZS5jaGFyQ29kZUF0KHIpPT09MTAmJihyKyssaSs9YApgKSxvKyssdT1yLGE9MTQ7c3dpdGNoKGIpe2Nhc2UgMTIzOnJldHVybiByKyssYT0xO2Nhc2UgMTI1OnJldHVybiByKyssYT0yO2Nhc2UgOTE6cmV0dXJuIHIrKyxhPTM7Y2FzZSA5MzpyZXR1cm4gcisrLGE9NDtjYXNlIDU4OnJldHVybiByKyssYT02O2Nhc2UgNDQ6cmV0dXJuIHIrKyxhPTU7Y2FzZSAzNDpyZXR1cm4gcisrLGk9digpLGE9MTA7Y2FzZSA0Nzp2YXIgTD1yLTE7aWYoZS5jaGFyQ29kZUF0KHIrMSk9PT00Nyl7Zm9yKHIrPTI7cjxuJiYhcXQoZS5jaGFyQ29kZUF0KHIpKTspcisrO3JldHVybiBpPWUuc3Vic3RyaW5nKEwsciksYT0xMn1pZihlLmNoYXJDb2RlQXQocisxKT09PTQyKXtyKz0yO2Zvcih2YXIgUz1uLTEsXz0hMTtyPFM7KXt2YXIgTj1lLmNoYXJDb2RlQXQocik7aWYoTj09PTQyJiZlLmNoYXJDb2RlQXQocisxKT09PTQ3KXtyKz0yLF89ITA7YnJlYWt9cisrLHF0KE4pJiYoTj09PTEzJiZlLmNoYXJDb2RlQXQocik9PT0xMCYmcisrLG8rKyx1PXIpfXJldHVybiBffHwocisrLGg9MSksaT1lLnN1YnN0cmluZyhMLHIpLGE9MTN9cmV0dXJuIGkrPVN0cmluZy5mcm9tQ2hhckNvZGUoYikscisrLGE9MTY7Y2FzZSA0NTppZihpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGIpLHIrKyxyPT09bnx8IUx0KGUuY2hhckNvZGVBdChyKSkpcmV0dXJuIGE9MTY7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gaSs9bSgpLGE9MTE7ZGVmYXVsdDpmb3IoO3I8biYmeChiKTspcisrLGI9ZS5jaGFyQ29kZUF0KHIpO2lmKHMhPT1yKXtzd2l0Y2goaT1lLnN1YnN0cmluZyhzLHIpLGkpe2Nhc2UidHJ1ZSI6cmV0dXJuIGE9ODtjYXNlImZhbHNlIjpyZXR1cm4gYT05O2Nhc2UibnVsbCI6cmV0dXJuIGE9N31yZXR1cm4gYT0xNn1yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZShiKSxyKyssYT0xNn19ZnVuY3Rpb24geChiKXtpZihmcihiKXx8cXQoYikpcmV0dXJuITE7c3dpdGNoKGIpe2Nhc2UgMTI1OmNhc2UgOTM6Y2FzZSAxMjM6Y2FzZSA5MTpjYXNlIDM0OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDQ3OnJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHkoKXt2YXIgYjtkbyBiPXAoKTt3aGlsZShiPj0xMiYmYjw9MTUpO3JldHVybiBifXJldHVybntzZXRQb3NpdGlvbjpnLGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNjYW46dD95OnAsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBpfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBzfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiByLXN9LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gcy1mfSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGh9fX1mdW5jdGlvbiBmcihlKXtyZXR1cm4gZT09PTMyfHxlPT09OXx8ZT09PTExfHxlPT09MTJ8fGU9PT0xNjB8fGU9PT01NzYwfHxlPj04MTkyJiZlPD04MjAzfHxlPT09ODIzOXx8ZT09PTgyODd8fGU9PT0xMjI4OHx8ZT09PTY1Mjc5fWZ1bmN0aW9uIHF0KGUpe3JldHVybiBlPT09MTB8fGU9PT0xM3x8ZT09PTgyMzJ8fGU9PT04MjMzfWZ1bmN0aW9uIEx0KGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gaXUoZSx0LG4pe3ZhciByLGkscyxhLG87aWYodCl7Zm9yKGE9dC5vZmZzZXQsbz1hK3QubGVuZ3RoLHM9YTtzPjAmJiFGcyhlLHMtMSk7KXMtLTtmb3IodmFyIGw9bztsPGUubGVuZ3RoJiYhRnMoZSxsKTspbCsrO2k9ZS5zdWJzdHJpbmcocyxsKSxyPXN1KGksbil9ZWxzZSBpPWUscj0wLHM9MCxhPTAsbz1lLmxlbmd0aDt2YXIgdT1hdShuLGUpLGY9ITEsaD0wLGQ7bi5pbnNlcnRTcGFjZXM/ZD1ocigiICIsbi50YWJTaXplfHw0KTpkPSIJIjt2YXIgZz1jcihpLCExKSxtPSExO2Z1bmN0aW9uIHYoKXtyZXR1cm4gdStocihkLHIraCl9ZnVuY3Rpb24gcCgpe3ZhciB3PWcuc2NhbigpO2ZvcihmPSExO3c9PT0xNXx8dz09PTE0OylmPWZ8fHc9PT0xNCx3PWcuc2NhbigpO3JldHVybiBtPXc9PT0xNnx8Zy5nZXRUb2tlbkVycm9yKCkhPT0wLHd9dmFyIHg9W107ZnVuY3Rpb24geSh3LFQsRil7IW0mJighdHx8VDxvJiZGPmEpJiZlLnN1YnN0cmluZyhULEYpIT09dyYmeC5wdXNoKHtvZmZzZXQ6VCxsZW5ndGg6Ri1ULGNvbnRlbnQ6d30pfXZhciBiPXAoKTtpZihiIT09MTcpe3ZhciBMPWcuZ2V0VG9rZW5PZmZzZXQoKStzLFM9aHIoZCxyKTt5KFMscyxMKX1mb3IoO2IhPT0xNzspe2Zvcih2YXIgXz1nLmdldFRva2VuT2Zmc2V0KCkrZy5nZXRUb2tlbkxlbmd0aCgpK3MsTj1wKCksQT0iIixNPSExOyFmJiYoTj09PTEyfHxOPT09MTMpOyl7dmFyIEk9Zy5nZXRUb2tlbk9mZnNldCgpK3M7eSgiICIsXyxJKSxfPWcuZ2V0VG9rZW5PZmZzZXQoKStnLmdldFRva2VuTGVuZ3RoKCkrcyxNPU49PT0xMixBPU0/digpOiIiLE49cCgpfWlmKE49PT0yKWIhPT0xJiYoaC0tLEE9digpKTtlbHNlIGlmKE49PT00KWIhPT0zJiYoaC0tLEE9digpKTtlbHNle3N3aXRjaChiKXtjYXNlIDM6Y2FzZSAxOmgrKyxBPXYoKTticmVhaztjYXNlIDU6Y2FzZSAxMjpBPXYoKTticmVhaztjYXNlIDEzOmY/QT12KCk6TXx8KEE9IiAiKTticmVhaztjYXNlIDY6TXx8KEE9IiAiKTticmVhaztjYXNlIDEwOmlmKE49PT02KXtNfHwoQT0iIik7YnJlYWt9Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMTpjYXNlIDI6Y2FzZSA0Ok49PT0xMnx8Tj09PTEzP018fChBPSIgIik6TiE9PTUmJk4hPT0xNyYmKG09ITApO2JyZWFrO2Nhc2UgMTY6bT0hMDticmVha31mJiYoTj09PTEyfHxOPT09MTMpJiYoQT12KCkpfU49PT0xNyYmKEE9bi5pbnNlcnRGaW5hbE5ld2xpbmU/dToiIik7dmFyIEM9Zy5nZXRUb2tlbk9mZnNldCgpK3M7eShBLF8sQyksYj1OfXJldHVybiB4fWZ1bmN0aW9uIGhyKGUsdCl7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPWU7cmV0dXJuIG59ZnVuY3Rpb24gc3UoZSx0KXtmb3IodmFyIG49MCxyPTAsaT10LnRhYlNpemV8fDQ7bjxlLmxlbmd0aDspe3ZhciBzPWUuY2hhckF0KG4pO2lmKHM9PT0iICIpcisrO2Vsc2UgaWYocz09PSIJIilyKz1pO2Vsc2UgYnJlYWs7bisrfXJldHVybiBNYXRoLmZsb29yKHIvaSl9ZnVuY3Rpb24gYXUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dC5jaGFyQXQobik7aWYocj09PSJcciIpcmV0dXJuIG4rMTx0Lmxlbmd0aCYmdC5jaGFyQXQobisxKT09PWAKYD9gXHIKYDoiXHIiO2lmKHI9PT1gCmApcmV0dXJuYApgfXJldHVybiBlJiZlLmVvbHx8YApgfWZ1bmN0aW9uIEZzKGUsdCl7cmV0dXJuYFxyCmAuaW5kZXhPZihlLmNoYXJBdCh0KSkhPT0tMX12YXIgZ247KGZ1bmN0aW9uKGUpe2UuREVGQVVMVD17YWxsb3dUcmFpbGluZ0NvbW1hOiExfX0pKGdufHwoZ249e30pKTtmdW5jdGlvbiBvdShlLHQsbil7dD09PXZvaWQgMCYmKHQ9W10pLG49PT12b2lkIDAmJihuPWduLkRFRkFVTFQpO3ZhciByPW51bGwsaT1bXSxzPVtdO2Z1bmN0aW9uIGEobCl7QXJyYXkuaXNBcnJheShpKT9pLnB1c2gobCk6ciE9PW51bGwmJihpW3JdPWwpfXZhciBvPXtvbk9iamVjdEJlZ2luOmZ1bmN0aW9uKCl7dmFyIGw9e307YShsKSxzLnB1c2goaSksaT1sLHI9bnVsbH0sb25PYmplY3RQcm9wZXJ0eTpmdW5jdGlvbihsKXtyPWx9LG9uT2JqZWN0RW5kOmZ1bmN0aW9uKCl7aT1zLnBvcCgpfSxvbkFycmF5QmVnaW46ZnVuY3Rpb24oKXt2YXIgbD1bXTthKGwpLHMucHVzaChpKSxpPWwscj1udWxsfSxvbkFycmF5RW5kOmZ1bmN0aW9uKCl7aT1zLnBvcCgpfSxvbkxpdGVyYWxWYWx1ZTphLG9uRXJyb3I6ZnVuY3Rpb24obCx1LGYpe3QucHVzaCh7ZXJyb3I6bCxvZmZzZXQ6dSxsZW5ndGg6Zn0pfX07cmV0dXJuIHV1KGUsbyxuKSxpWzBdfWZ1bmN0aW9uIElzKGUpe2lmKCFlLnBhcmVudHx8IWUucGFyZW50LmNoaWxkcmVuKXJldHVybltdO3ZhciB0PUlzKGUucGFyZW50KTtpZihlLnBhcmVudC50eXBlPT09InByb3BlcnR5Iil7dmFyIG49ZS5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWU7dC5wdXNoKG4pfWVsc2UgaWYoZS5wYXJlbnQudHlwZT09PSJhcnJheSIpe3ZhciByPWUucGFyZW50LmNoaWxkcmVuLmluZGV4T2YoZSk7ciE9PS0xJiZ0LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24gZHIoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIGUuY2hpbGRyZW4ubWFwKGRyKTtjYXNlIm9iamVjdCI6Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksbj0wLHI9ZS5jaGlsZHJlbjtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxzPWkuY2hpbGRyZW5bMV07cyYmKHRbaS5jaGlsZHJlblswXS52YWx1ZV09ZHIocykpfXJldHVybiB0O2Nhc2UibnVsbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiBlLnZhbHVlO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBsdShlLHQsbil7cmV0dXJuIG49PT12b2lkIDAmJihuPSExKSx0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8biYmdD09PWUub2Zmc2V0K2UubGVuZ3RofWZ1bmN0aW9uIERzKGUsdCxuKXtpZihuPT09dm9pZCAwJiYobj0hMSksbHUoZSx0LG4pKXt2YXIgcj1lLmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPTA7aTxyLmxlbmd0aCYmcltpXS5vZmZzZXQ8PXQ7aSsrKXt2YXIgcz1EcyhyW2ldLHQsbik7aWYocylyZXR1cm4gc31yZXR1cm4gZX19ZnVuY3Rpb24gdXUoZSx0LG4pe249PT12b2lkIDAmJihuPWduLkRFRkFVTFQpO3ZhciByPWNyKGUsITEpO2Z1bmN0aW9uIGkoTSl7cmV0dXJuIE0/ZnVuY3Rpb24oKXtyZXR1cm4gTShyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fWZ1bmN0aW9uIHMoTSl7cmV0dXJuIE0/ZnVuY3Rpb24oSSl7cmV0dXJuIE0oSSxyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fXZhciBhPWkodC5vbk9iamVjdEJlZ2luKSxvPXModC5vbk9iamVjdFByb3BlcnR5KSxsPWkodC5vbk9iamVjdEVuZCksdT1pKHQub25BcnJheUJlZ2luKSxmPWkodC5vbkFycmF5RW5kKSxoPXModC5vbkxpdGVyYWxWYWx1ZSksZD1zKHQub25TZXBhcmF0b3IpLGc9aSh0Lm9uQ29tbWVudCksbT1zKHQub25FcnJvciksdj1uJiZuLmRpc2FsbG93Q29tbWVudHMscD1uJiZuLmFsbG93VHJhaWxpbmdDb21tYTtmdW5jdGlvbiB4KCl7Zm9yKDs7KXt2YXIgTT1yLnNjYW4oKTtzd2l0Y2goci5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDp5KDE0KTticmVhaztjYXNlIDU6eSgxNSk7YnJlYWs7Y2FzZSAzOnkoMTMpO2JyZWFrO2Nhc2UgMTp2fHx5KDExKTticmVhaztjYXNlIDI6eSgxMik7YnJlYWs7Y2FzZSA2OnkoMTYpO2JyZWFrfXN3aXRjaChNKXtjYXNlIDEyOmNhc2UgMTM6dj95KDEwKTpnKCk7YnJlYWs7Y2FzZSAxNjp5KDEpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiBNfX19ZnVuY3Rpb24geShNLEksQyl7aWYoST09PXZvaWQgMCYmKEk9W10pLEM9PT12b2lkIDAmJihDPVtdKSxtKE0pLEkubGVuZ3RoK0MubGVuZ3RoPjApZm9yKHZhciB3PXIuZ2V0VG9rZW4oKTt3IT09MTc7KXtpZihJLmluZGV4T2YodykhPT0tMSl7eCgpO2JyZWFrfWVsc2UgaWYoQy5pbmRleE9mKHcpIT09LTEpYnJlYWs7dz14KCl9fWZ1bmN0aW9uIGIoTSl7dmFyIEk9ci5nZXRUb2tlblZhbHVlKCk7cmV0dXJuIE0/aChJKTpvKEkpLHgoKSwhMH1mdW5jdGlvbiBMKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAxMTp2YXIgTT1yLmdldFRva2VuVmFsdWUoKSxJPU51bWJlcihNKTtpc05hTihJKSYmKHkoMiksST0wKSxoKEkpO2JyZWFrO2Nhc2UgNzpoKG51bGwpO2JyZWFrO2Nhc2UgODpoKCEwKTticmVhaztjYXNlIDk6aCghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4geCgpLCEwfWZ1bmN0aW9uIFMoKXtyZXR1cm4gci5nZXRUb2tlbigpIT09MTA/KHkoMyxbXSxbMiw1XSksITEpOihiKCExKSxyLmdldFRva2VuKCk9PT02PyhkKCI6IikseCgpLEEoKXx8eSg0LFtdLFsyLDVdKSk6eSg1LFtdLFsyLDVdKSwhMCl9ZnVuY3Rpb24gXygpe2EoKSx4KCk7Zm9yKHZhciBNPSExO3IuZ2V0VG9rZW4oKSE9PTImJnIuZ2V0VG9rZW4oKSE9PTE3Oyl7aWYoci5nZXRUb2tlbigpPT09NSl7aWYoTXx8eSg0LFtdLFtdKSxkKCIsIikseCgpLHIuZ2V0VG9rZW4oKT09PTImJnApYnJlYWt9ZWxzZSBNJiZ5KDYsW10sW10pO1MoKXx8eSg0LFtdLFsyLDVdKSxNPSEwfXJldHVybiBsKCksci5nZXRUb2tlbigpIT09Mj95KDcsWzJdLFtdKTp4KCksITB9ZnVuY3Rpb24gTigpe3UoKSx4KCk7Zm9yKHZhciBNPSExO3IuZ2V0VG9rZW4oKSE9PTQmJnIuZ2V0VG9rZW4oKSE9PTE3Oyl7aWYoci5nZXRUb2tlbigpPT09NSl7aWYoTXx8eSg0LFtdLFtdKSxkKCIsIikseCgpLHIuZ2V0VG9rZW4oKT09PTQmJnApYnJlYWt9ZWxzZSBNJiZ5KDYsW10sW10pO0EoKXx8eSg0LFtdLFs0LDVdKSxNPSEwfXJldHVybiBmKCksci5nZXRUb2tlbigpIT09ND95KDgsWzRdLFtdKTp4KCksITB9ZnVuY3Rpb24gQSgpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMzpyZXR1cm4gTigpO2Nhc2UgMTpyZXR1cm4gXygpO2Nhc2UgMTA6cmV0dXJuIGIoITApO2RlZmF1bHQ6cmV0dXJuIEwoKX19cmV0dXJuIHgoKSxyLmdldFRva2VuKCk9PT0xNz9uLmFsbG93RW1wdHlDb250ZW50PyEwOih5KDQsW10sW10pLCExKTpBKCk/KHIuZ2V0VG9rZW4oKSE9PTE3JiZ5KDksW10sW10pLCEwKTooeSg0LFtdLFtdKSwhMSl9dmFyIE50PWNyLGN1PW91LGZ1PURzLGh1PUlzLGR1PWRyO2Z1bmN0aW9uIGd1KGUsdCxuKXtyZXR1cm4gaXUoZSx0LG4pfWZ1bmN0aW9uIEJ0KGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYoZT09bnVsbHx8dD09PW51bGx8fHQ9PT12b2lkIDB8fHR5cGVvZiBlIT10eXBlb2YgdHx8dHlwZW9mIGUhPSJvYmplY3QifHxBcnJheS5pc0FycmF5KGUpIT09QXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgbixyO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZighQnQoZVtuXSx0W25dKSlyZXR1cm4hMX1lbHNle3ZhciBpPVtdO2ZvcihyIGluIGUpaS5wdXNoKHIpO2kuc29ydCgpO3ZhciBzPVtdO2ZvcihyIGluIHQpcy5wdXNoKHIpO2lmKHMuc29ydCgpLCFCdChpLHMpKXJldHVybiExO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspaWYoIUJ0KGVbaVtuXV0sdFtpW25dXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIn1mdW5jdGlvbiBVZShlKXtyZXR1cm4gdHlwZW9mIGU8InUifWZ1bmN0aW9uIEllKGUpe3JldHVybiB0eXBlb2YgZT09ImJvb2xlYW4ifWZ1bmN0aW9uIG11KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyJ9ZnVuY3Rpb24gcHUoZSx0KXtpZihlLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZihlW25dIT09dFtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBVdChlLHQpe3ZhciBuPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiBuPjA/ZS5sYXN0SW5kZXhPZih0KT09PW46bj09PTA/ZT09PXQ6ITF9ZnVuY3Rpb24gbW4oZSl7dmFyIHQ9IiI7cHUoZSwiKD9pKSIpJiYoZT1lLnN1YnN0cmluZyg0KSx0PSJpIik7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCsidSIpfWNhdGNoe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQpfWNhdGNoe3JldHVybn19fXZhciBWczsoZnVuY3Rpb24oZSl7ZS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsZS5NQVhfVkFMVUU9MjE0NzQ4MzY0N30pKFZzfHwoVnM9e30pKTt2YXIgcG47KGZ1bmN0aW9uKGUpe2UuTUlOX1ZBTFVFPTAsZS5NQVhfVkFMVUU9MjE0NzQ4MzY0N30pKHBufHwocG49e30pKTt2YXIgTWU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm4gcj09PU51bWJlci5NQVhfVkFMVUUmJihyPXBuLk1BWF9WQUxVRSksaT09PU51bWJlci5NQVhfVkFMVUUmJihpPXBuLk1BWF9WQUxVRSkse2xpbmU6cixjaGFyYWN0ZXI6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUub2JqZWN0TGl0ZXJhbChpKSYmRS51aW50ZWdlcihpLmxpbmUpJiZFLnVpbnRlZ2VyKGkuY2hhcmFjdGVyKX1lLmlzPW59KShNZXx8KE1lPXt9KSk7dmFyIFg7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7aWYoRS51aW50ZWdlcihyKSYmRS51aW50ZWdlcihpKSYmRS51aW50ZWdlcihzKSYmRS51aW50ZWdlcihhKSlyZXR1cm57c3RhcnQ6TWUuY3JlYXRlKHIsaSksZW5kOk1lLmNyZWF0ZShzLGEpfTtpZihNZS5pcyhyKSYmTWUuaXMoaSkpcmV0dXJue3N0YXJ0OnIsZW5kOml9O3Rocm93IG5ldyBFcnJvcigiUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyIrcisiLCAiK2krIiwgIitzKyIsICIrYSsiXSIpfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLm9iamVjdExpdGVyYWwoaSkmJk1lLmlzKGkuc3RhcnQpJiZNZS5pcyhpLmVuZCl9ZS5pcz1ufSkoWHx8KFg9e30pKTt2YXIgJHQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57dXJpOnIscmFuZ2U6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuZGVmaW5lZChpKSYmWC5pcyhpLnJhbmdlKSYmKEUuc3RyaW5nKGkudXJpKXx8RS51bmRlZmluZWQoaS51cmkpKX1lLmlzPW59KSgkdHx8KCR0PXt9KSk7dmFyIE9zOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEpe3JldHVybnt0YXJnZXRVcmk6cix0YXJnZXRSYW5nZTppLHRhcmdldFNlbGVjdGlvblJhbmdlOnMsb3JpZ2luU2VsZWN0aW9uUmFuZ2U6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuZGVmaW5lZChpKSYmWC5pcyhpLnRhcmdldFJhbmdlKSYmRS5zdHJpbmcoaS50YXJnZXRVcmkpJiYoWC5pcyhpLnRhcmdldFNlbGVjdGlvblJhbmdlKXx8RS51bmRlZmluZWQoaS50YXJnZXRTZWxlY3Rpb25SYW5nZSkpJiYoWC5pcyhpLm9yaWdpblNlbGVjdGlvblJhbmdlKXx8RS51bmRlZmluZWQoaS5vcmlnaW5TZWxlY3Rpb25SYW5nZSkpfWUuaXM9bn0pKE9zfHwoT3M9e30pKTt2YXIgZ3I7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7cmV0dXJue3JlZDpyLGdyZWVuOmksYmx1ZTpzLGFscGhhOmF9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLm51bWJlclJhbmdlKGkucmVkLDAsMSkmJkUubnVtYmVyUmFuZ2UoaS5ncmVlbiwwLDEpJiZFLm51bWJlclJhbmdlKGkuYmx1ZSwwLDEpJiZFLm51bWJlclJhbmdlKGkuYWxwaGEsMCwxKX1lLmlzPW59KShncnx8KGdyPXt9KSk7dmFyIGpzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue3JhbmdlOnIsY29sb3I6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIFguaXMoaS5yYW5nZSkmJmdyLmlzKGkuY29sb3IpfWUuaXM9bn0pKGpzfHwoanM9e30pKTt2YXIgcXM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMpe3JldHVybntsYWJlbDpyLHRleHRFZGl0OmksYWRkaXRpb25hbFRleHRFZGl0czpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5zdHJpbmcoaS5sYWJlbCkmJihFLnVuZGVmaW5lZChpLnRleHRFZGl0KXx8UmUuaXMoaSkpJiYoRS51bmRlZmluZWQoaS5hZGRpdGlvbmFsVGV4dEVkaXRzKXx8RS50eXBlZEFycmF5KGkuYWRkaXRpb25hbFRleHRFZGl0cyxSZS5pcykpfWUuaXM9bn0pKHFzfHwocXM9e30pKTt2YXIgV3Q7KGZ1bmN0aW9uKGUpe2UuQ29tbWVudD0iY29tbWVudCIsZS5JbXBvcnRzPSJpbXBvcnRzIixlLlJlZ2lvbj0icmVnaW9uIn0pKFd0fHwoV3Q9e30pKTt2YXIgQnM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSxvKXt2YXIgbD17c3RhcnRMaW5lOnIsZW5kTGluZTppfTtyZXR1cm4gRS5kZWZpbmVkKHMpJiYobC5zdGFydENoYXJhY3Rlcj1zKSxFLmRlZmluZWQoYSkmJihsLmVuZENoYXJhY3Rlcj1hKSxFLmRlZmluZWQobykmJihsLmtpbmQ9byksbH1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS51aW50ZWdlcihpLnN0YXJ0TGluZSkmJkUudWludGVnZXIoaS5zdGFydExpbmUpJiYoRS51bmRlZmluZWQoaS5zdGFydENoYXJhY3Rlcil8fEUudWludGVnZXIoaS5zdGFydENoYXJhY3RlcikpJiYoRS51bmRlZmluZWQoaS5lbmRDaGFyYWN0ZXIpfHxFLnVpbnRlZ2VyKGkuZW5kQ2hhcmFjdGVyKSkmJihFLnVuZGVmaW5lZChpLmtpbmQpfHxFLnN0cmluZyhpLmtpbmQpKX1lLmlzPW59KShCc3x8KEJzPXt9KSk7dmFyIG1yOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue2xvY2F0aW9uOnIsbWVzc2FnZTppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiYkdC5pcyhpLmxvY2F0aW9uKSYmRS5zdHJpbmcoaS5tZXNzYWdlKX1lLmlzPW59KShtcnx8KG1yPXt9KSk7dmFyIF9lOyhmdW5jdGlvbihlKXtlLkVycm9yPTEsZS5XYXJuaW5nPTIsZS5JbmZvcm1hdGlvbj0zLGUuSGludD00fSkoX2V8fChfZT17fSkpO3ZhciBVczsoZnVuY3Rpb24oZSl7ZS5Vbm5lY2Vzc2FyeT0xLGUuRGVwcmVjYXRlZD0yfSkoVXN8fChVcz17fSkpO3ZhciAkczsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgcj1uO3JldHVybiByIT1udWxsJiZFLnN0cmluZyhyLmhyZWYpfWUuaXM9dH0pKCRzfHwoJHM9e30pKTt2YXIgJGU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSxvLGwpe3ZhciB1PXtyYW5nZTpyLG1lc3NhZ2U6aX07cmV0dXJuIEUuZGVmaW5lZChzKSYmKHUuc2V2ZXJpdHk9cyksRS5kZWZpbmVkKGEpJiYodS5jb2RlPWEpLEUuZGVmaW5lZChvKSYmKHUuc291cmNlPW8pLEUuZGVmaW5lZChsKSYmKHUucmVsYXRlZEluZm9ybWF0aW9uPWwpLHV9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpLHM9cjtyZXR1cm4gRS5kZWZpbmVkKHMpJiZYLmlzKHMucmFuZ2UpJiZFLnN0cmluZyhzLm1lc3NhZ2UpJiYoRS5udW1iZXIocy5zZXZlcml0eSl8fEUudW5kZWZpbmVkKHMuc2V2ZXJpdHkpKSYmKEUuaW50ZWdlcihzLmNvZGUpfHxFLnN0cmluZyhzLmNvZGUpfHxFLnVuZGVmaW5lZChzLmNvZGUpKSYmKEUudW5kZWZpbmVkKHMuY29kZURlc2NyaXB0aW9uKXx8RS5zdHJpbmcoKGk9cy5jb2RlRGVzY3JpcHRpb24pPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5ocmVmKSkmJihFLnN0cmluZyhzLnNvdXJjZSl8fEUudW5kZWZpbmVkKHMuc291cmNlKSkmJihFLnVuZGVmaW5lZChzLnJlbGF0ZWRJbmZvcm1hdGlvbil8fEUudHlwZWRBcnJheShzLnJlbGF0ZWRJbmZvcm1hdGlvbixtci5pcykpfWUuaXM9bn0pKCRlfHwoJGU9e30pKTt2YXIgSHQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtmb3IodmFyIHM9W10sYT0yO2E8YXJndW1lbnRzLmxlbmd0aDthKyspc1thLTJdPWFyZ3VtZW50c1thXTt2YXIgbz17dGl0bGU6cixjb21tYW5kOml9O3JldHVybiBFLmRlZmluZWQocykmJnMubGVuZ3RoPjAmJihvLmFyZ3VtZW50cz1zKSxvfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLmRlZmluZWQoaSkmJkUuc3RyaW5nKGkudGl0bGUpJiZFLnN0cmluZyhpLmNvbW1hbmQpfWUuaXM9bn0pKEh0fHwoSHQ9e30pKTt2YXIgUmU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocyxhKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OmF9fWUucmVwbGFjZT10O2Z1bmN0aW9uIG4ocyxhKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OnMsZW5kOnN9LG5ld1RleHQ6YX19ZS5pbnNlcnQ9bjtmdW5jdGlvbiByKHMpe3JldHVybntyYW5nZTpzLG5ld1RleHQ6IiJ9fWUuZGVsPXI7ZnVuY3Rpb24gaShzKXt2YXIgYT1zO3JldHVybiBFLm9iamVjdExpdGVyYWwoYSkmJkUuc3RyaW5nKGEubmV3VGV4dCkmJlguaXMoYS5yYW5nZSl9ZS5pcz1pfSkoUmV8fChSZT17fSkpO3ZhciBBdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7dmFyIGE9e2xhYmVsOnJ9O3JldHVybiBpIT09dm9pZCAwJiYoYS5uZWVkc0NvbmZpcm1hdGlvbj1pKSxzIT09dm9pZCAwJiYoYS5kZXNjcmlwdGlvbj1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpIT09dm9pZCAwJiZFLm9iamVjdExpdGVyYWwoaSkmJkUuc3RyaW5nKGkubGFiZWwpJiYoRS5ib29sZWFuKGkubmVlZHNDb25maXJtYXRpb24pfHxpLm5lZWRzQ29uZmlybWF0aW9uPT09dm9pZCAwKSYmKEUuc3RyaW5nKGkuZGVzY3JpcHRpb24pfHxpLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1lLmlzPW59KShBdHx8KEF0PXt9KSk7dmFyIGZlOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3ZhciByPW47cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIn1lLmlzPXR9KShmZXx8KGZlPXt9KSk7dmFyIEtlOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHMsYSxvKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OmEsYW5ub3RhdGlvbklkOm99fWUucmVwbGFjZT10O2Z1bmN0aW9uIG4ocyxhLG8pe3JldHVybntyYW5nZTp7c3RhcnQ6cyxlbmQ6c30sbmV3VGV4dDphLGFubm90YXRpb25JZDpvfX1lLmluc2VydD1uO2Z1bmN0aW9uIHIocyxhKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OiIiLGFubm90YXRpb25JZDphfX1lLmRlbD1yO2Z1bmN0aW9uIGkocyl7dmFyIGE9cztyZXR1cm4gUmUuaXMoYSkmJihBdC5pcyhhLmFubm90YXRpb25JZCl8fGZlLmlzKGEuYW5ub3RhdGlvbklkKSl9ZS5pcz1pfSkoS2V8fChLZT17fSkpO3ZhciB2bjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt0ZXh0RG9jdW1lbnQ6cixlZGl0czppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZ4bi5pcyhpLnRleHREb2N1bWVudCkmJkFycmF5LmlzQXJyYXkoaS5lZGl0cyl9ZS5pcz1ufSkodm58fCh2bj17fSkpO3ZhciB6dDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7dmFyIGE9e2tpbmQ6ImNyZWF0ZSIsdXJpOnJ9O3JldHVybiBpIT09dm9pZCAwJiYoaS5vdmVyd3JpdGUhPT12b2lkIDB8fGkuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYoYS5vcHRpb25zPWkpLHMhPT12b2lkIDAmJihhLmFubm90YXRpb25JZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZpLmtpbmQ9PT0iY3JlYXRlIiYmRS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8RS5ib29sZWFuKGkub3B0aW9ucy5vdmVyd3JpdGUpKSYmKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cz09PXZvaWQgMHx8RS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxmZS5pcyhpLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKHp0fHwoenQ9e30pKTt2YXIgR3Q7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7dmFyIG89e2tpbmQ6InJlbmFtZSIsb2xkVXJpOnIsbmV3VXJpOml9O3JldHVybiBzIT09dm9pZCAwJiYocy5vdmVyd3JpdGUhPT12b2lkIDB8fHMuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYoby5vcHRpb25zPXMpLGEhPT12b2lkIDAmJihvLmFubm90YXRpb25JZD1hKSxvfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZpLmtpbmQ9PT0icmVuYW1lIiYmRS5zdHJpbmcoaS5vbGRVcmkpJiZFLnN0cmluZyhpLm5ld1VyaSkmJihpLm9wdGlvbnM9PT12b2lkIDB8fChpLm9wdGlvbnMub3ZlcndyaXRlPT09dm9pZCAwfHxFLmJvb2xlYW4oaS5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHxFLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fGZlLmlzKGkuYW5ub3RhdGlvbklkKSl9ZS5pcz1ufSkoR3R8fChHdD17fSkpO3ZhciBKdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7dmFyIGE9e2tpbmQ6ImRlbGV0ZSIsdXJpOnJ9O3JldHVybiBpIT09dm9pZCAwJiYoaS5yZWN1cnNpdmUhPT12b2lkIDB8fGkuaWdub3JlSWZOb3RFeGlzdHMhPT12b2lkIDApJiYoYS5vcHRpb25zPWkpLHMhPT12b2lkIDAmJihhLmFubm90YXRpb25JZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZpLmtpbmQ9PT0iZGVsZXRlIiYmRS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLnJlY3Vyc2l2ZT09PXZvaWQgMHx8RS5ib29sZWFuKGkub3B0aW9ucy5yZWN1cnNpdmUpKSYmKGkub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cz09PXZvaWQgMHx8RS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxmZS5pcyhpLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKEp0fHwoSnQ9e30pKTt2YXIgcHI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIHI9bjtyZXR1cm4gciYmKHIuY2hhbmdlcyE9PXZvaWQgMHx8ci5kb2N1bWVudENoYW5nZXMhPT12b2lkIDApJiYoci5kb2N1bWVudENoYW5nZXM9PT12b2lkIDB8fHIuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KGZ1bmN0aW9uKGkpe3JldHVybiBFLnN0cmluZyhpLmtpbmQpP3p0LmlzKGkpfHxHdC5pcyhpKXx8SnQuaXMoaSk6dm4uaXMoaSl9KSl9ZS5pcz10fSkocHJ8fChwcj17fSkpO3ZhciBibj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt0aGlzLmVkaXRzPXQsdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucz1ufXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHM7aWYocj09PXZvaWQgMD9pPVJlLmluc2VydCh0LG4pOmZlLmlzKHIpPyhzPXIsaT1LZS5pbnNlcnQodCxuLHIpKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxzPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9S2UuaW5zZXJ0KHQsbixzKSksdGhpcy5lZGl0cy5wdXNoKGkpLHMhPT12b2lkIDApcmV0dXJuIHN9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHM7aWYocj09PXZvaWQgMD9pPVJlLnJlcGxhY2UodCxuKTpmZS5pcyhyKT8ocz1yLGk9S2UucmVwbGFjZSh0LG4scikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHM9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1LZS5yZXBsYWNlKHQsbixzKSksdGhpcy5lZGl0cy5wdXNoKGkpLHMhPT12b2lkIDApcmV0dXJuIHN9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0LG4pe3ZhciByLGk7aWYobj09PXZvaWQgMD9yPVJlLmRlbCh0KTpmZS5pcyhuKT8oaT1uLHI9S2UuZGVsKHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj1LZS5kZWwodCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLGkhPT12b2lkIDApcmV0dXJuIGl9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLmVkaXRzLnB1c2godCl9LGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZWRpdHMuc3BsaWNlKDAsdGhpcy5lZGl0cy5sZW5ndGgpfSxlLnByb3RvdHlwZS5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucz1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLiIpfSxlfSgpLFdzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9hbm5vdGF0aW9ucz10PT09dm9pZCAwP09iamVjdC5jcmVhdGUobnVsbCk6dCx0aGlzLl9jb3VudGVyPTAsdGhpcy5fc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm1hbmFnZT1mdW5jdGlvbih0LG4pe3ZhciByO2lmKGZlLmlzKHQpP3I9dDoocj10aGlzLm5leHRJZCgpLG49dCksdGhpcy5fYW5ub3RhdGlvbnNbcl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJJZCAiK3IrIiBpcyBhbHJlYWR5IGluIHVzZS4iKTtpZihuPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgIityKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnNbcl09bix0aGlzLl9zaXplKysscn0sZS5wcm90b3R5cGUubmV4dElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvdW50ZXIrKyx0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCl9LGV9KCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj10aGlzO3RoaXMuX3RleHRFZGl0Q2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpLHQhPT12b2lkIDA/KHRoaXMuX3dvcmtzcGFjZUVkaXQ9dCx0LmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IFdzKHQuY2hhbmdlQW5ub3RhdGlvbnMpLHQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksdC5kb2N1bWVudENoYW5nZXMuZm9yRWFjaChmdW5jdGlvbihyKXtpZih2bi5pcyhyKSl7dmFyIGk9bmV3IGJuKHIuZWRpdHMsbi5fY2hhbmdlQW5ub3RhdGlvbnMpO24uX3RleHRFZGl0Q2hhbmdlc1tyLnRleHREb2N1bWVudC51cmldPWl9fSkpOnQuY2hhbmdlcyYmT2JqZWN0LmtleXModC5jaGFuZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPW5ldyBibih0LmNoYW5nZXNbcl0pO24uX3RleHRFZGl0Q2hhbmdlc1tyXT1pfSkpOnRoaXMuX3dvcmtzcGFjZUVkaXQ9e319cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWRpdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyE9PXZvaWQgMCYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemU9PT0wP3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dm9pZCAwOnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpLHRoaXMuX3dvcmtzcGFjZUVkaXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24odCl7aWYoeG4uaXModCkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIG49e3VyaTp0LnVyaSx2ZXJzaW9uOnQudmVyc2lvbn0scj10aGlzLl90ZXh0RWRpdENoYW5nZXNbbi51cmldO2lmKCFyKXt2YXIgaT1bXSxzPXt0ZXh0RG9jdW1lbnQ6bixlZGl0czppfTt0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHMpLHI9bmV3IGJuKGksdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tuLnVyaV09cn1yZXR1cm4gcn1lbHNle2lmKHRoaXMuaW5pdENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3Igbm9ybWFsIHRleHQgZWRpdCBjaGFuZ2VzLiIpO3ZhciByPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0XTtpZighcil7dmFyIGk9W107dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzW3RdPWkscj1uZXcgYm4oaSksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3RdPXJ9cmV0dXJuIHJ9fSxlLnByb3RvdHlwZS5pbml0RG9jdW1lbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9PT12b2lkIDAmJnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcz09PXZvaWQgMCYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBXcyx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz1bXSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKX0sZS5wcm90b3R5cGUuaW5pdENoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCYmdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPT09dm9pZCAwJiYodGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCkpfSxlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKHQsbixyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBpO0F0LmlzKG4pfHxmZS5pcyhuKT9pPW46cj1uO3ZhciBzLGE7aWYoaT09PXZvaWQgMD9zPXp0LmNyZWF0ZSh0LHIpOihhPWZlLmlzKGkpP2k6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLHM9enQuY3JlYXRlKHQscixhKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChzKSxhIT09dm9pZCAwKXJldHVybiBhfSxlLnByb3RvdHlwZS5yZW5hbWVGaWxlPWZ1bmN0aW9uKHQsbixyLGkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHM7QXQuaXMocil8fGZlLmlzKHIpP3M9cjppPXI7dmFyIGEsbztpZihzPT09dm9pZCAwP2E9R3QuY3JlYXRlKHQsbixpKToobz1mZS5pcyhzKT9zOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShzKSxhPUd0LmNyZWF0ZSh0LG4saSxvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChhKSxvIT09dm9pZCAwKXJldHVybiBvfSxlLnByb3RvdHlwZS5kZWxldGVGaWxlPWZ1bmN0aW9uKHQsbixyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBpO0F0LmlzKG4pfHxmZS5pcyhuKT9pPW46cj1uO3ZhciBzLGE7aWYoaT09PXZvaWQgMD9zPUp0LmNyZWF0ZSh0LHIpOihhPWZlLmlzKGkpP2k6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLHM9SnQuY3JlYXRlKHQscixhKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChzKSxhIT09dm9pZCAwKXJldHVybiBhfSxlfSkoKTt2YXIgSHM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7cmV0dXJue3VyaTpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZFLnN0cmluZyhpLnVyaSl9ZS5pcz1ufSkoSHN8fChIcz17fSkpO3ZhciB6czsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt1cmk6cix2ZXJzaW9uOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLmRlZmluZWQoaSkmJkUuc3RyaW5nKGkudXJpKSYmRS5pbnRlZ2VyKGkudmVyc2lvbil9ZS5pcz1ufSkoenN8fCh6cz17fSkpO3ZhciB4bjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt1cmk6cix2ZXJzaW9uOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLmRlZmluZWQoaSkmJkUuc3RyaW5nKGkudXJpKSYmKGkudmVyc2lvbj09PW51bGx8fEUuaW50ZWdlcihpLnZlcnNpb24pKX1lLmlzPW59KSh4bnx8KHhuPXt9KSk7dmFyIEdzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEpe3JldHVybnt1cmk6cixsYW5ndWFnZUlkOmksdmVyc2lvbjpzLHRleHQ6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuZGVmaW5lZChpKSYmRS5zdHJpbmcoaS51cmkpJiZFLnN0cmluZyhpLmxhbmd1YWdlSWQpJiZFLmludGVnZXIoaS52ZXJzaW9uKSYmRS5zdHJpbmcoaS50ZXh0KX1lLmlzPW59KShHc3x8KEdzPXt9KSk7dmFyIFdlOyhmdW5jdGlvbihlKXtlLlBsYWluVGV4dD0icGxhaW50ZXh0IixlLk1hcmtkb3duPSJtYXJrZG93biJ9KShXZXx8KFdlPXt9KSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgcj1uO3JldHVybiByPT09ZS5QbGFpblRleHR8fHI9PT1lLk1hcmtkb3dufWUuaXM9dH0oV2V8fChXZT17fSkpO3ZhciB2cjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgcj1uO3JldHVybiBFLm9iamVjdExpdGVyYWwobikmJldlLmlzKHIua2luZCkmJkUuc3RyaW5nKHIudmFsdWUpfWUuaXM9dH0pKHZyfHwodnI9e30pKTt2YXIgU2U7KGZ1bmN0aW9uKGUpe2UuVGV4dD0xLGUuTWV0aG9kPTIsZS5GdW5jdGlvbj0zLGUuQ29uc3RydWN0b3I9NCxlLkZpZWxkPTUsZS5WYXJpYWJsZT02LGUuQ2xhc3M9NyxlLkludGVyZmFjZT04LGUuTW9kdWxlPTksZS5Qcm9wZXJ0eT0xMCxlLlVuaXQ9MTEsZS5WYWx1ZT0xMixlLkVudW09MTMsZS5LZXl3b3JkPTE0LGUuU25pcHBldD0xNSxlLkNvbG9yPTE2LGUuRmlsZT0xNyxlLlJlZmVyZW5jZT0xOCxlLkZvbGRlcj0xOSxlLkVudW1NZW1iZXI9MjAsZS5Db25zdGFudD0yMSxlLlN0cnVjdD0yMixlLkV2ZW50PTIzLGUuT3BlcmF0b3I9MjQsZS5UeXBlUGFyYW1ldGVyPTI1fSkoU2V8fChTZT17fSkpO3ZhciBpZTsoZnVuY3Rpb24oZSl7ZS5QbGFpblRleHQ9MSxlLlNuaXBwZXQ9Mn0pKGllfHwoaWU9e30pKTt2YXIgSnM7KGZ1bmN0aW9uKGUpe2UuRGVwcmVjYXRlZD0xfSkoSnN8fChKcz17fSkpO3ZhciBYczsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7cmV0dXJue25ld1RleHQ6cixpbnNlcnQ6aSxyZXBsYWNlOnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZFLnN0cmluZyhpLm5ld1RleHQpJiZYLmlzKGkuaW5zZXJ0KSYmWC5pcyhpLnJlcGxhY2UpfWUuaXM9bn0pKFhzfHwoWHM9e30pKTt2YXIgUXM7KGZ1bmN0aW9uKGUpe2UuYXNJcz0xLGUuYWRqdXN0SW5kZW50YXRpb249Mn0pKFFzfHwoUXM9e30pKTt2YXIgYnI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJue2xhYmVsOm59fWUuY3JlYXRlPXR9KShicnx8KGJyPXt9KSk7dmFyIFpzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scil7cmV0dXJue2l0ZW1zOm58fFtdLGlzSW5jb21wbGV0ZTohIXJ9fWUuY3JlYXRlPXR9KShac3x8KFpzPXt9KSk7dmFyIHluOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiByLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX1lLmZyb21QbGFpblRleHQ9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuc3RyaW5nKGkpfHxFLm9iamVjdExpdGVyYWwoaSkmJkUuc3RyaW5nKGkubGFuZ3VhZ2UpJiZFLnN0cmluZyhpLnZhbHVlKX1lLmlzPW59KSh5bnx8KHluPXt9KSk7dmFyIFlzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3ZhciByPW47cmV0dXJuISFyJiZFLm9iamVjdExpdGVyYWwocikmJih2ci5pcyhyLmNvbnRlbnRzKXx8eW4uaXMoci5jb250ZW50cyl8fEUudHlwZWRBcnJheShyLmNvbnRlbnRzLHluLmlzKSkmJihuLnJhbmdlPT09dm9pZCAwfHxYLmlzKG4ucmFuZ2UpKX1lLmlzPXR9KShZc3x8KFlzPXt9KSk7dmFyIEtzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scil7cmV0dXJuIHI/e2xhYmVsOm4sZG9jdW1lbnRhdGlvbjpyfTp7bGFiZWw6bn19ZS5jcmVhdGU9dH0pKEtzfHwoS3M9e30pKTt2YXIgZWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyKXtmb3IodmFyIGk9W10scz0yO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspaVtzLTJdPWFyZ3VtZW50c1tzXTt2YXIgYT17bGFiZWw6bn07cmV0dXJuIEUuZGVmaW5lZChyKSYmKGEuZG9jdW1lbnRhdGlvbj1yKSxFLmRlZmluZWQoaSk/YS5wYXJhbWV0ZXJzPWk6YS5wYXJhbWV0ZXJzPVtdLGF9ZS5jcmVhdGU9dH0pKGVhfHwoZWE9e30pKTt2YXIgdGE7KGZ1bmN0aW9uKGUpe2UuVGV4dD0xLGUuUmVhZD0yLGUuV3JpdGU9M30pKHRhfHwodGE9e30pKTt2YXIgbmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyKXt2YXIgaT17cmFuZ2U6bn07cmV0dXJuIEUubnVtYmVyKHIpJiYoaS5raW5kPXIpLGl9ZS5jcmVhdGU9dH0pKG5hfHwobmE9e30pKTt2YXIgRGU7KGZ1bmN0aW9uKGUpe2UuRmlsZT0xLGUuTW9kdWxlPTIsZS5OYW1lc3BhY2U9MyxlLlBhY2thZ2U9NCxlLkNsYXNzPTUsZS5NZXRob2Q9NixlLlByb3BlcnR5PTcsZS5GaWVsZD04LGUuQ29uc3RydWN0b3I9OSxlLkVudW09MTAsZS5JbnRlcmZhY2U9MTEsZS5GdW5jdGlvbj0xMixlLlZhcmlhYmxlPTEzLGUuQ29uc3RhbnQ9MTQsZS5TdHJpbmc9MTUsZS5OdW1iZXI9MTYsZS5Cb29sZWFuPTE3LGUuQXJyYXk9MTgsZS5PYmplY3Q9MTksZS5LZXk9MjAsZS5OdWxsPTIxLGUuRW51bU1lbWJlcj0yMixlLlN0cnVjdD0yMyxlLkV2ZW50PTI0LGUuT3BlcmF0b3I9MjUsZS5UeXBlUGFyYW1ldGVyPTI2fSkoRGV8fChEZT17fSkpO3ZhciByYTsoZnVuY3Rpb24oZSl7ZS5EZXByZWNhdGVkPTF9KShyYXx8KHJhPXt9KSk7dmFyIGlhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scixpLHMsYSl7dmFyIG89e25hbWU6bixraW5kOnIsbG9jYXRpb246e3VyaTpzLHJhbmdlOml9fTtyZXR1cm4gYSYmKG8uY29udGFpbmVyTmFtZT1hKSxvfWUuY3JlYXRlPXR9KShpYXx8KGlhPXt9KSk7dmFyIHNhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEsbyxsKXt2YXIgdT17bmFtZTpyLGRldGFpbDppLGtpbmQ6cyxyYW5nZTphLHNlbGVjdGlvblJhbmdlOm99O3JldHVybiBsIT09dm9pZCAwJiYodS5jaGlsZHJlbj1sKSx1fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZFLnN0cmluZyhpLm5hbWUpJiZFLm51bWJlcihpLmtpbmQpJiZYLmlzKGkucmFuZ2UpJiZYLmlzKGkuc2VsZWN0aW9uUmFuZ2UpJiYoaS5kZXRhaWw9PT12b2lkIDB8fEUuc3RyaW5nKGkuZGV0YWlsKSkmJihpLmRlcHJlY2F0ZWQ9PT12b2lkIDB8fEUuYm9vbGVhbihpLmRlcHJlY2F0ZWQpKSYmKGkuY2hpbGRyZW49PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoaS5jaGlsZHJlbikpJiYoaS50YWdzPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGkudGFncykpfWUuaXM9bn0pKHNhfHwoc2E9e30pKTt2YXIgYWE7KGZ1bmN0aW9uKGUpe2UuRW1wdHk9IiIsZS5RdWlja0ZpeD0icXVpY2tmaXgiLGUuUmVmYWN0b3I9InJlZmFjdG9yIixlLlJlZmFjdG9yRXh0cmFjdD0icmVmYWN0b3IuZXh0cmFjdCIsZS5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixlLlJlZmFjdG9yUmV3cml0ZT0icmVmYWN0b3IucmV3cml0ZSIsZS5Tb3VyY2U9InNvdXJjZSIsZS5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLGUuU291cmNlRml4QWxsPSJzb3VyY2UuZml4QWxsIn0pKGFhfHwoYWE9e30pKTt2YXIgb2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXt2YXIgcz17ZGlhZ25vc3RpY3M6cn07cmV0dXJuIGkhPW51bGwmJihzLm9ubHk9aSksc31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZFLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcywkZS5pcykmJihpLm9ubHk9PT12b2lkIDB8fEUudHlwZWRBcnJheShpLm9ubHksRS5zdHJpbmcpKX1lLmlzPW59KShvYXx8KG9hPXt9KSk7dmFyIGxhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzKXt2YXIgYT17dGl0bGU6cn0sbz0hMDtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciPyhvPSExLGEua2luZD1pKTpIdC5pcyhpKT9hLmNvbW1hbmQ9aTphLmVkaXQ9aSxvJiZzIT09dm9pZCAwJiYoYS5raW5kPXMpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIGkmJkUuc3RyaW5nKGkudGl0bGUpJiYoaS5kaWFnbm9zdGljcz09PXZvaWQgMHx8RS50eXBlZEFycmF5KGkuZGlhZ25vc3RpY3MsJGUuaXMpKSYmKGkua2luZD09PXZvaWQgMHx8RS5zdHJpbmcoaS5raW5kKSkmJihpLmVkaXQhPT12b2lkIDB8fGkuY29tbWFuZCE9PXZvaWQgMCkmJihpLmNvbW1hbmQ9PT12b2lkIDB8fEh0LmlzKGkuY29tbWFuZCkpJiYoaS5pc1ByZWZlcnJlZD09PXZvaWQgMHx8RS5ib29sZWFuKGkuaXNQcmVmZXJyZWQpKSYmKGkuZWRpdD09PXZvaWQgMHx8cHIuaXMoaS5lZGl0KSl9ZS5pcz1ufSkobGF8fChsYT17fSkpO3ZhciB1YTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3ZhciBzPXtyYW5nZTpyfTtyZXR1cm4gRS5kZWZpbmVkKGkpJiYocy5kYXRhPWkpLHN9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuZGVmaW5lZChpKSYmWC5pcyhpLnJhbmdlKSYmKEUudW5kZWZpbmVkKGkuY29tbWFuZCl8fEh0LmlzKGkuY29tbWFuZCkpfWUuaXM9bn0pKHVhfHwodWE9e30pKTt2YXIgY2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57dGFiU2l6ZTpyLGluc2VydFNwYWNlczppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZFLnVpbnRlZ2VyKGkudGFiU2l6ZSkmJkUuYm9vbGVhbihpLmluc2VydFNwYWNlcyl9ZS5pcz1ufSkoY2F8fChjYT17fSkpO3ZhciBmYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7cmV0dXJue3JhbmdlOnIsdGFyZ2V0OmksZGF0YTpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZYLmlzKGkucmFuZ2UpJiYoRS51bmRlZmluZWQoaS50YXJnZXQpfHxFLnN0cmluZyhpLnRhcmdldCkpfWUuaXM9bn0pKGZhfHwoZmE9e30pKTt2YXIgd247KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57cmFuZ2U6cixwYXJlbnQ6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIGkhPT12b2lkIDAmJlguaXMoaS5yYW5nZSkmJihpLnBhcmVudD09PXZvaWQgMHx8ZS5pcyhpLnBhcmVudCkpfWUuaXM9bn0pKHdufHwod249e30pKTt2YXIgaGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocyxhLG8sbCl7cmV0dXJuIG5ldyB2dShzLGEsbyxsKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocyl7dmFyIGE9cztyZXR1cm4hIShFLmRlZmluZWQoYSkmJkUuc3RyaW5nKGEudXJpKSYmKEUudW5kZWZpbmVkKGEubGFuZ3VhZ2VJZCl8fEUuc3RyaW5nKGEubGFuZ3VhZ2VJZCkpJiZFLnVpbnRlZ2VyKGEubGluZUNvdW50KSYmRS5mdW5jKGEuZ2V0VGV4dCkmJkUuZnVuYyhhLnBvc2l0aW9uQXQpJiZFLmZ1bmMoYS5vZmZzZXRBdCkpfWUuaXM9bjtmdW5jdGlvbiByKHMsYSl7Zm9yKHZhciBvPXMuZ2V0VGV4dCgpLGw9aShhLGZ1bmN0aW9uKG0sdil7dmFyIHA9bS5yYW5nZS5zdGFydC5saW5lLXYucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gcD09PTA/bS5yYW5nZS5zdGFydC5jaGFyYWN0ZXItdi5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6cH0pLHU9by5sZW5ndGgsZj1sLmxlbmd0aC0xO2Y+PTA7Zi0tKXt2YXIgaD1sW2ZdLGQ9cy5vZmZzZXRBdChoLnJhbmdlLnN0YXJ0KSxnPXMub2Zmc2V0QXQoaC5yYW5nZS5lbmQpO2lmKGc8PXUpbz1vLnN1YnN0cmluZygwLGQpK2gubmV3VGV4dCtvLnN1YnN0cmluZyhnLG8ubGVuZ3RoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3U9ZH1yZXR1cm4gb31lLmFwcGx5RWRpdHM9cjtmdW5jdGlvbiBpKHMsYSl7aWYocy5sZW5ndGg8PTEpcmV0dXJuIHM7dmFyIG89cy5sZW5ndGgvMnwwLGw9cy5zbGljZSgwLG8pLHU9cy5zbGljZShvKTtpKGwsYSksaSh1LGEpO2Zvcih2YXIgZj0wLGg9MCxkPTA7ZjxsLmxlbmd0aCYmaDx1Lmxlbmd0aDspe3ZhciBnPWEobFtmXSx1W2hdKTtnPD0wP3NbZCsrXT1sW2YrK106c1tkKytdPXVbaCsrXX1mb3IoO2Y8bC5sZW5ndGg7KXNbZCsrXT1sW2YrK107Zm9yKDtoPHUubGVuZ3RoOylzW2QrK109dVtoKytdO3JldHVybiBzfX0pKGhhfHwoaGE9e30pKTt2YXIgdnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyLGkpe3RoaXMuX3VyaT10LHRoaXMuX2xhbmd1YWdlSWQ9bix0aGlzLl92ZXJzaW9uPXIsdGhpcy5fY29udGVudD1pLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ1cmkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVyc2lvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24odCl7aWYodCl7dmFyIG49dGhpcy5vZmZzZXRBdCh0LnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQodC5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyhuLHIpfXJldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZW50PXQudGV4dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwKXtmb3IodmFyIHQ9W10sbj10aGlzLl9jb250ZW50LHI9ITAsaT0wO2k8bi5sZW5ndGg7aSsrKXtyJiYodC5wdXNoKGkpLHI9ITEpO3ZhciBzPW4uY2hhckF0KGkpO3I9cz09PSJcciJ8fHM9PT1gCmAscz09PSJcciImJmkrMTxuLmxlbmd0aCYmbi5jaGFyQXQoaSsxKT09PWAKYCYmaSsrfXImJm4ubGVuZ3RoPjAmJnQucHVzaChuLmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9dH1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9LGUucHJvdG90eXBlLnBvc2l0aW9uQXQ9ZnVuY3Rpb24odCl7dD1NYXRoLm1heChNYXRoLm1pbih0LHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTt2YXIgbj10aGlzLmdldExpbmVPZmZzZXRzKCkscj0wLGk9bi5sZW5ndGg7aWYoaT09PTApcmV0dXJuIE1lLmNyZWF0ZSgwLHQpO2Zvcig7cjxpOyl7dmFyIHM9TWF0aC5mbG9vcigocitpKS8yKTtuW3NdPnQ/aT1zOnI9cysxfXZhciBhPXItMTtyZXR1cm4gTWUuY3JlYXRlKGEsdC1uW2FdKX0sZS5wcm90b3R5cGUub2Zmc2V0QXQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKHQubGluZT49bi5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKHQubGluZTwwKXJldHVybiAwO3ZhciByPW5bdC5saW5lXSxpPXQubGluZSsxPG4ubGVuZ3RoP25bdC5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihyK3QuY2hhcmFjdGVyLGkpLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxpbmVDb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KCksRTsoZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBuKGcpe3JldHVybiB0eXBlb2YgZzwidSJ9ZS5kZWZpbmVkPW47ZnVuY3Rpb24gcihnKXtyZXR1cm4gdHlwZW9mIGc+InUifWUudW5kZWZpbmVkPXI7ZnVuY3Rpb24gaShnKXtyZXR1cm4gZz09PSEwfHxnPT09ITF9ZS5ib29sZWFuPWk7ZnVuY3Rpb24gcyhnKXtyZXR1cm4gdC5jYWxsKGcpPT09IltvYmplY3QgU3RyaW5nXSJ9ZS5zdHJpbmc9cztmdW5jdGlvbiBhKGcpe3JldHVybiB0LmNhbGwoZyk9PT0iW29iamVjdCBOdW1iZXJdIn1lLm51bWJlcj1hO2Z1bmN0aW9uIG8oZyxtLHYpe3JldHVybiB0LmNhbGwoZyk9PT0iW29iamVjdCBOdW1iZXJdIiYmbTw9ZyYmZzw9dn1lLm51bWJlclJhbmdlPW87ZnVuY3Rpb24gbChnKXtyZXR1cm4gdC5jYWxsKGcpPT09IltvYmplY3QgTnVtYmVyXSImJi0yMTQ3NDgzNjQ4PD1nJiZnPD0yMTQ3NDgzNjQ3fWUuaW50ZWdlcj1sO2Z1bmN0aW9uIHUoZyl7cmV0dXJuIHQuY2FsbChnKT09PSJbb2JqZWN0IE51bWJlcl0iJiYwPD1nJiZnPD0yMTQ3NDgzNjQ3fWUudWludGVnZXI9dTtmdW5jdGlvbiBmKGcpe3JldHVybiB0LmNhbGwoZyk9PT0iW29iamVjdCBGdW5jdGlvbl0ifWUuZnVuYz1mO2Z1bmN0aW9uIGgoZyl7cmV0dXJuIGchPT1udWxsJiZ0eXBlb2YgZz09Im9iamVjdCJ9ZS5vYmplY3RMaXRlcmFsPWg7ZnVuY3Rpb24gZChnLG0pe3JldHVybiBBcnJheS5pc0FycmF5KGcpJiZnLmV2ZXJ5KG0pfWUudHlwZWRBcnJheT1kfSkoRXx8KEU9e30pKTt2YXIgZGE9Y2xhc3MgSXJ7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5fdXJpPXQsdGhpcy5fbGFuZ3VhZ2VJZD1uLHRoaXMuX3ZlcnNpb249cix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KHQpe2lmKHQpe2NvbnN0IG49dGhpcy5vZmZzZXRBdCh0LnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQodC5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyhuLHIpfXJldHVybiB0aGlzLl9jb250ZW50fXVwZGF0ZSh0LG4pe2ZvcihsZXQgciBvZiB0KWlmKElyLmlzSW5jcmVtZW50YWwocikpe2NvbnN0IGk9bWEoci5yYW5nZSkscz10aGlzLm9mZnNldEF0KGkuc3RhcnQpLGE9dGhpcy5vZmZzZXRBdChpLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLHMpK3IudGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhhLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtjb25zdCBvPU1hdGgubWF4KGkuc3RhcnQubGluZSwwKSxsPU1hdGgubWF4KGkuZW5kLmxpbmUsMCk7bGV0IHU9dGhpcy5fbGluZU9mZnNldHM7Y29uc3QgZj1nYShyLnRleHQsITEscyk7aWYobC1vPT09Zi5sZW5ndGgpZm9yKGxldCBkPTAsZz1mLmxlbmd0aDtkPGc7ZCsrKXVbZCtvKzFdPWZbZF07ZWxzZSBmLmxlbmd0aDwxZTQ/dS5zcGxpY2UobysxLGwtbywuLi5mKTp0aGlzLl9saW5lT2Zmc2V0cz11PXUuc2xpY2UoMCxvKzEpLmNvbmNhdChmLHUuc2xpY2UobCsxKSk7Y29uc3QgaD1yLnRleHQubGVuZ3RoLShhLXMpO2lmKGghPT0wKWZvcihsZXQgZD1vKzErZi5sZW5ndGgsZz11Lmxlbmd0aDtkPGc7ZCsrKXVbZF09dVtkXStofWVsc2UgaWYoSXIuaXNGdWxsKHIpKXRoaXMuX2NvbnRlbnQ9ci50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMDtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGFuZ2UgZXZlbnQgcmVjZWl2ZWQiKTt0aGlzLl92ZXJzaW9uPW59Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDAmJih0aGlzLl9saW5lT2Zmc2V0cz1nYSh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdCh0KXt0PU1hdGgubWF4KE1hdGgubWluKHQsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCBuPXRoaXMuZ2V0TGluZU9mZnNldHMoKSxyPTAsaT1uLmxlbmd0aDtpZihpPT09MClyZXR1cm57bGluZTowLGNoYXJhY3Rlcjp0fTtmb3IoO3I8aTspe2xldCBhPU1hdGguZmxvb3IoKHIraSkvMik7blthXT50P2k9YTpyPWErMX1sZXQgcz1yLTE7cmV0dXJue2xpbmU6cyxjaGFyYWN0ZXI6dC1uW3NdfX1vZmZzZXRBdCh0KXtsZXQgbj10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYodC5saW5lPj1uLmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYodC5saW5lPDApcmV0dXJuIDA7bGV0IHI9blt0LmxpbmVdLGk9dC5saW5lKzE8bi5sZW5ndGg/blt0LmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHIrdC5jaGFyYWN0ZXIsaSkscil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKHQpe2xldCBuPXQ7cmV0dXJuIG4hPW51bGwmJnR5cGVvZiBuLnRleHQ9PSJzdHJpbmciJiZuLnJhbmdlIT09dm9pZCAwJiYobi5yYW5nZUxlbmd0aD09PXZvaWQgMHx8dHlwZW9mIG4ucmFuZ2VMZW5ndGg9PSJudW1iZXIiKX1zdGF0aWMgaXNGdWxsKHQpe2xldCBuPXQ7cmV0dXJuIG4hPW51bGwmJnR5cGVvZiBuLnRleHQ9PSJzdHJpbmciJiZuLnJhbmdlPT09dm9pZCAwJiZuLnJhbmdlTGVuZ3RoPT09dm9pZCAwfX0seHI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxzLGEsbyl7cmV0dXJuIG5ldyBkYShpLHMsYSxvKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSxzLGEpe2lmKGkgaW5zdGFuY2VvZiBkYSlyZXR1cm4gaS51cGRhdGUocyxhKSxpO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX1lLnVwZGF0ZT1uO2Z1bmN0aW9uIHIoaSxzKXtsZXQgYT1pLmdldFRleHQoKSxvPXlyKHMubWFwKGJ1KSwoZixoKT0+e2xldCBkPWYucmFuZ2Uuc3RhcnQubGluZS1oLnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIGQ9PT0wP2YucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLWgucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOmR9KSxsPTA7Y29uc3QgdT1bXTtmb3IoY29uc3QgZiBvZiBvKXtsZXQgaD1pLm9mZnNldEF0KGYucmFuZ2Uuc3RhcnQpO2lmKGg8bCl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtoPmwmJnUucHVzaChhLnN1YnN0cmluZyhsLGgpKSxmLm5ld1RleHQubGVuZ3RoJiZ1LnB1c2goZi5uZXdUZXh0KSxsPWkub2Zmc2V0QXQoZi5yYW5nZS5lbmQpfXJldHVybiB1LnB1c2goYS5zdWJzdHIobCkpLHUuam9pbigiIil9ZS5hcHBseUVkaXRzPXJ9KSh4cnx8KHhyPXt9KSk7ZnVuY3Rpb24geXIoZSx0KXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCBuPWUubGVuZ3RoLzJ8MCxyPWUuc2xpY2UoMCxuKSxpPWUuc2xpY2Uobik7eXIocix0KSx5cihpLHQpO2xldCBzPTAsYT0wLG89MDtmb3IoO3M8ci5sZW5ndGgmJmE8aS5sZW5ndGg7KXQocltzXSxpW2FdKTw9MD9lW28rK109cltzKytdOmVbbysrXT1pW2ErK107Zm9yKDtzPHIubGVuZ3RoOyllW28rK109cltzKytdO2Zvcig7YTxpLmxlbmd0aDspZVtvKytdPWlbYSsrXTtyZXR1cm4gZX1mdW5jdGlvbiBnYShlLHQsbj0wKXtjb25zdCByPXQ/W25dOltdO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcz1lLmNoYXJDb2RlQXQoaSk7KHM9PT0xM3x8cz09PTEwKSYmKHM9PT0xMyYmaSsxPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQoaSsxKT09PTEwJiZpKyssci5wdXNoKG4raSsxKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbWEoZSl7Y29uc3QgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIHQubGluZT5uLmxpbmV8fHQubGluZT09PW4ubGluZSYmdC5jaGFyYWN0ZXI+bi5jaGFyYWN0ZXI/e3N0YXJ0Om4sZW5kOnR9OmV9ZnVuY3Rpb24gYnUoZSl7Y29uc3QgdD1tYShlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9dmFyIEo7KGZ1bmN0aW9uKGUpe2VbZS5VbmRlZmluZWQ9MF09IlVuZGVmaW5lZCIsZVtlLkVudW1WYWx1ZU1pc21hdGNoPTFdPSJFbnVtVmFsdWVNaXNtYXRjaCIsZVtlLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQiLGVbZS5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTI1N109IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLGVbZS5VbmV4cGVjdGVkRW5kT2ZTdHJpbmc9MjU4XT0iVW5leHBlY3RlZEVuZE9mU3RyaW5nIixlW2UuVW5leHBlY3RlZEVuZE9mTnVtYmVyPTI1OV09IlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsZVtlLkludmFsaWRVbmljb2RlPTI2MF09IkludmFsaWRVbmljb2RlIixlW2UuSW52YWxpZEVzY2FwZUNoYXJhY3Rlcj0yNjFdPSJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIixlW2UuSW52YWxpZENoYXJhY3Rlcj0yNjJdPSJJbnZhbGlkQ2hhcmFjdGVyIixlW2UuUHJvcGVydHlFeHBlY3RlZD01MTNdPSJQcm9wZXJ0eUV4cGVjdGVkIixlW2UuQ29tbWFFeHBlY3RlZD01MTRdPSJDb21tYUV4cGVjdGVkIixlW2UuQ29sb25FeHBlY3RlZD01MTVdPSJDb2xvbkV4cGVjdGVkIixlW2UuVmFsdWVFeHBlY3RlZD01MTZdPSJWYWx1ZUV4cGVjdGVkIixlW2UuQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQ9NTE3XT0iQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQiLGVbZS5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkPTUxOF09IkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQiLGVbZS5UcmFpbGluZ0NvbW1hPTUxOV09IlRyYWlsaW5nQ29tbWEiLGVbZS5EdXBsaWNhdGVLZXk9NTIwXT0iRHVwbGljYXRlS2V5IixlW2UuQ29tbWVudE5vdFBlcm1pdHRlZD01MjFdPSJDb21tZW50Tm90UGVybWl0dGVkIixlW2UuU2NoZW1hUmVzb2x2ZUVycm9yPTc2OF09IlNjaGVtYVJlc29sdmVFcnJvciJ9KShKfHwoSj17fSkpO3ZhciB3cjsoZnVuY3Rpb24oZSl7ZS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W1dlLk1hcmtkb3duLFdlLlBsYWluVGV4dF0sY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ6ITB9fX19fSkod3J8fCh3cj17fSkpO2Z1bmN0aW9uIHh1KGUsdCl7bGV0IG47cmV0dXJuIHQubGVuZ3RoPT09MD9uPWU6bj1lLnJlcGxhY2UoL1x7KFxkKylcfS9nLChyLGkpPT57bGV0IHM9aVswXTtyZXR1cm4gdHlwZW9mIHRbc108InUiP3Rbc106cn0pLG59ZnVuY3Rpb24geXUoZSx0LC4uLm4pe3JldHVybiB4dSh0LG4pfWZ1bmN0aW9uIFh0KGUpe3JldHVybiB5dX12YXIgc3Q9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybiBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihyLGkpe3IuX19wcm90b19fPWl9fHxmdW5jdGlvbihyLGkpe2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYocltzXT1pW3NdKX0sZSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmbiE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhuKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtlKHQsbik7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1uPT09bnVsbD9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGo9WHQoKSx3dT17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpqKCJjb2xvckhleEZvcm1hdFdhcm5pbmciLCJJbnZhbGlkIGNvbG9yIGZvcm1hdC4gVXNlICNSR0IsICNSR0JBLCAjUlJHR0JCIG9yICNSUkdHQkJBQS4iKSxwYXR0ZXJuOi9eIyhbMC05QS1GYS1mXXszLDR9fChbMC05QS1GYS1mXXsyfSl7Myw0fSkkL30sImRhdGUtdGltZSI6e2Vycm9yTWVzc2FnZTpqKCJkYXRlVGltZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSBkYXRlLXRpbWUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKVQoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldfDYwKShcLlswLTldKyk/KFp8KFwrfC0pKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKSkkL2l9LGRhdGU6e2Vycm9yTWVzc2FnZTpqKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOmooInRpbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgdGltZS4iKSxwYXR0ZXJuOi9eKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKTooWzAtNV1bMC05XXw2MCkoXC5bMC05XSspPyhafChcK3wtKShbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSkpJC9pfSxlbWFpbDp7ZXJyb3JNZXNzYWdlOmooImVtYWlsRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gZS1tYWlsIGFkZHJlc3MuIikscGF0dGVybjovXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWjAtOS1dK1wuKStbYS16QS1aXXsyLH0pKSQvfSxob3N0bmFtZTp7ZXJyb3JNZXNzYWdlOmooImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTpqKCJpcHY0Rm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gSVB2NCBhZGRyZXNzLiIpLHBhdHRlcm46L14oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKVwuKXszfSg/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpJC99LGlwdjY6e2Vycm9yTWVzc2FnZTpqKCJpcHY2Rm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gSVB2NiBhZGRyZXNzLiIpLHBhdHRlcm46L14oKChbMC05YS1mXXsxLDR9Oil7N30oWzAtOWEtZl17MSw0fXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Nn0oOlswLTlhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs1fSgoKDpbMC05YS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs0fSgoKDpbMC05YS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05YS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7M30oKCg6WzAtOWEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsyfSgoKDpbMC05YS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05YS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezF9KCgoOlswLTlhLWZdezEsNH0pezEsNn0pfCgoOlswLTlhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KDooKCg6WzAtOWEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKSkkL2l9fSxhdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuLHIpe3I9PT12b2lkIDAmJihyPTApLHRoaXMub2Zmc2V0PW4sdGhpcy5sZW5ndGg9cix0aGlzLnBhcmVudD10fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4idHlwZTogIit0aGlzLnR5cGUrIiAoIit0aGlzLm9mZnNldCsiLyIrdGhpcy5sZW5ndGgrIikiKyh0aGlzLnBhcmVudD8iIHBhcmVudDogeyIrdGhpcy5wYXJlbnQudG9TdHJpbmcoKSsifSI6IiIpfSxlfSgpLF91PWZ1bmN0aW9uKGUpe3N0KHQsZSk7ZnVuY3Rpb24gdChuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLG4scil8fHRoaXM7cmV0dXJuIGkudHlwZT0ibnVsbCIsaS52YWx1ZT1udWxsLGl9cmV0dXJuIHR9KGF0KSxwYT1mdW5jdGlvbihlKXtzdCh0LGUpO2Z1bmN0aW9uIHQobixyLGkpe3ZhciBzPWUuY2FsbCh0aGlzLG4saSl8fHRoaXM7cmV0dXJuIHMudHlwZT0iYm9vbGVhbiIscy52YWx1ZT1yLHN9cmV0dXJuIHR9KGF0KSxTdT1mdW5jdGlvbihlKXtzdCh0LGUpO2Z1bmN0aW9uIHQobixyKXt2YXIgaT1lLmNhbGwodGhpcyxuLHIpfHx0aGlzO3JldHVybiBpLnR5cGU9ImFycmF5IixpLml0ZW1zPVtdLGl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShhdCksTHU9ZnVuY3Rpb24oZSl7c3QodCxlKTtmdW5jdGlvbiB0KG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsbixyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJudW1iZXIiLGkuaXNJbnRlZ2VyPSEwLGkudmFsdWU9TnVtYmVyLk5hTixpfXJldHVybiB0fShhdCksX3I9ZnVuY3Rpb24oZSl7c3QodCxlKTtmdW5jdGlvbiB0KG4scixpKXt2YXIgcz1lLmNhbGwodGhpcyxuLHIsaSl8fHRoaXM7cmV0dXJuIHMudHlwZT0ic3RyaW5nIixzLnZhbHVlPSIiLHN9cmV0dXJuIHR9KGF0KSxOdT1mdW5jdGlvbihlKXtzdCh0LGUpO2Z1bmN0aW9uIHQobixyLGkpe3ZhciBzPWUuY2FsbCh0aGlzLG4scil8fHRoaXM7cmV0dXJuIHMudHlwZT0icHJvcGVydHkiLHMuY29sb25PZmZzZXQ9LTEscy5rZXlOb2RlPWksc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTm9kZT9bdGhpcy5rZXlOb2RlLHRoaXMudmFsdWVOb2RlXTpbdGhpcy5rZXlOb2RlXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShhdCksQXU9ZnVuY3Rpb24oZSl7c3QodCxlKTtmdW5jdGlvbiB0KG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsbixyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJvYmplY3QiLGkucHJvcGVydGllcz1bXSxpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcGVydGllc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShhdCk7ZnVuY3Rpb24gcGUoZSl7cmV0dXJuIEllKGUpP2U/e306e25vdDp7fX06ZX12YXIgdmE7KGZ1bmN0aW9uKGUpe2VbZS5LZXk9MF09IktleSIsZVtlLkVudW09MV09IkVudW0ifSkodmF8fCh2YT17fSkpO3ZhciBDdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt0PT09dm9pZCAwJiYodD0tMSksdGhpcy5mb2N1c09mZnNldD10LHRoaXMuZXhjbHVkZT1uLHRoaXMuc2NoZW1hcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3RoaXMuc2NoZW1hcy5wdXNoKHQpfSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnNjaGVtYXMsdC5zY2hlbWFzKX0sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbih0KXtyZXR1cm4odGhpcy5mb2N1c09mZnNldD09PS0xfHxiYSh0LHRoaXMuZm9jdXNPZmZzZXQpKSYmdCE9PXRoaXMuZXhjbHVkZX0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKC0xLHRoaXMuZXhjbHVkZSl9LGV9KCksU3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNjaGVtYXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuITB9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmluc3RhbmNlPW5ldyBlLGV9KCksdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LGUucHJvdG90eXBlLm1lcmdlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0wLHI9dDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTt0aGlzLm1lcmdlKGkpfX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdCh0LnByb2JsZW1zKX0sZS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhdC5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZ0LmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KHQuZW51bVZhbHVlcyk7Zm9yKHZhciBuPTAscj10aGlzLnByb2JsZW1zO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuY29kZT09PUouRW51bVZhbHVlTWlzbWF0Y2gmJihpLm1lc3NhZ2U9aigiZW51bVdhcm5pbmciLCJWYWx1ZSBpcyBub3QgYWNjZXB0ZWQuIFZhbGlkIHZhbHVlczogezB9LiIsdGhpcy5lbnVtVmFsdWVzLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocyl9KS5qb2luKCIsICIpKSl9fX0sZS5wcm90b3R5cGUubWVyZ2VQcm9wZXJ0eU1hdGNoPWZ1bmN0aW9uKHQpe3RoaXMubWVyZ2UodCksdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcysrLCh0LmVudW1WYWx1ZU1hdGNofHwhdC5oYXNQcm9ibGVtcygpJiZ0LnByb3BlcnRpZXNNYXRjaGVzKSYmdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyssdC5lbnVtVmFsdWVNYXRjaCYmdC5lbnVtVmFsdWVzJiZ0LmVudW1WYWx1ZXMubGVuZ3RoPT09MSYmdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzKyt9LGUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5oYXNQcm9ibGVtcygpO3JldHVybiBuIT09dC5oYXNQcm9ibGVtcygpP24/LTE6MTp0aGlzLmVudW1WYWx1ZU1hdGNoIT09dC5lbnVtVmFsdWVNYXRjaD90LmVudW1WYWx1ZU1hdGNoPy0xOjE6dGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzIT09dC5wcmltYXJ5VmFsdWVNYXRjaGVzP3RoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcy10LnByaW1hcnlWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzIT09dC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzP3RoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcy10LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcy10LnByb3BlcnRpZXNNYXRjaGVzfSxlfSgpO2Z1bmN0aW9uIGt1KGUsdCl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PVtdKSxuZXcgeGEoZSx0LFtdKX1mdW5jdGlvbiBvdChlKXtyZXR1cm4gZHUoZSl9ZnVuY3Rpb24gTHIoZSl7cmV0dXJuIGh1KGUpfWZ1bmN0aW9uIGJhKGUsdCxuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9dmFyIHhhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7bj09PXZvaWQgMCYmKG49W10pLHI9PT12b2lkIDAmJihyPVtdKSx0aGlzLnJvb3Q9dCx0aGlzLnN5bnRheEVycm9ycz1uLHRoaXMuY29tbWVudHM9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24odCxuKXtpZihuPT09dm9pZCAwJiYobj0hMSksdGhpcy5yb290KXJldHVybiBmdSh0aGlzLnJvb3QsdCxuKX0sZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5yb290KXt2YXIgbj1mdW5jdGlvbihyKXt2YXIgaT10KHIpLHM9ci5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KHMpKWZvcih2YXIgYT0wO2E8cy5sZW5ndGgmJmk7YSsrKWk9bihzW2FdKTtyZXR1cm4gaX07bih0aGlzLnJvb3QpfX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCxuLHIpe2lmKHI9PT12b2lkIDAmJihyPV9lLldhcm5pbmcpLHRoaXMucm9vdCYmbil7dmFyIGk9bmV3IHZlO3JldHVybiBjZSh0aGlzLnJvb3QsbixpLFNyLmluc3RhbmNlKSxpLnByb2JsZW1zLm1hcChmdW5jdGlvbihzKXt2YXIgYSxvPVguY3JlYXRlKHQucG9zaXRpb25BdChzLmxvY2F0aW9uLm9mZnNldCksdC5wb3NpdGlvbkF0KHMubG9jYXRpb24ub2Zmc2V0K3MubG9jYXRpb24ubGVuZ3RoKSk7cmV0dXJuICRlLmNyZWF0ZShvLHMubWVzc2FnZSwoYT1zLnNldmVyaXR5KSE9PW51bGwmJmEhPT12b2lkIDA/YTpyLHMuY29kZSl9KX19LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbih0LG4scil7bj09PXZvaWQgMCYmKG49LTEpO3ZhciBpPW5ldyBDdShuLHIpO3JldHVybiB0aGlzLnJvb3QmJnQmJmNlKHRoaXMucm9vdCx0LG5ldyB2ZSxpKSxpLnNjaGVtYXN9LGV9KCk7ZnVuY3Rpb24gY2UoZSx0LG4scil7aWYoIWV8fCFyLmluY2x1ZGUoZSkpcmV0dXJuO3ZhciBpPWU7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOnUoaSx0LG4scik7YnJlYWs7Y2FzZSJhcnJheSI6bChpLHQsbixyKTticmVhaztjYXNlInN0cmluZyI6byhpLHQsbik7YnJlYWs7Y2FzZSJudW1iZXIiOmEoaSx0LG4pO2JyZWFrO2Nhc2UicHJvcGVydHkiOnJldHVybiBjZShpLnZhbHVlTm9kZSx0LG4scil9cygpLHIuYWRkKHtub2RlOmksc2NoZW1hOnR9KTtmdW5jdGlvbiBzKCl7ZnVuY3Rpb24gZihUKXtyZXR1cm4gaS50eXBlPT09VHx8VD09PSJpbnRlZ2VyIiYmaS50eXBlPT09Im51bWJlciImJmkuaXNJbnRlZ2VyfWlmKEFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGUuc29tZShmKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8aigidHlwZUFycmF5TWlzbWF0Y2hXYXJuaW5nIiwiSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkIG9uZSBvZiB7MH0uIix0LnR5cGUuam9pbigiLCAiKSl9KTp0LnR5cGUmJihmKHQudHlwZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fGooInR5cGVNaXNtYXRjaFdhcm5pbmciLCdJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgInswfSIuJyx0LnR5cGUpfSkpLEFycmF5LmlzQXJyYXkodC5hbGxPZikpZm9yKHZhciBoPTAsZD10LmFsbE9mO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZz1kW2hdO2NlKGkscGUoZyksbixyKX12YXIgbT1wZSh0Lm5vdCk7aWYobSl7dmFyIHY9bmV3IHZlLHA9ci5uZXdTdWIoKTtjZShpLG0sdixwKSx2Lmhhc1Byb2JsZW1zKCl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6aigibm90U2NoZW1hV2FybmluZyIsIk1hdGNoZXMgYSBzY2hlbWEgdGhhdCBpcyBub3QgYWxsb3dlZC4iKX0pO2Zvcih2YXIgeD0wLHk9cC5zY2hlbWFzO3g8eS5sZW5ndGg7eCsrKXt2YXIgYj15W3hdO2IuaW52ZXJ0ZWQ9IWIuaW52ZXJ0ZWQsci5hZGQoYil9fXZhciBMPWZ1bmN0aW9uKFQsRil7Zm9yKHZhciBWPVtdLE89dm9pZCAwLFI9MCxrPVQ7UjxrLmxlbmd0aDtSKyspe3ZhciBQPWtbUl0sRD1wZShQKSxCPW5ldyB2ZSxVPXIubmV3U3ViKCk7aWYoY2UoaSxELEIsVSksQi5oYXNQcm9ibGVtcygpfHxWLnB1c2goRCksIU8pTz17c2NoZW1hOkQsdmFsaWRhdGlvblJlc3VsdDpCLG1hdGNoaW5nU2NoZW1hczpVfTtlbHNlIGlmKCFGJiYhQi5oYXNQcm9ibGVtcygpJiYhTy52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCkpTy5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoVSksTy52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzKz1CLnByb3BlcnRpZXNNYXRjaGVzLE8udmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1CLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM7ZWxzZXt2YXIgRz1CLmNvbXBhcmUoTy52YWxpZGF0aW9uUmVzdWx0KTtHPjA/Tz17c2NoZW1hOkQsdmFsaWRhdGlvblJlc3VsdDpCLG1hdGNoaW5nU2NoZW1hczpVfTpHPT09MCYmKE8ubWF0Y2hpbmdTY2hlbWFzLm1lcmdlKFUpLE8udmFsaWRhdGlvblJlc3VsdC5tZXJnZUVudW1WYWx1ZXMoQikpfX1yZXR1cm4gVi5sZW5ndGg+MSYmRiYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDoxfSxtZXNzYWdlOmooIm9uZU9mV2FybmluZyIsIk1hdGNoZXMgbXVsdGlwbGUgc2NoZW1hcyB3aGVuIG9ubHkgb25lIG11c3QgdmFsaWRhdGUuIil9KSxPJiYobi5tZXJnZShPLnZhbGlkYXRpb25SZXN1bHQpLG4ucHJvcGVydGllc01hdGNoZXMrPU8udmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzTWF0Y2hlcyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPU8udmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2UoTy5tYXRjaGluZ1NjaGVtYXMpKSxWLmxlbmd0aH07QXJyYXkuaXNBcnJheSh0LmFueU9mKSYmTCh0LmFueU9mLCExKSxBcnJheS5pc0FycmF5KHQub25lT2YpJiZMKHQub25lT2YsITApO3ZhciBTPWZ1bmN0aW9uKFQpe3ZhciBGPW5ldyB2ZSxWPXIubmV3U3ViKCk7Y2UoaSxwZShUKSxGLFYpLG4ubWVyZ2UoRiksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9Ri5wcm9wZXJ0aWVzTWF0Y2hlcyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPUYucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxyLm1lcmdlKFYpfSxfPWZ1bmN0aW9uKFQsRixWKXt2YXIgTz1wZShUKSxSPW5ldyB2ZSxrPXIubmV3U3ViKCk7Y2UoaSxPLFIsayksci5tZXJnZShrKSxSLmhhc1Byb2JsZW1zKCk/ViYmUyhWKTpGJiZTKEYpfSxOPXBlKHQuaWYpO2lmKE4mJl8oTixwZSh0LnRoZW4pLHBlKHQuZWxzZSkpLEFycmF5LmlzQXJyYXkodC5lbnVtKSl7Zm9yKHZhciBBPW90KGkpLE09ITEsST0wLEM9dC5lbnVtO0k8Qy5sZW5ndGg7SSsrKXt2YXIgdz1DW0ldO2lmKEJ0KEEsdykpe009ITA7YnJlYWt9fW4uZW51bVZhbHVlcz10LmVudW0sbi5lbnVtVmFsdWVNYXRjaD1NLE18fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6Si5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxqKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0LmVudW0ubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBKU09OLnN0cmluZ2lmeShUKX0pLmpvaW4oIiwgIikpfSl9aWYoVWUodC5jb25zdCkpe3ZhciBBPW90KGkpO0J0KEEsdC5jb25zdCk/bi5lbnVtVmFsdWVNYXRjaD0hMDoobi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sY29kZTpKLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fGooImNvbnN0V2FybmluZyIsIlZhbHVlIG11c3QgYmUgezB9LiIsSlNPTi5zdHJpbmdpZnkodC5jb25zdCkpfSksbi5lbnVtVmFsdWVNYXRjaD0hMSksbi5lbnVtVmFsdWVzPVt0LmNvbnN0XX10LmRlcHJlY2F0aW9uTWVzc2FnZSYmaS5wYXJlbnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLnBhcmVudC5vZmZzZXQsbGVuZ3RoOmkucGFyZW50Lmxlbmd0aH0sc2V2ZXJpdHk6X2UuV2FybmluZyxtZXNzYWdlOnQuZGVwcmVjYXRpb25NZXNzYWdlLGNvZGU6Si5EZXByZWNhdGVkfSl9ZnVuY3Rpb24gYShmLGgsZCxnKXt2YXIgbT1mLnZhbHVlO2Z1bmN0aW9uIHYoSSl7dmFyIEMsdz0vXigtP1xkKykoPzpcLihcZCspKT8oPzplKFstK11cZCspKT8kLy5leGVjKEkudG9TdHJpbmcoKSk7cmV0dXJuIHcmJnt2YWx1ZTpOdW1iZXIod1sxXSsod1syXXx8IiIpKSxtdWx0aXBsaWVyOigoKEM9d1syXSk9PT1udWxsfHxDPT09dm9pZCAwP3ZvaWQgMDpDLmxlbmd0aCl8fDApLShwYXJzZUludCh3WzNdKXx8MCl9fWlmKHdlKGgubXVsdGlwbGVPZikpe3ZhciBwPS0xO2lmKE51bWJlci5pc0ludGVnZXIoaC5tdWx0aXBsZU9mKSlwPW0laC5tdWx0aXBsZU9mO2Vsc2V7dmFyIHg9dihoLm11bHRpcGxlT2YpLHk9dihtKTtpZih4JiZ5KXt2YXIgYj1NYXRoLnBvdygxMCxNYXRoLmFicyh5Lm11bHRpcGxpZXIteC5tdWx0aXBsaWVyKSk7eS5tdWx0aXBsaWVyPHgubXVsdGlwbGllcj95LnZhbHVlKj1iOngudmFsdWUqPWIscD15LnZhbHVlJXgudmFsdWV9fXAhPT0wJiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Zi5vZmZzZXQsbGVuZ3RoOmYubGVuZ3RofSxtZXNzYWdlOmooIm11bHRpcGxlT2ZXYXJuaW5nIiwiVmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB7MH0uIixoLm11bHRpcGxlT2YpfSl9ZnVuY3Rpb24gTChJLEMpe2lmKHdlKEMpKXJldHVybiBDO2lmKEllKEMpJiZDKXJldHVybiBJfWZ1bmN0aW9uIFMoSSxDKXtpZighSWUoQyl8fCFDKXJldHVybiBJfXZhciBfPUwoaC5taW5pbXVtLGguZXhjbHVzaXZlTWluaW11bSk7d2UoXykmJm08PV8mJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigiZXhjbHVzaXZlTWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgZXhjbHVzaXZlIG1pbmltdW0gb2YgezB9LiIsXyl9KTt2YXIgTj1MKGgubWF4aW11bSxoLmV4Y2x1c2l2ZU1heGltdW0pO3dlKE4pJiZtPj1OJiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Zi5vZmZzZXQsbGVuZ3RoOmYubGVuZ3RofSxtZXNzYWdlOmooImV4Y2x1c2l2ZU1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIGV4Y2x1c2l2ZSBtYXhpbXVtIG9mIHswfS4iLE4pfSk7dmFyIEE9UyhoLm1pbmltdW0saC5leGNsdXNpdmVNaW5pbXVtKTt3ZShBKSYmbTxBJiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Zi5vZmZzZXQsbGVuZ3RoOmYubGVuZ3RofSxtZXNzYWdlOmooIm1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIG1pbmltdW0gb2YgezB9LiIsQSl9KTt2YXIgTT1TKGgubWF4aW11bSxoLmV4Y2x1c2l2ZU1heGltdW0pO3dlKE0pJiZtPk0mJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigibWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgbWF4aW11bSBvZiB7MH0uIixNKX0pfWZ1bmN0aW9uIG8oZixoLGQsZyl7aWYod2UoaC5taW5MZW5ndGgpJiZmLnZhbHVlLmxlbmd0aDxoLm1pbkxlbmd0aCYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDpmLmxlbmd0aH0sbWVzc2FnZTpqKCJtaW5MZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIHNob3J0ZXIgdGhhbiB0aGUgbWluaW11bSBsZW5ndGggb2YgezB9LiIsaC5taW5MZW5ndGgpfSksd2UoaC5tYXhMZW5ndGgpJiZmLnZhbHVlLmxlbmd0aD5oLm1heExlbmd0aCYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDpmLmxlbmd0aH0sbWVzc2FnZTpqKCJtYXhMZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB7MH0uIixoLm1heExlbmd0aCl9KSxtdShoLnBhdHRlcm4pKXt2YXIgbT1tbihoLnBhdHRlcm4pO20/LnRlc3QoZi52YWx1ZSl8fGQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHxoLmVycm9yTWVzc2FnZXx8aigicGF0dGVybldhcm5pbmciLCdTdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4gb2YgInswfSIuJyxoLnBhdHRlcm4pfSl9aWYoaC5mb3JtYXQpc3dpdGNoKGguZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp7dmFyIHY9dm9pZCAwO2lmKCFmLnZhbHVlKXY9aigidXJpRW1wdHkiLCJVUkkgZXhwZWN0ZWQuIik7ZWxzZXt2YXIgcD0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/Ly5leGVjKGYudmFsdWUpO3A/IXBbMl0mJmguZm9ybWF0PT09InVyaSImJih2PWooInVyaVNjaGVtZU1pc3NpbmciLCJVUkkgd2l0aCBhIHNjaGVtZSBpcyBleHBlY3RlZC4iKSk6dj1qKCJ1cmlNaXNzaW5nIiwiVVJJIGlzIGV4cGVjdGVkLiIpfXYmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHxoLmVycm9yTWVzc2FnZXx8aigidXJpRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBVUkk6IHswfSIsdil9KX1icmVhaztjYXNlImNvbG9yLWhleCI6Y2FzZSJkYXRlLXRpbWUiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImVtYWlsIjpjYXNlImhvc3RuYW1lIjpjYXNlImlwdjQiOmNhc2UiaXB2NiI6dmFyIHg9d3VbaC5mb3JtYXRdOyghZi52YWx1ZXx8IXgucGF0dGVybi5leGVjKGYudmFsdWUpKSYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDpmLmxlbmd0aH0sbWVzc2FnZTpoLnBhdHRlcm5FcnJvck1lc3NhZ2V8fGguZXJyb3JNZXNzYWdlfHx4LmVycm9yTWVzc2FnZX0pfX1mdW5jdGlvbiBsKGYsaCxkLGcpe2lmKEFycmF5LmlzQXJyYXkoaC5pdGVtcykpe2Zvcih2YXIgbT1oLml0ZW1zLHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIHA9bVt2XSx4PXBlKHApLHk9bmV3IHZlLGI9Zi5pdGVtc1t2XTtiPyhjZShiLHgseSxnKSxkLm1lcmdlUHJvcGVydHlNYXRjaCh5KSk6Zi5pdGVtcy5sZW5ndGg+PW0ubGVuZ3RoJiZkLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrK31pZihmLml0ZW1zLmxlbmd0aD5tLmxlbmd0aClpZih0eXBlb2YgaC5hZGRpdGlvbmFsSXRlbXM9PSJvYmplY3QiKWZvcih2YXIgTD1tLmxlbmd0aDtMPGYuaXRlbXMubGVuZ3RoO0wrKyl7dmFyIHk9bmV3IHZlO2NlKGYuaXRlbXNbTF0saC5hZGRpdGlvbmFsSXRlbXMseSxnKSxkLm1lcmdlUHJvcGVydHlNYXRjaCh5KX1lbHNlIGguYWRkaXRpb25hbEl0ZW1zPT09ITEmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigiYWRkaXRpb25hbEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcyBhY2NvcmRpbmcgdG8gc2NoZW1hLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIixtLmxlbmd0aCl9KX1lbHNle3ZhciBTPXBlKGguaXRlbXMpO2lmKFMpZm9yKHZhciBfPTAsTj1mLml0ZW1zO188Ti5sZW5ndGg7XysrKXt2YXIgYj1OW19dLHk9bmV3IHZlO2NlKGIsUyx5LGcpLGQubWVyZ2VQcm9wZXJ0eU1hdGNoKHkpfX12YXIgQT1wZShoLmNvbnRhaW5zKTtpZihBKXt2YXIgTT1mLml0ZW1zLnNvbWUoZnVuY3Rpb24odyl7dmFyIFQ9bmV3IHZlO3JldHVybiBjZSh3LEEsVCxTci5pbnN0YW5jZSksIVQuaGFzUHJvYmxlbXMoKX0pO018fGQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aC5lcnJvck1lc3NhZ2V8fGooInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSl9aWYod2UoaC5taW5JdGVtcykmJmYuaXRlbXMubGVuZ3RoPGgubWluSXRlbXMmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigibWluSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBmZXcgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBtb3JlLiIsaC5taW5JdGVtcyl9KSx3ZShoLm1heEl0ZW1zKSYmZi5pdGVtcy5sZW5ndGg+aC5tYXhJdGVtcyYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDpmLmxlbmd0aH0sbWVzc2FnZTpqKCJtYXhJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLGgubWF4SXRlbXMpfSksaC51bmlxdWVJdGVtcz09PSEwKXt2YXIgST1vdChmKSxDPUkuc29tZShmdW5jdGlvbih3LFQpe3JldHVybiBUIT09SS5sYXN0SW5kZXhPZih3KX0pO0MmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigidW5pcXVlSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIGR1cGxpY2F0ZSBpdGVtcy4iKX0pfX1mdW5jdGlvbiB1KGYsaCxkLGcpe2Zvcih2YXIgbT1PYmplY3QuY3JlYXRlKG51bGwpLHY9W10scD0wLHg9Zi5wcm9wZXJ0aWVzO3A8eC5sZW5ndGg7cCsrKXt2YXIgeT14W3BdLGI9eS5rZXlOb2RlLnZhbHVlO21bYl09eS52YWx1ZU5vZGUsdi5wdXNoKGIpfWlmKEFycmF5LmlzQXJyYXkoaC5yZXF1aXJlZCkpZm9yKHZhciBMPTAsUz1oLnJlcXVpcmVkO0w8Uy5sZW5ndGg7TCsrKXt2YXIgXz1TW0xdO2lmKCFtW19dKXt2YXIgTj1mLnBhcmVudCYmZi5wYXJlbnQudHlwZT09PSJwcm9wZXJ0eSImJmYucGFyZW50LmtleU5vZGUsQT1OP3tvZmZzZXQ6Ti5vZmZzZXQsbGVuZ3RoOk4ubGVuZ3RofTp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDoxfTtkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOkEsbWVzc2FnZTpqKCJNaXNzaW5nUmVxdWlyZWRQcm9wV2FybmluZyIsJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyxfKX0pfX12YXIgTT1mdW5jdGlvbihUYSl7Zm9yKHZhciBGcj12LmluZGV4T2YoVGEpO0ZyPj0wOyl2LnNwbGljZShGciwxKSxGcj12LmluZGV4T2YoVGEpfTtpZihoLnByb3BlcnRpZXMpZm9yKHZhciBJPTAsQz1PYmplY3Qua2V5cyhoLnByb3BlcnRpZXMpO0k8Qy5sZW5ndGg7SSsrKXt2YXIgXz1DW0ldO00oXyk7dmFyIHc9aC5wcm9wZXJ0aWVzW19dLFQ9bVtfXTtpZihUKWlmKEllKHcpKWlmKHcpZC5wcm9wZXJ0aWVzTWF0Y2hlcysrLGQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7dmFyIHk9VC5wYXJlbnQ7ZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Onkua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnkua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6aC5lcnJvck1lc3NhZ2V8fGooIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsXyl9KX1lbHNle3ZhciBGPW5ldyB2ZTtjZShULHcsRixnKSxkLm1lcmdlUHJvcGVydHlNYXRjaChGKX19aWYoaC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIFY9MCxPPU9iamVjdC5rZXlzKGgucGF0dGVyblByb3BlcnRpZXMpO1Y8Ty5sZW5ndGg7VisrKWZvcih2YXIgUj1PW1ZdLGs9bW4oUiksUD0wLEQ9di5zbGljZSgwKTtQPEQubGVuZ3RoO1ArKyl7dmFyIF89RFtQXTtpZihrPy50ZXN0KF8pKXtNKF8pO3ZhciBUPW1bX107aWYoVCl7dmFyIHc9aC5wYXR0ZXJuUHJvcGVydGllc1tSXTtpZihJZSh3KSlpZih3KWQucHJvcGVydGllc01hdGNoZXMrKyxkLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3ZhciB5PVQucGFyZW50O2QucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDp5LmtleU5vZGUub2Zmc2V0LGxlbmd0aDp5LmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOmguZXJyb3JNZXNzYWdlfHxqKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLF8pfSl9ZWxzZXt2YXIgRj1uZXcgdmU7Y2UoVCx3LEYsZyksZC5tZXJnZVByb3BlcnR5TWF0Y2goRil9fX19aWYodHlwZW9mIGguYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiKWZvcih2YXIgQj0wLFU9djtCPFUubGVuZ3RoO0IrKyl7dmFyIF89VVtCXSxUPW1bX107aWYoVCl7dmFyIEY9bmV3IHZlO2NlKFQsaC5hZGRpdGlvbmFsUHJvcGVydGllcyxGLGcpLGQubWVyZ2VQcm9wZXJ0eU1hdGNoKEYpfX1lbHNlIGlmKGguYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMSYmdi5sZW5ndGg+MClmb3IodmFyIEc9MCxkZT12O0c8ZGUubGVuZ3RoO0crKyl7dmFyIF89ZGVbR10sVD1tW19dO2lmKFQpe3ZhciB5PVQucGFyZW50O2QucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDp5LmtleU5vZGUub2Zmc2V0LGxlbmd0aDp5LmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOmguZXJyb3JNZXNzYWdlfHxqKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLF8pfSl9fWlmKHdlKGgubWF4UHJvcGVydGllcykmJmYucHJvcGVydGllcy5sZW5ndGg+aC5tYXhQcm9wZXJ0aWVzJiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Zi5vZmZzZXQsbGVuZ3RoOmYubGVuZ3RofSxtZXNzYWdlOmooIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIixoLm1heFByb3BlcnRpZXMpfSksd2UoaC5taW5Qcm9wZXJ0aWVzKSYmZi5wcm9wZXJ0aWVzLmxlbmd0aDxoLm1pblByb3BlcnRpZXMmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigiTWluUHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIGZld2VyIHByb3BlcnRpZXMgdGhhbiB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIHswfSIsaC5taW5Qcm9wZXJ0aWVzKX0pLGguZGVwZW5kZW5jaWVzKWZvcih2YXIgbGU9MCxiZT1PYmplY3Qua2V5cyhoLmRlcGVuZGVuY2llcyk7bGU8YmUubGVuZ3RoO2xlKyspe3ZhciBiPWJlW2xlXSxFdD1tW2JdO2lmKEV0KXt2YXIgT2U9aC5kZXBlbmRlbmNpZXNbYl07aWYoQXJyYXkuaXNBcnJheShPZSkpZm9yKHZhciBUcj0wLGthPU9lO1RyPGthLmxlbmd0aDtUcisrKXt2YXIgRWE9a2FbVHJdO21bRWFdP2QucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigiUmVxdWlyZWREZXBlbmRlbnRQcm9wV2FybmluZyIsIk9iamVjdCBpcyBtaXNzaW5nIHByb3BlcnR5IHswfSByZXF1aXJlZCBieSBwcm9wZXJ0eSB7MX0uIixFYSxiKX0pfWVsc2V7dmFyIHc9cGUoT2UpO2lmKHcpe3ZhciBGPW5ldyB2ZTtjZShmLHcsRixnKSxkLm1lcmdlUHJvcGVydHlNYXRjaChGKX19fX12YXIgTWE9cGUoaC5wcm9wZXJ0eU5hbWVzKTtpZihNYSlmb3IodmFyIFByPTAsUmE9Zi5wcm9wZXJ0aWVzO1ByPFJhLmxlbmd0aDtQcisrKXt2YXIgdWM9UmFbUHJdLGI9dWMua2V5Tm9kZTtiJiZjZShiLE1hLGQsU3IuaW5zdGFuY2UpfX19ZnVuY3Rpb24gRXUoZSx0KXt2YXIgbj1bXSxyPS0xLGk9ZS5nZXRUZXh0KCkscz1OdChpLCExKSxhPXQmJnQuY29sbGVjdENvbW1lbnRzP1tdOnZvaWQgMDtmdW5jdGlvbiBvKCl7Zm9yKDs7KXt2YXIgXz1zLnNjYW4oKTtzd2l0Y2goZigpLF8pe2Nhc2UgMTI6Y2FzZSAxMzpBcnJheS5pc0FycmF5KGEpJiZhLnB1c2goWC5jcmVhdGUoZS5wb3NpdGlvbkF0KHMuZ2V0VG9rZW5PZmZzZXQoKSksZS5wb3NpdGlvbkF0KHMuZ2V0VG9rZW5PZmZzZXQoKStzLmdldFRva2VuTGVuZ3RoKCkpKSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIF99fX1mdW5jdGlvbiBsKF8sTixBLE0sSSl7aWYoST09PXZvaWQgMCYmKEk9X2UuRXJyb3IpLG4ubGVuZ3RoPT09MHx8QSE9PXIpe3ZhciBDPVguY3JlYXRlKGUucG9zaXRpb25BdChBKSxlLnBvc2l0aW9uQXQoTSkpO24ucHVzaCgkZS5jcmVhdGUoQyxfLEksTixlLmxhbmd1YWdlSWQpKSxyPUF9fWZ1bmN0aW9uIHUoXyxOLEEsTSxJKXtBPT09dm9pZCAwJiYoQT12b2lkIDApLE09PT12b2lkIDAmJihNPVtdKSxJPT09dm9pZCAwJiYoST1bXSk7dmFyIEM9cy5nZXRUb2tlbk9mZnNldCgpLHc9cy5nZXRUb2tlbk9mZnNldCgpK3MuZ2V0VG9rZW5MZW5ndGgoKTtpZihDPT09dyYmQz4wKXtmb3IoQy0tO0M+MCYmL1xzLy50ZXN0KGkuY2hhckF0KEMpKTspQy0tO3c9QysxfWlmKGwoXyxOLEMsdyksQSYmaChBLCExKSxNLmxlbmd0aCtJLmxlbmd0aD4wKWZvcih2YXIgVD1zLmdldFRva2VuKCk7VCE9PTE3Oyl7aWYoTS5pbmRleE9mKFQpIT09LTEpe28oKTticmVha31lbHNlIGlmKEkuaW5kZXhPZihUKSE9PS0xKWJyZWFrO1Q9bygpfXJldHVybiBBfWZ1bmN0aW9uIGYoKXtzd2l0Y2gocy5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpyZXR1cm4gdShqKCJJbnZhbGlkVW5pY29kZSIsIkludmFsaWQgdW5pY29kZSBzZXF1ZW5jZSBpbiBzdHJpbmcuIiksSi5JbnZhbGlkVW5pY29kZSksITA7Y2FzZSA1OnJldHVybiB1KGooIkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLCJJbnZhbGlkIGVzY2FwZSBjaGFyYWN0ZXIgaW4gc3RyaW5nLiIpLEouSW52YWxpZEVzY2FwZUNoYXJhY3RlciksITA7Y2FzZSAzOnJldHVybiB1KGooIlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsIlVuZXhwZWN0ZWQgZW5kIG9mIG51bWJlci4iKSxKLlVuZXhwZWN0ZWRFbmRPZk51bWJlciksITA7Y2FzZSAxOnJldHVybiB1KGooIlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLCJVbmV4cGVjdGVkIGVuZCBvZiBjb21tZW50LiIpLEouVW5leHBlY3RlZEVuZE9mQ29tbWVudCksITA7Y2FzZSAyOnJldHVybiB1KGooIlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsIlVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4iKSxKLlVuZXhwZWN0ZWRFbmRPZlN0cmluZyksITA7Y2FzZSA2OnJldHVybiB1KGooIkludmFsaWRDaGFyYWN0ZXIiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gc3RyaW5nLiBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkLiIpLEouSW52YWxpZENoYXJhY3RlciksITB9cmV0dXJuITF9ZnVuY3Rpb24gaChfLE4pe3JldHVybiBfLmxlbmd0aD1zLmdldFRva2VuT2Zmc2V0KCkrcy5nZXRUb2tlbkxlbmd0aCgpLV8ub2Zmc2V0LE4mJm8oKSxffWZ1bmN0aW9uIGQoXyl7aWYocy5nZXRUb2tlbigpPT09Myl7dmFyIE49bmV3IFN1KF8scy5nZXRUb2tlbk9mZnNldCgpKTtvKCk7Zm9yKHZhciBBPSExO3MuZ2V0VG9rZW4oKSE9PTQmJnMuZ2V0VG9rZW4oKSE9PTE3Oyl7aWYocy5nZXRUb2tlbigpPT09NSl7QXx8dShqKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxKLlZhbHVlRXhwZWN0ZWQpO3ZhciBNPXMuZ2V0VG9rZW5PZmZzZXQoKTtpZihvKCkscy5nZXRUb2tlbigpPT09NCl7QSYmbChqKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSxKLlRyYWlsaW5nQ29tbWEsTSxNKzEpO2NvbnRpbnVlfX1lbHNlIEEmJnUoaigiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksSi5Db21tYUV4cGVjdGVkKTt2YXIgST1iKE4pO0k/Ti5pdGVtcy5wdXNoKEkpOnUoaigiUHJvcGVydHlFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksSi5WYWx1ZUV4cGVjdGVkLHZvaWQgMCxbXSxbNCw1XSksQT0hMH1yZXR1cm4gcy5nZXRUb2tlbigpIT09ND91KGooIkV4cGVjdGVkQ2xvc2VCcmFja2V0IiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFja2V0IiksSi5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCxOKTpoKE4sITApfX12YXIgZz1uZXcgX3Iodm9pZCAwLDAsMCk7ZnVuY3Rpb24gbShfLE4pe3ZhciBBPW5ldyBOdShfLHMuZ2V0VG9rZW5PZmZzZXQoKSxnKSxNPXAoQSk7aWYoIU0paWYocy5nZXRUb2tlbigpPT09MTYpe3UoaigiRG91YmxlUXVvdGVzRXhwZWN0ZWQiLCJQcm9wZXJ0eSBrZXlzIG11c3QgYmUgZG91YmxlcXVvdGVkIiksSi5VbmRlZmluZWQpO3ZhciBJPW5ldyBfcihBLHMuZ2V0VG9rZW5PZmZzZXQoKSxzLmdldFRva2VuTGVuZ3RoKCkpO0kudmFsdWU9cy5nZXRUb2tlblZhbHVlKCksTT1JLG8oKX1lbHNlIHJldHVybjtBLmtleU5vZGU9TTt2YXIgQz1OW00udmFsdWVdO2lmKEM/KGwoaigiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksSi5EdXBsaWNhdGVLZXksQS5rZXlOb2RlLm9mZnNldCxBLmtleU5vZGUub2Zmc2V0K0Eua2V5Tm9kZS5sZW5ndGgsX2UuV2FybmluZyksdHlwZW9mIEM9PSJvYmplY3QiJiZsKGooIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLEouRHVwbGljYXRlS2V5LEMua2V5Tm9kZS5vZmZzZXQsQy5rZXlOb2RlLm9mZnNldCtDLmtleU5vZGUubGVuZ3RoLF9lLldhcm5pbmcpLE5bTS52YWx1ZV09ITApOk5bTS52YWx1ZV09QSxzLmdldFRva2VuKCk9PT02KUEuY29sb25PZmZzZXQ9cy5nZXRUb2tlbk9mZnNldCgpLG8oKTtlbHNlIGlmKHUoaigiQ29sb25FeHBlY3RlZCIsIkNvbG9uIGV4cGVjdGVkIiksSi5Db2xvbkV4cGVjdGVkKSxzLmdldFRva2VuKCk9PT0xMCYmZS5wb3NpdGlvbkF0KE0ub2Zmc2V0K00ubGVuZ3RoKS5saW5lPGUucG9zaXRpb25BdChzLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUpcmV0dXJuIEEubGVuZ3RoPU0ubGVuZ3RoLEE7dmFyIHc9YihBKTtyZXR1cm4gdz8oQS52YWx1ZU5vZGU9dyxBLmxlbmd0aD13Lm9mZnNldCt3Lmxlbmd0aC1BLm9mZnNldCxBKTp1KGooIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLEouVmFsdWVFeHBlY3RlZCxBLFtdLFsyLDVdKX1mdW5jdGlvbiB2KF8pe2lmKHMuZ2V0VG9rZW4oKT09PTEpe3ZhciBOPW5ldyBBdShfLHMuZ2V0VG9rZW5PZmZzZXQoKSksQT1PYmplY3QuY3JlYXRlKG51bGwpO28oKTtmb3IodmFyIE09ITE7cy5nZXRUb2tlbigpIT09MiYmcy5nZXRUb2tlbigpIT09MTc7KXtpZihzLmdldFRva2VuKCk9PT01KXtNfHx1KGooIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLEouUHJvcGVydHlFeHBlY3RlZCk7dmFyIEk9cy5nZXRUb2tlbk9mZnNldCgpO2lmKG8oKSxzLmdldFRva2VuKCk9PT0yKXtNJiZsKGooIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLEouVHJhaWxpbmdDb21tYSxJLEkrMSk7Y29udGludWV9fWVsc2UgTSYmdShqKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSxKLkNvbW1hRXhwZWN0ZWQpO3ZhciBDPW0oTixBKTtDP04ucHJvcGVydGllcy5wdXNoKEMpOnUoaigiUHJvcGVydHlFeHBlY3RlZCIsIlByb3BlcnR5IGV4cGVjdGVkIiksSi5Qcm9wZXJ0eUV4cGVjdGVkLHZvaWQgMCxbXSxbMiw1XSksTT0hMH1yZXR1cm4gcy5nZXRUb2tlbigpIT09Mj91KGooIkV4cGVjdGVkQ2xvc2VCcmFjZSIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2UiKSxKLkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQsTik6aChOLCEwKX19ZnVuY3Rpb24gcChfKXtpZihzLmdldFRva2VuKCk9PT0xMCl7dmFyIE49bmV3IF9yKF8scy5nZXRUb2tlbk9mZnNldCgpKTtyZXR1cm4gTi52YWx1ZT1zLmdldFRva2VuVmFsdWUoKSxoKE4sITApfX1mdW5jdGlvbiB4KF8pe2lmKHMuZ2V0VG9rZW4oKT09PTExKXt2YXIgTj1uZXcgTHUoXyxzLmdldFRva2VuT2Zmc2V0KCkpO2lmKHMuZ2V0VG9rZW5FcnJvcigpPT09MCl7dmFyIEE9cy5nZXRUb2tlblZhbHVlKCk7dHJ5e3ZhciBNPUpTT04ucGFyc2UoQSk7aWYoIXdlKE0pKXJldHVybiB1KGooIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksSi5VbmRlZmluZWQsTik7Ti52YWx1ZT1NfWNhdGNoe3JldHVybiB1KGooIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksSi5VbmRlZmluZWQsTil9Ti5pc0ludGVnZXI9QS5pbmRleE9mKCIuIik9PT0tMX1yZXR1cm4gaChOLCEwKX19ZnVuY3Rpb24geShfKXtzd2l0Y2gocy5nZXRUb2tlbigpKXtjYXNlIDc6cmV0dXJuIGgobmV3IF91KF8scy5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA4OnJldHVybiBoKG5ldyBwYShfLCEwLHMuZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgOTpyZXR1cm4gaChuZXcgcGEoXywhMSxzLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gYihfKXtyZXR1cm4gZChfKXx8dihfKXx8cChfKXx8eChfKXx8eShfKX12YXIgTD12b2lkIDAsUz1vKCk7cmV0dXJuIFMhPT0xNyYmKEw9YihMKSxMP3MuZ2V0VG9rZW4oKSE9PTE3JiZ1KGooIkVuZCBvZiBmaWxlIGV4cGVjdGVkIiwiRW5kIG9mIGZpbGUgZXhwZWN0ZWQuIiksSi5VbmRlZmluZWQpOnUoaigiSW52YWxpZCBzeW1ib2wiLCJFeHBlY3RlZCBhIEpTT04gb2JqZWN0LCBhcnJheSBvciBsaXRlcmFsLiIpLEouVW5kZWZpbmVkKSksbmV3IHhhKEwsbixhKX1mdW5jdGlvbiBOcihlLHQsbil7aWYoZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0Iil7dmFyIHI9dCsiCSI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiJbXSI7Zm9yKHZhciBpPWBbCmAscz0wO3M8ZS5sZW5ndGg7cysrKWkrPXIrTnIoZVtzXSxyLG4pLHM8ZS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9YApgO3JldHVybiBpKz10KyJdIixpfWVsc2V7dmFyIGE9T2JqZWN0LmtleXMoZSk7aWYoYS5sZW5ndGg9PT0wKXJldHVybiJ7fSI7Zm9yKHZhciBpPWB7CmAscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbz1hW3NdO2krPXIrSlNPTi5zdHJpbmdpZnkobykrIjogIitOcihlW29dLHIsbiksczxhLmxlbmd0aC0xJiYoaSs9IiwiKSxpKz1gCmB9cmV0dXJuIGkrPXQrIn0iLGl9fXJldHVybiBuKGUpfXZhciBBcj1YdCgpLE11PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scixpKXtuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9UHJvbWlzZSksaT09PXZvaWQgMCYmKGk9e30pLHRoaXMuc2NoZW1hU2VydmljZT10LHRoaXMuY29udHJpYnV0aW9ucz1uLHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPXIsdGhpcy5jbGllbnRDYXBhYmlsaXRpZXM9aX1yZXR1cm4gZS5wcm90b3R5cGUuZG9SZXNvbHZlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPXRoaXMuY29udHJpYnV0aW9uc1tuXS5yZXNvbHZlQ29tcGxldGlvbjtpZihyKXt2YXIgaT1yKHQpO2lmKGkpcmV0dXJuIGl9fXJldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5yZXNvbHZlKHQpfSxlLnByb3RvdHlwZS5kb0NvbXBsZXRlPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT10aGlzLHM9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0sYT10LmdldFRleHQoKSxvPXQub2Zmc2V0QXQobiksbD1yLmdldE5vZGVGcm9tT2Zmc2V0KG8sITApO2lmKHRoaXMuaXNJbkNvbW1lbnQodCxsP2wub2Zmc2V0OjAsbykpcmV0dXJuIFByb21pc2UucmVzb2x2ZShzKTtpZihsJiZvPT09bC5vZmZzZXQrbC5sZW5ndGgmJm8+MCl7dmFyIHU9YVtvLTFdOyhsLnR5cGU9PT0ib2JqZWN0IiYmdT09PSJ9Inx8bC50eXBlPT09ImFycmF5IiYmdT09PSJdIikmJihsPWwucGFyZW50KX12YXIgZj10aGlzLmdldEN1cnJlbnRXb3JkKHQsbyksaDtpZihsJiYobC50eXBlPT09InN0cmluZyJ8fGwudHlwZT09PSJudW1iZXIifHxsLnR5cGU9PT0iYm9vbGVhbiJ8fGwudHlwZT09PSJudWxsIikpaD1YLmNyZWF0ZSh0LnBvc2l0aW9uQXQobC5vZmZzZXQpLHQucG9zaXRpb25BdChsLm9mZnNldCtsLmxlbmd0aCkpO2Vsc2V7dmFyIGQ9by1mLmxlbmd0aDtkPjAmJmFbZC0xXT09PSciJyYmZC0tLGg9WC5jcmVhdGUodC5wb3NpdGlvbkF0KGQpLG4pfXZhciBnPXt9LG09e2FkZDpmdW5jdGlvbih2KXt2YXIgcD12LmxhYmVsLHg9Z1twXTtpZih4KXguZG9jdW1lbnRhdGlvbnx8KHguZG9jdW1lbnRhdGlvbj12LmRvY3VtZW50YXRpb24pLHguZGV0YWlsfHwoeC5kZXRhaWw9di5kZXRhaWwpO2Vsc2V7aWYocD1wLnJlcGxhY2UoL1tcbl0vZywi4oa1IikscC5sZW5ndGg+NjApe3ZhciB5PXAuc3Vic3RyKDAsNTcpLnRyaW0oKSsiLi4uIjtnW3ldfHwocD15KX1oJiZ2Lmluc2VydFRleHQhPT12b2lkIDAmJih2LnRleHRFZGl0PVJlLnJlcGxhY2UoaCx2Lmluc2VydFRleHQpKSx2LmxhYmVsPXAsZ1twXT12LHMuaXRlbXMucHVzaCh2KX19LHNldEFzSW5jb21wbGV0ZTpmdW5jdGlvbigpe3MuaXNJbmNvbXBsZXRlPSEwfSxlcnJvcjpmdW5jdGlvbih2KXtjb25zb2xlLmVycm9yKHYpfSxsb2c6ZnVuY3Rpb24odil7Y29uc29sZS5sb2codil9LGdldE51bWJlck9mUHJvcG9zYWxzOmZ1bmN0aW9uKCl7cmV0dXJuIHMuaXRlbXMubGVuZ3RofX07cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZSh0LnVyaSxyKS50aGVuKGZ1bmN0aW9uKHYpe3ZhciBwPVtdLHg9ITAseT0iIixiPXZvaWQgMDtpZihsJiZsLnR5cGU9PT0ic3RyaW5nIil7dmFyIEw9bC5wYXJlbnQ7TCYmTC50eXBlPT09InByb3BlcnR5IiYmTC5rZXlOb2RlPT09bCYmKHg9IUwudmFsdWVOb2RlLGI9TCx5PWEuc3Vic3RyKGwub2Zmc2V0KzEsbC5sZW5ndGgtMiksTCYmKGw9TC5wYXJlbnQpKX1pZihsJiZsLnR5cGU9PT0ib2JqZWN0Iil7aWYobC5vZmZzZXQ9PT1vKXJldHVybiBzO3ZhciBTPWwucHJvcGVydGllcztTLmZvckVhY2goZnVuY3Rpb24oTSl7KCFifHxiIT09TSkmJihnW00ua2V5Tm9kZS52YWx1ZV09YnIuY3JlYXRlKCJfXyIpKX0pO3ZhciBfPSIiO3gmJihfPWkuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcih0LHQub2Zmc2V0QXQoaC5lbmQpKSksdj9pLmdldFByb3BlcnR5Q29tcGxldGlvbnModixyLGwseCxfLG0pOmkuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnMocixsLHksbSk7dmFyIE49THIobCk7aS5jb250cmlidXRpb25zLmZvckVhY2goZnVuY3Rpb24oTSl7dmFyIEk9TS5jb2xsZWN0UHJvcGVydHlDb21wbGV0aW9ucyh0LnVyaSxOLGYseCxfPT09IiIsbSk7SSYmcC5wdXNoKEkpfSksIXYmJmYubGVuZ3RoPjAmJmEuY2hhckF0KG8tZi5sZW5ndGgtMSkhPT0nIicmJihtLmFkZCh7a2luZDpTZS5Qcm9wZXJ0eSxsYWJlbDppLmdldExhYmVsRm9yVmFsdWUoZiksaW5zZXJ0VGV4dDppLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShmLHZvaWQgMCwhMSxfKSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLG0uc2V0QXNJbmNvbXBsZXRlKCkpfXZhciBBPXt9O3JldHVybiB2P2kuZ2V0VmFsdWVDb21wbGV0aW9ucyh2LHIsbCxvLHQsbSxBKTppLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zKHIsbCxvLHQsbSksaS5jb250cmlidXRpb25zLmxlbmd0aD4wJiZpLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucyhyLGwsbyx0LG0scCksaS5wcm9taXNlQ29uc3RydWN0b3IuYWxsKHApLnRoZW4oZnVuY3Rpb24oKXtpZihtLmdldE51bWJlck9mUHJvcG9zYWxzKCk9PT0wKXt2YXIgTT1vO2wmJihsLnR5cGU9PT0ic3RyaW5nInx8bC50eXBlPT09Im51bWJlciJ8fGwudHlwZT09PSJib29sZWFuInx8bC50eXBlPT09Im51bGwiKSYmKE09bC5vZmZzZXQrbC5sZW5ndGgpO3ZhciBJPWkuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcih0LE0pO2kuYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucyhBLEksbSl9cmV0dXJuIHN9KX0pfSxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKHQsbixyLGkscyxhKXt2YXIgbz10aGlzLGw9bi5nZXRNYXRjaGluZ1NjaGVtYXModC5zY2hlbWEsci5vZmZzZXQpO2wuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1Lm5vZGU9PT1yJiYhdS5pbnZlcnRlZCl7dmFyIGY9dS5zY2hlbWEucHJvcGVydGllcztmJiZPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBwPWZbdl07aWYodHlwZW9mIHA9PSJvYmplY3QiJiYhcC5kZXByZWNhdGlvbk1lc3NhZ2UmJiFwLmRvTm90U3VnZ2VzdCl7dmFyIHg9e2tpbmQ6U2UuUHJvcGVydHksbGFiZWw6dixpbnNlcnRUZXh0Om8uZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KHYscCxpLHMpLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxmaWx0ZXJUZXh0Om8uZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHYpLGRvY3VtZW50YXRpb246by5mcm9tTWFya3VwKHAubWFya2Rvd25EZXNjcmlwdGlvbil8fHAuZGVzY3JpcHRpb258fCIifTtwLnN1Z2dlc3RTb3J0VGV4dCE9PXZvaWQgMCYmKHguc29ydFRleHQ9cC5zdWdnZXN0U29ydFRleHQpLHguaW5zZXJ0VGV4dCYmVXQoeC5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KHMpKSYmKHguY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksYS5hZGQoeCl9fSk7dmFyIGg9dS5zY2hlbWEucHJvcGVydHlOYW1lcztpZih0eXBlb2YgaD09Im9iamVjdCImJiFoLmRlcHJlY2F0aW9uTWVzc2FnZSYmIWguZG9Ob3RTdWdnZXN0KXt2YXIgZD1mdW5jdGlvbih2LHApe3A9PT12b2lkIDAmJihwPXZvaWQgMCk7dmFyIHg9e2tpbmQ6U2UuUHJvcGVydHksbGFiZWw6dixpbnNlcnRUZXh0Om8uZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KHYsdm9pZCAwLGkscyksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGZpbHRlclRleHQ6by5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUodiksZG9jdW1lbnRhdGlvbjpwfHxvLmZyb21NYXJrdXAoaC5tYXJrZG93bkRlc2NyaXB0aW9uKXx8aC5kZXNjcmlwdGlvbnx8IiJ9O2guc3VnZ2VzdFNvcnRUZXh0IT09dm9pZCAwJiYoeC5zb3J0VGV4dD1oLnN1Z2dlc3RTb3J0VGV4dCkseC5pbnNlcnRUZXh0JiZVdCh4Lmluc2VydFRleHQsIiQxIi5jb25jYXQocykpJiYoeC5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxhLmFkZCh4KX07aWYoaC5lbnVtKWZvcih2YXIgZz0wO2c8aC5lbnVtLmxlbmd0aDtnKyspe3ZhciBtPXZvaWQgMDtoLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmZzxoLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGg/bT1vLmZyb21NYXJrdXAoaC5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbZ10pOmguZW51bURlc2NyaXB0aW9ucyYmZzxoLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYobT1oLmVudW1EZXNjcmlwdGlvbnNbZ10pLGQoaC5lbnVtW2ddLG0pfWguY29uc3QmJmQoaC5jb25zdCl9fX0pfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4scixpKXt2YXIgcz10aGlzLGE9ZnVuY3Rpb24obCl7bC5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24odSl7dmFyIGY9dS5rZXlOb2RlLnZhbHVlO2kuYWRkKHtraW5kOlNlLlByb3BlcnR5LGxhYmVsOmYsaW5zZXJ0VGV4dDpzLmdldEluc2VydFRleHRGb3JWYWx1ZShmLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZmlsdGVyVGV4dDpzLmdldEZpbHRlclRleHRGb3JWYWx1ZShmKSxkb2N1bWVudGF0aW9uOiIifSl9KX07aWYobi5wYXJlbnQpaWYobi5wYXJlbnQudHlwZT09PSJwcm9wZXJ0eSIpe3ZhciBvPW4ucGFyZW50LmtleU5vZGUudmFsdWU7dC52aXNpdChmdW5jdGlvbihsKXtyZXR1cm4gbC50eXBlPT09InByb3BlcnR5IiYmbCE9PW4ucGFyZW50JiZsLmtleU5vZGUudmFsdWU9PT1vJiZsLnZhbHVlTm9kZSYmbC52YWx1ZU5vZGUudHlwZT09PSJvYmplY3QiJiZhKGwudmFsdWVOb2RlKSwhMH0pfWVsc2Ugbi5wYXJlbnQudHlwZT09PSJhcnJheSImJm4ucGFyZW50Lml0ZW1zLmZvckVhY2goZnVuY3Rpb24obCl7bC50eXBlPT09Im9iamVjdCImJmwhPT1uJiZhKGwpfSk7ZWxzZSBuLnR5cGU9PT0ib2JqZWN0IiYmaS5hZGQoe2tpbmQ6U2UuUHJvcGVydHksbGFiZWw6IiRzY2hlbWEiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoIiRzY2hlbWEiLHZvaWQgMCwhMCwiIiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiIsZmlsdGVyVGV4dDp0aGlzLmdldEZpbHRlclRleHRGb3JWYWx1ZSgiJHNjaGVtYSIpfSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKHQsbixyLGkscyl7dmFyIGE9dGhpcyxvPXI7aWYobiYmKG4udHlwZT09PSJzdHJpbmcifHxuLnR5cGU9PT0ibnVtYmVyInx8bi50eXBlPT09ImJvb2xlYW4ifHxuLnR5cGU9PT0ibnVsbCIpJiYobz1uLm9mZnNldCtuLmxlbmd0aCxuPW4ucGFyZW50KSwhbil7cy5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6IkVtcHR5IG9iamVjdCIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSwiIiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxzLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJFbXB0eSBhcnJheSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSwiIiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KTtyZXR1cm59dmFyIGw9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGksbyksdT1mdW5jdGlvbihnKXtnLnBhcmVudCYmIWJhKGcucGFyZW50LHIsITApJiZzLmFkZCh7a2luZDphLmdldFN1Z2dlc3Rpb25LaW5kKGcudHlwZSksbGFiZWw6YS5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGUoZyxpKSxpbnNlcnRUZXh0OmEuZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZShnLGksbCksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxnLnR5cGU9PT0iYm9vbGVhbiImJmEuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighZy52YWx1ZSxsLHMpfTtpZihuLnR5cGU9PT0icHJvcGVydHkiJiZyPihuLmNvbG9uT2Zmc2V0fHwwKSl7dmFyIGY9bi52YWx1ZU5vZGU7aWYoZiYmKHI+Zi5vZmZzZXQrZi5sZW5ndGh8fGYudHlwZT09PSJvYmplY3QifHxmLnR5cGU9PT0iYXJyYXkiKSlyZXR1cm47dmFyIGg9bi5rZXlOb2RlLnZhbHVlO3QudmlzaXQoZnVuY3Rpb24oZyl7cmV0dXJuIGcudHlwZT09PSJwcm9wZXJ0eSImJmcua2V5Tm9kZS52YWx1ZT09PWgmJmcudmFsdWVOb2RlJiZ1KGcudmFsdWVOb2RlKSwhMH0pLGg9PT0iJHNjaGVtYSImJm4ucGFyZW50JiYhbi5wYXJlbnQucGFyZW50JiZ0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGwscyl9aWYobi50eXBlPT09ImFycmF5IilpZihuLnBhcmVudCYmbi5wYXJlbnQudHlwZT09PSJwcm9wZXJ0eSIpe3ZhciBkPW4ucGFyZW50LmtleU5vZGUudmFsdWU7dC52aXNpdChmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlPT09InByb3BlcnR5IiYmZy5rZXlOb2RlLnZhbHVlPT09ZCYmZy52YWx1ZU5vZGUmJmcudmFsdWVOb2RlLnR5cGU9PT0iYXJyYXkiJiZnLnZhbHVlTm9kZS5pdGVtcy5mb3JFYWNoKHUpLCEwfSl9ZWxzZSBuLml0ZW1zLmZvckVhY2godSl9LGUucHJvdG90eXBlLmdldFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24odCxuLHIsaSxzLGEsbyl7dmFyIGw9aSx1PXZvaWQgMCxmPXZvaWQgMDtpZihyJiYoci50eXBlPT09InN0cmluZyJ8fHIudHlwZT09PSJudW1iZXIifHxyLnR5cGU9PT0iYm9vbGVhbiJ8fHIudHlwZT09PSJudWxsIikmJihsPXIub2Zmc2V0K3IubGVuZ3RoLGY9cixyPXIucGFyZW50KSwhcil7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHQuc2NoZW1hLCIiLGEsbyk7cmV0dXJufWlmKHIudHlwZT09PSJwcm9wZXJ0eSImJmk+KHIuY29sb25PZmZzZXR8fDApKXt2YXIgaD1yLnZhbHVlTm9kZTtpZihoJiZpPmgub2Zmc2V0K2gubGVuZ3RoKXJldHVybjt1PXIua2V5Tm9kZS52YWx1ZSxyPXIucGFyZW50fWlmKHImJih1IT09dm9pZCAwfHxyLnR5cGU9PT0iYXJyYXkiKSl7Zm9yKHZhciBkPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihzLGwpLGc9bi5nZXRNYXRjaGluZ1NjaGVtYXModC5zY2hlbWEsci5vZmZzZXQsZiksbT0wLHY9ZzttPHYubGVuZ3RoO20rKyl7dmFyIHA9dlttXTtpZihwLm5vZGU9PT1yJiYhcC5pbnZlcnRlZCYmcC5zY2hlbWEpe2lmKHIudHlwZT09PSJhcnJheSImJnAuc2NoZW1hLml0ZW1zKWlmKEFycmF5LmlzQXJyYXkocC5zY2hlbWEuaXRlbXMpKXt2YXIgeD10aGlzLmZpbmRJdGVtQXRPZmZzZXQocixzLGkpO3g8cC5zY2hlbWEuaXRlbXMubGVuZ3RoJiZ0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMocC5zY2hlbWEuaXRlbXNbeF0sZCxhLG8pfWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHAuc2NoZW1hLml0ZW1zLGQsYSxvKTtpZih1IT09dm9pZCAwKXt2YXIgeT0hMTtpZihwLnNjaGVtYS5wcm9wZXJ0aWVzKXt2YXIgYj1wLnNjaGVtYS5wcm9wZXJ0aWVzW3VdO2ImJih5PSEwLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhiLGQsYSxvKSl9aWYocC5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMmJiF5KWZvcih2YXIgTD0wLFM9T2JqZWN0LmtleXMocC5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO0w8Uy5sZW5ndGg7TCsrKXt2YXIgXz1TW0xdLE49bW4oXyk7aWYoTj8udGVzdCh1KSl7eT0hMDt2YXIgYj1wLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1tfXTt0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoYixkLGEsbyl9fWlmKHAuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzJiYheSl7dmFyIGI9cC5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXM7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGIsZCxhLG8pfX19fXU9PT0iJHNjaGVtYSImJiFyLnBhcmVudCYmdGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhkLGEpLG8uYm9vbGVhbiYmKHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMCxkLGEpLHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMSxkLGEpKSxvLm51bGwmJnRoaXMuYWRkTnVsbFZhbHVlQ29tcGxldGlvbihkLGEpfX0sZS5wcm90b3R5cGUuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKHQsbixyLGkscyxhKXtpZighbil0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgaD1mLmNvbGxlY3REZWZhdWx0Q29tcGxldGlvbnMoaS51cmkscyk7aCYmYS5wdXNoKGgpfSk7ZWxzZSBpZigobi50eXBlPT09InN0cmluZyJ8fG4udHlwZT09PSJudW1iZXIifHxuLnR5cGU9PT0iYm9vbGVhbiJ8fG4udHlwZT09PSJudWxsIikmJihuPW4ucGFyZW50KSxuJiZuLnR5cGU9PT0icHJvcGVydHkiJiZyPihuLmNvbG9uT2Zmc2V0fHwwKSl7dmFyIG89bi5rZXlOb2RlLnZhbHVlLGw9bi52YWx1ZU5vZGU7aWYoKCFsfHxyPD1sLm9mZnNldCtsLmxlbmd0aCkmJm4ucGFyZW50KXt2YXIgdT1McihuLnBhcmVudCk7dGhpcy5jb250cmlidXRpb25zLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGg9Zi5jb2xsZWN0VmFsdWVDb21wbGV0aW9ucyhpLnVyaSx1LG8scyk7aCYmYS5wdXNoKGgpfSl9fX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4scixpKXt2YXIgcz10aGlzO3R5cGVvZiB0PT0ib2JqZWN0IiYmKHRoaXMuYWRkRW51bVZhbHVlQ29tcGxldGlvbnModCxuLHIpLHRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnModCxuLHIpLHRoaXMuY29sbGVjdFR5cGVzKHQsaSksQXJyYXkuaXNBcnJheSh0LmFsbE9mKSYmdC5hbGxPZi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoYSxuLHIsaSl9KSxBcnJheS5pc0FycmF5KHQuYW55T2YpJiZ0LmFueU9mLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIHMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhhLG4scixpKX0pLEFycmF5LmlzQXJyYXkodC5vbmVPZikmJnQub25lT2YuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGEsbixyLGkpfSkpfSxlLnByb3RvdHlwZS5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4scixpKXt2YXIgcz10aGlzO2k9PT12b2lkIDAmJihpPTApO3ZhciBhPSExO2lmKFVlKHQuZGVmYXVsdCkpe2Zvcih2YXIgbz10LnR5cGUsbD10LmRlZmF1bHQsdT1pO3U+MDt1LS0pbD1bbF0sbz0iYXJyYXkiO3IuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQobyksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKGwpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobCxuKSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZGV0YWlsOkFyKCJqc29uLnN1Z2dlc3QuZGVmYXVsdCIsIkRlZmF1bHQgdmFsdWUiKX0pLGE9ITB9QXJyYXkuaXNBcnJheSh0LmV4YW1wbGVzKSYmdC5leGFtcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKGYpe2Zvcih2YXIgaD10LnR5cGUsZD1mLGc9aTtnPjA7Zy0tKWQ9W2RdLGg9ImFycmF5IjtyLmFkZCh7a2luZDpzLmdldFN1Z2dlc3Rpb25LaW5kKGgpLGxhYmVsOnMuZ2V0TGFiZWxGb3JWYWx1ZShkKSxpbnNlcnRUZXh0OnMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGQsbiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0fSksYT0hMH0pLEFycmF5LmlzQXJyYXkodC5kZWZhdWx0U25pcHBldHMpJiZ0LmRlZmF1bHRTbmlwcGV0cy5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBoPXQudHlwZSxkPWYuYm9keSxnPWYubGFiZWwsbSx2O2lmKFVlKGQpKXt0LnR5cGU7Zm9yKHZhciBwPWk7cD4wO3AtLSlkPVtkXTttPXMuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZShkLG4pLHY9cy5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlKGQpLGc9Z3x8cy5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZShkKX1lbHNlIGlmKHR5cGVvZiBmLmJvZHlUZXh0PT0ic3RyaW5nIil7Zm9yKHZhciB4PSIiLHk9IiIsYj0iIixwPWk7cD4wO3AtLSl4PXgrYitgWwpgLHk9eStgCmArYisiXSIsYis9IgkiLGg9ImFycmF5IjttPXgrYitmLmJvZHlUZXh0LnNwbGl0KGAKYCkuam9pbihgCmArYikreStuLGc9Z3x8bSx2PW0ucmVwbGFjZSgvW1xuXS9nLCIiKX1lbHNlIHJldHVybjtyLmFkZCh7a2luZDpzLmdldFN1Z2dlc3Rpb25LaW5kKGgpLGxhYmVsOmcsZG9jdW1lbnRhdGlvbjpzLmZyb21NYXJrdXAoZi5tYXJrZG93bkRlc2NyaXB0aW9uKXx8Zi5kZXNjcmlwdGlvbixpbnNlcnRUZXh0Om0saW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGZpbHRlclRleHQ6dn0pLGE9ITB9KSwhYSYmdHlwZW9mIHQuaXRlbXM9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSYmaTw1JiZ0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKHQuaXRlbXMsbixyLGkrMSl9LGUucHJvdG90eXBlLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKHQsbixyKXtpZihVZSh0LmNvbnN0KSYmci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCh0LnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZSh0LmNvbnN0KSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQuY29uc3QsbiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246dGhpcy5mcm9tTWFya3VwKHQubWFya2Rvd25EZXNjcmlwdGlvbil8fHQuZGVzY3JpcHRpb259KSxBcnJheS5pc0FycmF5KHQuZW51bSkpZm9yKHZhciBpPTAscz10LmVudW0ubGVuZ3RoO2k8cztpKyspe3ZhciBhPXQuZW51bVtpXSxvPXRoaXMuZnJvbU1hcmt1cCh0Lm1hcmtkb3duRGVzY3JpcHRpb24pfHx0LmRlc2NyaXB0aW9uO3QubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZpPHQubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCk/bz10aGlzLmZyb21NYXJrdXAodC5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbaV0pOnQuZW51bURlc2NyaXB0aW9ucyYmaTx0LmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYobz10LmVudW1EZXNjcmlwdGlvbnNbaV0pLHIuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQodC50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoYSksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShhLG4pLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxkb2N1bWVudGF0aW9uOm99KX19LGUucHJvdG90eXBlLmNvbGxlY3RUeXBlcz1mdW5jdGlvbih0LG4pe2lmKCEoQXJyYXkuaXNBcnJheSh0LmVudW0pfHxVZSh0LmNvbnN0KSkpe3ZhciByPXQudHlwZTtBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gbltpXT0hMH0pOnImJihuW3JdPSEwKX19LGUucHJvdG90eXBlLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24odCxuLHIpe3Qub2JqZWN0JiZyLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoie30iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHt9LG4pLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxkZXRhaWw6QXIoImRlZmF1bHRzLm9iamVjdCIsIk5ldyBvYmplY3QiKSxkb2N1bWVudGF0aW9uOiIifSksdC5hcnJheSYmci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiW10iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKFtdLG4pLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxkZXRhaWw6QXIoImRlZmF1bHRzLmFycmF5IiwiTmV3IGFycmF5IiksZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKHQsbixyKXtyLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJib29sZWFuIiksbGFiZWw6dD8idHJ1ZSI6ImZhbHNlIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQsbiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkTnVsbFZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbih0LG4pe24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm51bGwiKSxsYWJlbDoibnVsbCIsaW5zZXJ0VGV4dDoibnVsbCIrdCxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4pe3ZhciByPXRoaXMsaT10aGlzLnNjaGVtYVNlcnZpY2UuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcyhmdW5jdGlvbihzKXtyZXR1cm4gcz09PSJodHRwInx8cz09PSJodHRwcyJ9KTtpLmZvckVhY2goZnVuY3Rpb24ocyl7cmV0dXJuIG4uYWRkKHtraW5kOlNlLk1vZHVsZSxsYWJlbDpyLmdldExhYmVsRm9yVmFsdWUocyksZmlsdGVyVGV4dDpyLmdldEZpbHRlclRleHRGb3JWYWx1ZShzKSxpbnNlcnRUZXh0OnIuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHMsdCksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0pfSxlLnByb3RvdHlwZS5nZXRMYWJlbEZvclZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24odCl7dmFyIG49SlNPTi5zdHJpbmdpZnkodCk7cmV0dXJuIG4ucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXFxcJFx9XS9nLCJcXCQmIil9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JWYWx1ZT1mdW5jdGlvbih0LG4pe3ZhciByPUpTT04uc3RyaW5naWZ5KHQsbnVsbCwiCSIpO3JldHVybiByPT09Int9Ij8ieyQxfSIrbjpyPT09IltdIj8iWyQxXSIrbjp0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQocituKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbih0LG4pe3ZhciByPWZ1bmN0aW9uKGkpe3JldHVybiB0eXBlb2YgaT09InN0cmluZyImJmlbMF09PT0iXiI/aS5zdWJzdHIoMSk6SlNPTi5zdHJpbmdpZnkoaSl9O3JldHVybiBOcih0LCIiLHIpK259LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWU9ZnVuY3Rpb24odCxuKXtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gdD09PW51bGw/IiR7MTpudWxsfSIrbjp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh0LG4pO2Nhc2Uic3RyaW5nIjp2YXIgcj1KU09OLnN0cmluZ2lmeSh0KTtyZXR1cm4gcj1yLnN1YnN0cigxLHIubGVuZ3RoLTIpLHI9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KHIpLCciJHsxOicrcisnfSInK247Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIiR7MToiK0pTT04uc3RyaW5naWZ5KHQpKyJ9IitufXJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh0LG4pfSxlLnByb3RvdHlwZS5nZXRTdWdnZXN0aW9uS2luZD1mdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbj10O3Q9bi5sZW5ndGg+MD9uWzBdOnZvaWQgMH1pZighdClyZXR1cm4gU2UuVmFsdWU7c3dpdGNoKHQpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gU2UuVmFsdWU7Y2FzZSJvYmplY3QiOnJldHVybiBTZS5Nb2R1bGU7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIFNlLlByb3BlcnR5O2RlZmF1bHQ6cmV0dXJuIFNlLlZhbHVlfX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIltdIjtjYXNlIm9iamVjdCI6cmV0dXJuInt9IjtkZWZhdWx0OnZhciByPW4uZ2V0VGV4dCgpLnN1YnN0cih0Lm9mZnNldCx0Lmxlbmd0aCk7cmV0dXJuIHJ9fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godC50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10scik7Y2FzZSJvYmplY3QiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSxyKTtkZWZhdWx0OnZhciBpPW4uZ2V0VGV4dCgpLnN1YnN0cih0Lm9mZnNldCx0Lmxlbmd0aCkrcjtyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KGkpfX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5PWZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQsIiIpO2lmKCFyKXJldHVybiBzO3ZhciBhPXMrIjogIixvLGw9MDtpZihuKXtpZihBcnJheS5pc0FycmF5KG4uZGVmYXVsdFNuaXBwZXRzKSl7aWYobi5kZWZhdWx0U25pcHBldHMubGVuZ3RoPT09MSl7dmFyIHU9bi5kZWZhdWx0U25pcHBldHNbMF0uYm9keTtVZSh1KSYmKG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKHUsIiIpKX1sKz1uLmRlZmF1bHRTbmlwcGV0cy5sZW5ndGh9aWYobi5lbnVtJiYoIW8mJm4uZW51bS5sZW5ndGg9PT0xJiYobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUobi5lbnVtWzBdLCIiKSksbCs9bi5lbnVtLmxlbmd0aCksVWUobi5kZWZhdWx0KSYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShuLmRlZmF1bHQsIiIpKSxsKyspLEFycmF5LmlzQXJyYXkobi5leGFtcGxlcykmJm4uZXhhbXBsZXMubGVuZ3RoJiYob3x8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKG4uZXhhbXBsZXNbMF0sIiIpKSxsKz1uLmV4YW1wbGVzLmxlbmd0aCksbD09PTApe3ZhciBmPUFycmF5LmlzQXJyYXkobi50eXBlKT9uLnR5cGVbMF06bi50eXBlO3N3aXRjaChmfHwobi5wcm9wZXJ0aWVzP2Y9Im9iamVjdCI6bi5pdGVtcyYmKGY9ImFycmF5IikpLGYpe2Nhc2UiYm9vbGVhbiI6bz0iJDEiO2JyZWFrO2Nhc2Uic3RyaW5nIjpvPSciJDEiJzticmVhaztjYXNlIm9iamVjdCI6bz0ieyQxfSI7YnJlYWs7Y2FzZSJhcnJheSI6bz0iWyQxXSI7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6bz0iJHsxOjB9IjticmVhaztjYXNlIm51bGwiOm89IiR7MTpudWxsfSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gc319fXJldHVybighb3x8bD4xKSYmKG89IiQxIiksYStvK2l9LGUucHJvdG90eXBlLmdldEN1cnJlbnRXb3JkPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPW4tMSxpPXQuZ2V0VGV4dCgpO3I+PTAmJmAgCQpcclx2Ijp7WyxdfWAuaW5kZXhPZihpLmNoYXJBdChyKSk9PT0tMTspci0tO3JldHVybiBpLnN1YnN0cmluZyhyKzEsbil9LGUucHJvdG90eXBlLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXI9ZnVuY3Rpb24odCxuKXt2YXIgcj1OdCh0LmdldFRleHQoKSwhMCk7ci5zZXRQb3NpdGlvbihuKTt2YXIgaT1yLnNjYW4oKTtzd2l0Y2goaSl7Y2FzZSA1OmNhc2UgMjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiIsIn19LGUucHJvdG90eXBlLmZpbmRJdGVtQXRPZmZzZXQ9ZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgaT1OdChuLmdldFRleHQoKSwhMCkscz10Lml0ZW1zLGE9cy5sZW5ndGgtMTthPj0wO2EtLSl7dmFyIG89c1thXTtpZihyPm8ub2Zmc2V0K28ubGVuZ3RoKXtpLnNldFBvc2l0aW9uKG8ub2Zmc2V0K28ubGVuZ3RoKTt2YXIgbD1pLnNjYW4oKTtyZXR1cm4gbD09PTUmJnI+PWkuZ2V0VG9rZW5PZmZzZXQoKStpLmdldFRva2VuTGVuZ3RoKCk/YSsxOmF9ZWxzZSBpZihyPj1vLm9mZnNldClyZXR1cm4gYX1yZXR1cm4gMH0sZS5wcm90b3R5cGUuaXNJbkNvbW1lbnQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPU50KHQuZ2V0VGV4dCgpLCExKTtpLnNldFBvc2l0aW9uKG4pO2Zvcih2YXIgcz1pLnNjYW4oKTtzIT09MTcmJmkuZ2V0VG9rZW5PZmZzZXQoKStpLmdldFRva2VuTGVuZ3RoKCk8cjspcz1pLnNjYW4oKTtyZXR1cm4ocz09PTEyfHxzPT09MTMpJiZpLmdldFRva2VuT2Zmc2V0KCk8PXJ9LGUucHJvdG90eXBlLmZyb21NYXJrdXA9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCkpcmV0dXJue2tpbmQ6V2UuTWFya2Rvd24sdmFsdWU6dH19LGUucHJvdG90eXBlLmRvZXNTdXBwb3J0TWFya2Rvd249ZnVuY3Rpb24oKXtpZighVWUodGhpcy5zdXBwb3J0c01hcmtkb3duKSl7dmFyIHQ9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzTWFya2Rvd249dCYmdC5jb21wbGV0aW9uSXRlbSYmQXJyYXkuaXNBcnJheSh0LmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQpJiZ0LmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQuaW5kZXhPZihXZS5NYXJrZG93bikhPT0tMX1yZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3dufSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWZ1bmN0aW9uKCl7aWYoIVVlKHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzKSl7dmFyIHQ9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz10JiZ0LmNvbXBsZXRpb25JdGVtJiYhIXQuY29tcGxldGlvbkl0ZW0uY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnR9cmV0dXJuIHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzfSxlfSgpLFJ1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7bj09PXZvaWQgMCYmKG49W10pLHRoaXMuc2NoZW1hU2VydmljZT10LHRoaXMuY29udHJpYnV0aW9ucz1uLHRoaXMucHJvbWlzZT1yfHxQcm9taXNlfXJldHVybiBlLnByb3RvdHlwZS5kb0hvdmVyPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT10Lm9mZnNldEF0KG4pLHM9ci5nZXROb2RlRnJvbU9mZnNldChpKTtpZighc3x8KHMudHlwZT09PSJvYmplY3QifHxzLnR5cGU9PT0iYXJyYXkiKSYmaT5zLm9mZnNldCsxJiZpPHMub2Zmc2V0K3MubGVuZ3RoLTEpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpO3ZhciBhPXM7aWYocy50eXBlPT09InN0cmluZyIpe3ZhciBvPXMucGFyZW50O2lmKG8mJm8udHlwZT09PSJwcm9wZXJ0eSImJm8ua2V5Tm9kZT09PXMmJihzPW8udmFsdWVOb2RlLCFzKSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCl9Zm9yKHZhciBsPVguY3JlYXRlKHQucG9zaXRpb25BdChhLm9mZnNldCksdC5wb3NpdGlvbkF0KGEub2Zmc2V0K2EubGVuZ3RoKSksdT1mdW5jdGlvbihtKXt2YXIgdj17Y29udGVudHM6bSxyYW5nZTpsfTtyZXR1cm4gdn0sZj1McihzKSxoPXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTtoPj0wO2gtLSl7dmFyIGQ9dGhpcy5jb250cmlidXRpb25zW2hdLGc9ZC5nZXRJbmZvQ29udHJpYnV0aW9uKHQudXJpLGYpO2lmKGcpcmV0dXJuIGcudGhlbihmdW5jdGlvbihtKXtyZXR1cm4gdShtKX0pfXJldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UodC51cmkscikudGhlbihmdW5jdGlvbihtKXtpZihtJiZzKXt2YXIgdj1yLmdldE1hdGNoaW5nU2NoZW1hcyhtLnNjaGVtYSxzLm9mZnNldCkscD12b2lkIDAseD12b2lkIDAseT12b2lkIDAsYj12b2lkIDA7di5ldmVyeShmdW5jdGlvbihTKXtpZihTLm5vZGU9PT1zJiYhUy5pbnZlcnRlZCYmUy5zY2hlbWEmJihwPXB8fFMuc2NoZW1hLnRpdGxlLHg9eHx8Uy5zY2hlbWEubWFya2Rvd25EZXNjcmlwdGlvbnx8Q3IoUy5zY2hlbWEuZGVzY3JpcHRpb24pLFMuc2NoZW1hLmVudW0pKXt2YXIgXz1TLnNjaGVtYS5lbnVtLmluZGV4T2Yob3QocykpO1Muc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucz95PVMuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tfXTpTLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zJiYoeT1DcihTLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zW19dKSkseSYmKGI9Uy5zY2hlbWEuZW51bVtfXSx0eXBlb2YgYiE9InN0cmluZyImJihiPUpTT04uc3RyaW5naWZ5KGIpKSl9cmV0dXJuITB9KTt2YXIgTD0iIjtyZXR1cm4gcCYmKEw9Q3IocCkpLHgmJihMLmxlbmd0aD4wJiYoTCs9YAoKYCksTCs9eCkseSYmKEwubGVuZ3RoPjAmJihMKz1gCgpgKSxMKz0iYCIuY29uY2F0KFR1KGIpLCJgOiAiKS5jb25jYXQoeSkpLHUoW0xdKX1yZXR1cm4gbnVsbH0pfSxlfSgpO2Z1bmN0aW9uIENyKGUpe2lmKGUpe3ZhciB0PWUucmVwbGFjZSgvKFteXG5ccl0pKFxyP1xuKShbXlxuXHJdKS9nbSxgJDEKCiQzYCk7cmV0dXJuIHQucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfX1mdW5jdGlvbiBUdShlKXtyZXR1cm4gZS5pbmRleE9mKCJgIikhPT0tMT8iYGAgIitlKyIgYGAiOmV9dmFyIFB1PVh0KCksRnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dGhpcy5qc29uU2NoZW1hU2VydmljZT10LHRoaXMucHJvbWlzZT1uLHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbih0KXt0JiYodGhpcy52YWxpZGF0aW9uRW5hYmxlZD10LnZhbGlkYXRlIT09ITEsdGhpcy5jb21tZW50U2V2ZXJpdHk9dC5hbGxvd0NvbW1lbnRzP3ZvaWQgMDpfZS5FcnJvcil9LGUucHJvdG90eXBlLmRvVmFsaWRhdGlvbj1mdW5jdGlvbih0LG4scixpKXt2YXIgcz10aGlzO2lmKCF0aGlzLnZhbGlkYXRpb25FbmFibGVkKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShbXSk7dmFyIGE9W10sbz17fSxsPWZ1bmN0aW9uKGQpe3ZhciBnPWQucmFuZ2Uuc3RhcnQubGluZSsiICIrZC5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrIiAiK2QubWVzc2FnZTtvW2ddfHwob1tnXT0hMCxhLnB1c2goZCkpfSx1PWZ1bmN0aW9uKGQpe3ZhciBnPXI/LnRyYWlsaW5nQ29tbWFzP19uKHIudHJhaWxpbmdDb21tYXMpOl9lLkVycm9yLG09cj8uY29tbWVudHM/X24oci5jb21tZW50cyk6cy5jb21tZW50U2V2ZXJpdHksdj1yPy5zY2hlbWFWYWxpZGF0aW9uP19uKHIuc2NoZW1hVmFsaWRhdGlvbik6X2UuV2FybmluZyxwPXI/LnNjaGVtYVJlcXVlc3Q/X24oci5zY2hlbWFSZXF1ZXN0KTpfZS5XYXJuaW5nO2lmKGQpe2lmKGQuZXJyb3JzLmxlbmd0aCYmbi5yb290JiZwKXt2YXIgeD1uLnJvb3QseT14LnR5cGU9PT0ib2JqZWN0Ij94LnByb3BlcnRpZXNbMF06dm9pZCAwO2lmKHkmJnkua2V5Tm9kZS52YWx1ZT09PSIkc2NoZW1hIil7dmFyIGI9eS52YWx1ZU5vZGV8fHksTD1YLmNyZWF0ZSh0LnBvc2l0aW9uQXQoYi5vZmZzZXQpLHQucG9zaXRpb25BdChiLm9mZnNldCtiLmxlbmd0aCkpO2woJGUuY3JlYXRlKEwsZC5lcnJvcnNbMF0scCxKLlNjaGVtYVJlc29sdmVFcnJvcikpfWVsc2V7dmFyIEw9WC5jcmVhdGUodC5wb3NpdGlvbkF0KHgub2Zmc2V0KSx0LnBvc2l0aW9uQXQoeC5vZmZzZXQrMSkpO2woJGUuY3JlYXRlKEwsZC5lcnJvcnNbMF0scCxKLlNjaGVtYVJlc29sdmVFcnJvcikpfX1lbHNlIGlmKHYpe3ZhciBTPW4udmFsaWRhdGUodCxkLnNjaGVtYSx2KTtTJiZTLmZvckVhY2gobCl9eWEoZC5zY2hlbWEpJiYobT12b2lkIDApLHdhKGQuc2NoZW1hKSYmKGc9dm9pZCAwKX1mb3IodmFyIF89MCxOPW4uc3ludGF4RXJyb3JzO188Ti5sZW5ndGg7XysrKXt2YXIgQT1OW19dO2lmKEEuY29kZT09PUouVHJhaWxpbmdDb21tYSl7aWYodHlwZW9mIGchPSJudW1iZXIiKWNvbnRpbnVlO0Euc2V2ZXJpdHk9Z31sKEEpfWlmKHR5cGVvZiBtPT0ibnVtYmVyIil7dmFyIE09UHUoIkludmFsaWRDb21tZW50VG9rZW4iLCJDb21tZW50cyBhcmUgbm90IHBlcm1pdHRlZCBpbiBKU09OLiIpO24uY29tbWVudHMuZm9yRWFjaChmdW5jdGlvbihJKXtsKCRlLmNyZWF0ZShJLE0sbSxKLkNvbW1lbnROb3RQZXJtaXR0ZWQpKX0pfXJldHVybiBhfTtpZihpKXt2YXIgZj1pLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkLyIrSXUrKyxoPXRoaXMuanNvblNjaGVtYVNlcnZpY2UucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShmLFtdLGkpO3JldHVybiBoLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbihmdW5jdGlvbihkKXtyZXR1cm4gdShkKX0pfXJldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKHQudXJpLG4pLnRoZW4oZnVuY3Rpb24oZCl7cmV0dXJuIHUoZCl9KX0sZS5wcm90b3R5cGUuZ2V0TGFuZ3VhZ2VTdGF0dXM9ZnVuY3Rpb24odCxuKXtyZXR1cm57c2NoZW1hczp0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZSh0LnVyaSxuKX19LGV9KCksSXU9MDtmdW5jdGlvbiB5YShlKXtpZihlJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKEllKGUuYWxsb3dDb21tZW50cykpcmV0dXJuIGUuYWxsb3dDb21tZW50cztpZihlLmFsbE9mKWZvcih2YXIgdD0wLG49ZS5hbGxPZjt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XSxpPXlhKHIpO2lmKEllKGkpKXJldHVybiBpfX19ZnVuY3Rpb24gd2EoZSl7aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QiKXtpZihJZShlLmFsbG93VHJhaWxpbmdDb21tYXMpKXJldHVybiBlLmFsbG93VHJhaWxpbmdDb21tYXM7dmFyIHQ9ZTtpZihJZSh0LmFsbG93c1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gdC5hbGxvd3NUcmFpbGluZ0NvbW1hcztpZihlLmFsbE9mKWZvcih2YXIgbj0wLHI9ZS5hbGxPZjtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxzPXdhKGkpO2lmKEllKHMpKXJldHVybiBzfX19ZnVuY3Rpb24gX24oZSl7c3dpdGNoKGUpe2Nhc2UiZXJyb3IiOnJldHVybiBfZS5FcnJvcjtjYXNlIndhcm5pbmciOnJldHVybiBfZS5XYXJuaW5nO2Nhc2UiaWdub3JlIjpyZXR1cm59fXZhciBfYT00OCxEdT01NyxWdT02NSxTbj05NyxPdT0xMDI7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIGU8X2E/MDplPD1EdT9lLV9hOihlPFNuJiYoZSs9U24tVnUpLGU+PVNuJiZlPD1PdT9lLVNuKzEwOjApfWZ1bmN0aW9uIGp1KGUpe2lmKGVbMF09PT0iIyIpc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDp0ZShlLmNoYXJDb2RlQXQoMSkpKjE3LzI1NSxncmVlbjp0ZShlLmNoYXJDb2RlQXQoMikpKjE3LzI1NSxibHVlOnRlKGUuY2hhckNvZGVBdCgzKSkqMTcvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOnRlKGUuY2hhckNvZGVBdCgxKSkqMTcvMjU1LGdyZWVuOnRlKGUuY2hhckNvZGVBdCgyKSkqMTcvMjU1LGJsdWU6dGUoZS5jaGFyQ29kZUF0KDMpKSoxNy8yNTUsYWxwaGE6dGUoZS5jaGFyQ29kZUF0KDQpKSoxNy8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOih0ZShlLmNoYXJDb2RlQXQoMSkpKjE2K3RlKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjoodGUoZS5jaGFyQ29kZUF0KDMpKSoxNit0ZShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZToodGUoZS5jaGFyQ29kZUF0KDUpKSoxNit0ZShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KHRlKGUuY2hhckNvZGVBdCgxKSkqMTYrdGUoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOih0ZShlLmNoYXJDb2RlQXQoMykpKjE2K3RlKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOih0ZShlLmNoYXJDb2RlQXQoNSkpKjE2K3RlKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYToodGUoZS5jaGFyQ29kZUF0KDcpKSoxNit0ZShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX12YXIgcXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMuc2NoZW1hU2VydmljZT10fXJldHVybiBlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT10aGlzO3I9PT12b2lkIDAmJihyPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSk7dmFyIHM9bi5yb290O2lmKCFzKXJldHVybltdO3ZhciBhPXIucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUsbz10LnVyaTtpZigobz09PSJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiJ8fFV0KG8udG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmcy50eXBlPT09ImFycmF5Iil7Zm9yKHZhciBsPVtdLHU9MCxmPXMuaXRlbXM7dTxmLmxlbmd0aDt1Kyspe3ZhciBoPWZbdV07aWYoaC50eXBlPT09Im9iamVjdCIpZm9yKHZhciBkPTAsZz1oLnByb3BlcnRpZXM7ZDxnLmxlbmd0aDtkKyspe3ZhciBtPWdbZF07aWYobS5rZXlOb2RlLnZhbHVlPT09ImtleSImJm0udmFsdWVOb2RlKXt2YXIgdj0kdC5jcmVhdGUodC51cmksZXQodCxoKSk7aWYobC5wdXNoKHtuYW1lOm90KG0udmFsdWVOb2RlKSxraW5kOkRlLkZ1bmN0aW9uLGxvY2F0aW9uOnZ9KSxhLS0sYTw9MClyZXR1cm4gciYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnIub25SZXN1bHRMaW1pdEV4Y2VlZGVkKG8pLGx9fX1yZXR1cm4gbH1mb3IodmFyIHA9W3tub2RlOnMsY29udGFpbmVyTmFtZToiIn1dLHg9MCx5PSExLGI9W10sTD1mdW5jdGlvbihfLE4pe18udHlwZT09PSJhcnJheSI/Xy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKEEpe0EmJnAucHVzaCh7bm9kZTpBLGNvbnRhaW5lck5hbWU6Tn0pfSk6Xy50eXBlPT09Im9iamVjdCImJl8ucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBNPUEudmFsdWVOb2RlO2lmKE0paWYoYT4wKXthLS07dmFyIEk9JHQuY3JlYXRlKHQudXJpLGV0KHQsQSkpLEM9Tj9OKyIuIitBLmtleU5vZGUudmFsdWU6QS5rZXlOb2RlLnZhbHVlO2IucHVzaCh7bmFtZTppLmdldEtleUxhYmVsKEEpLGtpbmQ6aS5nZXRTeW1ib2xLaW5kKE0udHlwZSksbG9jYXRpb246SSxjb250YWluZXJOYW1lOk59KSxwLnB1c2goe25vZGU6TSxjb250YWluZXJOYW1lOkN9KX1lbHNlIHk9ITB9KX07eDxwLmxlbmd0aDspe3ZhciBTPXBbeCsrXTtMKFMubm9kZSxTLmNvbnRhaW5lck5hbWUpfXJldHVybiB5JiZyJiZyLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQobyksYn0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9sczI9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXM7cj09PXZvaWQgMCYmKHI9e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KTt2YXIgcz1uLnJvb3Q7aWYoIXMpcmV0dXJuW107dmFyIGE9ci5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxvPXQudXJpO2lmKChvPT09InZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uInx8VXQoby50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiZzLnR5cGU9PT0iYXJyYXkiKXtmb3IodmFyIGw9W10sdT0wLGY9cy5pdGVtczt1PGYubGVuZ3RoO3UrKyl7dmFyIGg9Zlt1XTtpZihoLnR5cGU9PT0ib2JqZWN0Iilmb3IodmFyIGQ9MCxnPWgucHJvcGVydGllcztkPGcubGVuZ3RoO2QrKyl7dmFyIG09Z1tkXTtpZihtLmtleU5vZGUudmFsdWU9PT0ia2V5IiYmbS52YWx1ZU5vZGUpe3ZhciB2PWV0KHQsaCkscD1ldCh0LG0ua2V5Tm9kZSk7aWYobC5wdXNoKHtuYW1lOm90KG0udmFsdWVOb2RlKSxraW5kOkRlLkZ1bmN0aW9uLHJhbmdlOnYsc2VsZWN0aW9uUmFuZ2U6cH0pLGEtLSxhPD0wKXJldHVybiByJiZyLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQobyksbH19fXJldHVybiBsfWZvcih2YXIgeD1bXSx5PVt7bm9kZTpzLHJlc3VsdDp4fV0sYj0wLEw9ITEsUz1mdW5jdGlvbihOLEEpe04udHlwZT09PSJhcnJheSI/Ti5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKE0sSSl7aWYoTSlpZihhPjApe2EtLTt2YXIgQz1ldCh0LE0pLHc9QyxUPVN0cmluZyhJKSxGPXtuYW1lOlQsa2luZDppLmdldFN5bWJvbEtpbmQoTS50eXBlKSxyYW5nZTpDLHNlbGVjdGlvblJhbmdlOncsY2hpbGRyZW46W119O0EucHVzaChGKSx5LnB1c2goe3Jlc3VsdDpGLmNoaWxkcmVuLG5vZGU6TX0pfWVsc2UgTD0hMH0pOk4udHlwZT09PSJvYmplY3QiJiZOLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihNKXt2YXIgST1NLnZhbHVlTm9kZTtpZihJKWlmKGE+MCl7YS0tO3ZhciBDPWV0KHQsTSksdz1ldCh0LE0ua2V5Tm9kZSksVD1bXSxGPXtuYW1lOmkuZ2V0S2V5TGFiZWwoTSksa2luZDppLmdldFN5bWJvbEtpbmQoSS50eXBlKSxyYW5nZTpDLHNlbGVjdGlvblJhbmdlOncsY2hpbGRyZW46VCxkZXRhaWw6aS5nZXREZXRhaWwoSSl9O0EucHVzaChGKSx5LnB1c2goe3Jlc3VsdDpULG5vZGU6SX0pfWVsc2UgTD0hMH0pfTtiPHkubGVuZ3RoOyl7dmFyIF89eVtiKytdO1MoXy5ub2RlLF8ucmVzdWx0KX1yZXR1cm4gTCYmciYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnIub25SZXN1bHRMaW1pdEV4Y2VlZGVkKG8pLHh9LGUucHJvdG90eXBlLmdldFN5bWJvbEtpbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gRGUuTW9kdWxlO2Nhc2Uic3RyaW5nIjpyZXR1cm4gRGUuU3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gRGUuTnVtYmVyO2Nhc2UiYXJyYXkiOnJldHVybiBEZS5BcnJheTtjYXNlImJvb2xlYW4iOnJldHVybiBEZS5Cb29sZWFuO2RlZmF1bHQ6cmV0dXJuIERlLlZhcmlhYmxlfX0sZS5wcm90b3R5cGUuZ2V0S2V5TGFiZWw9ZnVuY3Rpb24odCl7dmFyIG49dC5rZXlOb2RlLnZhbHVlO3JldHVybiBuJiYobj1uLnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLG4mJm4udHJpbSgpP246JyInLmNvbmNhdChuLCciJyl9LGUucHJvdG90eXBlLmdldERldGFpbD1mdW5jdGlvbih0KXtpZih0KXtpZih0LnR5cGU9PT0iYm9vbGVhbiJ8fHQudHlwZT09PSJudW1iZXIifHx0LnR5cGU9PT0ibnVsbCJ8fHQudHlwZT09PSJzdHJpbmciKXJldHVybiBTdHJpbmcodC52YWx1ZSk7aWYodC50eXBlPT09ImFycmF5IilyZXR1cm4gdC5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJbXSI7aWYodC50eXBlPT09Im9iamVjdCIpcmV0dXJuIHQuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoie30ifX0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50Q29sb3JzPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKHQudXJpLG4pLnRoZW4oZnVuY3Rpb24oaSl7dmFyIHM9W107aWYoaSlmb3IodmFyIGE9ciYmdHlwZW9mIHIucmVzdWx0TGltaXQ9PSJudW1iZXIiP3IucmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRSxvPW4uZ2V0TWF0Y2hpbmdTY2hlbWFzKGkuc2NoZW1hKSxsPXt9LHU9MCxmPW87dTxmLmxlbmd0aDt1Kyspe3ZhciBoPWZbdV07aWYoIWguaW52ZXJ0ZWQmJmguc2NoZW1hJiYoaC5zY2hlbWEuZm9ybWF0PT09ImNvbG9yInx8aC5zY2hlbWEuZm9ybWF0PT09ImNvbG9yLWhleCIpJiZoLm5vZGUmJmgubm9kZS50eXBlPT09InN0cmluZyIpe3ZhciBkPVN0cmluZyhoLm5vZGUub2Zmc2V0KTtpZighbFtkXSl7dmFyIGc9anUob3QoaC5ub2RlKSk7aWYoZyl7dmFyIG09ZXQodCxoLm5vZGUpO3MucHVzaCh7Y29sb3I6ZyxyYW5nZTptfSl9aWYobFtkXT0hMCxhLS0sYTw9MClyZXR1cm4gciYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnIub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHQudXJpKSxzfX19cmV0dXJuIHN9KX0sZS5wcm90b3R5cGUuZ2V0Q29sb3JQcmVzZW50YXRpb25zPWZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzPVtdLGE9TWF0aC5yb3VuZChyLnJlZCoyNTUpLG89TWF0aC5yb3VuZChyLmdyZWVuKjI1NSksbD1NYXRoLnJvdW5kKHIuYmx1ZSoyNTUpO2Z1bmN0aW9uIHUoaCl7dmFyIGQ9aC50b1N0cmluZygxNik7cmV0dXJuIGQubGVuZ3RoIT09Mj8iMCIrZDpkfXZhciBmO3JldHVybiByLmFscGhhPT09MT9mPSIjIi5jb25jYXQodShhKSkuY29uY2F0KHUobykpLmNvbmNhdCh1KGwpKTpmPSIjIi5jb25jYXQodShhKSkuY29uY2F0KHUobykpLmNvbmNhdCh1KGwpKS5jb25jYXQodShNYXRoLnJvdW5kKHIuYWxwaGEqMjU1KSkpLHMucHVzaCh7bGFiZWw6Zix0ZXh0RWRpdDpSZS5yZXBsYWNlKGksSlNPTi5zdHJpbmdpZnkoZikpfSksc30sZX0oKTtmdW5jdGlvbiBldChlLHQpe3JldHVybiBYLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpfXZhciAkPVh0KCksa3I9e3NjaGVtYUFzc29jaWF0aW9uczpbXSxzY2hlbWFzOnsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjIjp7JHJlZjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6eyRzY2hlbWE6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxwb3NpdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0scG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOnt0eXBlOiJzdHJpbmciLGVudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfX0sdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6e30sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsZXhjbHVzaXZlTWluaW11bTohMH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4TGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5MZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDp7fX0sbWF4SXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhQcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5Qcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHJlcXVpcmVkOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxlbnVtOnt0eXBlOiJhcnJheSIsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0OnthbnlPZjpbe3R5cGU6InN0cmluZyIsZW51bTpbImRhdGUtdGltZSIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInJlZ2V4Il19LHt0eXBlOiJzdHJpbmcifV19LGFsbE9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LGFueU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG9uZU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG5vdDp7YWxsT2Y6W3skcmVmOiIjIn1dfX0sZGVwZW5kZW5jaWVzOntleGNsdXNpdmVNYXhpbXVtOlsibWF4aW11bSJdLGV4Y2x1c2l2ZU1pbmltdW06WyJtaW5pbXVtIl19LGRlZmF1bHQ6e319LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiOntkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LG5vbk5lZ2F0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e2VudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSx1bmlxdWVJdGVtczohMCxkZWZhdWx0OltdfX0sdHlwZTpbIm9iamVjdCIsImJvb2xlYW4iXSxwcm9wZXJ0aWVzOnskaWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRyZWY6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJGNvbW1lbnQ6e3R5cGU6InN0cmluZyJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDohMCxyZWFkT25seTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZXhhbXBsZXM6e3R5cGU6ImFycmF5IixpdGVtczohMH0sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixleGNsdXNpdmVNaW5pbXVtOjB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6Im51bWJlciJ9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5MZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6eyRyZWY6IiMifSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDohMH0sbWF4SXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluSXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY29udGFpbnM6eyRyZWY6IiMifSxtYXhQcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pblByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxyZXF1aXJlZDp7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxwcm9wZXJ0eU5hbWVzOntmb3JtYXQ6InJlZ2V4In0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LHByb3BlcnR5TmFtZXM6eyRyZWY6IiMifSxjb25zdDohMCxlbnVtOnt0eXBlOiJhcnJheSIsaXRlbXM6ITAsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0Ont0eXBlOiJzdHJpbmcifSxjb250ZW50TWVkaWFUeXBlOnt0eXBlOiJzdHJpbmcifSxjb250ZW50RW5jb2Rpbmc6e3R5cGU6InN0cmluZyJ9LGlmOnskcmVmOiIjIn0sdGhlbjp7JHJlZjoiIyJ9LGVsc2U6eyRyZWY6IiMifSxhbGxPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LGFueU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sb25lT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxub3Q6eyRyZWY6IiMifX0sZGVmYXVsdDohMH19fSxCdT17aWQ6JCgic2NoZW1hLmpzb24uaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRzY2hlbWE6JCgic2NoZW1hLmpzb24uJHNjaGVtYSIsIlRoZSBzY2hlbWEgdG8gdmVyaWZ5IHRoaXMgZG9jdW1lbnQgYWdhaW5zdC4iKSx0aXRsZTokKCJzY2hlbWEuanNvbi50aXRsZSIsIkEgZGVzY3JpcHRpdmUgdGl0bGUgb2YgdGhlIGVsZW1lbnQuIiksZGVzY3JpcHRpb246JCgic2NoZW1hLmpzb24uZGVzY3JpcHRpb24iLCJBIGxvbmcgZGVzY3JpcHRpb24gb2YgdGhlIGVsZW1lbnQuIFVzZWQgaW4gaG92ZXIgbWVudXMgYW5kIHN1Z2dlc3Rpb25zLiIpLGRlZmF1bHQ6JCgic2NoZW1hLmpzb24uZGVmYXVsdCIsIkEgZGVmYXVsdCB2YWx1ZS4gVXNlZCBieSBzdWdnZXN0aW9ucy4iKSxtdWx0aXBsZU9mOiQoInNjaGVtYS5qc29uLm11bHRpcGxlT2YiLCJBIG51bWJlciB0aGF0IHNob3VsZCBjbGVhbmx5IGRpdmlkZSB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBoYXZlIG5vIHJlbWFpbmRlcikuIiksbWF4aW11bTokKCJzY2hlbWEuanNvbi5tYXhpbXVtIiwiVGhlIG1heGltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNYXhpbXVtOiQoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1heGltdW0iLCJNYWtlcyB0aGUgbWF4aW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWluaW11bTokKCJzY2hlbWEuanNvbi5taW5pbXVtIiwiVGhlIG1pbmltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNaW5pbXVtOiQoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1pbmludW0iLCJNYWtlcyB0aGUgbWluaW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWF4TGVuZ3RoOiQoInNjaGVtYS5qc29uLm1heExlbmd0aCIsIlRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxtaW5MZW5ndGg6JCgic2NoZW1hLmpzb24ubWluTGVuZ3RoIiwiVGhlIG1pbmltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLHBhdHRlcm46JCgic2NoZW1hLmpzb24ucGF0dGVybiIsIkEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBzdHJpbmcgYWdhaW5zdC4gSXQgaXMgbm90IGltcGxpY2l0bHkgYW5jaG9yZWQuIiksYWRkaXRpb25hbEl0ZW1zOiQoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxJdGVtcyIsIkZvciBhcnJheXMsIG9ubHkgd2hlbiBpdGVtcyBpcyBzZXQgYXMgYW4gYXJyYXkuIElmIGl0IGlzIGEgc2NoZW1hLCB0aGVuIHRoaXMgc2NoZW1hIHZhbGlkYXRlcyBpdGVtcyBhZnRlciB0aGUgb25lcyBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1zIGFycmF5LiBJZiBpdCBpcyBmYWxzZSwgdGhlbiBhZGRpdGlvbmFsIGl0ZW1zIHdpbGwgY2F1c2UgdmFsaWRhdGlvbiB0byBmYWlsLiIpLGl0ZW1zOiQoInNjaGVtYS5qc29uLml0ZW1zIiwiRm9yIGFycmF5cy4gQ2FuIGVpdGhlciBiZSBhIHNjaGVtYSB0byB2YWxpZGF0ZSBldmVyeSBlbGVtZW50IGFnYWluc3Qgb3IgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB2YWxpZGF0ZSBlYWNoIGl0ZW0gYWdhaW5zdCBpbiBvcmRlciAodGhlIGZpcnN0IHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgc2Vjb25kIHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLiIpLG1heEl0ZW1zOiQoInNjaGVtYS5qc29uLm1heEl0ZW1zIiwiVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLG1pbkl0ZW1zOiQoInNjaGVtYS5qc29uLm1pbkl0ZW1zIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLHVuaXF1ZUl0ZW1zOiQoInNjaGVtYS5qc29uLnVuaXF1ZUl0ZW1zIiwiSWYgYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuIERlZmF1bHRzIHRvIGZhbHNlLiIpLG1heFByb3BlcnRpZXM6JCgic2NoZW1hLmpzb24ubWF4UHJvcGVydGllcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLG1pblByb3BlcnRpZXM6JCgic2NoZW1hLmpzb24ubWluUHJvcGVydGllcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLHJlcXVpcmVkOiQoInNjaGVtYS5qc29uLnJlcXVpcmVkIiwiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyByZXF1aXJlZCBvbiB0aGlzIG9iamVjdC4iKSxhZGRpdGlvbmFsUHJvcGVydGllczokKCJzY2hlbWEuanNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyIsIkVpdGhlciBhIHNjaGVtYSBvciBhIGJvb2xlYW4uIElmIGEgc2NoZW1hLCB0aGVuIHVzZWQgdG8gdmFsaWRhdGUgYWxsIHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgJ3Byb3BlcnRpZXMnIG9yICdwYXR0ZXJuUHJvcGVydGllcycuIElmIGZhbHNlLCB0aGVuIGFueSBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5IGVpdGhlciB3aWxsIGNhdXNlIHRoaXMgc2NoZW1hIHRvIGZhaWwuIiksZGVmaW5pdGlvbnM6JCgic2NoZW1hLmpzb24uZGVmaW5pdGlvbnMiLCJOb3QgdXNlZCBmb3IgdmFsaWRhdGlvbi4gUGxhY2Ugc3Vic2NoZW1hcyBoZXJlIHRoYXQgeW91IHdpc2ggdG8gcmVmZXJlbmNlIGlubGluZSB3aXRoICRyZWYuIikscHJvcGVydGllczokKCJzY2hlbWEuanNvbi5wcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgZWFjaCBwcm9wZXJ0eS4iKSxwYXR0ZXJuUHJvcGVydGllczokKCJzY2hlbWEuanNvbi5wYXR0ZXJuUHJvcGVydGllcyIsIkEgbWFwIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb24gcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgbWF0Y2hpbmcgcHJvcGVydGllcy4iKSxkZXBlbmRlbmNpZXM6JCgic2NoZW1hLmpzb24uZGVwZW5kZW5jaWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gZWl0aGVyIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG9yIGEgc2NoZW1hLiBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBtZWFucyB0aGUgcHJvcGVydHkgbmFtZWQgaW4gdGhlIGtleSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheSBiZWluZyBwcmVzZW50IGluIHRoZSBvYmplY3QgaW4gb3JkZXIgdG8gYmUgdmFsaWQuIElmIHRoZSB2YWx1ZSBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgc2NoZW1hIGlzIG9ubHkgYXBwbGllZCB0byB0aGUgb2JqZWN0IGlmIHRoZSBwcm9wZXJ0eSBpbiB0aGUga2V5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LiIpLGVudW06JCgic2NoZW1hLmpzb24uZW51bSIsIlRoZSBzZXQgb2YgbGl0ZXJhbCB2YWx1ZXMgdGhhdCBhcmUgdmFsaWQuIiksdHlwZTokKCJzY2hlbWEuanNvbi50eXBlIiwiRWl0aGVyIGEgc3RyaW5nIG9mIG9uZSBvZiB0aGUgYmFzaWMgc2NoZW1hIHR5cGVzIChudW1iZXIsIGludGVnZXIsIG51bGwsIGFycmF5LCBvYmplY3QsIGJvb2xlYW4sIHN0cmluZykgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIGEgc3Vic2V0IG9mIHRob3NlIHR5cGVzLiIpLGZvcm1hdDokKCJzY2hlbWEuanNvbi5mb3JtYXQiLCJEZXNjcmliZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgdGhlIHZhbHVlLiIpLGFsbE9mOiQoInNjaGVtYS5qc29uLmFsbE9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgYWxsIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksYW55T2Y6JCgic2NoZW1hLmpzb24uYW55T2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCB3aGVyZSBhdCBsZWFzdCBvbmUgbXVzdCBtYXRjaC4iKSxvbmVPZjokKCJzY2hlbWEuanNvbi5vbmVPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGV4YWN0bHkgb25lIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksbm90OiQoInNjaGVtYS5qc29uLm5vdCIsIkEgc2NoZW1hIHdoaWNoIG11c3Qgbm90IG1hdGNoLiIpLCRpZDokKCJzY2hlbWEuanNvbi4kaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRyZWY6JCgic2NoZW1hLmpzb24uJHJlZiIsIlJlZmVyZW5jZSBhIGRlZmluaXRpb24gaG9zdGVkIG9uIGFueSBsb2NhdGlvbi4iKSwkY29tbWVudDokKCJzY2hlbWEuanNvbi4kY29tbWVudCIsIkNvbW1lbnRzIGZyb20gc2NoZW1hIGF1dGhvcnMgdG8gcmVhZGVycyBvciBtYWludGFpbmVycyBvZiB0aGUgc2NoZW1hLiIpLHJlYWRPbmx5OiQoInNjaGVtYS5qc29uLnJlYWRPbmx5IiwiSW5kaWNhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBpbnN0YW5jZSBpcyBtYW5hZ2VkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBvd25pbmcgYXV0aG9yaXR5LiIpLGV4YW1wbGVzOiQoInNjaGVtYS5qc29uLmV4YW1wbGVzIiwiU2FtcGxlIEpTT04gdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NoZW1hLCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWxsdXN0cmF0aW5nIHVzYWdlLiIpLGNvbnRhaW5zOiQoInNjaGVtYS5qc29uLmNvbnRhaW5zIiwnQW4gYXJyYXkgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCAiY29udGFpbnMiIGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZ2l2ZW4gc2NoZW1hLicpLHByb3BlcnR5TmFtZXM6JCgic2NoZW1hLmpzb24ucHJvcGVydHlOYW1lcyIsIklmIHRoZSBpbnN0YW5jZSBpcyBhbiBvYmplY3QsIHRoaXMga2V5d29yZCB2YWxpZGF0ZXMgaWYgZXZlcnkgcHJvcGVydHkgbmFtZSBpbiB0aGUgaW5zdGFuY2UgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHByb3ZpZGVkIHNjaGVtYS4iKSxjb25zdDokKCJzY2hlbWEuanNvbi5jb25zdCIsIkFuIGluc3RhbmNlIHZhbGlkYXRlcyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGlzIGtleXdvcmQgaWYgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUga2V5d29yZC4iKSxjb250ZW50TWVkaWFUeXBlOiQoInNjaGVtYS5qc29uLmNvbnRlbnRNZWRpYVR5cGUiLCJEZXNjcmliZXMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksY29udGVudEVuY29kaW5nOiQoInNjaGVtYS5qc29uLmNvbnRlbnRFbmNvZGluZyIsIkRlc2NyaWJlcyB0aGUgY29udGVudCBlbmNvZGluZyBvZiBhIHN0cmluZyBwcm9wZXJ0eS4iKSxpZjokKCJzY2hlbWEuanNvbi5pZiIsJ1RoZSB2YWxpZGF0aW9uIG91dGNvbWUgb2YgdGhlICJpZiIgc3Vic2NoZW1hIGNvbnRyb2xzIHdoaWNoIG9mIHRoZSAidGhlbiIgb3IgImVsc2UiIGtleXdvcmRzIGFyZSBldmFsdWF0ZWQuJyksdGhlbjokKCJzY2hlbWEuanNvbi50aGVuIiwnVGhlICJpZiIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgc3VjY2VlZHMuJyksZWxzZTokKCJzY2hlbWEuanNvbi5lbHNlIiwnVGhlICJlbHNlIiBzdWJzY2hlbWEgaXMgdXNlZCBmb3IgdmFsaWRhdGlvbiB3aGVuIHRoZSAiaWYiIHN1YnNjaGVtYSBmYWlscy4nKX07Zm9yKFNhIGluIGtyLnNjaGVtYXMpe0xuPWtyLnNjaGVtYXNbU2FdO2ZvcihDdCBpbiBMbi5wcm9wZXJ0aWVzKU5uPUxuLnByb3BlcnRpZXNbQ3RdLHR5cGVvZiBObj09ImJvb2xlYW4iJiYoTm49TG4ucHJvcGVydGllc1tDdF09e30pLEVyPUJ1W0N0XSxFcj9Obi5kZXNjcmlwdGlvbj1Fcjpjb25zb2xlLmxvZygiIi5jb25jYXQoQ3QsIjogbG9jYWxpemUoJ3NjaGVtYS5qc29uLiIpLmNvbmNhdChDdCxgJywgIiIpYCkpfXZhciBMbixObixFcixDdCxTYSxMYTtMYT0oKCk9Pnt2YXIgZT17NDcwOnI9PntmdW5jdGlvbiBpKG8pe2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkobykpfWZ1bmN0aW9uIHMobyxsKXtmb3IodmFyIHUsZj0iIixoPTAsZD0tMSxnPTAsbT0wO208PW8ubGVuZ3RoOysrbSl7aWYobTxvLmxlbmd0aCl1PW8uY2hhckNvZGVBdChtKTtlbHNle2lmKHU9PT00NylicmVhazt1PTQ3fWlmKHU9PT00Nyl7aWYoIShkPT09bS0xfHxnPT09MSkpaWYoZCE9PW0tMSYmZz09PTIpe2lmKGYubGVuZ3RoPDJ8fGghPT0yfHxmLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSkhPT00Nnx8Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTIpIT09NDYpe2lmKGYubGVuZ3RoPjIpe3ZhciB2PWYubGFzdEluZGV4T2YoIi8iKTtpZih2IT09Zi5sZW5ndGgtMSl7dj09PS0xPyhmPSIiLGg9MCk6aD0oZj1mLnNsaWNlKDAsdikpLmxlbmd0aC0xLWYubGFzdEluZGV4T2YoIi8iKSxkPW0sZz0wO2NvbnRpbnVlfX1lbHNlIGlmKGYubGVuZ3RoPT09Mnx8Zi5sZW5ndGg9PT0xKXtmPSIiLGg9MCxkPW0sZz0wO2NvbnRpbnVlfX1sJiYoZi5sZW5ndGg+MD9mKz0iLy4uIjpmPSIuLiIsaD0yKX1lbHNlIGYubGVuZ3RoPjA/Zis9Ii8iK28uc2xpY2UoZCsxLG0pOmY9by5zbGljZShkKzEsbSksaD1tLWQtMTtkPW0sZz0wfWVsc2UgdT09PTQ2JiZnIT09LTE/KytnOmc9LTF9cmV0dXJuIGZ9dmFyIGE9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIG8sbD0iIix1PSExLGY9YXJndW1lbnRzLmxlbmd0aC0xO2Y+PS0xJiYhdTtmLS0pe3ZhciBoO2Y+PTA/aD1hcmd1bWVudHNbZl06KG89PT12b2lkIDAmJihvPXByb2Nlc3MuY3dkKCkpLGg9byksaShoKSxoLmxlbmd0aCE9PTAmJihsPWgrIi8iK2wsdT1oLmNoYXJDb2RlQXQoMCk9PT00Nyl9cmV0dXJuIGw9cyhsLCF1KSx1P2wubGVuZ3RoPjA/Ii8iK2w6Ii8iOmwubGVuZ3RoPjA/bDoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihvKXtpZihpKG8pLG8ubGVuZ3RoPT09MClyZXR1cm4iLiI7dmFyIGw9by5jaGFyQ29kZUF0KDApPT09NDcsdT1vLmNoYXJDb2RlQXQoby5sZW5ndGgtMSk9PT00NztyZXR1cm4obz1zKG8sIWwpKS5sZW5ndGghPT0wfHxsfHwobz0iLiIpLG8ubGVuZ3RoPjAmJnUmJihvKz0iLyIpLGw/Ii8iK286b30saXNBYnNvbHV0ZTpmdW5jdGlvbihvKXtyZXR1cm4gaShvKSxvLmxlbmd0aD4wJiZvLmNoYXJDb2RlQXQoMCk9PT00N30sam9pbjpmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIG8sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDsrK2wpe3ZhciB1PWFyZ3VtZW50c1tsXTtpKHUpLHUubGVuZ3RoPjAmJihvPT09dm9pZCAwP289dTpvKz0iLyIrdSl9cmV0dXJuIG89PT12b2lkIDA/Ii4iOmEubm9ybWFsaXplKG8pfSxyZWxhdGl2ZTpmdW5jdGlvbihvLGwpe2lmKGkobyksaShsKSxvPT09bHx8KG89YS5yZXNvbHZlKG8pKT09PShsPWEucmVzb2x2ZShsKSkpcmV0dXJuIiI7Zm9yKHZhciB1PTE7dTxvLmxlbmd0aCYmby5jaGFyQ29kZUF0KHUpPT09NDc7Kyt1KTtmb3IodmFyIGY9by5sZW5ndGgsaD1mLXUsZD0xO2Q8bC5sZW5ndGgmJmwuY2hhckNvZGVBdChkKT09PTQ3OysrZCk7Zm9yKHZhciBnPWwubGVuZ3RoLWQsbT1oPGc/aDpnLHY9LTEscD0wO3A8PW07KytwKXtpZihwPT09bSl7aWYoZz5tKXtpZihsLmNoYXJDb2RlQXQoZCtwKT09PTQ3KXJldHVybiBsLnNsaWNlKGQrcCsxKTtpZihwPT09MClyZXR1cm4gbC5zbGljZShkK3ApfWVsc2UgaD5tJiYoby5jaGFyQ29kZUF0KHUrcCk9PT00Nz92PXA6cD09PTAmJih2PTApKTticmVha312YXIgeD1vLmNoYXJDb2RlQXQodStwKTtpZih4IT09bC5jaGFyQ29kZUF0KGQrcCkpYnJlYWs7eD09PTQ3JiYodj1wKX12YXIgeT0iIjtmb3IocD11K3YrMTtwPD1mOysrcClwIT09ZiYmby5jaGFyQ29kZUF0KHApIT09NDd8fCh5Lmxlbmd0aD09PTA/eSs9Ii4uIjp5Kz0iLy4uIik7cmV0dXJuIHkubGVuZ3RoPjA/eStsLnNsaWNlKGQrdik6KGQrPXYsbC5jaGFyQ29kZUF0KGQpPT09NDcmJisrZCxsLnNsaWNlKGQpKX0sX21ha2VMb25nOmZ1bmN0aW9uKG8pe3JldHVybiBvfSxkaXJuYW1lOmZ1bmN0aW9uKG8pe2lmKGkobyksby5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIGw9by5jaGFyQ29kZUF0KDApLHU9bD09PTQ3LGY9LTEsaD0hMCxkPW8ubGVuZ3RoLTE7ZD49MTstLWQpaWYoKGw9by5jaGFyQ29kZUF0KGQpKT09PTQ3KXtpZighaCl7Zj1kO2JyZWFrfX1lbHNlIGg9ITE7cmV0dXJuIGY9PT0tMT91PyIvIjoiLiI6dSYmZj09PTE/Ii8vIjpvLnNsaWNlKDAsZil9LGJhc2VuYW1lOmZ1bmN0aW9uKG8sbCl7aWYobCE9PXZvaWQgMCYmdHlwZW9mIGwhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtpKG8pO3ZhciB1LGY9MCxoPS0xLGQ9ITA7aWYobCE9PXZvaWQgMCYmbC5sZW5ndGg+MCYmbC5sZW5ndGg8PW8ubGVuZ3RoKXtpZihsLmxlbmd0aD09PW8ubGVuZ3RoJiZsPT09bylyZXR1cm4iIjt2YXIgZz1sLmxlbmd0aC0xLG09LTE7Zm9yKHU9by5sZW5ndGgtMTt1Pj0wOy0tdSl7dmFyIHY9by5jaGFyQ29kZUF0KHUpO2lmKHY9PT00Nyl7aWYoIWQpe2Y9dSsxO2JyZWFrfX1lbHNlIG09PT0tMSYmKGQ9ITEsbT11KzEpLGc+PTAmJih2PT09bC5jaGFyQ29kZUF0KGcpPy0tZz09LTEmJihoPXUpOihnPS0xLGg9bSkpfXJldHVybiBmPT09aD9oPW06aD09PS0xJiYoaD1vLmxlbmd0aCksby5zbGljZShmLGgpfWZvcih1PW8ubGVuZ3RoLTE7dT49MDstLXUpaWYoby5jaGFyQ29kZUF0KHUpPT09NDcpe2lmKCFkKXtmPXUrMTticmVha319ZWxzZSBoPT09LTEmJihkPSExLGg9dSsxKTtyZXR1cm4gaD09PS0xPyIiOm8uc2xpY2UoZixoKX0sZXh0bmFtZTpmdW5jdGlvbihvKXtpKG8pO2Zvcih2YXIgbD0tMSx1PTAsZj0tMSxoPSEwLGQ9MCxnPW8ubGVuZ3RoLTE7Zz49MDstLWcpe3ZhciBtPW8uY2hhckNvZGVBdChnKTtpZihtIT09NDcpZj09PS0xJiYoaD0hMSxmPWcrMSksbT09PTQ2P2w9PT0tMT9sPWc6ZCE9PTEmJihkPTEpOmwhPT0tMSYmKGQ9LTEpO2Vsc2UgaWYoIWgpe3U9ZysxO2JyZWFrfX1yZXR1cm4gbD09PS0xfHxmPT09LTF8fGQ9PT0wfHxkPT09MSYmbD09PWYtMSYmbD09PXUrMT8iIjpvLnNsaWNlKGwsZil9LGZvcm1hdDpmdW5jdGlvbihvKXtpZihvPT09bnVsbHx8dHlwZW9mIG8hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBvKTtyZXR1cm4gZnVuY3Rpb24obCx1KXt2YXIgZj11LmRpcnx8dS5yb290LGg9dS5iYXNlfHwodS5uYW1lfHwiIikrKHUuZXh0fHwiIik7cmV0dXJuIGY/Zj09PXUucm9vdD9mK2g6ZisiLyIraDpofSgwLG8pfSxwYXJzZTpmdW5jdGlvbihvKXtpKG8pO3ZhciBsPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihvLmxlbmd0aD09PTApcmV0dXJuIGw7dmFyIHUsZj1vLmNoYXJDb2RlQXQoMCksaD1mPT09NDc7aD8obC5yb290PSIvIix1PTEpOnU9MDtmb3IodmFyIGQ9LTEsZz0wLG09LTEsdj0hMCxwPW8ubGVuZ3RoLTEseD0wO3A+PXU7LS1wKWlmKChmPW8uY2hhckNvZGVBdChwKSkhPT00NyltPT09LTEmJih2PSExLG09cCsxKSxmPT09NDY/ZD09PS0xP2Q9cDp4IT09MSYmKHg9MSk6ZCE9PS0xJiYoeD0tMSk7ZWxzZSBpZighdil7Zz1wKzE7YnJlYWt9cmV0dXJuIGQ9PT0tMXx8bT09PS0xfHx4PT09MHx8eD09PTEmJmQ9PT1tLTEmJmQ9PT1nKzE/bSE9PS0xJiYobC5iYXNlPWwubmFtZT1nPT09MCYmaD9vLnNsaWNlKDEsbSk6by5zbGljZShnLG0pKTooZz09PTAmJmg/KGwubmFtZT1vLnNsaWNlKDEsZCksbC5iYXNlPW8uc2xpY2UoMSxtKSk6KGwubmFtZT1vLnNsaWNlKGcsZCksbC5iYXNlPW8uc2xpY2UoZyxtKSksbC5leHQ9by5zbGljZShkLG0pKSxnPjA/bC5kaXI9by5zbGljZSgwLGctMSk6aCYmKGwuZGlyPSIvIiksbH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07YS5wb3NpeD1hLHIuZXhwb3J0cz1hfSw0NDc6KHIsaSxzKT0+e3ZhciBhO2lmKHMucihpKSxzLmQoaSx7VVJJOigpPT55LFV0aWxzOigpPT5UfSksdHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiKWE9cHJvY2Vzcy5wbGF0Zm9ybT09PSJ3aW4zMiI7ZWxzZSBpZih0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0Iil7dmFyIG89bmF2aWdhdG9yLnVzZXJBZ2VudDthPW8uaW5kZXhPZigiV2luZG93cyIpPj0wfXZhciBsLHUsZj0obD1mdW5jdGlvbihSLGspe3JldHVybihsPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihQLEQpe1AuX19wcm90b19fPUR9fHxmdW5jdGlvbihQLEQpe2Zvcih2YXIgQiBpbiBEKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChELEIpJiYoUFtCXT1EW0JdKX0pKFIsayl9LGZ1bmN0aW9uKFIsayl7aWYodHlwZW9mIGshPSJmdW5jdGlvbiImJmshPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gUCgpe3RoaXMuY29uc3RydWN0b3I9Un1sKFIsayksUi5wcm90b3R5cGU9az09PW51bGw/T2JqZWN0LmNyZWF0ZShrKTooUC5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IFApfSksaD0vXlx3W1x3XGQrLi1dKiQvLGQ9L15cLy8sZz0vXlwvXC8vO2Z1bmN0aW9uIG0oUixrKXtpZighUi5zY2hlbWUmJmspdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KFIuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KFIucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoUi5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoUi5mcmFnbWVudCwnIn0nKSk7aWYoUi5zY2hlbWUmJiFoLnRlc3QoUi5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihSLnBhdGgpe2lmKFIuYXV0aG9yaXR5KXtpZighZC50ZXN0KFIucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihnLnRlc3QoUi5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX19dmFyIHY9IiIscD0iLyIseD0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/Lyx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUihrLFAsRCxCLFUsRyl7Rz09PXZvaWQgMCYmKEc9ITEpLHR5cGVvZiBrPT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9ay5zY2hlbWV8fHYsdGhpcy5hdXRob3JpdHk9ay5hdXRob3JpdHl8fHYsdGhpcy5wYXRoPWsucGF0aHx8dix0aGlzLnF1ZXJ5PWsucXVlcnl8fHYsdGhpcy5mcmFnbWVudD1rLmZyYWdtZW50fHx2KToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oZGUsbGUpe3JldHVybiBkZXx8bGU/ZGU6ImZpbGUifShrLEcpLHRoaXMuYXV0aG9yaXR5PVB8fHYsdGhpcy5wYXRoPWZ1bmN0aW9uKGRlLGxlKXtzd2l0Y2goZGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjpsZT9sZVswXSE9PXAmJihsZT1wK2xlKTpsZT1wfXJldHVybiBsZX0odGhpcy5zY2hlbWUsRHx8diksdGhpcy5xdWVyeT1CfHx2LHRoaXMuZnJhZ21lbnQ9VXx8dixtKHRoaXMsRykpfXJldHVybiBSLmlzVXJpPWZ1bmN0aW9uKGspe3JldHVybiBrIGluc3RhbmNlb2YgUnx8ISFrJiZ0eXBlb2Ygay5hdXRob3JpdHk9PSJzdHJpbmciJiZ0eXBlb2Ygay5mcmFnbWVudD09InN0cmluZyImJnR5cGVvZiBrLnBhdGg9PSJzdHJpbmciJiZ0eXBlb2Ygay5xdWVyeT09InN0cmluZyImJnR5cGVvZiBrLnNjaGVtZT09InN0cmluZyImJnR5cGVvZiBrLmZzUGF0aD09InN0cmluZyImJnR5cGVvZiBrLndpdGg9PSJmdW5jdGlvbiImJnR5cGVvZiBrLnRvU3RyaW5nPT0iZnVuY3Rpb24ifSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFIucHJvdG90eXBlLndpdGg9ZnVuY3Rpb24oayl7aWYoIWspcmV0dXJuIHRoaXM7dmFyIFA9ay5zY2hlbWUsRD1rLmF1dGhvcml0eSxCPWsucGF0aCxVPWsucXVlcnksRz1rLmZyYWdtZW50O3JldHVybiBQPT09dm9pZCAwP1A9dGhpcy5zY2hlbWU6UD09PW51bGwmJihQPXYpLEQ9PT12b2lkIDA/RD10aGlzLmF1dGhvcml0eTpEPT09bnVsbCYmKEQ9diksQj09PXZvaWQgMD9CPXRoaXMucGF0aDpCPT09bnVsbCYmKEI9diksVT09PXZvaWQgMD9VPXRoaXMucXVlcnk6VT09PW51bGwmJihVPXYpLEc9PT12b2lkIDA/Rz10aGlzLmZyYWdtZW50Okc9PT1udWxsJiYoRz12KSxQPT09dGhpcy5zY2hlbWUmJkQ9PT10aGlzLmF1dGhvcml0eSYmQj09PXRoaXMucGF0aCYmVT09PXRoaXMucXVlcnkmJkc9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IEwoUCxELEIsVSxHKX0sUi5wYXJzZT1mdW5jdGlvbihrLFApe1A9PT12b2lkIDAmJihQPSExKTt2YXIgRD14LmV4ZWMoayk7cmV0dXJuIEQ/bmV3IEwoRFsyXXx8dix3KERbNF18fHYpLHcoRFs1XXx8diksdyhEWzddfHx2KSx3KERbOV18fHYpLFApOm5ldyBMKHYsdix2LHYsdil9LFIuZmlsZT1mdW5jdGlvbihrKXt2YXIgUD12O2lmKGEmJihrPWsucmVwbGFjZSgvXFwvZyxwKSksa1swXT09PXAmJmtbMV09PT1wKXt2YXIgRD1rLmluZGV4T2YocCwyKTtEPT09LTE/KFA9ay5zdWJzdHJpbmcoMiksaz1wKTooUD1rLnN1YnN0cmluZygyLEQpLGs9ay5zdWJzdHJpbmcoRCl8fHApfXJldHVybiBuZXcgTCgiZmlsZSIsUCxrLHYsdil9LFIuZnJvbT1mdW5jdGlvbihrKXt2YXIgUD1uZXcgTChrLnNjaGVtZSxrLmF1dGhvcml0eSxrLnBhdGgsay5xdWVyeSxrLmZyYWdtZW50KTtyZXR1cm4gbShQLCEwKSxQfSxSLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihrKXtyZXR1cm4gaz09PXZvaWQgMCYmKGs9ITEpLE0odGhpcyxrKX0sUi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LFIucmV2aXZlPWZ1bmN0aW9uKGspe2lmKGspe2lmKGsgaW5zdGFuY2VvZiBSKXJldHVybiBrO3ZhciBQPW5ldyBMKGspO3JldHVybiBQLl9mb3JtYXR0ZWQ9ay5leHRlcm5hbCxQLl9mc1BhdGg9ay5fc2VwPT09Yj9rLmZzUGF0aDpudWxsLFB9cmV0dXJuIGt9LFJ9KCksYj1hPzE6dm9pZCAwLEw9ZnVuY3Rpb24oUil7ZnVuY3Rpb24gaygpe3ZhciBQPVIhPT1udWxsJiZSLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gUC5fZm9ybWF0dGVkPW51bGwsUC5fZnNQYXRoPW51bGwsUH1yZXR1cm4gZihrLFIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1BKHRoaXMpKSx0aGlzLl9mc1BhdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksay5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oUCl7cmV0dXJuIFA9PT12b2lkIDAmJihQPSExKSxQP00odGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1NKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfSxrLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgUD17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoUC5mc1BhdGg9dGhpcy5fZnNQYXRoLFAuX3NlcD1iKSx0aGlzLl9mb3JtYXR0ZWQmJihQLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoUC5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihQLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihQLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKFAucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKFAuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksUH0sa30oeSksUz0oKHU9e30pWzU4XT0iJTNBIix1WzQ3XT0iJTJGIix1WzYzXT0iJTNGIix1WzM1XT0iJTIzIix1WzkxXT0iJTVCIix1WzkzXT0iJTVEIix1WzY0XT0iJTQwIix1WzMzXT0iJTIxIix1WzM2XT0iJTI0Iix1WzM4XT0iJTI2Iix1WzM5XT0iJTI3Iix1WzQwXT0iJTI4Iix1WzQxXT0iJTI5Iix1WzQyXT0iJTJBIix1WzQzXT0iJTJCIix1WzQ0XT0iJTJDIix1WzU5XT0iJTNCIix1WzYxXT0iJTNEIix1WzMyXT0iJTIwIix1KTtmdW5jdGlvbiBfKFIsayl7Zm9yKHZhciBQPXZvaWQgMCxEPS0xLEI9MDtCPFIubGVuZ3RoO0IrKyl7dmFyIFU9Ui5jaGFyQ29kZUF0KEIpO2lmKFU+PTk3JiZVPD0xMjJ8fFU+PTY1JiZVPD05MHx8VT49NDgmJlU8PTU3fHxVPT09NDV8fFU9PT00Nnx8VT09PTk1fHxVPT09MTI2fHxrJiZVPT09NDcpRCE9PS0xJiYoUCs9ZW5jb2RlVVJJQ29tcG9uZW50KFIuc3Vic3RyaW5nKEQsQikpLEQ9LTEpLFAhPT12b2lkIDAmJihQKz1SLmNoYXJBdChCKSk7ZWxzZXtQPT09dm9pZCAwJiYoUD1SLnN1YnN0cigwLEIpKTt2YXIgRz1TW1VdO0chPT12b2lkIDA/KEQhPT0tMSYmKFArPWVuY29kZVVSSUNvbXBvbmVudChSLnN1YnN0cmluZyhELEIpKSxEPS0xKSxQKz1HKTpEPT09LTEmJihEPUIpfX1yZXR1cm4gRCE9PS0xJiYoUCs9ZW5jb2RlVVJJQ29tcG9uZW50KFIuc3Vic3RyaW5nKEQpKSksUCE9PXZvaWQgMD9QOlJ9ZnVuY3Rpb24gTihSKXtmb3IodmFyIGs9dm9pZCAwLFA9MDtQPFIubGVuZ3RoO1ArKyl7dmFyIEQ9Ui5jaGFyQ29kZUF0KFApO0Q9PT0zNXx8RD09PTYzPyhrPT09dm9pZCAwJiYoaz1SLnN1YnN0cigwLFApKSxrKz1TW0RdKTprIT09dm9pZCAwJiYoays9UltQXSl9cmV0dXJuIGshPT12b2lkIDA/azpSfWZ1bmN0aW9uIEEoUixrKXt2YXIgUDtyZXR1cm4gUD1SLmF1dGhvcml0eSYmUi5wYXRoLmxlbmd0aD4xJiZSLnNjaGVtZT09PSJmaWxlIj8iLy8iLmNvbmNhdChSLmF1dGhvcml0eSkuY29uY2F0KFIucGF0aCk6Ui5wYXRoLmNoYXJDb2RlQXQoMCk9PT00NyYmKFIucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmUi5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxSLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJlIucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiZSLnBhdGguY2hhckNvZGVBdCgyKT09PTU4P1IucGF0aFsxXS50b0xvd2VyQ2FzZSgpK1IucGF0aC5zdWJzdHIoMik6Ui5wYXRoLGEmJihQPVAucmVwbGFjZSgvXC8vZywiXFwiKSksUH1mdW5jdGlvbiBNKFIsayl7dmFyIFA9az9OOl8sRD0iIixCPVIuc2NoZW1lLFU9Ui5hdXRob3JpdHksRz1SLnBhdGgsZGU9Ui5xdWVyeSxsZT1SLmZyYWdtZW50O2lmKEImJihEKz1CLEQrPSI6IiksKFV8fEI9PT0iZmlsZSIpJiYoRCs9cCxEKz1wKSxVKXt2YXIgYmU9VS5pbmRleE9mKCJAIik7aWYoYmUhPT0tMSl7dmFyIEV0PVUuc3Vic3RyKDAsYmUpO1U9VS5zdWJzdHIoYmUrMSksKGJlPUV0LmluZGV4T2YoIjoiKSk9PT0tMT9EKz1QKEV0LCExKTooRCs9UChFdC5zdWJzdHIoMCxiZSksITEpLEQrPSI6IixEKz1QKEV0LnN1YnN0cihiZSsxKSwhMSkpLEQrPSJAIn0oYmU9KFU9VS50b0xvd2VyQ2FzZSgpKS5pbmRleE9mKCI6IikpPT09LTE/RCs9UChVLCExKTooRCs9UChVLnN1YnN0cigwLGJlKSwhMSksRCs9VS5zdWJzdHIoYmUpKX1pZihHKXtpZihHLmxlbmd0aD49MyYmRy5jaGFyQ29kZUF0KDApPT09NDcmJkcuY2hhckNvZGVBdCgyKT09PTU4KShPZT1HLmNoYXJDb2RlQXQoMSkpPj02NSYmT2U8PTkwJiYoRz0iLyIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoT2UrMzIpLCI6IikuY29uY2F0KEcuc3Vic3RyKDMpKSk7ZWxzZSBpZihHLmxlbmd0aD49MiYmRy5jaGFyQ29kZUF0KDEpPT09NTgpe3ZhciBPZTsoT2U9Ry5jaGFyQ29kZUF0KDApKT49NjUmJk9lPD05MCYmKEc9IiIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoT2UrMzIpLCI6IikuY29uY2F0KEcuc3Vic3RyKDIpKSl9RCs9UChHLCEwKX1yZXR1cm4gZGUmJihEKz0iPyIsRCs9UChkZSwhMSkpLGxlJiYoRCs9IiMiLEQrPWs/bGU6XyhsZSwhMSkpLER9ZnVuY3Rpb24gSShSKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChSKX1jYXRjaHtyZXR1cm4gUi5sZW5ndGg+Mz9SLnN1YnN0cigwLDMpK0koUi5zdWJzdHIoMykpOlJ9fXZhciBDPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIHcoUil7cmV0dXJuIFIubWF0Y2goQyk/Ui5yZXBsYWNlKEMsZnVuY3Rpb24oayl7cmV0dXJuIEkoayl9KTpSfXZhciBULEY9cyg0NzApLFY9ZnVuY3Rpb24oUixrLFApe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgRCxCPTAsVT1rLmxlbmd0aDtCPFU7QisrKSFEJiZCIGluIGt8fChEfHwoRD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChrLDAsQikpLERbQl09a1tCXSk7cmV0dXJuIFIuY29uY2F0KER8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGspKX0sTz1GLnBvc2l4fHxGOyhmdW5jdGlvbihSKXtSLmpvaW5QYXRoPWZ1bmN0aW9uKGspe2Zvcih2YXIgUD1bXSxEPTE7RDxhcmd1bWVudHMubGVuZ3RoO0QrKylQW0QtMV09YXJndW1lbnRzW0RdO3JldHVybiBrLndpdGgoe3BhdGg6Ty5qb2luLmFwcGx5KE8sVihbay5wYXRoXSxQLCExKSl9KX0sUi5yZXNvbHZlUGF0aD1mdW5jdGlvbihrKXtmb3IodmFyIFA9W10sRD0xO0Q8YXJndW1lbnRzLmxlbmd0aDtEKyspUFtELTFdPWFyZ3VtZW50c1tEXTt2YXIgQj1rLnBhdGh8fCIvIjtyZXR1cm4gay53aXRoKHtwYXRoOk8ucmVzb2x2ZS5hcHBseShPLFYoW0JdLFAsITEpKX0pfSxSLmRpcm5hbWU9ZnVuY3Rpb24oayl7dmFyIFA9Ty5kaXJuYW1lKGsucGF0aCk7cmV0dXJuIFAubGVuZ3RoPT09MSYmUC5jaGFyQ29kZUF0KDApPT09NDY/azprLndpdGgoe3BhdGg6UH0pfSxSLmJhc2VuYW1lPWZ1bmN0aW9uKGspe3JldHVybiBPLmJhc2VuYW1lKGsucGF0aCl9LFIuZXh0bmFtZT1mdW5jdGlvbihrKXtyZXR1cm4gTy5leHRuYW1lKGsucGF0aCl9fSkoVHx8KFQ9e30pKX19LHQ9e307ZnVuY3Rpb24gbihyKXtpZih0W3JdKXJldHVybiB0W3JdLmV4cG9ydHM7dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfXJldHVybiBuLmQ9KHIsaSk9Pntmb3IodmFyIHMgaW4gaSluLm8oaSxzKSYmIW4ubyhyLHMpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixzLHtlbnVtZXJhYmxlOiEwLGdldDppW3NdfSl9LG4ubz0ocixpKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsaSksbi5yPXI9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuKDQ0Nyl9KSgpO3ZhcntVUkk6a3QsVXRpbHM6Z2N9PUxhO2Z1bmN0aW9uIFV1KGUsdCl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7Zm9yKHZhciBuPVN0cmluZyhlKSxyPSIiLGk9dD8hIXQuZXh0ZW5kZWQ6ITEscz10PyEhdC5nbG9ic3RhcjohMSxhPSExLG89dCYmdHlwZW9mIHQuZmxhZ3M9PSJzdHJpbmciP3QuZmxhZ3M6IiIsbCx1PTAsZj1uLmxlbmd0aDt1PGY7dSsrKXN3aXRjaChsPW5bdV0sbCl7Y2FzZSIvIjpjYXNlIiQiOmNhc2UiXiI6Y2FzZSIrIjpjYXNlIi4iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIj0iOmNhc2UiISI6Y2FzZSJ8IjpyKz0iXFwiK2w7YnJlYWs7Y2FzZSI/IjppZihpKXtyKz0iLiI7YnJlYWt9Y2FzZSJbIjpjYXNlIl0iOmlmKGkpe3IrPWw7YnJlYWt9Y2FzZSJ7IjppZihpKXthPSEwLHIrPSIoIjticmVha31jYXNlIn0iOmlmKGkpe2E9ITEscis9IikiO2JyZWFrfWNhc2UiLCI6aWYoYSl7cis9InwiO2JyZWFrfXIrPSJcXCIrbDticmVhaztjYXNlIioiOmZvcih2YXIgaD1uW3UtMV0sZD0xO25bdSsxXT09PSIqIjspZCsrLHUrKzt2YXIgZz1uW3UrMV07aWYoIXMpcis9Ii4qIjtlbHNle3ZhciBtPWQ+MSYmKGg9PT0iLyJ8fGg9PT12b2lkIDB8fGg9PT0ieyJ8fGg9PT0iLCIpJiYoZz09PSIvInx8Zz09PXZvaWQgMHx8Zz09PSIsInx8Zz09PSJ9Iik7bT8oZz09PSIvIj91Kys6aD09PSIvIiYmci5lbmRzV2l0aCgiXFwvIikmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtMikpLHIrPSIoKD86W14vXSooPzovfCQpKSopIik6cis9IihbXi9dKikifWJyZWFrO2RlZmF1bHQ6cis9bH1yZXR1cm4oIW98fCF+by5pbmRleE9mKCJnIikpJiYocj0iXiIrcisiJCIpLG5ldyBSZWdFeHAocixvKX12YXIgVmU9WHQoKSwkdT0iISIsV3U9Ii8iLEh1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3RoaXMuZ2xvYldyYXBwZXJzPVtdO3RyeXtmb3IodmFyIHI9MCxpPXQ7cjxpLmxlbmd0aDtyKyspe3ZhciBzPWlbcl0sYT1zWzBdIT09JHU7YXx8KHM9cy5zdWJzdHJpbmcoMSkpLHMubGVuZ3RoPjAmJihzWzBdPT09V3UmJihzPXMuc3Vic3RyaW5nKDEpKSx0aGlzLmdsb2JXcmFwcGVycy5wdXNoKHtyZWdleHA6VXUoIioqLyIrcyx7ZXh0ZW5kZWQ6ITAsZ2xvYnN0YXI6ITB9KSxpbmNsdWRlOmF9KSl9dGhpcy51cmlzPW59Y2F0Y2h7dGhpcy5nbG9iV3JhcHBlcnMubGVuZ3RoPTAsdGhpcy51cmlzPVtdfX1yZXR1cm4gZS5wcm90b3R5cGUubWF0Y2hlc1BhdHRlcm49ZnVuY3Rpb24odCl7Zm9yKHZhciBuPSExLHI9MCxpPXRoaXMuZ2xvYldyYXBwZXJzO3I8aS5sZW5ndGg7cisrKXt2YXIgcz1pW3JdLGE9cy5yZWdleHAsbz1zLmluY2x1ZGU7YS50ZXN0KHQpJiYobj1vKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuZ2V0VVJJcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaXN9LGV9KCksenU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyKXt0aGlzLnNlcnZpY2U9dCx0aGlzLnVyaT1uLHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5hbmNob3JzPXZvaWQgMCxyJiYodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5wcm9taXNlLnJlc29sdmUobmV3IFF0KHIpKSl9cmV0dXJuIGUucHJvdG90eXBlLmdldFVucmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJlc29sdmVkU2NoZW1hfHwodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5sb2FkU2NoZW1hKHRoaXMudXJpKSksdGhpcy51bnJlc29sdmVkU2NoZW1hfSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnJlc29sdmVkU2NoZW1hPXRoaXMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHQuc2VydmljZS5yZXNvbHZlU2NoZW1hQ29udGVudChuLHQpfSkpLHRoaXMucmVzb2x2ZWRTY2hlbWF9LGUucHJvdG90eXBlLmNsZWFyU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIHQ9ISF0aGlzLnVucmVzb2x2ZWRTY2hlbWE7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMudW5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKSx0aGlzLmFuY2hvcnM9dm9pZCAwLHR9LGV9KCksUXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7bj09PXZvaWQgMCYmKG49W10pLHRoaXMuc2NoZW1hPXQsdGhpcy5lcnJvcnM9bn1yZXR1cm4gZX0oKSxOYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXtuPT09dm9pZCAwJiYobj1bXSksdGhpcy5zY2hlbWE9dCx0aGlzLmVycm9ycz1ufXJldHVybiBlLnByb3RvdHlwZS5nZXRTZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZSh0LHRoaXMuc2NoZW1hKTtpZihuKXJldHVybiBwZShuKX0sZS5wcm90b3R5cGUuZ2V0U2VjdGlvblJlY3Vyc2l2ZT1mdW5jdGlvbih0LG4pe2lmKCFufHx0eXBlb2Ygbj09ImJvb2xlYW4ifHx0Lmxlbmd0aD09PTApcmV0dXJuIG47dmFyIHI9dC5zaGlmdCgpO2lmKG4ucHJvcGVydGllcyYmdHlwZW9mIG4ucHJvcGVydGllc1tyXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKHQsbi5wcm9wZXJ0aWVzW3JdKTtpZihuLnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgaT0wLHM9T2JqZWN0LmtleXMobi5wYXR0ZXJuUHJvcGVydGllcyk7aTxzLmxlbmd0aDtpKyspe3ZhciBhPXNbaV0sbz1tbihhKTtpZihvPy50ZXN0KHIpKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUodCxuLnBhdHRlcm5Qcm9wZXJ0aWVzW2FdKX1lbHNle2lmKHR5cGVvZiBuLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT0ib2JqZWN0IilyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKHQsbi5hZGRpdGlvbmFsUHJvcGVydGllcyk7aWYoci5tYXRjaCgiWzAtOV0rIikpe2lmKEFycmF5LmlzQXJyYXkobi5pdGVtcykpe3ZhciBsPXBhcnNlSW50KHIsMTApO2lmKCFpc05hTihsKSYmbi5pdGVtc1tsXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKHQsbi5pdGVtc1tsXSl9ZWxzZSBpZihuLml0ZW1zKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUodCxuLml0ZW1zKX19fSxlfSgpLEd1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7dGhpcy5jb250ZXh0U2VydmljZT1uLHRoaXMucmVxdWVzdFNlcnZpY2U9dCx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1yfHxQcm9taXNlLHRoaXMuY2FsbE9uRGlzcG9zZT1bXSx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXM9e30sdGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM9W10sdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e319cmV0dXJuIGUucHJvdG90eXBlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHMpLmZpbHRlcihmdW5jdGlvbihuKXt2YXIgcj1rdC5wYXJzZShuKS5zY2hlbWU7cmV0dXJuIHIhPT0ic2NoZW1hc2VydmljZSImJighdHx8dChyKSl9KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwcm9taXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuY2FsbE9uRGlzcG9zZS5sZW5ndGg+MDspdGhpcy5jYWxsT25EaXNwb3NlLnBvcCgpKCl9LGUucHJvdG90eXBlLm9uUmVzb3VyY2VDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIG49dGhpczt0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMDt2YXIgcj0hMTt0PXR0KHQpO2Zvcih2YXIgaT1bdF0scz1PYmplY3Qua2V5cyh0aGlzLnNjaGVtYXNCeUlkKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG4uc2NoZW1hc0J5SWRbdV19KTtpLmxlbmd0aDspZm9yKHZhciBhPWkucG9wKCksbz0wO288cy5sZW5ndGg7bysrKXt2YXIgbD1zW29dO2wmJihsLnVyaT09PWF8fGwuZGVwZW5kZW5jaWVzLmhhcyhhKSkmJihsLnVyaSE9PWEmJmkucHVzaChsLnVyaSksbC5jbGVhclNjaGVtYSgpJiYocj0hMCksc1tvXT12b2lkIDApfXJldHVybiByfSxlLnByb3RvdHlwZS5zZXRTY2hlbWFDb250cmlidXRpb25zPWZ1bmN0aW9uKHQpe2lmKHQuc2NoZW1hcyl7dmFyIG49dC5zY2hlbWFzO2Zvcih2YXIgciBpbiBuKXt2YXIgaT10dChyKTt0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbaV09dGhpcy5hZGRTY2hlbWFIYW5kbGUoaSxuW3JdKX19aWYoQXJyYXkuaXNBcnJheSh0LnNjaGVtYUFzc29jaWF0aW9ucykpZm9yKHZhciBzPXQuc2NoZW1hQXNzb2NpYXRpb25zLGE9MCxvPXM7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV0sdT1sLnVyaXMubWFwKHR0KSxmPXRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbihsLnBhdHRlcm4sdSk7dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnMucHVzaChmKX19LGUucHJvdG90eXBlLmFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyB6dSh0aGlzLHQsbik7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbdF09cixyfSxlLnByb3RvdHlwZS5nZXRPckFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW3RdfHx0aGlzLmFkZFNjaGVtYUhhbmRsZSh0LG4pfSxlLnByb3RvdHlwZS5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uPWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IEh1KHQsbik7cmV0dXJuIHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChyKSxyfSxlLnByb3RvdHlwZS5yZWdpc3RlckV4dGVybmFsU2NoZW1hPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT10dCh0KTtyZXR1cm4gdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1tpXT0hMCx0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMCxuJiZ0aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24obixbaV0pLHI/dGhpcy5hZGRTY2hlbWFIYW5kbGUoaSxyKTp0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKGkpfSxlLnByb3RvdHlwZS5jbGVhckV4dGVybmFsU2NoZW1hcz1mdW5jdGlvbigpe3RoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9LHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwO2Zvcih2YXIgdCBpbiB0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXMpdGhpcy5zY2hlbWFzQnlJZFt0XT10aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbdF0sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1t0XT0hMDtmb3IodmFyIG49MCxyPXRoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO3RoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChpKX19LGUucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKHQpe3ZhciBuPXR0KHQpLHI9dGhpcy5zY2hlbWFzQnlJZFtuXTtyZXR1cm4gcj9yLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKX0sZS5wcm90b3R5cGUubG9hZFNjaGVtYT1mdW5jdGlvbih0KXtpZighdGhpcy5yZXF1ZXN0U2VydmljZSl7dmFyIG49VmUoImpzb24uc2NoZW1hLm5vcmVxdWVzdHNlcnZpY2UiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9Jy4gTm8gc2NoZW1hIHJlcXVlc3Qgc2VydmljZSBhdmFpbGFibGUiLEFuKHQpKTtyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IFF0KHt9LFtuXSkpfXJldHVybiB0aGlzLnJlcXVlc3RTZXJ2aWNlKHQpLnRoZW4oZnVuY3Rpb24ocil7aWYoIXIpe3ZhciBpPVZlKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogTm8gY29udGVudC4iLEFuKHQpKTtyZXR1cm4gbmV3IFF0KHt9LFtpXSl9dmFyIHM9e30sYT1bXTtzPWN1KHIsYSk7dmFyIG89YS5sZW5ndGg/W1ZlKCJqc29uLnNjaGVtYS5pbnZhbGlkRm9ybWF0IiwiVW5hYmxlIHRvIHBhcnNlIGNvbnRlbnQgZnJvbSAnezB9JzogUGFyc2UgZXJyb3IgYXQgb2Zmc2V0IHsxfS4iLEFuKHQpLGFbMF0ub2Zmc2V0KV06W107cmV0dXJuIG5ldyBRdChzLG8pfSxmdW5jdGlvbihyKXt2YXIgaT1yLnRvU3RyaW5nKCkscz1yLnRvU3RyaW5nKCkuc3BsaXQoIkVycm9yOiAiKTtyZXR1cm4gcy5sZW5ndGg+MSYmKGk9c1sxXSksVXQoaSwiLiIpJiYoaT1pLnN1YnN0cigwLGkubGVuZ3RoLTEpKSxuZXcgUXQoe30sW1ZlKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogezF9LiIsQW4odCksaSldKX0pfSxlLnByb3RvdHlwZS5yZXNvbHZlU2NoZW1hQ29udGVudD1mdW5jdGlvbih0LG4pe3ZhciByPXRoaXMsaT10LmVycm9ycy5zbGljZSgwKSxzPXQuc2NoZW1hO2lmKHMuJHNjaGVtYSl7dmFyIGE9dHQocy4kc2NoZW1hKTtpZihhPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDMvc2NoZW1hIilyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IE5hKHt9LFtWZSgianNvbi5zY2hlbWEuZHJhZnQwMy5ub3RzdXBwb3J0ZWQiLCJEcmFmdC0wMyBzY2hlbWFzIGFyZSBub3Qgc3VwcG9ydGVkLiIpXSkpO2E9PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9zY2hlbWEiP2kucHVzaChWZSgianNvbi5zY2hlbWEuZHJhZnQyMDE5MDkubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAxOS0wOSBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSk6YT09PSJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSImJmkucHVzaChWZSgianNvbi5zY2hlbWEuZHJhZnQyMDIwMTIubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAyMC0xMiBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSl9dmFyIG89dGhpcy5jb250ZXh0U2VydmljZSxsPWZ1bmN0aW9uKHYscCl7cD1kZWNvZGVVUklDb21wb25lbnQocCk7dmFyIHg9djtyZXR1cm4gcFswXT09PSIvIiYmKHA9cC5zdWJzdHJpbmcoMSkpLHAuc3BsaXQoIi8iKS5zb21lKGZ1bmN0aW9uKHkpe3JldHVybiB5PXkucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKSx4PXhbeV0sIXh9KSx4fSx1PWZ1bmN0aW9uKHYscCx4KXtyZXR1cm4gcC5hbmNob3JzfHwocC5hbmNob3JzPW0odikpLHAuYW5jaG9ycy5nZXQoeCl9LGY9ZnVuY3Rpb24odixwKXtmb3IodmFyIHggaW4gcClwLmhhc093blByb3BlcnR5KHgpJiYhdi5oYXNPd25Qcm9wZXJ0eSh4KSYmeCE9PSJpZCImJnghPT0iJGlkIiYmKHZbeF09cFt4XSl9LGg9ZnVuY3Rpb24odixwLHgseSl7dmFyIGI7eT09PXZvaWQgMHx8eS5sZW5ndGg9PT0wP2I9cDp5LmNoYXJBdCgwKT09PSIvIj9iPWwocCx5KTpiPXUocCx4LHkpLGI/Zih2LGIpOmkucHVzaChWZSgianNvbi5zY2hlbWEuaW52YWxpZGlkIiwiJHJlZiAnezB9JyBpbiAnezF9JyBjYW4gbm90IGJlIHJlc29sdmVkLiIseSx4LnVyaSkpfSxkPWZ1bmN0aW9uKHYscCx4LHkpe28mJiEvXltBLVphLXpdW0EtWmEtejAtOStcLS4rXSo6XC9cLy4qLy50ZXN0KHApJiYocD1vLnJlc29sdmVSZWxhdGl2ZVBhdGgocCx5LnVyaSkpLHA9dHQocCk7dmFyIGI9ci5nZXRPckFkZFNjaGVtYUhhbmRsZShwKTtyZXR1cm4gYi5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbihmdW5jdGlvbihMKXtpZih5LmRlcGVuZGVuY2llcy5hZGQocCksTC5lcnJvcnMubGVuZ3RoKXt2YXIgUz14P3ArIiMiK3g6cDtpLnB1c2goVmUoImpzb24uc2NoZW1hLnByb2JsZW1sb2FkaW5ncmVmIiwiUHJvYmxlbXMgbG9hZGluZyByZWZlcmVuY2UgJ3swfSc6IHsxfSIsUyxMLmVycm9yc1swXSkpfXJldHVybiBoKHYsTC5zY2hlbWEsYix4KSxnKHYsTC5zY2hlbWEsYil9KX0sZz1mdW5jdGlvbih2LHAseCl7dmFyIHk9W107cmV0dXJuIHIudHJhdmVyc2VOb2Rlcyh2LGZ1bmN0aW9uKGIpe2Zvcih2YXIgTD1uZXcgU2V0O2IuJHJlZjspe3ZhciBTPWIuJHJlZixfPVMuc3BsaXQoIiMiLDIpO2lmKGRlbGV0ZSBiLiRyZWYsX1swXS5sZW5ndGg+MCl7eS5wdXNoKGQoYixfWzBdLF9bMV0seCkpO3JldHVybn1lbHNlIGlmKCFMLmhhcyhTKSl7dmFyIE49X1sxXTtoKGIscCx4LE4pLEwuYWRkKFMpfX19KSxyLnByb21pc2UuYWxsKHkpfSxtPWZ1bmN0aW9uKHYpe3ZhciBwPW5ldyBNYXA7cmV0dXJuIHIudHJhdmVyc2VOb2Rlcyh2LGZ1bmN0aW9uKHgpe3ZhciB5PXguJGlkfHx4LmlkO2lmKHR5cGVvZiB5PT0ic3RyaW5nIiYmeS5jaGFyQXQoMCk9PT0iIyIpe3ZhciBiPXkuc3Vic3RyaW5nKDEpO3AuaGFzKGIpP2kucHVzaChWZSgianNvbi5zY2hlbWEuZHVwbGljYXRlaWQiLCJEdXBsaWNhdGUgaWQgZGVjbGFyYXRpb246ICd7MH0nIix5KSk6cC5zZXQoYix4KX19KSxwfTtyZXR1cm4gZyhzLHMsbikudGhlbihmdW5jdGlvbih2KXtyZXR1cm4gbmV3IE5hKHMsaSl9KX0sZS5wcm90b3R5cGUudHJhdmVyc2VOb2Rlcz1mdW5jdGlvbih0LG4pe2lmKCF0fHx0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtmb3IodmFyIHI9bmV3IFNldCxpPWZ1bmN0aW9uKCl7Zm9yKHZhciB1PVtdLGY9MDtmPGFyZ3VtZW50cy5sZW5ndGg7ZisrKXVbZl09YXJndW1lbnRzW2ZdO2Zvcih2YXIgaD0wLGQ9dTtoPGQubGVuZ3RoO2grKyl7dmFyIGc9ZFtoXTt0eXBlb2YgZz09Im9iamVjdCImJm8ucHVzaChnKX19LHM9ZnVuY3Rpb24oKXtmb3IodmFyIHU9W10sZj0wO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspdVtmXT1hcmd1bWVudHNbZl07Zm9yKHZhciBoPTAsZD11O2g8ZC5sZW5ndGg7aCsrKXt2YXIgZz1kW2hdO2lmKHR5cGVvZiBnPT0ib2JqZWN0Iilmb3IodmFyIG0gaW4gZyl7dmFyIHY9bSxwPWdbdl07dHlwZW9mIHA9PSJvYmplY3QiJiZvLnB1c2gocCl9fX0sYT1mdW5jdGlvbigpe2Zvcih2YXIgdT1bXSxmPTA7Zjxhcmd1bWVudHMubGVuZ3RoO2YrKyl1W2ZdPWFyZ3VtZW50c1tmXTtmb3IodmFyIGg9MCxkPXU7aDxkLmxlbmd0aDtoKyspe3ZhciBnPWRbaF07aWYoQXJyYXkuaXNBcnJheShnKSlmb3IodmFyIG09MCx2PWc7bTx2Lmxlbmd0aDttKyspe3ZhciBwPXZbbV07dHlwZW9mIHA9PSJvYmplY3QiJiZvLnB1c2gocCl9fX0sbz1bdF0sbD1vLnBvcCgpO2w7KXIuaGFzKGwpfHwoci5hZGQobCksbihsKSxpKGwuaXRlbXMsbC5hZGRpdGlvbmFsSXRlbXMsbC5hZGRpdGlvbmFsUHJvcGVydGllcyxsLm5vdCxsLmNvbnRhaW5zLGwucHJvcGVydHlOYW1lcyxsLmlmLGwudGhlbixsLmVsc2UpLHMobC5kZWZpbml0aW9ucyxsLnByb3BlcnRpZXMsbC5wYXR0ZXJuUHJvcGVydGllcyxsLmRlcGVuZGVuY2llcyksYShsLmFueU9mLGwuYWxsT2YsbC5vbmVPZixsLml0ZW1zKSksbD1vLnBvcCgpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGcm9tUHJvcGVydHk9ZnVuY3Rpb24odCxuKXt2YXIgcixpO2lmKCgocj1uLnJvb3QpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci50eXBlKT09PSJvYmplY3QiKWZvcih2YXIgcz0wLGE9bi5yb290LnByb3BlcnRpZXM7czxhLmxlbmd0aDtzKyspe3ZhciBvPWFbc107aWYoby5rZXlOb2RlLnZhbHVlPT09IiRzY2hlbWEiJiYoKGk9by52YWx1ZU5vZGUpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS50eXBlKT09PSJzdHJpbmciKXt2YXIgbD1vLnZhbHVlTm9kZS52YWx1ZTtyZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZSYmIS9eXHdbXHdcZCsuLV0qOi8udGVzdChsKSYmKGw9dGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlUmVsYXRpdmVQYXRoKGwsdCkpLGx9fX0sZS5wcm90b3R5cGUuZ2V0QXNzb2NpYXRlZFNjaGVtYXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1bXSxpPVh1KHQpLHM9MCxhPXRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM7czxhLmxlbmd0aDtzKyspe3ZhciBvPWFbc107aWYoby5tYXRjaGVzUGF0dGVybihpKSlmb3IodmFyIGw9MCx1PW8uZ2V0VVJJcygpO2w8dS5sZW5ndGg7bCsrKXt2YXIgZj11W2xdO25bZl18fChyLnB1c2goZiksbltmXT0hMCl9fXJldHVybiByfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24odCxuKXt2YXIgcj1uJiZ0aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eSh0LG4pO3JldHVybiByP1tyXTp0aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKHQpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbih0LG4pe2lmKG4pe3ZhciByPXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KHQsbik7aWYocil7dmFyIGk9dHQocik7cmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUoaSkuZ2V0UmVzb2x2ZWRTY2hlbWEoKX19aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PXQpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dmFyIHM9dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyh0KSxhPXMubGVuZ3RoPjA/dGhpcy5jcmVhdGVDb21iaW5lZFNjaGVtYSh0LHMpLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKTtyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT17cmVzb3VyY2U6dCxyZXNvbHZlZFNjaGVtYTphfSxhfSxlLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbih0LG4pe2lmKG4ubGVuZ3RoPT09MSlyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShuWzBdKTt2YXIgcj0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KHQpLGk9e2FsbE9mOm4ubWFwKGZ1bmN0aW9uKHMpe3JldHVybnskcmVmOnN9fSl9O3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShyLGkpfSxlLnByb3RvdHlwZS5nZXRNYXRjaGluZ1NjaGVtYXM9ZnVuY3Rpb24odCxuLHIpe2lmKHIpe3ZhciBpPXIuaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvbWF0Y2hpbmdTY2hlbWFzLyIrSnUrKyxzPXRoaXMuYWRkU2NoZW1hSGFuZGxlKGkscik7cmV0dXJuIHMuZ2V0UmVzb2x2ZWRTY2hlbWEoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBuLmdldE1hdGNoaW5nU2NoZW1hcyhhLnNjaGVtYSkuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiFvLmludmVydGVkfSl9KX1yZXR1cm4gdGhpcy5nZXRTY2hlbWFGb3JSZXNvdXJjZSh0LnVyaSxuKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBhP24uZ2V0TWF0Y2hpbmdTY2hlbWFzKGEuc2NoZW1hKS5maWx0ZXIoZnVuY3Rpb24obyl7cmV0dXJuIW8uaW52ZXJ0ZWR9KTpbXX0pfSxlfSgpLEp1PTA7ZnVuY3Rpb24gdHQoZSl7dHJ5e3JldHVybiBrdC5wYXJzZShlKS50b1N0cmluZyghMCl9Y2F0Y2h7cmV0dXJuIGV9fWZ1bmN0aW9uIFh1KGUpe3RyeXtyZXR1cm4ga3QucGFyc2UoZSkud2l0aCh7ZnJhZ21lbnQ6bnVsbCxxdWVyeTpudWxsfSkudG9TdHJpbmcoITApfWNhdGNoe3JldHVybiBlfX1mdW5jdGlvbiBBbihlKXt0cnl7dmFyIHQ9a3QucGFyc2UoZSk7aWYodC5zY2hlbWU9PT0iZmlsZSIpcmV0dXJuIHQuZnNQYXRofWNhdGNoe31yZXR1cm4gZX1mdW5jdGlvbiBRdShlLHQpe3ZhciBuPVtdLHI9W10saT1bXSxzPS0xLGE9TnQoZS5nZXRUZXh0KCksITEpLG89YS5zY2FuKCk7ZnVuY3Rpb24gbChJKXtuLnB1c2goSSksci5wdXNoKGkubGVuZ3RoKX1mb3IoO28hPT0xNzspe3N3aXRjaChvKXtjYXNlIDE6Y2FzZSAzOnt2YXIgdT1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGY9e3N0YXJ0TGluZTp1LGVuZExpbmU6dSxraW5kOm89PT0xPyJvYmplY3QiOiJhcnJheSJ9O2kucHVzaChmKTticmVha31jYXNlIDI6Y2FzZSA0Ont2YXIgaD1vPT09Mj8ib2JqZWN0IjoiYXJyYXkiO2lmKGkubGVuZ3RoPjAmJmlbaS5sZW5ndGgtMV0ua2luZD09PWgpe3ZhciBmPWkucG9wKCksZD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2YmJmQ+Zi5zdGFydExpbmUrMSYmcyE9PWYuc3RhcnRMaW5lJiYoZi5lbmRMaW5lPWQtMSxsKGYpLHM9Zi5zdGFydExpbmUpfWJyZWFrfWNhc2UgMTM6e3ZhciB1PWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZz1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpK2EuZ2V0VG9rZW5MZW5ndGgoKSkubGluZTthLmdldFRva2VuRXJyb3IoKT09PTEmJnUrMTxlLmxpbmVDb3VudD9hLnNldFBvc2l0aW9uKGUub2Zmc2V0QXQoTWUuY3JlYXRlKHUrMSwwKSkpOnU8ZyYmKGwoe3N0YXJ0TGluZTp1LGVuZExpbmU6ZyxraW5kOld0LkNvbW1lbnR9KSxzPXUpO2JyZWFrfWNhc2UgMTI6e3ZhciBtPWUuZ2V0VGV4dCgpLnN1YnN0cihhLmdldFRva2VuT2Zmc2V0KCksYS5nZXRUb2tlbkxlbmd0aCgpKSx2PW0ubWF0Y2goL15cL1wvXHMqIyhyZWdpb25cYil8KGVuZHJlZ2lvblxiKS8pO2lmKHYpe3ZhciBkPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7aWYodlsxXSl7dmFyIGY9e3N0YXJ0TGluZTpkLGVuZExpbmU6ZCxraW5kOld0LlJlZ2lvbn07aS5wdXNoKGYpfWVsc2V7Zm9yKHZhciBwPWkubGVuZ3RoLTE7cD49MCYmaVtwXS5raW5kIT09V3QuUmVnaW9uOylwLS07aWYocD49MCl7dmFyIGY9aVtwXTtpLmxlbmd0aD1wLGQ+Zi5zdGFydExpbmUmJnMhPT1mLnN0YXJ0TGluZSYmKGYuZW5kTGluZT1kLGwoZikscz1mLnN0YXJ0TGluZSl9fX1icmVha319bz1hLnNjYW4oKX12YXIgeD10JiZ0LnJhbmdlTGltaXQ7aWYodHlwZW9mIHghPSJudW1iZXIifHxuLmxlbmd0aDw9eClyZXR1cm4gbjt0JiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkKGUudXJpKTtmb3IodmFyIHk9W10sYj0wLEw9cjtiPEwubGVuZ3RoO2IrKyl7dmFyIFM9TFtiXTtTPDMwJiYoeVtTXT0oeVtTXXx8MCkrMSl9Zm9yKHZhciBfPTAsTj0wLHA9MDtwPHkubGVuZ3RoO3ArKyl7dmFyIEE9eVtwXTtpZihBKXtpZihBK18+eCl7Tj1wO2JyZWFrfV8rPUF9fWZvcih2YXIgTT1bXSxwPTA7cDxuLmxlbmd0aDtwKyspe3ZhciBTPXJbcF07dHlwZW9mIFM9PSJudW1iZXIiJiYoUzxOfHxTPT09TiYmXysrPHgpJiZNLnB1c2gobltwXSl9cmV0dXJuIE19ZnVuY3Rpb24gWnUoZSx0LG4pe2Z1bmN0aW9uIHIobyl7Zm9yKHZhciBsPWUub2Zmc2V0QXQobyksdT1uLmdldE5vZGVGcm9tT2Zmc2V0KGwsITApLGY9W107dTspe3N3aXRjaCh1LnR5cGUpe2Nhc2Uic3RyaW5nIjpjYXNlIm9iamVjdCI6Y2FzZSJhcnJheSI6dmFyIGg9dS5vZmZzZXQrMSxkPXUub2Zmc2V0K3UubGVuZ3RoLTE7aDxkJiZsPj1oJiZsPD1kJiZmLnB1c2goaShoLGQpKSxmLnB1c2goaSh1Lm9mZnNldCx1Lm9mZnNldCt1Lmxlbmd0aCkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOmNhc2UibnVsbCI6Y2FzZSJwcm9wZXJ0eSI6Zi5wdXNoKGkodS5vZmZzZXQsdS5vZmZzZXQrdS5sZW5ndGgpKTticmVha31pZih1LnR5cGU9PT0icHJvcGVydHkifHx1LnBhcmVudCYmdS5wYXJlbnQudHlwZT09PSJhcnJheSIpe3ZhciBnPWEodS5vZmZzZXQrdS5sZW5ndGgsNSk7ZyE9PS0xJiZmLnB1c2goaSh1Lm9mZnNldCxnKSl9dT11LnBhcmVudH1mb3IodmFyIG09dm9pZCAwLHY9Zi5sZW5ndGgtMTt2Pj0wO3YtLSltPXduLmNyZWF0ZShmW3ZdLG0pO3JldHVybiBtfHwobT13bi5jcmVhdGUoWC5jcmVhdGUobyxvKSkpLG19ZnVuY3Rpb24gaShvLGwpe3JldHVybiBYLmNyZWF0ZShlLnBvc2l0aW9uQXQobyksZS5wb3NpdGlvbkF0KGwpKX12YXIgcz1OdChlLmdldFRleHQoKSwhMCk7ZnVuY3Rpb24gYShvLGwpe3Muc2V0UG9zaXRpb24obyk7dmFyIHU9cy5zY2FuKCk7cmV0dXJuIHU9PT1sP3MuZ2V0VG9rZW5PZmZzZXQoKStzLmdldFRva2VuTGVuZ3RoKCk6LTF9cmV0dXJuIHQubWFwKHIpfWZ1bmN0aW9uIFl1KGUsdCl7dmFyIG49W107cmV0dXJuIHQudmlzaXQoZnVuY3Rpb24ocil7dmFyIGk7aWYoci50eXBlPT09InByb3BlcnR5IiYmci5rZXlOb2RlLnZhbHVlPT09IiRyZWYiJiYoKGk9ci52YWx1ZU5vZGUpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS50eXBlKT09PSJzdHJpbmciKXt2YXIgcz1yLnZhbHVlTm9kZS52YWx1ZSxhPWVjKHQscyk7aWYoYSl7dmFyIG89ZS5wb3NpdGlvbkF0KGEub2Zmc2V0KTtuLnB1c2goe3RhcmdldDoiIi5jb25jYXQoZS51cmksIiMiKS5jb25jYXQoby5saW5lKzEsIiwiKS5jb25jYXQoby5jaGFyYWN0ZXIrMSkscmFuZ2U6S3UoZSxyLnZhbHVlTm9kZSl9KX19cmV0dXJuITB9KSxQcm9taXNlLnJlc29sdmUobil9ZnVuY3Rpb24gS3UoZSx0KXtyZXR1cm4gWC5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KzEpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aC0xKSl9ZnVuY3Rpb24gZWMoZSx0KXt2YXIgbj10Yyh0KTtyZXR1cm4gbj9NcihuLGUucm9vdCk6bnVsbH1mdW5jdGlvbiBNcihlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodCYmdC50eXBlPT09Im9iamVjdCIpe3ZhciByPXQucHJvcGVydGllcy5maW5kKGZ1bmN0aW9uKGEpe3JldHVybiBhLmtleU5vZGUudmFsdWU9PT1ufSk7cmV0dXJuIHI/TXIoZSxyLnZhbHVlTm9kZSk6bnVsbH1lbHNlIGlmKHQmJnQudHlwZT09PSJhcnJheSImJm4ubWF0Y2goL14oMHxbMS05XVswLTldKikkLykpe3ZhciBpPU51bWJlci5wYXJzZUludChuKSxzPXQuaXRlbXNbaV07cmV0dXJuIHM/TXIoZSxzKTpudWxsfXJldHVybiBudWxsfWZ1bmN0aW9uIHRjKGUpe3JldHVybiBlPT09IiMiP1tdOmVbMF0hPT0iIyJ8fGVbMV0hPT0iLyI/bnVsbDplLnN1YnN0cmluZygyKS5zcGxpdCgvXC8vKS5tYXAobmMpfWZ1bmN0aW9uIG5jKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gcmMoZSl7dmFyIHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Usbj1uZXcgR3UoZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCk7bi5zZXRTY2hlbWFDb250cmlidXRpb25zKGtyKTt2YXIgcj1uZXcgTXUobixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcyksaT1uZXcgUnUobixlLmNvbnRyaWJ1dGlvbnMsdCkscz1uZXcgcXUobiksYT1uZXcgRnUobix0KTtyZXR1cm57Y29uZmlndXJlOmZ1bmN0aW9uKG8pe24uY2xlYXJFeHRlcm5hbFNjaGVtYXMoKSxvLnNjaGVtYXMmJm8uc2NoZW1hcy5mb3JFYWNoKGZ1bmN0aW9uKGwpe24ucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShsLnVyaSxsLmZpbGVNYXRjaCxsLnNjaGVtYSl9KSxhLmNvbmZpZ3VyZShvKX0scmVzZXRTY2hlbWE6ZnVuY3Rpb24obyl7cmV0dXJuIG4ub25SZXNvdXJjZUNoYW5nZShvKX0sZG9WYWxpZGF0aW9uOmEuZG9WYWxpZGF0aW9uLmJpbmQoYSksZ2V0TGFuZ3VhZ2VTdGF0dXM6YS5nZXRMYW5ndWFnZVN0YXR1cy5iaW5kKGEpLHBhcnNlSlNPTkRvY3VtZW50OmZ1bmN0aW9uKG8pe3JldHVybiBFdShvLHtjb2xsZWN0Q29tbWVudHM6ITB9KX0sbmV3SlNPTkRvY3VtZW50OmZ1bmN0aW9uKG8sbCl7cmV0dXJuIGt1KG8sbCl9LGdldE1hdGNoaW5nU2NoZW1hczpuLmdldE1hdGNoaW5nU2NoZW1hcy5iaW5kKG4pLGRvUmVzb2x2ZTpyLmRvUmVzb2x2ZS5iaW5kKHIpLGRvQ29tcGxldGU6ci5kb0NvbXBsZXRlLmJpbmQociksZmluZERvY3VtZW50U3ltYm9sczpzLmZpbmREb2N1bWVudFN5bWJvbHMuYmluZChzKSxmaW5kRG9jdW1lbnRTeW1ib2xzMjpzLmZpbmREb2N1bWVudFN5bWJvbHMyLmJpbmQocyksZmluZERvY3VtZW50Q29sb3JzOnMuZmluZERvY3VtZW50Q29sb3JzLmJpbmQocyksZ2V0Q29sb3JQcmVzZW50YXRpb25zOnMuZ2V0Q29sb3JQcmVzZW50YXRpb25zLmJpbmQocyksZG9Ib3ZlcjppLmRvSG92ZXIuYmluZChpKSxnZXRGb2xkaW5nUmFuZ2VzOlF1LGdldFNlbGVjdGlvblJhbmdlczpadSxmaW5kRGVmaW5pdGlvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoW10pfSxmaW5kTGlua3M6WXUsZm9ybWF0OmZ1bmN0aW9uKG8sbCx1KXt2YXIgZj12b2lkIDA7aWYobCl7dmFyIGg9by5vZmZzZXRBdChsLnN0YXJ0KSxkPW8ub2Zmc2V0QXQobC5lbmQpLWg7Zj17b2Zmc2V0OmgsbGVuZ3RoOmR9fXZhciBnPXt0YWJTaXplOnU/dS50YWJTaXplOjQsaW5zZXJ0U3BhY2VzOnU/Lmluc2VydFNwYWNlcz09PSEwLGluc2VydEZpbmFsTmV3bGluZTp1Py5pbnNlcnRGaW5hbE5ld2xpbmU9PT0hMCxlb2w6YApgfTtyZXR1cm4gZ3Uoby5nZXRUZXh0KCksZixnKS5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIFJlLnJlcGxhY2UoWC5jcmVhdGUoby5wb3NpdGlvbkF0KG0ub2Zmc2V0KSxvLnBvc2l0aW9uQXQobS5vZmZzZXQrbS5sZW5ndGgpKSxtLmNvbnRlbnQpfSl9fX12YXIgQWE7dHlwZW9mIGZldGNoPCJ1IiYmKEFhPWZ1bmN0aW9uKGUpe3JldHVybiBmZXRjaChlKS50aGVuKHQ9PnQudGV4dCgpKX0pO3ZhciBpYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2N0eD1lLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3M9dC5sYW5ndWFnZVNldHRpbmdzLHRoaXMuX2xhbmd1YWdlSWQ9dC5sYW5ndWFnZUlkLHRoaXMuX2xhbmd1YWdlU2VydmljZT1yYyh7d29ya3NwYWNlQ29udGV4dDp7cmVzb2x2ZVJlbGF0aXZlUGF0aDoobixyKT0+e2NvbnN0IGk9ci5zdWJzdHIoMCxyLmxhc3RJbmRleE9mKCIvIikrMSk7cmV0dXJuIG9jKGksbil9fSxzY2hlbWFSZXF1ZXN0U2VydmljZTp0LmVuYWJsZVNjaGVtYVJlcXVlc3Q/QWE6dm9pZCAwLGNsaWVudENhcGFiaWxpdGllczp3ci5MQVRFU1R9KSx0aGlzLl9sYW5ndWFnZVNlcnZpY2UuY29uZmlndXJlKHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfWFzeW5jIGRvVmFsaWRhdGlvbihlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYodCl7bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9WYWxpZGF0aW9uKHQsbix0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX1hc3luYyBkb0NvbXBsZXRlKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvQ29tcGxldGUobix0LHIpfWFzeW5jIGRvUmVzb2x2ZShlKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvUmVzb2x2ZShlKX1hc3luYyBkb0hvdmVyKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvSG92ZXIobix0LHIpfWFzeW5jIGZvcm1hdChlLHQsbil7bGV0IHI9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5mb3JtYXQocix0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgcmVzZXRTY2hlbWEoZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9sYW5ndWFnZVNlcnZpY2UucmVzZXRTY2hlbWEoZSkpfWFzeW5jIGZpbmREb2N1bWVudFN5bWJvbHMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRTeW1ib2xzMih0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZmluZERvY3VtZW50Q29sb3JzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50Q29sb3JzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBnZXRDb2xvclByZXNlbnRhdGlvbnMoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQocikscz10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Q29sb3JQcmVzZW50YXRpb25zKHIsaSx0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocyl9YXN5bmMgZ2V0Rm9sZGluZ1JhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Rm9sZGluZ1JhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKSxpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRTZWxlY3Rpb25SYW5nZXMobix0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgcGFyc2VKU09ORG9jdW1lbnQoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybiBudWxsO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4pfWFzeW5jIGdldE1hdGNoaW5nU2NoZW1hcyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldE1hdGNoaW5nU2NoZW1hcyh0LG4pKX1fZ2V0VGV4dERvY3VtZW50KGUpe2xldCB0PXRoaXMuX2N0eC5nZXRNaXJyb3JNb2RlbHMoKTtmb3IobGV0IG4gb2YgdClpZihuLnVyaS50b1N0cmluZygpPT09ZSlyZXR1cm4geHIuY3JlYXRlKGUsdGhpcy5fbGFuZ3VhZ2VJZCxuLnZlcnNpb24sbi5nZXRWYWx1ZSgpKTtyZXR1cm4gbnVsbH19LHNjPTQ3LFJyPTQ2O2Z1bmN0aW9uIGFjKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT1zY31mdW5jdGlvbiBvYyhlLHQpe2lmKGFjKHQpKXtjb25zdCBuPWt0LnBhcnNlKGUpLHI9dC5zcGxpdCgiLyIpO3JldHVybiBuLndpdGgoe3BhdGg6Q2Eocil9KS50b1N0cmluZygpfXJldHVybiBsYyhlLHQpfWZ1bmN0aW9uIENhKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IHIgb2YgZSlyLmxlbmd0aD09PTB8fHIubGVuZ3RoPT09MSYmci5jaGFyQ29kZUF0KDApPT09UnJ8fChyLmxlbmd0aD09PTImJnIuY2hhckNvZGVBdCgwKT09PVJyJiZyLmNoYXJDb2RlQXQoMSk9PT1Scj90LnBvcCgpOnQucHVzaChyKSk7ZS5sZW5ndGg+MSYmZVtlLmxlbmd0aC0xXS5sZW5ndGg9PT0wJiZ0LnB1c2goIiIpO2xldCBuPXQuam9pbigiLyIpO3JldHVybiBlWzBdLmxlbmd0aD09PTAmJihuPSIvIituKSxufWZ1bmN0aW9uIGxjKGUsLi4udCl7Y29uc3Qgbj1rdC5wYXJzZShlKSxyPW4ucGF0aC5zcGxpdCgiLyIpO2ZvcihsZXQgaSBvZiB0KXIucHVzaCguLi5pLnNwbGl0KCIvIikpO3JldHVybiBuLndpdGgoe3BhdGg6Q2Eocil9KS50b1N0cmluZygpfXNlbGYub25tZXNzYWdlPSgpPT57UHMoKGUsdCk9Pm5ldyBpYyhlLHQpKX19KSgpOwo=",c=Z=>Uint8Array.from(atob(Z),l=>l.charCodeAt(0)),d=typeof window<"u"&&window.Blob&&new Blob([c(m)],{type:"text/javascript;charset=utf-8"});function G(Z){let l;try{if(l=d&&(window.URL||window.webkitURL).createObjectURL(d),!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,"+m,{name:Z==null?void 0:Z.name})}finally{l&&(window.URL||window.webkitURL).revokeObjectURL(l)}}export{G as default};
|
|
1
|
+
const m="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NsYXNzIFBhe2NvbnN0cnVjdG9yKCl7dGhpcy5saXN0ZW5lcnM9W10sdGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyPWZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyB0LnN0YWNrP3V0LmlzRXJyb3JOb1RlbGVtZXRyeSh0KT9uZXcgdXQodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6bmV3IEVycm9yKHQubWVzc2FnZStgCgpgK3Quc3RhY2spOnR9LDApfX1lbWl0KHQpe3RoaXMubGlzdGVuZXJzLmZvckVhY2gobj0+e24odCl9KX1vblVuZXhwZWN0ZWRFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCksdGhpcy5lbWl0KHQpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IodCl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKHQpfX1jb25zdCBGYT1uZXcgUGE7ZnVuY3Rpb24gRHIoZSl7SWEoZSl8fEZhLm9uVW5leHBlY3RlZEVycm9yKGUpfWZ1bmN0aW9uIFZyKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3R7bmFtZTp0LG1lc3NhZ2U6bn09ZSxyPWUuc3RhY2t0cmFjZXx8ZS5zdGFjaztyZXR1cm57JGlzRXJyb3I6ITAsbmFtZTp0LG1lc3NhZ2U6bixzdGFjazpyLG5vVGVsZW1ldHJ5OnV0LmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3Qga249IkNhbmNlbGVkIjtmdW5jdGlvbiBJYShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhPyEwOmUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09a24mJmUubWVzc2FnZT09PWtufWNsYXNzIERhIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcihrbiksdGhpcy5uYW1lPXRoaXMubWVzc2FnZX19Y2xhc3MgdXQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkNvZGVFeHBlY3RlZEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQpe2lmKHQgaW5zdGFuY2VvZiB1dClyZXR1cm4gdDtjb25zdCBuPW5ldyB1dDtyZXR1cm4gbi5tZXNzYWdlPXQubWVzc2FnZSxuLnN0YWNrPXQuc3RhY2ssbn1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KHQpe3JldHVybiB0Lm5hbWU9PT0iQ29kZUV4cGVjdGVkRXJyb3IifX1jbGFzcyBqZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHR8fCJBbiB1bmV4cGVjdGVkIGJ1ZyBvY2N1cnJlZC4iKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxqZS5wcm90b3R5cGUpfX1mdW5jdGlvbiBWYShlLHQpe2NvbnN0IG49dGhpcztsZXQgcj0hMSxpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByfHwocj0hMCxpPWUuYXBwbHkobixhcmd1bWVudHMpKSxpfX12YXIgWnQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoYil7cmV0dXJuIGImJnR5cGVvZiBiPT0ib2JqZWN0IiYmdHlwZW9mIGJbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1lLmlzPXQ7Y29uc3Qgbj1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiByKCl7cmV0dXJuIG59ZS5lbXB0eT1yO2Z1bmN0aW9uKmkoYil7eWllbGQgYn1lLnNpbmdsZT1pO2Z1bmN0aW9uIHMoYil7cmV0dXJuIHQoYik/YjppKGIpfWUud3JhcD1zO2Z1bmN0aW9uIGEoYil7cmV0dXJuIGJ8fG59ZS5mcm9tPWE7ZnVuY3Rpb24qbyhiKXtmb3IobGV0IEw9Yi5sZW5ndGgtMTtMPj0wO0wtLSl5aWVsZCBiW0xdfWUucmV2ZXJzZT1vO2Z1bmN0aW9uIGwoYil7cmV0dXJuIWJ8fGJbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lPT09ITB9ZS5pc0VtcHR5PWw7ZnVuY3Rpb24gdShiKXtyZXR1cm4gYltTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfWUuZmlyc3Q9dTtmdW5jdGlvbiBmKGIsTCl7Zm9yKGNvbnN0IFMgb2YgYilpZihMKFMpKXJldHVybiEwO3JldHVybiExfWUuc29tZT1mO2Z1bmN0aW9uIGgoYixMKXtmb3IoY29uc3QgUyBvZiBiKWlmKEwoUykpcmV0dXJuIFN9ZS5maW5kPWg7ZnVuY3Rpb24qZChiLEwpe2Zvcihjb25zdCBTIG9mIGIpTChTKSYmKHlpZWxkIFMpfWUuZmlsdGVyPWQ7ZnVuY3Rpb24qZyhiLEwpe2xldCBTPTA7Zm9yKGNvbnN0IF8gb2YgYil5aWVsZCBMKF8sUysrKX1lLm1hcD1nO2Z1bmN0aW9uKm0oLi4uYil7Zm9yKGNvbnN0IEwgb2YgYil5aWVsZCpMfWUuY29uY2F0PW07ZnVuY3Rpb24gdihiLEwsUyl7bGV0IF89Uztmb3IoY29uc3QgTiBvZiBiKV89TChfLE4pO3JldHVybiBffWUucmVkdWNlPXY7ZnVuY3Rpb24qcChiLEwsUz1iLmxlbmd0aCl7Zm9yKEw8MCYmKEwrPWIubGVuZ3RoKSxTPDA/Uys9Yi5sZW5ndGg6Uz5iLmxlbmd0aCYmKFM9Yi5sZW5ndGgpO0w8UztMKyspeWllbGQgYltMXX1lLnNsaWNlPXA7ZnVuY3Rpb24geChiLEw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXtjb25zdCBTPVtdO2lmKEw9PT0wKXJldHVybltTLGJdO2NvbnN0IF89YltTeW1ib2wuaXRlcmF0b3JdKCk7Zm9yKGxldCBOPTA7TjxMO04rKyl7Y29uc3QgQT1fLm5leHQoKTtpZihBLmRvbmUpcmV0dXJuW1MsZS5lbXB0eSgpXTtTLnB1c2goQS52YWx1ZSl9cmV0dXJuW1Mse1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIF99fV19ZS5jb25zdW1lPXg7YXN5bmMgZnVuY3Rpb24geShiKXtjb25zdCBMPVtdO2ZvciBhd2FpdChjb25zdCBTIG9mIGIpTC5wdXNoKFMpO3JldHVybiBQcm9taXNlLnJlc29sdmUoTCl9ZS5hc3luY1RvQXJyYXk9eX0pKFp0fHwoWnQ9e30pKTtmdW5jdGlvbiBjYyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBmYyhlLHQpe31mdW5jdGlvbiBPcihlKXtpZihadC5pcyhlKSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBlKWlmKG4pdHJ5e24uZGlzcG9zZSgpfWNhdGNoKHIpe3QucHVzaChyKX1pZih0Lmxlbmd0aD09PTEpdGhyb3cgdFswXTtpZih0Lmxlbmd0aD4xKXRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcih0LCJFbmNvdW50ZXJlZCBlcnJvcnMgd2hpbGUgZGlzcG9zaW5nIG9mIHN0b3JlIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/W106ZX1lbHNlIGlmKGUpcmV0dXJuIGUuZGlzcG9zZSgpLGV9ZnVuY3Rpb24gT2EoLi4uZSl7cmV0dXJuIFl0KCgpPT5PcihlKSl9ZnVuY3Rpb24gWXQoZSl7cmV0dXJue2Rpc3Bvc2U6VmEoKCk9PntlKCl9KX19Y2xhc3MgY3R7Y29uc3RydWN0b3IoKXt0aGlzLl90b0Rpc3Bvc2U9bmV3IFNldCx0aGlzLl9pc0Rpc3Bvc2VkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5faXNEaXNwb3NlZD0hMCx0aGlzLmNsZWFyKCkpfWdldCBpc0Rpc3Bvc2VkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWR9Y2xlYXIoKXtpZih0aGlzLl90b0Rpc3Bvc2Uuc2l6ZSE9PTApdHJ5e09yKHRoaXMuX3RvRGlzcG9zZSl9ZmluYWxseXt0aGlzLl90b0Rpc3Bvc2UuY2xlYXIoKX19YWRkKHQpe2lmKCF0KXJldHVybiB0O2lmKHQ9PT10aGlzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGEgZGlzcG9zYWJsZSBvbiBpdHNlbGYhIik7cmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ/Y3QuRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HfHxjb25zb2xlLndhcm4obmV3IEVycm9yKCJUcnlpbmcgdG8gYWRkIGEgZGlzcG9zYWJsZSB0byBhIERpc3Bvc2FibGVTdG9yZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuIFRoZSBhZGRlZCBvYmplY3Qgd2lsbCBiZSBsZWFrZWQhIikuc3RhY2spOnRoaXMuX3RvRGlzcG9zZS5hZGQodCksdH1kZWxldGVBbmRMZWFrKHQpe3QmJnRoaXMuX3RvRGlzcG9zZS5oYXModCkmJnRoaXMuX3RvRGlzcG9zZS5kZWxldGUodCl9fWN0LkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtjbGFzcyBNdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyBjdCx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3Rlcih0KXtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQodCl9fU10Lk5vbmU9T2JqZWN0LmZyZWV6ZSh7ZGlzcG9zZSgpe319KTtjbGFzcyBRe2NvbnN0cnVjdG9yKHQpe3RoaXMuZWxlbWVudD10LHRoaXMubmV4dD1RLlVuZGVmaW5lZCx0aGlzLnByZXY9US5VbmRlZmluZWR9fVEuVW5kZWZpbmVkPW5ldyBRKHZvaWQgMCk7Y2xhc3MgamF7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1RLlVuZGVmaW5lZCx0aGlzLl9sYXN0PVEuVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1RLlVuZGVmaW5lZH1jbGVhcigpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PVEuVW5kZWZpbmVkOyl7Y29uc3Qgbj10Lm5leHQ7dC5wcmV2PVEuVW5kZWZpbmVkLHQubmV4dD1RLlVuZGVmaW5lZCx0PW59dGhpcy5fZmlyc3Q9US5VbmRlZmluZWQsdGhpcy5fbGFzdD1RLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITEpfXB1c2godCl7cmV0dXJuIHRoaXMuX2luc2VydCh0LCEwKX1faW5zZXJ0KHQsbil7Y29uc3Qgcj1uZXcgUSh0KTtpZih0aGlzLl9maXJzdD09PVEuVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PXIsdGhpcy5fbGFzdD1yO2Vsc2UgaWYobil7Y29uc3Qgcz10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9cixyLnByZXY9cyxzLm5leHQ9cn1lbHNle2NvbnN0IHM9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9cixyLm5leHQ9cyxzLnByZXY9cn10aGlzLl9zaXplKz0xO2xldCBpPSExO3JldHVybigpPT57aXx8KGk9ITAsdGhpcy5fcmVtb3ZlKHIpKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PVEuVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksdH19cG9wKCl7aWYodGhpcy5fbGFzdCE9PVEuVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLHR9fV9yZW1vdmUodCl7aWYodC5wcmV2IT09US5VbmRlZmluZWQmJnQubmV4dCE9PVEuVW5kZWZpbmVkKXtjb25zdCBuPXQucHJldjtuLm5leHQ9dC5uZXh0LHQubmV4dC5wcmV2PW59ZWxzZSB0LnByZXY9PT1RLlVuZGVmaW5lZCYmdC5uZXh0PT09US5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PVEuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9US5VbmRlZmluZWQpOnQubmV4dD09PVEuVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9US5VbmRlZmluZWQpOnQucHJldj09PVEuVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PVEuVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PVEuVW5kZWZpbmVkOyl5aWVsZCB0LmVsZW1lbnQsdD10Lm5leHR9fWNvbnN0IHFhPWdsb2JhbFRoaXMucGVyZm9ybWFuY2UmJnR5cGVvZiBnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIjtjbGFzcyBLdHtzdGF0aWMgY3JlYXRlKHQpe3JldHVybiBuZXcgS3QodCl9Y29uc3RydWN0b3IodCl7dGhpcy5fbm93PXFhJiZ0PT09ITE/RGF0ZS5ub3c6Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZS5ub3cuYmluZChnbG9iYWxUaGlzLnBlcmZvcm1hbmNlKSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfXJlc2V0KCl7dGhpcy5fc3RhcnRUaW1lPXRoaXMuX25vdygpLHRoaXMuX3N0b3BUaW1lPS0xfWVsYXBzZWQoKXtyZXR1cm4gdGhpcy5fc3RvcFRpbWUhPT0tMT90aGlzLl9zdG9wVGltZS10aGlzLl9zdGFydFRpbWU6dGhpcy5fbm93KCktdGhpcy5fc3RhcnRUaW1lfX12YXIgRW47KGZ1bmN0aW9uKGUpe2UuTm9uZT0oKT0+TXQuTm9uZTtmdW5jdGlvbiB0KEMsdyl7cmV0dXJuIGgoQywoKT0+e30sMCx2b2lkIDAsITAsdm9pZCAwLHcpfWUuZGVmZXI9dDtmdW5jdGlvbiBuKEMpe3JldHVybih3LFQ9bnVsbCxGKT0+e2xldCBWPSExLE87cmV0dXJuIE89QyhSPT57aWYoIVYpcmV0dXJuIE8/Ty5kaXNwb3NlKCk6Vj0hMCx3LmNhbGwoVCxSKX0sbnVsbCxGKSxWJiZPLmRpc3Bvc2UoKSxPfX1lLm9uY2U9bjtmdW5jdGlvbiByKEMsdyxUKXtyZXR1cm4gdSgoRixWPW51bGwsTyk9PkMoUj0+Ri5jYWxsKFYsdyhSKSksbnVsbCxPKSxUKX1lLm1hcD1yO2Z1bmN0aW9uIGkoQyx3LFQpe3JldHVybiB1KChGLFY9bnVsbCxPKT0+QyhSPT57dyhSKSxGLmNhbGwoVixSKX0sbnVsbCxPKSxUKX1lLmZvckVhY2g9aTtmdW5jdGlvbiBzKEMsdyxUKXtyZXR1cm4gdSgoRixWPW51bGwsTyk9PkMoUj0+dyhSKSYmRi5jYWxsKFYsUiksbnVsbCxPKSxUKX1lLmZpbHRlcj1zO2Z1bmN0aW9uIGEoQyl7cmV0dXJuIEN9ZS5zaWduYWw9YTtmdW5jdGlvbiBvKC4uLkMpe3JldHVybih3LFQ9bnVsbCxGKT0+e2NvbnN0IFY9T2EoLi4uQy5tYXAoTz0+TyhSPT53LmNhbGwoVCxSKSkpKTtyZXR1cm4gZihWLEYpfX1lLmFueT1vO2Z1bmN0aW9uIGwoQyx3LFQsRil7bGV0IFY9VDtyZXR1cm4gcihDLE89PihWPXcoVixPKSxWKSxGKX1lLnJlZHVjZT1sO2Z1bmN0aW9uIHUoQyx3KXtsZXQgVDtjb25zdCBGPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyKCl7VD1DKFYuZmlyZSxWKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtUPy5kaXNwb3NlKCl9fSxWPW5ldyBBZShGKTtyZXR1cm4gdz8uYWRkKFYpLFYuZXZlbnR9ZnVuY3Rpb24gZihDLHcpe3JldHVybiB3IGluc3RhbmNlb2YgQXJyYXk/dy5wdXNoKEMpOncmJncuYWRkKEMpLEN9ZnVuY3Rpb24gaChDLHcsVD0xMDAsRj0hMSxWPSExLE8sUil7bGV0IGssUCxELEI9MCxVO2NvbnN0IEc9e2xlYWtXYXJuaW5nVGhyZXNob2xkOk8sb25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe2s9QyhsZT0+e0IrKyxQPXcoUCxsZSksRiYmIUQmJihkZS5maXJlKFApLFA9dm9pZCAwKSxVPSgpPT57Y29uc3QgYmU9UDtQPXZvaWQgMCxEPXZvaWQgMCwoIUZ8fEI+MSkmJmRlLmZpcmUoYmUpLEI9MH0sdHlwZW9mIFQ9PSJudW1iZXIiPyhjbGVhclRpbWVvdXQoRCksRD1zZXRUaW1lb3V0KFUsVCkpOkQ9PT12b2lkIDAmJihEPTAscXVldWVNaWNyb3Rhc2soVSkpfSl9LG9uV2lsbFJlbW92ZUxpc3RlbmVyKCl7ViYmQj4wJiZVPy4oKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtVPXZvaWQgMCxrLmRpc3Bvc2UoKX19LGRlPW5ldyBBZShHKTtyZXR1cm4gUj8uYWRkKGRlKSxkZS5ldmVudH1lLmRlYm91bmNlPWg7ZnVuY3Rpb24gZChDLHc9MCxUKXtyZXR1cm4gZS5kZWJvdW5jZShDLChGLFYpPT5GPyhGLnB1c2goViksRik6W1ZdLHcsdm9pZCAwLCEwLHZvaWQgMCxUKX1lLmFjY3VtdWxhdGU9ZDtmdW5jdGlvbiBnKEMsdz0oRixWKT0+Rj09PVYsVCl7bGV0IEY9ITAsVjtyZXR1cm4gcyhDLE89Pntjb25zdCBSPUZ8fCF3KE8sVik7cmV0dXJuIEY9ITEsVj1PLFJ9LFQpfWUubGF0Y2g9ZztmdW5jdGlvbiBtKEMsdyxUKXtyZXR1cm5bZS5maWx0ZXIoQyx3LFQpLGUuZmlsdGVyKEMsRj0+IXcoRiksVCldfWUuc3BsaXQ9bTtmdW5jdGlvbiB2KEMsdz0hMSxUPVtdLEYpe2xldCBWPVQuc2xpY2UoKSxPPUMoUD0+e1Y/Vi5wdXNoKFApOmsuZmlyZShQKX0pO0YmJkYuYWRkKE8pO2NvbnN0IFI9KCk9PntWPy5mb3JFYWNoKFA9PmsuZmlyZShQKSksVj1udWxsfSxrPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe098fChPPUMoUD0+ay5maXJlKFApKSxGJiZGLmFkZChPKSl9LG9uRGlkQWRkRmlyc3RMaXN0ZW5lcigpe1YmJih3P3NldFRpbWVvdXQoUik6UigpKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtPJiZPLmRpc3Bvc2UoKSxPPW51bGx9fSk7cmV0dXJuIEYmJkYuYWRkKGspLGsuZXZlbnR9ZS5idWZmZXI9djtmdW5jdGlvbiBwKEMsdyl7cmV0dXJuKEYsVixPKT0+e2NvbnN0IFI9dyhuZXcgeSk7cmV0dXJuIEMoZnVuY3Rpb24oayl7Y29uc3QgUD1SLmV2YWx1YXRlKGspO1AhPT14JiZGLmNhbGwoVixQKX0sdm9pZCAwLE8pfX1lLmNoYWluPXA7Y29uc3QgeD1TeW1ib2woIkhhbHRDaGFpbmFibGUiKTtjbGFzcyB5e2NvbnN0cnVjdG9yKCl7dGhpcy5zdGVwcz1bXX1tYXAodyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaCh3KSx0aGlzfWZvckVhY2godyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChUPT4odyhUKSxUKSksdGhpc31maWx0ZXIodyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChUPT53KFQpP1Q6eCksdGhpc31yZWR1Y2UodyxUKXtsZXQgRj1UO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goVj0+KEY9dyhGLFYpLEYpKSx0aGlzfWxhdGNoKHc9KFQsRik9PlQ9PT1GKXtsZXQgVD0hMCxGO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goVj0+e2NvbnN0IE89VHx8IXcoVixGKTtyZXR1cm4gVD0hMSxGPVYsTz9WOnh9KSx0aGlzfWV2YWx1YXRlKHcpe2Zvcihjb25zdCBUIG9mIHRoaXMuc3RlcHMpaWYodz1UKHcpLHc9PT14KWJyZWFrO3JldHVybiB3fX1mdW5jdGlvbiBiKEMsdyxUPUY9PkYpe2NvbnN0IEY9KC4uLmspPT5SLmZpcmUoVCguLi5rKSksVj0oKT0+Qy5vbih3LEYpLE89KCk9PkMucmVtb3ZlTGlzdGVuZXIodyxGKSxSPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjpWLG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOk99KTtyZXR1cm4gUi5ldmVudH1lLmZyb21Ob2RlRXZlbnRFbWl0dGVyPWI7ZnVuY3Rpb24gTChDLHcsVD1GPT5GKXtjb25zdCBGPSguLi5rKT0+Ui5maXJlKFQoLi4uaykpLFY9KCk9PkMuYWRkRXZlbnRMaXN0ZW5lcih3LEYpLE89KCk9PkMucmVtb3ZlRXZlbnRMaXN0ZW5lcih3LEYpLFI9bmV3IEFlKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOlYsb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6T30pO3JldHVybiBSLmV2ZW50fWUuZnJvbURPTUV2ZW50RW1pdHRlcj1MO2Z1bmN0aW9uIFMoQyl7cmV0dXJuIG5ldyBQcm9taXNlKHc9Pm4oQykodykpfWUudG9Qcm9taXNlPVM7ZnVuY3Rpb24gXyhDKXtjb25zdCB3PW5ldyBBZTtyZXR1cm4gQy50aGVuKFQ9Pnt3LmZpcmUoVCl9LCgpPT57dy5maXJlKHZvaWQgMCl9KS5maW5hbGx5KCgpPT57dy5kaXNwb3NlKCl9KSx3LmV2ZW50fWUuZnJvbVByb21pc2U9XztmdW5jdGlvbiBOKEMsdyxUKXtyZXR1cm4gdyhUKSxDKEY9PncoRikpfWUucnVuQW5kU3Vic2NyaWJlPU47Y2xhc3MgQXtjb25zdHJ1Y3Rvcih3LFQpe3RoaXMuX29ic2VydmFibGU9dyx0aGlzLl9jb3VudGVyPTAsdGhpcy5faGFzQ2hhbmdlZD0hMTtjb25zdCBGPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT57dy5hZGRPYnNlcnZlcih0aGlzKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9Pnt3LnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBBZShGKSxUJiZULmFkZCh0aGlzLmVtaXR0ZXIpfWJlZ2luVXBkYXRlKHcpe3RoaXMuX2NvdW50ZXIrK31oYW5kbGVQb3NzaWJsZUNoYW5nZSh3KXt9aGFuZGxlQ2hhbmdlKHcsVCl7dGhpcy5faGFzQ2hhbmdlZD0hMH1lbmRVcGRhdGUodyl7dGhpcy5fY291bnRlci0tLHRoaXMuX2NvdW50ZXI9PT0wJiYodGhpcy5fb2JzZXJ2YWJsZS5yZXBvcnRDaGFuZ2VzKCksdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5fb2JzZXJ2YWJsZS5nZXQoKSkpKX19ZnVuY3Rpb24gTShDLHcpe3JldHVybiBuZXcgQShDLHcpLmVtaXR0ZXIuZXZlbnR9ZS5mcm9tT2JzZXJ2YWJsZT1NO2Z1bmN0aW9uIEkoQyl7cmV0dXJuKHcsVCxGKT0+e2xldCBWPTAsTz0hMTtjb25zdCBSPXtiZWdpblVwZGF0ZSgpe1YrK30sZW5kVXBkYXRlKCl7Vi0tLFY9PT0wJiYoQy5yZXBvcnRDaGFuZ2VzKCksTyYmKE89ITEsdy5jYWxsKFQpKSl9LGhhbmRsZVBvc3NpYmxlQ2hhbmdlKCl7fSxoYW5kbGVDaGFuZ2UoKXtPPSEwfX07Qy5hZGRPYnNlcnZlcihSKSxDLnJlcG9ydENoYW5nZXMoKTtjb25zdCBrPXtkaXNwb3NlKCl7Qy5yZW1vdmVPYnNlcnZlcihSKX19O3JldHVybiBGIGluc3RhbmNlb2YgY3Q/Ri5hZGQoayk6QXJyYXkuaXNBcnJheShGKSYmRi5wdXNoKGspLGt9fWUuZnJvbU9ic2VydmFibGVMaWdodD1JfSkoRW58fChFbj17fSkpO2NsYXNzIGZ0e2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXJDb3VudD0wLHRoaXMuaW52b2NhdGlvbkNvdW50PTAsdGhpcy5lbGFwc2VkT3ZlcmFsbD0wLHRoaXMuZHVyYXRpb25zPVtdLHRoaXMubmFtZT1gJHt0fV8ke2Z0Ll9pZFBvb2wrK31gLGZ0LmFsbC5hZGQodGhpcyl9c3RhcnQodCl7dGhpcy5fc3RvcFdhdGNoPW5ldyBLdCx0aGlzLmxpc3RlbmVyQ291bnQ9dH1zdG9wKCl7aWYodGhpcy5fc3RvcFdhdGNoKXtjb25zdCB0PXRoaXMuX3N0b3BXYXRjaC5lbGFwc2VkKCk7dGhpcy5kdXJhdGlvbnMucHVzaCh0KSx0aGlzLmVsYXBzZWRPdmVyYWxsKz10LHRoaXMuaW52b2NhdGlvbkNvdW50Kz0xLHRoaXMuX3N0b3BXYXRjaD12b2lkIDB9fX1mdC5hbGw9bmV3IFNldCxmdC5faWRQb29sPTA7bGV0IEJhPS0xO2NsYXNzIFVhe2NvbnN0cnVjdG9yKHQsbj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE4KS5zbGljZSgyLDUpKXt0aGlzLnRocmVzaG9sZD10LHRoaXMubmFtZT1uLHRoaXMuX3dhcm5Db3VudGRvd249MH1kaXNwb3NlKCl7dmFyIHQ7KHQ9dGhpcy5fc3RhY2tzKT09PW51bGx8fHQ9PT12b2lkIDB8fHQuY2xlYXIoKX1jaGVjayh0LG4pe2NvbnN0IHI9dGhpcy50aHJlc2hvbGQ7aWYocjw9MHx8bjxyKXJldHVybjt0aGlzLl9zdGFja3N8fCh0aGlzLl9zdGFja3M9bmV3IE1hcCk7Y29uc3QgaT10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO2lmKHRoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxpKzEpLHRoaXMuX3dhcm5Db3VudGRvd24tPTEsdGhpcy5fd2FybkNvdW50ZG93bjw9MCl7dGhpcy5fd2FybkNvdW50ZG93bj1yKi41O2xldCBzLGE9MDtmb3IoY29uc3RbbyxsXW9mIHRoaXMuX3N0YWNrcykoIXN8fGE8bCkmJihzPW8sYT1sKTtjb25zb2xlLndhcm4oYFske3RoaXMubmFtZX1dIHBvdGVudGlhbCBsaXN0ZW5lciBMRUFLIGRldGVjdGVkLCBoYXZpbmcgJHtufSBsaXN0ZW5lcnMgYWxyZWFkeS4gTU9TVCBmcmVxdWVudCBsaXN0ZW5lciAoJHthfSk6YCksY29uc29sZS53YXJuKHMpfXJldHVybigpPT57Y29uc3Qgcz10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO3RoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxzLTEpfX19Y2xhc3MgTW57c3RhdGljIGNyZWF0ZSgpe3ZhciB0O3JldHVybiBuZXcgTW4oKHQ9bmV3IEVycm9yKCkuc3RhY2spIT09bnVsbCYmdCE9PXZvaWQgMD90OiIiKX1jb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXR9cHJpbnQoKXtjb25zb2xlLndhcm4odGhpcy52YWx1ZS5zcGxpdChgCmApLnNsaWNlKDIpLmpvaW4oYApgKSl9fWNsYXNzIFJue2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH19Y29uc3QgJGE9MjtjbGFzcyBBZXtjb25zdHJ1Y3Rvcih0KXt2YXIgbixyLGkscyxhO3RoaXMuX3NpemU9MCx0aGlzLl9vcHRpb25zPXQsdGhpcy5fbGVha2FnZU1vbj0hKChuPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8bj09PXZvaWQgMCkmJm4ubGVha1dhcm5pbmdUaHJlc2hvbGQ/bmV3IFVhKChpPShyPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5sZWFrV2FybmluZ1RocmVzaG9sZCkhPT1udWxsJiZpIT09dm9pZCAwP2k6QmEpOnZvaWQgMCx0aGlzLl9wZXJmTW9uPSEoKHM9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxzPT09dm9pZCAwKSYmcy5fcHJvZk5hbWU/bmV3IGZ0KHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT0oYT10aGlzLl9vcHRpb25zKT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEuZGVsaXZlcnlRdWV1ZX1kaXNwb3NlKCl7dmFyIHQsbixyLGk7dGhpcy5fZGlzcG9zZWR8fCh0aGlzLl9kaXNwb3NlZD0hMCwoKHQ9dGhpcy5fZGVsaXZlcnlRdWV1ZSk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LmN1cnJlbnQpPT09dGhpcyYmdGhpcy5fZGVsaXZlcnlRdWV1ZS5yZXNldCgpLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz12b2lkIDAsdGhpcy5fc2l6ZT0wKSwocj0obj10aGlzLl9vcHRpb25zKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4ub25EaWRSZW1vdmVMYXN0TGlzdGVuZXIpPT09bnVsbHx8cj09PXZvaWQgMHx8ci5jYWxsKG4pLChpPXRoaXMuX2xlYWthZ2VNb24pPT09bnVsbHx8aT09PXZvaWQgMHx8aS5kaXNwb3NlKCkpfWdldCBldmVudCgpe3ZhciB0O3JldHVybih0PXRoaXMuX2V2ZW50KSE9PW51bGwmJnQhPT12b2lkIDB8fCh0aGlzLl9ldmVudD0obixyLGkpPT57dmFyIHMsYSxvLGwsdTtpZih0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKjMpcmV0dXJuIGNvbnNvbGUud2FybihgWyR7dGhpcy5fbGVha2FnZU1vbi5uYW1lfV0gUkVGVVNFUyB0byBhY2NlcHQgbmV3IGxpc3RlbmVycyBiZWNhdXNlIGl0IGV4Y2VlZGVkIGl0cyB0aHJlc2hvbGQgYnkgZmFyYCksTXQuTm9uZTtpZih0aGlzLl9kaXNwb3NlZClyZXR1cm4gTXQuTm9uZTtyJiYobj1uLmJpbmQocikpO2NvbnN0IGY9bmV3IFJuKG4pO2xldCBoO3RoaXMuX2xlYWthZ2VNb24mJnRoaXMuX3NpemU+PU1hdGguY2VpbCh0aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZCouMikmJihmLnN0YWNrPU1uLmNyZWF0ZSgpLGg9dGhpcy5fbGVha2FnZU1vbi5jaGVjayhmLnN0YWNrLHRoaXMuX3NpemUrMSkpLHRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiBSbj8oKHU9dGhpcy5fZGVsaXZlcnlRdWV1ZSkhPT1udWxsJiZ1IT09dm9pZCAwfHwodGhpcy5fZGVsaXZlcnlRdWV1ZT1uZXcgV2EpLHRoaXMuX2xpc3RlbmVycz1bdGhpcy5fbGlzdGVuZXJzLGZdKTp0aGlzLl9saXN0ZW5lcnMucHVzaChmKTooKGE9KHM9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzLm9uV2lsbEFkZEZpcnN0TGlzdGVuZXIpPT09bnVsbHx8YT09PXZvaWQgMHx8YS5jYWxsKHMsdGhpcyksdGhpcy5fbGlzdGVuZXJzPWYsKGw9KG89dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxvPT09dm9pZCAwP3ZvaWQgMDpvLm9uRGlkQWRkRmlyc3RMaXN0ZW5lcik9PT1udWxsfHxsPT09dm9pZCAwfHxsLmNhbGwobyx0aGlzKSksdGhpcy5fc2l6ZSsrO2NvbnN0IGQ9WXQoKCk9PntoPy4oKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcihmKX0pO3JldHVybiBpIGluc3RhbmNlb2YgY3Q/aS5hZGQoZCk6QXJyYXkuaXNBcnJheShpKSYmaS5wdXNoKGQpLGR9KSx0aGlzLl9ldmVudH1fcmVtb3ZlTGlzdGVuZXIodCl7dmFyIG4scixpLHM7aWYoKHI9KG49dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLm9uV2lsbFJlbW92ZUxpc3RlbmVyKT09PW51bGx8fHI9PT12b2lkIDB8fHIuY2FsbChuLHRoaXMpLCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2lmKHRoaXMuX3NpemU9PT0xKXt0aGlzLl9saXN0ZW5lcnM9dm9pZCAwLChzPShpPXRoaXMuX29wdGlvbnMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcik9PT1udWxsfHxzPT09dm9pZCAwfHxzLmNhbGwoaSx0aGlzKSx0aGlzLl9zaXplPTA7cmV0dXJufWNvbnN0IGE9dGhpcy5fbGlzdGVuZXJzLG89YS5pbmRleE9mKHQpO2lmKG89PT0tMSl0aHJvdyBjb25zb2xlLmxvZygiZGlzcG9zZWQ/Iix0aGlzLl9kaXNwb3NlZCksY29uc29sZS5sb2coInNpemU/Iix0aGlzLl9zaXplKSxjb25zb2xlLmxvZygiYXJyPyIsSlNPTi5zdHJpbmdpZnkodGhpcy5fbGlzdGVuZXJzKSksbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gZGlzcG9zZSB1bmtub3duIGxpc3RlbmVyIik7dGhpcy5fc2l6ZS0tLGFbb109dm9pZCAwO2NvbnN0IGw9dGhpcy5fZGVsaXZlcnlRdWV1ZS5jdXJyZW50PT09dGhpcztpZih0aGlzLl9zaXplKiRhPD1hLmxlbmd0aCl7bGV0IHU9MDtmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdP2FbdSsrXT1hW2ZdOmwmJih0aGlzLl9kZWxpdmVyeVF1ZXVlLmVuZC0tLHU8dGhpcy5fZGVsaXZlcnlRdWV1ZS5pJiZ0aGlzLl9kZWxpdmVyeVF1ZXVlLmktLSk7YS5sZW5ndGg9dX19X2RlbGl2ZXIodCxuKXt2YXIgcjtpZighdClyZXR1cm47Y29uc3QgaT0oKHI9dGhpcy5fb3B0aW9ucyk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLm9uTGlzdGVuZXJFcnJvcil8fERyO2lmKCFpKXt0LnZhbHVlKG4pO3JldHVybn10cnl7dC52YWx1ZShuKX1jYXRjaChzKXtpKHMpfX1fZGVsaXZlclF1ZXVlKHQpe2NvbnN0IG49dC5jdXJyZW50Ll9saXN0ZW5lcnM7Zm9yKDt0Lmk8dC5lbmQ7KXRoaXMuX2RlbGl2ZXIoblt0LmkrK10sdC52YWx1ZSk7dC5yZXNldCgpfWZpcmUodCl7dmFyIG4scixpLHM7aWYoISgobj10aGlzLl9kZWxpdmVyeVF1ZXVlKT09PW51bGx8fG49PT12b2lkIDApJiZuLmN1cnJlbnQmJih0aGlzLl9kZWxpdmVyUXVldWUodGhpcy5fZGVsaXZlcnlRdWV1ZSksKHI9dGhpcy5fcGVyZk1vbik9PT1udWxsfHxyPT09dm9pZCAwfHxyLnN0b3AoKSksKGk9dGhpcy5fcGVyZk1vbik9PT1udWxsfHxpPT09dm9pZCAwfHxpLnN0YXJ0KHRoaXMuX3NpemUpLHRoaXMuX2xpc3RlbmVycylpZih0aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiBSbil0aGlzLl9kZWxpdmVyKHRoaXMuX2xpc3RlbmVycyx0KTtlbHNle2NvbnN0IGE9dGhpcy5fZGVsaXZlcnlRdWV1ZTthLmVucXVldWUodGhpcyx0LHRoaXMuX2xpc3RlbmVycy5sZW5ndGgpLHRoaXMuX2RlbGl2ZXJRdWV1ZShhKX0ocz10aGlzLl9wZXJmTW9uKT09PW51bGx8fHM9PT12b2lkIDB8fHMuc3RvcCgpfWhhc0xpc3RlbmVycygpe3JldHVybiB0aGlzLl9zaXplPjB9fWNsYXNzIFdhe2NvbnN0cnVjdG9yKCl7dGhpcy5pPS0xLHRoaXMuZW5kPTB9ZW5xdWV1ZSh0LG4scil7dGhpcy5pPTAsdGhpcy5lbmQ9cix0aGlzLmN1cnJlbnQ9dCx0aGlzLnZhbHVlPW59cmVzZXQoKXt0aGlzLmk9dGhpcy5lbmQsdGhpcy5jdXJyZW50PXZvaWQgMCx0aGlzLnZhbHVlPXZvaWQgMH19ZnVuY3Rpb24gSGEoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIn1mdW5jdGlvbiB6YShlKXtsZXQgdD1bXTtmb3IoO09iamVjdC5wcm90b3R5cGUhPT1lOyl0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gdH1mdW5jdGlvbiBUbihlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIHphKGUpKXR5cGVvZiBlW25dPT0iZnVuY3Rpb24iJiZ0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gR2EoZSx0KXtjb25zdCBuPWk9PmZ1bmN0aW9uKCl7Y29uc3Qgcz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoaSxzKX0scj17fTtmb3IoY29uc3QgaSBvZiBlKXJbaV09bihpKTtyZXR1cm4gcn1sZXQgSmE9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQubG9jYXRpb24mJmRvY3VtZW50LmxvY2F0aW9uLmhhc2guaW5kZXhPZigicHNldWRvPXRydWUiKT49MDtmdW5jdGlvbiBYYShlLHQpe2xldCBuO3JldHVybiB0Lmxlbmd0aD09PTA/bj1lOm49ZS5yZXBsYWNlKC9ceyhcZCspXH0vZywocixpKT0+e2NvbnN0IHM9aVswXSxhPXRbc107bGV0IG89cjtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmciP289YToodHlwZW9mIGE9PSJudW1iZXIifHx0eXBlb2YgYT09ImJvb2xlYW4ifHxhPT09dm9pZCAwfHxhPT09bnVsbCkmJihvPVN0cmluZyhhKSksb30pLEphJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKSxufWZ1bmN0aW9uIFooZSx0LC4uLm4pe3JldHVybiBYYSh0LG4pfWZ1bmN0aW9uIGhjKGUpe312YXIgUG4sRm47Y29uc3QgaHQ9ImVuIjtsZXQgSW49ITEsRG49ITEsVm49ITEsZW4sT249aHQsanI9aHQsUWEsQ2U7Y29uc3QgbnQ9Z2xvYmFsVGhpcztsZXQgdWU7dHlwZW9mIG50LnZzY29kZTwidSImJnR5cGVvZiBudC52c2NvZGUucHJvY2VzczwidSI/dWU9bnQudnNjb2RlLnByb2Nlc3M6dHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YoKFBuPXByb2Nlc3M9PW51bGw/dm9pZCAwOnByb2Nlc3MudmVyc2lvbnMpPT09bnVsbHx8UG49PT12b2lkIDA/dm9pZCAwOlBuLm5vZGUpPT0ic3RyaW5nIiYmKHVlPXByb2Nlc3MpO2NvbnN0IFphPXR5cGVvZigoRm49dWU/LnZlcnNpb25zKT09PW51bGx8fEZuPT09dm9pZCAwP3ZvaWQgMDpGbi5lbGVjdHJvbik9PSJzdHJpbmciJiZ1ZT8udHlwZT09PSJyZW5kZXJlciI7aWYodHlwZW9mIHVlPT0ib2JqZWN0Iil7SW49dWUucGxhdGZvcm09PT0id2luMzIiLERuPXVlLnBsYXRmb3JtPT09ImRhcndpbiIsVm49dWUucGxhdGZvcm09PT0ibGludXgiLFZuJiZ1ZS5lbnYuU05BUCYmdWUuZW52LlNOQVBfUkVWSVNJT04sdWUuZW52LkNJfHx1ZS5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLGVuPWh0LE9uPWh0O2NvbnN0IGU9dWUuZW52LlZTQ09ERV9OTFNfQ09ORklHO2lmKGUpdHJ5e2NvbnN0IHQ9SlNPTi5wYXJzZShlKSxuPXQuYXZhaWxhYmxlTGFuZ3VhZ2VzWyIqIl07ZW49dC5sb2NhbGUsanI9dC5vc0xvY2FsZSxPbj1ufHxodCxRYT10Ll90cmFuc2xhdGlvbnNDb25maWdGaWxlfWNhdGNoe319ZWxzZSB0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmIVphPyhDZT1uYXZpZ2F0b3IudXNlckFnZW50LEluPUNlLmluZGV4T2YoIldpbmRvd3MiKT49MCxEbj1DZS5pbmRleE9mKCJNYWNpbnRvc2giKT49MCwoQ2UuaW5kZXhPZigiTWFjaW50b3NoIik+PTB8fENlLmluZGV4T2YoImlQYWQiKT49MHx8Q2UuaW5kZXhPZigiaVBob25lIik+PTApJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4wLFZuPUNlLmluZGV4T2YoIkxpbnV4Iik+PTAsQ2U/LmluZGV4T2YoIk1vYmkiKT49MCxaKHtrZXk6ImVuc3VyZUxvYWRlclBsdWdpbklzTG9hZGVkIixjb21tZW50Olsie0xvY2tlZH0iXX0sIl8iKSxlbj1odCxPbj1lbixqcj1uYXZpZ2F0b3IubGFuZ3VhZ2UpOmNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2NvbnN0IFJ0PUluLFlhPURuLFRlPUNlLEthPXR5cGVvZiBudC5wb3N0TWVzc2FnZT09ImZ1bmN0aW9uIiYmIW50LmltcG9ydFNjcmlwdHM7KCgpPT57aWYoS2Epe2NvbnN0IGU9W107bnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbj0+e2lmKG4uZGF0YSYmbi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKWZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3Qgcz1lW3JdO2lmKHMuaWQ9PT1uLmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspe2Uuc3BsaWNlKHIsMSkscy5jYWxsYmFjaygpO3JldHVybn19fSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksbnQucG9zdE1lc3NhZ2Uoe3ZzY29kZVNjaGVkdWxlQXN5bmNXb3JrOnJ9LCIqIil9fXJldHVybiBlPT5zZXRUaW1lb3V0KGUpfSkoKTtjb25zdCBlbz0hIShUZSYmVGUuaW5kZXhPZigiQ2hyb21lIik+PTApO1RlJiZUZS5pbmRleE9mKCJGaXJlZm94Iik+PTAsIWVvJiZUZSYmVGUuaW5kZXhPZigiU2FmYXJpIik+PTAsVGUmJlRlLmluZGV4T2YoIkVkZy8iKT49MCxUZSYmVGUuaW5kZXhPZigiQW5kcm9pZCIpPj0wO2NsYXNzIHRve2NvbnN0cnVjdG9yKHQsbj1KU09OLnN0cmluZ2lmeSl7dGhpcy5mbj10LHRoaXMuX2NvbXB1dGVLZXk9bix0aGlzLmxhc3RDYWNoZT12b2lkIDAsdGhpcy5sYXN0QXJnS2V5PXZvaWQgMH1nZXQodCl7Y29uc3Qgbj10aGlzLl9jb21wdXRlS2V5KHQpO3JldHVybiB0aGlzLmxhc3RBcmdLZXkhPT1uJiYodGhpcy5sYXN0QXJnS2V5PW4sdGhpcy5sYXN0Q2FjaGU9dGhpcy5mbih0KSksdGhpcy5sYXN0Q2FjaGV9fWNsYXNzIHFye2NvbnN0cnVjdG9yKHQpe3RoaXMuZXhlY3V0b3I9dCx0aGlzLl9kaWRSdW49ITF9Z2V0IHZhbHVlKCl7aWYoIXRoaXMuX2RpZFJ1bil0cnl7dGhpcy5fdmFsdWU9dGhpcy5leGVjdXRvcigpfWNhdGNoKHQpe3RoaXMuX2Vycm9yPXR9ZmluYWxseXt0aGlzLl9kaWRSdW49ITB9aWYodGhpcy5fZXJyb3IpdGhyb3cgdGhpcy5fZXJyb3I7cmV0dXJuIHRoaXMuX3ZhbHVlfWdldCByYXdWYWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX19dmFyIGR0O2Z1bmN0aW9uIG5vKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9ZnVuY3Rpb24gcm8oZSl7cmV0dXJuIGUuc3BsaXQoL1xyXG58XHJ8XG4vKX1mdW5jdGlvbiBpbyhlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KHQpO2lmKHIhPT0zMiYmciE9PTkpcmV0dXJuIHR9cmV0dXJuLTF9ZnVuY3Rpb24gc28oZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihyIT09MzImJnIhPT05KXJldHVybiBufXJldHVybi0xfWZ1bmN0aW9uIEJyKGUpe3JldHVybiBlPj02NSYmZTw9OTB9ZnVuY3Rpb24gam4oZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBhbyhlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfWZ1bmN0aW9uIG9vKGUsdCl7cmV0dXJuKGUtNTUyOTY8PDEwKSsodC01NjMyMCkrNjU1MzZ9ZnVuY3Rpb24gbG8oZSx0LG4pe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pO2lmKGpuKHIpJiZuKzE8dCl7Y29uc3QgaT1lLmNoYXJDb2RlQXQobisxKTtpZihhbyhpKSlyZXR1cm4gb28ocixpKX1yZXR1cm4gcn1jb25zdCB1bz0vXltcdFxuXHJceDIwLVx4N0VdKiQvO2Z1bmN0aW9uIGNvKGUpe3JldHVybiB1by50ZXN0KGUpfWNsYXNzIHJ0e3N0YXRpYyBnZXRJbnN0YW5jZSh0KXtyZXR1cm4gZHQuY2FjaGUuZ2V0KEFycmF5LmZyb20odCkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIGR0Ll9sb2NhbGVzLnZhbHVlfWNvbnN0cnVjdG9yKHQpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9dH1pc0FtYmlndW91cyh0KXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXModCl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUodCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KHQpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX1kdD1ydCxydC5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhPW5ldyBxcigoKT0+SlNPTi5wYXJzZSgneyJfY29tbW9uIjpbODIzMiwzMiw4MjMzLDMyLDU3NjAsMzIsODE5MiwzMiw4MTkzLDMyLDgxOTQsMzIsODE5NSwzMiw4MTk2LDMyLDgxOTcsMzIsODE5OCwzMiw4MjAwLDMyLDgyMDEsMzIsODIwMiwzMiw4Mjg3LDMyLDgxOTksMzIsODIzOSwzMiwyMDQyLDk1LDY1MTAxLDk1LDY1MTAyLDk1LDY1MTAzLDk1LDgyMDgsNDUsODIwOSw0NSw4MjEwLDQ1LDY1MTEyLDQ1LDE3NDgsNDUsODI1OSw0NSw3MjcsNDUsODcyMiw0NSwxMDEzNCw0NSwxMTQ1MCw0NSwxNTQ5LDQ0LDE2NDMsNDQsODIxOCw0NCwxODQsNDQsNDIyMzMsNDQsODk0LDU5LDIzMDcsNTgsMjY5MSw1OCwxNDE3LDU4LDE3OTUsNTgsMTc5Niw1OCw1ODY4LDU4LDY1MDcyLDU4LDYxNDcsNTgsNjE1Myw1OCw4MjgyLDU4LDE0NzUsNTgsNzYwLDU4LDQyODg5LDU4LDg3NTgsNTgsNzIwLDU4LDQyMjM3LDU4LDQ1MSwzMywxMTYwMSwzMyw2NjAsNjMsNTc3LDYzLDI0MjksNjMsNTAzOCw2Myw0MjczMSw2MywxMTkxNDksNDYsODIyOCw0NiwxNzkzLDQ2LDE3OTQsNDYsNDI1MTAsNDYsNjgxNzYsNDYsMTYzMiw0NiwxNzc2LDQ2LDQyMjMyLDQ2LDEzNzMsOTYsNjUyODcsOTYsODIxOSw5Niw4MjQyLDk2LDEzNzAsOTYsMTUyMyw5Niw4MTc1LDk2LDY1MzQ0LDk2LDkwMCw5Niw4MTg5LDk2LDgxMjUsOTYsODEyNyw5Niw4MTkwLDk2LDY5Nyw5Niw4ODQsOTYsNzEyLDk2LDcxNCw5Niw3MTUsOTYsNzU2LDk2LDY5OSw5Niw3MDEsOTYsNzAwLDk2LDcwMiw5Niw0Mjg5Miw5NiwxNDk3LDk2LDIwMzYsOTYsMjAzNyw5Niw1MTk0LDk2LDU4MzYsOTYsOTQwMzMsOTYsOTQwMzQsOTYsNjUzMzksOTEsMTAwODgsNDAsMTAwOTgsNDAsMTIzMDgsNDAsNjQ4MzAsNDAsNjUzNDEsOTMsMTAwODksNDEsMTAwOTksNDEsMTIzMDksNDEsNjQ4MzEsNDEsMTAxMDAsMTIzLDExOTA2MCwxMjMsMTAxMDEsMTI1LDY1MzQyLDk0LDgyNzAsNDIsMTY0NSw0Miw4NzI3LDQyLDY2MzM1LDQyLDU5NDEsNDcsODI1Nyw0Nyw4NzI1LDQ3LDgyNjAsNDcsOTU4NSw0NywxMDE4Nyw0NywxMDc0NCw0NywxMTkzNTQsNDcsMTI3NTUsNDcsMTIzMzksNDcsMTE0NjIsNDcsMjAwMzEsNDcsMTIwMzUsNDcsNjUzNDAsOTIsNjUxMjgsOTIsODcyNiw5MiwxMDE4OSw5MiwxMDc0MSw5MiwxMDc0NSw5MiwxMTkzMTEsOTIsMTE5MzU1LDkyLDEyNzU2LDkyLDIwMDIyLDkyLDEyMDM0LDkyLDQyODcyLDM4LDcwOCw5NCw3MTAsOTQsNTg2OSw0MywxMDEzMyw0Myw2NjIwMyw0Myw4MjQ5LDYwLDEwMDk0LDYwLDcwNiw2MCwxMTkzNTAsNjAsNTE3Niw2MCw1ODEwLDYwLDUxMjAsNjEsMTE4NDAsNjEsMTI0NDgsNjEsNDIyMzksNjEsODI1MCw2MiwxMDA5NSw2Miw3MDcsNjIsMTE5MzUxLDYyLDUxNzEsNjIsOTQwMTUsNjIsODI3NSwxMjYsNzMyLDEyNiw4MTI4LDEyNiw4NzY0LDEyNiw2NTM3MiwxMjQsNjUyOTMsNDUsMTIwNzg0LDUwLDEyMDc5NCw1MCwxMjA4MDQsNTAsMTIwODE0LDUwLDEyMDgyNCw1MCwxMzAwMzQsNTAsNDI4NDIsNTAsNDIzLDUwLDEwMDAsNTAsNDI1NjQsNTAsNTMxMSw1MCw0MjczNSw1MCwxMTkzMDIsNTEsMTIwNzg1LDUxLDEyMDc5NSw1MSwxMjA4MDUsNTEsMTIwODE1LDUxLDEyMDgyNSw1MSwxMzAwMzUsNTEsNDI5MjMsNTEsNTQwLDUxLDQzOSw1MSw0Mjg1OCw1MSwxMTQ2OCw1MSwxMjQ4LDUxLDk0MDExLDUxLDcxODgyLDUxLDEyMDc4Niw1MiwxMjA3OTYsNTIsMTIwODA2LDUyLDEyMDgxNiw1MiwxMjA4MjYsNTIsMTMwMDM2LDUyLDUwNzAsNTIsNzE4NTUsNTIsMTIwNzg3LDUzLDEyMDc5Nyw1MywxMjA4MDcsNTMsMTIwODE3LDUzLDEyMDgyNyw1MywxMzAwMzcsNTMsNDQ0LDUzLDcxODY3LDUzLDEyMDc4OCw1NCwxMjA3OTgsNTQsMTIwODA4LDU0LDEyMDgxOCw1NCwxMjA4MjgsNTQsMTMwMDM4LDU0LDExNDc0LDU0LDUxMDIsNTQsNzE4OTMsNTQsMTE5MzE0LDU1LDEyMDc4OSw1NSwxMjA3OTksNTUsMTIwODA5LDU1LDEyMDgxOSw1NSwxMjA4MjksNTUsMTMwMDM5LDU1LDY2NzcwLDU1LDcxODc4LDU1LDI4MTksNTYsMjUzOCw1NiwyNjY2LDU2LDEyNTEzMSw1NiwxMjA3OTAsNTYsMTIwODAwLDU2LDEyMDgxMCw1NiwxMjA4MjAsNTYsMTIwODMwLDU2LDEzMDA0MCw1Niw1NDcsNTYsNTQ2LDU2LDY2MzMwLDU2LDI2NjMsNTcsMjkyMCw1NywyNTQxLDU3LDM0MzcsNTcsMTIwNzkxLDU3LDEyMDgwMSw1NywxMjA4MTEsNTcsMTIwODIxLDU3LDEyMDgzMSw1NywxMzAwNDEsNTcsNDI4NjIsNTcsMTE0NjYsNTcsNzE4ODQsNTcsNzE4NTIsNTcsNzE4OTQsNTcsOTA4Miw5Nyw2NTM0NSw5NywxMTk4MzQsOTcsMTE5ODg2LDk3LDExOTkzOCw5NywxMTk5OTAsOTcsMTIwMDQyLDk3LDEyMDA5NCw5NywxMjAxNDYsOTcsMTIwMTk4LDk3LDEyMDI1MCw5NywxMjAzMDIsOTcsMTIwMzU0LDk3LDEyMDQwNiw5NywxMjA0NTgsOTcsNTkzLDk3LDk0NSw5NywxMjA1MTQsOTcsMTIwNTcyLDk3LDEyMDYzMCw5NywxMjA2ODgsOTcsMTIwNzQ2LDk3LDY1MzEzLDY1LDExOTgwOCw2NSwxMTk4NjAsNjUsMTE5OTEyLDY1LDExOTk2NCw2NSwxMjAwMTYsNjUsMTIwMDY4LDY1LDEyMDEyMCw2NSwxMjAxNzIsNjUsMTIwMjI0LDY1LDEyMDI3Niw2NSwxMjAzMjgsNjUsMTIwMzgwLDY1LDEyMDQzMiw2NSw5MTMsNjUsMTIwNDg4LDY1LDEyMDU0Niw2NSwxMjA2MDQsNjUsMTIwNjYyLDY1LDEyMDcyMCw2NSw1MDM0LDY1LDU1NzMsNjUsNDIyMjIsNjUsOTQwMTYsNjUsNjYyMDgsNjUsMTE5ODM1LDk4LDExOTg4Nyw5OCwxMTk5MzksOTgsMTE5OTkxLDk4LDEyMDA0Myw5OCwxMjAwOTUsOTgsMTIwMTQ3LDk4LDEyMDE5OSw5OCwxMjAyNTEsOTgsMTIwMzAzLDk4LDEyMDM1NSw5OCwxMjA0MDcsOTgsMTIwNDU5LDk4LDM4OCw5OCw1MDcxLDk4LDUyMzQsOTgsNTU1MSw5OCw2NTMxNCw2Niw4NDkyLDY2LDExOTgwOSw2NiwxMTk4NjEsNjYsMTE5OTEzLDY2LDEyMDAxNyw2NiwxMjAwNjksNjYsMTIwMTIxLDY2LDEyMDE3Myw2NiwxMjAyMjUsNjYsMTIwMjc3LDY2LDEyMDMyOSw2NiwxMjAzODEsNjYsMTIwNDMzLDY2LDQyOTMyLDY2LDkxNCw2NiwxMjA0ODksNjYsMTIwNTQ3LDY2LDEyMDYwNSw2NiwxMjA2NjMsNjYsMTIwNzIxLDY2LDUxMDgsNjYsNTYyMyw2Niw0MjE5Miw2Niw2NjE3OCw2Niw2NjIwOSw2Niw2NjMwNSw2Niw2NTM0Nyw5OSw4NTczLDk5LDExOTgzNiw5OSwxMTk4ODgsOTksMTE5OTQwLDk5LDExOTk5Miw5OSwxMjAwNDQsOTksMTIwMDk2LDk5LDEyMDE0OCw5OSwxMjAyMDAsOTksMTIwMjUyLDk5LDEyMDMwNCw5OSwxMjAzNTYsOTksMTIwNDA4LDk5LDEyMDQ2MCw5OSw3NDI4LDk5LDEwMTAsOTksMTE0MjksOTksNDM5NTEsOTksNjY2MjEsOTksMTI4ODQ0LDY3LDcxOTIyLDY3LDcxOTEzLDY3LDY1MzE1LDY3LDg1NTcsNjcsODQ1MCw2Nyw4NDkzLDY3LDExOTgxMCw2NywxMTk4NjIsNjcsMTE5OTE0LDY3LDExOTk2Niw2NywxMjAwMTgsNjcsMTIwMTc0LDY3LDEyMDIyNiw2NywxMjAyNzgsNjcsMTIwMzMwLDY3LDEyMDM4Miw2NywxMjA0MzQsNjcsMTAxNyw2NywxMTQyOCw2Nyw1MDg3LDY3LDQyMjAyLDY3LDY2MjEwLDY3LDY2MzA2LDY3LDY2NTgxLDY3LDY2ODQ0LDY3LDg1NzQsMTAwLDg1MTgsMTAwLDExOTgzNywxMDAsMTE5ODg5LDEwMCwxMTk5NDEsMTAwLDExOTk5MywxMDAsMTIwMDQ1LDEwMCwxMjAwOTcsMTAwLDEyMDE0OSwxMDAsMTIwMjAxLDEwMCwxMjAyNTMsMTAwLDEyMDMwNSwxMDAsMTIwMzU3LDEwMCwxMjA0MDksMTAwLDEyMDQ2MSwxMDAsMTI4MSwxMDAsNTA5NSwxMDAsNTIzMSwxMDAsNDIxOTQsMTAwLDg1NTgsNjgsODUxNyw2OCwxMTk4MTEsNjgsMTE5ODYzLDY4LDExOTkxNSw2OCwxMTk5NjcsNjgsMTIwMDE5LDY4LDEyMDA3MSw2OCwxMjAxMjMsNjgsMTIwMTc1LDY4LDEyMDIyNyw2OCwxMjAyNzksNjgsMTIwMzMxLDY4LDEyMDM4Myw2OCwxMjA0MzUsNjgsNTAyNCw2OCw1NTk4LDY4LDU2MTAsNjgsNDIxOTUsNjgsODQ5NCwxMDEsNjUzNDksMTAxLDg0OTUsMTAxLDg1MTksMTAxLDExOTgzOCwxMDEsMTE5ODkwLDEwMSwxMTk5NDIsMTAxLDEyMDA0NiwxMDEsMTIwMDk4LDEwMSwxMjAxNTAsMTAxLDEyMDIwMiwxMDEsMTIwMjU0LDEwMSwxMjAzMDYsMTAxLDEyMDM1OCwxMDEsMTIwNDEwLDEwMSwxMjA0NjIsMTAxLDQzODI2LDEwMSwxMjEzLDEwMSw4OTU5LDY5LDY1MzE3LDY5LDg0OTYsNjksMTE5ODEyLDY5LDExOTg2NCw2OSwxMTk5MTYsNjksMTIwMDIwLDY5LDEyMDA3Miw2OSwxMjAxMjQsNjksMTIwMTc2LDY5LDEyMDIyOCw2OSwxMjAyODAsNjksMTIwMzMyLDY5LDEyMDM4NCw2OSwxMjA0MzYsNjksOTE3LDY5LDEyMDQ5Miw2OSwxMjA1NTAsNjksMTIwNjA4LDY5LDEyMDY2Niw2OSwxMjA3MjQsNjksMTE1NzcsNjksNTAzNiw2OSw0MjIyNCw2OSw3MTg0Niw2OSw3MTg1NCw2OSw2NjE4Miw2OSwxMTk4MzksMTAyLDExOTg5MSwxMDIsMTE5OTQzLDEwMiwxMTk5OTUsMTAyLDEyMDA0NywxMDIsMTIwMDk5LDEwMiwxMjAxNTEsMTAyLDEyMDIwMywxMDIsMTIwMjU1LDEwMiwxMjAzMDcsMTAyLDEyMDM1OSwxMDIsMTIwNDExLDEwMiwxMjA0NjMsMTAyLDQzODI5LDEwMiw0MjkwNSwxMDIsMzgzLDEwMiw3ODM3LDEwMiwxNDEyLDEwMiwxMTkzMTUsNzAsODQ5Nyw3MCwxMTk4MTMsNzAsMTE5ODY1LDcwLDExOTkxNyw3MCwxMjAwMjEsNzAsMTIwMDczLDcwLDEyMDEyNSw3MCwxMjAxNzcsNzAsMTIwMjI5LDcwLDEyMDI4MSw3MCwxMjAzMzMsNzAsMTIwMzg1LDcwLDEyMDQzNyw3MCw0MjkwNCw3MCw5ODgsNzAsMTIwNzc4LDcwLDU1NTYsNzAsNDIyMDUsNzAsNzE4NzQsNzAsNzE4NDIsNzAsNjYxODMsNzAsNjYyMTMsNzAsNjY4NTMsNzAsNjUzNTEsMTAzLDg0NTgsMTAzLDExOTg0MCwxMDMsMTE5ODkyLDEwMywxMTk5NDQsMTAzLDEyMDA0OCwxMDMsMTIwMTAwLDEwMywxMjAxNTIsMTAzLDEyMDIwNCwxMDMsMTIwMjU2LDEwMywxMjAzMDgsMTAzLDEyMDM2MCwxMDMsMTIwNDEyLDEwMywxMjA0NjQsMTAzLDYwOSwxMDMsNzU1NSwxMDMsMzk3LDEwMywxNDA5LDEwMywxMTk4MTQsNzEsMTE5ODY2LDcxLDExOTkxOCw3MSwxMTk5NzAsNzEsMTIwMDIyLDcxLDEyMDA3NCw3MSwxMjAxMjYsNzEsMTIwMTc4LDcxLDEyMDIzMCw3MSwxMjAyODIsNzEsMTIwMzM0LDcxLDEyMDM4Niw3MSwxMjA0MzgsNzEsMTI5Miw3MSw1MDU2LDcxLDUxMDcsNzEsNDIxOTgsNzEsNjUzNTIsMTA0LDg0NjIsMTA0LDExOTg0MSwxMDQsMTE5OTQ1LDEwNCwxMTk5OTcsMTA0LDEyMDA0OSwxMDQsMTIwMTAxLDEwNCwxMjAxNTMsMTA0LDEyMDIwNSwxMDQsMTIwMjU3LDEwNCwxMjAzMDksMTA0LDEyMDM2MSwxMDQsMTIwNDEzLDEwNCwxMjA0NjUsMTA0LDEyMTEsMTA0LDEzOTIsMTA0LDUwNTgsMTA0LDY1MzIwLDcyLDg0NTksNzIsODQ2MCw3Miw4NDYxLDcyLDExOTgxNSw3MiwxMTk4NjcsNzIsMTE5OTE5LDcyLDEyMDAyMyw3MiwxMjAxNzksNzIsMTIwMjMxLDcyLDEyMDI4Myw3MiwxMjAzMzUsNzIsMTIwMzg3LDcyLDEyMDQzOSw3Miw5MTksNzIsMTIwNDk0LDcyLDEyMDU1Miw3MiwxMjA2MTAsNzIsMTIwNjY4LDcyLDEyMDcyNiw3MiwxMTQwNiw3Miw1MDUxLDcyLDU1MDAsNzIsNDIyMTUsNzIsNjYyNTUsNzIsNzMxLDEwNSw5MDc1LDEwNSw2NTM1MywxMDUsODU2MCwxMDUsODUwNSwxMDUsODUyMCwxMDUsMTE5ODQyLDEwNSwxMTk4OTQsMTA1LDExOTk0NiwxMDUsMTE5OTk4LDEwNSwxMjAwNTAsMTA1LDEyMDEwMiwxMDUsMTIwMTU0LDEwNSwxMjAyMDYsMTA1LDEyMDI1OCwxMDUsMTIwMzEwLDEwNSwxMjAzNjIsMTA1LDEyMDQxNCwxMDUsMTIwNDY2LDEwNSwxMjA0ODQsMTA1LDYxOCwxMDUsNjE3LDEwNSw5NTMsMTA1LDgxMjYsMTA1LDg5MCwxMDUsMTIwNTIyLDEwNSwxMjA1ODAsMTA1LDEyMDYzOCwxMDUsMTIwNjk2LDEwNSwxMjA3NTQsMTA1LDExMTAsMTA1LDQyNTY3LDEwNSwxMjMxLDEwNSw0Mzg5MywxMDUsNTAyOSwxMDUsNzE4NzUsMTA1LDY1MzU0LDEwNiw4NTIxLDEwNiwxMTk4NDMsMTA2LDExOTg5NSwxMDYsMTE5OTQ3LDEwNiwxMTk5OTksMTA2LDEyMDA1MSwxMDYsMTIwMTAzLDEwNiwxMjAxNTUsMTA2LDEyMDIwNywxMDYsMTIwMjU5LDEwNiwxMjAzMTEsMTA2LDEyMDM2MywxMDYsMTIwNDE1LDEwNiwxMjA0NjcsMTA2LDEwMTEsMTA2LDExMTIsMTA2LDY1MzIyLDc0LDExOTgxNyw3NCwxMTk4NjksNzQsMTE5OTIxLDc0LDExOTk3Myw3NCwxMjAwMjUsNzQsMTIwMDc3LDc0LDEyMDEyOSw3NCwxMjAxODEsNzQsMTIwMjMzLDc0LDEyMDI4NSw3NCwxMjAzMzcsNzQsMTIwMzg5LDc0LDEyMDQ0MSw3NCw0MjkzMCw3NCw4OTUsNzQsMTAzMiw3NCw1MDM1LDc0LDUyNjEsNzQsNDIyMDEsNzQsMTE5ODQ0LDEwNywxMTk4OTYsMTA3LDExOTk0OCwxMDcsMTIwMDAwLDEwNywxMjAwNTIsMTA3LDEyMDEwNCwxMDcsMTIwMTU2LDEwNywxMjAyMDgsMTA3LDEyMDI2MCwxMDcsMTIwMzEyLDEwNywxMjAzNjQsMTA3LDEyMDQxNiwxMDcsMTIwNDY4LDEwNyw4NDkwLDc1LDY1MzIzLDc1LDExOTgxOCw3NSwxMTk4NzAsNzUsMTE5OTIyLDc1LDExOTk3NCw3NSwxMjAwMjYsNzUsMTIwMDc4LDc1LDEyMDEzMCw3NSwxMjAxODIsNzUsMTIwMjM0LDc1LDEyMDI4Niw3NSwxMjAzMzgsNzUsMTIwMzkwLDc1LDEyMDQ0Miw3NSw5MjIsNzUsMTIwNDk3LDc1LDEyMDU1NSw3NSwxMjA2MTMsNzUsMTIwNjcxLDc1LDEyMDcyOSw3NSwxMTQxMiw3NSw1MDk0LDc1LDU4NDUsNzUsNDIxOTksNzUsNjY4NDAsNzUsMTQ3MiwxMDgsODczOSw3Myw5MjEzLDczLDY1NTEyLDczLDE2MzMsMTA4LDE3NzcsNzMsNjYzMzYsMTA4LDEyNTEyNywxMDgsMTIwNzgzLDczLDEyMDc5Myw3MywxMjA4MDMsNzMsMTIwODEzLDczLDEyMDgyMyw3MywxMzAwMzMsNzMsNjUzMjEsNzMsODU0NCw3Myw4NDY0LDczLDg0NjUsNzMsMTE5ODE2LDczLDExOTg2OCw3MywxMTk5MjAsNzMsMTIwMDI0LDczLDEyMDEyOCw3MywxMjAxODAsNzMsMTIwMjMyLDczLDEyMDI4NCw3MywxMjAzMzYsNzMsMTIwMzg4LDczLDEyMDQ0MCw3Myw2NTM1NiwxMDgsODU3Miw3Myw4NDY3LDEwOCwxMTk4NDUsMTA4LDExOTg5NywxMDgsMTE5OTQ5LDEwOCwxMjAwMDEsMTA4LDEyMDA1MywxMDgsMTIwMTA1LDczLDEyMDE1Nyw3MywxMjAyMDksNzMsMTIwMjYxLDczLDEyMDMxMyw3MywxMjAzNjUsNzMsMTIwNDE3LDczLDEyMDQ2OSw3Myw0NDgsNzMsMTIwNDk2LDczLDEyMDU1NCw3MywxMjA2MTIsNzMsMTIwNjcwLDczLDEyMDcyOCw3MywxMTQxMCw3MywxMDMwLDczLDEyMTYsNzMsMTQ5MywxMDgsMTUwMywxMDgsMTU3NSwxMDgsMTI2NDY0LDEwOCwxMjY1OTIsMTA4LDY1MTY2LDEwOCw2NTE2NSwxMDgsMTk5NCwxMDgsMTE1OTksNzMsNTgyNSw3Myw0MjIyNiw3Myw5Mzk5Miw3Myw2NjE4NiwxMjQsNjYzMTMsMTI0LDExOTMzOCw3Niw4NTU2LDc2LDg0NjYsNzYsMTE5ODE5LDc2LDExOTg3MSw3NiwxMTk5MjMsNzYsMTIwMDI3LDc2LDEyMDA3OSw3NiwxMjAxMzEsNzYsMTIwMTgzLDc2LDEyMDIzNSw3NiwxMjAyODcsNzYsMTIwMzM5LDc2LDEyMDM5MSw3NiwxMjA0NDMsNzYsMTE0NzIsNzYsNTA4Niw3Niw1MjkwLDc2LDQyMjA5LDc2LDkzOTc0LDc2LDcxODQzLDc2LDcxODU4LDc2LDY2NTg3LDc2LDY2ODU0LDc2LDY1MzI1LDc3LDg1NTksNzcsODQ5OSw3NywxMTk4MjAsNzcsMTE5ODcyLDc3LDExOTkyNCw3NywxMjAwMjgsNzcsMTIwMDgwLDc3LDEyMDEzMiw3NywxMjAxODQsNzcsMTIwMjM2LDc3LDEyMDI4OCw3NywxMjAzNDAsNzcsMTIwMzkyLDc3LDEyMDQ0NCw3Nyw5MjQsNzcsMTIwNDk5LDc3LDEyMDU1Nyw3NywxMjA2MTUsNzcsMTIwNjczLDc3LDEyMDczMSw3NywxMDE4LDc3LDExNDE2LDc3LDUwNDcsNzcsNTYxNiw3Nyw1ODQ2LDc3LDQyMjA3LDc3LDY2MjI0LDc3LDY2MzIxLDc3LDExOTg0NywxMTAsMTE5ODk5LDExMCwxMTk5NTEsMTEwLDEyMDAwMywxMTAsMTIwMDU1LDExMCwxMjAxMDcsMTEwLDEyMDE1OSwxMTAsMTIwMjExLDExMCwxMjAyNjMsMTEwLDEyMDMxNSwxMTAsMTIwMzY3LDExMCwxMjA0MTksMTEwLDEyMDQ3MSwxMTAsMTQwMCwxMTAsMTQwNCwxMTAsNjUzMjYsNzgsODQ2OSw3OCwxMTk4MjEsNzgsMTE5ODczLDc4LDExOTkyNSw3OCwxMTk5NzcsNzgsMTIwMDI5LDc4LDEyMDA4MSw3OCwxMjAxODUsNzgsMTIwMjM3LDc4LDEyMDI4OSw3OCwxMjAzNDEsNzgsMTIwMzkzLDc4LDEyMDQ0NSw3OCw5MjUsNzgsMTIwNTAwLDc4LDEyMDU1OCw3OCwxMjA2MTYsNzgsMTIwNjc0LDc4LDEyMDczMiw3OCwxMTQxOCw3OCw0MjIwOCw3OCw2NjgzNSw3OCwzMDc0LDExMSwzMjAyLDExMSwzMzMwLDExMSwzNDU4LDExMSwyNDA2LDExMSwyNjYyLDExMSwyNzkwLDExMSwzMDQ2LDExMSwzMTc0LDExMSwzMzAyLDExMSwzNDMwLDExMSwzNjY0LDExMSwzNzkyLDExMSw0MTYwLDExMSwxNjM3LDExMSwxNzgxLDExMSw2NTM1OSwxMTEsODUwMCwxMTEsMTE5ODQ4LDExMSwxMTk5MDAsMTExLDExOTk1MiwxMTEsMTIwMDU2LDExMSwxMjAxMDgsMTExLDEyMDE2MCwxMTEsMTIwMjEyLDExMSwxMjAyNjQsMTExLDEyMDMxNiwxMTEsMTIwMzY4LDExMSwxMjA0MjAsMTExLDEyMDQ3MiwxMTEsNzQzOSwxMTEsNzQ0MSwxMTEsNDM4MzcsMTExLDk1OSwxMTEsMTIwNTI4LDExMSwxMjA1ODYsMTExLDEyMDY0NCwxMTEsMTIwNzAyLDExMSwxMjA3NjAsMTExLDk2MywxMTEsMTIwNTMyLDExMSwxMjA1OTAsMTExLDEyMDY0OCwxMTEsMTIwNzA2LDExMSwxMjA3NjQsMTExLDExNDIzLDExMSw0MzUxLDExMSwxNDEzLDExMSwxNTA1LDExMSwxNjA3LDExMSwxMjY1MDAsMTExLDEyNjU2NCwxMTEsMTI2NTk2LDExMSw2NTI1OSwxMTEsNjUyNjAsMTExLDY1MjU4LDExMSw2NTI1NywxMTEsMTcyNiwxMTEsNjQ0MjgsMTExLDY0NDI5LDExMSw2NDQyNywxMTEsNjQ0MjYsMTExLDE3MjksMTExLDY0NDI0LDExMSw2NDQyNSwxMTEsNjQ0MjMsMTExLDY0NDIyLDExMSwxNzQ5LDExMSwzMzYwLDExMSw0MTI1LDExMSw2Njc5NCwxMTEsNzE4ODAsMTExLDcxODk1LDExMSw2NjYwNCwxMTEsMTk4NCw3OSwyNTM0LDc5LDI5MTgsNzksMTIyOTUsNzksNzA4NjQsNzksNzE5MDQsNzksMTIwNzgyLDc5LDEyMDc5Miw3OSwxMjA4MDIsNzksMTIwODEyLDc5LDEyMDgyMiw3OSwxMzAwMzIsNzksNjUzMjcsNzksMTE5ODIyLDc5LDExOTg3NCw3OSwxMTk5MjYsNzksMTE5OTc4LDc5LDEyMDAzMCw3OSwxMjAwODIsNzksMTIwMTM0LDc5LDEyMDE4Niw3OSwxMjAyMzgsNzksMTIwMjkwLDc5LDEyMDM0Miw3OSwxMjAzOTQsNzksMTIwNDQ2LDc5LDkyNyw3OSwxMjA1MDIsNzksMTIwNTYwLDc5LDEyMDYxOCw3OSwxMjA2NzYsNzksMTIwNzM0LDc5LDExNDIyLDc5LDEzNjUsNzksMTE2MDQsNzksNDgxNiw3OSwyODQ4LDc5LDY2NzU0LDc5LDQyMjI3LDc5LDcxODYxLDc5LDY2MTk0LDc5LDY2MjE5LDc5LDY2NTY0LDc5LDY2ODM4LDc5LDkwNzYsMTEyLDY1MzYwLDExMiwxMTk4NDksMTEyLDExOTkwMSwxMTIsMTE5OTUzLDExMiwxMjAwMDUsMTEyLDEyMDA1NywxMTIsMTIwMTA5LDExMiwxMjAxNjEsMTEyLDEyMDIxMywxMTIsMTIwMjY1LDExMiwxMjAzMTcsMTEyLDEyMDM2OSwxMTIsMTIwNDIxLDExMiwxMjA0NzMsMTEyLDk2MSwxMTIsMTIwNTMwLDExMiwxMjA1NDQsMTEyLDEyMDU4OCwxMTIsMTIwNjAyLDExMiwxMjA2NDYsMTEyLDEyMDY2MCwxMTIsMTIwNzA0LDExMiwxMjA3MTgsMTEyLDEyMDc2MiwxMTIsMTIwNzc2LDExMiwxMTQyNywxMTIsNjUzMjgsODAsODQ3Myw4MCwxMTk4MjMsODAsMTE5ODc1LDgwLDExOTkyNyw4MCwxMTk5NzksODAsMTIwMDMxLDgwLDEyMDA4Myw4MCwxMjAxODcsODAsMTIwMjM5LDgwLDEyMDI5MSw4MCwxMjAzNDMsODAsMTIwMzk1LDgwLDEyMDQ0Nyw4MCw5MjksODAsMTIwNTA0LDgwLDEyMDU2Miw4MCwxMjA2MjAsODAsMTIwNjc4LDgwLDEyMDczNiw4MCwxMTQyNiw4MCw1MDkwLDgwLDUyMjksODAsNDIxOTMsODAsNjYxOTcsODAsMTE5ODUwLDExMywxMTk5MDIsMTEzLDExOTk1NCwxMTMsMTIwMDA2LDExMywxMjAwNTgsMTEzLDEyMDExMCwxMTMsMTIwMTYyLDExMywxMjAyMTQsMTEzLDEyMDI2NiwxMTMsMTIwMzE4LDExMywxMjAzNzAsMTEzLDEyMDQyMiwxMTMsMTIwNDc0LDExMywxMzA3LDExMywxMzc5LDExMywxMzgyLDExMyw4NDc0LDgxLDExOTgyNCw4MSwxMTk4NzYsODEsMTE5OTI4LDgxLDExOTk4MCw4MSwxMjAwMzIsODEsMTIwMDg0LDgxLDEyMDE4OCw4MSwxMjAyNDAsODEsMTIwMjkyLDgxLDEyMDM0NCw4MSwxMjAzOTYsODEsMTIwNDQ4LDgxLDExNjA1LDgxLDExOTg1MSwxMTQsMTE5OTAzLDExNCwxMTk5NTUsMTE0LDEyMDAwNywxMTQsMTIwMDU5LDExNCwxMjAxMTEsMTE0LDEyMDE2MywxMTQsMTIwMjE1LDExNCwxMjAyNjcsMTE0LDEyMDMxOSwxMTQsMTIwMzcxLDExNCwxMjA0MjMsMTE0LDEyMDQ3NSwxMTQsNDM4NDcsMTE0LDQzODQ4LDExNCw3NDYyLDExNCwxMTM5NywxMTQsNDM5MDUsMTE0LDExOTMxOCw4Miw4NDc1LDgyLDg0NzYsODIsODQ3Nyw4MiwxMTk4MjUsODIsMTE5ODc3LDgyLDExOTkyOSw4MiwxMjAwMzMsODIsMTIwMTg5LDgyLDEyMDI0MSw4MiwxMjAyOTMsODIsMTIwMzQ1LDgyLDEyMDM5Nyw4MiwxMjA0NDksODIsNDIyLDgyLDUwMjUsODIsNTA3NCw4Miw2Njc0MCw4Miw1NTExLDgyLDQyMjExLDgyLDk0MDA1LDgyLDY1MzYzLDExNSwxMTk4NTIsMTE1LDExOTkwNCwxMTUsMTE5OTU2LDExNSwxMjAwMDgsMTE1LDEyMDA2MCwxMTUsMTIwMTEyLDExNSwxMjAxNjQsMTE1LDEyMDIxNiwxMTUsMTIwMjY4LDExNSwxMjAzMjAsMTE1LDEyMDM3MiwxMTUsMTIwNDI0LDExNSwxMjA0NzYsMTE1LDQyODAxLDExNSw0NDUsMTE1LDExMDksMTE1LDQzOTQ2LDExNSw3MTg3MywxMTUsNjY2MzIsMTE1LDY1MzMxLDgzLDExOTgyNiw4MywxMTk4NzgsODMsMTE5OTMwLDgzLDExOTk4Miw4MywxMjAwMzQsODMsMTIwMDg2LDgzLDEyMDEzOCw4MywxMjAxOTAsODMsMTIwMjQyLDgzLDEyMDI5NCw4MywxMjAzNDYsODMsMTIwMzk4LDgzLDEyMDQ1MCw4MywxMDI5LDgzLDEzNTksODMsNTA3Nyw4Myw1MDgyLDgzLDQyMjEwLDgzLDk0MDEwLDgzLDY2MTk4LDgzLDY2NTkyLDgzLDExOTg1MywxMTYsMTE5OTA1LDExNiwxMTk5NTcsMTE2LDEyMDAwOSwxMTYsMTIwMDYxLDExNiwxMjAxMTMsMTE2LDEyMDE2NSwxMTYsMTIwMjE3LDExNiwxMjAyNjksMTE2LDEyMDMyMSwxMTYsMTIwMzczLDExNiwxMjA0MjUsMTE2LDEyMDQ3NywxMTYsODg2OCw4NCwxMDIwMSw4NCwxMjg4NzIsODQsNjUzMzIsODQsMTE5ODI3LDg0LDExOTg3OSw4NCwxMTk5MzEsODQsMTE5OTgzLDg0LDEyMDAzNSw4NCwxMjAwODcsODQsMTIwMTM5LDg0LDEyMDE5MSw4NCwxMjAyNDMsODQsMTIwMjk1LDg0LDEyMDM0Nyw4NCwxMjAzOTksODQsMTIwNDUxLDg0LDkzMiw4NCwxMjA1MDcsODQsMTIwNTY1LDg0LDEyMDYyMyw4NCwxMjA2ODEsODQsMTIwNzM5LDg0LDExNDMwLDg0LDUwMjYsODQsNDIxOTYsODQsOTM5NjIsODQsNzE4NjgsODQsNjYxOTksODQsNjYyMjUsODQsNjYzMjUsODQsMTE5ODU0LDExNywxMTk5MDYsMTE3LDExOTk1OCwxMTcsMTIwMDEwLDExNywxMjAwNjIsMTE3LDEyMDExNCwxMTcsMTIwMTY2LDExNywxMjAyMTgsMTE3LDEyMDI3MCwxMTcsMTIwMzIyLDExNywxMjAzNzQsMTE3LDEyMDQyNiwxMTcsMTIwNDc4LDExNyw0MjkxMSwxMTcsNzQ1MiwxMTcsNDM4NTQsMTE3LDQzODU4LDExNyw2NTEsMTE3LDk2NSwxMTcsMTIwNTM0LDExNywxMjA1OTIsMTE3LDEyMDY1MCwxMTcsMTIwNzA4LDExNywxMjA3NjYsMTE3LDE0MDUsMTE3LDY2ODA2LDExNyw3MTg5NiwxMTcsODc0Niw4NSw4ODk5LDg1LDExOTgyOCw4NSwxMTk4ODAsODUsMTE5OTMyLDg1LDExOTk4NCw4NSwxMjAwMzYsODUsMTIwMDg4LDg1LDEyMDE0MCw4NSwxMjAxOTIsODUsMTIwMjQ0LDg1LDEyMDI5Niw4NSwxMjAzNDgsODUsMTIwNDAwLDg1LDEyMDQ1Miw4NSwxMzU3LDg1LDQ2MDgsODUsNjY3NjYsODUsNTE5Niw4NSw0MjIyOCw4NSw5NDAxOCw4NSw3MTg2NCw4NSw4NzQ0LDExOCw4ODk3LDExOCw2NTM2NiwxMTgsODU2NCwxMTgsMTE5ODU1LDExOCwxMTk5MDcsMTE4LDExOTk1OSwxMTgsMTIwMDExLDExOCwxMjAwNjMsMTE4LDEyMDExNSwxMTgsMTIwMTY3LDExOCwxMjAyMTksMTE4LDEyMDI3MSwxMTgsMTIwMzIzLDExOCwxMjAzNzUsMTE4LDEyMDQyNywxMTgsMTIwNDc5LDExOCw3NDU2LDExOCw5NTcsMTE4LDEyMDUyNiwxMTgsMTIwNTg0LDExOCwxMjA2NDIsMTE4LDEyMDcwMCwxMTgsMTIwNzU4LDExOCwxMTQxLDExOCwxNDk2LDExOCw3MTQzMCwxMTgsNDM5NDUsMTE4LDcxODcyLDExOCwxMTkzMDksODYsMTYzOSw4NiwxNzgzLDg2LDg1NDgsODYsMTE5ODI5LDg2LDExOTg4MSw4NiwxMTk5MzMsODYsMTE5OTg1LDg2LDEyMDAzNyw4NiwxMjAwODksODYsMTIwMTQxLDg2LDEyMDE5Myw4NiwxMjAyNDUsODYsMTIwMjk3LDg2LDEyMDM0OSw4NiwxMjA0MDEsODYsMTIwNDUzLDg2LDExNDAsODYsMTE1NzYsODYsNTA4MSw4Niw1MTY3LDg2LDQyNzE5LDg2LDQyMjE0LDg2LDkzOTYwLDg2LDcxODQwLDg2LDY2ODQ1LDg2LDYyMywxMTksMTE5ODU2LDExOSwxMTk5MDgsMTE5LDExOTk2MCwxMTksMTIwMDEyLDExOSwxMjAwNjQsMTE5LDEyMDExNiwxMTksMTIwMTY4LDExOSwxMjAyMjAsMTE5LDEyMDI3MiwxMTksMTIwMzI0LDExOSwxMjAzNzYsMTE5LDEyMDQyOCwxMTksMTIwNDgwLDExOSw3NDU3LDExOSwxMTIxLDExOSwxMzA5LDExOSwxMzc3LDExOSw3MTQzNCwxMTksNzE0MzgsMTE5LDcxNDM5LDExOSw0MzkwNywxMTksNzE5MTksODcsNzE5MTAsODcsMTE5ODMwLDg3LDExOTg4Miw4NywxMTk5MzQsODcsMTE5OTg2LDg3LDEyMDAzOCw4NywxMjAwOTAsODcsMTIwMTQyLDg3LDEyMDE5NCw4NywxMjAyNDYsODcsMTIwMjk4LDg3LDEyMDM1MCw4NywxMjA0MDIsODcsMTIwNDU0LDg3LDEzMDgsODcsNTA0Myw4Nyw1MDc2LDg3LDQyMjE4LDg3LDU3NDIsMTIwLDEwNTM5LDEyMCwxMDU0MCwxMjAsMTA3OTksMTIwLDY1MzY4LDEyMCw4NTY5LDEyMCwxMTk4NTcsMTIwLDExOTkwOSwxMjAsMTE5OTYxLDEyMCwxMjAwMTMsMTIwLDEyMDA2NSwxMjAsMTIwMTE3LDEyMCwxMjAxNjksMTIwLDEyMDIyMSwxMjAsMTIwMjczLDEyMCwxMjAzMjUsMTIwLDEyMDM3NywxMjAsMTIwNDI5LDEyMCwxMjA0ODEsMTIwLDU0NDEsMTIwLDU1MDEsMTIwLDU3NDEsODgsOTU4Nyw4OCw2NjMzOCw4OCw3MTkxNiw4OCw2NTMzNiw4OCw4NTUzLDg4LDExOTgzMSw4OCwxMTk4ODMsODgsMTE5OTM1LDg4LDExOTk4Nyw4OCwxMjAwMzksODgsMTIwMDkxLDg4LDEyMDE0Myw4OCwxMjAxOTUsODgsMTIwMjQ3LDg4LDEyMDI5OSw4OCwxMjAzNTEsODgsMTIwNDAzLDg4LDEyMDQ1NSw4OCw0MjkzMSw4OCw5MzUsODgsMTIwNTEwLDg4LDEyMDU2OCw4OCwxMjA2MjYsODgsMTIwNjg0LDg4LDEyMDc0Miw4OCwxMTQzNiw4OCwxMTYxMyw4OCw1ODE1LDg4LDQyMjE5LDg4LDY2MTkyLDg4LDY2MjI4LDg4LDY2MzI3LDg4LDY2ODU1LDg4LDYxMSwxMjEsNzU2NCwxMjEsNjUzNjksMTIxLDExOTg1OCwxMjEsMTE5OTEwLDEyMSwxMTk5NjIsMTIxLDEyMDAxNCwxMjEsMTIwMDY2LDEyMSwxMjAxMTgsMTIxLDEyMDE3MCwxMjEsMTIwMjIyLDEyMSwxMjAyNzQsMTIxLDEyMDMyNiwxMjEsMTIwMzc4LDEyMSwxMjA0MzAsMTIxLDEyMDQ4MiwxMjEsNjU1LDEyMSw3OTM1LDEyMSw0Mzg2NiwxMjEsOTQ3LDEyMSw4NTA5LDEyMSwxMjA1MTYsMTIxLDEyMDU3NCwxMjEsMTIwNjMyLDEyMSwxMjA2OTAsMTIxLDEyMDc0OCwxMjEsMTE5OSwxMjEsNDMyNywxMjEsNzE5MDAsMTIxLDY1MzM3LDg5LDExOTgzMiw4OSwxMTk4ODQsODksMTE5OTM2LDg5LDExOTk4OCw4OSwxMjAwNDAsODksMTIwMDkyLDg5LDEyMDE0NCw4OSwxMjAxOTYsODksMTIwMjQ4LDg5LDEyMDMwMCw4OSwxMjAzNTIsODksMTIwNDA0LDg5LDEyMDQ1Niw4OSw5MzMsODksOTc4LDg5LDEyMDUwOCw4OSwxMjA1NjYsODksMTIwNjI0LDg5LDEyMDY4Miw4OSwxMjA3NDAsODksMTE0MzIsODksMTE5OCw4OSw1MDMzLDg5LDUwNTMsODksNDIyMjAsODksOTQwMTksODksNzE4NDQsODksNjYyMjYsODksMTE5ODU5LDEyMiwxMTk5MTEsMTIyLDExOTk2MywxMjIsMTIwMDE1LDEyMiwxMjAwNjcsMTIyLDEyMDExOSwxMjIsMTIwMTcxLDEyMiwxMjAyMjMsMTIyLDEyMDI3NSwxMjIsMTIwMzI3LDEyMiwxMjAzNzksMTIyLDEyMDQzMSwxMjIsMTIwNDgzLDEyMiw3NDU4LDEyMiw0MzkyMywxMjIsNzE4NzYsMTIyLDY2MjkzLDkwLDcxOTA5LDkwLDY1MzM4LDkwLDg0ODQsOTAsODQ4OCw5MCwxMTk4MzMsOTAsMTE5ODg1LDkwLDExOTkzNyw5MCwxMTk5ODksOTAsMTIwMDQxLDkwLDEyMDE5Nyw5MCwxMjAyNDksOTAsMTIwMzAxLDkwLDEyMDM1Myw5MCwxMjA0MDUsOTAsMTIwNDU3LDkwLDkxOCw5MCwxMjA0OTMsOTAsMTIwNTUxLDkwLDEyMDYwOSw5MCwxMjA2NjcsOTAsMTIwNzI1LDkwLDUwNTksOTAsNDIyMDQsOTAsNzE4NDksOTAsNjUyODIsMzQsNjUyODQsMzYsNjUyODUsMzcsNjUyODYsMzgsNjUyOTAsNDIsNjUyOTEsNDMsNjUyOTQsNDYsNjUyOTUsNDcsNjUyOTYsNDgsNjUyOTcsNDksNjUyOTgsNTAsNjUyOTksNTEsNjUzMDAsNTIsNjUzMDEsNTMsNjUzMDIsNTQsNjUzMDMsNTUsNjUzMDQsNTYsNjUzMDUsNTcsNjUzMDgsNjAsNjUzMDksNjEsNjUzMTAsNjIsNjUzMTIsNjQsNjUzMTYsNjgsNjUzMTgsNzAsNjUzMTksNzEsNjUzMjQsNzYsNjUzMjksODEsNjUzMzAsODIsNjUzMzMsODUsNjUzMzQsODYsNjUzMzUsODcsNjUzNDMsOTUsNjUzNDYsOTgsNjUzNDgsMTAwLDY1MzUwLDEwMiw2NTM1NSwxMDcsNjUzNTcsMTA5LDY1MzU4LDExMCw2NTM2MSwxMTMsNjUzNjIsMTE0LDY1MzY0LDExNiw2NTM2NSwxMTcsNjUzNjcsMTE5LDY1MzcwLDEyMiw2NTM3MSwxMjMsNjUzNzMsMTI1LDExOTg0NiwxMDldLCJfZGVmYXVsdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJjcyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZGUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImVzIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImZyIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sIml0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJqYSI6WzgyMTEsNDUsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MjkyLDQ0LDY1MzA3LDU5XSwia28iOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInBsIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInB0LUJSIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInFwcy1wbG9jIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInJ1IjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywzMDUsMTA1LDkyMSw3MywxMDA5LDExMiwyMTUsMTIwLDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwidHIiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiemgtaGFucyI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4OCw0MCw2NTI4OSw0MV0sInpoLWhhbnQiOls4MjExLDQ1LDY1Mzc0LDEyNiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUzMDcsNTldfScpKSxydC5jYWNoZT1uZXcgdG8oZT0+e2Z1bmN0aW9uIHQodSl7Y29uc3QgZj1uZXcgTWFwO2ZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCs9MilmLnNldCh1W2hdLHVbaCsxXSk7cmV0dXJuIGZ9ZnVuY3Rpb24gbih1LGYpe2NvbnN0IGg9bmV3IE1hcCh1KTtmb3IoY29uc3RbZCxnXW9mIGYpaC5zZXQoZCxnKTtyZXR1cm4gaH1mdW5jdGlvbiByKHUsZil7aWYoIXUpcmV0dXJuIGY7Y29uc3QgaD1uZXcgTWFwO2Zvcihjb25zdFtkLGddb2YgdSlmLmhhcyhkKSYmaC5zZXQoZCxnKTtyZXR1cm4gaH1jb25zdCBpPWR0LmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWU7bGV0IHM9ZS5maWx0ZXIodT0+IXUuc3RhcnRzV2l0aCgiXyIpJiZ1IGluIGkpO3MubGVuZ3RoPT09MCYmKHM9WyJfZGVmYXVsdCJdKTtsZXQgYTtmb3IoY29uc3QgdSBvZiBzKXtjb25zdCBmPXQoaVt1XSk7YT1yKGEsZil9Y29uc3Qgbz10KGkuX2NvbW1vbiksbD1uKG8sYSk7cmV0dXJuIG5ldyBkdChsKX0pLHJ0Ll9sb2NhbGVzPW5ldyBxcigoKT0+T2JqZWN0LmtleXMoZHQuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS52YWx1ZSkuZmlsdGVyKGU9PiFlLnN0YXJ0c1dpdGgoIl8iKSkpO2NsYXNzIEhle3N0YXRpYyBnZXRSYXdEYXRhKCl7cmV0dXJuIEpTT04ucGFyc2UoIls5LDEwLDExLDEyLDEzLDMyLDEyNywxNjAsMTczLDg0NywxNTY0LDQ0NDcsNDQ0OCw2MDY4LDYwNjksNjE1NSw2MTU2LDYxNTcsNjE1OCw3MzU1LDczNTYsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMDMsODIwNCw4MjA1LDgyMDYsODIwNyw4MjM0LDgyMzUsODIzNiw4MjM3LDgyMzgsODIzOSw4Mjg3LDgyODgsODI4OSw4MjkwLDgyOTEsODI5Miw4MjkzLDgyOTQsODI5NSw4Mjk2LDgyOTcsODI5OCw4Mjk5LDgzMDAsODMwMSw4MzAyLDgzMDMsMTAyNDAsMTIyODgsMTI2NDQsNjUwMjQsNjUwMjUsNjUwMjYsNjUwMjcsNjUwMjgsNjUwMjksNjUwMzAsNjUwMzEsNjUwMzIsNjUwMzMsNjUwMzQsNjUwMzUsNjUwMzYsNjUwMzcsNjUwMzgsNjUwMzksNjUyNzksNjU0NDAsNjU1MjAsNjU1MjEsNjU1MjIsNjU1MjMsNjU1MjQsNjU1MjUsNjU1MjYsNjU1MjcsNjU1MjgsNjU1MzIsNzg4NDQsMTE5MTU1LDExOTE1NiwxMTkxNTcsMTE5MTU4LDExOTE1OSwxMTkxNjAsMTE5MTYxLDExOTE2Miw5MTc1MDQsOTE3NTA1LDkxNzUwNiw5MTc1MDcsOTE3NTA4LDkxNzUwOSw5MTc1MTAsOTE3NTExLDkxNzUxMiw5MTc1MTMsOTE3NTE0LDkxNzUxNSw5MTc1MTYsOTE3NTE3LDkxNzUxOCw5MTc1MTksOTE3NTIwLDkxNzUyMSw5MTc1MjIsOTE3NTIzLDkxNzUyNCw5MTc1MjUsOTE3NTI2LDkxNzUyNyw5MTc1MjgsOTE3NTI5LDkxNzUzMCw5MTc1MzEsOTE3NTMyLDkxNzUzMyw5MTc1MzQsOTE3NTM1LDkxNzUzNiw5MTc1MzcsOTE3NTM4LDkxNzUzOSw5MTc1NDAsOTE3NTQxLDkxNzU0Miw5MTc1NDMsOTE3NTQ0LDkxNzU0NSw5MTc1NDYsOTE3NTQ3LDkxNzU0OCw5MTc1NDksOTE3NTUwLDkxNzU1MSw5MTc1NTIsOTE3NTUzLDkxNzU1NCw5MTc1NTUsOTE3NTU2LDkxNzU1Nyw5MTc1NTgsOTE3NTU5LDkxNzU2MCw5MTc1NjEsOTE3NTYyLDkxNzU2Myw5MTc1NjQsOTE3NTY1LDkxNzU2Niw5MTc1NjcsOTE3NTY4LDkxNzU2OSw5MTc1NzAsOTE3NTcxLDkxNzU3Miw5MTc1NzMsOTE3NTc0LDkxNzU3NSw5MTc1NzYsOTE3NTc3LDkxNzU3OCw5MTc1NzksOTE3NTgwLDkxNzU4MSw5MTc1ODIsOTE3NTgzLDkxNzU4NCw5MTc1ODUsOTE3NTg2LDkxNzU4Nyw5MTc1ODgsOTE3NTg5LDkxNzU5MCw5MTc1OTEsOTE3NTkyLDkxNzU5Myw5MTc1OTQsOTE3NTk1LDkxNzU5Niw5MTc1OTcsOTE3NTk4LDkxNzU5OSw5MTc2MDAsOTE3NjAxLDkxNzYwMiw5MTc2MDMsOTE3NjA0LDkxNzYwNSw5MTc2MDYsOTE3NjA3LDkxNzYwOCw5MTc2MDksOTE3NjEwLDkxNzYxMSw5MTc2MTIsOTE3NjEzLDkxNzYxNCw5MTc2MTUsOTE3NjE2LDkxNzYxNyw5MTc2MTgsOTE3NjE5LDkxNzYyMCw5MTc2MjEsOTE3NjIyLDkxNzYyMyw5MTc2MjQsOTE3NjI1LDkxNzYyNiw5MTc2MjcsOTE3NjI4LDkxNzYyOSw5MTc2MzAsOTE3NjMxLDkxNzc2MCw5MTc3NjEsOTE3NzYyLDkxNzc2Myw5MTc3NjQsOTE3NzY1LDkxNzc2Niw5MTc3NjcsOTE3NzY4LDkxNzc2OSw5MTc3NzAsOTE3NzcxLDkxNzc3Miw5MTc3NzMsOTE3Nzc0LDkxNzc3NSw5MTc3NzYsOTE3Nzc3LDkxNzc3OCw5MTc3NzksOTE3NzgwLDkxNzc4MSw5MTc3ODIsOTE3NzgzLDkxNzc4NCw5MTc3ODUsOTE3Nzg2LDkxNzc4Nyw5MTc3ODgsOTE3Nzg5LDkxNzc5MCw5MTc3OTEsOTE3NzkyLDkxNzc5Myw5MTc3OTQsOTE3Nzk1LDkxNzc5Niw5MTc3OTcsOTE3Nzk4LDkxNzc5OSw5MTc4MDAsOTE3ODAxLDkxNzgwMiw5MTc4MDMsOTE3ODA0LDkxNzgwNSw5MTc4MDYsOTE3ODA3LDkxNzgwOCw5MTc4MDksOTE3ODEwLDkxNzgxMSw5MTc4MTIsOTE3ODEzLDkxNzgxNCw5MTc4MTUsOTE3ODE2LDkxNzgxNyw5MTc4MTgsOTE3ODE5LDkxNzgyMCw5MTc4MjEsOTE3ODIyLDkxNzgyMyw5MTc4MjQsOTE3ODI1LDkxNzgyNiw5MTc4MjcsOTE3ODI4LDkxNzgyOSw5MTc4MzAsOTE3ODMxLDkxNzgzMiw5MTc4MzMsOTE3ODM0LDkxNzgzNSw5MTc4MzYsOTE3ODM3LDkxNzgzOCw5MTc4MzksOTE3ODQwLDkxNzg0MSw5MTc4NDIsOTE3ODQzLDkxNzg0NCw5MTc4NDUsOTE3ODQ2LDkxNzg0Nyw5MTc4NDgsOTE3ODQ5LDkxNzg1MCw5MTc4NTEsOTE3ODUyLDkxNzg1Myw5MTc4NTQsOTE3ODU1LDkxNzg1Niw5MTc4NTcsOTE3ODU4LDkxNzg1OSw5MTc4NjAsOTE3ODYxLDkxNzg2Miw5MTc4NjMsOTE3ODY0LDkxNzg2NSw5MTc4NjYsOTE3ODY3LDkxNzg2OCw5MTc4NjksOTE3ODcwLDkxNzg3MSw5MTc4NzIsOTE3ODczLDkxNzg3NCw5MTc4NzUsOTE3ODc2LDkxNzg3Nyw5MTc4NzgsOTE3ODc5LDkxNzg4MCw5MTc4ODEsOTE3ODgyLDkxNzg4Myw5MTc4ODQsOTE3ODg1LDkxNzg4Niw5MTc4ODcsOTE3ODg4LDkxNzg4OSw5MTc4OTAsOTE3ODkxLDkxNzg5Miw5MTc4OTMsOTE3ODk0LDkxNzg5NSw5MTc4OTYsOTE3ODk3LDkxNzg5OCw5MTc4OTksOTE3OTAwLDkxNzkwMSw5MTc5MDIsOTE3OTAzLDkxNzkwNCw5MTc5MDUsOTE3OTA2LDkxNzkwNyw5MTc5MDgsOTE3OTA5LDkxNzkxMCw5MTc5MTEsOTE3OTEyLDkxNzkxMyw5MTc5MTQsOTE3OTE1LDkxNzkxNiw5MTc5MTcsOTE3OTE4LDkxNzkxOSw5MTc5MjAsOTE3OTIxLDkxNzkyMiw5MTc5MjMsOTE3OTI0LDkxNzkyNSw5MTc5MjYsOTE3OTI3LDkxNzkyOCw5MTc5MjksOTE3OTMwLDkxNzkzMSw5MTc5MzIsOTE3OTMzLDkxNzkzNCw5MTc5MzUsOTE3OTM2LDkxNzkzNyw5MTc5MzgsOTE3OTM5LDkxNzk0MCw5MTc5NDEsOTE3OTQyLDkxNzk0Myw5MTc5NDQsOTE3OTQ1LDkxNzk0Niw5MTc5NDcsOTE3OTQ4LDkxNzk0OSw5MTc5NTAsOTE3OTUxLDkxNzk1Miw5MTc5NTMsOTE3OTU0LDkxNzk1NSw5MTc5NTYsOTE3OTU3LDkxNzk1OCw5MTc5NTksOTE3OTYwLDkxNzk2MSw5MTc5NjIsOTE3OTYzLDkxNzk2NCw5MTc5NjUsOTE3OTY2LDkxNzk2Nyw5MTc5NjgsOTE3OTY5LDkxNzk3MCw5MTc5NzEsOTE3OTcyLDkxNzk3Myw5MTc5NzQsOTE3OTc1LDkxNzk3Niw5MTc5NzcsOTE3OTc4LDkxNzk3OSw5MTc5ODAsOTE3OTgxLDkxNzk4Miw5MTc5ODMsOTE3OTg0LDkxNzk4NSw5MTc5ODYsOTE3OTg3LDkxNzk4OCw5MTc5ODksOTE3OTkwLDkxNzk5MSw5MTc5OTIsOTE3OTkzLDkxNzk5NCw5MTc5OTUsOTE3OTk2LDkxNzk5Nyw5MTc5OTgsOTE3OTk5XSIpfXN0YXRpYyBnZXREYXRhKCl7cmV0dXJuIHRoaXMuX2RhdGF8fCh0aGlzLl9kYXRhPW5ldyBTZXQoSGUuZ2V0UmF3RGF0YSgpKSksdGhpcy5fZGF0YX1zdGF0aWMgaXNJbnZpc2libGVDaGFyYWN0ZXIodCl7cmV0dXJuIEhlLmdldERhdGEoKS5oYXModCl9c3RhdGljIGdldCBjb2RlUG9pbnRzKCl7cmV0dXJuIEhlLmdldERhdGEoKX19SGUuX2RhdGE9dm9pZCAwO2NvbnN0IGZvPSIkaW5pdGlhbGl6ZSI7Y2xhc3MgaG97Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy5tZXRob2Q9cix0aGlzLmFyZ3M9aSx0aGlzLnR5cGU9MH19Y2xhc3MgVXJ7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy52c1dvcmtlcj10LHRoaXMuc2VxPW4sdGhpcy5yZXM9cix0aGlzLmVycj1pLHRoaXMudHlwZT0xfX1jbGFzcyBnb3tjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50TmFtZT1yLHRoaXMuYXJnPWksdGhpcy50eXBlPTJ9fWNsYXNzIG1ve2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50PXIsdGhpcy50eXBlPTN9fWNsYXNzIHBve2NvbnN0cnVjdG9yKHQsbil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy50eXBlPTR9fWNsYXNzIHZve2NvbnN0cnVjdG9yKHQpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9dCx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKHQpe3RoaXMuX3dvcmtlcklkPXR9c2VuZE1lc3NhZ2UodCxuKXtjb25zdCByPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKGkscyk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tyXT17cmVzb2x2ZTppLHJlamVjdDpzfSx0aGlzLl9zZW5kKG5ldyBobyh0aGlzLl93b3JrZXJJZCxyLHQsbikpfSl9bGlzdGVuKHQsbil7bGV0IHI9bnVsbDtjb25zdCBpPW5ldyBBZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e3I9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQocixpKSx0aGlzLl9zZW5kKG5ldyBnbyh0aGlzLl93b3JrZXJJZCxyLHQsbikpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e3RoaXMuX3BlbmRpbmdFbWl0dGVycy5kZWxldGUociksdGhpcy5fc2VuZChuZXcgcG8odGhpcy5fd29ya2VySWQscikpLHI9bnVsbH19KTtyZXR1cm4gaS5ldmVudH1oYW5kbGVNZXNzYWdlKHQpeyF0fHwhdC52c1dvcmtlcnx8dGhpcy5fd29ya2VySWQhPT0tMSYmdC52c1dvcmtlciE9PXRoaXMuX3dvcmtlcklkfHx0aGlzLl9oYW5kbGVNZXNzYWdlKHQpfV9oYW5kbGVNZXNzYWdlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKHQpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UodCk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UodCk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KX19X2hhbmRsZVJlcGx5TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdKXtjb25zb2xlLndhcm4oIkdvdCByZXBseSB0byB1bmtub3duIHNlcSIpO3JldHVybn1jb25zdCBuPXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdLHQuZXJyKXtsZXQgcj10LmVycjt0LmVyci4kaXNFcnJvciYmKHI9bmV3IEVycm9yLHIubmFtZT10LmVyci5uYW1lLHIubWVzc2FnZT10LmVyci5tZXNzYWdlLHIuc3RhY2s9dC5lcnIuc3RhY2spLG4ucmVqZWN0KHIpO3JldHVybn1uLnJlc29sdmUodC5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZSh0Lm1ldGhvZCx0LmFyZ3MpLnRoZW4oaT0+e3RoaXMuX3NlbmQobmV3IFVyKHRoaXMuX3dvcmtlcklkLG4saSx2b2lkIDApKX0saT0+e2kuZGV0YWlsIGluc3RhbmNlb2YgRXJyb3ImJihpLmRldGFpbD1WcihpLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IFVyKHRoaXMuX3dvcmtlcklkLG4sdm9pZCAwLFZyKGkpKSl9KX1faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKHQpe2NvbnN0IG49dC5yZXEscj10aGlzLl9oYW5kbGVyLmhhbmRsZUV2ZW50KHQuZXZlbnROYW1lLHQuYXJnKShpPT57dGhpcy5fc2VuZChuZXcgbW8odGhpcy5fd29ya2VySWQsbixpKSl9KTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldChuLHIpfV9oYW5kbGVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFbWl0dGVycy5oYXModC5yZXEpKXtjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKTtyZXR1cm59dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldCh0LnJlcSkuZmlyZSh0LmV2ZW50KX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFdmVudHMuaGFzKHQucmVxKSl7Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIik7cmV0dXJufXRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KHQucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUodC5yZXEpfV9zZW5kKHQpe2NvbnN0IG49W107aWYodC50eXBlPT09MClmb3IobGV0IHI9MDtyPHQuYXJncy5sZW5ndGg7cisrKXQuYXJnc1tyXWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJm4ucHVzaCh0LmFyZ3Nbcl0pO2Vsc2UgdC50eXBlPT09MSYmdC5yZXMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmbi5wdXNoKHQucmVzKTt0aGlzLl9oYW5kbGVyLnNlbmRNZXNzYWdlKHQsbil9fWZ1bmN0aW9uICRyKGUpe3JldHVybiBlWzBdPT09Im8iJiZlWzFdPT09Im4iJiZCcihlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIFdyKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZCcihlLmNoYXJDb2RlQXQoOSkpfWZ1bmN0aW9uIGJvKGUsdCxuKXtjb25zdCByPWE9PmZ1bmN0aW9uKCl7Y29uc3Qgbz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoYSxvKX0saT1hPT5mdW5jdGlvbihvKXtyZXR1cm4gbihhLG8pfSxzPXt9O2Zvcihjb25zdCBhIG9mIGUpe2lmKFdyKGEpKXtzW2FdPWkoYSk7Y29udGludWV9aWYoJHIoYSkpe3NbYV09bihhLHZvaWQgMCk7Y29udGludWV9c1thXT1yKGEpfXJldHVybiBzfWNsYXNzIHhve2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5PW4sdGhpcy5fcmVxdWVzdEhhbmRsZXI9bnVsbCx0aGlzLl9wcm90b2NvbD1uZXcgdm8oe3NlbmRNZXNzYWdlOihyLGkpPT57dChyLGkpfSxoYW5kbGVNZXNzYWdlOihyLGkpPT50aGlzLl9oYW5kbGVNZXNzYWdlKHIsaSksaGFuZGxlRXZlbnQ6KHIsaSk9PnRoaXMuX2hhbmRsZUV2ZW50KHIsaSl9KX1vbm1lc3NhZ2UodCl7dGhpcy5fcHJvdG9jb2wuaGFuZGxlTWVzc2FnZSh0KX1faGFuZGxlTWVzc2FnZSh0LG4pe2lmKHQ9PT1mbylyZXR1cm4gdGhpcy5pbml0aWFsaXplKG5bMF0sblsxXSxuWzJdLG5bM10pO2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcnx8dHlwZW9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyW3RdIT0iZnVuY3Rpb24iKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK3QpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9yZXF1ZXN0SGFuZGxlclt0XS5hcHBseSh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKSl9Y2F0Y2gocil7cmV0dXJuIFByb21pc2UucmVqZWN0KHIpfX1faGFuZGxlRXZlbnQodCxuKXtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIik7aWYoV3IodCkpe2NvbnN0IHI9dGhpcy5fcmVxdWVzdEhhbmRsZXJbdF0uY2FsbCh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZHluYW1pYyBldmVudCAke3R9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gcn1pZigkcih0KSl7Y29uc3Qgcj10aGlzLl9yZXF1ZXN0SGFuZGxlclt0XTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZXZlbnQgJHt0fSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIHJ9dGhyb3cgbmV3IEVycm9yKGBNYWxmb3JtZWQgZXZlbnQgbmFtZSAke3R9YCl9aW5pdGlhbGl6ZSh0LG4scixpKXt0aGlzLl9wcm90b2NvbC5zZXRXb3JrZXJJZCh0KTtjb25zdCBvPWJvKGksKGwsdSk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKGwsdSksKGwsdSk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihsLHUpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkobyksUHJvbWlzZS5yZXNvbHZlKFRuKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOihuJiYodHlwZW9mIG4uYmFzZVVybDwidSImJmRlbGV0ZSBuLmJhc2VVcmwsdHlwZW9mIG4ucGF0aHM8InUiJiZ0eXBlb2Ygbi5wYXRocy52czwidSImJmRlbGV0ZSBuLnBhdGhzLnZzLHR5cGVvZiBuLnRydXN0ZWRUeXBlc1BvbGljeTwidSImJmRlbGV0ZSBuLnRydXN0ZWRUeXBlc1BvbGljeSxuLmNhdGNoRXJyb3I9ITAsZ2xvYmFsVGhpcy5yZXF1aXJlLmNvbmZpZyhuKSksbmV3IFByb21pc2UoKGwsdSk9Pntjb25zdCBmPWdsb2JhbFRoaXMucmVxdWlyZTtmKFtyXSxoPT57aWYodGhpcy5fcmVxdWVzdEhhbmRsZXI9aC5jcmVhdGUobyksIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXt1KG5ldyBFcnJvcigiTm8gUmVxdWVzdEhhbmRsZXIhIikpO3JldHVybn1sKFRuKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSl9LHUpfSkpfX1jbGFzcyB6ZXtjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnQ9dCx0aGlzLm9yaWdpbmFsTGVuZ3RoPW4sdGhpcy5tb2RpZmllZFN0YXJ0PXIsdGhpcy5tb2RpZmllZExlbmd0aD1pfWdldE9yaWdpbmFsRW5kKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxTdGFydCt0aGlzLm9yaWdpbmFsTGVuZ3RofWdldE1vZGlmaWVkRW5kKCl7cmV0dXJuIHRoaXMubW9kaWZpZWRTdGFydCt0aGlzLm1vZGlmaWVkTGVuZ3RofX1mdW5jdGlvbiBIcihlLHQpe3JldHVybih0PDw1KS10K2V8MH1mdW5jdGlvbiB5byhlLHQpe3Q9SHIoMTQ5NDE3LHQpO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0PUhyKGUuY2hhckNvZGVBdChuKSx0KTtyZXR1cm4gdH1jbGFzcyB6cntjb25zdHJ1Y3Rvcih0KXt0aGlzLnNvdXJjZT10fWdldEVsZW1lbnRzKCl7Y29uc3QgdD10aGlzLnNvdXJjZSxuPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspbltyXT10LmNoYXJDb2RlQXQocik7cmV0dXJuIG59fWZ1bmN0aW9uIHdvKGUsdCxuKXtyZXR1cm4gbmV3IEdlKG5ldyB6cihlKSxuZXcgenIodCkpLkNvbXB1dGVEaWZmKG4pLmNoYW5nZXN9Y2xhc3MgZ3R7c3RhdGljIEFzc2VydCh0LG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcihuKX19Y2xhc3MgbXR7c3RhdGljIENvcHkodCxuLHIsaSxzKXtmb3IobGV0IGE9MDthPHM7YSsrKXJbaSthXT10W24rYV19c3RhdGljIENvcHkyKHQsbixyLGkscyl7Zm9yKGxldCBhPTA7YTxzO2ErKylyW2krYV09dFtuK2FdfX1jbGFzcyBHcntjb25zdHJ1Y3Rvcigpe3RoaXMubV9jaGFuZ2VzPVtdLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTB9TWFya05leHRDaGFuZ2UoKXsodGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMubV9jaGFuZ2VzLnB1c2gobmV3IHplKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHRoaXMubV9vcmlnaW5hbENvdW50LHRoaXMubV9tb2RpZmllZFN0YXJ0LHRoaXMubV9tb2RpZmllZENvdW50KSksdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNH1BZGRPcmlnaW5hbEVsZW1lbnQodCxuKXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCxuKSx0aGlzLm1fb3JpZ2luYWxDb3VudCsrfUFkZE1vZGlmaWVkRWxlbWVudCh0LG4pe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHQpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LG4pLHRoaXMubV9tb2RpZmllZENvdW50Kyt9Z2V0Q2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzfWdldFJldmVyc2VDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXMucmV2ZXJzZSgpLHRoaXMubV9jaGFuZ2VzfX1jbGFzcyBHZXtjb25zdHJ1Y3Rvcih0LG4scj1udWxsKXt0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZT1yLHRoaXMuX29yaWdpbmFsU2VxdWVuY2U9dCx0aGlzLl9tb2RpZmllZFNlcXVlbmNlPW47Y29uc3RbaSxzLGFdPUdlLl9nZXRFbGVtZW50cyh0KSxbbyxsLHVdPUdlLl9nZXRFbGVtZW50cyhuKTt0aGlzLl9oYXNTdHJpbmdzPWEmJnUsdGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50cz1pLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2g9cyx0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzPW8sdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaD1sLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W119c3RhdGljIF9pc1N0cmluZ0FycmF5KHQpe3JldHVybiB0Lmxlbmd0aD4wJiZ0eXBlb2YgdFswXT09InN0cmluZyJ9c3RhdGljIF9nZXRFbGVtZW50cyh0KXtjb25zdCBuPXQuZ2V0RWxlbWVudHMoKTtpZihHZS5faXNTdHJpbmdBcnJheShuKSl7Y29uc3Qgcj1uZXcgSW50MzJBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBpPTAscz1uLmxlbmd0aDtpPHM7aSsrKXJbaV09eW8obltpXSwwKTtyZXR1cm5bbixyLCEwXX1yZXR1cm4gbiBpbnN0YW5jZW9mIEludDMyQXJyYXk/W1tdLG4sITFdOltbXSxuZXcgSW50MzJBcnJheShuKSwhMV19RWxlbWVudHNBcmVFcXVhbCh0LG4pe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdIT09dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtuXT8hMTp0aGlzLl9oYXNTdHJpbmdzP3RoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW25dOiEwfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwodCxuKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsbikpcmV0dXJuITE7Y29uc3Qgcj1HZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLHQpLGk9R2UuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSxuKTtyZXR1cm4gcj09PWl9c3RhdGljIF9nZXRTdHJpY3RFbGVtZW50KHQsbil7cmV0dXJuIHR5cGVvZiB0LmdldFN0cmljdEVsZW1lbnQ9PSJmdW5jdGlvbiI/dC5nZXRTdHJpY3RFbGVtZW50KG4pOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbbl06ITB9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbbl06ITB9Q29tcHV0ZURpZmYodCl7cmV0dXJuIHRoaXMuX0NvbXB1dGVEaWZmKDAsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMSwwLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsdCl9X0NvbXB1dGVEaWZmKHQsbixyLGkscyl7Y29uc3QgYT1bITFdO2xldCBvPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCxuLHIsaSxhKTtyZXR1cm4gcyYmKG89dGhpcy5QcmV0dGlmeUNoYW5nZXMobykpLHtxdWl0RWFybHk6YVswXSxjaGFuZ2VzOm99fUNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsbixyLGkscyl7Zm9yKHNbMF09ITE7dDw9biYmcjw9aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQscik7KXQrKyxyKys7Zm9yKDtuPj10JiZpPj1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobixpKTspbi0tLGktLTtpZih0Pm58fHI+aSl7bGV0IGg7cmV0dXJuIHI8PWk/KGd0LkFzc2VydCh0PT09bisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxoPVtuZXcgemUodCwwLHIsaS1yKzEpXSk6dDw9bj8oZ3QuQXNzZXJ0KHI9PT1pKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGg9W25ldyB6ZSh0LG4tdCsxLHIsMCldKTooZ3QuQXNzZXJ0KHQ9PT1uKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGd0LkFzc2VydChyPT09aSsxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxoPVtdKSxofWNvbnN0IGE9WzBdLG89WzBdLGw9dGhpcy5Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLHIsaSxhLG8scyksdT1hWzBdLGY9b1swXTtpZihsIT09bnVsbClyZXR1cm4gbDtpZighc1swXSl7Y29uc3QgaD10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsdSxyLGYscyk7bGV0IGQ9W107cmV0dXJuIHNbMF0/ZD1bbmV3IHplKHUrMSxuLSh1KzEpKzEsZisxLGktKGYrMSkrMSldOmQ9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh1KzEsbixmKzEsaSxzKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhoLGQpfXJldHVybltuZXcgemUodCxuLXQrMSxyLGktcisxKV19V0FMS1RSQUNFKHQsbixyLGkscyxhLG8sbCx1LGYsaCxkLGcsbSx2LHAseCx5KXtsZXQgYj1udWxsLEw9bnVsbCxTPW5ldyBHcixfPW4sTj1yLEE9Z1swXS1wWzBdLWksTT0tMTA3Mzc0MTgyNCxJPXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCBDPUErdDtDPT09X3x8QzxOJiZ1W0MtMV08dVtDKzFdPyhoPXVbQysxXSxtPWgtQS1pLGg8TSYmUy5NYXJrTmV4dENoYW5nZSgpLE09aCxTLkFkZE1vZGlmaWVkRWxlbWVudChoKzEsbSksQT1DKzEtdCk6KGg9dVtDLTFdKzEsbT1oLUEtaSxoPE0mJlMuTWFya05leHRDaGFuZ2UoKSxNPWgtMSxTLkFkZE9yaWdpbmFsRWxlbWVudChoLG0rMSksQT1DLTEtdCksST49MCYmKHU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W0ldLHQ9dVswXSxfPTEsTj11Lmxlbmd0aC0xKX13aGlsZSgtLUk+PS0xKTtpZihiPVMuZ2V0UmV2ZXJzZUNoYW5nZXMoKSx5WzBdKXtsZXQgQz1nWzBdKzEsdz1wWzBdKzE7aWYoYiE9PW51bGwmJmIubGVuZ3RoPjApe2NvbnN0IFQ9YltiLmxlbmd0aC0xXTtDPU1hdGgubWF4KEMsVC5nZXRPcmlnaW5hbEVuZCgpKSx3PU1hdGgubWF4KHcsVC5nZXRNb2RpZmllZEVuZCgpKX1MPVtuZXcgemUoQyxkLUMrMSx3LHYtdysxKV19ZWxzZXtTPW5ldyBHcixfPWEsTj1vLEE9Z1swXS1wWzBdLWwsTT0xMDczNzQxODI0LEk9eD90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IEM9QStzO0M9PT1ffHxDPE4mJmZbQy0xXT49ZltDKzFdPyhoPWZbQysxXS0xLG09aC1BLWwsaD5NJiZTLk1hcmtOZXh0Q2hhbmdlKCksTT1oKzEsUy5BZGRPcmlnaW5hbEVsZW1lbnQoaCsxLG0rMSksQT1DKzEtcyk6KGg9ZltDLTFdLG09aC1BLWwsaD5NJiZTLk1hcmtOZXh0Q2hhbmdlKCksTT1oLFMuQWRkTW9kaWZpZWRFbGVtZW50KGgrMSxtKzEpLEE9Qy0xLXMpLEk+PTAmJihmPXRoaXMubV9yZXZlcnNlSGlzdG9yeVtJXSxzPWZbMF0sXz0xLE49Zi5sZW5ndGgtMSl9d2hpbGUoLS1JPj0tMSk7TD1TLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoYixMKX1Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLHIsaSxzLGEsbyl7bGV0IGw9MCx1PTAsZj0wLGg9MCxkPTAsZz0wO3QtLSxyLS0sc1swXT0wLGFbMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IG09bi10KyhpLXIpLHY9bSsxLHA9bmV3IEludDMyQXJyYXkodikseD1uZXcgSW50MzJBcnJheSh2KSx5PWktcixiPW4tdCxMPXQtcixTPW4taSxOPShiLXkpJTI9PT0wO3BbeV09dCx4W2JdPW4sb1swXT0hMTtmb3IobGV0IEE9MTtBPD1tLzIrMTtBKyspe2xldCBNPTAsST0wO2Y9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZCh5LUEsQSx5LHYpLGg9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZCh5K0EsQSx5LHYpO2ZvcihsZXQgdz1mO3c8PWg7dys9Mil7dz09PWZ8fHc8aCYmcFt3LTFdPHBbdysxXT9sPXBbdysxXTpsPXBbdy0xXSsxLHU9bC0ody15KS1MO2NvbnN0IFQ9bDtmb3IoO2w8biYmdTxpJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobCsxLHUrMSk7KWwrKyx1Kys7aWYocFt3XT1sLGwrdT5NK0kmJihNPWwsST11KSwhTiYmTWF0aC5hYnMody1iKTw9QS0xJiZsPj14W3ddKXJldHVybiBzWzBdPWwsYVswXT11LFQ8PXhbd10mJkE8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoeSxmLGgsTCxiLGQsZyxTLHAseCxsLG4scyx1LGksYSxOLG8pOm51bGx9Y29uc3QgQz0oTS10KyhJLXIpLUEpLzI7aWYodGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUhPT1udWxsJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoTSxDKSlyZXR1cm4gb1swXT0hMCxzWzBdPU0sYVswXT1JLEM+MCYmQTw9MTQ0OD90aGlzLldBTEtUUkFDRSh5LGYsaCxMLGIsZCxnLFMscCx4LGwsbixzLHUsaSxhLE4sbyk6KHQrKyxyKyssW25ldyB6ZSh0LG4tdCsxLHIsaS1yKzEpXSk7ZD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGItQSxBLGIsdiksZz10aGlzLkNsaXBEaWFnb25hbEJvdW5kKGIrQSxBLGIsdik7Zm9yKGxldCB3PWQ7dzw9Zzt3Kz0yKXt3PT09ZHx8dzxnJiZ4W3ctMV0+PXhbdysxXT9sPXhbdysxXS0xOmw9eFt3LTFdLHU9bC0ody1iKS1TO2NvbnN0IFQ9bDtmb3IoO2w+dCYmdT5yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobCx1KTspbC0tLHUtLTtpZih4W3ddPWwsTiYmTWF0aC5hYnMody15KTw9QSYmbDw9cFt3XSlyZXR1cm4gc1swXT1sLGFbMF09dSxUPj1wW3ddJiZBPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKHksZixoLEwsYixkLGcsUyxwLHgsbCxuLHMsdSxpLGEsTixvKTpudWxsfWlmKEE8PTE0NDcpe2xldCB3PW5ldyBJbnQzMkFycmF5KGgtZisyKTt3WzBdPXktZisxLG10LkNvcHkyKHAsZix3LDEsaC1mKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKHcpLHc9bmV3IEludDMyQXJyYXkoZy1kKzIpLHdbMF09Yi1kKzEsbXQuQ29weTIoeCxkLHcsMSxnLWQrMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2godyl9fXJldHVybiB0aGlzLldBTEtUUkFDRSh5LGYsaCxMLGIsZCxnLFMscCx4LGwsbixzLHUsaSxhLE4sbyl9UHJldHRpZnlDaGFuZ2VzKHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCByPXRbbl0saT1uPHQubGVuZ3RoLTE/dFtuKzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgscz1uPHQubGVuZ3RoLTE/dFtuKzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsYT1yLm9yaWdpbmFsTGVuZ3RoPjAsbz1yLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtyLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aDxpJiZyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aDxzJiYoIWF8fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHIub3JpZ2luYWxTdGFydCxyLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aCkpJiYoIW98fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKHIubW9kaWZpZWRTdGFydCxyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgdT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoci5vcmlnaW5hbFN0YXJ0LHIubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKHIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoLHIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoKSYmIXUpYnJlYWs7ci5vcmlnaW5hbFN0YXJ0Kyssci5tb2RpZmllZFN0YXJ0Kyt9Y29uc3QgbD1bbnVsbF07aWYobjx0Lmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKHRbbl0sdFtuKzFdLGwpKXt0W25dPWxbMF0sdC5zcGxpY2UobisxLDEpLG4tLTtjb250aW51ZX19Zm9yKGxldCBuPXQubGVuZ3RoLTE7bj49MDtuLS0pe2NvbnN0IHI9dFtuXTtsZXQgaT0wLHM9MDtpZihuPjApe2NvbnN0IGg9dFtuLTFdO2k9aC5vcmlnaW5hbFN0YXJ0K2gub3JpZ2luYWxMZW5ndGgscz1oLm1vZGlmaWVkU3RhcnQraC5tb2RpZmllZExlbmd0aH1jb25zdCBhPXIub3JpZ2luYWxMZW5ndGg+MCxvPXIubW9kaWZpZWRMZW5ndGg+MDtsZXQgbD0wLHU9dGhpcy5fYm91bmRhcnlTY29yZShyLm9yaWdpbmFsU3RhcnQsci5vcmlnaW5hbExlbmd0aCxyLm1vZGlmaWVkU3RhcnQsci5tb2RpZmllZExlbmd0aCk7Zm9yKGxldCBoPTE7O2grKyl7Y29uc3QgZD1yLm9yaWdpbmFsU3RhcnQtaCxnPXIubW9kaWZpZWRTdGFydC1oO2lmKGQ8aXx8ZzxzfHxhJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwoZCxkK3Iub3JpZ2luYWxMZW5ndGgpfHxvJiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwoZyxnK3IubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2NvbnN0IHY9KGQ9PT1pJiZnPT09cz81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUoZCxyLm9yaWdpbmFsTGVuZ3RoLGcsci5tb2RpZmllZExlbmd0aCk7dj51JiYodT12LGw9aCl9ci5vcmlnaW5hbFN0YXJ0LT1sLHIubW9kaWZpZWRTdGFydC09bDtjb25zdCBmPVtudWxsXTtpZihuPjAmJnRoaXMuQ2hhbmdlc092ZXJsYXAodFtuLTFdLHRbbl0sZikpe3Rbbi0xXT1mWzBdLHQuc3BsaWNlKG4sMSksbisrO2NvbnRpbnVlfX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgbj0xLHI9dC5sZW5ndGg7bjxyO24rKyl7Y29uc3QgaT10W24tMV0scz10W25dLGE9cy5vcmlnaW5hbFN0YXJ0LWkub3JpZ2luYWxTdGFydC1pLm9yaWdpbmFsTGVuZ3RoLG89aS5vcmlnaW5hbFN0YXJ0LGw9cy5vcmlnaW5hbFN0YXJ0K3Mub3JpZ2luYWxMZW5ndGgsdT1sLW8sZj1pLm1vZGlmaWVkU3RhcnQsaD1zLm1vZGlmaWVkU3RhcnQrcy5tb2RpZmllZExlbmd0aCxkPWgtZjtpZihhPDUmJnU8MjAmJmQ8MjApe2NvbnN0IGc9dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShvLHUsZixkLGEpO2lmKGcpe2NvbnN0W20sdl09ZzsobSE9PWkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RofHx2IT09aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgpJiYoaS5vcmlnaW5hbExlbmd0aD1tLWkub3JpZ2luYWxTdGFydCxpLm1vZGlmaWVkTGVuZ3RoPXYtaS5tb2RpZmllZFN0YXJ0LHMub3JpZ2luYWxTdGFydD1tK2Escy5tb2RpZmllZFN0YXJ0PXYrYSxzLm9yaWdpbmFsTGVuZ3RoPWwtcy5vcmlnaW5hbFN0YXJ0LHMubW9kaWZpZWRMZW5ndGg9aC1zLm1vZGlmaWVkU3RhcnQpfX19cmV0dXJuIHR9X2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UodCxuLHIsaSxzKXtpZihuPHN8fGk8cylyZXR1cm4gbnVsbDtjb25zdCBhPXQrbi1zKzEsbz1yK2ktcysxO2xldCBsPTAsdT0wLGY9MDtmb3IobGV0IGg9dDtoPGE7aCsrKWZvcihsZXQgZD1yO2Q8bztkKyspe2NvbnN0IGc9dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUoaCxkLHMpO2c+MCYmZz5sJiYobD1nLHU9aCxmPWQpfXJldHVybiBsPjA/W3UsZl06bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxuLHIpe2xldCBpPTA7Zm9yKGxldCBzPTA7czxyO3MrKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0K3MsbitzKSlyZXR1cm4gMDtpKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3Qrc10ubGVuZ3RofXJldHVybiBpfV9PcmlnaW5hbElzQm91bmRhcnkodCl7cmV0dXJuIHQ8PTB8fHQ+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTE/ITA6dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF0pfV9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKXtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkodCl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeSh0LTEpKXJldHVybiEwO2lmKG4+MCl7Y29uc3Qgcj10K247aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHItMSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShyKSlyZXR1cm4hMH1yZXR1cm4hMX1fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpe3JldHVybiB0PD0wfHx0Pj10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xPyEwOnRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KHQsbil7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkodC0xKSlyZXR1cm4hMDtpZihuPjApe2NvbnN0IHI9dCtuO2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShyLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkocikpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUodCxuLHIsaSl7Y29uc3Qgcz10aGlzLl9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKT8xOjAsYT10aGlzLl9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkocixpKT8xOjA7cmV0dXJuIHMrYX1Db25jYXRlbmF0ZUNoYW5nZXModCxuKXtjb25zdCByPVtdO2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBuLmxlbmd0aD4wP246dDtpZih0aGlzLkNoYW5nZXNPdmVybGFwKHRbdC5sZW5ndGgtMV0sblswXSxyKSl7Y29uc3QgaT1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgtMSk7cmV0dXJuIG10LkNvcHkodCwwLGksMCx0Lmxlbmd0aC0xKSxpW3QubGVuZ3RoLTFdPXJbMF0sbXQuQ29weShuLDEsaSx0Lmxlbmd0aCxuLmxlbmd0aC0xKSxpfWVsc2V7Y29uc3QgaT1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgpO3JldHVybiBtdC5Db3B5KHQsMCxpLDAsdC5sZW5ndGgpLG10LkNvcHkobiwwLGksdC5sZW5ndGgsbi5sZW5ndGgpLGl9fUNoYW5nZXNPdmVybGFwKHQsbixyKXtpZihndC5Bc3NlcnQodC5vcmlnaW5hbFN0YXJ0PD1uLm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZ3QuQXNzZXJ0KHQubW9kaWZpZWRTdGFydDw9bi5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoPj1uLm9yaWdpbmFsU3RhcnR8fHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoPj1uLm1vZGlmaWVkU3RhcnQpe2NvbnN0IGk9dC5vcmlnaW5hbFN0YXJ0O2xldCBzPXQub3JpZ2luYWxMZW5ndGg7Y29uc3QgYT10Lm1vZGlmaWVkU3RhcnQ7bGV0IG89dC5tb2RpZmllZExlbmd0aDtyZXR1cm4gdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydCYmKHM9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtdC5vcmlnaW5hbFN0YXJ0KSx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0JiYobz1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC10Lm1vZGlmaWVkU3RhcnQpLHJbMF09bmV3IHplKGkscyxhLG8pLCEwfWVsc2UgcmV0dXJuIHJbMF09bnVsbCwhMX1DbGlwRGlhZ29uYWxCb3VuZCh0LG4scixpKXtpZih0Pj0wJiZ0PGkpcmV0dXJuIHQ7Y29uc3Qgcz1yLGE9aS1yLTEsbz1uJTI9PT0wO2lmKHQ8MCl7Y29uc3QgbD1zJTI9PT0wO3JldHVybiBvPT09bD8wOjF9ZWxzZXtjb25zdCBsPWElMj09PTA7cmV0dXJuIG89PT1sP2ktMTppLTJ9fX12YXIgSnI9e0VOVl9UWVBFOiJsb2NhbCIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifTtsZXQgcHQ7Y29uc3QgcW49Z2xvYmFsVGhpcy52c2NvZGU7aWYodHlwZW9mIHFuPCJ1IiYmdHlwZW9mIHFuLnByb2Nlc3M8InUiKXtjb25zdCBlPXFuLnByb2Nlc3M7cHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZCgpe3JldHVybiBlLmN3ZCgpfX19ZWxzZSB0eXBlb2YgcHJvY2VzczwidSI/cHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gSnJ9LGN3ZCgpe3JldHVybiBKci5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06cHQ9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBSdD8id2luMzIiOllhPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZCgpe3JldHVybiIvIn19O2NvbnN0IHRuPXB0LmN3ZCxfbz1wdC5lbnYsU289cHQucGxhdGZvcm0sTG89NjUsTm89OTcsQW89OTAsQ289MTIyLEplPTQ2LG9lPTQ3LGdlPTkyLFhlPTU4LGtvPTYzO2NsYXNzIFhyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLHIpe2xldCBpO3R5cGVvZiBuPT0ic3RyaW5nIiYmbi5pbmRleE9mKCJub3QgIik9PT0wPyhpPSJtdXN0IG5vdCBiZSIsbj1uLnJlcGxhY2UoL15ub3QgLywiIikpOmk9Im11c3QgYmUiO2NvbnN0IHM9dC5pbmRleE9mKCIuIikhPT0tMT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IGE9YFRoZSAiJHt0fSIgJHtzfSAke2l9IG9mIHR5cGUgJHtufWA7YSs9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiByfWAsc3VwZXIoYSksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIEVvKGUsdCl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgWHIodCwiT2JqZWN0IixlKX1mdW5jdGlvbiBlZShlLHQpe2lmKHR5cGVvZiBlIT0ic3RyaW5nIil0aHJvdyBuZXcgWHIodCwic3RyaW5nIixlKX1jb25zdCBRZT1Tbz09PSJ3aW4zMiI7ZnVuY3Rpb24gVyhlKXtyZXR1cm4gZT09PW9lfHxlPT09Z2V9ZnVuY3Rpb24gQm4oZSl7cmV0dXJuIGU9PT1vZX1mdW5jdGlvbiBaZShlKXtyZXR1cm4gZT49TG8mJmU8PUFvfHxlPj1ObyYmZTw9Q299ZnVuY3Rpb24gbm4oZSx0LG4scil7bGV0IGk9IiIscz0wLGE9LTEsbz0wLGw9MDtmb3IobGV0IHU9MDt1PD1lLmxlbmd0aDsrK3Upe2lmKHU8ZS5sZW5ndGgpbD1lLmNoYXJDb2RlQXQodSk7ZWxzZXtpZihyKGwpKWJyZWFrO2w9b2V9aWYocihsKSl7aWYoIShhPT09dS0xfHxvPT09MSkpaWYobz09PTIpe2lmKGkubGVuZ3RoPDJ8fHMhPT0yfHxpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMSkhPT1KZXx8aS5jaGFyQ29kZUF0KGkubGVuZ3RoLTIpIT09SmUpe2lmKGkubGVuZ3RoPjIpe2NvbnN0IGY9aS5sYXN0SW5kZXhPZihuKTtmPT09LTE/KGk9IiIscz0wKTooaT1pLnNsaWNlKDAsZikscz1pLmxlbmd0aC0xLWkubGFzdEluZGV4T2YobikpLGE9dSxvPTA7Y29udGludWV9ZWxzZSBpZihpLmxlbmd0aCE9PTApe2k9IiIscz0wLGE9dSxvPTA7Y29udGludWV9fXQmJihpKz1pLmxlbmd0aD4wP2Ake259Li5gOiIuLiIscz0yKX1lbHNlIGkubGVuZ3RoPjA/aSs9YCR7bn0ke2Uuc2xpY2UoYSsxLHUpfWA6aT1lLnNsaWNlKGErMSx1KSxzPXUtYS0xO2E9dSxvPTB9ZWxzZSBsPT09SmUmJm8hPT0tMT8rK286bz0tMX1yZXR1cm4gaX1mdW5jdGlvbiBRcihlLHQpe0VvKHQsInBhdGhPYmplY3QiKTtjb25zdCBuPXQuZGlyfHx0LnJvb3Qscj10LmJhc2V8fGAke3QubmFtZXx8IiJ9JHt0LmV4dHx8IiJ9YDtyZXR1cm4gbj9uPT09dC5yb290P2Ake259JHtyfWA6YCR7bn0ke2V9JHtyfWA6cn1jb25zdCBoZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSIiLHI9ITE7Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49LTE7aS0tKXtsZXQgcztpZihpPj0wKXtpZihzPWVbaV0sZWUocywicGF0aCIpLHMubGVuZ3RoPT09MCljb250aW51ZX1lbHNlIHQubGVuZ3RoPT09MD9zPXRuKCk6KHM9X29bYD0ke3R9YF18fHRuKCksKHM9PT12b2lkIDB8fHMuc2xpY2UoMCwyKS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpJiZzLmNoYXJDb2RlQXQoMik9PT1nZSkmJihzPWAke3R9XFxgKSk7Y29uc3QgYT1zLmxlbmd0aDtsZXQgbz0wLGw9IiIsdT0hMTtjb25zdCBmPXMuY2hhckNvZGVBdCgwKTtpZihhPT09MSlXKGYpJiYobz0xLHU9ITApO2Vsc2UgaWYoVyhmKSlpZih1PSEwLFcocy5jaGFyQ29kZUF0KDEpKSl7bGV0IGg9MixkPWg7Zm9yKDtoPGEmJiFXKHMuY2hhckNvZGVBdChoKSk7KWgrKztpZihoPGEmJmghPT1kKXtjb25zdCBnPXMuc2xpY2UoZCxoKTtmb3IoZD1oO2g8YSYmVyhzLmNoYXJDb2RlQXQoaCkpOyloKys7aWYoaDxhJiZoIT09ZCl7Zm9yKGQ9aDtoPGEmJiFXKHMuY2hhckNvZGVBdChoKSk7KWgrKzsoaD09PWF8fGghPT1kKSYmKGw9YFxcXFwke2d9XFwke3Muc2xpY2UoZCxoKX1gLG89aCl9fX1lbHNlIG89MTtlbHNlIFplKGYpJiZzLmNoYXJDb2RlQXQoMSk9PT1YZSYmKGw9cy5zbGljZSgwLDIpLG89MixhPjImJlcocy5jaGFyQ29kZUF0KDIpKSYmKHU9ITAsbz0zKSk7aWYobC5sZW5ndGg+MClpZih0Lmxlbmd0aD4wKXtpZihsLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSB0PWw7aWYocil7aWYodC5sZW5ndGg+MClicmVha31lbHNlIGlmKG49YCR7cy5zbGljZShvKX1cXCR7bn1gLHI9dSx1JiZ0Lmxlbmd0aD4wKWJyZWFrfXJldHVybiBuPW5uKG4sIXIsIlxcIixXKSxyP2Ake3R9XFwke259YDpgJHt0fSR7bn1gfHwiLiJ9LG5vcm1hbGl6ZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49MCxyLGk9ITE7Y29uc3Qgcz1lLmNoYXJDb2RlQXQoMCk7aWYodD09PTEpcmV0dXJuIEJuKHMpPyJcXCI6ZTtpZihXKHMpKWlmKGk9ITAsVyhlLmNoYXJDb2RlQXQoMSkpKXtsZXQgbz0yLGw9bztmb3IoO288dCYmIVcoZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG88dCYmbyE9PWwpe2NvbnN0IHU9ZS5zbGljZShsLG8pO2ZvcihsPW87bzx0JiZXKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT1sKXtmb3IobD1vO288dCYmIVcoZS5jaGFyQ29kZUF0KG8pKTspbysrO2lmKG89PT10KXJldHVybmBcXFxcJHt1fVxcJHtlLnNsaWNlKGwpfVxcYDtvIT09bCYmKHI9YFxcXFwke3V9XFwke2Uuc2xpY2UobCxvKX1gLG49byl9fX1lbHNlIG49MTtlbHNlIFplKHMpJiZlLmNoYXJDb2RlQXQoMSk9PT1YZSYmKHI9ZS5zbGljZSgwLDIpLG49Mix0PjImJlcoZS5jaGFyQ29kZUF0KDIpKSYmKGk9ITAsbj0zKSk7bGV0IGE9bjx0P25uKGUuc2xpY2UobiksIWksIlxcIixXKToiIjtyZXR1cm4gYS5sZW5ndGg9PT0wJiYhaSYmKGE9Ii4iKSxhLmxlbmd0aD4wJiZXKGUuY2hhckNvZGVBdCh0LTEpKSYmKGErPSJcXCIpLHI9PT12b2lkIDA/aT9gXFwke2F9YDphOmk/YCR7cn1cXCR7YX1gOmAke3J9JHthfWB9LGlzQWJzb2x1dGUoZSl7ZWUoZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIFcobil8fHQ+MiYmWmUobikmJmUuY2hhckNvZGVBdCgxKT09PVhlJiZXKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdCxuO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7KytzKXtjb25zdCBhPWVbc107ZWUoYSwicGF0aCIpLGEubGVuZ3RoPjAmJih0PT09dm9pZCAwP3Q9bj1hOnQrPWBcXCR7YX1gKX1pZih0PT09dm9pZCAwKXJldHVybiIuIjtsZXQgcj0hMCxpPTA7aWYodHlwZW9mIG49PSJzdHJpbmciJiZXKG4uY2hhckNvZGVBdCgwKSkpeysraTtjb25zdCBzPW4ubGVuZ3RoO3M+MSYmVyhuLmNoYXJDb2RlQXQoMSkpJiYoKytpLHM+MiYmKFcobi5jaGFyQ29kZUF0KDIpKT8rK2k6cj0hMSkpfWlmKHIpe2Zvcig7aTx0Lmxlbmd0aCYmVyh0LmNoYXJDb2RlQXQoaSkpOylpKys7aT49MiYmKHQ9YFxcJHt0LnNsaWNlKGkpfWApfXJldHVybiBoZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoZWUoZSwiZnJvbSIpLGVlKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1oZS5yZXNvbHZlKGUpLHI9aGUucmVzb2x2ZSh0KTtpZihuPT09cnx8KGU9bi50b0xvd2VyQ2FzZSgpLHQ9ci50b0xvd2VyQ2FzZSgpLGU9PT10KSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09Z2U7KWkrKztsZXQgcz1lLmxlbmd0aDtmb3IoO3MtMT5pJiZlLmNoYXJDb2RlQXQocy0xKT09PWdlOylzLS07Y29uc3QgYT1zLWk7bGV0IG89MDtmb3IoO288dC5sZW5ndGgmJnQuY2hhckNvZGVBdChvKT09PWdlOylvKys7bGV0IGw9dC5sZW5ndGg7Zm9yKDtsLTE+byYmdC5jaGFyQ29kZUF0KGwtMSk9PT1nZTspbC0tO2NvbnN0IHU9bC1vLGY9YTx1P2E6dTtsZXQgaD0tMSxkPTA7Zm9yKDtkPGY7ZCsrKXtjb25zdCBtPWUuY2hhckNvZGVBdChpK2QpO2lmKG0hPT10LmNoYXJDb2RlQXQobytkKSlicmVhazttPT09Z2UmJihoPWQpfWlmKGQhPT1mKXtpZihoPT09LTEpcmV0dXJuIHJ9ZWxzZXtpZih1PmYpe2lmKHQuY2hhckNvZGVBdChvK2QpPT09Z2UpcmV0dXJuIHIuc2xpY2UobytkKzEpO2lmKGQ9PT0yKXJldHVybiByLnNsaWNlKG8rZCl9YT5mJiYoZS5jaGFyQ29kZUF0KGkrZCk9PT1nZT9oPWQ6ZD09PTImJihoPTMpKSxoPT09LTEmJihoPTApfWxldCBnPSIiO2ZvcihkPWkraCsxO2Q8PXM7KytkKShkPT09c3x8ZS5jaGFyQ29kZUF0KGQpPT09Z2UpJiYoZys9Zy5sZW5ndGg9PT0wPyIuLiI6IlxcLi4iKTtyZXR1cm4gbys9aCxnLmxlbmd0aD4wP2Ake2d9JHtyLnNsaWNlKG8sbCl9YDooci5jaGFyQ29kZUF0KG8pPT09Z2UmJisrbyxyLnNsaWNlKG8sbCkpfSx0b05hbWVzcGFjZWRQYXRoKGUpe2lmKHR5cGVvZiBlIT0ic3RyaW5nInx8ZS5sZW5ndGg9PT0wKXJldHVybiBlO2NvbnN0IHQ9aGUucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1nZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09Z2Upe2NvbnN0IG49dC5jaGFyQ29kZUF0KDIpO2lmKG4hPT1rbyYmbiE9PUplKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihaZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT1YZSYmdC5jaGFyQ29kZUF0KDIpPT09Z2UpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4iLiI7bGV0IG49LTEscj0wO2NvbnN0IGk9ZS5jaGFyQ29kZUF0KDApO2lmKHQ9PT0xKXJldHVybiBXKGkpP2U6Ii4iO2lmKFcoaSkpe2lmKG49cj0xLFcoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IG89MixsPW87Zm9yKDtvPHQmJiFXKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPHQmJm8hPT1sKXtmb3IobD1vO288dCYmVyhlLmNoYXJDb2RlQXQobykpOylvKys7aWYobzx0JiZvIT09bCl7Zm9yKGw9bztvPHQmJiFXKGUuY2hhckNvZGVBdChvKSk7KW8rKztpZihvPT09dClyZXR1cm4gZTtvIT09bCYmKG49cj1vKzEpfX19fWVsc2UgWmUoaSkmJmUuY2hhckNvZGVBdCgxKT09PVhlJiYobj10PjImJlcoZS5jaGFyQ29kZUF0KDIpKT8zOjIscj1uKTtsZXQgcz0tMSxhPSEwO2ZvcihsZXQgbz10LTE7bz49cjstLW8paWYoVyhlLmNoYXJDb2RlQXQobykpKXtpZighYSl7cz1vO2JyZWFrfX1lbHNlIGE9ITE7aWYocz09PS0xKXtpZihuPT09LTEpcmV0dXJuIi4iO3M9bn1yZXR1cm4gZS5zbGljZSgwLHMpfSxiYXNlbmFtZShlLHQpe3QhPT12b2lkIDAmJmVlKHQsImV4dCIpLGVlKGUsInBhdGgiKTtsZXQgbj0wLHI9LTEsaT0hMCxzO2lmKGUubGVuZ3RoPj0yJiZaZShlLmNoYXJDb2RlQXQoMCkpJiZlLmNoYXJDb2RlQXQoMSk9PT1YZSYmKG49MiksdCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLG89LTE7Zm9yKHM9ZS5sZW5ndGgtMTtzPj1uOy0tcyl7Y29uc3QgbD1lLmNoYXJDb2RlQXQocyk7aWYoVyhsKSl7aWYoIWkpe249cysxO2JyZWFrfX1lbHNlIG89PT0tMSYmKGk9ITEsbz1zKzEpLGE+PTAmJihsPT09dC5jaGFyQ29kZUF0KGEpPy0tYT09PS0xJiYocj1zKTooYT0tMSxyPW8pKX1yZXR1cm4gbj09PXI/cj1vOnI9PT0tMSYmKHI9ZS5sZW5ndGgpLGUuc2xpY2UobixyKX1mb3Iocz1lLmxlbmd0aC0xO3M+PW47LS1zKWlmKFcoZS5jaGFyQ29kZUF0KHMpKSl7aWYoIWkpe249cysxO2JyZWFrfX1lbHNlIHI9PT0tMSYmKGk9ITEscj1zKzEpO3JldHVybiByPT09LTE/IiI6ZS5zbGljZShuLHIpfSxleHRuYW1lKGUpe2VlKGUsInBhdGgiKTtsZXQgdD0wLG49LTEscj0wLGk9LTEscz0hMCxhPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PVhlJiZaZShlLmNoYXJDb2RlQXQoMCkpJiYodD1yPTIpO2ZvcihsZXQgbz1lLmxlbmd0aC0xO28+PXQ7LS1vKXtjb25zdCBsPWUuY2hhckNvZGVBdChvKTtpZihXKGwpKXtpZighcyl7cj1vKzE7YnJlYWt9Y29udGludWV9aT09PS0xJiYocz0hMSxpPW8rMSksbD09PUplP249PT0tMT9uPW86YSE9PTEmJihhPTEpOm4hPT0tMSYmKGE9LTEpfXJldHVybiBuPT09LTF8fGk9PT0tMXx8YT09PTB8fGE9PT0xJiZuPT09aS0xJiZuPT09cisxPyIiOmUuc2xpY2UobixpKX0sZm9ybWF0OlFyLmJpbmQobnVsbCwiXFwiKSxwYXJzZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5sZW5ndGg7bGV0IHI9MCxpPWUuY2hhckNvZGVBdCgwKTtpZihuPT09MSlyZXR1cm4gVyhpKT8odC5yb290PXQuZGlyPWUsdCk6KHQuYmFzZT10Lm5hbWU9ZSx0KTtpZihXKGkpKXtpZihyPTEsVyhlLmNoYXJDb2RlQXQoMSkpKXtsZXQgaD0yLGQ9aDtmb3IoO2g8biYmIVcoZS5jaGFyQ29kZUF0KGgpKTspaCsrO2lmKGg8biYmaCE9PWQpe2ZvcihkPWg7aDxuJiZXKGUuY2hhckNvZGVBdChoKSk7KWgrKztpZihoPG4mJmghPT1kKXtmb3IoZD1oO2g8biYmIVcoZS5jaGFyQ29kZUF0KGgpKTspaCsrO2g9PT1uP3I9aDpoIT09ZCYmKHI9aCsxKX19fX1lbHNlIGlmKFplKGkpJiZlLmNoYXJDb2RlQXQoMSk9PT1YZSl7aWYobjw9MilyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtpZihyPTIsVyhlLmNoYXJDb2RlQXQoMikpKXtpZihuPT09MylyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtyPTN9fXI+MCYmKHQucm9vdD1lLnNsaWNlKDAscikpO2xldCBzPS0xLGE9cixvPS0xLGw9ITAsdT1lLmxlbmd0aC0xLGY9MDtmb3IoO3U+PXI7LS11KXtpZihpPWUuY2hhckNvZGVBdCh1KSxXKGkpKXtpZighbCl7YT11KzE7YnJlYWt9Y29udGludWV9bz09PS0xJiYobD0hMSxvPXUrMSksaT09PUplP3M9PT0tMT9zPXU6ZiE9PTEmJihmPTEpOnMhPT0tMSYmKGY9LTEpfXJldHVybiBvIT09LTEmJihzPT09LTF8fGY9PT0wfHxmPT09MSYmcz09PW8tMSYmcz09PWErMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UoYSxvKToodC5uYW1lPWUuc2xpY2UoYSxzKSx0LmJhc2U9ZS5zbGljZShhLG8pLHQuZXh0PWUuc2xpY2UocyxvKSkpLGE+MCYmYSE9PXI/dC5kaXI9ZS5zbGljZSgwLGEtMSk6dC5kaXI9dC5yb290LHR9LHNlcDoiXFwiLGRlbGltaXRlcjoiOyIsd2luMzI6bnVsbCxwb3NpeDpudWxsfSxNbz0oKCk9PntpZihRZSl7Y29uc3QgZT0vXFwvZztyZXR1cm4oKT0+e2NvbnN0IHQ9dG4oKS5yZXBsYWNlKGUsIi8iKTtyZXR1cm4gdC5zbGljZSh0LmluZGV4T2YoIi8iKSl9fXJldHVybigpPT50bigpfSkoKSxtZT17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSExO2ZvcihsZXQgcj1lLmxlbmd0aC0xO3I+PS0xJiYhbjtyLS0pe2NvbnN0IGk9cj49MD9lW3JdOk1vKCk7ZWUoaSwicGF0aCIpLGkubGVuZ3RoIT09MCYmKHQ9YCR7aX0vJHt0fWAsbj1pLmNoYXJDb2RlQXQoMCk9PT1vZSl9cmV0dXJuIHQ9bm4odCwhbiwiLyIsQm4pLG4/YC8ke3R9YDp0Lmxlbmd0aD4wP3Q6Ii4ifSxub3JtYWxpemUoZSl7aWYoZWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1vZSxuPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKT09PW9lO3JldHVybiBlPW5uKGUsIXQsIi8iLEJuKSxlLmxlbmd0aD09PTA/dD8iLyI6bj8iLi8iOiIuIjoobiYmKGUrPSIvIiksdD9gLyR7ZX1gOmUpfSxpc0Fic29sdXRlKGUpe3JldHVybiBlZShlLCJwYXRoIiksZS5sZW5ndGg+MCYmZS5jaGFyQ29kZUF0KDApPT09b2V9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbil7Y29uc3Qgcj1lW25dO2VlKHIsInBhdGgiKSxyLmxlbmd0aD4wJiYodD09PXZvaWQgMD90PXI6dCs9YC8ke3J9YCl9cmV0dXJuIHQ9PT12b2lkIDA/Ii4iOm1lLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihlZShlLCJmcm9tIiksZWUodCwidG8iKSxlPT09dHx8KGU9bWUucmVzb2x2ZShlKSx0PW1lLnJlc29sdmUodCksZT09PXQpKXJldHVybiIiO2NvbnN0IG49MSxyPWUubGVuZ3RoLGk9ci1uLHM9MSxhPXQubGVuZ3RoLXMsbz1pPGE/aTphO2xldCBsPS0xLHU9MDtmb3IoO3U8bzt1Kyspe2NvbnN0IGg9ZS5jaGFyQ29kZUF0KG4rdSk7aWYoaCE9PXQuY2hhckNvZGVBdChzK3UpKWJyZWFrO2g9PT1vZSYmKGw9dSl9aWYodT09PW8paWYoYT5vKXtpZih0LmNoYXJDb2RlQXQocyt1KT09PW9lKXJldHVybiB0LnNsaWNlKHMrdSsxKTtpZih1PT09MClyZXR1cm4gdC5zbGljZShzK3UpfWVsc2UgaT5vJiYoZS5jaGFyQ29kZUF0KG4rdSk9PT1vZT9sPXU6dT09PTAmJihsPTApKTtsZXQgZj0iIjtmb3IodT1uK2wrMTt1PD1yOysrdSkodT09PXJ8fGUuY2hhckNvZGVBdCh1KT09PW9lKSYmKGYrPWYubGVuZ3RoPT09MD8iLi4iOiIvLi4iKTtyZXR1cm5gJHtmfSR7dC5zbGljZShzK2wpfWB9LHRvTmFtZXNwYWNlZFBhdGgoZSl7cmV0dXJuIGV9LGRpcm5hbWUoZSl7aWYoZWUoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1vZTtsZXQgbj0tMSxyPSEwO2ZvcihsZXQgaT1lLmxlbmd0aC0xO2k+PTE7LS1pKWlmKGUuY2hhckNvZGVBdChpKT09PW9lKXtpZighcil7bj1pO2JyZWFrfX1lbHNlIHI9ITE7cmV0dXJuIG49PT0tMT90PyIvIjoiLiI6dCYmbj09PTE/Ii8vIjplLnNsaWNlKDAsbil9LGJhc2VuYW1lKGUsdCl7dCE9PXZvaWQgMCYmZWUodCwiZXh0IiksZWUoZSwicGF0aCIpO2xldCBuPTAscj0tMSxpPSEwLHM7aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLG89LTE7Zm9yKHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7Y29uc3QgbD1lLmNoYXJDb2RlQXQocyk7aWYobD09PW9lKXtpZighaSl7bj1zKzE7YnJlYWt9fWVsc2Ugbz09PS0xJiYoaT0hMSxvPXMrMSksYT49MCYmKGw9PT10LmNoYXJDb2RlQXQoYSk/LS1hPT09LTEmJihyPXMpOihhPS0xLHI9bykpfXJldHVybiBuPT09cj9yPW86cj09PS0xJiYocj1lLmxlbmd0aCksZS5zbGljZShuLHIpfWZvcihzPWUubGVuZ3RoLTE7cz49MDstLXMpaWYoZS5jaGFyQ29kZUF0KHMpPT09b2Upe2lmKCFpKXtuPXMrMTticmVha319ZWxzZSByPT09LTEmJihpPSExLHI9cysxKTtyZXR1cm4gcj09PS0xPyIiOmUuc2xpY2UobixyKX0sZXh0bmFtZShlKXtlZShlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLHI9LTEsaT0hMCxzPTA7Zm9yKGxldCBhPWUubGVuZ3RoLTE7YT49MDstLWEpe2NvbnN0IG89ZS5jaGFyQ29kZUF0KGEpO2lmKG89PT1vZSl7aWYoIWkpe249YSsxO2JyZWFrfWNvbnRpbnVlfXI9PT0tMSYmKGk9ITEscj1hKzEpLG89PT1KZT90PT09LTE/dD1hOnMhPT0xJiYocz0xKTp0IT09LTEmJihzPS0xKX1yZXR1cm4gdD09PS0xfHxyPT09LTF8fHM9PT0wfHxzPT09MSYmdD09PXItMSYmdD09PW4rMT8iIjplLnNsaWNlKHQscil9LGZvcm1hdDpRci5iaW5kKG51bGwsIi8iKSxwYXJzZShlKXtlZShlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09b2U7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxzPTAsYT0tMSxvPSEwLGw9ZS5sZW5ndGgtMSx1PTA7Zm9yKDtsPj1yOy0tbCl7Y29uc3QgZj1lLmNoYXJDb2RlQXQobCk7aWYoZj09PW9lKXtpZighbyl7cz1sKzE7YnJlYWt9Y29udGludWV9YT09PS0xJiYobz0hMSxhPWwrMSksZj09PUplP2k9PT0tMT9pPWw6dSE9PTEmJih1PTEpOmkhPT0tMSYmKHU9LTEpfWlmKGEhPT0tMSl7Y29uc3QgZj1zPT09MCYmbj8xOnM7aT09PS0xfHx1PT09MHx8dT09PTEmJmk9PT1hLTEmJmk9PT1zKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGYsYSk6KHQubmFtZT1lLnNsaWNlKGYsaSksdC5iYXNlPWUuc2xpY2UoZixhKSx0LmV4dD1lLnNsaWNlKGksYSkpfXJldHVybiBzPjA/dC5kaXI9ZS5zbGljZSgwLHMtMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07bWUud2luMzI9aGUud2luMzI9aGUsbWUucG9zaXg9aGUucG9zaXg9bWUsUWU/aGUubm9ybWFsaXplOm1lLm5vcm1hbGl6ZSxRZT9oZS5yZXNvbHZlOm1lLnJlc29sdmUsUWU/aGUucmVsYXRpdmU6bWUucmVsYXRpdmUsUWU/aGUuZGlybmFtZTptZS5kaXJuYW1lLFFlP2hlLmJhc2VuYW1lOm1lLmJhc2VuYW1lLFFlP2hlLmV4dG5hbWU6bWUuZXh0bmFtZSxRZT9oZS5zZXA6bWUuc2VwO2NvbnN0IFJvPS9eXHdbXHdcZCsuLV0qJC8sVG89L15cLy8sUG89L15cL1wvLztmdW5jdGlvbiBGbyhlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVJvLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpe2lmKGUuYXV0aG9yaXR5KXtpZighVG8udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoUG8udGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1mdW5jdGlvbiBJbyhlLHQpe3JldHVybiFlJiYhdD8iZmlsZSI6ZX1mdW5jdGlvbiBEbyhlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09a2UmJih0PWtlK3QpOnQ9a2U7YnJlYWt9cmV0dXJuIHR9Y29uc3QgWT0iIixrZT0iLyIsVm89L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87bGV0IFVuPWNsYXNzIENue3N0YXRpYyBpc1VyaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENuPyEwOnQ/dHlwZW9mIHQuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIHQuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2YgdC5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHQucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2YgdC5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2YgdC53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIjohMX1jb25zdHJ1Y3Rvcih0LG4scixpLHMsYT0hMSl7dHlwZW9mIHQ9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT10LnNjaGVtZXx8WSx0aGlzLmF1dGhvcml0eT10LmF1dGhvcml0eXx8WSx0aGlzLnBhdGg9dC5wYXRofHxZLHRoaXMucXVlcnk9dC5xdWVyeXx8WSx0aGlzLmZyYWdtZW50PXQuZnJhZ21lbnR8fFkpOih0aGlzLnNjaGVtZT1Jbyh0LGEpLHRoaXMuYXV0aG9yaXR5PW58fFksdGhpcy5wYXRoPURvKHRoaXMuc2NoZW1lLHJ8fFkpLHRoaXMucXVlcnk9aXx8WSx0aGlzLmZyYWdtZW50PXN8fFksRm8odGhpcyxhKSl9Z2V0IGZzUGF0aCgpe3JldHVybiAkbih0aGlzLCExKX13aXRoKHQpe2lmKCF0KXJldHVybiB0aGlzO2xldHtzY2hlbWU6bixhdXRob3JpdHk6cixwYXRoOmkscXVlcnk6cyxmcmFnbWVudDphfT10O3JldHVybiBuPT09dm9pZCAwP249dGhpcy5zY2hlbWU6bj09PW51bGwmJihuPVkpLHI9PT12b2lkIDA/cj10aGlzLmF1dGhvcml0eTpyPT09bnVsbCYmKHI9WSksaT09PXZvaWQgMD9pPXRoaXMucGF0aDppPT09bnVsbCYmKGk9WSkscz09PXZvaWQgMD9zPXRoaXMucXVlcnk6cz09PW51bGwmJihzPVkpLGE9PT12b2lkIDA/YT10aGlzLmZyYWdtZW50OmE9PT1udWxsJiYoYT1ZKSxuPT09dGhpcy5zY2hlbWUmJnI9PT10aGlzLmF1dGhvcml0eSYmaT09PXRoaXMucGF0aCYmcz09PXRoaXMucXVlcnkmJmE9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IHZ0KG4scixpLHMsYSl9c3RhdGljIHBhcnNlKHQsbj0hMSl7Y29uc3Qgcj1Wby5leGVjKHQpO3JldHVybiByP25ldyB2dChyWzJdfHxZLHJuKHJbNF18fFkpLHJuKHJbNV18fFkpLHJuKHJbN118fFkpLHJuKHJbOV18fFkpLG4pOm5ldyB2dChZLFksWSxZLFkpfXN0YXRpYyBmaWxlKHQpe2xldCBuPVk7aWYoUnQmJih0PXQucmVwbGFjZSgvXFwvZyxrZSkpLHRbMF09PT1rZSYmdFsxXT09PWtlKXtjb25zdCByPXQuaW5kZXhPZihrZSwyKTtyPT09LTE/KG49dC5zdWJzdHJpbmcoMiksdD1rZSk6KG49dC5zdWJzdHJpbmcoMixyKSx0PXQuc3Vic3RyaW5nKHIpfHxrZSl9cmV0dXJuIG5ldyB2dCgiZmlsZSIsbix0LFksWSl9c3RhdGljIGZyb20odCxuKXtyZXR1cm4gbmV3IHZ0KHQuc2NoZW1lLHQuYXV0aG9yaXR5LHQucGF0aCx0LnF1ZXJ5LHQuZnJhZ21lbnQsbil9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gUnQmJnQuc2NoZW1lPT09ImZpbGUiP3I9Q24uZmlsZShoZS5qb2luKCRuKHQsITApLC4uLm4pKS5wYXRoOnI9bWUuam9pbih0LnBhdGgsLi4ubiksdC53aXRoKHtwYXRoOnJ9KX10b1N0cmluZyh0PSExKXtyZXR1cm4gV24odGhpcyx0KX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKHQpe3ZhciBuLHI7aWYodCl7aWYodCBpbnN0YW5jZW9mIENuKXJldHVybiB0O3tjb25zdCBpPW5ldyB2dCh0KTtyZXR1cm4gaS5fZm9ybWF0dGVkPShuPXQuZXh0ZXJuYWwpIT09bnVsbCYmbiE9PXZvaWQgMD9uOm51bGwsaS5fZnNQYXRoPXQuX3NlcD09PVpyJiYocj10LmZzUGF0aCkhPT1udWxsJiZyIT09dm9pZCAwP3I6bnVsbCxpfX1lbHNlIHJldHVybiB0fX07Y29uc3QgWnI9UnQ/MTp2b2lkIDA7Y2xhc3MgdnQgZXh0ZW5kcyBVbntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9ybWF0dGVkPW51bGwsdGhpcy5fZnNQYXRoPW51bGx9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9JG4odGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyh0PSExKXtyZXR1cm4gdD9Xbih0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPVduKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IHQ9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKHQuZnNQYXRoPXRoaXMuX2ZzUGF0aCx0Ll9zZXA9WnIpLHRoaXMuX2Zvcm1hdHRlZCYmKHQuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJih0LnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKHQuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKHQuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYodC5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYodC5mcmFnbWVudD10aGlzLmZyYWdtZW50KSx0fX1jb25zdCBZcj17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIEtyKGUsdCxuKXtsZXQgcixpPS0xO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKXtjb25zdCBhPWUuY2hhckNvZGVBdChzKTtpZihhPj05NyYmYTw9MTIyfHxhPj02NSYmYTw9OTB8fGE+PTQ4JiZhPD01N3x8YT09PTQ1fHxhPT09NDZ8fGE9PT05NXx8YT09PTEyNnx8dCYmYT09PTQ3fHxuJiZhPT09OTF8fG4mJmE9PT05M3x8biYmYT09PTU4KWkhPT0tMSYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhpLHMpKSxpPS0xKSxyIT09dm9pZCAwJiYocis9ZS5jaGFyQXQocykpO2Vsc2V7cj09PXZvaWQgMCYmKHI9ZS5zdWJzdHIoMCxzKSk7Y29uc3Qgbz1ZclthXTtvIT09dm9pZCAwPyhpIT09LTEmJihyKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcoaSxzKSksaT0tMSkscis9byk6aT09PS0xJiYoaT1zKX19cmV0dXJuIGkhPT0tMSYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhpKSkpLHIhPT12b2lkIDA/cjplfWZ1bmN0aW9uIE9vKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtyPT09MzV8fHI9PT02Mz8odD09PXZvaWQgMCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9WXJbcl0pOnQhPT12b2lkIDAmJih0Kz1lW25dKX1yZXR1cm4gdCE9PXZvaWQgMD90OmV9ZnVuY3Rpb24gJG4oZSx0KXtsZXQgbjtyZXR1cm4gZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmZS5zY2hlbWU9PT0iZmlsZSI/bj1gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6ZS5wYXRoLmNoYXJDb2RlQXQoMCk9PT00NyYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiZlLnBhdGguY2hhckNvZGVBdCgyKT09PTU4P3Q/bj1lLnBhdGguc3Vic3RyKDEpOm49ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTpuPWUucGF0aCxSdCYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIFduKGUsdCl7Y29uc3Qgbj10P09vOktyO2xldCByPSIiLHtzY2hlbWU6aSxhdXRob3JpdHk6cyxwYXRoOmEscXVlcnk6byxmcmFnbWVudDpsfT1lO2lmKGkmJihyKz1pLHIrPSI6IiksKHN8fGk9PT0iZmlsZSIpJiYocis9a2Uscis9a2UpLHMpe2xldCB1PXMuaW5kZXhPZigiQCIpO2lmKHUhPT0tMSl7Y29uc3QgZj1zLnN1YnN0cigwLHUpO3M9cy5zdWJzdHIodSsxKSx1PWYubGFzdEluZGV4T2YoIjoiKSx1PT09LTE/cis9bihmLCExLCExKToocis9bihmLnN1YnN0cigwLHUpLCExLCExKSxyKz0iOiIscis9bihmLnN1YnN0cih1KzEpLCExLCEwKSkscis9IkAifXM9cy50b0xvd2VyQ2FzZSgpLHU9cy5sYXN0SW5kZXhPZigiOiIpLHU9PT0tMT9yKz1uKHMsITEsITApOihyKz1uKHMuc3Vic3RyKDAsdSksITEsITApLHIrPXMuc3Vic3RyKHUpKX1pZihhKXtpZihhLmxlbmd0aD49MyYmYS5jaGFyQ29kZUF0KDApPT09NDcmJmEuY2hhckNvZGVBdCgyKT09PTU4KXtjb25zdCB1PWEuY2hhckNvZGVBdCgxKTt1Pj02NSYmdTw9OTAmJihhPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHUrMzIpfToke2Euc3Vic3RyKDMpfWApfWVsc2UgaWYoYS5sZW5ndGg+PTImJmEuY2hhckNvZGVBdCgxKT09PTU4KXtjb25zdCB1PWEuY2hhckNvZGVBdCgwKTt1Pj02NSYmdTw9OTAmJihhPWAke1N0cmluZy5mcm9tQ2hhckNvZGUodSszMil9OiR7YS5zdWJzdHIoMil9YCl9cis9bihhLCEwLCExKX1yZXR1cm4gbyYmKHIrPSI/IixyKz1uKG8sITEsITEpKSxsJiYocis9IiMiLHIrPXQ/bDpLcihsLCExLCExKSkscn1mdW5jdGlvbiBlaShlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaHtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK2VpKGUuc3Vic3RyKDMpKTplfX1jb25zdCB0aT0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiBybihlKXtyZXR1cm4gZS5tYXRjaCh0aSk/ZS5yZXBsYWNlKHRpLHQ9PmVpKHQpKTplfWxldCBQZT1jbGFzcyBsdHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZU51bWJlcj10LHRoaXMuY29sdW1uPW59d2l0aCh0PXRoaXMubGluZU51bWJlcixuPXRoaXMuY29sdW1uKXtyZXR1cm4gdD09PXRoaXMubGluZU51bWJlciYmbj09PXRoaXMuY29sdW1uP3RoaXM6bmV3IGx0KHQsbil9ZGVsdGEodD0wLG49MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrdCx0aGlzLmNvbHVtbituKX1lcXVhbHModCl7cmV0dXJuIGx0LmVxdWFscyh0aGlzLHQpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4hdCYmIW4/ITA6ISF0JiYhIW4mJnQubGluZU51bWJlcj09PW4ubGluZU51bWJlciYmdC5jb2x1bW49PT1uLmNvbHVtbn1pc0JlZm9yZSh0KXtyZXR1cm4gbHQuaXNCZWZvcmUodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmUodCxuKXtyZXR1cm4gdC5saW5lTnVtYmVyPG4ubGluZU51bWJlcj8hMDpuLmxpbmVOdW1iZXI8dC5saW5lTnVtYmVyPyExOnQuY29sdW1uPG4uY29sdW1ufWlzQmVmb3JlT3JFcXVhbCh0KXtyZXR1cm4gbHQuaXNCZWZvcmVPckVxdWFsKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbCh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI8bi5saW5lTnVtYmVyPyEwOm4ubGluZU51bWJlcjx0LmxpbmVOdW1iZXI/ITE6dC5jb2x1bW48PW4uY29sdW1ufXN0YXRpYyBjb21wYXJlKHQsbil7Y29uc3Qgcj10LmxpbmVOdW1iZXJ8MCxpPW4ubGluZU51bWJlcnwwO2lmKHI9PT1pKXtjb25zdCBzPXQuY29sdW1ufDAsYT1uLmNvbHVtbnwwO3JldHVybiBzLWF9cmV0dXJuIHItaX1jbG9uZSgpe3JldHVybiBuZXcgbHQodGhpcy5saW5lTnVtYmVyLHRoaXMuY29sdW1uKX10b1N0cmluZygpe3JldHVybiIoIit0aGlzLmxpbmVOdW1iZXIrIiwiK3RoaXMuY29sdW1uKyIpIn1zdGF0aWMgbGlmdCh0KXtyZXR1cm4gbmV3IGx0KHQubGluZU51bWJlcix0LmNvbHVtbil9c3RhdGljIGlzSVBvc2l0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5saW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuY29sdW1uPT0ibnVtYmVyIn10b0pTT04oKXtyZXR1cm57bGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuY29sdW1ufX19LHNlPWNsYXNzIG5le2NvbnN0cnVjdG9yKHQsbixyLGkpe3Q+cnx8dD09PXImJm4+aT8odGhpcy5zdGFydExpbmVOdW1iZXI9cix0aGlzLnN0YXJ0Q29sdW1uPWksdGhpcy5lbmRMaW5lTnVtYmVyPXQsdGhpcy5lbmRDb2x1bW49bik6KHRoaXMuc3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5zdGFydENvbHVtbj1uLHRoaXMuZW5kTGluZU51bWJlcj1yLHRoaXMuZW5kQ29sdW1uPWkpfWlzRW1wdHkoKXtyZXR1cm4gbmUuaXNFbXB0eSh0aGlzKX1zdGF0aWMgaXNFbXB0eSh0KXtyZXR1cm4gdC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbn1jb250YWluc1Bvc2l0aW9uKHQpe3JldHVybiBuZS5jb250YWluc1Bvc2l0aW9uKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUG9zaXRpb24odCxuKXtyZXR1cm4hKG4ubGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5saW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5saW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uY29sdW1uPHQuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5jb2x1bW4+dC5lbmRDb2x1bW4pfXN0YXRpYyBzdHJpY3RDb250YWluc1Bvc2l0aW9uKHQsbil7cmV0dXJuIShuLmxpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmNvbHVtbjw9dC5zdGFydENvbHVtbnx8bi5saW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmNvbHVtbj49dC5lbmRDb2x1bW4pfWNvbnRhaW5zUmFuZ2UodCl7cmV0dXJuIG5lLmNvbnRhaW5zUmFuZ2UodGhpcyx0KX1zdGF0aWMgY29udGFpbnNSYW5nZSh0LG4pe3JldHVybiEobi5zdGFydExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLnN0YXJ0Q29sdW1uPHQuc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5lbmRDb2x1bW4+dC5lbmRDb2x1bW4pfXN0cmljdENvbnRhaW5zUmFuZ2UodCl7cmV0dXJuIG5lLnN0cmljdENvbnRhaW5zUmFuZ2UodGhpcyx0KX1zdGF0aWMgc3RyaWN0Q29udGFpbnNSYW5nZSh0LG4pe3JldHVybiEobi5zdGFydExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLnN0YXJ0Q29sdW1uPD10LnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPj10LmVuZENvbHVtbil9cGx1c1JhbmdlKHQpe3JldHVybiBuZS5wbHVzUmFuZ2UodGhpcyx0KX1zdGF0aWMgcGx1c1JhbmdlKHQsbil7bGV0IHIsaSxzLGE7cmV0dXJuIG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyPyhyPW4uc3RhcnRMaW5lTnVtYmVyLGk9bi5zdGFydENvbHVtbik6bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlcj8ocj1uLnN0YXJ0TGluZU51bWJlcixpPU1hdGgubWluKG4uc3RhcnRDb2x1bW4sdC5zdGFydENvbHVtbikpOihyPXQuc3RhcnRMaW5lTnVtYmVyLGk9dC5zdGFydENvbHVtbiksbi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcj8ocz1uLmVuZExpbmVOdW1iZXIsYT1uLmVuZENvbHVtbik6bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyPyhzPW4uZW5kTGluZU51bWJlcixhPU1hdGgubWF4KG4uZW5kQ29sdW1uLHQuZW5kQ29sdW1uKSk6KHM9dC5lbmRMaW5lTnVtYmVyLGE9dC5lbmRDb2x1bW4pLG5ldyBuZShyLGkscyxhKX1pbnRlcnNlY3RSYW5nZXModCl7cmV0dXJuIG5lLmludGVyc2VjdFJhbmdlcyh0aGlzLHQpfXN0YXRpYyBpbnRlcnNlY3RSYW5nZXModCxuKXtsZXQgcj10LnN0YXJ0TGluZU51bWJlcixpPXQuc3RhcnRDb2x1bW4scz10LmVuZExpbmVOdW1iZXIsYT10LmVuZENvbHVtbjtjb25zdCBvPW4uc3RhcnRMaW5lTnVtYmVyLGw9bi5zdGFydENvbHVtbix1PW4uZW5kTGluZU51bWJlcixmPW4uZW5kQ29sdW1uO3JldHVybiByPG8/KHI9byxpPWwpOnI9PT1vJiYoaT1NYXRoLm1heChpLGwpKSxzPnU/KHM9dSxhPWYpOnM9PT11JiYoYT1NYXRoLm1pbihhLGYpKSxyPnN8fHI9PT1zJiZpPmE/bnVsbDpuZXcgbmUocixpLHMsYSl9ZXF1YWxzUmFuZ2UodCl7cmV0dXJuIG5lLmVxdWFsc1JhbmdlKHRoaXMsdCl9c3RhdGljIGVxdWFsc1JhbmdlKHQsbil7cmV0dXJuIXQmJiFuPyEwOiEhdCYmISFuJiZ0LnN0YXJ0TGluZU51bWJlcj09PW4uc3RhcnRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPT09bi5zdGFydENvbHVtbiYmdC5lbmRMaW5lTnVtYmVyPT09bi5lbmRMaW5lTnVtYmVyJiZ0LmVuZENvbHVtbj09PW4uZW5kQ29sdW1ufWdldEVuZFBvc2l0aW9uKCl7cmV0dXJuIG5lLmdldEVuZFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRFbmRQb3NpdGlvbih0KXtyZXR1cm4gbmV3IFBlKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9Z2V0U3RhcnRQb3NpdGlvbigpe3JldHVybiBuZS5nZXRTdGFydFBvc2l0aW9uKHRoaXMpfXN0YXRpYyBnZXRTdGFydFBvc2l0aW9uKHQpe3JldHVybiBuZXcgUGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMuZW5kTGluZU51bWJlcisiLCIrdGhpcy5lbmRDb2x1bW4rIl0ifXNldEVuZFBvc2l0aW9uKHQsbil7cmV0dXJuIG5ldyBuZSh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLHQsbil9c2V0U3RhcnRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgbmUodCxuLHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbil9Y29sbGFwc2VUb1N0YXJ0KCl7cmV0dXJuIG5lLmNvbGxhcHNlVG9TdGFydCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb1N0YXJ0KHQpe3JldHVybiBuZXcgbmUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX1jb2xsYXBzZVRvRW5kKCl7cmV0dXJuIG5lLmNvbGxhcHNlVG9FbmQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9FbmQodCl7cmV0dXJuIG5ldyBuZSh0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKX1kZWx0YSh0KXtyZXR1cm4gbmV3IG5lKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5zdGFydENvbHVtbix0aGlzLmVuZExpbmVOdW1iZXIrdCx0aGlzLmVuZENvbHVtbil9c3RhdGljIGZyb21Qb3NpdGlvbnModCxuPXQpe3JldHVybiBuZXcgbmUodC5saW5lTnVtYmVyLHQuY29sdW1uLG4ubGluZU51bWJlcixuLmNvbHVtbil9c3RhdGljIGxpZnQodCl7cmV0dXJuIHQ/bmV3IG5lKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKTpudWxsfXN0YXRpYyBpc0lSYW5nZSh0KXtyZXR1cm4gdCYmdHlwZW9mIHQuc3RhcnRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuc3RhcnRDb2x1bW49PSJudW1iZXIiJiZ0eXBlb2YgdC5lbmRMaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQuZW5kQ29sdW1uPT0ibnVtYmVyIn1zdGF0aWMgYXJlSW50ZXJzZWN0aW5nT3JUb3VjaGluZyh0LG4pe3JldHVybiEodC5lbmRMaW5lTnVtYmVyPG4uc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48bi5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5lbmRDb2x1bW48dC5zdGFydENvbHVtbil9c3RhdGljIGFyZUludGVyc2VjdGluZyh0LG4pe3JldHVybiEodC5lbmRMaW5lTnVtYmVyPG4uc3RhcnRMaW5lTnVtYmVyfHx0LmVuZExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5lbmRDb2x1bW48PW4uc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPD10LnN0YXJ0Q29sdW1uKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKHQsbil7aWYodCYmbil7Y29uc3Qgcz10LnN0YXJ0TGluZU51bWJlcnwwLGE9bi5zdGFydExpbmVOdW1iZXJ8MDtpZihzPT09YSl7Y29uc3Qgbz10LnN0YXJ0Q29sdW1ufDAsbD1uLnN0YXJ0Q29sdW1ufDA7aWYobz09PWwpe2NvbnN0IHU9dC5lbmRMaW5lTnVtYmVyfDAsZj1uLmVuZExpbmVOdW1iZXJ8MDtpZih1PT09Zil7Y29uc3QgaD10LmVuZENvbHVtbnwwLGQ9bi5lbmRDb2x1bW58MDtyZXR1cm4gaC1kfXJldHVybiB1LWZ9cmV0dXJuIG8tbH1yZXR1cm4gcy1hfXJldHVybih0PzE6MCktKG4/MTowKX1zdGF0aWMgY29tcGFyZVJhbmdlc1VzaW5nRW5kcyh0LG4pe3JldHVybiB0LmVuZExpbmVOdW1iZXI9PT1uLmVuZExpbmVOdW1iZXI/dC5lbmRDb2x1bW49PT1uLmVuZENvbHVtbj90LnN0YXJ0TGluZU51bWJlcj09PW4uc3RhcnRMaW5lTnVtYmVyP3Quc3RhcnRDb2x1bW4tbi5zdGFydENvbHVtbjp0LnN0YXJ0TGluZU51bWJlci1uLnN0YXJ0TGluZU51bWJlcjp0LmVuZENvbHVtbi1uLmVuZENvbHVtbjp0LmVuZExpbmVOdW1iZXItbi5lbmRMaW5lTnVtYmVyfXN0YXRpYyBzcGFuc011bHRpcGxlTGluZXModCl7cmV0dXJuIHQuZW5kTGluZU51bWJlcj50LnN0YXJ0TGluZU51bWJlcn10b0pTT04oKXtyZXR1cm4gdGhpc319O2Z1bmN0aW9uIGpvKGUsdCxuPShyLGkpPT5yPT09aSl7aWYoZT09PXQpcmV0dXJuITA7aWYoIWV8fCF0fHxlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKylpZighbihlW3JdLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uKnFvKGUsdCl7bGV0IG4scjtmb3IoY29uc3QgaSBvZiBlKXIhPT12b2lkIDAmJnQocixpKT9uLnB1c2goaSk6KG4mJih5aWVsZCBuKSxuPVtpXSkscj1pO24mJih5aWVsZCBuKX1mdW5jdGlvbiBCbyhlLHQpe2ZvcihsZXQgbj0wO248PWUubGVuZ3RoO24rKyl0KG49PT0wP3ZvaWQgMDplW24tMV0sbj09PWUubGVuZ3RoP3ZvaWQgMDplW25dKX1mdW5jdGlvbiBVbyhlLHQpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQobj09PTA/dm9pZCAwOmVbbi0xXSxlW25dLG4rMT09PWUubGVuZ3RoP3ZvaWQgMDplW24rMV0pfWZ1bmN0aW9uICRvKGUsdCl7Zm9yKGNvbnN0IG4gb2YgdCllLnB1c2gobil9dmFyIG5pOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHMpe3JldHVybiBzPDB9ZS5pc0xlc3NUaGFuPXQ7ZnVuY3Rpb24gbihzKXtyZXR1cm4gczw9MH1lLmlzTGVzc1RoYW5PckVxdWFsPW47ZnVuY3Rpb24gcihzKXtyZXR1cm4gcz4wfWUuaXNHcmVhdGVyVGhhbj1yO2Z1bmN0aW9uIGkocyl7cmV0dXJuIHM9PT0wfWUuaXNOZWl0aGVyTGVzc09yR3JlYXRlclRoYW49aSxlLmdyZWF0ZXJUaGFuPTEsZS5sZXNzVGhhbj0tMSxlLm5laXRoZXJMZXNzT3JHcmVhdGVyVGhhbj0wfSkobml8fChuaT17fSkpO2Z1bmN0aW9uIHNuKGUsdCl7cmV0dXJuKG4scik9PnQoZShuKSxlKHIpKX1jb25zdCBhbj0oZSx0KT0+ZS10O2Z1bmN0aW9uIFdvKGUpe3JldHVybih0LG4pPT4tZSh0LG4pfWZ1bmN0aW9uIHJpKGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6ZXwwfWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTplfDB9Y2xhc3MgSG97Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZXM9dCx0aGlzLnByZWZpeFN1bT1uZXcgVWludDMyQXJyYXkodC5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleD1uZXcgSW50MzJBcnJheSgxKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09LTF9aW5zZXJ0VmFsdWVzKHQsbil7dD1idCh0KTtjb25zdCByPXRoaXMudmFsdWVzLGk9dGhpcy5wcmVmaXhTdW0scz1uLmxlbmd0aDtyZXR1cm4gcz09PTA/ITE6KHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShyLmxlbmd0aCtzKSx0aGlzLnZhbHVlcy5zZXQoci5zdWJhcnJheSgwLHQpLDApLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KHQpLHQrcyksdGhpcy52YWx1ZXMuc2V0KG4sdCksdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KGkuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1zZXRWYWx1ZSh0LG4pe3JldHVybiB0PWJ0KHQpLG49YnQobiksdGhpcy52YWx1ZXNbdF09PT1uPyExOih0aGlzLnZhbHVlc1t0XT1uLHQtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09dC0xKSwhMCl9cmVtb3ZlVmFsdWVzKHQsbil7dD1idCh0KSxuPWJ0KG4pO2NvbnN0IHI9dGhpcy52YWx1ZXMsaT10aGlzLnByZWZpeFN1bTtpZih0Pj1yLmxlbmd0aClyZXR1cm4hMTtjb25zdCBzPXIubGVuZ3RoLXQ7cmV0dXJuIG4+PXMmJihuPXMpLG49PT0wPyExOih0aGlzLnZhbHVlcz1uZXcgVWludDMyQXJyYXkoci5sZW5ndGgtbiksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkoMCx0KSwwKSx0aGlzLnZhbHVlcy5zZXQoci5zdWJhcnJheSh0K24pLHQpLHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0aGlzLnZhbHVlcy5sZW5ndGgpLHQtMTx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0mJih0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09dC0xKSx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0+PTAmJnRoaXMucHJlZml4U3VtLnNldChpLnN1YmFycmF5KDAsdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKzEpKSwhMCl9Z2V0VG90YWxTdW0oKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoPT09MD8wOnRoaXMuX2dldFByZWZpeFN1bSh0aGlzLnZhbHVlcy5sZW5ndGgtMSl9Z2V0UHJlZml4U3VtKHQpe3JldHVybiB0PDA/MDoodD1idCh0KSx0aGlzLl9nZXRQcmVmaXhTdW0odCkpfV9nZXRQcmVmaXhTdW0odCl7aWYodDw9dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdKXJldHVybiB0aGlzLnByZWZpeFN1bVt0XTtsZXQgbj10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMTtuPT09MCYmKHRoaXMucHJlZml4U3VtWzBdPXRoaXMudmFsdWVzWzBdLG4rKyksdD49dGhpcy52YWx1ZXMubGVuZ3RoJiYodD10aGlzLnZhbHVlcy5sZW5ndGgtMSk7Zm9yKGxldCByPW47cjw9dDtyKyspdGhpcy5wcmVmaXhTdW1bcl09dGhpcy5wcmVmaXhTdW1bci0xXSt0aGlzLnZhbHVlc1tyXTtyZXR1cm4gdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPU1hdGgubWF4KHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSx0KSx0aGlzLnByZWZpeFN1bVt0XX1nZXRJbmRleE9mKHQpe3Q9TWF0aC5mbG9vcih0KSx0aGlzLmdldFRvdGFsU3VtKCk7bGV0IG49MCxyPXRoaXMudmFsdWVzLmxlbmd0aC0xLGk9MCxzPTAsYT0wO2Zvcig7bjw9cjspaWYoaT1uKyhyLW4pLzJ8MCxzPXRoaXMucHJlZml4U3VtW2ldLGE9cy10aGlzLnZhbHVlc1tpXSx0PGEpcj1pLTE7ZWxzZSBpZih0Pj1zKW49aSsxO2Vsc2UgYnJlYWs7cmV0dXJuIG5ldyB6byhpLHQtYSl9fWNsYXNzIHpve2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pbmRleD10LHRoaXMucmVtYWluZGVyPW4sdGhpcy5fcHJlZml4U3VtSW5kZXhPZlJlc3VsdEJyYW5kPXZvaWQgMCx0aGlzLmluZGV4PXQsdGhpcy5yZW1haW5kZXI9bn19Y2xhc3MgR297Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5fdXJpPXQsdGhpcy5fbGluZXM9bix0aGlzLl9lb2w9cix0aGlzLl92ZXJzaW9uSWQ9aSx0aGlzLl9saW5lU3RhcnRzPW51bGwsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9ZGlzcG9zZSgpe3RoaXMuX2xpbmVzLmxlbmd0aD0wfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX3ZlcnNpb25JZH1nZXRUZXh0KCl7cmV0dXJuIHRoaXMuX2NhY2hlZFRleHRWYWx1ZT09PW51bGwmJih0aGlzLl9jYWNoZWRUZXh0VmFsdWU9dGhpcy5fbGluZXMuam9pbih0aGlzLl9lb2wpKSx0aGlzLl9jYWNoZWRUZXh0VmFsdWV9b25FdmVudHModCl7dC5lb2wmJnQuZW9sIT09dGhpcy5fZW9sJiYodGhpcy5fZW9sPXQuZW9sLHRoaXMuX2xpbmVTdGFydHM9bnVsbCk7Y29uc3Qgbj10LmNoYW5nZXM7Zm9yKGNvbnN0IHIgb2Ygbil0aGlzLl9hY2NlcHREZWxldGVSYW5nZShyLnJhbmdlKSx0aGlzLl9hY2NlcHRJbnNlcnRUZXh0KG5ldyBQZShyLnJhbmdlLnN0YXJ0TGluZU51bWJlcixyLnJhbmdlLnN0YXJ0Q29sdW1uKSxyLnRleHQpO3RoaXMuX3ZlcnNpb25JZD10LnZlcnNpb25JZCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1fZW5zdXJlTGluZVN0YXJ0cygpe2lmKCF0aGlzLl9saW5lU3RhcnRzKXtjb25zdCB0PXRoaXMuX2VvbC5sZW5ndGgsbj10aGlzLl9saW5lcy5sZW5ndGgscj1uZXcgVWludDMyQXJyYXkobik7Zm9yKGxldCBpPTA7aTxuO2krKylyW2ldPXRoaXMuX2xpbmVzW2ldLmxlbmd0aCt0O3RoaXMuX2xpbmVTdGFydHM9bmV3IEhvKHIpfX1fc2V0TGluZVRleHQodCxuKXt0aGlzLl9saW5lc1t0XT1uLHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuc2V0VmFsdWUodCx0aGlzLl9saW5lc1t0XS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aCl9X2FjY2VwdERlbGV0ZVJhbmdlKHQpe2lmKHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyKXtpZih0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW4pcmV0dXJuO3RoaXMuX3NldExpbmVUZXh0KHQuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5lbmRDb2x1bW4tMSkpO3JldHVybn10aGlzLl9zZXRMaW5lVGV4dCh0LnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbdC5lbmRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmVuZENvbHVtbi0xKSksdGhpcy5fbGluZXMuc3BsaWNlKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlciksdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5yZW1vdmVWYWx1ZXModC5zdGFydExpbmVOdW1iZXIsdC5lbmRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyKX1fYWNjZXB0SW5zZXJ0VGV4dCh0LG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm47Y29uc3Qgcj1ybyhuKTtpZihyLmxlbmd0aD09PTEpe3RoaXMuX3NldExpbmVUZXh0KHQubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LmNvbHVtbi0xKStyWzBdK3RoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSkpO3JldHVybn1yW3IubGVuZ3RoLTFdKz10aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuY29sdW1uLTEpLHRoaXMuX3NldExpbmVUZXh0KHQubGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LmNvbHVtbi0xKStyWzBdKTtjb25zdCBpPW5ldyBVaW50MzJBcnJheShyLmxlbmd0aC0xKTtmb3IobGV0IHM9MTtzPHIubGVuZ3RoO3MrKyl0aGlzLl9saW5lcy5zcGxpY2UodC5saW5lTnVtYmVyK3MtMSwwLHJbc10pLGlbcy0xXT1yW3NdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoO3RoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMuaW5zZXJ0VmFsdWVzKHQubGluZU51bWJlcixpKX19Y29uc3QgSm89ImB+IUAjJCVeJiooKS09K1t7XX1cXHw7OidcIiwuPD4vPyI7ZnVuY3Rpb24gWG8oZT0iIil7bGV0IHQ9IigtP1xcZCpcXC5cXGRcXHcqKXwoW14iO2Zvcihjb25zdCBuIG9mIEpvKWUuaW5kZXhPZihuKT49MHx8KHQrPSJcXCIrbik7cmV0dXJuIHQrPSJcXHNdKykiLG5ldyBSZWdFeHAodCwiZyIpfWNvbnN0IGlpPVhvKCk7ZnVuY3Rpb24gc2koZSl7bGV0IHQ9aWk7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH1jb25zdCBhaT1uZXcgamE7YWkudW5zaGlmdCh7bWF4TGVuOjFlMyx3aW5kb3dTaXplOjE1LHRpbWVCdWRnZXQ6MTUwfSk7ZnVuY3Rpb24gSG4oZSx0LG4scixpKXtpZih0PXNpKHQpLGl8fChpPVp0LmZpcnN0KGFpKSksbi5sZW5ndGg+aS5tYXhMZW4pe2xldCB1PWUtaS5tYXhMZW4vMjtyZXR1cm4gdTwwP3U9MDpyKz11LG49bi5zdWJzdHJpbmcodSxlK2kubWF4TGVuLzIpLEhuKGUsdCxuLHIsaSl9Y29uc3Qgcz1EYXRlLm5vdygpLGE9ZS0xLXI7bGV0IG89LTEsbD1udWxsO2ZvcihsZXQgdT0xOyEoRGF0ZS5ub3coKS1zPj1pLnRpbWVCdWRnZXQpO3UrKyl7Y29uc3QgZj1hLWkud2luZG93U2l6ZSp1O3QubGFzdEluZGV4PU1hdGgubWF4KDAsZik7Y29uc3QgaD1Rbyh0LG4sYSxvKTtpZighaCYmbHx8KGw9aCxmPD0wKSlicmVhaztvPWZ9aWYobCl7Y29uc3QgdT17d29yZDpsWzBdLHN0YXJ0Q29sdW1uOnIrMStsLmluZGV4LGVuZENvbHVtbjpyKzErbC5pbmRleCtsWzBdLmxlbmd0aH07cmV0dXJuIHQubGFzdEluZGV4PTAsdX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBRbyhlLHQsbixyKXtsZXQgaTtmb3IoO2k9ZS5leGVjKHQpOyl7Y29uc3Qgcz1pLmluZGV4fHwwO2lmKHM8PW4mJmUubGFzdEluZGV4Pj1uKXJldHVybiBpO2lmKHI+MCYmcz5yKXJldHVybiBudWxsfXJldHVybiBudWxsfWNsYXNzIHpue2NvbnN0cnVjdG9yKHQpe2NvbnN0IG49cmkodCk7dGhpcy5fZGVmYXVsdFZhbHVlPW4sdGhpcy5fYXNjaWlNYXA9em4uX2NyZWF0ZUFzY2lpTWFwKG4pLHRoaXMuX21hcD1uZXcgTWFwfXN0YXRpYyBfY3JlYXRlQXNjaWlNYXAodCl7Y29uc3Qgbj1uZXcgVWludDhBcnJheSgyNTYpO3JldHVybiBuLmZpbGwodCksbn1zZXQodCxuKXtjb25zdCByPXJpKG4pO3Q+PTAmJnQ8MjU2P3RoaXMuX2FzY2lpTWFwW3RdPXI6dGhpcy5fbWFwLnNldCh0LHIpfWdldCh0KXtyZXR1cm4gdD49MCYmdDwyNTY/dGhpcy5fYXNjaWlNYXBbdF06dGhpcy5fbWFwLmdldCh0KXx8dGhpcy5fZGVmYXVsdFZhbHVlfWNsZWFyKCl7dGhpcy5fYXNjaWlNYXAuZmlsbCh0aGlzLl9kZWZhdWx0VmFsdWUpLHRoaXMuX21hcC5jbGVhcigpfX1jbGFzcyBab3tjb25zdHJ1Y3Rvcih0LG4scil7Y29uc3QgaT1uZXcgVWludDhBcnJheSh0Km4pO2ZvcihsZXQgcz0wLGE9dCpuO3M8YTtzKyspaVtzXT1yO3RoaXMuX2RhdGE9aSx0aGlzLnJvd3M9dCx0aGlzLmNvbHM9bn1nZXQodCxuKXtyZXR1cm4gdGhpcy5fZGF0YVt0KnRoaXMuY29scytuXX1zZXQodCxuLHIpe3RoaXMuX2RhdGFbdCp0aGlzLmNvbHMrbl09cn19Y2xhc3MgWW97Y29uc3RydWN0b3IodCl7bGV0IG49MCxyPTA7Zm9yKGxldCBzPTAsYT10Lmxlbmd0aDtzPGE7cysrKXtjb25zdFtvLGwsdV09dFtzXTtsPm4mJihuPWwpLG8+ciYmKHI9byksdT5yJiYocj11KX1uKysscisrO2NvbnN0IGk9bmV3IFpvKHIsbiwwKTtmb3IobGV0IHM9MCxhPXQubGVuZ3RoO3M8YTtzKyspe2NvbnN0W28sbCx1XT10W3NdO2kuc2V0KG8sbCx1KX10aGlzLl9zdGF0ZXM9aSx0aGlzLl9tYXhDaGFyQ29kZT1ufW5leHRTdGF0ZSh0LG4pe3JldHVybiBuPDB8fG4+PXRoaXMuX21heENoYXJDb2RlPzA6dGhpcy5fc3RhdGVzLmdldCh0LG4pfX1sZXQgR249bnVsbDtmdW5jdGlvbiBLbygpe3JldHVybiBHbj09PW51bGwmJihHbj1uZXcgWW8oW1sxLDEwNCwyXSxbMSw3MiwyXSxbMSwxMDIsNl0sWzEsNzAsNl0sWzIsMTE2LDNdLFsyLDg0LDNdLFszLDExNiw0XSxbMyw4NCw0XSxbNCwxMTIsNV0sWzQsODAsNV0sWzUsMTE1LDldLFs1LDgzLDldLFs1LDU4LDEwXSxbNiwxMDUsN10sWzYsNzMsN10sWzcsMTA4LDhdLFs3LDc2LDhdLFs4LDEwMSw5XSxbOCw2OSw5XSxbOSw1OCwxMF0sWzEwLDQ3LDExXSxbMTEsNDcsMTJdXSkpLEdufWxldCBUdD1udWxsO2Z1bmN0aW9uIGVsKCl7aWYoVHQ9PT1udWxsKXtUdD1uZXcgem4oMCk7Y29uc3QgZT1gIAk8Pici44CB44CC772h772k77yM77yO77ya77yb4oCY44CI44CM44CO44CU77yI77y7772b772i772j772d77y977yJ44CV44CP44CN44CJ4oCZ772A772e4oCmYDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKylUdC5zZXQoZS5jaGFyQ29kZUF0KG4pLDEpO2NvbnN0IHQ9Ii4sOzoiO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKVR0LnNldCh0LmNoYXJDb2RlQXQobiksMil9cmV0dXJuIFR0fWNsYXNzIG9ue3N0YXRpYyBfY3JlYXRlTGluayh0LG4scixpLHMpe2xldCBhPXMtMTtkb3tjb25zdCBvPW4uY2hhckNvZGVBdChhKTtpZih0LmdldChvKSE9PTIpYnJlYWs7YS0tfXdoaWxlKGE+aSk7aWYoaT4wKXtjb25zdCBvPW4uY2hhckNvZGVBdChpLTEpLGw9bi5jaGFyQ29kZUF0KGEpOyhvPT09NDAmJmw9PT00MXx8bz09PTkxJiZsPT09OTN8fG89PT0xMjMmJmw9PT0xMjUpJiZhLS19cmV0dXJue3JhbmdlOntzdGFydExpbmVOdW1iZXI6cixzdGFydENvbHVtbjppKzEsZW5kTGluZU51bWJlcjpyLGVuZENvbHVtbjphKzJ9LHVybDpuLnN1YnN0cmluZyhpLGErMSl9fXN0YXRpYyBjb21wdXRlTGlua3ModCxuPUtvKCkpe2NvbnN0IHI9ZWwoKSxpPVtdO2ZvcihsZXQgcz0xLGE9dC5nZXRMaW5lQ291bnQoKTtzPD1hO3MrKyl7Y29uc3Qgbz10LmdldExpbmVDb250ZW50KHMpLGw9by5sZW5ndGg7bGV0IHU9MCxmPTAsaD0wLGQ9MSxnPSExLG09ITEsdj0hMSxwPSExO2Zvcig7dTxsOyl7bGV0IHg9ITE7Y29uc3QgeT1vLmNoYXJDb2RlQXQodSk7aWYoZD09PTEzKXtsZXQgYjtzd2l0Y2goeSl7Y2FzZSA0MDpnPSEwLGI9MDticmVhaztjYXNlIDQxOmI9Zz8wOjE7YnJlYWs7Y2FzZSA5MTp2PSEwLG09ITAsYj0wO2JyZWFrO2Nhc2UgOTM6dj0hMSxiPW0/MDoxO2JyZWFrO2Nhc2UgMTIzOnA9ITAsYj0wO2JyZWFrO2Nhc2UgMTI1OmI9cD8wOjE7YnJlYWs7Y2FzZSAzOTpjYXNlIDM0OmNhc2UgOTY6aD09PXk/Yj0xOmg9PT0zOXx8aD09PTM0fHxoPT09OTY/Yj0wOmI9MTticmVhaztjYXNlIDQyOmI9aD09PTQyPzE6MDticmVhaztjYXNlIDEyNDpiPWg9PT0xMjQ/MTowO2JyZWFrO2Nhc2UgMzI6Yj12PzA6MTticmVhaztkZWZhdWx0OmI9ci5nZXQoeSl9Yj09PTEmJihpLnB1c2gob24uX2NyZWF0ZUxpbmsocixvLHMsZix1KSkseD0hMCl9ZWxzZSBpZihkPT09MTIpe2xldCBiO3k9PT05MT8obT0hMCxiPTApOmI9ci5nZXQoeSksYj09PTE/eD0hMDpkPTEzfWVsc2UgZD1uLm5leHRTdGF0ZShkLHkpLGQ9PT0wJiYoeD0hMCk7eCYmKGQ9MSxnPSExLG09ITEscD0hMSxmPXUrMSxoPXkpLHUrK31kPT09MTMmJmkucHVzaChvbi5fY3JlYXRlTGluayhyLG8scyxmLGwpKX1yZXR1cm4gaX19ZnVuY3Rpb24gdGwoZSl7cmV0dXJuIWV8fHR5cGVvZiBlLmdldExpbmVDb3VudCE9ImZ1bmN0aW9uInx8dHlwZW9mIGUuZ2V0TGluZUNvbnRlbnQhPSJmdW5jdGlvbiI/W106b24uY29tcHV0ZUxpbmtzKGUpfWNsYXNzIEpue2NvbnN0cnVjdG9yKCl7dGhpcy5fZGVmYXVsdFZhbHVlU2V0PVtbInRydWUiLCJmYWxzZSJdLFsiVHJ1ZSIsIkZhbHNlIl0sWyJQcml2YXRlIiwiUHVibGljIiwiRnJpZW5kIiwiUmVhZE9ubHkiLCJQYXJ0aWFsIiwiUHJvdGVjdGVkIiwiV3JpdGVPbmx5Il0sWyJwdWJsaWMiLCJwcm90ZWN0ZWQiLCJwcml2YXRlIl1dfW5hdmlnYXRlVmFsdWVTZXQodCxuLHIsaSxzKXtpZih0JiZuKXtjb25zdCBhPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KG4scyk7aWYoYSlyZXR1cm57cmFuZ2U6dCx2YWx1ZTphfX1pZihyJiZpKXtjb25zdCBhPXRoaXMuZG9OYXZpZ2F0ZVZhbHVlU2V0KGkscyk7aWYoYSlyZXR1cm57cmFuZ2U6cix2YWx1ZTphfX1yZXR1cm4gbnVsbH1kb05hdmlnYXRlVmFsdWVTZXQodCxuKXtjb25zdCByPXRoaXMubnVtYmVyUmVwbGFjZSh0LG4pO3JldHVybiByIT09bnVsbD9yOnRoaXMudGV4dFJlcGxhY2UodCxuKX1udW1iZXJSZXBsYWNlKHQsbil7Y29uc3Qgcj1NYXRoLnBvdygxMCx0Lmxlbmd0aC0odC5sYXN0SW5kZXhPZigiLiIpKzEpKTtsZXQgaT1OdW1iZXIodCk7Y29uc3Qgcz1wYXJzZUZsb2F0KHQpO3JldHVybiFpc05hTihpKSYmIWlzTmFOKHMpJiZpPT09cz9pPT09MCYmIW4/bnVsbDooaT1NYXRoLmZsb29yKGkqciksaSs9bj9yOi1yLFN0cmluZyhpL3IpKTpudWxsfXRleHRSZXBsYWNlKHQsbil7cmV0dXJuIHRoaXMudmFsdWVTZXRzUmVwbGFjZSh0aGlzLl9kZWZhdWx0VmFsdWVTZXQsdCxuKX12YWx1ZVNldHNSZXBsYWNlKHQsbixyKXtsZXQgaT1udWxsO2ZvcihsZXQgcz0wLGE9dC5sZW5ndGg7aT09PW51bGwmJnM8YTtzKyspaT10aGlzLnZhbHVlU2V0UmVwbGFjZSh0W3NdLG4scik7cmV0dXJuIGl9dmFsdWVTZXRSZXBsYWNlKHQsbixyKXtsZXQgaT10LmluZGV4T2Yobik7cmV0dXJuIGk+PTA/KGkrPXI/MTotMSxpPDA/aT10Lmxlbmd0aC0xOmklPXQubGVuZ3RoLHRbaV0pOm51bGx9fUpuLklOU1RBTkNFPW5ldyBKbjtjb25zdCBvaT1PYmplY3QuZnJlZXplKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgbj1zZXRUaW1lb3V0KGUuYmluZCh0KSwwKTtyZXR1cm57ZGlzcG9zZSgpe2NsZWFyVGltZW91dChuKX19fSk7dmFyIGxuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPT09ZS5Ob25lfHxuPT09ZS5DYW5jZWxsZWR8fG4gaW5zdGFuY2VvZiB1bj8hMDohbnx8dHlwZW9mIG4hPSJvYmplY3QiPyExOnR5cGVvZiBuLmlzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkPT0iYm9vbGVhbiImJnR5cGVvZiBuLm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkPT0iZnVuY3Rpb24ifWUuaXNDYW5jZWxsYXRpb25Ub2tlbj10LGUuTm9uZT1PYmplY3QuZnJlZXplKHtpc0NhbmNlbGxhdGlvblJlcXVlc3RlZDohMSxvbkNhbmNlbGxhdGlvblJlcXVlc3RlZDpFbi5Ob25lfSksZS5DYW5jZWxsZWQ9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITAsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6b2l9KX0pKGxufHwobG49e30pKTtjbGFzcyB1bntjb25zdHJ1Y3Rvcigpe3RoaXMuX2lzQ2FuY2VsbGVkPSExLHRoaXMuX2VtaXR0ZXI9bnVsbH1jYW5jZWwoKXt0aGlzLl9pc0NhbmNlbGxlZHx8KHRoaXMuX2lzQ2FuY2VsbGVkPSEwLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmZpcmUodm9pZCAwKSx0aGlzLmRpc3Bvc2UoKSkpfWdldCBpc0NhbmNlbGxhdGlvblJlcXVlc3RlZCgpe3JldHVybiB0aGlzLl9pc0NhbmNlbGxlZH1nZXQgb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWQ/b2k6KHRoaXMuX2VtaXR0ZXJ8fCh0aGlzLl9lbWl0dGVyPW5ldyBBZSksdGhpcy5fZW1pdHRlci5ldmVudCl9ZGlzcG9zZSgpe3RoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLmRpc3Bvc2UoKSx0aGlzLl9lbWl0dGVyPW51bGwpfX1jbGFzcyBubHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl90b2tlbj12b2lkIDAsdGhpcy5fcGFyZW50TGlzdGVuZXI9dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXQmJnQub25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQodGhpcy5jYW5jZWwsdGhpcyl9Z2V0IHRva2VuKCl7cmV0dXJuIHRoaXMuX3Rva2VufHwodGhpcy5fdG9rZW49bmV3IHVuKSx0aGlzLl90b2tlbn1jYW5jZWwoKXt0aGlzLl90b2tlbj90aGlzLl90b2tlbiBpbnN0YW5jZW9mIHVuJiZ0aGlzLl90b2tlbi5jYW5jZWwoKTp0aGlzLl90b2tlbj1sbi5DYW5jZWxsZWR9ZGlzcG9zZSh0PSExKXt2YXIgbjt0JiZ0aGlzLmNhbmNlbCgpLChuPXRoaXMuX3BhcmVudExpc3RlbmVyKT09PW51bGx8fG49PT12b2lkIDB8fG4uZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgdW4mJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1sbi5Ob25lfX1jbGFzcyBYbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUodCxuKXt0aGlzLl9rZXlDb2RlVG9TdHJbdF09bix0aGlzLl9zdHJUb0tleUNvZGVbbi50b0xvd2VyQ2FzZSgpXT10fWtleUNvZGVUb1N0cih0KXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW3RdfXN0clRvS2V5Q29kZSh0KXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IGNuPW5ldyBYbixRbj1uZXcgWG4sWm49bmV3IFhuLHJsPW5ldyBBcnJheSgyMzApLGlsPU9iamVjdC5jcmVhdGUobnVsbCksc2w9T2JqZWN0LmNyZWF0ZShudWxsKTsoZnVuY3Rpb24oKXtjb25zdCBlPSIiLHQ9W1sxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLGUsZV0sWzEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMSwyLCJTdXBlciIsMCxlLDAsZSxlLGVdLFsxLDMsIkZuIiwwLGUsMCxlLGUsZV0sWzEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzEsNSwiU3VzcGVuZCIsMCxlLDAsZSxlLGVdLFsxLDYsIlJlc3VtZSIsMCxlLDAsZSxlLGVdLFsxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzEsOCwiU2xlZXAiLDAsZSwwLCJWS19TTEVFUCIsZSxlXSxbMSw5LCJXYWtlVXAiLDAsZSwwLGUsZSxlXSxbMCwxMCwiS2V5QSIsMzEsIkEiLDY1LCJWS19BIixlLGVdLFswLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLGUsZV0sWzAsMTIsIktleUMiLDMzLCJDIiw2NywiVktfQyIsZSxlXSxbMCwxMywiS2V5RCIsMzQsIkQiLDY4LCJWS19EIixlLGVdLFswLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLGUsZV0sWzAsMTUsIktleUYiLDM2LCJGIiw3MCwiVktfRiIsZSxlXSxbMCwxNiwiS2V5RyIsMzcsIkciLDcxLCJWS19HIixlLGVdLFswLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLGUsZV0sWzAsMTgsIktleUkiLDM5LCJJIiw3MywiVktfSSIsZSxlXSxbMCwxOSwiS2V5SiIsNDAsIkoiLDc0LCJWS19KIixlLGVdLFswLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLGUsZV0sWzAsMjEsIktleUwiLDQyLCJMIiw3NiwiVktfTCIsZSxlXSxbMCwyMiwiS2V5TSIsNDMsIk0iLDc3LCJWS19NIixlLGVdLFswLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLGUsZV0sWzAsMjQsIktleU8iLDQ1LCJPIiw3OSwiVktfTyIsZSxlXSxbMCwyNSwiS2V5UCIsNDYsIlAiLDgwLCJWS19QIixlLGVdLFswLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLGUsZV0sWzAsMjcsIktleVIiLDQ4LCJSIiw4MiwiVktfUiIsZSxlXSxbMCwyOCwiS2V5UyIsNDksIlMiLDgzLCJWS19TIixlLGVdLFswLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLGUsZV0sWzAsMzAsIktleVUiLDUxLCJVIiw4NSwiVktfVSIsZSxlXSxbMCwzMSwiS2V5ViIsNTIsIlYiLDg2LCJWS19WIixlLGVdLFswLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLGUsZV0sWzAsMzMsIktleVgiLDU0LCJYIiw4OCwiVktfWCIsZSxlXSxbMCwzNCwiS2V5WSIsNTUsIlkiLDg5LCJWS19ZIixlLGVdLFswLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLGUsZV0sWzAsMzYsIkRpZ2l0MSIsMjIsIjEiLDQ5LCJWS18xIixlLGVdLFswLDM3LCJEaWdpdDIiLDIzLCIyIiw1MCwiVktfMiIsZSxlXSxbMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLGUsZV0sWzAsMzksIkRpZ2l0NCIsMjUsIjQiLDUyLCJWS180IixlLGVdLFswLDQwLCJEaWdpdDUiLDI2LCI1Iiw1MywiVktfNSIsZSxlXSxbMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLGUsZV0sWzAsNDIsIkRpZ2l0NyIsMjgsIjciLDU1LCJWS183IixlLGVdLFswLDQzLCJEaWdpdDgiLDI5LCI4Iiw1NiwiVktfOCIsZSxlXSxbMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLGUsZV0sWzAsNDUsIkRpZ2l0MCIsMjEsIjAiLDQ4LCJWS18wIixlLGVdLFsxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzEsNDcsIkVzY2FwZSIsOSwiRXNjYXBlIiwyNywiVktfRVNDQVBFIixlLGVdLFsxLDQ4LCJCYWNrc3BhY2UiLDEsIkJhY2tzcGFjZSIsOCwiVktfQkFDSyIsZSxlXSxbMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFswLDUxLCJNaW51cyIsODgsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFswLDUyLCJFcXVhbCIsODYsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbMCw1MywiQnJhY2tldExlZnQiLDkyLCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzAsNTQsIkJyYWNrZXRSaWdodCIsOTQsIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbMCw1NSwiQmFja3NsYXNoIiw5MywiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsNTYsIkludGxIYXNoIiwwLGUsMCxlLGUsZV0sWzAsNTcsIlNlbWljb2xvbiIsODUsIjsiLDE4NiwiVktfT0VNXzEiLCI7IiwiT0VNXzEiXSxbMCw1OCwiUXVvdGUiLDk1LCInIiwyMjIsIlZLX09FTV83IiwiJyIsIk9FTV83Il0sWzAsNTksIkJhY2txdW90ZSIsOTEsImAiLDE5MiwiVktfT0VNXzMiLCJgIiwiT0VNXzMiXSxbMCw2MCwiQ29tbWEiLDg3LCIsIiwxODgsIlZLX09FTV9DT01NQSIsIiwiLCJPRU1fQ09NTUEiXSxbMCw2MSwiUGVyaW9kIiw4OSwiLiIsMTkwLCJWS19PRU1fUEVSSU9EIiwiLiIsIk9FTV9QRVJJT0QiXSxbMCw2MiwiU2xhc2giLDkwLCIvIiwxOTEsIlZLX09FTV8yIiwiLyIsIk9FTV8yIl0sWzEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLGUsZV0sWzEsNjQsIkYxIiw1OSwiRjEiLDExMiwiVktfRjEiLGUsZV0sWzEsNjUsIkYyIiw2MCwiRjIiLDExMywiVktfRjIiLGUsZV0sWzEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLGUsZV0sWzEsNjcsIkY0Iiw2MiwiRjQiLDExNSwiVktfRjQiLGUsZV0sWzEsNjgsIkY1Iiw2MywiRjUiLDExNiwiVktfRjUiLGUsZV0sWzEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLGUsZV0sWzEsNzAsIkY3Iiw2NSwiRjciLDExOCwiVktfRjciLGUsZV0sWzEsNzEsIkY4Iiw2NiwiRjgiLDExOSwiVktfRjgiLGUsZV0sWzEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLGUsZV0sWzEsNzMsIkYxMCIsNjgsIkYxMCIsMTIxLCJWS19GMTAiLGUsZV0sWzEsNzQsIkYxMSIsNjksIkYxMSIsMTIyLCJWS19GMTEiLGUsZV0sWzEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLGUsZV0sWzEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzEsNzcsIlNjcm9sbExvY2siLDg0LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsZSxlXSxbMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIixlLGVdLFsxLDgwLCJIb21lIiwxNCwiSG9tZSIsMzYsIlZLX0hPTUUiLGUsZV0sWzEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIixlLGVdLFsxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLGUsZV0sWzEsODMsIkVuZCIsMTMsIkVuZCIsMzUsIlZLX0VORCIsZSxlXSxbMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLGUsZV0sWzEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsZV0sWzEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IixlXSxbMSw4NywiQXJyb3dEb3duIiwxOCwiRG93bkFycm93Iiw0MCwiVktfRE9XTiIsIkRvd24iLGVdLFsxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLGVdLFsxLDg5LCJOdW1Mb2NrIiw4MywiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIixlLGVdLFsxLDkwLCJOdW1wYWREaXZpZGUiLDExMywiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDgsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsZSxlXSxbMSw5MiwiTnVtcGFkU3VidHJhY3QiLDExMSwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIixlLGVdLFsxLDkzLCJOdW1wYWRBZGQiLDEwOSwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzEsOTQsIk51bXBhZEVudGVyIiwzLGUsMCxlLGUsZV0sWzEsOTUsIk51bXBhZDEiLDk5LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsZSxlXSxbMSw5NiwiTnVtcGFkMiIsMTAwLCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsZSxlXSxbMSw5NywiTnVtcGFkMyIsMTAxLCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbMSw5OCwiTnVtcGFkNCIsMTAyLCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLGUsZV0sWzEsOTksIk51bXBhZDUiLDEwMywiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IixlLGVdLFsxLDEwMCwiTnVtcGFkNiIsMTA0LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEsMTAxLCJOdW1wYWQ3IiwxMDUsIk51bVBhZDciLDEwMywiVktfTlVNUEFENyIsZSxlXSxbMSwxMDIsIk51bXBhZDgiLDEwNiwiTnVtUGFkOCIsMTA0LCJWS19OVU1QQUQ4IixlLGVdLFsxLDEwMywiTnVtcGFkOSIsMTA3LCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzEsMTA0LCJOdW1wYWQwIiw5OCwiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMTIsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLGUsZV0sWzAsMTA2LCJJbnRsQmFja3NsYXNoIiw5NywiT0VNXzEwMiIsMjI2LCJWS19PRU1fMTAyIixlLGVdLFsxLDEwNywiQ29udGV4dE1lbnUiLDU4LCJDb250ZXh0TWVudSIsOTMsZSxlLGVdLFsxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMSwxMDksIk51bXBhZEVxdWFsIiwwLGUsMCxlLGUsZV0sWzEsMTEwLCJGMTMiLDcxLCJGMTMiLDEyNCwiVktfRjEzIixlLGVdLFsxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsZSxlXSxbMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLGUsZV0sWzEsMTEzLCJGMTYiLDc0LCJGMTYiLDEyNywiVktfRjE2IixlLGVdLFsxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsZSxlXSxbMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLGUsZV0sWzEsMTE2LCJGMTkiLDc3LCJGMTkiLDEzMCwiVktfRjE5IixlLGVdLFsxLDExNywiRjIwIiw3OCwiRjIwIiwxMzEsIlZLX0YyMCIsZSxlXSxbMSwxMTgsIkYyMSIsNzksIkYyMSIsMTMyLCJWS19GMjEiLGUsZV0sWzEsMTE5LCJGMjIiLDgwLCJGMjIiLDEzMywiVktfRjIyIixlLGVdLFsxLDEyMCwiRjIzIiw4MSwiRjIzIiwxMzQsIlZLX0YyMyIsZSxlXSxbMSwxMjEsIkYyNCIsODIsIkYyNCIsMTM1LCJWS19GMjQiLGUsZV0sWzEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzEsMTIzLCJIZWxwIiwwLGUsMCxlLGUsZV0sWzEsMTI0LCJTZWxlY3QiLDAsZSwwLGUsZSxlXSxbMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzEsMTI2LCJVbmRvIiwwLGUsMCxlLGUsZV0sWzEsMTI3LCJDdXQiLDAsZSwwLGUsZSxlXSxbMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMSwxMjksIlBhc3RlIiwwLGUsMCxlLGUsZV0sWzEsMTMwLCJGaW5kIiwwLGUsMCxlLGUsZV0sWzEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExNywiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFsxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTE4LCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsZSxlXSxbMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE5LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLGUsZV0sWzEsMTM0LCJOdW1wYWRDb21tYSIsMTEwLCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsZSxlXSxbMCwxMzUsIkludGxSbyIsMTE1LCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzEsMTM2LCJLYW5hTW9kZSIsMCxlLDAsZSxlLGVdLFswLDEzNywiSW50bFllbiIsMCxlLDAsZSxlLGVdLFsxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDEzOSwiTm9uQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDE0MCwiTGFuZzEiLDAsZSwwLGUsZSxlXSxbMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzEsMTQyLCJMYW5nMyIsMCxlLDAsZSxlLGVdLFsxLDE0MywiTGFuZzQiLDAsZSwwLGUsZSxlXSxbMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzEsMTQ1LCJBYm9ydCIsMCxlLDAsZSxlLGVdLFsxLDE0NiwiUHJvcHMiLDAsZSwwLGUsZSxlXSxbMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFsxLDE0OCwiTnVtcGFkUGFyZW5SaWdodCIsMCxlLDAsZSxlLGVdLFsxLDE0OSwiTnVtcGFkQmFja3NwYWNlIiwwLGUsMCxlLGUsZV0sWzEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFsxLDE1MSwiTnVtcGFkTWVtb3J5UmVjYWxsIiwwLGUsMCxlLGUsZV0sWzEsMTUyLCJOdW1wYWRNZW1vcnlDbGVhciIsMCxlLDAsZSxlLGVdLFsxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzEsMTU0LCJOdW1wYWRNZW1vcnlTdWJ0cmFjdCIsMCxlLDAsZSxlLGVdLFsxLDE1NSwiTnVtcGFkQ2xlYXIiLDEzMSwiQ2xlYXIiLDEyLCJWS19DTEVBUiIsZSxlXSxbMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbMSwwLGUsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLGUsZV0sWzEsMCxlLDQsIlNoaWZ0IiwxNiwiVktfU0hJRlQiLGUsZV0sWzEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzEsMCxlLDU3LCJNZXRhIiw5MSwiVktfQ09NTUFORCIsZSxlXSxbMSwxNTcsIkNvbnRyb2xMZWZ0Iiw1LGUsMCwiVktfTENPTlRST0wiLGUsZV0sWzEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzEsMTU5LCJBbHRMZWZ0Iiw2LGUsMCwiVktfTE1FTlUiLGUsZV0sWzEsMTYwLCJNZXRhTGVmdCIsNTcsZSwwLCJWS19MV0lOIixlLGVdLFsxLDE2MSwiQ29udHJvbFJpZ2h0Iiw1LGUsMCwiVktfUkNPTlRST0wiLGUsZV0sWzEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFsxLDE2MywiQWx0UmlnaHQiLDYsZSwwLCJWS19STUVOVSIsZSxlXSxbMSwxNjQsIk1ldGFSaWdodCIsNTcsZSwwLCJWS19SV0lOIixlLGVdLFsxLDE2NSwiQnJpZ2h0bmVzc1VwIiwwLGUsMCxlLGUsZV0sWzEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFsxLDE2NywiTWVkaWFQbGF5IiwwLGUsMCxlLGUsZV0sWzEsMTY4LCJNZWRpYVJlY29yZCIsMCxlLDAsZSxlLGVdLFsxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFsxLDE3MCwiTWVkaWFSZXdpbmQiLDAsZSwwLGUsZSxlXSxbMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMjQsIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyNSwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLGUsZV0sWzEsMTczLCJNZWRpYVN0b3AiLDEyNiwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLGUsZV0sWzEsMTc0LCJFamVjdCIsMCxlLDAsZSxlLGVdLFsxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyNywiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsZSxlXSxbMSwxNzYsIk1lZGlhU2VsZWN0IiwxMjgsIkxhdW5jaE1lZGlhUGxheWVyIiwxODEsIlZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QiLGUsZV0sWzEsMTc3LCJMYXVuY2hNYWlsIiwxMjksIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzEsMTc4LCJMYXVuY2hBcHAyIiwxMzAsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLGUsZV0sWzEsMTc5LCJMYXVuY2hBcHAxIiwwLGUsMCwiVktfTUVESUFfTEFVTkNIX0FQUDEiLGUsZV0sWzEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCxlLDAsZSxlLGVdLFsxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTIwLCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIixlLGVdLFsxLDE4MywiQnJvd3NlckhvbWUiLDEyMSwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxLDE4NCwiQnJvd3NlckJhY2siLDEyMiwiQnJvd3NlckJhY2siLDE2NiwiVktfQlJPV1NFUl9CQUNLIixlLGVdLFsxLDE4NSwiQnJvd3NlckZvcndhcmQiLDEyMywiQnJvd3NlckZvcndhcmQiLDE2NywiVktfQlJPV1NFUl9GT1JXQVJEIixlLGVdLFsxLDE4NiwiQnJvd3NlclN0b3AiLDAsZSwwLCJWS19CUk9XU0VSX1NUT1AiLGUsZV0sWzEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsZSwwLCJWS19CUk9XU0VSX0ZBVk9SSVRFUyIsZSxlXSxbMSwxODksIlpvb21Ub2dnbGUiLDAsZSwwLGUsZSxlXSxbMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFsxLDE5MSwiTWFpbEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxOTIsIk1haWxTZW5kIiwwLGUsMCxlLGUsZV0sWzEsMCxlLDExNCwiS2V5SW5Db21wb3NpdGlvbiIsMjI5LGUsZSxlXSxbMSwwLGUsMTE2LCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzEsMCxlLDk2LCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0tBTkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IQU5HVUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0ZJTkFMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NPTlZFUlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19OT05DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTU9ERUNIQU5HRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NFTEVDVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhFQ1VURSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NOQVBTSE9UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FQUFMiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUk9DRVNTS0VZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX1NCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX0RCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NSU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhTRUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BMQVkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19aT09NIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEExIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfT0VNX0NMRUFSIixlLGVdXSxuPVtdLHI9W107Zm9yKGNvbnN0IGkgb2YgdCl7Y29uc3RbcyxhLG8sbCx1LGYsaCxkLGddPWk7aWYoclthXXx8KHJbYV09ITAsaWxbb109YSxzbFtvLnRvTG93ZXJDYXNlKCldPWEpLCFuW2xdKXtpZihuW2xdPSEwLCF1KXRocm93IG5ldyBFcnJvcihgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG1pc3NpbmcgZm9yIGtleSBjb2RlICR7bH0gYXJvdW5kIHNjYW4gY29kZSAke299YCk7Y24uZGVmaW5lKGwsdSksUW4uZGVmaW5lKGwsZHx8dSksWm4uZGVmaW5lKGwsZ3x8ZHx8dSl9ZiYmKHJsW2ZdPWwpfX0pKCk7dmFyIGxpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG8pe3JldHVybiBjbi5rZXlDb2RlVG9TdHIobyl9ZS50b1N0cmluZz10O2Z1bmN0aW9uIG4obyl7cmV0dXJuIGNuLnN0clRvS2V5Q29kZShvKX1lLmZyb21TdHJpbmc9bjtmdW5jdGlvbiByKG8pe3JldHVybiBRbi5rZXlDb2RlVG9TdHIobyl9ZS50b1VzZXJTZXR0aW5nc1VTPXI7ZnVuY3Rpb24gaShvKXtyZXR1cm4gWm4ua2V5Q29kZVRvU3RyKG8pfWUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWk7ZnVuY3Rpb24gcyhvKXtyZXR1cm4gUW4uc3RyVG9LZXlDb2RlKG8pfHxabi5zdHJUb0tleUNvZGUobyl9ZS5mcm9tVXNlclNldHRpbmdzPXM7ZnVuY3Rpb24gYShvKXtpZihvPj05OCYmbzw9MTEzKXJldHVybiBudWxsO3N3aXRjaChvKXtjYXNlIDE2OnJldHVybiJVcCI7Y2FzZSAxODpyZXR1cm4iRG93biI7Y2FzZSAxNTpyZXR1cm4iTGVmdCI7Y2FzZSAxNzpyZXR1cm4iUmlnaHQifXJldHVybiBjbi5rZXlDb2RlVG9TdHIobyl9ZS50b0VsZWN0cm9uQWNjZWxlcmF0b3I9YX0pKGxpfHwobGk9e30pKTtmdW5jdGlvbiBhbChlLHQpe2NvbnN0IG49KHQmNjU1MzUpPDwxNj4+PjA7cmV0dXJuKGV8bik+Pj4wfWNsYXNzIHhlIGV4dGVuZHMgc2V7Y29uc3RydWN0b3IodCxuLHIsaSl7c3VwZXIodCxuLHIsaSksdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9dCx0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPW4sdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXI9cix0aGlzLnBvc2l0aW9uQ29sdW1uPWl9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIrIiwiK3RoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW4rIiAtPiAiK3RoaXMucG9zaXRpb25MaW5lTnVtYmVyKyIsIit0aGlzLnBvc2l0aW9uQ29sdW1uKyJdIn1lcXVhbHNTZWxlY3Rpb24odCl7cmV0dXJuIHhlLnNlbGVjdGlvbnNFcXVhbCh0aGlzLHQpfXN0YXRpYyBzZWxlY3Rpb25zRXF1YWwodCxuKXtyZXR1cm4gdC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PT1uLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlciYmdC5zZWxlY3Rpb25TdGFydENvbHVtbj09PW4uc2VsZWN0aW9uU3RhcnRDb2x1bW4mJnQucG9zaXRpb25MaW5lTnVtYmVyPT09bi5wb3NpdGlvbkxpbmVOdW1iZXImJnQucG9zaXRpb25Db2x1bW49PT1uLnBvc2l0aW9uQ29sdW1ufWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PXRoaXMuc3RhcnRMaW5lTnVtYmVyJiZ0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09dGhpcy5zdGFydENvbHVtbj8wOjF9c2V0RW5kUG9zaXRpb24odCxuKXtyZXR1cm4gdGhpcy5nZXREaXJlY3Rpb24oKT09PTA/bmV3IHhlKHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4sdCxuKTpuZXcgeGUodCxuLHRoaXMuc3RhcnRMaW5lTnVtYmVyLHRoaXMuc3RhcnRDb2x1bW4pfWdldFBvc2l0aW9uKCl7cmV0dXJuIG5ldyBQZSh0aGlzLnBvc2l0aW9uTGluZU51bWJlcix0aGlzLnBvc2l0aW9uQ29sdW1uKX1nZXRTZWxlY3Rpb25TdGFydCgpe3JldHVybiBuZXcgUGUodGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbil9c2V0U3RhcnRQb3NpdGlvbih0LG4pe3JldHVybiB0aGlzLmdldERpcmVjdGlvbigpPT09MD9uZXcgeGUodCxuLHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbik6bmV3IHhlKHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbix0LG4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IHhlKHQubGluZU51bWJlcix0LmNvbHVtbixuLmxpbmVOdW1iZXIsbi5jb2x1bW4pfXN0YXRpYyBmcm9tUmFuZ2UodCxuKXtyZXR1cm4gbj09PTA/bmV3IHhlKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKTpuZXcgeGUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBsaWZ0U2VsZWN0aW9uKHQpe3JldHVybiBuZXcgeGUodC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdC5zZWxlY3Rpb25TdGFydENvbHVtbix0LnBvc2l0aW9uTGluZU51bWJlcix0LnBvc2l0aW9uQ29sdW1uKX1zdGF0aWMgc2VsZWN0aW9uc0FyckVxdWFsKHQsbil7aWYodCYmIW58fCF0JiZuKXJldHVybiExO2lmKCF0JiYhbilyZXR1cm4hMDtpZih0Lmxlbmd0aCE9PW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLGk9dC5sZW5ndGg7cjxpO3IrKylpZighdGhpcy5zZWxlY3Rpb25zRXF1YWwodFtyXSxuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgaXNJU2VsZWN0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5zZWxlY3Rpb25TdGFydENvbHVtbj09Im51bWJlciImJnR5cGVvZiB0LnBvc2l0aW9uTGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnBvc2l0aW9uQ29sdW1uPT0ibnVtYmVyIn1zdGF0aWMgY3JlYXRlV2l0aERpcmVjdGlvbih0LG4scixpLHMpe3JldHVybiBzPT09MD9uZXcgeGUodCxuLHIsaSk6bmV3IHhlKHIsaSx0LG4pfX1jb25zdCB1aT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGMoZSx0KXtpZihIYSh0KSl7Y29uc3Qgbj11aVt0XTtpZihuPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgJHtlfSByZWZlcmVuY2VzIGFuIHVua25vd24gY29kaWNvbjogJHt0fWApO3Q9bn1yZXR1cm4gdWlbZV09dCx7aWQ6ZX19Y29uc3Qgb2w9e2FkZDpjKCJhZGQiLDZlNCkscGx1czpjKCJwbHVzIiw2ZTQpLGdpc3ROZXc6YygiZ2lzdC1uZXciLDZlNCkscmVwb0NyZWF0ZTpjKCJyZXBvLWNyZWF0ZSIsNmU0KSxsaWdodGJ1bGI6YygibGlnaHRidWxiIiw2MDAwMSksbGlnaHRCdWxiOmMoImxpZ2h0LWJ1bGIiLDYwMDAxKSxyZXBvOmMoInJlcG8iLDYwMDAyKSxyZXBvRGVsZXRlOmMoInJlcG8tZGVsZXRlIiw2MDAwMiksZ2lzdEZvcms6YygiZ2lzdC1mb3JrIiw2MDAwMykscmVwb0ZvcmtlZDpjKCJyZXBvLWZvcmtlZCIsNjAwMDMpLGdpdFB1bGxSZXF1ZXN0OmMoImdpdC1wdWxsLXJlcXVlc3QiLDYwMDA0KSxnaXRQdWxsUmVxdWVzdEFiYW5kb25lZDpjKCJnaXQtcHVsbC1yZXF1ZXN0LWFiYW5kb25lZCIsNjAwMDQpLHJlY29yZEtleXM6YygicmVjb3JkLWtleXMiLDYwMDA1KSxrZXlib2FyZDpjKCJrZXlib2FyZCIsNjAwMDUpLHRhZzpjKCJ0YWciLDYwMDA2KSxnaXRQdWxsUmVxdWVzdExhYmVsOmMoImdpdC1wdWxsLXJlcXVlc3QtbGFiZWwiLDYwMDA2KSx0YWdBZGQ6YygidGFnLWFkZCIsNjAwMDYpLHRhZ1JlbW92ZTpjKCJ0YWctcmVtb3ZlIiw2MDAwNikscGVyc29uOmMoInBlcnNvbiIsNjAwMDcpLHBlcnNvbkZvbGxvdzpjKCJwZXJzb24tZm9sbG93Iiw2MDAwNykscGVyc29uT3V0bGluZTpjKCJwZXJzb24tb3V0bGluZSIsNjAwMDcpLHBlcnNvbkZpbGxlZDpjKCJwZXJzb24tZmlsbGVkIiw2MDAwNyksZ2l0QnJhbmNoOmMoImdpdC1icmFuY2giLDYwMDA4KSxnaXRCcmFuY2hDcmVhdGU6YygiZ2l0LWJyYW5jaC1jcmVhdGUiLDYwMDA4KSxnaXRCcmFuY2hEZWxldGU6YygiZ2l0LWJyYW5jaC1kZWxldGUiLDYwMDA4KSxzb3VyY2VDb250cm9sOmMoInNvdXJjZS1jb250cm9sIiw2MDAwOCksbWlycm9yOmMoIm1pcnJvciIsNjAwMDkpLG1pcnJvclB1YmxpYzpjKCJtaXJyb3ItcHVibGljIiw2MDAwOSksc3RhcjpjKCJzdGFyIiw2MDAxMCksc3RhckFkZDpjKCJzdGFyLWFkZCIsNjAwMTApLHN0YXJEZWxldGU6Yygic3Rhci1kZWxldGUiLDYwMDEwKSxzdGFyRW1wdHk6Yygic3Rhci1lbXB0eSIsNjAwMTApLGNvbW1lbnQ6YygiY29tbWVudCIsNjAwMTEpLGNvbW1lbnRBZGQ6YygiY29tbWVudC1hZGQiLDYwMDExKSxhbGVydDpjKCJhbGVydCIsNjAwMTIpLHdhcm5pbmc6Yygid2FybmluZyIsNjAwMTIpLHNlYXJjaDpjKCJzZWFyY2giLDYwMDEzKSxzZWFyY2hTYXZlOmMoInNlYXJjaC1zYXZlIiw2MDAxMyksbG9nT3V0OmMoImxvZy1vdXQiLDYwMDE0KSxzaWduT3V0OmMoInNpZ24tb3V0Iiw2MDAxNCksbG9nSW46YygibG9nLWluIiw2MDAxNSksc2lnbkluOmMoInNpZ24taW4iLDYwMDE1KSxleWU6YygiZXllIiw2MDAxNiksZXllVW53YXRjaDpjKCJleWUtdW53YXRjaCIsNjAwMTYpLGV5ZVdhdGNoOmMoImV5ZS13YXRjaCIsNjAwMTYpLGNpcmNsZUZpbGxlZDpjKCJjaXJjbGUtZmlsbGVkIiw2MDAxNykscHJpbWl0aXZlRG90OmMoInByaW1pdGl2ZS1kb3QiLDYwMDE3KSxjbG9zZURpcnR5OmMoImNsb3NlLWRpcnR5Iiw2MDAxNyksZGVidWdCcmVha3BvaW50OmMoImRlYnVnLWJyZWFrcG9pbnQiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnREaXNhYmxlZDpjKCJkZWJ1Zy1icmVha3BvaW50LWRpc2FibGVkIiw2MDAxNyksZGVidWdIaW50OmMoImRlYnVnLWhpbnQiLDYwMDE3KSx0ZXJtaW5hbERlY29yYXRpb25TdWNjZXNzOmMoInRlcm1pbmFsLWRlY29yYXRpb24tc3VjY2VzcyIsNjAwMTcpLHByaW1pdGl2ZVNxdWFyZTpjKCJwcmltaXRpdmUtc3F1YXJlIiw2MDAxOCksZWRpdDpjKCJlZGl0Iiw2MDAxOSkscGVuY2lsOmMoInBlbmNpbCIsNjAwMTkpLGluZm86YygiaW5mbyIsNjAwMjApLGlzc3VlT3BlbmVkOmMoImlzc3VlLW9wZW5lZCIsNjAwMjApLGdpc3RQcml2YXRlOmMoImdpc3QtcHJpdmF0ZSIsNjAwMjEpLGdpdEZvcmtQcml2YXRlOmMoImdpdC1mb3JrLXByaXZhdGUiLDYwMDIxKSxsb2NrOmMoImxvY2siLDYwMDIxKSxtaXJyb3JQcml2YXRlOmMoIm1pcnJvci1wcml2YXRlIiw2MDAyMSksY2xvc2U6YygiY2xvc2UiLDYwMDIyKSxyZW1vdmVDbG9zZTpjKCJyZW1vdmUtY2xvc2UiLDYwMDIyKSx4OmMoIngiLDYwMDIyKSxyZXBvU3luYzpjKCJyZXBvLXN5bmMiLDYwMDIzKSxzeW5jOmMoInN5bmMiLDYwMDIzKSxjbG9uZTpjKCJjbG9uZSIsNjAwMjQpLGRlc2t0b3BEb3dubG9hZDpjKCJkZXNrdG9wLWRvd25sb2FkIiw2MDAyNCksYmVha2VyOmMoImJlYWtlciIsNjAwMjUpLG1pY3Jvc2NvcGU6YygibWljcm9zY29wZSIsNjAwMjUpLHZtOmMoInZtIiw2MDAyNiksZGV2aWNlRGVza3RvcDpjKCJkZXZpY2UtZGVza3RvcCIsNjAwMjYpLGZpbGU6YygiZmlsZSIsNjAwMjcpLGZpbGVUZXh0OmMoImZpbGUtdGV4dCIsNjAwMjcpLG1vcmU6YygibW9yZSIsNjAwMjgpLGVsbGlwc2lzOmMoImVsbGlwc2lzIiw2MDAyOCksa2ViYWJIb3Jpem9udGFsOmMoImtlYmFiLWhvcml6b250YWwiLDYwMDI4KSxtYWlsUmVwbHk6YygibWFpbC1yZXBseSIsNjAwMjkpLHJlcGx5OmMoInJlcGx5Iiw2MDAyOSksb3JnYW5pemF0aW9uOmMoIm9yZ2FuaXphdGlvbiIsNjAwMzApLG9yZ2FuaXphdGlvbkZpbGxlZDpjKCJvcmdhbml6YXRpb24tZmlsbGVkIiw2MDAzMCksb3JnYW5pemF0aW9uT3V0bGluZTpjKCJvcmdhbml6YXRpb24tb3V0bGluZSIsNjAwMzApLG5ld0ZpbGU6YygibmV3LWZpbGUiLDYwMDMxKSxmaWxlQWRkOmMoImZpbGUtYWRkIiw2MDAzMSksbmV3Rm9sZGVyOmMoIm5ldy1mb2xkZXIiLDYwMDMyKSxmaWxlRGlyZWN0b3J5Q3JlYXRlOmMoImZpbGUtZGlyZWN0b3J5LWNyZWF0ZSIsNjAwMzIpLHRyYXNoOmMoInRyYXNoIiw2MDAzMyksdHJhc2hjYW46YygidHJhc2hjYW4iLDYwMDMzKSxoaXN0b3J5OmMoImhpc3RvcnkiLDYwMDM0KSxjbG9jazpjKCJjbG9jayIsNjAwMzQpLGZvbGRlcjpjKCJmb2xkZXIiLDYwMDM1KSxmaWxlRGlyZWN0b3J5OmMoImZpbGUtZGlyZWN0b3J5Iiw2MDAzNSksc3ltYm9sRm9sZGVyOmMoInN5bWJvbC1mb2xkZXIiLDYwMDM1KSxsb2dvR2l0aHViOmMoImxvZ28tZ2l0aHViIiw2MDAzNiksbWFya0dpdGh1YjpjKCJtYXJrLWdpdGh1YiIsNjAwMzYpLGdpdGh1YjpjKCJnaXRodWIiLDYwMDM2KSx0ZXJtaW5hbDpjKCJ0ZXJtaW5hbCIsNjAwMzcpLGNvbnNvbGU6YygiY29uc29sZSIsNjAwMzcpLHJlcGw6YygicmVwbCIsNjAwMzcpLHphcDpjKCJ6YXAiLDYwMDM4KSxzeW1ib2xFdmVudDpjKCJzeW1ib2wtZXZlbnQiLDYwMDM4KSxlcnJvcjpjKCJlcnJvciIsNjAwMzkpLHN0b3A6Yygic3RvcCIsNjAwMzkpLHZhcmlhYmxlOmMoInZhcmlhYmxlIiw2MDA0MCksc3ltYm9sVmFyaWFibGU6Yygic3ltYm9sLXZhcmlhYmxlIiw2MDA0MCksYXJyYXk6YygiYXJyYXkiLDYwMDQyKSxzeW1ib2xBcnJheTpjKCJzeW1ib2wtYXJyYXkiLDYwMDQyKSxzeW1ib2xNb2R1bGU6Yygic3ltYm9sLW1vZHVsZSIsNjAwNDMpLHN5bWJvbFBhY2thZ2U6Yygic3ltYm9sLXBhY2thZ2UiLDYwMDQzKSxzeW1ib2xOYW1lc3BhY2U6Yygic3ltYm9sLW5hbWVzcGFjZSIsNjAwNDMpLHN5bWJvbE9iamVjdDpjKCJzeW1ib2wtb2JqZWN0Iiw2MDA0Myksc3ltYm9sTWV0aG9kOmMoInN5bWJvbC1tZXRob2QiLDYwMDQ0KSxzeW1ib2xGdW5jdGlvbjpjKCJzeW1ib2wtZnVuY3Rpb24iLDYwMDQ0KSxzeW1ib2xDb25zdHJ1Y3RvcjpjKCJzeW1ib2wtY29uc3RydWN0b3IiLDYwMDQ0KSxzeW1ib2xCb29sZWFuOmMoInN5bWJvbC1ib29sZWFuIiw2MDA0Nyksc3ltYm9sTnVsbDpjKCJzeW1ib2wtbnVsbCIsNjAwNDcpLHN5bWJvbE51bWVyaWM6Yygic3ltYm9sLW51bWVyaWMiLDYwMDQ4KSxzeW1ib2xOdW1iZXI6Yygic3ltYm9sLW51bWJlciIsNjAwNDgpLHN5bWJvbFN0cnVjdHVyZTpjKCJzeW1ib2wtc3RydWN0dXJlIiw2MDA0OSksc3ltYm9sU3RydWN0OmMoInN5bWJvbC1zdHJ1Y3QiLDYwMDQ5KSxzeW1ib2xQYXJhbWV0ZXI6Yygic3ltYm9sLXBhcmFtZXRlciIsNjAwNTApLHN5bWJvbFR5cGVQYXJhbWV0ZXI6Yygic3ltYm9sLXR5cGUtcGFyYW1ldGVyIiw2MDA1MCksc3ltYm9sS2V5OmMoInN5bWJvbC1rZXkiLDYwMDUxKSxzeW1ib2xUZXh0OmMoInN5bWJvbC10ZXh0Iiw2MDA1MSksc3ltYm9sUmVmZXJlbmNlOmMoInN5bWJvbC1yZWZlcmVuY2UiLDYwMDUyKSxnb1RvRmlsZTpjKCJnby10by1maWxlIiw2MDA1Miksc3ltYm9sRW51bTpjKCJzeW1ib2wtZW51bSIsNjAwNTMpLHN5bWJvbFZhbHVlOmMoInN5bWJvbC12YWx1ZSIsNjAwNTMpLHN5bWJvbFJ1bGVyOmMoInN5bWJvbC1ydWxlciIsNjAwNTQpLHN5bWJvbFVuaXQ6Yygic3ltYm9sLXVuaXQiLDYwMDU0KSxhY3RpdmF0ZUJyZWFrcG9pbnRzOmMoImFjdGl2YXRlLWJyZWFrcG9pbnRzIiw2MDA1NSksYXJjaGl2ZTpjKCJhcmNoaXZlIiw2MDA1NiksYXJyb3dCb3RoOmMoImFycm93LWJvdGgiLDYwMDU3KSxhcnJvd0Rvd246YygiYXJyb3ctZG93biIsNjAwNTgpLGFycm93TGVmdDpjKCJhcnJvdy1sZWZ0Iiw2MDA1OSksYXJyb3dSaWdodDpjKCJhcnJvdy1yaWdodCIsNjAwNjApLGFycm93U21hbGxEb3duOmMoImFycm93LXNtYWxsLWRvd24iLDYwMDYxKSxhcnJvd1NtYWxsTGVmdDpjKCJhcnJvdy1zbWFsbC1sZWZ0Iiw2MDA2MiksYXJyb3dTbWFsbFJpZ2h0OmMoImFycm93LXNtYWxsLXJpZ2h0Iiw2MDA2MyksYXJyb3dTbWFsbFVwOmMoImFycm93LXNtYWxsLXVwIiw2MDA2NCksYXJyb3dVcDpjKCJhcnJvdy11cCIsNjAwNjUpLGJlbGw6YygiYmVsbCIsNjAwNjYpLGJvbGQ6YygiYm9sZCIsNjAwNjcpLGJvb2s6YygiYm9vayIsNjAwNjgpLGJvb2ttYXJrOmMoImJvb2ttYXJrIiw2MDA2OSksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWxVbnZlcmlmaWVkOmMoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtdW52ZXJpZmllZCIsNjAwNzApLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsOmMoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbERpc2FibGVkOmMoImRlYnVnLWJyZWFrcG9pbnQtY29uZGl0aW9uYWwtZGlzYWJsZWQiLDYwMDcxKSxkZWJ1Z0JyZWFrcG9pbnREYXRhVW52ZXJpZmllZDpjKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEtdW52ZXJpZmllZCIsNjAwNzIpLGRlYnVnQnJlYWtwb2ludERhdGE6YygiZGVidWctYnJlYWtwb2ludC1kYXRhIiw2MDA3MyksZGVidWdCcmVha3BvaW50RGF0YURpc2FibGVkOmMoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS1kaXNhYmxlZCIsNjAwNzMpLGRlYnVnQnJlYWtwb2ludExvZ1VudmVyaWZpZWQ6YygiZGVidWctYnJlYWtwb2ludC1sb2ctdW52ZXJpZmllZCIsNjAwNzQpLGRlYnVnQnJlYWtwb2ludExvZzpjKCJkZWJ1Zy1icmVha3BvaW50LWxvZyIsNjAwNzUpLGRlYnVnQnJlYWtwb2ludExvZ0Rpc2FibGVkOmMoImRlYnVnLWJyZWFrcG9pbnQtbG9nLWRpc2FibGVkIiw2MDA3NSksYnJpZWZjYXNlOmMoImJyaWVmY2FzZSIsNjAwNzYpLGJyb2FkY2FzdDpjKCJicm9hZGNhc3QiLDYwMDc3KSxicm93c2VyOmMoImJyb3dzZXIiLDYwMDc4KSxidWc6YygiYnVnIiw2MDA3OSksY2FsZW5kYXI6YygiY2FsZW5kYXIiLDYwMDgwKSxjYXNlU2Vuc2l0aXZlOmMoImNhc2Utc2Vuc2l0aXZlIiw2MDA4MSksY2hlY2s6YygiY2hlY2siLDYwMDgyKSxjaGVja2xpc3Q6YygiY2hlY2tsaXN0Iiw2MDA4MyksY2hldnJvbkRvd246YygiY2hldnJvbi1kb3duIiw2MDA4NCksY2hldnJvbkxlZnQ6YygiY2hldnJvbi1sZWZ0Iiw2MDA4NSksY2hldnJvblJpZ2h0OmMoImNoZXZyb24tcmlnaHQiLDYwMDg2KSxjaGV2cm9uVXA6YygiY2hldnJvbi11cCIsNjAwODcpLGNocm9tZUNsb3NlOmMoImNocm9tZS1jbG9zZSIsNjAwODgpLGNocm9tZU1heGltaXplOmMoImNocm9tZS1tYXhpbWl6ZSIsNjAwODkpLGNocm9tZU1pbmltaXplOmMoImNocm9tZS1taW5pbWl6ZSIsNjAwOTApLGNocm9tZVJlc3RvcmU6YygiY2hyb21lLXJlc3RvcmUiLDYwMDkxKSxjaXJjbGVPdXRsaW5lOmMoImNpcmNsZS1vdXRsaW5lIiw2MDA5MiksY2lyY2xlOmMoImNpcmNsZSIsNjAwOTIpLGRlYnVnQnJlYWtwb2ludFVudmVyaWZpZWQ6YygiZGVidWctYnJlYWtwb2ludC11bnZlcmlmaWVkIiw2MDA5MiksdGVybWluYWxEZWNvcmF0aW9uSW5jb21wbGV0ZTpjKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWluY29tcGxldGUiLDYwMDkyKSxjaXJjbGVTbGFzaDpjKCJjaXJjbGUtc2xhc2giLDYwMDkzKSxjaXJjdWl0Qm9hcmQ6YygiY2lyY3VpdC1ib2FyZCIsNjAwOTQpLGNsZWFyQWxsOmMoImNsZWFyLWFsbCIsNjAwOTUpLGNsaXBweTpjKCJjbGlwcHkiLDYwMDk2KSxjbG9zZUFsbDpjKCJjbG9zZS1hbGwiLDYwMDk3KSxjbG91ZERvd25sb2FkOmMoImNsb3VkLWRvd25sb2FkIiw2MDA5OCksY2xvdWRVcGxvYWQ6YygiY2xvdWQtdXBsb2FkIiw2MDA5OSksY29kZTpjKCJjb2RlIiw2MDEwMCksY29sbGFwc2VBbGw6YygiY29sbGFwc2UtYWxsIiw2MDEwMSksY29sb3JNb2RlOmMoImNvbG9yLW1vZGUiLDYwMTAyKSxjb21tZW50RGlzY3Vzc2lvbjpjKCJjb21tZW50LWRpc2N1c3Npb24iLDYwMTAzKSxjcmVkaXRDYXJkOmMoImNyZWRpdC1jYXJkIiw2MDEwNSksZGFzaDpjKCJkYXNoIiw2MDEwOCksZGFzaGJvYXJkOmMoImRhc2hib2FyZCIsNjAxMDkpLGRhdGFiYXNlOmMoImRhdGFiYXNlIiw2MDExMCksZGVidWdDb250aW51ZTpjKCJkZWJ1Zy1jb250aW51ZSIsNjAxMTEpLGRlYnVnRGlzY29ubmVjdDpjKCJkZWJ1Zy1kaXNjb25uZWN0Iiw2MDExMiksZGVidWdQYXVzZTpjKCJkZWJ1Zy1wYXVzZSIsNjAxMTMpLGRlYnVnUmVzdGFydDpjKCJkZWJ1Zy1yZXN0YXJ0Iiw2MDExNCksZGVidWdTdGFydDpjKCJkZWJ1Zy1zdGFydCIsNjAxMTUpLGRlYnVnU3RlcEludG86YygiZGVidWctc3RlcC1pbnRvIiw2MDExNiksZGVidWdTdGVwT3V0OmMoImRlYnVnLXN0ZXAtb3V0Iiw2MDExNyksZGVidWdTdGVwT3ZlcjpjKCJkZWJ1Zy1zdGVwLW92ZXIiLDYwMTE4KSxkZWJ1Z1N0b3A6YygiZGVidWctc3RvcCIsNjAxMTkpLGRlYnVnOmMoImRlYnVnIiw2MDEyMCksZGV2aWNlQ2FtZXJhVmlkZW86YygiZGV2aWNlLWNhbWVyYS12aWRlbyIsNjAxMjEpLGRldmljZUNhbWVyYTpjKCJkZXZpY2UtY2FtZXJhIiw2MDEyMiksZGV2aWNlTW9iaWxlOmMoImRldmljZS1tb2JpbGUiLDYwMTIzKSxkaWZmQWRkZWQ6YygiZGlmZi1hZGRlZCIsNjAxMjQpLGRpZmZJZ25vcmVkOmMoImRpZmYtaWdub3JlZCIsNjAxMjUpLGRpZmZNb2RpZmllZDpjKCJkaWZmLW1vZGlmaWVkIiw2MDEyNiksZGlmZlJlbW92ZWQ6YygiZGlmZi1yZW1vdmVkIiw2MDEyNyksZGlmZlJlbmFtZWQ6YygiZGlmZi1yZW5hbWVkIiw2MDEyOCksZGlmZjpjKCJkaWZmIiw2MDEyOSksZGlmZlNpZGVieXNpZGU6YygiZGlmZi1zaWRlYnlzaWRlIiw2MDEyOSksZGlzY2FyZDpjKCJkaXNjYXJkIiw2MDEzMCksZWRpdG9yTGF5b3V0OmMoImVkaXRvci1sYXlvdXQiLDYwMTMxKSxlbXB0eVdpbmRvdzpjKCJlbXB0eS13aW5kb3ciLDYwMTMyKSxleGNsdWRlOmMoImV4Y2x1ZGUiLDYwMTMzKSxleHRlbnNpb25zOmMoImV4dGVuc2lvbnMiLDYwMTM0KSxleWVDbG9zZWQ6YygiZXllLWNsb3NlZCIsNjAxMzUpLGZpbGVCaW5hcnk6YygiZmlsZS1iaW5hcnkiLDYwMTM2KSxmaWxlQ29kZTpjKCJmaWxlLWNvZGUiLDYwMTM3KSxmaWxlTWVkaWE6YygiZmlsZS1tZWRpYSIsNjAxMzgpLGZpbGVQZGY6YygiZmlsZS1wZGYiLDYwMTM5KSxmaWxlU3VibW9kdWxlOmMoImZpbGUtc3VibW9kdWxlIiw2MDE0MCksZmlsZVN5bWxpbmtEaXJlY3Rvcnk6YygiZmlsZS1zeW1saW5rLWRpcmVjdG9yeSIsNjAxNDEpLGZpbGVTeW1saW5rRmlsZTpjKCJmaWxlLXN5bWxpbmstZmlsZSIsNjAxNDIpLGZpbGVaaXA6YygiZmlsZS16aXAiLDYwMTQzKSxmaWxlczpjKCJmaWxlcyIsNjAxNDQpLGZpbHRlcjpjKCJmaWx0ZXIiLDYwMTQ1KSxmbGFtZTpjKCJmbGFtZSIsNjAxNDYpLGZvbGREb3duOmMoImZvbGQtZG93biIsNjAxNDcpLGZvbGRVcDpjKCJmb2xkLXVwIiw2MDE0OCksZm9sZDpjKCJmb2xkIiw2MDE0OSksZm9sZGVyQWN0aXZlOmMoImZvbGRlci1hY3RpdmUiLDYwMTUwKSxmb2xkZXJPcGVuZWQ6YygiZm9sZGVyLW9wZW5lZCIsNjAxNTEpLGdlYXI6YygiZ2VhciIsNjAxNTIpLGdpZnQ6YygiZ2lmdCIsNjAxNTMpLGdpc3RTZWNyZXQ6YygiZ2lzdC1zZWNyZXQiLDYwMTU0KSxnaXN0OmMoImdpc3QiLDYwMTU1KSxnaXRDb21taXQ6YygiZ2l0LWNvbW1pdCIsNjAxNTYpLGdpdENvbXBhcmU6YygiZ2l0LWNvbXBhcmUiLDYwMTU3KSxjb21wYXJlQ2hhbmdlczpjKCJjb21wYXJlLWNoYW5nZXMiLDYwMTU3KSxnaXRNZXJnZTpjKCJnaXQtbWVyZ2UiLDYwMTU4KSxnaXRodWJBY3Rpb246YygiZ2l0aHViLWFjdGlvbiIsNjAxNTkpLGdpdGh1YkFsdDpjKCJnaXRodWItYWx0Iiw2MDE2MCksZ2xvYmU6YygiZ2xvYmUiLDYwMTYxKSxncmFiYmVyOmMoImdyYWJiZXIiLDYwMTYyKSxncmFwaDpjKCJncmFwaCIsNjAxNjMpLGdyaXBwZXI6YygiZ3JpcHBlciIsNjAxNjQpLGhlYXJ0OmMoImhlYXJ0Iiw2MDE2NSksaG9tZTpjKCJob21lIiw2MDE2NiksaG9yaXpvbnRhbFJ1bGU6YygiaG9yaXpvbnRhbC1ydWxlIiw2MDE2NyksaHVib3Q6YygiaHVib3QiLDYwMTY4KSxpbmJveDpjKCJpbmJveCIsNjAxNjkpLGlzc3VlUmVvcGVuZWQ6YygiaXNzdWUtcmVvcGVuZWQiLDYwMTcxKSxpc3N1ZXM6YygiaXNzdWVzIiw2MDE3MiksaXRhbGljOmMoIml0YWxpYyIsNjAxNzMpLGplcnNleTpjKCJqZXJzZXkiLDYwMTc0KSxqc29uOmMoImpzb24iLDYwMTc1KSxrZWJhYlZlcnRpY2FsOmMoImtlYmFiLXZlcnRpY2FsIiw2MDE3Niksa2V5OmMoImtleSIsNjAxNzcpLGxhdzpjKCJsYXciLDYwMTc4KSxsaWdodGJ1bGJBdXRvZml4OmMoImxpZ2h0YnVsYi1hdXRvZml4Iiw2MDE3OSksbGlua0V4dGVybmFsOmMoImxpbmstZXh0ZXJuYWwiLDYwMTgwKSxsaW5rOmMoImxpbmsiLDYwMTgxKSxsaXN0T3JkZXJlZDpjKCJsaXN0LW9yZGVyZWQiLDYwMTgyKSxsaXN0VW5vcmRlcmVkOmMoImxpc3QtdW5vcmRlcmVkIiw2MDE4MyksbGl2ZVNoYXJlOmMoImxpdmUtc2hhcmUiLDYwMTg0KSxsb2FkaW5nOmMoImxvYWRpbmciLDYwMTg1KSxsb2NhdGlvbjpjKCJsb2NhdGlvbiIsNjAxODYpLG1haWxSZWFkOmMoIm1haWwtcmVhZCIsNjAxODcpLG1haWw6YygibWFpbCIsNjAxODgpLG1hcmtkb3duOmMoIm1hcmtkb3duIiw2MDE4OSksbWVnYXBob25lOmMoIm1lZ2FwaG9uZSIsNjAxOTApLG1lbnRpb246YygibWVudGlvbiIsNjAxOTEpLG1pbGVzdG9uZTpjKCJtaWxlc3RvbmUiLDYwMTkyKSxnaXRQdWxsUmVxdWVzdE1pbGVzdG9uZTpjKCJnaXQtcHVsbC1yZXF1ZXN0LW1pbGVzdG9uZSIsNjAxOTIpLG1vcnRhckJvYXJkOmMoIm1vcnRhci1ib2FyZCIsNjAxOTMpLG1vdmU6YygibW92ZSIsNjAxOTQpLG11bHRpcGxlV2luZG93czpjKCJtdWx0aXBsZS13aW5kb3dzIiw2MDE5NSksbXV0ZTpjKCJtdXRlIiw2MDE5Niksbm9OZXdsaW5lOmMoIm5vLW5ld2xpbmUiLDYwMTk3KSxub3RlOmMoIm5vdGUiLDYwMTk4KSxvY3RvZmFjZTpjKCJvY3RvZmFjZSIsNjAxOTkpLG9wZW5QcmV2aWV3OmMoIm9wZW4tcHJldmlldyIsNjAyMDApLHBhY2thZ2U6YygicGFja2FnZSIsNjAyMDEpLHBhaW50Y2FuOmMoInBhaW50Y2FuIiw2MDIwMikscGluOmMoInBpbiIsNjAyMDMpLHBsYXk6YygicGxheSIsNjAyMDQpLHJ1bjpjKCJydW4iLDYwMjA0KSxwbHVnOmMoInBsdWciLDYwMjA1KSxwcmVzZXJ2ZUNhc2U6YygicHJlc2VydmUtY2FzZSIsNjAyMDYpLHByZXZpZXc6YygicHJldmlldyIsNjAyMDcpLHByb2plY3Q6YygicHJvamVjdCIsNjAyMDgpLHB1bHNlOmMoInB1bHNlIiw2MDIwOSkscXVlc3Rpb246YygicXVlc3Rpb24iLDYwMjEwKSxxdW90ZTpjKCJxdW90ZSIsNjAyMTEpLHJhZGlvVG93ZXI6YygicmFkaW8tdG93ZXIiLDYwMjEyKSxyZWFjdGlvbnM6YygicmVhY3Rpb25zIiw2MDIxMykscmVmZXJlbmNlczpjKCJyZWZlcmVuY2VzIiw2MDIxNCkscmVmcmVzaDpjKCJyZWZyZXNoIiw2MDIxNSkscmVnZXg6YygicmVnZXgiLDYwMjE2KSxyZW1vdGVFeHBsb3JlcjpjKCJyZW1vdGUtZXhwbG9yZXIiLDYwMjE3KSxyZW1vdGU6YygicmVtb3RlIiw2MDIxOCkscmVtb3ZlOmMoInJlbW92ZSIsNjAyMTkpLHJlcGxhY2VBbGw6YygicmVwbGFjZS1hbGwiLDYwMjIwKSxyZXBsYWNlOmMoInJlcGxhY2UiLDYwMjIxKSxyZXBvQ2xvbmU6YygicmVwby1jbG9uZSIsNjAyMjIpLHJlcG9Gb3JjZVB1c2g6YygicmVwby1mb3JjZS1wdXNoIiw2MDIyMykscmVwb1B1bGw6YygicmVwby1wdWxsIiw2MDIyNCkscmVwb1B1c2g6YygicmVwby1wdXNoIiw2MDIyNSkscmVwb3J0OmMoInJlcG9ydCIsNjAyMjYpLHJlcXVlc3RDaGFuZ2VzOmMoInJlcXVlc3QtY2hhbmdlcyIsNjAyMjcpLHJvY2tldDpjKCJyb2NrZXQiLDYwMjI4KSxyb290Rm9sZGVyT3BlbmVkOmMoInJvb3QtZm9sZGVyLW9wZW5lZCIsNjAyMjkpLHJvb3RGb2xkZXI6Yygicm9vdC1mb2xkZXIiLDYwMjMwKSxyc3M6YygicnNzIiw2MDIzMSkscnVieTpjKCJydWJ5Iiw2MDIzMiksc2F2ZUFsbDpjKCJzYXZlLWFsbCIsNjAyMzMpLHNhdmVBczpjKCJzYXZlLWFzIiw2MDIzNCksc2F2ZTpjKCJzYXZlIiw2MDIzNSksc2NyZWVuRnVsbDpjKCJzY3JlZW4tZnVsbCIsNjAyMzYpLHNjcmVlbk5vcm1hbDpjKCJzY3JlZW4tbm9ybWFsIiw2MDIzNyksc2VhcmNoU3RvcDpjKCJzZWFyY2gtc3RvcCIsNjAyMzgpLHNlcnZlcjpjKCJzZXJ2ZXIiLDYwMjQwKSxzZXR0aW5nc0dlYXI6Yygic2V0dGluZ3MtZ2VhciIsNjAyNDEpLHNldHRpbmdzOmMoInNldHRpbmdzIiw2MDI0Miksc2hpZWxkOmMoInNoaWVsZCIsNjAyNDMpLHNtaWxleTpjKCJzbWlsZXkiLDYwMjQ0KSxzb3J0UHJlY2VkZW5jZTpjKCJzb3J0LXByZWNlZGVuY2UiLDYwMjQ1KSxzcGxpdEhvcml6b250YWw6Yygic3BsaXQtaG9yaXpvbnRhbCIsNjAyNDYpLHNwbGl0VmVydGljYWw6Yygic3BsaXQtdmVydGljYWwiLDYwMjQ3KSxzcXVpcnJlbDpjKCJzcXVpcnJlbCIsNjAyNDgpLHN0YXJGdWxsOmMoInN0YXItZnVsbCIsNjAyNDkpLHN0YXJIYWxmOmMoInN0YXItaGFsZiIsNjAyNTApLHN5bWJvbENsYXNzOmMoInN5bWJvbC1jbGFzcyIsNjAyNTEpLHN5bWJvbENvbG9yOmMoInN5bWJvbC1jb2xvciIsNjAyNTIpLHN5bWJvbENvbnN0YW50OmMoInN5bWJvbC1jb25zdGFudCIsNjAyNTMpLHN5bWJvbEVudW1NZW1iZXI6Yygic3ltYm9sLWVudW0tbWVtYmVyIiw2MDI1NCksc3ltYm9sRmllbGQ6Yygic3ltYm9sLWZpZWxkIiw2MDI1NSksc3ltYm9sRmlsZTpjKCJzeW1ib2wtZmlsZSIsNjAyNTYpLHN5bWJvbEludGVyZmFjZTpjKCJzeW1ib2wtaW50ZXJmYWNlIiw2MDI1Nyksc3ltYm9sS2V5d29yZDpjKCJzeW1ib2wta2V5d29yZCIsNjAyNTgpLHN5bWJvbE1pc2M6Yygic3ltYm9sLW1pc2MiLDYwMjU5KSxzeW1ib2xPcGVyYXRvcjpjKCJzeW1ib2wtb3BlcmF0b3IiLDYwMjYwKSxzeW1ib2xQcm9wZXJ0eTpjKCJzeW1ib2wtcHJvcGVydHkiLDYwMjYxKSx3cmVuY2g6Yygid3JlbmNoIiw2MDI2MSksd3JlbmNoU3ViYWN0aW9uOmMoIndyZW5jaC1zdWJhY3Rpb24iLDYwMjYxKSxzeW1ib2xTbmlwcGV0OmMoInN5bWJvbC1zbmlwcGV0Iiw2MDI2MiksdGFza2xpc3Q6YygidGFza2xpc3QiLDYwMjYzKSx0ZWxlc2NvcGU6YygidGVsZXNjb3BlIiw2MDI2NCksdGV4dFNpemU6YygidGV4dC1zaXplIiw2MDI2NSksdGhyZWVCYXJzOmMoInRocmVlLWJhcnMiLDYwMjY2KSx0aHVtYnNkb3duOmMoInRodW1ic2Rvd24iLDYwMjY3KSx0aHVtYnN1cDpjKCJ0aHVtYnN1cCIsNjAyNjgpLHRvb2xzOmMoInRvb2xzIiw2MDI2OSksdHJpYW5nbGVEb3duOmMoInRyaWFuZ2xlLWRvd24iLDYwMjcwKSx0cmlhbmdsZUxlZnQ6YygidHJpYW5nbGUtbGVmdCIsNjAyNzEpLHRyaWFuZ2xlUmlnaHQ6YygidHJpYW5nbGUtcmlnaHQiLDYwMjcyKSx0cmlhbmdsZVVwOmMoInRyaWFuZ2xlLXVwIiw2MDI3MyksdHdpdHRlcjpjKCJ0d2l0dGVyIiw2MDI3NCksdW5mb2xkOmMoInVuZm9sZCIsNjAyNzUpLHVubG9jazpjKCJ1bmxvY2siLDYwMjc2KSx1bm11dGU6YygidW5tdXRlIiw2MDI3NyksdW52ZXJpZmllZDpjKCJ1bnZlcmlmaWVkIiw2MDI3OCksdmVyaWZpZWQ6YygidmVyaWZpZWQiLDYwMjc5KSx2ZXJzaW9uczpjKCJ2ZXJzaW9ucyIsNjAyODApLHZtQWN0aXZlOmMoInZtLWFjdGl2ZSIsNjAyODEpLHZtT3V0bGluZTpjKCJ2bS1vdXRsaW5lIiw2MDI4Miksdm1SdW5uaW5nOmMoInZtLXJ1bm5pbmciLDYwMjgzKSx3YXRjaDpjKCJ3YXRjaCIsNjAyODQpLHdoaXRlc3BhY2U6Yygid2hpdGVzcGFjZSIsNjAyODUpLHdob2xlV29yZDpjKCJ3aG9sZS13b3JkIiw2MDI4Niksd2luZG93OmMoIndpbmRvdyIsNjAyODcpLHdvcmRXcmFwOmMoIndvcmQtd3JhcCIsNjAyODgpLHpvb21JbjpjKCJ6b29tLWluIiw2MDI4OSksem9vbU91dDpjKCJ6b29tLW91dCIsNjAyOTApLGxpc3RGaWx0ZXI6YygibGlzdC1maWx0ZXIiLDYwMjkxKSxsaXN0RmxhdDpjKCJsaXN0LWZsYXQiLDYwMjkyKSxsaXN0U2VsZWN0aW9uOmMoImxpc3Qtc2VsZWN0aW9uIiw2MDI5Myksc2VsZWN0aW9uOmMoInNlbGVjdGlvbiIsNjAyOTMpLGxpc3RUcmVlOmMoImxpc3QtdHJlZSIsNjAyOTQpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uVW52ZXJpZmllZDpjKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLXVudmVyaWZpZWQiLDYwMjk1KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbjpjKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uIiw2MDI5NiksZGVidWdCcmVha3BvaW50RnVuY3Rpb25EaXNhYmxlZDpjKCJkZWJ1Zy1icmVha3BvaW50LWZ1bmN0aW9uLWRpc2FibGVkIiw2MDI5NiksZGVidWdTdGFja2ZyYW1lQWN0aXZlOmMoImRlYnVnLXN0YWNrZnJhbWUtYWN0aXZlIiw2MDI5NyksY2lyY2xlU21hbGxGaWxsZWQ6YygiY2lyY2xlLXNtYWxsLWZpbGxlZCIsNjAyOTgpLGRlYnVnU3RhY2tmcmFtZURvdDpjKCJkZWJ1Zy1zdGFja2ZyYW1lLWRvdCIsNjAyOTgpLHRlcm1pbmFsRGVjb3JhdGlvbk1hcms6YygidGVybWluYWwtZGVjb3JhdGlvbi1tYXJrIiw2MDI5OCksZGVidWdTdGFja2ZyYW1lOmMoImRlYnVnLXN0YWNrZnJhbWUiLDYwMjk5KSxkZWJ1Z1N0YWNrZnJhbWVGb2N1c2VkOmMoImRlYnVnLXN0YWNrZnJhbWUtZm9jdXNlZCIsNjAyOTkpLGRlYnVnQnJlYWtwb2ludFVuc3VwcG9ydGVkOmMoImRlYnVnLWJyZWFrcG9pbnQtdW5zdXBwb3J0ZWQiLDYwMzAwKSxzeW1ib2xTdHJpbmc6Yygic3ltYm9sLXN0cmluZyIsNjAzMDEpLGRlYnVnUmV2ZXJzZUNvbnRpbnVlOmMoImRlYnVnLXJldmVyc2UtY29udGludWUiLDYwMzAyKSxkZWJ1Z1N0ZXBCYWNrOmMoImRlYnVnLXN0ZXAtYmFjayIsNjAzMDMpLGRlYnVnUmVzdGFydEZyYW1lOmMoImRlYnVnLXJlc3RhcnQtZnJhbWUiLDYwMzA0KSxkZWJ1Z0FsdDpjKCJkZWJ1Zy1hbHQiLDYwMzA1KSxjYWxsSW5jb21pbmc6YygiY2FsbC1pbmNvbWluZyIsNjAzMDYpLGNhbGxPdXRnb2luZzpjKCJjYWxsLW91dGdvaW5nIiw2MDMwNyksbWVudTpjKCJtZW51Iiw2MDMwOCksZXhwYW5kQWxsOmMoImV4cGFuZC1hbGwiLDYwMzA5KSxmZWVkYmFjazpjKCJmZWVkYmFjayIsNjAzMTApLGdpdFB1bGxSZXF1ZXN0UmV2aWV3ZXI6YygiZ2l0LXB1bGwtcmVxdWVzdC1yZXZpZXdlciIsNjAzMTApLGdyb3VwQnlSZWZUeXBlOmMoImdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMSksdW5ncm91cEJ5UmVmVHlwZTpjKCJ1bmdyb3VwLWJ5LXJlZi10eXBlIiw2MDMxMiksYWNjb3VudDpjKCJhY2NvdW50Iiw2MDMxMyksZ2l0UHVsbFJlcXVlc3RBc3NpZ25lZTpjKCJnaXQtcHVsbC1yZXF1ZXN0LWFzc2lnbmVlIiw2MDMxMyksYmVsbERvdDpjKCJiZWxsLWRvdCIsNjAzMTQpLGRlYnVnQ29uc29sZTpjKCJkZWJ1Zy1jb25zb2xlIiw2MDMxNSksbGlicmFyeTpjKCJsaWJyYXJ5Iiw2MDMxNiksb3V0cHV0OmMoIm91dHB1dCIsNjAzMTcpLHJ1bkFsbDpjKCJydW4tYWxsIiw2MDMxOCksc3luY0lnbm9yZWQ6Yygic3luYy1pZ25vcmVkIiw2MDMxOSkscGlubmVkOmMoInBpbm5lZCIsNjAzMjApLGdpdGh1YkludmVydGVkOmMoImdpdGh1Yi1pbnZlcnRlZCIsNjAzMjEpLHNlcnZlclByb2Nlc3M6Yygic2VydmVyLXByb2Nlc3MiLDYwMzIyKSxzZXJ2ZXJFbnZpcm9ubWVudDpjKCJzZXJ2ZXItZW52aXJvbm1lbnQiLDYwMzIzKSxwYXNzOmMoInBhc3MiLDYwMzI0KSxpc3N1ZUNsb3NlZDpjKCJpc3N1ZS1jbG9zZWQiLDYwMzI0KSxzdG9wQ2lyY2xlOmMoInN0b3AtY2lyY2xlIiw2MDMyNSkscGxheUNpcmNsZTpjKCJwbGF5LWNpcmNsZSIsNjAzMjYpLHJlY29yZDpjKCJyZWNvcmQiLDYwMzI3KSxkZWJ1Z0FsdFNtYWxsOmMoImRlYnVnLWFsdC1zbWFsbCIsNjAzMjgpLHZtQ29ubmVjdDpjKCJ2bS1jb25uZWN0Iiw2MDMyOSksY2xvdWQ6YygiY2xvdWQiLDYwMzMwKSxtZXJnZTpjKCJtZXJnZSIsNjAzMzEpLGV4cG9ydDpjKCJleHBvcnQiLDYwMzMyKSxncmFwaExlZnQ6YygiZ3JhcGgtbGVmdCIsNjAzMzMpLG1hZ25ldDpjKCJtYWduZXQiLDYwMzM0KSxub3RlYm9vazpjKCJub3RlYm9vayIsNjAzMzUpLHJlZG86YygicmVkbyIsNjAzMzYpLGNoZWNrQWxsOmMoImNoZWNrLWFsbCIsNjAzMzcpLHBpbm5lZERpcnR5OmMoInBpbm5lZC1kaXJ0eSIsNjAzMzgpLHBhc3NGaWxsZWQ6YygicGFzcy1maWxsZWQiLDYwMzM5KSxjaXJjbGVMYXJnZUZpbGxlZDpjKCJjaXJjbGUtbGFyZ2UtZmlsbGVkIiw2MDM0MCksY2lyY2xlTGFyZ2U6YygiY2lyY2xlLWxhcmdlIiw2MDM0MSksY2lyY2xlTGFyZ2VPdXRsaW5lOmMoImNpcmNsZS1sYXJnZS1vdXRsaW5lIiw2MDM0MSksY29tYmluZTpjKCJjb21iaW5lIiw2MDM0MiksZ2F0aGVyOmMoImdhdGhlciIsNjAzNDIpLHRhYmxlOmMoInRhYmxlIiw2MDM0MyksdmFyaWFibGVHcm91cDpjKCJ2YXJpYWJsZS1ncm91cCIsNjAzNDQpLHR5cGVIaWVyYXJjaHk6YygidHlwZS1oaWVyYXJjaHkiLDYwMzQ1KSx0eXBlSGllcmFyY2h5U3ViOmMoInR5cGUtaGllcmFyY2h5LXN1YiIsNjAzNDYpLHR5cGVIaWVyYXJjaHlTdXBlcjpjKCJ0eXBlLWhpZXJhcmNoeS1zdXBlciIsNjAzNDcpLGdpdFB1bGxSZXF1ZXN0Q3JlYXRlOmMoImdpdC1wdWxsLXJlcXVlc3QtY3JlYXRlIiw2MDM0OCkscnVuQWJvdmU6YygicnVuLWFib3ZlIiw2MDM0OSkscnVuQmVsb3c6YygicnVuLWJlbG93Iiw2MDM1MCksbm90ZWJvb2tUZW1wbGF0ZTpjKCJub3RlYm9vay10ZW1wbGF0ZSIsNjAzNTEpLGRlYnVnUmVydW46YygiZGVidWctcmVydW4iLDYwMzUyKSx3b3Jrc3BhY2VUcnVzdGVkOmMoIndvcmtzcGFjZS10cnVzdGVkIiw2MDM1Myksd29ya3NwYWNlVW50cnVzdGVkOmMoIndvcmtzcGFjZS11bnRydXN0ZWQiLDYwMzU0KSx3b3Jrc3BhY2VVbmtub3duOmMoIndvcmtzcGFjZS11bmtub3duIiw2MDM1NSksdGVybWluYWxDbWQ6YygidGVybWluYWwtY21kIiw2MDM1NiksdGVybWluYWxEZWJpYW46YygidGVybWluYWwtZGViaWFuIiw2MDM1NyksdGVybWluYWxMaW51eDpjKCJ0ZXJtaW5hbC1saW51eCIsNjAzNTgpLHRlcm1pbmFsUG93ZXJzaGVsbDpjKCJ0ZXJtaW5hbC1wb3dlcnNoZWxsIiw2MDM1OSksdGVybWluYWxUbXV4OmMoInRlcm1pbmFsLXRtdXgiLDYwMzYwKSx0ZXJtaW5hbFVidW50dTpjKCJ0ZXJtaW5hbC11YnVudHUiLDYwMzYxKSx0ZXJtaW5hbEJhc2g6YygidGVybWluYWwtYmFzaCIsNjAzNjIpLGFycm93U3dhcDpjKCJhcnJvdy1zd2FwIiw2MDM2MyksY29weTpjKCJjb3B5Iiw2MDM2NCkscGVyc29uQWRkOmMoInBlcnNvbi1hZGQiLDYwMzY1KSxmaWx0ZXJGaWxsZWQ6YygiZmlsdGVyLWZpbGxlZCIsNjAzNjYpLHdhbmQ6Yygid2FuZCIsNjAzNjcpLGRlYnVnTGluZUJ5TGluZTpjKCJkZWJ1Zy1saW5lLWJ5LWxpbmUiLDYwMzY4KSxpbnNwZWN0OmMoImluc3BlY3QiLDYwMzY5KSxsYXllcnM6YygibGF5ZXJzIiw2MDM3MCksbGF5ZXJzRG90OmMoImxheWVycy1kb3QiLDYwMzcxKSxsYXllcnNBY3RpdmU6YygibGF5ZXJzLWFjdGl2ZSIsNjAzNzIpLGNvbXBhc3M6YygiY29tcGFzcyIsNjAzNzMpLGNvbXBhc3NEb3Q6YygiY29tcGFzcy1kb3QiLDYwMzc0KSxjb21wYXNzQWN0aXZlOmMoImNvbXBhc3MtYWN0aXZlIiw2MDM3NSksYXp1cmU6YygiYXp1cmUiLDYwMzc2KSxpc3N1ZURyYWZ0OmMoImlzc3VlLWRyYWZ0Iiw2MDM3NyksZ2l0UHVsbFJlcXVlc3RDbG9zZWQ6YygiZ2l0LXB1bGwtcmVxdWVzdC1jbG9zZWQiLDYwMzc4KSxnaXRQdWxsUmVxdWVzdERyYWZ0OmMoImdpdC1wdWxsLXJlcXVlc3QtZHJhZnQiLDYwMzc5KSxkZWJ1Z0FsbDpjKCJkZWJ1Zy1hbGwiLDYwMzgwKSxkZWJ1Z0NvdmVyYWdlOmMoImRlYnVnLWNvdmVyYWdlIiw2MDM4MSkscnVuRXJyb3JzOmMoInJ1bi1lcnJvcnMiLDYwMzgyKSxmb2xkZXJMaWJyYXJ5OmMoImZvbGRlci1saWJyYXJ5Iiw2MDM4MyksZGVidWdDb250aW51ZVNtYWxsOmMoImRlYnVnLWNvbnRpbnVlLXNtYWxsIiw2MDM4NCksYmVha2VyU3RvcDpjKCJiZWFrZXItc3RvcCIsNjAzODUpLGdyYXBoTGluZTpjKCJncmFwaC1saW5lIiw2MDM4NiksZ3JhcGhTY2F0dGVyOmMoImdyYXBoLXNjYXR0ZXIiLDYwMzg3KSxwaWVDaGFydDpjKCJwaWUtY2hhcnQiLDYwMzg4KSxicmFja2V0OmMoImJyYWNrZXQiLDYwMTc1KSxicmFja2V0RG90OmMoImJyYWNrZXQtZG90Iiw2MDM4OSksYnJhY2tldEVycm9yOmMoImJyYWNrZXQtZXJyb3IiLDYwMzkwKSxsb2NrU21hbGw6YygibG9jay1zbWFsbCIsNjAzOTEpLGF6dXJlRGV2b3BzOmMoImF6dXJlLWRldm9wcyIsNjAzOTIpLHZlcmlmaWVkRmlsbGVkOmMoInZlcmlmaWVkLWZpbGxlZCIsNjAzOTMpLG5ld2xpbmU6YygibmV3bGluZSIsNjAzOTQpLGxheW91dDpjKCJsYXlvdXQiLDYwMzk1KSxsYXlvdXRBY3Rpdml0eWJhckxlZnQ6YygibGF5b3V0LWFjdGl2aXR5YmFyLWxlZnQiLDYwMzk2KSxsYXlvdXRBY3Rpdml0eWJhclJpZ2h0OmMoImxheW91dC1hY3Rpdml0eWJhci1yaWdodCIsNjAzOTcpLGxheW91dFBhbmVsTGVmdDpjKCJsYXlvdXQtcGFuZWwtbGVmdCIsNjAzOTgpLGxheW91dFBhbmVsQ2VudGVyOmMoImxheW91dC1wYW5lbC1jZW50ZXIiLDYwMzk5KSxsYXlvdXRQYW5lbEp1c3RpZnk6YygibGF5b3V0LXBhbmVsLWp1c3RpZnkiLDYwNDAwKSxsYXlvdXRQYW5lbFJpZ2h0OmMoImxheW91dC1wYW5lbC1yaWdodCIsNjA0MDEpLGxheW91dFBhbmVsOmMoImxheW91dC1wYW5lbCIsNjA0MDIpLGxheW91dFNpZGViYXJMZWZ0OmMoImxheW91dC1zaWRlYmFyLWxlZnQiLDYwNDAzKSxsYXlvdXRTaWRlYmFyUmlnaHQ6YygibGF5b3V0LXNpZGViYXItcmlnaHQiLDYwNDA0KSxsYXlvdXRTdGF0dXNiYXI6YygibGF5b3V0LXN0YXR1c2JhciIsNjA0MDUpLGxheW91dE1lbnViYXI6YygibGF5b3V0LW1lbnViYXIiLDYwNDA2KSxsYXlvdXRDZW50ZXJlZDpjKCJsYXlvdXQtY2VudGVyZWQiLDYwNDA3KSx0YXJnZXQ6YygidGFyZ2V0Iiw2MDQwOCksaW5kZW50OmMoImluZGVudCIsNjA0MDkpLHJlY29yZFNtYWxsOmMoInJlY29yZC1zbWFsbCIsNjA0MTApLGVycm9yU21hbGw6YygiZXJyb3Itc21hbGwiLDYwNDExKSx0ZXJtaW5hbERlY29yYXRpb25FcnJvcjpjKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLWVycm9yIiw2MDQxMSksYXJyb3dDaXJjbGVEb3duOmMoImFycm93LWNpcmNsZS1kb3duIiw2MDQxMiksYXJyb3dDaXJjbGVMZWZ0OmMoImFycm93LWNpcmNsZS1sZWZ0Iiw2MDQxMyksYXJyb3dDaXJjbGVSaWdodDpjKCJhcnJvdy1jaXJjbGUtcmlnaHQiLDYwNDE0KSxhcnJvd0NpcmNsZVVwOmMoImFycm93LWNpcmNsZS11cCIsNjA0MTUpLGxheW91dFNpZGViYXJSaWdodE9mZjpjKCJsYXlvdXQtc2lkZWJhci1yaWdodC1vZmYiLDYwNDE2KSxsYXlvdXRQYW5lbE9mZjpjKCJsYXlvdXQtcGFuZWwtb2ZmIiw2MDQxNyksbGF5b3V0U2lkZWJhckxlZnRPZmY6YygibGF5b3V0LXNpZGViYXItbGVmdC1vZmYiLDYwNDE4KSxibGFuazpjKCJibGFuayIsNjA0MTkpLGhlYXJ0RmlsbGVkOmMoImhlYXJ0LWZpbGxlZCIsNjA0MjApLG1hcDpjKCJtYXAiLDYwNDIxKSxtYXBIb3Jpem9udGFsOmMoIm1hcC1ob3Jpem9udGFsIiw2MDQyMSksZm9sZEhvcml6b250YWw6YygiZm9sZC1ob3Jpem9udGFsIiw2MDQyMSksbWFwRmlsbGVkOmMoIm1hcC1maWxsZWQiLDYwNDIyKSxtYXBIb3Jpem9udGFsRmlsbGVkOmMoIm1hcC1ob3Jpem9udGFsLWZpbGxlZCIsNjA0MjIpLGZvbGRIb3Jpem9udGFsRmlsbGVkOmMoImZvbGQtaG9yaXpvbnRhbC1maWxsZWQiLDYwNDIyKSxjaXJjbGVTbWFsbDpjKCJjaXJjbGUtc21hbGwiLDYwNDIzKSxiZWxsU2xhc2g6YygiYmVsbC1zbGFzaCIsNjA0MjQpLGJlbGxTbGFzaERvdDpjKCJiZWxsLXNsYXNoLWRvdCIsNjA0MjUpLGNvbW1lbnRVbnJlc29sdmVkOmMoImNvbW1lbnQtdW5yZXNvbHZlZCIsNjA0MjYpLGdpdFB1bGxSZXF1ZXN0R29Ub0NoYW5nZXM6YygiZ2l0LXB1bGwtcmVxdWVzdC1nby10by1jaGFuZ2VzIiw2MDQyNyksZ2l0UHVsbFJlcXVlc3ROZXdDaGFuZ2VzOmMoImdpdC1wdWxsLXJlcXVlc3QtbmV3LWNoYW5nZXMiLDYwNDI4KSxzZWFyY2hGdXp6eTpjKCJzZWFyY2gtZnV6enkiLDYwNDI5KSxjb21tZW50RHJhZnQ6YygiY29tbWVudC1kcmFmdCIsNjA0MzApLHNlbmQ6Yygic2VuZCIsNjA0MzEpLHNwYXJrbGU6Yygic3BhcmtsZSIsNjA0MzIpLGluc2VydDpjKCJpbnNlcnQiLDYwNDMzKSxtaWM6YygibWljIiw2MDQzNCksdGh1bWJzZG93bkZpbGxlZDpjKCJ0aHVtYnNkb3duLWZpbGxlZCIsNjA0MzUpLHRodW1ic3VwRmlsbGVkOmMoInRodW1ic3VwLWZpbGxlZCIsNjA0MzYpLGNvZmZlZTpjKCJjb2ZmZWUiLDYwNDM3KSxzbmFrZTpjKCJzbmFrZSIsNjA0MzgpLGdhbWU6YygiZ2FtZSIsNjA0MzkpLHZyOmMoInZyIiw2MDQ0MCksY2hpcDpjKCJjaGlwIiw2MDQ0MSkscGlhbm86YygicGlhbm8iLDYwNDQyKSxtdXNpYzpjKCJtdXNpYyIsNjA0NDMpLG1pY0ZpbGxlZDpjKCJtaWMtZmlsbGVkIiw2MDQ0NCkscmVwb0ZldGNoOmMoInJlcG8tZmV0Y2giLDYwNDQ1KSxjb3BpbG90OmMoImNvcGlsb3QiLDYwNDQ2KSxsaWdodGJ1bGJTcGFya2xlOmMoImxpZ2h0YnVsYi1zcGFya2xlIiw2MDQ0Nykscm9ib3Q6Yygicm9ib3QiLDYwNDQ4KSxzcGFya2xlRmlsbGVkOmMoInNwYXJrbGUtZmlsbGVkIiw2MDQ0OSksZGlmZlNpbmdsZTpjKCJkaWZmLXNpbmdsZSIsNjA0NTApLGRpZmZNdWx0aXBsZTpjKCJkaWZmLW11bHRpcGxlIiw2MDQ1MSksc3Vycm91bmRXaXRoOmMoInN1cnJvdW5kLXdpdGgiLDYwNDUyKSxzaGFyZTpjKCJzaGFyZSIsNjA0NTMpLGdpdFN0YXNoOmMoImdpdC1zdGFzaCIsNjA0NTQpLGdpdFN0YXNoQXBwbHk6YygiZ2l0LXN0YXNoLWFwcGx5Iiw2MDQ1NSksZ2l0U3Rhc2hQb3A6YygiZ2l0LXN0YXNoLXBvcCIsNjA0NTYpLHZzY29kZTpjKCJ2c2NvZGUiLDYwNDU3KSx2c2NvZGVJbnNpZGVyczpjKCJ2c2NvZGUtaW5zaWRlcnMiLDYwNDU4KSxjb2RlT3NzOmMoImNvZGUtb3NzIiw2MDQ1OSkscnVuQ292ZXJhZ2U6YygicnVuLWNvdmVyYWdlIiw2MDQ2MCkscnVuQWxsQ292ZXJhZ2U6YygicnVuLWFsbC1jb3ZlcmFnZSIsNjA0NjEpLGNvdmVyYWdlOmMoImNvdmVyYWdlIiw2MDQ2MiksZ2l0aHViUHJvamVjdDpjKCJnaXRodWItcHJvamVjdCIsNjA0NjMpLG1hcFZlcnRpY2FsOmMoIm1hcC12ZXJ0aWNhbCIsNjA0NjQpLGZvbGRWZXJ0aWNhbDpjKCJmb2xkLXZlcnRpY2FsIiw2MDQ2NCksbWFwVmVydGljYWxGaWxsZWQ6YygibWFwLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpLGZvbGRWZXJ0aWNhbEZpbGxlZDpjKCJmb2xkLXZlcnRpY2FsLWZpbGxlZCIsNjA0NjUpfSxsbD17ZGlhbG9nRXJyb3I6YygiZGlhbG9nLWVycm9yIiwiZXJyb3IiKSxkaWFsb2dXYXJuaW5nOmMoImRpYWxvZy13YXJuaW5nIiwid2FybmluZyIpLGRpYWxvZ0luZm86YygiZGlhbG9nLWluZm8iLCJpbmZvIiksZGlhbG9nQ2xvc2U6YygiZGlhbG9nLWNsb3NlIiwiY2xvc2UiKSx0cmVlSXRlbUV4cGFuZGVkOmMoInRyZWUtaXRlbS1leHBhbmRlZCIsImNoZXZyb24tZG93biIpLHRyZWVGaWx0ZXJPblR5cGVPbjpjKCJ0cmVlLWZpbHRlci1vbi10eXBlLW9uIiwibGlzdC1maWx0ZXIiKSx0cmVlRmlsdGVyT25UeXBlT2ZmOmMoInRyZWUtZmlsdGVyLW9uLXR5cGUtb2ZmIiwibGlzdC1zZWxlY3Rpb24iKSx0cmVlRmlsdGVyQ2xlYXI6YygidHJlZS1maWx0ZXItY2xlYXIiLCJjbG9zZSIpLHRyZWVJdGVtTG9hZGluZzpjKCJ0cmVlLWl0ZW0tbG9hZGluZyIsImxvYWRpbmciKSxtZW51U2VsZWN0aW9uOmMoIm1lbnUtc2VsZWN0aW9uIiwiY2hlY2siKSxtZW51U3VibWVudTpjKCJtZW51LXN1Ym1lbnUiLCJjaGV2cm9uLXJpZ2h0IiksbWVudUJhck1vcmU6YygibWVudWJhci1tb3JlIiwibW9yZSIpLHNjcm9sbGJhckJ1dHRvbkxlZnQ6Yygic2Nyb2xsYmFyLWJ1dHRvbi1sZWZ0IiwidHJpYW5nbGUtbGVmdCIpLHNjcm9sbGJhckJ1dHRvblJpZ2h0OmMoInNjcm9sbGJhci1idXR0b24tcmlnaHQiLCJ0cmlhbmdsZS1yaWdodCIpLHNjcm9sbGJhckJ1dHRvblVwOmMoInNjcm9sbGJhci1idXR0b24tdXAiLCJ0cmlhbmdsZS11cCIpLHNjcm9sbGJhckJ1dHRvbkRvd246Yygic2Nyb2xsYmFyLWJ1dHRvbi1kb3duIiwidHJpYW5nbGUtZG93biIpLHRvb2xCYXJNb3JlOmMoInRvb2xiYXItbW9yZSIsIm1vcmUiKSxxdWlja0lucHV0QmFjazpjKCJxdWljay1pbnB1dC1iYWNrIiwiYXJyb3ctbGVmdCIpLGRyb3BEb3duQnV0dG9uOmMoImRyb3AtZG93bi1idXR0b24iLDYwMDg0KSxzeW1ib2xDdXN0b21Db2xvcjpjKCJzeW1ib2wtY3VzdG9tY29sb3IiLDYwMjUyKSxleHBvcnRJY29uOmMoImV4cG9ydCIsNjAzMzIpLHdvcmtzcGFjZVVuc3BlY2lmaWVkOmMoIndvcmtzcGFjZS11bnNwZWNpZmllZCIsNjAzNTUpLG5ld0xpbmU6YygibmV3bGluZSIsNjAzOTQpLHRodW1ic0Rvd25GaWxsZWQ6YygidGh1bWJzZG93bi1maWxsZWQiLDYwNDM1KSx0aHVtYnNVcEZpbGxlZDpjKCJ0aHVtYnN1cC1maWxsZWQiLDYwNDM2KSxnaXRGZXRjaDpjKCJnaXQtZmV0Y2giLDYwNDQ1KSxsaWdodGJ1bGJTcGFya2xlQXV0b2ZpeDpjKCJsaWdodGJ1bGItc3BhcmtsZS1hdXRvZml4Iiw2MDQ0NyksZGVidWdCcmVha3BvaW50UGVuZGluZzpjKCJkZWJ1Zy1icmVha3BvaW50LXBlbmRpbmciLDYwMzc3KX0scT17Li4ub2wsLi4ubGx9O2NsYXNzIHVse2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHM9bmV3IE1hcCx0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcCx0aGlzLl9vbkRpZENoYW5nZT1uZXcgQWUsdGhpcy5vbkRpZENoYW5nZT10aGlzLl9vbkRpZENoYW5nZS5ldmVudCx0aGlzLl9jb2xvck1hcD1udWxsfWhhbmRsZUNoYW5nZSh0KXt0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOnQsY2hhbmdlZENvbG9yTWFwOiExfSl9cmVnaXN0ZXIodCxuKXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuc2V0KHQsbiksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSxZdCgoKT0+e3RoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KT09PW4mJih0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5kZWxldGUodCksdGhpcy5oYW5kbGVDaGFuZ2UoW3RdKSl9KX1nZXQodCl7cmV0dXJuIHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmdldCh0KXx8bnVsbH1yZWdpc3RlckZhY3RvcnkodCxuKXt2YXIgcjsocj10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpKT09PW51bGx8fHI9PT12b2lkIDB8fHIuZGlzcG9zZSgpO2NvbnN0IGk9bmV3IGNsKHRoaXMsdCxuKTtyZXR1cm4gdGhpcy5fZmFjdG9yaWVzLnNldCh0LGkpLFl0KCgpPT57Y29uc3Qgcz10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpOyFzfHxzIT09aXx8KHRoaXMuX2ZhY3Rvcmllcy5kZWxldGUodCkscy5kaXNwb3NlKCkpfSl9YXN5bmMgZ2V0T3JDcmVhdGUodCl7Y29uc3Qgbj10aGlzLmdldCh0KTtpZihuKXJldHVybiBuO2NvbnN0IHI9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtyZXR1cm4hcnx8ci5pc1Jlc29sdmVkP251bGw6KGF3YWl0IHIucmVzb2x2ZSgpLHRoaXMuZ2V0KHQpKX1pc1Jlc29sdmVkKHQpe2lmKHRoaXMuZ2V0KHQpKXJldHVybiEwO2NvbnN0IHI9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtyZXR1cm4hISghcnx8ci5pc1Jlc29sdmVkKX1zZXRDb2xvck1hcCh0KXt0aGlzLl9jb2xvck1hcD10LHRoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6QXJyYXkuZnJvbSh0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5rZXlzKCkpLGNoYW5nZWRDb2xvck1hcDohMH0pfWdldENvbG9yTWFwKCl7cmV0dXJuIHRoaXMuX2NvbG9yTWFwfWdldERlZmF1bHRCYWNrZ3JvdW5kKCl7cmV0dXJuIHRoaXMuX2NvbG9yTWFwJiZ0aGlzLl9jb2xvck1hcC5sZW5ndGg+Mj90aGlzLl9jb2xvck1hcFsyXTpudWxsfX1jbGFzcyBjbCBleHRlbmRzIE10e2dldCBpc1Jlc29sdmVkKCl7cmV0dXJuIHRoaXMuX2lzUmVzb2x2ZWR9Y29uc3RydWN0b3IodCxuLHIpe3N1cGVyKCksdGhpcy5fcmVnaXN0cnk9dCx0aGlzLl9sYW5ndWFnZUlkPW4sdGhpcy5fZmFjdG9yeT1yLHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5fcmVzb2x2ZVByb21pc2U9bnVsbCx0aGlzLl9pc1Jlc29sdmVkPSExfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkPSEwLHN1cGVyLmRpc3Bvc2UoKX1hc3luYyByZXNvbHZlKCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVQcm9taXNlfHwodGhpcy5fcmVzb2x2ZVByb21pc2U9dGhpcy5fY3JlYXRlKCkpLHRoaXMuX3Jlc29sdmVQcm9taXNlfWFzeW5jIF9jcmVhdGUoKXtjb25zdCB0PWF3YWl0IHRoaXMuX2ZhY3RvcnkudG9rZW5pemF0aW9uU3VwcG9ydDt0aGlzLl9pc1Jlc29sdmVkPSEwLHQmJiF0aGlzLl9pc0Rpc3Bvc2VkJiZ0aGlzLl9yZWdpc3Rlcih0aGlzLl9yZWdpc3RyeS5yZWdpc3Rlcih0aGlzLl9sYW5ndWFnZUlkLHQpKX19Y2xhc3MgZmx7Y29uc3RydWN0b3IodCxuLHIpe3RoaXMub2Zmc2V0PXQsdGhpcy50eXBlPW4sdGhpcy5sYW5ndWFnZT1yLHRoaXMuX3Rva2VuQnJhbmQ9dm9pZCAwfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMub2Zmc2V0KyIsICIrdGhpcy50eXBlKyIpIn19dmFyIGNpOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxxLnN5bWJvbE1ldGhvZCksdC5zZXQoMSxxLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgyLHEuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMscS5zeW1ib2xGaWVsZCksdC5zZXQoNCxxLnN5bWJvbFZhcmlhYmxlKSx0LnNldCg1LHEuc3ltYm9sQ2xhc3MpLHQuc2V0KDYscS5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcscS5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDgscS5zeW1ib2xNb2R1bGUpLHQuc2V0KDkscS5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAscS5zeW1ib2xFdmVudCksdC5zZXQoMTEscS5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIscS5zeW1ib2xVbml0KSx0LnNldCgxMyxxLnN5bWJvbFZhbHVlKSx0LnNldCgxNSxxLnN5bWJvbEVudW0pLHQuc2V0KDE0LHEuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LHEuc3ltYm9sRW51bSksdC5zZXQoMTYscS5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyxxLnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LHEuc3ltYm9sU25pcHBldCksdC5zZXQoMTgscS5zeW1ib2xUZXh0KSx0LnNldCgxOSxxLnN5bWJvbENvbG9yKSx0LnNldCgyMCxxLnN5bWJvbEZpbGUpLHQuc2V0KDIxLHEuc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMixxLnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxxLnN5bWJvbEZvbGRlciksdC5zZXQoMjQscS5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSxxLmFjY291bnQpLHQuc2V0KDI2LHEuaXNzdWVzKTtmdW5jdGlvbiBuKHMpe2xldCBhPXQuZ2V0KHMpO3JldHVybiBhfHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitzKSxhPXEuc3ltYm9sUHJvcGVydHkpLGF9ZS50b0ljb249bjtjb25zdCByPW5ldyBNYXA7ci5zZXQoIm1ldGhvZCIsMCksci5zZXQoImZ1bmN0aW9uIiwxKSxyLnNldCgiY29uc3RydWN0b3IiLDIpLHIuc2V0KCJmaWVsZCIsMyksci5zZXQoInZhcmlhYmxlIiw0KSxyLnNldCgiY2xhc3MiLDUpLHIuc2V0KCJzdHJ1Y3QiLDYpLHIuc2V0KCJpbnRlcmZhY2UiLDcpLHIuc2V0KCJtb2R1bGUiLDgpLHIuc2V0KCJwcm9wZXJ0eSIsOSksci5zZXQoImV2ZW50IiwxMCksci5zZXQoIm9wZXJhdG9yIiwxMSksci5zZXQoInVuaXQiLDEyKSxyLnNldCgidmFsdWUiLDEzKSxyLnNldCgiY29uc3RhbnQiLDE0KSxyLnNldCgiZW51bSIsMTUpLHIuc2V0KCJlbnVtLW1lbWJlciIsMTYpLHIuc2V0KCJlbnVtTWVtYmVyIiwxNiksci5zZXQoImtleXdvcmQiLDE3KSxyLnNldCgic25pcHBldCIsMjcpLHIuc2V0KCJ0ZXh0IiwxOCksci5zZXQoImNvbG9yIiwxOSksci5zZXQoImZpbGUiLDIwKSxyLnNldCgicmVmZXJlbmNlIiwyMSksci5zZXQoImN1c3RvbWNvbG9yIiwyMiksci5zZXQoImZvbGRlciIsMjMpLHIuc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLHIuc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCksci5zZXQoImFjY291bnQiLDI1KSxyLnNldCgiaXNzdWUiLDI2KTtmdW5jdGlvbiBpKHMsYSl7bGV0IG89ci5nZXQocyk7cmV0dXJuIHR5cGVvZiBvPiJ1IiYmIWEmJihvPTkpLG99ZS5mcm9tU3RyaW5nPWl9KShjaXx8KGNpPXt9KSk7dmFyIGZpOyhmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifSkoZml8fChmaT17fSkpO3ZhciBoaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuUGFzdGVBcz0xXT0iUGFzdGVBcyJ9KShoaXx8KGhpPXt9KSk7dmFyIGRpOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KShkaXx8KGRpPXt9KSk7dmFyIGdpOyhmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifSkoZ2l8fChnaT17fSkpLFooIkFycmF5IiwiYXJyYXkiKSxaKCJCb29sZWFuIiwiYm9vbGVhbiIpLFooIkNsYXNzIiwiY2xhc3MiKSxaKCJDb25zdGFudCIsImNvbnN0YW50IiksWigiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIpLFooIkVudW0iLCJlbnVtZXJhdGlvbiIpLFooIkVudW1NZW1iZXIiLCJlbnVtZXJhdGlvbiBtZW1iZXIiKSxaKCJFdmVudCIsImV2ZW50IiksWigiRmllbGQiLCJmaWVsZCIpLFooIkZpbGUiLCJmaWxlIiksWigiRnVuY3Rpb24iLCJmdW5jdGlvbiIpLFooIkludGVyZmFjZSIsImludGVyZmFjZSIpLFooIktleSIsImtleSIpLFooIk1ldGhvZCIsIm1ldGhvZCIpLFooIk1vZHVsZSIsIm1vZHVsZSIpLFooIk5hbWVzcGFjZSIsIm5hbWVzcGFjZSIpLFooIk51bGwiLCJudWxsIiksWigiTnVtYmVyIiwibnVtYmVyIiksWigiT2JqZWN0Iiwib2JqZWN0IiksWigiT3BlcmF0b3IiLCJvcGVyYXRvciIpLFooIlBhY2thZ2UiLCJwYWNrYWdlIiksWigiUHJvcGVydHkiLCJwcm9wZXJ0eSIpLFooIlN0cmluZyIsInN0cmluZyIpLFooIlN0cnVjdCIsInN0cnVjdCIpLFooIlR5cGVQYXJhbWV0ZXIiLCJ0eXBlIHBhcmFtZXRlciIpLFooIlZhcmlhYmxlIiwidmFyaWFibGUiKTt2YXIgbWk7KGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLHEuc3ltYm9sRmlsZSksdC5zZXQoMSxxLnN5bWJvbE1vZHVsZSksdC5zZXQoMixxLnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyxxLnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQscS5zeW1ib2xDbGFzcyksdC5zZXQoNSxxLnN5bWJvbE1ldGhvZCksdC5zZXQoNixxLnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LHEuc3ltYm9sRmllbGQpLHQuc2V0KDgscS5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSxxLnN5bWJvbEVudW0pLHQuc2V0KDEwLHEuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCgxMSxxLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMixxLnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxxLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNCxxLnN5bWJvbFN0cmluZyksdC5zZXQoMTUscS5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LHEuc3ltYm9sQm9vbGVhbiksdC5zZXQoMTcscS5zeW1ib2xBcnJheSksdC5zZXQoMTgscS5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LHEuc3ltYm9sS2V5KSx0LnNldCgyMCxxLnN5bWJvbE51bGwpLHQuc2V0KDIxLHEuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIscS5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDIzLHEuc3ltYm9sRXZlbnQpLHQuc2V0KDI0LHEuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LHEuc3ltYm9sVHlwZVBhcmFtZXRlcik7ZnVuY3Rpb24gbihyKXtsZXQgaT10LmdldChyKTtyZXR1cm4gaXx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK3IpLGk9cS5zeW1ib2xQcm9wZXJ0eSksaX1lLnRvSWNvbj1ufSkobWl8fChtaT17fSkpO3ZhciBwaTsoZnVuY3Rpb24oZSl7ZVtlLkFJR2VuZXJhdGVkPTFdPSJBSUdlbmVyYXRlZCJ9KShwaXx8KHBpPXt9KSk7dmFyIHZpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiFufHx0eXBlb2YgbiE9Im9iamVjdCI/ITE6dHlwZW9mIG4uaWQ9PSJzdHJpbmciJiZ0eXBlb2Ygbi50aXRsZT09InN0cmluZyJ9ZS5pcz10fSkodml8fCh2aT17fSkpO3ZhciBiaTsoZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KShiaXx8KGJpPXt9KSksbmV3IHVsO3ZhciB4aTsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoeGl8fCh4aT17fSkpO3ZhciB5aTsoZnVuY3Rpb24oZSl7ZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5EaXNhYmxlZD0xXT0iRGlzYWJsZWQiLGVbZS5FbmFibGVkPTJdPSJFbmFibGVkIn0pKHlpfHwoeWk9e30pKTt2YXIgd2k7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLkF1dG89Ml09IkF1dG8ifSkod2l8fCh3aT17fSkpO3ZhciBfaTsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwV2hpdGVzcGFjZT0xXT0iS2VlcFdoaXRlc3BhY2UiLGVbZS5JbnNlcnRBc1NuaXBwZXQ9NF09Ikluc2VydEFzU25pcHBldCJ9KShfaXx8KF9pPXt9KSk7dmFyIFNpOyhmdW5jdGlvbihlKXtlW2UuTWV0aG9kPTBdPSJNZXRob2QiLGVbZS5GdW5jdGlvbj0xXT0iRnVuY3Rpb24iLGVbZS5Db25zdHJ1Y3Rvcj0yXT0iQ29uc3RydWN0b3IiLGVbZS5GaWVsZD0zXT0iRmllbGQiLGVbZS5WYXJpYWJsZT00XT0iVmFyaWFibGUiLGVbZS5DbGFzcz01XT0iQ2xhc3MiLGVbZS5TdHJ1Y3Q9Nl09IlN0cnVjdCIsZVtlLkludGVyZmFjZT03XT0iSW50ZXJmYWNlIixlW2UuTW9kdWxlPThdPSJNb2R1bGUiLGVbZS5Qcm9wZXJ0eT05XT0iUHJvcGVydHkiLGVbZS5FdmVudD0xMF09IkV2ZW50IixlW2UuT3BlcmF0b3I9MTFdPSJPcGVyYXRvciIsZVtlLlVuaXQ9MTJdPSJVbml0IixlW2UuVmFsdWU9MTNdPSJWYWx1ZSIsZVtlLkNvbnN0YW50PTE0XT0iQ29uc3RhbnQiLGVbZS5FbnVtPTE1XT0iRW51bSIsZVtlLkVudW1NZW1iZXI9MTZdPSJFbnVtTWVtYmVyIixlW2UuS2V5d29yZD0xN109IktleXdvcmQiLGVbZS5UZXh0PTE4XT0iVGV4dCIsZVtlLkNvbG9yPTE5XT0iQ29sb3IiLGVbZS5GaWxlPTIwXT0iRmlsZSIsZVtlLlJlZmVyZW5jZT0yMV09IlJlZmVyZW5jZSIsZVtlLkN1c3RvbWNvbG9yPTIyXT0iQ3VzdG9tY29sb3IiLGVbZS5Gb2xkZXI9MjNdPSJGb2xkZXIiLGVbZS5UeXBlUGFyYW1ldGVyPTI0XT0iVHlwZVBhcmFtZXRlciIsZVtlLlVzZXI9MjVdPSJVc2VyIixlW2UuSXNzdWU9MjZdPSJJc3N1ZSIsZVtlLlNuaXBwZXQ9MjddPSJTbmlwcGV0In0pKFNpfHwoU2k9e30pKTt2YXIgTGk7KGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0pKExpfHwoTGk9e30pKTt2YXIgTmk7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9MV09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5UcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zPTJdPSJUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zIn0pKE5pfHwoTmk9e30pKTt2YXIgQWk7KGZ1bmN0aW9uKGUpe2VbZS5FWEFDVD0wXT0iRVhBQ1QiLGVbZS5BQk9WRT0xXT0iQUJPVkUiLGVbZS5CRUxPVz0yXT0iQkVMT1cifSkoQWl8fChBaT17fSkpO3ZhciBDaTsoZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0pKENpfHwoQ2k9e30pKTt2YXIga2k7KGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKGtpfHwoa2k9e30pKTt2YXIgRWk7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KShFaXx8KEVpPXt9KSk7dmFyIE1pOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0pKE1pfHwoTWk9e30pKTt2YXIgUmk7KGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hcmlhUmVxdWlyZWQ9NV09ImFyaWFSZXF1aXJlZCIsZVtlLmF1dG9DbG9zaW5nQnJhY2tldHM9Nl09ImF1dG9DbG9zaW5nQnJhY2tldHMiLGVbZS5hdXRvQ2xvc2luZ0NvbW1lbnRzPTddPSJhdXRvQ2xvc2luZ0NvbW1lbnRzIixlW2Uuc2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uPThdPSJzY3JlZW5SZWFkZXJBbm5vdW5jZUlubGluZVN1Z2dlc3Rpb24iLGVbZS5hdXRvQ2xvc2luZ0RlbGV0ZT05XT0iYXV0b0Nsb3NpbmdEZWxldGUiLGVbZS5hdXRvQ2xvc2luZ092ZXJ0eXBlPTEwXT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPTExXT0iYXV0b0Nsb3NpbmdRdW90ZXMiLGVbZS5hdXRvSW5kZW50PTEyXT0iYXV0b0luZGVudCIsZVtlLmF1dG9tYXRpY0xheW91dD0xM109ImF1dG9tYXRpY0xheW91dCIsZVtlLmF1dG9TdXJyb3VuZD0xNF09ImF1dG9TdXJyb3VuZCIsZVtlLmJyYWNrZXRQYWlyQ29sb3JpemF0aW9uPTE1XT0iYnJhY2tldFBhaXJDb2xvcml6YXRpb24iLGVbZS5ndWlkZXM9MTZdPSJndWlkZXMiLGVbZS5jb2RlTGVucz0xN109ImNvZGVMZW5zIixlW2UuY29kZUxlbnNGb250RmFtaWx5PTE4XT0iY29kZUxlbnNGb250RmFtaWx5IixlW2UuY29kZUxlbnNGb250U2l6ZT0xOV09ImNvZGVMZW5zRm9udFNpemUiLGVbZS5jb2xvckRlY29yYXRvcnM9MjBdPSJjb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNMaW1pdD0yMV09ImNvbG9yRGVjb3JhdG9yc0xpbWl0IixlW2UuY29sdW1uU2VsZWN0aW9uPTIyXT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MjNdPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTI0XT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yNV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjZdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTI3XT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yOF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yOV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MzBdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0zMV09ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0zMl09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0zM109ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzRdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTM1XT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zNl09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzddPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbFdoaXRlc3BhY2VSZW5kZXJpbmc9MzhdPSJleHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzldPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT00MF09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9NDFdPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9NDJdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9NDNdPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTQ0XT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD00NV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00Nl09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQ3XT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQ4XT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00OV09ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz01MF09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz01MV09ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT01Ml09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD01M109ImZvbnRXZWlnaHQiLGVbZS5mb250VmFyaWF0aW9ucz01NF09ImZvbnRWYXJpYXRpb25zIixlW2UuZm9ybWF0T25QYXN0ZT01NV09ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTZdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01N109ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTU4XT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01OV09ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj02MF09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTYxXT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD02Ml09ImlubGluZVN1Z2dlc3QiLGVbZS5pbmxpbmVFZGl0PTYzXT0iaW5saW5lRWRpdCIsZVtlLmxldHRlclNwYWNpbmc9NjRdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTY1XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjZdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjddPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjhdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjldPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz03MF09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz03MV09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz03Ml09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTczXT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NzRdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTc1XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzZdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03N109Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzhdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03OV09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5tdWx0aUN1cnNvckxpbWl0PTgwXT0ibXVsdGlDdXJzb3JMaW1pdCIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTgxXT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTgyXT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz04M109Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9ODRdPSJwYWRkaW5nIixlW2UucGFzdGVBcz04NV09InBhc3RlQXMiLGVbZS5wYXJhbWV0ZXJIaW50cz04Nl09InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz04N109InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5kZWZpbml0aW9uTGlua09wZW5zSW5QZWVrPTg4XT0iZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlayIsZVtlLnF1aWNrU3VnZ2VzdGlvbnM9ODldPSJxdWlja1N1Z2dlc3Rpb25zIixlW2UucXVpY2tTdWdnZXN0aW9uc0RlbGF5PTkwXT0icXVpY2tTdWdnZXN0aW9uc0RlbGF5IixlW2UucmVhZE9ubHk9OTFdPSJyZWFkT25seSIsZVtlLnJlYWRPbmx5TWVzc2FnZT05Ml09InJlYWRPbmx5TWVzc2FnZSIsZVtlLnJlbmFtZU9uVHlwZT05M109InJlbmFtZU9uVHlwZSIsZVtlLnJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzPTk0XT0icmVuZGVyQ29udHJvbENoYXJhY3RlcnMiLGVbZS5yZW5kZXJGaW5hbE5ld2xpbmU9OTVdPSJyZW5kZXJGaW5hbE5ld2xpbmUiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0PTk2XT0icmVuZGVyTGluZUhpZ2hsaWdodCIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzPTk3XT0icmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXMiLGVbZS5yZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnM9OThdPSJyZW5kZXJWYWxpZGF0aW9uRGVjb3JhdGlvbnMiLGVbZS5yZW5kZXJXaGl0ZXNwYWNlPTk5XT0icmVuZGVyV2hpdGVzcGFjZSIsZVtlLnJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmc9MTAwXT0icmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZyIsZVtlLnJvdW5kZWRTZWxlY3Rpb249MTAxXT0icm91bmRlZFNlbGVjdGlvbiIsZVtlLnJ1bGVycz0xMDJdPSJydWxlcnMiLGVbZS5zY3JvbGxiYXI9MTAzXT0ic2Nyb2xsYmFyIixlW2Uuc2Nyb2xsQmV5b25kTGFzdENvbHVtbj0xMDRdPSJzY3JvbGxCZXlvbmRMYXN0Q29sdW1uIixlW2Uuc2Nyb2xsQmV5b25kTGFzdExpbmU9MTA1XT0ic2Nyb2xsQmV5b25kTGFzdExpbmUiLGVbZS5zY3JvbGxQcmVkb21pbmFudEF4aXM9MTA2XT0ic2Nyb2xsUHJlZG9taW5hbnRBeGlzIixlW2Uuc2VsZWN0aW9uQ2xpcGJvYXJkPTEwN109InNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLnNlbGVjdGlvbkhpZ2hsaWdodD0xMDhdPSJzZWxlY3Rpb25IaWdobGlnaHQiLGVbZS5zZWxlY3RPbkxpbmVOdW1iZXJzPTEwOV09InNlbGVjdE9uTGluZU51bWJlcnMiLGVbZS5zaG93Rm9sZGluZ0NvbnRyb2xzPTExMF09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTExMV09InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTEyXT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTEzXT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTE0XT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5U2Nyb2xsPTExNV09InN0aWNreVNjcm9sbCIsZVtlLnN0aWNreVRhYlN0b3BzPTExNl09InN0aWNreVRhYlN0b3BzIixlW2Uuc3RvcFJlbmRlcmluZ0xpbmVBZnRlcj0xMTddPSJzdG9wUmVuZGVyaW5nTGluZUFmdGVyIixlW2Uuc3VnZ2VzdD0xMThdPSJzdWdnZXN0IixlW2Uuc3VnZ2VzdEZvbnRTaXplPTExOV09InN1Z2dlc3RGb250U2l6ZSIsZVtlLnN1Z2dlc3RMaW5lSGVpZ2h0PTEyMF09InN1Z2dlc3RMaW5lSGVpZ2h0IixlW2Uuc3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnM9MTIxXT0ic3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnMiLGVbZS5zdWdnZXN0U2VsZWN0aW9uPTEyMl09InN1Z2dlc3RTZWxlY3Rpb24iLGVbZS50YWJDb21wbGV0aW9uPTEyM109InRhYkNvbXBsZXRpb24iLGVbZS50YWJJbmRleD0xMjRdPSJ0YWJJbmRleCIsZVtlLnVuaWNvZGVIaWdobGlnaHRpbmc9MTI1XT0idW5pY29kZUhpZ2hsaWdodGluZyIsZVtlLnVudXN1YWxMaW5lVGVybWluYXRvcnM9MTI2XT0idW51c3VhbExpbmVUZXJtaW5hdG9ycyIsZVtlLnVzZVNoYWRvd0RPTT0xMjddPSJ1c2VTaGFkb3dET00iLGVbZS51c2VUYWJTdG9wcz0xMjhdPSJ1c2VUYWJTdG9wcyIsZVtlLndvcmRCcmVhaz0xMjldPSJ3b3JkQnJlYWsiLGVbZS53b3JkU2VnbWVudGVyTG9jYWxlcz0xMzBdPSJ3b3JkU2VnbWVudGVyTG9jYWxlcyIsZVtlLndvcmRTZXBhcmF0b3JzPTEzMV09IndvcmRTZXBhcmF0b3JzIixlW2Uud29yZFdyYXA9MTMyXT0id29yZFdyYXAiLGVbZS53b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzPTEzM109IndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycz0xMzRdPSJ3b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQ29sdW1uPTEzNV09IndvcmRXcmFwQ29sdW1uIixlW2Uud29yZFdyYXBPdmVycmlkZTE9MTM2XT0id29yZFdyYXBPdmVycmlkZTEiLGVbZS53b3JkV3JhcE92ZXJyaWRlMj0xMzddPSJ3b3JkV3JhcE92ZXJyaWRlMiIsZVtlLndyYXBwaW5nSW5kZW50PTEzOF09IndyYXBwaW5nSW5kZW50IixlW2Uud3JhcHBpbmdTdHJhdGVneT0xMzldPSJ3cmFwcGluZ1N0cmF0ZWd5IixlW2Uuc2hvd0RlcHJlY2F0ZWQ9MTQwXT0ic2hvd0RlcHJlY2F0ZWQiLGVbZS5pbmxheUhpbnRzPTE0MV09ImlubGF5SGludHMiLGVbZS5lZGl0b3JDbGFzc05hbWU9MTQyXT0iZWRpdG9yQ2xhc3NOYW1lIixlW2UucGl4ZWxSYXRpbz0xNDNdPSJwaXhlbFJhdGlvIixlW2UudGFiRm9jdXNNb2RlPTE0NF09InRhYkZvY3VzTW9kZSIsZVtlLmxheW91dEluZm89MTQ1XT0ibGF5b3V0SW5mbyIsZVtlLndyYXBwaW5nSW5mbz0xNDZdPSJ3cmFwcGluZ0luZm8iLGVbZS5kZWZhdWx0Q29sb3JEZWNvcmF0b3JzPTE0N109ImRlZmF1bHRDb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNBY3RpdmF0ZWRPbj0xNDhdPSJjb2xvckRlY29yYXRvcnNBY3RpdmF0ZWRPbiIsZVtlLmlubGluZUNvbXBsZXRpb25zQWNjZXNzaWJpbGl0eVZlcmJvc2U9MTQ5XT0iaW5saW5lQ29tcGxldGlvbnNBY2Nlc3NpYmlsaXR5VmVyYm9zZSJ9KShSaXx8KFJpPXt9KSk7dmFyIFRpOyhmdW5jdGlvbihlKXtlW2UuVGV4dERlZmluZWQ9MF09IlRleHREZWZpbmVkIixlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KShUaXx8KFRpPXt9KSk7dmFyIFBpOyhmdW5jdGlvbihlKXtlW2UuTEY9MF09IkxGIixlW2UuQ1JMRj0xXT0iQ1JMRiJ9KShQaXx8KFBpPXt9KSk7dmFyIEZpOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9M109IlJpZ2h0In0pKEZpfHwoRmk9e30pKTt2YXIgSWk7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuSW5kZW50PTFdPSJJbmRlbnQiLGVbZS5JbmRlbnRPdXRkZW50PTJdPSJJbmRlbnRPdXRkZW50IixlW2UuT3V0ZGVudD0zXT0iT3V0ZGVudCJ9KShJaXx8KElpPXt9KSk7dmFyIERpOyhmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0pKERpfHwoRGk9e30pKTt2YXIgVmk7KGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSkoVml8fChWaT17fSkpO3ZhciBPaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuRXhwbGljaXQ9MV09IkV4cGxpY2l0In0pKE9pfHwoT2k9e30pKTt2YXIgamk7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLkF1dG9tYXRpYz0xXT0iQXV0b21hdGljIn0pKGppfHwoamk9e30pKTt2YXIgWW47KGZ1bmN0aW9uKGUpe2VbZS5EZXBlbmRzT25LYkxheW91dD0tMV09IkRlcGVuZHNPbktiTGF5b3V0IixlW2UuVW5rbm93bj0wXT0iVW5rbm93biIsZVtlLkJhY2tzcGFjZT0xXT0iQmFja3NwYWNlIixlW2UuVGFiPTJdPSJUYWIiLGVbZS5FbnRlcj0zXT0iRW50ZXIiLGVbZS5TaGlmdD00XT0iU2hpZnQiLGVbZS5DdHJsPTVdPSJDdHJsIixlW2UuQWx0PTZdPSJBbHQiLGVbZS5QYXVzZUJyZWFrPTddPSJQYXVzZUJyZWFrIixlW2UuQ2Fwc0xvY2s9OF09IkNhcHNMb2NrIixlW2UuRXNjYXBlPTldPSJFc2NhcGUiLGVbZS5TcGFjZT0xMF09IlNwYWNlIixlW2UuUGFnZVVwPTExXT0iUGFnZVVwIixlW2UuUGFnZURvd249MTJdPSJQYWdlRG93biIsZVtlLkVuZD0xM109IkVuZCIsZVtlLkhvbWU9MTRdPSJIb21lIixlW2UuTGVmdEFycm93PTE1XT0iTGVmdEFycm93IixlW2UuVXBBcnJvdz0xNl09IlVwQXJyb3ciLGVbZS5SaWdodEFycm93PTE3XT0iUmlnaHRBcnJvdyIsZVtlLkRvd25BcnJvdz0xOF09IkRvd25BcnJvdyIsZVtlLkluc2VydD0xOV09Ikluc2VydCIsZVtlLkRlbGV0ZT0yMF09IkRlbGV0ZSIsZVtlLkRpZ2l0MD0yMV09IkRpZ2l0MCIsZVtlLkRpZ2l0MT0yMl09IkRpZ2l0MSIsZVtlLkRpZ2l0Mj0yM109IkRpZ2l0MiIsZVtlLkRpZ2l0Mz0yNF09IkRpZ2l0MyIsZVtlLkRpZ2l0ND0yNV09IkRpZ2l0NCIsZVtlLkRpZ2l0NT0yNl09IkRpZ2l0NSIsZVtlLkRpZ2l0Nj0yN109IkRpZ2l0NiIsZVtlLkRpZ2l0Nz0yOF09IkRpZ2l0NyIsZVtlLkRpZ2l0OD0yOV09IkRpZ2l0OCIsZVtlLkRpZ2l0OT0zMF09IkRpZ2l0OSIsZVtlLktleUE9MzFdPSJLZXlBIixlW2UuS2V5Qj0zMl09IktleUIiLGVbZS5LZXlDPTMzXT0iS2V5QyIsZVtlLktleUQ9MzRdPSJLZXlEIixlW2UuS2V5RT0zNV09IktleUUiLGVbZS5LZXlGPTM2XT0iS2V5RiIsZVtlLktleUc9MzddPSJLZXlHIixlW2UuS2V5SD0zOF09IktleUgiLGVbZS5LZXlJPTM5XT0iS2V5SSIsZVtlLktleUo9NDBdPSJLZXlKIixlW2UuS2V5Sz00MV09IktleUsiLGVbZS5LZXlMPTQyXT0iS2V5TCIsZVtlLktleU09NDNdPSJLZXlNIixlW2UuS2V5Tj00NF09IktleU4iLGVbZS5LZXlPPTQ1XT0iS2V5TyIsZVtlLktleVA9NDZdPSJLZXlQIixlW2UuS2V5UT00N109IktleVEiLGVbZS5LZXlSPTQ4XT0iS2V5UiIsZVtlLktleVM9NDldPSJLZXlTIixlW2UuS2V5VD01MF09IktleVQiLGVbZS5LZXlVPTUxXT0iS2V5VSIsZVtlLktleVY9NTJdPSJLZXlWIixlW2UuS2V5Vz01M109IktleVciLGVbZS5LZXlYPTU0XT0iS2V5WCIsZVtlLktleVk9NTVdPSJLZXlZIixlW2UuS2V5Wj01Nl09IktleVoiLGVbZS5NZXRhPTU3XT0iTWV0YSIsZVtlLkNvbnRleHRNZW51PTU4XT0iQ29udGV4dE1lbnUiLGVbZS5GMT01OV09IkYxIixlW2UuRjI9NjBdPSJGMiIsZVtlLkYzPTYxXT0iRjMiLGVbZS5GND02Ml09IkY0IixlW2UuRjU9NjNdPSJGNSIsZVtlLkY2PTY0XT0iRjYiLGVbZS5GNz02NV09IkY3IixlW2UuRjg9NjZdPSJGOCIsZVtlLkY5PTY3XT0iRjkiLGVbZS5GMTA9NjhdPSJGMTAiLGVbZS5GMTE9NjldPSJGMTEiLGVbZS5GMTI9NzBdPSJGMTIiLGVbZS5GMTM9NzFdPSJGMTMiLGVbZS5GMTQ9NzJdPSJGMTQiLGVbZS5GMTU9NzNdPSJGMTUiLGVbZS5GMTY9NzRdPSJGMTYiLGVbZS5GMTc9NzVdPSJGMTciLGVbZS5GMTg9NzZdPSJGMTgiLGVbZS5GMTk9NzddPSJGMTkiLGVbZS5GMjA9NzhdPSJGMjAiLGVbZS5GMjE9NzldPSJGMjEiLGVbZS5GMjI9ODBdPSJGMjIiLGVbZS5GMjM9ODFdPSJGMjMiLGVbZS5GMjQ9ODJdPSJGMjQiLGVbZS5OdW1Mb2NrPTgzXT0iTnVtTG9jayIsZVtlLlNjcm9sbExvY2s9ODRdPSJTY3JvbGxMb2NrIixlW2UuU2VtaWNvbG9uPTg1XT0iU2VtaWNvbG9uIixlW2UuRXF1YWw9ODZdPSJFcXVhbCIsZVtlLkNvbW1hPTg3XT0iQ29tbWEiLGVbZS5NaW51cz04OF09Ik1pbnVzIixlW2UuUGVyaW9kPTg5XT0iUGVyaW9kIixlW2UuU2xhc2g9OTBdPSJTbGFzaCIsZVtlLkJhY2txdW90ZT05MV09IkJhY2txdW90ZSIsZVtlLkJyYWNrZXRMZWZ0PTkyXT0iQnJhY2tldExlZnQiLGVbZS5CYWNrc2xhc2g9OTNdPSJCYWNrc2xhc2giLGVbZS5CcmFja2V0UmlnaHQ9OTRdPSJCcmFja2V0UmlnaHQiLGVbZS5RdW90ZT05NV09IlF1b3RlIixlW2UuT0VNXzg9OTZdPSJPRU1fOCIsZVtlLkludGxCYWNrc2xhc2g9OTddPSJJbnRsQmFja3NsYXNoIixlW2UuTnVtcGFkMD05OF09Ik51bXBhZDAiLGVbZS5OdW1wYWQxPTk5XT0iTnVtcGFkMSIsZVtlLk51bXBhZDI9MTAwXT0iTnVtcGFkMiIsZVtlLk51bXBhZDM9MTAxXT0iTnVtcGFkMyIsZVtlLk51bXBhZDQ9MTAyXT0iTnVtcGFkNCIsZVtlLk51bXBhZDU9MTAzXT0iTnVtcGFkNSIsZVtlLk51bXBhZDY9MTA0XT0iTnVtcGFkNiIsZVtlLk51bXBhZDc9MTA1XT0iTnVtcGFkNyIsZVtlLk51bXBhZDg9MTA2XT0iTnVtcGFkOCIsZVtlLk51bXBhZDk9MTA3XT0iTnVtcGFkOSIsZVtlLk51bXBhZE11bHRpcGx5PTEwOF09Ik51bXBhZE11bHRpcGx5IixlW2UuTnVtcGFkQWRkPTEwOV09Ik51bXBhZEFkZCIsZVtlLk5VTVBBRF9TRVBBUkFUT1I9MTEwXT0iTlVNUEFEX1NFUEFSQVRPUiIsZVtlLk51bXBhZFN1YnRyYWN0PTExMV09Ik51bXBhZFN1YnRyYWN0IixlW2UuTnVtcGFkRGVjaW1hbD0xMTJdPSJOdW1wYWREZWNpbWFsIixlW2UuTnVtcGFkRGl2aWRlPTExM109Ik51bXBhZERpdmlkZSIsZVtlLktFWV9JTl9DT01QT1NJVElPTj0xMTRdPSJLRVlfSU5fQ09NUE9TSVRJT04iLGVbZS5BQk5UX0MxPTExNV09IkFCTlRfQzEiLGVbZS5BQk5UX0MyPTExNl09IkFCTlRfQzIiLGVbZS5BdWRpb1ZvbHVtZU11dGU9MTE3XT0iQXVkaW9Wb2x1bWVNdXRlIixlW2UuQXVkaW9Wb2x1bWVVcD0xMThdPSJBdWRpb1ZvbHVtZVVwIixlW2UuQXVkaW9Wb2x1bWVEb3duPTExOV09IkF1ZGlvVm9sdW1lRG93biIsZVtlLkJyb3dzZXJTZWFyY2g9MTIwXT0iQnJvd3NlclNlYXJjaCIsZVtlLkJyb3dzZXJIb21lPTEyMV09IkJyb3dzZXJIb21lIixlW2UuQnJvd3NlckJhY2s9MTIyXT0iQnJvd3NlckJhY2siLGVbZS5Ccm93c2VyRm9yd2FyZD0xMjNdPSJCcm93c2VyRm9yd2FyZCIsZVtlLk1lZGlhVHJhY2tOZXh0PTEyNF09Ik1lZGlhVHJhY2tOZXh0IixlW2UuTWVkaWFUcmFja1ByZXZpb3VzPTEyNV09Ik1lZGlhVHJhY2tQcmV2aW91cyIsZVtlLk1lZGlhU3RvcD0xMjZdPSJNZWRpYVN0b3AiLGVbZS5NZWRpYVBsYXlQYXVzZT0xMjddPSJNZWRpYVBsYXlQYXVzZSIsZVtlLkxhdW5jaE1lZGlhUGxheWVyPTEyOF09IkxhdW5jaE1lZGlhUGxheWVyIixlW2UuTGF1bmNoTWFpbD0xMjldPSJMYXVuY2hNYWlsIixlW2UuTGF1bmNoQXBwMj0xMzBdPSJMYXVuY2hBcHAyIixlW2UuQ2xlYXI9MTMxXT0iQ2xlYXIiLGVbZS5NQVhfVkFMVUU9MTMyXT0iTUFYX1ZBTFVFIn0pKFlufHwoWW49e30pKTt2YXIgS247KGZ1bmN0aW9uKGUpe2VbZS5IaW50PTFdPSJIaW50IixlW2UuSW5mbz0yXT0iSW5mbyIsZVtlLldhcm5pbmc9NF09Ildhcm5pbmciLGVbZS5FcnJvcj04XT0iRXJyb3IifSkoS258fChLbj17fSkpO3ZhciBlcjsoZnVuY3Rpb24oZSl7ZVtlLlVubmVjZXNzYXJ5PTFdPSJVbm5lY2Vzc2FyeSIsZVtlLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQifSkoZXJ8fChlcj17fSkpO3ZhciBxaTsoZnVuY3Rpb24oZSl7ZVtlLklubGluZT0xXT0iSW5saW5lIixlW2UuR3V0dGVyPTJdPSJHdXR0ZXIifSkocWl8fChxaT17fSkpO3ZhciBCaTsoZnVuY3Rpb24oZSl7ZVtlLk5vcm1hbD0xXT0iTm9ybWFsIixlW2UuVW5kZXJsaW5lZD0yXT0iVW5kZXJsaW5lZCJ9KShCaXx8KEJpPXt9KSk7dmFyIFVpOyhmdW5jdGlvbihlKXtlW2UuVU5LTk9XTj0wXT0iVU5LTk9XTiIsZVtlLlRFWFRBUkVBPTFdPSJURVhUQVJFQSIsZVtlLkdVVFRFUl9HTFlQSF9NQVJHSU49Ml09IkdVVFRFUl9HTFlQSF9NQVJHSU4iLGVbZS5HVVRURVJfTElORV9OVU1CRVJTPTNdPSJHVVRURVJfTElORV9OVU1CRVJTIixlW2UuR1VUVEVSX0xJTkVfREVDT1JBVElPTlM9NF09IkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TIixlW2UuR1VUVEVSX1ZJRVdfWk9ORT01XT0iR1VUVEVSX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfVEVYVD02XT0iQ09OVEVOVF9URVhUIixlW2UuQ09OVEVOVF9FTVBUWT03XT0iQ09OVEVOVF9FTVBUWSIsZVtlLkNPTlRFTlRfVklFV19aT05FPThdPSJDT05URU5UX1ZJRVdfWk9ORSIsZVtlLkNPTlRFTlRfV0lER0VUPTldPSJDT05URU5UX1dJREdFVCIsZVtlLk9WRVJWSUVXX1JVTEVSPTEwXT0iT1ZFUlZJRVdfUlVMRVIiLGVbZS5TQ1JPTExCQVI9MTFdPSJTQ1JPTExCQVIiLGVbZS5PVkVSTEFZX1dJREdFVD0xMl09Ik9WRVJMQVlfV0lER0VUIixlW2UuT1VUU0lERV9FRElUT1I9MTNdPSJPVVRTSURFX0VESVRPUiJ9KShVaXx8KFVpPXt9KSk7dmFyICRpOyhmdW5jdGlvbihlKXtlW2UuQUlHZW5lcmF0ZWQ9MV09IkFJR2VuZXJhdGVkIn0pKCRpfHwoJGk9e30pKTt2YXIgV2k7KGZ1bmN0aW9uKGUpe2VbZS5UT1BfUklHSFRfQ09STkVSPTBdPSJUT1BfUklHSFRfQ09STkVSIixlW2UuQk9UVE9NX1JJR0hUX0NPUk5FUj0xXT0iQk9UVE9NX1JJR0hUX0NPUk5FUiIsZVtlLlRPUF9DRU5URVI9Ml09IlRPUF9DRU5URVIifSkoV2l8fChXaT17fSkpO3ZhciBIaTsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSkoSGl8fChIaT17fSkpO3ZhciB6aTsoZnVuY3Rpb24oZSl7ZVtlLldvcmQ9MF09IldvcmQiLGVbZS5MaW5lPTFdPSJMaW5lIixlW2UuU3VnZ2VzdD0yXT0iU3VnZ2VzdCJ9KSh6aXx8KHppPXt9KSk7dmFyIEdpOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0wXT0iTGVmdCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLk5vbmU9Ml09Ik5vbmUiLGVbZS5MZWZ0T2ZJbmplY3RlZFRleHQ9M109IkxlZnRPZkluamVjdGVkVGV4dCIsZVtlLlJpZ2h0T2ZJbmplY3RlZFRleHQ9NF09IlJpZ2h0T2ZJbmplY3RlZFRleHQifSkoR2l8fChHaT17fSkpO3ZhciBKaTsoZnVuY3Rpb24oZSl7ZVtlLk9mZj0wXT0iT2ZmIixlW2UuT249MV09Ik9uIixlW2UuUmVsYXRpdmU9Ml09IlJlbGF0aXZlIixlW2UuSW50ZXJ2YWw9M109IkludGVydmFsIixlW2UuQ3VzdG9tPTRdPSJDdXN0b20ifSkoSml8fChKaT17fSkpO3ZhciBYaTsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5UZXh0PTFdPSJUZXh0IixlW2UuQmxvY2tzPTJdPSJCbG9ja3MifSkoWGl8fChYaT17fSkpO3ZhciBRaTsoZnVuY3Rpb24oZSl7ZVtlLlNtb290aD0wXT0iU21vb3RoIixlW2UuSW1tZWRpYXRlPTFdPSJJbW1lZGlhdGUifSkoUWl8fChRaT17fSkpO3ZhciBaaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG89MV09IkF1dG8iLGVbZS5IaWRkZW49Ml09IkhpZGRlbiIsZVtlLlZpc2libGU9M109IlZpc2libGUifSkoWml8fChaaT17fSkpO3ZhciB0cjsoZnVuY3Rpb24oZSl7ZVtlLkxUUj0wXT0iTFRSIixlW2UuUlRMPTFdPSJSVEwifSkodHJ8fCh0cj17fSkpO3ZhciBZaTsoZnVuY3Rpb24oZSl7ZS5PZmY9Im9mZiIsZS5PbkNvZGU9Im9uQ29kZSIsZS5Pbj0ib24ifSkoWWl8fChZaT17fSkpO3ZhciBLaTsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0xXT0iSW52b2tlIixlW2UuVHJpZ2dlckNoYXJhY3Rlcj0yXT0iVHJpZ2dlckNoYXJhY3RlciIsZVtlLkNvbnRlbnRDaGFuZ2U9M109IkNvbnRlbnRDaGFuZ2UifSkoS2l8fChLaT17fSkpO3ZhciBlczsoZnVuY3Rpb24oZSl7ZVtlLkZpbGU9MF09IkZpbGUiLGVbZS5Nb2R1bGU9MV09Ik1vZHVsZSIsZVtlLk5hbWVzcGFjZT0yXT0iTmFtZXNwYWNlIixlW2UuUGFja2FnZT0zXT0iUGFja2FnZSIsZVtlLkNsYXNzPTRdPSJDbGFzcyIsZVtlLk1ldGhvZD01XT0iTWV0aG9kIixlW2UuUHJvcGVydHk9Nl09IlByb3BlcnR5IixlW2UuRmllbGQ9N109IkZpZWxkIixlW2UuQ29uc3RydWN0b3I9OF09IkNvbnN0cnVjdG9yIixlW2UuRW51bT05XT0iRW51bSIsZVtlLkludGVyZmFjZT0xMF09IkludGVyZmFjZSIsZVtlLkZ1bmN0aW9uPTExXT0iRnVuY3Rpb24iLGVbZS5WYXJpYWJsZT0xMl09IlZhcmlhYmxlIixlW2UuQ29uc3RhbnQ9MTNdPSJDb25zdGFudCIsZVtlLlN0cmluZz0xNF09IlN0cmluZyIsZVtlLk51bWJlcj0xNV09Ik51bWJlciIsZVtlLkJvb2xlYW49MTZdPSJCb29sZWFuIixlW2UuQXJyYXk9MTddPSJBcnJheSIsZVtlLk9iamVjdD0xOF09Ik9iamVjdCIsZVtlLktleT0xOV09IktleSIsZVtlLk51bGw9MjBdPSJOdWxsIixlW2UuRW51bU1lbWJlcj0yMV09IkVudW1NZW1iZXIiLGVbZS5TdHJ1Y3Q9MjJdPSJTdHJ1Y3QiLGVbZS5FdmVudD0yM109IkV2ZW50IixlW2UuT3BlcmF0b3I9MjRdPSJPcGVyYXRvciIsZVtlLlR5cGVQYXJhbWV0ZXI9MjVdPSJUeXBlUGFyYW1ldGVyIn0pKGVzfHwoZXM9e30pKTt2YXIgdHM7KGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0pKHRzfHwodHM9e30pKTt2YXIgbnM7KGZ1bmN0aW9uKGUpe2VbZS5IaWRkZW49MF09IkhpZGRlbiIsZVtlLkJsaW5rPTFdPSJCbGluayIsZVtlLlNtb290aD0yXT0iU21vb3RoIixlW2UuUGhhc2U9M109IlBoYXNlIixlW2UuRXhwYW5kPTRdPSJFeHBhbmQiLGVbZS5Tb2xpZD01XT0iU29saWQifSkobnN8fChucz17fSkpO3ZhciByczsoZnVuY3Rpb24oZSl7ZVtlLkxpbmU9MV09IkxpbmUiLGVbZS5CbG9jaz0yXT0iQmxvY2siLGVbZS5VbmRlcmxpbmU9M109IlVuZGVybGluZSIsZVtlLkxpbmVUaGluPTRdPSJMaW5lVGhpbiIsZVtlLkJsb2NrT3V0bGluZT01XT0iQmxvY2tPdXRsaW5lIixlW2UuVW5kZXJsaW5lVGhpbj02XT0iVW5kZXJsaW5lVGhpbiJ9KShyc3x8KHJzPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0wXT0iQWx3YXlzR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLk5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcz0xXT0iTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZT0yXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0JlZm9yZSIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdBZnRlcj0zXT0iR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyIn0pKGlzfHwoaXM9e30pKTt2YXIgc3M7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuU2FtZT0xXT0iU2FtZSIsZVtlLkluZGVudD0yXT0iSW5kZW50IixlW2UuRGVlcEluZGVudD0zXT0iRGVlcEluZGVudCJ9KShzc3x8KHNzPXt9KSk7Y2xhc3MgUHR7c3RhdGljIGNob3JkKHQsbil7cmV0dXJuIGFsKHQsbil9fVB0LkN0cmxDbWQ9MjA0OCxQdC5TaGlmdD0xMDI0LFB0LkFsdD01MTIsUHQuV2luQ3RybD0yNTY7ZnVuY3Rpb24gaGwoKXtyZXR1cm57ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLENhbmNlbGxhdGlvblRva2VuU291cmNlOm5sLEVtaXR0ZXI6QWUsS2V5Q29kZTpZbixLZXlNb2Q6UHQsUG9zaXRpb246UGUsUmFuZ2U6c2UsU2VsZWN0aW9uOnhlLFNlbGVjdGlvbkRpcmVjdGlvbjp0cixNYXJrZXJTZXZlcml0eTpLbixNYXJrZXJUYWc6ZXIsVXJpOlVuLFRva2VuOmZsfX12YXIgYXM7Y2xhc3MgZGx7Y29uc3RydWN0b3IoKXt0aGlzW2FzXT0iTGlua2VkTWFwIix0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGU9MH1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZSsrfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5faGVhZCYmIXRoaXMuX3RhaWx9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1nZXQgZmlyc3QoKXt2YXIgdDtyZXR1cm4odD10aGlzLl9oZWFkKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQudmFsdWV9Z2V0IGxhc3QoKXt2YXIgdDtyZXR1cm4odD10aGlzLl90YWlsKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQudmFsdWV9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfWdldCh0LG49MCl7Y29uc3Qgcj10aGlzLl9tYXAuZ2V0KHQpO2lmKHIpcmV0dXJuIG4hPT0wJiZ0aGlzLnRvdWNoKHIsbiksci52YWx1ZX1zZXQodCxuLHI9MCl7bGV0IGk9dGhpcy5fbWFwLmdldCh0KTtpZihpKWkudmFsdWU9bixyIT09MCYmdGhpcy50b3VjaChpLHIpO2Vsc2V7c3dpdGNoKGk9e2tleTp0LHZhbHVlOm4sbmV4dDp2b2lkIDAscHJldmlvdXM6dm9pZCAwfSxyKXtjYXNlIDA6dGhpcy5hZGRJdGVtTGFzdChpKTticmVhaztjYXNlIDE6dGhpcy5hZGRJdGVtRmlyc3QoaSk7YnJlYWs7Y2FzZSAyOnRoaXMuYWRkSXRlbUxhc3QoaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmFkZEl0ZW1MYXN0KGkpO2JyZWFrfXRoaXMuX21hcC5zZXQodCxpKSx0aGlzLl9zaXplKyt9cmV0dXJuIHRoaXN9ZGVsZXRlKHQpe3JldHVybiEhdGhpcy5yZW1vdmUodCl9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtpZihuKXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXMucmVtb3ZlSXRlbShuKSx0aGlzLl9zaXplLS0sbi52YWx1ZX1zaGlmdCgpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbClyZXR1cm47aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7Y29uc3QgdD10aGlzLl9oZWFkO3JldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQua2V5KSx0aGlzLnJlbW92ZUl0ZW0odCksdGhpcy5fc2l6ZS0tLHQudmFsdWV9Zm9yRWFjaCh0LG4pe2NvbnN0IHI9dGhpcy5fc3RhdGU7bGV0IGk9dGhpcy5faGVhZDtmb3IoO2k7KXtpZihuP3QuYmluZChuKShpLnZhbHVlLGkua2V5LHRoaXMpOnQoaS52YWx1ZSxpLmtleSx0aGlzKSx0aGlzLl9zdGF0ZSE9PXIpdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aT1pLm5leHR9fWtleXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgcj10aGlzLl9oZWFkO2NvbnN0IGk9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIGl9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYocil7Y29uc3Qgcz17dmFsdWU6ci5rZXksZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9dmFsdWVzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IHI9dGhpcy5faGVhZDtjb25zdCBpPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBpfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKHIpe2NvbnN0IHM9e3ZhbHVlOnIudmFsdWUsZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9ZW50cmllcygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCByPXRoaXMuX2hlYWQ7Y29uc3QgaT17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gaX0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihyKXtjb25zdCBzPXt2YWx1ZTpbci5rZXksci52YWx1ZV0sZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9Wyhhcz1TeW1ib2wudG9TdHJpbmdUYWcsU3ltYm9sLml0ZXJhdG9yKV0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9dHJpbU9sZCh0KXtpZih0Pj10aGlzLnNpemUpcmV0dXJuO2lmKHQ9PT0wKXt0aGlzLmNsZWFyKCk7cmV0dXJufWxldCBuPXRoaXMuX2hlYWQscj10aGlzLnNpemU7Zm9yKDtuJiZyPnQ7KXRoaXMuX21hcC5kZWxldGUobi5rZXkpLG49bi5uZXh0LHItLTt0aGlzLl9oZWFkPW4sdGhpcy5fc2l6ZT1yLG4mJihuLnByZXZpb3VzPXZvaWQgMCksdGhpcy5fc3RhdGUrK31hZGRJdGVtRmlyc3QodCl7aWYoIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsKXRoaXMuX3RhaWw9dDtlbHNlIGlmKHRoaXMuX2hlYWQpdC5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz10O2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0aGlzLl9oZWFkPXQsdGhpcy5fc3RhdGUrK31hZGRJdGVtTGFzdCh0KXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpdGhpcy5faGVhZD10O2Vsc2UgaWYodGhpcy5fdGFpbCl0LnByZXZpb3VzPXRoaXMuX3RhaWwsdGhpcy5fdGFpbC5uZXh0PXQ7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3RoaXMuX3RhaWw9dCx0aGlzLl9zdGF0ZSsrfXJlbW92ZUl0ZW0odCl7aWYodD09PXRoaXMuX2hlYWQmJnQ9PT10aGlzLl90YWlsKXRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwO2Vsc2UgaWYodD09PXRoaXMuX2hlYWQpe2lmKCF0Lm5leHQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0Lm5leHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9dC5uZXh0fWVsc2UgaWYodD09PXRoaXMuX3RhaWwpe2lmKCF0LnByZXZpb3VzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dC5wcmV2aW91cy5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPXQucHJldmlvdXN9ZWxzZXtjb25zdCBuPXQubmV4dCxyPXQucHJldmlvdXM7aWYoIW58fCFyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7bi5wcmV2aW91cz1yLHIubmV4dD1ufXQubmV4dD12b2lkIDAsdC5wcmV2aW91cz12b2lkIDAsdGhpcy5fc3RhdGUrK310b3VjaCh0LG4pe2lmKCF0aGlzLl9oZWFkfHwhdGhpcy5fdGFpbCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO2lmKCEobiE9PTEmJm4hPT0yKSl7aWYobj09PTEpe2lmKHQ9PT10aGlzLl9oZWFkKXJldHVybjtjb25zdCByPXQubmV4dCxpPXQucHJldmlvdXM7dD09PXRoaXMuX3RhaWw/KGkubmV4dD12b2lkIDAsdGhpcy5fdGFpbD1pKTooci5wcmV2aW91cz1pLGkubmV4dD1yKSx0LnByZXZpb3VzPXZvaWQgMCx0Lm5leHQ9dGhpcy5faGVhZCx0aGlzLl9oZWFkLnByZXZpb3VzPXQsdGhpcy5faGVhZD10LHRoaXMuX3N0YXRlKyt9ZWxzZSBpZihuPT09Mil7aWYodD09PXRoaXMuX3RhaWwpcmV0dXJuO2NvbnN0IHI9dC5uZXh0LGk9dC5wcmV2aW91czt0PT09dGhpcy5faGVhZD8oci5wcmV2aW91cz12b2lkIDAsdGhpcy5faGVhZD1yKTooci5wcmV2aW91cz1pLGkubmV4dD1yKSx0Lm5leHQ9dm9pZCAwLHQucHJldmlvdXM9dGhpcy5fdGFpbCx0aGlzLl90YWlsLm5leHQ9dCx0aGlzLl90YWlsPXQsdGhpcy5fc3RhdGUrK319fXRvSlNPTigpe2NvbnN0IHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgobixyKT0+e3QucHVzaChbcixuXSl9KSx0fWZyb21KU09OKHQpe3RoaXMuY2xlYXIoKTtmb3IoY29uc3RbbixyXW9mIHQpdGhpcy5zZXQobixyKX19Y2xhc3MgZ2wgZXh0ZW5kcyBkbHtjb25zdHJ1Y3Rvcih0LG49MSl7c3VwZXIoKSx0aGlzLl9saW1pdD10LHRoaXMuX3JhdGlvPU1hdGgubWluKE1hdGgubWF4KDAsbiksMSl9Z2V0IGxpbWl0KCl7cmV0dXJuIHRoaXMuX2xpbWl0fXNldCBsaW1pdCh0KXt0aGlzLl9saW1pdD10LHRoaXMuY2hlY2tUcmltKCl9Z2V0KHQsbj0yKXtyZXR1cm4gc3VwZXIuZ2V0KHQsbil9cGVlayh0KXtyZXR1cm4gc3VwZXIuZ2V0KHQsMCl9c2V0KHQsbil7cmV0dXJuIHN1cGVyLnNldCh0LG4sMiksdGhpcy5jaGVja1RyaW0oKSx0aGlzfWNoZWNrVHJpbSgpe3RoaXMuc2l6ZT50aGlzLl9saW1pdCYmdGhpcy50cmltT2xkKE1hdGgucm91bmQodGhpcy5fbGltaXQqdGhpcy5fcmF0aW8pKX19Y2xhc3MgbWx7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfWFkZCh0LG4pe2xldCByPXRoaXMubWFwLmdldCh0KTtyfHwocj1uZXcgU2V0LHRoaXMubWFwLnNldCh0LHIpKSxyLmFkZChuKX1kZWxldGUodCxuKXtjb25zdCByPXRoaXMubWFwLmdldCh0KTtyJiYoci5kZWxldGUobiksci5zaXplPT09MCYmdGhpcy5tYXAuZGVsZXRlKHQpKX1mb3JFYWNoKHQsbil7Y29uc3Qgcj10aGlzLm1hcC5nZXQodCk7ciYmci5mb3JFYWNoKG4pfWdldCh0KXtjb25zdCBuPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gbnx8bmV3IFNldH19bmV3IGdsKDEwKTt2YXIgb3M7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0pKG9zfHwob3M9e30pKTt2YXIgbHM7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD0zXT0iUmlnaHQifSkobHN8fChscz17fSkpO3ZhciB1czsoZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KSh1c3x8KHVzPXt9KSk7ZnVuY3Rpb24gcGwoZSx0LG4scixpKXtpZihyPT09MClyZXR1cm4hMDtjb25zdCBzPXQuY2hhckNvZGVBdChyLTEpO2lmKGUuZ2V0KHMpIT09MHx8cz09PTEzfHxzPT09MTApcmV0dXJuITA7aWYoaT4wKXtjb25zdCBhPXQuY2hhckNvZGVBdChyKTtpZihlLmdldChhKSE9PTApcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdmwoZSx0LG4scixpKXtpZihyK2k9PT1uKXJldHVybiEwO2NvbnN0IHM9dC5jaGFyQ29kZUF0KHIraSk7aWYoZS5nZXQocykhPT0wfHxzPT09MTN8fHM9PT0xMClyZXR1cm4hMDtpZihpPjApe2NvbnN0IGE9dC5jaGFyQ29kZUF0KHIraS0xKTtpZihlLmdldChhKSE9PTApcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gYmwoZSx0LG4scixpKXtyZXR1cm4gcGwoZSx0LG4scixpKSYmdmwoZSx0LG4scixpKX1jbGFzcyB4bHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX3dvcmRTZXBhcmF0b3JzPXQsdGhpcy5fc2VhcmNoUmVnZXg9bix0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfXJlc2V0KHQpe3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleD10LHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9bmV4dCh0KXtjb25zdCBuPXQubGVuZ3RoO2xldCByO2Rve2lmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgrdGhpcy5fcHJldk1hdGNoTGVuZ3RoPT09bnx8KHI9dGhpcy5fc2VhcmNoUmVnZXguZXhlYyh0KSwhcikpcmV0dXJuIG51bGw7Y29uc3QgaT1yLmluZGV4LHM9clswXS5sZW5ndGg7aWYoaT09PXRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXgmJnM9PT10aGlzLl9wcmV2TWF0Y2hMZW5ndGgpe2lmKHM9PT0wKXtsbyh0LG4sdGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4KT42NTUzNT90aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTI6dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0xO2NvbnRpbnVlfXJldHVybiBudWxsfWlmKHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9aSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9cywhdGhpcy5fd29yZFNlcGFyYXRvcnN8fGJsKHRoaXMuX3dvcmRTZXBhcmF0b3JzLHQsbixpLHMpKXJldHVybiByfXdoaWxlKHIpO3JldHVybiBudWxsfX1mdW5jdGlvbiB5bChlLHQ9IlVucmVhY2hhYmxlIil7dGhyb3cgbmV3IEVycm9yKHQpfWZ1bmN0aW9uIGZuKGUpe2lmKCFlKCkpe2RlYnVnZ2VyO2UoKSxEcihuZXcgamUoIkFzc2VydGlvbiBGYWlsZWQiKSl9fWZ1bmN0aW9uIGNzKGUsdCl7bGV0IG49MDtmb3IoO248ZS5sZW5ndGgtMTspe2NvbnN0IHI9ZVtuXSxpPWVbbisxXTtpZighdChyLGkpKXJldHVybiExO24rK31yZXR1cm4hMH1jbGFzcyB3bHtzdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQsbixyKXtjb25zdCBpPXI/ci5zdGFydExpbmVOdW1iZXI6MSxzPXI/ci5lbmRMaW5lTnVtYmVyOnQuZ2V0TGluZUNvdW50KCksYT1uZXcgZnMobiksbz1hLmdldENhbmRpZGF0ZUNvZGVQb2ludHMoKTtsZXQgbDtvPT09ImFsbE5vbkJhc2ljQXNjaWkiP2w9bmV3IFJlZ0V4cCgiW15cXHRcXG5cXHJcXHgyMC1cXHg3RV0iLCJnIik6bD1uZXcgUmVnRXhwKGAke19sKEFycmF5LmZyb20obykpfWAsImciKTtjb25zdCB1PW5ldyB4bChudWxsLGwpLGY9W107bGV0IGg9ITEsZCxnPTAsbT0wLHY9MDtlOmZvcihsZXQgcD1pLHg9cztwPD14O3ArKyl7Y29uc3QgeT10LmdldExpbmVDb250ZW50KHApLGI9eS5sZW5ndGg7dS5yZXNldCgwKTtkbyBpZihkPXUubmV4dCh5KSxkKXtsZXQgTD1kLmluZGV4LFM9ZC5pbmRleCtkWzBdLmxlbmd0aDtpZihMPjApe2NvbnN0IE09eS5jaGFyQ29kZUF0KEwtMSk7am4oTSkmJkwtLX1pZihTKzE8Yil7Y29uc3QgTT15LmNoYXJDb2RlQXQoUy0xKTtqbihNKSYmUysrfWNvbnN0IF89eS5zdWJzdHJpbmcoTCxTKTtsZXQgTj1IbihMKzEsaWkseSwwKTtOJiZOLmVuZENvbHVtbjw9TCsxJiYoTj1udWxsKTtjb25zdCBBPWEuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSShfLE4/Ti53b3JkOm51bGwpO2lmKEEhPT0wKXtpZihBPT09Mz9nKys6QT09PTI/bSsrOkE9PT0xP3YrKzp5bCgpLGYubGVuZ3RoPj0xZTMpe2g9ITA7YnJlYWsgZX1mLnB1c2gobmV3IHNlKHAsTCsxLHAsUysxKSl9fXdoaWxlKGQpfXJldHVybntyYW5nZXM6ZixoYXNNb3JlOmgsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6ZyxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDptLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDp2fX1zdGF0aWMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRSZWFzb24odCxuKXtjb25zdCByPW5ldyBmcyhuKTtzd2l0Y2goci5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKHQsbnVsbCkpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDI6cmV0dXJue2tpbmQ6MX07Y2FzZSAzOntjb25zdCBzPXQuY29kZVBvaW50QXQoMCksYT1yLmFtYmlndW91c0NoYXJhY3RlcnMuZ2V0UHJpbWFyeUNvbmZ1c2FibGUocyksbz1ydC5nZXRMb2NhbGVzKCkuZmlsdGVyKGw9PiFydC5nZXRJbnN0YW5jZShuZXcgU2V0KFsuLi5uLmFsbG93ZWRMb2NhbGVzLGxdKSkuaXNBbWJpZ3VvdXMocykpO3JldHVybntraW5kOjAsY29uZnVzYWJsZVdpdGg6U3RyaW5nLmZyb21Db2RlUG9pbnQoYSksbm90QW1iaWd1b3VzSW5Mb2NhbGVzOm99fWNhc2UgMTpyZXR1cm57a2luZDoyfX19fWZ1bmN0aW9uIF9sKGUsdCl7cmV0dXJuYFske25vKGUubWFwKHI9PlN0cmluZy5mcm9tQ29kZVBvaW50KHIpKS5qb2luKCIiKSl9XWB9Y2xhc3MgZnN7Y29uc3RydWN0b3IodCl7dGhpcy5vcHRpb25zPXQsdGhpcy5hbGxvd2VkQ29kZVBvaW50cz1uZXcgU2V0KHQuYWxsb3dlZENvZGVQb2ludHMpLHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycz1ydC5nZXRJbnN0YW5jZShuZXcgU2V0KHQuYWxsb3dlZExvY2FsZXMpKX1nZXRDYW5kaWRhdGVDb2RlUG9pbnRzKCl7aWYodGhpcy5vcHRpb25zLm5vbkJhc2ljQVNDSUkpcmV0dXJuImFsbE5vbkJhc2ljQXNjaWkiO2NvbnN0IHQ9bmV3IFNldDtpZih0aGlzLm9wdGlvbnMuaW52aXNpYmxlQ2hhcmFjdGVycylmb3IoY29uc3QgbiBvZiBIZS5jb2RlUG9pbnRzKWhzKFN0cmluZy5mcm9tQ29kZVBvaW50KG4pKXx8dC5hZGQobik7aWYodGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMpZm9yKGNvbnN0IG4gb2YgdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCkpdC5hZGQobik7Zm9yKGNvbnN0IG4gb2YgdGhpcy5hbGxvd2VkQ29kZVBvaW50cyl0LmRlbGV0ZShuKTtyZXR1cm4gdH1zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKHQsbil7Y29uc3Qgcj10LmNvZGVQb2ludEF0KDApO2lmKHRoaXMuYWxsb3dlZENvZGVQb2ludHMuaGFzKHIpKXJldHVybiAwO2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiAxO2xldCBpPSExLHM9ITE7aWYobilmb3IoY29uc3QgYSBvZiBuKXtjb25zdCBvPWEuY29kZVBvaW50QXQoMCksbD1jbyhhKTtpPWl8fGwsIWwmJiF0aGlzLmFtYmlndW91c0NoYXJhY3RlcnMuaXNBbWJpZ3VvdXMobykmJiFIZS5pc0ludmlzaWJsZUNoYXJhY3RlcihvKSYmKHM9ITApfXJldHVybiFpJiZzPzA6dGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMmJiFocyh0KSYmSGUuaXNJbnZpc2libGVDaGFyYWN0ZXIocik/Mjp0aGlzLm9wdGlvbnMuYW1iaWd1b3VzQ2hhcmFjdGVycyYmdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKHIpPzM6MH19ZnVuY3Rpb24gaHMoZSl7cmV0dXJuIGU9PT0iICJ8fGU9PT1gCmB8fGU9PT0iCSJ9Y2xhc3MgaG57Y29uc3RydWN0b3IodCxuLHIpe3RoaXMuY2hhbmdlcz10LHRoaXMubW92ZXM9bix0aGlzLmhpdFRpbWVvdXQ9cn19Y2xhc3MgU2x7Y29uc3RydWN0b3IodCxuKXt0aGlzLmxpbmVSYW5nZU1hcHBpbmc9dCx0aGlzLmNoYW5nZXM9bn19Y2xhc3MgentzdGF0aWMgYWRkUmFuZ2UodCxuKXtsZXQgcj0wO2Zvcig7cjxuLmxlbmd0aCYmbltyXS5lbmRFeGNsdXNpdmU8dC5zdGFydDspcisrO2xldCBpPXI7Zm9yKDtpPG4ubGVuZ3RoJiZuW2ldLnN0YXJ0PD10LmVuZEV4Y2x1c2l2ZTspaSsrO2lmKHI9PT1pKW4uc3BsaWNlKHIsMCx0KTtlbHNle2NvbnN0IHM9TWF0aC5taW4odC5zdGFydCxuW3JdLnN0YXJ0KSxhPU1hdGgubWF4KHQuZW5kRXhjbHVzaXZlLG5baS0xXS5lbmRFeGNsdXNpdmUpO24uc3BsaWNlKHIsaS1yLG5ldyB6KHMsYSkpfX1zdGF0aWMgdHJ5Q3JlYXRlKHQsbil7aWYoISh0Pm4pKXJldHVybiBuZXcgeih0LG4pfXN0YXRpYyBvZkxlbmd0aCh0KXtyZXR1cm4gbmV3IHooMCx0KX1zdGF0aWMgb2ZTdGFydEFuZExlbmd0aCh0LG4pe3JldHVybiBuZXcgeih0LHQrbil9Y29uc3RydWN0b3IodCxuKXtpZih0aGlzLnN0YXJ0PXQsdGhpcy5lbmRFeGNsdXNpdmU9bix0Pm4pdGhyb3cgbmV3IGplKGBJbnZhbGlkIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKX1nZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLnN0YXJ0PT09dGhpcy5lbmRFeGNsdXNpdmV9ZGVsdGEodCl7cmV0dXJuIG5ldyB6KHRoaXMuc3RhcnQrdCx0aGlzLmVuZEV4Y2x1c2l2ZSt0KX1kZWx0YVN0YXJ0KHQpe3JldHVybiBuZXcgeih0aGlzLnN0YXJ0K3QsdGhpcy5lbmRFeGNsdXNpdmUpfWRlbHRhRW5kKHQpe3JldHVybiBuZXcgeih0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlK3QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmRFeGNsdXNpdmUtdGhpcy5zdGFydH10b1N0cmluZygpe3JldHVybmBbJHt0aGlzLnN0YXJ0fSwgJHt0aGlzLmVuZEV4Y2x1c2l2ZX0pYH1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5zdGFydDw9dCYmdDx0aGlzLmVuZEV4Y2x1c2l2ZX1qb2luKHQpe3JldHVybiBuZXcgeihNYXRoLm1pbih0aGlzLnN0YXJ0LHQuc3RhcnQpLE1hdGgubWF4KHRoaXMuZW5kRXhjbHVzaXZlLHQuZW5kRXhjbHVzaXZlKSl9aW50ZXJzZWN0KHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydCx0LnN0YXJ0KSxyPU1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLHQuZW5kRXhjbHVzaXZlKTtpZihuPD1yKXJldHVybiBuZXcgeihuLHIpfWludGVyc2VjdHModCl7Y29uc3Qgbj1NYXRoLm1heCh0aGlzLnN0YXJ0LHQuc3RhcnQpLHI9TWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUsdC5lbmRFeGNsdXNpdmUpO3JldHVybiBuPHJ9aXNCZWZvcmUodCl7cmV0dXJuIHRoaXMuZW5kRXhjbHVzaXZlPD10LnN0YXJ0fWlzQWZ0ZXIodCl7cmV0dXJuIHRoaXMuc3RhcnQ+PXQuZW5kRXhjbHVzaXZlfXNsaWNlKHQpe3JldHVybiB0LnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUpfXN1YnN0cmluZyh0KXtyZXR1cm4gdC5zdWJzdHJpbmcodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSl9Y2xpcCh0KXtpZih0aGlzLmlzRW1wdHkpdGhyb3cgbmV3IGplKGBJbnZhbGlkIGNsaXBwaW5nIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKTtyZXR1cm4gTWF0aC5tYXgodGhpcy5zdGFydCxNYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZS0xLHQpKX1jbGlwQ3ljbGljKHQpe2lmKHRoaXMuaXNFbXB0eSl0aHJvdyBuZXcgamUoYEludmFsaWQgY2xpcHBpbmcgcmFuZ2U6ICR7dGhpcy50b1N0cmluZygpfWApO3JldHVybiB0PHRoaXMuc3RhcnQ/dGhpcy5lbmRFeGNsdXNpdmUtKHRoaXMuc3RhcnQtdCkldGhpcy5sZW5ndGg6dD49dGhpcy5lbmRFeGNsdXNpdmU/dGhpcy5zdGFydCsodC10aGlzLnN0YXJ0KSV0aGlzLmxlbmd0aDp0fWZvckVhY2godCl7Zm9yKGxldCBuPXRoaXMuc3RhcnQ7bjx0aGlzLmVuZEV4Y2x1c2l2ZTtuKyspdChuKX19ZnVuY3Rpb24geHQoZSx0KXtjb25zdCBuPUZ0KGUsdCk7cmV0dXJuIG49PT0tMT92b2lkIDA6ZVtuXX1mdW5jdGlvbiBGdChlLHQsbj0wLHI9ZS5sZW5ndGgpe2xldCBpPW4scz1yO2Zvcig7aTxzOyl7Y29uc3QgYT1NYXRoLmZsb29yKChpK3MpLzIpO3QoZVthXSk/aT1hKzE6cz1hfXJldHVybiBpLTF9ZnVuY3Rpb24gTGwoZSx0KXtjb25zdCBuPW5yKGUsdCk7cmV0dXJuIG49PT1lLmxlbmd0aD92b2lkIDA6ZVtuXX1mdW5jdGlvbiBucihlLHQsbj0wLHI9ZS5sZW5ndGgpe2xldCBpPW4scz1yO2Zvcig7aTxzOyl7Y29uc3QgYT1NYXRoLmZsb29yKChpK3MpLzIpO3QoZVthXSk/cz1hOmk9YSsxfXJldHVybiBpfWNsYXNzIEl0e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2FycmF5PXQsdGhpcy5fZmluZExhc3RNb25vdG9ub3VzTGFzdElkeD0wfWZpbmRMYXN0TW9ub3Rvbm91cyh0KXtpZihJdC5hc3NlcnRJbnZhcmlhbnRzKXtpZih0aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGUpe2Zvcihjb25zdCByIG9mIHRoaXMuX2FycmF5KWlmKHRoaXMuX3ByZXZGaW5kTGFzdFByZWRpY2F0ZShyKSYmIXQocikpdGhyb3cgbmV3IEVycm9yKCJNb25vdG9ub3VzQXJyYXk6IGN1cnJlbnQgcHJlZGljYXRlIG11c3QgYmUgd2Vha2VyIHRoYW4gKG9yIGVxdWFsIHRvKSB0aGUgcHJldmlvdXMgcHJlZGljYXRlLiIpfXRoaXMuX3ByZXZGaW5kTGFzdFByZWRpY2F0ZT10fWNvbnN0IG49RnQodGhpcy5fYXJyYXksdCx0aGlzLl9maW5kTGFzdE1vbm90b25vdXNMYXN0SWR4KTtyZXR1cm4gdGhpcy5fZmluZExhc3RNb25vdG9ub3VzTGFzdElkeD1uKzEsbj09PS0xP3ZvaWQgMDp0aGlzLl9hcnJheVtuXX19SXQuYXNzZXJ0SW52YXJpYW50cz0hMTtjbGFzcyBIe3N0YXRpYyBmcm9tUmFuZ2VJbmNsdXNpdmUodCl7cmV0dXJuIG5ldyBIKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlcisxKX1zdGF0aWMgam9pbk1hbnkodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybltdO2xldCBuPW5ldyBGZSh0WzBdLnNsaWNlKCkpO2ZvcihsZXQgcj0xO3I8dC5sZW5ndGg7cisrKW49bi5nZXRVbmlvbihuZXcgRmUodFtyXS5zbGljZSgpKSk7cmV0dXJuIG4ucmFuZ2VzfXN0YXRpYyBqb2luKHQpe2lmKHQubGVuZ3RoPT09MCl0aHJvdyBuZXcgamUoImxpbmVSYW5nZXMgY2Fubm90IGJlIGVtcHR5Iik7bGV0IG49dFswXS5zdGFydExpbmVOdW1iZXIscj10WzBdLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7Zm9yKGxldCBpPTE7aTx0Lmxlbmd0aDtpKyspbj1NYXRoLm1pbihuLHRbaV0uc3RhcnRMaW5lTnVtYmVyKSxyPU1hdGgubWF4KHIsdFtpXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gbmV3IEgobixyKX1zdGF0aWMgb2ZMZW5ndGgodCxuKXtyZXR1cm4gbmV3IEgodCx0K24pfXN0YXRpYyBkZXNlcmlhbGl6ZSh0KXtyZXR1cm4gbmV3IEgodFswXSx0WzFdKX1jb25zdHJ1Y3Rvcih0LG4pe2lmKHQ+bil0aHJvdyBuZXcgamUoYHN0YXJ0TGluZU51bWJlciAke3R9IGNhbm5vdCBiZSBhZnRlciBlbmRMaW5lTnVtYmVyRXhjbHVzaXZlICR7bn1gKTt0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT1ufWNvbnRhaW5zKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjw9dCYmdDx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI9PT10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZGVsdGEodCl7cmV0dXJuIG5ldyBIKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWRlbHRhTGVuZ3RoKHQpe3JldHVybiBuZXcgSCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrdCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtdGhpcy5zdGFydExpbmVOdW1iZXJ9am9pbih0KXtyZXR1cm4gbmV3IEgoTWF0aC5taW4odGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLE1hdGgubWF4KHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKX10b1N0cmluZygpe3JldHVybmBbJHt0aGlzLnN0YXJ0TGluZU51bWJlcn0sJHt0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9KWB9aW50ZXJzZWN0KHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLHI9TWF0aC5taW4odGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7aWYobjw9cilyZXR1cm4gbmV3IEgobixyKX1pbnRlcnNlY3RzU3RyaWN0KHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1vdmVybGFwT3JUb3VjaCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmdC5zdGFydExpbmVOdW1iZXI8PXRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1lcXVhbHModCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJnRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX10b0luY2x1c2l2ZVJhbmdlKCl7cmV0dXJuIHRoaXMuaXNFbXB0eT9udWxsOm5ldyBzZSh0aGlzLnN0YXJ0TGluZU51bWJlciwxLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKX10b0V4Y2x1c2l2ZVJhbmdlKCl7cmV0dXJuIG5ldyBzZSh0aGlzLnN0YXJ0TGluZU51bWJlciwxLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKX1tYXBUb0xpbmVBcnJheSh0KXtjb25zdCBuPVtdO2ZvcihsZXQgcj10aGlzLnN0YXJ0TGluZU51bWJlcjtyPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTtyKyspbi5wdXNoKHQocikpO3JldHVybiBufWZvckVhY2godCl7Zm9yKGxldCBuPXRoaXMuc3RhcnRMaW5lTnVtYmVyO248dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO24rKyl0KG4pfXNlcmlhbGl6ZSgpe3JldHVyblt0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmVdfWluY2x1ZGVzKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjw9dCYmdDx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9dG9PZmZzZXRSYW5nZSgpe3JldHVybiBuZXcgeih0aGlzLnN0YXJ0TGluZU51bWJlci0xLHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xKX19Y2xhc3MgRmV7Y29uc3RydWN0b3IodD1bXSl7dGhpcy5fbm9ybWFsaXplZFJhbmdlcz10fWdldCByYW5nZXMoKXtyZXR1cm4gdGhpcy5fbm9ybWFsaXplZFJhbmdlc31hZGRSYW5nZSh0KXtpZih0Lmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IG49bnIodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxpPT5pLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PXQuc3RhcnRMaW5lTnVtYmVyKSxyPUZ0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsaT0+aS5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkrMTtpZihuPT09cil0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLnNwbGljZShuLDAsdCk7ZWxzZSBpZihuPT09ci0xKXtjb25zdCBpPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbbl07dGhpcy5fbm9ybWFsaXplZFJhbmdlc1tuXT1pLmpvaW4odCl9ZWxzZXtjb25zdCBpPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbbl0uam9pbih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzW3ItMV0pLmpvaW4odCk7dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5zcGxpY2UobixyLW4saSl9fWNvbnRhaW5zKHQpe2NvbnN0IG49eHQodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxyPT5yLnN0YXJ0TGluZU51bWJlcjw9dCk7cmV0dXJuISFuJiZuLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+dH1pbnRlcnNlY3RzKHQpe2NvbnN0IG49eHQodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxyPT5yLnN0YXJ0TGluZU51bWJlcjx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpO3JldHVybiEhbiYmbi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnQuc3RhcnRMaW5lTnVtYmVyfWdldFVuaW9uKHQpe2lmKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoPT09MClyZXR1cm4gdDtpZih0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD09PTApcmV0dXJuIHRoaXM7Y29uc3Qgbj1bXTtsZXQgcj0wLGk9MCxzPW51bGw7Zm9yKDtyPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RofHxpPHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoOyl7bGV0IGE9bnVsbDtpZihyPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoJiZpPHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoKXtjb25zdCBvPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbcl0sbD10Ll9ub3JtYWxpemVkUmFuZ2VzW2ldO28uc3RhcnRMaW5lTnVtYmVyPGwuc3RhcnRMaW5lTnVtYmVyPyhhPW8scisrKTooYT1sLGkrKyl9ZWxzZSByPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoPyhhPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbcl0scisrKTooYT10Ll9ub3JtYWxpemVkUmFuZ2VzW2ldLGkrKyk7cz09PW51bGw/cz1hOnMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT49YS5zdGFydExpbmVOdW1iZXI/cz1uZXcgSChzLnN0YXJ0TGluZU51bWJlcixNYXRoLm1heChzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSk6KG4ucHVzaChzKSxzPWEpfXJldHVybiBzIT09bnVsbCYmbi5wdXNoKHMpLG5ldyBGZShuKX1zdWJ0cmFjdEZyb20odCl7Y29uc3Qgbj1ucih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLGE9PmEuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT49dC5zdGFydExpbmVOdW1iZXIpLHI9RnQodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxhPT5hLnN0YXJ0TGluZU51bWJlcjw9dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSsxO2lmKG49PT1yKXJldHVybiBuZXcgRmUoW3RdKTtjb25zdCBpPVtdO2xldCBzPXQuc3RhcnRMaW5lTnVtYmVyO2ZvcihsZXQgYT1uO2E8cjthKyspe2NvbnN0IG89dGhpcy5fbm9ybWFsaXplZFJhbmdlc1thXTtvLnN0YXJ0TGluZU51bWJlcj5zJiZpLnB1c2gobmV3IEgocyxvLnN0YXJ0TGluZU51bWJlcikpLHM9by5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfXJldHVybiBzPHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmaS5wdXNoKG5ldyBIKHMsdC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSksbmV3IEZlKGkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubWFwKHQ9PnQudG9TdHJpbmcoKSkuam9pbigiLCAiKX1nZXRJbnRlcnNlY3Rpb24odCl7Y29uc3Qgbj1bXTtsZXQgcj0wLGk9MDtmb3IoO3I8dGhpcy5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGgmJmk8dC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg7KXtjb25zdCBzPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbcl0sYT10Ll9ub3JtYWxpemVkUmFuZ2VzW2ldLG89cy5pbnRlcnNlY3QoYSk7byYmIW8uaXNFbXB0eSYmbi5wdXNoKG8pLHMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxhLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU/cisrOmkrK31yZXR1cm4gbmV3IEZlKG4pfWdldFdpdGhEZWx0YSh0KXtyZXR1cm4gbmV3IEZlKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubWFwKG49Pm4uZGVsdGEodCkpKX19Y2xhc3MgRWV7c3RhdGljIGludmVyc2UodCxuLHIpe2NvbnN0IGk9W107bGV0IHM9MSxhPTE7Zm9yKGNvbnN0IGwgb2YgdCl7Y29uc3QgdT1uZXcgRWUobmV3IEgocyxsLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciksbmV3IEgoYSxsLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpO3UubW9kaWZpZWQuaXNFbXB0eXx8aS5wdXNoKHUpLHM9bC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGE9bC5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWNvbnN0IG89bmV3IEVlKG5ldyBIKHMsbisxKSxuZXcgSChhLHIrMSkpO3JldHVybiBvLm1vZGlmaWVkLmlzRW1wdHl8fGkucHVzaChvKSxpfXN0YXRpYyBjbGlwKHQsbixyKXtjb25zdCBpPVtdO2Zvcihjb25zdCBzIG9mIHQpe2NvbnN0IGE9cy5vcmlnaW5hbC5pbnRlcnNlY3Qobiksbz1zLm1vZGlmaWVkLmludGVyc2VjdChyKTthJiYhYS5pc0VtcHR5JiZvJiYhby5pc0VtcHR5JiZpLnB1c2gobmV3IEVlKGEsbykpfXJldHVybiBpfWNvbnN0cnVjdG9yKHQsbil7dGhpcy5vcmlnaW5hbD10LHRoaXMubW9kaWZpZWQ9bn10b1N0cmluZygpe3JldHVybmB7JHt0aGlzLm9yaWdpbmFsLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWQudG9TdHJpbmcoKX19YH1mbGlwKCl7cmV0dXJuIG5ldyBFZSh0aGlzLm1vZGlmaWVkLHRoaXMub3JpZ2luYWwpfWpvaW4odCl7cmV0dXJuIG5ldyBFZSh0aGlzLm9yaWdpbmFsLmpvaW4odC5vcmlnaW5hbCksdGhpcy5tb2RpZmllZC5qb2luKHQubW9kaWZpZWQpKX19Y2xhc3MgcWUgZXh0ZW5kcyBFZXtzdGF0aWMgZnJvbVJhbmdlTWFwcGluZ3ModCl7Y29uc3Qgbj1ILmpvaW4odC5tYXAoaT0+SC5mcm9tUmFuZ2VJbmNsdXNpdmUoaS5vcmlnaW5hbFJhbmdlKSkpLHI9SC5qb2luKHQubWFwKGk9PkguZnJvbVJhbmdlSW5jbHVzaXZlKGkubW9kaWZpZWRSYW5nZSkpKTtyZXR1cm4gbmV3IHFlKG4scix0KX1jb25zdHJ1Y3Rvcih0LG4scil7c3VwZXIodCxuKSx0aGlzLmlubmVyQ2hhbmdlcz1yfWZsaXAoKXt2YXIgdDtyZXR1cm4gbmV3IHFlKHRoaXMubW9kaWZpZWQsdGhpcy5vcmlnaW5hbCwodD10aGlzLmlubmVyQ2hhbmdlcyk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0Lm1hcChuPT5uLmZsaXAoKSkpfXdpdGhJbm5lckNoYW5nZXNGcm9tTGluZVJhbmdlcygpe3JldHVybiBuZXcgcWUodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLFtuZXcgeXQodGhpcy5vcmlnaW5hbC50b0V4Y2x1c2l2ZVJhbmdlKCksdGhpcy5tb2RpZmllZC50b0V4Y2x1c2l2ZVJhbmdlKCkpXSl9fWNsYXNzIHl0e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vcmlnaW5hbFJhbmdlPXQsdGhpcy5tb2RpZmllZFJhbmdlPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbFJhbmdlLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWRSYW5nZS50b1N0cmluZygpfX1gfWZsaXAoKXtyZXR1cm4gbmV3IHl0KHRoaXMubW9kaWZpZWRSYW5nZSx0aGlzLm9yaWdpbmFsUmFuZ2UpfX1jb25zdCBObD0zO2NsYXNzIEFse2NvbXB1dGVEaWZmKHQsbixyKXt2YXIgaTtjb25zdCBhPW5ldyBFbCh0LG4se21heENvbXB1dGF0aW9uVGltZTpyLm1heENvbXB1dGF0aW9uVGltZU1zLHNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlOnIuaWdub3JlVHJpbVdoaXRlc3BhY2Usc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzOiEwLHNob3VsZE1ha2VQcmV0dHlEaWZmOiEwLHNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM6ITB9KS5jb21wdXRlRGlmZigpLG89W107bGV0IGw9bnVsbDtmb3IoY29uc3QgdSBvZiBhLmNoYW5nZXMpe2xldCBmO3Uub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09MD9mPW5ldyBIKHUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIrMSx1Lm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyKzEpOmY9bmV3IEgodS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcix1Lm9yaWdpbmFsRW5kTGluZU51bWJlcisxKTtsZXQgaDt1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PTA/aD1uZXcgSCh1Lm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyKzEsdS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcisxKTpoPW5ldyBIKHUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsdS5tb2RpZmllZEVuZExpbmVOdW1iZXIrMSk7bGV0IGQ9bmV3IHFlKGYsaCwoaT11LmNoYXJDaGFuZ2VzKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkubWFwKGc9Pm5ldyB5dChuZXcgc2UoZy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcixnLm9yaWdpbmFsU3RhcnRDb2x1bW4sZy5vcmlnaW5hbEVuZExpbmVOdW1iZXIsZy5vcmlnaW5hbEVuZENvbHVtbiksbmV3IHNlKGcubW9kaWZpZWRTdGFydExpbmVOdW1iZXIsZy5tb2RpZmllZFN0YXJ0Q29sdW1uLGcubW9kaWZpZWRFbmRMaW5lTnVtYmVyLGcubW9kaWZpZWRFbmRDb2x1bW4pKSkpO2wmJihsLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1kLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcnx8bC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09ZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpJiYoZD1uZXcgcWUobC5vcmlnaW5hbC5qb2luKGQub3JpZ2luYWwpLGwubW9kaWZpZWQuam9pbihkLm1vZGlmaWVkKSxsLmlubmVyQ2hhbmdlcyYmZC5pbm5lckNoYW5nZXM/bC5pbm5lckNoYW5nZXMuY29uY2F0KGQuaW5uZXJDaGFuZ2VzKTp2b2lkIDApLG8ucG9wKCkpLG8ucHVzaChkKSxsPWR9cmV0dXJuIGZuKCgpPT5jcyhvLCh1LGYpPT5mLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci11Lm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1mLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci11Lm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnUub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxmLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciYmdS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPGYubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyKSksbmV3IGhuKG8sW10sYS5xdWl0RWFybHkpfX1mdW5jdGlvbiBkcyhlLHQsbixyKXtyZXR1cm4gbmV3IEdlKGUsdCxuKS5Db21wdXRlRGlmZihyKX1sZXQgZ3M9Y2xhc3N7Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1bXSxyPVtdO2ZvcihsZXQgaT0wLHM9dC5sZW5ndGg7aTxzO2krKyluW2ldPXJyKHRbaV0sMSkscltpXT1pcih0W2ldLDEpO3RoaXMubGluZXM9dCx0aGlzLl9zdGFydENvbHVtbnM9bix0aGlzLl9lbmRDb2x1bW5zPXJ9Z2V0RWxlbWVudHMoKXtjb25zdCB0PVtdO2ZvcihsZXQgbj0wLHI9dGhpcy5saW5lcy5sZW5ndGg7bjxyO24rKyl0W25dPXRoaXMubGluZXNbbl0uc3Vic3RyaW5nKHRoaXMuX3N0YXJ0Q29sdW1uc1tuXS0xLHRoaXMuX2VuZENvbHVtbnNbbl0tMSk7cmV0dXJuIHR9Z2V0U3RyaWN0RWxlbWVudCh0KXtyZXR1cm4gdGhpcy5saW5lc1t0XX1nZXRTdGFydExpbmVOdW1iZXIodCl7cmV0dXJuIHQrMX1nZXRFbmRMaW5lTnVtYmVyKHQpe3JldHVybiB0KzF9Y3JlYXRlQ2hhclNlcXVlbmNlKHQsbixyKXtjb25zdCBpPVtdLHM9W10sYT1bXTtsZXQgbz0wO2ZvcihsZXQgbD1uO2w8PXI7bCsrKXtjb25zdCB1PXRoaXMubGluZXNbbF0sZj10P3RoaXMuX3N0YXJ0Q29sdW1uc1tsXToxLGg9dD90aGlzLl9lbmRDb2x1bW5zW2xdOnUubGVuZ3RoKzE7Zm9yKGxldCBkPWY7ZDxoO2QrKylpW29dPXUuY2hhckNvZGVBdChkLTEpLHNbb109bCsxLGFbb109ZCxvKys7IXQmJmw8ciYmKGlbb109MTAsc1tvXT1sKzEsYVtvXT11Lmxlbmd0aCsxLG8rKyl9cmV0dXJuIG5ldyBDbChpLHMsYSl9fTtjbGFzcyBDbHtjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5fY2hhckNvZGVzPXQsdGhpcy5fbGluZU51bWJlcnM9bix0aGlzLl9jb2x1bW5zPXJ9dG9TdHJpbmcoKXtyZXR1cm4iWyIrdGhpcy5fY2hhckNvZGVzLm1hcCgodCxuKT0+KHQ9PT0xMD8iXFxuIjpTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKStgLSgke3RoaXMuX2xpbmVOdW1iZXJzW25dfSwke3RoaXMuX2NvbHVtbnNbbl19KWApLmpvaW4oIiwgIikrIl0ifV9hc3NlcnRJbmRleCh0LG4pe2lmKHQ8MHx8dD49bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIGluZGV4Iil9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5fY2hhckNvZGVzfWdldFN0YXJ0TGluZU51bWJlcih0KXtyZXR1cm4gdD4wJiZ0PT09dGhpcy5fbGluZU51bWJlcnMubGVuZ3RoP3RoaXMuZ2V0RW5kTGluZU51bWJlcih0LTEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9saW5lTnVtYmVyc1t0XSl9Z2V0RW5kTGluZU51bWJlcih0KXtyZXR1cm4gdD09PS0xP3RoaXMuZ2V0U3RhcnRMaW5lTnVtYmVyKHQrMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2NoYXJDb2Rlc1t0XT09PTEwP3RoaXMuX2xpbmVOdW1iZXJzW3RdKzE6dGhpcy5fbGluZU51bWJlcnNbdF0pfWdldFN0YXJ0Q29sdW1uKHQpe3JldHVybiB0PjAmJnQ9PT10aGlzLl9jb2x1bW5zLmxlbmd0aD90aGlzLmdldEVuZENvbHVtbih0LTEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2NvbHVtbnMpLHRoaXMuX2NvbHVtbnNbdF0pfWdldEVuZENvbHVtbih0KXtyZXR1cm4gdD09PS0xP3RoaXMuZ2V0U3RhcnRDb2x1bW4odCsxKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jaGFyQ29kZXNbdF09PT0xMD8xOnRoaXMuX2NvbHVtbnNbdF0rMSl9fWNsYXNzIHd0e2NvbnN0cnVjdG9yKHQsbixyLGkscyxhLG8sbCl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj10LHRoaXMub3JpZ2luYWxTdGFydENvbHVtbj1uLHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPXIsdGhpcy5vcmlnaW5hbEVuZENvbHVtbj1pLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9cyx0aGlzLm1vZGlmaWVkU3RhcnRDb2x1bW49YSx0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1vLHRoaXMubW9kaWZpZWRFbmRDb2x1bW49bH1zdGF0aWMgY3JlYXRlRnJvbURpZmZDaGFuZ2UodCxuLHIpe2NvbnN0IGk9bi5nZXRTdGFydExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0KSxzPW4uZ2V0U3RhcnRDb2x1bW4odC5vcmlnaW5hbFN0YXJ0KSxhPW4uZ2V0RW5kTGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSxvPW4uZ2V0RW5kQ29sdW1uKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpLGw9ci5nZXRTdGFydExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0KSx1PXIuZ2V0U3RhcnRDb2x1bW4odC5tb2RpZmllZFN0YXJ0KSxmPXIuZ2V0RW5kTGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKSxoPXIuZ2V0RW5kQ29sdW1uKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpO3JldHVybiBuZXcgd3QoaSxzLGEsbyxsLHUsZixoKX19ZnVuY3Rpb24ga2woZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7Y29uc3QgdD1bZVswXV07bGV0IG49dFswXTtmb3IobGV0IHI9MSxpPWUubGVuZ3RoO3I8aTtyKyspe2NvbnN0IHM9ZVtyXSxhPXMub3JpZ2luYWxTdGFydC0obi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgpLG89cy5tb2RpZmllZFN0YXJ0LShuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aCk7TWF0aC5taW4oYSxvKTxObD8obi5vcmlnaW5hbExlbmd0aD1zLm9yaWdpbmFsU3RhcnQrcy5vcmlnaW5hbExlbmd0aC1uLm9yaWdpbmFsU3RhcnQsbi5tb2RpZmllZExlbmd0aD1zLm1vZGlmaWVkU3RhcnQrcy5tb2RpZmllZExlbmd0aC1uLm1vZGlmaWVkU3RhcnQpOih0LnB1c2gocyksbj1zKX1yZXR1cm4gdH1jbGFzcyBEdHtjb25zdHJ1Y3Rvcih0LG4scixpLHMpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9dCx0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLHRoaXMubW9kaWZpZWRTdGFydExpbmVOdW1iZXI9cix0aGlzLm1vZGlmaWVkRW5kTGluZU51bWJlcj1pLHRoaXMuY2hhckNoYW5nZXM9c31zdGF0aWMgY3JlYXRlRnJvbURpZmZSZXN1bHQodCxuLHIsaSxzLGEsbyl7bGV0IGwsdSxmLGgsZDtpZihuLm9yaWdpbmFsTGVuZ3RoPT09MD8obD1yLmdldFN0YXJ0TGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQpLTEsdT0wKToobD1yLmdldFN0YXJ0TGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQpLHU9ci5nZXRFbmRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLTEpKSxuLm1vZGlmaWVkTGVuZ3RoPT09MD8oZj1pLmdldFN0YXJ0TGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQpLTEsaD0wKTooZj1pLmdldFN0YXJ0TGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQpLGg9aS5nZXRFbmRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLTEpKSxhJiZuLm9yaWdpbmFsTGVuZ3RoPjAmJm4ub3JpZ2luYWxMZW5ndGg8MjAmJm4ubW9kaWZpZWRMZW5ndGg+MCYmbi5tb2RpZmllZExlbmd0aDwyMCYmcygpKXtjb25zdCBnPXIuY3JlYXRlQ2hhclNlcXVlbmNlKHQsbi5vcmlnaW5hbFN0YXJ0LG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoLTEpLG09aS5jcmVhdGVDaGFyU2VxdWVuY2UodCxuLm1vZGlmaWVkU3RhcnQsbi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgtMSk7aWYoZy5nZXRFbGVtZW50cygpLmxlbmd0aD4wJiZtLmdldEVsZW1lbnRzKCkubGVuZ3RoPjApe2xldCB2PWRzKGcsbSxzLCEwKS5jaGFuZ2VzO28mJih2PWtsKHYpKSxkPVtdO2ZvcihsZXQgcD0wLHg9di5sZW5ndGg7cDx4O3ArKylkLnB1c2god3QuY3JlYXRlRnJvbURpZmZDaGFuZ2UodltwXSxnLG0pKX19cmV0dXJuIG5ldyBEdChsLHUsZixoLGQpfX1jbGFzcyBFbHtjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXM9ci5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzPXIuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlPXIuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZj1yLnNob3VsZE1ha2VQcmV0dHlEaWZmLHRoaXMub3JpZ2luYWxMaW5lcz10LHRoaXMubW9kaWZpZWRMaW5lcz1uLHRoaXMub3JpZ2luYWw9bmV3IGdzKHQpLHRoaXMubW9kaWZpZWQ9bmV3IGdzKG4pLHRoaXMuY29udGludWVMaW5lRGlmZj1tcyhyLm1heENvbXB1dGF0aW9uVGltZSksdGhpcy5jb250aW51ZUNoYXJEaWZmPW1zKHIubWF4Q29tcHV0YXRpb25UaW1lPT09MD8wOk1hdGgubWluKHIubWF4Q29tcHV0YXRpb25UaW1lLDVlMykpfWNvbXB1dGVEaWZmKCl7aWYodGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm9yaWdpbmFsLmxpbmVzWzBdLmxlbmd0aD09PTApcmV0dXJuIHRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoPT09MSYmdGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg9PT0wP3txdWl0RWFybHk6ITEsY2hhbmdlczpbXX06e3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6MSxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjp0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aCxjaGFyQ2hhbmdlczp2b2lkIDB9XX07aWYodGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD09PTApcmV0dXJue3F1aXRFYXJseTohMSxjaGFuZ2VzOlt7b3JpZ2luYWxTdGFydExpbmVOdW1iZXI6MSxvcmlnaW5hbEVuZExpbmVOdW1iZXI6dGhpcy5vcmlnaW5hbC5saW5lcy5sZW5ndGgsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6MSxjaGFyQ2hhbmdlczp2b2lkIDB9XX07Y29uc3QgdD1kcyh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUxpbmVEaWZmLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmYpLG49dC5jaGFuZ2VzLHI9dC5xdWl0RWFybHk7aWYodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSl7Y29uc3Qgbz1bXTtmb3IobGV0IGw9MCx1PW4ubGVuZ3RoO2w8dTtsKyspby5wdXNoKER0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsbltsXSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpO3JldHVybntxdWl0RWFybHk6cixjaGFuZ2VzOm99fWNvbnN0IGk9W107bGV0IHM9MCxhPTA7Zm9yKGxldCBvPS0xLGw9bi5sZW5ndGg7bzxsO28rKyl7Y29uc3QgdT1vKzE8bD9uW28rMV06bnVsbCxmPXU/dS5vcmlnaW5hbFN0YXJ0OnRoaXMub3JpZ2luYWxMaW5lcy5sZW5ndGgsaD11P3UubW9kaWZpZWRTdGFydDp0aGlzLm1vZGlmaWVkTGluZXMubGVuZ3RoO2Zvcig7czxmJiZhPGg7KXtjb25zdCBkPXRoaXMub3JpZ2luYWxMaW5lc1tzXSxnPXRoaXMubW9kaWZpZWRMaW5lc1thXTtpZihkIT09Zyl7e2xldCBtPXJyKGQsMSksdj1ycihnLDEpO2Zvcig7bT4xJiZ2PjE7KXtjb25zdCBwPWQuY2hhckNvZGVBdChtLTIpLHg9Zy5jaGFyQ29kZUF0KHYtMik7aWYocCE9PXgpYnJlYWs7bS0tLHYtLX0obT4xfHx2PjEpJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGkscysxLDEsbSxhKzEsMSx2KX17bGV0IG09aXIoZCwxKSx2PWlyKGcsMSk7Y29uc3QgcD1kLmxlbmd0aCsxLHg9Zy5sZW5ndGgrMTtmb3IoO208cCYmdjx4Oyl7Y29uc3QgeT1kLmNoYXJDb2RlQXQobS0xKSxiPWQuY2hhckNvZGVBdCh2LTEpO2lmKHkhPT1iKWJyZWFrO20rKyx2Kyt9KG08cHx8djx4KSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShpLHMrMSxtLHAsYSsxLHYseCl9fXMrKyxhKyt9dSYmKGkucHVzaChEdC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHUsdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKSxzKz11Lm9yaWdpbmFsTGVuZ3RoLGErPXUubW9kaWZpZWRMZW5ndGgpfXJldHVybntxdWl0RWFybHk6cixjaGFuZ2VzOml9fV9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixyLGkscyxhLG8pe2lmKHRoaXMuX21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixyLGkscyxhLG8pKXJldHVybjtsZXQgbDt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmKGw9W25ldyB3dChuLHIsbixpLHMsYSxzLG8pXSksdC5wdXNoKG5ldyBEdChuLG4scyxzLGwpKX1fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLHIsaSxzLGEsbyl7Y29uc3QgbD10Lmxlbmd0aDtpZihsPT09MClyZXR1cm4hMTtjb25zdCB1PXRbbC0xXTtyZXR1cm4gdS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT0wfHx1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PTA/ITE6dS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT1uJiZ1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj09PXM/KHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzLnB1c2gobmV3IHd0KG4scixuLGkscyxhLHMsbykpLCEwKTp1Lm9yaWdpbmFsRW5kTGluZU51bWJlcisxPT09biYmdS5tb2RpZmllZEVuZExpbmVOdW1iZXIrMT09PXM/KHUub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdS5tb2RpZmllZEVuZExpbmVOdW1iZXI9cyx0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcyYmdS5jaGFyQ2hhbmdlcy5wdXNoKG5ldyB3dChuLHIsbixpLHMsYSxzLG8pKSwhMCk6ITF9fWZ1bmN0aW9uIHJyKGUsdCl7Y29uc3Qgbj1pbyhlKTtyZXR1cm4gbj09PS0xP3Q6bisxfWZ1bmN0aW9uIGlyKGUsdCl7Y29uc3Qgbj1zbyhlKTtyZXR1cm4gbj09PS0xP3Q6bisyfWZ1bmN0aW9uIG1zKGUpe2lmKGU9PT0wKXJldHVybigpPT4hMDtjb25zdCB0PURhdGUubm93KCk7cmV0dXJuKCk9PkRhdGUubm93KCktdDxlfWNsYXNzIEJle3N0YXRpYyB0cml2aWFsKHQsbil7cmV0dXJuIG5ldyBCZShbbmV3IEsoei5vZkxlbmd0aCh0Lmxlbmd0aCksei5vZkxlbmd0aChuLmxlbmd0aCkpXSwhMSl9c3RhdGljIHRyaXZpYWxUaW1lZE91dCh0LG4pe3JldHVybiBuZXcgQmUoW25ldyBLKHoub2ZMZW5ndGgodC5sZW5ndGgpLHoub2ZMZW5ndGgobi5sZW5ndGgpKV0sITApfWNvbnN0cnVjdG9yKHQsbil7dGhpcy5kaWZmcz10LHRoaXMuaGl0VGltZW91dD1ufX1jbGFzcyBLe3N0YXRpYyBpbnZlcnQodCxuKXtjb25zdCByPVtdO3JldHVybiBCbyh0LChpLHMpPT57ci5wdXNoKEsuZnJvbU9mZnNldFBhaXJzKGk/aS5nZXRFbmRFeGNsdXNpdmVzKCk6eWUuemVybyxzP3MuZ2V0U3RhcnRzKCk6bmV3IHllKG4sKGk/aS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLWkuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTowKStuKSkpfSkscn1zdGF0aWMgZnJvbU9mZnNldFBhaXJzKHQsbil7cmV0dXJuIG5ldyBLKG5ldyB6KHQub2Zmc2V0MSxuLm9mZnNldDEpLG5ldyB6KHQub2Zmc2V0MixuLm9mZnNldDIpKX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc2VxMVJhbmdlPXQsdGhpcy5zZXEyUmFuZ2U9bn1zd2FwKCl7cmV0dXJuIG5ldyBLKHRoaXMuc2VxMlJhbmdlLHRoaXMuc2VxMVJhbmdlKX10b1N0cmluZygpe3JldHVybmAke3RoaXMuc2VxMVJhbmdlfSA8LT4gJHt0aGlzLnNlcTJSYW5nZX1gfWpvaW4odCl7cmV0dXJuIG5ldyBLKHRoaXMuc2VxMVJhbmdlLmpvaW4odC5zZXExUmFuZ2UpLHRoaXMuc2VxMlJhbmdlLmpvaW4odC5zZXEyUmFuZ2UpKX1kZWx0YSh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgSyh0aGlzLnNlcTFSYW5nZS5kZWx0YSh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YSh0KSl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgSyh0aGlzLnNlcTFSYW5nZS5kZWx0YVN0YXJ0KHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhU3RhcnQodCkpfWRlbHRhRW5kKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBLKHRoaXMuc2VxMVJhbmdlLmRlbHRhRW5kKHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhRW5kKHQpKX1pbnRlcnNlY3QodCl7Y29uc3Qgbj10aGlzLnNlcTFSYW5nZS5pbnRlcnNlY3QodC5zZXExUmFuZ2UpLHI9dGhpcy5zZXEyUmFuZ2UuaW50ZXJzZWN0KHQuc2VxMlJhbmdlKTtpZighKCFufHwhcikpcmV0dXJuIG5ldyBLKG4scil9Z2V0U3RhcnRzKCl7cmV0dXJuIG5ldyB5ZSh0aGlzLnNlcTFSYW5nZS5zdGFydCx0aGlzLnNlcTJSYW5nZS5zdGFydCl9Z2V0RW5kRXhjbHVzaXZlcygpe3JldHVybiBuZXcgeWUodGhpcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHRoaXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSl9fWNsYXNzIHlle2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vZmZzZXQxPXQsdGhpcy5vZmZzZXQyPW59dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm9mZnNldDF9IDwtPiAke3RoaXMub2Zmc2V0Mn1gfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyB5ZSh0aGlzLm9mZnNldDErdCx0aGlzLm9mZnNldDIrdCl9ZXF1YWxzKHQpe3JldHVybiB0aGlzLm9mZnNldDE9PT10Lm9mZnNldDEmJnRoaXMub2Zmc2V0Mj09PXQub2Zmc2V0Mn19eWUuemVybz1uZXcgeWUoMCwwKSx5ZS5tYXg9bmV3IHllKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtjbGFzcyBWdHtpc1ZhbGlkKCl7cmV0dXJuITB9fVZ0Lmluc3RhbmNlPW5ldyBWdDtjbGFzcyBNbHtjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnRpbWVvdXQ9dCx0aGlzLnN0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMudmFsaWQ9ITAsdDw9MCl0aHJvdyBuZXcgamUoInRpbWVvdXQgbXVzdCBiZSBwb3NpdGl2ZSIpfWlzVmFsaWQoKXtpZighKERhdGUubm93KCktdGhpcy5zdGFydFRpbWU8dGhpcy50aW1lb3V0KSYmdGhpcy52YWxpZCl7dGhpcy52YWxpZD0hMTtkZWJ1Z2dlcn1yZXR1cm4gdGhpcy52YWxpZH19Y2xhc3Mgc3J7Y29uc3RydWN0b3IodCxuKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9bix0aGlzLmFycmF5PVtdLHRoaXMuYXJyYXk9bmV3IEFycmF5KHQqbil9Z2V0KHQsbil7cmV0dXJuIHRoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdfXNldCh0LG4scil7dGhpcy5hcnJheVt0K24qdGhpcy53aWR0aF09cn19ZnVuY3Rpb24gYXIoZSl7cmV0dXJuIGU9PT0zMnx8ZT09PTl9Y2xhc3MgX3R7c3RhdGljIGdldEtleSh0KXtsZXQgbj10aGlzLmNocktleXMuZ2V0KHQpO3JldHVybiBuPT09dm9pZCAwJiYobj10aGlzLmNocktleXMuc2l6ZSx0aGlzLmNocktleXMuc2V0KHQsbikpLG59Y29uc3RydWN0b3IodCxuLHIpe3RoaXMucmFuZ2U9dCx0aGlzLmxpbmVzPW4sdGhpcy5zb3VyY2U9cix0aGlzLmhpc3RvZ3JhbT1bXTtsZXQgaT0wO2ZvcihsZXQgcz10LnN0YXJ0TGluZU51bWJlci0xO3M8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTE7cysrKXtjb25zdCBhPW5bc107Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKyspe2krKztjb25zdCB1PWFbbF0sZj1fdC5nZXRLZXkodSk7dGhpcy5oaXN0b2dyYW1bZl09KHRoaXMuaGlzdG9ncmFtW2ZdfHwwKSsxfWkrKztjb25zdCBvPV90LmdldEtleShgCmApO3RoaXMuaGlzdG9ncmFtW29dPSh0aGlzLmhpc3RvZ3JhbVtvXXx8MCkrMX10aGlzLnRvdGFsQ291bnQ9aX1jb21wdXRlU2ltaWxhcml0eSh0KXt2YXIgbixyO2xldCBpPTA7Y29uc3Qgcz1NYXRoLm1heCh0aGlzLmhpc3RvZ3JhbS5sZW5ndGgsdC5oaXN0b2dyYW0ubGVuZ3RoKTtmb3IobGV0IGE9MDthPHM7YSsrKWkrPU1hdGguYWJzKCgobj10aGlzLmhpc3RvZ3JhbVthXSkhPT1udWxsJiZuIT09dm9pZCAwP246MCktKChyPXQuaGlzdG9ncmFtW2FdKSE9PW51bGwmJnIhPT12b2lkIDA/cjowKSk7cmV0dXJuIDEtaS8odGhpcy50b3RhbENvdW50K3QudG90YWxDb3VudCl9fV90LmNocktleXM9bmV3IE1hcDtjbGFzcyBSbHtjb21wdXRlKHQsbixyPVZ0Lmluc3RhbmNlLGkpe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBCZS50cml2aWFsKHQsbik7Y29uc3Qgcz1uZXcgc3IodC5sZW5ndGgsbi5sZW5ndGgpLGE9bmV3IHNyKHQubGVuZ3RoLG4ubGVuZ3RoKSxvPW5ldyBzcih0Lmxlbmd0aCxuLmxlbmd0aCk7Zm9yKGxldCBtPTA7bTx0Lmxlbmd0aDttKyspZm9yKGxldCB2PTA7djxuLmxlbmd0aDt2Kyspe2lmKCFyLmlzVmFsaWQoKSlyZXR1cm4gQmUudHJpdmlhbFRpbWVkT3V0KHQsbik7Y29uc3QgcD1tPT09MD8wOnMuZ2V0KG0tMSx2KSx4PXY9PT0wPzA6cy5nZXQobSx2LTEpO2xldCB5O3QuZ2V0RWxlbWVudChtKT09PW4uZ2V0RWxlbWVudCh2KT8obT09PTB8fHY9PT0wP3k9MDp5PXMuZ2V0KG0tMSx2LTEpLG0+MCYmdj4wJiZhLmdldChtLTEsdi0xKT09PTMmJih5Kz1vLmdldChtLTEsdi0xKSkseSs9aT9pKG0sdik6MSk6eT0tMTtjb25zdCBiPU1hdGgubWF4KHAseCx5KTtpZihiPT09eSl7Y29uc3QgTD1tPjAmJnY+MD9vLmdldChtLTEsdi0xKTowO28uc2V0KG0sdixMKzEpLGEuc2V0KG0sdiwzKX1lbHNlIGI9PT1wPyhvLnNldChtLHYsMCksYS5zZXQobSx2LDEpKTpiPT09eCYmKG8uc2V0KG0sdiwwKSxhLnNldChtLHYsMikpO3Muc2V0KG0sdixiKX1jb25zdCBsPVtdO2xldCB1PXQubGVuZ3RoLGY9bi5sZW5ndGg7ZnVuY3Rpb24gaChtLHYpeyhtKzEhPT11fHx2KzEhPT1mKSYmbC5wdXNoKG5ldyBLKG5ldyB6KG0rMSx1KSxuZXcgeih2KzEsZikpKSx1PW0sZj12fWxldCBkPXQubGVuZ3RoLTEsZz1uLmxlbmd0aC0xO2Zvcig7ZD49MCYmZz49MDspYS5nZXQoZCxnKT09PTM/KGgoZCxnKSxkLS0sZy0tKTphLmdldChkLGcpPT09MT9kLS06Zy0tO3JldHVybiBoKC0xLC0xKSxsLnJldmVyc2UoKSxuZXcgQmUobCwhMSl9fWNsYXNzIHBze2NvbXB1dGUodCxuLHI9VnQuaW5zdGFuY2Upe2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBCZS50cml2aWFsKHQsbik7Y29uc3QgaT10LHM9bjtmdW5jdGlvbiBhKHYscCl7Zm9yKDt2PGkubGVuZ3RoJiZwPHMubGVuZ3RoJiZpLmdldEVsZW1lbnQodik9PT1zLmdldEVsZW1lbnQocCk7KXYrKyxwKys7cmV0dXJuIHZ9bGV0IG89MDtjb25zdCBsPW5ldyBUbDtsLnNldCgwLGEoMCwwKSk7Y29uc3QgdT1uZXcgUGw7dS5zZXQoMCxsLmdldCgwKT09PTA/bnVsbDpuZXcgdnMobnVsbCwwLDAsbC5nZXQoMCkpKTtsZXQgZj0wO2U6Zm9yKDs7KXtpZihvKyssIXIuaXNWYWxpZCgpKXJldHVybiBCZS50cml2aWFsVGltZWRPdXQoaSxzKTtjb25zdCB2PS1NYXRoLm1pbihvLHMubGVuZ3RoK28lMikscD1NYXRoLm1pbihvLGkubGVuZ3RoK28lMik7Zm9yKGY9djtmPD1wO2YrPTIpe2NvbnN0IHg9Zj09PXA/LTE6bC5nZXQoZisxKSx5PWY9PT12Py0xOmwuZ2V0KGYtMSkrMSxiPU1hdGgubWluKE1hdGgubWF4KHgseSksaS5sZW5ndGgpLEw9Yi1mO2lmKGI+aS5sZW5ndGh8fEw+cy5sZW5ndGgpY29udGludWU7Y29uc3QgUz1hKGIsTCk7bC5zZXQoZixTKTtjb25zdCBfPWI9PT14P3UuZ2V0KGYrMSk6dS5nZXQoZi0xKTtpZih1LnNldChmLFMhPT1iP25ldyB2cyhfLGIsTCxTLWIpOl8pLGwuZ2V0KGYpPT09aS5sZW5ndGgmJmwuZ2V0KGYpLWY9PT1zLmxlbmd0aClicmVhayBlfX1sZXQgaD11LmdldChmKTtjb25zdCBkPVtdO2xldCBnPWkubGVuZ3RoLG09cy5sZW5ndGg7Zm9yKDs7KXtjb25zdCB2PWg/aC54K2gubGVuZ3RoOjAscD1oP2gueStoLmxlbmd0aDowO2lmKCh2IT09Z3x8cCE9PW0pJiZkLnB1c2gobmV3IEsobmV3IHoodixnKSxuZXcgeihwLG0pKSksIWgpYnJlYWs7Zz1oLngsbT1oLnksaD1oLnByZXZ9cmV0dXJuIGQucmV2ZXJzZSgpLG5ldyBCZShkLCExKX19Y2xhc3MgdnN7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5wcmV2PXQsdGhpcy54PW4sdGhpcy55PXIsdGhpcy5sZW5ndGg9aX19Y2xhc3MgVGx7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKSx0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KDEwKX1nZXQodCl7cmV0dXJuIHQ8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF0pOnRoaXMucG9zaXRpdmVBcnJbdF19c2V0KHQsbil7aWYodDwwKXtpZih0PS10LTEsdD49dGhpcy5uZWdhdGl2ZUFyci5sZW5ndGgpe2NvbnN0IHI9dGhpcy5uZWdhdGl2ZUFycjt0aGlzLm5lZ2F0aXZlQXJyPW5ldyBJbnQzMkFycmF5KHIubGVuZ3RoKjIpLHRoaXMubmVnYXRpdmVBcnIuc2V0KHIpfXRoaXMubmVnYXRpdmVBcnJbdF09bn1lbHNle2lmKHQ+PXRoaXMucG9zaXRpdmVBcnIubGVuZ3RoKXtjb25zdCByPXRoaXMucG9zaXRpdmVBcnI7dGhpcy5wb3NpdGl2ZUFycj1uZXcgSW50MzJBcnJheShyLmxlbmd0aCoyKSx0aGlzLnBvc2l0aXZlQXJyLnNldChyKX10aGlzLnBvc2l0aXZlQXJyW3RdPW59fX1jbGFzcyBQbHtjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpdmVBcnI9W10sdGhpcy5uZWdhdGl2ZUFycj1bXX1nZXQodCl7cmV0dXJuIHQ8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF0pOnRoaXMucG9zaXRpdmVBcnJbdF19c2V0KHQsbil7dDwwPyh0PS10LTEsdGhpcy5uZWdhdGl2ZUFyclt0XT1uKTp0aGlzLnBvc2l0aXZlQXJyW3RdPW59fWNsYXNzIGRue2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLmxpbmVzPXQsdGhpcy5jb25zaWRlcldoaXRlc3BhY2VDaGFuZ2VzPXIsdGhpcy5lbGVtZW50cz1bXSx0aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZT1bXSx0aGlzLmFkZGl0aW9uYWxPZmZzZXRCeUxpbmU9W107bGV0IGk9ITE7bi5zdGFydD4wJiZuLmVuZEV4Y2x1c2l2ZT49dC5sZW5ndGgmJihuPW5ldyB6KG4uc3RhcnQtMSxuLmVuZEV4Y2x1c2l2ZSksaT0hMCksdGhpcy5saW5lUmFuZ2U9bix0aGlzLmZpcnN0Q2hhck9mZnNldEJ5TGluZVswXT0wO2ZvcihsZXQgcz10aGlzLmxpbmVSYW5nZS5zdGFydDtzPHRoaXMubGluZVJhbmdlLmVuZEV4Y2x1c2l2ZTtzKyspe2xldCBhPXRbc10sbz0wO2lmKGkpbz1hLmxlbmd0aCxhPSIiLGk9ITE7ZWxzZSBpZighcil7Y29uc3QgbD1hLnRyaW1TdGFydCgpO289YS5sZW5ndGgtbC5sZW5ndGgsYT1sLnRyaW1FbmQoKX10aGlzLmFkZGl0aW9uYWxPZmZzZXRCeUxpbmUucHVzaChvKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrKyl0aGlzLmVsZW1lbnRzLnB1c2goYS5jaGFyQ29kZUF0KGwpKTtzPHQubGVuZ3RoLTEmJih0aGlzLmVsZW1lbnRzLnB1c2goMTApLHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lW3MtdGhpcy5saW5lUmFuZ2Uuc3RhcnQrMV09dGhpcy5lbGVtZW50cy5sZW5ndGgpfXRoaXMuYWRkaXRpb25hbE9mZnNldEJ5TGluZS5wdXNoKDApfXRvU3RyaW5nKCl7cmV0dXJuYFNsaWNlOiAiJHt0aGlzLnRleHR9ImB9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5nZXRUZXh0KG5ldyB6KDAsdGhpcy5sZW5ndGgpKX1nZXRUZXh0KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzLnNsaWNlKHQuc3RhcnQsdC5lbmRFeGNsdXNpdmUpLm1hcChuPT5TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKS5qb2luKCIiKX1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPXhzKHQ+MD90aGlzLmVsZW1lbnRzW3QtMV06LTEpLHI9eHModDx0aGlzLmVsZW1lbnRzLmxlbmd0aD90aGlzLmVsZW1lbnRzW3RdOi0xKTtpZihuPT09NyYmcj09PTgpcmV0dXJuIDA7aWYobj09PTgpcmV0dXJuIDE1MDtsZXQgaT0wO3JldHVybiBuIT09ciYmKGkrPTEwLG49PT0wJiZyPT09MSYmKGkrPTEpKSxpKz1icyhuKSxpKz1icyhyKSxpfXRyYW5zbGF0ZU9mZnNldCh0KXtpZih0aGlzLmxpbmVSYW5nZS5pc0VtcHR5KXJldHVybiBuZXcgUGUodGhpcy5saW5lUmFuZ2Uuc3RhcnQrMSwxKTtjb25zdCBuPUZ0KHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lLHI9PnI8PXQpO3JldHVybiBuZXcgUGUodGhpcy5saW5lUmFuZ2Uuc3RhcnQrbisxLHQtdGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmVbbl0rdGhpcy5hZGRpdGlvbmFsT2Zmc2V0QnlMaW5lW25dKzEpfXRyYW5zbGF0ZVJhbmdlKHQpe3JldHVybiBzZS5mcm9tUG9zaXRpb25zKHRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQpLHRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuZW5kRXhjbHVzaXZlKSl9ZmluZFdvcmRDb250YWluaW5nKHQpe2lmKHQ8MHx8dD49dGhpcy5lbGVtZW50cy5sZW5ndGh8fCFvcih0aGlzLmVsZW1lbnRzW3RdKSlyZXR1cm47bGV0IG49dDtmb3IoO24+MCYmb3IodGhpcy5lbGVtZW50c1tuLTFdKTspbi0tO2xldCByPXQ7Zm9yKDtyPHRoaXMuZWxlbWVudHMubGVuZ3RoJiZvcih0aGlzLmVsZW1lbnRzW3JdKTspcisrO3JldHVybiBuZXcgeihuLHIpfWNvdW50TGluZXNJbih0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPZmZzZXQodC5lbmRFeGNsdXNpdmUpLmxpbmVOdW1iZXItdGhpcy50cmFuc2xhdGVPZmZzZXQodC5zdGFydCkubGluZU51bWJlcn1pc1N0cm9uZ2x5RXF1YWwodCxuKXtyZXR1cm4gdGhpcy5lbGVtZW50c1t0XT09PXRoaXMuZWxlbWVudHNbbl19ZXh0ZW5kVG9GdWxsTGluZXModCl7dmFyIG4scjtjb25zdCBpPShuPXh0KHRoaXMuZmlyc3RDaGFyT2Zmc2V0QnlMaW5lLGE9PmE8PXQuc3RhcnQpKSE9PW51bGwmJm4hPT12b2lkIDA/bjowLHM9KHI9TGwodGhpcy5maXJzdENoYXJPZmZzZXRCeUxpbmUsYT0+dC5lbmRFeGNsdXNpdmU8PWEpKSE9PW51bGwmJnIhPT12b2lkIDA/cjp0aGlzLmVsZW1lbnRzLmxlbmd0aDtyZXR1cm4gbmV3IHooaSxzKX19ZnVuY3Rpb24gb3IoZSl7cmV0dXJuIGU+PTk3JiZlPD0xMjJ8fGU+PTY1JiZlPD05MHx8ZT49NDgmJmU8PTU3fWNvbnN0IEZsPXswOjAsMTowLDI6MCwzOjEwLDQ6Miw1OjMwLDY6Myw3OjEwLDg6MTB9O2Z1bmN0aW9uIGJzKGUpe3JldHVybiBGbFtlXX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4gZT09PTEwPzg6ZT09PTEzPzc6YXIoZSk/NjplPj05NyYmZTw9MTIyPzA6ZT49NjUmJmU8PTkwPzE6ZT49NDgmJmU8PTU3PzI6ZT09PS0xPzM6ZT09PTQ0fHxlPT09NTk/NTo0fWZ1bmN0aW9uIElsKGUsdCxuLHIsaSxzKXtsZXR7bW92ZXM6YSxleGNsdWRlZENoYW5nZXM6b309VmwoZSx0LG4scyk7aWYoIXMuaXNWYWxpZCgpKXJldHVybltdO2NvbnN0IGw9ZS5maWx0ZXIoZj0+IW8uaGFzKGYpKSx1PU9sKGwscixpLHQsbixzKTtyZXR1cm4gJG8oYSx1KSxhPWpsKGEpLGE9YS5maWx0ZXIoZj0+e2NvbnN0IGg9Zi5vcmlnaW5hbC50b09mZnNldFJhbmdlKCkuc2xpY2UodCkubWFwKGc9PmcudHJpbSgpKTtyZXR1cm4gaC5qb2luKGAKYCkubGVuZ3RoPj0xNSYmRGwoaCxnPT5nLmxlbmd0aD49Mik+PTJ9KSxhPXFsKGUsYSksYX1mdW5jdGlvbiBEbChlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIpJiZuKys7cmV0dXJuIG59ZnVuY3Rpb24gVmwoZSx0LG4scil7Y29uc3QgaT1bXSxzPWUuZmlsdGVyKGw9PmwubW9kaWZpZWQuaXNFbXB0eSYmbC5vcmlnaW5hbC5sZW5ndGg+PTMpLm1hcChsPT5uZXcgX3QobC5vcmlnaW5hbCx0LGwpKSxhPW5ldyBTZXQoZS5maWx0ZXIobD0+bC5vcmlnaW5hbC5pc0VtcHR5JiZsLm1vZGlmaWVkLmxlbmd0aD49MykubWFwKGw9Pm5ldyBfdChsLm1vZGlmaWVkLG4sbCkpKSxvPW5ldyBTZXQ7Zm9yKGNvbnN0IGwgb2Ygcyl7bGV0IHU9LTEsZjtmb3IoY29uc3QgaCBvZiBhKXtjb25zdCBkPWwuY29tcHV0ZVNpbWlsYXJpdHkoaCk7ZD51JiYodT1kLGY9aCl9aWYodT4uOSYmZiYmKGEuZGVsZXRlKGYpLGkucHVzaChuZXcgRWUobC5yYW5nZSxmLnJhbmdlKSksby5hZGQobC5zb3VyY2UpLG8uYWRkKGYuc291cmNlKSksIXIuaXNWYWxpZCgpKXJldHVybnttb3ZlczppLGV4Y2x1ZGVkQ2hhbmdlczpvfX1yZXR1cm57bW92ZXM6aSxleGNsdWRlZENoYW5nZXM6b319ZnVuY3Rpb24gT2woZSx0LG4scixpLHMpe2NvbnN0IGE9W10sbz1uZXcgbWw7Zm9yKGNvbnN0IGQgb2YgZSlmb3IobGV0IGc9ZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI7ZzxkLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMjtnKyspe2NvbnN0IG09YCR7dFtnLTFdfToke3RbZysxLTFdfToke3RbZysyLTFdfWA7by5hZGQobSx7cmFuZ2U6bmV3IEgoZyxnKzMpfSl9Y29uc3QgbD1bXTtlLnNvcnQoc24oZD0+ZC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsYW4pKTtmb3IoY29uc3QgZCBvZiBlKXtsZXQgZz1bXTtmb3IobGV0IG09ZC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI7bTxkLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMjttKyspe2NvbnN0IHY9YCR7blttLTFdfToke25bbSsxLTFdfToke25bbSsyLTFdfWAscD1uZXcgSChtLG0rMykseD1bXTtvLmZvckVhY2godiwoe3JhbmdlOnl9KT0+e2Zvcihjb25zdCBMIG9mIGcpaWYoTC5vcmlnaW5hbExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT15LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJkwubW9kaWZpZWRMaW5lUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSsxPT09cC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKXtMLm9yaWdpbmFsTGluZVJhbmdlPW5ldyBIKEwub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHkuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSksTC5tb2RpZmllZExpbmVSYW5nZT1uZXcgSChMLm1vZGlmaWVkTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlcixwLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLHgucHVzaChMKTtyZXR1cm59Y29uc3QgYj17bW9kaWZpZWRMaW5lUmFuZ2U6cCxvcmlnaW5hbExpbmVSYW5nZTp5fTtsLnB1c2goYikseC5wdXNoKGIpfSksZz14fWlmKCFzLmlzVmFsaWQoKSlyZXR1cm5bXX1sLnNvcnQoV28oc24oZD0+ZC5tb2RpZmllZExpbmVSYW5nZS5sZW5ndGgsYW4pKSk7Y29uc3QgdT1uZXcgRmUsZj1uZXcgRmU7Zm9yKGNvbnN0IGQgb2YgbCl7Y29uc3QgZz1kLm1vZGlmaWVkTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlci1kLm9yaWdpbmFsTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlcixtPXUuc3VidHJhY3RGcm9tKGQubW9kaWZpZWRMaW5lUmFuZ2UpLHY9Zi5zdWJ0cmFjdEZyb20oZC5vcmlnaW5hbExpbmVSYW5nZSkuZ2V0V2l0aERlbHRhKGcpLHA9bS5nZXRJbnRlcnNlY3Rpb24odik7Zm9yKGNvbnN0IHggb2YgcC5yYW5nZXMpe2lmKHgubGVuZ3RoPDMpY29udGludWU7Y29uc3QgeT14LGI9eC5kZWx0YSgtZyk7YS5wdXNoKG5ldyBFZShiLHkpKSx1LmFkZFJhbmdlKHkpLGYuYWRkUmFuZ2UoYil9fWEuc29ydChzbihkPT5kLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixhbikpO2NvbnN0IGg9bmV3IEl0KGUpO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtjb25zdCBnPWFbZF0sbT1oLmZpbmRMYXN0TW9ub3Rvbm91cyhfPT5fLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjw9Zy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpLHY9eHQoZSxfPT5fLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjw9Zy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpLHA9TWF0aC5tYXgoZy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItbS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItdi5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpLHg9aC5maW5kTGFzdE1vbm90b25vdXMoXz0+Xy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI8Zy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSx5PXh0KGUsXz0+Xy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8Zy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSxiPU1hdGgubWF4KHgub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS1nLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUseS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLWcubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7bGV0IEw7Zm9yKEw9MDtMPHA7TCsrKXtjb25zdCBfPWcub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLUwtMSxOPWcubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLUwtMTtpZihfPnIubGVuZ3RofHxOPmkubGVuZ3RofHx1LmNvbnRhaW5zKE4pfHxmLmNvbnRhaW5zKF8pfHwheXMocltfLTFdLGlbTi0xXSxzKSlicmVha31MPjAmJihmLmFkZFJhbmdlKG5ldyBIKGcub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLUwsZy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpKSx1LmFkZFJhbmdlKG5ldyBIKGcubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLUwsZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKSk7bGV0IFM7Zm9yKFM9MDtTPGI7UysrKXtjb25zdCBfPWcub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStTLE49Zy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK1M7aWYoXz5yLmxlbmd0aHx8Tj5pLmxlbmd0aHx8dS5jb250YWlucyhOKXx8Zi5jb250YWlucyhfKXx8IXlzKHJbXy0xXSxpW04tMV0scykpYnJlYWt9Uz4wJiYoZi5hZGRSYW5nZShuZXcgSChnLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK1MpKSx1LmFkZFJhbmdlKG5ldyBIKGcubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxnLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUykpKSwoTD4wfHxTPjApJiYoYVtkXT1uZXcgRWUobmV3IEgoZy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItTCxnLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUyksbmV3IEgoZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItTCxnLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrUykpKX1yZXR1cm4gYX1mdW5jdGlvbiB5cyhlLHQsbil7aWYoZS50cmltKCk9PT10LnRyaW0oKSlyZXR1cm4hMDtpZihlLmxlbmd0aD4zMDAmJnQubGVuZ3RoPjMwMClyZXR1cm4hMTtjb25zdCBpPW5ldyBwcygpLmNvbXB1dGUobmV3IGRuKFtlXSxuZXcgeigwLDEpLCExKSxuZXcgZG4oW3RdLG5ldyB6KDAsMSksITEpLG4pO2xldCBzPTA7Y29uc3QgYT1LLmludmVydChpLmRpZmZzLGUubGVuZ3RoKTtmb3IoY29uc3QgZiBvZiBhKWYuc2VxMVJhbmdlLmZvckVhY2goaD0+e2FyKGUuY2hhckNvZGVBdChoKSl8fHMrK30pO2Z1bmN0aW9uIG8oZil7bGV0IGg9MDtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylhcihmLmNoYXJDb2RlQXQoZCkpfHxoKys7cmV0dXJuIGh9Y29uc3QgbD1vKGUubGVuZ3RoPnQubGVuZ3RoP2U6dCk7cmV0dXJuIHMvbD4uNiYmbD4xMH1mdW5jdGlvbiBqbChlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIGU7ZS5zb3J0KHNuKG49Pm4ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLGFuKSk7Y29uc3QgdD1bZVswXV07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHI9dFt0Lmxlbmd0aC0xXSxpPWVbbl0scz1pLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1yLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsYT1pLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1yLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aWYocz49MCYmYT49MCYmcythPD0yKXt0W3QubGVuZ3RoLTFdPXIuam9pbihpKTtjb250aW51ZX10LnB1c2goaSl9cmV0dXJuIHR9ZnVuY3Rpb24gcWwoZSx0KXtjb25zdCBuPW5ldyBJdChlKTtyZXR1cm4gdD10LmZpbHRlcihyPT57Y29uc3QgaT1uLmZpbmRMYXN0TW9ub3Rvbm91cyhvPT5vLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxyLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpfHxuZXcgRWUobmV3IEgoMSwxKSxuZXcgSCgxLDEpKSxzPXh0KGUsbz0+by5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8ci5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gaSE9PXN9KSx0fWZ1bmN0aW9uIHdzKGUsdCxuKXtsZXQgcj1uO3JldHVybiByPV9zKGUsdCxyKSxyPV9zKGUsdCxyKSxyPUJsKGUsdCxyKSxyfWZ1bmN0aW9uIF9zKGUsdCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuIG47Y29uc3Qgcj1bXTtyLnB1c2goblswXSk7Zm9yKGxldCBzPTE7czxuLmxlbmd0aDtzKyspe2NvbnN0IGE9cltyLmxlbmd0aC0xXTtsZXQgbz1uW3NdO2lmKG8uc2VxMVJhbmdlLmlzRW1wdHl8fG8uc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IGw9by5zZXExUmFuZ2Uuc3RhcnQtYS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTE7dTw9bCYmIShlLmdldEVsZW1lbnQoby5zZXExUmFuZ2Uuc3RhcnQtdSkhPT1lLmdldEVsZW1lbnQoby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLXUpfHx0LmdldEVsZW1lbnQoby5zZXEyUmFuZ2Uuc3RhcnQtdSkhPT10LmdldEVsZW1lbnQoby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLXUpKTt1KyspO2lmKHUtLSx1PT09bCl7cltyLmxlbmd0aC0xXT1uZXcgSyhuZXcgeihhLnNlcTFSYW5nZS5zdGFydCxvLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUtbCksbmV3IHooYS5zZXEyUmFuZ2Uuc3RhcnQsby5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLWwpKTtjb250aW51ZX1vPW8uZGVsdGEoLXUpfXIucHVzaChvKX1jb25zdCBpPVtdO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGgtMTtzKyspe2NvbnN0IGE9cltzKzFdO2xldCBvPXJbc107aWYoby5zZXExUmFuZ2UuaXNFbXB0eXx8by5zZXEyUmFuZ2UuaXNFbXB0eSl7Y29uc3QgbD1hLnNlcTFSYW5nZS5zdGFydC1vLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU7bGV0IHU7Zm9yKHU9MDt1PGwmJiEoIWUuaXNTdHJvbmdseUVxdWFsKG8uc2VxMVJhbmdlLnN0YXJ0K3Usby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlK3UpfHwhdC5pc1N0cm9uZ2x5RXF1YWwoby5zZXEyUmFuZ2Uuc3RhcnQrdSxvLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrdSkpO3UrKyk7aWYodT09PWwpe3JbcysxXT1uZXcgSyhuZXcgeihvLnNlcTFSYW5nZS5zdGFydCtsLGEuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSksbmV3IHooby5zZXEyUmFuZ2Uuc3RhcnQrbCxhLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUpKTtjb250aW51ZX11PjAmJihvPW8uZGVsdGEodSkpfWkucHVzaChvKX1yZXR1cm4gci5sZW5ndGg+MCYmaS5wdXNoKHJbci5sZW5ndGgtMV0pLGl9ZnVuY3Rpb24gQmwoZSx0LG4pe2lmKCFlLmdldEJvdW5kYXJ5U2NvcmV8fCF0LmdldEJvdW5kYXJ5U2NvcmUpcmV0dXJuIG47Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspe2NvbnN0IGk9cj4wP25bci0xXTp2b2lkIDAscz1uW3JdLGE9cisxPG4ubGVuZ3RoP25bcisxXTp2b2lkIDAsbz1uZXcgeihpP2kuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxOjAsYT9hLnNlcTFSYW5nZS5zdGFydC0xOmUubGVuZ3RoKSxsPW5ldyB6KGk/aS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKzE6MCxhP2Euc2VxMlJhbmdlLnN0YXJ0LTE6dC5sZW5ndGgpO3Muc2VxMVJhbmdlLmlzRW1wdHk/bltyXT1TcyhzLGUsdCxvLGwpOnMuc2VxMlJhbmdlLmlzRW1wdHkmJihuW3JdPVNzKHMuc3dhcCgpLHQsZSxsLG8pLnN3YXAoKSl9cmV0dXJuIG59ZnVuY3Rpb24gU3MoZSx0LG4scixpKXtsZXQgYT0xO2Zvcig7ZS5zZXExUmFuZ2Uuc3RhcnQtYT49ci5zdGFydCYmZS5zZXEyUmFuZ2Uuc3RhcnQtYT49aS5zdGFydCYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQtYSxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtYSkmJmE8MTAwOylhKys7YS0tO2xldCBvPTA7Zm9yKDtlLnNlcTFSYW5nZS5zdGFydCtvPHIuZW5kRXhjbHVzaXZlJiZlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbzxpLmVuZEV4Y2x1c2l2ZSYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQrbyxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbykmJm88MTAwOylvKys7aWYoYT09PTAmJm89PT0wKXJldHVybiBlO2xldCBsPTAsdT0tMTtmb3IobGV0IGY9LWE7Zjw9bztmKyspe2NvbnN0IGg9ZS5zZXEyUmFuZ2Uuc3RhcnQrZixkPWUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStmLGc9ZS5zZXExUmFuZ2Uuc3RhcnQrZixtPXQuZ2V0Qm91bmRhcnlTY29yZShnKStuLmdldEJvdW5kYXJ5U2NvcmUoaCkrbi5nZXRCb3VuZGFyeVNjb3JlKGQpO20+dSYmKHU9bSxsPWYpfXJldHVybiBlLmRlbHRhKGwpfWZ1bmN0aW9uIFVsKGUsdCxuKXtjb25zdCByPVtdO2Zvcihjb25zdCBpIG9mIG4pe2NvbnN0IHM9cltyLmxlbmd0aC0xXTtpZighcyl7ci5wdXNoKGkpO2NvbnRpbnVlfWkuc2VxMVJhbmdlLnN0YXJ0LXMuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mnx8aS5zZXEyUmFuZ2Uuc3RhcnQtcy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlPD0yP3Jbci5sZW5ndGgtMV09bmV3IEsocy5zZXExUmFuZ2Uuam9pbihpLnNlcTFSYW5nZSkscy5zZXEyUmFuZ2Uuam9pbihpLnNlcTJSYW5nZSkpOnIucHVzaChpKX1yZXR1cm4gcn1mdW5jdGlvbiAkbChlLHQsbil7Y29uc3Qgcj1LLmludmVydChuLGUubGVuZ3RoKSxpPVtdO2xldCBzPW5ldyB5ZSgwLDApO2Z1bmN0aW9uIGEobCx1KXtpZihsLm9mZnNldDE8cy5vZmZzZXQxfHxsLm9mZnNldDI8cy5vZmZzZXQyKXJldHVybjtjb25zdCBmPWUuZmluZFdvcmRDb250YWluaW5nKGwub2Zmc2V0MSksaD10LmZpbmRXb3JkQ29udGFpbmluZyhsLm9mZnNldDIpO2lmKCFmfHwhaClyZXR1cm47bGV0IGQ9bmV3IEsoZixoKTtjb25zdCBnPWQuaW50ZXJzZWN0KHUpO2xldCBtPWcuc2VxMVJhbmdlLmxlbmd0aCx2PWcuc2VxMlJhbmdlLmxlbmd0aDtmb3IoO3IubGVuZ3RoPjA7KXtjb25zdCBwPXJbMF07aWYoIShwLnNlcTFSYW5nZS5pbnRlcnNlY3RzKGQuc2VxMVJhbmdlKXx8cC5zZXEyUmFuZ2UuaW50ZXJzZWN0cyhkLnNlcTJSYW5nZSkpKWJyZWFrO2NvbnN0IHk9ZS5maW5kV29yZENvbnRhaW5pbmcocC5zZXExUmFuZ2Uuc3RhcnQpLGI9dC5maW5kV29yZENvbnRhaW5pbmcocC5zZXEyUmFuZ2Uuc3RhcnQpLEw9bmV3IEsoeSxiKSxTPUwuaW50ZXJzZWN0KHApO2lmKG0rPVMuc2VxMVJhbmdlLmxlbmd0aCx2Kz1TLnNlcTJSYW5nZS5sZW5ndGgsZD1kLmpvaW4oTCksZC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPj1wLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpci5zaGlmdCgpO2Vsc2UgYnJlYWt9bSt2PChkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoKSoyLzMmJmkucHVzaChkKSxzPWQuZ2V0RW5kRXhjbHVzaXZlcygpfWZvcig7ci5sZW5ndGg+MDspe2NvbnN0IGw9ci5zaGlmdCgpO2wuc2VxMVJhbmdlLmlzRW1wdHl8fChhKGwuZ2V0U3RhcnRzKCksbCksYShsLmdldEVuZEV4Y2x1c2l2ZXMoKS5kZWx0YSgtMSksbCkpfXJldHVybiBXbChuLGkpfWZ1bmN0aW9uIFdsKGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCByPWVbMF0saT10WzBdO2xldCBzO3ImJighaXx8ci5zZXExUmFuZ2Uuc3RhcnQ8aS5zZXExUmFuZ2Uuc3RhcnQpP3M9ZS5zaGlmdCgpOnM9dC5zaGlmdCgpLG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49cy5zZXExUmFuZ2Uuc3RhcnQ/bltuLmxlbmd0aC0xXT1uW24ubGVuZ3RoLTFdLmpvaW4ocyk6bi5wdXNoKHMpfXJldHVybiBufWZ1bmN0aW9uIEhsKGUsdCxuKXtsZXQgcj1uO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gcjtsZXQgaT0wLHM7ZG97cz0hMTtjb25zdCBhPVtyWzBdXTtmb3IobGV0IG89MTtvPHIubGVuZ3RoO28rKyl7bGV0IGY9ZnVuY3Rpb24oZCxnKXtjb25zdCBtPW5ldyB6KHUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxsLnNlcTFSYW5nZS5zdGFydCk7cmV0dXJuIGUuZ2V0VGV4dChtKS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGg8PTQmJihkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoPjV8fGcuc2VxMVJhbmdlLmxlbmd0aCtnLnNlcTJSYW5nZS5sZW5ndGg+NSl9O2NvbnN0IGw9cltvXSx1PWFbYS5sZW5ndGgtMV07Zih1LGwpPyhzPSEwLGFbYS5sZW5ndGgtMV09YVthLmxlbmd0aC0xXS5qb2luKGwpKTphLnB1c2gobCl9cj1hfXdoaWxlKGkrKzwxMCYmcyk7cmV0dXJuIHJ9ZnVuY3Rpb24gemwoZSx0LG4pe2xldCByPW47aWYoci5sZW5ndGg9PT0wKXJldHVybiByO2xldCBpPTAscztkb3tzPSExO2NvbnN0IG89W3JbMF1dO2ZvcihsZXQgbD0xO2w8ci5sZW5ndGg7bCsrKXtsZXQgaD1mdW5jdGlvbihnLG0pe2NvbnN0IHY9bmV3IHooZi5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHUuc2VxMVJhbmdlLnN0YXJ0KTtpZihlLmNvdW50TGluZXNJbih2KT41fHx2Lmxlbmd0aD41MDApcmV0dXJuITE7Y29uc3QgeD1lLmdldFRleHQodikudHJpbSgpO2lmKHgubGVuZ3RoPjIwfHx4LnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RoPjEpcmV0dXJuITE7Y29uc3QgeT1lLmNvdW50TGluZXNJbihnLnNlcTFSYW5nZSksYj1nLnNlcTFSYW5nZS5sZW5ndGgsTD10LmNvdW50TGluZXNJbihnLnNlcTJSYW5nZSksUz1nLnNlcTJSYW5nZS5sZW5ndGgsXz1lLmNvdW50TGluZXNJbihtLnNlcTFSYW5nZSksTj1tLnNlcTFSYW5nZS5sZW5ndGgsQT10LmNvdW50TGluZXNJbihtLnNlcTJSYW5nZSksTT1tLnNlcTJSYW5nZS5sZW5ndGgsST0yKjQwKzUwO2Z1bmN0aW9uIEModyl7cmV0dXJuIE1hdGgubWluKHcsSSl9cmV0dXJuIE1hdGgucG93KE1hdGgucG93KEMoeSo0MCtiKSwxLjUpK01hdGgucG93KEMoTCo0MCtTKSwxLjUpLDEuNSkrTWF0aC5wb3coTWF0aC5wb3coQyhfKjQwK04pLDEuNSkrTWF0aC5wb3coQyhBKjQwK00pLDEuNSksMS41KT4oSSoqMS41KSoqMS41KjEuM307Y29uc3QgdT1yW2xdLGY9b1tvLmxlbmd0aC0xXTtoKGYsdSk/KHM9ITAsb1tvLmxlbmd0aC0xXT1vW28ubGVuZ3RoLTFdLmpvaW4odSkpOm8ucHVzaCh1KX1yPW99d2hpbGUoaSsrPDEwJiZzKTtjb25zdCBhPVtdO3JldHVybiBVbyhyLChvLGwsdSk9PntsZXQgZj1sO2Z1bmN0aW9uIGgoeCl7cmV0dXJuIHgubGVuZ3RoPjAmJngudHJpbSgpLmxlbmd0aDw9MyYmbC5zZXExUmFuZ2UubGVuZ3RoK2wuc2VxMlJhbmdlLmxlbmd0aD4xMDB9Y29uc3QgZD1lLmV4dGVuZFRvRnVsbExpbmVzKGwuc2VxMVJhbmdlKSxnPWUuZ2V0VGV4dChuZXcgeihkLnN0YXJ0LGwuc2VxMVJhbmdlLnN0YXJ0KSk7aChnKSYmKGY9Zi5kZWx0YVN0YXJ0KC1nLmxlbmd0aCkpO2NvbnN0IG09ZS5nZXRUZXh0KG5ldyB6KGwuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxkLmVuZEV4Y2x1c2l2ZSkpO2gobSkmJihmPWYuZGVsdGFFbmQobS5sZW5ndGgpKTtjb25zdCB2PUsuZnJvbU9mZnNldFBhaXJzKG8/by5nZXRFbmRFeGNsdXNpdmVzKCk6eWUuemVybyx1P3UuZ2V0U3RhcnRzKCk6eWUubWF4KSxwPWYuaW50ZXJzZWN0KHYpO2EubGVuZ3RoPjAmJnAuZ2V0U3RhcnRzKCkuZXF1YWxzKGFbYS5sZW5ndGgtMV0uZ2V0RW5kRXhjbHVzaXZlcygpKT9hW2EubGVuZ3RoLTFdPWFbYS5sZW5ndGgtMV0uam9pbihwKTphLnB1c2gocCl9KSxhfWNsYXNzIExze2NvbnN0cnVjdG9yKHQsbil7dGhpcy50cmltbWVkSGFzaD10LHRoaXMubGluZXM9bn1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLnRyaW1tZWRIYXNoW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaC5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPXQ9PT0wPzA6TnModGhpcy5saW5lc1t0LTFdKSxyPXQ9PT10aGlzLmxpbmVzLmxlbmd0aD8wOk5zKHRoaXMubGluZXNbdF0pO3JldHVybiAxZTMtKG4rcil9Z2V0VGV4dCh0KXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSh0LnN0YXJ0LHQuZW5kRXhjbHVzaXZlKS5qb2luKGAKYCl9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMubGluZXNbdF09PT10aGlzLmxpbmVzW25dfX1mdW5jdGlvbiBOcyhlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmKGUuY2hhckNvZGVBdCh0KT09PTMyfHxlLmNoYXJDb2RlQXQodCk9PT05KTspdCsrO3JldHVybiB0fWNsYXNzIEdse2NvbnN0cnVjdG9yKCl7dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nPW5ldyBSbCx0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobT1uZXcgcHN9Y29tcHV0ZURpZmYodCxuLHIpe2lmKHQubGVuZ3RoPD0xJiZqbyh0LG4sKFMsXyk9PlM9PT1fKSlyZXR1cm4gbmV3IGhuKFtdLFtdLCExKTtpZih0Lmxlbmd0aD09PTEmJnRbMF0ubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0xJiZuWzBdLmxlbmd0aD09PTApcmV0dXJuIG5ldyBobihbbmV3IHFlKG5ldyBIKDEsdC5sZW5ndGgrMSksbmV3IEgoMSxuLmxlbmd0aCsxKSxbbmV3IHl0KG5ldyBzZSgxLDEsdC5sZW5ndGgsdFswXS5sZW5ndGgrMSksbmV3IHNlKDEsMSxuLmxlbmd0aCxuWzBdLmxlbmd0aCsxKSldKV0sW10sITEpO2NvbnN0IGk9ci5tYXhDb21wdXRhdGlvblRpbWVNcz09PTA/VnQuaW5zdGFuY2U6bmV3IE1sKHIubWF4Q29tcHV0YXRpb25UaW1lTXMpLHM9IXIuaWdub3JlVHJpbVdoaXRlc3BhY2UsYT1uZXcgTWFwO2Z1bmN0aW9uIG8oUyl7bGV0IF89YS5nZXQoUyk7cmV0dXJuIF89PT12b2lkIDAmJihfPWEuc2l6ZSxhLnNldChTLF8pKSxffWNvbnN0IGw9dC5tYXAoUz0+byhTLnRyaW0oKSkpLHU9bi5tYXAoUz0+byhTLnRyaW0oKSkpLGY9bmV3IExzKGwsdCksaD1uZXcgTHModSxuKSxkPWYubGVuZ3RoK2gubGVuZ3RoPDE3MDA/dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nLmNvbXB1dGUoZixoLGksKFMsXyk9PnRbU109PT1uW19dP25bX10ubGVuZ3RoPT09MD8uMToxK01hdGgubG9nKDErbltfXS5sZW5ndGgpOi45OSk6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZShmLGgpO2xldCBnPWQuZGlmZnMsbT1kLmhpdFRpbWVvdXQ7Zz13cyhmLGgsZyksZz1IbChmLGgsZyk7Y29uc3Qgdj1bXSxwPVM9PntpZihzKWZvcihsZXQgXz0wO188UztfKyspe2NvbnN0IE49eCtfLEE9eStfO2lmKHRbTl0hPT1uW0FdKXtjb25zdCBNPXRoaXMucmVmaW5lRGlmZih0LG4sbmV3IEsobmV3IHooTixOKzEpLG5ldyB6KEEsQSsxKSksaSxzKTtmb3IoY29uc3QgSSBvZiBNLm1hcHBpbmdzKXYucHVzaChJKTtNLmhpdFRpbWVvdXQmJihtPSEwKX19fTtsZXQgeD0wLHk9MDtmb3IoY29uc3QgUyBvZiBnKXtmbigoKT0+Uy5zZXExUmFuZ2Uuc3RhcnQteD09PVMuc2VxMlJhbmdlLnN0YXJ0LXkpO2NvbnN0IF89Uy5zZXExUmFuZ2Uuc3RhcnQteDtwKF8pLHg9Uy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHk9Uy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlO2NvbnN0IE49dGhpcy5yZWZpbmVEaWZmKHQsbixTLGkscyk7Ti5oaXRUaW1lb3V0JiYobT0hMCk7Zm9yKGNvbnN0IEEgb2YgTi5tYXBwaW5ncyl2LnB1c2goQSl9cCh0Lmxlbmd0aC14KTtjb25zdCBiPUFzKHYsdCxuKTtsZXQgTD1bXTtyZXR1cm4gci5jb21wdXRlTW92ZXMmJihMPXRoaXMuY29tcHV0ZU1vdmVzKGIsdCxuLGwsdSxpLHMpKSxmbigoKT0+e2Z1bmN0aW9uIFMoTixBKXtpZihOLmxpbmVOdW1iZXI8MXx8Ti5saW5lTnVtYmVyPkEubGVuZ3RoKXJldHVybiExO2NvbnN0IE09QVtOLmxpbmVOdW1iZXItMV07cmV0dXJuIShOLmNvbHVtbjwxfHxOLmNvbHVtbj5NLmxlbmd0aCsxKX1mdW5jdGlvbiBfKE4sQSl7cmV0dXJuIShOLnN0YXJ0TGluZU51bWJlcjwxfHxOLnN0YXJ0TGluZU51bWJlcj5BLmxlbmd0aCsxfHxOLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8MXx8Ti5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPkEubGVuZ3RoKzEpfWZvcihjb25zdCBOIG9mIGIpe2lmKCFOLmlubmVyQ2hhbmdlcylyZXR1cm4hMTtmb3IoY29uc3QgQSBvZiBOLmlubmVyQ2hhbmdlcylpZighKFMoQS5tb2RpZmllZFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSxuKSYmUyhBLm1vZGlmaWVkUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKSxuKSYmUyhBLm9yaWdpbmFsUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpLHQpJiZTKEEub3JpZ2luYWxSYW5nZS5nZXRFbmRQb3NpdGlvbigpLHQpKSlyZXR1cm4hMTtpZighXyhOLm1vZGlmaWVkLG4pfHwhXyhOLm9yaWdpbmFsLHQpKXJldHVybiExfXJldHVybiEwfSksbmV3IGhuKGIsTCxtKX1jb21wdXRlTW92ZXModCxuLHIsaSxzLGEsbyl7cmV0dXJuIElsKHQsbixyLGkscyxhKS5tYXAoZj0+e2NvbnN0IGg9dGhpcy5yZWZpbmVEaWZmKG4scixuZXcgSyhmLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKSxmLm1vZGlmaWVkLnRvT2Zmc2V0UmFuZ2UoKSksYSxvKSxkPUFzKGgubWFwcGluZ3MsbixyLCEwKTtyZXR1cm4gbmV3IFNsKGYsZCl9KX1yZWZpbmVEaWZmKHQsbixyLGkscyl7Y29uc3QgYT1uZXcgZG4odCxyLnNlcTFSYW5nZSxzKSxvPW5ldyBkbihuLHIuc2VxMlJhbmdlLHMpLGw9YS5sZW5ndGgrby5sZW5ndGg8NTAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKGEsbyxpKTp0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobS5jb21wdXRlKGEsbyxpKTtsZXQgdT1sLmRpZmZzO3JldHVybiB1PXdzKGEsbyx1KSx1PSRsKGEsbyx1KSx1PVVsKGEsbyx1KSx1PXpsKGEsbyx1KSx7bWFwcGluZ3M6dS5tYXAoaD0+bmV3IHl0KGEudHJhbnNsYXRlUmFuZ2UoaC5zZXExUmFuZ2UpLG8udHJhbnNsYXRlUmFuZ2UoaC5zZXEyUmFuZ2UpKSksaGl0VGltZW91dDpsLmhpdFRpbWVvdXR9fX1mdW5jdGlvbiBBcyhlLHQsbixyPSExKXtjb25zdCBpPVtdO2Zvcihjb25zdCBzIG9mIHFvKGUubWFwKGE9PkpsKGEsdCxuKSksKGEsbyk9PmEub3JpZ2luYWwub3ZlcmxhcE9yVG91Y2goby5vcmlnaW5hbCl8fGEubW9kaWZpZWQub3ZlcmxhcE9yVG91Y2goby5tb2RpZmllZCkpKXtjb25zdCBhPXNbMF0sbz1zW3MubGVuZ3RoLTFdO2kucHVzaChuZXcgcWUoYS5vcmlnaW5hbC5qb2luKG8ub3JpZ2luYWwpLGEubW9kaWZpZWQuam9pbihvLm1vZGlmaWVkKSxzLm1hcChsPT5sLmlubmVyQ2hhbmdlc1swXSkpKX1yZXR1cm4gZm4oKCk9PiFyJiZpLmxlbmd0aD4wJiYoaVswXS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIhPT1pWzBdLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcnx8bi5sZW5ndGgtaVtpLmxlbmd0aC0xXS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlIT09dC5sZW5ndGgtaVtpLmxlbmd0aC0xXS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKT8hMTpjcyhpLChzLGEpPT5hLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1zLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1hLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1zLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxhLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciYmcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPGEubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyKSksaX1mdW5jdGlvbiBKbChlLHQsbil7bGV0IHI9MCxpPTA7ZS5tb2RpZmllZFJhbmdlLmVuZENvbHVtbj09PTEmJmUub3JpZ2luYWxSYW5nZS5lbmRDb2x1bW49PT0xJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3I8PWUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyJiZlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3I8PWUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyJiYoaT0tMSksZS5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLTE+PW5bZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlci0xXS5sZW5ndGgmJmUub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbi0xPj10W2Uub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyPD1lLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcitpJiZlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyPD1lLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcitpJiYocj0xKTtjb25zdCBzPW5ldyBIKGUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIrcixlLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcisxK2kpLGE9bmV3IEgoZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcityLGUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyKzEraSk7cmV0dXJuIG5ldyBxZShzLGEsW2VdKX1jb25zdCBDcz17Z2V0TGVnYWN5OigpPT5uZXcgQWwsZ2V0RGVmYXVsdDooKT0+bmV3IEdsfTtmdW5jdGlvbiBZZShlLHQpe2NvbnN0IG49TWF0aC5wb3coMTAsdCk7cmV0dXJuIE1hdGgucm91bmQoZSpuKS9ufWNsYXNzIGFle2NvbnN0cnVjdG9yKHQsbixyLGk9MSl7dGhpcy5fcmdiYUJyYW5kPXZvaWQgMCx0aGlzLnI9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsdCkpfDAsdGhpcy5nPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLG4pKXwwLHRoaXMuYj1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxyKSl8MCx0aGlzLmE9WWUoTWF0aC5tYXgoTWF0aC5taW4oMSxpKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQucj09PW4uciYmdC5nPT09bi5nJiZ0LmI9PT1uLmImJnQuYT09PW4uYX19Y2xhc3MgTGV7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5faHNsYUJyYW5kPXZvaWQgMCx0aGlzLmg9TWF0aC5tYXgoTWF0aC5taW4oMzYwLHQpLDApfDAsdGhpcy5zPVllKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5sPVllKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyksdGhpcy5hPVllKE1hdGgubWF4KE1hdGgubWluKDEsaSksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0Lmg9PT1uLmgmJnQucz09PW4ucyYmdC5sPT09bi5sJiZ0LmE9PT1uLmF9c3RhdGljIGZyb21SR0JBKHQpe2NvbnN0IG49dC5yLzI1NSxyPXQuZy8yNTUsaT10LmIvMjU1LHM9dC5hLGE9TWF0aC5tYXgobixyLGkpLG89TWF0aC5taW4obixyLGkpO2xldCBsPTAsdT0wO2NvbnN0IGY9KG8rYSkvMixoPWEtbztpZihoPjApe3N3aXRjaCh1PU1hdGgubWluKGY8PS41P2gvKDIqZik6aC8oMi0yKmYpLDEpLGEpe2Nhc2UgbjpsPShyLWkpL2grKHI8aT82OjApO2JyZWFrO2Nhc2UgcjpsPShpLW4pL2grMjticmVhaztjYXNlIGk6bD0obi1yKS9oKzQ7YnJlYWt9bCo9NjAsbD1NYXRoLnJvdW5kKGwpfXJldHVybiBuZXcgTGUobCx1LGYscyl9c3RhdGljIF9odWUycmdiKHQsbixyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/dCsobi10KSo2KnI6cjwxLzI/bjpyPDIvMz90KyhuLXQpKigyLzMtcikqNjp0fXN0YXRpYyB0b1JHQkEodCl7Y29uc3Qgbj10LmgvMzYwLHtzOnIsbDppLGE6c309dDtsZXQgYSxvLGw7aWYocj09PTApYT1vPWw9aTtlbHNle2NvbnN0IHU9aTwuNT9pKigxK3IpOmkrci1pKnIsZj0yKmktdTthPUxlLl9odWUycmdiKGYsdSxuKzEvMyksbz1MZS5faHVlMnJnYihmLHUsbiksbD1MZS5faHVlMnJnYihmLHUsbi0xLzMpfXJldHVybiBuZXcgYWUoTWF0aC5yb3VuZChhKjI1NSksTWF0aC5yb3VuZChvKjI1NSksTWF0aC5yb3VuZChsKjI1NSkscyl9fWNsYXNzIFN0e2NvbnN0cnVjdG9yKHQsbixyLGkpe3RoaXMuX2hzdmFCcmFuZD12b2lkIDAsdGhpcy5oPU1hdGgubWF4KE1hdGgubWluKDM2MCx0KSwwKXwwLHRoaXMucz1ZZShNYXRoLm1heChNYXRoLm1pbigxLG4pLDApLDMpLHRoaXMudj1ZZShNYXRoLm1heChNYXRoLm1pbigxLHIpLDApLDMpLHRoaXMuYT1ZZShNYXRoLm1heChNYXRoLm1pbigxLGkpLDApLDMpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4gdC5oPT09bi5oJiZ0LnM9PT1uLnMmJnQudj09PW4udiYmdC5hPT09bi5hfXN0YXRpYyBmcm9tUkdCQSh0KXtjb25zdCBuPXQuci8yNTUscj10LmcvMjU1LGk9dC5iLzI1NSxzPU1hdGgubWF4KG4scixpKSxhPU1hdGgubWluKG4scixpKSxvPXMtYSxsPXM9PT0wPzA6by9zO2xldCB1O3JldHVybiBvPT09MD91PTA6cz09PW4/dT0oKHItaSkvbyU2KzYpJTY6cz09PXI/dT0oaS1uKS9vKzI6dT0obi1yKS9vKzQsbmV3IFN0KE1hdGgucm91bmQodSo2MCksbCxzLHQuYSl9c3RhdGljIHRvUkdCQSh0KXtjb25zdHtoOm4sczpyLHY6aSxhOnN9PXQsYT1pKnIsbz1hKigxLU1hdGguYWJzKG4vNjAlMi0xKSksbD1pLWE7bGV0W3UsZixoXT1bMCwwLDBdO3JldHVybiBuPDYwPyh1PWEsZj1vKTpuPDEyMD8odT1vLGY9YSk6bjwxODA/KGY9YSxoPW8pOm48MjQwPyhmPW8saD1hKTpuPDMwMD8odT1vLGg9YSk6bjw9MzYwJiYodT1hLGg9byksdT1NYXRoLnJvdW5kKCh1K2wpKjI1NSksZj1NYXRoLnJvdW5kKChmK2wpKjI1NSksaD1NYXRoLnJvdW5kKChoK2wpKjI1NSksbmV3IGFlKHUsZixoLHMpfX1sZXQgcmU9Y2xhc3MgTmV7c3RhdGljIGZyb21IZXgodCl7cmV0dXJuIE5lLkZvcm1hdC5DU1MucGFyc2VIZXgodCl8fE5lLnJlZH1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIXQmJiFuPyEwOiF0fHwhbj8hMTp0LmVxdWFscyhuKX1nZXQgaHNsYSgpe3JldHVybiB0aGlzLl9oc2xhP3RoaXMuX2hzbGE6TGUuZnJvbVJHQkEodGhpcy5yZ2JhKX1nZXQgaHN2YSgpe3JldHVybiB0aGlzLl9oc3ZhP3RoaXMuX2hzdmE6U3QuZnJvbVJHQkEodGhpcy5yZ2JhKX1jb25zdHJ1Y3Rvcih0KXtpZih0KWlmKHQgaW5zdGFuY2VvZiBhZSl0aGlzLnJnYmE9dDtlbHNlIGlmKHQgaW5zdGFuY2VvZiBMZSl0aGlzLl9oc2xhPXQsdGhpcy5yZ2JhPUxlLnRvUkdCQSh0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBTdCl0aGlzLl9oc3ZhPXQsdGhpcy5yZ2JhPVN0LnRvUkdCQSh0KTtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciBjdG9yIGFyZ3VtZW50Iik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIG5lZWRzIGEgdmFsdWUiKX1lcXVhbHModCl7cmV0dXJuISF0JiZhZS5lcXVhbHModGhpcy5yZ2JhLHQucmdiYSkmJkxlLmVxdWFscyh0aGlzLmhzbGEsdC5oc2xhKSYmU3QuZXF1YWxzKHRoaXMuaHN2YSx0LmhzdmEpfWdldFJlbGF0aXZlTHVtaW5hbmNlKCl7Y29uc3QgdD1OZS5fcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodGhpcy5yZ2JhLnIpLG49TmUuX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5nKSxyPU5lLl9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuYiksaT0uMjEyNip0Ky43MTUyKm4rLjA3MjIqcjtyZXR1cm4gWWUoaSw0KX1zdGF0aWMgX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHQpe2NvbnN0IG49dC8yNTU7cmV0dXJuIG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9aXNMaWdodGVyKCl7cmV0dXJuKHRoaXMucmdiYS5yKjI5OSt0aGlzLnJnYmEuZyo1ODcrdGhpcy5yZ2JhLmIqMTE0KS8xZTM+PTEyOH1pc0xpZ2h0ZXJUaGFuKHQpe2NvbnN0IG49dGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHI9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPnJ9aXNEYXJrZXJUaGFuKHQpe2NvbnN0IG49dGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHI9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPHJ9bGlnaHRlbih0KXtyZXR1cm4gbmV3IE5lKG5ldyBMZSh0aGlzLmhzbGEuaCx0aGlzLmhzbGEucyx0aGlzLmhzbGEubCt0aGlzLmhzbGEubCp0LHRoaXMuaHNsYS5hKSl9ZGFya2VuKHQpe3JldHVybiBuZXcgTmUobmV3IExlKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sLXRoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX10cmFuc3BhcmVudCh0KXtjb25zdHtyOm4sZzpyLGI6aSxhOnN9PXRoaXMucmdiYTtyZXR1cm4gbmV3IE5lKG5ldyBhZShuLHIsaSxzKnQpKX1pc1RyYW5zcGFyZW50KCl7cmV0dXJuIHRoaXMucmdiYS5hPT09MH1pc09wYXF1ZSgpe3JldHVybiB0aGlzLnJnYmEuYT09PTF9b3Bwb3NpdGUoKXtyZXR1cm4gbmV3IE5lKG5ldyBhZSgyNTUtdGhpcy5yZ2JhLnIsMjU1LXRoaXMucmdiYS5nLDI1NS10aGlzLnJnYmEuYix0aGlzLnJnYmEuYSkpfW1ha2VPcGFxdWUodCl7aWYodGhpcy5pc09wYXF1ZSgpfHx0LnJnYmEuYSE9PTEpcmV0dXJuIHRoaXM7Y29uc3R7cjpuLGc6cixiOmksYTpzfT10aGlzLnJnYmE7cmV0dXJuIG5ldyBOZShuZXcgYWUodC5yZ2JhLnItcyoodC5yZ2JhLnItbiksdC5yZ2JhLmctcyoodC5yZ2JhLmctciksdC5yZ2JhLmItcyoodC5yZ2JhLmItaSksMSkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RvU3RyaW5nfHwodGhpcy5fdG9TdHJpbmc9TmUuRm9ybWF0LkNTUy5mb3JtYXQodGhpcykpLHRoaXMuX3RvU3RyaW5nfXN0YXRpYyBnZXRMaWdodGVyQ29sb3IodCxuLHIpe2lmKHQuaXNMaWdodGVyVGhhbihuKSlyZXR1cm4gdDtyPXJ8fC41O2NvbnN0IGk9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHM9bi5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiByPXIqKHMtaSkvcyx0LmxpZ2h0ZW4ocil9c3RhdGljIGdldERhcmtlckNvbG9yKHQsbixyKXtpZih0LmlzRGFya2VyVGhhbihuKSlyZXR1cm4gdDtyPXJ8fC41O2NvbnN0IGk9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHM9bi5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiByPXIqKGktcykvaSx0LmRhcmtlbihyKX19O3JlLndoaXRlPW5ldyByZShuZXcgYWUoMjU1LDI1NSwyNTUsMSkpLHJlLmJsYWNrPW5ldyByZShuZXcgYWUoMCwwLDAsMSkpLHJlLnJlZD1uZXcgcmUobmV3IGFlKDI1NSwwLDAsMSkpLHJlLmJsdWU9bmV3IHJlKG5ldyBhZSgwLDAsMjU1LDEpKSxyZS5ncmVlbj1uZXcgcmUobmV3IGFlKDAsMjU1LDAsMSkpLHJlLmN5YW49bmV3IHJlKG5ldyBhZSgwLDI1NSwyNTUsMSkpLHJlLmxpZ2h0Z3JleT1uZXcgcmUobmV3IGFlKDIxMSwyMTEsMjExLDEpKSxyZS50cmFuc3BhcmVudD1uZXcgcmUobmV3IGFlKDAsMCwwLDApKSxmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIoZyl7cmV0dXJuIGcucmdiYS5hPT09MT9gcmdiKCR7Zy5yZ2JhLnJ9LCAke2cucmdiYS5nfSwgJHtnLnJnYmEuYn0pYDplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQShnKX1uLmZvcm1hdFJHQj1yO2Z1bmN0aW9uIGkoZyl7cmV0dXJuYHJnYmEoJHtnLnJnYmEucn0sICR7Zy5yZ2JhLmd9LCAke2cucmdiYS5ifSwgJHsrZy5yZ2JhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdFJHQkE9aTtmdW5jdGlvbiBzKGcpe3JldHVybiBnLmhzbGEuYT09PTE/YGhzbCgke2cuaHNsYS5ofSwgJHsoZy5oc2xhLnMqMTAwKS50b0ZpeGVkKDIpfSUsICR7KGcuaHNsYS5sKjEwMCkudG9GaXhlZCgyKX0lKWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhTTEEoZyl9bi5mb3JtYXRIU0w9cztmdW5jdGlvbiBhKGcpe3JldHVybmBoc2xhKCR7Zy5oc2xhLmh9LCAkeyhnLmhzbGEucyoxMDApLnRvRml4ZWQoMil9JSwgJHsoZy5oc2xhLmwqMTAwKS50b0ZpeGVkKDIpfSUsICR7Zy5oc2xhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdEhTTEE9YTtmdW5jdGlvbiBvKGcpe2NvbnN0IG09Zy50b1N0cmluZygxNik7cmV0dXJuIG0ubGVuZ3RoIT09Mj8iMCIrbTptfWZ1bmN0aW9uIGwoZyl7cmV0dXJuYCMke28oZy5yZ2JhLnIpfSR7byhnLnJnYmEuZyl9JHtvKGcucmdiYS5iKX1gfW4uZm9ybWF0SGV4PWw7ZnVuY3Rpb24gdShnLG09ITEpe3JldHVybiBtJiZnLnJnYmEuYT09PTE/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleChnKTpgIyR7byhnLnJnYmEucil9JHtvKGcucmdiYS5nKX0ke28oZy5yZ2JhLmIpfSR7byhNYXRoLnJvdW5kKGcucmdiYS5hKjI1NSkpfWB9bi5mb3JtYXRIZXhBPXU7ZnVuY3Rpb24gZihnKXtyZXR1cm4gZy5pc09wYXF1ZSgpP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgoZyk6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEoZyl9bi5mb3JtYXQ9ZjtmdW5jdGlvbiBoKGcpe2NvbnN0IG09Zy5sZW5ndGg7aWYobT09PTB8fGcuY2hhckNvZGVBdCgwKSE9PTM1KXJldHVybiBudWxsO2lmKG09PT03KXtjb25zdCB2PTE2KmQoZy5jaGFyQ29kZUF0KDEpKStkKGcuY2hhckNvZGVBdCgyKSkscD0xNipkKGcuY2hhckNvZGVBdCgzKSkrZChnLmNoYXJDb2RlQXQoNCkpLHg9MTYqZChnLmNoYXJDb2RlQXQoNSkpK2QoZy5jaGFyQ29kZUF0KDYpKTtyZXR1cm4gbmV3IGUobmV3IGFlKHYscCx4LDEpKX1pZihtPT09OSl7Y29uc3Qgdj0xNipkKGcuY2hhckNvZGVBdCgxKSkrZChnLmNoYXJDb2RlQXQoMikpLHA9MTYqZChnLmNoYXJDb2RlQXQoMykpK2QoZy5jaGFyQ29kZUF0KDQpKSx4PTE2KmQoZy5jaGFyQ29kZUF0KDUpKStkKGcuY2hhckNvZGVBdCg2KSkseT0xNipkKGcuY2hhckNvZGVBdCg3KSkrZChnLmNoYXJDb2RlQXQoOCkpO3JldHVybiBuZXcgZShuZXcgYWUodixwLHgseS8yNTUpKX1pZihtPT09NCl7Y29uc3Qgdj1kKGcuY2hhckNvZGVBdCgxKSkscD1kKGcuY2hhckNvZGVBdCgyKSkseD1kKGcuY2hhckNvZGVBdCgzKSk7cmV0dXJuIG5ldyBlKG5ldyBhZSgxNip2K3YsMTYqcCtwLDE2KngreCkpfWlmKG09PT01KXtjb25zdCB2PWQoZy5jaGFyQ29kZUF0KDEpKSxwPWQoZy5jaGFyQ29kZUF0KDIpKSx4PWQoZy5jaGFyQ29kZUF0KDMpKSx5PWQoZy5jaGFyQ29kZUF0KDQpKTtyZXR1cm4gbmV3IGUobmV3IGFlKDE2KnYrdiwxNipwK3AsMTYqeCt4LCgxNip5K3kpLzI1NSkpfXJldHVybiBudWxsfW4ucGFyc2VIZXg9aDtmdW5jdGlvbiBkKGcpe3N3aXRjaChnKXtjYXNlIDQ4OnJldHVybiAwO2Nhc2UgNDk6cmV0dXJuIDE7Y2FzZSA1MDpyZXR1cm4gMjtjYXNlIDUxOnJldHVybiAzO2Nhc2UgNTI6cmV0dXJuIDQ7Y2FzZSA1MzpyZXR1cm4gNTtjYXNlIDU0OnJldHVybiA2O2Nhc2UgNTU6cmV0dXJuIDc7Y2FzZSA1NjpyZXR1cm4gODtjYXNlIDU3OnJldHVybiA5O2Nhc2UgOTc6cmV0dXJuIDEwO2Nhc2UgNjU6cmV0dXJuIDEwO2Nhc2UgOTg6cmV0dXJuIDExO2Nhc2UgNjY6cmV0dXJuIDExO2Nhc2UgOTk6cmV0dXJuIDEyO2Nhc2UgNjc6cmV0dXJuIDEyO2Nhc2UgMTAwOnJldHVybiAxMztjYXNlIDY4OnJldHVybiAxMztjYXNlIDEwMTpyZXR1cm4gMTQ7Y2FzZSA2OTpyZXR1cm4gMTQ7Y2FzZSAxMDI6cmV0dXJuIDE1O2Nhc2UgNzA6cmV0dXJuIDE1fXJldHVybiAwfX0pKHQuQ1NTfHwodC5DU1M9e30pKX0pKGUuRm9ybWF0fHwoZS5Gb3JtYXQ9e30pKX0ocmV8fChyZT17fSkpO2Z1bmN0aW9uIGtzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3Qgcj1OdW1iZXIobik7KHJ8fHI9PT0wJiZuLnJlcGxhY2UoL1xzL2csIiIpIT09IiIpJiZ0LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24gbHIoZSx0LG4scil7cmV0dXJue3JlZDplLzI1NSxibHVlOm4vMjU1LGdyZWVuOnQvMjU1LGFscGhhOnJ9fWZ1bmN0aW9uIE90KGUsdCl7Y29uc3Qgbj10LmluZGV4LHI9dFswXS5sZW5ndGg7aWYoIW4pcmV0dXJuO2NvbnN0IGk9ZS5wb3NpdGlvbkF0KG4pO3JldHVybntzdGFydExpbmVOdW1iZXI6aS5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOmkuY29sdW1uLGVuZExpbmVOdW1iZXI6aS5saW5lTnVtYmVyLGVuZENvbHVtbjppLmNvbHVtbityfX1mdW5jdGlvbiBYbChlLHQpe2lmKCFlKXJldHVybjtjb25zdCBuPXJlLkZvcm1hdC5DU1MucGFyc2VIZXgodCk7aWYobilyZXR1cm57cmFuZ2U6ZSxjb2xvcjpscihuLnJnYmEucixuLnJnYmEuZyxuLnJnYmEuYixuLnJnYmEuYSl9fWZ1bmN0aW9uIEVzKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCBpPXRbMF0udmFsdWVzKCkscz1rcyhpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpscihzWzBdLHNbMV0sc1syXSxuP3NbM106MSl9fWZ1bmN0aW9uIE1zKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCBpPXRbMF0udmFsdWVzKCkscz1rcyhpKSxhPW5ldyByZShuZXcgTGUoc1swXSxzWzFdLzEwMCxzWzJdLzEwMCxuP3NbM106MSkpO3JldHVybntyYW5nZTplLGNvbG9yOmxyKGEucmdiYS5yLGEucmdiYS5nLGEucmdiYS5iLGEucmdiYS5hKX19ZnVuY3Rpb24ganQoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP1suLi5lLm1hdGNoQWxsKHQpXTplLmZpbmRNYXRjaGVzKHQpfWZ1bmN0aW9uIFFsKGUpe2NvbnN0IHQ9W10scj1qdChlLC9cYihyZ2J8cmdiYXxoc2x8aHNsYSkoXChbMC05XHMsLlwlXSpcKSl8KCMpKFtBLUZhLWYwLTldezN9KVxifCgjKShbQS1GYS1mMC05XXs0fSlcYnwoIykoW0EtRmEtZjAtOV17Nn0pXGJ8KCMpKFtBLUZhLWYwLTldezh9KVxiL2dtKTtpZihyLmxlbmd0aD4wKWZvcihjb25zdCBpIG9mIHIpe2NvbnN0IHM9aS5maWx0ZXIodT0+dSE9PXZvaWQgMCksYT1zWzFdLG89c1syXTtpZighbyljb250aW51ZTtsZXQgbDtpZihhPT09InJnYiIpe2NvbnN0IHU9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqXCkkL2dtO2w9RXMoT3QoZSxpKSxqdChvLHUpLCExKX1lbHNlIGlmKGE9PT0icmdiYSIpe2NvbnN0IHU9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO2w9RXMoT3QoZSxpKSxqdChvLHUpLCEwKX1lbHNlIGlmKGE9PT0iaHNsIil7Y29uc3QgdT0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccypcKSQvZ207bD1NcyhPdChlLGkpLGp0KG8sdSksITEpfWVsc2UgaWYoYT09PSJoc2xhIil7Y29uc3QgdT0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccyosXHMqKDBbLl1bMC05XSt8Wy5dWzAtOV0rfFswMV1bLl18WzAxXSlccypcKSQvZ207bD1NcyhPdChlLGkpLGp0KG8sdSksITApfWVsc2UgYT09PSIjIiYmKGw9WGwoT3QoZSxpKSxhK28pKTtsJiZ0LnB1c2gobCl9cmV0dXJuIHR9ZnVuY3Rpb24gWmwoZSl7cmV0dXJuIWV8fHR5cGVvZiBlLmdldFZhbHVlIT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5wb3NpdGlvbkF0IT0iZnVuY3Rpb24iP1tdOlFsKGUpfWNvbnN0IFJzPS9cYk1BUks6XHMqKC4qKSQvZCxZbD0vXi0rfC0rJC9nO2Z1bmN0aW9uIEtsKGUsdCl7dmFyIG47bGV0IHI9W107aWYodC5maW5kUmVnaW9uU2VjdGlvbkhlYWRlcnMmJighKChuPXQuZm9sZGluZ1J1bGVzKT09PW51bGx8fG49PT12b2lkIDApJiZuLm1hcmtlcnMpKXtjb25zdCBpPWV1KGUsdCk7cj1yLmNvbmNhdChpKX1pZih0LmZpbmRNYXJrU2VjdGlvbkhlYWRlcnMpe2NvbnN0IGk9dHUoZSk7cj1yLmNvbmNhdChpKX1yZXR1cm4gcn1mdW5jdGlvbiBldShlLHQpe2NvbnN0IG49W10scj1lLmdldExpbmVDb3VudCgpO2ZvcihsZXQgaT0xO2k8PXI7aSsrKXtjb25zdCBzPWUuZ2V0TGluZUNvbnRlbnQoaSksYT1zLm1hdGNoKHQuZm9sZGluZ1J1bGVzLm1hcmtlcnMuc3RhcnQpO2lmKGEpe2NvbnN0IG89e3N0YXJ0TGluZU51bWJlcjppLHN0YXJ0Q29sdW1uOmFbMF0ubGVuZ3RoKzEsZW5kTGluZU51bWJlcjppLGVuZENvbHVtbjpzLmxlbmd0aCsxfTtpZihvLmVuZENvbHVtbj5vLnN0YXJ0Q29sdW1uKXtjb25zdCBsPXtyYW5nZTpvLC4uLlRzKHMuc3Vic3RyaW5nKGFbMF0ubGVuZ3RoKSksc2hvdWxkQmVJbkNvbW1lbnRzOiExfTsobC50ZXh0fHxsLmhhc1NlcGFyYXRvckxpbmUpJiZuLnB1c2gobCl9fX1yZXR1cm4gbn1mdW5jdGlvbiB0dShlKXtjb25zdCB0PVtdLG49ZS5nZXRMaW5lQ291bnQoKTtmb3IobGV0IHI9MTtyPD1uO3IrKyl7Y29uc3QgaT1lLmdldExpbmVDb250ZW50KHIpO251KGkscix0KX1yZXR1cm4gdH1mdW5jdGlvbiBudShlLHQsbil7UnMubGFzdEluZGV4PTA7Y29uc3Qgcj1Scy5leGVjKGUpO2lmKHIpe2NvbnN0IGk9ci5pbmRpY2VzWzFdWzBdKzEscz1yLmluZGljZXNbMV1bMV0rMSxhPXtzdGFydExpbmVOdW1iZXI6dCxzdGFydENvbHVtbjppLGVuZExpbmVOdW1iZXI6dCxlbmRDb2x1bW46c307aWYoYS5lbmRDb2x1bW4+YS5zdGFydENvbHVtbil7Y29uc3Qgbz17cmFuZ2U6YSwuLi5UcyhyWzFdKSxzaG91bGRCZUluQ29tbWVudHM6ITB9OyhvLnRleHR8fG8uaGFzU2VwYXJhdG9yTGluZSkmJm4ucHVzaChvKX19fWZ1bmN0aW9uIFRzKGUpe2U9ZS50cmltKCk7Y29uc3QgdD1lLnN0YXJ0c1dpdGgoIi0iKTtyZXR1cm4gZT1lLnJlcGxhY2UoWWwsIiIpLHt0ZXh0OmUsaGFzU2VwYXJhdG9yTGluZTp0fX1jbGFzcyBydSBleHRlbmRzIEdve2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWZpbmRNYXRjaGVzKHQpe2NvbnN0IG49W107Zm9yKGxldCByPTA7cjx0aGlzLl9saW5lcy5sZW5ndGg7cisrKXtjb25zdCBpPXRoaXMuX2xpbmVzW3JdLHM9dGhpcy5vZmZzZXRBdChuZXcgUGUocisxLDEpKSxhPWkubWF0Y2hBbGwodCk7Zm9yKGNvbnN0IG8gb2YgYSkoby5pbmRleHx8by5pbmRleD09PTApJiYoby5pbmRleD1vLmluZGV4K3MpLG4ucHVzaChvKX1yZXR1cm4gbn1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudCh0KXtyZXR1cm4gdGhpcy5fbGluZXNbdC0xXX1nZXRXb3JkQXRQb3NpdGlvbih0LG4pe2NvbnN0IHI9SG4odC5jb2x1bW4sc2kobiksdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLDApO3JldHVybiByP25ldyBzZSh0LmxpbmVOdW1iZXIsci5zdGFydENvbHVtbix0LmxpbmVOdW1iZXIsci5lbmRDb2x1bW4pOm51bGx9d29yZHModCl7Y29uc3Qgbj10aGlzLl9saW5lcyxyPXRoaXMuX3dvcmRlbml6ZS5iaW5kKHRoaXMpO2xldCBpPTAscz0iIixhPTAsbz1bXTtyZXR1cm57KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKDs7KWlmKGE8by5sZW5ndGgpe2NvbnN0IGw9cy5zdWJzdHJpbmcob1thXS5zdGFydCxvW2FdLmVuZCk7YSs9MSx5aWVsZCBsfWVsc2UgaWYoaTxuLmxlbmd0aClzPW5baV0sbz1yKHMsdCksYT0wLGkrPTE7ZWxzZSBicmVha319fWdldExpbmVXb3Jkcyh0LG4pe2NvbnN0IHI9dGhpcy5fbGluZXNbdC0xXSxpPXRoaXMuX3dvcmRlbml6ZShyLG4pLHM9W107Zm9yKGNvbnN0IGEgb2YgaSlzLnB1c2goe3dvcmQ6ci5zdWJzdHJpbmcoYS5zdGFydCxhLmVuZCksc3RhcnRDb2x1bW46YS5zdGFydCsxLGVuZENvbHVtbjphLmVuZCsxfSk7cmV0dXJuIHN9X3dvcmRlbml6ZSh0LG4pe2NvbnN0IHI9W107bGV0IGk7Zm9yKG4ubGFzdEluZGV4PTA7KGk9bi5leGVjKHQpKSYmaVswXS5sZW5ndGghPT0wOylyLnB1c2goe3N0YXJ0OmkuaW5kZXgsZW5kOmkuaW5kZXgraVswXS5sZW5ndGh9KTtyZXR1cm4gcn1nZXRWYWx1ZUluUmFuZ2UodCl7aWYodD10aGlzLl92YWxpZGF0ZVJhbmdlKHQpLHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyKXJldHVybiB0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5zdGFydENvbHVtbi0xLHQuZW5kQ29sdW1uLTEpO2NvbnN0IG49dGhpcy5fZW9sLHI9dC5zdGFydExpbmVOdW1iZXItMSxpPXQuZW5kTGluZU51bWJlci0xLHM9W107cy5wdXNoKHRoaXMuX2xpbmVzW3JdLnN1YnN0cmluZyh0LnN0YXJ0Q29sdW1uLTEpKTtmb3IobGV0IGE9cisxO2E8aTthKyspcy5wdXNoKHRoaXMuX2xpbmVzW2FdKTtyZXR1cm4gcy5wdXNoKHRoaXMuX2xpbmVzW2ldLnN1YnN0cmluZygwLHQuZW5kQ29sdW1uLTEpKSxzLmpvaW4obil9b2Zmc2V0QXQodCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih0KSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCksdGhpcy5fbGluZVN0YXJ0cy5nZXRQcmVmaXhTdW0odC5saW5lTnVtYmVyLTIpKyh0LmNvbHVtbi0xKX1wb3NpdGlvbkF0KHQpe3Q9TWF0aC5mbG9vcih0KSx0PU1hdGgubWF4KDAsdCksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpO2NvbnN0IG49dGhpcy5fbGluZVN0YXJ0cy5nZXRJbmRleE9mKHQpLHI9dGhpcy5fbGluZXNbbi5pbmRleF0ubGVuZ3RoO3JldHVybntsaW5lTnVtYmVyOjErbi5pbmRleCxjb2x1bW46MStNYXRoLm1pbihuLnJlbWFpbmRlcixyKX19X3ZhbGlkYXRlUmFuZ2UodCl7Y29uc3Qgbj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjp0LnN0YXJ0Q29sdW1ufSkscj10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHtsaW5lTnVtYmVyOnQuZW5kTGluZU51bWJlcixjb2x1bW46dC5lbmRDb2x1bW59KTtyZXR1cm4gbi5saW5lTnVtYmVyIT09dC5zdGFydExpbmVOdW1iZXJ8fG4uY29sdW1uIT09dC5zdGFydENvbHVtbnx8ci5saW5lTnVtYmVyIT09dC5lbmRMaW5lTnVtYmVyfHxyLmNvbHVtbiE9PXQuZW5kQ29sdW1uP3tzdGFydExpbmVOdW1iZXI6bi5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOm4uY29sdW1uLGVuZExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGVuZENvbHVtbjpyLmNvbHVtbn06dH1fdmFsaWRhdGVQb3NpdGlvbih0KXtpZighUGUuaXNJUG9zaXRpb24odCkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9zaXRpb24iKTtsZXR7bGluZU51bWJlcjpuLGNvbHVtbjpyfT10LGk9ITE7aWYobjwxKW49MSxyPTEsaT0hMDtlbHNlIGlmKG4+dGhpcy5fbGluZXMubGVuZ3RoKW49dGhpcy5fbGluZXMubGVuZ3RoLHI9dGhpcy5fbGluZXNbbi0xXS5sZW5ndGgrMSxpPSEwO2Vsc2V7Y29uc3Qgcz10aGlzLl9saW5lc1tuLTFdLmxlbmd0aCsxO3I8MT8ocj0xLGk9ITApOnI+cyYmKHI9cyxpPSEwKX1yZXR1cm4gaT97bGluZU51bWJlcjpuLGNvbHVtbjpyfTp0fX1jbGFzcyBpdHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX2hvc3Q9dCx0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9mb3JlaWduTW9kdWxlRmFjdG9yeT1uLHRoaXMuX2ZvcmVpZ25Nb2R1bGU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCl9X2dldE1vZGVsKHQpe3JldHVybiB0aGlzLl9tb2RlbHNbdF19X2dldE1vZGVscygpe2NvbnN0IHQ9W107cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21vZGVscykuZm9yRWFjaChuPT50LnB1c2godGhpcy5fbW9kZWxzW25dKSksdH1hY2NlcHROZXdNb2RlbCh0KXt0aGlzLl9tb2RlbHNbdC51cmxdPW5ldyBydShVbi5wYXJzZSh0LnVybCksdC5saW5lcyx0LkVPTCx0LnZlcnNpb25JZCl9YWNjZXB0TW9kZWxDaGFuZ2VkKHQsbil7aWYoIXRoaXMuX21vZGVsc1t0XSlyZXR1cm47dGhpcy5fbW9kZWxzW3RdLm9uRXZlbnRzKG4pfWFjY2VwdFJlbW92ZWRNb2RlbCh0KXt0aGlzLl9tb2RlbHNbdF0mJmRlbGV0ZSB0aGlzLl9tb2RlbHNbdF19YXN5bmMgY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHQsbixyKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBpP3dsLmNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0cyhpLG4scik6e3JhbmdlczpbXSxoYXNNb3JlOiExLGFtYmlndW91c0NoYXJhY3RlckNvdW50OjAsaW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6MCxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6MH19YXN5bmMgZmluZFNlY3Rpb25IZWFkZXJzKHQsbil7Y29uc3Qgcj10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gcj9LbChyLG4pOltdfWFzeW5jIGNvbXB1dGVEaWZmKHQsbixyLGkpe2NvbnN0IHM9dGhpcy5fZ2V0TW9kZWwodCksYT10aGlzLl9nZXRNb2RlbChuKTtyZXR1cm4hc3x8IWE/bnVsbDppdC5jb21wdXRlRGlmZihzLGEscixpKX1zdGF0aWMgY29tcHV0ZURpZmYodCxuLHIsaSl7Y29uc3Qgcz1pPT09ImFkdmFuY2VkIj9Dcy5nZXREZWZhdWx0KCk6Q3MuZ2V0TGVnYWN5KCksYT10LmdldExpbmVzQ29udGVudCgpLG89bi5nZXRMaW5lc0NvbnRlbnQoKSxsPXMuY29tcHV0ZURpZmYoYSxvLHIpLHU9bC5jaGFuZ2VzLmxlbmd0aD4wPyExOnRoaXMuX21vZGVsc0FyZUlkZW50aWNhbCh0LG4pO2Z1bmN0aW9uIGYoaCl7cmV0dXJuIGgubWFwKGQ9Pnt2YXIgZztyZXR1cm5bZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsZC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGQubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLGQubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwoZz1kLmlubmVyQ2hhbmdlcyk9PT1udWxsfHxnPT09dm9pZCAwP3ZvaWQgMDpnLm1hcChtPT5bbS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcixtLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4sbS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIsbS5vcmlnaW5hbFJhbmdlLmVuZENvbHVtbixtLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLG0ubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbixtLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcixtLm1vZGlmaWVkUmFuZ2UuZW5kQ29sdW1uXSldfSl9cmV0dXJue2lkZW50aWNhbDp1LHF1aXRFYXJseTpsLmhpdFRpbWVvdXQsY2hhbmdlczpmKGwuY2hhbmdlcyksbW92ZXM6bC5tb3Zlcy5tYXAoaD0+W2gubGluZVJhbmdlTWFwcGluZy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsaC5saW5lUmFuZ2VNYXBwaW5nLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsaC5saW5lUmFuZ2VNYXBwaW5nLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixoLmxpbmVSYW5nZU1hcHBpbmcubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxmKGguY2hhbmdlcyldKX19c3RhdGljIF9tb2RlbHNBcmVJZGVudGljYWwodCxuKXtjb25zdCByPXQuZ2V0TGluZUNvdW50KCksaT1uLmdldExpbmVDb3VudCgpO2lmKHIhPT1pKXJldHVybiExO2ZvcihsZXQgcz0xO3M8PXI7cysrKXtjb25zdCBhPXQuZ2V0TGluZUNvbnRlbnQocyksbz1uLmdldExpbmVDb250ZW50KHMpO2lmKGEhPT1vKXJldHVybiExfXJldHVybiEwfWFzeW5jIGNvbXB1dGVNb3JlTWluaW1hbEVkaXRzKHQsbixyKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKHQpO2lmKCFpKXJldHVybiBuO2NvbnN0IHM9W107bGV0IGE7bj1uLnNsaWNlKDApLnNvcnQoKGwsdSk9PntpZihsLnJhbmdlJiZ1LnJhbmdlKXJldHVybiBzZS5jb21wYXJlUmFuZ2VzVXNpbmdTdGFydHMobC5yYW5nZSx1LnJhbmdlKTtjb25zdCBmPWwucmFuZ2U/MDoxLGg9dS5yYW5nZT8wOjE7cmV0dXJuIGYtaH0pO2xldCBvPTA7Zm9yKGxldCBsPTE7bDxuLmxlbmd0aDtsKyspc2UuZ2V0RW5kUG9zaXRpb24obltvXS5yYW5nZSkuZXF1YWxzKHNlLmdldFN0YXJ0UG9zaXRpb24obltsXS5yYW5nZSkpPyhuW29dLnJhbmdlPXNlLmZyb21Qb3NpdGlvbnMoc2UuZ2V0U3RhcnRQb3NpdGlvbihuW29dLnJhbmdlKSxzZS5nZXRFbmRQb3NpdGlvbihuW2xdLnJhbmdlKSksbltvXS50ZXh0Kz1uW2xdLnRleHQpOihvKyssbltvXT1uW2xdKTtuLmxlbmd0aD1vKzE7Zm9yKGxldHtyYW5nZTpsLHRleHQ6dSxlb2w6Zn1vZiBuKXtpZih0eXBlb2YgZj09Im51bWJlciImJihhPWYpLHNlLmlzRW1wdHkobCkmJiF1KWNvbnRpbnVlO2NvbnN0IGg9aS5nZXRWYWx1ZUluUmFuZ2UobCk7aWYodT11LnJlcGxhY2UoL1xyXG58XG58XHIvZyxpLmVvbCksaD09PXUpY29udGludWU7aWYoTWF0aC5tYXgodS5sZW5ndGgsaC5sZW5ndGgpPml0Ll9kaWZmTGltaXQpe3MucHVzaCh7cmFuZ2U6bCx0ZXh0OnV9KTtjb250aW51ZX1jb25zdCBkPXdvKGgsdSxyKSxnPWkub2Zmc2V0QXQoc2UubGlmdChsKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBtIG9mIGQpe2NvbnN0IHY9aS5wb3NpdGlvbkF0KGcrbS5vcmlnaW5hbFN0YXJ0KSxwPWkucG9zaXRpb25BdChnK20ub3JpZ2luYWxTdGFydCttLm9yaWdpbmFsTGVuZ3RoKSx4PXt0ZXh0OnUuc3Vic3RyKG0ubW9kaWZpZWRTdGFydCxtLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnYubGluZU51bWJlcixzdGFydENvbHVtbjp2LmNvbHVtbixlbmRMaW5lTnVtYmVyOnAubGluZU51bWJlcixlbmRDb2x1bW46cC5jb2x1bW59fTtpLmdldFZhbHVlSW5SYW5nZSh4LnJhbmdlKSE9PXgudGV4dCYmcy5wdXNoKHgpfX1yZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIiJiZzLnB1c2goe2VvbDphLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHN9YXN5bmMgY29tcHV0ZUxpbmtzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/dGwobik6bnVsbH1hc3luYyBjb21wdXRlRGVmYXVsdERvY3VtZW50Q29sb3JzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/Wmwobik6bnVsbH1hc3luYyB0ZXh0dWFsU3VnZ2VzdCh0LG4scixpKXtjb25zdCBzPW5ldyBLdCxhPW5ldyBSZWdFeHAocixpKSxvPW5ldyBTZXQ7ZTpmb3IoY29uc3QgbCBvZiB0KXtjb25zdCB1PXRoaXMuX2dldE1vZGVsKGwpO2lmKHUpe2Zvcihjb25zdCBmIG9mIHUud29yZHMoYSkpaWYoIShmPT09bnx8IWlzTmFOKE51bWJlcihmKSkpJiYoby5hZGQoZiksby5zaXplPml0Ll9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShvKSxkdXJhdGlvbjpzLmVsYXBzZWQoKX19YXN5bmMgY29tcHV0ZVdvcmRSYW5nZXModCxuLHIsaSl7Y29uc3Qgcz10aGlzLl9nZXRNb2RlbCh0KTtpZighcylyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBhPW5ldyBSZWdFeHAocixpKSxvPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBsPW4uc3RhcnRMaW5lTnVtYmVyO2w8bi5lbmRMaW5lTnVtYmVyO2wrKyl7Y29uc3QgdT1zLmdldExpbmVXb3JkcyhsLGEpO2Zvcihjb25zdCBmIG9mIHUpe2lmKCFpc05hTihOdW1iZXIoZi53b3JkKSkpY29udGludWU7bGV0IGg9b1tmLndvcmRdO2h8fChoPVtdLG9bZi53b3JkXT1oKSxoLnB1c2goe3N0YXJ0TGluZU51bWJlcjpsLHN0YXJ0Q29sdW1uOmYuc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjpsLGVuZENvbHVtbjpmLmVuZENvbHVtbn0pfX1yZXR1cm4gb31hc3luYyBuYXZpZ2F0ZVZhbHVlU2V0KHQsbixyLGkscyl7Y29uc3QgYT10aGlzLl9nZXRNb2RlbCh0KTtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBvPW5ldyBSZWdFeHAoaSxzKTtuLnN0YXJ0Q29sdW1uPT09bi5lbmRDb2x1bW4mJihuPXtzdGFydExpbmVOdW1iZXI6bi5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46bi5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOm4uZW5kTGluZU51bWJlcixlbmRDb2x1bW46bi5lbmRDb2x1bW4rMX0pO2NvbnN0IGw9YS5nZXRWYWx1ZUluUmFuZ2UobiksdT1hLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOm4uc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjpuLnN0YXJ0Q29sdW1ufSxvKTtpZighdSlyZXR1cm4gbnVsbDtjb25zdCBmPWEuZ2V0VmFsdWVJblJhbmdlKHUpO3JldHVybiBKbi5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KG4sbCx1LGYscil9bG9hZEZvcmVpZ25Nb2R1bGUodCxuLHIpe2NvbnN0IGE9e2hvc3Q6R2EociwobyxsKT0+dGhpcy5faG9zdC5maHIobyxsKSksZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGEsbiksUHJvbWlzZS5yZXNvbHZlKFRuKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcih0LG4pe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHx0eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVt0XSE9ImZ1bmN0aW9uIilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIit0KSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVt0XS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLG4pKX1jYXRjaChyKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qocil9fX1pdC5fZGlmZkxpbWl0PTFlNSxpdC5fc3VnZ2VzdGlvbnNMaW1pdD0xZTQsdHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiImJihnbG9iYWxUaGlzLm1vbmFjbz1obCgpKTtsZXQgdXI9ITE7ZnVuY3Rpb24gUHMoZSl7aWYodXIpcmV0dXJuO3VyPSEwO2NvbnN0IHQ9bmV3IHhvKG49PntnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKG4pfSxuPT5uZXcgaXQobixlKSk7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9bj0+e3Qub25tZXNzYWdlKG4uZGF0YSl9fWdsb2JhbFRoaXMub25tZXNzYWdlPWU9Pnt1cnx8UHMobnVsbCl9Oy8qIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBWZXJzaW9uOiAwLjQ4LjAoMDAzN2IxM2ZiNWQxODZmZGYxZTdkZjUxYTk0MTZhMmRlMmI4YzY3MCkKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvbW9uYWNvLWVkaXRvci9ibG9iL21haW4vTElDRU5TRS50eHQKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovZnVuY3Rpb24gY3IoZSx0KXt0PT09dm9pZCAwJiYodD0hMSk7dmFyIG49ZS5sZW5ndGgscj0wLGk9IiIscz0wLGE9MTYsbz0wLGw9MCx1PTAsZj0wLGg9MDtmdW5jdGlvbiBkKGIsTCl7Zm9yKHZhciBTPTAsXz0wO1M8Ynx8IUw7KXt2YXIgTj1lLmNoYXJDb2RlQXQocik7aWYoTj49NDgmJk48PTU3KV89XyoxNitOLTQ4O2Vsc2UgaWYoTj49NjUmJk48PTcwKV89XyoxNitOLTY1KzEwO2Vsc2UgaWYoTj49OTcmJk48PTEwMilfPV8qMTYrTi05NysxMDtlbHNlIGJyZWFrO3IrKyxTKyt9cmV0dXJuIFM8YiYmKF89LTEpLF99ZnVuY3Rpb24gZyhiKXtyPWIsaT0iIixzPTAsYT0xNixoPTB9ZnVuY3Rpb24gbSgpe3ZhciBiPXI7aWYoZS5jaGFyQ29kZUF0KHIpPT09NDgpcisrO2Vsc2UgZm9yKHIrKztyPGUubGVuZ3RoJiZMdChlLmNoYXJDb2RlQXQocikpOylyKys7aWYocjxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KHIpPT09NDYpaWYocisrLHI8ZS5sZW5ndGgmJkx0KGUuY2hhckNvZGVBdChyKSkpZm9yKHIrKztyPGUubGVuZ3RoJiZMdChlLmNoYXJDb2RlQXQocikpOylyKys7ZWxzZSByZXR1cm4gaD0zLGUuc3Vic3RyaW5nKGIscik7dmFyIEw9cjtpZihyPGUubGVuZ3RoJiYoZS5jaGFyQ29kZUF0KHIpPT09Njl8fGUuY2hhckNvZGVBdChyKT09PTEwMSkpaWYocisrLChyPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQocik9PT00M3x8ZS5jaGFyQ29kZUF0KHIpPT09NDUpJiZyKysscjxlLmxlbmd0aCYmTHQoZS5jaGFyQ29kZUF0KHIpKSl7Zm9yKHIrKztyPGUubGVuZ3RoJiZMdChlLmNoYXJDb2RlQXQocikpOylyKys7TD1yfWVsc2UgaD0zO3JldHVybiBlLnN1YnN0cmluZyhiLEwpfWZ1bmN0aW9uIHYoKXtmb3IodmFyIGI9IiIsTD1yOzspe2lmKHI+PW4pe2IrPWUuc3Vic3RyaW5nKEwsciksaD0yO2JyZWFrfXZhciBTPWUuY2hhckNvZGVBdChyKTtpZihTPT09MzQpe2IrPWUuc3Vic3RyaW5nKEwscikscisrO2JyZWFrfWlmKFM9PT05Mil7aWYoYis9ZS5zdWJzdHJpbmcoTCxyKSxyKysscj49bil7aD0yO2JyZWFrfXZhciBfPWUuY2hhckNvZGVBdChyKyspO3N3aXRjaChfKXtjYXNlIDM0OmIrPSciJzticmVhaztjYXNlIDkyOmIrPSJcXCI7YnJlYWs7Y2FzZSA0NzpiKz0iLyI7YnJlYWs7Y2FzZSA5ODpiKz0iXGIiO2JyZWFrO2Nhc2UgMTAyOmIrPSJcZiI7YnJlYWs7Y2FzZSAxMTA6Yis9YApgO2JyZWFrO2Nhc2UgMTE0OmIrPSJcciI7YnJlYWs7Y2FzZSAxMTY6Yis9IgkiO2JyZWFrO2Nhc2UgMTE3OnZhciBOPWQoNCwhMCk7Tj49MD9iKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE4pOmg9NDticmVhaztkZWZhdWx0Omg9NX1MPXI7Y29udGludWV9aWYoUz49MCYmUzw9MzEpaWYocXQoUykpe2IrPWUuc3Vic3RyaW5nKEwsciksaD0yO2JyZWFrfWVsc2UgaD02O3IrK31yZXR1cm4gYn1mdW5jdGlvbiBwKCl7aWYoaT0iIixoPTAscz1yLGw9byxmPXUscj49bilyZXR1cm4gcz1uLGE9MTc7dmFyIGI9ZS5jaGFyQ29kZUF0KHIpO2lmKGZyKGIpKXtkbyByKyssaSs9U3RyaW5nLmZyb21DaGFyQ29kZShiKSxiPWUuY2hhckNvZGVBdChyKTt3aGlsZShmcihiKSk7cmV0dXJuIGE9MTV9aWYocXQoYikpcmV0dXJuIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGIpLGI9PT0xMyYmZS5jaGFyQ29kZUF0KHIpPT09MTAmJihyKyssaSs9YApgKSxvKyssdT1yLGE9MTQ7c3dpdGNoKGIpe2Nhc2UgMTIzOnJldHVybiByKyssYT0xO2Nhc2UgMTI1OnJldHVybiByKyssYT0yO2Nhc2UgOTE6cmV0dXJuIHIrKyxhPTM7Y2FzZSA5MzpyZXR1cm4gcisrLGE9NDtjYXNlIDU4OnJldHVybiByKyssYT02O2Nhc2UgNDQ6cmV0dXJuIHIrKyxhPTU7Y2FzZSAzNDpyZXR1cm4gcisrLGk9digpLGE9MTA7Y2FzZSA0Nzp2YXIgTD1yLTE7aWYoZS5jaGFyQ29kZUF0KHIrMSk9PT00Nyl7Zm9yKHIrPTI7cjxuJiYhcXQoZS5jaGFyQ29kZUF0KHIpKTspcisrO3JldHVybiBpPWUuc3Vic3RyaW5nKEwsciksYT0xMn1pZihlLmNoYXJDb2RlQXQocisxKT09PTQyKXtyKz0yO2Zvcih2YXIgUz1uLTEsXz0hMTtyPFM7KXt2YXIgTj1lLmNoYXJDb2RlQXQocik7aWYoTj09PTQyJiZlLmNoYXJDb2RlQXQocisxKT09PTQ3KXtyKz0yLF89ITA7YnJlYWt9cisrLHF0KE4pJiYoTj09PTEzJiZlLmNoYXJDb2RlQXQocik9PT0xMCYmcisrLG8rKyx1PXIpfXJldHVybiBffHwocisrLGg9MSksaT1lLnN1YnN0cmluZyhMLHIpLGE9MTN9cmV0dXJuIGkrPVN0cmluZy5mcm9tQ2hhckNvZGUoYikscisrLGE9MTY7Y2FzZSA0NTppZihpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGIpLHIrKyxyPT09bnx8IUx0KGUuY2hhckNvZGVBdChyKSkpcmV0dXJuIGE9MTY7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gaSs9bSgpLGE9MTE7ZGVmYXVsdDpmb3IoO3I8biYmeChiKTspcisrLGI9ZS5jaGFyQ29kZUF0KHIpO2lmKHMhPT1yKXtzd2l0Y2goaT1lLnN1YnN0cmluZyhzLHIpLGkpe2Nhc2UidHJ1ZSI6cmV0dXJuIGE9ODtjYXNlImZhbHNlIjpyZXR1cm4gYT05O2Nhc2UibnVsbCI6cmV0dXJuIGE9N31yZXR1cm4gYT0xNn1yZXR1cm4gaSs9U3RyaW5nLmZyb21DaGFyQ29kZShiKSxyKyssYT0xNn19ZnVuY3Rpb24geChiKXtpZihmcihiKXx8cXQoYikpcmV0dXJuITE7c3dpdGNoKGIpe2Nhc2UgMTI1OmNhc2UgOTM6Y2FzZSAxMjM6Y2FzZSA5MTpjYXNlIDM0OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDQ3OnJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHkoKXt2YXIgYjtkbyBiPXAoKTt3aGlsZShiPj0xMiYmYjw9MTUpO3JldHVybiBifXJldHVybntzZXRQb3NpdGlvbjpnLGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNjYW46dD95OnAsZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZ2V0VG9rZW5WYWx1ZTpmdW5jdGlvbigpe3JldHVybiBpfSxnZXRUb2tlbk9mZnNldDpmdW5jdGlvbigpe3JldHVybiBzfSxnZXRUb2tlbkxlbmd0aDpmdW5jdGlvbigpe3JldHVybiByLXN9LGdldFRva2VuU3RhcnRMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFRva2VuU3RhcnRDaGFyYWN0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gcy1mfSxnZXRUb2tlbkVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIGh9fX1mdW5jdGlvbiBmcihlKXtyZXR1cm4gZT09PTMyfHxlPT09OXx8ZT09PTExfHxlPT09MTJ8fGU9PT0xNjB8fGU9PT01NzYwfHxlPj04MTkyJiZlPD04MjAzfHxlPT09ODIzOXx8ZT09PTgyODd8fGU9PT0xMjI4OHx8ZT09PTY1Mjc5fWZ1bmN0aW9uIHF0KGUpe3JldHVybiBlPT09MTB8fGU9PT0xM3x8ZT09PTgyMzJ8fGU9PT04MjMzfWZ1bmN0aW9uIEx0KGUpe3JldHVybiBlPj00OCYmZTw9NTd9ZnVuY3Rpb24gaXUoZSx0LG4pe3ZhciByLGkscyxhLG87aWYodCl7Zm9yKGE9dC5vZmZzZXQsbz1hK3QubGVuZ3RoLHM9YTtzPjAmJiFGcyhlLHMtMSk7KXMtLTtmb3IodmFyIGw9bztsPGUubGVuZ3RoJiYhRnMoZSxsKTspbCsrO2k9ZS5zdWJzdHJpbmcocyxsKSxyPXN1KGksbil9ZWxzZSBpPWUscj0wLHM9MCxhPTAsbz1lLmxlbmd0aDt2YXIgdT1hdShuLGUpLGY9ITEsaD0wLGQ7bi5pbnNlcnRTcGFjZXM/ZD1ocigiICIsbi50YWJTaXplfHw0KTpkPSIJIjt2YXIgZz1jcihpLCExKSxtPSExO2Z1bmN0aW9uIHYoKXtyZXR1cm4gdStocihkLHIraCl9ZnVuY3Rpb24gcCgpe3ZhciB3PWcuc2NhbigpO2ZvcihmPSExO3c9PT0xNXx8dz09PTE0OylmPWZ8fHc9PT0xNCx3PWcuc2NhbigpO3JldHVybiBtPXc9PT0xNnx8Zy5nZXRUb2tlbkVycm9yKCkhPT0wLHd9dmFyIHg9W107ZnVuY3Rpb24geSh3LFQsRil7IW0mJighdHx8VDxvJiZGPmEpJiZlLnN1YnN0cmluZyhULEYpIT09dyYmeC5wdXNoKHtvZmZzZXQ6VCxsZW5ndGg6Ri1ULGNvbnRlbnQ6d30pfXZhciBiPXAoKTtpZihiIT09MTcpe3ZhciBMPWcuZ2V0VG9rZW5PZmZzZXQoKStzLFM9aHIoZCxyKTt5KFMscyxMKX1mb3IoO2IhPT0xNzspe2Zvcih2YXIgXz1nLmdldFRva2VuT2Zmc2V0KCkrZy5nZXRUb2tlbkxlbmd0aCgpK3MsTj1wKCksQT0iIixNPSExOyFmJiYoTj09PTEyfHxOPT09MTMpOyl7dmFyIEk9Zy5nZXRUb2tlbk9mZnNldCgpK3M7eSgiICIsXyxJKSxfPWcuZ2V0VG9rZW5PZmZzZXQoKStnLmdldFRva2VuTGVuZ3RoKCkrcyxNPU49PT0xMixBPU0/digpOiIiLE49cCgpfWlmKE49PT0yKWIhPT0xJiYoaC0tLEE9digpKTtlbHNlIGlmKE49PT00KWIhPT0zJiYoaC0tLEE9digpKTtlbHNle3N3aXRjaChiKXtjYXNlIDM6Y2FzZSAxOmgrKyxBPXYoKTticmVhaztjYXNlIDU6Y2FzZSAxMjpBPXYoKTticmVhaztjYXNlIDEzOmY/QT12KCk6TXx8KEE9IiAiKTticmVhaztjYXNlIDY6TXx8KEE9IiAiKTticmVhaztjYXNlIDEwOmlmKE49PT02KXtNfHwoQT0iIik7YnJlYWt9Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMTpjYXNlIDI6Y2FzZSA0Ok49PT0xMnx8Tj09PTEzP018fChBPSIgIik6TiE9PTUmJk4hPT0xNyYmKG09ITApO2JyZWFrO2Nhc2UgMTY6bT0hMDticmVha31mJiYoTj09PTEyfHxOPT09MTMpJiYoQT12KCkpfU49PT0xNyYmKEE9bi5pbnNlcnRGaW5hbE5ld2xpbmU/dToiIik7dmFyIEM9Zy5nZXRUb2tlbk9mZnNldCgpK3M7eShBLF8sQyksYj1OfXJldHVybiB4fWZ1bmN0aW9uIGhyKGUsdCl7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPWU7cmV0dXJuIG59ZnVuY3Rpb24gc3UoZSx0KXtmb3IodmFyIG49MCxyPTAsaT10LnRhYlNpemV8fDQ7bjxlLmxlbmd0aDspe3ZhciBzPWUuY2hhckF0KG4pO2lmKHM9PT0iICIpcisrO2Vsc2UgaWYocz09PSIJIilyKz1pO2Vsc2UgYnJlYWs7bisrfXJldHVybiBNYXRoLmZsb29yKHIvaSl9ZnVuY3Rpb24gYXUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dC5jaGFyQXQobik7aWYocj09PSJcciIpcmV0dXJuIG4rMTx0Lmxlbmd0aCYmdC5jaGFyQXQobisxKT09PWAKYD9gXHIKYDoiXHIiO2lmKHI9PT1gCmApcmV0dXJuYApgfXJldHVybiBlJiZlLmVvbHx8YApgfWZ1bmN0aW9uIEZzKGUsdCl7cmV0dXJuYFxyCmAuaW5kZXhPZihlLmNoYXJBdCh0KSkhPT0tMX12YXIgZ247KGZ1bmN0aW9uKGUpe2UuREVGQVVMVD17YWxsb3dUcmFpbGluZ0NvbW1hOiExfX0pKGdufHwoZ249e30pKTtmdW5jdGlvbiBvdShlLHQsbil7dD09PXZvaWQgMCYmKHQ9W10pLG49PT12b2lkIDAmJihuPWduLkRFRkFVTFQpO3ZhciByPW51bGwsaT1bXSxzPVtdO2Z1bmN0aW9uIGEobCl7QXJyYXkuaXNBcnJheShpKT9pLnB1c2gobCk6ciE9PW51bGwmJihpW3JdPWwpfXZhciBvPXtvbk9iamVjdEJlZ2luOmZ1bmN0aW9uKCl7dmFyIGw9e307YShsKSxzLnB1c2goaSksaT1sLHI9bnVsbH0sb25PYmplY3RQcm9wZXJ0eTpmdW5jdGlvbihsKXtyPWx9LG9uT2JqZWN0RW5kOmZ1bmN0aW9uKCl7aT1zLnBvcCgpfSxvbkFycmF5QmVnaW46ZnVuY3Rpb24oKXt2YXIgbD1bXTthKGwpLHMucHVzaChpKSxpPWwscj1udWxsfSxvbkFycmF5RW5kOmZ1bmN0aW9uKCl7aT1zLnBvcCgpfSxvbkxpdGVyYWxWYWx1ZTphLG9uRXJyb3I6ZnVuY3Rpb24obCx1LGYpe3QucHVzaCh7ZXJyb3I6bCxvZmZzZXQ6dSxsZW5ndGg6Zn0pfX07cmV0dXJuIHV1KGUsbyxuKSxpWzBdfWZ1bmN0aW9uIElzKGUpe2lmKCFlLnBhcmVudHx8IWUucGFyZW50LmNoaWxkcmVuKXJldHVybltdO3ZhciB0PUlzKGUucGFyZW50KTtpZihlLnBhcmVudC50eXBlPT09InByb3BlcnR5Iil7dmFyIG49ZS5wYXJlbnQuY2hpbGRyZW5bMF0udmFsdWU7dC5wdXNoKG4pfWVsc2UgaWYoZS5wYXJlbnQudHlwZT09PSJhcnJheSIpe3ZhciByPWUucGFyZW50LmNoaWxkcmVuLmluZGV4T2YoZSk7ciE9PS0xJiZ0LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24gZHIoZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIGUuY2hpbGRyZW4ubWFwKGRyKTtjYXNlIm9iamVjdCI6Zm9yKHZhciB0PU9iamVjdC5jcmVhdGUobnVsbCksbj0wLHI9ZS5jaGlsZHJlbjtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxzPWkuY2hpbGRyZW5bMV07cyYmKHRbaS5jaGlsZHJlblswXS52YWx1ZV09ZHIocykpfXJldHVybiB0O2Nhc2UibnVsbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiBlLnZhbHVlO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBsdShlLHQsbil7cmV0dXJuIG49PT12b2lkIDAmJihuPSExKSx0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8biYmdD09PWUub2Zmc2V0K2UubGVuZ3RofWZ1bmN0aW9uIERzKGUsdCxuKXtpZihuPT09dm9pZCAwJiYobj0hMSksbHUoZSx0LG4pKXt2YXIgcj1lLmNoaWxkcmVuO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPTA7aTxyLmxlbmd0aCYmcltpXS5vZmZzZXQ8PXQ7aSsrKXt2YXIgcz1EcyhyW2ldLHQsbik7aWYocylyZXR1cm4gc31yZXR1cm4gZX19ZnVuY3Rpb24gdXUoZSx0LG4pe249PT12b2lkIDAmJihuPWduLkRFRkFVTFQpO3ZhciByPWNyKGUsITEpO2Z1bmN0aW9uIGkoTSl7cmV0dXJuIE0/ZnVuY3Rpb24oKXtyZXR1cm4gTShyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fWZ1bmN0aW9uIHMoTSl7cmV0dXJuIE0/ZnVuY3Rpb24oSSl7cmV0dXJuIE0oSSxyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9fXZhciBhPWkodC5vbk9iamVjdEJlZ2luKSxvPXModC5vbk9iamVjdFByb3BlcnR5KSxsPWkodC5vbk9iamVjdEVuZCksdT1pKHQub25BcnJheUJlZ2luKSxmPWkodC5vbkFycmF5RW5kKSxoPXModC5vbkxpdGVyYWxWYWx1ZSksZD1zKHQub25TZXBhcmF0b3IpLGc9aSh0Lm9uQ29tbWVudCksbT1zKHQub25FcnJvciksdj1uJiZuLmRpc2FsbG93Q29tbWVudHMscD1uJiZuLmFsbG93VHJhaWxpbmdDb21tYTtmdW5jdGlvbiB4KCl7Zm9yKDs7KXt2YXIgTT1yLnNjYW4oKTtzd2l0Y2goci5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDp5KDE0KTticmVhaztjYXNlIDU6eSgxNSk7YnJlYWs7Y2FzZSAzOnkoMTMpO2JyZWFrO2Nhc2UgMTp2fHx5KDExKTticmVhaztjYXNlIDI6eSgxMik7YnJlYWs7Y2FzZSA2OnkoMTYpO2JyZWFrfXN3aXRjaChNKXtjYXNlIDEyOmNhc2UgMTM6dj95KDEwKTpnKCk7YnJlYWs7Y2FzZSAxNjp5KDEpO2JyZWFrO2Nhc2UgMTU6Y2FzZSAxNDpicmVhaztkZWZhdWx0OnJldHVybiBNfX19ZnVuY3Rpb24geShNLEksQyl7aWYoST09PXZvaWQgMCYmKEk9W10pLEM9PT12b2lkIDAmJihDPVtdKSxtKE0pLEkubGVuZ3RoK0MubGVuZ3RoPjApZm9yKHZhciB3PXIuZ2V0VG9rZW4oKTt3IT09MTc7KXtpZihJLmluZGV4T2YodykhPT0tMSl7eCgpO2JyZWFrfWVsc2UgaWYoQy5pbmRleE9mKHcpIT09LTEpYnJlYWs7dz14KCl9fWZ1bmN0aW9uIGIoTSl7dmFyIEk9ci5nZXRUb2tlblZhbHVlKCk7cmV0dXJuIE0/aChJKTpvKEkpLHgoKSwhMH1mdW5jdGlvbiBMKCl7c3dpdGNoKHIuZ2V0VG9rZW4oKSl7Y2FzZSAxMTp2YXIgTT1yLmdldFRva2VuVmFsdWUoKSxJPU51bWJlcihNKTtpc05hTihJKSYmKHkoMiksST0wKSxoKEkpO2JyZWFrO2Nhc2UgNzpoKG51bGwpO2JyZWFrO2Nhc2UgODpoKCEwKTticmVhaztjYXNlIDk6aCghMSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4geCgpLCEwfWZ1bmN0aW9uIFMoKXtyZXR1cm4gci5nZXRUb2tlbigpIT09MTA/KHkoMyxbXSxbMiw1XSksITEpOihiKCExKSxyLmdldFRva2VuKCk9PT02PyhkKCI6IikseCgpLEEoKXx8eSg0LFtdLFsyLDVdKSk6eSg1LFtdLFsyLDVdKSwhMCl9ZnVuY3Rpb24gXygpe2EoKSx4KCk7Zm9yKHZhciBNPSExO3IuZ2V0VG9rZW4oKSE9PTImJnIuZ2V0VG9rZW4oKSE9PTE3Oyl7aWYoci5nZXRUb2tlbigpPT09NSl7aWYoTXx8eSg0LFtdLFtdKSxkKCIsIikseCgpLHIuZ2V0VG9rZW4oKT09PTImJnApYnJlYWt9ZWxzZSBNJiZ5KDYsW10sW10pO1MoKXx8eSg0LFtdLFsyLDVdKSxNPSEwfXJldHVybiBsKCksci5nZXRUb2tlbigpIT09Mj95KDcsWzJdLFtdKTp4KCksITB9ZnVuY3Rpb24gTigpe3UoKSx4KCk7Zm9yKHZhciBNPSExO3IuZ2V0VG9rZW4oKSE9PTQmJnIuZ2V0VG9rZW4oKSE9PTE3Oyl7aWYoci5nZXRUb2tlbigpPT09NSl7aWYoTXx8eSg0LFtdLFtdKSxkKCIsIikseCgpLHIuZ2V0VG9rZW4oKT09PTQmJnApYnJlYWt9ZWxzZSBNJiZ5KDYsW10sW10pO0EoKXx8eSg0LFtdLFs0LDVdKSxNPSEwfXJldHVybiBmKCksci5nZXRUb2tlbigpIT09ND95KDgsWzRdLFtdKTp4KCksITB9ZnVuY3Rpb24gQSgpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMzpyZXR1cm4gTigpO2Nhc2UgMTpyZXR1cm4gXygpO2Nhc2UgMTA6cmV0dXJuIGIoITApO2RlZmF1bHQ6cmV0dXJuIEwoKX19cmV0dXJuIHgoKSxyLmdldFRva2VuKCk9PT0xNz9uLmFsbG93RW1wdHlDb250ZW50PyEwOih5KDQsW10sW10pLCExKTpBKCk/KHIuZ2V0VG9rZW4oKSE9PTE3JiZ5KDksW10sW10pLCEwKTooeSg0LFtdLFtdKSwhMSl9dmFyIE50PWNyLGN1PW91LGZ1PURzLGh1PUlzLGR1PWRyO2Z1bmN0aW9uIGd1KGUsdCxuKXtyZXR1cm4gaXUoZSx0LG4pfWZ1bmN0aW9uIEJ0KGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYoZT09bnVsbHx8dD09PW51bGx8fHQ9PT12b2lkIDB8fHR5cGVvZiBlIT10eXBlb2YgdHx8dHlwZW9mIGUhPSJvYmplY3QifHxBcnJheS5pc0FycmF5KGUpIT09QXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgbixyO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZighQnQoZVtuXSx0W25dKSlyZXR1cm4hMX1lbHNle3ZhciBpPVtdO2ZvcihyIGluIGUpaS5wdXNoKHIpO2kuc29ydCgpO3ZhciBzPVtdO2ZvcihyIGluIHQpcy5wdXNoKHIpO2lmKHMuc29ydCgpLCFCdChpLHMpKXJldHVybiExO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspaWYoIUJ0KGVbaVtuXV0sdFtpW25dXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIn1mdW5jdGlvbiBVZShlKXtyZXR1cm4gdHlwZW9mIGU8InUifWZ1bmN0aW9uIEllKGUpe3JldHVybiB0eXBlb2YgZT09ImJvb2xlYW4ifWZ1bmN0aW9uIG11KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyJ9ZnVuY3Rpb24gcHUoZSx0KXtpZihlLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZihlW25dIT09dFtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBVdChlLHQpe3ZhciBuPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiBuPjA/ZS5sYXN0SW5kZXhPZih0KT09PW46bj09PTA/ZT09PXQ6ITF9ZnVuY3Rpb24gbW4oZSl7dmFyIHQ9IiI7cHUoZSwiKD9pKSIpJiYoZT1lLnN1YnN0cmluZyg0KSx0PSJpIik7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCsidSIpfWNhdGNoe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQpfWNhdGNoe3JldHVybn19fXZhciBWczsoZnVuY3Rpb24oZSl7ZS5NSU5fVkFMVUU9LTIxNDc0ODM2NDgsZS5NQVhfVkFMVUU9MjE0NzQ4MzY0N30pKFZzfHwoVnM9e30pKTt2YXIgcG47KGZ1bmN0aW9uKGUpe2UuTUlOX1ZBTFVFPTAsZS5NQVhfVkFMVUU9MjE0NzQ4MzY0N30pKHBufHwocG49e30pKTt2YXIgTWU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm4gcj09PU51bWJlci5NQVhfVkFMVUUmJihyPXBuLk1BWF9WQUxVRSksaT09PU51bWJlci5NQVhfVkFMVUUmJihpPXBuLk1BWF9WQUxVRSkse2xpbmU6cixjaGFyYWN0ZXI6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUub2JqZWN0TGl0ZXJhbChpKSYmRS51aW50ZWdlcihpLmxpbmUpJiZFLnVpbnRlZ2VyKGkuY2hhcmFjdGVyKX1lLmlzPW59KShNZXx8KE1lPXt9KSk7dmFyIFg7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7aWYoRS51aW50ZWdlcihyKSYmRS51aW50ZWdlcihpKSYmRS51aW50ZWdlcihzKSYmRS51aW50ZWdlcihhKSlyZXR1cm57c3RhcnQ6TWUuY3JlYXRlKHIsaSksZW5kOk1lLmNyZWF0ZShzLGEpfTtpZihNZS5pcyhyKSYmTWUuaXMoaSkpcmV0dXJue3N0YXJ0OnIsZW5kOml9O3Rocm93IG5ldyBFcnJvcigiUmFuZ2UjY3JlYXRlIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzWyIrcisiLCAiK2krIiwgIitzKyIsICIrYSsiXSIpfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLm9iamVjdExpdGVyYWwoaSkmJk1lLmlzKGkuc3RhcnQpJiZNZS5pcyhpLmVuZCl9ZS5pcz1ufSkoWHx8KFg9e30pKTt2YXIgJHQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57dXJpOnIscmFuZ2U6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuZGVmaW5lZChpKSYmWC5pcyhpLnJhbmdlKSYmKEUuc3RyaW5nKGkudXJpKXx8RS51bmRlZmluZWQoaS51cmkpKX1lLmlzPW59KSgkdHx8KCR0PXt9KSk7dmFyIE9zOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEpe3JldHVybnt0YXJnZXRVcmk6cix0YXJnZXRSYW5nZTppLHRhcmdldFNlbGVjdGlvblJhbmdlOnMsb3JpZ2luU2VsZWN0aW9uUmFuZ2U6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuZGVmaW5lZChpKSYmWC5pcyhpLnRhcmdldFJhbmdlKSYmRS5zdHJpbmcoaS50YXJnZXRVcmkpJiYoWC5pcyhpLnRhcmdldFNlbGVjdGlvblJhbmdlKXx8RS51bmRlZmluZWQoaS50YXJnZXRTZWxlY3Rpb25SYW5nZSkpJiYoWC5pcyhpLm9yaWdpblNlbGVjdGlvblJhbmdlKXx8RS51bmRlZmluZWQoaS5vcmlnaW5TZWxlY3Rpb25SYW5nZSkpfWUuaXM9bn0pKE9zfHwoT3M9e30pKTt2YXIgZ3I7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7cmV0dXJue3JlZDpyLGdyZWVuOmksYmx1ZTpzLGFscGhhOmF9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLm51bWJlclJhbmdlKGkucmVkLDAsMSkmJkUubnVtYmVyUmFuZ2UoaS5ncmVlbiwwLDEpJiZFLm51bWJlclJhbmdlKGkuYmx1ZSwwLDEpJiZFLm51bWJlclJhbmdlKGkuYWxwaGEsMCwxKX1lLmlzPW59KShncnx8KGdyPXt9KSk7dmFyIGpzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue3JhbmdlOnIsY29sb3I6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIFguaXMoaS5yYW5nZSkmJmdyLmlzKGkuY29sb3IpfWUuaXM9bn0pKGpzfHwoanM9e30pKTt2YXIgcXM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMpe3JldHVybntsYWJlbDpyLHRleHRFZGl0OmksYWRkaXRpb25hbFRleHRFZGl0czpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5zdHJpbmcoaS5sYWJlbCkmJihFLnVuZGVmaW5lZChpLnRleHRFZGl0KXx8UmUuaXMoaSkpJiYoRS51bmRlZmluZWQoaS5hZGRpdGlvbmFsVGV4dEVkaXRzKXx8RS50eXBlZEFycmF5KGkuYWRkaXRpb25hbFRleHRFZGl0cyxSZS5pcykpfWUuaXM9bn0pKHFzfHwocXM9e30pKTt2YXIgV3Q7KGZ1bmN0aW9uKGUpe2UuQ29tbWVudD0iY29tbWVudCIsZS5JbXBvcnRzPSJpbXBvcnRzIixlLlJlZ2lvbj0icmVnaW9uIn0pKFd0fHwoV3Q9e30pKTt2YXIgQnM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSxvKXt2YXIgbD17c3RhcnRMaW5lOnIsZW5kTGluZTppfTtyZXR1cm4gRS5kZWZpbmVkKHMpJiYobC5zdGFydENoYXJhY3Rlcj1zKSxFLmRlZmluZWQoYSkmJihsLmVuZENoYXJhY3Rlcj1hKSxFLmRlZmluZWQobykmJihsLmtpbmQ9byksbH1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS51aW50ZWdlcihpLnN0YXJ0TGluZSkmJkUudWludGVnZXIoaS5zdGFydExpbmUpJiYoRS51bmRlZmluZWQoaS5zdGFydENoYXJhY3Rlcil8fEUudWludGVnZXIoaS5zdGFydENoYXJhY3RlcikpJiYoRS51bmRlZmluZWQoaS5lbmRDaGFyYWN0ZXIpfHxFLnVpbnRlZ2VyKGkuZW5kQ2hhcmFjdGVyKSkmJihFLnVuZGVmaW5lZChpLmtpbmQpfHxFLnN0cmluZyhpLmtpbmQpKX1lLmlzPW59KShCc3x8KEJzPXt9KSk7dmFyIG1yOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue2xvY2F0aW9uOnIsbWVzc2FnZTppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiYkdC5pcyhpLmxvY2F0aW9uKSYmRS5zdHJpbmcoaS5tZXNzYWdlKX1lLmlzPW59KShtcnx8KG1yPXt9KSk7dmFyIF9lOyhmdW5jdGlvbihlKXtlLkVycm9yPTEsZS5XYXJuaW5nPTIsZS5JbmZvcm1hdGlvbj0zLGUuSGludD00fSkoX2V8fChfZT17fSkpO3ZhciBVczsoZnVuY3Rpb24oZSl7ZS5Vbm5lY2Vzc2FyeT0xLGUuRGVwcmVjYXRlZD0yfSkoVXN8fChVcz17fSkpO3ZhciAkczsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgcj1uO3JldHVybiByIT1udWxsJiZFLnN0cmluZyhyLmhyZWYpfWUuaXM9dH0pKCRzfHwoJHM9e30pKTt2YXIgJGU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSxvLGwpe3ZhciB1PXtyYW5nZTpyLG1lc3NhZ2U6aX07cmV0dXJuIEUuZGVmaW5lZChzKSYmKHUuc2V2ZXJpdHk9cyksRS5kZWZpbmVkKGEpJiYodS5jb2RlPWEpLEUuZGVmaW5lZChvKSYmKHUuc291cmNlPW8pLEUuZGVmaW5lZChsKSYmKHUucmVsYXRlZEluZm9ybWF0aW9uPWwpLHV9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpLHM9cjtyZXR1cm4gRS5kZWZpbmVkKHMpJiZYLmlzKHMucmFuZ2UpJiZFLnN0cmluZyhzLm1lc3NhZ2UpJiYoRS5udW1iZXIocy5zZXZlcml0eSl8fEUudW5kZWZpbmVkKHMuc2V2ZXJpdHkpKSYmKEUuaW50ZWdlcihzLmNvZGUpfHxFLnN0cmluZyhzLmNvZGUpfHxFLnVuZGVmaW5lZChzLmNvZGUpKSYmKEUudW5kZWZpbmVkKHMuY29kZURlc2NyaXB0aW9uKXx8RS5zdHJpbmcoKGk9cy5jb2RlRGVzY3JpcHRpb24pPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5ocmVmKSkmJihFLnN0cmluZyhzLnNvdXJjZSl8fEUudW5kZWZpbmVkKHMuc291cmNlKSkmJihFLnVuZGVmaW5lZChzLnJlbGF0ZWRJbmZvcm1hdGlvbil8fEUudHlwZWRBcnJheShzLnJlbGF0ZWRJbmZvcm1hdGlvbixtci5pcykpfWUuaXM9bn0pKCRlfHwoJGU9e30pKTt2YXIgSHQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtmb3IodmFyIHM9W10sYT0yO2E8YXJndW1lbnRzLmxlbmd0aDthKyspc1thLTJdPWFyZ3VtZW50c1thXTt2YXIgbz17dGl0bGU6cixjb21tYW5kOml9O3JldHVybiBFLmRlZmluZWQocykmJnMubGVuZ3RoPjAmJihvLmFyZ3VtZW50cz1zKSxvfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLmRlZmluZWQoaSkmJkUuc3RyaW5nKGkudGl0bGUpJiZFLnN0cmluZyhpLmNvbW1hbmQpfWUuaXM9bn0pKEh0fHwoSHQ9e30pKTt2YXIgUmU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocyxhKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OmF9fWUucmVwbGFjZT10O2Z1bmN0aW9uIG4ocyxhKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OnMsZW5kOnN9LG5ld1RleHQ6YX19ZS5pbnNlcnQ9bjtmdW5jdGlvbiByKHMpe3JldHVybntyYW5nZTpzLG5ld1RleHQ6IiJ9fWUuZGVsPXI7ZnVuY3Rpb24gaShzKXt2YXIgYT1zO3JldHVybiBFLm9iamVjdExpdGVyYWwoYSkmJkUuc3RyaW5nKGEubmV3VGV4dCkmJlguaXMoYS5yYW5nZSl9ZS5pcz1pfSkoUmV8fChSZT17fSkpO3ZhciBBdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7dmFyIGE9e2xhYmVsOnJ9O3JldHVybiBpIT09dm9pZCAwJiYoYS5uZWVkc0NvbmZpcm1hdGlvbj1pKSxzIT09dm9pZCAwJiYoYS5kZXNjcmlwdGlvbj1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpIT09dm9pZCAwJiZFLm9iamVjdExpdGVyYWwoaSkmJkUuc3RyaW5nKGkubGFiZWwpJiYoRS5ib29sZWFuKGkubmVlZHNDb25maXJtYXRpb24pfHxpLm5lZWRzQ29uZmlybWF0aW9uPT09dm9pZCAwKSYmKEUuc3RyaW5nKGkuZGVzY3JpcHRpb24pfHxpLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1lLmlzPW59KShBdHx8KEF0PXt9KSk7dmFyIGZlOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3ZhciByPW47cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIn1lLmlzPXR9KShmZXx8KGZlPXt9KSk7dmFyIEtlOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHMsYSxvKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OmEsYW5ub3RhdGlvbklkOm99fWUucmVwbGFjZT10O2Z1bmN0aW9uIG4ocyxhLG8pe3JldHVybntyYW5nZTp7c3RhcnQ6cyxlbmQ6c30sbmV3VGV4dDphLGFubm90YXRpb25JZDpvfX1lLmluc2VydD1uO2Z1bmN0aW9uIHIocyxhKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OiIiLGFubm90YXRpb25JZDphfX1lLmRlbD1yO2Z1bmN0aW9uIGkocyl7dmFyIGE9cztyZXR1cm4gUmUuaXMoYSkmJihBdC5pcyhhLmFubm90YXRpb25JZCl8fGZlLmlzKGEuYW5ub3RhdGlvbklkKSl9ZS5pcz1pfSkoS2V8fChLZT17fSkpO3ZhciB2bjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt0ZXh0RG9jdW1lbnQ6cixlZGl0czppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZ4bi5pcyhpLnRleHREb2N1bWVudCkmJkFycmF5LmlzQXJyYXkoaS5lZGl0cyl9ZS5pcz1ufSkodm58fCh2bj17fSkpO3ZhciB6dDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7dmFyIGE9e2tpbmQ6ImNyZWF0ZSIsdXJpOnJ9O3JldHVybiBpIT09dm9pZCAwJiYoaS5vdmVyd3JpdGUhPT12b2lkIDB8fGkuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYoYS5vcHRpb25zPWkpLHMhPT12b2lkIDAmJihhLmFubm90YXRpb25JZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZpLmtpbmQ9PT0iY3JlYXRlIiYmRS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8RS5ib29sZWFuKGkub3B0aW9ucy5vdmVyd3JpdGUpKSYmKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cz09PXZvaWQgMHx8RS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxmZS5pcyhpLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKHp0fHwoenQ9e30pKTt2YXIgR3Q7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7dmFyIG89e2tpbmQ6InJlbmFtZSIsb2xkVXJpOnIsbmV3VXJpOml9O3JldHVybiBzIT09dm9pZCAwJiYocy5vdmVyd3JpdGUhPT12b2lkIDB8fHMuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYoby5vcHRpb25zPXMpLGEhPT12b2lkIDAmJihvLmFubm90YXRpb25JZD1hKSxvfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZpLmtpbmQ9PT0icmVuYW1lIiYmRS5zdHJpbmcoaS5vbGRVcmkpJiZFLnN0cmluZyhpLm5ld1VyaSkmJihpLm9wdGlvbnM9PT12b2lkIDB8fChpLm9wdGlvbnMub3ZlcndyaXRlPT09dm9pZCAwfHxFLmJvb2xlYW4oaS5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHxFLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fGZlLmlzKGkuYW5ub3RhdGlvbklkKSl9ZS5pcz1ufSkoR3R8fChHdD17fSkpO3ZhciBKdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7dmFyIGE9e2tpbmQ6ImRlbGV0ZSIsdXJpOnJ9O3JldHVybiBpIT09dm9pZCAwJiYoaS5yZWN1cnNpdmUhPT12b2lkIDB8fGkuaWdub3JlSWZOb3RFeGlzdHMhPT12b2lkIDApJiYoYS5vcHRpb25zPWkpLHMhPT12b2lkIDAmJihhLmFubm90YXRpb25JZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZpLmtpbmQ9PT0iZGVsZXRlIiYmRS5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLnJlY3Vyc2l2ZT09PXZvaWQgMHx8RS5ib29sZWFuKGkub3B0aW9ucy5yZWN1cnNpdmUpKSYmKGkub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cz09PXZvaWQgMHx8RS5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxmZS5pcyhpLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKEp0fHwoSnQ9e30pKTt2YXIgcHI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7dmFyIHI9bjtyZXR1cm4gciYmKHIuY2hhbmdlcyE9PXZvaWQgMHx8ci5kb2N1bWVudENoYW5nZXMhPT12b2lkIDApJiYoci5kb2N1bWVudENoYW5nZXM9PT12b2lkIDB8fHIuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KGZ1bmN0aW9uKGkpe3JldHVybiBFLnN0cmluZyhpLmtpbmQpP3p0LmlzKGkpfHxHdC5pcyhpKXx8SnQuaXMoaSk6dm4uaXMoaSl9KSl9ZS5pcz10fSkocHJ8fChwcj17fSkpO3ZhciBibj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt0aGlzLmVkaXRzPXQsdGhpcy5jaGFuZ2VBbm5vdGF0aW9ucz1ufXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHM7aWYocj09PXZvaWQgMD9pPVJlLmluc2VydCh0LG4pOmZlLmlzKHIpPyhzPXIsaT1LZS5pbnNlcnQodCxuLHIpKToodGhpcy5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucyh0aGlzLmNoYW5nZUFubm90YXRpb25zKSxzPXRoaXMuY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKHIpLGk9S2UuaW5zZXJ0KHQsbixzKSksdGhpcy5lZGl0cy5wdXNoKGkpLHMhPT12b2lkIDApcmV0dXJuIHN9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHM7aWYocj09PXZvaWQgMD9pPVJlLnJlcGxhY2UodCxuKTpmZS5pcyhyKT8ocz1yLGk9S2UucmVwbGFjZSh0LG4scikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLHM9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2UociksaT1LZS5yZXBsYWNlKHQsbixzKSksdGhpcy5lZGl0cy5wdXNoKGkpLHMhPT12b2lkIDApcmV0dXJuIHN9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0LG4pe3ZhciByLGk7aWYobj09PXZvaWQgMD9yPVJlLmRlbCh0KTpmZS5pcyhuKT8oaT1uLHI9S2UuZGVsKHQsbikpOih0aGlzLmFzc2VydENoYW5nZUFubm90YXRpb25zKHRoaXMuY2hhbmdlQW5ub3RhdGlvbnMpLGk9dGhpcy5jaGFuZ2VBbm5vdGF0aW9ucy5tYW5hZ2Uobikscj1LZS5kZWwodCxpKSksdGhpcy5lZGl0cy5wdXNoKHIpLGkhPT12b2lkIDApcmV0dXJuIGl9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLmVkaXRzLnB1c2godCl9LGUucHJvdG90eXBlLmFsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZWRpdHMuc3BsaWNlKDAsdGhpcy5lZGl0cy5sZW5ndGgpfSxlLnByb3RvdHlwZS5hc3NlcnRDaGFuZ2VBbm5vdGF0aW9ucz1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVGV4dCBlZGl0IGNoYW5nZSBpcyBub3QgY29uZmlndXJlZCB0byBtYW5hZ2UgY2hhbmdlIGFubm90YXRpb25zLiIpfSxlfSgpLFdzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9hbm5vdGF0aW9ucz10PT09dm9pZCAwP09iamVjdC5jcmVhdGUobnVsbCk6dCx0aGlzLl9jb3VudGVyPTAsdGhpcy5fc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm1hbmFnZT1mdW5jdGlvbih0LG4pe3ZhciByO2lmKGZlLmlzKHQpP3I9dDoocj10aGlzLm5leHRJZCgpLG49dCksdGhpcy5fYW5ub3RhdGlvbnNbcl0hPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJJZCAiK3IrIiBpcyBhbHJlYWR5IGluIHVzZS4iKTtpZihuPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiTm8gYW5ub3RhdGlvbiBwcm92aWRlZCBmb3IgaWQgIityKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnNbcl09bix0aGlzLl9zaXplKysscn0sZS5wcm90b3R5cGUubmV4dElkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvdW50ZXIrKyx0aGlzLl9jb3VudGVyLnRvU3RyaW5nKCl9LGV9KCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbj10aGlzO3RoaXMuX3RleHRFZGl0Q2hhbmdlcz1PYmplY3QuY3JlYXRlKG51bGwpLHQhPT12b2lkIDA/KHRoaXMuX3dvcmtzcGFjZUVkaXQ9dCx0LmRvY3VtZW50Q2hhbmdlcz8odGhpcy5fY2hhbmdlQW5ub3RhdGlvbnM9bmV3IFdzKHQuY2hhbmdlQW5ub3RhdGlvbnMpLHQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCksdC5kb2N1bWVudENoYW5nZXMuZm9yRWFjaChmdW5jdGlvbihyKXtpZih2bi5pcyhyKSl7dmFyIGk9bmV3IGJuKHIuZWRpdHMsbi5fY2hhbmdlQW5ub3RhdGlvbnMpO24uX3RleHRFZGl0Q2hhbmdlc1tyLnRleHREb2N1bWVudC51cmldPWl9fSkpOnQuY2hhbmdlcyYmT2JqZWN0LmtleXModC5jaGFuZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPW5ldyBibih0LmNoYW5nZXNbcl0pO24uX3RleHRFZGl0Q2hhbmdlc1tyXT1pfSkpOnRoaXMuX3dvcmtzcGFjZUVkaXQ9e319cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWRpdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl9jaGFuZ2VBbm5vdGF0aW9ucyE9PXZvaWQgMCYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zLnNpemU9PT0wP3RoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dm9pZCAwOnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlQW5ub3RhdGlvbnM9dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMuYWxsKCkpLHRoaXMuX3dvcmtzcGFjZUVkaXR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZ2V0VGV4dEVkaXRDaGFuZ2U9ZnVuY3Rpb24odCl7aWYoeG4uaXModCkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIG49e3VyaTp0LnVyaSx2ZXJzaW9uOnQudmVyc2lvbn0scj10aGlzLl90ZXh0RWRpdENoYW5nZXNbbi51cmldO2lmKCFyKXt2YXIgaT1bXSxzPXt0ZXh0RG9jdW1lbnQ6bixlZGl0czppfTt0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcy5wdXNoKHMpLHI9bmV3IGJuKGksdGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMpLHRoaXMuX3RleHRFZGl0Q2hhbmdlc1tuLnVyaV09cn1yZXR1cm4gcn1lbHNle2lmKHRoaXMuaW5pdENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZXM9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJXb3Jrc3BhY2UgZWRpdCBpcyBub3QgY29uZmlndXJlZCBmb3Igbm9ybWFsIHRleHQgZWRpdCBjaGFuZ2VzLiIpO3ZhciByPXRoaXMuX3RleHRFZGl0Q2hhbmdlc1t0XTtpZighcil7dmFyIGk9W107dGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzW3RdPWkscj1uZXcgYm4oaSksdGhpcy5fdGV4dEVkaXRDaGFuZ2VzW3RdPXJ9cmV0dXJuIHJ9fSxlLnByb3RvdHlwZS5pbml0RG9jdW1lbnRDaGFuZ2VzPWZ1bmN0aW9uKCl7dGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXM9PT12b2lkIDAmJnRoaXMuX3dvcmtzcGFjZUVkaXQuY2hhbmdlcz09PXZvaWQgMCYmKHRoaXMuX2NoYW5nZUFubm90YXRpb25zPW5ldyBXcyx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz1bXSx0aGlzLl93b3Jrc3BhY2VFZGl0LmNoYW5nZUFubm90YXRpb25zPXRoaXMuX2NoYW5nZUFubm90YXRpb25zLmFsbCgpKX0sZS5wcm90b3R5cGUuaW5pdENoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCYmdGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPT09dm9pZCAwJiYodGhpcy5fd29ya3NwYWNlRWRpdC5jaGFuZ2VzPU9iamVjdC5jcmVhdGUobnVsbCkpfSxlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKHQsbixyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBpO0F0LmlzKG4pfHxmZS5pcyhuKT9pPW46cj1uO3ZhciBzLGE7aWYoaT09PXZvaWQgMD9zPXp0LmNyZWF0ZSh0LHIpOihhPWZlLmlzKGkpP2k6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLHM9enQuY3JlYXRlKHQscixhKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChzKSxhIT09dm9pZCAwKXJldHVybiBhfSxlLnByb3RvdHlwZS5yZW5hbWVGaWxlPWZ1bmN0aW9uKHQsbixyLGkpe2lmKHRoaXMuaW5pdERvY3VtZW50Q2hhbmdlcygpLHRoaXMuX3dvcmtzcGFjZUVkaXQuZG9jdW1lbnRDaGFuZ2VzPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiV29ya3NwYWNlIGVkaXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRvY3VtZW50IGNoYW5nZXMuIik7dmFyIHM7QXQuaXMocil8fGZlLmlzKHIpP3M9cjppPXI7dmFyIGEsbztpZihzPT09dm9pZCAwP2E9R3QuY3JlYXRlKHQsbixpKToobz1mZS5pcyhzKT9zOnRoaXMuX2NoYW5nZUFubm90YXRpb25zLm1hbmFnZShzKSxhPUd0LmNyZWF0ZSh0LG4saSxvKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChhKSxvIT09dm9pZCAwKXJldHVybiBvfSxlLnByb3RvdHlwZS5kZWxldGVGaWxlPWZ1bmN0aW9uKHQsbixyKXtpZih0aGlzLmluaXREb2N1bWVudENoYW5nZXMoKSx0aGlzLl93b3Jrc3BhY2VFZGl0LmRvY3VtZW50Q2hhbmdlcz09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzcGFjZSBlZGl0IGlzIG5vdCBjb25maWd1cmVkIGZvciBkb2N1bWVudCBjaGFuZ2VzLiIpO3ZhciBpO0F0LmlzKG4pfHxmZS5pcyhuKT9pPW46cj1uO3ZhciBzLGE7aWYoaT09PXZvaWQgMD9zPUp0LmNyZWF0ZSh0LHIpOihhPWZlLmlzKGkpP2k6dGhpcy5fY2hhbmdlQW5ub3RhdGlvbnMubWFuYWdlKGkpLHM9SnQuY3JlYXRlKHQscixhKSksdGhpcy5fd29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXMucHVzaChzKSxhIT09dm9pZCAwKXJldHVybiBhfSxlfSkoKTt2YXIgSHM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7cmV0dXJue3VyaTpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZFLnN0cmluZyhpLnVyaSl9ZS5pcz1ufSkoSHN8fChIcz17fSkpO3ZhciB6czsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt1cmk6cix2ZXJzaW9uOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLmRlZmluZWQoaSkmJkUuc3RyaW5nKGkudXJpKSYmRS5pbnRlZ2VyKGkudmVyc2lvbil9ZS5pcz1ufSkoenN8fCh6cz17fSkpO3ZhciB4bjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt1cmk6cix2ZXJzaW9uOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBFLmRlZmluZWQoaSkmJkUuc3RyaW5nKGkudXJpKSYmKGkudmVyc2lvbj09PW51bGx8fEUuaW50ZWdlcihpLnZlcnNpb24pKX1lLmlzPW59KSh4bnx8KHhuPXt9KSk7dmFyIEdzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEpe3JldHVybnt1cmk6cixsYW5ndWFnZUlkOmksdmVyc2lvbjpzLHRleHQ6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuZGVmaW5lZChpKSYmRS5zdHJpbmcoaS51cmkpJiZFLnN0cmluZyhpLmxhbmd1YWdlSWQpJiZFLmludGVnZXIoaS52ZXJzaW9uKSYmRS5zdHJpbmcoaS50ZXh0KX1lLmlzPW59KShHc3x8KEdzPXt9KSk7dmFyIFdlOyhmdW5jdGlvbihlKXtlLlBsYWluVGV4dD0icGxhaW50ZXh0IixlLk1hcmtkb3duPSJtYXJrZG93biJ9KShXZXx8KFdlPXt9KSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgcj1uO3JldHVybiByPT09ZS5QbGFpblRleHR8fHI9PT1lLk1hcmtkb3dufWUuaXM9dH0oV2V8fChXZT17fSkpO3ZhciB2cjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXt2YXIgcj1uO3JldHVybiBFLm9iamVjdExpdGVyYWwobikmJldlLmlzKHIua2luZCkmJkUuc3RyaW5nKHIudmFsdWUpfWUuaXM9dH0pKHZyfHwodnI9e30pKTt2YXIgU2U7KGZ1bmN0aW9uKGUpe2UuVGV4dD0xLGUuTWV0aG9kPTIsZS5GdW5jdGlvbj0zLGUuQ29uc3RydWN0b3I9NCxlLkZpZWxkPTUsZS5WYXJpYWJsZT02LGUuQ2xhc3M9NyxlLkludGVyZmFjZT04LGUuTW9kdWxlPTksZS5Qcm9wZXJ0eT0xMCxlLlVuaXQ9MTEsZS5WYWx1ZT0xMixlLkVudW09MTMsZS5LZXl3b3JkPTE0LGUuU25pcHBldD0xNSxlLkNvbG9yPTE2LGUuRmlsZT0xNyxlLlJlZmVyZW5jZT0xOCxlLkZvbGRlcj0xOSxlLkVudW1NZW1iZXI9MjAsZS5Db25zdGFudD0yMSxlLlN0cnVjdD0yMixlLkV2ZW50PTIzLGUuT3BlcmF0b3I9MjQsZS5UeXBlUGFyYW1ldGVyPTI1fSkoU2V8fChTZT17fSkpO3ZhciBpZTsoZnVuY3Rpb24oZSl7ZS5QbGFpblRleHQ9MSxlLlNuaXBwZXQ9Mn0pKGllfHwoaWU9e30pKTt2YXIgSnM7KGZ1bmN0aW9uKGUpe2UuRGVwcmVjYXRlZD0xfSkoSnN8fChKcz17fSkpO3ZhciBYczsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7cmV0dXJue25ld1RleHQ6cixpbnNlcnQ6aSxyZXBsYWNlOnN9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZFLnN0cmluZyhpLm5ld1RleHQpJiZYLmlzKGkuaW5zZXJ0KSYmWC5pcyhpLnJlcGxhY2UpfWUuaXM9bn0pKFhzfHwoWHM9e30pKTt2YXIgUXM7KGZ1bmN0aW9uKGUpe2UuYXNJcz0xLGUuYWRqdXN0SW5kZW50YXRpb249Mn0pKFFzfHwoUXM9e30pKTt2YXIgYnI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJue2xhYmVsOm59fWUuY3JlYXRlPXR9KShicnx8KGJyPXt9KSk7dmFyIFpzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scil7cmV0dXJue2l0ZW1zOm58fFtdLGlzSW5jb21wbGV0ZTohIXJ9fWUuY3JlYXRlPXR9KShac3x8KFpzPXt9KSk7dmFyIHluOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiByLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX1lLmZyb21QbGFpblRleHQ9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuc3RyaW5nKGkpfHxFLm9iamVjdExpdGVyYWwoaSkmJkUuc3RyaW5nKGkubGFuZ3VhZ2UpJiZFLnN0cmluZyhpLnZhbHVlKX1lLmlzPW59KSh5bnx8KHluPXt9KSk7dmFyIFlzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3ZhciByPW47cmV0dXJuISFyJiZFLm9iamVjdExpdGVyYWwocikmJih2ci5pcyhyLmNvbnRlbnRzKXx8eW4uaXMoci5jb250ZW50cyl8fEUudHlwZWRBcnJheShyLmNvbnRlbnRzLHluLmlzKSkmJihuLnJhbmdlPT09dm9pZCAwfHxYLmlzKG4ucmFuZ2UpKX1lLmlzPXR9KShZc3x8KFlzPXt9KSk7dmFyIEtzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scil7cmV0dXJuIHI/e2xhYmVsOm4sZG9jdW1lbnRhdGlvbjpyfTp7bGFiZWw6bn19ZS5jcmVhdGU9dH0pKEtzfHwoS3M9e30pKTt2YXIgZWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyKXtmb3IodmFyIGk9W10scz0yO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspaVtzLTJdPWFyZ3VtZW50c1tzXTt2YXIgYT17bGFiZWw6bn07cmV0dXJuIEUuZGVmaW5lZChyKSYmKGEuZG9jdW1lbnRhdGlvbj1yKSxFLmRlZmluZWQoaSk/YS5wYXJhbWV0ZXJzPWk6YS5wYXJhbWV0ZXJzPVtdLGF9ZS5jcmVhdGU9dH0pKGVhfHwoZWE9e30pKTt2YXIgdGE7KGZ1bmN0aW9uKGUpe2UuVGV4dD0xLGUuUmVhZD0yLGUuV3JpdGU9M30pKHRhfHwodGE9e30pKTt2YXIgbmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyKXt2YXIgaT17cmFuZ2U6bn07cmV0dXJuIEUubnVtYmVyKHIpJiYoaS5raW5kPXIpLGl9ZS5jcmVhdGU9dH0pKG5hfHwobmE9e30pKTt2YXIgRGU7KGZ1bmN0aW9uKGUpe2UuRmlsZT0xLGUuTW9kdWxlPTIsZS5OYW1lc3BhY2U9MyxlLlBhY2thZ2U9NCxlLkNsYXNzPTUsZS5NZXRob2Q9NixlLlByb3BlcnR5PTcsZS5GaWVsZD04LGUuQ29uc3RydWN0b3I9OSxlLkVudW09MTAsZS5JbnRlcmZhY2U9MTEsZS5GdW5jdGlvbj0xMixlLlZhcmlhYmxlPTEzLGUuQ29uc3RhbnQ9MTQsZS5TdHJpbmc9MTUsZS5OdW1iZXI9MTYsZS5Cb29sZWFuPTE3LGUuQXJyYXk9MTgsZS5PYmplY3Q9MTksZS5LZXk9MjAsZS5OdWxsPTIxLGUuRW51bU1lbWJlcj0yMixlLlN0cnVjdD0yMyxlLkV2ZW50PTI0LGUuT3BlcmF0b3I9MjUsZS5UeXBlUGFyYW1ldGVyPTI2fSkoRGV8fChEZT17fSkpO3ZhciByYTsoZnVuY3Rpb24oZSl7ZS5EZXByZWNhdGVkPTF9KShyYXx8KHJhPXt9KSk7dmFyIGlhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scixpLHMsYSl7dmFyIG89e25hbWU6bixraW5kOnIsbG9jYXRpb246e3VyaTpzLHJhbmdlOml9fTtyZXR1cm4gYSYmKG8uY29udGFpbmVyTmFtZT1hKSxvfWUuY3JlYXRlPXR9KShpYXx8KGlhPXt9KSk7dmFyIHNhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEsbyxsKXt2YXIgdT17bmFtZTpyLGRldGFpbDppLGtpbmQ6cyxyYW5nZTphLHNlbGVjdGlvblJhbmdlOm99O3JldHVybiBsIT09dm9pZCAwJiYodS5jaGlsZHJlbj1sKSx1fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXt2YXIgaT1yO3JldHVybiBpJiZFLnN0cmluZyhpLm5hbWUpJiZFLm51bWJlcihpLmtpbmQpJiZYLmlzKGkucmFuZ2UpJiZYLmlzKGkuc2VsZWN0aW9uUmFuZ2UpJiYoaS5kZXRhaWw9PT12b2lkIDB8fEUuc3RyaW5nKGkuZGV0YWlsKSkmJihpLmRlcHJlY2F0ZWQ9PT12b2lkIDB8fEUuYm9vbGVhbihpLmRlcHJlY2F0ZWQpKSYmKGkuY2hpbGRyZW49PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoaS5jaGlsZHJlbikpJiYoaS50YWdzPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGkudGFncykpfWUuaXM9bn0pKHNhfHwoc2E9e30pKTt2YXIgYWE7KGZ1bmN0aW9uKGUpe2UuRW1wdHk9IiIsZS5RdWlja0ZpeD0icXVpY2tmaXgiLGUuUmVmYWN0b3I9InJlZmFjdG9yIixlLlJlZmFjdG9yRXh0cmFjdD0icmVmYWN0b3IuZXh0cmFjdCIsZS5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixlLlJlZmFjdG9yUmV3cml0ZT0icmVmYWN0b3IucmV3cml0ZSIsZS5Tb3VyY2U9InNvdXJjZSIsZS5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLGUuU291cmNlRml4QWxsPSJzb3VyY2UuZml4QWxsIn0pKGFhfHwoYWE9e30pKTt2YXIgb2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXt2YXIgcz17ZGlhZ25vc3RpY3M6cn07cmV0dXJuIGkhPW51bGwmJihzLm9ubHk9aSksc31lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZFLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcywkZS5pcykmJihpLm9ubHk9PT12b2lkIDB8fEUudHlwZWRBcnJheShpLm9ubHksRS5zdHJpbmcpKX1lLmlzPW59KShvYXx8KG9hPXt9KSk7dmFyIGxhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzKXt2YXIgYT17dGl0bGU6cn0sbz0hMDtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciPyhvPSExLGEua2luZD1pKTpIdC5pcyhpKT9hLmNvbW1hbmQ9aTphLmVkaXQ9aSxvJiZzIT09dm9pZCAwJiYoYS5raW5kPXMpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIGkmJkUuc3RyaW5nKGkudGl0bGUpJiYoaS5kaWFnbm9zdGljcz09PXZvaWQgMHx8RS50eXBlZEFycmF5KGkuZGlhZ25vc3RpY3MsJGUuaXMpKSYmKGkua2luZD09PXZvaWQgMHx8RS5zdHJpbmcoaS5raW5kKSkmJihpLmVkaXQhPT12b2lkIDB8fGkuY29tbWFuZCE9PXZvaWQgMCkmJihpLmNvbW1hbmQ9PT12b2lkIDB8fEh0LmlzKGkuY29tbWFuZCkpJiYoaS5pc1ByZWZlcnJlZD09PXZvaWQgMHx8RS5ib29sZWFuKGkuaXNQcmVmZXJyZWQpKSYmKGkuZWRpdD09PXZvaWQgMHx8cHIuaXMoaS5lZGl0KSl9ZS5pcz1ufSkobGF8fChsYT17fSkpO3ZhciB1YTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3ZhciBzPXtyYW5nZTpyfTtyZXR1cm4gRS5kZWZpbmVkKGkpJiYocy5kYXRhPWkpLHN9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIEUuZGVmaW5lZChpKSYmWC5pcyhpLnJhbmdlKSYmKEUudW5kZWZpbmVkKGkuY29tbWFuZCl8fEh0LmlzKGkuY29tbWFuZCkpfWUuaXM9bn0pKHVhfHwodWE9e30pKTt2YXIgY2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57dGFiU2l6ZTpyLGluc2VydFNwYWNlczppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZFLnVpbnRlZ2VyKGkudGFiU2l6ZSkmJkUuYm9vbGVhbihpLmluc2VydFNwYWNlcyl9ZS5pcz1ufSkoY2F8fChjYT17fSkpO3ZhciBmYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7cmV0dXJue3JhbmdlOnIsdGFyZ2V0OmksZGF0YTpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7dmFyIGk9cjtyZXR1cm4gRS5kZWZpbmVkKGkpJiZYLmlzKGkucmFuZ2UpJiYoRS51bmRlZmluZWQoaS50YXJnZXQpfHxFLnN0cmluZyhpLnRhcmdldCkpfWUuaXM9bn0pKGZhfHwoZmE9e30pKTt2YXIgd247KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57cmFuZ2U6cixwYXJlbnQ6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpPXI7cmV0dXJuIGkhPT12b2lkIDAmJlguaXMoaS5yYW5nZSkmJihpLnBhcmVudD09PXZvaWQgMHx8ZS5pcyhpLnBhcmVudCkpfWUuaXM9bn0pKHdufHwod249e30pKTt2YXIgaGE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocyxhLG8sbCl7cmV0dXJuIG5ldyB2dShzLGEsbyxsKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocyl7dmFyIGE9cztyZXR1cm4hIShFLmRlZmluZWQoYSkmJkUuc3RyaW5nKGEudXJpKSYmKEUudW5kZWZpbmVkKGEubGFuZ3VhZ2VJZCl8fEUuc3RyaW5nKGEubGFuZ3VhZ2VJZCkpJiZFLnVpbnRlZ2VyKGEubGluZUNvdW50KSYmRS5mdW5jKGEuZ2V0VGV4dCkmJkUuZnVuYyhhLnBvc2l0aW9uQXQpJiZFLmZ1bmMoYS5vZmZzZXRBdCkpfWUuaXM9bjtmdW5jdGlvbiByKHMsYSl7Zm9yKHZhciBvPXMuZ2V0VGV4dCgpLGw9aShhLGZ1bmN0aW9uKG0sdil7dmFyIHA9bS5yYW5nZS5zdGFydC5saW5lLXYucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gcD09PTA/bS5yYW5nZS5zdGFydC5jaGFyYWN0ZXItdi5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6cH0pLHU9by5sZW5ndGgsZj1sLmxlbmd0aC0xO2Y+PTA7Zi0tKXt2YXIgaD1sW2ZdLGQ9cy5vZmZzZXRBdChoLnJhbmdlLnN0YXJ0KSxnPXMub2Zmc2V0QXQoaC5yYW5nZS5lbmQpO2lmKGc8PXUpbz1vLnN1YnN0cmluZygwLGQpK2gubmV3VGV4dCtvLnN1YnN0cmluZyhnLG8ubGVuZ3RoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3U9ZH1yZXR1cm4gb31lLmFwcGx5RWRpdHM9cjtmdW5jdGlvbiBpKHMsYSl7aWYocy5sZW5ndGg8PTEpcmV0dXJuIHM7dmFyIG89cy5sZW5ndGgvMnwwLGw9cy5zbGljZSgwLG8pLHU9cy5zbGljZShvKTtpKGwsYSksaSh1LGEpO2Zvcih2YXIgZj0wLGg9MCxkPTA7ZjxsLmxlbmd0aCYmaDx1Lmxlbmd0aDspe3ZhciBnPWEobFtmXSx1W2hdKTtnPD0wP3NbZCsrXT1sW2YrK106c1tkKytdPXVbaCsrXX1mb3IoO2Y8bC5sZW5ndGg7KXNbZCsrXT1sW2YrK107Zm9yKDtoPHUubGVuZ3RoOylzW2QrK109dVtoKytdO3JldHVybiBzfX0pKGhhfHwoaGE9e30pKTt2YXIgdnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyLGkpe3RoaXMuX3VyaT10LHRoaXMuX2xhbmd1YWdlSWQ9bix0aGlzLl92ZXJzaW9uPXIsdGhpcy5fY29udGVudD1pLHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJ1cmkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGFuZ3VhZ2VJZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYW5ndWFnZUlkfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmVyc2lvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24odCl7aWYodCl7dmFyIG49dGhpcy5vZmZzZXRBdCh0LnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQodC5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyhuLHIpfXJldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZW50PXQudGV4dCx0aGlzLl92ZXJzaW9uPW4sdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfSxlLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0cz1mdW5jdGlvbigpe2lmKHRoaXMuX2xpbmVPZmZzZXRzPT09dm9pZCAwKXtmb3IodmFyIHQ9W10sbj10aGlzLl9jb250ZW50LHI9ITAsaT0wO2k8bi5sZW5ndGg7aSsrKXtyJiYodC5wdXNoKGkpLHI9ITEpO3ZhciBzPW4uY2hhckF0KGkpO3I9cz09PSJcciJ8fHM9PT1gCmAscz09PSJcciImJmkrMTxuLmxlbmd0aCYmbi5jaGFyQXQoaSsxKT09PWAKYCYmaSsrfXImJm4ubGVuZ3RoPjAmJnQucHVzaChuLmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9dH1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9LGUucHJvdG90eXBlLnBvc2l0aW9uQXQ9ZnVuY3Rpb24odCl7dD1NYXRoLm1heChNYXRoLm1pbih0LHRoaXMuX2NvbnRlbnQubGVuZ3RoKSwwKTt2YXIgbj10aGlzLmdldExpbmVPZmZzZXRzKCkscj0wLGk9bi5sZW5ndGg7aWYoaT09PTApcmV0dXJuIE1lLmNyZWF0ZSgwLHQpO2Zvcig7cjxpOyl7dmFyIHM9TWF0aC5mbG9vcigocitpKS8yKTtuW3NdPnQ/aT1zOnI9cysxfXZhciBhPXItMTtyZXR1cm4gTWUuY3JlYXRlKGEsdC1uW2FdKX0sZS5wcm90b3R5cGUub2Zmc2V0QXQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5nZXRMaW5lT2Zmc2V0cygpO2lmKHQubGluZT49bi5sZW5ndGgpcmV0dXJuIHRoaXMuX2NvbnRlbnQubGVuZ3RoO2lmKHQubGluZTwwKXJldHVybiAwO3ZhciByPW5bdC5saW5lXSxpPXQubGluZSsxPG4ubGVuZ3RoP25bdC5saW5lKzFdOnRoaXMuX2NvbnRlbnQubGVuZ3RoO3JldHVybiBNYXRoLm1heChNYXRoLm1pbihyK3QuY2hhcmFjdGVyLGkpLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxpbmVDb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGV9KCksRTsoZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBuKGcpe3JldHVybiB0eXBlb2YgZzwidSJ9ZS5kZWZpbmVkPW47ZnVuY3Rpb24gcihnKXtyZXR1cm4gdHlwZW9mIGc+InUifWUudW5kZWZpbmVkPXI7ZnVuY3Rpb24gaShnKXtyZXR1cm4gZz09PSEwfHxnPT09ITF9ZS5ib29sZWFuPWk7ZnVuY3Rpb24gcyhnKXtyZXR1cm4gdC5jYWxsKGcpPT09IltvYmplY3QgU3RyaW5nXSJ9ZS5zdHJpbmc9cztmdW5jdGlvbiBhKGcpe3JldHVybiB0LmNhbGwoZyk9PT0iW29iamVjdCBOdW1iZXJdIn1lLm51bWJlcj1hO2Z1bmN0aW9uIG8oZyxtLHYpe3JldHVybiB0LmNhbGwoZyk9PT0iW29iamVjdCBOdW1iZXJdIiYmbTw9ZyYmZzw9dn1lLm51bWJlclJhbmdlPW87ZnVuY3Rpb24gbChnKXtyZXR1cm4gdC5jYWxsKGcpPT09IltvYmplY3QgTnVtYmVyXSImJi0yMTQ3NDgzNjQ4PD1nJiZnPD0yMTQ3NDgzNjQ3fWUuaW50ZWdlcj1sO2Z1bmN0aW9uIHUoZyl7cmV0dXJuIHQuY2FsbChnKT09PSJbb2JqZWN0IE51bWJlcl0iJiYwPD1nJiZnPD0yMTQ3NDgzNjQ3fWUudWludGVnZXI9dTtmdW5jdGlvbiBmKGcpe3JldHVybiB0LmNhbGwoZyk9PT0iW29iamVjdCBGdW5jdGlvbl0ifWUuZnVuYz1mO2Z1bmN0aW9uIGgoZyl7cmV0dXJuIGchPT1udWxsJiZ0eXBlb2YgZz09Im9iamVjdCJ9ZS5vYmplY3RMaXRlcmFsPWg7ZnVuY3Rpb24gZChnLG0pe3JldHVybiBBcnJheS5pc0FycmF5KGcpJiZnLmV2ZXJ5KG0pfWUudHlwZWRBcnJheT1kfSkoRXx8KEU9e30pKTt2YXIgZGE9Y2xhc3MgSXJ7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5fdXJpPXQsdGhpcy5fbGFuZ3VhZ2VJZD1uLHRoaXMuX3ZlcnNpb249cix0aGlzLl9jb250ZW50PWksdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KHQpe2lmKHQpe2NvbnN0IG49dGhpcy5vZmZzZXRBdCh0LnN0YXJ0KSxyPXRoaXMub2Zmc2V0QXQodC5lbmQpO3JldHVybiB0aGlzLl9jb250ZW50LnN1YnN0cmluZyhuLHIpfXJldHVybiB0aGlzLl9jb250ZW50fXVwZGF0ZSh0LG4pe2ZvcihsZXQgciBvZiB0KWlmKElyLmlzSW5jcmVtZW50YWwocikpe2NvbnN0IGk9bWEoci5yYW5nZSkscz10aGlzLm9mZnNldEF0KGkuc3RhcnQpLGE9dGhpcy5vZmZzZXRBdChpLmVuZCk7dGhpcy5fY29udGVudD10aGlzLl9jb250ZW50LnN1YnN0cmluZygwLHMpK3IudGV4dCt0aGlzLl9jb250ZW50LnN1YnN0cmluZyhhLHRoaXMuX2NvbnRlbnQubGVuZ3RoKTtjb25zdCBvPU1hdGgubWF4KGkuc3RhcnQubGluZSwwKSxsPU1hdGgubWF4KGkuZW5kLmxpbmUsMCk7bGV0IHU9dGhpcy5fbGluZU9mZnNldHM7Y29uc3QgZj1nYShyLnRleHQsITEscyk7aWYobC1vPT09Zi5sZW5ndGgpZm9yKGxldCBkPTAsZz1mLmxlbmd0aDtkPGc7ZCsrKXVbZCtvKzFdPWZbZF07ZWxzZSBmLmxlbmd0aDwxZTQ/dS5zcGxpY2UobysxLGwtbywuLi5mKTp0aGlzLl9saW5lT2Zmc2V0cz11PXUuc2xpY2UoMCxvKzEpLmNvbmNhdChmLHUuc2xpY2UobCsxKSk7Y29uc3QgaD1yLnRleHQubGVuZ3RoLShhLXMpO2lmKGghPT0wKWZvcihsZXQgZD1vKzErZi5sZW5ndGgsZz11Lmxlbmd0aDtkPGc7ZCsrKXVbZF09dVtkXStofWVsc2UgaWYoSXIuaXNGdWxsKHIpKXRoaXMuX2NvbnRlbnQ9ci50ZXh0LHRoaXMuX2xpbmVPZmZzZXRzPXZvaWQgMDtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaGFuZ2UgZXZlbnQgcmVjZWl2ZWQiKTt0aGlzLl92ZXJzaW9uPW59Z2V0TGluZU9mZnNldHMoKXtyZXR1cm4gdGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDAmJih0aGlzLl9saW5lT2Zmc2V0cz1nYSh0aGlzLl9jb250ZW50LCEwKSksdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdCh0KXt0PU1hdGgubWF4KE1hdGgubWluKHQsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCBuPXRoaXMuZ2V0TGluZU9mZnNldHMoKSxyPTAsaT1uLmxlbmd0aDtpZihpPT09MClyZXR1cm57bGluZTowLGNoYXJhY3Rlcjp0fTtmb3IoO3I8aTspe2xldCBhPU1hdGguZmxvb3IoKHIraSkvMik7blthXT50P2k9YTpyPWErMX1sZXQgcz1yLTE7cmV0dXJue2xpbmU6cyxjaGFyYWN0ZXI6dC1uW3NdfX1vZmZzZXRBdCh0KXtsZXQgbj10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYodC5saW5lPj1uLmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYodC5saW5lPDApcmV0dXJuIDA7bGV0IHI9blt0LmxpbmVdLGk9dC5saW5lKzE8bi5sZW5ndGg/blt0LmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHIrdC5jaGFyYWN0ZXIsaSkscil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofXN0YXRpYyBpc0luY3JlbWVudGFsKHQpe2xldCBuPXQ7cmV0dXJuIG4hPW51bGwmJnR5cGVvZiBuLnRleHQ9PSJzdHJpbmciJiZuLnJhbmdlIT09dm9pZCAwJiYobi5yYW5nZUxlbmd0aD09PXZvaWQgMHx8dHlwZW9mIG4ucmFuZ2VMZW5ndGg9PSJudW1iZXIiKX1zdGF0aWMgaXNGdWxsKHQpe2xldCBuPXQ7cmV0dXJuIG4hPW51bGwmJnR5cGVvZiBuLnRleHQ9PSJzdHJpbmciJiZuLnJhbmdlPT09dm9pZCAwJiZuLnJhbmdlTGVuZ3RoPT09dm9pZCAwfX0seHI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxzLGEsbyl7cmV0dXJuIG5ldyBkYShpLHMsYSxvKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4oaSxzLGEpe2lmKGkgaW5zdGFuY2VvZiBkYSlyZXR1cm4gaS51cGRhdGUocyxhKSxpO3Rocm93IG5ldyBFcnJvcigiVGV4dERvY3VtZW50LnVwZGF0ZTogZG9jdW1lbnQgbXVzdCBiZSBjcmVhdGVkIGJ5IFRleHREb2N1bWVudC5jcmVhdGUiKX1lLnVwZGF0ZT1uO2Z1bmN0aW9uIHIoaSxzKXtsZXQgYT1pLmdldFRleHQoKSxvPXlyKHMubWFwKGJ1KSwoZixoKT0+e2xldCBkPWYucmFuZ2Uuc3RhcnQubGluZS1oLnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIGQ9PT0wP2YucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLWgucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOmR9KSxsPTA7Y29uc3QgdT1bXTtmb3IoY29uc3QgZiBvZiBvKXtsZXQgaD1pLm9mZnNldEF0KGYucmFuZ2Uuc3RhcnQpO2lmKGg8bCl0aHJvdyBuZXcgRXJyb3IoIk92ZXJsYXBwaW5nIGVkaXQiKTtoPmwmJnUucHVzaChhLnN1YnN0cmluZyhsLGgpKSxmLm5ld1RleHQubGVuZ3RoJiZ1LnB1c2goZi5uZXdUZXh0KSxsPWkub2Zmc2V0QXQoZi5yYW5nZS5lbmQpfXJldHVybiB1LnB1c2goYS5zdWJzdHIobCkpLHUuam9pbigiIil9ZS5hcHBseUVkaXRzPXJ9KSh4cnx8KHhyPXt9KSk7ZnVuY3Rpb24geXIoZSx0KXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCBuPWUubGVuZ3RoLzJ8MCxyPWUuc2xpY2UoMCxuKSxpPWUuc2xpY2Uobik7eXIocix0KSx5cihpLHQpO2xldCBzPTAsYT0wLG89MDtmb3IoO3M8ci5sZW5ndGgmJmE8aS5sZW5ndGg7KXQocltzXSxpW2FdKTw9MD9lW28rK109cltzKytdOmVbbysrXT1pW2ErK107Zm9yKDtzPHIubGVuZ3RoOyllW28rK109cltzKytdO2Zvcig7YTxpLmxlbmd0aDspZVtvKytdPWlbYSsrXTtyZXR1cm4gZX1mdW5jdGlvbiBnYShlLHQsbj0wKXtjb25zdCByPXQ/W25dOltdO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcz1lLmNoYXJDb2RlQXQoaSk7KHM9PT0xM3x8cz09PTEwKSYmKHM9PT0xMyYmaSsxPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQoaSsxKT09PTEwJiZpKyssci5wdXNoKG4raSsxKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbWEoZSl7Y29uc3QgdD1lLnN0YXJ0LG49ZS5lbmQ7cmV0dXJuIHQubGluZT5uLmxpbmV8fHQubGluZT09PW4ubGluZSYmdC5jaGFyYWN0ZXI+bi5jaGFyYWN0ZXI/e3N0YXJ0Om4sZW5kOnR9OmV9ZnVuY3Rpb24gYnUoZSl7Y29uc3QgdD1tYShlLnJhbmdlKTtyZXR1cm4gdCE9PWUucmFuZ2U/e25ld1RleHQ6ZS5uZXdUZXh0LHJhbmdlOnR9OmV9dmFyIEo7KGZ1bmN0aW9uKGUpe2VbZS5VbmRlZmluZWQ9MF09IlVuZGVmaW5lZCIsZVtlLkVudW1WYWx1ZU1pc21hdGNoPTFdPSJFbnVtVmFsdWVNaXNtYXRjaCIsZVtlLkRlcHJlY2F0ZWQ9Ml09IkRlcHJlY2F0ZWQiLGVbZS5VbmV4cGVjdGVkRW5kT2ZDb21tZW50PTI1N109IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLGVbZS5VbmV4cGVjdGVkRW5kT2ZTdHJpbmc9MjU4XT0iVW5leHBlY3RlZEVuZE9mU3RyaW5nIixlW2UuVW5leHBlY3RlZEVuZE9mTnVtYmVyPTI1OV09IlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsZVtlLkludmFsaWRVbmljb2RlPTI2MF09IkludmFsaWRVbmljb2RlIixlW2UuSW52YWxpZEVzY2FwZUNoYXJhY3Rlcj0yNjFdPSJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIixlW2UuSW52YWxpZENoYXJhY3Rlcj0yNjJdPSJJbnZhbGlkQ2hhcmFjdGVyIixlW2UuUHJvcGVydHlFeHBlY3RlZD01MTNdPSJQcm9wZXJ0eUV4cGVjdGVkIixlW2UuQ29tbWFFeHBlY3RlZD01MTRdPSJDb21tYUV4cGVjdGVkIixlW2UuQ29sb25FeHBlY3RlZD01MTVdPSJDb2xvbkV4cGVjdGVkIixlW2UuVmFsdWVFeHBlY3RlZD01MTZdPSJWYWx1ZUV4cGVjdGVkIixlW2UuQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQ9NTE3XT0iQ29tbWFPckNsb3NlQmFja2V0RXhwZWN0ZWQiLGVbZS5Db21tYU9yQ2xvc2VCcmFjZUV4cGVjdGVkPTUxOF09IkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQiLGVbZS5UcmFpbGluZ0NvbW1hPTUxOV09IlRyYWlsaW5nQ29tbWEiLGVbZS5EdXBsaWNhdGVLZXk9NTIwXT0iRHVwbGljYXRlS2V5IixlW2UuQ29tbWVudE5vdFBlcm1pdHRlZD01MjFdPSJDb21tZW50Tm90UGVybWl0dGVkIixlW2UuU2NoZW1hUmVzb2x2ZUVycm9yPTc2OF09IlNjaGVtYVJlc29sdmVFcnJvciJ9KShKfHwoSj17fSkpO3ZhciB3cjsoZnVuY3Rpb24oZSl7ZS5MQVRFU1Q9e3RleHREb2N1bWVudDp7Y29tcGxldGlvbjp7Y29tcGxldGlvbkl0ZW06e2RvY3VtZW50YXRpb25Gb3JtYXQ6W1dlLk1hcmtkb3duLFdlLlBsYWluVGV4dF0sY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQ6ITB9fX19fSkod3J8fCh3cj17fSkpO2Z1bmN0aW9uIHh1KGUsdCl7bGV0IG47cmV0dXJuIHQubGVuZ3RoPT09MD9uPWU6bj1lLnJlcGxhY2UoL1x7KFxkKylcfS9nLChyLGkpPT57bGV0IHM9aVswXTtyZXR1cm4gdHlwZW9mIHRbc108InUiP3Rbc106cn0pLG59ZnVuY3Rpb24geXUoZSx0LC4uLm4pe3JldHVybiB4dSh0LG4pfWZ1bmN0aW9uIFh0KGUpe3JldHVybiB5dX12YXIgc3Q9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybiBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihyLGkpe3IuX19wcm90b19fPWl9fHxmdW5jdGlvbihyLGkpe2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYocltzXT1pW3NdKX0sZSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmbiE9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhuKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtlKHQsbik7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1uPT09bnVsbD9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLGo9WHQoKSx3dT17ImNvbG9yLWhleCI6e2Vycm9yTWVzc2FnZTpqKCJjb2xvckhleEZvcm1hdFdhcm5pbmciLCJJbnZhbGlkIGNvbG9yIGZvcm1hdC4gVXNlICNSR0IsICNSR0JBLCAjUlJHR0JCIG9yICNSUkdHQkJBQS4iKSxwYXR0ZXJuOi9eIyhbMC05QS1GYS1mXXszLDR9fChbMC05QS1GYS1mXXsyfSl7Myw0fSkkL30sImRhdGUtdGltZSI6e2Vycm9yTWVzc2FnZTpqKCJkYXRlVGltZUZvcm1hdFdhcm5pbmciLCJTdHJpbmcgaXMgbm90IGEgUkZDMzMzOSBkYXRlLXRpbWUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKVQoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pOihbMC01XVswLTldfDYwKShcLlswLTldKyk/KFp8KFwrfC0pKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKSkkL2l9LGRhdGU6e2Vycm9yTWVzc2FnZTpqKCJkYXRlRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOmooInRpbWVGb3JtYXRXYXJuaW5nIiwiU3RyaW5nIGlzIG5vdCBhIFJGQzMzMzkgdGltZS4iKSxwYXR0ZXJuOi9eKFswMV1bMC05XXwyWzAtM10pOihbMC01XVswLTldKTooWzAtNV1bMC05XXw2MCkoXC5bMC05XSspPyhafChcK3wtKShbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSkpJC9pfSxlbWFpbDp7ZXJyb3JNZXNzYWdlOmooImVtYWlsRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gZS1tYWlsIGFkZHJlc3MuIikscGF0dGVybjovXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWjAtOS1dK1wuKStbYS16QS1aXXsyLH0pKSQvfSxob3N0bmFtZTp7ZXJyb3JNZXNzYWdlOmooImhvc3RuYW1lRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBob3N0bmFtZS4iKSxwYXR0ZXJuOi9eKD89LnsxLDI1M31cLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcLj8kL2l9LGlwdjQ6e2Vycm9yTWVzc2FnZTpqKCJpcHY0Rm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gSVB2NCBhZGRyZXNzLiIpLHBhdHRlcm46L14oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKVwuKXszfSg/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpJC99LGlwdjY6e2Vycm9yTWVzc2FnZTpqKCJpcHY2Rm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYW4gSVB2NiBhZGRyZXNzLiIpLHBhdHRlcm46L14oKChbMC05YS1mXXsxLDR9Oil7N30oWzAtOWEtZl17MSw0fXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Nn0oOlswLTlhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs1fSgoKDpbMC05YS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs0fSgoKDpbMC05YS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05YS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7M30oKCg6WzAtOWEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsyfSgoKDpbMC05YS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05YS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezF9KCgoOlswLTlhLWZdezEsNH0pezEsNn0pfCgoOlswLTlhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KDooKCg6WzAtOWEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKSkkL2l9fSxhdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuLHIpe3I9PT12b2lkIDAmJihyPTApLHRoaXMub2Zmc2V0PW4sdGhpcy5sZW5ndGg9cix0aGlzLnBhcmVudD10fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4idHlwZTogIit0aGlzLnR5cGUrIiAoIit0aGlzLm9mZnNldCsiLyIrdGhpcy5sZW5ndGgrIikiKyh0aGlzLnBhcmVudD8iIHBhcmVudDogeyIrdGhpcy5wYXJlbnQudG9TdHJpbmcoKSsifSI6IiIpfSxlfSgpLF91PWZ1bmN0aW9uKGUpe3N0KHQsZSk7ZnVuY3Rpb24gdChuLHIpe3ZhciBpPWUuY2FsbCh0aGlzLG4scil8fHRoaXM7cmV0dXJuIGkudHlwZT0ibnVsbCIsaS52YWx1ZT1udWxsLGl9cmV0dXJuIHR9KGF0KSxwYT1mdW5jdGlvbihlKXtzdCh0LGUpO2Z1bmN0aW9uIHQobixyLGkpe3ZhciBzPWUuY2FsbCh0aGlzLG4saSl8fHRoaXM7cmV0dXJuIHMudHlwZT0iYm9vbGVhbiIscy52YWx1ZT1yLHN9cmV0dXJuIHR9KGF0KSxTdT1mdW5jdGlvbihlKXtzdCh0LGUpO2Z1bmN0aW9uIHQobixyKXt2YXIgaT1lLmNhbGwodGhpcyxuLHIpfHx0aGlzO3JldHVybiBpLnR5cGU9ImFycmF5IixpLml0ZW1zPVtdLGl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShhdCksTHU9ZnVuY3Rpb24oZSl7c3QodCxlKTtmdW5jdGlvbiB0KG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsbixyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJudW1iZXIiLGkuaXNJbnRlZ2VyPSEwLGkudmFsdWU9TnVtYmVyLk5hTixpfXJldHVybiB0fShhdCksX3I9ZnVuY3Rpb24oZSl7c3QodCxlKTtmdW5jdGlvbiB0KG4scixpKXt2YXIgcz1lLmNhbGwodGhpcyxuLHIsaSl8fHRoaXM7cmV0dXJuIHMudHlwZT0ic3RyaW5nIixzLnZhbHVlPSIiLHN9cmV0dXJuIHR9KGF0KSxOdT1mdW5jdGlvbihlKXtzdCh0LGUpO2Z1bmN0aW9uIHQobixyLGkpe3ZhciBzPWUuY2FsbCh0aGlzLG4scil8fHRoaXM7cmV0dXJuIHMudHlwZT0icHJvcGVydHkiLHMuY29sb25PZmZzZXQ9LTEscy5rZXlOb2RlPWksc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTm9kZT9bdGhpcy5rZXlOb2RlLHRoaXMudmFsdWVOb2RlXTpbdGhpcy5rZXlOb2RlXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShhdCksQXU9ZnVuY3Rpb24oZSl7c3QodCxlKTtmdW5jdGlvbiB0KG4scil7dmFyIGk9ZS5jYWxsKHRoaXMsbixyKXx8dGhpcztyZXR1cm4gaS50eXBlPSJvYmplY3QiLGkucHJvcGVydGllcz1bXSxpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcGVydGllc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0fShhdCk7ZnVuY3Rpb24gcGUoZSl7cmV0dXJuIEllKGUpP2U/e306e25vdDp7fX06ZX12YXIgdmE7KGZ1bmN0aW9uKGUpe2VbZS5LZXk9MF09IktleSIsZVtlLkVudW09MV09IkVudW0ifSkodmF8fCh2YT17fSkpO3ZhciBDdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXt0PT09dm9pZCAwJiYodD0tMSksdGhpcy5mb2N1c09mZnNldD10LHRoaXMuZXhjbHVkZT1uLHRoaXMuc2NoZW1hcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3RoaXMuc2NoZW1hcy5wdXNoKHQpfSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnNjaGVtYXMsdC5zY2hlbWFzKX0sZS5wcm90b3R5cGUuaW5jbHVkZT1mdW5jdGlvbih0KXtyZXR1cm4odGhpcy5mb2N1c09mZnNldD09PS0xfHxiYSh0LHRoaXMuZm9jdXNPZmZzZXQpKSYmdCE9PXRoaXMuZXhjbHVkZX0sZS5wcm90b3R5cGUubmV3U3ViPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKC0xLHRoaXMuZXhjbHVkZSl9LGV9KCksU3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNjaGVtYXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0KXt9LGUucHJvdG90eXBlLmluY2x1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuITB9LGUucHJvdG90eXBlLm5ld1N1Yj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmluc3RhbmNlPW5ldyBlLGV9KCksdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5oYXNQcm9ibGVtcz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5wcm9ibGVtcy5sZW5ndGh9LGUucHJvdG90eXBlLm1lcmdlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0wLHI9dDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTt0aGlzLm1lcmdlKGkpfX0sZS5wcm90b3R5cGUubWVyZ2U9ZnVuY3Rpb24odCl7dGhpcy5wcm9ibGVtcz10aGlzLnByb2JsZW1zLmNvbmNhdCh0LnByb2JsZW1zKX0sZS5wcm90b3R5cGUubWVyZ2VFbnVtVmFsdWVzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhdC5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZ0LmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KHQuZW51bVZhbHVlcyk7Zm9yKHZhciBuPTAscj10aGlzLnByb2JsZW1zO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2kuY29kZT09PUouRW51bVZhbHVlTWlzbWF0Y2gmJihpLm1lc3NhZ2U9aigiZW51bVdhcm5pbmciLCJWYWx1ZSBpcyBub3QgYWNjZXB0ZWQuIFZhbGlkIHZhbHVlczogezB9LiIsdGhpcy5lbnVtVmFsdWVzLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkocyl9KS5qb2luKCIsICIpKSl9fX0sZS5wcm90b3R5cGUubWVyZ2VQcm9wZXJ0eU1hdGNoPWZ1bmN0aW9uKHQpe3RoaXMubWVyZ2UodCksdGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcysrLCh0LmVudW1WYWx1ZU1hdGNofHwhdC5oYXNQcm9ibGVtcygpJiZ0LnByb3BlcnRpZXNNYXRjaGVzKSYmdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKyssdC5lbnVtVmFsdWVNYXRjaCYmdC5lbnVtVmFsdWVzJiZ0LmVudW1WYWx1ZXMubGVuZ3RoPT09MSYmdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzKyt9LGUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5oYXNQcm9ibGVtcygpO3JldHVybiBuIT09dC5oYXNQcm9ibGVtcygpP24/LTE6MTp0aGlzLmVudW1WYWx1ZU1hdGNoIT09dC5lbnVtVmFsdWVNYXRjaD90LmVudW1WYWx1ZU1hdGNoPy0xOjE6dGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzIT09dC5wcmltYXJ5VmFsdWVNYXRjaGVzP3RoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcy10LnByaW1hcnlWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzIT09dC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzP3RoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcy10LnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcy10LnByb3BlcnRpZXNNYXRjaGVzfSxlfSgpO2Z1bmN0aW9uIGt1KGUsdCl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PVtdKSxuZXcgeGEoZSx0LFtdKX1mdW5jdGlvbiBvdChlKXtyZXR1cm4gZHUoZSl9ZnVuY3Rpb24gTHIoZSl7cmV0dXJuIGh1KGUpfWZ1bmN0aW9uIGJhKGUsdCxuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49ITEpLHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9dmFyIHhhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7bj09PXZvaWQgMCYmKG49W10pLHI9PT12b2lkIDAmJihyPVtdKSx0aGlzLnJvb3Q9dCx0aGlzLnN5bnRheEVycm9ycz1uLHRoaXMuY29tbWVudHM9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Tm9kZUZyb21PZmZzZXQ9ZnVuY3Rpb24odCxuKXtpZihuPT09dm9pZCAwJiYobj0hMSksdGhpcy5yb290KXJldHVybiBmdSh0aGlzLnJvb3QsdCxuKX0sZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5yb290KXt2YXIgbj1mdW5jdGlvbihyKXt2YXIgaT10KHIpLHM9ci5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KHMpKWZvcih2YXIgYT0wO2E8cy5sZW5ndGgmJmk7YSsrKWk9bihzW2FdKTtyZXR1cm4gaX07bih0aGlzLnJvb3QpfX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCxuLHIpe2lmKHI9PT12b2lkIDAmJihyPV9lLldhcm5pbmcpLHRoaXMucm9vdCYmbil7dmFyIGk9bmV3IHZlO3JldHVybiBjZSh0aGlzLnJvb3QsbixpLFNyLmluc3RhbmNlKSxpLnByb2JsZW1zLm1hcChmdW5jdGlvbihzKXt2YXIgYSxvPVguY3JlYXRlKHQucG9zaXRpb25BdChzLmxvY2F0aW9uLm9mZnNldCksdC5wb3NpdGlvbkF0KHMubG9jYXRpb24ub2Zmc2V0K3MubG9jYXRpb24ubGVuZ3RoKSk7cmV0dXJuICRlLmNyZWF0ZShvLHMubWVzc2FnZSwoYT1zLnNldmVyaXR5KSE9PW51bGwmJmEhPT12b2lkIDA/YTpyLHMuY29kZSl9KX19LGUucHJvdG90eXBlLmdldE1hdGNoaW5nU2NoZW1hcz1mdW5jdGlvbih0LG4scil7bj09PXZvaWQgMCYmKG49LTEpO3ZhciBpPW5ldyBDdShuLHIpO3JldHVybiB0aGlzLnJvb3QmJnQmJmNlKHRoaXMucm9vdCx0LG5ldyB2ZSxpKSxpLnNjaGVtYXN9LGV9KCk7ZnVuY3Rpb24gY2UoZSx0LG4scil7aWYoIWV8fCFyLmluY2x1ZGUoZSkpcmV0dXJuO3ZhciBpPWU7c3dpdGNoKGkudHlwZSl7Y2FzZSJvYmplY3QiOnUoaSx0LG4scik7YnJlYWs7Y2FzZSJhcnJheSI6bChpLHQsbixyKTticmVhaztjYXNlInN0cmluZyI6byhpLHQsbik7YnJlYWs7Y2FzZSJudW1iZXIiOmEoaSx0LG4pO2JyZWFrO2Nhc2UicHJvcGVydHkiOnJldHVybiBjZShpLnZhbHVlTm9kZSx0LG4scil9cygpLHIuYWRkKHtub2RlOmksc2NoZW1hOnR9KTtmdW5jdGlvbiBzKCl7ZnVuY3Rpb24gZihUKXtyZXR1cm4gaS50eXBlPT09VHx8VD09PSJpbnRlZ2VyIiYmaS50eXBlPT09Im51bWJlciImJmkuaXNJbnRlZ2VyfWlmKEFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGUuc29tZShmKXx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8aigidHlwZUFycmF5TWlzbWF0Y2hXYXJuaW5nIiwiSW5jb3JyZWN0IHR5cGUuIEV4cGVjdGVkIG9uZSBvZiB7MH0uIix0LnR5cGUuam9pbigiLCAiKSl9KTp0LnR5cGUmJihmKHQudHlwZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fGooInR5cGVNaXNtYXRjaFdhcm5pbmciLCdJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgInswfSIuJyx0LnR5cGUpfSkpLEFycmF5LmlzQXJyYXkodC5hbGxPZikpZm9yKHZhciBoPTAsZD10LmFsbE9mO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZz1kW2hdO2NlKGkscGUoZyksbixyKX12YXIgbT1wZSh0Lm5vdCk7aWYobSl7dmFyIHY9bmV3IHZlLHA9ci5uZXdTdWIoKTtjZShpLG0sdixwKSx2Lmhhc1Byb2JsZW1zKCl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LG1lc3NhZ2U6aigibm90U2NoZW1hV2FybmluZyIsIk1hdGNoZXMgYSBzY2hlbWEgdGhhdCBpcyBub3QgYWxsb3dlZC4iKX0pO2Zvcih2YXIgeD0wLHk9cC5zY2hlbWFzO3g8eS5sZW5ndGg7eCsrKXt2YXIgYj15W3hdO2IuaW52ZXJ0ZWQ9IWIuaW52ZXJ0ZWQsci5hZGQoYil9fXZhciBMPWZ1bmN0aW9uKFQsRil7Zm9yKHZhciBWPVtdLE89dm9pZCAwLFI9MCxrPVQ7UjxrLmxlbmd0aDtSKyspe3ZhciBQPWtbUl0sRD1wZShQKSxCPW5ldyB2ZSxVPXIubmV3U3ViKCk7aWYoY2UoaSxELEIsVSksQi5oYXNQcm9ibGVtcygpfHxWLnB1c2goRCksIU8pTz17c2NoZW1hOkQsdmFsaWRhdGlvblJlc3VsdDpCLG1hdGNoaW5nU2NoZW1hczpVfTtlbHNlIGlmKCFGJiYhQi5oYXNQcm9ibGVtcygpJiYhTy52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCkpTy5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoVSksTy52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzKz1CLnByb3BlcnRpZXNNYXRjaGVzLE8udmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1CLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM7ZWxzZXt2YXIgRz1CLmNvbXBhcmUoTy52YWxpZGF0aW9uUmVzdWx0KTtHPjA/Tz17c2NoZW1hOkQsdmFsaWRhdGlvblJlc3VsdDpCLG1hdGNoaW5nU2NoZW1hczpVfTpHPT09MCYmKE8ubWF0Y2hpbmdTY2hlbWFzLm1lcmdlKFUpLE8udmFsaWRhdGlvblJlc3VsdC5tZXJnZUVudW1WYWx1ZXMoQikpfX1yZXR1cm4gVi5sZW5ndGg+MSYmRiYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDoxfSxtZXNzYWdlOmooIm9uZU9mV2FybmluZyIsIk1hdGNoZXMgbXVsdGlwbGUgc2NoZW1hcyB3aGVuIG9ubHkgb25lIG11c3QgdmFsaWRhdGUuIil9KSxPJiYobi5tZXJnZShPLnZhbGlkYXRpb25SZXN1bHQpLG4ucHJvcGVydGllc01hdGNoZXMrPU8udmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzTWF0Y2hlcyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPU8udmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzLHIubWVyZ2UoTy5tYXRjaGluZ1NjaGVtYXMpKSxWLmxlbmd0aH07QXJyYXkuaXNBcnJheSh0LmFueU9mKSYmTCh0LmFueU9mLCExKSxBcnJheS5pc0FycmF5KHQub25lT2YpJiZMKHQub25lT2YsITApO3ZhciBTPWZ1bmN0aW9uKFQpe3ZhciBGPW5ldyB2ZSxWPXIubmV3U3ViKCk7Y2UoaSxwZShUKSxGLFYpLG4ubWVyZ2UoRiksbi5wcm9wZXJ0aWVzTWF0Y2hlcys9Ri5wcm9wZXJ0aWVzTWF0Y2hlcyxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrPUYucHJvcGVydGllc1ZhbHVlTWF0Y2hlcyxyLm1lcmdlKFYpfSxfPWZ1bmN0aW9uKFQsRixWKXt2YXIgTz1wZShUKSxSPW5ldyB2ZSxrPXIubmV3U3ViKCk7Y2UoaSxPLFIsayksci5tZXJnZShrKSxSLmhhc1Byb2JsZW1zKCk/ViYmUyhWKTpGJiZTKEYpfSxOPXBlKHQuaWYpO2lmKE4mJl8oTixwZSh0LnRoZW4pLHBlKHQuZWxzZSkpLEFycmF5LmlzQXJyYXkodC5lbnVtKSl7Zm9yKHZhciBBPW90KGkpLE09ITEsST0wLEM9dC5lbnVtO0k8Qy5sZW5ndGg7SSsrKXt2YXIgdz1DW0ldO2lmKEJ0KEEsdykpe009ITA7YnJlYWt9fW4uZW51bVZhbHVlcz10LmVudW0sbi5lbnVtVmFsdWVNYXRjaD1NLE18fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLm9mZnNldCxsZW5ndGg6aS5sZW5ndGh9LGNvZGU6Si5FbnVtVmFsdWVNaXNtYXRjaCxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxqKCJlbnVtV2FybmluZyIsIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0LmVudW0ubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBKU09OLnN0cmluZ2lmeShUKX0pLmpvaW4oIiwgIikpfSl9aWYoVWUodC5jb25zdCkpe3ZhciBBPW90KGkpO0J0KEEsdC5jb25zdCk/bi5lbnVtVmFsdWVNYXRjaD0hMDoobi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Omkub2Zmc2V0LGxlbmd0aDppLmxlbmd0aH0sY29kZTpKLkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fGooImNvbnN0V2FybmluZyIsIlZhbHVlIG11c3QgYmUgezB9LiIsSlNPTi5zdHJpbmdpZnkodC5jb25zdCkpfSksbi5lbnVtVmFsdWVNYXRjaD0hMSksbi5lbnVtVmFsdWVzPVt0LmNvbnN0XX10LmRlcHJlY2F0aW9uTWVzc2FnZSYmaS5wYXJlbnQmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDppLnBhcmVudC5vZmZzZXQsbGVuZ3RoOmkucGFyZW50Lmxlbmd0aH0sc2V2ZXJpdHk6X2UuV2FybmluZyxtZXNzYWdlOnQuZGVwcmVjYXRpb25NZXNzYWdlLGNvZGU6Si5EZXByZWNhdGVkfSl9ZnVuY3Rpb24gYShmLGgsZCxnKXt2YXIgbT1mLnZhbHVlO2Z1bmN0aW9uIHYoSSl7dmFyIEMsdz0vXigtP1xkKykoPzpcLihcZCspKT8oPzplKFstK11cZCspKT8kLy5leGVjKEkudG9TdHJpbmcoKSk7cmV0dXJuIHcmJnt2YWx1ZTpOdW1iZXIod1sxXSsod1syXXx8IiIpKSxtdWx0aXBsaWVyOigoKEM9d1syXSk9PT1udWxsfHxDPT09dm9pZCAwP3ZvaWQgMDpDLmxlbmd0aCl8fDApLShwYXJzZUludCh3WzNdKXx8MCl9fWlmKHdlKGgubXVsdGlwbGVPZikpe3ZhciBwPS0xO2lmKE51bWJlci5pc0ludGVnZXIoaC5tdWx0aXBsZU9mKSlwPW0laC5tdWx0aXBsZU9mO2Vsc2V7dmFyIHg9dihoLm11bHRpcGxlT2YpLHk9dihtKTtpZih4JiZ5KXt2YXIgYj1NYXRoLnBvdygxMCxNYXRoLmFicyh5Lm11bHRpcGxpZXIteC5tdWx0aXBsaWVyKSk7eS5tdWx0aXBsaWVyPHgubXVsdGlwbGllcj95LnZhbHVlKj1iOngudmFsdWUqPWIscD15LnZhbHVlJXgudmFsdWV9fXAhPT0wJiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Zi5vZmZzZXQsbGVuZ3RoOmYubGVuZ3RofSxtZXNzYWdlOmooIm11bHRpcGxlT2ZXYXJuaW5nIiwiVmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB7MH0uIixoLm11bHRpcGxlT2YpfSl9ZnVuY3Rpb24gTChJLEMpe2lmKHdlKEMpKXJldHVybiBDO2lmKEllKEMpJiZDKXJldHVybiBJfWZ1bmN0aW9uIFMoSSxDKXtpZighSWUoQyl8fCFDKXJldHVybiBJfXZhciBfPUwoaC5taW5pbXVtLGguZXhjbHVzaXZlTWluaW11bSk7d2UoXykmJm08PV8mJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigiZXhjbHVzaXZlTWluaW11bVdhcm5pbmciLCJWYWx1ZSBpcyBiZWxvdyB0aGUgZXhjbHVzaXZlIG1pbmltdW0gb2YgezB9LiIsXyl9KTt2YXIgTj1MKGgubWF4aW11bSxoLmV4Y2x1c2l2ZU1heGltdW0pO3dlKE4pJiZtPj1OJiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Zi5vZmZzZXQsbGVuZ3RoOmYubGVuZ3RofSxtZXNzYWdlOmooImV4Y2x1c2l2ZU1heGltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYWJvdmUgdGhlIGV4Y2x1c2l2ZSBtYXhpbXVtIG9mIHswfS4iLE4pfSk7dmFyIEE9UyhoLm1pbmltdW0saC5leGNsdXNpdmVNaW5pbXVtKTt3ZShBKSYmbTxBJiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Zi5vZmZzZXQsbGVuZ3RoOmYubGVuZ3RofSxtZXNzYWdlOmooIm1pbmltdW1XYXJuaW5nIiwiVmFsdWUgaXMgYmVsb3cgdGhlIG1pbmltdW0gb2YgezB9LiIsQSl9KTt2YXIgTT1TKGgubWF4aW11bSxoLmV4Y2x1c2l2ZU1heGltdW0pO3dlKE0pJiZtPk0mJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigibWF4aW11bVdhcm5pbmciLCJWYWx1ZSBpcyBhYm92ZSB0aGUgbWF4aW11bSBvZiB7MH0uIixNKX0pfWZ1bmN0aW9uIG8oZixoLGQsZyl7aWYod2UoaC5taW5MZW5ndGgpJiZmLnZhbHVlLmxlbmd0aDxoLm1pbkxlbmd0aCYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDpmLmxlbmd0aH0sbWVzc2FnZTpqKCJtaW5MZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIHNob3J0ZXIgdGhhbiB0aGUgbWluaW11bSBsZW5ndGggb2YgezB9LiIsaC5taW5MZW5ndGgpfSksd2UoaC5tYXhMZW5ndGgpJiZmLnZhbHVlLmxlbmd0aD5oLm1heExlbmd0aCYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDpmLmxlbmd0aH0sbWVzc2FnZTpqKCJtYXhMZW5ndGhXYXJuaW5nIiwiU3RyaW5nIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB7MH0uIixoLm1heExlbmd0aCl9KSxtdShoLnBhdHRlcm4pKXt2YXIgbT1tbihoLnBhdHRlcm4pO20/LnRlc3QoZi52YWx1ZSl8fGQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHxoLmVycm9yTWVzc2FnZXx8aigicGF0dGVybldhcm5pbmciLCdTdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4gb2YgInswfSIuJyxoLnBhdHRlcm4pfSl9aWYoaC5mb3JtYXQpc3dpdGNoKGguZm9ybWF0KXtjYXNlInVyaSI6Y2FzZSJ1cmktcmVmZXJlbmNlIjp7dmFyIHY9dm9pZCAwO2lmKCFmLnZhbHVlKXY9aigidXJpRW1wdHkiLCJVUkkgZXhwZWN0ZWQuIik7ZWxzZXt2YXIgcD0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/Ly5leGVjKGYudmFsdWUpO3A/IXBbMl0mJmguZm9ybWF0PT09InVyaSImJih2PWooInVyaVNjaGVtZU1pc3NpbmciLCJVUkkgd2l0aCBhIHNjaGVtZSBpcyBleHBlY3RlZC4iKSk6dj1qKCJ1cmlNaXNzaW5nIiwiVVJJIGlzIGV4cGVjdGVkLiIpfXYmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHxoLmVycm9yTWVzc2FnZXx8aigidXJpRm9ybWF0V2FybmluZyIsIlN0cmluZyBpcyBub3QgYSBVUkk6IHswfSIsdil9KX1icmVhaztjYXNlImNvbG9yLWhleCI6Y2FzZSJkYXRlLXRpbWUiOmNhc2UiZGF0ZSI6Y2FzZSJ0aW1lIjpjYXNlImVtYWlsIjpjYXNlImhvc3RuYW1lIjpjYXNlImlwdjQiOmNhc2UiaXB2NiI6dmFyIHg9d3VbaC5mb3JtYXRdOyghZi52YWx1ZXx8IXgucGF0dGVybi5leGVjKGYudmFsdWUpKSYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDpmLmxlbmd0aH0sbWVzc2FnZTpoLnBhdHRlcm5FcnJvck1lc3NhZ2V8fGguZXJyb3JNZXNzYWdlfHx4LmVycm9yTWVzc2FnZX0pfX1mdW5jdGlvbiBsKGYsaCxkLGcpe2lmKEFycmF5LmlzQXJyYXkoaC5pdGVtcykpe2Zvcih2YXIgbT1oLml0ZW1zLHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIHA9bVt2XSx4PXBlKHApLHk9bmV3IHZlLGI9Zi5pdGVtc1t2XTtiPyhjZShiLHgseSxnKSxkLm1lcmdlUHJvcGVydHlNYXRjaCh5KSk6Zi5pdGVtcy5sZW5ndGg+PW0ubGVuZ3RoJiZkLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrK31pZihmLml0ZW1zLmxlbmd0aD5tLmxlbmd0aClpZih0eXBlb2YgaC5hZGRpdGlvbmFsSXRlbXM9PSJvYmplY3QiKWZvcih2YXIgTD1tLmxlbmd0aDtMPGYuaXRlbXMubGVuZ3RoO0wrKyl7dmFyIHk9bmV3IHZlO2NlKGYuaXRlbXNbTF0saC5hZGRpdGlvbmFsSXRlbXMseSxnKSxkLm1lcmdlUHJvcGVydHlNYXRjaCh5KX1lbHNlIGguYWRkaXRpb25hbEl0ZW1zPT09ITEmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigiYWRkaXRpb25hbEl0ZW1zV2FybmluZyIsIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcyBhY2NvcmRpbmcgdG8gc2NoZW1hLiBFeHBlY3RlZCB7MH0gb3IgZmV3ZXIuIixtLmxlbmd0aCl9KX1lbHNle3ZhciBTPXBlKGguaXRlbXMpO2lmKFMpZm9yKHZhciBfPTAsTj1mLml0ZW1zO188Ti5sZW5ndGg7XysrKXt2YXIgYj1OW19dLHk9bmV3IHZlO2NlKGIsUyx5LGcpLGQubWVyZ2VQcm9wZXJ0eU1hdGNoKHkpfX12YXIgQT1wZShoLmNvbnRhaW5zKTtpZihBKXt2YXIgTT1mLml0ZW1zLnNvbWUoZnVuY3Rpb24odyl7dmFyIFQ9bmV3IHZlO3JldHVybiBjZSh3LEEsVCxTci5pbnN0YW5jZSksIVQuaGFzUHJvYmxlbXMoKX0pO018fGQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aC5lcnJvck1lc3NhZ2V8fGooInJlcXVpcmVkSXRlbU1pc3NpbmdXYXJuaW5nIiwiQXJyYXkgZG9lcyBub3QgY29udGFpbiByZXF1aXJlZCBpdGVtLiIpfSl9aWYod2UoaC5taW5JdGVtcykmJmYuaXRlbXMubGVuZ3RoPGgubWluSXRlbXMmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigibWluSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIHRvbyBmZXcgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBtb3JlLiIsaC5taW5JdGVtcyl9KSx3ZShoLm1heEl0ZW1zKSYmZi5pdGVtcy5sZW5ndGg+aC5tYXhJdGVtcyYmZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDpmLmxlbmd0aH0sbWVzc2FnZTpqKCJtYXhJdGVtc1dhcm5pbmciLCJBcnJheSBoYXMgdG9vIG1hbnkgaXRlbXMuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLGgubWF4SXRlbXMpfSksaC51bmlxdWVJdGVtcz09PSEwKXt2YXIgST1vdChmKSxDPUkuc29tZShmdW5jdGlvbih3LFQpe3JldHVybiBUIT09SS5sYXN0SW5kZXhPZih3KX0pO0MmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigidW5pcXVlSXRlbXNXYXJuaW5nIiwiQXJyYXkgaGFzIGR1cGxpY2F0ZSBpdGVtcy4iKX0pfX1mdW5jdGlvbiB1KGYsaCxkLGcpe2Zvcih2YXIgbT1PYmplY3QuY3JlYXRlKG51bGwpLHY9W10scD0wLHg9Zi5wcm9wZXJ0aWVzO3A8eC5sZW5ndGg7cCsrKXt2YXIgeT14W3BdLGI9eS5rZXlOb2RlLnZhbHVlO21bYl09eS52YWx1ZU5vZGUsdi5wdXNoKGIpfWlmKEFycmF5LmlzQXJyYXkoaC5yZXF1aXJlZCkpZm9yKHZhciBMPTAsUz1oLnJlcXVpcmVkO0w8Uy5sZW5ndGg7TCsrKXt2YXIgXz1TW0xdO2lmKCFtW19dKXt2YXIgTj1mLnBhcmVudCYmZi5wYXJlbnQudHlwZT09PSJwcm9wZXJ0eSImJmYucGFyZW50LmtleU5vZGUsQT1OP3tvZmZzZXQ6Ti5vZmZzZXQsbGVuZ3RoOk4ubGVuZ3RofTp7b2Zmc2V0OmYub2Zmc2V0LGxlbmd0aDoxfTtkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOkEsbWVzc2FnZTpqKCJNaXNzaW5nUmVxdWlyZWRQcm9wV2FybmluZyIsJ01pc3NpbmcgcHJvcGVydHkgInswfSIuJyxfKX0pfX12YXIgTT1mdW5jdGlvbihUYSl7Zm9yKHZhciBGcj12LmluZGV4T2YoVGEpO0ZyPj0wOyl2LnNwbGljZShGciwxKSxGcj12LmluZGV4T2YoVGEpfTtpZihoLnByb3BlcnRpZXMpZm9yKHZhciBJPTAsQz1PYmplY3Qua2V5cyhoLnByb3BlcnRpZXMpO0k8Qy5sZW5ndGg7SSsrKXt2YXIgXz1DW0ldO00oXyk7dmFyIHc9aC5wcm9wZXJ0aWVzW19dLFQ9bVtfXTtpZihUKWlmKEllKHcpKWlmKHcpZC5wcm9wZXJ0aWVzTWF0Y2hlcysrLGQucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7dmFyIHk9VC5wYXJlbnQ7ZC5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0Onkua2V5Tm9kZS5vZmZzZXQsbGVuZ3RoOnkua2V5Tm9kZS5sZW5ndGh9LG1lc3NhZ2U6aC5lcnJvck1lc3NhZ2V8fGooIkRpc2FsbG93ZWRFeHRyYVByb3BXYXJuaW5nIiwiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIsXyl9KX1lbHNle3ZhciBGPW5ldyB2ZTtjZShULHcsRixnKSxkLm1lcmdlUHJvcGVydHlNYXRjaChGKX19aWYoaC5wYXR0ZXJuUHJvcGVydGllcylmb3IodmFyIFY9MCxPPU9iamVjdC5rZXlzKGgucGF0dGVyblByb3BlcnRpZXMpO1Y8Ty5sZW5ndGg7VisrKWZvcih2YXIgUj1PW1ZdLGs9bW4oUiksUD0wLEQ9di5zbGljZSgwKTtQPEQubGVuZ3RoO1ArKyl7dmFyIF89RFtQXTtpZihrPy50ZXN0KF8pKXtNKF8pO3ZhciBUPW1bX107aWYoVCl7dmFyIHc9aC5wYXR0ZXJuUHJvcGVydGllc1tSXTtpZihJZSh3KSlpZih3KWQucHJvcGVydGllc01hdGNoZXMrKyxkLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrKztlbHNle3ZhciB5PVQucGFyZW50O2QucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDp5LmtleU5vZGUub2Zmc2V0LGxlbmd0aDp5LmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOmguZXJyb3JNZXNzYWdlfHxqKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLF8pfSl9ZWxzZXt2YXIgRj1uZXcgdmU7Y2UoVCx3LEYsZyksZC5tZXJnZVByb3BlcnR5TWF0Y2goRil9fX19aWYodHlwZW9mIGguYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiKWZvcih2YXIgQj0wLFU9djtCPFUubGVuZ3RoO0IrKyl7dmFyIF89VVtCXSxUPW1bX107aWYoVCl7dmFyIEY9bmV3IHZlO2NlKFQsaC5hZGRpdGlvbmFsUHJvcGVydGllcyxGLGcpLGQubWVyZ2VQcm9wZXJ0eU1hdGNoKEYpfX1lbHNlIGlmKGguYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMSYmdi5sZW5ndGg+MClmb3IodmFyIEc9MCxkZT12O0c8ZGUubGVuZ3RoO0crKyl7dmFyIF89ZGVbR10sVD1tW19dO2lmKFQpe3ZhciB5PVQucGFyZW50O2QucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDp5LmtleU5vZGUub2Zmc2V0LGxlbmd0aDp5LmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOmguZXJyb3JNZXNzYWdlfHxqKCJEaXNhbGxvd2VkRXh0cmFQcm9wV2FybmluZyIsIlByb3BlcnR5IHswfSBpcyBub3QgYWxsb3dlZC4iLF8pfSl9fWlmKHdlKGgubWF4UHJvcGVydGllcykmJmYucHJvcGVydGllcy5sZW5ndGg+aC5tYXhQcm9wZXJ0aWVzJiZkLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Zi5vZmZzZXQsbGVuZ3RoOmYubGVuZ3RofSxtZXNzYWdlOmooIk1heFByb3BXYXJuaW5nIiwiT2JqZWN0IGhhcyBtb3JlIHByb3BlcnRpZXMgdGhhbiBsaW1pdCBvZiB7MH0uIixoLm1heFByb3BlcnRpZXMpfSksd2UoaC5taW5Qcm9wZXJ0aWVzKSYmZi5wcm9wZXJ0aWVzLmxlbmd0aDxoLm1pblByb3BlcnRpZXMmJmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigiTWluUHJvcFdhcm5pbmciLCJPYmplY3QgaGFzIGZld2VyIHByb3BlcnRpZXMgdGhhbiB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIHswfSIsaC5taW5Qcm9wZXJ0aWVzKX0pLGguZGVwZW5kZW5jaWVzKWZvcih2YXIgbGU9MCxiZT1PYmplY3Qua2V5cyhoLmRlcGVuZGVuY2llcyk7bGU8YmUubGVuZ3RoO2xlKyspe3ZhciBiPWJlW2xlXSxFdD1tW2JdO2lmKEV0KXt2YXIgT2U9aC5kZXBlbmRlbmNpZXNbYl07aWYoQXJyYXkuaXNBcnJheShPZSkpZm9yKHZhciBUcj0wLGthPU9lO1RyPGthLmxlbmd0aDtUcisrKXt2YXIgRWE9a2FbVHJdO21bRWFdP2QucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOmQucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpmLm9mZnNldCxsZW5ndGg6Zi5sZW5ndGh9LG1lc3NhZ2U6aigiUmVxdWlyZWREZXBlbmRlbnRQcm9wV2FybmluZyIsIk9iamVjdCBpcyBtaXNzaW5nIHByb3BlcnR5IHswfSByZXF1aXJlZCBieSBwcm9wZXJ0eSB7MX0uIixFYSxiKX0pfWVsc2V7dmFyIHc9cGUoT2UpO2lmKHcpe3ZhciBGPW5ldyB2ZTtjZShmLHcsRixnKSxkLm1lcmdlUHJvcGVydHlNYXRjaChGKX19fX12YXIgTWE9cGUoaC5wcm9wZXJ0eU5hbWVzKTtpZihNYSlmb3IodmFyIFByPTAsUmE9Zi5wcm9wZXJ0aWVzO1ByPFJhLmxlbmd0aDtQcisrKXt2YXIgdWM9UmFbUHJdLGI9dWMua2V5Tm9kZTtiJiZjZShiLE1hLGQsU3IuaW5zdGFuY2UpfX19ZnVuY3Rpb24gRXUoZSx0KXt2YXIgbj1bXSxyPS0xLGk9ZS5nZXRUZXh0KCkscz1OdChpLCExKSxhPXQmJnQuY29sbGVjdENvbW1lbnRzP1tdOnZvaWQgMDtmdW5jdGlvbiBvKCl7Zm9yKDs7KXt2YXIgXz1zLnNjYW4oKTtzd2l0Y2goZigpLF8pe2Nhc2UgMTI6Y2FzZSAxMzpBcnJheS5pc0FycmF5KGEpJiZhLnB1c2goWC5jcmVhdGUoZS5wb3NpdGlvbkF0KHMuZ2V0VG9rZW5PZmZzZXQoKSksZS5wb3NpdGlvbkF0KHMuZ2V0VG9rZW5PZmZzZXQoKStzLmdldFRva2VuTGVuZ3RoKCkpKSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIF99fX1mdW5jdGlvbiBsKF8sTixBLE0sSSl7aWYoST09PXZvaWQgMCYmKEk9X2UuRXJyb3IpLG4ubGVuZ3RoPT09MHx8QSE9PXIpe3ZhciBDPVguY3JlYXRlKGUucG9zaXRpb25BdChBKSxlLnBvc2l0aW9uQXQoTSkpO24ucHVzaCgkZS5jcmVhdGUoQyxfLEksTixlLmxhbmd1YWdlSWQpKSxyPUF9fWZ1bmN0aW9uIHUoXyxOLEEsTSxJKXtBPT09dm9pZCAwJiYoQT12b2lkIDApLE09PT12b2lkIDAmJihNPVtdKSxJPT09dm9pZCAwJiYoST1bXSk7dmFyIEM9cy5nZXRUb2tlbk9mZnNldCgpLHc9cy5nZXRUb2tlbk9mZnNldCgpK3MuZ2V0VG9rZW5MZW5ndGgoKTtpZihDPT09dyYmQz4wKXtmb3IoQy0tO0M+MCYmL1xzLy50ZXN0KGkuY2hhckF0KEMpKTspQy0tO3c9QysxfWlmKGwoXyxOLEMsdyksQSYmaChBLCExKSxNLmxlbmd0aCtJLmxlbmd0aD4wKWZvcih2YXIgVD1zLmdldFRva2VuKCk7VCE9PTE3Oyl7aWYoTS5pbmRleE9mKFQpIT09LTEpe28oKTticmVha31lbHNlIGlmKEkuaW5kZXhPZihUKSE9PS0xKWJyZWFrO1Q9bygpfXJldHVybiBBfWZ1bmN0aW9uIGYoKXtzd2l0Y2gocy5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpyZXR1cm4gdShqKCJJbnZhbGlkVW5pY29kZSIsIkludmFsaWQgdW5pY29kZSBzZXF1ZW5jZSBpbiBzdHJpbmcuIiksSi5JbnZhbGlkVW5pY29kZSksITA7Y2FzZSA1OnJldHVybiB1KGooIkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLCJJbnZhbGlkIGVzY2FwZSBjaGFyYWN0ZXIgaW4gc3RyaW5nLiIpLEouSW52YWxpZEVzY2FwZUNoYXJhY3RlciksITA7Y2FzZSAzOnJldHVybiB1KGooIlVuZXhwZWN0ZWRFbmRPZk51bWJlciIsIlVuZXhwZWN0ZWQgZW5kIG9mIG51bWJlci4iKSxKLlVuZXhwZWN0ZWRFbmRPZk51bWJlciksITA7Y2FzZSAxOnJldHVybiB1KGooIlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLCJVbmV4cGVjdGVkIGVuZCBvZiBjb21tZW50LiIpLEouVW5leHBlY3RlZEVuZE9mQ29tbWVudCksITA7Y2FzZSAyOnJldHVybiB1KGooIlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsIlVuZXhwZWN0ZWQgZW5kIG9mIHN0cmluZy4iKSxKLlVuZXhwZWN0ZWRFbmRPZlN0cmluZyksITA7Y2FzZSA2OnJldHVybiB1KGooIkludmFsaWRDaGFyYWN0ZXIiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gc3RyaW5nLiBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkLiIpLEouSW52YWxpZENoYXJhY3RlciksITB9cmV0dXJuITF9ZnVuY3Rpb24gaChfLE4pe3JldHVybiBfLmxlbmd0aD1zLmdldFRva2VuT2Zmc2V0KCkrcy5nZXRUb2tlbkxlbmd0aCgpLV8ub2Zmc2V0LE4mJm8oKSxffWZ1bmN0aW9uIGQoXyl7aWYocy5nZXRUb2tlbigpPT09Myl7dmFyIE49bmV3IFN1KF8scy5nZXRUb2tlbk9mZnNldCgpKTtvKCk7Zm9yKHZhciBBPSExO3MuZ2V0VG9rZW4oKSE9PTQmJnMuZ2V0VG9rZW4oKSE9PTE3Oyl7aWYocy5nZXRUb2tlbigpPT09NSl7QXx8dShqKCJWYWx1ZUV4cGVjdGVkIiwiVmFsdWUgZXhwZWN0ZWQiKSxKLlZhbHVlRXhwZWN0ZWQpO3ZhciBNPXMuZ2V0VG9rZW5PZmZzZXQoKTtpZihvKCkscy5nZXRUb2tlbigpPT09NCl7QSYmbChqKCJUcmFpbGluZ0NvbW1hIiwiVHJhaWxpbmcgY29tbWEiKSxKLlRyYWlsaW5nQ29tbWEsTSxNKzEpO2NvbnRpbnVlfX1lbHNlIEEmJnUoaigiRXhwZWN0ZWRDb21tYSIsIkV4cGVjdGVkIGNvbW1hIiksSi5Db21tYUV4cGVjdGVkKTt2YXIgST1iKE4pO0k/Ti5pdGVtcy5wdXNoKEkpOnUoaigiUHJvcGVydHlFeHBlY3RlZCIsIlZhbHVlIGV4cGVjdGVkIiksSi5WYWx1ZUV4cGVjdGVkLHZvaWQgMCxbXSxbNCw1XSksQT0hMH1yZXR1cm4gcy5nZXRUb2tlbigpIT09ND91KGooIkV4cGVjdGVkQ2xvc2VCcmFja2V0IiwiRXhwZWN0ZWQgY29tbWEgb3IgY2xvc2luZyBicmFja2V0IiksSi5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCxOKTpoKE4sITApfX12YXIgZz1uZXcgX3Iodm9pZCAwLDAsMCk7ZnVuY3Rpb24gbShfLE4pe3ZhciBBPW5ldyBOdShfLHMuZ2V0VG9rZW5PZmZzZXQoKSxnKSxNPXAoQSk7aWYoIU0paWYocy5nZXRUb2tlbigpPT09MTYpe3UoaigiRG91YmxlUXVvdGVzRXhwZWN0ZWQiLCJQcm9wZXJ0eSBrZXlzIG11c3QgYmUgZG91YmxlcXVvdGVkIiksSi5VbmRlZmluZWQpO3ZhciBJPW5ldyBfcihBLHMuZ2V0VG9rZW5PZmZzZXQoKSxzLmdldFRva2VuTGVuZ3RoKCkpO0kudmFsdWU9cy5nZXRUb2tlblZhbHVlKCksTT1JLG8oKX1lbHNlIHJldHVybjtBLmtleU5vZGU9TTt2YXIgQz1OW00udmFsdWVdO2lmKEM/KGwoaigiRHVwbGljYXRlS2V5V2FybmluZyIsIkR1cGxpY2F0ZSBvYmplY3Qga2V5IiksSi5EdXBsaWNhdGVLZXksQS5rZXlOb2RlLm9mZnNldCxBLmtleU5vZGUub2Zmc2V0K0Eua2V5Tm9kZS5sZW5ndGgsX2UuV2FybmluZyksdHlwZW9mIEM9PSJvYmplY3QiJiZsKGooIkR1cGxpY2F0ZUtleVdhcm5pbmciLCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLEouRHVwbGljYXRlS2V5LEMua2V5Tm9kZS5vZmZzZXQsQy5rZXlOb2RlLm9mZnNldCtDLmtleU5vZGUubGVuZ3RoLF9lLldhcm5pbmcpLE5bTS52YWx1ZV09ITApOk5bTS52YWx1ZV09QSxzLmdldFRva2VuKCk9PT02KUEuY29sb25PZmZzZXQ9cy5nZXRUb2tlbk9mZnNldCgpLG8oKTtlbHNlIGlmKHUoaigiQ29sb25FeHBlY3RlZCIsIkNvbG9uIGV4cGVjdGVkIiksSi5Db2xvbkV4cGVjdGVkKSxzLmdldFRva2VuKCk9PT0xMCYmZS5wb3NpdGlvbkF0KE0ub2Zmc2V0K00ubGVuZ3RoKS5saW5lPGUucG9zaXRpb25BdChzLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUpcmV0dXJuIEEubGVuZ3RoPU0ubGVuZ3RoLEE7dmFyIHc9YihBKTtyZXR1cm4gdz8oQS52YWx1ZU5vZGU9dyxBLmxlbmd0aD13Lm9mZnNldCt3Lmxlbmd0aC1BLm9mZnNldCxBKTp1KGooIlZhbHVlRXhwZWN0ZWQiLCJWYWx1ZSBleHBlY3RlZCIpLEouVmFsdWVFeHBlY3RlZCxBLFtdLFsyLDVdKX1mdW5jdGlvbiB2KF8pe2lmKHMuZ2V0VG9rZW4oKT09PTEpe3ZhciBOPW5ldyBBdShfLHMuZ2V0VG9rZW5PZmZzZXQoKSksQT1PYmplY3QuY3JlYXRlKG51bGwpO28oKTtmb3IodmFyIE09ITE7cy5nZXRUb2tlbigpIT09MiYmcy5nZXRUb2tlbigpIT09MTc7KXtpZihzLmdldFRva2VuKCk9PT01KXtNfHx1KGooIlByb3BlcnR5RXhwZWN0ZWQiLCJQcm9wZXJ0eSBleHBlY3RlZCIpLEouUHJvcGVydHlFeHBlY3RlZCk7dmFyIEk9cy5nZXRUb2tlbk9mZnNldCgpO2lmKG8oKSxzLmdldFRva2VuKCk9PT0yKXtNJiZsKGooIlRyYWlsaW5nQ29tbWEiLCJUcmFpbGluZyBjb21tYSIpLEouVHJhaWxpbmdDb21tYSxJLEkrMSk7Y29udGludWV9fWVsc2UgTSYmdShqKCJFeHBlY3RlZENvbW1hIiwiRXhwZWN0ZWQgY29tbWEiKSxKLkNvbW1hRXhwZWN0ZWQpO3ZhciBDPW0oTixBKTtDP04ucHJvcGVydGllcy5wdXNoKEMpOnUoaigiUHJvcGVydHlFeHBlY3RlZCIsIlByb3BlcnR5IGV4cGVjdGVkIiksSi5Qcm9wZXJ0eUV4cGVjdGVkLHZvaWQgMCxbXSxbMiw1XSksTT0hMH1yZXR1cm4gcy5nZXRUb2tlbigpIT09Mj91KGooIkV4cGVjdGVkQ2xvc2VCcmFjZSIsIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2UiKSxKLkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQsTik6aChOLCEwKX19ZnVuY3Rpb24gcChfKXtpZihzLmdldFRva2VuKCk9PT0xMCl7dmFyIE49bmV3IF9yKF8scy5nZXRUb2tlbk9mZnNldCgpKTtyZXR1cm4gTi52YWx1ZT1zLmdldFRva2VuVmFsdWUoKSxoKE4sITApfX1mdW5jdGlvbiB4KF8pe2lmKHMuZ2V0VG9rZW4oKT09PTExKXt2YXIgTj1uZXcgTHUoXyxzLmdldFRva2VuT2Zmc2V0KCkpO2lmKHMuZ2V0VG9rZW5FcnJvcigpPT09MCl7dmFyIEE9cy5nZXRUb2tlblZhbHVlKCk7dHJ5e3ZhciBNPUpTT04ucGFyc2UoQSk7aWYoIXdlKE0pKXJldHVybiB1KGooIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksSi5VbmRlZmluZWQsTik7Ti52YWx1ZT1NfWNhdGNoe3JldHVybiB1KGooIkludmFsaWROdW1iZXJGb3JtYXQiLCJJbnZhbGlkIG51bWJlciBmb3JtYXQuIiksSi5VbmRlZmluZWQsTil9Ti5pc0ludGVnZXI9QS5pbmRleE9mKCIuIik9PT0tMX1yZXR1cm4gaChOLCEwKX19ZnVuY3Rpb24geShfKXtzd2l0Y2gocy5nZXRUb2tlbigpKXtjYXNlIDc6cmV0dXJuIGgobmV3IF91KF8scy5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA4OnJldHVybiBoKG5ldyBwYShfLCEwLHMuZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgOTpyZXR1cm4gaChuZXcgcGEoXywhMSxzLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gYihfKXtyZXR1cm4gZChfKXx8dihfKXx8cChfKXx8eChfKXx8eShfKX12YXIgTD12b2lkIDAsUz1vKCk7cmV0dXJuIFMhPT0xNyYmKEw9YihMKSxMP3MuZ2V0VG9rZW4oKSE9PTE3JiZ1KGooIkVuZCBvZiBmaWxlIGV4cGVjdGVkIiwiRW5kIG9mIGZpbGUgZXhwZWN0ZWQuIiksSi5VbmRlZmluZWQpOnUoaigiSW52YWxpZCBzeW1ib2wiLCJFeHBlY3RlZCBhIEpTT04gb2JqZWN0LCBhcnJheSBvciBsaXRlcmFsLiIpLEouVW5kZWZpbmVkKSksbmV3IHhhKEwsbixhKX1mdW5jdGlvbiBOcihlLHQsbil7aWYoZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0Iil7dmFyIHI9dCsiCSI7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiJbXSI7Zm9yKHZhciBpPWBbCmAscz0wO3M8ZS5sZW5ndGg7cysrKWkrPXIrTnIoZVtzXSxyLG4pLHM8ZS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9YApgO3JldHVybiBpKz10KyJdIixpfWVsc2V7dmFyIGE9T2JqZWN0LmtleXMoZSk7aWYoYS5sZW5ndGg9PT0wKXJldHVybiJ7fSI7Zm9yKHZhciBpPWB7CmAscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbz1hW3NdO2krPXIrSlNPTi5zdHJpbmdpZnkobykrIjogIitOcihlW29dLHIsbiksczxhLmxlbmd0aC0xJiYoaSs9IiwiKSxpKz1gCmB9cmV0dXJuIGkrPXQrIn0iLGl9fXJldHVybiBuKGUpfXZhciBBcj1YdCgpLE11PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scixpKXtuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9UHJvbWlzZSksaT09PXZvaWQgMCYmKGk9e30pLHRoaXMuc2NoZW1hU2VydmljZT10LHRoaXMuY29udHJpYnV0aW9ucz1uLHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yPXIsdGhpcy5jbGllbnRDYXBhYmlsaXRpZXM9aX1yZXR1cm4gZS5wcm90b3R5cGUuZG9SZXNvbHZlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPXRoaXMuY29udHJpYnV0aW9uc1tuXS5yZXNvbHZlQ29tcGxldGlvbjtpZihyKXt2YXIgaT1yKHQpO2lmKGkpcmV0dXJuIGl9fXJldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5yZXNvbHZlKHQpfSxlLnByb3RvdHlwZS5kb0NvbXBsZXRlPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT10aGlzLHM9e2l0ZW1zOltdLGlzSW5jb21wbGV0ZTohMX0sYT10LmdldFRleHQoKSxvPXQub2Zmc2V0QXQobiksbD1yLmdldE5vZGVGcm9tT2Zmc2V0KG8sITApO2lmKHRoaXMuaXNJbkNvbW1lbnQodCxsP2wub2Zmc2V0OjAsbykpcmV0dXJuIFByb21pc2UucmVzb2x2ZShzKTtpZihsJiZvPT09bC5vZmZzZXQrbC5sZW5ndGgmJm8+MCl7dmFyIHU9YVtvLTFdOyhsLnR5cGU9PT0ib2JqZWN0IiYmdT09PSJ9Inx8bC50eXBlPT09ImFycmF5IiYmdT09PSJdIikmJihsPWwucGFyZW50KX12YXIgZj10aGlzLmdldEN1cnJlbnRXb3JkKHQsbyksaDtpZihsJiYobC50eXBlPT09InN0cmluZyJ8fGwudHlwZT09PSJudW1iZXIifHxsLnR5cGU9PT0iYm9vbGVhbiJ8fGwudHlwZT09PSJudWxsIikpaD1YLmNyZWF0ZSh0LnBvc2l0aW9uQXQobC5vZmZzZXQpLHQucG9zaXRpb25BdChsLm9mZnNldCtsLmxlbmd0aCkpO2Vsc2V7dmFyIGQ9by1mLmxlbmd0aDtkPjAmJmFbZC0xXT09PSciJyYmZC0tLGg9WC5jcmVhdGUodC5wb3NpdGlvbkF0KGQpLG4pfXZhciBnPXt9LG09e2FkZDpmdW5jdGlvbih2KXt2YXIgcD12LmxhYmVsLHg9Z1twXTtpZih4KXguZG9jdW1lbnRhdGlvbnx8KHguZG9jdW1lbnRhdGlvbj12LmRvY3VtZW50YXRpb24pLHguZGV0YWlsfHwoeC5kZXRhaWw9di5kZXRhaWwpO2Vsc2V7aWYocD1wLnJlcGxhY2UoL1tcbl0vZywi4oa1IikscC5sZW5ndGg+NjApe3ZhciB5PXAuc3Vic3RyKDAsNTcpLnRyaW0oKSsiLi4uIjtnW3ldfHwocD15KX1oJiZ2Lmluc2VydFRleHQhPT12b2lkIDAmJih2LnRleHRFZGl0PVJlLnJlcGxhY2UoaCx2Lmluc2VydFRleHQpKSx2LmxhYmVsPXAsZ1twXT12LHMuaXRlbXMucHVzaCh2KX19LHNldEFzSW5jb21wbGV0ZTpmdW5jdGlvbigpe3MuaXNJbmNvbXBsZXRlPSEwfSxlcnJvcjpmdW5jdGlvbih2KXtjb25zb2xlLmVycm9yKHYpfSxsb2c6ZnVuY3Rpb24odil7Y29uc29sZS5sb2codil9LGdldE51bWJlck9mUHJvcG9zYWxzOmZ1bmN0aW9uKCl7cmV0dXJuIHMuaXRlbXMubGVuZ3RofX07cmV0dXJuIHRoaXMuc2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZSh0LnVyaSxyKS50aGVuKGZ1bmN0aW9uKHYpe3ZhciBwPVtdLHg9ITAseT0iIixiPXZvaWQgMDtpZihsJiZsLnR5cGU9PT0ic3RyaW5nIil7dmFyIEw9bC5wYXJlbnQ7TCYmTC50eXBlPT09InByb3BlcnR5IiYmTC5rZXlOb2RlPT09bCYmKHg9IUwudmFsdWVOb2RlLGI9TCx5PWEuc3Vic3RyKGwub2Zmc2V0KzEsbC5sZW5ndGgtMiksTCYmKGw9TC5wYXJlbnQpKX1pZihsJiZsLnR5cGU9PT0ib2JqZWN0Iil7aWYobC5vZmZzZXQ9PT1vKXJldHVybiBzO3ZhciBTPWwucHJvcGVydGllcztTLmZvckVhY2goZnVuY3Rpb24oTSl7KCFifHxiIT09TSkmJihnW00ua2V5Tm9kZS52YWx1ZV09YnIuY3JlYXRlKCJfXyIpKX0pO3ZhciBfPSIiO3gmJihfPWkuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcih0LHQub2Zmc2V0QXQoaC5lbmQpKSksdj9pLmdldFByb3BlcnR5Q29tcGxldGlvbnModixyLGwseCxfLG0pOmkuZ2V0U2NoZW1hTGVzc1Byb3BlcnR5Q29tcGxldGlvbnMocixsLHksbSk7dmFyIE49THIobCk7aS5jb250cmlidXRpb25zLmZvckVhY2goZnVuY3Rpb24oTSl7dmFyIEk9TS5jb2xsZWN0UHJvcGVydHlDb21wbGV0aW9ucyh0LnVyaSxOLGYseCxfPT09IiIsbSk7SSYmcC5wdXNoKEkpfSksIXYmJmYubGVuZ3RoPjAmJmEuY2hhckF0KG8tZi5sZW5ndGgtMSkhPT0nIicmJihtLmFkZCh7a2luZDpTZS5Qcm9wZXJ0eSxsYWJlbDppLmdldExhYmVsRm9yVmFsdWUoZiksaW5zZXJ0VGV4dDppLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShmLHZvaWQgMCwhMSxfKSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLG0uc2V0QXNJbmNvbXBsZXRlKCkpfXZhciBBPXt9O3JldHVybiB2P2kuZ2V0VmFsdWVDb21wbGV0aW9ucyh2LHIsbCxvLHQsbSxBKTppLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zKHIsbCxvLHQsbSksaS5jb250cmlidXRpb25zLmxlbmd0aD4wJiZpLmdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucyhyLGwsbyx0LG0scCksaS5wcm9taXNlQ29uc3RydWN0b3IuYWxsKHApLnRoZW4oZnVuY3Rpb24oKXtpZihtLmdldE51bWJlck9mUHJvcG9zYWxzKCk9PT0wKXt2YXIgTT1vO2wmJihsLnR5cGU9PT0ic3RyaW5nInx8bC50eXBlPT09Im51bWJlciJ8fGwudHlwZT09PSJib29sZWFuInx8bC50eXBlPT09Im51bGwiKSYmKE09bC5vZmZzZXQrbC5sZW5ndGgpO3ZhciBJPWkuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcih0LE0pO2kuYWRkRmlsbGVyVmFsdWVDb21wbGV0aW9ucyhBLEksbSl9cmV0dXJuIHN9KX0pfSxlLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zPWZ1bmN0aW9uKHQsbixyLGkscyxhKXt2YXIgbz10aGlzLGw9bi5nZXRNYXRjaGluZ1NjaGVtYXModC5zY2hlbWEsci5vZmZzZXQpO2wuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1Lm5vZGU9PT1yJiYhdS5pbnZlcnRlZCl7dmFyIGY9dS5zY2hlbWEucHJvcGVydGllcztmJiZPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3ZhciBwPWZbdl07aWYodHlwZW9mIHA9PSJvYmplY3QiJiYhcC5kZXByZWNhdGlvbk1lc3NhZ2UmJiFwLmRvTm90U3VnZ2VzdCl7dmFyIHg9e2tpbmQ6U2UuUHJvcGVydHksbGFiZWw6dixpbnNlcnRUZXh0Om8uZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KHYscCxpLHMpLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxmaWx0ZXJUZXh0Om8uZ2V0RmlsdGVyVGV4dEZvclZhbHVlKHYpLGRvY3VtZW50YXRpb246by5mcm9tTWFya3VwKHAubWFya2Rvd25EZXNjcmlwdGlvbil8fHAuZGVzY3JpcHRpb258fCIifTtwLnN1Z2dlc3RTb3J0VGV4dCE9PXZvaWQgMCYmKHguc29ydFRleHQ9cC5zdWdnZXN0U29ydFRleHQpLHguaW5zZXJ0VGV4dCYmVXQoeC5pbnNlcnRUZXh0LCIkMSIuY29uY2F0KHMpKSYmKHguY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSksYS5hZGQoeCl9fSk7dmFyIGg9dS5zY2hlbWEucHJvcGVydHlOYW1lcztpZih0eXBlb2YgaD09Im9iamVjdCImJiFoLmRlcHJlY2F0aW9uTWVzc2FnZSYmIWguZG9Ob3RTdWdnZXN0KXt2YXIgZD1mdW5jdGlvbih2LHApe3A9PT12b2lkIDAmJihwPXZvaWQgMCk7dmFyIHg9e2tpbmQ6U2UuUHJvcGVydHksbGFiZWw6dixpbnNlcnRUZXh0Om8uZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KHYsdm9pZCAwLGkscyksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGZpbHRlclRleHQ6by5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUodiksZG9jdW1lbnRhdGlvbjpwfHxvLmZyb21NYXJrdXAoaC5tYXJrZG93bkRlc2NyaXB0aW9uKXx8aC5kZXNjcmlwdGlvbnx8IiJ9O2guc3VnZ2VzdFNvcnRUZXh0IT09dm9pZCAwJiYoeC5zb3J0VGV4dD1oLnN1Z2dlc3RTb3J0VGV4dCkseC5pbnNlcnRUZXh0JiZVdCh4Lmluc2VydFRleHQsIiQxIi5jb25jYXQocykpJiYoeC5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxhLmFkZCh4KX07aWYoaC5lbnVtKWZvcih2YXIgZz0wO2c8aC5lbnVtLmxlbmd0aDtnKyspe3ZhciBtPXZvaWQgMDtoLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmZzxoLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGg/bT1vLmZyb21NYXJrdXAoaC5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbZ10pOmguZW51bURlc2NyaXB0aW9ucyYmZzxoLmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYobT1oLmVudW1EZXNjcmlwdGlvbnNbZ10pLGQoaC5lbnVtW2ddLG0pfWguY29uc3QmJmQoaC5jb25zdCl9fX0pfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFMZXNzUHJvcGVydHlDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4scixpKXt2YXIgcz10aGlzLGE9ZnVuY3Rpb24obCl7bC5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24odSl7dmFyIGY9dS5rZXlOb2RlLnZhbHVlO2kuYWRkKHtraW5kOlNlLlByb3BlcnR5LGxhYmVsOmYsaW5zZXJ0VGV4dDpzLmdldEluc2VydFRleHRGb3JWYWx1ZShmLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZmlsdGVyVGV4dDpzLmdldEZpbHRlclRleHRGb3JWYWx1ZShmKSxkb2N1bWVudGF0aW9uOiIifSl9KX07aWYobi5wYXJlbnQpaWYobi5wYXJlbnQudHlwZT09PSJwcm9wZXJ0eSIpe3ZhciBvPW4ucGFyZW50LmtleU5vZGUudmFsdWU7dC52aXNpdChmdW5jdGlvbihsKXtyZXR1cm4gbC50eXBlPT09InByb3BlcnR5IiYmbCE9PW4ucGFyZW50JiZsLmtleU5vZGUudmFsdWU9PT1vJiZsLnZhbHVlTm9kZSYmbC52YWx1ZU5vZGUudHlwZT09PSJvYmplY3QiJiZhKGwudmFsdWVOb2RlKSwhMH0pfWVsc2Ugbi5wYXJlbnQudHlwZT09PSJhcnJheSImJm4ucGFyZW50Lml0ZW1zLmZvckVhY2goZnVuY3Rpb24obCl7bC50eXBlPT09Im9iamVjdCImJmwhPT1uJiZhKGwpfSk7ZWxzZSBuLnR5cGU9PT0ib2JqZWN0IiYmaS5hZGQoe2tpbmQ6U2UuUHJvcGVydHksbGFiZWw6IiRzY2hlbWEiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoIiRzY2hlbWEiLHZvaWQgMCwhMCwiIiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiIsZmlsdGVyVGV4dDp0aGlzLmdldEZpbHRlclRleHRGb3JWYWx1ZSgiJHNjaGVtYSIpfSl9LGUucHJvdG90eXBlLmdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKHQsbixyLGkscyl7dmFyIGE9dGhpcyxvPXI7aWYobiYmKG4udHlwZT09PSJzdHJpbmcifHxuLnR5cGU9PT0ibnVtYmVyInx8bi50eXBlPT09ImJvb2xlYW4ifHxuLnR5cGU9PT0ibnVsbCIpJiYobz1uLm9mZnNldCtuLmxlbmd0aCxuPW4ucGFyZW50KSwhbil7cy5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6IkVtcHR5IG9iamVjdCIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSwiIiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxzLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJhcnJheSIpLGxhYmVsOiJFbXB0eSBhcnJheSIsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShbXSwiIiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KTtyZXR1cm59dmFyIGw9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGksbyksdT1mdW5jdGlvbihnKXtnLnBhcmVudCYmIWJhKGcucGFyZW50LHIsITApJiZzLmFkZCh7a2luZDphLmdldFN1Z2dlc3Rpb25LaW5kKGcudHlwZSksbGFiZWw6YS5nZXRMYWJlbFRleHRGb3JNYXRjaGluZ05vZGUoZyxpKSxpbnNlcnRUZXh0OmEuZ2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZShnLGksbCksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KSxnLnR5cGU9PT0iYm9vbGVhbiImJmEuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighZy52YWx1ZSxsLHMpfTtpZihuLnR5cGU9PT0icHJvcGVydHkiJiZyPihuLmNvbG9uT2Zmc2V0fHwwKSl7dmFyIGY9bi52YWx1ZU5vZGU7aWYoZiYmKHI+Zi5vZmZzZXQrZi5sZW5ndGh8fGYudHlwZT09PSJvYmplY3QifHxmLnR5cGU9PT0iYXJyYXkiKSlyZXR1cm47dmFyIGg9bi5rZXlOb2RlLnZhbHVlO3QudmlzaXQoZnVuY3Rpb24oZyl7cmV0dXJuIGcudHlwZT09PSJwcm9wZXJ0eSImJmcua2V5Tm9kZS52YWx1ZT09PWgmJmcudmFsdWVOb2RlJiZ1KGcudmFsdWVOb2RlKSwhMH0pLGg9PT0iJHNjaGVtYSImJm4ucGFyZW50JiYhbi5wYXJlbnQucGFyZW50JiZ0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGwscyl9aWYobi50eXBlPT09ImFycmF5IilpZihuLnBhcmVudCYmbi5wYXJlbnQudHlwZT09PSJwcm9wZXJ0eSIpe3ZhciBkPW4ucGFyZW50LmtleU5vZGUudmFsdWU7dC52aXNpdChmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlPT09InByb3BlcnR5IiYmZy5rZXlOb2RlLnZhbHVlPT09ZCYmZy52YWx1ZU5vZGUmJmcudmFsdWVOb2RlLnR5cGU9PT0iYXJyYXkiJiZnLnZhbHVlTm9kZS5pdGVtcy5mb3JFYWNoKHUpLCEwfSl9ZWxzZSBuLml0ZW1zLmZvckVhY2godSl9LGUucHJvdG90eXBlLmdldFZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24odCxuLHIsaSxzLGEsbyl7dmFyIGw9aSx1PXZvaWQgMCxmPXZvaWQgMDtpZihyJiYoci50eXBlPT09InN0cmluZyJ8fHIudHlwZT09PSJudW1iZXIifHxyLnR5cGU9PT0iYm9vbGVhbiJ8fHIudHlwZT09PSJudWxsIikmJihsPXIub2Zmc2V0K3IubGVuZ3RoLGY9cixyPXIucGFyZW50KSwhcil7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHQuc2NoZW1hLCIiLGEsbyk7cmV0dXJufWlmKHIudHlwZT09PSJwcm9wZXJ0eSImJmk+KHIuY29sb25PZmZzZXR8fDApKXt2YXIgaD1yLnZhbHVlTm9kZTtpZihoJiZpPmgub2Zmc2V0K2gubGVuZ3RoKXJldHVybjt1PXIua2V5Tm9kZS52YWx1ZSxyPXIucGFyZW50fWlmKHImJih1IT09dm9pZCAwfHxyLnR5cGU9PT0iYXJyYXkiKSl7Zm9yKHZhciBkPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihzLGwpLGc9bi5nZXRNYXRjaGluZ1NjaGVtYXModC5zY2hlbWEsci5vZmZzZXQsZiksbT0wLHY9ZzttPHYubGVuZ3RoO20rKyl7dmFyIHA9dlttXTtpZihwLm5vZGU9PT1yJiYhcC5pbnZlcnRlZCYmcC5zY2hlbWEpe2lmKHIudHlwZT09PSJhcnJheSImJnAuc2NoZW1hLml0ZW1zKWlmKEFycmF5LmlzQXJyYXkocC5zY2hlbWEuaXRlbXMpKXt2YXIgeD10aGlzLmZpbmRJdGVtQXRPZmZzZXQocixzLGkpO3g8cC5zY2hlbWEuaXRlbXMubGVuZ3RoJiZ0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMocC5zY2hlbWEuaXRlbXNbeF0sZCxhLG8pfWVsc2UgdGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHAuc2NoZW1hLml0ZW1zLGQsYSxvKTtpZih1IT09dm9pZCAwKXt2YXIgeT0hMTtpZihwLnNjaGVtYS5wcm9wZXJ0aWVzKXt2YXIgYj1wLnNjaGVtYS5wcm9wZXJ0aWVzW3VdO2ImJih5PSEwLHRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhiLGQsYSxvKSl9aWYocC5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMmJiF5KWZvcih2YXIgTD0wLFM9T2JqZWN0LmtleXMocC5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMpO0w8Uy5sZW5ndGg7TCsrKXt2YXIgXz1TW0xdLE49bW4oXyk7aWYoTj8udGVzdCh1KSl7eT0hMDt2YXIgYj1wLnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllc1tfXTt0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoYixkLGEsbyl9fWlmKHAuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzJiYheSl7dmFyIGI9cC5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXM7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGIsZCxhLG8pfX19fXU9PT0iJHNjaGVtYSImJiFyLnBhcmVudCYmdGhpcy5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhkLGEpLG8uYm9vbGVhbiYmKHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMCxkLGEpLHRoaXMuYWRkQm9vbGVhblZhbHVlQ29tcGxldGlvbighMSxkLGEpKSxvLm51bGwmJnRoaXMuYWRkTnVsbFZhbHVlQ29tcGxldGlvbihkLGEpfX0sZS5wcm90b3R5cGUuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKHQsbixyLGkscyxhKXtpZighbil0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgaD1mLmNvbGxlY3REZWZhdWx0Q29tcGxldGlvbnMoaS51cmkscyk7aCYmYS5wdXNoKGgpfSk7ZWxzZSBpZigobi50eXBlPT09InN0cmluZyJ8fG4udHlwZT09PSJudW1iZXIifHxuLnR5cGU9PT0iYm9vbGVhbiJ8fG4udHlwZT09PSJudWxsIikmJihuPW4ucGFyZW50KSxuJiZuLnR5cGU9PT0icHJvcGVydHkiJiZyPihuLmNvbG9uT2Zmc2V0fHwwKSl7dmFyIG89bi5rZXlOb2RlLnZhbHVlLGw9bi52YWx1ZU5vZGU7aWYoKCFsfHxyPD1sLm9mZnNldCtsLmxlbmd0aCkmJm4ucGFyZW50KXt2YXIgdT1McihuLnBhcmVudCk7dGhpcy5jb250cmlidXRpb25zLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGg9Zi5jb2xsZWN0VmFsdWVDb21wbGV0aW9ucyhpLnVyaSx1LG8scyk7aCYmYS5wdXNoKGgpfSl9fX0sZS5wcm90b3R5cGUuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4scixpKXt2YXIgcz10aGlzO3R5cGVvZiB0PT0ib2JqZWN0IiYmKHRoaXMuYWRkRW51bVZhbHVlQ29tcGxldGlvbnModCxuLHIpLHRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnModCxuLHIpLHRoaXMuY29sbGVjdFR5cGVzKHQsaSksQXJyYXkuaXNBcnJheSh0LmFsbE9mKSYmdC5hbGxPZi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoYSxuLHIsaSl9KSxBcnJheS5pc0FycmF5KHQuYW55T2YpJiZ0LmFueU9mLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIHMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhhLG4scixpKX0pLEFycmF5LmlzQXJyYXkodC5vbmVPZikmJnQub25lT2YuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGEsbixyLGkpfSkpfSxlLnByb3RvdHlwZS5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4scixpKXt2YXIgcz10aGlzO2k9PT12b2lkIDAmJihpPTApO3ZhciBhPSExO2lmKFVlKHQuZGVmYXVsdCkpe2Zvcih2YXIgbz10LnR5cGUsbD10LmRlZmF1bHQsdT1pO3U+MDt1LS0pbD1bbF0sbz0iYXJyYXkiO3IuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQobyksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKGwpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobCxuKSxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZGV0YWlsOkFyKCJqc29uLnN1Z2dlc3QuZGVmYXVsdCIsIkRlZmF1bHQgdmFsdWUiKX0pLGE9ITB9QXJyYXkuaXNBcnJheSh0LmV4YW1wbGVzKSYmdC5leGFtcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKGYpe2Zvcih2YXIgaD10LnR5cGUsZD1mLGc9aTtnPjA7Zy0tKWQ9W2RdLGg9ImFycmF5IjtyLmFkZCh7a2luZDpzLmdldFN1Z2dlc3Rpb25LaW5kKGgpLGxhYmVsOnMuZ2V0TGFiZWxGb3JWYWx1ZShkKSxpbnNlcnRUZXh0OnMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGQsbiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0fSksYT0hMH0pLEFycmF5LmlzQXJyYXkodC5kZWZhdWx0U25pcHBldHMpJiZ0LmRlZmF1bHRTbmlwcGV0cy5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBoPXQudHlwZSxkPWYuYm9keSxnPWYubGFiZWwsbSx2O2lmKFVlKGQpKXt0LnR5cGU7Zm9yKHZhciBwPWk7cD4wO3AtLSlkPVtkXTttPXMuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZShkLG4pLHY9cy5nZXRGaWx0ZXJUZXh0Rm9yU25pcHBldFZhbHVlKGQpLGc9Z3x8cy5nZXRMYWJlbEZvclNuaXBwZXRWYWx1ZShkKX1lbHNlIGlmKHR5cGVvZiBmLmJvZHlUZXh0PT0ic3RyaW5nIil7Zm9yKHZhciB4PSIiLHk9IiIsYj0iIixwPWk7cD4wO3AtLSl4PXgrYitgWwpgLHk9eStgCmArYisiXSIsYis9IgkiLGg9ImFycmF5IjttPXgrYitmLmJvZHlUZXh0LnNwbGl0KGAKYCkuam9pbihgCmArYikreStuLGc9Z3x8bSx2PW0ucmVwbGFjZSgvW1xuXS9nLCIiKX1lbHNlIHJldHVybjtyLmFkZCh7a2luZDpzLmdldFN1Z2dlc3Rpb25LaW5kKGgpLGxhYmVsOmcsZG9jdW1lbnRhdGlvbjpzLmZyb21NYXJrdXAoZi5tYXJrZG93bkRlc2NyaXB0aW9uKXx8Zi5kZXNjcmlwdGlvbixpbnNlcnRUZXh0Om0saW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGZpbHRlclRleHQ6dn0pLGE9ITB9KSwhYSYmdHlwZW9mIHQuaXRlbXM9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheSh0Lml0ZW1zKSYmaTw1JiZ0aGlzLmFkZERlZmF1bHRWYWx1ZUNvbXBsZXRpb25zKHQuaXRlbXMsbixyLGkrMSl9LGUucHJvdG90eXBlLmFkZEVudW1WYWx1ZUNvbXBsZXRpb25zPWZ1bmN0aW9uKHQsbixyKXtpZihVZSh0LmNvbnN0KSYmci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCh0LnR5cGUpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZSh0LmNvbnN0KSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQuY29uc3QsbiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246dGhpcy5mcm9tTWFya3VwKHQubWFya2Rvd25EZXNjcmlwdGlvbil8fHQuZGVzY3JpcHRpb259KSxBcnJheS5pc0FycmF5KHQuZW51bSkpZm9yKHZhciBpPTAscz10LmVudW0ubGVuZ3RoO2k8cztpKyspe3ZhciBhPXQuZW51bVtpXSxvPXRoaXMuZnJvbU1hcmt1cCh0Lm1hcmtkb3duRGVzY3JpcHRpb24pfHx0LmRlc2NyaXB0aW9uO3QubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zJiZpPHQubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCk/bz10aGlzLmZyb21NYXJrdXAodC5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbaV0pOnQuZW51bURlc2NyaXB0aW9ucyYmaTx0LmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYobz10LmVudW1EZXNjcmlwdGlvbnNbaV0pLHIuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQodC50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoYSksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShhLG4pLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxkb2N1bWVudGF0aW9uOm99KX19LGUucHJvdG90eXBlLmNvbGxlY3RUeXBlcz1mdW5jdGlvbih0LG4pe2lmKCEoQXJyYXkuaXNBcnJheSh0LmVudW0pfHxVZSh0LmNvbnN0KSkpe3ZhciByPXQudHlwZTtBcnJheS5pc0FycmF5KHIpP3IuZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gbltpXT0hMH0pOnImJihuW3JdPSEwKX19LGUucHJvdG90eXBlLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnM9ZnVuY3Rpb24odCxuLHIpe3Qub2JqZWN0JiZyLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoie30iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHt9LG4pLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxkZXRhaWw6QXIoImRlZmF1bHRzLm9iamVjdCIsIk5ldyBvYmplY3QiKSxkb2N1bWVudGF0aW9uOiIifSksdC5hcnJheSYmci5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiW10iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKFtdLG4pLGluc2VydFRleHRGb3JtYXQ6aWUuU25pcHBldCxkZXRhaWw6QXIoImRlZmF1bHRzLmFycmF5IiwiTmV3IGFycmF5IiksZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uPWZ1bmN0aW9uKHQsbixyKXtyLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJib29sZWFuIiksbGFiZWw6dD8idHJ1ZSI6ImZhbHNlIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQsbiksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0sZS5wcm90b3R5cGUuYWRkTnVsbFZhbHVlQ29tcGxldGlvbj1mdW5jdGlvbih0LG4pe24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoIm51bGwiKSxsYWJlbDoibnVsbCIsaW5zZXJ0VGV4dDoibnVsbCIrdCxpbnNlcnRUZXh0Rm9ybWF0OmllLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfSxlLnByb3RvdHlwZS5hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucz1mdW5jdGlvbih0LG4pe3ZhciByPXRoaXMsaT10aGlzLnNjaGVtYVNlcnZpY2UuZ2V0UmVnaXN0ZXJlZFNjaGVtYUlkcyhmdW5jdGlvbihzKXtyZXR1cm4gcz09PSJodHRwInx8cz09PSJodHRwcyJ9KTtpLmZvckVhY2goZnVuY3Rpb24ocyl7cmV0dXJuIG4uYWRkKHtraW5kOlNlLk1vZHVsZSxsYWJlbDpyLmdldExhYmVsRm9yVmFsdWUocyksZmlsdGVyVGV4dDpyLmdldEZpbHRlclRleHRGb3JWYWx1ZShzKSxpbnNlcnRUZXh0OnIuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHMsdCksaW5zZXJ0VGV4dEZvcm1hdDppZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX0pfSxlLnByb3RvdHlwZS5nZXRMYWJlbEZvclZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX0sZS5wcm90b3R5cGUuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWU9ZnVuY3Rpb24odCl7dmFyIG49SlNPTi5zdHJpbmdpZnkodCk7cmV0dXJuIG4ucmVwbGFjZSgvXCRce1xkKzooW159XSspXH18XCRcZCsvZywiJDEiKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXFxcJFx9XS9nLCJcXCQmIil9LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JWYWx1ZT1mdW5jdGlvbih0LG4pe3ZhciByPUpTT04uc3RyaW5naWZ5KHQsbnVsbCwiCSIpO3JldHVybiByPT09Int9Ij8ieyQxfSIrbjpyPT09IltdIj8iWyQxXSIrbjp0aGlzLmdldEluc2VydFRleHRGb3JQbGFpblRleHQocituKX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZT1mdW5jdGlvbih0LG4pe3ZhciByPWZ1bmN0aW9uKGkpe3JldHVybiB0eXBlb2YgaT09InN0cmluZyImJmlbMF09PT0iXiI/aS5zdWJzdHIoMSk6SlNPTi5zdHJpbmdpZnkoaSl9O3JldHVybiBOcih0LCIiLHIpK259LGUucHJvdG90eXBlLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWU9ZnVuY3Rpb24odCxuKXtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gdD09PW51bGw/IiR7MTpudWxsfSIrbjp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh0LG4pO2Nhc2Uic3RyaW5nIjp2YXIgcj1KU09OLnN0cmluZ2lmeSh0KTtyZXR1cm4gcj1yLnN1YnN0cigxLHIubGVuZ3RoLTIpLHI9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KHIpLCciJHsxOicrcisnfSInK247Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIiR7MToiK0pTT04uc3RyaW5naWZ5KHQpKyJ9IitufXJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh0LG4pfSxlLnByb3RvdHlwZS5nZXRTdWdnZXN0aW9uS2luZD1mdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbj10O3Q9bi5sZW5ndGg+MD9uWzBdOnZvaWQgMH1pZighdClyZXR1cm4gU2UuVmFsdWU7c3dpdGNoKHQpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gU2UuVmFsdWU7Y2FzZSJvYmplY3QiOnJldHVybiBTZS5Nb2R1bGU7Y2FzZSJwcm9wZXJ0eSI6cmV0dXJuIFNlLlByb3BlcnR5O2RlZmF1bHQ6cmV0dXJuIFNlLlZhbHVlfX0sZS5wcm90b3R5cGUuZ2V0TGFiZWxUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKHQsbil7c3dpdGNoKHQudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIltdIjtjYXNlIm9iamVjdCI6cmV0dXJuInt9IjtkZWZhdWx0OnZhciByPW4uZ2V0VGV4dCgpLnN1YnN0cih0Lm9mZnNldCx0Lmxlbmd0aCk7cmV0dXJuIHJ9fSxlLnByb3RvdHlwZS5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlPWZ1bmN0aW9uKHQsbixyKXtzd2l0Y2godC50eXBlKXtjYXNlImFycmF5IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoW10scik7Y2FzZSJvYmplY3QiOnJldHVybiB0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZSh7fSxyKTtkZWZhdWx0OnZhciBpPW4uZ2V0VGV4dCgpLnN1YnN0cih0Lm9mZnNldCx0Lmxlbmd0aCkrcjtyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KGkpfX0sZS5wcm90b3R5cGUuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5PWZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHQsIiIpO2lmKCFyKXJldHVybiBzO3ZhciBhPXMrIjogIixvLGw9MDtpZihuKXtpZihBcnJheS5pc0FycmF5KG4uZGVmYXVsdFNuaXBwZXRzKSl7aWYobi5kZWZhdWx0U25pcHBldHMubGVuZ3RoPT09MSl7dmFyIHU9bi5kZWZhdWx0U25pcHBldHNbMF0uYm9keTtVZSh1KSYmKG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKHUsIiIpKX1sKz1uLmRlZmF1bHRTbmlwcGV0cy5sZW5ndGh9aWYobi5lbnVtJiYoIW8mJm4uZW51bS5sZW5ndGg9PT0xJiYobz10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUobi5lbnVtWzBdLCIiKSksbCs9bi5lbnVtLmxlbmd0aCksVWUobi5kZWZhdWx0KSYmKG98fChvPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZShuLmRlZmF1bHQsIiIpKSxsKyspLEFycmF5LmlzQXJyYXkobi5leGFtcGxlcykmJm4uZXhhbXBsZXMubGVuZ3RoJiYob3x8KG89dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKG4uZXhhbXBsZXNbMF0sIiIpKSxsKz1uLmV4YW1wbGVzLmxlbmd0aCksbD09PTApe3ZhciBmPUFycmF5LmlzQXJyYXkobi50eXBlKT9uLnR5cGVbMF06bi50eXBlO3N3aXRjaChmfHwobi5wcm9wZXJ0aWVzP2Y9Im9iamVjdCI6bi5pdGVtcyYmKGY9ImFycmF5IikpLGYpe2Nhc2UiYm9vbGVhbiI6bz0iJDEiO2JyZWFrO2Nhc2Uic3RyaW5nIjpvPSciJDEiJzticmVhaztjYXNlIm9iamVjdCI6bz0ieyQxfSI7YnJlYWs7Y2FzZSJhcnJheSI6bz0iWyQxXSI7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6bz0iJHsxOjB9IjticmVhaztjYXNlIm51bGwiOm89IiR7MTpudWxsfSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gc319fXJldHVybighb3x8bD4xKSYmKG89IiQxIiksYStvK2l9LGUucHJvdG90eXBlLmdldEN1cnJlbnRXb3JkPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPW4tMSxpPXQuZ2V0VGV4dCgpO3I+PTAmJmAgCQpcclx2Ijp7WyxdfWAuaW5kZXhPZihpLmNoYXJBdChyKSk9PT0tMTspci0tO3JldHVybiBpLnN1YnN0cmluZyhyKzEsbil9LGUucHJvdG90eXBlLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXI9ZnVuY3Rpb24odCxuKXt2YXIgcj1OdCh0LmdldFRleHQoKSwhMCk7ci5zZXRQb3NpdGlvbihuKTt2YXIgaT1yLnNjYW4oKTtzd2l0Y2goaSl7Y2FzZSA1OmNhc2UgMjpjYXNlIDQ6Y2FzZSAxNzpyZXR1cm4iIjtkZWZhdWx0OnJldHVybiIsIn19LGUucHJvdG90eXBlLmZpbmRJdGVtQXRPZmZzZXQ9ZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgaT1OdChuLmdldFRleHQoKSwhMCkscz10Lml0ZW1zLGE9cy5sZW5ndGgtMTthPj0wO2EtLSl7dmFyIG89c1thXTtpZihyPm8ub2Zmc2V0K28ubGVuZ3RoKXtpLnNldFBvc2l0aW9uKG8ub2Zmc2V0K28ubGVuZ3RoKTt2YXIgbD1pLnNjYW4oKTtyZXR1cm4gbD09PTUmJnI+PWkuZ2V0VG9rZW5PZmZzZXQoKStpLmdldFRva2VuTGVuZ3RoKCk/YSsxOmF9ZWxzZSBpZihyPj1vLm9mZnNldClyZXR1cm4gYX1yZXR1cm4gMH0sZS5wcm90b3R5cGUuaXNJbkNvbW1lbnQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPU50KHQuZ2V0VGV4dCgpLCExKTtpLnNldFBvc2l0aW9uKG4pO2Zvcih2YXIgcz1pLnNjYW4oKTtzIT09MTcmJmkuZ2V0VG9rZW5PZmZzZXQoKStpLmdldFRva2VuTGVuZ3RoKCk8cjspcz1pLnNjYW4oKTtyZXR1cm4ocz09PTEyfHxzPT09MTMpJiZpLmdldFRva2VuT2Zmc2V0KCk8PXJ9LGUucHJvdG90eXBlLmZyb21NYXJrdXA9ZnVuY3Rpb24odCl7aWYodCYmdGhpcy5kb2VzU3VwcG9ydE1hcmtkb3duKCkpcmV0dXJue2tpbmQ6V2UuTWFya2Rvd24sdmFsdWU6dH19LGUucHJvdG90eXBlLmRvZXNTdXBwb3J0TWFya2Rvd249ZnVuY3Rpb24oKXtpZighVWUodGhpcy5zdXBwb3J0c01hcmtkb3duKSl7dmFyIHQ9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzTWFya2Rvd249dCYmdC5jb21wbGV0aW9uSXRlbSYmQXJyYXkuaXNBcnJheSh0LmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQpJiZ0LmNvbXBsZXRpb25JdGVtLmRvY3VtZW50YXRpb25Gb3JtYXQuaW5kZXhPZihXZS5NYXJrZG93bikhPT0tMX1yZXR1cm4gdGhpcy5zdXBwb3J0c01hcmtkb3dufSxlLnByb3RvdHlwZS5kb2VzU3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzPWZ1bmN0aW9uKCl7aWYoIVVlKHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzKSl7dmFyIHQ9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50JiZ0aGlzLmNsaWVudENhcGFiaWxpdGllcy50ZXh0RG9jdW1lbnQuY29tcGxldGlvbjt0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycz10JiZ0LmNvbXBsZXRpb25JdGVtJiYhIXQuY29tcGxldGlvbkl0ZW0uY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnR9cmV0dXJuIHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzfSxlfSgpLFJ1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7bj09PXZvaWQgMCYmKG49W10pLHRoaXMuc2NoZW1hU2VydmljZT10LHRoaXMuY29udHJpYnV0aW9ucz1uLHRoaXMucHJvbWlzZT1yfHxQcm9taXNlfXJldHVybiBlLnByb3RvdHlwZS5kb0hvdmVyPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT10Lm9mZnNldEF0KG4pLHM9ci5nZXROb2RlRnJvbU9mZnNldChpKTtpZighc3x8KHMudHlwZT09PSJvYmplY3QifHxzLnR5cGU9PT0iYXJyYXkiKSYmaT5zLm9mZnNldCsxJiZpPHMub2Zmc2V0K3MubGVuZ3RoLTEpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpO3ZhciBhPXM7aWYocy50eXBlPT09InN0cmluZyIpe3ZhciBvPXMucGFyZW50O2lmKG8mJm8udHlwZT09PSJwcm9wZXJ0eSImJm8ua2V5Tm9kZT09PXMmJihzPW8udmFsdWVOb2RlLCFzKSlyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobnVsbCl9Zm9yKHZhciBsPVguY3JlYXRlKHQucG9zaXRpb25BdChhLm9mZnNldCksdC5wb3NpdGlvbkF0KGEub2Zmc2V0K2EubGVuZ3RoKSksdT1mdW5jdGlvbihtKXt2YXIgdj17Y29udGVudHM6bSxyYW5nZTpsfTtyZXR1cm4gdn0sZj1McihzKSxoPXRoaXMuY29udHJpYnV0aW9ucy5sZW5ndGgtMTtoPj0wO2gtLSl7dmFyIGQ9dGhpcy5jb250cmlidXRpb25zW2hdLGc9ZC5nZXRJbmZvQ29udHJpYnV0aW9uKHQudXJpLGYpO2lmKGcpcmV0dXJuIGcudGhlbihmdW5jdGlvbihtKXtyZXR1cm4gdShtKX0pfXJldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UodC51cmkscikudGhlbihmdW5jdGlvbihtKXtpZihtJiZzKXt2YXIgdj1yLmdldE1hdGNoaW5nU2NoZW1hcyhtLnNjaGVtYSxzLm9mZnNldCkscD12b2lkIDAseD12b2lkIDAseT12b2lkIDAsYj12b2lkIDA7di5ldmVyeShmdW5jdGlvbihTKXtpZihTLm5vZGU9PT1zJiYhUy5pbnZlcnRlZCYmUy5zY2hlbWEmJihwPXB8fFMuc2NoZW1hLnRpdGxlLHg9eHx8Uy5zY2hlbWEubWFya2Rvd25EZXNjcmlwdGlvbnx8Q3IoUy5zY2hlbWEuZGVzY3JpcHRpb24pLFMuc2NoZW1hLmVudW0pKXt2YXIgXz1TLnNjaGVtYS5lbnVtLmluZGV4T2Yob3QocykpO1Muc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucz95PVMuc2NoZW1hLm1hcmtkb3duRW51bURlc2NyaXB0aW9uc1tfXTpTLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zJiYoeT1DcihTLnNjaGVtYS5lbnVtRGVzY3JpcHRpb25zW19dKSkseSYmKGI9Uy5zY2hlbWEuZW51bVtfXSx0eXBlb2YgYiE9InN0cmluZyImJihiPUpTT04uc3RyaW5naWZ5KGIpKSl9cmV0dXJuITB9KTt2YXIgTD0iIjtyZXR1cm4gcCYmKEw9Q3IocCkpLHgmJihMLmxlbmd0aD4wJiYoTCs9YAoKYCksTCs9eCkseSYmKEwubGVuZ3RoPjAmJihMKz1gCgpgKSxMKz0iYCIuY29uY2F0KFR1KGIpLCJgOiAiKS5jb25jYXQoeSkpLHUoW0xdKX1yZXR1cm4gbnVsbH0pfSxlfSgpO2Z1bmN0aW9uIENyKGUpe2lmKGUpe3ZhciB0PWUucmVwbGFjZSgvKFteXG5ccl0pKFxyP1xuKShbXlxuXHJdKS9nbSxgJDEKCiQzYCk7cmV0dXJuIHQucmVwbGFjZSgvW1xcYCpfe31bXF0oKSMrXC0uIV0vZywiXFwkJiIpfX1mdW5jdGlvbiBUdShlKXtyZXR1cm4gZS5pbmRleE9mKCJgIikhPT0tMT8iYGAgIitlKyIgYGAiOmV9dmFyIFB1PVh0KCksRnU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dGhpcy5qc29uU2NoZW1hU2VydmljZT10LHRoaXMucHJvbWlzZT1uLHRoaXMudmFsaWRhdGlvbkVuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbih0KXt0JiYodGhpcy52YWxpZGF0aW9uRW5hYmxlZD10LnZhbGlkYXRlIT09ITEsdGhpcy5jb21tZW50U2V2ZXJpdHk9dC5hbGxvd0NvbW1lbnRzP3ZvaWQgMDpfZS5FcnJvcil9LGUucHJvdG90eXBlLmRvVmFsaWRhdGlvbj1mdW5jdGlvbih0LG4scixpKXt2YXIgcz10aGlzO2lmKCF0aGlzLnZhbGlkYXRpb25FbmFibGVkKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShbXSk7dmFyIGE9W10sbz17fSxsPWZ1bmN0aW9uKGQpe3ZhciBnPWQucmFuZ2Uuc3RhcnQubGluZSsiICIrZC5yYW5nZS5zdGFydC5jaGFyYWN0ZXIrIiAiK2QubWVzc2FnZTtvW2ddfHwob1tnXT0hMCxhLnB1c2goZCkpfSx1PWZ1bmN0aW9uKGQpe3ZhciBnPXI/LnRyYWlsaW5nQ29tbWFzP19uKHIudHJhaWxpbmdDb21tYXMpOl9lLkVycm9yLG09cj8uY29tbWVudHM/X24oci5jb21tZW50cyk6cy5jb21tZW50U2V2ZXJpdHksdj1yPy5zY2hlbWFWYWxpZGF0aW9uP19uKHIuc2NoZW1hVmFsaWRhdGlvbik6X2UuV2FybmluZyxwPXI/LnNjaGVtYVJlcXVlc3Q/X24oci5zY2hlbWFSZXF1ZXN0KTpfZS5XYXJuaW5nO2lmKGQpe2lmKGQuZXJyb3JzLmxlbmd0aCYmbi5yb290JiZwKXt2YXIgeD1uLnJvb3QseT14LnR5cGU9PT0ib2JqZWN0Ij94LnByb3BlcnRpZXNbMF06dm9pZCAwO2lmKHkmJnkua2V5Tm9kZS52YWx1ZT09PSIkc2NoZW1hIil7dmFyIGI9eS52YWx1ZU5vZGV8fHksTD1YLmNyZWF0ZSh0LnBvc2l0aW9uQXQoYi5vZmZzZXQpLHQucG9zaXRpb25BdChiLm9mZnNldCtiLmxlbmd0aCkpO2woJGUuY3JlYXRlKEwsZC5lcnJvcnNbMF0scCxKLlNjaGVtYVJlc29sdmVFcnJvcikpfWVsc2V7dmFyIEw9WC5jcmVhdGUodC5wb3NpdGlvbkF0KHgub2Zmc2V0KSx0LnBvc2l0aW9uQXQoeC5vZmZzZXQrMSkpO2woJGUuY3JlYXRlKEwsZC5lcnJvcnNbMF0scCxKLlNjaGVtYVJlc29sdmVFcnJvcikpfX1lbHNlIGlmKHYpe3ZhciBTPW4udmFsaWRhdGUodCxkLnNjaGVtYSx2KTtTJiZTLmZvckVhY2gobCl9eWEoZC5zY2hlbWEpJiYobT12b2lkIDApLHdhKGQuc2NoZW1hKSYmKGc9dm9pZCAwKX1mb3IodmFyIF89MCxOPW4uc3ludGF4RXJyb3JzO188Ti5sZW5ndGg7XysrKXt2YXIgQT1OW19dO2lmKEEuY29kZT09PUouVHJhaWxpbmdDb21tYSl7aWYodHlwZW9mIGchPSJudW1iZXIiKWNvbnRpbnVlO0Euc2V2ZXJpdHk9Z31sKEEpfWlmKHR5cGVvZiBtPT0ibnVtYmVyIil7dmFyIE09UHUoIkludmFsaWRDb21tZW50VG9rZW4iLCJDb21tZW50cyBhcmUgbm90IHBlcm1pdHRlZCBpbiBKU09OLiIpO24uY29tbWVudHMuZm9yRWFjaChmdW5jdGlvbihJKXtsKCRlLmNyZWF0ZShJLE0sbSxKLkNvbW1lbnROb3RQZXJtaXR0ZWQpKX0pfXJldHVybiBhfTtpZihpKXt2YXIgZj1pLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkLyIrSXUrKyxoPXRoaXMuanNvblNjaGVtYVNlcnZpY2UucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShmLFtdLGkpO3JldHVybiBoLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbihmdW5jdGlvbihkKXtyZXR1cm4gdShkKX0pfXJldHVybiB0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKHQudXJpLG4pLnRoZW4oZnVuY3Rpb24oZCl7cmV0dXJuIHUoZCl9KX0sZS5wcm90b3R5cGUuZ2V0TGFuZ3VhZ2VTdGF0dXM9ZnVuY3Rpb24odCxuKXtyZXR1cm57c2NoZW1hczp0aGlzLmpzb25TY2hlbWFTZXJ2aWNlLmdldFNjaGVtYVVSSXNGb3JSZXNvdXJjZSh0LnVyaSxuKX19LGV9KCksSXU9MDtmdW5jdGlvbiB5YShlKXtpZihlJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKEllKGUuYWxsb3dDb21tZW50cykpcmV0dXJuIGUuYWxsb3dDb21tZW50cztpZihlLmFsbE9mKWZvcih2YXIgdD0wLG49ZS5hbGxPZjt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XSxpPXlhKHIpO2lmKEllKGkpKXJldHVybiBpfX19ZnVuY3Rpb24gd2EoZSl7aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QiKXtpZihJZShlLmFsbG93VHJhaWxpbmdDb21tYXMpKXJldHVybiBlLmFsbG93VHJhaWxpbmdDb21tYXM7dmFyIHQ9ZTtpZihJZSh0LmFsbG93c1RyYWlsaW5nQ29tbWFzKSlyZXR1cm4gdC5hbGxvd3NUcmFpbGluZ0NvbW1hcztpZihlLmFsbE9mKWZvcih2YXIgbj0wLHI9ZS5hbGxPZjtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxzPXdhKGkpO2lmKEllKHMpKXJldHVybiBzfX19ZnVuY3Rpb24gX24oZSl7c3dpdGNoKGUpe2Nhc2UiZXJyb3IiOnJldHVybiBfZS5FcnJvcjtjYXNlIndhcm5pbmciOnJldHVybiBfZS5XYXJuaW5nO2Nhc2UiaWdub3JlIjpyZXR1cm59fXZhciBfYT00OCxEdT01NyxWdT02NSxTbj05NyxPdT0xMDI7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIGU8X2E/MDplPD1EdT9lLV9hOihlPFNuJiYoZSs9U24tVnUpLGU+PVNuJiZlPD1PdT9lLVNuKzEwOjApfWZ1bmN0aW9uIGp1KGUpe2lmKGVbMF09PT0iIyIpc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDp0ZShlLmNoYXJDb2RlQXQoMSkpKjE3LzI1NSxncmVlbjp0ZShlLmNoYXJDb2RlQXQoMikpKjE3LzI1NSxibHVlOnRlKGUuY2hhckNvZGVBdCgzKSkqMTcvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOnRlKGUuY2hhckNvZGVBdCgxKSkqMTcvMjU1LGdyZWVuOnRlKGUuY2hhckNvZGVBdCgyKSkqMTcvMjU1LGJsdWU6dGUoZS5jaGFyQ29kZUF0KDMpKSoxNy8yNTUsYWxwaGE6dGUoZS5jaGFyQ29kZUF0KDQpKSoxNy8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOih0ZShlLmNoYXJDb2RlQXQoMSkpKjE2K3RlKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjoodGUoZS5jaGFyQ29kZUF0KDMpKSoxNit0ZShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZToodGUoZS5jaGFyQ29kZUF0KDUpKSoxNit0ZShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KHRlKGUuY2hhckNvZGVBdCgxKSkqMTYrdGUoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOih0ZShlLmNoYXJDb2RlQXQoMykpKjE2K3RlKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOih0ZShlLmNoYXJDb2RlQXQoNSkpKjE2K3RlKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYToodGUoZS5jaGFyQ29kZUF0KDcpKSoxNit0ZShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX12YXIgcXU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMuc2NoZW1hU2VydmljZT10fXJldHVybiBlLnByb3RvdHlwZS5maW5kRG9jdW1lbnRTeW1ib2xzPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT10aGlzO3I9PT12b2lkIDAmJihyPXtyZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFfSk7dmFyIHM9bi5yb290O2lmKCFzKXJldHVybltdO3ZhciBhPXIucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUUsbz10LnVyaTtpZigobz09PSJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiJ8fFV0KG8udG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmcy50eXBlPT09ImFycmF5Iil7Zm9yKHZhciBsPVtdLHU9MCxmPXMuaXRlbXM7dTxmLmxlbmd0aDt1Kyspe3ZhciBoPWZbdV07aWYoaC50eXBlPT09Im9iamVjdCIpZm9yKHZhciBkPTAsZz1oLnByb3BlcnRpZXM7ZDxnLmxlbmd0aDtkKyspe3ZhciBtPWdbZF07aWYobS5rZXlOb2RlLnZhbHVlPT09ImtleSImJm0udmFsdWVOb2RlKXt2YXIgdj0kdC5jcmVhdGUodC51cmksZXQodCxoKSk7aWYobC5wdXNoKHtuYW1lOm90KG0udmFsdWVOb2RlKSxraW5kOkRlLkZ1bmN0aW9uLGxvY2F0aW9uOnZ9KSxhLS0sYTw9MClyZXR1cm4gciYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnIub25SZXN1bHRMaW1pdEV4Y2VlZGVkKG8pLGx9fX1yZXR1cm4gbH1mb3IodmFyIHA9W3tub2RlOnMsY29udGFpbmVyTmFtZToiIn1dLHg9MCx5PSExLGI9W10sTD1mdW5jdGlvbihfLE4pe18udHlwZT09PSJhcnJheSI/Xy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKEEpe0EmJnAucHVzaCh7bm9kZTpBLGNvbnRhaW5lck5hbWU6Tn0pfSk6Xy50eXBlPT09Im9iamVjdCImJl8ucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKEEpe3ZhciBNPUEudmFsdWVOb2RlO2lmKE0paWYoYT4wKXthLS07dmFyIEk9JHQuY3JlYXRlKHQudXJpLGV0KHQsQSkpLEM9Tj9OKyIuIitBLmtleU5vZGUudmFsdWU6QS5rZXlOb2RlLnZhbHVlO2IucHVzaCh7bmFtZTppLmdldEtleUxhYmVsKEEpLGtpbmQ6aS5nZXRTeW1ib2xLaW5kKE0udHlwZSksbG9jYXRpb246SSxjb250YWluZXJOYW1lOk59KSxwLnB1c2goe25vZGU6TSxjb250YWluZXJOYW1lOkN9KX1lbHNlIHk9ITB9KX07eDxwLmxlbmd0aDspe3ZhciBTPXBbeCsrXTtMKFMubm9kZSxTLmNvbnRhaW5lck5hbWUpfXJldHVybiB5JiZyJiZyLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQobyksYn0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50U3ltYm9sczI9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXM7cj09PXZvaWQgMCYmKHI9e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KTt2YXIgcz1uLnJvb3Q7aWYoIXMpcmV0dXJuW107dmFyIGE9ci5yZXN1bHRMaW1pdHx8TnVtYmVyLk1BWF9WQUxVRSxvPXQudXJpO2lmKChvPT09InZzY29kZTovL2RlZmF1bHRzZXR0aW5ncy9rZXliaW5kaW5ncy5qc29uInx8VXQoby50b0xvd2VyQ2FzZSgpLCIvdXNlci9rZXliaW5kaW5ncy5qc29uIikpJiZzLnR5cGU9PT0iYXJyYXkiKXtmb3IodmFyIGw9W10sdT0wLGY9cy5pdGVtczt1PGYubGVuZ3RoO3UrKyl7dmFyIGg9Zlt1XTtpZihoLnR5cGU9PT0ib2JqZWN0Iilmb3IodmFyIGQ9MCxnPWgucHJvcGVydGllcztkPGcubGVuZ3RoO2QrKyl7dmFyIG09Z1tkXTtpZihtLmtleU5vZGUudmFsdWU9PT0ia2V5IiYmbS52YWx1ZU5vZGUpe3ZhciB2PWV0KHQsaCkscD1ldCh0LG0ua2V5Tm9kZSk7aWYobC5wdXNoKHtuYW1lOm90KG0udmFsdWVOb2RlKSxraW5kOkRlLkZ1bmN0aW9uLHJhbmdlOnYsc2VsZWN0aW9uUmFuZ2U6cH0pLGEtLSxhPD0wKXJldHVybiByJiZyLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQobyksbH19fXJldHVybiBsfWZvcih2YXIgeD1bXSx5PVt7bm9kZTpzLHJlc3VsdDp4fV0sYj0wLEw9ITEsUz1mdW5jdGlvbihOLEEpe04udHlwZT09PSJhcnJheSI/Ti5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKE0sSSl7aWYoTSlpZihhPjApe2EtLTt2YXIgQz1ldCh0LE0pLHc9QyxUPVN0cmluZyhJKSxGPXtuYW1lOlQsa2luZDppLmdldFN5bWJvbEtpbmQoTS50eXBlKSxyYW5nZTpDLHNlbGVjdGlvblJhbmdlOncsY2hpbGRyZW46W119O0EucHVzaChGKSx5LnB1c2goe3Jlc3VsdDpGLmNoaWxkcmVuLG5vZGU6TX0pfWVsc2UgTD0hMH0pOk4udHlwZT09PSJvYmplY3QiJiZOLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihNKXt2YXIgST1NLnZhbHVlTm9kZTtpZihJKWlmKGE+MCl7YS0tO3ZhciBDPWV0KHQsTSksdz1ldCh0LE0ua2V5Tm9kZSksVD1bXSxGPXtuYW1lOmkuZ2V0S2V5TGFiZWwoTSksa2luZDppLmdldFN5bWJvbEtpbmQoSS50eXBlKSxyYW5nZTpDLHNlbGVjdGlvblJhbmdlOncsY2hpbGRyZW46VCxkZXRhaWw6aS5nZXREZXRhaWwoSSl9O0EucHVzaChGKSx5LnB1c2goe3Jlc3VsdDpULG5vZGU6SX0pfWVsc2UgTD0hMH0pfTtiPHkubGVuZ3RoOyl7dmFyIF89eVtiKytdO1MoXy5ub2RlLF8ucmVzdWx0KX1yZXR1cm4gTCYmciYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnIub25SZXN1bHRMaW1pdEV4Y2VlZGVkKG8pLHh9LGUucHJvdG90eXBlLmdldFN5bWJvbEtpbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2Uib2JqZWN0IjpyZXR1cm4gRGUuTW9kdWxlO2Nhc2Uic3RyaW5nIjpyZXR1cm4gRGUuU3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gRGUuTnVtYmVyO2Nhc2UiYXJyYXkiOnJldHVybiBEZS5BcnJheTtjYXNlImJvb2xlYW4iOnJldHVybiBEZS5Cb29sZWFuO2RlZmF1bHQ6cmV0dXJuIERlLlZhcmlhYmxlfX0sZS5wcm90b3R5cGUuZ2V0S2V5TGFiZWw9ZnVuY3Rpb24odCl7dmFyIG49dC5rZXlOb2RlLnZhbHVlO3JldHVybiBuJiYobj1uLnJlcGxhY2UoL1tcbl0vZywi4oa1IikpLG4mJm4udHJpbSgpP246JyInLmNvbmNhdChuLCciJyl9LGUucHJvdG90eXBlLmdldERldGFpbD1mdW5jdGlvbih0KXtpZih0KXtpZih0LnR5cGU9PT0iYm9vbGVhbiJ8fHQudHlwZT09PSJudW1iZXIifHx0LnR5cGU9PT0ibnVsbCJ8fHQudHlwZT09PSJzdHJpbmciKXJldHVybiBTdHJpbmcodC52YWx1ZSk7aWYodC50eXBlPT09ImFycmF5IilyZXR1cm4gdC5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJbXSI7aWYodC50eXBlPT09Im9iamVjdCIpcmV0dXJuIHQuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoie30ifX0sZS5wcm90b3R5cGUuZmluZERvY3VtZW50Q29sb3JzPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKHQudXJpLG4pLnRoZW4oZnVuY3Rpb24oaSl7dmFyIHM9W107aWYoaSlmb3IodmFyIGE9ciYmdHlwZW9mIHIucmVzdWx0TGltaXQ9PSJudW1iZXIiP3IucmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRSxvPW4uZ2V0TWF0Y2hpbmdTY2hlbWFzKGkuc2NoZW1hKSxsPXt9LHU9MCxmPW87dTxmLmxlbmd0aDt1Kyspe3ZhciBoPWZbdV07aWYoIWguaW52ZXJ0ZWQmJmguc2NoZW1hJiYoaC5zY2hlbWEuZm9ybWF0PT09ImNvbG9yInx8aC5zY2hlbWEuZm9ybWF0PT09ImNvbG9yLWhleCIpJiZoLm5vZGUmJmgubm9kZS50eXBlPT09InN0cmluZyIpe3ZhciBkPVN0cmluZyhoLm5vZGUub2Zmc2V0KTtpZighbFtkXSl7dmFyIGc9anUob3QoaC5ub2RlKSk7aWYoZyl7dmFyIG09ZXQodCxoLm5vZGUpO3MucHVzaCh7Y29sb3I6ZyxyYW5nZTptfSl9aWYobFtkXT0hMCxhLS0sYTw9MClyZXR1cm4gciYmci5vblJlc3VsdExpbWl0RXhjZWVkZWQmJnIub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHQudXJpKSxzfX19cmV0dXJuIHN9KX0sZS5wcm90b3R5cGUuZ2V0Q29sb3JQcmVzZW50YXRpb25zPWZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzPVtdLGE9TWF0aC5yb3VuZChyLnJlZCoyNTUpLG89TWF0aC5yb3VuZChyLmdyZWVuKjI1NSksbD1NYXRoLnJvdW5kKHIuYmx1ZSoyNTUpO2Z1bmN0aW9uIHUoaCl7dmFyIGQ9aC50b1N0cmluZygxNik7cmV0dXJuIGQubGVuZ3RoIT09Mj8iMCIrZDpkfXZhciBmO3JldHVybiByLmFscGhhPT09MT9mPSIjIi5jb25jYXQodShhKSkuY29uY2F0KHUobykpLmNvbmNhdCh1KGwpKTpmPSIjIi5jb25jYXQodShhKSkuY29uY2F0KHUobykpLmNvbmNhdCh1KGwpKS5jb25jYXQodShNYXRoLnJvdW5kKHIuYWxwaGEqMjU1KSkpLHMucHVzaCh7bGFiZWw6Zix0ZXh0RWRpdDpSZS5yZXBsYWNlKGksSlNPTi5zdHJpbmdpZnkoZikpfSksc30sZX0oKTtmdW5jdGlvbiBldChlLHQpe3JldHVybiBYLmNyZWF0ZShlLnBvc2l0aW9uQXQodC5vZmZzZXQpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aCkpfXZhciAkPVh0KCksa3I9e3NjaGVtYUFzc29jaWF0aW9uczpbXSxzY2hlbWFzOnsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEjIjp7JHJlZjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI6eyRzY2hlbWE6Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsZGVmaW5pdGlvbnM6e3NjaGVtYUFycmF5Ont0eXBlOiJhcnJheSIsbWluSXRlbXM6MSxpdGVtczp7JHJlZjoiIyJ9fSxwb3NpdGl2ZUludGVnZXI6e3R5cGU6ImludGVnZXIiLG1pbmltdW06MH0scG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDA6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifSx7ZGVmYXVsdDowfV19LHNpbXBsZVR5cGVzOnt0eXBlOiJzdHJpbmciLGVudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfX0sdHlwZToib2JqZWN0Iixwcm9wZXJ0aWVzOntpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRzY2hlbWE6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmkifSx0aXRsZTp7dHlwZToic3RyaW5nIn0sZGVzY3JpcHRpb246e3R5cGU6InN0cmluZyJ9LGRlZmF1bHQ6e30sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsZXhjbHVzaXZlTWluaW11bTohMH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sbWF4TGVuZ3RoOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5MZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scGF0dGVybjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InJlZ2V4In0sYWRkaXRpb25hbEl0ZW1zOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDp7fX0sbWF4SXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkl0ZW1zOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhQcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIn1dfSxtaW5Qcm9wZXJ0aWVzOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAifV19LHJlcXVpcmVkOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbe3R5cGU6ImJvb2xlYW4ifSx7JHJlZjoiIyJ9XSxkZWZhdWx0Ont9fSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LGRlcGVuZGVuY2llczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkifV19fSxlbnVtOnt0eXBlOiJhcnJheSIsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0OnthbnlPZjpbe3R5cGU6InN0cmluZyIsZW51bTpbImRhdGUtdGltZSIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInJlZ2V4Il19LHt0eXBlOiJzdHJpbmcifV19LGFsbE9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LGFueU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG9uZU9mOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV19LG5vdDp7YWxsT2Y6W3skcmVmOiIjIn1dfX0sZGVwZW5kZW5jaWVzOntleGNsdXNpdmVNYXhpbXVtOlsibWF4aW11bSJdLGV4Y2x1c2l2ZU1pbmltdW06WyJtaW5pbXVtIl19LGRlZmF1bHQ6e319LCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiOntkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LG5vbk5lZ2F0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e2VudW06WyJhcnJheSIsImJvb2xlYW4iLCJpbnRlZ2VyIiwibnVsbCIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyJdfSxzdHJpbmdBcnJheTp7dHlwZToiYXJyYXkiLGl0ZW1zOnt0eXBlOiJzdHJpbmcifSx1bmlxdWVJdGVtczohMCxkZWZhdWx0OltdfX0sdHlwZTpbIm9iamVjdCIsImJvb2xlYW4iXSxwcm9wZXJ0aWVzOnskaWQ6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LCRyZWY6e3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmktcmVmZXJlbmNlIn0sJGNvbW1lbnQ6e3R5cGU6InN0cmluZyJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDohMCxyZWFkT25seTp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sZXhhbXBsZXM6e3R5cGU6ImFycmF5IixpdGVtczohMH0sbXVsdGlwbGVPZjp7dHlwZToibnVtYmVyIixleGNsdXNpdmVNaW5pbXVtOjB9LG1heGltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1heGltdW06e3R5cGU6Im51bWJlciJ9LG1pbmltdW06e3R5cGU6Im51bWJlciJ9LGV4Y2x1c2l2ZU1pbmltdW06e3R5cGU6Im51bWJlciJ9LG1heExlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5MZW5ndGg6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6eyRyZWY6IiMifSxpdGVtczp7YW55T2Y6W3skcmVmOiIjIn0seyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifV0sZGVmYXVsdDohMH0sbWF4SXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluSXRlbXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSx1bmlxdWVJdGVtczp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY29udGFpbnM6eyRyZWY6IiMifSxtYXhQcm9wZXJ0aWVzOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pblByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDAifSxyZXF1aXJlZDp7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9LGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmaW5pdGlvbnM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scGF0dGVyblByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxwcm9wZXJ0eU5hbWVzOntmb3JtYXQ6InJlZ2V4In0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LHByb3BlcnR5TmFtZXM6eyRyZWY6IiMifSxjb25zdDohMCxlbnVtOnt0eXBlOiJhcnJheSIsaXRlbXM6ITAsbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH0sdHlwZTp7YW55T2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0se3R5cGU6ImFycmF5IixpdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBlcyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9XX0sZm9ybWF0Ont0eXBlOiJzdHJpbmcifSxjb250ZW50TWVkaWFUeXBlOnt0eXBlOiJzdHJpbmcifSxjb250ZW50RW5jb2Rpbmc6e3R5cGU6InN0cmluZyJ9LGlmOnskcmVmOiIjIn0sdGhlbjp7JHJlZjoiIyJ9LGVsc2U6eyRyZWY6IiMifSxhbGxPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LGFueU9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sb25lT2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxub3Q6eyRyZWY6IiMifX0sZGVmYXVsdDohMH19fSxCdT17aWQ6JCgic2NoZW1hLmpzb24uaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRzY2hlbWE6JCgic2NoZW1hLmpzb24uJHNjaGVtYSIsIlRoZSBzY2hlbWEgdG8gdmVyaWZ5IHRoaXMgZG9jdW1lbnQgYWdhaW5zdC4iKSx0aXRsZTokKCJzY2hlbWEuanNvbi50aXRsZSIsIkEgZGVzY3JpcHRpdmUgdGl0bGUgb2YgdGhlIGVsZW1lbnQuIiksZGVzY3JpcHRpb246JCgic2NoZW1hLmpzb24uZGVzY3JpcHRpb24iLCJBIGxvbmcgZGVzY3JpcHRpb24gb2YgdGhlIGVsZW1lbnQuIFVzZWQgaW4gaG92ZXIgbWVudXMgYW5kIHN1Z2dlc3Rpb25zLiIpLGRlZmF1bHQ6JCgic2NoZW1hLmpzb24uZGVmYXVsdCIsIkEgZGVmYXVsdCB2YWx1ZS4gVXNlZCBieSBzdWdnZXN0aW9ucy4iKSxtdWx0aXBsZU9mOiQoInNjaGVtYS5qc29uLm11bHRpcGxlT2YiLCJBIG51bWJlciB0aGF0IHNob3VsZCBjbGVhbmx5IGRpdmlkZSB0aGUgY3VycmVudCB2YWx1ZSAoaS5lLiBoYXZlIG5vIHJlbWFpbmRlcikuIiksbWF4aW11bTokKCJzY2hlbWEuanNvbi5tYXhpbXVtIiwiVGhlIG1heGltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNYXhpbXVtOiQoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1heGltdW0iLCJNYWtlcyB0aGUgbWF4aW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWluaW11bTokKCJzY2hlbWEuanNvbi5taW5pbXVtIiwiVGhlIG1pbmltdW0gbnVtZXJpY2FsIHZhbHVlLCBpbmNsdXNpdmUgYnkgZGVmYXVsdC4iKSxleGNsdXNpdmVNaW5pbXVtOiQoInNjaGVtYS5qc29uLmV4Y2x1c2l2ZU1pbmludW0iLCJNYWtlcyB0aGUgbWluaW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWF4TGVuZ3RoOiQoInNjaGVtYS5qc29uLm1heExlbmd0aCIsIlRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxtaW5MZW5ndGg6JCgic2NoZW1hLmpzb24ubWluTGVuZ3RoIiwiVGhlIG1pbmltdW0gbGVuZ3RoIG9mIGEgc3RyaW5nLiIpLHBhdHRlcm46JCgic2NoZW1hLmpzb24ucGF0dGVybiIsIkEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBzdHJpbmcgYWdhaW5zdC4gSXQgaXMgbm90IGltcGxpY2l0bHkgYW5jaG9yZWQuIiksYWRkaXRpb25hbEl0ZW1zOiQoInNjaGVtYS5qc29uLmFkZGl0aW9uYWxJdGVtcyIsIkZvciBhcnJheXMsIG9ubHkgd2hlbiBpdGVtcyBpcyBzZXQgYXMgYW4gYXJyYXkuIElmIGl0IGlzIGEgc2NoZW1hLCB0aGVuIHRoaXMgc2NoZW1hIHZhbGlkYXRlcyBpdGVtcyBhZnRlciB0aGUgb25lcyBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1zIGFycmF5LiBJZiBpdCBpcyBmYWxzZSwgdGhlbiBhZGRpdGlvbmFsIGl0ZW1zIHdpbGwgY2F1c2UgdmFsaWRhdGlvbiB0byBmYWlsLiIpLGl0ZW1zOiQoInNjaGVtYS5qc29uLml0ZW1zIiwiRm9yIGFycmF5cy4gQ2FuIGVpdGhlciBiZSBhIHNjaGVtYSB0byB2YWxpZGF0ZSBldmVyeSBlbGVtZW50IGFnYWluc3Qgb3IgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB2YWxpZGF0ZSBlYWNoIGl0ZW0gYWdhaW5zdCBpbiBvcmRlciAodGhlIGZpcnN0IHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgc2Vjb25kIHNjaGVtYSB3aWxsIHZhbGlkYXRlIHRoZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLiIpLG1heEl0ZW1zOiQoInNjaGVtYS5qc29uLm1heEl0ZW1zIiwiVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLG1pbkl0ZW1zOiQoInNjaGVtYS5qc29uLm1pbkl0ZW1zIiwiVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLHVuaXF1ZUl0ZW1zOiQoInNjaGVtYS5qc29uLnVuaXF1ZUl0ZW1zIiwiSWYgYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuIERlZmF1bHRzIHRvIGZhbHNlLiIpLG1heFByb3BlcnRpZXM6JCgic2NoZW1hLmpzb24ubWF4UHJvcGVydGllcyIsIlRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLG1pblByb3BlcnRpZXM6JCgic2NoZW1hLmpzb24ubWluUHJvcGVydGllcyIsIlRoZSBtaW5pbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLHJlcXVpcmVkOiQoInNjaGVtYS5qc29uLnJlcXVpcmVkIiwiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyByZXF1aXJlZCBvbiB0aGlzIG9iamVjdC4iKSxhZGRpdGlvbmFsUHJvcGVydGllczokKCJzY2hlbWEuanNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyIsIkVpdGhlciBhIHNjaGVtYSBvciBhIGJvb2xlYW4uIElmIGEgc2NoZW1hLCB0aGVuIHVzZWQgdG8gdmFsaWRhdGUgYWxsIHByb3BlcnRpZXMgbm90IG1hdGNoZWQgYnkgJ3Byb3BlcnRpZXMnIG9yICdwYXR0ZXJuUHJvcGVydGllcycuIElmIGZhbHNlLCB0aGVuIGFueSBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5IGVpdGhlciB3aWxsIGNhdXNlIHRoaXMgc2NoZW1hIHRvIGZhaWwuIiksZGVmaW5pdGlvbnM6JCgic2NoZW1hLmpzb24uZGVmaW5pdGlvbnMiLCJOb3QgdXNlZCBmb3IgdmFsaWRhdGlvbi4gUGxhY2Ugc3Vic2NoZW1hcyBoZXJlIHRoYXQgeW91IHdpc2ggdG8gcmVmZXJlbmNlIGlubGluZSB3aXRoICRyZWYuIikscHJvcGVydGllczokKCJzY2hlbWEuanNvbi5wcm9wZXJ0aWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgZWFjaCBwcm9wZXJ0eS4iKSxwYXR0ZXJuUHJvcGVydGllczokKCJzY2hlbWEuanNvbi5wYXR0ZXJuUHJvcGVydGllcyIsIkEgbWFwIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb24gcHJvcGVydHkgbmFtZXMgdG8gc2NoZW1hcyBmb3IgbWF0Y2hpbmcgcHJvcGVydGllcy4iKSxkZXBlbmRlbmNpZXM6JCgic2NoZW1hLmpzb24uZGVwZW5kZW5jaWVzIiwiQSBtYXAgb2YgcHJvcGVydHkgbmFtZXMgdG8gZWl0aGVyIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG9yIGEgc2NoZW1hLiBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBtZWFucyB0aGUgcHJvcGVydHkgbmFtZWQgaW4gdGhlIGtleSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBhcnJheSBiZWluZyBwcmVzZW50IGluIHRoZSBvYmplY3QgaW4gb3JkZXIgdG8gYmUgdmFsaWQuIElmIHRoZSB2YWx1ZSBpcyBhIHNjaGVtYSwgdGhlbiB0aGUgc2NoZW1hIGlzIG9ubHkgYXBwbGllZCB0byB0aGUgb2JqZWN0IGlmIHRoZSBwcm9wZXJ0eSBpbiB0aGUga2V5IGV4aXN0cyBvbiB0aGUgb2JqZWN0LiIpLGVudW06JCgic2NoZW1hLmpzb24uZW51bSIsIlRoZSBzZXQgb2YgbGl0ZXJhbCB2YWx1ZXMgdGhhdCBhcmUgdmFsaWQuIiksdHlwZTokKCJzY2hlbWEuanNvbi50eXBlIiwiRWl0aGVyIGEgc3RyaW5nIG9mIG9uZSBvZiB0aGUgYmFzaWMgc2NoZW1hIHR5cGVzIChudW1iZXIsIGludGVnZXIsIG51bGwsIGFycmF5LCBvYmplY3QsIGJvb2xlYW4sIHN0cmluZykgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIGEgc3Vic2V0IG9mIHRob3NlIHR5cGVzLiIpLGZvcm1hdDokKCJzY2hlbWEuanNvbi5mb3JtYXQiLCJEZXNjcmliZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgdGhlIHZhbHVlLiIpLGFsbE9mOiQoInNjaGVtYS5qc29uLmFsbE9mIiwiQW4gYXJyYXkgb2Ygc2NoZW1hcywgYWxsIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksYW55T2Y6JCgic2NoZW1hLmpzb24uYW55T2YiLCJBbiBhcnJheSBvZiBzY2hlbWFzLCB3aGVyZSBhdCBsZWFzdCBvbmUgbXVzdCBtYXRjaC4iKSxvbmVPZjokKCJzY2hlbWEuanNvbi5vbmVPZiIsIkFuIGFycmF5IG9mIHNjaGVtYXMsIGV4YWN0bHkgb25lIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksbm90OiQoInNjaGVtYS5qc29uLm5vdCIsIkEgc2NoZW1hIHdoaWNoIG11c3Qgbm90IG1hdGNoLiIpLCRpZDokKCJzY2hlbWEuanNvbi4kaWQiLCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRyZWY6JCgic2NoZW1hLmpzb24uJHJlZiIsIlJlZmVyZW5jZSBhIGRlZmluaXRpb24gaG9zdGVkIG9uIGFueSBsb2NhdGlvbi4iKSwkY29tbWVudDokKCJzY2hlbWEuanNvbi4kY29tbWVudCIsIkNvbW1lbnRzIGZyb20gc2NoZW1hIGF1dGhvcnMgdG8gcmVhZGVycyBvciBtYWludGFpbmVycyBvZiB0aGUgc2NoZW1hLiIpLHJlYWRPbmx5OiQoInNjaGVtYS5qc29uLnJlYWRPbmx5IiwiSW5kaWNhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBpbnN0YW5jZSBpcyBtYW5hZ2VkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBvd25pbmcgYXV0aG9yaXR5LiIpLGV4YW1wbGVzOiQoInNjaGVtYS5qc29uLmV4YW1wbGVzIiwiU2FtcGxlIEpTT04gdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc2NoZW1hLCBmb3IgdGhlIHB1cnBvc2Ugb2YgaWxsdXN0cmF0aW5nIHVzYWdlLiIpLGNvbnRhaW5zOiQoInNjaGVtYS5qc29uLmNvbnRhaW5zIiwnQW4gYXJyYXkgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCAiY29udGFpbnMiIGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZ2l2ZW4gc2NoZW1hLicpLHByb3BlcnR5TmFtZXM6JCgic2NoZW1hLmpzb24ucHJvcGVydHlOYW1lcyIsIklmIHRoZSBpbnN0YW5jZSBpcyBhbiBvYmplY3QsIHRoaXMga2V5d29yZCB2YWxpZGF0ZXMgaWYgZXZlcnkgcHJvcGVydHkgbmFtZSBpbiB0aGUgaW5zdGFuY2UgdmFsaWRhdGVzIGFnYWluc3QgdGhlIHByb3ZpZGVkIHNjaGVtYS4iKSxjb25zdDokKCJzY2hlbWEuanNvbi5jb25zdCIsIkFuIGluc3RhbmNlIHZhbGlkYXRlcyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGlzIGtleXdvcmQgaWYgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUga2V5d29yZC4iKSxjb250ZW50TWVkaWFUeXBlOiQoInNjaGVtYS5qc29uLmNvbnRlbnRNZWRpYVR5cGUiLCJEZXNjcmliZXMgdGhlIG1lZGlhIHR5cGUgb2YgYSBzdHJpbmcgcHJvcGVydHkuIiksY29udGVudEVuY29kaW5nOiQoInNjaGVtYS5qc29uLmNvbnRlbnRFbmNvZGluZyIsIkRlc2NyaWJlcyB0aGUgY29udGVudCBlbmNvZGluZyBvZiBhIHN0cmluZyBwcm9wZXJ0eS4iKSxpZjokKCJzY2hlbWEuanNvbi5pZiIsJ1RoZSB2YWxpZGF0aW9uIG91dGNvbWUgb2YgdGhlICJpZiIgc3Vic2NoZW1hIGNvbnRyb2xzIHdoaWNoIG9mIHRoZSAidGhlbiIgb3IgImVsc2UiIGtleXdvcmRzIGFyZSBldmFsdWF0ZWQuJyksdGhlbjokKCJzY2hlbWEuanNvbi50aGVuIiwnVGhlICJpZiIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgc3VjY2VlZHMuJyksZWxzZTokKCJzY2hlbWEuanNvbi5lbHNlIiwnVGhlICJlbHNlIiBzdWJzY2hlbWEgaXMgdXNlZCBmb3IgdmFsaWRhdGlvbiB3aGVuIHRoZSAiaWYiIHN1YnNjaGVtYSBmYWlscy4nKX07Zm9yKFNhIGluIGtyLnNjaGVtYXMpe0xuPWtyLnNjaGVtYXNbU2FdO2ZvcihDdCBpbiBMbi5wcm9wZXJ0aWVzKU5uPUxuLnByb3BlcnRpZXNbQ3RdLHR5cGVvZiBObj09ImJvb2xlYW4iJiYoTm49TG4ucHJvcGVydGllc1tDdF09e30pLEVyPUJ1W0N0XSxFcj9Obi5kZXNjcmlwdGlvbj1Fcjpjb25zb2xlLmxvZygiIi5jb25jYXQoQ3QsIjogbG9jYWxpemUoJ3NjaGVtYS5qc29uLiIpLmNvbmNhdChDdCxgJywgIiIpYCkpfXZhciBMbixObixFcixDdCxTYSxMYTtMYT0oKCk9Pnt2YXIgZT17NDcwOnI9PntmdW5jdGlvbiBpKG8pe2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkobykpfWZ1bmN0aW9uIHMobyxsKXtmb3IodmFyIHUsZj0iIixoPTAsZD0tMSxnPTAsbT0wO208PW8ubGVuZ3RoOysrbSl7aWYobTxvLmxlbmd0aCl1PW8uY2hhckNvZGVBdChtKTtlbHNle2lmKHU9PT00NylicmVhazt1PTQ3fWlmKHU9PT00Nyl7aWYoIShkPT09bS0xfHxnPT09MSkpaWYoZCE9PW0tMSYmZz09PTIpe2lmKGYubGVuZ3RoPDJ8fGghPT0yfHxmLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSkhPT00Nnx8Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTIpIT09NDYpe2lmKGYubGVuZ3RoPjIpe3ZhciB2PWYubGFzdEluZGV4T2YoIi8iKTtpZih2IT09Zi5sZW5ndGgtMSl7dj09PS0xPyhmPSIiLGg9MCk6aD0oZj1mLnNsaWNlKDAsdikpLmxlbmd0aC0xLWYubGFzdEluZGV4T2YoIi8iKSxkPW0sZz0wO2NvbnRpbnVlfX1lbHNlIGlmKGYubGVuZ3RoPT09Mnx8Zi5sZW5ndGg9PT0xKXtmPSIiLGg9MCxkPW0sZz0wO2NvbnRpbnVlfX1sJiYoZi5sZW5ndGg+MD9mKz0iLy4uIjpmPSIuLiIsaD0yKX1lbHNlIGYubGVuZ3RoPjA/Zis9Ii8iK28uc2xpY2UoZCsxLG0pOmY9by5zbGljZShkKzEsbSksaD1tLWQtMTtkPW0sZz0wfWVsc2UgdT09PTQ2JiZnIT09LTE/KytnOmc9LTF9cmV0dXJuIGZ9dmFyIGE9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIG8sbD0iIix1PSExLGY9YXJndW1lbnRzLmxlbmd0aC0xO2Y+PS0xJiYhdTtmLS0pe3ZhciBoO2Y+PTA/aD1hcmd1bWVudHNbZl06KG89PT12b2lkIDAmJihvPXByb2Nlc3MuY3dkKCkpLGg9byksaShoKSxoLmxlbmd0aCE9PTAmJihsPWgrIi8iK2wsdT1oLmNoYXJDb2RlQXQoMCk9PT00Nyl9cmV0dXJuIGw9cyhsLCF1KSx1P2wubGVuZ3RoPjA/Ii8iK2w6Ii8iOmwubGVuZ3RoPjA/bDoiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihvKXtpZihpKG8pLG8ubGVuZ3RoPT09MClyZXR1cm4iLiI7dmFyIGw9by5jaGFyQ29kZUF0KDApPT09NDcsdT1vLmNoYXJDb2RlQXQoby5sZW5ndGgtMSk9PT00NztyZXR1cm4obz1zKG8sIWwpKS5sZW5ndGghPT0wfHxsfHwobz0iLiIpLG8ubGVuZ3RoPjAmJnUmJihvKz0iLyIpLGw/Ii8iK286b30saXNBYnNvbHV0ZTpmdW5jdGlvbihvKXtyZXR1cm4gaShvKSxvLmxlbmd0aD4wJiZvLmNoYXJDb2RlQXQoMCk9PT00N30sam9pbjpmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIG8sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDsrK2wpe3ZhciB1PWFyZ3VtZW50c1tsXTtpKHUpLHUubGVuZ3RoPjAmJihvPT09dm9pZCAwP289dTpvKz0iLyIrdSl9cmV0dXJuIG89PT12b2lkIDA/Ii4iOmEubm9ybWFsaXplKG8pfSxyZWxhdGl2ZTpmdW5jdGlvbihvLGwpe2lmKGkobyksaShsKSxvPT09bHx8KG89YS5yZXNvbHZlKG8pKT09PShsPWEucmVzb2x2ZShsKSkpcmV0dXJuIiI7Zm9yKHZhciB1PTE7dTxvLmxlbmd0aCYmby5jaGFyQ29kZUF0KHUpPT09NDc7Kyt1KTtmb3IodmFyIGY9by5sZW5ndGgsaD1mLXUsZD0xO2Q8bC5sZW5ndGgmJmwuY2hhckNvZGVBdChkKT09PTQ3OysrZCk7Zm9yKHZhciBnPWwubGVuZ3RoLWQsbT1oPGc/aDpnLHY9LTEscD0wO3A8PW07KytwKXtpZihwPT09bSl7aWYoZz5tKXtpZihsLmNoYXJDb2RlQXQoZCtwKT09PTQ3KXJldHVybiBsLnNsaWNlKGQrcCsxKTtpZihwPT09MClyZXR1cm4gbC5zbGljZShkK3ApfWVsc2UgaD5tJiYoby5jaGFyQ29kZUF0KHUrcCk9PT00Nz92PXA6cD09PTAmJih2PTApKTticmVha312YXIgeD1vLmNoYXJDb2RlQXQodStwKTtpZih4IT09bC5jaGFyQ29kZUF0KGQrcCkpYnJlYWs7eD09PTQ3JiYodj1wKX12YXIgeT0iIjtmb3IocD11K3YrMTtwPD1mOysrcClwIT09ZiYmby5jaGFyQ29kZUF0KHApIT09NDd8fCh5Lmxlbmd0aD09PTA/eSs9Ii4uIjp5Kz0iLy4uIik7cmV0dXJuIHkubGVuZ3RoPjA/eStsLnNsaWNlKGQrdik6KGQrPXYsbC5jaGFyQ29kZUF0KGQpPT09NDcmJisrZCxsLnNsaWNlKGQpKX0sX21ha2VMb25nOmZ1bmN0aW9uKG8pe3JldHVybiBvfSxkaXJuYW1lOmZ1bmN0aW9uKG8pe2lmKGkobyksby5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIGw9by5jaGFyQ29kZUF0KDApLHU9bD09PTQ3LGY9LTEsaD0hMCxkPW8ubGVuZ3RoLTE7ZD49MTstLWQpaWYoKGw9by5jaGFyQ29kZUF0KGQpKT09PTQ3KXtpZighaCl7Zj1kO2JyZWFrfX1lbHNlIGg9ITE7cmV0dXJuIGY9PT0tMT91PyIvIjoiLiI6dSYmZj09PTE/Ii8vIjpvLnNsaWNlKDAsZil9LGJhc2VuYW1lOmZ1bmN0aW9uKG8sbCl7aWYobCE9PXZvaWQgMCYmdHlwZW9mIGwhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtpKG8pO3ZhciB1LGY9MCxoPS0xLGQ9ITA7aWYobCE9PXZvaWQgMCYmbC5sZW5ndGg+MCYmbC5sZW5ndGg8PW8ubGVuZ3RoKXtpZihsLmxlbmd0aD09PW8ubGVuZ3RoJiZsPT09bylyZXR1cm4iIjt2YXIgZz1sLmxlbmd0aC0xLG09LTE7Zm9yKHU9by5sZW5ndGgtMTt1Pj0wOy0tdSl7dmFyIHY9by5jaGFyQ29kZUF0KHUpO2lmKHY9PT00Nyl7aWYoIWQpe2Y9dSsxO2JyZWFrfX1lbHNlIG09PT0tMSYmKGQ9ITEsbT11KzEpLGc+PTAmJih2PT09bC5jaGFyQ29kZUF0KGcpPy0tZz09LTEmJihoPXUpOihnPS0xLGg9bSkpfXJldHVybiBmPT09aD9oPW06aD09PS0xJiYoaD1vLmxlbmd0aCksby5zbGljZShmLGgpfWZvcih1PW8ubGVuZ3RoLTE7dT49MDstLXUpaWYoby5jaGFyQ29kZUF0KHUpPT09NDcpe2lmKCFkKXtmPXUrMTticmVha319ZWxzZSBoPT09LTEmJihkPSExLGg9dSsxKTtyZXR1cm4gaD09PS0xPyIiOm8uc2xpY2UoZixoKX0sZXh0bmFtZTpmdW5jdGlvbihvKXtpKG8pO2Zvcih2YXIgbD0tMSx1PTAsZj0tMSxoPSEwLGQ9MCxnPW8ubGVuZ3RoLTE7Zz49MDstLWcpe3ZhciBtPW8uY2hhckNvZGVBdChnKTtpZihtIT09NDcpZj09PS0xJiYoaD0hMSxmPWcrMSksbT09PTQ2P2w9PT0tMT9sPWc6ZCE9PTEmJihkPTEpOmwhPT0tMSYmKGQ9LTEpO2Vsc2UgaWYoIWgpe3U9ZysxO2JyZWFrfX1yZXR1cm4gbD09PS0xfHxmPT09LTF8fGQ9PT0wfHxkPT09MSYmbD09PWYtMSYmbD09PXUrMT8iIjpvLnNsaWNlKGwsZil9LGZvcm1hdDpmdW5jdGlvbihvKXtpZihvPT09bnVsbHx8dHlwZW9mIG8hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBvKTtyZXR1cm4gZnVuY3Rpb24obCx1KXt2YXIgZj11LmRpcnx8dS5yb290LGg9dS5iYXNlfHwodS5uYW1lfHwiIikrKHUuZXh0fHwiIik7cmV0dXJuIGY/Zj09PXUucm9vdD9mK2g6ZisiLyIraDpofSgwLG8pfSxwYXJzZTpmdW5jdGlvbihvKXtpKG8pO3ZhciBsPXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihvLmxlbmd0aD09PTApcmV0dXJuIGw7dmFyIHUsZj1vLmNoYXJDb2RlQXQoMCksaD1mPT09NDc7aD8obC5yb290PSIvIix1PTEpOnU9MDtmb3IodmFyIGQ9LTEsZz0wLG09LTEsdj0hMCxwPW8ubGVuZ3RoLTEseD0wO3A+PXU7LS1wKWlmKChmPW8uY2hhckNvZGVBdChwKSkhPT00NyltPT09LTEmJih2PSExLG09cCsxKSxmPT09NDY/ZD09PS0xP2Q9cDp4IT09MSYmKHg9MSk6ZCE9PS0xJiYoeD0tMSk7ZWxzZSBpZighdil7Zz1wKzE7YnJlYWt9cmV0dXJuIGQ9PT0tMXx8bT09PS0xfHx4PT09MHx8eD09PTEmJmQ9PT1tLTEmJmQ9PT1nKzE/bSE9PS0xJiYobC5iYXNlPWwubmFtZT1nPT09MCYmaD9vLnNsaWNlKDEsbSk6by5zbGljZShnLG0pKTooZz09PTAmJmg/KGwubmFtZT1vLnNsaWNlKDEsZCksbC5iYXNlPW8uc2xpY2UoMSxtKSk6KGwubmFtZT1vLnNsaWNlKGcsZCksbC5iYXNlPW8uc2xpY2UoZyxtKSksbC5leHQ9by5zbGljZShkLG0pKSxnPjA/bC5kaXI9by5zbGljZSgwLGctMSk6aCYmKGwuZGlyPSIvIiksbH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07YS5wb3NpeD1hLHIuZXhwb3J0cz1hfSw0NDc6KHIsaSxzKT0+e3ZhciBhO2lmKHMucihpKSxzLmQoaSx7VVJJOigpPT55LFV0aWxzOigpPT5UfSksdHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiKWE9cHJvY2Vzcy5wbGF0Zm9ybT09PSJ3aW4zMiI7ZWxzZSBpZih0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0Iil7dmFyIG89bmF2aWdhdG9yLnVzZXJBZ2VudDthPW8uaW5kZXhPZigiV2luZG93cyIpPj0wfXZhciBsLHUsZj0obD1mdW5jdGlvbihSLGspe3JldHVybihsPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihQLEQpe1AuX19wcm90b19fPUR9fHxmdW5jdGlvbihQLEQpe2Zvcih2YXIgQiBpbiBEKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChELEIpJiYoUFtCXT1EW0JdKX0pKFIsayl9LGZ1bmN0aW9uKFIsayl7aWYodHlwZW9mIGshPSJmdW5jdGlvbiImJmshPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gUCgpe3RoaXMuY29uc3RydWN0b3I9Un1sKFIsayksUi5wcm90b3R5cGU9az09PW51bGw/T2JqZWN0LmNyZWF0ZShrKTooUC5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IFApfSksaD0vXlx3W1x3XGQrLi1dKiQvLGQ9L15cLy8sZz0vXlwvXC8vO2Z1bmN0aW9uIG0oUixrKXtpZighUi5zY2hlbWUmJmspdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIicuY29uY2F0KFIuYXV0aG9yaXR5LCciLCBwYXRoOiAiJykuY29uY2F0KFIucGF0aCwnIiwgcXVlcnk6ICInKS5jb25jYXQoUi5xdWVyeSwnIiwgZnJhZ21lbnQ6ICInKS5jb25jYXQoUi5mcmFnbWVudCwnIn0nKSk7aWYoUi5zY2hlbWUmJiFoLnRlc3QoUi5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihSLnBhdGgpe2lmKFIuYXV0aG9yaXR5KXtpZighZC50ZXN0KFIucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihnLnRlc3QoUi5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX19dmFyIHY9IiIscD0iLyIseD0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/Lyx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUihrLFAsRCxCLFUsRyl7Rz09PXZvaWQgMCYmKEc9ITEpLHR5cGVvZiBrPT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9ay5zY2hlbWV8fHYsdGhpcy5hdXRob3JpdHk9ay5hdXRob3JpdHl8fHYsdGhpcy5wYXRoPWsucGF0aHx8dix0aGlzLnF1ZXJ5PWsucXVlcnl8fHYsdGhpcy5mcmFnbWVudD1rLmZyYWdtZW50fHx2KToodGhpcy5zY2hlbWU9ZnVuY3Rpb24oZGUsbGUpe3JldHVybiBkZXx8bGU/ZGU6ImZpbGUifShrLEcpLHRoaXMuYXV0aG9yaXR5PVB8fHYsdGhpcy5wYXRoPWZ1bmN0aW9uKGRlLGxlKXtzd2l0Y2goZGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjpsZT9sZVswXSE9PXAmJihsZT1wK2xlKTpsZT1wfXJldHVybiBsZX0odGhpcy5zY2hlbWUsRHx8diksdGhpcy5xdWVyeT1CfHx2LHRoaXMuZnJhZ21lbnQ9VXx8dixtKHRoaXMsRykpfXJldHVybiBSLmlzVXJpPWZ1bmN0aW9uKGspe3JldHVybiBrIGluc3RhbmNlb2YgUnx8ISFrJiZ0eXBlb2Ygay5hdXRob3JpdHk9PSJzdHJpbmciJiZ0eXBlb2Ygay5mcmFnbWVudD09InN0cmluZyImJnR5cGVvZiBrLnBhdGg9PSJzdHJpbmciJiZ0eXBlb2Ygay5xdWVyeT09InN0cmluZyImJnR5cGVvZiBrLnNjaGVtZT09InN0cmluZyImJnR5cGVvZiBrLmZzUGF0aD09InN0cmluZyImJnR5cGVvZiBrLndpdGg9PSJmdW5jdGlvbiImJnR5cGVvZiBrLnRvU3RyaW5nPT0iZnVuY3Rpb24ifSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsImZzUGF0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFIucHJvdG90eXBlLndpdGg9ZnVuY3Rpb24oayl7aWYoIWspcmV0dXJuIHRoaXM7dmFyIFA9ay5zY2hlbWUsRD1rLmF1dGhvcml0eSxCPWsucGF0aCxVPWsucXVlcnksRz1rLmZyYWdtZW50O3JldHVybiBQPT09dm9pZCAwP1A9dGhpcy5zY2hlbWU6UD09PW51bGwmJihQPXYpLEQ9PT12b2lkIDA/RD10aGlzLmF1dGhvcml0eTpEPT09bnVsbCYmKEQ9diksQj09PXZvaWQgMD9CPXRoaXMucGF0aDpCPT09bnVsbCYmKEI9diksVT09PXZvaWQgMD9VPXRoaXMucXVlcnk6VT09PW51bGwmJihVPXYpLEc9PT12b2lkIDA/Rz10aGlzLmZyYWdtZW50Okc9PT1udWxsJiYoRz12KSxQPT09dGhpcy5zY2hlbWUmJkQ9PT10aGlzLmF1dGhvcml0eSYmQj09PXRoaXMucGF0aCYmVT09PXRoaXMucXVlcnkmJkc9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IEwoUCxELEIsVSxHKX0sUi5wYXJzZT1mdW5jdGlvbihrLFApe1A9PT12b2lkIDAmJihQPSExKTt2YXIgRD14LmV4ZWMoayk7cmV0dXJuIEQ/bmV3IEwoRFsyXXx8dix3KERbNF18fHYpLHcoRFs1XXx8diksdyhEWzddfHx2KSx3KERbOV18fHYpLFApOm5ldyBMKHYsdix2LHYsdil9LFIuZmlsZT1mdW5jdGlvbihrKXt2YXIgUD12O2lmKGEmJihrPWsucmVwbGFjZSgvXFwvZyxwKSksa1swXT09PXAmJmtbMV09PT1wKXt2YXIgRD1rLmluZGV4T2YocCwyKTtEPT09LTE/KFA9ay5zdWJzdHJpbmcoMiksaz1wKTooUD1rLnN1YnN0cmluZygyLEQpLGs9ay5zdWJzdHJpbmcoRCl8fHApfXJldHVybiBuZXcgTCgiZmlsZSIsUCxrLHYsdil9LFIuZnJvbT1mdW5jdGlvbihrKXt2YXIgUD1uZXcgTChrLnNjaGVtZSxrLmF1dGhvcml0eSxrLnBhdGgsay5xdWVyeSxrLmZyYWdtZW50KTtyZXR1cm4gbShQLCEwKSxQfSxSLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihrKXtyZXR1cm4gaz09PXZvaWQgMCYmKGs9ITEpLE0odGhpcyxrKX0sUi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LFIucmV2aXZlPWZ1bmN0aW9uKGspe2lmKGspe2lmKGsgaW5zdGFuY2VvZiBSKXJldHVybiBrO3ZhciBQPW5ldyBMKGspO3JldHVybiBQLl9mb3JtYXR0ZWQ9ay5leHRlcm5hbCxQLl9mc1BhdGg9ay5fc2VwPT09Yj9rLmZzUGF0aDpudWxsLFB9cmV0dXJuIGt9LFJ9KCksYj1hPzE6dm9pZCAwLEw9ZnVuY3Rpb24oUil7ZnVuY3Rpb24gaygpe3ZhciBQPVIhPT1udWxsJiZSLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gUC5fZm9ybWF0dGVkPW51bGwsUC5fZnNQYXRoPW51bGwsUH1yZXR1cm4gZihrLFIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLnByb3RvdHlwZSwiZnNQYXRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1BKHRoaXMpKSx0aGlzLl9mc1BhdGh9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksay5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oUCl7cmV0dXJuIFA9PT12b2lkIDAmJihQPSExKSxQP00odGhpcywhMCk6KHRoaXMuX2Zvcm1hdHRlZHx8KHRoaXMuX2Zvcm1hdHRlZD1NKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfSxrLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgUD17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoUC5mc1BhdGg9dGhpcy5fZnNQYXRoLFAuX3NlcD1iKSx0aGlzLl9mb3JtYXR0ZWQmJihQLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoUC5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihQLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihQLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKFAucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKFAuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksUH0sa30oeSksUz0oKHU9e30pWzU4XT0iJTNBIix1WzQ3XT0iJTJGIix1WzYzXT0iJTNGIix1WzM1XT0iJTIzIix1WzkxXT0iJTVCIix1WzkzXT0iJTVEIix1WzY0XT0iJTQwIix1WzMzXT0iJTIxIix1WzM2XT0iJTI0Iix1WzM4XT0iJTI2Iix1WzM5XT0iJTI3Iix1WzQwXT0iJTI4Iix1WzQxXT0iJTI5Iix1WzQyXT0iJTJBIix1WzQzXT0iJTJCIix1WzQ0XT0iJTJDIix1WzU5XT0iJTNCIix1WzYxXT0iJTNEIix1WzMyXT0iJTIwIix1KTtmdW5jdGlvbiBfKFIsayl7Zm9yKHZhciBQPXZvaWQgMCxEPS0xLEI9MDtCPFIubGVuZ3RoO0IrKyl7dmFyIFU9Ui5jaGFyQ29kZUF0KEIpO2lmKFU+PTk3JiZVPD0xMjJ8fFU+PTY1JiZVPD05MHx8VT49NDgmJlU8PTU3fHxVPT09NDV8fFU9PT00Nnx8VT09PTk1fHxVPT09MTI2fHxrJiZVPT09NDcpRCE9PS0xJiYoUCs9ZW5jb2RlVVJJQ29tcG9uZW50KFIuc3Vic3RyaW5nKEQsQikpLEQ9LTEpLFAhPT12b2lkIDAmJihQKz1SLmNoYXJBdChCKSk7ZWxzZXtQPT09dm9pZCAwJiYoUD1SLnN1YnN0cigwLEIpKTt2YXIgRz1TW1VdO0chPT12b2lkIDA/KEQhPT0tMSYmKFArPWVuY29kZVVSSUNvbXBvbmVudChSLnN1YnN0cmluZyhELEIpKSxEPS0xKSxQKz1HKTpEPT09LTEmJihEPUIpfX1yZXR1cm4gRCE9PS0xJiYoUCs9ZW5jb2RlVVJJQ29tcG9uZW50KFIuc3Vic3RyaW5nKEQpKSksUCE9PXZvaWQgMD9QOlJ9ZnVuY3Rpb24gTihSKXtmb3IodmFyIGs9dm9pZCAwLFA9MDtQPFIubGVuZ3RoO1ArKyl7dmFyIEQ9Ui5jaGFyQ29kZUF0KFApO0Q9PT0zNXx8RD09PTYzPyhrPT09dm9pZCAwJiYoaz1SLnN1YnN0cigwLFApKSxrKz1TW0RdKTprIT09dm9pZCAwJiYoays9UltQXSl9cmV0dXJuIGshPT12b2lkIDA/azpSfWZ1bmN0aW9uIEEoUixrKXt2YXIgUDtyZXR1cm4gUD1SLmF1dGhvcml0eSYmUi5wYXRoLmxlbmd0aD4xJiZSLnNjaGVtZT09PSJmaWxlIj8iLy8iLmNvbmNhdChSLmF1dGhvcml0eSkuY29uY2F0KFIucGF0aCk6Ui5wYXRoLmNoYXJDb2RlQXQoMCk9PT00NyYmKFIucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmUi5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxSLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJlIucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiZSLnBhdGguY2hhckNvZGVBdCgyKT09PTU4P1IucGF0aFsxXS50b0xvd2VyQ2FzZSgpK1IucGF0aC5zdWJzdHIoMik6Ui5wYXRoLGEmJihQPVAucmVwbGFjZSgvXC8vZywiXFwiKSksUH1mdW5jdGlvbiBNKFIsayl7dmFyIFA9az9OOl8sRD0iIixCPVIuc2NoZW1lLFU9Ui5hdXRob3JpdHksRz1SLnBhdGgsZGU9Ui5xdWVyeSxsZT1SLmZyYWdtZW50O2lmKEImJihEKz1CLEQrPSI6IiksKFV8fEI9PT0iZmlsZSIpJiYoRCs9cCxEKz1wKSxVKXt2YXIgYmU9VS5pbmRleE9mKCJAIik7aWYoYmUhPT0tMSl7dmFyIEV0PVUuc3Vic3RyKDAsYmUpO1U9VS5zdWJzdHIoYmUrMSksKGJlPUV0LmluZGV4T2YoIjoiKSk9PT0tMT9EKz1QKEV0LCExKTooRCs9UChFdC5zdWJzdHIoMCxiZSksITEpLEQrPSI6IixEKz1QKEV0LnN1YnN0cihiZSsxKSwhMSkpLEQrPSJAIn0oYmU9KFU9VS50b0xvd2VyQ2FzZSgpKS5pbmRleE9mKCI6IikpPT09LTE/RCs9UChVLCExKTooRCs9UChVLnN1YnN0cigwLGJlKSwhMSksRCs9VS5zdWJzdHIoYmUpKX1pZihHKXtpZihHLmxlbmd0aD49MyYmRy5jaGFyQ29kZUF0KDApPT09NDcmJkcuY2hhckNvZGVBdCgyKT09PTU4KShPZT1HLmNoYXJDb2RlQXQoMSkpPj02NSYmT2U8PTkwJiYoRz0iLyIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoT2UrMzIpLCI6IikuY29uY2F0KEcuc3Vic3RyKDMpKSk7ZWxzZSBpZihHLmxlbmd0aD49MiYmRy5jaGFyQ29kZUF0KDEpPT09NTgpe3ZhciBPZTsoT2U9Ry5jaGFyQ29kZUF0KDApKT49NjUmJk9lPD05MCYmKEc9IiIuY29uY2F0KFN0cmluZy5mcm9tQ2hhckNvZGUoT2UrMzIpLCI6IikuY29uY2F0KEcuc3Vic3RyKDIpKSl9RCs9UChHLCEwKX1yZXR1cm4gZGUmJihEKz0iPyIsRCs9UChkZSwhMSkpLGxlJiYoRCs9IiMiLEQrPWs/bGU6XyhsZSwhMSkpLER9ZnVuY3Rpb24gSShSKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChSKX1jYXRjaHtyZXR1cm4gUi5sZW5ndGg+Mz9SLnN1YnN0cigwLDMpK0koUi5zdWJzdHIoMykpOlJ9fXZhciBDPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIHcoUil7cmV0dXJuIFIubWF0Y2goQyk/Ui5yZXBsYWNlKEMsZnVuY3Rpb24oayl7cmV0dXJuIEkoayl9KTpSfXZhciBULEY9cyg0NzApLFY9ZnVuY3Rpb24oUixrLFApe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgRCxCPTAsVT1rLmxlbmd0aDtCPFU7QisrKSFEJiZCIGluIGt8fChEfHwoRD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChrLDAsQikpLERbQl09a1tCXSk7cmV0dXJuIFIuY29uY2F0KER8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGspKX0sTz1GLnBvc2l4fHxGOyhmdW5jdGlvbihSKXtSLmpvaW5QYXRoPWZ1bmN0aW9uKGspe2Zvcih2YXIgUD1bXSxEPTE7RDxhcmd1bWVudHMubGVuZ3RoO0QrKylQW0QtMV09YXJndW1lbnRzW0RdO3JldHVybiBrLndpdGgoe3BhdGg6Ty5qb2luLmFwcGx5KE8sVihbay5wYXRoXSxQLCExKSl9KX0sUi5yZXNvbHZlUGF0aD1mdW5jdGlvbihrKXtmb3IodmFyIFA9W10sRD0xO0Q8YXJndW1lbnRzLmxlbmd0aDtEKyspUFtELTFdPWFyZ3VtZW50c1tEXTt2YXIgQj1rLnBhdGh8fCIvIjtyZXR1cm4gay53aXRoKHtwYXRoOk8ucmVzb2x2ZS5hcHBseShPLFYoW0JdLFAsITEpKX0pfSxSLmRpcm5hbWU9ZnVuY3Rpb24oayl7dmFyIFA9Ty5kaXJuYW1lKGsucGF0aCk7cmV0dXJuIFAubGVuZ3RoPT09MSYmUC5jaGFyQ29kZUF0KDApPT09NDY/azprLndpdGgoe3BhdGg6UH0pfSxSLmJhc2VuYW1lPWZ1bmN0aW9uKGspe3JldHVybiBPLmJhc2VuYW1lKGsucGF0aCl9LFIuZXh0bmFtZT1mdW5jdGlvbihrKXtyZXR1cm4gTy5leHRuYW1lKGsucGF0aCl9fSkoVHx8KFQ9e30pKX19LHQ9e307ZnVuY3Rpb24gbihyKXtpZih0W3JdKXJldHVybiB0W3JdLmV4cG9ydHM7dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfXJldHVybiBuLmQ9KHIsaSk9Pntmb3IodmFyIHMgaW4gaSluLm8oaSxzKSYmIW4ubyhyLHMpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixzLHtlbnVtZXJhYmxlOiEwLGdldDppW3NdfSl9LG4ubz0ocixpKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsaSksbi5yPXI9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuKDQ0Nyl9KSgpO3ZhcntVUkk6a3QsVXRpbHM6Z2N9PUxhO2Z1bmN0aW9uIFV1KGUsdCl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7Zm9yKHZhciBuPVN0cmluZyhlKSxyPSIiLGk9dD8hIXQuZXh0ZW5kZWQ6ITEscz10PyEhdC5nbG9ic3RhcjohMSxhPSExLG89dCYmdHlwZW9mIHQuZmxhZ3M9PSJzdHJpbmciP3QuZmxhZ3M6IiIsbCx1PTAsZj1uLmxlbmd0aDt1PGY7dSsrKXN3aXRjaChsPW5bdV0sbCl7Y2FzZSIvIjpjYXNlIiQiOmNhc2UiXiI6Y2FzZSIrIjpjYXNlIi4iOmNhc2UiKCI6Y2FzZSIpIjpjYXNlIj0iOmNhc2UiISI6Y2FzZSJ8IjpyKz0iXFwiK2w7YnJlYWs7Y2FzZSI/IjppZihpKXtyKz0iLiI7YnJlYWt9Y2FzZSJbIjpjYXNlIl0iOmlmKGkpe3IrPWw7YnJlYWt9Y2FzZSJ7IjppZihpKXthPSEwLHIrPSIoIjticmVha31jYXNlIn0iOmlmKGkpe2E9ITEscis9IikiO2JyZWFrfWNhc2UiLCI6aWYoYSl7cis9InwiO2JyZWFrfXIrPSJcXCIrbDticmVhaztjYXNlIioiOmZvcih2YXIgaD1uW3UtMV0sZD0xO25bdSsxXT09PSIqIjspZCsrLHUrKzt2YXIgZz1uW3UrMV07aWYoIXMpcis9Ii4qIjtlbHNle3ZhciBtPWQ+MSYmKGg9PT0iLyJ8fGg9PT12b2lkIDB8fGg9PT0ieyJ8fGg9PT0iLCIpJiYoZz09PSIvInx8Zz09PXZvaWQgMHx8Zz09PSIsInx8Zz09PSJ9Iik7bT8oZz09PSIvIj91Kys6aD09PSIvIiYmci5lbmRzV2l0aCgiXFwvIikmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtMikpLHIrPSIoKD86W14vXSooPzovfCQpKSopIik6cis9IihbXi9dKikifWJyZWFrO2RlZmF1bHQ6cis9bH1yZXR1cm4oIW98fCF+by5pbmRleE9mKCJnIikpJiYocj0iXiIrcisiJCIpLG5ldyBSZWdFeHAocixvKX12YXIgVmU9WHQoKSwkdT0iISIsV3U9Ii8iLEh1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3RoaXMuZ2xvYldyYXBwZXJzPVtdO3RyeXtmb3IodmFyIHI9MCxpPXQ7cjxpLmxlbmd0aDtyKyspe3ZhciBzPWlbcl0sYT1zWzBdIT09JHU7YXx8KHM9cy5zdWJzdHJpbmcoMSkpLHMubGVuZ3RoPjAmJihzWzBdPT09V3UmJihzPXMuc3Vic3RyaW5nKDEpKSx0aGlzLmdsb2JXcmFwcGVycy5wdXNoKHtyZWdleHA6VXUoIioqLyIrcyx7ZXh0ZW5kZWQ6ITAsZ2xvYnN0YXI6ITB9KSxpbmNsdWRlOmF9KSl9dGhpcy51cmlzPW59Y2F0Y2h7dGhpcy5nbG9iV3JhcHBlcnMubGVuZ3RoPTAsdGhpcy51cmlzPVtdfX1yZXR1cm4gZS5wcm90b3R5cGUubWF0Y2hlc1BhdHRlcm49ZnVuY3Rpb24odCl7Zm9yKHZhciBuPSExLHI9MCxpPXRoaXMuZ2xvYldyYXBwZXJzO3I8aS5sZW5ndGg7cisrKXt2YXIgcz1pW3JdLGE9cy5yZWdleHAsbz1zLmluY2x1ZGU7YS50ZXN0KHQpJiYobj1vKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuZ2V0VVJJcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVyaXN9LGV9KCksenU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyKXt0aGlzLnNlcnZpY2U9dCx0aGlzLnVyaT1uLHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5hbmNob3JzPXZvaWQgMCxyJiYodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5wcm9taXNlLnJlc29sdmUobmV3IFF0KHIpKSl9cmV0dXJuIGUucHJvdG90eXBlLmdldFVucmVzb2x2ZWRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJlc29sdmVkU2NoZW1hfHwodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5sb2FkU2NoZW1hKHRoaXMudXJpKSksdGhpcy51bnJlc29sdmVkU2NoZW1hfSxlLnByb3RvdHlwZS5nZXRSZXNvbHZlZFNjaGVtYT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnJlc29sdmVkU2NoZW1hPXRoaXMuZ2V0VW5yZXNvbHZlZFNjaGVtYSgpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHQuc2VydmljZS5yZXNvbHZlU2NoZW1hQ29udGVudChuLHQpfSkpLHRoaXMucmVzb2x2ZWRTY2hlbWF9LGUucHJvdG90eXBlLmNsZWFyU2NoZW1hPWZ1bmN0aW9uKCl7dmFyIHQ9ISF0aGlzLnVucmVzb2x2ZWRTY2hlbWE7cmV0dXJuIHRoaXMucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMudW5yZXNvbHZlZFNjaGVtYT12b2lkIDAsdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKSx0aGlzLmFuY2hvcnM9dm9pZCAwLHR9LGV9KCksUXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7bj09PXZvaWQgMCYmKG49W10pLHRoaXMuc2NoZW1hPXQsdGhpcy5lcnJvcnM9bn1yZXR1cm4gZX0oKSxOYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXtuPT09dm9pZCAwJiYobj1bXSksdGhpcy5zY2hlbWE9dCx0aGlzLmVycm9ycz1ufXJldHVybiBlLnByb3RvdHlwZS5nZXRTZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZSh0LHRoaXMuc2NoZW1hKTtpZihuKXJldHVybiBwZShuKX0sZS5wcm90b3R5cGUuZ2V0U2VjdGlvblJlY3Vyc2l2ZT1mdW5jdGlvbih0LG4pe2lmKCFufHx0eXBlb2Ygbj09ImJvb2xlYW4ifHx0Lmxlbmd0aD09PTApcmV0dXJuIG47dmFyIHI9dC5zaGlmdCgpO2lmKG4ucHJvcGVydGllcyYmdHlwZW9mIG4ucHJvcGVydGllc1tyXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKHQsbi5wcm9wZXJ0aWVzW3JdKTtpZihuLnBhdHRlcm5Qcm9wZXJ0aWVzKWZvcih2YXIgaT0wLHM9T2JqZWN0LmtleXMobi5wYXR0ZXJuUHJvcGVydGllcyk7aTxzLmxlbmd0aDtpKyspe3ZhciBhPXNbaV0sbz1tbihhKTtpZihvPy50ZXN0KHIpKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUodCxuLnBhdHRlcm5Qcm9wZXJ0aWVzW2FdKX1lbHNle2lmKHR5cGVvZiBuLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT0ib2JqZWN0IilyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKHQsbi5hZGRpdGlvbmFsUHJvcGVydGllcyk7aWYoci5tYXRjaCgiWzAtOV0rIikpe2lmKEFycmF5LmlzQXJyYXkobi5pdGVtcykpe3ZhciBsPXBhcnNlSW50KHIsMTApO2lmKCFpc05hTihsKSYmbi5pdGVtc1tsXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKHQsbi5pdGVtc1tsXSl9ZWxzZSBpZihuLml0ZW1zKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUodCxuLml0ZW1zKX19fSxlfSgpLEd1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7dGhpcy5jb250ZXh0U2VydmljZT1uLHRoaXMucmVxdWVzdFNlcnZpY2U9dCx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcj1yfHxQcm9taXNlLHRoaXMuY2FsbE9uRGlzcG9zZT1bXSx0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXM9e30sdGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnM9W10sdGhpcy5zY2hlbWFzQnlJZD17fSx0aGlzLmZpbGVQYXR0ZXJuQXNzb2NpYXRpb25zPVtdLHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHM9e319cmV0dXJuIGUucHJvdG90eXBlLmdldFJlZ2lzdGVyZWRTY2hlbWFJZHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHMpLmZpbHRlcihmdW5jdGlvbihuKXt2YXIgcj1rdC5wYXJzZShuKS5zY2hlbWU7cmV0dXJuIHIhPT0ic2NoZW1hc2VydmljZSImJighdHx8dChyKSl9KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwcm9taXNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuY2FsbE9uRGlzcG9zZS5sZW5ndGg+MDspdGhpcy5jYWxsT25EaXNwb3NlLnBvcCgpKCl9LGUucHJvdG90eXBlLm9uUmVzb3VyY2VDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIG49dGhpczt0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMDt2YXIgcj0hMTt0PXR0KHQpO2Zvcih2YXIgaT1bdF0scz1PYmplY3Qua2V5cyh0aGlzLnNjaGVtYXNCeUlkKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG4uc2NoZW1hc0J5SWRbdV19KTtpLmxlbmd0aDspZm9yKHZhciBhPWkucG9wKCksbz0wO288cy5sZW5ndGg7bysrKXt2YXIgbD1zW29dO2wmJihsLnVyaT09PWF8fGwuZGVwZW5kZW5jaWVzLmhhcyhhKSkmJihsLnVyaSE9PWEmJmkucHVzaChsLnVyaSksbC5jbGVhclNjaGVtYSgpJiYocj0hMCksc1tvXT12b2lkIDApfXJldHVybiByfSxlLnByb3RvdHlwZS5zZXRTY2hlbWFDb250cmlidXRpb25zPWZ1bmN0aW9uKHQpe2lmKHQuc2NoZW1hcyl7dmFyIG49dC5zY2hlbWFzO2Zvcih2YXIgciBpbiBuKXt2YXIgaT10dChyKTt0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbaV09dGhpcy5hZGRTY2hlbWFIYW5kbGUoaSxuW3JdKX19aWYoQXJyYXkuaXNBcnJheSh0LnNjaGVtYUFzc29jaWF0aW9ucykpZm9yKHZhciBzPXQuc2NoZW1hQXNzb2NpYXRpb25zLGE9MCxvPXM7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV0sdT1sLnVyaXMubWFwKHR0KSxmPXRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbihsLnBhdHRlcm4sdSk7dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnMucHVzaChmKX19LGUucHJvdG90eXBlLmFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbih0LG4pe3ZhciByPW5ldyB6dSh0aGlzLHQsbik7cmV0dXJuIHRoaXMuc2NoZW1hc0J5SWRbdF09cixyfSxlLnByb3RvdHlwZS5nZXRPckFkZFNjaGVtYUhhbmRsZT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLnNjaGVtYXNCeUlkW3RdfHx0aGlzLmFkZFNjaGVtYUhhbmRsZSh0LG4pfSxlLnByb3RvdHlwZS5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uPWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IEh1KHQsbik7cmV0dXJuIHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChyKSxyfSxlLnByb3RvdHlwZS5yZWdpc3RlckV4dGVybmFsU2NoZW1hPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT10dCh0KTtyZXR1cm4gdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1tpXT0hMCx0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlPXZvaWQgMCxuJiZ0aGlzLmFkZEZpbGVQYXR0ZXJuQXNzb2NpYXRpb24obixbaV0pLHI/dGhpcy5hZGRTY2hlbWFIYW5kbGUoaSxyKTp0aGlzLmdldE9yQWRkU2NoZW1hSGFuZGxlKGkpfSxlLnByb3RvdHlwZS5jbGVhckV4dGVybmFsU2NoZW1hcz1mdW5jdGlvbigpe3RoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9LHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwO2Zvcih2YXIgdCBpbiB0aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXMpdGhpcy5zY2hlbWFzQnlJZFt0XT10aGlzLmNvbnRyaWJ1dGlvblNjaGVtYXNbdF0sdGhpcy5yZWdpc3RlcmVkU2NoZW1hc0lkc1t0XT0hMDtmb3IodmFyIG49MCxyPXRoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO3RoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChpKX19LGUucHJvdG90eXBlLmdldFJlc29sdmVkU2NoZW1hPWZ1bmN0aW9uKHQpe3ZhciBuPXR0KHQpLHI9dGhpcy5zY2hlbWFzQnlJZFtuXTtyZXR1cm4gcj9yLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKX0sZS5wcm90b3R5cGUubG9hZFNjaGVtYT1mdW5jdGlvbih0KXtpZighdGhpcy5yZXF1ZXN0U2VydmljZSl7dmFyIG49VmUoImpzb24uc2NoZW1hLm5vcmVxdWVzdHNlcnZpY2UiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9Jy4gTm8gc2NoZW1hIHJlcXVlc3Qgc2VydmljZSBhdmFpbGFibGUiLEFuKHQpKTtyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IFF0KHt9LFtuXSkpfXJldHVybiB0aGlzLnJlcXVlc3RTZXJ2aWNlKHQpLnRoZW4oZnVuY3Rpb24ocil7aWYoIXIpe3ZhciBpPVZlKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogTm8gY29udGVudC4iLEFuKHQpKTtyZXR1cm4gbmV3IFF0KHt9LFtpXSl9dmFyIHM9e30sYT1bXTtzPWN1KHIsYSk7dmFyIG89YS5sZW5ndGg/W1ZlKCJqc29uLnNjaGVtYS5pbnZhbGlkRm9ybWF0IiwiVW5hYmxlIHRvIHBhcnNlIGNvbnRlbnQgZnJvbSAnezB9JzogUGFyc2UgZXJyb3IgYXQgb2Zmc2V0IHsxfS4iLEFuKHQpLGFbMF0ub2Zmc2V0KV06W107cmV0dXJuIG5ldyBRdChzLG8pfSxmdW5jdGlvbihyKXt2YXIgaT1yLnRvU3RyaW5nKCkscz1yLnRvU3RyaW5nKCkuc3BsaXQoIkVycm9yOiAiKTtyZXR1cm4gcy5sZW5ndGg+MSYmKGk9c1sxXSksVXQoaSwiLiIpJiYoaT1pLnN1YnN0cigwLGkubGVuZ3RoLTEpKSxuZXcgUXQoe30sW1ZlKCJqc29uLnNjaGVtYS5ub2NvbnRlbnQiLCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogezF9LiIsQW4odCksaSldKX0pfSxlLnByb3RvdHlwZS5yZXNvbHZlU2NoZW1hQ29udGVudD1mdW5jdGlvbih0LG4pe3ZhciByPXRoaXMsaT10LmVycm9ycy5zbGljZSgwKSxzPXQuc2NoZW1hO2lmKHMuJHNjaGVtYSl7dmFyIGE9dHQocy4kc2NoZW1hKTtpZihhPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDMvc2NoZW1hIilyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IE5hKHt9LFtWZSgianNvbi5zY2hlbWEuZHJhZnQwMy5ub3RzdXBwb3J0ZWQiLCJEcmFmdC0wMyBzY2hlbWFzIGFyZSBub3Qgc3VwcG9ydGVkLiIpXSkpO2E9PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9zY2hlbWEiP2kucHVzaChWZSgianNvbi5zY2hlbWEuZHJhZnQyMDE5MDkubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAxOS0wOSBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSk6YT09PSJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSImJmkucHVzaChWZSgianNvbi5zY2hlbWEuZHJhZnQyMDIwMTIubm90c3VwcG9ydGVkIiwiRHJhZnQgMjAyMC0xMiBzY2hlbWFzIGFyZSBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4iKSl9dmFyIG89dGhpcy5jb250ZXh0U2VydmljZSxsPWZ1bmN0aW9uKHYscCl7cD1kZWNvZGVVUklDb21wb25lbnQocCk7dmFyIHg9djtyZXR1cm4gcFswXT09PSIvIiYmKHA9cC5zdWJzdHJpbmcoMSkpLHAuc3BsaXQoIi8iKS5zb21lKGZ1bmN0aW9uKHkpe3JldHVybiB5PXkucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKSx4PXhbeV0sIXh9KSx4fSx1PWZ1bmN0aW9uKHYscCx4KXtyZXR1cm4gcC5hbmNob3JzfHwocC5hbmNob3JzPW0odikpLHAuYW5jaG9ycy5nZXQoeCl9LGY9ZnVuY3Rpb24odixwKXtmb3IodmFyIHggaW4gcClwLmhhc093blByb3BlcnR5KHgpJiYhdi5oYXNPd25Qcm9wZXJ0eSh4KSYmeCE9PSJpZCImJnghPT0iJGlkIiYmKHZbeF09cFt4XSl9LGg9ZnVuY3Rpb24odixwLHgseSl7dmFyIGI7eT09PXZvaWQgMHx8eS5sZW5ndGg9PT0wP2I9cDp5LmNoYXJBdCgwKT09PSIvIj9iPWwocCx5KTpiPXUocCx4LHkpLGI/Zih2LGIpOmkucHVzaChWZSgianNvbi5zY2hlbWEuaW52YWxpZGlkIiwiJHJlZiAnezB9JyBpbiAnezF9JyBjYW4gbm90IGJlIHJlc29sdmVkLiIseSx4LnVyaSkpfSxkPWZ1bmN0aW9uKHYscCx4LHkpe28mJiEvXltBLVphLXpdW0EtWmEtejAtOStcLS4rXSo6XC9cLy4qLy50ZXN0KHApJiYocD1vLnJlc29sdmVSZWxhdGl2ZVBhdGgocCx5LnVyaSkpLHA9dHQocCk7dmFyIGI9ci5nZXRPckFkZFNjaGVtYUhhbmRsZShwKTtyZXR1cm4gYi5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbihmdW5jdGlvbihMKXtpZih5LmRlcGVuZGVuY2llcy5hZGQocCksTC5lcnJvcnMubGVuZ3RoKXt2YXIgUz14P3ArIiMiK3g6cDtpLnB1c2goVmUoImpzb24uc2NoZW1hLnByb2JsZW1sb2FkaW5ncmVmIiwiUHJvYmxlbXMgbG9hZGluZyByZWZlcmVuY2UgJ3swfSc6IHsxfSIsUyxMLmVycm9yc1swXSkpfXJldHVybiBoKHYsTC5zY2hlbWEsYix4KSxnKHYsTC5zY2hlbWEsYil9KX0sZz1mdW5jdGlvbih2LHAseCl7dmFyIHk9W107cmV0dXJuIHIudHJhdmVyc2VOb2Rlcyh2LGZ1bmN0aW9uKGIpe2Zvcih2YXIgTD1uZXcgU2V0O2IuJHJlZjspe3ZhciBTPWIuJHJlZixfPVMuc3BsaXQoIiMiLDIpO2lmKGRlbGV0ZSBiLiRyZWYsX1swXS5sZW5ndGg+MCl7eS5wdXNoKGQoYixfWzBdLF9bMV0seCkpO3JldHVybn1lbHNlIGlmKCFMLmhhcyhTKSl7dmFyIE49X1sxXTtoKGIscCx4LE4pLEwuYWRkKFMpfX19KSxyLnByb21pc2UuYWxsKHkpfSxtPWZ1bmN0aW9uKHYpe3ZhciBwPW5ldyBNYXA7cmV0dXJuIHIudHJhdmVyc2VOb2Rlcyh2LGZ1bmN0aW9uKHgpe3ZhciB5PXguJGlkfHx4LmlkO2lmKHR5cGVvZiB5PT0ic3RyaW5nIiYmeS5jaGFyQXQoMCk9PT0iIyIpe3ZhciBiPXkuc3Vic3RyaW5nKDEpO3AuaGFzKGIpP2kucHVzaChWZSgianNvbi5zY2hlbWEuZHVwbGljYXRlaWQiLCJEdXBsaWNhdGUgaWQgZGVjbGFyYXRpb246ICd7MH0nIix5KSk6cC5zZXQoYix4KX19KSxwfTtyZXR1cm4gZyhzLHMsbikudGhlbihmdW5jdGlvbih2KXtyZXR1cm4gbmV3IE5hKHMsaSl9KX0sZS5wcm90b3R5cGUudHJhdmVyc2VOb2Rlcz1mdW5jdGlvbih0LG4pe2lmKCF0fHx0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtmb3IodmFyIHI9bmV3IFNldCxpPWZ1bmN0aW9uKCl7Zm9yKHZhciB1PVtdLGY9MDtmPGFyZ3VtZW50cy5sZW5ndGg7ZisrKXVbZl09YXJndW1lbnRzW2ZdO2Zvcih2YXIgaD0wLGQ9dTtoPGQubGVuZ3RoO2grKyl7dmFyIGc9ZFtoXTt0eXBlb2YgZz09Im9iamVjdCImJm8ucHVzaChnKX19LHM9ZnVuY3Rpb24oKXtmb3IodmFyIHU9W10sZj0wO2Y8YXJndW1lbnRzLmxlbmd0aDtmKyspdVtmXT1hcmd1bWVudHNbZl07Zm9yKHZhciBoPTAsZD11O2g8ZC5sZW5ndGg7aCsrKXt2YXIgZz1kW2hdO2lmKHR5cGVvZiBnPT0ib2JqZWN0Iilmb3IodmFyIG0gaW4gZyl7dmFyIHY9bSxwPWdbdl07dHlwZW9mIHA9PSJvYmplY3QiJiZvLnB1c2gocCl9fX0sYT1mdW5jdGlvbigpe2Zvcih2YXIgdT1bXSxmPTA7Zjxhcmd1bWVudHMubGVuZ3RoO2YrKyl1W2ZdPWFyZ3VtZW50c1tmXTtmb3IodmFyIGg9MCxkPXU7aDxkLmxlbmd0aDtoKyspe3ZhciBnPWRbaF07aWYoQXJyYXkuaXNBcnJheShnKSlmb3IodmFyIG09MCx2PWc7bTx2Lmxlbmd0aDttKyspe3ZhciBwPXZbbV07dHlwZW9mIHA9PSJvYmplY3QiJiZvLnB1c2gocCl9fX0sbz1bdF0sbD1vLnBvcCgpO2w7KXIuaGFzKGwpfHwoci5hZGQobCksbihsKSxpKGwuaXRlbXMsbC5hZGRpdGlvbmFsSXRlbXMsbC5hZGRpdGlvbmFsUHJvcGVydGllcyxsLm5vdCxsLmNvbnRhaW5zLGwucHJvcGVydHlOYW1lcyxsLmlmLGwudGhlbixsLmVsc2UpLHMobC5kZWZpbml0aW9ucyxsLnByb3BlcnRpZXMsbC5wYXR0ZXJuUHJvcGVydGllcyxsLmRlcGVuZGVuY2llcyksYShsLmFueU9mLGwuYWxsT2YsbC5vbmVPZixsLml0ZW1zKSksbD1vLnBvcCgpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGcm9tUHJvcGVydHk9ZnVuY3Rpb24odCxuKXt2YXIgcixpO2lmKCgocj1uLnJvb3QpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci50eXBlKT09PSJvYmplY3QiKWZvcih2YXIgcz0wLGE9bi5yb290LnByb3BlcnRpZXM7czxhLmxlbmd0aDtzKyspe3ZhciBvPWFbc107aWYoby5rZXlOb2RlLnZhbHVlPT09IiRzY2hlbWEiJiYoKGk9by52YWx1ZU5vZGUpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS50eXBlKT09PSJzdHJpbmciKXt2YXIgbD1vLnZhbHVlTm9kZS52YWx1ZTtyZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZSYmIS9eXHdbXHdcZCsuLV0qOi8udGVzdChsKSYmKGw9dGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlUmVsYXRpdmVQYXRoKGwsdCkpLGx9fX0sZS5wcm90b3R5cGUuZ2V0QXNzb2NpYXRlZFNjaGVtYXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1bXSxpPVh1KHQpLHM9MCxhPXRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnM7czxhLmxlbmd0aDtzKyspe3ZhciBvPWFbc107aWYoby5tYXRjaGVzUGF0dGVybihpKSlmb3IodmFyIGw9MCx1PW8uZ2V0VVJJcygpO2w8dS5sZW5ndGg7bCsrKXt2YXIgZj11W2xdO25bZl18fChyLnB1c2goZiksbltmXT0hMCl9fXJldHVybiByfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2U9ZnVuY3Rpb24odCxuKXt2YXIgcj1uJiZ0aGlzLmdldFNjaGVtYUZyb21Qcm9wZXJ0eSh0LG4pO3JldHVybiByP1tyXTp0aGlzLmdldEFzc29jaWF0ZWRTY2hlbWFzKHQpfSxlLnByb3RvdHlwZS5nZXRTY2hlbWFGb3JSZXNvdXJjZT1mdW5jdGlvbih0LG4pe2lmKG4pe3ZhciByPXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KHQsbik7aWYocil7dmFyIGk9dHQocik7cmV0dXJuIHRoaXMuZ2V0T3JBZGRTY2hlbWFIYW5kbGUoaSkuZ2V0UmVzb2x2ZWRTY2hlbWEoKX19aWYodGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZSYmdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvdXJjZT09PXQpcmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2UucmVzb2x2ZWRTY2hlbWE7dmFyIHM9dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyh0KSxhPXMubGVuZ3RoPjA/dGhpcy5jcmVhdGVDb21iaW5lZFNjaGVtYSh0LHMpLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKTtyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT17cmVzb3VyY2U6dCxyZXNvbHZlZFNjaGVtYTphfSxhfSxlLnByb3RvdHlwZS5jcmVhdGVDb21iaW5lZFNjaGVtYT1mdW5jdGlvbih0LG4pe2lmKG4ubGVuZ3RoPT09MSlyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShuWzBdKTt2YXIgcj0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KHQpLGk9e2FsbE9mOm4ubWFwKGZ1bmN0aW9uKHMpe3JldHVybnskcmVmOnN9fSl9O3JldHVybiB0aGlzLmFkZFNjaGVtYUhhbmRsZShyLGkpfSxlLnByb3RvdHlwZS5nZXRNYXRjaGluZ1NjaGVtYXM9ZnVuY3Rpb24odCxuLHIpe2lmKHIpe3ZhciBpPXIuaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvbWF0Y2hpbmdTY2hlbWFzLyIrSnUrKyxzPXRoaXMuYWRkU2NoZW1hSGFuZGxlKGkscik7cmV0dXJuIHMuZ2V0UmVzb2x2ZWRTY2hlbWEoKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBuLmdldE1hdGNoaW5nU2NoZW1hcyhhLnNjaGVtYSkuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiFvLmludmVydGVkfSl9KX1yZXR1cm4gdGhpcy5nZXRTY2hlbWFGb3JSZXNvdXJjZSh0LnVyaSxuKS50aGVuKGZ1bmN0aW9uKGEpe3JldHVybiBhP24uZ2V0TWF0Y2hpbmdTY2hlbWFzKGEuc2NoZW1hKS5maWx0ZXIoZnVuY3Rpb24obyl7cmV0dXJuIW8uaW52ZXJ0ZWR9KTpbXX0pfSxlfSgpLEp1PTA7ZnVuY3Rpb24gdHQoZSl7dHJ5e3JldHVybiBrdC5wYXJzZShlKS50b1N0cmluZyghMCl9Y2F0Y2h7cmV0dXJuIGV9fWZ1bmN0aW9uIFh1KGUpe3RyeXtyZXR1cm4ga3QucGFyc2UoZSkud2l0aCh7ZnJhZ21lbnQ6bnVsbCxxdWVyeTpudWxsfSkudG9TdHJpbmcoITApfWNhdGNoe3JldHVybiBlfX1mdW5jdGlvbiBBbihlKXt0cnl7dmFyIHQ9a3QucGFyc2UoZSk7aWYodC5zY2hlbWU9PT0iZmlsZSIpcmV0dXJuIHQuZnNQYXRofWNhdGNoe31yZXR1cm4gZX1mdW5jdGlvbiBRdShlLHQpe3ZhciBuPVtdLHI9W10saT1bXSxzPS0xLGE9TnQoZS5nZXRUZXh0KCksITEpLG89YS5zY2FuKCk7ZnVuY3Rpb24gbChJKXtuLnB1c2goSSksci5wdXNoKGkubGVuZ3RoKX1mb3IoO28hPT0xNzspe3N3aXRjaChvKXtjYXNlIDE6Y2FzZSAzOnt2YXIgdT1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLGY9e3N0YXJ0TGluZTp1LGVuZExpbmU6dSxraW5kOm89PT0xPyJvYmplY3QiOiJhcnJheSJ9O2kucHVzaChmKTticmVha31jYXNlIDI6Y2FzZSA0Ont2YXIgaD1vPT09Mj8ib2JqZWN0IjoiYXJyYXkiO2lmKGkubGVuZ3RoPjAmJmlbaS5sZW5ndGgtMV0ua2luZD09PWgpe3ZhciBmPWkucG9wKCksZD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lO2YmJmQ+Zi5zdGFydExpbmUrMSYmcyE9PWYuc3RhcnRMaW5lJiYoZi5lbmRMaW5lPWQtMSxsKGYpLHM9Zi5zdGFydExpbmUpfWJyZWFrfWNhc2UgMTM6e3ZhciB1PWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUsZz1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpK2EuZ2V0VG9rZW5MZW5ndGgoKSkubGluZTthLmdldFRva2VuRXJyb3IoKT09PTEmJnUrMTxlLmxpbmVDb3VudD9hLnNldFBvc2l0aW9uKGUub2Zmc2V0QXQoTWUuY3JlYXRlKHUrMSwwKSkpOnU8ZyYmKGwoe3N0YXJ0TGluZTp1LGVuZExpbmU6ZyxraW5kOld0LkNvbW1lbnR9KSxzPXUpO2JyZWFrfWNhc2UgMTI6e3ZhciBtPWUuZ2V0VGV4dCgpLnN1YnN0cihhLmdldFRva2VuT2Zmc2V0KCksYS5nZXRUb2tlbkxlbmd0aCgpKSx2PW0ubWF0Y2goL15cL1wvXHMqIyhyZWdpb25cYil8KGVuZHJlZ2lvblxiKS8pO2lmKHYpe3ZhciBkPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmU7aWYodlsxXSl7dmFyIGY9e3N0YXJ0TGluZTpkLGVuZExpbmU6ZCxraW5kOld0LlJlZ2lvbn07aS5wdXNoKGYpfWVsc2V7Zm9yKHZhciBwPWkubGVuZ3RoLTE7cD49MCYmaVtwXS5raW5kIT09V3QuUmVnaW9uOylwLS07aWYocD49MCl7dmFyIGY9aVtwXTtpLmxlbmd0aD1wLGQ+Zi5zdGFydExpbmUmJnMhPT1mLnN0YXJ0TGluZSYmKGYuZW5kTGluZT1kLGwoZikscz1mLnN0YXJ0TGluZSl9fX1icmVha319bz1hLnNjYW4oKX12YXIgeD10JiZ0LnJhbmdlTGltaXQ7aWYodHlwZW9mIHghPSJudW1iZXIifHxuLmxlbmd0aDw9eClyZXR1cm4gbjt0JiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkKGUudXJpKTtmb3IodmFyIHk9W10sYj0wLEw9cjtiPEwubGVuZ3RoO2IrKyl7dmFyIFM9TFtiXTtTPDMwJiYoeVtTXT0oeVtTXXx8MCkrMSl9Zm9yKHZhciBfPTAsTj0wLHA9MDtwPHkubGVuZ3RoO3ArKyl7dmFyIEE9eVtwXTtpZihBKXtpZihBK18+eCl7Tj1wO2JyZWFrfV8rPUF9fWZvcih2YXIgTT1bXSxwPTA7cDxuLmxlbmd0aDtwKyspe3ZhciBTPXJbcF07dHlwZW9mIFM9PSJudW1iZXIiJiYoUzxOfHxTPT09TiYmXysrPHgpJiZNLnB1c2gobltwXSl9cmV0dXJuIE19ZnVuY3Rpb24gWnUoZSx0LG4pe2Z1bmN0aW9uIHIobyl7Zm9yKHZhciBsPWUub2Zmc2V0QXQobyksdT1uLmdldE5vZGVGcm9tT2Zmc2V0KGwsITApLGY9W107dTspe3N3aXRjaCh1LnR5cGUpe2Nhc2Uic3RyaW5nIjpjYXNlIm9iamVjdCI6Y2FzZSJhcnJheSI6dmFyIGg9dS5vZmZzZXQrMSxkPXUub2Zmc2V0K3UubGVuZ3RoLTE7aDxkJiZsPj1oJiZsPD1kJiZmLnB1c2goaShoLGQpKSxmLnB1c2goaSh1Lm9mZnNldCx1Lm9mZnNldCt1Lmxlbmd0aCkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOmNhc2UibnVsbCI6Y2FzZSJwcm9wZXJ0eSI6Zi5wdXNoKGkodS5vZmZzZXQsdS5vZmZzZXQrdS5sZW5ndGgpKTticmVha31pZih1LnR5cGU9PT0icHJvcGVydHkifHx1LnBhcmVudCYmdS5wYXJlbnQudHlwZT09PSJhcnJheSIpe3ZhciBnPWEodS5vZmZzZXQrdS5sZW5ndGgsNSk7ZyE9PS0xJiZmLnB1c2goaSh1Lm9mZnNldCxnKSl9dT11LnBhcmVudH1mb3IodmFyIG09dm9pZCAwLHY9Zi5sZW5ndGgtMTt2Pj0wO3YtLSltPXduLmNyZWF0ZShmW3ZdLG0pO3JldHVybiBtfHwobT13bi5jcmVhdGUoWC5jcmVhdGUobyxvKSkpLG19ZnVuY3Rpb24gaShvLGwpe3JldHVybiBYLmNyZWF0ZShlLnBvc2l0aW9uQXQobyksZS5wb3NpdGlvbkF0KGwpKX12YXIgcz1OdChlLmdldFRleHQoKSwhMCk7ZnVuY3Rpb24gYShvLGwpe3Muc2V0UG9zaXRpb24obyk7dmFyIHU9cy5zY2FuKCk7cmV0dXJuIHU9PT1sP3MuZ2V0VG9rZW5PZmZzZXQoKStzLmdldFRva2VuTGVuZ3RoKCk6LTF9cmV0dXJuIHQubWFwKHIpfWZ1bmN0aW9uIFl1KGUsdCl7dmFyIG49W107cmV0dXJuIHQudmlzaXQoZnVuY3Rpb24ocil7dmFyIGk7aWYoci50eXBlPT09InByb3BlcnR5IiYmci5rZXlOb2RlLnZhbHVlPT09IiRyZWYiJiYoKGk9ci52YWx1ZU5vZGUpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS50eXBlKT09PSJzdHJpbmciKXt2YXIgcz1yLnZhbHVlTm9kZS52YWx1ZSxhPWVjKHQscyk7aWYoYSl7dmFyIG89ZS5wb3NpdGlvbkF0KGEub2Zmc2V0KTtuLnB1c2goe3RhcmdldDoiIi5jb25jYXQoZS51cmksIiMiKS5jb25jYXQoby5saW5lKzEsIiwiKS5jb25jYXQoby5jaGFyYWN0ZXIrMSkscmFuZ2U6S3UoZSxyLnZhbHVlTm9kZSl9KX19cmV0dXJuITB9KSxQcm9taXNlLnJlc29sdmUobil9ZnVuY3Rpb24gS3UoZSx0KXtyZXR1cm4gWC5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KzEpLGUucG9zaXRpb25BdCh0Lm9mZnNldCt0Lmxlbmd0aC0xKSl9ZnVuY3Rpb24gZWMoZSx0KXt2YXIgbj10Yyh0KTtyZXR1cm4gbj9NcihuLGUucm9vdCk6bnVsbH1mdW5jdGlvbiBNcihlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdDt2YXIgbj1lLnNoaWZ0KCk7aWYodCYmdC50eXBlPT09Im9iamVjdCIpe3ZhciByPXQucHJvcGVydGllcy5maW5kKGZ1bmN0aW9uKGEpe3JldHVybiBhLmtleU5vZGUudmFsdWU9PT1ufSk7cmV0dXJuIHI/TXIoZSxyLnZhbHVlTm9kZSk6bnVsbH1lbHNlIGlmKHQmJnQudHlwZT09PSJhcnJheSImJm4ubWF0Y2goL14oMHxbMS05XVswLTldKikkLykpe3ZhciBpPU51bWJlci5wYXJzZUludChuKSxzPXQuaXRlbXNbaV07cmV0dXJuIHM/TXIoZSxzKTpudWxsfXJldHVybiBudWxsfWZ1bmN0aW9uIHRjKGUpe3JldHVybiBlPT09IiMiP1tdOmVbMF0hPT0iIyJ8fGVbMV0hPT0iLyI/bnVsbDplLnN1YnN0cmluZygyKS5zcGxpdCgvXC8vKS5tYXAobmMpfWZ1bmN0aW9uIG5jKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gcmMoZSl7dmFyIHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Usbj1uZXcgR3UoZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCk7bi5zZXRTY2hlbWFDb250cmlidXRpb25zKGtyKTt2YXIgcj1uZXcgTXUobixlLmNvbnRyaWJ1dGlvbnMsdCxlLmNsaWVudENhcGFiaWxpdGllcyksaT1uZXcgUnUobixlLmNvbnRyaWJ1dGlvbnMsdCkscz1uZXcgcXUobiksYT1uZXcgRnUobix0KTtyZXR1cm57Y29uZmlndXJlOmZ1bmN0aW9uKG8pe24uY2xlYXJFeHRlcm5hbFNjaGVtYXMoKSxvLnNjaGVtYXMmJm8uc2NoZW1hcy5mb3JFYWNoKGZ1bmN0aW9uKGwpe24ucmVnaXN0ZXJFeHRlcm5hbFNjaGVtYShsLnVyaSxsLmZpbGVNYXRjaCxsLnNjaGVtYSl9KSxhLmNvbmZpZ3VyZShvKX0scmVzZXRTY2hlbWE6ZnVuY3Rpb24obyl7cmV0dXJuIG4ub25SZXNvdXJjZUNoYW5nZShvKX0sZG9WYWxpZGF0aW9uOmEuZG9WYWxpZGF0aW9uLmJpbmQoYSksZ2V0TGFuZ3VhZ2VTdGF0dXM6YS5nZXRMYW5ndWFnZVN0YXR1cy5iaW5kKGEpLHBhcnNlSlNPTkRvY3VtZW50OmZ1bmN0aW9uKG8pe3JldHVybiBFdShvLHtjb2xsZWN0Q29tbWVudHM6ITB9KX0sbmV3SlNPTkRvY3VtZW50OmZ1bmN0aW9uKG8sbCl7cmV0dXJuIGt1KG8sbCl9LGdldE1hdGNoaW5nU2NoZW1hczpuLmdldE1hdGNoaW5nU2NoZW1hcy5iaW5kKG4pLGRvUmVzb2x2ZTpyLmRvUmVzb2x2ZS5iaW5kKHIpLGRvQ29tcGxldGU6ci5kb0NvbXBsZXRlLmJpbmQociksZmluZERvY3VtZW50U3ltYm9sczpzLmZpbmREb2N1bWVudFN5bWJvbHMuYmluZChzKSxmaW5kRG9jdW1lbnRTeW1ib2xzMjpzLmZpbmREb2N1bWVudFN5bWJvbHMyLmJpbmQocyksZmluZERvY3VtZW50Q29sb3JzOnMuZmluZERvY3VtZW50Q29sb3JzLmJpbmQocyksZ2V0Q29sb3JQcmVzZW50YXRpb25zOnMuZ2V0Q29sb3JQcmVzZW50YXRpb25zLmJpbmQocyksZG9Ib3ZlcjppLmRvSG92ZXIuYmluZChpKSxnZXRGb2xkaW5nUmFuZ2VzOlF1LGdldFNlbGVjdGlvblJhbmdlczpadSxmaW5kRGVmaW5pdGlvbjpmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoW10pfSxmaW5kTGlua3M6WXUsZm9ybWF0OmZ1bmN0aW9uKG8sbCx1KXt2YXIgZj12b2lkIDA7aWYobCl7dmFyIGg9by5vZmZzZXRBdChsLnN0YXJ0KSxkPW8ub2Zmc2V0QXQobC5lbmQpLWg7Zj17b2Zmc2V0OmgsbGVuZ3RoOmR9fXZhciBnPXt0YWJTaXplOnU/dS50YWJTaXplOjQsaW5zZXJ0U3BhY2VzOnU/Lmluc2VydFNwYWNlcz09PSEwLGluc2VydEZpbmFsTmV3bGluZTp1Py5pbnNlcnRGaW5hbE5ld2xpbmU9PT0hMCxlb2w6YApgfTtyZXR1cm4gZ3Uoby5nZXRUZXh0KCksZixnKS5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIFJlLnJlcGxhY2UoWC5jcmVhdGUoby5wb3NpdGlvbkF0KG0ub2Zmc2V0KSxvLnBvc2l0aW9uQXQobS5vZmZzZXQrbS5sZW5ndGgpKSxtLmNvbnRlbnQpfSl9fX12YXIgQWE7dHlwZW9mIGZldGNoPCJ1IiYmKEFhPWZ1bmN0aW9uKGUpe3JldHVybiBmZXRjaChlKS50aGVuKHQ9PnQudGV4dCgpKX0pO3ZhciBpYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2N0eD1lLHRoaXMuX2xhbmd1YWdlU2V0dGluZ3M9dC5sYW5ndWFnZVNldHRpbmdzLHRoaXMuX2xhbmd1YWdlSWQ9dC5sYW5ndWFnZUlkLHRoaXMuX2xhbmd1YWdlU2VydmljZT1yYyh7d29ya3NwYWNlQ29udGV4dDp7cmVzb2x2ZVJlbGF0aXZlUGF0aDoobixyKT0+e2NvbnN0IGk9ci5zdWJzdHIoMCxyLmxhc3RJbmRleE9mKCIvIikrMSk7cmV0dXJuIG9jKGksbil9fSxzY2hlbWFSZXF1ZXN0U2VydmljZTp0LmVuYWJsZVNjaGVtYVJlcXVlc3Q/QWE6dm9pZCAwLGNsaWVudENhcGFiaWxpdGllczp3ci5MQVRFU1R9KSx0aGlzLl9sYW5ndWFnZVNlcnZpY2UuY29uZmlndXJlKHRoaXMuX2xhbmd1YWdlU2V0dGluZ3MpfWFzeW5jIGRvVmFsaWRhdGlvbihlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYodCl7bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpO3JldHVybiB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZG9WYWxpZGF0aW9uKHQsbix0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKX1hc3luYyBkb0NvbXBsZXRlKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvQ29tcGxldGUobix0LHIpfWFzeW5jIGRvUmVzb2x2ZShlKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvUmVzb2x2ZShlKX1hc3luYyBkb0hvdmVyKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybiBudWxsO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvSG92ZXIobix0LHIpfWFzeW5jIGZvcm1hdChlLHQsbil7bGV0IHI9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFyKXJldHVybltdO2xldCBpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5mb3JtYXQocix0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgcmVzZXRTY2hlbWEoZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9sYW5ndWFnZVNlcnZpY2UucmVzZXRTY2hlbWEoZSkpfWFzeW5jIGZpbmREb2N1bWVudFN5bWJvbHMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KSxyPXRoaXMuX2xhbmd1YWdlU2VydmljZS5maW5kRG9jdW1lbnRTeW1ib2xzMih0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZmluZERvY3VtZW50Q29sb3JzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50Q29sb3JzKHQsbik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX1hc3luYyBnZXRDb2xvclByZXNlbnRhdGlvbnMoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQocikscz10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Q29sb3JQcmVzZW50YXRpb25zKHIsaSx0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocyl9YXN5bmMgZ2V0Rm9sZGluZ1JhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0Rm9sZGluZ1JhbmdlcyhuLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0U2VsZWN0aW9uUmFuZ2VzKGUsdCl7bGV0IG49dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCFuKXJldHVybltdO2xldCByPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudChuKSxpPXRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRTZWxlY3Rpb25SYW5nZXMobix0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9YXN5bmMgcGFyc2VKU09ORG9jdW1lbnQoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybiBudWxsO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4pfWFzeW5jIGdldE1hdGNoaW5nU2NoZW1hcyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldE1hdGNoaW5nU2NoZW1hcyh0LG4pKX1fZ2V0VGV4dERvY3VtZW50KGUpe2xldCB0PXRoaXMuX2N0eC5nZXRNaXJyb3JNb2RlbHMoKTtmb3IobGV0IG4gb2YgdClpZihuLnVyaS50b1N0cmluZygpPT09ZSlyZXR1cm4geHIuY3JlYXRlKGUsdGhpcy5fbGFuZ3VhZ2VJZCxuLnZlcnNpb24sbi5nZXRWYWx1ZSgpKTtyZXR1cm4gbnVsbH19LHNjPTQ3LFJyPTQ2O2Z1bmN0aW9uIGFjKGUpe3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT1zY31mdW5jdGlvbiBvYyhlLHQpe2lmKGFjKHQpKXtjb25zdCBuPWt0LnBhcnNlKGUpLHI9dC5zcGxpdCgiLyIpO3JldHVybiBuLndpdGgoe3BhdGg6Q2Eocil9KS50b1N0cmluZygpfXJldHVybiBsYyhlLHQpfWZ1bmN0aW9uIENhKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IHIgb2YgZSlyLmxlbmd0aD09PTB8fHIubGVuZ3RoPT09MSYmci5jaGFyQ29kZUF0KDApPT09UnJ8fChyLmxlbmd0aD09PTImJnIuY2hhckNvZGVBdCgwKT09PVJyJiZyLmNoYXJDb2RlQXQoMSk9PT1Scj90LnBvcCgpOnQucHVzaChyKSk7ZS5sZW5ndGg+MSYmZVtlLmxlbmd0aC0xXS5sZW5ndGg9PT0wJiZ0LnB1c2goIiIpO2xldCBuPXQuam9pbigiLyIpO3JldHVybiBlWzBdLmxlbmd0aD09PTAmJihuPSIvIituKSxufWZ1bmN0aW9uIGxjKGUsLi4udCl7Y29uc3Qgbj1rdC5wYXJzZShlKSxyPW4ucGF0aC5zcGxpdCgiLyIpO2ZvcihsZXQgaSBvZiB0KXIucHVzaCguLi5pLnNwbGl0KCIvIikpO3JldHVybiBuLndpdGgoe3BhdGg6Q2Eocil9KS50b1N0cmluZygpfXNlbGYub25tZXNzYWdlPSgpPT57UHMoKGUsdCk9Pm5ldyBpYyhlLHQpKX19KSgpOwo=",c=Z=>Uint8Array.from(atob(Z),l=>l.charCodeAt(0)),d=typeof self<"u"&&self.Blob&&new Blob([c(m)],{type:"text/javascript;charset=utf-8"});function G(Z){let l;try{if(l=d&&(self.URL||self.webkitURL).createObjectURL(d),!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,"+m,{name:Z==null?void 0:Z.name})}finally{l&&(self.URL||self.webkitURL).revokeObjectURL(l)}}export{G as default};
|