-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathb0xfile__chunk-0fd67716.7c05a478.js.go
22 lines (18 loc) · 317 KB
/
b0xfile__chunk-0fd67716.7c05a478.js.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package knife4go
import (
"os"
)
func init() {
f, err := FS.OpenFile(CTX, "/chunk-0fd67716.7c05a478.js", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
if err != nil {
panic(err)
}
_, err = f.Write([] byte(base64Decoding("KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1siY2h1bmstMGZkNjc3MTYiXSx7IjZkNjgiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzLmlkPSJhY2UvbW9kZS9qYXZhc2NyaXB0X3dvcmtlciIsZS5leHBvcnRzLnNyYz0nIm5vIHVzZSBzdHJpY3QiOyFmdW5jdGlvbih3aW5kb3cpe2Z1bmN0aW9uIHJlc29sdmVNb2R1bGVJZChpZCxwYXRocyl7Zm9yKHZhciB0ZXN0UGF0aD1pZCx0YWlsPSIiO3Rlc3RQYXRoOyl7dmFyIGFsaWFzPXBhdGhzW3Rlc3RQYXRoXTtpZigic3RyaW5nIj09dHlwZW9mIGFsaWFzKXJldHVybiBhbGlhcyt0YWlsO2lmKGFsaWFzKXJldHVybiBhbGlhcy5sb2NhdGlvbi5yZXBsYWNlKC9cXC8qJC8sIi8iKSsodGFpbHx8YWxpYXMubWFpbnx8YWxpYXMubmFtZSk7aWYoYWxpYXM9PT0hMSlyZXR1cm4iIjt2YXIgaT10ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpO2lmKC0xPT09aSlicmVhazt0YWlsPXRlc3RQYXRoLnN1YnN0cihpKSt0YWlsLHRlc3RQYXRoPXRlc3RQYXRoLnNsaWNlKDAsaSl9cmV0dXJuIGlkfWlmKCEodm9pZCAwIT09d2luZG93LndpbmRvdyYmd2luZG93LmRvY3VtZW50fHx3aW5kb3cuYWNlcXVpcmUmJndpbmRvdy5kZWZpbmUpKXt3aW5kb3cuY29uc29sZXx8KHdpbmRvdy5jb25zb2xlPWZ1bmN0aW9uKCl7dmFyIG1zZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3Bvc3RNZXNzYWdlKHt0eXBlOiJsb2ciLGRhdGE6bXNnc30pfSx3aW5kb3cuY29uc29sZS5lcnJvcj13aW5kb3cuY29uc29sZS53YXJuPXdpbmRvdy5jb25zb2xlLmxvZz13aW5kb3cuY29uc29sZS50cmFjZT13aW5kb3cuY29uc29sZSksd2luZG93LndpbmRvdz13aW5kb3csd2luZG93LmFjZT13aW5kb3csd2luZG93Lm9uZXJyb3I9ZnVuY3Rpb24obWVzc2FnZSxmaWxlLGxpbmUsY29sLGVycil7cG9zdE1lc3NhZ2Uoe3R5cGU6ImVycm9yIixkYXRhOnttZXNzYWdlOm1lc3NhZ2UsZGF0YTplcnIuZGF0YSxmaWxlOmZpbGUsbGluZTpsaW5lLGNvbDpjb2wsc3RhY2s6ZXJyLnN0YWNrfX0pfSx3aW5kb3cubm9ybWFsaXplTW9kdWxlPWZ1bmN0aW9uKHBhcmVudElkLG1vZHVsZU5hbWUpe2lmKC0xIT09bW9kdWxlTmFtZS5pbmRleE9mKCIhIikpe3ZhciBjaHVua3M9bW9kdWxlTmFtZS5zcGxpdCgiISIpO3JldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLGNodW5rc1swXSkrIiEiK3dpbmRvdy5ub3JtYWxpemVNb2R1bGUocGFyZW50SWQsY2h1bmtzWzFdKX1pZigiLiI9PW1vZHVsZU5hbWUuY2hhckF0KDApKXt2YXIgYmFzZT1wYXJlbnRJZC5zcGxpdCgiLyIpLnNsaWNlKDAsLTEpLmpvaW4oIi8iKTtmb3IobW9kdWxlTmFtZT0oYmFzZT9iYXNlKyIvIjoiIikrbW9kdWxlTmFtZTstMSE9PW1vZHVsZU5hbWUuaW5kZXhPZigiLiIpJiZwcmV2aW91cyE9bW9kdWxlTmFtZTspe3ZhciBwcmV2aW91cz1tb2R1bGVOYW1lO21vZHVsZU5hbWU9bW9kdWxlTmFtZS5yZXBsYWNlKC9eXFwuXFwvLywiIikucmVwbGFjZSgvXFwvXFwuXFwvLywiLyIpLnJlcGxhY2UoL1teXFwvXStcXC9cXC5cXC5cXC8vLCIiKX19cmV0dXJuIG1vZHVsZU5hbWV9LHdpbmRvdy5hY2VxdWlyZT1mdW5jdGlvbiBhY2VxdWlyZShwYXJlbnRJZCxpZCl7aWYoaWR8fChpZD1wYXJlbnRJZCxwYXJlbnRJZD1udWxsKSwhaWQuY2hhckF0KXRocm93IEVycm9yKCJ3b3JrZXIuanMgYWNlcXVpcmUoKSBhY2NlcHRzIG9ubHkgKHBhcmVudElkLCBpZCkgYXMgYXJndW1lbnRzIik7aWQ9d2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCxpZCk7dmFyIG1vZHVsZT13aW5kb3cuYWNlcXVpcmUubW9kdWxlc1tpZF07aWYobW9kdWxlKXJldHVybiBtb2R1bGUuaW5pdGlhbGl6ZWR8fChtb2R1bGUuaW5pdGlhbGl6ZWQ9ITAsbW9kdWxlLmV4cG9ydHM9bW9kdWxlLmZhY3RvcnkoKS5leHBvcnRzKSxtb2R1bGUuZXhwb3J0cztpZighd2luZG93LmFjZXF1aXJlLnRsbnMpcmV0dXJuIGNvbnNvbGUubG9nKCJ1bmFibGUgdG8gbG9hZCAiK2lkKTt2YXIgcGF0aD1yZXNvbHZlTW9kdWxlSWQoaWQsd2luZG93LmFjZXF1aXJlLnRsbnMpO3JldHVybiIuanMiIT1wYXRoLnNsaWNlKC0zKSYmKHBhdGgrPSIuanMiKSx3aW5kb3cuYWNlcXVpcmUuaWQ9aWQsd2luZG93LmFjZXF1aXJlLm1vZHVsZXNbaWRdPXt9LGltcG9ydFNjcmlwdHMocGF0aCksd2luZG93LmFjZXF1aXJlKHBhcmVudElkLGlkKX0sd2luZG93LmFjZXF1aXJlLm1vZHVsZXM9e30sd2luZG93LmFjZXF1aXJlLnRsbnM9e30sd2luZG93LmRlZmluZT1mdW5jdGlvbihpZCxkZXBzLGZhY3Rvcnkpe2lmKDI9PWFyZ3VtZW50cy5sZW5ndGg/KGZhY3Rvcnk9ZGVwcywic3RyaW5nIiE9dHlwZW9mIGlkJiYoZGVwcz1pZCxpZD13aW5kb3cuYWNlcXVpcmUuaWQpKToxPT1hcmd1bWVudHMubGVuZ3RoJiYoZmFjdG9yeT1pZCxkZXBzPVtdLGlkPXdpbmRvdy5hY2VxdWlyZS5pZCksImZ1bmN0aW9uIiE9dHlwZW9mIGZhY3RvcnkpcmV0dXJuIHdpbmRvdy5hY2VxdWlyZS5tb2R1bGVzW2lkXT17ZXhwb3J0czpmYWN0b3J5LGluaXRpYWxpemVkOiEwfSx2b2lkIDA7ZGVwcy5sZW5ndGh8fChkZXBzPVsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSk7dmFyIHJlcT1mdW5jdGlvbihjaGlsZElkKXtyZXR1cm4gd2luZG93LmFjZXF1aXJlKGlkLGNoaWxkSWQpfTt3aW5kb3cuYWNlcXVpcmUubW9kdWxlc1tpZF09e2V4cG9ydHM6e30sZmFjdG9yeTpmdW5jdGlvbigpe3ZhciBtb2R1bGU9dGhpcyxyZXR1cm5FeHBvcnRzPWZhY3RvcnkuYXBwbHkodGhpcyxkZXBzLm1hcChmdW5jdGlvbihkZXApe3N3aXRjaChkZXApe2Nhc2UicmVxdWlyZSI6cmV0dXJuIHJlcTtjYXNlImV4cG9ydHMiOnJldHVybiBtb2R1bGUuZXhwb3J0cztjYXNlIm1vZHVsZSI6cmV0dXJuIG1vZHVsZTtkZWZhdWx0OnJldHVybiByZXEoZGVwKX19KSk7cmV0dXJuIHJldHVybkV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1yZXR1cm5FeHBvcnRzKSxtb2R1bGV9fX0sd2luZG93LmRlZmluZS5hbWQ9e30sYWNlcXVpcmUudGxucz17fSx3aW5kb3cuaW5pdEJhc2VVcmxzPWZ1bmN0aW9uKHRvcExldmVsTmFtZXNwYWNlcyl7Zm9yKHZhciBpIGluIHRvcExldmVsTmFtZXNwYWNlcylhY2VxdWlyZS50bG5zW2ldPXRvcExldmVsTmFtZXNwYWNlc1tpXX0sd2luZG93LmluaXRTZW5kZXI9ZnVuY3Rpb24oKXt2YXIgRXZlbnRFbWl0dGVyPXdpbmRvdy5hY2VxdWlyZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLG9vcD13aW5kb3cuYWNlcXVpcmUoImFjZS9saWIvb29wIiksU2VuZGVyPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZnVuY3Rpb24oKXtvb3AuaW1wbGVtZW50KHRoaXMsRXZlbnRFbWl0dGVyKSx0aGlzLmNhbGxiYWNrPWZ1bmN0aW9uKGRhdGEsY2FsbGJhY2tJZCl7cG9zdE1lc3NhZ2Uoe3R5cGU6ImNhbGwiLGlkOmNhbGxiYWNrSWQsZGF0YTpkYXRhfSl9LHRoaXMuZW1pdD1mdW5jdGlvbihuYW1lLGRhdGEpe3Bvc3RNZXNzYWdlKHt0eXBlOiJldmVudCIsbmFtZTpuYW1lLGRhdGE6ZGF0YX0pfX0uY2FsbChTZW5kZXIucHJvdG90eXBlKSxuZXcgU2VuZGVyfTt2YXIgbWFpbj13aW5kb3cubWFpbj1udWxsLHNlbmRlcj13aW5kb3cuc2VuZGVyPW51bGw7d2luZG93Lm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgbXNnPWUuZGF0YTtpZihtc2cuZXZlbnQmJnNlbmRlcilzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsbXNnLmRhdGEpO2Vsc2UgaWYobXNnLmNvbW1hbmQpaWYobWFpblttc2cuY29tbWFuZF0pbWFpblttc2cuY29tbWFuZF0uYXBwbHkobWFpbixtc2cuYXJncyk7ZWxzZXtpZighd2luZG93W21zZy5jb21tYW5kXSl0aHJvdyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIrbXNnLmNvbW1hbmQpO3dpbmRvd1ttc2cuY29tbWFuZF0uYXBwbHkod2luZG93LG1zZy5hcmdzKX1lbHNlIGlmKG1zZy5pbml0KXt3aW5kb3cuaW5pdEJhc2VVcmxzKG1zZy50bG5zKSxhY2VxdWlyZSgiYWNlL2xpYi9lczUtc2hpbSIpLHNlbmRlcj13aW5kb3cuc2VuZGVyPXdpbmRvdy5pbml0U2VuZGVyKCk7dmFyIGNsYXp6PWFjZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdO21haW49d2luZG93Lm1haW49bmV3IGNsYXp6KHNlbmRlcil9fX19KHRoaXMpLGFjZS5kZWZpbmUoImFjZS9saWIvb29wIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2V4cG9ydHMuaW5oZXJpdHM9ZnVuY3Rpb24oY3RvcixzdXBlckN0b3Ipe2N0b3Iuc3VwZXJfPXN1cGVyQ3RvcixjdG9yLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpjdG9yLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfSxleHBvcnRzLm1peGluPWZ1bmN0aW9uKG9iaixtaXhpbil7Zm9yKHZhciBrZXkgaW4gbWl4aW4pb2JqW2tleV09bWl4aW5ba2V5XTtyZXR1cm4gb2JqfSxleHBvcnRzLmltcGxlbWVudD1mdW5jdGlvbihwcm90byxtaXhpbil7ZXhwb3J0cy5taXhpbihwcm90byxtaXhpbil9fSksYWNlLmRlZmluZSgiYWNlL3JhbmdlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciBjb21wYXJlUG9pbnRzPWZ1bmN0aW9uKHAxLHAyKXtyZXR1cm4gcDEucm93LXAyLnJvd3x8cDEuY29sdW1uLXAyLmNvbHVtbn0sUmFuZ2U9ZnVuY3Rpb24oc3RhcnRSb3csc3RhcnRDb2x1bW4sZW5kUm93LGVuZENvbHVtbil7dGhpcy5zdGFydD17cm93OnN0YXJ0Um93LGNvbHVtbjpzdGFydENvbHVtbn0sdGhpcy5lbmQ9e3JvdzplbmRSb3csY29sdW1uOmVuZENvbHVtbn19OyhmdW5jdGlvbigpe3RoaXMuaXNFcXVhbD1mdW5jdGlvbihyYW5nZSl7cmV0dXJuIHRoaXMuc3RhcnQucm93PT09cmFuZ2Uuc3RhcnQucm93JiZ0aGlzLmVuZC5yb3c9PT1yYW5nZS5lbmQucm93JiZ0aGlzLnN0YXJ0LmNvbHVtbj09PXJhbmdlLnN0YXJ0LmNvbHVtbiYmdGhpcy5lbmQuY29sdW1uPT09cmFuZ2UuZW5kLmNvbHVtbn0sdGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSYW5nZTogWyIrdGhpcy5zdGFydC5yb3crIi8iK3RoaXMuc3RhcnQuY29sdW1uKyJdIC0+IFsiK3RoaXMuZW5kLnJvdysiLyIrdGhpcy5lbmQuY29sdW1uKyJdIn0sdGhpcy5jb250YWlucz1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gMD09dGhpcy5jb21wYXJlKHJvdyxjb2x1bW4pfSx0aGlzLmNvbXBhcmVSYW5nZT1mdW5jdGlvbihyYW5nZSl7dmFyIGNtcCxlbmQ9cmFuZ2UuZW5kLHN0YXJ0PXJhbmdlLnN0YXJ0O3JldHVybiBjbXA9dGhpcy5jb21wYXJlKGVuZC5yb3csZW5kLmNvbHVtbiksMT09Y21wPyhjbXA9dGhpcy5jb21wYXJlKHN0YXJ0LnJvdyxzdGFydC5jb2x1bW4pLDE9PWNtcD8yOjA9PWNtcD8xOjApOi0xPT1jbXA/LTI6KGNtcD10aGlzLmNvbXBhcmUoc3RhcnQucm93LHN0YXJ0LmNvbHVtbiksLTE9PWNtcD8tMToxPT1jbXA/NDI6MCl9LHRoaXMuY29tcGFyZVBvaW50PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNvbXBhcmUocC5yb3cscC5jb2x1bW4pfSx0aGlzLmNvbnRhaW5zUmFuZ2U9ZnVuY3Rpb24ocmFuZ2Upe3JldHVybiAwPT10aGlzLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCkmJjA9PXRoaXMuY29tcGFyZVBvaW50KHJhbmdlLmVuZCl9LHRoaXMuaW50ZXJzZWN0cz1mdW5jdGlvbihyYW5nZSl7dmFyIGNtcD10aGlzLmNvbXBhcmVSYW5nZShyYW5nZSk7cmV0dXJuLTE9PWNtcHx8MD09Y21wfHwxPT1jbXB9LHRoaXMuaXNFbmQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIHRoaXMuZW5kLnJvdz09cm93JiZ0aGlzLmVuZC5jb2x1bW49PWNvbHVtbn0sdGhpcy5pc1N0YXJ0PWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiB0aGlzLnN0YXJ0LnJvdz09cm93JiZ0aGlzLnN0YXJ0LmNvbHVtbj09Y29sdW1ufSx0aGlzLnNldFN0YXJ0PWZ1bmN0aW9uKHJvdyxjb2x1bW4peyJvYmplY3QiPT10eXBlb2Ygcm93Pyh0aGlzLnN0YXJ0LmNvbHVtbj1yb3cuY29sdW1uLHRoaXMuc3RhcnQucm93PXJvdy5yb3cpOih0aGlzLnN0YXJ0LnJvdz1yb3csdGhpcy5zdGFydC5jb2x1bW49Y29sdW1uKX0sdGhpcy5zZXRFbmQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7Im9iamVjdCI9PXR5cGVvZiByb3c/KHRoaXMuZW5kLmNvbHVtbj1yb3cuY29sdW1uLHRoaXMuZW5kLnJvdz1yb3cucm93KToodGhpcy5lbmQucm93PXJvdyx0aGlzLmVuZC5jb2x1bW49Y29sdW1uKX0sdGhpcy5pbnNpZGU9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIDA9PXRoaXMuY29tcGFyZShyb3csY29sdW1uKT90aGlzLmlzRW5kKHJvdyxjb2x1bW4pfHx0aGlzLmlzU3RhcnQocm93LGNvbHVtbik/ITE6ITA6ITF9LHRoaXMuaW5zaWRlU3RhcnQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7cmV0dXJuIDA9PXRoaXMuY29tcGFyZShyb3csY29sdW1uKT90aGlzLmlzRW5kKHJvdyxjb2x1bW4pPyExOiEwOiExfSx0aGlzLmluc2lkZUVuZD1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gMD09dGhpcy5jb21wYXJlKHJvdyxjb2x1bW4pP3RoaXMuaXNTdGFydChyb3csY29sdW1uKT8hMTohMDohMX0sdGhpcy5jb21wYXJlPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiB0aGlzLmlzTXVsdGlMaW5lKCl8fHJvdyE9PXRoaXMuc3RhcnQucm93P3RoaXMuc3RhcnQucm93PnJvdz8tMTpyb3c+dGhpcy5lbmQucm93PzE6dGhpcy5zdGFydC5yb3c9PT1yb3c/Y29sdW1uPj10aGlzLnN0YXJ0LmNvbHVtbj8wOi0xOnRoaXMuZW5kLnJvdz09PXJvdz90aGlzLmVuZC5jb2x1bW4+PWNvbHVtbj8wOjE6MDp0aGlzLnN0YXJ0LmNvbHVtbj5jb2x1bW4/LTE6Y29sdW1uPnRoaXMuZW5kLmNvbHVtbj8xOjB9LHRoaXMuY29tcGFyZVN0YXJ0PWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiB0aGlzLnN0YXJ0LnJvdz09cm93JiZ0aGlzLnN0YXJ0LmNvbHVtbj09Y29sdW1uPy0xOnRoaXMuY29tcGFyZShyb3csY29sdW1uKX0sdGhpcy5jb21wYXJlRW5kPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybiB0aGlzLmVuZC5yb3c9PXJvdyYmdGhpcy5lbmQuY29sdW1uPT1jb2x1bW4/MTp0aGlzLmNvbXBhcmUocm93LGNvbHVtbil9LHRoaXMuY29tcGFyZUluc2lkZT1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gdGhpcy5lbmQucm93PT1yb3cmJnRoaXMuZW5kLmNvbHVtbj09Y29sdW1uPzE6dGhpcy5zdGFydC5yb3c9PXJvdyYmdGhpcy5zdGFydC5jb2x1bW49PWNvbHVtbj8tMTp0aGlzLmNvbXBhcmUocm93LGNvbHVtbil9LHRoaXMuY2xpcFJvd3M9ZnVuY3Rpb24oZmlyc3RSb3csbGFzdFJvdyl7aWYodGhpcy5lbmQucm93Pmxhc3RSb3cpdmFyIGVuZD17cm93Omxhc3RSb3crMSxjb2x1bW46MH07ZWxzZSBpZihmaXJzdFJvdz50aGlzLmVuZC5yb3cpdmFyIGVuZD17cm93OmZpcnN0Um93LGNvbHVtbjowfTtpZih0aGlzLnN0YXJ0LnJvdz5sYXN0Um93KXZhciBzdGFydD17cm93Omxhc3RSb3crMSxjb2x1bW46MH07ZWxzZSBpZihmaXJzdFJvdz50aGlzLnN0YXJ0LnJvdyl2YXIgc3RhcnQ9e3JvdzpmaXJzdFJvdyxjb2x1bW46MH07cmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnR8fHRoaXMuc3RhcnQsZW5kfHx0aGlzLmVuZCl9LHRoaXMuZXh0ZW5kPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3ZhciBjbXA9dGhpcy5jb21wYXJlKHJvdyxjb2x1bW4pO2lmKDA9PWNtcClyZXR1cm4gdGhpcztpZigtMT09Y21wKXZhciBzdGFydD17cm93OnJvdyxjb2x1bW46Y29sdW1ufTtlbHNlIHZhciBlbmQ9e3Jvdzpyb3csY29sdW1uOmNvbHVtbn07cmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnR8fHRoaXMuc3RhcnQsZW5kfHx0aGlzLmVuZCl9LHRoaXMuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LnJvdz09PXRoaXMuZW5kLnJvdyYmdGhpcy5zdGFydC5jb2x1bW49PT10aGlzLmVuZC5jb2x1bW59LHRoaXMuaXNNdWx0aUxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5yb3chPT10aGlzLmVuZC5yb3d9LHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0aGlzLnN0YXJ0LHRoaXMuZW5kKX0sdGhpcy5jb2xsYXBzZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gMD09dGhpcy5lbmQuY29sdW1uP25ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywwLE1hdGgubWF4KHRoaXMuc3RhcnQucm93LHRoaXMuZW5kLnJvdy0xKSwwKTpuZXcgUmFuZ2UodGhpcy5zdGFydC5yb3csMCx0aGlzLmVuZC5yb3csMCl9LHRoaXMudG9TY3JlZW5SYW5nZT1mdW5jdGlvbihzZXNzaW9uKXt2YXIgc2NyZWVuUG9zU3RhcnQ9c2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5zdGFydCksc2NyZWVuUG9zRW5kPXNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZW5kKTtyZXR1cm4gbmV3IFJhbmdlKHNjcmVlblBvc1N0YXJ0LnJvdyxzY3JlZW5Qb3NTdGFydC5jb2x1bW4sc2NyZWVuUG9zRW5kLnJvdyxzY3JlZW5Qb3NFbmQuY29sdW1uKX0sdGhpcy5tb3ZlQnk9ZnVuY3Rpb24ocm93LGNvbHVtbil7dGhpcy5zdGFydC5yb3crPXJvdyx0aGlzLnN0YXJ0LmNvbHVtbis9Y29sdW1uLHRoaXMuZW5kLnJvdys9cm93LHRoaXMuZW5kLmNvbHVtbis9Y29sdW1ufX0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKSxSYW5nZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKHN0YXJ0LGVuZCl7cmV0dXJuIG5ldyBSYW5nZShzdGFydC5yb3csc3RhcnQuY29sdW1uLGVuZC5yb3csZW5kLmNvbHVtbil9LFJhbmdlLmNvbXBhcmVQb2ludHM9Y29tcGFyZVBvaW50cyxSYW5nZS5jb21wYXJlUG9pbnRzPWZ1bmN0aW9uKHAxLHAyKXtyZXR1cm4gcDEucm93LXAyLnJvd3x8cDEuY29sdW1uLXAyLmNvbHVtbn0sZXhwb3J0cy5SYW5nZT1SYW5nZX0pLGFjZS5kZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGFjZXF1aXJlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtleHBvcnRzLmFwcGx5RGVsdGE9ZnVuY3Rpb24oZG9jTGluZXMsZGVsdGEpe3ZhciByb3c9ZGVsdGEuc3RhcnQucm93LHN0YXJ0Q29sdW1uPWRlbHRhLnN0YXJ0LmNvbHVtbixsaW5lPWRvY0xpbmVzW3Jvd118fCIiO3N3aXRjaChkZWx0YS5hY3Rpb24pe2Nhc2UiaW5zZXJ0Ijp2YXIgbGluZXM9ZGVsdGEubGluZXM7aWYoMT09PWxpbmVzLmxlbmd0aClkb2NMaW5lc1tyb3ddPWxpbmUuc3Vic3RyaW5nKDAsc3RhcnRDb2x1bW4pK2RlbHRhLmxpbmVzWzBdK2xpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uKTtlbHNle3ZhciBhcmdzPVtyb3csMV0uY29uY2F0KGRlbHRhLmxpbmVzKTtkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsYXJncyksZG9jTGluZXNbcm93XT1saW5lLnN1YnN0cmluZygwLHN0YXJ0Q29sdW1uKStkb2NMaW5lc1tyb3ddLGRvY0xpbmVzW3JvdytkZWx0YS5saW5lcy5sZW5ndGgtMV0rPWxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uKX1icmVhaztjYXNlInJlbW92ZSI6dmFyIGVuZENvbHVtbj1kZWx0YS5lbmQuY29sdW1uLGVuZFJvdz1kZWx0YS5lbmQucm93O3Jvdz09PWVuZFJvdz9kb2NMaW5lc1tyb3ddPWxpbmUuc3Vic3RyaW5nKDAsc3RhcnRDb2x1bW4pK2xpbmUuc3Vic3RyaW5nKGVuZENvbHVtbik6ZG9jTGluZXMuc3BsaWNlKHJvdyxlbmRSb3ctcm93KzEsbGluZS5zdWJzdHJpbmcoMCxzdGFydENvbHVtbikrZG9jTGluZXNbZW5kUm93XS5zdWJzdHJpbmcoZW5kQ29sdW1uKSl9fX0pLGFjZS5kZWZpbmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGFjZXF1aXJlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgRXZlbnRFbWl0dGVyPXt9LHN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3RoaXMucHJvcGFnYXRpb25TdG9wcGVkPSEwfSxwcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMH07RXZlbnRFbWl0dGVyLl9lbWl0PUV2ZW50RW1pdHRlci5fZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihldmVudE5hbWUsZSl7dGhpcy5fZXZlbnRSZWdpc3RyeXx8KHRoaXMuX2V2ZW50UmVnaXN0cnk9e30pLHRoaXMuX2RlZmF1bHRIYW5kbGVyc3x8KHRoaXMuX2RlZmF1bHRIYW5kbGVycz17fSk7dmFyIGxpc3RlbmVycz10aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV18fFtdLGRlZmF1bHRIYW5kbGVyPXRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdO2lmKGxpc3RlbmVycy5sZW5ndGh8fGRlZmF1bHRIYW5kbGVyKXsib2JqZWN0Ij09dHlwZW9mIGUmJmV8fChlPXt9KSxlLnR5cGV8fChlLnR5cGU9ZXZlbnROYW1lKSxlLnN0b3BQcm9wYWdhdGlvbnx8KGUuc3RvcFByb3BhZ2F0aW9uPXN0b3BQcm9wYWdhdGlvbiksZS5wcmV2ZW50RGVmYXVsdHx8KGUucHJldmVudERlZmF1bHQ9cHJldmVudERlZmF1bHQpLGxpc3RlbmVycz1saXN0ZW5lcnMuc2xpY2UoKTtmb3IodmFyIGk9MDtsaXN0ZW5lcnMubGVuZ3RoPmkmJihsaXN0ZW5lcnNbaV0oZSx0aGlzKSwhZS5wcm9wYWdhdGlvblN0b3BwZWQpO2krKyk7cmV0dXJuIGRlZmF1bHRIYW5kbGVyJiYhZS5kZWZhdWx0UHJldmVudGVkP2RlZmF1bHRIYW5kbGVyKGUsdGhpcyk6dm9pZCAwfX0sRXZlbnRFbWl0dGVyLl9zaWduYWw9ZnVuY3Rpb24oZXZlbnROYW1lLGUpe3ZhciBsaXN0ZW5lcnM9KHRoaXMuX2V2ZW50UmVnaXN0cnl8fHt9KVtldmVudE5hbWVdO2lmKGxpc3RlbmVycyl7bGlzdGVuZXJzPWxpc3RlbmVycy5zbGljZSgpO2Zvcih2YXIgaT0wO2xpc3RlbmVycy5sZW5ndGg+aTtpKyspbGlzdGVuZXJzW2ldKGUsdGhpcyl9fSxFdmVudEVtaXR0ZXIub25jZT1mdW5jdGlvbihldmVudE5hbWUsY2FsbGJhY2spe3ZhciBfc2VsZj10aGlzO2NhbGxiYWNrJiZ0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLGZ1bmN0aW9uIG5ld0NhbGxiYWNrKCl7X3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsbmV3Q2FsbGJhY2spLGNhbGxiYWNrLmFwcGx5KG51bGwsYXJndW1lbnRzKX0pfSxFdmVudEVtaXR0ZXIuc2V0RGVmYXVsdEhhbmRsZXI9ZnVuY3Rpb24oZXZlbnROYW1lLGNhbGxiYWNrKXt2YXIgaGFuZGxlcnM9dGhpcy5fZGVmYXVsdEhhbmRsZXJzO2lmKGhhbmRsZXJzfHwoaGFuZGxlcnM9dGhpcy5fZGVmYXVsdEhhbmRsZXJzPXtfZGlzYWJsZWRfOnt9fSksaGFuZGxlcnNbZXZlbnROYW1lXSl7dmFyIG9sZD1oYW5kbGVyc1tldmVudE5hbWVdLGRpc2FibGVkPWhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTtkaXNhYmxlZHx8KGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXT1kaXNhYmxlZD1bXSksZGlzYWJsZWQucHVzaChvbGQpO3ZhciBpPWRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOy0xIT1pJiZkaXNhYmxlZC5zcGxpY2UoaSwxKX1oYW5kbGVyc1tldmVudE5hbWVdPWNhbGxiYWNrfSxFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXI9ZnVuY3Rpb24oZXZlbnROYW1lLGNhbGxiYWNrKXt2YXIgaGFuZGxlcnM9dGhpcy5fZGVmYXVsdEhhbmRsZXJzO2lmKGhhbmRsZXJzKXt2YXIgZGlzYWJsZWQ9aGFuZGxlcnMuX2Rpc2FibGVkX1tldmVudE5hbWVdO2lmKGhhbmRsZXJzW2V2ZW50TmFtZV09PWNhbGxiYWNrKWhhbmRsZXJzW2V2ZW50TmFtZV0sZGlzYWJsZWQmJnRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLGRpc2FibGVkLnBvcCgpKTtlbHNlIGlmKGRpc2FibGVkKXt2YXIgaT1kaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTstMSE9aSYmZGlzYWJsZWQuc3BsaWNlKGksMSl9fX0sRXZlbnRFbWl0dGVyLm9uPUV2ZW50RW1pdHRlci5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGV2ZW50TmFtZSxjYWxsYmFjayxjYXB0dXJpbmcpe3RoaXMuX2V2ZW50UmVnaXN0cnk9dGhpcy5fZXZlbnRSZWdpc3RyeXx8e307dmFyIGxpc3RlbmVycz10aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07cmV0dXJuIGxpc3RlbmVyc3x8KGxpc3RlbmVycz10aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV09W10pLC0xPT1saXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjaykmJmxpc3RlbmVyc1tjYXB0dXJpbmc/InVuc2hpZnQiOiJwdXNoIl0oY2FsbGJhY2spLGNhbGxiYWNrfSxFdmVudEVtaXR0ZXIub2ZmPUV2ZW50RW1pdHRlci5yZW1vdmVMaXN0ZW5lcj1FdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihldmVudE5hbWUsY2FsbGJhY2spe3RoaXMuX2V2ZW50UmVnaXN0cnk9dGhpcy5fZXZlbnRSZWdpc3RyeXx8e307dmFyIGxpc3RlbmVycz10aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07aWYobGlzdGVuZXJzKXt2YXIgaW5kZXg9bGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOy0xIT09aW5kZXgmJmxpc3RlbmVycy5zcGxpY2UoaW5kZXgsMSl9fSxFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGV2ZW50TmFtZSl7dGhpcy5fZXZlbnRSZWdpc3RyeSYmKHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXT1bXSl9LGV4cG9ydHMuRXZlbnRFbWl0dGVyPUV2ZW50RW1pdHRlcn0pLGFjZS5kZWZpbmUoImFjZS9hbmNob3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGFjZXF1aXJlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgb29wPWFjZXF1aXJlKCIuL2xpYi9vb3AiKSxFdmVudEVtaXR0ZXI9YWNlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsQW5jaG9yPWV4cG9ydHMuQW5jaG9yPWZ1bmN0aW9uKGRvYyxyb3csY29sdW1uKXt0aGlzLiRvbkNoYW5nZT10aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyksdGhpcy5hdHRhY2goZG9jKSxjb2x1bW49PT12b2lkIDA/dGhpcy5zZXRQb3NpdGlvbihyb3cucm93LHJvdy5jb2x1bW4pOnRoaXMuc2V0UG9zaXRpb24ocm93LGNvbHVtbil9OyhmdW5jdGlvbigpe2Z1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSxwb2ludDIsZXF1YWxQb2ludHNJbk9yZGVyKXt2YXIgYkNvbElzQWZ0ZXI9ZXF1YWxQb2ludHNJbk9yZGVyP3BvaW50MS5jb2x1bW48PXBvaW50Mi5jb2x1bW46cG9pbnQxLmNvbHVtbjxwb2ludDIuY29sdW1uO3JldHVybiBwb2ludDEucm93PHBvaW50Mi5yb3d8fHBvaW50MS5yb3c9PXBvaW50Mi5yb3cmJmJDb2xJc0FmdGVyfWZ1bmN0aW9uICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLHBvaW50LG1vdmVJZkVxdWFsKXt2YXIgZGVsdGFJc0luc2VydD0iaW5zZXJ0Ij09ZGVsdGEuYWN0aW9uLGRlbHRhUm93U2hpZnQ9KGRlbHRhSXNJbnNlcnQ/MTotMSkqKGRlbHRhLmVuZC5yb3ctZGVsdGEuc3RhcnQucm93KSxkZWx0YUNvbFNoaWZ0PShkZWx0YUlzSW5zZXJ0PzE6LTEpKihkZWx0YS5lbmQuY29sdW1uLWRlbHRhLnN0YXJ0LmNvbHVtbiksZGVsdGFTdGFydD1kZWx0YS5zdGFydCxkZWx0YUVuZD1kZWx0YUlzSW5zZXJ0P2RlbHRhU3RhcnQ6ZGVsdGEuZW5kO3JldHVybiAkcG9pbnRzSW5PcmRlcihwb2ludCxkZWx0YVN0YXJ0LG1vdmVJZkVxdWFsKT97cm93OnBvaW50LnJvdyxjb2x1bW46cG9pbnQuY29sdW1ufTokcG9pbnRzSW5PcmRlcihkZWx0YUVuZCxwb2ludCwhbW92ZUlmRXF1YWwpP3tyb3c6cG9pbnQucm93K2RlbHRhUm93U2hpZnQsY29sdW1uOnBvaW50LmNvbHVtbisocG9pbnQucm93PT1kZWx0YUVuZC5yb3c/ZGVsdGFDb2xTaGlmdDowKX06e3JvdzpkZWx0YVN0YXJ0LnJvdyxjb2x1bW46ZGVsdGFTdGFydC5jb2x1bW59fW9vcC5pbXBsZW1lbnQodGhpcyxFdmVudEVtaXR0ZXIpLHRoaXMuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudCh0aGlzLnJvdyx0aGlzLmNvbHVtbil9LHRoaXMuZ2V0RG9jdW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2N1bWVudH0sdGhpcy4kaW5zZXJ0UmlnaHQ9ITEsdGhpcy5vbkNoYW5nZT1mdW5jdGlvbihkZWx0YSl7aWYoIShkZWx0YS5zdGFydC5yb3c9PWRlbHRhLmVuZC5yb3cmJmRlbHRhLnN0YXJ0LnJvdyE9dGhpcy5yb3d8fGRlbHRhLnN0YXJ0LnJvdz50aGlzLnJvdykpe3ZhciBwb2ludD0kZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSx7cm93OnRoaXMucm93LGNvbHVtbjp0aGlzLmNvbHVtbn0sdGhpcy4kaW5zZXJ0UmlnaHQpO3RoaXMuc2V0UG9zaXRpb24ocG9pbnQucm93LHBvaW50LmNvbHVtbiwhMCl9fSx0aGlzLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHJvdyxjb2x1bW4sbm9DbGlwKXt2YXIgcG9zO2lmKHBvcz1ub0NsaXA/e3Jvdzpyb3csY29sdW1uOmNvbHVtbn06dGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csY29sdW1uKSx0aGlzLnJvdyE9cG9zLnJvd3x8dGhpcy5jb2x1bW4hPXBvcy5jb2x1bW4pe3ZhciBvbGQ9e3Jvdzp0aGlzLnJvdyxjb2x1bW46dGhpcy5jb2x1bW59O3RoaXMucm93PXBvcy5yb3csdGhpcy5jb2x1bW49cG9zLmNvbHVtbix0aGlzLl9zaWduYWwoImNoYW5nZSIse29sZDpvbGQsdmFsdWU6cG9zfSl9fSx0aGlzLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLiRvbkNoYW5nZSl9LHRoaXMuYXR0YWNoPWZ1bmN0aW9uKGRvYyl7dGhpcy5kb2N1bWVudD1kb2N8fHRoaXMuZG9jdW1lbnQsdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIix0aGlzLiRvbkNoYW5nZSl9LHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQ9ZnVuY3Rpb24ocm93LGNvbHVtbil7dmFyIHBvcz17fTtyZXR1cm4gcm93Pj10aGlzLmRvY3VtZW50LmdldExlbmd0aCgpPyhwb3Mucm93PU1hdGgubWF4KDAsdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKS0xKSxwb3MuY29sdW1uPXRoaXMuZG9jdW1lbnQuZ2V0TGluZShwb3Mucm93KS5sZW5ndGgpOjA+cm93Pyhwb3Mucm93PTAscG9zLmNvbHVtbj0wKToocG9zLnJvdz1yb3cscG9zLmNvbHVtbj1NYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLE1hdGgubWF4KDAsY29sdW1uKSkpLDA+Y29sdW1uJiYocG9zLmNvbHVtbj0wKSxwb3N9fSkuY2FsbChBbmNob3IucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9kb2N1bWVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2FwcGx5X2RlbHRhIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL3JhbmdlIiwiYWNlL2FuY2hvciJdLGZ1bmN0aW9uKGFjZXF1aXJlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgb29wPWFjZXF1aXJlKCIuL2xpYi9vb3AiKSxhcHBseURlbHRhPWFjZXF1aXJlKCIuL2FwcGx5X2RlbHRhIikuYXBwbHlEZWx0YSxFdmVudEVtaXR0ZXI9YWNlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsUmFuZ2U9YWNlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZSxBbmNob3I9YWNlcXVpcmUoIi4vYW5jaG9yIikuQW5jaG9yLERvY3VtZW50PWZ1bmN0aW9uKHRleHRPckxpbmVzKXt0aGlzLiRsaW5lcz1bIiJdLDA9PT10ZXh0T3JMaW5lcy5sZW5ndGg/dGhpcy4kbGluZXM9WyIiXTpBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKT90aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6MCxjb2x1bW46MH0sdGV4dE9yTGluZXMpOnRoaXMuaW5zZXJ0KHtyb3c6MCxjb2x1bW46MH0sdGV4dE9yTGluZXMpfTsoZnVuY3Rpb24oKXtvb3AuaW1wbGVtZW50KHRoaXMsRXZlbnRFbWl0dGVyKSx0aGlzLnNldFZhbHVlPWZ1bmN0aW9uKHRleHQpe3ZhciBsZW49dGhpcy5nZXRMZW5ndGgoKS0xO3RoaXMucmVtb3ZlKG5ldyBSYW5nZSgwLDAsbGVuLHRoaXMuZ2V0TGluZShsZW4pLmxlbmd0aCkpLHRoaXMuaW5zZXJ0KHtyb3c6MCxjb2x1bW46MH0sdGV4dCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBbGxMaW5lcygpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpfSx0aGlzLmNyZWF0ZUFuY2hvcj1mdW5jdGlvbihyb3csY29sdW1uKXtyZXR1cm4gbmV3IEFuY2hvcih0aGlzLHJvdyxjb2x1bW4pfSx0aGlzLiRzcGxpdD0wPT09ImFhYSIuc3BsaXQoL2EvKS5sZW5ndGg/ZnVuY3Rpb24odGV4dCl7cmV0dXJuIHRleHQucmVwbGFjZSgvXFxyXFxufFxcci9nLCJcXG4iKS5zcGxpdCgiXFxuIil9OmZ1bmN0aW9uKHRleHQpe3JldHVybiB0ZXh0LnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pfSx0aGlzLiRkZXRlY3ROZXdMaW5lPWZ1bmN0aW9uKHRleHQpe3ZhciBtYXRjaD10ZXh0Lm1hdGNoKC9eLio/KFxcclxcbnxcXHJ8XFxuKS9tKTt0aGlzLiRhdXRvTmV3TGluZT1tYXRjaD9tYXRjaFsxXToiXFxuIix0aGlzLl9zaWduYWwoImNoYW5nZU5ld0xpbmVNb2RlIil9LHRoaXMuZ2V0TmV3TGluZUNoYXJhY3Rlcj1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLiRuZXdMaW5lTW9kZSl7Y2FzZSJ3aW5kb3dzIjpyZXR1cm4iXFxyXFxuIjtjYXNlInVuaXgiOnJldHVybiJcXG4iO2RlZmF1bHQ6cmV0dXJuIHRoaXMuJGF1dG9OZXdMaW5lfHwiXFxuIn19LHRoaXMuJGF1dG9OZXdMaW5lPSIiLHRoaXMuJG5ld0xpbmVNb2RlPSJhdXRvIix0aGlzLnNldE5ld0xpbmVNb2RlPWZ1bmN0aW9uKG5ld0xpbmVNb2RlKXt0aGlzLiRuZXdMaW5lTW9kZSE9PW5ld0xpbmVNb2RlJiYodGhpcy4kbmV3TGluZU1vZGU9bmV3TGluZU1vZGUsdGhpcy5fc2lnbmFsKCJjaGFuZ2VOZXdMaW5lTW9kZSIpKX0sdGhpcy5nZXROZXdMaW5lTW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRuZXdMaW5lTW9kZX0sdGhpcy5pc05ld0xpbmU9ZnVuY3Rpb24odGV4dCl7cmV0dXJuIlxcclxcbiI9PXRleHR8fCJcXHIiPT10ZXh0fHwiXFxuIj09dGV4dH0sdGhpcy5nZXRMaW5lPWZ1bmN0aW9uKHJvdyl7cmV0dXJuIHRoaXMuJGxpbmVzW3Jvd118fCIifSx0aGlzLmdldExpbmVzPWZ1bmN0aW9uKGZpcnN0Um93LGxhc3RSb3cpe3JldHVybiB0aGlzLiRsaW5lcy5zbGljZShmaXJzdFJvdyxsYXN0Um93KzEpfSx0aGlzLmdldEFsbExpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGluZXMoMCx0aGlzLmdldExlbmd0aCgpKX0sdGhpcy5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbGluZXMubGVuZ3RofSx0aGlzLmdldFRleHRSYW5nZT1mdW5jdGlvbihyYW5nZSl7cmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSl9LHRoaXMuZ2V0TGluZXNGb3JSYW5nZT1mdW5jdGlvbihyYW5nZSl7dmFyIGxpbmVzO2lmKHJhbmdlLnN0YXJ0LnJvdz09PXJhbmdlLmVuZC5yb3cpbGluZXM9W3RoaXMuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4scmFuZ2UuZW5kLmNvbHVtbildO2Vsc2V7bGluZXM9dGhpcy5nZXRMaW5lcyhyYW5nZS5zdGFydC5yb3cscmFuZ2UuZW5kLnJvdyksbGluZXNbMF09KGxpbmVzWzBdfHwiIikuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbik7dmFyIGw9bGluZXMubGVuZ3RoLTE7cmFuZ2UuZW5kLnJvdy1yYW5nZS5zdGFydC5yb3c9PWwmJihsaW5lc1tsXT1saW5lc1tsXS5zdWJzdHJpbmcoMCxyYW5nZS5lbmQuY29sdW1uKSl9cmV0dXJuIGxpbmVzfSx0aGlzLmluc2VydExpbmVzPWZ1bmN0aW9uKHJvdyxsaW5lcyl7cmV0dXJuIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpLHRoaXMuaW5zZXJ0RnVsbExpbmVzKHJvdyxsaW5lcyl9LHRoaXMucmVtb3ZlTGluZXM9ZnVuY3Rpb24oZmlyc3RSb3csbGFzdFJvdyl7cmV0dXJuIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50LnJlbW92ZUxpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgcmVtb3ZlRnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpLHRoaXMucmVtb3ZlRnVsbExpbmVzKGZpcnN0Um93LGxhc3RSb3cpfSx0aGlzLmluc2VydE5ld0xpbmU9ZnVuY3Rpb24ocG9zaXRpb24pe3JldHVybiBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5pbnNlcnROZXdMaW5lIGlzIGRlcHJlY2F0ZWQuIFVzZSBpbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgW1wnXCcsIFwnXCddKSBpbnN0ZWFkLiIpLHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sWyIiLCIiXSl9LHRoaXMuaW5zZXJ0PWZ1bmN0aW9uKHBvc2l0aW9uLHRleHQpe3JldHVybiAxPj10aGlzLmdldExlbmd0aCgpJiZ0aGlzLiRkZXRlY3ROZXdMaW5lKHRleHQpLHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sdGhpcy4kc3BsaXQodGV4dCkpfSx0aGlzLmluc2VydEluTGluZT1mdW5jdGlvbihwb3NpdGlvbix0ZXh0KXt2YXIgc3RhcnQ9dGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdyxwb3NpdGlvbi5jb2x1bW4pLGVuZD10aGlzLnBvcyhwb3NpdGlvbi5yb3cscG9zaXRpb24uY29sdW1uK3RleHQubGVuZ3RoKTtyZXR1cm4gdGhpcy5hcHBseURlbHRhKHtzdGFydDpzdGFydCxlbmQ6ZW5kLGFjdGlvbjoiaW5zZXJ0IixsaW5lczpbdGV4dF19LCEwKSx0aGlzLmNsb25lUG9zKGVuZCl9LHRoaXMuY2xpcHBlZFBvcz1mdW5jdGlvbihyb3csY29sdW1uKXt2YXIgbGVuZ3RoPXRoaXMuZ2V0TGVuZ3RoKCk7dm9pZCAwPT09cm93P3Jvdz1sZW5ndGg6MD5yb3c/cm93PTA6cm93Pj1sZW5ndGgmJihyb3c9bGVuZ3RoLTEsY29sdW1uPXZvaWQgMCk7dmFyIGxpbmU9dGhpcy5nZXRMaW5lKHJvdyk7cmV0dXJuIHZvaWQgMD09Y29sdW1uJiYoY29sdW1uPWxpbmUubGVuZ3RoKSxjb2x1bW49TWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLDApLGxpbmUubGVuZ3RoKSx7cm93OnJvdyxjb2x1bW46Y29sdW1ufX0sdGhpcy5jbG9uZVBvcz1mdW5jdGlvbihwb3Mpe3JldHVybntyb3c6cG9zLnJvdyxjb2x1bW46cG9zLmNvbHVtbn19LHRoaXMucG9zPWZ1bmN0aW9uKHJvdyxjb2x1bW4pe3JldHVybntyb3c6cm93LGNvbHVtbjpjb2x1bW59fSx0aGlzLiRjbGlwUG9zaXRpb249ZnVuY3Rpb24ocG9zaXRpb24pe3ZhciBsZW5ndGg9dGhpcy5nZXRMZW5ndGgoKTtyZXR1cm4gcG9zaXRpb24ucm93Pj1sZW5ndGg/KHBvc2l0aW9uLnJvdz1NYXRoLm1heCgwLGxlbmd0aC0xKSxwb3NpdGlvbi5jb2x1bW49dGhpcy5nZXRMaW5lKGxlbmd0aC0xKS5sZW5ndGgpOihwb3NpdGlvbi5yb3c9TWF0aC5tYXgoMCxwb3NpdGlvbi5yb3cpLHBvc2l0aW9uLmNvbHVtbj1NYXRoLm1pbihNYXRoLm1heChwb3NpdGlvbi5jb2x1bW4sMCksdGhpcy5nZXRMaW5lKHBvc2l0aW9uLnJvdykubGVuZ3RoKSkscG9zaXRpb259LHRoaXMuaW5zZXJ0RnVsbExpbmVzPWZ1bmN0aW9uKHJvdyxsaW5lcyl7cm93PU1hdGgubWluKE1hdGgubWF4KHJvdywwKSx0aGlzLmdldExlbmd0aCgpKTt2YXIgY29sdW1uPTA7dGhpcy5nZXRMZW5ndGgoKT5yb3c/KGxpbmVzPWxpbmVzLmNvbmNhdChbIiJdKSxjb2x1bW49MCk6KGxpbmVzPVsiIl0uY29uY2F0KGxpbmVzKSxyb3ctLSxjb2x1bW49dGhpcy4kbGluZXNbcm93XS5sZW5ndGgpLHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3Jvdzpyb3csY29sdW1uOmNvbHVtbn0sbGluZXMpfSx0aGlzLmluc2VydE1lcmdlZExpbmVzPWZ1bmN0aW9uKHBvc2l0aW9uLGxpbmVzKXt2YXIgc3RhcnQ9dGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdyxwb3NpdGlvbi5jb2x1bW4pLGVuZD17cm93OnN0YXJ0LnJvdytsaW5lcy5sZW5ndGgtMSxjb2x1bW46KDE9PWxpbmVzLmxlbmd0aD9zdGFydC5jb2x1bW46MCkrbGluZXNbbGluZXMubGVuZ3RoLTFdLmxlbmd0aH07cmV0dXJuIHRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6c3RhcnQsZW5kOmVuZCxhY3Rpb246Imluc2VydCIsbGluZXM6bGluZXN9KSx0aGlzLmNsb25lUG9zKGVuZCl9LHRoaXMucmVtb3ZlPWZ1bmN0aW9uKHJhbmdlKXt2YXIgc3RhcnQ9dGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdyxyYW5nZS5zdGFydC5jb2x1bW4pLGVuZD10aGlzLmNsaXBwZWRQb3MocmFuZ2UuZW5kLnJvdyxyYW5nZS5lbmQuY29sdW1uKTtyZXR1cm4gdGhpcy5hcHBseURlbHRhKHtzdGFydDpzdGFydCxlbmQ6ZW5kLGFjdGlvbjoicmVtb3ZlIixsaW5lczp0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OnN0YXJ0LGVuZDplbmR9KX0pLHRoaXMuY2xvbmVQb3Moc3RhcnQpfSx0aGlzLnJlbW92ZUluTGluZT1mdW5jdGlvbihyb3csc3RhcnRDb2x1bW4sZW5kQ29sdW1uKXt2YXIgc3RhcnQ9dGhpcy5jbGlwcGVkUG9zKHJvdyxzdGFydENvbHVtbiksZW5kPXRoaXMuY2xpcHBlZFBvcyhyb3csZW5kQ29sdW1uKTtyZXR1cm4gdGhpcy5hcHBseURlbHRhKHtzdGFydDpzdGFydCxlbmQ6ZW5kLGFjdGlvbjoicmVtb3ZlIixsaW5lczp0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OnN0YXJ0LGVuZDplbmR9KX0sITApLHRoaXMuY2xvbmVQb3Moc3RhcnQpfSx0aGlzLnJlbW92ZUZ1bGxMaW5lcz1mdW5jdGlvbihmaXJzdFJvdyxsYXN0Um93KXtmaXJzdFJvdz1NYXRoLm1pbihNYXRoLm1heCgwLGZpcnN0Um93KSx0aGlzLmdldExlbmd0aCgpLTEpLGxhc3RSb3c9TWF0aC5taW4oTWF0aC5tYXgoMCxsYXN0Um93KSx0aGlzLmdldExlbmd0aCgpLTEpO3ZhciBkZWxldGVGaXJzdE5ld0xpbmU9bGFzdFJvdz09dGhpcy5nZXRMZW5ndGgoKS0xJiZmaXJzdFJvdz4wLGRlbGV0ZUxhc3ROZXdMaW5lPXRoaXMuZ2V0TGVuZ3RoKCktMT5sYXN0Um93LHN0YXJ0Um93PWRlbGV0ZUZpcnN0TmV3TGluZT9maXJzdFJvdy0xOmZpcnN0Um93LHN0YXJ0Q29sPWRlbGV0ZUZpcnN0TmV3TGluZT90aGlzLmdldExpbmUoc3RhcnRSb3cpLmxlbmd0aDowLGVuZFJvdz1kZWxldGVMYXN0TmV3TGluZT9sYXN0Um93KzE6bGFzdFJvdyxlbmRDb2w9ZGVsZXRlTGFzdE5ld0xpbmU/MDp0aGlzLmdldExpbmUoZW5kUm93KS5sZW5ndGgscmFuZ2U9bmV3IFJhbmdlKHN0YXJ0Um93LHN0YXJ0Q29sLGVuZFJvdyxlbmRDb2wpLGRlbGV0ZWRMaW5lcz10aGlzLiRsaW5lcy5zbGljZShmaXJzdFJvdyxsYXN0Um93KzEpO3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnJhbmdlLnN0YXJ0LGVuZDpyYW5nZS5lbmQsYWN0aW9uOiJyZW1vdmUiLGxpbmVzOnRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSl9KSxkZWxldGVkTGluZXN9LHRoaXMucmVtb3ZlTmV3TGluZT1mdW5jdGlvbihyb3cpe3RoaXMuZ2V0TGVuZ3RoKCktMT5yb3cmJnJvdz49MCYmdGhpcy5hcHBseURlbHRhKHtzdGFydDp0aGlzLnBvcyhyb3csdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSxlbmQ6dGhpcy5wb3Mocm93KzEsMCksYWN0aW9uOiJyZW1vdmUiLGxpbmVzOlsiIiwiIl19KX0sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKHJhbmdlLHRleHQpe2lmKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2V8fChyYW5nZT1SYW5nZS5mcm9tUG9pbnRzKHJhbmdlLnN0YXJ0LHJhbmdlLmVuZCkpLDA9PT10ZXh0Lmxlbmd0aCYmcmFuZ2UuaXNFbXB0eSgpKXJldHVybiByYW5nZS5zdGFydDtpZih0ZXh0PT10aGlzLmdldFRleHRSYW5nZShyYW5nZSkpcmV0dXJuIHJhbmdlLmVuZDt0aGlzLnJlbW92ZShyYW5nZSk7dmFyIGVuZDtyZXR1cm4gZW5kPXRleHQ/dGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsdGV4dCk6cmFuZ2Uuc3RhcnR9LHRoaXMuYXBwbHlEZWx0YXM9ZnVuY3Rpb24oZGVsdGFzKXtmb3IodmFyIGk9MDtkZWx0YXMubGVuZ3RoPmk7aSsrKXRoaXMuYXBwbHlEZWx0YShkZWx0YXNbaV0pfSx0aGlzLnJldmVydERlbHRhcz1mdW5jdGlvbihkZWx0YXMpe2Zvcih2YXIgaT1kZWx0YXMubGVuZ3RoLTE7aT49MDtpLS0pdGhpcy5yZXZlcnREZWx0YShkZWx0YXNbaV0pfSx0aGlzLmFwcGx5RGVsdGE9ZnVuY3Rpb24oZGVsdGEsZG9Ob3RWYWxpZGF0ZSl7dmFyIGlzSW5zZXJ0PSJpbnNlcnQiPT1kZWx0YS5hY3Rpb247KGlzSW5zZXJ0PzE+PWRlbHRhLmxpbmVzLmxlbmd0aCYmIWRlbHRhLmxpbmVzWzBdOiFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LGRlbHRhLmVuZCkpfHwoaXNJbnNlcnQmJmRlbHRhLmxpbmVzLmxlbmd0aD4yZTQmJnRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLDJlNCksYXBwbHlEZWx0YSh0aGlzLiRsaW5lcyxkZWx0YSxkb05vdFZhbGlkYXRlKSx0aGlzLl9zaWduYWwoImNoYW5nZSIsZGVsdGEpKX0sdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGE9ZnVuY3Rpb24oZGVsdGEsTUFYKXtmb3IodmFyIGxpbmVzPWRlbHRhLmxpbmVzLGw9bGluZXMubGVuZ3RoLHJvdz1kZWx0YS5zdGFydC5yb3csY29sdW1uPWRlbHRhLnN0YXJ0LmNvbHVtbixmcm9tPTAsdG89MDs7KXtmcm9tPXRvLHRvKz1NQVgtMTt2YXIgY2h1bms9bGluZXMuc2xpY2UoZnJvbSx0byk7aWYodG8+bCl7ZGVsdGEubGluZXM9Y2h1bmssZGVsdGEuc3RhcnQucm93PXJvdytmcm9tLGRlbHRhLnN0YXJ0LmNvbHVtbj1jb2x1bW47YnJlYWt9Y2h1bmsucHVzaCgiIiksdGhpcy5hcHBseURlbHRhKHtzdGFydDp0aGlzLnBvcyhyb3crZnJvbSxjb2x1bW4pLGVuZDp0aGlzLnBvcyhyb3crdG8sY29sdW1uPTApLGFjdGlvbjpkZWx0YS5hY3Rpb24sbGluZXM6Y2h1bmt9LCEwKX19LHRoaXMucmV2ZXJ0RGVsdGE9ZnVuY3Rpb24oZGVsdGEpe3RoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6dGhpcy5jbG9uZVBvcyhkZWx0YS5zdGFydCksZW5kOnRoaXMuY2xvbmVQb3MoZGVsdGEuZW5kKSxhY3Rpb246Imluc2VydCI9PWRlbHRhLmFjdGlvbj8icmVtb3ZlIjoiaW5zZXJ0IixsaW5lczpkZWx0YS5saW5lcy5zbGljZSgpfSl9LHRoaXMuaW5kZXhUb1Bvc2l0aW9uPWZ1bmN0aW9uKGluZGV4LHN0YXJ0Um93KXtmb3IodmFyIGxpbmVzPXRoaXMuJGxpbmVzfHx0aGlzLmdldEFsbExpbmVzKCksbmV3bGluZUxlbmd0aD10aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGgsaT1zdGFydFJvd3x8MCxsPWxpbmVzLmxlbmd0aDtsPmk7aSsrKWlmKGluZGV4LT1saW5lc1tpXS5sZW5ndGgrbmV3bGluZUxlbmd0aCwwPmluZGV4KXJldHVybntyb3c6aSxjb2x1bW46aW5kZXgrbGluZXNbaV0ubGVuZ3RoK25ld2xpbmVMZW5ndGh9O3JldHVybntyb3c6bC0xLGNvbHVtbjpsaW5lc1tsLTFdLmxlbmd0aH19LHRoaXMucG9zaXRpb25Ub0luZGV4PWZ1bmN0aW9uKHBvcyxzdGFydFJvdyl7Zm9yKHZhciBsaW5lcz10aGlzLiRsaW5lc3x8dGhpcy5nZXRBbGxMaW5lcygpLG5ld2xpbmVMZW5ndGg9dGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoLGluZGV4PTAscm93PU1hdGgubWluKHBvcy5yb3csbGluZXMubGVuZ3RoKSxpPXN0YXJ0Um93fHwwO3Jvdz5pOysraSlpbmRleCs9bGluZXNbaV0ubGVuZ3RoK25ld2xpbmVMZW5ndGg7cmV0dXJuIGluZGV4K3Bvcy5jb2x1bW59fSkuY2FsbChEb2N1bWVudC5wcm90b3R5cGUpLGV4cG9ydHMuRG9jdW1lbnQ9RG9jdW1lbnR9KSxhY2UuZGVmaW5lKCJhY2UvbGliL2xhbmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihhY2VxdWlyZSxleHBvcnRzKXsidXNlIHN0cmljdCI7ZXhwb3J0cy5sYXN0PWZ1bmN0aW9uKGEpe3JldHVybiBhW2EubGVuZ3RoLTFdfSxleHBvcnRzLnN0cmluZ1JldmVyc2U9ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIil9LGV4cG9ydHMuc3RyaW5nUmVwZWF0PWZ1bmN0aW9uKHN0cmluZyxjb3VudCl7Zm9yKHZhciByZXN1bHQ9IiI7Y291bnQ+MDspMSZjb3VudCYmKHJlc3VsdCs9c3RyaW5nKSwoY291bnQ+Pj0xKSYmKHN0cmluZys9c3RyaW5nKTtyZXR1cm4gcmVzdWx0fTt2YXIgdHJpbUJlZ2luUmVnZXhwPS9eXFxzXFxzKi8sdHJpbUVuZFJlZ2V4cD0vXFxzXFxzKiQvO2V4cG9ydHMuc3RyaW5nVHJpbUxlZnQ9ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCIiKX0sZXhwb3J0cy5zdHJpbmdUcmltUmlnaHQ9ZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwiIil9LGV4cG9ydHMuY29weU9iamVjdD1mdW5jdGlvbihvYmope3ZhciBjb3B5PXt9O2Zvcih2YXIga2V5IGluIG9iailjb3B5W2tleV09b2JqW2tleV07cmV0dXJuIGNvcHl9LGV4cG9ydHMuY29weUFycmF5PWZ1bmN0aW9uKGFycmF5KXtmb3IodmFyIGNvcHk9W10saT0wLGw9YXJyYXkubGVuZ3RoO2w+aTtpKyspY29weVtpXT1hcnJheVtpXSYmIm9iamVjdCI9PXR5cGVvZiBhcnJheVtpXT90aGlzLmNvcHlPYmplY3QoYXJyYXlbaV0pOmFycmF5W2ldO3JldHVybiBjb3B5fSxleHBvcnRzLmRlZXBDb3B5PWZ1bmN0aW9uIGRlZXBDb3B5KG9iail7aWYoIm9iamVjdCIhPXR5cGVvZiBvYmp8fCFvYmopcmV0dXJuIG9iajt2YXIgY29weTtpZihBcnJheS5pc0FycmF5KG9iaikpe2NvcHk9W107Zm9yKHZhciBrZXk9MDtvYmoubGVuZ3RoPmtleTtrZXkrKyljb3B5W2tleV09ZGVlcENvcHkob2JqW2tleV0pO3JldHVybiBjb3B5fWlmKCJbb2JqZWN0IE9iamVjdF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpcmV0dXJuIG9iajtjb3B5PXt9O2Zvcih2YXIga2V5IGluIG9iailjb3B5W2tleV09ZGVlcENvcHkob2JqW2tleV0pO3JldHVybiBjb3B5fSxleHBvcnRzLmFycmF5VG9NYXA9ZnVuY3Rpb24oYXJyKXtmb3IodmFyIG1hcD17fSxpPTA7YXJyLmxlbmd0aD5pO2krKyltYXBbYXJyW2ldXT0xO3JldHVybiBtYXB9LGV4cG9ydHMuY3JlYXRlTWFwPWZ1bmN0aW9uKHByb3BzKXt2YXIgbWFwPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBpIGluIHByb3BzKW1hcFtpXT1wcm9wc1tpXTtyZXR1cm4gbWFwfSxleHBvcnRzLmFycmF5UmVtb3ZlPWZ1bmN0aW9uKGFycmF5LHZhbHVlKXtmb3IodmFyIGk9MDthcnJheS5sZW5ndGg+PWk7aSsrKXZhbHVlPT09YXJyYXlbaV0mJmFycmF5LnNwbGljZShpLDEpfSxleHBvcnRzLmVzY2FwZVJlZ0V4cD1mdW5jdGlvbihzdHIpe3JldHVybiBzdHIucmVwbGFjZSgvKFsuKis/XiR7fSgpfFtcXF1cXC9cXFxcXSkvZywiXFxcXCQxIil9LGV4cG9ydHMuZXNjYXBlSFRNTD1mdW5jdGlvbihzdHIpe3JldHVybiBzdHIucmVwbGFjZSgvJi9nLCImIzM4OyIpLnJlcGxhY2UoLyIvZywiJiMzNDsiKS5yZXBsYWNlKC9cJy9nLCImIzM5OyIpLnJlcGxhY2UoLzwvZywiJiM2MDsiKX0sZXhwb3J0cy5nZXRNYXRjaE9mZnNldHM9ZnVuY3Rpb24oc3RyaW5nLHJlZ0V4cCl7dmFyIG1hdGNoZXM9W107cmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCxmdW5jdGlvbihzdHIpe21hdGNoZXMucHVzaCh7b2Zmc2V0OmFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTJdLGxlbmd0aDpzdHIubGVuZ3RofSl9KSxtYXRjaGVzfSxleHBvcnRzLmRlZmVycmVkQ2FsbD1mdW5jdGlvbihmY24pe3ZhciB0aW1lcj1udWxsLGNhbGxiYWNrPWZ1bmN0aW9uKCl7dGltZXI9bnVsbCxmY24oKX0sZGVmZXJyZWQ9ZnVuY3Rpb24odGltZW91dCl7cmV0dXJuIGRlZmVycmVkLmNhbmNlbCgpLHRpbWVyPXNldFRpbWVvdXQoY2FsbGJhY2ssdGltZW91dHx8MCksZGVmZXJyZWR9O3JldHVybiBkZWZlcnJlZC5zY2hlZHVsZT1kZWZlcnJlZCxkZWZlcnJlZC5jYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsKCksZmNuKCksZGVmZXJyZWR9LGRlZmVycmVkLmNhbmNlbD1mdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQodGltZXIpLHRpbWVyPW51bGwsZGVmZXJyZWR9LGRlZmVycmVkLmlzUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiB0aW1lcn0sZGVmZXJyZWR9LGV4cG9ydHMuZGVsYXllZENhbGw9ZnVuY3Rpb24oZmNuLGRlZmF1bHRUaW1lb3V0KXt2YXIgdGltZXI9bnVsbCxjYWxsYmFjaz1mdW5jdGlvbigpe3RpbWVyPW51bGwsZmNuKCl9LF9zZWxmPWZ1bmN0aW9uKHRpbWVvdXQpe251bGw9PXRpbWVyJiYodGltZXI9c2V0VGltZW91dChjYWxsYmFjayx0aW1lb3V0fHxkZWZhdWx0VGltZW91dCkpfTtyZXR1cm4gX3NlbGYuZGVsYXk9ZnVuY3Rpb24odGltZW91dCl7dGltZXImJmNsZWFyVGltZW91dCh0aW1lciksdGltZXI9c2V0VGltZW91dChjYWxsYmFjayx0aW1lb3V0fHxkZWZhdWx0VGltZW91dCl9LF9zZWxmLnNjaGVkdWxlPV9zZWxmLF9zZWxmLmNhbGw9ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbCgpLGZjbigpfSxfc2VsZi5jYW5jZWw9ZnVuY3Rpb24oKXt0aW1lciYmY2xlYXJUaW1lb3V0KHRpbWVyKSx0aW1lcj1udWxsfSxfc2VsZi5pc1BlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGltZXJ9LF9zZWxmfX0pLGFjZS5kZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIiwiYWNlL2RvY3VtZW50IiwiYWNlL2xpYi9sYW5nIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2FjZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlO3ZhciBEb2N1bWVudD1hY2VxdWlyZSgiLi4vZG9jdW1lbnQiKS5Eb2N1bWVudCxsYW5nPWFjZXF1aXJlKCIuLi9saWIvbGFuZyIpLE1pcnJvcj1leHBvcnRzLk1pcnJvcj1mdW5jdGlvbihzZW5kZXIpe3RoaXMuc2VuZGVyPXNlbmRlcjt2YXIgZG9jPXRoaXMuZG9jPW5ldyBEb2N1bWVudCgiIiksZGVmZXJyZWRVcGRhdGU9dGhpcy5kZWZlcnJlZFVwZGF0ZT1sYW5nLmRlbGF5ZWRDYWxsKHRoaXMub25VcGRhdGUuYmluZCh0aGlzKSksX3NlbGY9dGhpcztzZW5kZXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dmFyIGRhdGE9ZS5kYXRhO2lmKGRhdGFbMF0uc3RhcnQpZG9jLmFwcGx5RGVsdGFzKGRhdGEpO2Vsc2UgZm9yKHZhciBpPTA7ZGF0YS5sZW5ndGg+aTtpKz0yKXtpZihBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpdmFyIGQ9e2FjdGlvbjoiaW5zZXJ0IixzdGFydDpkYXRhW2ldLGxpbmVzOmRhdGFbaSsxXX07ZWxzZSB2YXIgZD17YWN0aW9uOiJyZW1vdmUiLHN0YXJ0OmRhdGFbaV0sZW5kOmRhdGFbaSsxXX07ZG9jLmFwcGx5RGVsdGEoZCwhMCl9cmV0dXJuIF9zZWxmLiR0aW1lb3V0P2RlZmVycmVkVXBkYXRlLnNjaGVkdWxlKF9zZWxmLiR0aW1lb3V0KTooX3NlbGYub25VcGRhdGUoKSx2b2lkIDApfSl9OyhmdW5jdGlvbigpe3RoaXMuJHRpbWVvdXQ9NTAwLHRoaXMuc2V0VGltZW91dD1mdW5jdGlvbih0aW1lb3V0KXt0aGlzLiR0aW1lb3V0PXRpbWVvdXR9LHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24odmFsdWUpe3RoaXMuZG9jLnNldFZhbHVlKHZhbHVlKSx0aGlzLmRlZmVycmVkVXBkYXRlLnNjaGVkdWxlKHRoaXMuJHRpbWVvdXQpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKGNhbGxiYWNrSWQpe3RoaXMuc2VuZGVyLmNhbGxiYWNrKHRoaXMuZG9jLmdldFZhbHVlKCksY2FsbGJhY2tJZCl9LHRoaXMub25VcGRhdGU9ZnVuY3Rpb24oKXt9LHRoaXMuaXNQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmZXJyZWRVcGRhdGUuaXNQZW5kaW5nKCl9fSkuY2FsbChNaXJyb3IucHJvdG90eXBlKX0pLGFjZS5kZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQvanNoaW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oYWNlcXVpcmUsZXhwb3J0cyxtb2R1bGUpe21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIG91dGVyKG1vZHVsZXMsY2FjaGUsZW50cnkpe2Z1bmN0aW9uIG5ld1JlcXVpcmUobmFtZSxqdW1wZWQpe2lmKCFjYWNoZVtuYW1lXSl7aWYoIW1vZHVsZXNbbmFtZV0pe3ZhciBjdXJyZW50UmVxdWlyZT0iZnVuY3Rpb24iPT10eXBlb2YgYWNlcXVpcmUmJmFjZXF1aXJlO2lmKCFqdW1wZWQmJmN1cnJlbnRSZXF1aXJlKXJldHVybiBjdXJyZW50UmVxdWlyZShuYW1lLCEwKTtpZihwcmV2aW91c1JlcXVpcmUpcmV0dXJuIHByZXZpb3VzUmVxdWlyZShuYW1lLCEwKTt2YXIgZXJyPUVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgXCciK25hbWUrIlwnIik7dGhyb3cgZXJyLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGVycn12YXIgbT1jYWNoZVtuYW1lXT17ZXhwb3J0czp7fX07bW9kdWxlc1tuYW1lXVswXS5jYWxsKG0uZXhwb3J0cyxmdW5jdGlvbih4KXt2YXIgaWQ9bW9kdWxlc1tuYW1lXVsxXVt4XTtyZXR1cm4gbmV3UmVxdWlyZShpZD9pZDp4KX0sbSxtLmV4cG9ydHMsb3V0ZXIsbW9kdWxlcyxjYWNoZSxlbnRyeSl9cmV0dXJuIGNhY2hlW25hbWVdLmV4cG9ydHN9Zm9yKHZhciBwcmV2aW91c1JlcXVpcmU9ImZ1bmN0aW9uIj09dHlwZW9mIGFjZXF1aXJlJiZhY2VxdWlyZSxpPTA7ZW50cnkubGVuZ3RoPmk7aSsrKW5ld1JlcXVpcmUoZW50cnlbaV0pO3JldHVybiBuZXdSZXF1aXJlKGVudHJ5WzBdKX0oeyIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSl7ZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCl7dGhpcy5fZXZlbnRzPXRoaXMuX2V2ZW50c3x8e30sdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfWZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYXJnfWZ1bmN0aW9uIGlzTnVtYmVyKGFyZyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhcmd9ZnVuY3Rpb24gaXNPYmplY3QoYXJnKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGFyZyYmbnVsbCE9PWFyZ31mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpe3JldHVybiB2b2lkIDA9PT1hcmd9bW9kdWxlLmV4cG9ydHM9RXZlbnRFbWl0dGVyLEV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXI9RXZlbnRFbWl0dGVyLEV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMCxFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycz0xMCxFdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihuKXtpZighaXNOdW1iZXIobil8fDA+bnx8aXNOYU4obikpdGhyb3cgVHlwZUVycm9yKCJuIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPW4sdGhpc30sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHR5cGUpe3ZhciBlcixoYW5kbGVyLGxlbixhcmdzLGksbGlzdGVuZXJzO2lmKHRoaXMuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz17fSksImVycm9yIj09PXR5cGUmJighdGhpcy5fZXZlbnRzLmVycm9yfHxpc09iamVjdCh0aGlzLl9ldmVudHMuZXJyb3IpJiYhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpe2lmKGVyPWFyZ3VtZW50c1sxXSxlciBpbnN0YW5jZW9mIEVycm9yKXRocm93IGVyO3Rocm93IFR5cGVFcnJvcihcJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCAiZXJyb3IiIGV2ZW50LlwnKX1pZihoYW5kbGVyPXRoaXMuX2V2ZW50c1t0eXBlXSxpc1VuZGVmaW5lZChoYW5kbGVyKSlyZXR1cm4hMTtpZihpc0Z1bmN0aW9uKGhhbmRsZXIpKXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6aGFuZGxlci5jYWxsKHRoaXMpO2JyZWFrO2Nhc2UgMjpoYW5kbGVyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2UgMzpoYW5kbGVyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTticmVhaztkZWZhdWx0OmZvcihsZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KGxlbi0xKSxpPTE7bGVuPmk7aSsrKWFyZ3NbaS0xXT1hcmd1bWVudHNbaV07aGFuZGxlci5hcHBseSh0aGlzLGFyZ3MpfWVsc2UgaWYoaXNPYmplY3QoaGFuZGxlcikpe2ZvcihsZW49YXJndW1lbnRzLmxlbmd0aCxhcmdzPUFycmF5KGxlbi0xKSxpPTE7bGVuPmk7aSsrKWFyZ3NbaS0xXT1hcmd1bWVudHNbaV07Zm9yKGxpc3RlbmVycz1oYW5kbGVyLnNsaWNlKCksbGVuPWxpc3RlbmVycy5sZW5ndGgsaT0wO2xlbj5pO2krKylsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcyxhcmdzKX1yZXR1cm4hMH0sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0eXBlLGxpc3RlbmVyKXt2YXIgbTtpZighaXNGdW5jdGlvbihsaXN0ZW5lcikpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtpZih0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lciYmdGhpcy5lbWl0KCJuZXdMaXN0ZW5lciIsdHlwZSxpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKT9saXN0ZW5lci5saXN0ZW5lcjpsaXN0ZW5lciksdGhpcy5fZXZlbnRzW3R5cGVdP2lzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSk/dGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpOnRoaXMuX2V2ZW50c1t0eXBlXT1bdGhpcy5fZXZlbnRzW3R5cGVdLGxpc3RlbmVyXTp0aGlzLl9ldmVudHNbdHlwZV09bGlzdGVuZXIsaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSYmIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpe3ZhciBtO209aXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKT9FdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVyczp0aGlzLl9tYXhMaXN0ZW5lcnMsbSYmbT4wJiZ0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoPm0mJih0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkPSEwLGNvbnNvbGUuZXJyb3IoIihub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuIix0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS50cmFjZSYmY29uc29sZS50cmFjZSgpKX1yZXR1cm4gdGhpc30sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbj1FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyLEV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0eXBlLGxpc3RlbmVyKXtmdW5jdGlvbiBnKCl7dGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLGcpLGZpcmVkfHwoZmlyZWQ9ITAsbGlzdGVuZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1pZighaXNGdW5jdGlvbihsaXN0ZW5lcikpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgZmlyZWQ9ITE7cmV0dXJuIGcubGlzdGVuZXI9bGlzdGVuZXIsdGhpcy5vbih0eXBlLGcpLHRoaXN9LEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odHlwZSxsaXN0ZW5lcil7dmFyIGxpc3QscG9zaXRpb24sbGVuZ3RoLGk7aWYoIWlzRnVuY3Rpb24obGlzdGVuZXIpKXRocm93IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7aWYoIXRoaXMuX2V2ZW50c3x8IXRoaXMuX2V2ZW50c1t0eXBlXSlyZXR1cm4gdGhpcztpZihsaXN0PXRoaXMuX2V2ZW50c1t0eXBlXSxsZW5ndGg9bGlzdC5sZW5ndGgscG9zaXRpb249LTEsbGlzdD09PWxpc3RlbmVyfHxpc0Z1bmN0aW9uKGxpc3QubGlzdGVuZXIpJiZsaXN0Lmxpc3RlbmVyPT09bGlzdGVuZXIpZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHR5cGUsbGlzdGVuZXIpO2Vsc2UgaWYoaXNPYmplY3QobGlzdCkpe2ZvcihpPWxlbmd0aDtpLS1ceDNlMDspaWYobGlzdFtpXT09PWxpc3RlbmVyfHxsaXN0W2ldLmxpc3RlbmVyJiZsaXN0W2ldLmxpc3RlbmVyPT09bGlzdGVuZXIpe3Bvc2l0aW9uPWk7YnJlYWt9aWYoMD5wb3NpdGlvbilyZXR1cm4gdGhpczsxPT09bGlzdC5sZW5ndGg/KGxpc3QubGVuZ3RoPTAsZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXSk6bGlzdC5zcGxpY2UocG9zaXRpb24sMSksdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0eXBlLGxpc3RlbmVyKX1yZXR1cm4gdGhpc30sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odHlwZSl7dmFyIGtleSxsaXN0ZW5lcnM7aWYoIXRoaXMuX2V2ZW50cylyZXR1cm4gdGhpcztpZighdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9ldmVudHM9e306dGhpcy5fZXZlbnRzW3R5cGVdJiZkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe2ZvcihrZXkgaW4gdGhpcy5fZXZlbnRzKSJyZW1vdmVMaXN0ZW5lciIhPT1rZXkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz17fSx0aGlzXG59aWYobGlzdGVuZXJzPXRoaXMuX2V2ZW50c1t0eXBlXSxpc0Z1bmN0aW9uKGxpc3RlbmVycykpdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLGxpc3RlbmVycyk7ZWxzZSBmb3IoO2xpc3RlbmVycy5sZW5ndGg7KXRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSxsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aC0xXSk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV0sdGhpc30sRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odHlwZSl7dmFyIHJldDtyZXR1cm4gcmV0PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzW3R5cGVdP2lzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKT9bdGhpcy5fZXZlbnRzW3R5cGVdXTp0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTpbXX0sRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZW1pdHRlcix0eXBlKXt2YXIgcmV0O3JldHVybiByZXQ9ZW1pdHRlci5fZXZlbnRzJiZlbWl0dGVyLl9ldmVudHNbdHlwZV0/aXNGdW5jdGlvbihlbWl0dGVyLl9ldmVudHNbdHlwZV0pPzE6ZW1pdHRlci5fZXZlbnRzW3R5cGVdLmxlbmd0aDowfX0se31dLCIvbm9kZV9tb2R1bGVzL2pzaGludC9kYXRhL2FzY2lpLWlkZW50aWZpZXItZGF0YS5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlKXtmb3IodmFyIGlkZW50aWZpZXJTdGFydFRhYmxlPVtdLGk9MDsxMjg+aTtpKyspaWRlbnRpZmllclN0YXJ0VGFibGVbaV09MzY9PT1pfHxpPj02NSYmOTA+PWl8fDk1PT09aXx8aT49OTcmJjEyMj49aTtmb3IodmFyIGlkZW50aWZpZXJQYXJ0VGFibGU9W10saT0wOzEyOD5pO2krKylpZGVudGlmaWVyUGFydFRhYmxlW2ldPWlkZW50aWZpZXJTdGFydFRhYmxlW2ldfHxpPj00OCYmNTc+PWk7bW9kdWxlLmV4cG9ydHM9e2FzY2lpSWRlbnRpZmllclN0YXJ0VGFibGU6aWRlbnRpZmllclN0YXJ0VGFibGUsYXNjaWlJZGVudGlmaWVyUGFydFRhYmxlOmlkZW50aWZpZXJQYXJ0VGFibGV9fSx7fV0sIi9ub2RlX21vZHVsZXMvanNoaW50L2xvZGFzaC5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeyhmdW5jdGlvbihnbG9iYWwpeyhmdW5jdGlvbigpe2Z1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXkscHJlZGljYXRlLGZyb21SaWdodCl7Zm9yKHZhciBsZW5ndGg9YXJyYXkubGVuZ3RoLGluZGV4PWZyb21SaWdodD9sZW5ndGg6LTE7ZnJvbVJpZ2h0P2luZGV4LS06bGVuZ3RoPisraW5kZXg7KWlmKHByZWRpY2F0ZShhcnJheVtpbmRleF0saW5kZXgsYXJyYXkpKXJldHVybiBpbmRleDtyZXR1cm4tMX1mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSx2YWx1ZSxmcm9tSW5kZXgpe2lmKHZhbHVlIT09dmFsdWUpcmV0dXJuIGluZGV4T2ZOYU4oYXJyYXksZnJvbUluZGV4KTtmb3IodmFyIGluZGV4PWZyb21JbmRleC0xLGxlbmd0aD1hcnJheS5sZW5ndGg7bGVuZ3RoPisraW5kZXg7KWlmKGFycmF5W2luZGV4XT09PXZhbHVlKXJldHVybiBpbmRleDtyZXR1cm4tMX1mdW5jdGlvbiBiYXNlSXNGdW5jdGlvbih2YWx1ZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZhbHVlfHwhMX1mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdmFsdWU/dmFsdWU6bnVsbD09dmFsdWU/IiI6dmFsdWUrIiJ9ZnVuY3Rpb24gaW5kZXhPZk5hTihhcnJheSxmcm9tSW5kZXgsZnJvbVJpZ2h0KXtmb3IodmFyIGxlbmd0aD1hcnJheS5sZW5ndGgsaW5kZXg9ZnJvbUluZGV4Kyhmcm9tUmlnaHQ/MDotMSk7ZnJvbVJpZ2h0P2luZGV4LS06bGVuZ3RoPisraW5kZXg7KXt2YXIgb3RoZXI9YXJyYXlbaW5kZXhdO2lmKG90aGVyIT09b3RoZXIpcmV0dXJuIGluZGV4fXJldHVybi0xfWZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSl7cmV0dXJuISF2YWx1ZSYmIm9iamVjdCI9PXR5cGVvZiB2YWx1ZX1mdW5jdGlvbiBsb2Rhc2goKXt9ZnVuY3Rpb24gYXJyYXlDb3B5KHNvdXJjZSxhcnJheSl7dmFyIGluZGV4PS0xLGxlbmd0aD1zb3VyY2UubGVuZ3RoO2ZvcihhcnJheXx8KGFycmF5PUFycmF5KGxlbmd0aCkpO2xlbmd0aD4rK2luZGV4OylhcnJheVtpbmRleF09c291cmNlW2luZGV4XTtyZXR1cm4gYXJyYXl9ZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LGl0ZXJhdGVlKXtmb3IodmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGg7bGVuZ3RoPisraW5kZXgmJml0ZXJhdGVlKGFycmF5W2luZGV4XSxpbmRleCxhcnJheSkhPT0hMTspO3JldHVybiBhcnJheX1mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSxwcmVkaWNhdGUpe2Zvcih2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXNJbmRleD0tMSxyZXN1bHQ9W107bGVuZ3RoPisraW5kZXg7KXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO3ByZWRpY2F0ZSh2YWx1ZSxpbmRleCxhcnJheSkmJihyZXN1bHRbKytyZXNJbmRleF09dmFsdWUpfXJldHVybiByZXN1bHR9ZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksaXRlcmF0ZWUpe2Zvcih2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXN1bHQ9QXJyYXkobGVuZ3RoKTtsZW5ndGg+KytpbmRleDspcmVzdWx0W2luZGV4XT1pdGVyYXRlZShhcnJheVtpbmRleF0saW5kZXgsYXJyYXkpO3JldHVybiByZXN1bHR9ZnVuY3Rpb24gYXJyYXlNYXgoYXJyYXkpe2Zvcih2YXIgaW5kZXg9LTEsbGVuZ3RoPWFycmF5Lmxlbmd0aCxyZXN1bHQ9TkVHQVRJVkVfSU5GSU5JVFk7bGVuZ3RoPisraW5kZXg7KXt2YXIgdmFsdWU9YXJyYXlbaW5kZXhdO3ZhbHVlPnJlc3VsdCYmKHJlc3VsdD12YWx1ZSl9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXkscHJlZGljYXRlKXtmb3IodmFyIGluZGV4PS0xLGxlbmd0aD1hcnJheS5sZW5ndGg7bGVuZ3RoPisraW5kZXg7KWlmKHByZWRpY2F0ZShhcnJheVtpbmRleF0saW5kZXgsYXJyYXkpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGFzc2lnbldpdGgob2JqZWN0LHNvdXJjZSxjdXN0b21pemVyKXt2YXIgcHJvcHM9a2V5cyhzb3VyY2UpO3B1c2guYXBwbHkocHJvcHMsZ2V0U3ltYm9scyhzb3VyY2UpKTtmb3IodmFyIGluZGV4PS0xLGxlbmd0aD1wcm9wcy5sZW5ndGg7bGVuZ3RoPisraW5kZXg7KXt2YXIga2V5PXByb3BzW2luZGV4XSx2YWx1ZT1vYmplY3Rba2V5XSxyZXN1bHQ9Y3VzdG9taXplcih2YWx1ZSxzb3VyY2Vba2V5XSxrZXksb2JqZWN0LHNvdXJjZSk7KHJlc3VsdD09PXJlc3VsdD9yZXN1bHQ9PT12YWx1ZTp2YWx1ZSE9PXZhbHVlKSYmKHZhbHVlIT09dW5kZWZpbmVkfHxrZXkgaW4gb2JqZWN0KXx8KG9iamVjdFtrZXldPXJlc3VsdCl9cmV0dXJuIG9iamVjdH1mdW5jdGlvbiBiYXNlQ29weShzb3VyY2UscHJvcHMsb2JqZWN0KXtvYmplY3R8fChvYmplY3Q9e30pO2Zvcih2YXIgaW5kZXg9LTEsbGVuZ3RoPXByb3BzLmxlbmd0aDtsZW5ndGg+KytpbmRleDspe3ZhciBrZXk9cHJvcHNbaW5kZXhdO29iamVjdFtrZXldPXNvdXJjZVtrZXldfXJldHVybiBvYmplY3R9ZnVuY3Rpb24gYmFzZUNhbGxiYWNrKGZ1bmMsdGhpc0FyZyxhcmdDb3VudCl7dmFyIHR5cGU9dHlwZW9mIGZ1bmM7cmV0dXJuImZ1bmN0aW9uIj09dHlwZT90aGlzQXJnPT09dW5kZWZpbmVkP2Z1bmM6YmluZENhbGxiYWNrKGZ1bmMsdGhpc0FyZyxhcmdDb3VudCk6bnVsbD09ZnVuYz9pZGVudGl0eToib2JqZWN0Ij09dHlwZT9iYXNlTWF0Y2hlcyhmdW5jKTp0aGlzQXJnPT09dW5kZWZpbmVkP3Byb3BlcnR5KGZ1bmMpOmJhc2VNYXRjaGVzUHJvcGVydHkoZnVuYyx0aGlzQXJnKX1mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsaXNEZWVwLGN1c3RvbWl6ZXIsa2V5LG9iamVjdCxzdGFja0Esc3RhY2tCKXt2YXIgcmVzdWx0O2lmKGN1c3RvbWl6ZXImJihyZXN1bHQ9b2JqZWN0P2N1c3RvbWl6ZXIodmFsdWUsa2V5LG9iamVjdCk6Y3VzdG9taXplcih2YWx1ZSkpLHJlc3VsdCE9PXVuZGVmaW5lZClyZXR1cm4gcmVzdWx0O2lmKCFpc09iamVjdCh2YWx1ZSkpcmV0dXJuIHZhbHVlO3ZhciBpc0Fycj1pc0FycmF5KHZhbHVlKTtpZihpc0Fycil7aWYocmVzdWx0PWluaXRDbG9uZUFycmF5KHZhbHVlKSwhaXNEZWVwKXJldHVybiBhcnJheUNvcHkodmFsdWUscmVzdWx0KX1lbHNle3ZhciB0YWc9b2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSksaXNGdW5jPXRhZz09ZnVuY1RhZztpZih0YWchPW9iamVjdFRhZyYmdGFnIT1hcmdzVGFnJiYoIWlzRnVuY3x8b2JqZWN0KSlyZXR1cm4gY2xvbmVhYmxlVGFnc1t0YWddP2luaXRDbG9uZUJ5VGFnKHZhbHVlLHRhZyxpc0RlZXApOm9iamVjdD92YWx1ZTp7fTtpZihyZXN1bHQ9aW5pdENsb25lT2JqZWN0KGlzRnVuYz97fTp2YWx1ZSksIWlzRGVlcClyZXR1cm4gYmFzZUFzc2lnbihyZXN1bHQsdmFsdWUpfXN0YWNrQXx8KHN0YWNrQT1bXSksc3RhY2tCfHwoc3RhY2tCPVtdKTtmb3IodmFyIGxlbmd0aD1zdGFja0EubGVuZ3RoO2xlbmd0aC0tOylpZihzdGFja0FbbGVuZ3RoXT09dmFsdWUpcmV0dXJuIHN0YWNrQltsZW5ndGhdO3JldHVybiBzdGFja0EucHVzaCh2YWx1ZSksc3RhY2tCLnB1c2gocmVzdWx0KSwoaXNBcnI/YXJyYXlFYWNoOmJhc2VGb3JPd24pKHZhbHVlLGZ1bmN0aW9uKHN1YlZhbHVlLGtleSl7cmVzdWx0W2tleV09YmFzZUNsb25lKHN1YlZhbHVlLGlzRGVlcCxjdXN0b21pemVyLGtleSx2YWx1ZSxzdGFja0Esc3RhY2tCKX0pLHJlc3VsdH1mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24scHJlZGljYXRlKXt2YXIgcmVzdWx0PVtdO3JldHVybiBiYXNlRWFjaChjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe3ByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKSYmcmVzdWx0LnB1c2godmFsdWUpfSkscmVzdWx0fWZ1bmN0aW9uIGJhc2VGb3JJbihvYmplY3QsaXRlcmF0ZWUpe3JldHVybiBiYXNlRm9yKG9iamVjdCxpdGVyYXRlZSxrZXlzSW4pfWZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LGl0ZXJhdGVlKXtyZXR1cm4gYmFzZUZvcihvYmplY3QsaXRlcmF0ZWUsa2V5cyl9ZnVuY3Rpb24gYmFzZUdldChvYmplY3QscGF0aCxwYXRoS2V5KXtpZihudWxsIT1vYmplY3Qpe3BhdGhLZXkhPT11bmRlZmluZWQmJnBhdGhLZXkgaW4gdG9PYmplY3Qob2JqZWN0KSYmKHBhdGg9W3BhdGhLZXldKTtmb3IodmFyIGluZGV4PS0xLGxlbmd0aD1wYXRoLmxlbmd0aDtudWxsIT1vYmplY3QmJmxlbmd0aD4rK2luZGV4Oyl2YXIgcmVzdWx0PW9iamVjdD1vYmplY3RbcGF0aFtpbmRleF1dO3JldHVybiByZXN1bHR9fWZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLG90aGVyLGN1c3RvbWl6ZXIsaXNMb29zZSxzdGFja0Esc3RhY2tCKXtpZih2YWx1ZT09PW90aGVyKXJldHVybiAwIT09dmFsdWV8fDEvdmFsdWU9PTEvb3RoZXI7dmFyIHZhbFR5cGU9dHlwZW9mIHZhbHVlLG90aFR5cGU9dHlwZW9mIG90aGVyO3JldHVybiJmdW5jdGlvbiIhPXZhbFR5cGUmJiJvYmplY3QiIT12YWxUeXBlJiYiZnVuY3Rpb24iIT1vdGhUeXBlJiYib2JqZWN0IiE9b3RoVHlwZXx8bnVsbD09dmFsdWV8fG51bGw9PW90aGVyP3ZhbHVlIT09dmFsdWUmJm90aGVyIT09b3RoZXI6YmFzZUlzRXF1YWxEZWVwKHZhbHVlLG90aGVyLGJhc2VJc0VxdWFsLGN1c3RvbWl6ZXIsaXNMb29zZSxzdGFja0Esc3RhY2tCKX1mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LG90aGVyLGVxdWFsRnVuYyxjdXN0b21pemVyLGlzTG9vc2Usc3RhY2tBLHN0YWNrQil7dmFyIG9iaklzQXJyPWlzQXJyYXkob2JqZWN0KSxvdGhJc0Fycj1pc0FycmF5KG90aGVyKSxvYmpUYWc9YXJyYXlUYWcsb3RoVGFnPWFycmF5VGFnO29iaklzQXJyfHwob2JqVGFnPW9ialRvU3RyaW5nLmNhbGwob2JqZWN0KSxvYmpUYWc9PWFyZ3NUYWc/b2JqVGFnPW9iamVjdFRhZzpvYmpUYWchPW9iamVjdFRhZyYmKG9iaklzQXJyPWlzVHlwZWRBcnJheShvYmplY3QpKSksb3RoSXNBcnJ8fChvdGhUYWc9b2JqVG9TdHJpbmcuY2FsbChvdGhlciksb3RoVGFnPT1hcmdzVGFnP290aFRhZz1vYmplY3RUYWc6b3RoVGFnIT1vYmplY3RUYWcmJihvdGhJc0Fycj1pc1R5cGVkQXJyYXkob3RoZXIpKSk7dmFyIG9iaklzT2JqPW9ialRhZz09b2JqZWN0VGFnLG90aElzT2JqPW90aFRhZz09b2JqZWN0VGFnLGlzU2FtZVRhZz1vYmpUYWc9PW90aFRhZztpZihpc1NhbWVUYWcmJiFvYmpJc0FyciYmIW9iaklzT2JqKXJldHVybiBlcXVhbEJ5VGFnKG9iamVjdCxvdGhlcixvYmpUYWcpO2lmKCFpc0xvb3NlKXt2YXIgdmFsV3JhcHBlZD1vYmpJc09iaiYmaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIl9fd3JhcHBlZF9fIiksb3RoV3JhcHBlZD1vdGhJc09iaiYmaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwiX193cmFwcGVkX18iKTtpZih2YWxXcmFwcGVkfHxvdGhXcmFwcGVkKXJldHVybiBlcXVhbEZ1bmModmFsV3JhcHBlZD9vYmplY3QudmFsdWUoKTpvYmplY3Qsb3RoV3JhcHBlZD9vdGhlci52YWx1ZSgpOm90aGVyLGN1c3RvbWl6ZXIsaXNMb29zZSxzdGFja0Esc3RhY2tCKX1pZighaXNTYW1lVGFnKXJldHVybiExO3N0YWNrQXx8KHN0YWNrQT1bXSksc3RhY2tCfHwoc3RhY2tCPVtdKTtmb3IodmFyIGxlbmd0aD1zdGFja0EubGVuZ3RoO2xlbmd0aC0tOylpZihzdGFja0FbbGVuZ3RoXT09b2JqZWN0KXJldHVybiBzdGFja0JbbGVuZ3RoXT09b3RoZXI7c3RhY2tBLnB1c2gob2JqZWN0KSxzdGFja0IucHVzaChvdGhlcik7dmFyIHJlc3VsdD0ob2JqSXNBcnI/ZXF1YWxBcnJheXM6ZXF1YWxPYmplY3RzKShvYmplY3Qsb3RoZXIsZXF1YWxGdW5jLGN1c3RvbWl6ZXIsaXNMb29zZSxzdGFja0Esc3RhY2tCKTtyZXR1cm4gc3RhY2tBLnBvcCgpLHN0YWNrQi5wb3AoKSxyZXN1bHR9ZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LHByb3BzLHZhbHVlcyxzdHJpY3RDb21wYXJlRmxhZ3MsY3VzdG9taXplcil7Zm9yKHZhciBpbmRleD0tMSxsZW5ndGg9cHJvcHMubGVuZ3RoLG5vQ3VzdG9taXplcj0hY3VzdG9taXplcjtsZW5ndGg+KytpbmRleDspaWYobm9DdXN0b21pemVyJiZzdHJpY3RDb21wYXJlRmxhZ3NbaW5kZXhdP3ZhbHVlc1tpbmRleF0hPT1vYmplY3RbcHJvcHNbaW5kZXhdXTohKHByb3BzW2luZGV4XWluIG9iamVjdCkpcmV0dXJuITE7Zm9yKGluZGV4PS0xO2xlbmd0aD4rK2luZGV4Oyl7dmFyIGtleT1wcm9wc1tpbmRleF0sb2JqVmFsdWU9b2JqZWN0W2tleV0sc3JjVmFsdWU9dmFsdWVzW2luZGV4XTtpZihub0N1c3RvbWl6ZXImJnN0cmljdENvbXBhcmVGbGFnc1tpbmRleF0pdmFyIHJlc3VsdD1vYmpWYWx1ZSE9PXVuZGVmaW5lZHx8a2V5IGluIG9iamVjdDtlbHNlIHJlc3VsdD1jdXN0b21pemVyP2N1c3RvbWl6ZXIob2JqVmFsdWUsc3JjVmFsdWUsa2V5KTp1bmRlZmluZWQscmVzdWx0PT09dW5kZWZpbmVkJiYocmVzdWx0PWJhc2VJc0VxdWFsKHNyY1ZhbHVlLG9ialZhbHVlLGN1c3RvbWl6ZXIsITApKTtpZighcmVzdWx0KXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSl7dmFyIHByb3BzPWtleXMoc291cmNlKSxsZW5ndGg9cHJvcHMubGVuZ3RoO2lmKCFsZW5ndGgpcmV0dXJuIGNvbnN0YW50KCEwKTtpZigxPT1sZW5ndGgpe3ZhciBrZXk9cHJvcHNbMF0sdmFsdWU9c291cmNlW2tleV07aWYoaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSlyZXR1cm4gZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gbnVsbD09b2JqZWN0PyExOm9iamVjdFtrZXldPT09dmFsdWUmJih2YWx1ZSE9PXVuZGVmaW5lZHx8a2V5IGluIHRvT2JqZWN0KG9iamVjdCkpfX1mb3IodmFyIHZhbHVlcz1BcnJheShsZW5ndGgpLHN0cmljdENvbXBhcmVGbGFncz1BcnJheShsZW5ndGgpO2xlbmd0aC0tOyl2YWx1ZT1zb3VyY2VbcHJvcHNbbGVuZ3RoXV0sdmFsdWVzW2xlbmd0aF09dmFsdWUsc3RyaWN0Q29tcGFyZUZsYWdzW2xlbmd0aF09aXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKTtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gbnVsbCE9b2JqZWN0JiZiYXNlSXNNYXRjaCh0b09iamVjdChvYmplY3QpLHByb3BzLHZhbHVlcyxzdHJpY3RDb21wYXJlRmxhZ3MpfX1mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsdmFsdWUpe3ZhciBpc0Fycj1pc0FycmF5KHBhdGgpLGlzQ29tbW9uPWlzS2V5KHBhdGgpJiZpc1N0cmljdENvbXBhcmFibGUodmFsdWUpLHBhdGhLZXk9cGF0aCsiIjtyZXR1cm4gcGF0aD10b1BhdGgocGF0aCksZnVuY3Rpb24ob2JqZWN0KXtpZihudWxsPT1vYmplY3QpcmV0dXJuITE7dmFyIGtleT1wYXRoS2V5O2lmKG9iamVjdD10b09iamVjdChvYmplY3QpLCEoIWlzQXJyJiZpc0NvbW1vbnx8a2V5IGluIG9iamVjdCkpe2lmKG9iamVjdD0xPT1wYXRoLmxlbmd0aD9vYmplY3Q6YmFzZUdldChvYmplY3QsYmFzZVNsaWNlKHBhdGgsMCwtMSkpLG51bGw9PW9iamVjdClyZXR1cm4hMTtrZXk9bGFzdChwYXRoKSxvYmplY3Q9dG9PYmplY3Qob2JqZWN0KX1yZXR1cm4gb2JqZWN0W2tleV09PT12YWx1ZT92YWx1ZSE9PXVuZGVmaW5lZHx8a2V5IGluIG9iamVjdDpiYXNlSXNFcXVhbCh2YWx1ZSxvYmplY3Rba2V5XSxudWxsLCEwKX19ZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCxzb3VyY2UsY3VzdG9taXplcixzdGFja0Esc3RhY2tCKXtpZighaXNPYmplY3Qob2JqZWN0KSlyZXR1cm4gb2JqZWN0O3ZhciBpc1NyY0Fycj1pc0xlbmd0aChzb3VyY2UubGVuZ3RoKSYmKGlzQXJyYXkoc291cmNlKXx8aXNUeXBlZEFycmF5KHNvdXJjZSkpO2lmKCFpc1NyY0Fycil7dmFyIHByb3BzPWtleXMoc291cmNlKTtwdXNoLmFwcGx5KHByb3BzLGdldFN5bWJvbHMoc291cmNlKSl9cmV0dXJuIGFycmF5RWFjaChwcm9wc3x8c291cmNlLGZ1bmN0aW9uKHNyY1ZhbHVlLGtleSl7aWYocHJvcHMmJihrZXk9c3JjVmFsdWUsc3JjVmFsdWU9c291cmNlW2tleV0pLGlzT2JqZWN0TGlrZShzcmNWYWx1ZSkpc3RhY2tBfHwoc3RhY2tBPVtdKSxzdGFja0J8fChzdGFja0I9W10pLGJhc2VNZXJnZURlZXAob2JqZWN0LHNvdXJjZSxrZXksYmFzZU1lcmdlLGN1c3RvbWl6ZXIsc3RhY2tBLHN0YWNrQik7ZWxzZXt2YXIgdmFsdWU9b2JqZWN0W2tleV0scmVzdWx0PWN1c3RvbWl6ZXI/Y3VzdG9taXplcih2YWx1ZSxzcmNWYWx1ZSxrZXksb2JqZWN0LHNvdXJjZSk6dW5kZWZpbmVkLGlzQ29tbW9uPXJlc3VsdD09PXVuZGVmaW5lZDtpc0NvbW1vbiYmKHJlc3VsdD1zcmNWYWx1ZSksIWlzU3JjQXJyJiZyZXN1bHQ9PT11bmRlZmluZWR8fCFpc0NvbW1vbiYmKHJlc3VsdD09PXJlc3VsdD9yZXN1bHQ9PT12YWx1ZTp2YWx1ZSE9PXZhbHVlKXx8KG9iamVjdFtrZXldPXJlc3VsdCl9fSksb2JqZWN0fWZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LHNvdXJjZSxrZXksbWVyZ2VGdW5jLGN1c3RvbWl6ZXIsc3RhY2tBLHN0YWNrQil7Zm9yKHZhciBsZW5ndGg9c3RhY2tBLmxlbmd0aCxzcmNWYWx1ZT1zb3VyY2Vba2V5XTtsZW5ndGgtLTspaWYoc3RhY2tBW2xlbmd0aF09PXNyY1ZhbHVlKXJldHVybiBvYmplY3Rba2V5XT1zdGFja0JbbGVuZ3RoXSx1bmRlZmluZWQ7dmFyIHZhbHVlPW9iamVjdFtrZXldLHJlc3VsdD1jdXN0b21pemVyP2N1c3RvbWl6ZXIodmFsdWUsc3JjVmFsdWUsa2V5LG9iamVjdCxzb3VyY2UpOnVuZGVmaW5lZCxpc0NvbW1vbj1yZXN1bHQ9PT11bmRlZmluZWQ7aXNDb21tb24mJihyZXN1bHQ9c3JjVmFsdWUsaXNMZW5ndGgoc3JjVmFsdWUubGVuZ3RoKSYmKGlzQXJyYXkoc3JjVmFsdWUpfHxpc1R5cGVkQXJyYXkoc3JjVmFsdWUpKT9yZXN1bHQ9aXNBcnJheSh2YWx1ZSk/dmFsdWU6Z2V0TGVuZ3RoKHZhbHVlKT9hcnJheUNvcHkodmFsdWUpOltdOmlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpfHxpc0FyZ3VtZW50cyhzcmNWYWx1ZSk/cmVzdWx0PWlzQXJndW1lbnRzKHZhbHVlKT90b1BsYWluT2JqZWN0KHZhbHVlKTppc1BsYWluT2JqZWN0KHZhbHVlKT92YWx1ZTp7fTppc0NvbW1vbj0hMSksc3RhY2tBLnB1c2goc3JjVmFsdWUpLHN0YWNrQi5wdXNoKHJlc3VsdCksaXNDb21tb24/b2JqZWN0W2tleV09bWVyZ2VGdW5jKHJlc3VsdCxzcmNWYWx1ZSxjdXN0b21pemVyLHN0YWNrQSxzdGFja0IpOihyZXN1bHQ9PT1yZXN1bHQ/cmVzdWx0IT09dmFsdWU6dmFsdWU9PT12YWx1ZSkmJihvYmplY3Rba2V5XT1yZXN1bHQpfWZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpe3JldHVybiBmdW5jdGlvbihvYmplY3Qpe3JldHVybiBudWxsPT1vYmplY3Q/dW5kZWZpbmVkOm9iamVjdFtrZXldfX1mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpe3ZhciBwYXRoS2V5PXBhdGgrIiI7cmV0dXJuIHBhdGg9dG9QYXRoKHBhdGgpLGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIGJhc2VHZXQob2JqZWN0LHBhdGgscGF0aEtleSl9fWZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSxzdGFydCxlbmQpe3ZhciBpbmRleD0tMSxsZW5ndGg9YXJyYXkubGVuZ3RoO3N0YXJ0PW51bGw9PXN0YXJ0PzA6K3N0YXJ0fHwwLDA+c3RhcnQmJihzdGFydD0tc3RhcnQ+bGVuZ3RoPzA6bGVuZ3RoK3N0YXJ0KSxlbmQ9ZW5kPT09dW5kZWZpbmVkfHxlbmQ+bGVuZ3RoP2xlbmd0aDorZW5kfHwwLDA+ZW5kJiYoZW5kKz1sZW5ndGgpLGxlbmd0aD1zdGFydD5lbmQ/MDplbmQtc3RhcnQ+Pj4wLHN0YXJ0Pj4+PTA7Zm9yKHZhciByZXN1bHQ9QXJyYXkobGVuZ3RoKTtsZW5ndGg+KytpbmRleDspcmVzdWx0W2luZGV4XT1hcnJheVtpbmRleCtzdGFydF07cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBiYXNlU29tZShjb2xsZWN0aW9uLHByZWRpY2F0ZSl7dmFyIHJlc3VsdDtyZXR1cm4gYmFzZUVhY2goY29sbGVjdGlvbixmdW5jdGlvbih2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKXtyZXR1cm4gcmVzdWx0PXByZWRpY2F0ZSh2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKSwhcmVzdWx0fSksISFyZXN1bHR9ZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QscHJvcHMpe2Zvcih2YXIgaW5kZXg9LTEsbGVuZ3RoPXByb3BzLmxlbmd0aCxyZXN1bHQ9QXJyYXkobGVuZ3RoKTtsZW5ndGg+KytpbmRleDspcmVzdWx0W2luZGV4XT1vYmplY3RbcHJvcHNbaW5kZXhdXTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIGJpbmFyeUluZGV4KGFycmF5LHZhbHVlLHJldEhpZ2hlc3Qpe3ZhciBsb3c9MCxoaWdoPWFycmF5P2FycmF5Lmxlbmd0aDpsb3c7aWYoIm51bWJlciI9PXR5cGVvZiB2YWx1ZSYmdmFsdWU9PT12YWx1ZSYmSEFMRl9NQVhfQVJSQVlfTEVOR1RIPj1oaWdoKXtmb3IoO2hpZ2g+bG93Oyl7dmFyIG1pZD1sb3craGlnaD4+PjEsY29tcHV0ZWQ9YXJyYXlbbWlkXTsocmV0SGlnaGVzdD92YWx1ZT49Y29tcHV0ZWQ6dmFsdWU+Y29tcHV0ZWQpP2xvdz1taWQrMTpoaWdoPW1pZH1yZXR1cm4gaGlnaH1yZXR1cm4gYmluYXJ5SW5kZXhCeShhcnJheSx2YWx1ZSxpZGVudGl0eSxyZXRIaWdoZXN0KX1mdW5jdGlvbiBiaW5hcnlJbmRleEJ5KGFycmF5LHZhbHVlLGl0ZXJhdGVlLHJldEhpZ2hlc3Qpe3ZhbHVlPWl0ZXJhdGVlKHZhbHVlKTtmb3IodmFyIGxvdz0wLGhpZ2g9YXJyYXk/YXJyYXkubGVuZ3RoOjAsdmFsSXNOYU49dmFsdWUhPT12YWx1ZSx2YWxJc1VuZGVmPXZhbHVlPT09dW5kZWZpbmVkO2hpZ2g+bG93Oyl7dmFyIG1pZD1mbG9vcigobG93K2hpZ2gpLzIpLGNvbXB1dGVkPWl0ZXJhdGVlKGFycmF5W21pZF0pLGlzUmVmbGV4aXZlPWNvbXB1dGVkPT09Y29tcHV0ZWQ7aWYodmFsSXNOYU4pdmFyIHNldExvdz1pc1JlZmxleGl2ZXx8cmV0SGlnaGVzdDtlbHNlIHNldExvdz12YWxJc1VuZGVmP2lzUmVmbGV4aXZlJiYocmV0SGlnaGVzdHx8Y29tcHV0ZWQhPT11bmRlZmluZWQpOnJldEhpZ2hlc3Q/dmFsdWU+PWNvbXB1dGVkOnZhbHVlPmNvbXB1dGVkO3NldExvdz9sb3c9bWlkKzE6aGlnaD1taWR9cmV0dXJuIG5hdGl2ZU1pbihoaWdoLE1BWF9BUlJBWV9JTkRFWCl9ZnVuY3Rpb24gYmluZENhbGxiYWNrKGZ1bmMsdGhpc0FyZyxhcmdDb3VudCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGZ1bmMpcmV0dXJuIGlkZW50aXR5O2lmKHRoaXNBcmc9PT11bmRlZmluZWQpcmV0dXJuIGZ1bmM7c3dpdGNoKGFyZ0NvdW50KXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsdmFsdWUpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe3JldHVybiBmdW5jLmNhbGwodGhpc0FyZyx2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKX07Y2FzZSA0OnJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvcix2YWx1ZSxpbmRleCxjb2xsZWN0aW9uKXtyZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsYWNjdW11bGF0b3IsdmFsdWUsaW5kZXgsY29sbGVjdGlvbil9O2Nhc2UgNTpyZXR1cm4gZnVuY3Rpb24odmFsdWUsb3RoZXIsa2V5LG9iamVjdCxzb3VyY2Upe3JldHVybiBmdW5jLmNhbGwodGhpc0FyZyx2YWx1ZSxvdGhlcixrZXksb2JqZWN0LHNvdXJjZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsYXJndW1lbnRzKX19ZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmZmVyKXtyZXR1cm4gYnVmZmVyU2xpY2UuY2FsbChidWZmZXIsMCl9ZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpe3JldHVybiByZXN0UGFyYW0oZnVuY3Rpb24ob2JqZWN0LHNvdXJjZXMpe3ZhciBpbmRleD0tMSxsZW5ndGg9bnVsbD09b2JqZWN0PzA6c291cmNlcy5sZW5ndGgsY3VzdG9taXplcj1sZW5ndGg+MiYmc291cmNlc1tsZW5ndGgtMl0sZ3VhcmQ9bGVuZ3RoPjImJnNvdXJjZXNbMl0sdGhpc0FyZz1sZW5ndGg+MSYmc291cmNlc1tsZW5ndGgtMV07Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBjdXN0b21pemVyPyhjdXN0b21pemVyPWJpbmRDYWxsYmFjayhjdXN0b21pemVyLHRoaXNBcmcsNSksbGVuZ3RoLT0yKTooY3VzdG9taXplcj0iZnVuY3Rpb24iPT10eXBlb2YgdGhpc0FyZz90aGlzQXJnOm51bGwsbGVuZ3RoLT1jdXN0b21pemVyPzE6MCksZ3VhcmQmJmlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sc291cmNlc1sxXSxndWFyZCkmJihjdXN0b21pemVyPTM+bGVuZ3RoP251bGw6Y3VzdG9taXplcixsZW5ndGg9MSk7bGVuZ3RoPisraW5kZXg7KXt2YXIgc291cmNlPXNvdXJjZXNbaW5kZXhdO3NvdXJjZSYmYXNzaWduZXIob2JqZWN0LHNvdXJjZSxjdXN0b21pemVyKX1yZXR1cm4gb2JqZWN0fSl9ZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsZnJvbVJpZ2h0KXtyZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbixpdGVyYXRlZSl7dmFyIGxlbmd0aD1jb2xsZWN0aW9uP2dldExlbmd0aChjb2xsZWN0aW9uKTowO2lmKCFpc0xlbmd0aChsZW5ndGgpKXJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLGl0ZXJhdGVlKTtmb3IodmFyIGluZGV4PWZyb21SaWdodD9sZW5ndGg6LTEsaXRlcmFibGU9dG9PYmplY3QoY29sbGVjdGlvbik7KGZyb21SaWdodD9pbmRleC0tOmxlbmd0aD4rK2luZGV4KSYmaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLGluZGV4LGl0ZXJhYmxlKSE9PSExOyk7cmV0dXJuIGNvbGxlY3Rpb259fWZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KXtyZXR1cm4gZnVuY3Rpb24ob2JqZWN0LGl0ZXJhdGVlLGtleXNGdW5jKXtmb3IodmFyIGl0ZXJhYmxlPXRvT2JqZWN0KG9iamVjdCkscHJvcHM9a2V5c0Z1bmMob2JqZWN0KSxsZW5ndGg9cHJvcHMubGVuZ3RoLGluZGV4PWZyb21SaWdodD9sZW5ndGg6LTE7ZnJvbVJpZ2h0P2luZGV4LS06bGVuZ3RoPisraW5kZXg7KXt2YXIga2V5PXByb3BzW2luZGV4XTtpZihpdGVyYXRlZShpdGVyYWJsZVtrZXldLGtleSxpdGVyYWJsZSk9PT0hMSlicmVha31yZXR1cm4gb2JqZWN0fX1mdW5jdGlvbiBjcmVhdGVGaW5kSW5kZXgoZnJvbVJpZ2h0KXtyZXR1cm4gZnVuY3Rpb24oYXJyYXkscHJlZGljYXRlLHRoaXNBcmcpe3JldHVybiBhcnJheSYmYXJyYXkubGVuZ3RoPyhwcmVkaWNhdGU9Z2V0Q2FsbGJhY2socHJlZGljYXRlLHRoaXNBcmcsMyksYmFzZUZpbmRJbmRleChhcnJheSxwcmVkaWNhdGUsZnJvbVJpZ2h0KSk6LTF9fWZ1bmN0aW9uIGNyZWF0ZUZvckVhY2goYXJyYXlGdW5jLGVhY2hGdW5jKXtyZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbixpdGVyYXRlZSx0aGlzQXJnKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaXRlcmF0ZWUmJnRoaXNBcmc9PT11bmRlZmluZWQmJmlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlGdW5jKGNvbGxlY3Rpb24saXRlcmF0ZWUpOmVhY2hGdW5jKGNvbGxlY3Rpb24sYmluZENhbGxiYWNrKGl0ZXJhdGVlLHRoaXNBcmcsMykpfX1mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSxvdGhlcixlcXVhbEZ1bmMsY3VzdG9taXplcixpc0xvb3NlLHN0YWNrQSxzdGFja0Ipe3ZhciBpbmRleD0tMSxhcnJMZW5ndGg9YXJyYXkubGVuZ3RoLG90aExlbmd0aD1vdGhlci5sZW5ndGgscmVzdWx0PSEwO2lmKGFyckxlbmd0aCE9b3RoTGVuZ3RoJiYhKGlzTG9vc2UmJm90aExlbmd0aD5hcnJMZW5ndGgpKXJldHVybiExO2Zvcig7cmVzdWx0JiZhcnJMZW5ndGg+KytpbmRleDspe3ZhciBhcnJWYWx1ZT1hcnJheVtpbmRleF0sb3RoVmFsdWU9b3RoZXJbaW5kZXhdO2lmKHJlc3VsdD11bmRlZmluZWQsY3VzdG9taXplciYmKHJlc3VsdD1pc0xvb3NlP2N1c3RvbWl6ZXIob3RoVmFsdWUsYXJyVmFsdWUsaW5kZXgpOmN1c3RvbWl6ZXIoYXJyVmFsdWUsb3RoVmFsdWUsaW5kZXgpKSxyZXN1bHQ9PT11bmRlZmluZWQpaWYoaXNMb29zZSlmb3IodmFyIG90aEluZGV4PW90aExlbmd0aDtvdGhJbmRleC0tJiYob3RoVmFsdWU9b3RoZXJbb3RoSW5kZXhdLCEocmVzdWx0PWFyclZhbHVlJiZhcnJWYWx1ZT09PW90aFZhbHVlfHxlcXVhbEZ1bmMoYXJyVmFsdWUsb3RoVmFsdWUsY3VzdG9taXplcixpc0xvb3NlLHN0YWNrQSxzdGFja0IpKSk7KTtlbHNlIHJlc3VsdD1hcnJWYWx1ZSYmYXJyVmFsdWU9PT1vdGhWYWx1ZXx8ZXF1YWxGdW5jKGFyclZhbHVlLG90aFZhbHVlLGN1c3RvbWl6ZXIsaXNMb29zZSxzdGFja0Esc3RhY2tCKX1yZXR1cm4hIXJlc3VsdH1mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCxvdGhlcix0YWcpe3N3aXRjaCh0YWcpe2Nhc2UgYm9vbFRhZzpjYXNlIGRhdGVUYWc6cmV0dXJuK29iamVjdD09K290aGVyO2Nhc2UgZXJyb3JUYWc6cmV0dXJuIG9iamVjdC5uYW1lPT1vdGhlci5uYW1lJiZvYmplY3QubWVzc2FnZT09b3RoZXIubWVzc2FnZTtjYXNlIG51bWJlclRhZzpyZXR1cm4gb2JqZWN0IT0rb2JqZWN0P290aGVyIT0rb3RoZXI6MD09b2JqZWN0PzEvb2JqZWN0PT0xL290aGVyOm9iamVjdD09K290aGVyO2Nhc2UgcmVnZXhwVGFnOmNhc2Ugc3RyaW5nVGFnOnJldHVybiBvYmplY3Q9PW90aGVyKyIifXJldHVybiExfWZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3Qsb3RoZXIsZXF1YWxGdW5jLGN1c3RvbWl6ZXIsaXNMb29zZSxzdGFja0Esc3RhY2tCKXt2YXIgb2JqUHJvcHM9a2V5cyhvYmplY3QpLG9iakxlbmd0aD1vYmpQcm9wcy5sZW5ndGgsb3RoUHJvcHM9a2V5cyhvdGhlciksb3RoTGVuZ3RoPW90aFByb3BzLmxlbmd0aDtpZihvYmpMZW5ndGghPW90aExlbmd0aCYmIWlzTG9vc2UpcmV0dXJuITE7Zm9yKHZhciBza2lwQ3Rvcj1pc0xvb3NlLGluZGV4PS0xO29iakxlbmd0aD4rK2luZGV4Oyl7dmFyIGtleT1vYmpQcm9wc1tpbmRleF0scmVzdWx0PWlzTG9vc2U/a2V5IGluIG90aGVyOmhhc093blByb3BlcnR5LmNhbGwob3RoZXIsa2V5KTtpZihyZXN1bHQpe3ZhciBvYmpWYWx1ZT1vYmplY3Rba2V5XSxvdGhWYWx1ZT1vdGhlcltrZXldO3Jlc3VsdD11bmRlZmluZWQsY3VzdG9taXplciYmKHJlc3VsdD1pc0xvb3NlP2N1c3RvbWl6ZXIob3RoVmFsdWUsb2JqVmFsdWUsa2V5KTpjdXN0b21pemVyKG9ialZhbHVlLG90aFZhbHVlLGtleSkpLHJlc3VsdD09PXVuZGVmaW5lZCYmKHJlc3VsdD1vYmpWYWx1ZSYmb2JqVmFsdWU9PT1vdGhWYWx1ZXx8ZXF1YWxGdW5jKG9ialZhbHVlLG90aFZhbHVlLGN1c3RvbWl6ZXIsaXNMb29zZSxzdGFja0Esc3RhY2tCKSl9aWYoIXJlc3VsdClyZXR1cm4hMTtza2lwQ3Rvcnx8KHNraXBDdG9yPSJjb25zdHJ1Y3RvciI9PWtleSl9aWYoIXNraXBDdG9yKXt2YXIgb2JqQ3Rvcj1vYmplY3QuY29uc3RydWN0b3Isb3RoQ3Rvcj1vdGhlci5jb25zdHJ1Y3RvcjtpZihvYmpDdG9yIT1vdGhDdG9yJiYiY29uc3RydWN0b3IiaW4gb2JqZWN0JiYiY29uc3RydWN0b3IiaW4gb3RoZXImJiEoImZ1bmN0aW9uIj09dHlwZW9mIG9iakN0b3ImJm9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yJiYiZnVuY3Rpb24iPT10eXBlb2Ygb3RoQ3RvciYmb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGdldENhbGxiYWNrKGZ1bmMsdGhpc0FyZyxhcmdDb3VudCl7dmFyIHJlc3VsdD1sb2Rhc2guY2FsbGJhY2t8fGNhbGxiYWNrO3JldHVybiByZXN1bHQ9cmVzdWx0PT09Y2FsbGJhY2s/YmFzZUNhbGxiYWNrOnJlc3VsdCxhcmdDb3VudD9yZXN1bHQoZnVuYyx0aGlzQXJnLGFyZ0NvdW50KTpyZXN1bHR9ZnVuY3Rpb24gZ2V0SW5kZXhPZihjb2xsZWN0aW9uLHRhcmdldCxmcm9tSW5kZXgpe3ZhciByZXN1bHQ9bG9kYXNoLmluZGV4T2Z8fGluZGV4T2Y7cmV0dXJuIHJlc3VsdD1yZXN1bHQ9PT1pbmRleE9mP2Jhc2VJbmRleE9mOnJlc3VsdCxjb2xsZWN0aW9uP3Jlc3VsdChjb2xsZWN0aW9uLHRhcmdldCxmcm9tSW5kZXgpOnJlc3VsdH1mdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSl7dmFyIGxlbmd0aD1hcnJheS5sZW5ndGgscmVzdWx0PW5ldyBhcnJheS5jb25zdHJ1Y3RvcihsZW5ndGgpO3JldHVybiBsZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYXJyYXlbMF0mJmhhc093blByb3BlcnR5LmNhbGwoYXJyYXksImluZGV4IikmJihyZXN1bHQuaW5kZXg9YXJyYXkuaW5kZXgscmVzdWx0LmlucHV0PWFycmF5LmlucHV0KSxyZXN1bHR9ZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCl7dmFyIEN0b3I9b2JqZWN0LmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBDdG9yJiZDdG9yIGluc3RhbmNlb2YgQ3Rvcnx8KEN0b3I9T2JqZWN0KSxuZXcgQ3Rvcn1mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsdGFnLGlzRGVlcCl7dmFyIEN0b3I9b2JqZWN0LmNvbnN0cnVjdG9yO3N3aXRjaCh0YWcpe2Nhc2UgYXJyYXlCdWZmZXJUYWc6cmV0dXJuIGJ1ZmZlckNsb25lKG9iamVjdCk7Y2FzZSBib29sVGFnOmNhc2UgZGF0ZVRhZzpyZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7Y2FzZSBmbG9hdDMyVGFnOmNhc2UgZmxvYXQ2NFRhZzpjYXNlIGludDhUYWc6Y2FzZSBpbnQxNlRhZzpjYXNlIGludDMyVGFnOmNhc2UgdWludDhUYWc6Y2FzZSB1aW50OENsYW1wZWRUYWc6Y2FzZSB1aW50MTZUYWc6Y2FzZSB1aW50MzJUYWc6dmFyIGJ1ZmZlcj1vYmplY3QuYnVmZmVyO3JldHVybiBuZXcgQ3Rvcihpc0RlZXA/YnVmZmVyQ2xvbmUoYnVmZmVyKTpidWZmZXIsb2JqZWN0LmJ5dGVPZmZzZXQsb2JqZWN0Lmxlbmd0aCk7Y2FzZSBudW1iZXJUYWc6Y2FzZSBzdHJpbmdUYWc6cmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7Y2FzZSByZWdleHBUYWc6dmFyIHJlc3VsdD1uZXcgQ3RvcihvYmplY3Quc291cmNlLHJlRmxhZ3MuZXhlYyhvYmplY3QpKTtyZXN1bHQubGFzdEluZGV4PW9iamVjdC5sYXN0SW5kZXh9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBpc0luZGV4KHZhbHVlLGxlbmd0aCl7cmV0dXJuIHZhbHVlPSt2YWx1ZSxsZW5ndGg9bnVsbD09bGVuZ3RoP01BWF9TQUZFX0lOVEVHRVI6bGVuZ3RoLHZhbHVlPi0xJiYwPT12YWx1ZSUxJiZsZW5ndGg+dmFsdWV9ZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsaW5kZXgsb2JqZWN0KXtpZighaXNPYmplY3Qob2JqZWN0KSlyZXR1cm4hMTt2YXIgdHlwZT10eXBlb2YgaW5kZXg7aWYoIm51bWJlciI9PXR5cGUpdmFyIGxlbmd0aD1nZXRMZW5ndGgob2JqZWN0KSxwcmVyZXE9aXNMZW5ndGgobGVuZ3RoKSYmaXNJbmRleChpbmRleCxsZW5ndGgpO2Vsc2UgcHJlcmVxPSJzdHJpbmciPT10eXBlJiZpbmRleCBpbiBvYmplY3Q7aWYocHJlcmVxKXt2YXIgb3RoZXI9b2JqZWN0W2luZGV4XTtyZXR1cm4gdmFsdWU9PT12YWx1ZT92YWx1ZT09PW90aGVyOm90aGVyIT09b3RoZXJ9cmV0dXJuITF9ZnVuY3Rpb24gaXNLZXkodmFsdWUsb2JqZWN0KXt2YXIgdHlwZT10eXBlb2YgdmFsdWU7aWYoInN0cmluZyI9PXR5cGUmJnJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSl8fCJudW1iZXIiPT10eXBlKXJldHVybiEwO2lmKGlzQXJyYXkodmFsdWUpKXJldHVybiExO3ZhciByZXN1bHQ9IXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKTtyZXR1cm4gcmVzdWx0fHxudWxsIT1vYmplY3QmJnZhbHVlIGluIHRvT2JqZWN0KG9iamVjdCl9ZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdmFsdWUmJnZhbHVlPi0xJiYwPT12YWx1ZSUxJiZNQVhfU0FGRV9JTlRFR0VSPj12YWx1ZX1mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpe3JldHVybiB2YWx1ZT09PXZhbHVlJiYoMD09PXZhbHVlPzEvdmFsdWU+MDohaXNPYmplY3QodmFsdWUpKX1mdW5jdGlvbiBzaGltSXNQbGFpbk9iamVjdCh2YWx1ZSl7dmFyIEN0b3I7aWYobG9kYXNoLnN1cHBvcnQsIWlzT2JqZWN0TGlrZSh2YWx1ZSl8fG9ialRvU3RyaW5nLmNhbGwodmFsdWUpIT1vYmplY3RUYWd8fCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCJjb25zdHJ1Y3RvciIpJiYoQ3Rvcj12YWx1ZS5jb25zdHJ1Y3RvciwiZnVuY3Rpb24iPT10eXBlb2YgQ3RvciYmIShDdG9yIGluc3RhbmNlb2YgQ3RvcikpKXJldHVybiExO3ZhciByZXN1bHQ7cmV0dXJuIGJhc2VGb3JJbih2YWx1ZSxmdW5jdGlvbihzdWJWYWx1ZSxrZXkpe3Jlc3VsdD1rZXl9KSxyZXN1bHQ9PT11bmRlZmluZWR8fGhhc093blByb3BlcnR5LmNhbGwodmFsdWUscmVzdWx0KX1mdW5jdGlvbiBzaGltS2V5cyhvYmplY3Qpe2Zvcih2YXIgcHJvcHM9a2V5c0luKG9iamVjdCkscHJvcHNMZW5ndGg9cHJvcHMubGVuZ3RoLGxlbmd0aD1wcm9wc0xlbmd0aCYmb2JqZWN0Lmxlbmd0aCxzdXBwb3J0PWxvZGFzaC5zdXBwb3J0LGFsbG93SW5kZXhlcz1sZW5ndGgmJmlzTGVuZ3RoKGxlbmd0aCkmJihpc0FycmF5KG9iamVjdCl8fHN1cHBvcnQubm9uRW51bUFyZ3MmJmlzQXJndW1lbnRzKG9iamVjdCkpLGluZGV4PS0xLHJlc3VsdD1bXTtwcm9wc0xlbmd0aD4rK2luZGV4Oyl7dmFyIGtleT1wcm9wc1tpbmRleF07KGFsbG93SW5kZXhlcyYmaXNJbmRleChrZXksbGVuZ3RoKXx8aGFzT3duUHJvcGVydHkuY2FsbChvYmplY3Qsa2V5KSkmJnJlc3VsdC5wdXNoKGtleSl9cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiB0b09iamVjdCh2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0KHZhbHVlKT92YWx1ZTpPYmplY3QodmFsdWUpfWZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSl7aWYoaXNBcnJheSh2YWx1ZSkpcmV0dXJuIHZhbHVlO3ZhciByZXN1bHQ9W107cmV0dXJuIGJhc2VUb1N0cmluZyh2YWx1ZSkucmVwbGFjZShyZVByb3BOYW1lLGZ1bmN0aW9uKG1hdGNoLG51bWJlcixxdW90ZSxzdHJpbmcpe3Jlc3VsdC5wdXNoKHF1b3RlP3N0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwiJDEiKTpudW1iZXJ8fG1hdGNoKX0pLHJlc3VsdH1mdW5jdGlvbiBpbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleCl7dmFyIGxlbmd0aD1hcnJheT9hcnJheS5sZW5ndGg6MDtpZighbGVuZ3RoKXJldHVybi0xO2lmKCJudW1iZXIiPT10eXBlb2YgZnJvbUluZGV4KWZyb21JbmRleD0wPmZyb21JbmRleD9uYXRpdmVNYXgobGVuZ3RoK2Zyb21JbmRleCwwKTpmcm9tSW5kZXg7ZWxzZSBpZihmcm9tSW5kZXgpe3ZhciBpbmRleD1iaW5hcnlJbmRleChhcnJheSx2YWx1ZSksb3RoZXI9YXJyYXlbaW5kZXhdO3JldHVybih2YWx1ZT09PXZhbHVlP3ZhbHVlPT09b3RoZXI6b3RoZXIhPT1vdGhlcik/aW5kZXg6LTF9cmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LHZhbHVlLGZyb21JbmRleHx8MCl9ZnVuY3Rpb24gbGFzdChhcnJheSl7dmFyIGxlbmd0aD1hcnJheT9hcnJheS5sZW5ndGg6MDtyZXR1cm4gbGVuZ3RoP2FycmF5W2xlbmd0aC0xXTp1bmRlZmluZWR9ZnVuY3Rpb24gc2xpY2UoYXJyYXksc3RhcnQsZW5kKXt2YXIgbGVuZ3RoPWFycmF5P2FycmF5Lmxlbmd0aDowO3JldHVybiBsZW5ndGg/KGVuZCYmIm51bWJlciIhPXR5cGVvZiBlbmQmJmlzSXRlcmF0ZWVDYWxsKGFycmF5LHN0YXJ0LGVuZCkmJihzdGFydD0wLGVuZD1sZW5ndGgpLGJhc2VTbGljZShhcnJheSxzdGFydCxlbmQpKTpbXX1mdW5jdGlvbiB1bnppcChhcnJheSl7Zm9yKHZhciBpbmRleD0tMSxsZW5ndGg9KGFycmF5JiZhcnJheS5sZW5ndGgmJmFycmF5TWF4KGFycmF5TWFwKGFycmF5LGdldExlbmd0aCkpKT4+PjAscmVzdWx0PUFycmF5KGxlbmd0aCk7bGVuZ3RoPisraW5kZXg7KXJlc3VsdFtpbmRleF09YXJyYXlNYXAoYXJyYXksYmFzZVByb3BlcnR5KGluZGV4KSk7cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBpbmNsdWRlcyhjb2xsZWN0aW9uLHRhcmdldCxmcm9tSW5kZXgsZ3VhcmQpe3ZhciBsZW5ndGg9Y29sbGVjdGlvbj9nZXRMZW5ndGgoY29sbGVjdGlvbik6MDtyZXR1cm4gaXNMZW5ndGgobGVuZ3RoKXx8KGNvbGxlY3Rpb249dmFsdWVzKGNvbGxlY3Rpb24pLGxlbmd0aD1jb2xsZWN0aW9uLmxlbmd0aCksbGVuZ3RoPyhmcm9tSW5kZXg9Im51bWJlciIhPXR5cGVvZiBmcm9tSW5kZXh8fGd1YXJkJiZpc0l0ZXJhdGVlQ2FsbCh0YXJnZXQsZnJvbUluZGV4LGd1YXJkKT8wOjA+ZnJvbUluZGV4P25hdGl2ZU1heChsZW5ndGgrZnJvbUluZGV4LDApOmZyb21JbmRleHx8MCwic3RyaW5nIj09dHlwZW9mIGNvbGxlY3Rpb258fCFpc0FycmF5KGNvbGxlY3Rpb24pJiZpc1N0cmluZyhjb2xsZWN0aW9uKT9sZW5ndGg+ZnJvbUluZGV4JiZjb2xsZWN0aW9uLmluZGV4T2YodGFyZ2V0LGZyb21JbmRleCk+LTE6Z2V0SW5kZXhPZihjb2xsZWN0aW9uLHRhcmdldCxmcm9tSW5kZXgpPi0xKTohMX1mdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbixwcmVkaWNhdGUsdGhpc0FyZyl7dmFyIGZ1bmM9aXNBcnJheShjb2xsZWN0aW9uKT9hcnJheUZpbHRlcjpiYXNlRmlsdGVyO3JldHVybiBwcmVkaWNhdGU9Z2V0Q2FsbGJhY2socHJlZGljYXRlLHRoaXNBcmcsMyksZnVuYyhjb2xsZWN0aW9uLGZ1bmN0aW9uKHZhbHVlLGluZGV4LGNvbGxlY3Rpb24pe3JldHVybiFwcmVkaWNhdGUodmFsdWUsaW5kZXgsY29sbGVjdGlvbil9KX1mdW5jdGlvbiBzb21lKGNvbGxlY3Rpb24scHJlZGljYXRlLHRoaXNBcmcpe3ZhciBmdW5jPWlzQXJyYXkoY29sbGVjdGlvbik/YXJyYXlTb21lOmJhc2VTb21lO3JldHVybiB0aGlzQXJnJiZpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLHByZWRpY2F0ZSx0aGlzQXJnKSYmKHByZWRpY2F0ZT1udWxsKSwoImZ1bmN0aW9uIiE9dHlwZW9mIHByZWRpY2F0ZXx8dGhpc0FyZyE9PXVuZGVmaW5lZCkmJihwcmVkaWNhdGU9Z2V0Q2FsbGJhY2socHJlZGljYXRlLHRoaXNBcmcsMykpLGZ1bmMoY29sbGVjdGlvbixwcmVkaWNhdGUpfWZ1bmN0aW9uIHJlc3RQYXJhbShmdW5jLHN0YXJ0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZnVuYyl0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7cmV0dXJuIHN0YXJ0PW5hdGl2ZU1heChzdGFydD09PXVuZGVmaW5lZD9mdW5jLmxlbmd0aC0xOitzdGFydHx8MCwwKSxmdW5jdGlvbigpe2Zvcih2YXIgYXJncz1hcmd1bWVudHMsaW5kZXg9LTEsbGVuZ3RoPW5hdGl2ZU1heChhcmdzLmxlbmd0aC1zdGFydCwwKSxyZXN0PUFycmF5KGxlbmd0aCk7bGVuZ3RoPisraW5kZXg7KXJlc3RbaW5kZXhdPWFyZ3Nbc3RhcnQraW5kZXhdO3N3aXRjaChzdGFydCl7Y2FzZSAwOnJldHVybiBmdW5jLmNhbGwodGhpcyxyZXN0KTtjYXNlIDE6cmV0dXJuIGZ1bmMuY2FsbCh0aGlzLGFyZ3NbMF0scmVzdCk7Y2FzZSAyOnJldHVybiBmdW5jLmNhbGwodGhpcyxhcmdzWzBdLGFyZ3NbMV0scmVzdCl9dmFyIG90aGVyQXJncz1BcnJheShzdGFydCsxKTtmb3IoaW5kZXg9LTE7c3RhcnQ+KytpbmRleDspb3RoZXJBcmdzW2luZGV4XT1hcmdzW2luZGV4XTtyZXR1cm4gb3RoZXJBcmdzW3N0YXJ0XT1yZXN0LGZ1bmMuYXBwbHkodGhpcyxvdGhlckFyZ3MpfX1mdW5jdGlvbiBjbG9uZSh2YWx1ZSxpc0RlZXAsY3VzdG9taXplcix0aGlzQXJnKXtyZXR1cm4gaXNEZWVwJiYiYm9vbGVhbiIhPXR5cGVvZiBpc0RlZXAmJmlzSXRlcmF0ZWVDYWxsKHZhbHVlLGlzRGVlcCxjdXN0b21pemVyKT9pc0RlZXA9ITE6ImZ1bmN0aW9uIj09dHlwZW9mIGlzRGVlcCYmKHRoaXNBcmc9Y3VzdG9taXplcixjdXN0b21pemVyPWlzRGVlcCxpc0RlZXA9ITEpLGN1c3RvbWl6ZXI9ImZ1bmN0aW9uIj09dHlwZW9mIGN1c3RvbWl6ZXImJmJpbmRDYWxsYmFjayhjdXN0b21pemVyLHRoaXNBcmcsMSksYmFzZUNsb25lKHZhbHVlLGlzRGVlcCxjdXN0b21pemVyKX1mdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSl7dmFyIGxlbmd0aD1pc09iamVjdExpa2UodmFsdWUpP3ZhbHVlLmxlbmd0aDp1bmRlZmluZWQ7cmV0dXJuIGlzTGVuZ3RoKGxlbmd0aCkmJm9ialRvU3RyaW5nLmNhbGwodmFsdWUpPT1hcmdzVGFnfWZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpe2lmKG51bGw9PXZhbHVlKXJldHVybiEwO3ZhciBsZW5ndGg9Z2V0TGVuZ3RoKHZhbHVlKTtyZXR1cm4gaXNMZW5ndGgobGVuZ3RoKSYmKGlzQXJyYXkodmFsdWUpfHxpc1N0cmluZyh2YWx1ZSl8fGlzQXJndW1lbnRzKHZhbHVlKXx8aXNPYmplY3RMaWtlKHZhbHVlKSYmaXNGdW5jdGlvbih2YWx1ZS5zcGxpY2UpKT8hbGVuZ3RoOiFrZXlzKHZhbHVlKS5sZW5ndGh9ZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpe3ZhciB0eXBlPXR5cGVvZiB2YWx1ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlfHwhIXZhbHVlJiYib2JqZWN0Ij09dHlwZX1mdW5jdGlvbiBpc05hdGl2ZSh2YWx1ZSl7cmV0dXJuIG51bGw9PXZhbHVlPyExOm9ialRvU3RyaW5nLmNhbGwodmFsdWUpPT1mdW5jVGFnP3JlSXNOYXRpdmUudGVzdChmblRvU3RyaW5nLmNhbGwodmFsdWUpKTppc09iamVjdExpa2UodmFsdWUpJiZyZUlzSG9zdEN0b3IudGVzdCh2YWx1ZSl9ZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdmFsdWV8fGlzT2JqZWN0TGlrZSh2YWx1ZSkmJm9ialRvU3RyaW5nLmNhbGwodmFsdWUpPT1udW1iZXJUYWd9ZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdmFsdWV8fGlzT2JqZWN0TGlrZSh2YWx1ZSkmJm9ialRvU3RyaW5nLmNhbGwodmFsdWUpPT1zdHJpbmdUYWd9ZnVuY3Rpb24gaXNUeXBlZEFycmF5KHZhbHVlKXtyZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSYmaXNMZW5ndGgodmFsdWUubGVuZ3RoKSYmISF0eXBlZEFycmF5VGFnc1tvYmpUb1N0cmluZy5jYWxsKHZhbHVlKV19ZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSl7cmV0dXJuIGJhc2VDb3B5KHZhbHVlLGtleXNJbih2YWx1ZSkpfWZ1bmN0aW9uIGhhcyhvYmplY3QscGF0aCl7aWYobnVsbD09b2JqZWN0KXJldHVybiExO3ZhciByZXN1bHQ9aGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QscGF0aCk7cmV0dXJuIHJlc3VsdHx8aXNLZXkocGF0aCl8fChwYXRoPXRvUGF0aChwYXRoKSxvYmplY3Q9MT09cGF0aC5sZW5ndGg/b2JqZWN0OmJhc2VHZXQob2JqZWN0LGJhc2VTbGljZShwYXRoLDAsLTEpKSxwYXRoPWxhc3QocGF0aCkscmVzdWx0PW51bGwhPW9iamVjdCYmaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QscGF0aCkpLHJlc3VsdH1mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KXtpZihudWxsPT1vYmplY3QpcmV0dXJuW107aXNPYmplY3Qob2JqZWN0KXx8KG9iamVjdD1PYmplY3Qob2JqZWN0KSk7dmFyIGxlbmd0aD1vYmplY3QubGVuZ3RoO2xlbmd0aD1sZW5ndGgmJmlzTGVuZ3RoKGxlbmd0aCkmJihpc0FycmF5KG9iamVjdCl8fHN1cHBvcnQubm9uRW51bUFyZ3MmJmlzQXJndW1lbnRzKG9iamVjdCkpJiZsZW5ndGh8fDA7Zm9yKHZhciBDdG9yPW9iamVjdC5jb25zdHJ1Y3RvcixpbmRleD0tMSxpc1Byb3RvPSJmdW5jdGlvbiI9PXR5cGVvZiBDdG9yJiZDdG9yLnByb3RvdHlwZT09PW9iamVjdCxyZXN1bHQ9QXJyYXkobGVuZ3RoKSxza2lwSW5kZXhlcz1sZW5ndGg+MDtsZW5ndGg+KytpbmRleDspcmVzdWx0W2luZGV4XT1pbmRleCsiIjtmb3IodmFyIGtleSBpbiBvYmplY3Qpc2tpcEluZGV4ZXMmJmlzSW5kZXgoa2V5LGxlbmd0aCl8fCJjb25zdHJ1Y3RvciI9PWtleSYmKGlzUHJvdG98fCFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCxrZXkpKXx8cmVzdWx0LnB1c2goa2V5KTtyZXR1cm4gcmVzdWx0fWZ1bmN0aW9uIHZhbHVlcyhvYmplY3Qpe3JldHVybiBiYXNlVmFsdWVzKG9iamVjdCxrZXlzKG9iamVjdCkpfWZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpe3JldHVybiBzdHJpbmc9YmFzZVRvU3RyaW5nKHN0cmluZyksc3RyaW5nJiZyZUhhc1JlZ0V4cENoYXJzLnRlc3Qoc3RyaW5nKT9zdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXJzLCJcXFxcJCYiKTpzdHJpbmd9ZnVuY3Rpb24gY2FsbGJhY2soZnVuYyx0aGlzQXJnLGd1YXJkKXtyZXR1cm4gZ3VhcmQmJmlzSXRlcmF0ZWVDYWxsKGZ1bmMsdGhpc0FyZyxndWFyZCkmJih0aGlzQXJnPW51bGwpLGJhc2VDYWxsYmFjayhmdW5jLHRoaXNBcmcpfWZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdmFsdWV9fWZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKXtyZXR1cm4gdmFsdWV9ZnVuY3Rpb24gcHJvcGVydHkocGF0aCl7cmV0dXJuIGlzS2V5KHBhdGgpP2Jhc2VQcm9wZXJ0eShwYXRoKTpiYXNlUHJvcGVydHlEZWVwKHBhdGgpfXZhciB1bmRlZmluZWQsVkVSU0lPTj0iMy43LjAiLEZVTkNfRVJST1JfVEVYVD0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsYXJnc1RhZz0iW29iamVjdCBBcmd1bWVudHNdIixhcnJheVRhZz0iW29iamVjdCBBcnJheV0iLGJvb2xUYWc9IltvYmplY3QgQm9vbGVhbl0iLGRhdGVUYWc9IltvYmplY3QgRGF0ZV0iLGVycm9yVGFnPSJbb2JqZWN0IEVycm9yXSIsZnVuY1RhZz0iW29iamVjdCBGdW5jdGlvbl0iLG1hcFRhZz0iW29iamVjdCBNYXBdIixudW1iZXJUYWc9IltvYmplY3QgTnVtYmVyXSIsb2JqZWN0VGFnPSJbb2JqZWN0IE9iamVjdF0iLHJlZ2V4cFRhZz0iW29iamVjdCBSZWdFeHBdIixzZXRUYWc9IltvYmplY3QgU2V0XSIsc3RyaW5nVGFnPSJbb2JqZWN0IFN0cmluZ10iLHdlYWtNYXBUYWc9IltvYmplY3QgV2Vha01hcF0iLGFycmF5QnVmZmVyVGFnPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsZmxvYXQzMlRhZz0iW29iamVjdCBGbG9hdDMyQXJyYXldIixmbG9hdDY0VGFnPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLGludDhUYWc9IltvYmplY3QgSW50OEFycmF5XSIsaW50MTZUYWc9IltvYmplY3QgSW50MTZBcnJheV0iLGludDMyVGFnPSJbb2JqZWN0IEludDMyQXJyYXldIix1aW50OFRhZz0iW29iamVjdCBVaW50OEFycmF5XSIsdWludDhDbGFtcGVkVGFnPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsdWludDE2VGFnPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsdWludDMyVGFnPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIscmVJc0RlZXBQcm9wPS9cXC58XFxbKD86W15bXFxdXSt8KFsiXCddKSg/Oig/IVxcMSlbXlxcblxcXFxdfFxcXFwuKSo/KVxcMVxcXS8scmVJc1BsYWluUHJvcD0vXlxcdyokLyxyZVByb3BOYW1lPS9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFsiXCddKSgoPzooPyFcXDIpW15cXG5cXFxcXXxcXFxcLikqPylcXDIpXFxdL2cscmVSZWdFeHBDaGFycz0vWy4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdL2cscmVIYXNSZWdFeHBDaGFycz1SZWdFeHAocmVSZWdFeHBDaGFycy5zb3VyY2UpLHJlRXNjYXBlQ2hhcj0vXFxcXChcXFxcKT8vZyxyZUZsYWdzPS9cXHcqJC8scmVJc0hvc3RDdG9yPS9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC8sdHlwZWRBcnJheVRhZ3M9e307dHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ109dHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ109dHlwZWRBcnJheVRhZ3NbaW50OFRhZ109dHlwZWRBcnJheVRhZ3NbaW50MTZUYWddPXR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXT10eXBlZEFycmF5VGFnc1t1aW50OFRhZ109dHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXT10eXBlZEFycmF5VGFnc1t1aW50MTZUYWddPXR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ109ITAsdHlwZWRBcnJheVRhZ3NbYXJnc1RhZ109dHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddPXR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXT10eXBlZEFycmF5VGFnc1tib29sVGFnXT10eXBlZEFycmF5VGFnc1tkYXRlVGFnXT10eXBlZEFycmF5VGFnc1tlcnJvclRhZ109dHlwZWRBcnJheVRhZ3NbZnVuY1RhZ109dHlwZWRBcnJheVRhZ3NbbWFwVGFnXT10eXBlZEFycmF5VGFnc1tudW1iZXJUYWddPXR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ109dHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXT10eXBlZEFycmF5VGFnc1tzZXRUYWddPXR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ109dHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ109ITE7dmFyIGNsb25lYWJsZVRhZ3M9e307Y2xvbmVhYmxlVGFnc1thcmdzVGFnXT1jbG9uZWFibGVUYWdzW2FycmF5VGFnXT1jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXT1jbG9uZWFibGVUYWdzW2Jvb2xUYWddPWNsb25lYWJsZVRhZ3NbZGF0ZVRhZ109Y2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXT1jbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddPWNsb25lYWJsZVRhZ3NbaW50OFRhZ109Y2xvbmVhYmxlVGFnc1tpbnQxNlRhZ109Y2xvbmVhYmxlVGFnc1tpbnQzMlRhZ109Y2xvbmVhYmxlVGFnc1tudW1iZXJUYWddPWNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXT1jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ109Y2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddPWNsb25lYWJsZVRhZ3NbdWludDhUYWddPWNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXT1jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ109Y2xvbmVhYmxlVGFnc1t1aW50MzJUYWddPSEwLGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddPWNsb25lYWJsZVRhZ3NbZnVuY1RhZ109Y2xvbmVhYmxlVGFnc1ttYXBUYWddPWNsb25lYWJsZVRhZ3Nbc2V0VGFnXT1jbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddPSExO3ZhciBvYmplY3RUeXBlcz17ImZ1bmN0aW9uIjohMCxvYmplY3Q6ITB9LGZyZWVFeHBvcnRzPW9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsZnJlZU1vZHVsZT1vYmplY3RUeXBlc1t0eXBlb2YgbW9kdWxlXSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsZnJlZUdsb2JhbD1mcmVlRXhwb3J0cyYmZnJlZU1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCYmZ2xvYmFsLk9iamVjdCYmZ2xvYmFsLGZyZWVTZWxmPW9iamVjdFR5cGVzW3R5cGVvZiBzZWxmXSYmc2VsZiYmc2VsZi5PYmplY3QmJnNlbGYsZnJlZVdpbmRvdz1vYmplY3RUeXBlc1t0eXBlb2Ygd2luZG93XSYmd2luZG93JiZ3aW5kb3cuT2JqZWN0JiZ3aW5kb3csbW9kdWxlRXhwb3J0cz1mcmVlTW9kdWxlJiZmcmVlTW9kdWxlLmV4cG9ydHM9PT1mcmVlRXhwb3J0cyYmZnJlZUV4cG9ydHMscm9vdD1mcmVlR2xvYmFsfHxmcmVlV2luZG93IT09KHRoaXMmJnRoaXMud2luZG93KSYmZnJlZVdpbmRvd3x8ZnJlZVNlbGZ8fHRoaXMsYXJyYXlQcm90bz1BcnJheS5wcm90b3R5cGUsb2JqZWN0UHJvdG89T2JqZWN0LnByb3RvdHlwZSxmblRvU3RyaW5nPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxoYXNPd25Qcm9wZXJ0eT1vYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eSxvYmpUb1N0cmluZz1vYmplY3RQcm90by50b1N0cmluZyxyZUlzTmF0aXZlPVJlZ0V4cCgiXiIrZXNjYXBlUmVnRXhwKG9ialRvU3RyaW5nKS5yZXBsYWNlKC90b1N0cmluZ3woZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCIkMS4qPyIpKyIkIiksQXJyYXlCdWZmZXI9aXNOYXRpdmUoQXJyYXlCdWZmZXI9cm9vdC5BcnJheUJ1ZmZlcikmJkFycmF5QnVmZmVyLGJ1ZmZlclNsaWNlPWlzTmF0aXZlKGJ1ZmZlclNsaWNlPUFycmF5QnVmZmVyJiZuZXcgQXJyYXlCdWZmZXIoMCkuc2xpY2UpJiZidWZmZXJTbGljZSxmbG9vcj1NYXRoLmZsb29yLGdldE93blByb3BlcnR5U3ltYm9scz1pc05hdGl2ZShnZXRPd25Qcm9wZXJ0eVN5bWJvbHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykmJmdldE93blByb3BlcnR5U3ltYm9scyxnZXRQcm90b3R5cGVPZj1pc05hdGl2ZShnZXRQcm90b3R5cGVPZj1PYmplY3QuZ2V0UHJvdG90eXBlT2YpJiZnZXRQcm90b3R5cGVPZixwdXNoPWFycmF5UHJvdG8ucHVzaCxwcmV2ZW50RXh0ZW5zaW9ucz1pc05hdGl2ZShPYmplY3QucHJldmVudEV4dGVuc2lvbnM9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSYmcHJldmVudEV4dGVuc2lvbnMscHJvcGVydHlJc0VudW1lcmFibGU9b2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGUsVWludDhBcnJheT1pc05hdGl2ZShVaW50OEFycmF5PXJvb3QuVWludDhBcnJheSkmJlVpbnQ4QXJyYXksRmxvYXQ2NEFycmF5PWZ1bmN0aW9uKCl7dHJ5e3ZhciBmdW5jPWlzTmF0aXZlKGZ1bmM9cm9vdC5GbG9hdDY0QXJyYXkpJiZmdW5jLHJlc3VsdD1uZXcgZnVuYyhuZXcgQXJyYXlCdWZmZXIoMTApLDAsMSkmJmZ1bmN9Y2F0Y2goZSl7fXJldHVybiByZXN1bHR9KCksbmF0aXZlQXNzaWduPWZ1bmN0aW9uKCl7dmFyIG9iamVjdD17MTowfSxmdW5jPXByZXZlbnRFeHRlbnNpb25zJiZpc05hdGl2ZShmdW5jPU9iamVjdC5hc3NpZ24pJiZmdW5jO3RyeXtmdW5jKHByZXZlbnRFeHRlbnNpb25zKG9iamVjdCksInhvIil9Y2F0Y2goZSl7fXJldHVybiFvYmplY3RbMV0mJmZ1bmN9KCksbmF0aXZlSXNBcnJheT1pc05hdGl2ZShuYXRpdmVJc0FycmF5PUFycmF5LmlzQXJyYXkpJiZuYXRpdmVJc0FycmF5LG5hdGl2ZUtleXM9aXNOYXRpdmUobmF0aXZlS2V5cz1PYmplY3Qua2V5cykmJm5hdGl2ZUtleXMsbmF0aXZlTWF4PU1hdGgubWF4LG5hdGl2ZU1pbj1NYXRoLm1pbixORUdBVElWRV9JTkZJTklUWT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTUFYX0FSUkFZX0xFTkdUSD1NYXRoLnBvdygyLDMyKS0xLE1BWF9BUlJBWV9JTkRFWD1NQVhfQVJSQVlfTEVOR1RILTEsSEFMRl9NQVhfQVJSQVlfTEVOR1RIPU1BWF9BUlJBWV9MRU5HVEg+Pj4xLEZMT0FUNjRfQllURVNfUEVSX0VMRU1FTlQ9RmxvYXQ2NEFycmF5P0Zsb2F0NjRBcnJheS5CWVRFU19QRVJfRUxFTUVOVDowLE1BWF9TQUZFX0lOVEVHRVI9TWF0aC5wb3coMiw1MyktMSxzdXBwb3J0PWxvZGFzaC5zdXBwb3J0PXt9OyhmdW5jdGlvbih4KXt2YXIgQ3Rvcj1mdW5jdGlvbigpe3RoaXMueD14fSxwcm9wcz1bXTtDdG9yLnByb3RvdHlwZT17dmFsdWVPZjp4LHk6eH07Zm9yKHZhciBrZXkgaW4gbmV3IEN0b3IpcHJvcHMucHVzaChrZXkpO3N1cHBvcnQuZnVuY0RlY29tcD0vXFxidGhpc1xcYi8udGVzdChmdW5jdGlvbigpe3JldHVybiB0aGlzfSksc3VwcG9ydC5mdW5jTmFtZXM9InN0cmluZyI9PXR5cGVvZiBGdW5jdGlvbi5uYW1lO3RyeXtzdXBwb3J0Lm5vbkVudW1BcmdzPSFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGFyZ3VtZW50cywxKX1jYXRjaChlKXtzdXBwb3J0Lm5vbkVudW1BcmdzPSEwfX0pKDEsMCk7dmFyIGJhc2VBc3NpZ249bmF0aXZlQXNzaWdufHxmdW5jdGlvbihvYmplY3Qsc291cmNlKXtyZXR1cm4gbnVsbD09c291cmNlP29iamVjdDpiYXNlQ29weShzb3VyY2UsZ2V0U3ltYm9scyhzb3VyY2UpLGJhc2VDb3B5KHNvdXJjZSxrZXlzKHNvdXJjZSksb2JqZWN0KSl9LGJhc2VFYWNoPWNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pLGJhc2VGb3I9Y3JlYXRlQmFzZUZvcigpO2J1ZmZlclNsaWNlfHwoYnVmZmVyQ2xvbmU9QXJyYXlCdWZmZXImJlVpbnQ4QXJyYXk/ZnVuY3Rpb24oYnVmZmVyKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aCxmbG9hdExlbmd0aD1GbG9hdDY0QXJyYXk/Zmxvb3IoYnl0ZUxlbmd0aC9GTE9BVDY0X0JZVEVTX1BFUl9FTEVNRU5UKTowLG9mZnNldD1mbG9hdExlbmd0aCpGTE9BVDY0X0JZVEVTX1BFUl9FTEVNRU5ULHJlc3VsdD1uZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCk7aWYoZmxvYXRMZW5ndGgpe3ZhciB2aWV3PW5ldyBGbG9hdDY0QXJyYXkocmVzdWx0LDAsZmxvYXRMZW5ndGgpO3ZpZXcuc2V0KG5ldyBGbG9hdDY0QXJyYXkoYnVmZmVyLDAsZmxvYXRMZW5ndGgpKX1yZXR1cm4gYnl0ZUxlbmd0aCE9b2Zmc2V0JiYodmlldz1uZXcgVWludDhBcnJheShyZXN1bHQsb2Zmc2V0KSx2aWV3LnNldChuZXcgVWludDhBcnJheShidWZmZXIsb2Zmc2V0KSkpLHJlc3VsdH06Y29uc3RhbnQobnVsbCkpO3ZhciBnZXRMZW5ndGg9YmFzZVByb3BlcnR5KCJsZW5ndGgiKSxnZXRTeW1ib2xzPWdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihvYmplY3Qpe3JldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3Qob2JqZWN0KSl9OmNvbnN0YW50KFtdKSxmaW5kTGFzdEluZGV4PWNyZWF0ZUZpbmRJbmRleCghMCksemlwPXJlc3RQYXJhbSh1bnppcCksZm9yRWFjaD1jcmVhdGVGb3JFYWNoKGFycmF5RWFjaCxiYXNlRWFjaCksaXNBcnJheT1uYXRpdmVJc0FycmF5fHxmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkmJmlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkmJm9ialRvU3RyaW5nLmNhbGwodmFsdWUpPT1hcnJheVRhZ30saXNGdW5jdGlvbj1iYXNlSXNGdW5jdGlvbigveC8pfHxVaW50OEFycmF5JiYhYmFzZUlzRnVuY3Rpb24oVWludDhBcnJheSk/ZnVuY3Rpb24odmFsdWUpe3JldHVybiBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKT09ZnVuY1RhZ306YmFzZUlzRnVuY3Rpb24saXNQbGFpbk9iamVjdD1nZXRQcm90b3R5cGVPZj9mdW5jdGlvbih2YWx1ZSl7aWYoIXZhbHVlfHxvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSE9b2JqZWN0VGFnKXJldHVybiExO3ZhciB2YWx1ZU9mPXZhbHVlLnZhbHVlT2Ysb2JqUHJvdG89aXNOYXRpdmUodmFsdWVPZikmJihvYmpQcm90bz1nZXRQcm90b3R5cGVPZih2YWx1ZU9mKSkmJmdldFByb3RvdHlwZU9mKG9ialByb3RvKTtyZXR1cm4gb2JqUHJvdG8/dmFsdWU9PW9ialByb3RvfHxnZXRQcm90b3R5cGVPZih2YWx1ZSk9PW9ialByb3RvOnNoaW1Jc1BsYWluT2JqZWN0KHZhbHVlKX06c2hpbUlzUGxhaW5PYmplY3QsYXNzaWduPWNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCxzb3VyY2UsY3VzdG9taXplcil7cmV0dXJuIGN1c3RvbWl6ZXI/YXNzaWduV2l0aChvYmplY3Qsc291cmNlLGN1c3RvbWl6ZXIpOmJhc2VBc3NpZ24ob2JqZWN0LHNvdXJjZSl9KSxrZXlzPW5hdGl2ZUtleXM/ZnVuY3Rpb24ob2JqZWN0KXtpZihvYmplY3QpdmFyIEN0b3I9b2JqZWN0LmNvbnN0cnVjdG9yLGxlbmd0aD1vYmplY3QubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBDdG9yJiZDdG9yLnByb3RvdHlwZT09PW9iamVjdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIG9iamVjdCYmaXNMZW5ndGgobGVuZ3RoKT9zaGltS2V5cyhvYmplY3QpOmlzT2JqZWN0KG9iamVjdCk/bmF0aXZlS2V5cyhvYmplY3QpOltdfTpzaGltS2V5cyxtZXJnZT1jcmVhdGVBc3NpZ25lcihiYXNlTWVyZ2UpO2xvZGFzaC5hc3NpZ249YXNzaWduLGxvZGFzaC5jYWxsYmFjaz1jYWxsYmFjayxsb2Rhc2guY29uc3RhbnQ9Y29uc3RhbnQsbG9kYXNoLmZvckVhY2g9Zm9yRWFjaCxsb2Rhc2gua2V5cz1rZXlzLGxvZGFzaC5rZXlzSW49a2V5c0luLGxvZGFzaC5tZXJnZT1tZXJnZSxsb2Rhc2gucHJvcGVydHk9cHJvcGVydHksbG9kYXNoLnJlamVjdD1yZWplY3QsbG9kYXNoLnJlc3RQYXJhbT1yZXN0UGFyYW0sbG9kYXNoLnNsaWNlPXNsaWNlLGxvZGFzaC50b1BsYWluT2JqZWN0PXRvUGxhaW5PYmplY3QsbG9kYXNoLnVuemlwPXVuemlwLGxvZGFzaC52YWx1ZXM9dmFsdWVzLGxvZGFzaC56aXA9emlwLGxvZGFzaC5lYWNoPWZvckVhY2gsbG9kYXNoLmV4dGVuZD1hc3NpZ24sbG9kYXNoLml0ZXJhdGVlPWNhbGxiYWNrLGxvZGFzaC5jbG9uZT1jbG9uZSxsb2Rhc2guZXNjYXBlUmVnRXhwPWVzY2FwZVJlZ0V4cCxsb2Rhc2guZmluZExhc3RJbmRleD1maW5kTGFzdEluZGV4LGxvZGFzaC5oYXM9aGFzLGxvZGFzaC5pZGVudGl0eT1pZGVudGl0eSxsb2Rhc2guaW5jbHVkZXM9aW5jbHVkZXMsbG9kYXNoLmluZGV4T2Y9aW5kZXhPZixsb2Rhc2guaXNBcmd1bWVudHM9aXNBcmd1bWVudHMsbG9kYXNoLmlzQXJyYXk9aXNBcnJheSxsb2Rhc2guaXNFbXB0eT1pc0VtcHR5LGxvZGFzaC5pc0Z1bmN0aW9uPWlzRnVuY3Rpb24sbG9kYXNoLmlzTmF0aXZlPWlzTmF0aXZlLGxvZGFzaC5pc051bWJlcj1pc051bWJlcixsb2Rhc2guaXNPYmplY3Q9aXNPYmplY3QsbG9kYXNoLmlzUGxhaW5PYmplY3Q9aXNQbGFpbk9iamVjdCxsb2Rhc2guaXNTdHJpbmc9aXNTdHJpbmcsbG9kYXNoLmlzVHlwZWRBcnJheT1pc1R5cGVkQXJyYXksbG9kYXNoLmxhc3Q9bGFzdCxsb2Rhc2guc29tZT1zb21lLGxvZGFzaC5hbnk9c29tZSxsb2Rhc2guY29udGFpbnM9aW5jbHVkZXMsbG9kYXNoLmluY2x1ZGU9aW5jbHVkZXMsbG9kYXNoLlZFUlNJT049VkVSU0lPTixmcmVlRXhwb3J0cyYmZnJlZU1vZHVsZT9tb2R1bGVFeHBvcnRzPyhmcmVlTW9kdWxlLmV4cG9ydHM9bG9kYXNoKS5fPWxvZGFzaDpmcmVlRXhwb3J0cy5fPWxvZGFzaDpyb290Ll89bG9kYXNoXG59KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9qc2hpbnQuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXt2YXIgXz1fZGVyZXFfKCIuLi9sb2Rhc2giKSxldmVudHM9X2RlcmVxXygiZXZlbnRzIiksdmFycz1fZGVyZXFfKCIuL3ZhcnMuanMiKSxtZXNzYWdlcz1fZGVyZXFfKCIuL21lc3NhZ2VzLmpzIiksTGV4ZXI9X2RlcmVxXygiLi9sZXguanMiKS5MZXhlcixyZWc9X2RlcmVxXygiLi9yZWcuanMiKSxzdGF0ZT1fZGVyZXFfKCIuL3N0YXRlLmpzIikuc3RhdGUsc3R5bGU9X2RlcmVxXygiLi9zdHlsZS5qcyIpLG9wdGlvbnM9X2RlcmVxXygiLi9vcHRpb25zLmpzIiksc2NvcGVNYW5hZ2VyPV9kZXJlcV8oIi4vc2NvcGUtbWFuYWdlci5qcyIpLEpTSElOVD1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjaGVja09wdGlvbihuYW1lLHQpe3JldHVybiBuYW1lPW5hbWUudHJpbSgpLC9eWystXVdcXGR7M30kL2cudGVzdChuYW1lKT8hMDotMSE9PW9wdGlvbnMudmFsaWROYW1lcy5pbmRleE9mKG5hbWUpfHwianNsaW50Ij09PXQudHlwZXx8Xy5oYXMob3B0aW9ucy5yZW1vdmVkLG5hbWUpPyEwOihlcnJvcigiRTAwMSIsdCxuYW1lKSwhMSl9ZnVuY3Rpb24gaXNTdHJpbmcob2JqKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopfWZ1bmN0aW9uIGlzSWRlbnRpZmllcih0a24sdmFsdWUpe3JldHVybiB0a24/dGtuLmlkZW50aWZpZXImJnRrbi52YWx1ZT09PXZhbHVlPyEwOiExOiExfWZ1bmN0aW9uIGlzUmVzZXJ2ZWQodG9rZW4pe2lmKCF0b2tlbi5yZXNlcnZlZClyZXR1cm4hMTt2YXIgbWV0YT10b2tlbi5tZXRhO2lmKG1ldGEmJm1ldGEuaXNGdXR1cmVSZXNlcnZlZFdvcmQmJnN0YXRlLmluRVM1KCkpe2lmKCFtZXRhLmVzNSlyZXR1cm4hMTtpZihtZXRhLnN0cmljdE9ubHkmJiFzdGF0ZS5vcHRpb24uc3RyaWN0JiYhc3RhdGUuaXNTdHJpY3QoKSlyZXR1cm4hMTtpZih0b2tlbi5pc1Byb3BlcnR5KXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHN1cHBsYW50KHN0cixkYXRhKXtyZXR1cm4gc3RyLnJlcGxhY2UoL1xceyhbXnt9XSopXFx9L2csZnVuY3Rpb24oYSxiKXt2YXIgcj1kYXRhW2JdO3JldHVybiJzdHJpbmciPT10eXBlb2Ygcnx8Im51bWJlciI9PXR5cGVvZiByP3I6YX0pfWZ1bmN0aW9uIGNvbWJpbmUoZGVzdCxzcmMpe09iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbihuYW1lKXtfLmhhcyhKU0hJTlQuYmxhY2tsaXN0LG5hbWUpfHwoZGVzdFtuYW1lXT1zcmNbbmFtZV0pfSl9ZnVuY3Rpb24gcHJvY2Vzc2VuZm9yY2VhbGwoKXtpZihzdGF0ZS5vcHRpb24uZW5mb3JjZWFsbCl7Zm9yKHZhciBlbmZvcmNlb3B0IGluIG9wdGlvbnMuYm9vbC5lbmZvcmNpbmcpdm9pZCAwIT09c3RhdGUub3B0aW9uW2VuZm9yY2VvcHRdfHxvcHRpb25zLm5vZW5mb3JjZWFsbFtlbmZvcmNlb3B0XXx8KHN0YXRlLm9wdGlvbltlbmZvcmNlb3B0XT0hMCk7Zm9yKHZhciByZWxheG9wdCBpbiBvcHRpb25zLmJvb2wucmVsYXhpbmcpdm9pZCAwPT09c3RhdGUub3B0aW9uW3JlbGF4b3B0XSYmKHN0YXRlLm9wdGlvbltyZWxheG9wdF09ITEpfX1mdW5jdGlvbiBhc3N1bWUoKXtwcm9jZXNzZW5mb3JjZWFsbCgpLHN0YXRlLm9wdGlvbi5lc3ZlcnNpb258fHN0YXRlLm9wdGlvbi5tb3p8fChzdGF0ZS5vcHRpb24uZXN2ZXJzaW9uPXN0YXRlLm9wdGlvbi5lczM/MzpzdGF0ZS5vcHRpb24uZXNuZXh0PzY6NSksc3RhdGUuaW5FUzUoKSYmY29tYmluZShwcmVkZWZpbmVkLHZhcnMuZWNtYUlkZW50aWZpZXJzWzVdKSxzdGF0ZS5pbkVTNigpJiZjb21iaW5lKHByZWRlZmluZWQsdmFycy5lY21hSWRlbnRpZmllcnNbNl0pLHN0YXRlLm9wdGlvbi5tb2R1bGUmJihzdGF0ZS5vcHRpb24uc3RyaWN0PT09ITAmJihzdGF0ZS5vcHRpb24uc3RyaWN0PSJnbG9iYWwiKSxzdGF0ZS5pbkVTNigpfHx3YXJuaW5nKCJXMTM0IixzdGF0ZS50b2tlbnMubmV4dCwibW9kdWxlIiw2KSksc3RhdGUub3B0aW9uLmNvdWNoJiZjb21iaW5lKHByZWRlZmluZWQsdmFycy5jb3VjaCksc3RhdGUub3B0aW9uLnF1bml0JiZjb21iaW5lKHByZWRlZmluZWQsdmFycy5xdW5pdCksc3RhdGUub3B0aW9uLnJoaW5vJiZjb21iaW5lKHByZWRlZmluZWQsdmFycy5yaGlubyksc3RhdGUub3B0aW9uLnNoZWxsanMmJihjb21iaW5lKHByZWRlZmluZWQsdmFycy5zaGVsbGpzKSxjb21iaW5lKHByZWRlZmluZWQsdmFycy5ub2RlKSksc3RhdGUub3B0aW9uLnR5cGVkJiZjb21iaW5lKHByZWRlZmluZWQsdmFycy50eXBlZCksc3RhdGUub3B0aW9uLnBoYW50b20mJihjb21iaW5lKHByZWRlZmluZWQsdmFycy5waGFudG9tKSxzdGF0ZS5vcHRpb24uc3RyaWN0PT09ITAmJihzdGF0ZS5vcHRpb24uc3RyaWN0PSJnbG9iYWwiKSksc3RhdGUub3B0aW9uLnByb3RvdHlwZWpzJiZjb21iaW5lKHByZWRlZmluZWQsdmFycy5wcm90b3R5cGVqcyksc3RhdGUub3B0aW9uLm5vZGUmJihjb21iaW5lKHByZWRlZmluZWQsdmFycy5ub2RlKSxjb21iaW5lKHByZWRlZmluZWQsdmFycy50eXBlZCksc3RhdGUub3B0aW9uLnN0cmljdD09PSEwJiYoc3RhdGUub3B0aW9uLnN0cmljdD0iZ2xvYmFsIikpLHN0YXRlLm9wdGlvbi5kZXZlbCYmY29tYmluZShwcmVkZWZpbmVkLHZhcnMuZGV2ZWwpLHN0YXRlLm9wdGlvbi5kb2pvJiZjb21iaW5lKHByZWRlZmluZWQsdmFycy5kb2pvKSxzdGF0ZS5vcHRpb24uYnJvd3NlciYmKGNvbWJpbmUocHJlZGVmaW5lZCx2YXJzLmJyb3dzZXIpLGNvbWJpbmUocHJlZGVmaW5lZCx2YXJzLnR5cGVkKSksc3RhdGUub3B0aW9uLmJyb3dzZXJpZnkmJihjb21iaW5lKHByZWRlZmluZWQsdmFycy5icm93c2VyKSxjb21iaW5lKHByZWRlZmluZWQsdmFycy50eXBlZCksY29tYmluZShwcmVkZWZpbmVkLHZhcnMuYnJvd3NlcmlmeSksc3RhdGUub3B0aW9uLnN0cmljdD09PSEwJiYoc3RhdGUub3B0aW9uLnN0cmljdD0iZ2xvYmFsIikpLHN0YXRlLm9wdGlvbi5ub25zdGFuZGFyZCYmY29tYmluZShwcmVkZWZpbmVkLHZhcnMubm9uc3RhbmRhcmQpLHN0YXRlLm9wdGlvbi5qYXNtaW5lJiZjb21iaW5lKHByZWRlZmluZWQsdmFycy5qYXNtaW5lKSxzdGF0ZS5vcHRpb24uanF1ZXJ5JiZjb21iaW5lKHByZWRlZmluZWQsdmFycy5qcXVlcnkpLHN0YXRlLm9wdGlvbi5tb290b29scyYmY29tYmluZShwcmVkZWZpbmVkLHZhcnMubW9vdG9vbHMpLHN0YXRlLm9wdGlvbi53b3JrZXImJmNvbWJpbmUocHJlZGVmaW5lZCx2YXJzLndvcmtlciksc3RhdGUub3B0aW9uLndzaCYmY29tYmluZShwcmVkZWZpbmVkLHZhcnMud3NoKSxzdGF0ZS5vcHRpb24uZ2xvYmFsc3RyaWN0JiZzdGF0ZS5vcHRpb24uc3RyaWN0IT09ITEmJihzdGF0ZS5vcHRpb24uc3RyaWN0PSJnbG9iYWwiKSxzdGF0ZS5vcHRpb24ueXVpJiZjb21iaW5lKHByZWRlZmluZWQsdmFycy55dWkpLHN0YXRlLm9wdGlvbi5tb2NoYSYmY29tYmluZShwcmVkZWZpbmVkLHZhcnMubW9jaGEpfWZ1bmN0aW9uIHF1aXQoY29kZSxsaW5lLGNocil7dmFyIHBlcmNlbnRhZ2U9TWF0aC5mbG9vcigxMDAqKGxpbmUvc3RhdGUubGluZXMubGVuZ3RoKSksbWVzc2FnZT1tZXNzYWdlcy5lcnJvcnNbY29kZV0uZGVzYzt0aHJvd3tuYW1lOiJKU0hpbnRFcnJvciIsbGluZTpsaW5lLGNoYXJhY3RlcjpjaHIsbWVzc2FnZTptZXNzYWdlKyIgKCIrcGVyY2VudGFnZSsiJSBzY2FubmVkKS4iLHJhdzptZXNzYWdlLGNvZGU6Y29kZX19ZnVuY3Rpb24gcmVtb3ZlSWdub3JlZE1lc3NhZ2VzKCl7dmFyIGlnbm9yZWQ9c3RhdGUuaWdub3JlZExpbmVzO18uaXNFbXB0eShpZ25vcmVkKXx8KEpTSElOVC5lcnJvcnM9Xy5yZWplY3QoSlNISU5ULmVycm9ycyxmdW5jdGlvbihlcnIpe3JldHVybiBpZ25vcmVkW2Vyci5saW5lXX0pKX1mdW5jdGlvbiB3YXJuaW5nKGNvZGUsdCxhLGIsYyxkKXt2YXIgY2gsbCx3LG1zZztpZigvXldcXGR7M30kLy50ZXN0KGNvZGUpKXtpZihzdGF0ZS5pZ25vcmVkW2NvZGVdKXJldHVybjttc2c9bWVzc2FnZXMud2FybmluZ3NbY29kZV19ZWxzZS9FXFxkezN9Ly50ZXN0KGNvZGUpP21zZz1tZXNzYWdlcy5lcnJvcnNbY29kZV06L0lcXGR7M30vLnRlc3QoY29kZSkmJihtc2c9bWVzc2FnZXMuaW5mb1tjb2RlXSk7cmV0dXJuIHQ9dHx8c3RhdGUudG9rZW5zLm5leHR8fHt9LCIoZW5kKSI9PT10LmlkJiYodD1zdGF0ZS50b2tlbnMuY3VyciksbD10LmxpbmV8fDAsY2g9dC5mcm9tfHwwLHc9e2lkOiIoZXJyb3IpIixyYXc6bXNnLmRlc2MsY29kZTptc2cuY29kZSxldmlkZW5jZTpzdGF0ZS5saW5lc1tsLTFdfHwiIixsaW5lOmwsY2hhcmFjdGVyOmNoLHNjb3BlOkpTSElOVC5zY29wZSxhOmEsYjpiLGM6YyxkOmR9LHcucmVhc29uPXN1cHBsYW50KG1zZy5kZXNjLHcpLEpTSElOVC5lcnJvcnMucHVzaCh3KSxyZW1vdmVJZ25vcmVkTWVzc2FnZXMoKSxKU0hJTlQuZXJyb3JzLmxlbmd0aD49c3RhdGUub3B0aW9uLm1heGVyciYmcXVpdCgiRTA0MyIsbCxjaCksd31mdW5jdGlvbiB3YXJuaW5nQXQobSxsLGNoLGEsYixjLGQpe3JldHVybiB3YXJuaW5nKG0se2xpbmU6bCxmcm9tOmNofSxhLGIsYyxkKX1mdW5jdGlvbiBlcnJvcihtLHQsYSxiLGMsZCl7d2FybmluZyhtLHQsYSxiLGMsZCl9ZnVuY3Rpb24gZXJyb3JBdChtLGwsY2gsYSxiLGMsZCl7cmV0dXJuIGVycm9yKG0se2xpbmU6bCxmcm9tOmNofSxhLGIsYyxkKX1mdW5jdGlvbiBhZGRJbnRlcm5hbFNyYyhlbGVtLHNyYyl7dmFyIGk7cmV0dXJuIGk9e2lkOiIoaW50ZXJuYWwpIixlbGVtOmVsZW0sdmFsdWU6c3JjfSxKU0hJTlQuaW50ZXJuYWxzLnB1c2goaSksaX1mdW5jdGlvbiBkb09wdGlvbigpe3ZhciBudD1zdGF0ZS50b2tlbnMubmV4dCxib2R5PW50LmJvZHkubWF0Y2goLygtXFxzKyk/W15cXHMsOl0rKD86XFxzKjpcXHMqKC1cXHMrKT9bXlxccyxdKyk/L2cpfHxbXSxwcmVkZWY9e307aWYoImdsb2JhbHMiPT09bnQudHlwZSl7Ym9keS5mb3JFYWNoKGZ1bmN0aW9uKGcsaWR4KXtnPWcuc3BsaXQoIjoiKTt2YXIga2V5PShnWzBdfHwiIikudHJpbSgpLHZhbD0oZ1sxXXx8IiIpLnRyaW0oKTtpZigiLSI9PT1rZXl8fCFrZXkubGVuZ3RoKXtpZihpZHg+MCYmaWR4PT09Ym9keS5sZW5ndGgtMSlyZXR1cm47cmV0dXJuIGVycm9yKCJFMDAyIixudCksdm9pZCAwfSItIj09PWtleS5jaGFyQXQoMCk/KGtleT1rZXkuc2xpY2UoMSksdmFsPSExLEpTSElOVC5ibGFja2xpc3Rba2V5XT1rZXksZGVsZXRlIHByZWRlZmluZWRba2V5XSk6cHJlZGVmW2tleV09InRydWUiPT09dmFsfSksY29tYmluZShwcmVkZWZpbmVkLHByZWRlZik7Zm9yKHZhciBrZXkgaW4gcHJlZGVmKV8uaGFzKHByZWRlZixrZXkpJiYoZGVjbGFyZWRba2V5XT1udCl9ImV4cG9ydGVkIj09PW50LnR5cGUmJmJvZHkuZm9yRWFjaChmdW5jdGlvbihlLGlkeCl7aWYoIWUubGVuZ3RoKXtpZihpZHg+MCYmaWR4PT09Ym9keS5sZW5ndGgtMSlyZXR1cm47cmV0dXJuIGVycm9yKCJFMDAyIixudCksdm9pZCAwfXN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkRXhwb3J0ZWQoZSl9KSwibWVtYmVycyI9PT1udC50eXBlJiYobWVtYmVyc09ubHk9bWVtYmVyc09ubHl8fHt9LGJvZHkuZm9yRWFjaChmdW5jdGlvbihtKXt2YXIgY2gxPW0uY2hhckF0KDApLGNoMj1tLmNoYXJBdChtLmxlbmd0aC0xKTtjaDEhPT1jaDJ8fFwnIlwnIT09Y2gxJiYiXCciIT09Y2gxfHwobT1tLnN1YnN0cigxLG0ubGVuZ3RoLTIpLnJlcGxhY2UoXCdcXFxcIlwnLFwnIlwnKSksbWVtYmVyc09ubHlbbV09ITF9KSk7dmFyIG51bXZhbHM9WyJtYXhzdGF0ZW1lbnRzIiwibWF4cGFyYW1zIiwibWF4ZGVwdGgiLCJtYXhjb21wbGV4aXR5IiwibWF4ZXJyIiwibWF4bGVuIiwiaW5kZW50Il07KCJqc2hpbnQiPT09bnQudHlwZXx8ImpzbGludCI9PT1udC50eXBlKSYmKGJvZHkuZm9yRWFjaChmdW5jdGlvbihnKXtnPWcuc3BsaXQoIjoiKTt2YXIga2V5PShnWzBdfHwiIikudHJpbSgpLHZhbD0oZ1sxXXx8IiIpLnRyaW0oKTtpZihjaGVja09wdGlvbihrZXksbnQpKWlmKG51bXZhbHMuaW5kZXhPZihrZXkpPj0wKWlmKCJmYWxzZSIhPT12YWwpe2lmKHZhbD0rdmFsLCJudW1iZXIiIT10eXBlb2YgdmFsfHwhaXNGaW5pdGUodmFsKXx8MD49dmFsfHxNYXRoLmZsb29yKHZhbCkhPT12YWwpcmV0dXJuIGVycm9yKCJFMDMyIixudCxnWzFdLnRyaW0oKSksdm9pZCAwO3N0YXRlLm9wdGlvbltrZXldPXZhbH1lbHNlIHN0YXRlLm9wdGlvbltrZXldPSJpbmRlbnQiPT09a2V5PzQ6ITE7ZWxzZXtpZigidmFsaWR0aGlzIj09PWtleSlyZXR1cm4gc3RhdGUuZnVuY3RbIihnbG9iYWwpIl0/dm9pZCBlcnJvcigiRTAwOSIpOiJ0cnVlIiE9PXZhbCYmImZhbHNlIiE9PXZhbD92b2lkIGVycm9yKCJFMDAyIixudCk6KHN0YXRlLm9wdGlvbi52YWxpZHRoaXM9InRydWUiPT09dmFsLHZvaWQgMCk7aWYoInF1b3RtYXJrIiE9PWtleSlpZigic2hhZG93IiE9PWtleSlpZigidW51c2VkIiE9PWtleSlpZigibGF0ZWRlZiIhPT1rZXkpaWYoImlnbm9yZSIhPT1rZXkpaWYoInN0cmljdCIhPT1rZXkpeyJtb2R1bGUiPT09a2V5JiYoaGFzUGFyc2VkQ29kZShzdGF0ZS5mdW5jdCl8fGVycm9yKCJFMDU1IixzdGF0ZS50b2tlbnMubmV4dCwibW9kdWxlIikpO3ZhciBlc3ZlcnNpb25zPXtlczM6MyxlczU6NSxlc25leHQ6Nn07aWYoIV8uaGFzKGVzdmVyc2lvbnMsa2V5KSl7aWYoImVzdmVyc2lvbiI9PT1rZXkpe3N3aXRjaCh2YWwpe2Nhc2UiNSI6c3RhdGUuaW5FUzUoITApJiZ3YXJuaW5nKCJJMDAzIik7Y2FzZSIzIjpjYXNlIjYiOnN0YXRlLm9wdGlvbi5tb3o9ITEsc3RhdGUub3B0aW9uLmVzdmVyc2lvbj0rdmFsO2JyZWFrO2Nhc2UiMjAxNSI6c3RhdGUub3B0aW9uLm1vej0hMSxzdGF0ZS5vcHRpb24uZXN2ZXJzaW9uPTY7YnJlYWs7ZGVmYXVsdDplcnJvcigiRTAwMiIsbnQpfXJldHVybiBoYXNQYXJzZWRDb2RlKHN0YXRlLmZ1bmN0KXx8ZXJyb3IoIkUwNTUiLHN0YXRlLnRva2Vucy5uZXh0LCJlc3ZlcnNpb24iKSx2b2lkIDB9dmFyIG1hdGNoPS9eKFsrLV0pKFdcXGR7M30pJC9nLmV4ZWMoa2V5KTtpZihtYXRjaClyZXR1cm4gc3RhdGUuaWdub3JlZFttYXRjaFsyXV09Ii0iPT09bWF0Y2hbMV0sdm9pZCAwO3ZhciB0bjtyZXR1cm4idHJ1ZSI9PT12YWx8fCJmYWxzZSI9PT12YWw/KCJqc2xpbnQiPT09bnQudHlwZT8odG49b3B0aW9ucy5yZW5hbWVkW2tleV18fGtleSxzdGF0ZS5vcHRpb25bdG5dPSJ0cnVlIj09PXZhbCx2b2lkIDAhPT1vcHRpb25zLmludmVydGVkW3RuXSYmKHN0YXRlLm9wdGlvblt0bl09IXN0YXRlLm9wdGlvblt0bl0pKTpzdGF0ZS5vcHRpb25ba2V5XT0idHJ1ZSI9PT12YWwsIm5ld2NhcCI9PT1rZXkmJihzdGF0ZS5vcHRpb25bIihleHBsaWNpdE5ld2NhcCkiXT0hMCksdm9pZCAwKTooZXJyb3IoIkUwMDIiLG50KSx2b2lkIDApfXN3aXRjaCh2YWwpe2Nhc2UidHJ1ZSI6c3RhdGUub3B0aW9uLm1vej0hMSxzdGF0ZS5vcHRpb24uZXN2ZXJzaW9uPWVzdmVyc2lvbnNba2V5XTticmVhaztjYXNlImZhbHNlIjpzdGF0ZS5vcHRpb24ubW96fHwoc3RhdGUub3B0aW9uLmVzdmVyc2lvbj01KTticmVhaztkZWZhdWx0OmVycm9yKCJFMDAyIixudCl9fWVsc2Ugc3dpdGNoKHZhbCl7Y2FzZSJ0cnVlIjpzdGF0ZS5vcHRpb24uc3RyaWN0PSEwO2JyZWFrO2Nhc2UiZmFsc2UiOnN0YXRlLm9wdGlvbi5zdHJpY3Q9ITE7YnJlYWs7Y2FzZSJmdW5jIjpjYXNlImdsb2JhbCI6Y2FzZSJpbXBsaWVkIjpzdGF0ZS5vcHRpb24uc3RyaWN0PXZhbDticmVhaztkZWZhdWx0OmVycm9yKCJFMDAyIixudCl9ZWxzZSBzd2l0Y2godmFsKXtjYXNlImxpbmUiOnN0YXRlLmlnbm9yZWRMaW5lc1tudC5saW5lXT0hMCxyZW1vdmVJZ25vcmVkTWVzc2FnZXMoKTticmVhaztkZWZhdWx0OmVycm9yKCJFMDAyIixudCl9ZWxzZSBzd2l0Y2godmFsKXtjYXNlInRydWUiOnN0YXRlLm9wdGlvbi5sYXRlZGVmPSEwO2JyZWFrO2Nhc2UiZmFsc2UiOnN0YXRlLm9wdGlvbi5sYXRlZGVmPSExO2JyZWFrO2Nhc2Uibm9mdW5jIjpzdGF0ZS5vcHRpb24ubGF0ZWRlZj0ibm9mdW5jIjticmVhaztkZWZhdWx0OmVycm9yKCJFMDAyIixudCl9ZWxzZSBzd2l0Y2godmFsKXtjYXNlInRydWUiOnN0YXRlLm9wdGlvbi51bnVzZWQ9ITA7YnJlYWs7Y2FzZSJmYWxzZSI6c3RhdGUub3B0aW9uLnVudXNlZD0hMTticmVhaztjYXNlInZhcnMiOmNhc2Uic3RyaWN0IjpzdGF0ZS5vcHRpb24udW51c2VkPXZhbDticmVhaztkZWZhdWx0OmVycm9yKCJFMDAyIixudCl9ZWxzZSBzd2l0Y2godmFsKXtjYXNlInRydWUiOnN0YXRlLm9wdGlvbi5zaGFkb3c9ITA7YnJlYWs7Y2FzZSJvdXRlciI6c3RhdGUub3B0aW9uLnNoYWRvdz0ib3V0ZXIiO2JyZWFrO2Nhc2UiZmFsc2UiOmNhc2UiaW5uZXIiOnN0YXRlLm9wdGlvbi5zaGFkb3c9ImlubmVyIjticmVhaztkZWZhdWx0OmVycm9yKCJFMDAyIixudCl9ZWxzZSBzd2l0Y2godmFsKXtjYXNlInRydWUiOmNhc2UiZmFsc2UiOnN0YXRlLm9wdGlvbi5xdW90bWFyaz0idHJ1ZSI9PT12YWw7YnJlYWs7Y2FzZSJkb3VibGUiOmNhc2Uic2luZ2xlIjpzdGF0ZS5vcHRpb24ucXVvdG1hcms9dmFsO2JyZWFrO2RlZmF1bHQ6ZXJyb3IoIkUwMDIiLG50KX19fSksYXNzdW1lKCkpfWZ1bmN0aW9uIHBlZWsocCl7dmFyIHQsaT1wfHwwLGo9bG9va2FoZWFkLmxlbmd0aDtpZihqPmkpcmV0dXJuIGxvb2thaGVhZFtpXTtmb3IoO2k+PWo7KXQ9bG9va2FoZWFkW2pdLHR8fCh0PWxvb2thaGVhZFtqXT1sZXgudG9rZW4oKSksais9MTtyZXR1cm4gdHx8IihlbmQpIiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkP3Q6c3RhdGUudG9rZW5zLm5leHR9ZnVuY3Rpb24gcGVla0lnbm9yZUVPTCgpe3ZhciB0LGk9MDtkbyB0PXBlZWsoaSsrKTt3aGlsZSgiKGVuZGxpbmUpIj09PXQuaWQpO3JldHVybiB0fWZ1bmN0aW9uIGFkdmFuY2UoaWQsdCl7c3dpdGNoKHN0YXRlLnRva2Vucy5jdXJyLmlkKXtjYXNlIihudW1iZXIpIjoiLiI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmd2FybmluZygiVzAwNSIsc3RhdGUudG9rZW5zLmN1cnIpO2JyZWFrO2Nhc2UiLSI6KCItIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkfHwiLS0iPT09c3RhdGUudG9rZW5zLm5leHQuaWQpJiZ3YXJuaW5nKCJXMDA2Iik7YnJlYWs7Y2FzZSIrIjooIisiPT09c3RhdGUudG9rZW5zLm5leHQuaWR8fCIrKyI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCkmJndhcm5pbmcoIlcwMDciKX1mb3IoaWQmJnN0YXRlLnRva2Vucy5uZXh0LmlkIT09aWQmJih0PyIoZW5kKSI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZD9lcnJvcigiRTAxOSIsdCx0LmlkKTplcnJvcigiRTAyMCIsc3RhdGUudG9rZW5zLm5leHQsaWQsdC5pZCx0LmxpbmUsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOigiKGlkZW50aWZpZXIpIiE9PXN0YXRlLnRva2Vucy5uZXh0LnR5cGV8fHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlIT09aWQpJiZ3YXJuaW5nKCJXMTE2IixzdGF0ZS50b2tlbnMubmV4dCxpZCxzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSkpLHN0YXRlLnRva2Vucy5wcmV2PXN0YXRlLnRva2Vucy5jdXJyLHN0YXRlLnRva2Vucy5jdXJyPXN0YXRlLnRva2Vucy5uZXh0Ozspe2lmKHN0YXRlLnRva2Vucy5uZXh0PWxvb2thaGVhZC5zaGlmdCgpfHxsZXgudG9rZW4oKSxzdGF0ZS50b2tlbnMubmV4dHx8cXVpdCgiRTA0MSIsc3RhdGUudG9rZW5zLmN1cnIubGluZSksIihlbmQpIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkfHwiKGVycm9yKSI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZClyZXR1cm47aWYoc3RhdGUudG9rZW5zLm5leHQuY2hlY2smJnN0YXRlLnRva2Vucy5uZXh0LmNoZWNrKCksc3RhdGUudG9rZW5zLm5leHQuaXNTcGVjaWFsKSJmYWxscyB0aHJvdWdoIj09PXN0YXRlLnRva2Vucy5uZXh0LnR5cGU/c3RhdGUudG9rZW5zLmN1cnIuY2FzZUZhbGxzVGhyb3VnaD0hMDpkb09wdGlvbigpO2Vsc2UgaWYoIihlbmRsaW5lKSIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZClicmVha319ZnVuY3Rpb24gaXNJbmZpeCh0b2tlbil7cmV0dXJuIHRva2VuLmluZml4fHwhdG9rZW4uaWRlbnRpZmllciYmIXRva2VuLnRlbXBsYXRlJiYhIXRva2VuLmxlZH1mdW5jdGlvbiBpc0VuZE9mRXhwcigpe3ZhciBjdXJyPXN0YXRlLnRva2Vucy5jdXJyLG5leHQ9c3RhdGUudG9rZW5zLm5leHQ7cmV0dXJuIjsiPT09bmV4dC5pZHx8In0iPT09bmV4dC5pZHx8IjoiPT09bmV4dC5pZD8hMDppc0luZml4KG5leHQpPT09aXNJbmZpeChjdXJyKXx8InlpZWxkIj09PWN1cnIuaWQmJnN0YXRlLmluTW96KCk/Y3Vyci5saW5lIT09c3RhcnRMaW5lKG5leHQpOiExfWZ1bmN0aW9uIGlzQmVnaW5PZkV4cHIocHJldil7cmV0dXJuIXByZXYubGVmdCYmInVuYXJ5IiE9PXByZXYuYXJpdHl9ZnVuY3Rpb24gZXhwcmVzc2lvbihyYnAsaW5pdGlhbCl7dmFyIGxlZnQsaXNBcnJheT0hMSxpc09iamVjdD0hMSxpc0xldEV4cHI9ITE7c3RhdGUubmFtZVN0YWNrLnB1c2goKSxpbml0aWFsfHwibGV0IiE9PXN0YXRlLnRva2Vucy5uZXh0LnZhbHVlfHwiKCIhPT1wZWVrKDApLnZhbHVlfHwoc3RhdGUuaW5Nb3ooKXx8d2FybmluZygiVzExOCIsc3RhdGUudG9rZW5zLm5leHQsImxldCBleHByZXNzaW9ucyIpLGlzTGV0RXhwcj0hMCxzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnN0YWNrKCksYWR2YW5jZSgibGV0IiksYWR2YW5jZSgiKCIpLHN0YXRlLnRva2Vucy5wcmV2LmZ1ZCgpLGFkdmFuY2UoIikiKSksIihlbmQpIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkJiZlcnJvcigiRTAwNiIsc3RhdGUudG9rZW5zLmN1cnIpO3ZhciBpc0Rhbmdlcm91cz1zdGF0ZS5vcHRpb24uYXNpJiZzdGF0ZS50b2tlbnMucHJldi5saW5lIT09c3RhcnRMaW5lKHN0YXRlLnRva2Vucy5jdXJyKSYmXy5jb250YWlucyhbIl0iLCIpIl0sc3RhdGUudG9rZW5zLnByZXYuaWQpJiZfLmNvbnRhaW5zKFsiWyIsIigiXSxzdGF0ZS50b2tlbnMuY3Vyci5pZCk7aWYoaXNEYW5nZXJvdXMmJndhcm5pbmcoIlcwMTQiLHN0YXRlLnRva2Vucy5jdXJyLHN0YXRlLnRva2Vucy5jdXJyLmlkKSxhZHZhbmNlKCksaW5pdGlhbCYmKHN0YXRlLmZ1bmN0WyIodmVyYikiXT1zdGF0ZS50b2tlbnMuY3Vyci52YWx1ZSxzdGF0ZS50b2tlbnMuY3Vyci5iZWdpbnNTdG10PSEwKSxpbml0aWFsPT09ITAmJnN0YXRlLnRva2Vucy5jdXJyLmZ1ZClsZWZ0PXN0YXRlLnRva2Vucy5jdXJyLmZ1ZCgpO2Vsc2UgZm9yKHN0YXRlLnRva2Vucy5jdXJyLm51ZD9sZWZ0PXN0YXRlLnRva2Vucy5jdXJyLm51ZCgpOmVycm9yKCJFMDMwIixzdGF0ZS50b2tlbnMuY3VycixzdGF0ZS50b2tlbnMuY3Vyci5pZCk7KHN0YXRlLnRva2Vucy5uZXh0LmxicD5yYnB8fCIodGVtcGxhdGUpIj09PXN0YXRlLnRva2Vucy5uZXh0LnR5cGUpJiYhaXNFbmRPZkV4cHIoKTspaXNBcnJheT0iQXJyYXkiPT09c3RhdGUudG9rZW5zLmN1cnIudmFsdWUsaXNPYmplY3Q9Ik9iamVjdCI9PT1zdGF0ZS50b2tlbnMuY3Vyci52YWx1ZSxsZWZ0JiYobGVmdC52YWx1ZXx8bGVmdC5maXJzdCYmbGVmdC5maXJzdC52YWx1ZSkmJigibmV3IiE9PWxlZnQudmFsdWV8fGxlZnQuZmlyc3QmJmxlZnQuZmlyc3QudmFsdWUmJiIuIj09PWxlZnQuZmlyc3QudmFsdWUpJiYoaXNBcnJheT0hMSxsZWZ0LnZhbHVlIT09c3RhdGUudG9rZW5zLmN1cnIudmFsdWUmJihpc09iamVjdD0hMSkpLGFkdmFuY2UoKSxpc0FycmF5JiYiKCI9PT1zdGF0ZS50b2tlbnMuY3Vyci5pZCYmIikiPT09c3RhdGUudG9rZW5zLm5leHQuaWQmJndhcm5pbmcoIlcwMDkiLHN0YXRlLnRva2Vucy5jdXJyKSxpc09iamVjdCYmIigiPT09c3RhdGUudG9rZW5zLmN1cnIuaWQmJiIpIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkJiZ3YXJuaW5nKCJXMDEwIixzdGF0ZS50b2tlbnMuY3VyciksbGVmdCYmc3RhdGUudG9rZW5zLmN1cnIubGVkP2xlZnQ9c3RhdGUudG9rZW5zLmN1cnIubGVkKGxlZnQpOmVycm9yKCJFMDMzIixzdGF0ZS50b2tlbnMuY3VycixzdGF0ZS50b2tlbnMuY3Vyci5pZCk7cmV0dXJuIGlzTGV0RXhwciYmc3RhdGUuZnVuY3RbIihzY29wZSkiXS51bnN0YWNrKCksc3RhdGUubmFtZVN0YWNrLnBvcCgpLGxlZnR9ZnVuY3Rpb24gc3RhcnRMaW5lKHRva2VuKXtyZXR1cm4gdG9rZW4uc3RhcnRMaW5lfHx0b2tlbi5saW5lfWZ1bmN0aW9uIG5vYnJlYWtub25hZGphY2VudChsZWZ0LHJpZ2h0KXtsZWZ0PWxlZnR8fHN0YXRlLnRva2Vucy5jdXJyLHJpZ2h0PXJpZ2h0fHxzdGF0ZS50b2tlbnMubmV4dCxzdGF0ZS5vcHRpb24ubGF4YnJlYWt8fGxlZnQubGluZT09PXN0YXJ0TGluZShyaWdodCl8fHdhcm5pbmcoIlcwMTQiLHJpZ2h0LHJpZ2h0LnZhbHVlKX1mdW5jdGlvbiBub2xpbmVicmVhayh0KXt0PXR8fHN0YXRlLnRva2Vucy5jdXJyLHQubGluZSE9PXN0YXJ0TGluZShzdGF0ZS50b2tlbnMubmV4dCkmJndhcm5pbmcoIkUwMjIiLHQsdC52YWx1ZSl9ZnVuY3Rpb24gbm9icmVha2NvbW1hKGxlZnQscmlnaHQpe2xlZnQubGluZSE9PXN0YXJ0TGluZShyaWdodCkmJihzdGF0ZS5vcHRpb24ubGF4Y29tbWF8fChjb21tYS5maXJzdCYmKHdhcm5pbmcoIkkwMDEiKSxjb21tYS5maXJzdD0hMSksd2FybmluZygiVzAxNCIsbGVmdCxyaWdodC52YWx1ZSkpKX1mdW5jdGlvbiBjb21tYShvcHRzKXtpZihvcHRzPW9wdHN8fHt9LG9wdHMucGVlaz9ub2JyZWFrY29tbWEoc3RhdGUudG9rZW5zLnByZXYsc3RhdGUudG9rZW5zLmN1cnIpOihub2JyZWFrY29tbWEoc3RhdGUudG9rZW5zLmN1cnIsc3RhdGUudG9rZW5zLm5leHQpLGFkdmFuY2UoIiwiKSksc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllciYmKCFvcHRzLnByb3BlcnR5fHwhc3RhdGUuaW5FUzUoKSkpc3dpdGNoKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKXtjYXNlImJyZWFrIjpjYXNlImNhc2UiOmNhc2UiY2F0Y2giOmNhc2UiY29udGludWUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJkbyI6Y2FzZSJlbHNlIjpjYXNlImZpbmFsbHkiOmNhc2UiZm9yIjpjYXNlImlmIjpjYXNlImluIjpjYXNlImluc3RhbmNlb2YiOmNhc2UicmV0dXJuIjpjYXNlInN3aXRjaCI6Y2FzZSJ0aHJvdyI6Y2FzZSJ0cnkiOmNhc2UidmFyIjpjYXNlImxldCI6Y2FzZSJ3aGlsZSI6Y2FzZSJ3aXRoIjpyZXR1cm4gZXJyb3IoIkUwMjQiLHN0YXRlLnRva2Vucy5uZXh0LHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSwhMX1pZigiKHB1bmN0dWF0b3IpIj09PXN0YXRlLnRva2Vucy5uZXh0LnR5cGUpc3dpdGNoKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKXtjYXNlIn0iOmNhc2UiXSI6Y2FzZSIsIjppZihvcHRzLmFsbG93VHJhaWxpbmcpcmV0dXJuITA7Y2FzZSIpIjpyZXR1cm4gZXJyb3IoIkUwMjQiLHN0YXRlLnRva2Vucy5uZXh0LHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSwhMX1yZXR1cm4hMH1mdW5jdGlvbiBzeW1ib2wocyxwKXt2YXIgeD1zdGF0ZS5zeW50YXhbc107cmV0dXJuIHgmJiJvYmplY3QiPT10eXBlb2YgeHx8KHN0YXRlLnN5bnRheFtzXT14PXtpZDpzLGxicDpwLHZhbHVlOnN9KSx4fWZ1bmN0aW9uIGRlbGltKHMpe3ZhciB4PXN5bWJvbChzLDApO3JldHVybiB4LmRlbGltPSEwLHh9ZnVuY3Rpb24gc3RtdChzLGYpe3ZhciB4PWRlbGltKHMpO3JldHVybiB4LmlkZW50aWZpZXI9eC5yZXNlcnZlZD0hMCx4LmZ1ZD1mLHh9ZnVuY3Rpb24gYmxvY2tzdG10KHMsZil7dmFyIHg9c3RtdChzLGYpO3JldHVybiB4LmJsb2NrPSEwLHh9ZnVuY3Rpb24gcmVzZXJ2ZU5hbWUoeCl7dmFyIGM9eC5pZC5jaGFyQXQoMCk7cmV0dXJuKGM+PSJhIiYmInoiPj1jfHxjPj0iQSImJiJaIj49YykmJih4LmlkZW50aWZpZXI9eC5yZXNlcnZlZD0hMCkseH1mdW5jdGlvbiBwcmVmaXgocyxmKXt2YXIgeD1zeW1ib2wocywxNTApO3JldHVybiByZXNlcnZlTmFtZSh4KSx4Lm51ZD0iZnVuY3Rpb24iPT10eXBlb2YgZj9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJpdHk9InVuYXJ5Iix0aGlzLnJpZ2h0PWV4cHJlc3Npb24oMTUwKSwoIisrIj09PXRoaXMuaWR8fCItLSI9PT10aGlzLmlkKSYmKHN0YXRlLm9wdGlvbi5wbHVzcGx1cz93YXJuaW5nKCJXMDE2Iix0aGlzLHRoaXMuaWQpOiF0aGlzLnJpZ2h0fHx0aGlzLnJpZ2h0LmlkZW50aWZpZXImJiFpc1Jlc2VydmVkKHRoaXMucmlnaHQpfHwiLiI9PT10aGlzLnJpZ2h0LmlkfHwiWyI9PT10aGlzLnJpZ2h0LmlkfHx3YXJuaW5nKCJXMDE3Iix0aGlzKSx0aGlzLnJpZ2h0JiZ0aGlzLnJpZ2h0LmlzTWV0YVByb3BlcnR5P2Vycm9yKCJFMDMxIix0aGlzKTp0aGlzLnJpZ2h0JiZ0aGlzLnJpZ2h0LmlkZW50aWZpZXImJnN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2subW9kaWZ5KHRoaXMucmlnaHQudmFsdWUsdGhpcykpLHRoaXN9LHh9ZnVuY3Rpb24gdHlwZShzLGYpe3ZhciB4PWRlbGltKHMpO3JldHVybiB4LnR5cGU9cyx4Lm51ZD1mLHh9ZnVuY3Rpb24gcmVzZXJ2ZShuYW1lLGZ1bmMpe3ZhciB4PXR5cGUobmFtZSxmdW5jKTtyZXR1cm4geC5pZGVudGlmaWVyPSEwLHgucmVzZXJ2ZWQ9ITAseH1mdW5jdGlvbiBGdXR1cmVSZXNlcnZlZFdvcmQobmFtZSxtZXRhKXt2YXIgeD10eXBlKG5hbWUsbWV0YSYmbWV0YS5udWR8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTtyZXR1cm4gbWV0YT1tZXRhfHx7fSxtZXRhLmlzRnV0dXJlUmVzZXJ2ZWRXb3JkPSEwLHgudmFsdWU9bmFtZSx4LmlkZW50aWZpZXI9ITAseC5yZXNlcnZlZD0hMCx4Lm1ldGE9bWV0YSx4fWZ1bmN0aW9uIHJlc2VydmV2YXIocyx2KXtyZXR1cm4gcmVzZXJ2ZShzLGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHYmJnYodGhpcyksdGhpc30pfWZ1bmN0aW9uIGluZml4KHMsZixwLHcpe3ZhciB4PXN5bWJvbChzLHApO3JldHVybiByZXNlcnZlTmFtZSh4KSx4LmluZml4PSEwLHgubGVkPWZ1bmN0aW9uKGxlZnQpe3JldHVybiB3fHxub2JyZWFrbm9uYWRqYWNlbnQoc3RhdGUudG9rZW5zLnByZXYsc3RhdGUudG9rZW5zLmN1cnIpLCJpbiIhPT1zJiYiaW5zdGFuY2VvZiIhPT1zfHwiISIhPT1sZWZ0LmlkfHx3YXJuaW5nKCJXMDE4IixsZWZ0LCIhIiksImZ1bmN0aW9uIj09dHlwZW9mIGY/ZihsZWZ0LHRoaXMpOih0aGlzLmxlZnQ9bGVmdCx0aGlzLnJpZ2h0PWV4cHJlc3Npb24ocCksdGhpcyl9LHh9ZnVuY3Rpb24gYXBwbGljYXRpb24ocyl7dmFyIHg9c3ltYm9sKHMsNDIpO3JldHVybiB4LmxlZD1mdW5jdGlvbihsZWZ0KXtyZXR1cm4gbm9icmVha25vbmFkamFjZW50KHN0YXRlLnRva2Vucy5wcmV2LHN0YXRlLnRva2Vucy5jdXJyKSx0aGlzLmxlZnQ9bGVmdCx0aGlzLnJpZ2h0PWRvRnVuY3Rpb24oe3R5cGU6ImFycm93Iixsb25lQXJnOmxlZnR9KSx0aGlzfSx4fWZ1bmN0aW9uIHJlbGF0aW9uKHMsZil7dmFyIHg9c3ltYm9sKHMsMTAwKTtyZXR1cm4geC5sZWQ9ZnVuY3Rpb24obGVmdCl7bm9icmVha25vbmFkamFjZW50KHN0YXRlLnRva2Vucy5wcmV2LHN0YXRlLnRva2Vucy5jdXJyKSx0aGlzLmxlZnQ9bGVmdDt2YXIgcmlnaHQ9dGhpcy5yaWdodD1leHByZXNzaW9uKDEwMCk7cmV0dXJuIGlzSWRlbnRpZmllcihsZWZ0LCJOYU4iKXx8aXNJZGVudGlmaWVyKHJpZ2h0LCJOYU4iKT93YXJuaW5nKCJXMDE5Iix0aGlzKTpmJiZmLmFwcGx5KHRoaXMsW2xlZnQscmlnaHRdKSxsZWZ0JiZyaWdodHx8cXVpdCgiRTA0MSIsc3RhdGUudG9rZW5zLmN1cnIubGluZSksIiEiPT09bGVmdC5pZCYmd2FybmluZygiVzAxOCIsbGVmdCwiISIpLCIhIj09PXJpZ2h0LmlkJiZ3YXJuaW5nKCJXMDE4IixyaWdodCwiISIpLHRoaXN9LHh9ZnVuY3Rpb24gaXNQb29yUmVsYXRpb24obm9kZSl7cmV0dXJuIG5vZGUmJigiKG51bWJlcikiPT09bm9kZS50eXBlJiYwPT09K25vZGUudmFsdWV8fCIoc3RyaW5nKSI9PT1ub2RlLnR5cGUmJiIiPT09bm9kZS52YWx1ZXx8Im51bGwiPT09bm9kZS50eXBlJiYhc3RhdGUub3B0aW9uLmVxbnVsbHx8InRydWUiPT09bm9kZS50eXBlfHwiZmFsc2UiPT09bm9kZS50eXBlfHwidW5kZWZpbmVkIj09PW5vZGUudHlwZSl9ZnVuY3Rpb24gaXNUeXBvVHlwZW9mKGxlZnQscmlnaHQsc3RhdGUpe3ZhciB2YWx1ZXM7cmV0dXJuIHN0YXRlLm9wdGlvbi5ub3R5cGVvZj8hMTpsZWZ0JiZyaWdodD8odmFsdWVzPXN0YXRlLmluRVM2KCk/dHlwZW9mVmFsdWVzLmVzNjp0eXBlb2ZWYWx1ZXMuZXMzLCIoaWRlbnRpZmllcikiPT09cmlnaHQudHlwZSYmInR5cGVvZiI9PT1yaWdodC52YWx1ZSYmIihzdHJpbmcpIj09PWxlZnQudHlwZT8hXy5jb250YWlucyh2YWx1ZXMsbGVmdC52YWx1ZSk6ITEpOiExfWZ1bmN0aW9uIGlzR2xvYmFsRXZhbChsZWZ0LHN0YXRlKXt2YXIgaXNHbG9iYWw9ITE7cmV0dXJuInRoaXMiPT09bGVmdC50eXBlJiZudWxsPT09c3RhdGUuZnVuY3RbIihjb250ZXh0KSJdP2lzR2xvYmFsPSEwOiIoaWRlbnRpZmllcikiPT09bGVmdC50eXBlJiYoc3RhdGUub3B0aW9uLm5vZGUmJiJnbG9iYWwiPT09bGVmdC52YWx1ZT9pc0dsb2JhbD0hMDohc3RhdGUub3B0aW9uLmJyb3dzZXJ8fCJ3aW5kb3ciIT09bGVmdC52YWx1ZSYmImRvY3VtZW50IiE9PWxlZnQudmFsdWV8fChpc0dsb2JhbD0hMCkpLGlzR2xvYmFsfWZ1bmN0aW9uIGZpbmROYXRpdmVQcm90b3R5cGUobGVmdCl7ZnVuY3Rpb24gd2Fsa1Byb3RvdHlwZShvYmope3JldHVybiJvYmplY3QiPT10eXBlb2Ygb2JqPyJwcm90b3R5cGUiPT09b2JqLnJpZ2h0P29iajp3YWxrUHJvdG90eXBlKG9iai5sZWZ0KTp2b2lkIDB9ZnVuY3Rpb24gd2Fsa05hdGl2ZShvYmope2Zvcig7IW9iai5pZGVudGlmaWVyJiYib2JqZWN0Ij09dHlwZW9mIG9iai5sZWZ0OylvYmo9b2JqLmxlZnQ7cmV0dXJuIG9iai5pZGVudGlmaWVyJiZuYXRpdmVzLmluZGV4T2Yob2JqLnZhbHVlKT49MD9vYmoudmFsdWU6dm9pZCAwfXZhciBuYXRpdmVzPVsiQXJyYXkiLCJBcnJheUJ1ZmZlciIsIkJvb2xlYW4iLCJDb2xsYXRvciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkRhdGVUaW1lRm9ybWF0IiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSW50bCIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiSW50OEFycmF5IiwiSXRlcmF0b3IiLCJOdW1iZXIiLCJOdW1iZXJGb3JtYXQiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdG9wSXRlcmF0aW9uIiwiU3RyaW5nIiwiU3ludGF4RXJyb3IiLCJUeXBlRXJyb3IiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVVJJRXJyb3IiXSxwcm90b3R5cGU9d2Fsa1Byb3RvdHlwZShsZWZ0KTtyZXR1cm4gcHJvdG90eXBlP3dhbGtOYXRpdmUocHJvdG90eXBlKTp2b2lkIDB9ZnVuY3Rpb24gY2hlY2tMZWZ0U2lkZUFzc2lnbihsZWZ0LGFzc2lnblRva2VuLG9wdGlvbnMpe3ZhciBhbGxvd0Rlc3RydWN0dXJpbmc9b3B0aW9ucyYmb3B0aW9ucy5hbGxvd0Rlc3RydWN0dXJpbmc7aWYoYXNzaWduVG9rZW49YXNzaWduVG9rZW58fGxlZnQsc3RhdGUub3B0aW9uLmZyZWV6ZSl7dmFyIG5hdGl2ZU9iamVjdD1maW5kTmF0aXZlUHJvdG90eXBlKGxlZnQpO25hdGl2ZU9iamVjdCYmd2FybmluZygiVzEyMSIsbGVmdCxuYXRpdmVPYmplY3QpfXJldHVybiBsZWZ0LmlkZW50aWZpZXImJiFsZWZ0LmlzTWV0YVByb3BlcnR5JiZzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmJsb2NrLnJlYXNzaWduKGxlZnQudmFsdWUsbGVmdCksIi4iPT09bGVmdC5pZD8oKCFsZWZ0LmxlZnR8fCJhcmd1bWVudHMiPT09bGVmdC5sZWZ0LnZhbHVlJiYhc3RhdGUuaXNTdHJpY3QoKSkmJndhcm5pbmcoIkUwMzEiLGFzc2lnblRva2VuKSxzdGF0ZS5uYW1lU3RhY2suc2V0KHN0YXRlLnRva2Vucy5wcmV2KSwhMCk6InsiPT09bGVmdC5pZHx8IlsiPT09bGVmdC5pZD8oYWxsb3dEZXN0cnVjdHVyaW5nJiZzdGF0ZS50b2tlbnMuY3Vyci5sZWZ0LmRlc3RydWN0QXNzaWduP3N0YXRlLnRva2Vucy5jdXJyLmxlZnQuZGVzdHJ1Y3RBc3NpZ24uZm9yRWFjaChmdW5jdGlvbih0KXt0LmlkJiZzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmJsb2NrLm1vZGlmeSh0LmlkLHQudG9rZW4pfSk6InsiIT09bGVmdC5pZCYmbGVmdC5sZWZ0PyJhcmd1bWVudHMiIT09bGVmdC5sZWZ0LnZhbHVlfHxzdGF0ZS5pc1N0cmljdCgpfHx3YXJuaW5nKCJFMDMxIixhc3NpZ25Ub2tlbik6d2FybmluZygiRTAzMSIsYXNzaWduVG9rZW4pLCJbIj09PWxlZnQuaWQmJnN0YXRlLm5hbWVTdGFjay5zZXQobGVmdC5yaWdodCksITApOmxlZnQuaXNNZXRhUHJvcGVydHk/KGVycm9yKCJFMDMxIixhc3NpZ25Ub2tlbiksITApOmxlZnQuaWRlbnRpZmllciYmIWlzUmVzZXJ2ZWQobGVmdCk/KCJleGNlcHRpb24iPT09c3RhdGUuZnVuY3RbIihzY29wZSkiXS5sYWJlbHR5cGUobGVmdC52YWx1ZSkmJndhcm5pbmcoIlcwMjIiLGxlZnQpLHN0YXRlLm5hbWVTdGFjay5zZXQobGVmdCksITApOihsZWZ0PT09c3RhdGUuc3ludGF4WyJmdW5jdGlvbiJdJiZ3YXJuaW5nKCJXMDIzIixzdGF0ZS50b2tlbnMuY3VyciksITEpfWZ1bmN0aW9uIGFzc2lnbm9wKHMsZixwKXt2YXIgeD1pbmZpeChzLCJmdW5jdGlvbiI9PXR5cGVvZiBmP2Y6ZnVuY3Rpb24obGVmdCx0aGF0KXtyZXR1cm4gdGhhdC5sZWZ0PWxlZnQsbGVmdCYmY2hlY2tMZWZ0U2lkZUFzc2lnbihsZWZ0LHRoYXQse2FsbG93RGVzdHJ1Y3R1cmluZzohMH0pPyh0aGF0LnJpZ2h0PWV4cHJlc3Npb24oMTApLHRoYXQpOihlcnJvcigiRTAzMSIsdGhhdCksdm9pZCAwKX0scCk7cmV0dXJuIHguZXhwcz0hMCx4LmFzc2lnbj0hMCx4fWZ1bmN0aW9uIGJpdHdpc2UocyxmLHApe3ZhciB4PXN5bWJvbChzLHApO3JldHVybiByZXNlcnZlTmFtZSh4KSx4LmxlZD0iZnVuY3Rpb24iPT10eXBlb2YgZj9mOmZ1bmN0aW9uKGxlZnQpe3JldHVybiBzdGF0ZS5vcHRpb24uYml0d2lzZSYmd2FybmluZygiVzAxNiIsdGhpcyx0aGlzLmlkKSx0aGlzLmxlZnQ9bGVmdCx0aGlzLnJpZ2h0PWV4cHJlc3Npb24ocCksdGhpc30seH1mdW5jdGlvbiBiaXR3aXNlYXNzaWdub3Aocyl7cmV0dXJuIGFzc2lnbm9wKHMsZnVuY3Rpb24obGVmdCx0aGF0KXtyZXR1cm4gc3RhdGUub3B0aW9uLmJpdHdpc2UmJndhcm5pbmcoIlcwMTYiLHRoYXQsdGhhdC5pZCksbGVmdCYmY2hlY2tMZWZ0U2lkZUFzc2lnbihsZWZ0LHRoYXQpPyh0aGF0LnJpZ2h0PWV4cHJlc3Npb24oMTApLHRoYXQpOihlcnJvcigiRTAzMSIsdGhhdCksdm9pZCAwKX0sMjApfWZ1bmN0aW9uIHN1ZmZpeChzKXt2YXIgeD1zeW1ib2wocywxNTApO3JldHVybiB4LmxlZD1mdW5jdGlvbihsZWZ0KXtyZXR1cm4gc3RhdGUub3B0aW9uLnBsdXNwbHVzP3dhcm5pbmcoIlcwMTYiLHRoaXMsdGhpcy5pZCk6bGVmdC5pZGVudGlmaWVyJiYhaXNSZXNlcnZlZChsZWZ0KXx8Ii4iPT09bGVmdC5pZHx8IlsiPT09bGVmdC5pZHx8d2FybmluZygiVzAxNyIsdGhpcyksbGVmdC5pc01ldGFQcm9wZXJ0eT9lcnJvcigiRTAzMSIsdGhpcyk6bGVmdCYmbGVmdC5pZGVudGlmaWVyJiZzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmJsb2NrLm1vZGlmeShsZWZ0LnZhbHVlLGxlZnQpLHRoaXMubGVmdD1sZWZ0LHRoaXN9LHh9ZnVuY3Rpb24gb3B0aW9uYWxpZGVudGlmaWVyKGZucGFyYW0scHJvcCxwcmVzZXJ2ZSl7aWYoc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllcil7cHJlc2VydmV8fGFkdmFuY2UoKTt2YXIgY3Vycj1zdGF0ZS50b2tlbnMuY3Vycix2YWw9c3RhdGUudG9rZW5zLmN1cnIudmFsdWU7cmV0dXJuIGlzUmVzZXJ2ZWQoY3Vycik/cHJvcCYmc3RhdGUuaW5FUzUoKT92YWw6Zm5wYXJhbSYmInVuZGVmaW5lZCI9PT12YWw/dmFsOih3YXJuaW5nKCJXMDI0IixzdGF0ZS50b2tlbnMuY3VycixzdGF0ZS50b2tlbnMuY3Vyci5pZCksdmFsKTp2YWx9fWZ1bmN0aW9uIGlkZW50aWZpZXIoZm5wYXJhbSxwcm9wKXt2YXIgaT1vcHRpb25hbGlkZW50aWZpZXIoZm5wYXJhbSxwcm9wLCExKTtpZihpKXJldHVybiBpO2lmKCIuLi4iPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUpe2lmKHN0YXRlLmluRVM2KCEwKXx8d2FybmluZygiVzExOSIsc3RhdGUudG9rZW5zLm5leHQsInNwcmVhZC9yZXN0IG9wZXJhdG9yIiwiNiIpLGFkdmFuY2UoKSxjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIi4uLiIpKWZvcih3YXJuaW5nKCJFMDI0IixzdGF0ZS50b2tlbnMubmV4dCwiLi4uIik7Y2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCIuLi4iKTspYWR2YW5jZSgpO3JldHVybiBzdGF0ZS50b2tlbnMubmV4dC5pZGVudGlmaWVyP2lkZW50aWZpZXIoZm5wYXJhbSxwcm9wKTood2FybmluZygiRTAyNCIsc3RhdGUudG9rZW5zLmN1cnIsIi4uLiIpLHZvaWQgMCl9ZXJyb3IoIkUwMzAiLHN0YXRlLnRva2Vucy5uZXh0LHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSwiOyIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmYWR2YW5jZSgpfWZ1bmN0aW9uIHJlYWNoYWJsZShjb250cm9sVG9rZW4pe3ZhciB0LGk9MDtpZigiOyI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmIWNvbnRyb2xUb2tlbi5pbkJyYWNlbGVzc0Jsb2NrKWZvcig7Oyl7ZG8gdD1wZWVrKGkpLGkrPTE7d2hpbGUoIihlbmQpIiE9PXQuaWQmJiIoY29tbWVudCkiPT09dC5pZCk7aWYodC5yZWFjaClyZXR1cm47aWYoIihlbmRsaW5lKSIhPT10LmlkKXtpZigiZnVuY3Rpb24iPT09dC5pZCl7c3RhdGUub3B0aW9uLmxhdGVkZWY9PT0hMCYmd2FybmluZygiVzAyNiIsdCk7YnJlYWt9d2FybmluZygiVzAyNyIsdCx0LnZhbHVlLGNvbnRyb2xUb2tlbi52YWx1ZSk7YnJlYWt9fX1mdW5jdGlvbiBwYXJzZUZpbmFsU2VtaWNvbG9uKCl7aWYoIjsiIT09c3RhdGUudG9rZW5zLm5leHQuaWQpe2lmKHN0YXRlLnRva2Vucy5uZXh0LmlzVW5jbG9zZWQpcmV0dXJuIGFkdmFuY2UoKTt2YXIgc2FtZUxpbmU9c3RhcnRMaW5lKHN0YXRlLnRva2Vucy5uZXh0KT09PXN0YXRlLnRva2Vucy5jdXJyLmxpbmUmJiIoZW5kKSIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZCxibG9ja0VuZD1jaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIn0iKTtzYW1lTGluZSYmIWJsb2NrRW5kP2Vycm9yQXQoIkUwNTgiLHN0YXRlLnRva2Vucy5jdXJyLmxpbmUsc3RhdGUudG9rZW5zLmN1cnIuY2hhcmFjdGVyKTpzdGF0ZS5vcHRpb24uYXNpfHwoYmxvY2tFbmQmJiFzdGF0ZS5vcHRpb24ubGFzdHNlbWljfHwhc2FtZUxpbmUpJiZ3YXJuaW5nQXQoIlcwMzMiLHN0YXRlLnRva2Vucy5jdXJyLmxpbmUsc3RhdGUudG9rZW5zLmN1cnIuY2hhcmFjdGVyKX1lbHNlIGFkdmFuY2UoIjsiKX1mdW5jdGlvbiBzdGF0ZW1lbnQoKXt2YXIgcixpPWluZGVudCx0PXN0YXRlLnRva2Vucy5uZXh0LGhhc093blNjb3BlPSExO2lmKCI7Ij09PXQuaWQpcmV0dXJuIGFkdmFuY2UoIjsiKSx2b2lkIDA7dmFyIHJlcz1pc1Jlc2VydmVkKHQpO2lmKHJlcyYmdC5tZXRhJiZ0Lm1ldGEuaXNGdXR1cmVSZXNlcnZlZFdvcmQmJiI6Ij09PXBlZWsoKS5pZCYmKHdhcm5pbmcoIlcwMjQiLHQsdC5pZCkscmVzPSExKSx0LmlkZW50aWZpZXImJiFyZXMmJiI6Ij09PXBlZWsoKS5pZCYmKGFkdmFuY2UoKSxhZHZhbmNlKCI6IiksaGFzT3duU2NvcGU9ITAsc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zdGFjaygpLHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2suYWRkQnJlYWtMYWJlbCh0LnZhbHVlLHt0b2tlbjpzdGF0ZS50b2tlbnMuY3Vycn0pLHN0YXRlLnRva2Vucy5uZXh0LmxhYmVsbGVkfHwieyI9PT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZXx8d2FybmluZygiVzAyOCIsc3RhdGUudG9rZW5zLm5leHQsdC52YWx1ZSxzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSksc3RhdGUudG9rZW5zLm5leHQubGFiZWw9dC52YWx1ZSx0PXN0YXRlLnRva2Vucy5uZXh0KSwieyI9PT10LmlkKXt2YXIgaXNjYXNlPSJjYXNlIj09PXN0YXRlLmZ1bmN0WyIodmVyYikiXSYmIjoiPT09c3RhdGUudG9rZW5zLmN1cnIudmFsdWU7cmV0dXJuIGJsb2NrKCEwLCEwLCExLCExLGlzY2FzZSksdm9pZCAwfXJldHVybiByPWV4cHJlc3Npb24oMCwhMCksIXJ8fHIuaWRlbnRpZmllciYmImZ1bmN0aW9uIj09PXIudmFsdWV8fCIocHVuY3R1YXRvcikiPT09ci50eXBlJiZyLmxlZnQmJnIubGVmdC5pZGVudGlmaWVyJiYiZnVuY3Rpb24iPT09ci5sZWZ0LnZhbHVlfHxzdGF0ZS5pc1N0cmljdCgpfHwiZ2xvYmFsIiE9PXN0YXRlLm9wdGlvbi5zdHJpY3R8fHdhcm5pbmcoIkUwMDciKSx0LmJsb2NrfHwoc3RhdGUub3B0aW9uLmV4cHJ8fHImJnIuZXhwcz9zdGF0ZS5vcHRpb24ubm9uZXcmJnImJnIubGVmdCYmIigiPT09ci5pZCYmIm5ldyI9PT1yLmxlZnQuaWQmJndhcm5pbmcoIlcwMzEiLHQpOndhcm5pbmcoIlcwMzAiLHN0YXRlLnRva2Vucy5jdXJyKSxwYXJzZUZpbmFsU2VtaWNvbG9uKCkpLGluZGVudD1pLGhhc093blNjb3BlJiZzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnVuc3RhY2soKSxyfWZ1bmN0aW9uIHN0YXRlbWVudHMoKXtmb3IodmFyIHAsYT1bXTshc3RhdGUudG9rZW5zLm5leHQucmVhY2gmJiIoZW5kKSIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZDspIjsiPT09c3RhdGUudG9rZW5zLm5leHQuaWQ/KHA9cGVlaygpLCghcHx8IigiIT09cC5pZCYmIlsiIT09cC5pZCkmJndhcm5pbmcoIlcwMzIiKSxhZHZhbmNlKCI7IikpOmEucHVzaChzdGF0ZW1lbnQoKSk7cmV0dXJuIGF9ZnVuY3Rpb24gZGlyZWN0aXZlcygpe2Zvcih2YXIgaSxwLHBuOyIoc3RyaW5nKSI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZDspe2lmKHA9cGVlaygwKSwiKGVuZGxpbmUpIj09PXAuaWQpe2k9MTtkbyBwbj1wZWVrKGkrKyk7d2hpbGUoIihlbmRsaW5lKSI9PT1wbi5pZCk7aWYoIjsiPT09cG4uaWQpcD1wbjtlbHNle2lmKCJbIj09PXBuLnZhbHVlfHwiLiI9PT1wbi52YWx1ZSlicmVhaztzdGF0ZS5vcHRpb24uYXNpJiYiKCIhPT1wbi52YWx1ZXx8d2FybmluZygiVzAzMyIsc3RhdGUudG9rZW5zLm5leHQpfX1lbHNle2lmKCIuIj09PXAuaWR8fCJbIj09PXAuaWQpYnJlYWs7IjsiIT09cC5pZCYmd2FybmluZygiVzAzMyIscCl9YWR2YW5jZSgpO3ZhciBkaXJlY3RpdmU9c3RhdGUudG9rZW5zLmN1cnIudmFsdWU7KHN0YXRlLmRpcmVjdGl2ZVtkaXJlY3RpdmVdfHwidXNlIHN0cmljdCI9PT1kaXJlY3RpdmUmJiJpbXBsaWVkIj09PXN0YXRlLm9wdGlvbi5zdHJpY3QpJiZ3YXJuaW5nKCJXMDM0IixzdGF0ZS50b2tlbnMuY3VycixkaXJlY3RpdmUpLHN0YXRlLmRpcmVjdGl2ZVtkaXJlY3RpdmVdPSEwLCI7Ij09PXAuaWQmJmFkdmFuY2UoIjsiKX1zdGF0ZS5pc1N0cmljdCgpJiYoc3RhdGUub3B0aW9uWyIoZXhwbGljaXROZXdjYXApIl18fChzdGF0ZS5vcHRpb24ubmV3Y2FwPSEwKSxzdGF0ZS5vcHRpb24udW5kZWY9ITApfWZ1bmN0aW9uIGJsb2NrKG9yZGluYXJ5LHN0bXQsaXNmdW5jLGlzZmF0YXJyb3csaXNjYXNlKXt2YXIgYSxtLHQsbGluZSxkLGI9aW5ibG9jayxvbGRfaW5kZW50PWluZGVudDtpbmJsb2NrPW9yZGluYXJ5LHQ9c3RhdGUudG9rZW5zLm5leHQ7dmFyIG1ldHJpY3M9c3RhdGUuZnVuY3RbIihtZXRyaWNzKSJdO2lmKG1ldHJpY3MubmVzdGVkQmxvY2tEZXB0aCs9MSxtZXRyaWNzLnZlcmlmeU1heE5lc3RlZEJsb2NrRGVwdGhQZXJGdW5jdGlvbigpLCJ7Ij09PXN0YXRlLnRva2Vucy5uZXh0LmlkKXtpZihhZHZhbmNlKCJ7Iiksc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zdGFjaygpLGxpbmU9c3RhdGUudG9rZW5zLmN1cnIubGluZSwifSIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZCl7Zm9yKGluZGVudCs9c3RhdGUub3B0aW9uLmluZGVudDshb3JkaW5hcnkmJnN0YXRlLnRva2Vucy5uZXh0LmZyb20+aW5kZW50OylpbmRlbnQrPXN0YXRlLm9wdGlvbi5pbmRlbnQ7aWYoaXNmdW5jKXttPXt9O2ZvcihkIGluIHN0YXRlLmRpcmVjdGl2ZSlfLmhhcyhzdGF0ZS5kaXJlY3RpdmUsZCkmJihtW2RdPXN0YXRlLmRpcmVjdGl2ZVtkXSk7ZGlyZWN0aXZlcygpLHN0YXRlLm9wdGlvbi5zdHJpY3QmJnN0YXRlLmZ1bmN0WyIoY29udGV4dCkiXVsiKGdsb2JhbCkiXSYmKG1bInVzZSBzdHJpY3QiXXx8c3RhdGUuaXNTdHJpY3QoKXx8d2FybmluZygiRTAwNyIpKX1hPXN0YXRlbWVudHMoKSxtZXRyaWNzLnN0YXRlbWVudENvdW50Kz1hLmxlbmd0aCxpbmRlbnQtPXN0YXRlLm9wdGlvbi5pbmRlbnR9YWR2YW5jZSgifSIsdCksaXNmdW5jJiYoc3RhdGUuZnVuY3RbIihzY29wZSkiXS52YWxpZGF0ZVBhcmFtcygpLG0mJihzdGF0ZS5kaXJlY3RpdmU9bSkpLHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0udW5zdGFjaygpLGluZGVudD1vbGRfaW5kZW50fWVsc2UgaWYob3JkaW5hcnkpc3RhdGUuZnVuY3RbIihub2Jsb2Nrc2NvcGVkdmFyKSJdPSJmb3IiIT09c3RhdGUudG9rZW5zLm5leHQuaWQsc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zdGFjaygpLCghc3RtdHx8c3RhdGUub3B0aW9uLmN1cmx5KSYmd2FybmluZygiVzExNiIsc3RhdGUudG9rZW5zLm5leHQsInsiLHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSxzdGF0ZS50b2tlbnMubmV4dC5pbkJyYWNlbGVzc0Jsb2NrPSEwLGluZGVudCs9c3RhdGUub3B0aW9uLmluZGVudCxhPVtzdGF0ZW1lbnQoKV0saW5kZW50LT1zdGF0ZS5vcHRpb24uaW5kZW50LHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0udW5zdGFjaygpLGRlbGV0ZSBzdGF0ZS5mdW5jdFsiKG5vYmxvY2tzY29wZWR2YXIpIl07ZWxzZSBpZihpc2Z1bmMpe2lmKHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uc3RhY2soKSxtPXt9LCFzdG10fHxpc2ZhdGFycm93fHxzdGF0ZS5pbk1veigpfHxlcnJvcigiVzExOCIsc3RhdGUudG9rZW5zLmN1cnIsImZ1bmN0aW9uIGNsb3N1cmUgZXhwcmVzc2lvbnMiKSwhc3RtdClmb3IoZCBpbiBzdGF0ZS5kaXJlY3RpdmUpXy5oYXMoc3RhdGUuZGlyZWN0aXZlLGQpJiYobVtkXT1zdGF0ZS5kaXJlY3RpdmVbZF0pO2V4cHJlc3Npb24oMTApLHN0YXRlLm9wdGlvbi5zdHJpY3QmJnN0YXRlLmZ1bmN0WyIoY29udGV4dCkiXVsiKGdsb2JhbCkiXSYmKG1bInVzZSBzdHJpY3QiXXx8c3RhdGUuaXNTdHJpY3QoKXx8d2FybmluZygiRTAwNyIpKSxzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnVuc3RhY2soKX1lbHNlIGVycm9yKCJFMDIxIixzdGF0ZS50b2tlbnMubmV4dCwieyIsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpO3N3aXRjaChzdGF0ZS5mdW5jdFsiKHZlcmIpIl0pe2Nhc2UiYnJlYWsiOmNhc2UiY29udGludWUiOmNhc2UicmV0dXJuIjpjYXNlInRocm93IjppZihpc2Nhc2UpYnJlYWs7ZGVmYXVsdDpzdGF0ZS5mdW5jdFsiKHZlcmIpIl09bnVsbH1yZXR1cm4gaW5ibG9jaz1iLCFvcmRpbmFyeXx8IXN0YXRlLm9wdGlvbi5ub2VtcHR5fHxhJiYwIT09YS5sZW5ndGh8fHdhcm5pbmcoIlcwMzUiLHN0YXRlLnRva2Vucy5wcmV2KSxtZXRyaWNzLm5lc3RlZEJsb2NrRGVwdGgtPTEsYX1mdW5jdGlvbiBjb3VudE1lbWJlcihtKXttZW1iZXJzT25seSYmImJvb2xlYW4iIT10eXBlb2YgbWVtYmVyc09ubHlbbV0mJndhcm5pbmcoIlcwMzYiLHN0YXRlLnRva2Vucy5jdXJyLG0pLCJudW1iZXIiPT10eXBlb2YgbWVtYmVyW21dP21lbWJlclttXSs9MTptZW1iZXJbbV09MX1mdW5jdGlvbiBjb21wcmVoZW5zaXZlQXJyYXlFeHByZXNzaW9uKCl7dmFyIHJlcz17fTtyZXMuZXhwcz0hMCxzdGF0ZS5mdW5jdFsiKGNvbXBhcnJheSkiXS5zdGFjaygpO3ZhciByZXZlcnNlZD0hMTtyZXR1cm4iZm9yIiE9PXN0YXRlLnRva2Vucy5uZXh0LnZhbHVlJiYocmV2ZXJzZWQ9ITAsc3RhdGUuaW5Nb3ooKXx8d2FybmluZygiVzExNiIsc3RhdGUudG9rZW5zLm5leHQsImZvciIsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpLHN0YXRlLmZ1bmN0WyIoY29tcGFycmF5KSJdLnNldFN0YXRlKCJ1c2UiKSxyZXMucmlnaHQ9ZXhwcmVzc2lvbigxMCkpLGFkdmFuY2UoImZvciIpLCJlYWNoIj09PXN0YXRlLnRva2Vucy5uZXh0LnZhbHVlJiYoYWR2YW5jZSgiZWFjaCIpLHN0YXRlLmluTW96KCl8fHdhcm5pbmcoIlcxMTgiLHN0YXRlLnRva2Vucy5jdXJyLCJmb3IgZWFjaCIpKSxhZHZhbmNlKCIoIiksc3RhdGUuZnVuY3RbIihjb21wYXJyYXkpIl0uc2V0U3RhdGUoImRlZmluZSIpLHJlcy5sZWZ0PWV4cHJlc3Npb24oMTMwKSxfLmNvbnRhaW5zKFsiaW4iLCJvZiJdLHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKT9hZHZhbmNlKCk6ZXJyb3IoIkUwNDUiLHN0YXRlLnRva2Vucy5jdXJyKSxzdGF0ZS5mdW5jdFsiKGNvbXBhcnJheSkiXS5zZXRTdGF0ZSgiZ2VuZXJhdGUiKSxleHByZXNzaW9uKDEwKSxhZHZhbmNlKCIpIiksImlmIj09PXN0YXRlLnRva2Vucy5uZXh0LnZhbHVlJiYoYWR2YW5jZSgiaWYiKSxhZHZhbmNlKCIoIiksc3RhdGUuZnVuY3RbIihjb21wYXJyYXkpIl0uc2V0U3RhdGUoImZpbHRlciIpLHJlcy5maWx0ZXI9ZXhwcmVzc2lvbigxMCksYWR2YW5jZSgiKSIpKSxyZXZlcnNlZHx8KHN0YXRlLmZ1bmN0WyIoY29tcGFycmF5KSJdLnNldFN0YXRlKCJ1c2UiKSxyZXMucmlnaHQ9ZXhwcmVzc2lvbigxMCkpLGFkdmFuY2UoIl0iKSxzdGF0ZS5mdW5jdFsiKGNvbXBhcnJheSkiXS51bnN0YWNrKCkscmVzfWZ1bmN0aW9uIGlzTWV0aG9kKCl7cmV0dXJuIHN0YXRlLmZ1bmN0WyIoc3RhdGVtZW50KSJdJiYiY2xhc3MiPT09c3RhdGUuZnVuY3RbIihzdGF0ZW1lbnQpIl0udHlwZXx8c3RhdGUuZnVuY3RbIihjb250ZXh0KSJdJiYiY2xhc3MiPT09c3RhdGUuZnVuY3RbIihjb250ZXh0KSJdWyIodmVyYikiXX1mdW5jdGlvbiBpc1Byb3BlcnR5TmFtZSh0b2tlbil7cmV0dXJuIHRva2VuLmlkZW50aWZpZXJ8fCIoc3RyaW5nKSI9PT10b2tlbi5pZHx8IihudW1iZXIpIj09PXRva2VuLmlkfWZ1bmN0aW9uIHByb3BlcnR5TmFtZShwcmVzZXJ2ZU9yVG9rZW4pe3ZhciBpZCxwcmVzZXJ2ZT0hMDtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHByZXNlcnZlT3JUb2tlbj9pZD1wcmVzZXJ2ZU9yVG9rZW46KHByZXNlcnZlPXByZXNlcnZlT3JUb2tlbixpZD1vcHRpb25hbGlkZW50aWZpZXIoITEsITAscHJlc2VydmUpKSxpZD8ib2JqZWN0Ij09dHlwZW9mIGlkJiYoIihzdHJpbmcpIj09PWlkLmlkfHwiKGlkZW50aWZpZXIpIj09PWlkLmlkP2lkPWlkLnZhbHVlOiIobnVtYmVyKSI9PT1pZC5pZCYmKGlkPSIiK2lkLnZhbHVlKSk6IihzdHJpbmcpIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkPyhpZD1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZSxwcmVzZXJ2ZXx8YWR2YW5jZSgpKToiKG51bWJlcikiPT09c3RhdGUudG9rZW5zLm5leHQuaWQmJihpZD0iIitzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSxwcmVzZXJ2ZXx8YWR2YW5jZSgpKSwiaGFzT3duUHJvcGVydHkiPT09aWQmJndhcm5pbmcoIlcwMDEiKSxpZH1mdW5jdGlvbiBmdW5jdGlvbnBhcmFtcyhvcHRpb25zKXtmdW5jdGlvbiBhZGRQYXJhbShhZGRQYXJhbUFyZ3Mpe3N0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkUGFyYW0uYXBwbHkoc3RhdGUuZnVuY3RbIihzY29wZSkiXSxhZGRQYXJhbUFyZ3MpfXZhciBuZXh0LGlkZW50LHQscGFyYW1zSWRzPVtdLHRva2Vucz1bXSxwYXN0RGVmYXVsdD0hMSxwYXN0UmVzdD0hMSxhcml0eT0wLGxvbmVBcmc9b3B0aW9ucyYmb3B0aW9ucy5sb25lQXJnO2lmKGxvbmVBcmcmJmxvbmVBcmcuaWRlbnRpZmllcj09PSEwKXJldHVybiBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmFkZFBhcmFtKGxvbmVBcmcudmFsdWUsbG9uZUFyZykse2FyaXR5OjEscGFyYW1zOltsb25lQXJnLnZhbHVlXX07aWYobmV4dD1zdGF0ZS50b2tlbnMubmV4dCxvcHRpb25zJiZvcHRpb25zLnBhcnNlZE9wZW5pbmd8fGFkdmFuY2UoIigiKSwiKSI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZClyZXR1cm4gYWR2YW5jZSgiKSIpLHZvaWQgMDtmb3IoOzspe2FyaXR5Kys7dmFyIGN1cnJlbnRQYXJhbXM9W107aWYoXy5jb250YWlucyhbInsiLCJbIl0sc3RhdGUudG9rZW5zLm5leHQuaWQpKXt0b2tlbnM9ZGVzdHJ1Y3R1cmluZ1BhdHRlcm4oKTtmb3IodCBpbiB0b2tlbnMpdD10b2tlbnNbdF0sdC5pZCYmKHBhcmFtc0lkcy5wdXNoKHQuaWQpLGN1cnJlbnRQYXJhbXMucHVzaChbdC5pZCx0LnRva2VuXSkpfWVsc2UgaWYoY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCIuLi4iKSYmKHBhc3RSZXN0PSEwKSxpZGVudD1pZGVudGlmaWVyKCEwKSlwYXJhbXNJZHMucHVzaChpZGVudCksY3VycmVudFBhcmFtcy5wdXNoKFtpZGVudCxzdGF0ZS50b2tlbnMuY3Vycl0pO2Vsc2UgZm9yKDshY2hlY2tQdW5jdHVhdG9ycyhzdGF0ZS50b2tlbnMubmV4dCxbIiwiLCIpIl0pOylhZHZhbmNlKCk7aWYocGFzdERlZmF1bHQmJiI9IiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkJiZlcnJvcigiVzEzOCIsc3RhdGUudG9rZW5zLmN1cnJlbnQpLCI9Ij09PXN0YXRlLnRva2Vucy5uZXh0LmlkJiYoc3RhdGUuaW5FUzYoKXx8d2FybmluZygiVzExOSIsc3RhdGUudG9rZW5zLm5leHQsImRlZmF1bHQgcGFyYW1ldGVycyIsIjYiKSxhZHZhbmNlKCI9IikscGFzdERlZmF1bHQ9ITAsZXhwcmVzc2lvbigxMCkpLGN1cnJlbnRQYXJhbXMuZm9yRWFjaChhZGRQYXJhbSksIiwiIT09c3RhdGUudG9rZW5zLm5leHQuaWQpcmV0dXJuIGFkdmFuY2UoIikiLG5leHQpLHthcml0eTphcml0eSxwYXJhbXM6cGFyYW1zSWRzfTtwYXN0UmVzdCYmd2FybmluZygiVzEzMSIsc3RhdGUudG9rZW5zLm5leHQpLGNvbW1hKCl9fWZ1bmN0aW9uIGZ1bmN0b3IobmFtZSx0b2tlbixvdmVyd3JpdGVzKXt2YXIgZnVuY3Q9eyIobmFtZSkiOm5hbWUsIihicmVha2FnZSkiOjAsIihsb29wYWdlKSI6MCwiKHRva2VucykiOnt9LCIocHJvcGVydGllcykiOnt9LCIoY2F0Y2gpIjohMSwiKGdsb2JhbCkiOiExLCIobGluZSkiOm51bGwsIihjaGFyYWN0ZXIpIjpudWxsLCIobWV0cmljcykiOm51bGwsIihzdGF0ZW1lbnQpIjpudWxsLCIoY29udGV4dCkiOm51bGwsIihzY29wZSkiOm51bGwsIihjb21wYXJyYXkpIjpudWxsLCIoZ2VuZXJhdG9yKSI6bnVsbCwiKGFycm93KSI6bnVsbCwiKHBhcmFtcykiOm51bGx9O3JldHVybiB0b2tlbiYmXy5leHRlbmQoZnVuY3QseyIobGluZSkiOnRva2VuLmxpbmUsIihjaGFyYWN0ZXIpIjp0b2tlbi5jaGFyYWN0ZXIsIihtZXRyaWNzKSI6Y3JlYXRlTWV0cmljcyh0b2tlbil9KSxfLmV4dGVuZChmdW5jdCxvdmVyd3JpdGVzKSxmdW5jdFsiKGNvbnRleHQpIl0mJihmdW5jdFsiKHNjb3BlKSJdPWZ1bmN0WyIoY29udGV4dCkiXVsiKHNjb3BlKSJdLGZ1bmN0WyIoY29tcGFycmF5KSJdPWZ1bmN0WyIoY29udGV4dCkiXVsiKGNvbXBhcnJheSkiXSksZnVuY3R9ZnVuY3Rpb24gaXNGdW5jdG9yKHRva2VuKXtyZXR1cm4iKHNjb3BlKSJpbiB0b2tlbn1mdW5jdGlvbiBoYXNQYXJzZWRDb2RlKGZ1bmN0KXtyZXR1cm4gZnVuY3RbIihnbG9iYWwpIl0mJiFmdW5jdFsiKHZlcmIpIl19ZnVuY3Rpb24gZG9UZW1wbGF0ZUxpdGVyYWwobGVmdCl7ZnVuY3Rpb24gZW5kKCl7aWYoc3RhdGUudG9rZW5zLmN1cnIudGVtcGxhdGUmJnN0YXRlLnRva2Vucy5jdXJyLnRhaWwmJnN0YXRlLnRva2Vucy5jdXJyLmNvbnRleHQ9PT1jdHgpcmV0dXJuITA7dmFyIGNvbXBsZXRlPXN0YXRlLnRva2Vucy5uZXh0LnRlbXBsYXRlJiZzdGF0ZS50b2tlbnMubmV4dC50YWlsJiZzdGF0ZS50b2tlbnMubmV4dC5jb250ZXh0PT09Y3R4O3JldHVybiBjb21wbGV0ZSYmYWR2YW5jZSgpLGNvbXBsZXRlfHxzdGF0ZS50b2tlbnMubmV4dC5pc1VuY2xvc2VkfXZhciBjdHg9dGhpcy5jb250ZXh0LG5vU3Vic3Q9dGhpcy5ub1N1YnN0LGRlcHRoPXRoaXMuZGVwdGg7aWYoIW5vU3Vic3QpZm9yKDshZW5kKCk7KSFzdGF0ZS50b2tlbnMubmV4dC50ZW1wbGF0ZXx8c3RhdGUudG9rZW5zLm5leHQuZGVwdGg+ZGVwdGg/ZXhwcmVzc2lvbigwKTphZHZhbmNlKCk7cmV0dXJue2lkOiIodGVtcGxhdGUpIix0eXBlOiIodGVtcGxhdGUpIix0YWc6bGVmdH19ZnVuY3Rpb24gZG9GdW5jdGlvbihvcHRpb25zKXt2YXIgZix0b2tlbixuYW1lLHN0YXRlbWVudCxjbGFzc0V4cHJCaW5kaW5nLGlzR2VuZXJhdG9yLGlzQXJyb3csaWdub3JlTG9vcEZ1bmMsb2xkT3B0aW9uPXN0YXRlLm9wdGlvbixvbGRJZ25vcmVkPXN0YXRlLmlnbm9yZWQ7b3B0aW9ucyYmKG5hbWU9b3B0aW9ucy5uYW1lLHN0YXRlbWVudD1vcHRpb25zLnN0YXRlbWVudCxjbGFzc0V4cHJCaW5kaW5nPW9wdGlvbnMuY2xhc3NFeHByQmluZGluZyxpc0dlbmVyYXRvcj0iZ2VuZXJhdG9yIj09PW9wdGlvbnMudHlwZSxpc0Fycm93PSJhcnJvdyI9PT1vcHRpb25zLnR5cGUsaWdub3JlTG9vcEZ1bmM9b3B0aW9ucy5pZ25vcmVMb29wRnVuYyksc3RhdGUub3B0aW9uPU9iamVjdC5jcmVhdGUoc3RhdGUub3B0aW9uKSxzdGF0ZS5pZ25vcmVkPU9iamVjdC5jcmVhdGUoc3RhdGUuaWdub3JlZCksc3RhdGUuZnVuY3Q9ZnVuY3RvcihuYW1lfHxzdGF0ZS5uYW1lU3RhY2suaW5mZXIoKSxzdGF0ZS50b2tlbnMubmV4dCx7IihzdGF0ZW1lbnQpIjpzdGF0ZW1lbnQsIihjb250ZXh0KSI6c3RhdGUuZnVuY3QsIihhcnJvdykiOmlzQXJyb3csIihnZW5lcmF0b3IpIjppc0dlbmVyYXRvcn0pLGY9c3RhdGUuZnVuY3QsdG9rZW49c3RhdGUudG9rZW5zLmN1cnIsdG9rZW4uZnVuY3Q9c3RhdGUuZnVuY3QsZnVuY3Rpb25zLnB1c2goc3RhdGUuZnVuY3QpLHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uc3RhY2soImZ1bmN0aW9ub3V0ZXIiKTt2YXIgaW50ZXJuYWxseUFjY2Vzc2libGVOYW1lPW5hbWV8fGNsYXNzRXhwckJpbmRpbmc7aW50ZXJuYWxseUFjY2Vzc2libGVOYW1lJiZzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmJsb2NrLmFkZChpbnRlcm5hbGx5QWNjZXNzaWJsZU5hbWUsY2xhc3NFeHByQmluZGluZz8iY2xhc3MiOiJmdW5jdGlvbiIsc3RhdGUudG9rZW5zLmN1cnIsITEpLHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uc3RhY2soImZ1bmN0aW9ucGFyYW1zIik7dmFyIHBhcmFtc0luZm89ZnVuY3Rpb25wYXJhbXMob3B0aW9ucyk7cmV0dXJuIHBhcmFtc0luZm8/KHN0YXRlLmZ1bmN0WyIocGFyYW1zKSJdPXBhcmFtc0luZm8ucGFyYW1zLHN0YXRlLmZ1bmN0WyIobWV0cmljcykiXS5hcml0eT1wYXJhbXNJbmZvLmFyaXR5LHN0YXRlLmZ1bmN0WyIobWV0cmljcykiXS52ZXJpZnlNYXhQYXJhbWV0ZXJzUGVyRnVuY3Rpb24oKSk6c3RhdGUuZnVuY3RbIihtZXRyaWNzKSJdLmFyaXR5PTAsaXNBcnJvdyYmKHN0YXRlLmluRVM2KCEwKXx8d2FybmluZygiVzExOSIsc3RhdGUudG9rZW5zLmN1cnIsImFycm93IGZ1bmN0aW9uIHN5bnRheCAoPT4pIiwiNiIpLG9wdGlvbnMubG9uZUFyZ3x8YWR2YW5jZSgiPT4iKSksYmxvY2soITEsITAsITAsaXNBcnJvdyksIXN0YXRlLm9wdGlvbi5ub3lpZWxkJiZpc0dlbmVyYXRvciYmInlpZWxkZWQiIT09c3RhdGUuZnVuY3RbIihnZW5lcmF0b3IpIl0mJndhcm5pbmcoIlcxMjQiLHN0YXRlLnRva2Vucy5jdXJyKSxzdGF0ZS5mdW5jdFsiKG1ldHJpY3MpIl0udmVyaWZ5TWF4U3RhdGVtZW50c1BlckZ1bmN0aW9uKCksc3RhdGUuZnVuY3RbIihtZXRyaWNzKSJdLnZlcmlmeU1heENvbXBsZXhpdHlQZXJGdW5jdGlvbigpLHN0YXRlLmZ1bmN0WyIodW51c2VkT3B0aW9uKSJdPXN0YXRlLm9wdGlvbi51bnVzZWQsc3RhdGUub3B0aW9uPW9sZE9wdGlvbixzdGF0ZS5pZ25vcmVkPW9sZElnbm9yZWQsc3RhdGUuZnVuY3RbIihsYXN0KSJdPXN0YXRlLnRva2Vucy5jdXJyLmxpbmUsc3RhdGUuZnVuY3RbIihsYXN0Y2hhcmFjdGVyKSJdPXN0YXRlLnRva2Vucy5jdXJyLmNoYXJhY3RlcixzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnVuc3RhY2soKSxzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnVuc3RhY2soKSxzdGF0ZS5mdW5jdD1zdGF0ZS5mdW5jdFsiKGNvbnRleHQpIl0saWdub3JlTG9vcEZ1bmN8fHN0YXRlLm9wdGlvbi5sb29wZnVuY3x8IXN0YXRlLmZ1bmN0WyIobG9vcGFnZSkiXXx8ZlsiKGlzQ2FwdHVyaW5nKSJdJiZ3YXJuaW5nKCJXMDgzIix0b2tlbiksZn1mdW5jdGlvbiBjcmVhdGVNZXRyaWNzKGZ1bmN0aW9uU3RhcnRUb2tlbil7cmV0dXJue3N0YXRlbWVudENvdW50OjAsbmVzdGVkQmxvY2tEZXB0aDotMSxDb21wbGV4aXR5Q291bnQ6MSxhcml0eTowLHZlcmlmeU1heFN0YXRlbWVudHNQZXJGdW5jdGlvbjpmdW5jdGlvbigpe3N0YXRlLm9wdGlvbi5tYXhzdGF0ZW1lbnRzJiZ0aGlzLnN0YXRlbWVudENvdW50PnN0YXRlLm9wdGlvbi5tYXhzdGF0ZW1lbnRzJiZ3YXJuaW5nKCJXMDcxIixmdW5jdGlvblN0YXJ0VG9rZW4sdGhpcy5zdGF0ZW1lbnRDb3VudClcbn0sdmVyaWZ5TWF4UGFyYW1ldGVyc1BlckZ1bmN0aW9uOmZ1bmN0aW9uKCl7Xy5pc051bWJlcihzdGF0ZS5vcHRpb24ubWF4cGFyYW1zKSYmdGhpcy5hcml0eT5zdGF0ZS5vcHRpb24ubWF4cGFyYW1zJiZ3YXJuaW5nKCJXMDcyIixmdW5jdGlvblN0YXJ0VG9rZW4sdGhpcy5hcml0eSl9LHZlcmlmeU1heE5lc3RlZEJsb2NrRGVwdGhQZXJGdW5jdGlvbjpmdW5jdGlvbigpe3N0YXRlLm9wdGlvbi5tYXhkZXB0aCYmdGhpcy5uZXN0ZWRCbG9ja0RlcHRoPjAmJnRoaXMubmVzdGVkQmxvY2tEZXB0aD09PXN0YXRlLm9wdGlvbi5tYXhkZXB0aCsxJiZ3YXJuaW5nKCJXMDczIixudWxsLHRoaXMubmVzdGVkQmxvY2tEZXB0aCl9LHZlcmlmeU1heENvbXBsZXhpdHlQZXJGdW5jdGlvbjpmdW5jdGlvbigpe3ZhciBtYXg9c3RhdGUub3B0aW9uLm1heGNvbXBsZXhpdHksY2M9dGhpcy5Db21wbGV4aXR5Q291bnQ7bWF4JiZjYz5tYXgmJndhcm5pbmcoIlcwNzQiLGZ1bmN0aW9uU3RhcnRUb2tlbixjYyl9fX1mdW5jdGlvbiBpbmNyZWFzZUNvbXBsZXhpdHlDb3VudCgpe3N0YXRlLmZ1bmN0WyIobWV0cmljcykiXS5Db21wbGV4aXR5Q291bnQrPTF9ZnVuY3Rpb24gY2hlY2tDb25kQXNzaWdubWVudChleHByKXt2YXIgaWQscGFyZW47c3dpdGNoKGV4cHImJihpZD1leHByLmlkLHBhcmVuPWV4cHIucGFyZW4sIiwiPT09aWQmJihleHByPWV4cHIuZXhwcnNbZXhwci5leHBycy5sZW5ndGgtMV0pJiYoaWQ9ZXhwci5pZCxwYXJlbj1wYXJlbnx8ZXhwci5wYXJlbikpLGlkKXtjYXNlIj0iOmNhc2UiKz0iOmNhc2UiLT0iOmNhc2UiKj0iOmNhc2UiJT0iOmNhc2UiJj0iOmNhc2UifD0iOmNhc2UiXj0iOmNhc2UiLz0iOnBhcmVufHxzdGF0ZS5vcHRpb24uYm9zc3x8d2FybmluZygiVzA4NCIpfX1mdW5jdGlvbiBjaGVja1Byb3BlcnRpZXMocHJvcHMpe2lmKHN0YXRlLmluRVM1KCkpZm9yKHZhciBuYW1lIGluIHByb3BzKXByb3BzW25hbWVdJiZwcm9wc1tuYW1lXS5zZXR0ZXJUb2tlbiYmIXByb3BzW25hbWVdLmdldHRlclRva2VuJiZ3YXJuaW5nKCJXMDc4Iixwcm9wc1tuYW1lXS5zZXR0ZXJUb2tlbil9ZnVuY3Rpb24gbWV0YVByb3BlcnR5KG5hbWUsYyl7aWYoY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCIuIikpe3ZhciBsZWZ0PXN0YXRlLnRva2Vucy5jdXJyLmlkO2FkdmFuY2UoIi4iKTt2YXIgaWQ9aWRlbnRpZmllcigpO3JldHVybiBzdGF0ZS50b2tlbnMuY3Vyci5pc01ldGFQcm9wZXJ0eT0hMCxuYW1lIT09aWQ/ZXJyb3IoIkUwNTciLHN0YXRlLnRva2Vucy5wcmV2LGxlZnQsaWQpOmMoKSxzdGF0ZS50b2tlbnMuY3Vycn19ZnVuY3Rpb24gZGVzdHJ1Y3R1cmluZ1BhdHRlcm4ob3B0aW9ucyl7dmFyIGlzQXNzaWdubWVudD1vcHRpb25zJiZvcHRpb25zLmFzc2lnbm1lbnQ7cmV0dXJuIHN0YXRlLmluRVM2KCl8fHdhcm5pbmcoIlcxMDQiLHN0YXRlLnRva2Vucy5jdXJyLGlzQXNzaWdubWVudD8iZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50IjoiZGVzdHJ1Y3R1cmluZyBiaW5kaW5nIiwiNiIpLGRlc3RydWN0dXJpbmdQYXR0ZXJuUmVjdXJzaXZlKG9wdGlvbnMpfWZ1bmN0aW9uIGRlc3RydWN0dXJpbmdQYXR0ZXJuUmVjdXJzaXZlKG9wdGlvbnMpe3ZhciBpZHMsaWRlbnRpZmllcnM9W10sb3BlbmluZ1BhcnNlZD1vcHRpb25zJiZvcHRpb25zLm9wZW5pbmdQYXJzZWQsaXNBc3NpZ25tZW50PW9wdGlvbnMmJm9wdGlvbnMuYXNzaWdubWVudCxyZWN1cnNpdmVPcHRpb25zPWlzQXNzaWdubWVudD97YXNzaWdubWVudDppc0Fzc2lnbm1lbnR9Om51bGwsZmlyc3RUb2tlbj1vcGVuaW5nUGFyc2VkP3N0YXRlLnRva2Vucy5jdXJyOnN0YXRlLnRva2Vucy5uZXh0LG5leHRJbm5lckRFPWZ1bmN0aW9uKCl7dmFyIGlkZW50O2lmKGNoZWNrUHVuY3R1YXRvcnMoc3RhdGUudG9rZW5zLm5leHQsWyJbIiwieyJdKSl7aWRzPWRlc3RydWN0dXJpbmdQYXR0ZXJuUmVjdXJzaXZlKHJlY3Vyc2l2ZU9wdGlvbnMpO2Zvcih2YXIgaWQgaW4gaWRzKWlkPWlkc1tpZF0saWRlbnRpZmllcnMucHVzaCh7aWQ6aWQuaWQsdG9rZW46aWQudG9rZW59KX1lbHNlIGlmKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwiLCIpKWlkZW50aWZpZXJzLnB1c2goe2lkOm51bGwsdG9rZW46c3RhdGUudG9rZW5zLmN1cnJ9KTtlbHNle2lmKCFjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIigiKSl7dmFyIGlzX3Jlc3Q9Y2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCIuLi4iKTtpZihpc0Fzc2lnbm1lbnQpe3ZhciBpZGVudGlmaWVyVG9rZW49aXNfcmVzdD9wZWVrKDApOnN0YXRlLnRva2Vucy5uZXh0O2lkZW50aWZpZXJUb2tlbi5pZGVudGlmaWVyfHx3YXJuaW5nKCJFMDMwIixpZGVudGlmaWVyVG9rZW4saWRlbnRpZmllclRva2VuLnZhbHVlKTt2YXIgYXNzaWduVGFyZ2V0PWV4cHJlc3Npb24oMTU1KTthc3NpZ25UYXJnZXQmJihjaGVja0xlZnRTaWRlQXNzaWduKGFzc2lnblRhcmdldCksYXNzaWduVGFyZ2V0LmlkZW50aWZpZXImJihpZGVudD1hc3NpZ25UYXJnZXQudmFsdWUpKX1lbHNlIGlkZW50PWlkZW50aWZpZXIoKTtyZXR1cm4gaWRlbnQmJmlkZW50aWZpZXJzLnB1c2goe2lkOmlkZW50LHRva2VuOnN0YXRlLnRva2Vucy5jdXJyfSksaXNfcmVzdH1hZHZhbmNlKCIoIiksbmV4dElubmVyREUoKSxhZHZhbmNlKCIpIil9cmV0dXJuITF9LGFzc2lnbm1lbnRQcm9wZXJ0eT1mdW5jdGlvbigpe3ZhciBpZDtjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIlsiKT8oYWR2YW5jZSgiWyIpLGV4cHJlc3Npb24oMTApLGFkdmFuY2UoIl0iKSxhZHZhbmNlKCI6IiksbmV4dElubmVyREUoKSk6IihzdHJpbmcpIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkfHwiKG51bWJlcikiPT09c3RhdGUudG9rZW5zLm5leHQuaWQ/KGFkdmFuY2UoKSxhZHZhbmNlKCI6IiksbmV4dElubmVyREUoKSk6KGlkPWlkZW50aWZpZXIoKSxjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIjoiKT8oYWR2YW5jZSgiOiIpLG5leHRJbm5lckRFKCkpOmlkJiYoaXNBc3NpZ25tZW50JiZjaGVja0xlZnRTaWRlQXNzaWduKHN0YXRlLnRva2Vucy5jdXJyKSxpZGVudGlmaWVycy5wdXNoKHtpZDppZCx0b2tlbjpzdGF0ZS50b2tlbnMuY3Vycn0pKSl9O2lmKGNoZWNrUHVuY3R1YXRvcihmaXJzdFRva2VuLCJbIikpe29wZW5pbmdQYXJzZWR8fGFkdmFuY2UoIlsiKSxjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIl0iKSYmd2FybmluZygiVzEzNyIsc3RhdGUudG9rZW5zLmN1cnIpO2Zvcih2YXIgZWxlbWVudF9hZnRlcl9yZXN0PSExOyFjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIl0iKTspbmV4dElubmVyREUoKSYmIWVsZW1lbnRfYWZ0ZXJfcmVzdCYmY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCIsIikmJih3YXJuaW5nKCJXMTMwIixzdGF0ZS50b2tlbnMubmV4dCksZWxlbWVudF9hZnRlcl9yZXN0PSEwKSxjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIj0iKSYmKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMucHJldiwiLi4uIik/YWR2YW5jZSgiXSIpOmFkdmFuY2UoIj0iKSwidW5kZWZpbmVkIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkJiZ3YXJuaW5nKCJXMDgwIixzdGF0ZS50b2tlbnMucHJldixzdGF0ZS50b2tlbnMucHJldi52YWx1ZSksZXhwcmVzc2lvbigxMCkpLGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwiXSIpfHxhZHZhbmNlKCIsIik7YWR2YW5jZSgiXSIpfWVsc2UgaWYoY2hlY2tQdW5jdHVhdG9yKGZpcnN0VG9rZW4sInsiKSl7Zm9yKG9wZW5pbmdQYXJzZWR8fGFkdmFuY2UoInsiKSxjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIn0iKSYmd2FybmluZygiVzEzNyIsc3RhdGUudG9rZW5zLmN1cnIpOyFjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsIn0iKSYmKGFzc2lnbm1lbnRQcm9wZXJ0eSgpLGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwiPSIpJiYoYWR2YW5jZSgiPSIpLCJ1bmRlZmluZWQiPT09c3RhdGUudG9rZW5zLm5leHQuaWQmJndhcm5pbmcoIlcwODAiLHN0YXRlLnRva2Vucy5wcmV2LHN0YXRlLnRva2Vucy5wcmV2LnZhbHVlKSxleHByZXNzaW9uKDEwKSksY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCJ9Iil8fChhZHZhbmNlKCIsIiksIWNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwifSIpKSk7KTthZHZhbmNlKCJ9Iil9cmV0dXJuIGlkZW50aWZpZXJzfWZ1bmN0aW9uIGRlc3RydWN0dXJpbmdQYXR0ZXJuTWF0Y2godG9rZW5zLHZhbHVlKXt2YXIgZmlyc3Q9dmFsdWUuZmlyc3Q7Zmlyc3QmJl8uemlwKHRva2VucyxBcnJheS5pc0FycmF5KGZpcnN0KT9maXJzdDpbZmlyc3RdKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCl7dmFyIHRva2VuPXZhbFswXSx2YWx1ZT12YWxbMV07dG9rZW4mJnZhbHVlP3Rva2VuLmZpcnN0PXZhbHVlOnRva2VuJiZ0b2tlbi5maXJzdCYmIXZhbHVlJiZ3YXJuaW5nKCJXMDgwIix0b2tlbi5maXJzdCx0b2tlbi5maXJzdC52YWx1ZSl9KX1mdW5jdGlvbiBibG9ja1ZhcmlhYmxlU3RhdGVtZW50KHR5cGUsc3RhdGVtZW50LGNvbnRleHQpe3ZhciB0b2tlbnMsbG9uZSx2YWx1ZSxsZXRibG9jayxwcmVmaXg9Y29udGV4dCYmY29udGV4dC5wcmVmaXgsaW5leHBvcnQ9Y29udGV4dCYmY29udGV4dC5pbmV4cG9ydCxpc0xldD0ibGV0Ij09PXR5cGUsaXNDb25zdD0iY29uc3QiPT09dHlwZTtmb3Ioc3RhdGUuaW5FUzYoKXx8d2FybmluZygiVzEwNCIsc3RhdGUudG9rZW5zLmN1cnIsdHlwZSwiNiIpLGlzTGV0JiYiKCI9PT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZT8oc3RhdGUuaW5Nb3ooKXx8d2FybmluZygiVzExOCIsc3RhdGUudG9rZW5zLm5leHQsImxldCBibG9jayIpLGFkdmFuY2UoIigiKSxzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnN0YWNrKCksbGV0YmxvY2s9ITApOnN0YXRlLmZ1bmN0WyIobm9ibG9ja3Njb3BlZHZhcikiXSYmZXJyb3IoIkUwNDgiLHN0YXRlLnRva2Vucy5jdXJyLGlzQ29uc3Q/IkNvbnN0IjoiTGV0Iiksc3RhdGVtZW50LmZpcnN0PVtdOzspe3ZhciBuYW1lcz1bXTtfLmNvbnRhaW5zKFsieyIsIlsiXSxzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSk/KHRva2Vucz1kZXN0cnVjdHVyaW5nUGF0dGVybigpLGxvbmU9ITEpOih0b2tlbnM9W3tpZDppZGVudGlmaWVyKCksdG9rZW46c3RhdGUudG9rZW5zLmN1cnJ9XSxsb25lPSEwKSwhcHJlZml4JiZpc0NvbnN0JiYiPSIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmd2FybmluZygiRTAxMiIsc3RhdGUudG9rZW5zLmN1cnIsc3RhdGUudG9rZW5zLmN1cnIudmFsdWUpO2Zvcih2YXIgdCBpbiB0b2tlbnMpdG9rZW5zLmhhc093blByb3BlcnR5KHQpJiYodD10b2tlbnNbdF0sc3RhdGUuZnVuY3RbIihzY29wZSkiXS5ibG9jay5pc0dsb2JhbCgpJiZwcmVkZWZpbmVkW3QuaWRdPT09ITEmJndhcm5pbmcoIlcwNzkiLHQudG9rZW4sdC5pZCksdC5pZCYmIXN0YXRlLmZ1bmN0WyIobm9ibG9ja3Njb3BlZHZhcikiXSYmKHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkbGFiZWwodC5pZCx7dHlwZTp0eXBlLHRva2VuOnQudG9rZW59KSxuYW1lcy5wdXNoKHQudG9rZW4pLGxvbmUmJmluZXhwb3J0JiZzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnNldEV4cG9ydGVkKHQudG9rZW4udmFsdWUsdC50b2tlbikpKTtpZigiPSI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmKGFkdmFuY2UoIj0iKSxwcmVmaXh8fCJ1bmRlZmluZWQiIT09c3RhdGUudG9rZW5zLm5leHQuaWR8fHdhcm5pbmcoIlcwODAiLHN0YXRlLnRva2Vucy5wcmV2LHN0YXRlLnRva2Vucy5wcmV2LnZhbHVlKSwhcHJlZml4JiYiPSI9PT1wZWVrKDApLmlkJiZzdGF0ZS50b2tlbnMubmV4dC5pZGVudGlmaWVyJiZ3YXJuaW5nKCJXMTIwIixzdGF0ZS50b2tlbnMubmV4dCxzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSksdmFsdWU9ZXhwcmVzc2lvbihwcmVmaXg/MTIwOjEwKSxsb25lP3Rva2Vuc1swXS5maXJzdD12YWx1ZTpkZXN0cnVjdHVyaW5nUGF0dGVybk1hdGNoKG5hbWVzLHZhbHVlKSksc3RhdGVtZW50LmZpcnN0PXN0YXRlbWVudC5maXJzdC5jb25jYXQobmFtZXMpLCIsIiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkKWJyZWFrO2NvbW1hKCl9cmV0dXJuIGxldGJsb2NrJiYoYWR2YW5jZSgiKSIpLGJsb2NrKCEwLCEwKSxzdGF0ZW1lbnQuYmxvY2s9ITAsc3RhdGUuZnVuY3RbIihzY29wZSkiXS51bnN0YWNrKCkpLHN0YXRlbWVudH1mdW5jdGlvbiBjbGFzc2RlZihpc1N0YXRlbWVudCl7cmV0dXJuIHN0YXRlLmluRVM2KCl8fHdhcm5pbmcoIlcxMDQiLHN0YXRlLnRva2Vucy5jdXJyLCJjbGFzcyIsIjYiKSxpc1N0YXRlbWVudD8odGhpcy5uYW1lPWlkZW50aWZpZXIoKSxzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmFkZGxhYmVsKHRoaXMubmFtZSx7dHlwZToiY2xhc3MiLHRva2VuOnN0YXRlLnRva2Vucy5jdXJyfSkpOnN0YXRlLnRva2Vucy5uZXh0LmlkZW50aWZpZXImJiJleHRlbmRzIiE9PXN0YXRlLnRva2Vucy5uZXh0LnZhbHVlPyh0aGlzLm5hbWU9aWRlbnRpZmllcigpLHRoaXMubmFtZWRFeHByPSEwKTp0aGlzLm5hbWU9c3RhdGUubmFtZVN0YWNrLmluZmVyKCksY2xhc3N0YWlsKHRoaXMpLHRoaXN9ZnVuY3Rpb24gY2xhc3N0YWlsKGMpe3ZhciB3YXNJbkNsYXNzQm9keT1zdGF0ZS5pbkNsYXNzQm9keTsiZXh0ZW5kcyI9PT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZSYmKGFkdmFuY2UoImV4dGVuZHMiKSxjLmhlcml0YWdlPWV4cHJlc3Npb24oMTApKSxzdGF0ZS5pbkNsYXNzQm9keT0hMCxhZHZhbmNlKCJ7IiksYy5ib2R5PWNsYXNzYm9keShjKSxhZHZhbmNlKCJ9Iiksc3RhdGUuaW5DbGFzc0JvZHk9d2FzSW5DbGFzc0JvZHl9ZnVuY3Rpb24gY2xhc3Nib2R5KGMpe2Zvcih2YXIgbmFtZSxpc1N0YXRpYyxpc0dlbmVyYXRvcixnZXRzZXQsY29tcHV0ZWQscHJvcHM9T2JqZWN0LmNyZWF0ZShudWxsKSxzdGF0aWNQcm9wcz1PYmplY3QuY3JlYXRlKG51bGwpLGk9MDsifSIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZDsrK2kpaWYobmFtZT1zdGF0ZS50b2tlbnMubmV4dCxpc1N0YXRpYz0hMSxpc0dlbmVyYXRvcj0hMSxnZXRzZXQ9bnVsbCwiOyIhPT1uYW1lLmlkKXtpZigiKiI9PT1uYW1lLmlkJiYoaXNHZW5lcmF0b3I9ITAsYWR2YW5jZSgiKiIpLG5hbWU9c3RhdGUudG9rZW5zLm5leHQpLCJbIj09PW5hbWUuaWQpbmFtZT1jb21wdXRlZFByb3BlcnR5TmFtZSgpLGNvbXB1dGVkPSEwO2Vsc2V7aWYoIWlzUHJvcGVydHlOYW1lKG5hbWUpKXt3YXJuaW5nKCJXMDUyIixzdGF0ZS50b2tlbnMubmV4dCxzdGF0ZS50b2tlbnMubmV4dC52YWx1ZXx8c3RhdGUudG9rZW5zLm5leHQudHlwZSksYWR2YW5jZSgpO2NvbnRpbnVlfWFkdmFuY2UoKSxjb21wdXRlZD0hMSxuYW1lLmlkZW50aWZpZXImJiJzdGF0aWMiPT09bmFtZS52YWx1ZSYmKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwiKiIpJiYoaXNHZW5lcmF0b3I9ITAsYWR2YW5jZSgiKiIpKSwoaXNQcm9wZXJ0eU5hbWUoc3RhdGUudG9rZW5zLm5leHQpfHwiWyI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCkmJihjb21wdXRlZD0iWyI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCxpc1N0YXRpYz0hMCxuYW1lPXN0YXRlLnRva2Vucy5uZXh0LCJbIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkP25hbWU9Y29tcHV0ZWRQcm9wZXJ0eU5hbWUoKTphZHZhbmNlKCkpKSwhbmFtZS5pZGVudGlmaWVyfHwiZ2V0IiE9PW5hbWUudmFsdWUmJiJzZXQiIT09bmFtZS52YWx1ZXx8KGlzUHJvcGVydHlOYW1lKHN0YXRlLnRva2Vucy5uZXh0KXx8IlsiPT09c3RhdGUudG9rZW5zLm5leHQuaWQpJiYoY29tcHV0ZWQ9IlsiPT09c3RhdGUudG9rZW5zLm5leHQuaWQsZ2V0c2V0PW5hbWUsbmFtZT1zdGF0ZS50b2tlbnMubmV4dCwiWyI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZD9uYW1lPWNvbXB1dGVkUHJvcGVydHlOYW1lKCk6YWR2YW5jZSgpKX1pZighY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCIoIikpe2ZvcihlcnJvcigiRTA1NCIsc3RhdGUudG9rZW5zLm5leHQsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOyJ9IiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkJiYhY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCIoIik7KWFkdmFuY2UoKTsiKCIhPT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZSYmZG9GdW5jdGlvbih7c3RhdGVtZW50OmN9KX1pZihjb21wdXRlZHx8KGdldHNldD9zYXZlQWNjZXNzb3IoZ2V0c2V0LnZhbHVlLGlzU3RhdGljP3N0YXRpY1Byb3BzOnByb3BzLG5hbWUudmFsdWUsbmFtZSwhMCxpc1N0YXRpYyk6KCJjb25zdHJ1Y3RvciI9PT1uYW1lLnZhbHVlP3N0YXRlLm5hbWVTdGFjay5zZXQoYyk6c3RhdGUubmFtZVN0YWNrLnNldChuYW1lKSxzYXZlUHJvcGVydHkoaXNTdGF0aWM/c3RhdGljUHJvcHM6cHJvcHMsbmFtZS52YWx1ZSxuYW1lLCEwLGlzU3RhdGljKSkpLGdldHNldCYmImNvbnN0cnVjdG9yIj09PW5hbWUudmFsdWUpe3ZhciBwcm9wRGVzYz0iZ2V0Ij09PWdldHNldC52YWx1ZT8iY2xhc3MgZ2V0dGVyIG1ldGhvZCI6ImNsYXNzIHNldHRlciBtZXRob2QiO2Vycm9yKCJFMDQ5IixuYW1lLHByb3BEZXNjLCJjb25zdHJ1Y3RvciIpfWVsc2UicHJvdG90eXBlIj09PW5hbWUudmFsdWUmJmVycm9yKCJFMDQ5IixuYW1lLCJjbGFzcyBtZXRob2QiLCJwcm90b3R5cGUiKTtwcm9wZXJ0eU5hbWUobmFtZSksZG9GdW5jdGlvbih7c3RhdGVtZW50OmMsdHlwZTppc0dlbmVyYXRvcj8iZ2VuZXJhdG9yIjpudWxsLGNsYXNzRXhwckJpbmRpbmc6Yy5uYW1lZEV4cHI/Yy5uYW1lOm51bGx9KX1lbHNlIHdhcm5pbmcoIlcwMzIiKSxhZHZhbmNlKCI7Iik7Y2hlY2tQcm9wZXJ0aWVzKHByb3BzKX1mdW5jdGlvbiBzYXZlUHJvcGVydHkocHJvcHMsbmFtZSx0a24saXNDbGFzcyxpc1N0YXRpYyl7dmFyIG1zZz1bImtleSIsImNsYXNzIG1ldGhvZCIsInN0YXRpYyBjbGFzcyBtZXRob2QiXTttc2c9bXNnWyhpc0NsYXNzfHwhMSkrKGlzU3RhdGljfHwhMSldLHRrbi5pZGVudGlmaWVyJiYobmFtZT10a24udmFsdWUpLHByb3BzW25hbWVdJiYiX19wcm90b19fIiE9PW5hbWU/d2FybmluZygiVzA3NSIsc3RhdGUudG9rZW5zLm5leHQsbXNnLG5hbWUpOnByb3BzW25hbWVdPU9iamVjdC5jcmVhdGUobnVsbCkscHJvcHNbbmFtZV0uYmFzaWM9ITAscHJvcHNbbmFtZV0uYmFzaWN0a249dGtufWZ1bmN0aW9uIHNhdmVBY2Nlc3NvcihhY2Nlc3NvclR5cGUscHJvcHMsbmFtZSx0a24saXNDbGFzcyxpc1N0YXRpYyl7dmFyIGZsYWdOYW1lPSJnZXQiPT09YWNjZXNzb3JUeXBlPyJnZXR0ZXJUb2tlbiI6InNldHRlclRva2VuIixtc2c9IiI7aXNDbGFzcz8oaXNTdGF0aWMmJihtc2crPSJzdGF0aWMgIiksbXNnKz1hY2Nlc3NvclR5cGUrInRlciBtZXRob2QiKTptc2c9ImtleSIsc3RhdGUudG9rZW5zLmN1cnIuYWNjZXNzb3JUeXBlPWFjY2Vzc29yVHlwZSxzdGF0ZS5uYW1lU3RhY2suc2V0KHRrbikscHJvcHNbbmFtZV0/KHByb3BzW25hbWVdLmJhc2ljfHxwcm9wc1tuYW1lXVtmbGFnTmFtZV0pJiYiX19wcm90b19fIiE9PW5hbWUmJndhcm5pbmcoIlcwNzUiLHN0YXRlLnRva2Vucy5uZXh0LG1zZyxuYW1lKTpwcm9wc1tuYW1lXT1PYmplY3QuY3JlYXRlKG51bGwpLHByb3BzW25hbWVdW2ZsYWdOYW1lXT10a259ZnVuY3Rpb24gY29tcHV0ZWRQcm9wZXJ0eU5hbWUoKXthZHZhbmNlKCJbIiksc3RhdGUuaW5FUzYoKXx8d2FybmluZygiVzExOSIsc3RhdGUudG9rZW5zLmN1cnIsImNvbXB1dGVkIHByb3BlcnR5IG5hbWVzIiwiNiIpO3ZhciB2YWx1ZT1leHByZXNzaW9uKDEwKTtyZXR1cm4gYWR2YW5jZSgiXSIpLHZhbHVlfWZ1bmN0aW9uIGNoZWNrUHVuY3R1YXRvcnModG9rZW4sdmFsdWVzKXtyZXR1cm4iKHB1bmN0dWF0b3IpIj09PXRva2VuLnR5cGU/Xy5jb250YWlucyh2YWx1ZXMsdG9rZW4udmFsdWUpOiExfWZ1bmN0aW9uIGNoZWNrUHVuY3R1YXRvcih0b2tlbix2YWx1ZSl7cmV0dXJuIihwdW5jdHVhdG9yKSI9PT10b2tlbi50eXBlJiZ0b2tlbi52YWx1ZT09PXZhbHVlfWZ1bmN0aW9uIGRlc3RydWN0dXJpbmdBc3NpZ25Pckpzb25WYWx1ZSgpe3ZhciBibG9jaz1sb29rdXBCbG9ja1R5cGUoKTtibG9jay5ub3RKc29uPyghc3RhdGUuaW5FUzYoKSYmYmxvY2suaXNEZXN0QXNzaWduJiZ3YXJuaW5nKCJXMTA0IixzdGF0ZS50b2tlbnMuY3VyciwiZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50IiwiNiIpLHN0YXRlbWVudHMoKSk6KHN0YXRlLm9wdGlvbi5sYXhicmVhaz0hMCxzdGF0ZS5qc29uTW9kZT0hMCxqc29uVmFsdWUoKSl9ZnVuY3Rpb24ganNvblZhbHVlKCl7ZnVuY3Rpb24ganNvbk9iamVjdCgpe3ZhciBvPXt9LHQ9c3RhdGUudG9rZW5zLm5leHQ7aWYoYWR2YW5jZSgieyIpLCJ9IiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkKWZvcig7Oyl7aWYoIihlbmQpIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkKWVycm9yKCJFMDI2IixzdGF0ZS50b2tlbnMubmV4dCx0LmxpbmUpO2Vsc2V7aWYoIn0iPT09c3RhdGUudG9rZW5zLm5leHQuaWQpe3dhcm5pbmcoIlcwOTQiLHN0YXRlLnRva2Vucy5jdXJyKTticmVha30iLCI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZD9lcnJvcigiRTAyOCIsc3RhdGUudG9rZW5zLm5leHQpOiIoc3RyaW5nKSIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmd2FybmluZygiVzA5NSIsc3RhdGUudG9rZW5zLm5leHQsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpfWlmKG9bc3RhdGUudG9rZW5zLm5leHQudmFsdWVdPT09ITA/d2FybmluZygiVzA3NSIsc3RhdGUudG9rZW5zLm5leHQsImtleSIsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOiJfX3Byb3RvX18iPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUmJiFzdGF0ZS5vcHRpb24ucHJvdG98fCJfX2l0ZXJhdG9yX18iPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUmJiFzdGF0ZS5vcHRpb24uaXRlcmF0b3I/d2FybmluZygiVzA5NiIsc3RhdGUudG9rZW5zLm5leHQsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOm9bc3RhdGUudG9rZW5zLm5leHQudmFsdWVdPSEwLGFkdmFuY2UoKSxhZHZhbmNlKCI6IiksanNvblZhbHVlKCksIiwiIT09c3RhdGUudG9rZW5zLm5leHQuaWQpYnJlYWs7YWR2YW5jZSgiLCIpfWFkdmFuY2UoIn0iKX1mdW5jdGlvbiBqc29uQXJyYXkoKXt2YXIgdD1zdGF0ZS50b2tlbnMubmV4dDtpZihhZHZhbmNlKCJbIiksIl0iIT09c3RhdGUudG9rZW5zLm5leHQuaWQpZm9yKDs7KXtpZigiKGVuZCkiPT09c3RhdGUudG9rZW5zLm5leHQuaWQpZXJyb3IoIkUwMjciLHN0YXRlLnRva2Vucy5uZXh0LHQubGluZSk7ZWxzZXtpZigiXSI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCl7d2FybmluZygiVzA5NCIsc3RhdGUudG9rZW5zLmN1cnIpO2JyZWFrfSIsIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkJiZlcnJvcigiRTAyOCIsc3RhdGUudG9rZW5zLm5leHQpfWlmKGpzb25WYWx1ZSgpLCIsIiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkKWJyZWFrO2FkdmFuY2UoIiwiKX1hZHZhbmNlKCJdIil9c3dpdGNoKHN0YXRlLnRva2Vucy5uZXh0LmlkKXtjYXNlInsiOmpzb25PYmplY3QoKTticmVhaztjYXNlIlsiOmpzb25BcnJheSgpO2JyZWFrO2Nhc2UidHJ1ZSI6Y2FzZSJmYWxzZSI6Y2FzZSJudWxsIjpjYXNlIihudW1iZXIpIjpjYXNlIihzdHJpbmcpIjphZHZhbmNlKCk7YnJlYWs7Y2FzZSItIjphZHZhbmNlKCItIiksYWR2YW5jZSgiKG51bWJlcikiKTticmVhaztkZWZhdWx0OmVycm9yKCJFMDAzIixzdGF0ZS50b2tlbnMubmV4dCl9fXZhciBhcGksZGVjbGFyZWQsZnVuY3Rpb25zLGluYmxvY2ssaW5kZW50LGxvb2thaGVhZCxsZXgsbWVtYmVyLG1lbWJlcnNPbmx5LHByZWRlZmluZWQsc3RhY2ssdXJscyxiYW5nPXsiPCI6ITAsIjw9IjohMCwiPT0iOiEwLCI9PT0iOiEwLCIhPT0iOiEwLCIhPSI6ITAsIj4iOiEwLCI+PSI6ITAsIisiOiEwLCItIjohMCwiKiI6ITAsIi8iOiEwLCIlIjohMH0sZnVuY3Rpb25pY2l0eT1bImNsb3N1cmUiLCJleGNlcHRpb24iLCJnbG9iYWwiLCJsYWJlbCIsIm91dGVyIiwidW51c2VkIiwidmFyIl0sZXh0cmFNb2R1bGVzPVtdLGVtaXR0ZXI9bmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIsdHlwZW9mVmFsdWVzPXt9O3R5cGVvZlZhbHVlcy5sZWdhY3k9WyJ4bWwiLCJ1bmtub3duIl0sdHlwZW9mVmFsdWVzLmVzMz1bInVuZGVmaW5lZCIsImJvb2xlYW4iLCJudW1iZXIiLCJzdHJpbmciLCJmdW5jdGlvbiIsIm9iamVjdCJdLHR5cGVvZlZhbHVlcy5lczM9dHlwZW9mVmFsdWVzLmVzMy5jb25jYXQodHlwZW9mVmFsdWVzLmxlZ2FjeSksdHlwZW9mVmFsdWVzLmVzNj10eXBlb2ZWYWx1ZXMuZXMzLmNvbmNhdCgic3ltYm9sIiksdHlwZSgiKG51bWJlcikiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0eXBlKCIoc3RyaW5nKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHN0YXRlLnN5bnRheFsiKGlkZW50aWZpZXIpIl09e3R5cGU6IihpZGVudGlmaWVyKSIsbGJwOjAsaWRlbnRpZmllcjohMCxudWQ6ZnVuY3Rpb24oKXt2YXIgdj10aGlzLnZhbHVlO3JldHVybiI9PiI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZD90aGlzOihzdGF0ZS5mdW5jdFsiKGNvbXBhcnJheSkiXS5jaGVjayh2KXx8c3RhdGUuZnVuY3RbIihzY29wZSkiXS5ibG9jay51c2UodixzdGF0ZS50b2tlbnMuY3VyciksdGhpcyl9LGxlZDpmdW5jdGlvbigpe2Vycm9yKCJFMDMzIixzdGF0ZS50b2tlbnMubmV4dCxzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSl9fTt2YXIgYmFzZVRlbXBsYXRlU3ludGF4PXtsYnA6MCxpZGVudGlmaWVyOiExLHRlbXBsYXRlOiEwfTtzdGF0ZS5zeW50YXhbIih0ZW1wbGF0ZSkiXT1fLmV4dGVuZCh7dHlwZToiKHRlbXBsYXRlKSIsbnVkOmRvVGVtcGxhdGVMaXRlcmFsLGxlZDpkb1RlbXBsYXRlTGl0ZXJhbCxub1N1YnN0OiExfSxiYXNlVGVtcGxhdGVTeW50YXgpLHN0YXRlLnN5bnRheFsiKHRlbXBsYXRlIG1pZGRsZSkiXT1fLmV4dGVuZCh7dHlwZToiKHRlbXBsYXRlIG1pZGRsZSkiLG1pZGRsZTohMCxub1N1YnN0OiExfSxiYXNlVGVtcGxhdGVTeW50YXgpLHN0YXRlLnN5bnRheFsiKHRlbXBsYXRlIHRhaWwpIl09Xy5leHRlbmQoe3R5cGU6Iih0ZW1wbGF0ZSB0YWlsKSIsdGFpbDohMCxub1N1YnN0OiExfSxiYXNlVGVtcGxhdGVTeW50YXgpLHN0YXRlLnN5bnRheFsiKG5vIHN1YnN0IHRlbXBsYXRlKSJdPV8uZXh0ZW5kKHt0eXBlOiIodGVtcGxhdGUpIixudWQ6ZG9UZW1wbGF0ZUxpdGVyYWwsbGVkOmRvVGVtcGxhdGVMaXRlcmFsLG5vU3Vic3Q6ITAsdGFpbDohMH0sYmFzZVRlbXBsYXRlU3ludGF4KSx0eXBlKCIocmVnZXhwKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGRlbGltKCIoZW5kbGluZSkiKSxkZWxpbSgiKGJlZ2luKSIpLGRlbGltKCIoZW5kKSIpLnJlYWNoPSEwLGRlbGltKCIoZXJyb3IpIikucmVhY2g9ITAsZGVsaW0oIn0iKS5yZWFjaD0hMCxkZWxpbSgiKSIpLGRlbGltKCJdIiksZGVsaW0oXCciXCcpLnJlYWNoPSEwLGRlbGltKCJcJyIpLnJlYWNoPSEwLGRlbGltKCI7IiksZGVsaW0oIjoiKS5yZWFjaD0hMCxkZWxpbSgiIyIpLHJlc2VydmUoImVsc2UiKSxyZXNlcnZlKCJjYXNlIikucmVhY2g9ITAscmVzZXJ2ZSgiY2F0Y2giKSxyZXNlcnZlKCJkZWZhdWx0IikucmVhY2g9ITAscmVzZXJ2ZSgiZmluYWxseSIpLHJlc2VydmV2YXIoImFyZ3VtZW50cyIsZnVuY3Rpb24oeCl7c3RhdGUuaXNTdHJpY3QoKSYmc3RhdGUuZnVuY3RbIihnbG9iYWwpIl0mJndhcm5pbmcoIkUwMDgiLHgpfSkscmVzZXJ2ZXZhcigiZXZhbCIpLHJlc2VydmV2YXIoImZhbHNlIikscmVzZXJ2ZXZhcigiSW5maW5pdHkiKSxyZXNlcnZldmFyKCJudWxsIikscmVzZXJ2ZXZhcigidGhpcyIsZnVuY3Rpb24oeCl7c3RhdGUuaXNTdHJpY3QoKSYmIWlzTWV0aG9kKCkmJiFzdGF0ZS5vcHRpb24udmFsaWR0aGlzJiYoc3RhdGUuZnVuY3RbIihzdGF0ZW1lbnQpIl0mJnN0YXRlLmZ1bmN0WyIobmFtZSkiXS5jaGFyQXQoMCk+IloifHxzdGF0ZS5mdW5jdFsiKGdsb2JhbCkiXSkmJndhcm5pbmcoIlcwNDAiLHgpfSkscmVzZXJ2ZXZhcigidHJ1ZSIpLHJlc2VydmV2YXIoInVuZGVmaW5lZCIpLGFzc2lnbm9wKCI9IiwiYXNzaWduIiwyMCksYXNzaWdub3AoIis9IiwiYXNzaWduYWRkIiwyMCksYXNzaWdub3AoIi09IiwiYXNzaWduc3ViIiwyMCksYXNzaWdub3AoIio9IiwiYXNzaWdubXVsdCIsMjApLGFzc2lnbm9wKCIvPSIsImFzc2lnbmRpdiIsMjApLm51ZD1mdW5jdGlvbigpe2Vycm9yKCJFMDE0Iil9LGFzc2lnbm9wKCIlPSIsImFzc2lnbm1vZCIsMjApLGJpdHdpc2Vhc3NpZ25vcCgiJj0iKSxiaXR3aXNlYXNzaWdub3AoInw9IiksYml0d2lzZWFzc2lnbm9wKCJePSIpLGJpdHdpc2Vhc3NpZ25vcCgiPDw9IiksYml0d2lzZWFzc2lnbm9wKCI+Pj0iKSxiaXR3aXNlYXNzaWdub3AoIj4+Pj0iKSxpbmZpeCgiLCIsZnVuY3Rpb24obGVmdCx0aGF0KXt2YXIgZXhwcjtpZih0aGF0LmV4cHJzPVtsZWZ0XSxzdGF0ZS5vcHRpb24ubm9jb21tYSYmd2FybmluZygiVzEyNyIpLCFjb21tYSh7cGVlazohMH0pKXJldHVybiB0aGF0O2Zvcig7Oyl7aWYoIShleHByPWV4cHJlc3Npb24oMTApKSlicmVhaztpZih0aGF0LmV4cHJzLnB1c2goZXhwciksIiwiIT09c3RhdGUudG9rZW5zLm5leHQudmFsdWV8fCFjb21tYSgpKWJyZWFrfXJldHVybiB0aGF0fSwxMCwhMCksaW5maXgoIj8iLGZ1bmN0aW9uKGxlZnQsdGhhdCl7cmV0dXJuIGluY3JlYXNlQ29tcGxleGl0eUNvdW50KCksdGhhdC5sZWZ0PWxlZnQsdGhhdC5yaWdodD1leHByZXNzaW9uKDEwKSxhZHZhbmNlKCI6IiksdGhhdFsiZWxzZSJdPWV4cHJlc3Npb24oMTApLHRoYXR9LDMwKTt2YXIgb3JQcmVjZW5kZW5jZT00MDtpbmZpeCgifHwiLGZ1bmN0aW9uKGxlZnQsdGhhdCl7cmV0dXJuIGluY3JlYXNlQ29tcGxleGl0eUNvdW50KCksdGhhdC5sZWZ0PWxlZnQsdGhhdC5yaWdodD1leHByZXNzaW9uKG9yUHJlY2VuZGVuY2UpLHRoYXR9LG9yUHJlY2VuZGVuY2UpLGluZml4KCImJiIsImFuZCIsNTApLGJpdHdpc2UoInwiLCJiaXRvciIsNzApLGJpdHdpc2UoIl4iLCJiaXR4b3IiLDgwKSxiaXR3aXNlKCImIiwiYml0YW5kIiw5MCkscmVsYXRpb24oIj09IixmdW5jdGlvbihsZWZ0LHJpZ2h0KXt2YXIgZXFudWxsPXN0YXRlLm9wdGlvbi5lcW51bGwmJigibnVsbCI9PT0obGVmdCYmbGVmdC52YWx1ZSl8fCJudWxsIj09PShyaWdodCYmcmlnaHQudmFsdWUpKTtzd2l0Y2goITApe2Nhc2UhZXFudWxsJiZzdGF0ZS5vcHRpb24uZXFlcWVxOnRoaXMuZnJvbT10aGlzLmNoYXJhY3Rlcix3YXJuaW5nKCJXMTE2Iix0aGlzLCI9PT0iLCI9PSIpO2JyZWFrO2Nhc2UgaXNQb29yUmVsYXRpb24obGVmdCk6d2FybmluZygiVzA0MSIsdGhpcywiPT09IixsZWZ0LnZhbHVlKTticmVhaztjYXNlIGlzUG9vclJlbGF0aW9uKHJpZ2h0KTp3YXJuaW5nKCJXMDQxIix0aGlzLCI9PT0iLHJpZ2h0LnZhbHVlKTticmVhaztjYXNlIGlzVHlwb1R5cGVvZihyaWdodCxsZWZ0LHN0YXRlKTp3YXJuaW5nKCJXMTIyIix0aGlzLHJpZ2h0LnZhbHVlKTticmVhaztjYXNlIGlzVHlwb1R5cGVvZihsZWZ0LHJpZ2h0LHN0YXRlKTp3YXJuaW5nKCJXMTIyIix0aGlzLGxlZnQudmFsdWUpfXJldHVybiB0aGlzfSkscmVsYXRpb24oIj09PSIsZnVuY3Rpb24obGVmdCxyaWdodCl7cmV0dXJuIGlzVHlwb1R5cGVvZihyaWdodCxsZWZ0LHN0YXRlKT93YXJuaW5nKCJXMTIyIix0aGlzLHJpZ2h0LnZhbHVlKTppc1R5cG9UeXBlb2YobGVmdCxyaWdodCxzdGF0ZSkmJndhcm5pbmcoIlcxMjIiLHRoaXMsbGVmdC52YWx1ZSksdGhpc30pLHJlbGF0aW9uKCIhPSIsZnVuY3Rpb24obGVmdCxyaWdodCl7dmFyIGVxbnVsbD1zdGF0ZS5vcHRpb24uZXFudWxsJiYoIm51bGwiPT09KGxlZnQmJmxlZnQudmFsdWUpfHwibnVsbCI9PT0ocmlnaHQmJnJpZ2h0LnZhbHVlKSk7cmV0dXJuIWVxbnVsbCYmc3RhdGUub3B0aW9uLmVxZXFlcT8odGhpcy5mcm9tPXRoaXMuY2hhcmFjdGVyLHdhcm5pbmcoIlcxMTYiLHRoaXMsIiE9PSIsIiE9IikpOmlzUG9vclJlbGF0aW9uKGxlZnQpP3dhcm5pbmcoIlcwNDEiLHRoaXMsIiE9PSIsbGVmdC52YWx1ZSk6aXNQb29yUmVsYXRpb24ocmlnaHQpP3dhcm5pbmcoIlcwNDEiLHRoaXMsIiE9PSIscmlnaHQudmFsdWUpOmlzVHlwb1R5cGVvZihyaWdodCxsZWZ0LHN0YXRlKT93YXJuaW5nKCJXMTIyIix0aGlzLHJpZ2h0LnZhbHVlKTppc1R5cG9UeXBlb2YobGVmdCxyaWdodCxzdGF0ZSkmJndhcm5pbmcoIlcxMjIiLHRoaXMsbGVmdC52YWx1ZSksdGhpc30pLHJlbGF0aW9uKCIhPT0iLGZ1bmN0aW9uKGxlZnQscmlnaHQpe3JldHVybiBpc1R5cG9UeXBlb2YocmlnaHQsbGVmdCxzdGF0ZSk/d2FybmluZygiVzEyMiIsdGhpcyxyaWdodC52YWx1ZSk6aXNUeXBvVHlwZW9mKGxlZnQscmlnaHQsc3RhdGUpJiZ3YXJuaW5nKCJXMTIyIix0aGlzLGxlZnQudmFsdWUpLHRoaXN9KSxyZWxhdGlvbigiPCIpLHJlbGF0aW9uKCI+IikscmVsYXRpb24oIjw9IikscmVsYXRpb24oIj49IiksYml0d2lzZSgiPDwiLCJzaGlmdGxlZnQiLDEyMCksYml0d2lzZSgiPj4iLCJzaGlmdHJpZ2h0IiwxMjApLGJpdHdpc2UoIj4+PiIsInNoaWZ0cmlnaHR1bnNpZ25lZCIsMTIwKSxpbmZpeCgiaW4iLCJpbiIsMTIwKSxpbmZpeCgiaW5zdGFuY2VvZiIsImluc3RhbmNlb2YiLDEyMCksaW5maXgoIisiLGZ1bmN0aW9uKGxlZnQsdGhhdCl7dmFyIHJpZ2h0O3JldHVybiB0aGF0LmxlZnQ9bGVmdCx0aGF0LnJpZ2h0PXJpZ2h0PWV4cHJlc3Npb24oMTMwKSxsZWZ0JiZyaWdodCYmIihzdHJpbmcpIj09PWxlZnQuaWQmJiIoc3RyaW5nKSI9PT1yaWdodC5pZD8obGVmdC52YWx1ZSs9cmlnaHQudmFsdWUsbGVmdC5jaGFyYWN0ZXI9cmlnaHQuY2hhcmFjdGVyLCFzdGF0ZS5vcHRpb24uc2NyaXB0dXJsJiZyZWcuamF2YXNjcmlwdFVSTC50ZXN0KGxlZnQudmFsdWUpJiZ3YXJuaW5nKCJXMDUwIixsZWZ0KSxsZWZ0KTp0aGF0fSwxMzApLHByZWZpeCgiKyIsIm51bSIpLHByZWZpeCgiKysrIixmdW5jdGlvbigpe3JldHVybiB3YXJuaW5nKCJXMDA3IiksdGhpcy5hcml0eT0idW5hcnkiLHRoaXMucmlnaHQ9ZXhwcmVzc2lvbigxNTApLHRoaXN9KSxpbmZpeCgiKysrIixmdW5jdGlvbihsZWZ0KXtyZXR1cm4gd2FybmluZygiVzAwNyIpLHRoaXMubGVmdD1sZWZ0LHRoaXMucmlnaHQ9ZXhwcmVzc2lvbigxMzApLHRoaXN9LDEzMCksaW5maXgoIi0iLCJzdWIiLDEzMCkscHJlZml4KCItIiwibmVnIikscHJlZml4KCItLS0iLGZ1bmN0aW9uKCl7cmV0dXJuIHdhcm5pbmcoIlcwMDYiKSx0aGlzLmFyaXR5PSJ1bmFyeSIsdGhpcy5yaWdodD1leHByZXNzaW9uKDE1MCksdGhpc30pLGluZml4KCItLS0iLGZ1bmN0aW9uKGxlZnQpe3JldHVybiB3YXJuaW5nKCJXMDA2IiksdGhpcy5sZWZ0PWxlZnQsdGhpcy5yaWdodD1leHByZXNzaW9uKDEzMCksdGhpc30sMTMwKSxpbmZpeCgiKiIsIm11bHQiLDE0MCksaW5maXgoIi8iLCJkaXYiLDE0MCksaW5maXgoIiUiLCJtb2QiLDE0MCksc3VmZml4KCIrKyIpLHByZWZpeCgiKysiLCJwcmVpbmMiKSxzdGF0ZS5zeW50YXhbIisrIl0uZXhwcz0hMCxzdWZmaXgoIi0tIikscHJlZml4KCItLSIsInByZWRlYyIpLHN0YXRlLnN5bnRheFsiLS0iXS5leHBzPSEwLHByZWZpeCgiZGVsZXRlIixmdW5jdGlvbigpe3ZhciBwPWV4cHJlc3Npb24oMTApO3JldHVybiBwPygiLiIhPT1wLmlkJiYiWyIhPT1wLmlkJiZ3YXJuaW5nKCJXMDUxIiksdGhpcy5maXJzdD1wLHAuaWRlbnRpZmllciYmIXN0YXRlLmlzU3RyaWN0KCkmJihwLmZvcmdpdmVVbmRlZj0hMCksdGhpcyk6dGhpc30pLmV4cHM9ITAscHJlZml4KCJ+IixmdW5jdGlvbigpe3JldHVybiBzdGF0ZS5vcHRpb24uYml0d2lzZSYmd2FybmluZygiVzAxNiIsdGhpcywifiIpLHRoaXMuYXJpdHk9InVuYXJ5Iix0aGlzLnJpZ2h0PWV4cHJlc3Npb24oMTUwKSx0aGlzfSkscHJlZml4KCIuLi4iLGZ1bmN0aW9uKCl7cmV0dXJuIHN0YXRlLmluRVM2KCEwKXx8d2FybmluZygiVzExOSIsdGhpcywic3ByZWFkL3Jlc3Qgb3BlcmF0b3IiLCI2Iiksc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllcnx8IihzdHJpbmcpIj09PXN0YXRlLnRva2Vucy5uZXh0LnR5cGV8fGNoZWNrUHVuY3R1YXRvcnMoc3RhdGUudG9rZW5zLm5leHQsWyJbIiwiKCJdKXx8ZXJyb3IoIkUwMzAiLHN0YXRlLnRva2Vucy5uZXh0LHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSxleHByZXNzaW9uKDE1MCksdGhpc30pLHByZWZpeCgiISIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcml0eT0idW5hcnkiLHRoaXMucmlnaHQ9ZXhwcmVzc2lvbigxNTApLHRoaXMucmlnaHR8fHF1aXQoIkUwNDEiLHRoaXMubGluZXx8MCksYmFuZ1t0aGlzLnJpZ2h0LmlkXT09PSEwJiZ3YXJuaW5nKCJXMDE4Iix0aGlzLCIhIiksdGhpc30pLHByZWZpeCgidHlwZW9mIixmdW5jdGlvbigpe3ZhciBwPWV4cHJlc3Npb24oMTUwKTtyZXR1cm4gdGhpcy5maXJzdD10aGlzLnJpZ2h0PXAscHx8cXVpdCgiRTA0MSIsdGhpcy5saW5lfHwwLHRoaXMuY2hhcmFjdGVyfHwwKSxwLmlkZW50aWZpZXImJihwLmZvcmdpdmVVbmRlZj0hMCksdGhpc30pLHByZWZpeCgibmV3IixmdW5jdGlvbigpe3ZhciBtcD1tZXRhUHJvcGVydHkoInRhcmdldCIsZnVuY3Rpb24oKXtzdGF0ZS5pbkVTNighMCl8fHdhcm5pbmcoIlcxMTkiLHN0YXRlLnRva2Vucy5wcmV2LCJuZXcudGFyZ2V0IiwiNiIpO2Zvcih2YXIgaW5GdW5jdGlvbixjPXN0YXRlLmZ1bmN0O2MmJihpbkZ1bmN0aW9uPSFjWyIoZ2xvYmFsKSJdLGNbIihhcnJvdykiXSk7KWM9Y1siKGNvbnRleHQpIl07aW5GdW5jdGlvbnx8d2FybmluZygiVzEzNiIsc3RhdGUudG9rZW5zLnByZXYsIm5ldy50YXJnZXQiKX0pO2lmKG1wKXJldHVybiBtcDt2YXIgaSxjPWV4cHJlc3Npb24oMTU1KTtpZihjJiYiZnVuY3Rpb24iIT09Yy5pZClpZihjLmlkZW50aWZpZXIpc3dpdGNoKGNbIm5ldyJdPSEwLGMudmFsdWUpe2Nhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJCb29sZWFuIjpjYXNlIk1hdGgiOmNhc2UiSlNPTiI6d2FybmluZygiVzA1MyIsc3RhdGUudG9rZW5zLnByZXYsYy52YWx1ZSk7YnJlYWs7Y2FzZSJTeW1ib2wiOnN0YXRlLmluRVM2KCkmJndhcm5pbmcoIlcwNTMiLHN0YXRlLnRva2Vucy5wcmV2LGMudmFsdWUpO2JyZWFrO2Nhc2UiRnVuY3Rpb24iOnN0YXRlLm9wdGlvbi5ldmlsfHx3YXJuaW5nKCJXMDU0Iik7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlJlZ0V4cCI6Y2FzZSJ0aGlzIjpicmVhaztkZWZhdWx0OiJmdW5jdGlvbiIhPT1jLmlkJiYoaT1jLnZhbHVlLnN1YnN0cigwLDEpLHN0YXRlLm9wdGlvbi5uZXdjYXAmJigiQSI+aXx8aT4iWiIpJiYhc3RhdGUuZnVuY3RbIihzY29wZSkiXS5pc1ByZWRlZmluZWQoYy52YWx1ZSkmJndhcm5pbmcoIlcwNTUiLHN0YXRlLnRva2Vucy5jdXJyKSl9ZWxzZSIuIiE9PWMuaWQmJiJbIiE9PWMuaWQmJiIoIiE9PWMuaWQmJndhcm5pbmcoIlcwNTYiLHN0YXRlLnRva2Vucy5jdXJyKTtlbHNlIHN0YXRlLm9wdGlvbi5zdXBlcm5ld3x8d2FybmluZygiVzA1NyIsdGhpcyk7cmV0dXJuIigiPT09c3RhdGUudG9rZW5zLm5leHQuaWR8fHN0YXRlLm9wdGlvbi5zdXBlcm5ld3x8d2FybmluZygiVzA1OCIsc3RhdGUudG9rZW5zLmN1cnIsc3RhdGUudG9rZW5zLmN1cnIudmFsdWUpLHRoaXMuZmlyc3Q9dGhpcy5yaWdodD1jLHRoaXN9KSxzdGF0ZS5zeW50YXhbIm5ldyJdLmV4cHM9ITAscHJlZml4KCJ2b2lkIikuZXhwcz0hMCxpbmZpeCgiLiIsZnVuY3Rpb24obGVmdCx0aGF0KXt2YXIgbT1pZGVudGlmaWVyKCExLCEwKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG0mJmNvdW50TWVtYmVyKG0pLHRoYXQubGVmdD1sZWZ0LHRoYXQucmlnaHQ9bSxtJiYiaGFzT3duUHJvcGVydHkiPT09bSYmIj0iPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUmJndhcm5pbmcoIlcwMDEiKSwhbGVmdHx8ImFyZ3VtZW50cyIhPT1sZWZ0LnZhbHVlfHwiY2FsbGVlIiE9PW0mJiJjYWxsZXIiIT09bT9zdGF0ZS5vcHRpb24uZXZpbHx8IWxlZnR8fCJkb2N1bWVudCIhPT1sZWZ0LnZhbHVlfHwid3JpdGUiIT09bSYmIndyaXRlbG4iIT09bXx8d2FybmluZygiVzA2MCIsbGVmdCk6c3RhdGUub3B0aW9uLm5vYXJnP3dhcm5pbmcoIlcwNTkiLGxlZnQsbSk6c3RhdGUuaXNTdHJpY3QoKSYmZXJyb3IoIkUwMDgiKSxzdGF0ZS5vcHRpb24uZXZpbHx8ImV2YWwiIT09bSYmImV4ZWNTY3JpcHQiIT09bXx8aXNHbG9iYWxFdmFsKGxlZnQsc3RhdGUpJiZ3YXJuaW5nKCJXMDYxIiksdGhhdH0sMTYwLCEwKSxpbmZpeCgiKCIsZnVuY3Rpb24obGVmdCx0aGF0KXtzdGF0ZS5vcHRpb24uaW1tZWQmJmxlZnQmJiFsZWZ0LmltbWVkJiYiZnVuY3Rpb24iPT09bGVmdC5pZCYmd2FybmluZygiVzA2MiIpO3ZhciBuPTAscD1bXTtpZihsZWZ0JiYiKGlkZW50aWZpZXIpIj09PWxlZnQudHlwZSYmbGVmdC52YWx1ZS5tYXRjaCgvXltBLVpdKFtBLVowLTlfJF0qW2Etel1bQS1aYS16MC05XyRdKik/JC8pJiYtMT09PSJBcnJheSBOdW1iZXIgU3RyaW5nIEJvb2xlYW4gRGF0ZSBPYmplY3QgRXJyb3IgU3ltYm9sIi5pbmRleE9mKGxlZnQudmFsdWUpJiYoIk1hdGgiPT09bGVmdC52YWx1ZT93YXJuaW5nKCJXMDYzIixsZWZ0KTpzdGF0ZS5vcHRpb24ubmV3Y2FwJiZ3YXJuaW5nKCJXMDY0IixsZWZ0KSksIikiIT09c3RhdGUudG9rZW5zLm5leHQuaWQpZm9yKDtwW3AubGVuZ3RoXT1leHByZXNzaW9uKDEwKSxuKz0xLCIsIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkOyljb21tYSgpO3JldHVybiBhZHZhbmNlKCIpIiksIm9iamVjdCI9PXR5cGVvZiBsZWZ0JiYoc3RhdGUuaW5FUzUoKXx8InBhcnNlSW50IiE9PWxlZnQudmFsdWV8fDEhPT1ufHx3YXJuaW5nKCJXMDY1IixzdGF0ZS50b2tlbnMuY3Vyciksc3RhdGUub3B0aW9uLmV2aWx8fCgiZXZhbCI9PT1sZWZ0LnZhbHVlfHwiRnVuY3Rpb24iPT09bGVmdC52YWx1ZXx8ImV4ZWNTY3JpcHQiPT09bGVmdC52YWx1ZT8od2FybmluZygiVzA2MSIsbGVmdCkscFswXSYmIihzdHJpbmcpIj09PVswXS5pZCYmYWRkSW50ZXJuYWxTcmMobGVmdCxwWzBdLnZhbHVlKSk6IXBbMF18fCIoc3RyaW5nKSIhPT1wWzBdLmlkfHwic2V0VGltZW91dCIhPT1sZWZ0LnZhbHVlJiYic2V0SW50ZXJ2YWwiIT09bGVmdC52YWx1ZT8hcFswXXx8IihzdHJpbmcpIiE9PXBbMF0uaWR8fCIuIiE9PWxlZnQudmFsdWV8fCJ3aW5kb3ciIT09bGVmdC5sZWZ0LnZhbHVlfHwic2V0VGltZW91dCIhPT1sZWZ0LnJpZ2h0JiYic2V0SW50ZXJ2YWwiIT09bGVmdC5yaWdodHx8KHdhcm5pbmcoIlcwNjYiLGxlZnQpLGFkZEludGVybmFsU3JjKGxlZnQscFswXS52YWx1ZSkpOih3YXJuaW5nKCJXMDY2IixsZWZ0KSxhZGRJbnRlcm5hbFNyYyhsZWZ0LHBbMF0udmFsdWUpKSksbGVmdC5pZGVudGlmaWVyfHwiLiI9PT1sZWZ0LmlkfHwiWyI9PT1sZWZ0LmlkfHwiPT4iPT09bGVmdC5pZHx8IigiPT09bGVmdC5pZHx8IiYmIj09PWxlZnQuaWR8fCJ8fCI9PT1sZWZ0LmlkfHwiPyI9PT1sZWZ0LmlkfHxzdGF0ZS5pbkVTNigpJiZsZWZ0WyIobmFtZSkiXXx8d2FybmluZygiVzA2NyIsdGhhdCkpLHRoYXQubGVmdD1sZWZ0LHRoYXR9LDE1NSwhMCkuZXhwcz0hMCxwcmVmaXgoIigiLGZ1bmN0aW9uKCl7dmFyIHBuMSxyZXQsdHJpZ2dlckZuRXhwcixmaXJzdCxsYXN0LHBuPXN0YXRlLnRva2Vucy5uZXh0LGk9LTEscGFyZW5zPTEsb3BlbmluZz1zdGF0ZS50b2tlbnMuY3VycixwcmVjZWVkaW5nPXN0YXRlLnRva2Vucy5wcmV2LGlzTmVjZXNzYXJ5PSFzdGF0ZS5vcHRpb24uc2luZ2xlR3JvdXBzO2RvIigiPT09cG4udmFsdWU/cGFyZW5zKz0xOiIpIj09PXBuLnZhbHVlJiYocGFyZW5zLT0xKSxpKz0xLHBuMT1wbixwbj1wZWVrKGkpO3doaWxlKCgwIT09cGFyZW5zfHwiKSIhPT1wbjEudmFsdWUpJiYiOyIhPT1wbi52YWx1ZSYmIihlbmQpIiE9PXBuLnR5cGUpO2lmKCJmdW5jdGlvbiI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmKHRyaWdnZXJGbkV4cHI9c3RhdGUudG9rZW5zLm5leHQuaW1tZWQ9ITApLCI9PiI9PT1wbi52YWx1ZSlyZXR1cm4gZG9GdW5jdGlvbih7dHlwZToiYXJyb3ciLHBhcnNlZE9wZW5pbmc6ITB9KTt2YXIgZXhwcnM9W107aWYoIikiIT09c3RhdGUudG9rZW5zLm5leHQuaWQpZm9yKDtleHBycy5wdXNoKGV4cHJlc3Npb24oMTApKSwiLCI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZDspc3RhdGUub3B0aW9uLm5vY29tbWEmJndhcm5pbmcoIlcxMjciKSxjb21tYSgpO3JldHVybiBhZHZhbmNlKCIpIix0aGlzKSxzdGF0ZS5vcHRpb24uaW1tZWQmJmV4cHJzWzBdJiYiZnVuY3Rpb24iPT09ZXhwcnNbMF0uaWQmJiIoIiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkJiYiLiIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmIlsiIT09c3RhdGUudG9rZW5zLm5leHQuaWQmJndhcm5pbmcoIlcwNjgiLHRoaXMpLGV4cHJzLmxlbmd0aD8oZXhwcnMubGVuZ3RoPjE/KHJldD1PYmplY3QuY3JlYXRlKHN0YXRlLnN5bnRheFsiLCJdKSxyZXQuZXhwcnM9ZXhwcnMsZmlyc3Q9ZXhwcnNbMF0sbGFzdD1leHByc1tleHBycy5sZW5ndGgtMV0saXNOZWNlc3Nhcnl8fChpc05lY2Vzc2FyeT1wcmVjZWVkaW5nLmFzc2lnbnx8cHJlY2VlZGluZy5kZWxpbSkpOihyZXQ9Zmlyc3Q9bGFzdD1leHByc1swXSxpc05lY2Vzc2FyeXx8KGlzTmVjZXNzYXJ5PW9wZW5pbmcuYmVnaW5zU3RtdCYmKCJ7Ij09PXJldC5pZHx8dHJpZ2dlckZuRXhwcnx8aXNGdW5jdG9yKHJldCkpfHx0cmlnZ2VyRm5FeHByJiYoIWlzRW5kT2ZFeHByKCl8fCJ9IiE9PXN0YXRlLnRva2Vucy5wcmV2LmlkKXx8aXNGdW5jdG9yKHJldCkmJiFpc0VuZE9mRXhwcigpfHwieyI9PT1yZXQuaWQmJiI9PiI9PT1wcmVjZWVkaW5nLmlkfHwiKG51bWJlcikiPT09cmV0LnR5cGUmJmNoZWNrUHVuY3R1YXRvcihwbiwiLiIpJiYvXlxcZCskLy50ZXN0KHJldC52YWx1ZSkpKSxyZXQmJighaXNOZWNlc3NhcnkmJihmaXJzdC5sZWZ0fHxmaXJzdC5yaWdodHx8cmV0LmV4cHJzKSYmKGlzTmVjZXNzYXJ5PSFpc0JlZ2luT2ZFeHByKHByZWNlZWRpbmcpJiZmaXJzdC5sYnA8PXByZWNlZWRpbmcubGJwfHwhaXNFbmRPZkV4cHIoKSYmbGFzdC5sYnA8c3RhdGUudG9rZW5zLm5leHQubGJwKSxpc05lY2Vzc2FyeXx8d2FybmluZygiVzEyNiIsb3BlbmluZykscmV0LnBhcmVuPSEwKSxyZXQpOnZvaWQgMH0pLGFwcGxpY2F0aW9uKCI9PiIpLGluZml4KCJbIixmdW5jdGlvbihsZWZ0LHRoYXQpe3ZhciBzLGU9ZXhwcmVzc2lvbigxMCk7cmV0dXJuIGUmJiIoc3RyaW5nKSI9PT1lLnR5cGUmJihzdGF0ZS5vcHRpb24uZXZpbHx8ImV2YWwiIT09ZS52YWx1ZSYmImV4ZWNTY3JpcHQiIT09ZS52YWx1ZXx8aXNHbG9iYWxFdmFsKGxlZnQsc3RhdGUpJiZ3YXJuaW5nKCJXMDYxIiksY291bnRNZW1iZXIoZS52YWx1ZSksIXN0YXRlLm9wdGlvbi5zdWImJnJlZy5pZGVudGlmaWVyLnRlc3QoZS52YWx1ZSkmJihzPXN0YXRlLnN5bnRheFtlLnZhbHVlXSxzJiZpc1Jlc2VydmVkKHMpfHx3YXJuaW5nKCJXMDY5IixzdGF0ZS50b2tlbnMucHJldixlLnZhbHVlKSkpLGFkdmFuY2UoIl0iLHRoYXQpLGUmJiJoYXNPd25Qcm9wZXJ0eSI9PT1lLnZhbHVlJiYiPSI9PT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZSYmd2FybmluZygiVzAwMSIpLHRoYXQubGVmdD1sZWZ0LHRoYXQucmlnaHQ9ZSx0aGF0fSwxNjAsITApLHByZWZpeCgiWyIsZnVuY3Rpb24oKXt2YXIgYmxvY2t0eXBlPWxvb2t1cEJsb2NrVHlwZSgpO2lmKGJsb2NrdHlwZS5pc0NvbXBBcnJheSlyZXR1cm4gc3RhdGUub3B0aW9uLmVzbmV4dHx8c3RhdGUuaW5Nb3ooKXx8d2FybmluZygiVzExOCIsc3RhdGUudG9rZW5zLmN1cnIsImFycmF5IGNvbXByZWhlbnNpb24iKSxjb21wcmVoZW5zaXZlQXJyYXlFeHByZXNzaW9uKCk7aWYoYmxvY2t0eXBlLmlzRGVzdEFzc2lnbilyZXR1cm4gdGhpcy5kZXN0cnVjdEFzc2lnbj1kZXN0cnVjdHVyaW5nUGF0dGVybih7b3BlbmluZ1BhcnNlZDohMCxhc3NpZ25tZW50OiEwfSksdGhpczt2YXIgYj1zdGF0ZS50b2tlbnMuY3Vyci5saW5lIT09c3RhcnRMaW5lKHN0YXRlLnRva2Vucy5uZXh0KTtmb3IodGhpcy5maXJzdD1bXSxiJiYoaW5kZW50Kz1zdGF0ZS5vcHRpb24uaW5kZW50LHN0YXRlLnRva2Vucy5uZXh0LmZyb209PT1pbmRlbnQrc3RhdGUub3B0aW9uLmluZGVudCYmKGluZGVudCs9c3RhdGUub3B0aW9uLmluZGVudCkpOyIoZW5kKSIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZDspe2Zvcig7IiwiPT09c3RhdGUudG9rZW5zLm5leHQuaWQ7KXtpZighc3RhdGUub3B0aW9uLmVsaXNpb24pe2lmKHN0YXRlLmluRVM1KCkpe3dhcm5pbmcoIlcxMjgiKTtkbyBhZHZhbmNlKCIsIik7d2hpbGUoIiwiPT09c3RhdGUudG9rZW5zLm5leHQuaWQpO2NvbnRpbnVlfXdhcm5pbmcoIlcwNzAiKX1hZHZhbmNlKCIsIil9aWYoIl0iPT09c3RhdGUudG9rZW5zLm5leHQuaWQpYnJlYWs7aWYodGhpcy5maXJzdC5wdXNoKGV4cHJlc3Npb24oMTApKSwiLCIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZClicmVhaztpZihjb21tYSh7YWxsb3dUcmFpbGluZzohMH0pLCJdIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkJiYhc3RhdGUuaW5FUzUoKSl7d2FybmluZygiVzA3MCIsc3RhdGUudG9rZW5zLmN1cnIpO2JyZWFrfX1yZXR1cm4gYiYmKGluZGVudC09c3RhdGUub3B0aW9uLmluZGVudCksYWR2YW5jZSgiXSIsdGhpcyksdGhpc30pLGZ1bmN0aW9uKHgpe3gubnVkPWZ1bmN0aW9uKCl7dmFyIGIsZixpLHAsdCxuZXh0VmFsLGlzR2VuZXJhdG9yTWV0aG9kPSExLHByb3BzPU9iamVjdC5jcmVhdGUobnVsbCk7Yj1zdGF0ZS50b2tlbnMuY3Vyci5saW5lIT09c3RhcnRMaW5lKHN0YXRlLnRva2Vucy5uZXh0KSxiJiYoaW5kZW50Kz1zdGF0ZS5vcHRpb24uaW5kZW50LHN0YXRlLnRva2Vucy5uZXh0LmZyb209PT1pbmRlbnQrc3RhdGUub3B0aW9uLmluZGVudCYmKGluZGVudCs9c3RhdGUub3B0aW9uLmluZGVudCkpO3ZhciBibG9ja3R5cGU9bG9va3VwQmxvY2tUeXBlKCk7aWYoYmxvY2t0eXBlLmlzRGVzdEFzc2lnbilyZXR1cm4gdGhpcy5kZXN0cnVjdEFzc2lnbj1kZXN0cnVjdHVyaW5nUGF0dGVybih7b3BlbmluZ1BhcnNlZDohMCxhc3NpZ25tZW50OiEwfSksdGhpcztmb3IoOyJ9IiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkOyl7aWYobmV4dFZhbD1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZSwhc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllcnx8IiwiIT09cGVla0lnbm9yZUVPTCgpLmlkJiYifSIhPT1wZWVrSWdub3JlRU9MKCkuaWQpaWYoIjoiPT09cGVlaygpLmlkfHwiZ2V0IiE9PW5leHRWYWwmJiJzZXQiIT09bmV4dFZhbCl7aWYoIioiPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUmJiIocHVuY3R1YXRvcikiPT09c3RhdGUudG9rZW5zLm5leHQudHlwZT8oc3RhdGUuaW5FUzYoKXx8d2FybmluZygiVzEwNCIsc3RhdGUudG9rZW5zLm5leHQsImdlbmVyYXRvciBmdW5jdGlvbnMiLCI2IiksYWR2YW5jZSgiKiIpLGlzR2VuZXJhdG9yTWV0aG9kPSEwKTppc0dlbmVyYXRvck1ldGhvZD0hMSwiWyI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZClpPWNvbXB1dGVkUHJvcGVydHlOYW1lKCksc3RhdGUubmFtZVN0YWNrLnNldChpKTtlbHNlIGlmKHN0YXRlLm5hbWVTdGFjay5zZXQoc3RhdGUudG9rZW5zLm5leHQpLGk9cHJvcGVydHlOYW1lKCksc2F2ZVByb3BlcnR5KHByb3BzLGksc3RhdGUudG9rZW5zLm5leHQpLCJzdHJpbmciIT10eXBlb2YgaSlicmVhazsiKCI9PT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZT8oc3RhdGUuaW5FUzYoKXx8d2FybmluZygiVzEwNCIsc3RhdGUudG9rZW5zLmN1cnIsImNvbmNpc2UgbWV0aG9kcyIsIjYiKSxkb0Z1bmN0aW9uKHt0eXBlOmlzR2VuZXJhdG9yTWV0aG9kPyJnZW5lcmF0b3IiOm51bGx9KSk6KGFkdmFuY2UoIjoiKSxleHByZXNzaW9uKDEwKSl9ZWxzZSBhZHZhbmNlKG5leHRWYWwpLHN0YXRlLmluRVM1KCl8fGVycm9yKCJFMDM0IiksaT1wcm9wZXJ0eU5hbWUoKSxpfHxzdGF0ZS5pbkVTNigpfHxlcnJvcigiRTAzNSIpLGkmJnNhdmVBY2Nlc3NvcihuZXh0VmFsLHByb3BzLGksc3RhdGUudG9rZW5zLmN1cnIpLHQ9c3RhdGUudG9rZW5zLm5leHQsZj1kb0Z1bmN0aW9uKCkscD1mWyIocGFyYW1zKSJdLCJnZXQiPT09bmV4dFZhbCYmaSYmcD93YXJuaW5nKCJXMDc2Iix0LHBbMF0saSk6InNldCIhPT1uZXh0VmFsfHwhaXx8cCYmMT09PXAubGVuZ3RofHx3YXJuaW5nKCJXMDc3Iix0LGkpO2Vsc2Ugc3RhdGUuaW5FUzYoKXx8d2FybmluZygiVzEwNCIsc3RhdGUudG9rZW5zLm5leHQsIm9iamVjdCBzaG9ydCBub3RhdGlvbiIsIjYiKSxpPXByb3BlcnR5TmFtZSghMCksc2F2ZVByb3BlcnR5KHByb3BzLGksc3RhdGUudG9rZW5zLm5leHQpLGV4cHJlc3Npb24oMTApO2lmKGNvdW50TWVtYmVyKGkpLCIsIiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkKWJyZWFrO2NvbW1hKHthbGxvd1RyYWlsaW5nOiEwLHByb3BlcnR5OiEwfSksIiwiPT09c3RhdGUudG9rZW5zLm5leHQuaWQ/d2FybmluZygiVzA3MCIsc3RhdGUudG9rZW5zLmN1cnIpOiJ9IiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkfHxzdGF0ZS5pbkVTNSgpfHx3YXJuaW5nKCJXMDcwIixzdGF0ZS50b2tlbnMuY3Vycil9cmV0dXJuIGImJihpbmRlbnQtPXN0YXRlLm9wdGlvbi5pbmRlbnQpLGFkdmFuY2UoIn0iLHRoaXMpLGNoZWNrUHJvcGVydGllcyhwcm9wcyksdGhpc30seC5mdWQ9ZnVuY3Rpb24oKXtlcnJvcigiRTAzNiIsc3RhdGUudG9rZW5zLmN1cnIpfX0oZGVsaW0oInsiKSk7dmFyIGNvbnN0c3RhdGVtZW50PXN0bXQoImNvbnN0IixmdW5jdGlvbihjb250ZXh0KXtyZXR1cm4gYmxvY2tWYXJpYWJsZVN0YXRlbWVudCgiY29uc3QiLHRoaXMsY29udGV4dCl9KTtjb25zdHN0YXRlbWVudC5leHBzPSEwO3ZhciBsZXRzdGF0ZW1lbnQ9c3RtdCgibGV0IixmdW5jdGlvbihjb250ZXh0KXtyZXR1cm4gYmxvY2tWYXJpYWJsZVN0YXRlbWVudCgibGV0Iix0aGlzLGNvbnRleHQpfSk7bGV0c3RhdGVtZW50LmV4cHM9ITA7dmFyIHZhcnN0YXRlbWVudD1zdG10KCJ2YXIiLGZ1bmN0aW9uKGNvbnRleHQpe3ZhciB0b2tlbnMsbG9uZSx2YWx1ZSxwcmVmaXg9Y29udGV4dCYmY29udGV4dC5wcmVmaXgsaW5leHBvcnQ9Y29udGV4dCYmY29udGV4dC5pbmV4cG9ydCxpbXBsaWVkPWNvbnRleHQmJmNvbnRleHQuaW1wbGllZCxyZXBvcnQ9IShjb250ZXh0JiZjb250ZXh0Lmlnbm9yZSk7Zm9yKHRoaXMuZmlyc3Q9W107Oyl7dmFyIG5hbWVzPVtdO18uY29udGFpbnMoWyJ7IiwiWyJdLHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKT8odG9rZW5zPWRlc3RydWN0dXJpbmdQYXR0ZXJuKCksbG9uZT0hMSk6KHRva2Vucz1be2lkOmlkZW50aWZpZXIoKSx0b2tlbjpzdGF0ZS50b2tlbnMuY3Vycn1dLGxvbmU9ITApLHByZWZpeCYmaW1wbGllZHx8IXJlcG9ydHx8IXN0YXRlLm9wdGlvbi52YXJzdG10fHx3YXJuaW5nKCJXMTMyIix0aGlzKSx0aGlzLmZpcnN0PXRoaXMuZmlyc3QuY29uY2F0KG5hbWVzKTtmb3IodmFyIHQgaW4gdG9rZW5zKXRva2Vucy5oYXNPd25Qcm9wZXJ0eSh0KSYmKHQ9dG9rZW5zW3RdLCFpbXBsaWVkJiZzdGF0ZS5mdW5jdFsiKGdsb2JhbCkiXSYmKHByZWRlZmluZWRbdC5pZF09PT0hMT93YXJuaW5nKCJXMDc5Iix0LnRva2VuLHQuaWQpOnN0YXRlLm9wdGlvbi5mdXR1cmVob3N0aWxlPT09ITEmJighc3RhdGUuaW5FUzUoKSYmdmFycy5lY21hSWRlbnRpZmllcnNbNV1bdC5pZF09PT0hMXx8IXN0YXRlLmluRVM2KCkmJnZhcnMuZWNtYUlkZW50aWZpZXJzWzZdW3QuaWRdPT09ITEpJiZ3YXJuaW5nKCJXMTI5Iix0LnRva2VuLHQuaWQpKSx0LmlkJiYoImZvciI9PT1pbXBsaWVkPyhzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmhhcyh0LmlkKXx8cmVwb3J0JiZ3YXJuaW5nKCJXMDg4Iix0LnRva2VuLHQuaWQpLHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2sudXNlKHQuaWQsdC50b2tlbikpOihzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmFkZGxhYmVsKHQuaWQse3R5cGU6InZhciIsdG9rZW46dC50b2tlbn0pLGxvbmUmJmluZXhwb3J0JiZzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnNldEV4cG9ydGVkKHQuaWQsdC50b2tlbikpLG5hbWVzLnB1c2godC50b2tlbikpKTtpZigiPSI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmKHN0YXRlLm5hbWVTdGFjay5zZXQoc3RhdGUudG9rZW5zLmN1cnIpLGFkdmFuY2UoIj0iKSxwcmVmaXh8fCFyZXBvcnR8fHN0YXRlLmZ1bmN0WyIobG9vcGFnZSkiXXx8InVuZGVmaW5lZCIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZHx8d2FybmluZygiVzA4MCIsc3RhdGUudG9rZW5zLnByZXYsc3RhdGUudG9rZW5zLnByZXYudmFsdWUpLCI9Ij09PXBlZWsoMCkuaWQmJnN0YXRlLnRva2Vucy5uZXh0LmlkZW50aWZpZXImJighcHJlZml4JiZyZXBvcnQmJiFzdGF0ZS5mdW5jdFsiKHBhcmFtcykiXXx8LTE9PT1zdGF0ZS5mdW5jdFsiKHBhcmFtcykiXS5pbmRleE9mKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSkmJndhcm5pbmcoIlcxMjAiLHN0YXRlLnRva2Vucy5uZXh0LHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSx2YWx1ZT1leHByZXNzaW9uKHByZWZpeD8xMjA6MTApLGxvbmU/dG9rZW5zWzBdLmZpcnN0PXZhbHVlOmRlc3RydWN0dXJpbmdQYXR0ZXJuTWF0Y2gobmFtZXMsdmFsdWUpKSwiLCIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZClicmVhaztjb21tYSgpfXJldHVybiB0aGlzfSk7dmFyc3RhdGVtZW50LmV4cHM9ITAsYmxvY2tzdG10KCJjbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gY2xhc3NkZWYuY2FsbCh0aGlzLCEwKX0pLGJsb2Nrc3RtdCgiZnVuY3Rpb24iLGZ1bmN0aW9uKGNvbnRleHQpe3ZhciBpbmV4cG9ydD1jb250ZXh0JiZjb250ZXh0LmluZXhwb3J0LGdlbmVyYXRvcj0hMTsiKiI9PT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZSYmKGFkdmFuY2UoIioiKSxzdGF0ZS5pbkVTNih7c3RyaWN0OiEwfSk/Z2VuZXJhdG9yPSEwOndhcm5pbmcoIlcxMTkiLHN0YXRlLnRva2Vucy5jdXJyLCJmdW5jdGlvbioiLCI2IikpLGluYmxvY2smJndhcm5pbmcoIlcwODIiLHN0YXRlLnRva2Vucy5jdXJyKTt2YXIgaT1vcHRpb25hbGlkZW50aWZpZXIoKTtyZXR1cm4gc3RhdGUuZnVuY3RbIihzY29wZSkiXS5hZGRsYWJlbChpLHt0eXBlOiJmdW5jdGlvbiIsdG9rZW46c3RhdGUudG9rZW5zLmN1cnJ9KSx2b2lkIDA9PT1pP3dhcm5pbmcoIlcwMjUiKTppbmV4cG9ydCYmc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zZXRFeHBvcnRlZChpLHN0YXRlLnRva2Vucy5wcmV2KSxkb0Z1bmN0aW9uKHtuYW1lOmksc3RhdGVtZW50OnRoaXMsdHlwZTpnZW5lcmF0b3I/ImdlbmVyYXRvciI6bnVsbCxpZ25vcmVMb29wRnVuYzppbmJsb2NrfSksIigiPT09c3RhdGUudG9rZW5zLm5leHQuaWQmJnN0YXRlLnRva2Vucy5uZXh0LmxpbmU9PT1zdGF0ZS50b2tlbnMuY3Vyci5saW5lJiZlcnJvcigiRTAzOSIpLHRoaXN9KSxwcmVmaXgoImZ1bmN0aW9uIixmdW5jdGlvbigpe3ZhciBnZW5lcmF0b3I9ITE7IioiPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUmJihzdGF0ZS5pbkVTNigpfHx3YXJuaW5nKCJXMTE5IixzdGF0ZS50b2tlbnMuY3VyciwiZnVuY3Rpb24qIiwiNiIpLGFkdmFuY2UoIioiKSxnZW5lcmF0b3I9ITApO3ZhciBpPW9wdGlvbmFsaWRlbnRpZmllcigpO3JldHVybiBkb0Z1bmN0aW9uKHtuYW1lOmksdHlwZTpnZW5lcmF0b3I/ImdlbmVyYXRvciI6bnVsbH0pLHRoaXN9KSxibG9ja3N0bXQoImlmIixmdW5jdGlvbigpe3ZhciB0PXN0YXRlLnRva2Vucy5uZXh0O2luY3JlYXNlQ29tcGxleGl0eUNvdW50KCksc3RhdGUuY29uZGl0aW9uPSEwLGFkdmFuY2UoIigiKTt2YXIgZXhwcj1leHByZXNzaW9uKDApO2NoZWNrQ29uZEFzc2lnbm1lbnQoZXhwcik7dmFyIGZvcmluaWZjaGVjaz1udWxsO3N0YXRlLm9wdGlvbi5mb3JpbiYmc3RhdGUuZm9yaW5pZmNoZWNrbmVlZGVkJiYoc3RhdGUuZm9yaW5pZmNoZWNrbmVlZGVkPSExLGZvcmluaWZjaGVjaz1zdGF0ZS5mb3JpbmlmY2hlY2tzW3N0YXRlLmZvcmluaWZjaGVja3MubGVuZ3RoLTFdLGZvcmluaWZjaGVjay50eXBlPSIocHVuY3R1YXRvcikiPT09ZXhwci50eXBlJiYiISI9PT1leHByLnZhbHVlPyIobmVnYXRpdmUpIjoiKHBvc2l0aXZlKSIpLGFkdmFuY2UoIikiLHQpLHN0YXRlLmNvbmRpdGlvbj0hMTt2YXIgcz1ibG9jayghMCwhMCk7cmV0dXJuIGZvcmluaWZjaGVjayYmIihuZWdhdGl2ZSkiPT09Zm9yaW5pZmNoZWNrLnR5cGUmJnMmJnNbMF0mJiIoaWRlbnRpZmllcikiPT09c1swXS50eXBlJiYiY29udGludWUiPT09c1swXS52YWx1ZSYmKGZvcmluaWZjaGVjay50eXBlPSIobmVnYXRpdmUtd2l0aC1jb250aW51ZSkiKSwiZWxzZSI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmKGFkdmFuY2UoImVsc2UiKSwiaWYiPT09c3RhdGUudG9rZW5zLm5leHQuaWR8fCJzd2l0Y2giPT09c3RhdGUudG9rZW5zLm5leHQuaWQ/c3RhdGVtZW50KCk6YmxvY2soITAsITApKSx0aGlzfSksYmxvY2tzdG10KCJ0cnkiLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZG9DYXRjaCgpe2lmKGFkdmFuY2UoImNhdGNoIiksYWR2YW5jZSgiKCIpLHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uc3RhY2soImNhdGNocGFyYW1zIiksY2hlY2tQdW5jdHVhdG9ycyhzdGF0ZS50b2tlbnMubmV4dCxbIlsiLCJ7Il0pKXt2YXIgdG9rZW5zPWRlc3RydWN0dXJpbmdQYXR0ZXJuKCk7Xy5lYWNoKHRva2VucyxmdW5jdGlvbih0b2tlbil7dG9rZW4uaWQmJnN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkUGFyYW0odG9rZW4uaWQsdG9rZW4sImV4Y2VwdGlvbiIpfSl9ZWxzZSIoaWRlbnRpZmllcikiIT09c3RhdGUudG9rZW5zLm5leHQudHlwZT93YXJuaW5nKCJFMDMwIixzdGF0ZS50b2tlbnMubmV4dCxzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSk6c3RhdGUuZnVuY3RbIihzY29wZSkiXS5hZGRQYXJhbShpZGVudGlmaWVyKCksc3RhdGUudG9rZW5zLmN1cnIsImV4Y2VwdGlvbiIpOyJpZiI9PT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZSYmKHN0YXRlLmluTW96KCl8fHdhcm5pbmcoIlcxMTgiLHN0YXRlLnRva2Vucy5jdXJyLCJjYXRjaCBmaWx0ZXIiKSxhZHZhbmNlKCJpZiIpLGV4cHJlc3Npb24oMCkpLGFkdmFuY2UoIikiKSxibG9jayghMSksc3RhdGUuZnVuY3RbIihzY29wZSkiXS51bnN0YWNrKCl9dmFyIGI7Zm9yKGJsb2NrKCEwKTsiY2F0Y2giPT09c3RhdGUudG9rZW5zLm5leHQuaWQ7KWluY3JlYXNlQ29tcGxleGl0eUNvdW50KCksYiYmIXN0YXRlLmluTW96KCkmJndhcm5pbmcoIlcxMTgiLHN0YXRlLnRva2Vucy5uZXh0LCJtdWx0aXBsZSBjYXRjaCBibG9ja3MiKSxkb0NhdGNoKCksYj0hMDtyZXR1cm4iZmluYWxseSI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZD8oYWR2YW5jZSgiZmluYWxseSIpLGJsb2NrKCEwKSx2b2lkIDApOihifHxlcnJvcigiRTAyMSIsc3RhdGUudG9rZW5zLm5leHQsImNhdGNoIixzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSksdGhpcyl9KSxibG9ja3N0bXQoIndoaWxlIixmdW5jdGlvbigpe3ZhciB0PXN0YXRlLnRva2Vucy5uZXh0O3JldHVybiBzdGF0ZS5mdW5jdFsiKGJyZWFrYWdlKSJdKz0xLHN0YXRlLmZ1bmN0WyIobG9vcGFnZSkiXSs9MSxpbmNyZWFzZUNvbXBsZXhpdHlDb3VudCgpLGFkdmFuY2UoIigiKSxjaGVja0NvbmRBc3NpZ25tZW50KGV4cHJlc3Npb24oMCkpLGFkdmFuY2UoIikiLHQpLGJsb2NrKCEwLCEwKSxzdGF0ZS5mdW5jdFsiKGJyZWFrYWdlKSJdLT0xLHN0YXRlLmZ1bmN0WyIobG9vcGFnZSkiXS09MSx0aGlzfSkubGFiZWxsZWQ9ITAsYmxvY2tzdG10KCJ3aXRoIixmdW5jdGlvbigpe3ZhciB0PXN0YXRlLnRva2Vucy5uZXh0O3JldHVybiBzdGF0ZS5pc1N0cmljdCgpP2Vycm9yKCJFMDEwIixzdGF0ZS50b2tlbnMuY3Vycik6c3RhdGUub3B0aW9uLndpdGhzdG10fHx3YXJuaW5nKCJXMDg1IixzdGF0ZS50b2tlbnMuY3VyciksYWR2YW5jZSgiKCIpLGV4cHJlc3Npb24oMCksYWR2YW5jZSgiKSIsdCksYmxvY2soITAsITApLHRoaXN9KSxibG9ja3N0bXQoInN3aXRjaCIsZnVuY3Rpb24oKXt2YXIgdD1zdGF0ZS50b2tlbnMubmV4dCxnPSExLG5vaW5kZW50PSExO1xuZm9yKHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0rPTEsYWR2YW5jZSgiKCIpLGNoZWNrQ29uZEFzc2lnbm1lbnQoZXhwcmVzc2lvbigwKSksYWR2YW5jZSgiKSIsdCksdD1zdGF0ZS50b2tlbnMubmV4dCxhZHZhbmNlKCJ7Iiksc3RhdGUudG9rZW5zLm5leHQuZnJvbT09PWluZGVudCYmKG5vaW5kZW50PSEwKSxub2luZGVudHx8KGluZGVudCs9c3RhdGUub3B0aW9uLmluZGVudCksdGhpcy5jYXNlcz1bXTs7KXN3aXRjaChzdGF0ZS50b2tlbnMubmV4dC5pZCl7Y2FzZSJjYXNlIjpzd2l0Y2goc3RhdGUuZnVuY3RbIih2ZXJiKSJdKXtjYXNlInlpZWxkIjpjYXNlImJyZWFrIjpjYXNlImNhc2UiOmNhc2UiY29udGludWUiOmNhc2UicmV0dXJuIjpjYXNlInN3aXRjaCI6Y2FzZSJ0aHJvdyI6YnJlYWs7ZGVmYXVsdDpzdGF0ZS50b2tlbnMuY3Vyci5jYXNlRmFsbHNUaHJvdWdofHx3YXJuaW5nKCJXMDg2IixzdGF0ZS50b2tlbnMuY3VyciwiY2FzZSIpfWFkdmFuY2UoImNhc2UiKSx0aGlzLmNhc2VzLnB1c2goZXhwcmVzc2lvbigwKSksaW5jcmVhc2VDb21wbGV4aXR5Q291bnQoKSxnPSEwLGFkdmFuY2UoIjoiKSxzdGF0ZS5mdW5jdFsiKHZlcmIpIl09ImNhc2UiO2JyZWFrO2Nhc2UiZGVmYXVsdCI6c3dpdGNoKHN0YXRlLmZ1bmN0WyIodmVyYikiXSl7Y2FzZSJ5aWVsZCI6Y2FzZSJicmVhayI6Y2FzZSJjb250aW51ZSI6Y2FzZSJyZXR1cm4iOmNhc2UidGhyb3ciOmJyZWFrO2RlZmF1bHQ6dGhpcy5jYXNlcy5sZW5ndGgmJihzdGF0ZS50b2tlbnMuY3Vyci5jYXNlRmFsbHNUaHJvdWdofHx3YXJuaW5nKCJXMDg2IixzdGF0ZS50b2tlbnMuY3VyciwiZGVmYXVsdCIpKX1hZHZhbmNlKCJkZWZhdWx0IiksZz0hMCxhZHZhbmNlKCI6Iik7YnJlYWs7Y2FzZSJ9IjpyZXR1cm4gbm9pbmRlbnR8fChpbmRlbnQtPXN0YXRlLm9wdGlvbi5pbmRlbnQpLGFkdmFuY2UoIn0iLHQpLHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0tPTEsc3RhdGUuZnVuY3RbIih2ZXJiKSJdPXZvaWQgMCx2b2lkIDA7Y2FzZSIoZW5kKSI6cmV0dXJuIGVycm9yKCJFMDIzIixzdGF0ZS50b2tlbnMubmV4dCwifSIpLHZvaWQgMDtkZWZhdWx0OmlmKGluZGVudCs9c3RhdGUub3B0aW9uLmluZGVudCxnKXN3aXRjaChzdGF0ZS50b2tlbnMuY3Vyci5pZCl7Y2FzZSIsIjpyZXR1cm4gZXJyb3IoIkUwNDAiKSx2b2lkIDA7Y2FzZSI6IjpnPSExLHN0YXRlbWVudHMoKTticmVhaztkZWZhdWx0OnJldHVybiBlcnJvcigiRTAyNSIsc3RhdGUudG9rZW5zLmN1cnIpLHZvaWQgMH1lbHNle2lmKCI6IiE9PXN0YXRlLnRva2Vucy5jdXJyLmlkKXJldHVybiBlcnJvcigiRTAyMSIsc3RhdGUudG9rZW5zLm5leHQsImNhc2UiLHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSx2b2lkIDA7YWR2YW5jZSgiOiIpLGVycm9yKCJFMDI0IixzdGF0ZS50b2tlbnMuY3VyciwiOiIpLHN0YXRlbWVudHMoKX1pbmRlbnQtPXN0YXRlLm9wdGlvbi5pbmRlbnR9cmV0dXJuIHRoaXN9KS5sYWJlbGxlZD0hMCxzdG10KCJkZWJ1Z2dlciIsZnVuY3Rpb24oKXtyZXR1cm4gc3RhdGUub3B0aW9uLmRlYnVnfHx3YXJuaW5nKCJXMDg3Iix0aGlzKSx0aGlzfSkuZXhwcz0hMCxmdW5jdGlvbigpe3ZhciB4PXN0bXQoImRvIixmdW5jdGlvbigpe3N0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0rPTEsc3RhdGUuZnVuY3RbIihsb29wYWdlKSJdKz0xLGluY3JlYXNlQ29tcGxleGl0eUNvdW50KCksdGhpcy5maXJzdD1ibG9jayghMCwhMCksYWR2YW5jZSgid2hpbGUiKTt2YXIgdD1zdGF0ZS50b2tlbnMubmV4dDtyZXR1cm4gYWR2YW5jZSgiKCIpLGNoZWNrQ29uZEFzc2lnbm1lbnQoZXhwcmVzc2lvbigwKSksYWR2YW5jZSgiKSIsdCksc3RhdGUuZnVuY3RbIihicmVha2FnZSkiXS09MSxzdGF0ZS5mdW5jdFsiKGxvb3BhZ2UpIl0tPTEsdGhpc30pO3gubGFiZWxsZWQ9ITAseC5leHBzPSEwfSgpLGJsb2Nrc3RtdCgiZm9yIixmdW5jdGlvbigpe3ZhciBzLHQ9c3RhdGUudG9rZW5zLm5leHQsbGV0c2NvcGU9ITEsZm9yZWFjaHRvaz1udWxsOyJlYWNoIj09PXQudmFsdWUmJihmb3JlYWNodG9rPXQsYWR2YW5jZSgiZWFjaCIpLHN0YXRlLmluTW96KCl8fHdhcm5pbmcoIlcxMTgiLHN0YXRlLnRva2Vucy5jdXJyLCJmb3IgZWFjaCIpKSxpbmNyZWFzZUNvbXBsZXhpdHlDb3VudCgpLGFkdmFuY2UoIigiKTt2YXIgbmV4dG9wLGNvbW1hLGluaXRpYWxpemVyLGk9MCxpbm9mPVsiaW4iLCJvZiJdLGxldmVsPTA7Y2hlY2tQdW5jdHVhdG9ycyhzdGF0ZS50b2tlbnMubmV4dCxbInsiLCJbIl0pJiYrK2xldmVsO2Rve2lmKG5leHRvcD1wZWVrKGkpLCsraSxjaGVja1B1bmN0dWF0b3JzKG5leHRvcCxbInsiLCJbIl0pPysrbGV2ZWw6Y2hlY2tQdW5jdHVhdG9ycyhuZXh0b3AsWyJ9IiwiXSJdKSYmLS1sZXZlbCwwPmxldmVsKWJyZWFrOzA9PT1sZXZlbCYmKCFjb21tYSYmY2hlY2tQdW5jdHVhdG9yKG5leHRvcCwiLCIpP2NvbW1hPW5leHRvcDohaW5pdGlhbGl6ZXImJmNoZWNrUHVuY3R1YXRvcihuZXh0b3AsIj0iKSYmKGluaXRpYWxpemVyPW5leHRvcCkpfXdoaWxlKGxldmVsPjB8fCFfLmNvbnRhaW5zKGlub2YsbmV4dG9wLnZhbHVlKSYmIjsiIT09bmV4dG9wLnZhbHVlJiYiKGVuZCkiIT09bmV4dG9wLnR5cGUpO2lmKF8uY29udGFpbnMoaW5vZixuZXh0b3AudmFsdWUpKXtzdGF0ZS5pbkVTNigpfHwib2YiIT09bmV4dG9wLnZhbHVlfHx3YXJuaW5nKCJXMTA0IixuZXh0b3AsImZvciBvZiIsIjYiKTt2YXIgb2s9IShpbml0aWFsaXplcnx8Y29tbWEpO2lmKGluaXRpYWxpemVyJiZlcnJvcigiVzEzMyIsY29tbWEsbmV4dG9wLnZhbHVlLCJpbml0aWFsaXplciBpcyBmb3JiaWRkZW4iKSxjb21tYSYmZXJyb3IoIlcxMzMiLGNvbW1hLG5leHRvcC52YWx1ZSwibW9yZSB0aGFuIG9uZSBGb3JCaW5kaW5nIiksInZhciI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZD8oYWR2YW5jZSgidmFyIiksc3RhdGUudG9rZW5zLmN1cnIuZnVkKHtwcmVmaXg6ITB9KSk6ImxldCI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZHx8ImNvbnN0Ij09PXN0YXRlLnRva2Vucy5uZXh0LmlkPyhhZHZhbmNlKHN0YXRlLnRva2Vucy5uZXh0LmlkKSxsZXRzY29wZT0hMCxzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnN0YWNrKCksc3RhdGUudG9rZW5zLmN1cnIuZnVkKHtwcmVmaXg6ITB9KSk6T2JqZWN0LmNyZWF0ZSh2YXJzdGF0ZW1lbnQpLmZ1ZCh7cHJlZml4OiEwLGltcGxpZWQ6ImZvciIsaWdub3JlOiFva30pLGFkdmFuY2UobmV4dG9wLnZhbHVlKSxleHByZXNzaW9uKDIwKSxhZHZhbmNlKCIpIix0KSwiaW4iPT09bmV4dG9wLnZhbHVlJiZzdGF0ZS5vcHRpb24uZm9yaW4mJihzdGF0ZS5mb3JpbmlmY2hlY2tuZWVkZWQ9ITAsdm9pZCAwPT09c3RhdGUuZm9yaW5pZmNoZWNrcyYmKHN0YXRlLmZvcmluaWZjaGVja3M9W10pLHN0YXRlLmZvcmluaWZjaGVja3MucHVzaCh7dHlwZToiKG5vbmUpIn0pKSxzdGF0ZS5mdW5jdFsiKGJyZWFrYWdlKSJdKz0xLHN0YXRlLmZ1bmN0WyIobG9vcGFnZSkiXSs9MSxzPWJsb2NrKCEwLCEwKSwiaW4iPT09bmV4dG9wLnZhbHVlJiZzdGF0ZS5vcHRpb24uZm9yaW4pe2lmKHN0YXRlLmZvcmluaWZjaGVja3MmJnN0YXRlLmZvcmluaWZjaGVja3MubGVuZ3RoPjApe3ZhciBjaGVjaz1zdGF0ZS5mb3JpbmlmY2hlY2tzLnBvcCgpOyhzJiZzLmxlbmd0aD4wJiYoIm9iamVjdCIhPXR5cGVvZiBzWzBdfHwiaWYiIT09c1swXS52YWx1ZSl8fCIocG9zaXRpdmUpIj09PWNoZWNrLnR5cGUmJnMubGVuZ3RoPjF8fCIobmVnYXRpdmUpIj09PWNoZWNrLnR5cGUpJiZ3YXJuaW5nKCJXMDg5Iix0aGlzKX1zdGF0ZS5mb3JpbmlmY2hlY2tuZWVkZWQ9ITF9c3RhdGUuZnVuY3RbIihicmVha2FnZSkiXS09MSxzdGF0ZS5mdW5jdFsiKGxvb3BhZ2UpIl0tPTF9ZWxzZXtpZihmb3JlYWNodG9rJiZlcnJvcigiRTA0NSIsZm9yZWFjaHRvayksIjsiIT09c3RhdGUudG9rZW5zLm5leHQuaWQpaWYoInZhciI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZClhZHZhbmNlKCJ2YXIiKSxzdGF0ZS50b2tlbnMuY3Vyci5mdWQoKTtlbHNlIGlmKCJsZXQiPT09c3RhdGUudG9rZW5zLm5leHQuaWQpYWR2YW5jZSgibGV0IiksbGV0c2NvcGU9ITAsc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zdGFjaygpLHN0YXRlLnRva2Vucy5jdXJyLmZ1ZCgpO2Vsc2UgZm9yKDtleHByZXNzaW9uKDAsImZvciIpLCIsIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkOyljb21tYSgpO2lmKG5vbGluZWJyZWFrKHN0YXRlLnRva2Vucy5jdXJyKSxhZHZhbmNlKCI7Iiksc3RhdGUuZnVuY3RbIihsb29wYWdlKSJdKz0xLCI7IiE9PXN0YXRlLnRva2Vucy5uZXh0LmlkJiZjaGVja0NvbmRBc3NpZ25tZW50KGV4cHJlc3Npb24oMCkpLG5vbGluZWJyZWFrKHN0YXRlLnRva2Vucy5jdXJyKSxhZHZhbmNlKCI7IiksIjsiPT09c3RhdGUudG9rZW5zLm5leHQuaWQmJmVycm9yKCJFMDIxIixzdGF0ZS50b2tlbnMubmV4dCwiKSIsIjsiKSwiKSIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZClmb3IoO2V4cHJlc3Npb24oMCwiZm9yIiksIiwiPT09c3RhdGUudG9rZW5zLm5leHQuaWQ7KWNvbW1hKCk7YWR2YW5jZSgiKSIsdCksc3RhdGUuZnVuY3RbIihicmVha2FnZSkiXSs9MSxibG9jayghMCwhMCksc3RhdGUuZnVuY3RbIihicmVha2FnZSkiXS09MSxzdGF0ZS5mdW5jdFsiKGxvb3BhZ2UpIl0tPTF9cmV0dXJuIGxldHNjb3BlJiZzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnVuc3RhY2soKSx0aGlzfSkubGFiZWxsZWQ9ITAsc3RtdCgiYnJlYWsiLGZ1bmN0aW9uKCl7dmFyIHY9c3RhdGUudG9rZW5zLm5leHQudmFsdWU7cmV0dXJuIHN0YXRlLm9wdGlvbi5hc2l8fG5vbGluZWJyZWFrKHRoaXMpLCI7Ij09PXN0YXRlLnRva2Vucy5uZXh0LmlkfHxzdGF0ZS50b2tlbnMubmV4dC5yZWFjaHx8c3RhdGUudG9rZW5zLmN1cnIubGluZSE9PXN0YXJ0TGluZShzdGF0ZS50b2tlbnMubmV4dCk/MD09PXN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0mJndhcm5pbmcoIlcwNTIiLHN0YXRlLnRva2Vucy5uZXh0LHRoaXMudmFsdWUpOihzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmZ1bmN0Lmhhc0JyZWFrTGFiZWwodil8fHdhcm5pbmcoIlcwOTAiLHN0YXRlLnRva2Vucy5uZXh0LHYpLHRoaXMuZmlyc3Q9c3RhdGUudG9rZW5zLm5leHQsYWR2YW5jZSgpKSxyZWFjaGFibGUodGhpcyksdGhpc30pLmV4cHM9ITAsc3RtdCgiY29udGludWUiLGZ1bmN0aW9uKCl7dmFyIHY9c3RhdGUudG9rZW5zLm5leHQudmFsdWU7cmV0dXJuIDA9PT1zdGF0ZS5mdW5jdFsiKGJyZWFrYWdlKSJdJiZ3YXJuaW5nKCJXMDUyIixzdGF0ZS50b2tlbnMubmV4dCx0aGlzLnZhbHVlKSxzdGF0ZS5mdW5jdFsiKGxvb3BhZ2UpIl18fHdhcm5pbmcoIlcwNTIiLHN0YXRlLnRva2Vucy5uZXh0LHRoaXMudmFsdWUpLHN0YXRlLm9wdGlvbi5hc2l8fG5vbGluZWJyZWFrKHRoaXMpLCI7Ij09PXN0YXRlLnRva2Vucy5uZXh0LmlkfHxzdGF0ZS50b2tlbnMubmV4dC5yZWFjaHx8c3RhdGUudG9rZW5zLmN1cnIubGluZT09PXN0YXJ0TGluZShzdGF0ZS50b2tlbnMubmV4dCkmJihzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmZ1bmN0Lmhhc0JyZWFrTGFiZWwodil8fHdhcm5pbmcoIlcwOTAiLHN0YXRlLnRva2Vucy5uZXh0LHYpLHRoaXMuZmlyc3Q9c3RhdGUudG9rZW5zLm5leHQsYWR2YW5jZSgpKSxyZWFjaGFibGUodGhpcyksdGhpc30pLmV4cHM9ITAsc3RtdCgicmV0dXJuIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmxpbmU9PT1zdGFydExpbmUoc3RhdGUudG9rZW5zLm5leHQpPyI7Ij09PXN0YXRlLnRva2Vucy5uZXh0LmlkfHxzdGF0ZS50b2tlbnMubmV4dC5yZWFjaHx8KHRoaXMuZmlyc3Q9ZXhwcmVzc2lvbigwKSwhdGhpcy5maXJzdHx8IihwdW5jdHVhdG9yKSIhPT10aGlzLmZpcnN0LnR5cGV8fCI9IiE9PXRoaXMuZmlyc3QudmFsdWV8fHRoaXMuZmlyc3QucGFyZW58fHN0YXRlLm9wdGlvbi5ib3NzfHx3YXJuaW5nQXQoIlcwOTMiLHRoaXMuZmlyc3QubGluZSx0aGlzLmZpcnN0LmNoYXJhY3RlcikpOiIocHVuY3R1YXRvcikiPT09c3RhdGUudG9rZW5zLm5leHQudHlwZSYmWyJbIiwieyIsIisiLCItIl0uaW5kZXhPZihzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSk+LTEmJm5vbGluZWJyZWFrKHRoaXMpLHJlYWNoYWJsZSh0aGlzKSx0aGlzfSkuZXhwcz0hMCxmdW5jdGlvbih4KXt4LmV4cHM9ITAseC5sYnA9MjV9KHByZWZpeCgieWllbGQiLGZ1bmN0aW9uKCl7dmFyIHByZXY9c3RhdGUudG9rZW5zLnByZXY7c3RhdGUuaW5FUzYoITApJiYhc3RhdGUuZnVuY3RbIihnZW5lcmF0b3IpIl0/IihjYXRjaCkiPT09c3RhdGUuZnVuY3RbIihuYW1lKSJdJiZzdGF0ZS5mdW5jdFsiKGNvbnRleHQpIl1bIihnZW5lcmF0b3IpIl18fGVycm9yKCJFMDQ2IixzdGF0ZS50b2tlbnMuY3VyciwieWllbGQiKTpzdGF0ZS5pbkVTNigpfHx3YXJuaW5nKCJXMTA0IixzdGF0ZS50b2tlbnMuY3VyciwieWllbGQiLCI2Iiksc3RhdGUuZnVuY3RbIihnZW5lcmF0b3IpIl09InlpZWxkZWQiO3ZhciBkZWxlZ2F0aW5nWWllbGQ9ITE7cmV0dXJuIioiPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUmJihkZWxlZ2F0aW5nWWllbGQ9ITAsYWR2YW5jZSgiKiIpKSx0aGlzLmxpbmUhPT1zdGFydExpbmUoc3RhdGUudG9rZW5zLm5leHQpJiZzdGF0ZS5pbk1veigpP3N0YXRlLm9wdGlvbi5hc2l8fG5vbGluZWJyZWFrKHRoaXMpOigoZGVsZWdhdGluZ1lpZWxkfHwiOyIhPT1zdGF0ZS50b2tlbnMubmV4dC5pZCYmIXN0YXRlLm9wdGlvbi5hc2kmJiFzdGF0ZS50b2tlbnMubmV4dC5yZWFjaCYmc3RhdGUudG9rZW5zLm5leHQubnVkKSYmKG5vYnJlYWtub25hZGphY2VudChzdGF0ZS50b2tlbnMuY3VycixzdGF0ZS50b2tlbnMubmV4dCksdGhpcy5maXJzdD1leHByZXNzaW9uKDEwKSwiKHB1bmN0dWF0b3IpIiE9PXRoaXMuZmlyc3QudHlwZXx8Ij0iIT09dGhpcy5maXJzdC52YWx1ZXx8dGhpcy5maXJzdC5wYXJlbnx8c3RhdGUub3B0aW9uLmJvc3N8fHdhcm5pbmdBdCgiVzA5MyIsdGhpcy5maXJzdC5saW5lLHRoaXMuZmlyc3QuY2hhcmFjdGVyKSksc3RhdGUuaW5Nb3ooKSYmIikiIT09c3RhdGUudG9rZW5zLm5leHQuaWQmJihwcmV2LmxicD4zMHx8IXByZXYuYXNzaWduJiYhaXNFbmRPZkV4cHIoKXx8InlpZWxkIj09PXByZXYuaWQpJiZlcnJvcigiRTA1MCIsdGhpcykpLHRoaXN9KSksc3RtdCgidGhyb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIG5vbGluZWJyZWFrKHRoaXMpLHRoaXMuZmlyc3Q9ZXhwcmVzc2lvbigyMCkscmVhY2hhYmxlKHRoaXMpLHRoaXN9KS5leHBzPSEwLHN0bXQoImltcG9ydCIsZnVuY3Rpb24oKXtpZihzdGF0ZS5pbkVTNigpfHx3YXJuaW5nKCJXMTE5IixzdGF0ZS50b2tlbnMuY3VyciwiaW1wb3J0IiwiNiIpLCIoc3RyaW5nKSI9PT1zdGF0ZS50b2tlbnMubmV4dC50eXBlKXJldHVybiBhZHZhbmNlKCIoc3RyaW5nKSIpLHRoaXM7aWYoc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllcil7aWYodGhpcy5uYW1lPWlkZW50aWZpZXIoKSxzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmFkZGxhYmVsKHRoaXMubmFtZSx7dHlwZToiY29uc3QiLHRva2VuOnN0YXRlLnRva2Vucy5jdXJyfSksIiwiIT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUpcmV0dXJuIGFkdmFuY2UoImZyb20iKSxhZHZhbmNlKCIoc3RyaW5nKSIpLHRoaXM7YWR2YW5jZSgiLCIpfWlmKCIqIj09PXN0YXRlLnRva2Vucy5uZXh0LmlkKWFkdmFuY2UoIioiKSxhZHZhbmNlKCJhcyIpLHN0YXRlLnRva2Vucy5uZXh0LmlkZW50aWZpZXImJih0aGlzLm5hbWU9aWRlbnRpZmllcigpLHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkbGFiZWwodGhpcy5uYW1lLHt0eXBlOiJjb25zdCIsdG9rZW46c3RhdGUudG9rZW5zLmN1cnJ9KSk7ZWxzZSBmb3IoYWR2YW5jZSgieyIpOzspe2lmKCJ9Ij09PXN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKXthZHZhbmNlKCJ9Iik7YnJlYWt9dmFyIGltcG9ydE5hbWU7aWYoImRlZmF1bHQiPT09c3RhdGUudG9rZW5zLm5leHQudHlwZT8oaW1wb3J0TmFtZT0iZGVmYXVsdCIsYWR2YW5jZSgiZGVmYXVsdCIpKTppbXBvcnROYW1lPWlkZW50aWZpZXIoKSwiYXMiPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUmJihhZHZhbmNlKCJhcyIpLGltcG9ydE5hbWU9aWRlbnRpZmllcigpKSxzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmFkZGxhYmVsKGltcG9ydE5hbWUse3R5cGU6ImNvbnN0Iix0b2tlbjpzdGF0ZS50b2tlbnMuY3Vycn0pLCIsIiE9PXN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKXtpZigifSI9PT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZSl7YWR2YW5jZSgifSIpO2JyZWFrfWVycm9yKCJFMDI0IixzdGF0ZS50b2tlbnMubmV4dCxzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSk7YnJlYWt9YWR2YW5jZSgiLCIpfXJldHVybiBhZHZhbmNlKCJmcm9tIiksYWR2YW5jZSgiKHN0cmluZykiKSx0aGlzfSkuZXhwcz0hMCxzdG10KCJleHBvcnQiLGZ1bmN0aW9uKCl7dmFyIHRva2VuLGlkZW50aWZpZXIsb2s9ITA7aWYoc3RhdGUuaW5FUzYoKXx8KHdhcm5pbmcoIlcxMTkiLHN0YXRlLnRva2Vucy5jdXJyLCJleHBvcnQiLCI2Iiksb2s9ITEpLHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2suaXNHbG9iYWwoKXx8KGVycm9yKCJFMDUzIixzdGF0ZS50b2tlbnMuY3Vyciksb2s9ITEpLCIqIj09PXN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKXJldHVybiBhZHZhbmNlKCIqIiksYWR2YW5jZSgiZnJvbSIpLGFkdmFuY2UoIihzdHJpbmcpIiksdGhpcztpZigiZGVmYXVsdCI9PT1zdGF0ZS50b2tlbnMubmV4dC50eXBlKXtzdGF0ZS5uYW1lU3RhY2suc2V0KHN0YXRlLnRva2Vucy5uZXh0KSxhZHZhbmNlKCJkZWZhdWx0Iik7dmFyIGV4cG9ydFR5cGU9c3RhdGUudG9rZW5zLm5leHQuaWQ7cmV0dXJuKCJmdW5jdGlvbiI9PT1leHBvcnRUeXBlfHwiY2xhc3MiPT09ZXhwb3J0VHlwZSkmJih0aGlzLmJsb2NrPSEwKSx0b2tlbj1wZWVrKCksZXhwcmVzc2lvbigxMCksaWRlbnRpZmllcj10b2tlbi52YWx1ZSx0aGlzLmJsb2NrJiYoc3RhdGUuZnVuY3RbIihzY29wZSkiXS5hZGRsYWJlbChpZGVudGlmaWVyLHt0eXBlOmV4cG9ydFR5cGUsdG9rZW46dG9rZW59KSxzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnNldEV4cG9ydGVkKGlkZW50aWZpZXIsdG9rZW4pKSx0aGlzfWlmKCJ7Ij09PXN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKXthZHZhbmNlKCJ7Iik7Zm9yKHZhciBleHBvcnRlZFRva2Vucz1bXTs7KXtpZihzdGF0ZS50b2tlbnMubmV4dC5pZGVudGlmaWVyfHxlcnJvcigiRTAzMCIsc3RhdGUudG9rZW5zLm5leHQsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpLGFkdmFuY2UoKSxleHBvcnRlZFRva2Vucy5wdXNoKHN0YXRlLnRva2Vucy5jdXJyKSwiYXMiPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUmJihhZHZhbmNlKCJhcyIpLHN0YXRlLnRva2Vucy5uZXh0LmlkZW50aWZpZXJ8fGVycm9yKCJFMDMwIixzdGF0ZS50b2tlbnMubmV4dCxzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSksYWR2YW5jZSgpKSwiLCIhPT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZSl7aWYoIn0iPT09c3RhdGUudG9rZW5zLm5leHQudmFsdWUpe2FkdmFuY2UoIn0iKTticmVha31lcnJvcigiRTAyNCIsc3RhdGUudG9rZW5zLm5leHQsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpO2JyZWFrfWFkdmFuY2UoIiwiKX1yZXR1cm4iZnJvbSI9PT1zdGF0ZS50b2tlbnMubmV4dC52YWx1ZT8oYWR2YW5jZSgiZnJvbSIpLGFkdmFuY2UoIihzdHJpbmcpIikpOm9rJiZleHBvcnRlZFRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uKHRva2VuKXtzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnNldEV4cG9ydGVkKHRva2VuLnZhbHVlLHRva2VuKX0pLHRoaXN9aWYoInZhciI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZClhZHZhbmNlKCJ2YXIiKSxzdGF0ZS50b2tlbnMuY3Vyci5mdWQoe2luZXhwb3J0OiEwfSk7ZWxzZSBpZigibGV0Ij09PXN0YXRlLnRva2Vucy5uZXh0LmlkKWFkdmFuY2UoImxldCIpLHN0YXRlLnRva2Vucy5jdXJyLmZ1ZCh7aW5leHBvcnQ6ITB9KTtlbHNlIGlmKCJjb25zdCI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZClhZHZhbmNlKCJjb25zdCIpLHN0YXRlLnRva2Vucy5jdXJyLmZ1ZCh7aW5leHBvcnQ6ITB9KTtlbHNlIGlmKCJmdW5jdGlvbiI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCl0aGlzLmJsb2NrPSEwLGFkdmFuY2UoImZ1bmN0aW9uIiksc3RhdGUuc3ludGF4WyJmdW5jdGlvbiJdLmZ1ZCh7aW5leHBvcnQ6ITB9KTtlbHNlIGlmKCJjbGFzcyI9PT1zdGF0ZS50b2tlbnMubmV4dC5pZCl7dGhpcy5ibG9jaz0hMCxhZHZhbmNlKCJjbGFzcyIpO3ZhciBjbGFzc05hbWVUb2tlbj1zdGF0ZS50b2tlbnMubmV4dDtzdGF0ZS5zeW50YXhbImNsYXNzIl0uZnVkKCksc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zZXRFeHBvcnRlZChjbGFzc05hbWVUb2tlbi52YWx1ZSxjbGFzc05hbWVUb2tlbil9ZWxzZSBlcnJvcigiRTAyNCIsc3RhdGUudG9rZW5zLm5leHQsc3RhdGUudG9rZW5zLm5leHQudmFsdWUpO3JldHVybiB0aGlzfSkuZXhwcz0hMCxGdXR1cmVSZXNlcnZlZFdvcmQoImFic3RyYWN0IiksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJib29sZWFuIiksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJieXRlIiksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJjaGFyIiksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJjbGFzcyIse2VzNTohMCxudWQ6Y2xhc3NkZWZ9KSxGdXR1cmVSZXNlcnZlZFdvcmQoImRvdWJsZSIpLEZ1dHVyZVJlc2VydmVkV29yZCgiZW51bSIse2VzNTohMH0pLEZ1dHVyZVJlc2VydmVkV29yZCgiZXhwb3J0Iix7ZXM1OiEwfSksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJleHRlbmRzIix7ZXM1OiEwfSksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJmaW5hbCIpLEZ1dHVyZVJlc2VydmVkV29yZCgiZmxvYXQiKSxGdXR1cmVSZXNlcnZlZFdvcmQoImdvdG8iKSxGdXR1cmVSZXNlcnZlZFdvcmQoImltcGxlbWVudHMiLHtlczU6ITAsc3RyaWN0T25seTohMH0pLEZ1dHVyZVJlc2VydmVkV29yZCgiaW1wb3J0Iix7ZXM1OiEwfSksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJpbnQiKSxGdXR1cmVSZXNlcnZlZFdvcmQoImludGVyZmFjZSIse2VzNTohMCxzdHJpY3RPbmx5OiEwfSksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJsb25nIiksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJuYXRpdmUiKSxGdXR1cmVSZXNlcnZlZFdvcmQoInBhY2thZ2UiLHtlczU6ITAsc3RyaWN0T25seTohMH0pLEZ1dHVyZVJlc2VydmVkV29yZCgicHJpdmF0ZSIse2VzNTohMCxzdHJpY3RPbmx5OiEwfSksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJwcm90ZWN0ZWQiLHtlczU6ITAsc3RyaWN0T25seTohMH0pLEZ1dHVyZVJlc2VydmVkV29yZCgicHVibGljIix7ZXM1OiEwLHN0cmljdE9ubHk6ITB9KSxGdXR1cmVSZXNlcnZlZFdvcmQoInNob3J0IiksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJzdGF0aWMiLHtlczU6ITAsc3RyaWN0T25seTohMH0pLEZ1dHVyZVJlc2VydmVkV29yZCgic3VwZXIiLHtlczU6ITB9KSxGdXR1cmVSZXNlcnZlZFdvcmQoInN5bmNocm9uaXplZCIpLEZ1dHVyZVJlc2VydmVkV29yZCgidHJhbnNpZW50IiksRnV0dXJlUmVzZXJ2ZWRXb3JkKCJ2b2xhdGlsZSIpO3ZhciBsb29rdXBCbG9ja1R5cGU9ZnVuY3Rpb24oKXt2YXIgcG4scG4xLHByZXYsaT0tMSxicmFja2V0U3RhY2s9MCxyZXQ9e307Y2hlY2tQdW5jdHVhdG9ycyhzdGF0ZS50b2tlbnMuY3VycixbIlsiLCJ7Il0pJiYoYnJhY2tldFN0YWNrKz0xKTtkb3tpZihwcmV2PS0xPT09aT9zdGF0ZS50b2tlbnMuY3Vycjpwbixwbj0tMT09PWk/c3RhdGUudG9rZW5zLm5leHQ6cGVlayhpKSxwbjE9cGVlayhpKzEpLGkrPTEsY2hlY2tQdW5jdHVhdG9ycyhwbixbIlsiLCJ7Il0pP2JyYWNrZXRTdGFjays9MTpjaGVja1B1bmN0dWF0b3JzKHBuLFsiXSIsIn0iXSkmJihicmFja2V0U3RhY2stPTEpLDE9PT1icmFja2V0U3RhY2smJnBuLmlkZW50aWZpZXImJiJmb3IiPT09cG4udmFsdWUmJiFjaGVja1B1bmN0dWF0b3IocHJldiwiLiIpKXtyZXQuaXNDb21wQXJyYXk9ITAscmV0Lm5vdEpzb249ITA7YnJlYWt9aWYoMD09PWJyYWNrZXRTdGFjayYmY2hlY2tQdW5jdHVhdG9ycyhwbixbIn0iLCJdIl0pKXtpZigiPSI9PT1wbjEudmFsdWUpe3JldC5pc0Rlc3RBc3NpZ249ITAscmV0Lm5vdEpzb249ITA7YnJlYWt9aWYoIi4iPT09cG4xLnZhbHVlKXtyZXQubm90SnNvbj0hMDticmVha319Y2hlY2tQdW5jdHVhdG9yKHBuLCI7IikmJihyZXQuaXNCbG9jaz0hMCxyZXQubm90SnNvbj0hMCl9d2hpbGUoYnJhY2tldFN0YWNrPjAmJiIoZW5kKSIhPT1wbi5pZCk7cmV0dXJuIHJldH0sYXJyYXlDb21wcmVoZW5zaW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZGVjbGFyZSh2KXt2YXIgbD1fY3VycmVudC52YXJpYWJsZXMuZmlsdGVyKGZ1bmN0aW9uKGVsdCl7cmV0dXJuIGVsdC52YWx1ZT09PXY/KGVsdC51bmRlZj0hMSx2KTp2b2lkIDB9KS5sZW5ndGg7cmV0dXJuIDAhPT1sfWZ1bmN0aW9uIHVzZSh2KXt2YXIgbD1fY3VycmVudC52YXJpYWJsZXMuZmlsdGVyKGZ1bmN0aW9uKGVsdCl7cmV0dXJuIGVsdC52YWx1ZSE9PXZ8fGVsdC51bmRlZj92b2lkIDA6KGVsdC51bnVzZWQ9PT0hMCYmKGVsdC51bnVzZWQ9ITEpLHYpfSkubGVuZ3RoO3JldHVybiAwPT09bH12YXIgX2N1cnJlbnQsQ29tcEFycmF5PWZ1bmN0aW9uKCl7dGhpcy5tb2RlPSJ1c2UiLHRoaXMudmFyaWFibGVzPVtdfSxfY2FycmF5cz1bXTtyZXR1cm57c3RhY2s6ZnVuY3Rpb24oKXtfY3VycmVudD1uZXcgQ29tcEFycmF5LF9jYXJyYXlzLnB1c2goX2N1cnJlbnQpfSx1bnN0YWNrOmZ1bmN0aW9uKCl7X2N1cnJlbnQudmFyaWFibGVzLmZpbHRlcihmdW5jdGlvbih2KXt2LnVudXNlZCYmd2FybmluZygiVzA5OCIsdi50b2tlbix2LnJhd190ZXh0fHx2LnZhbHVlKSx2LnVuZGVmJiZzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmJsb2NrLnVzZSh2LnZhbHVlLHYudG9rZW4pfSksX2NhcnJheXMuc3BsaWNlKC0xLDEpLF9jdXJyZW50PV9jYXJyYXlzW19jYXJyYXlzLmxlbmd0aC0xXX0sc2V0U3RhdGU6ZnVuY3Rpb24ocyl7Xy5jb250YWlucyhbInVzZSIsImRlZmluZSIsImdlbmVyYXRlIiwiZmlsdGVyIl0scykmJihfY3VycmVudC5tb2RlPXMpfSxjaGVjazpmdW5jdGlvbih2KXtyZXR1cm4gX2N1cnJlbnQ/X2N1cnJlbnQmJiJ1c2UiPT09X2N1cnJlbnQubW9kZT8odXNlKHYpJiZfY3VycmVudC52YXJpYWJsZXMucHVzaCh7ZnVuY3Q6c3RhdGUuZnVuY3QsdG9rZW46c3RhdGUudG9rZW5zLmN1cnIsdmFsdWU6dix1bmRlZjohMCx1bnVzZWQ6ITF9KSwhMCk6X2N1cnJlbnQmJiJkZWZpbmUiPT09X2N1cnJlbnQubW9kZT8oZGVjbGFyZSh2KXx8X2N1cnJlbnQudmFyaWFibGVzLnB1c2goe2Z1bmN0OnN0YXRlLmZ1bmN0LHRva2VuOnN0YXRlLnRva2Vucy5jdXJyLHZhbHVlOnYsdW5kZWY6ITEsdW51c2VkOiEwfSksITApOl9jdXJyZW50JiYiZ2VuZXJhdGUiPT09X2N1cnJlbnQubW9kZT8oc3RhdGUuZnVuY3RbIihzY29wZSkiXS5ibG9jay51c2UodixzdGF0ZS50b2tlbnMuY3VyciksITApOl9jdXJyZW50JiYiZmlsdGVyIj09PV9jdXJyZW50Lm1vZGU/KHVzZSh2KSYmc3RhdGUuZnVuY3RbIihzY29wZSkiXS5ibG9jay51c2UodixzdGF0ZS50b2tlbnMuY3VyciksITApOiExOnZvaWQgMH19fSxlc2NhcGVSZWdleD1mdW5jdGlvbihzdHIpe3JldHVybiBzdHIucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCJcXFxcJCYiKX0saXRzZWxmPWZ1bmN0aW9uKHMsbyxnKXtmdW5jdGlvbiBlYWNoKG9iaixjYil7b2JqJiYoQXJyYXkuaXNBcnJheShvYmopfHwib2JqZWN0IiE9dHlwZW9mIG9ianx8KG9iaj1PYmplY3Qua2V5cyhvYmopKSxvYmouZm9yRWFjaChjYikpfXZhciBpLGsseCxyZUlnbm9yZVN0cixyZUlnbm9yZSxvcHRpb25LZXlzLG5ld09wdGlvbk9iaj17fSxuZXdJZ25vcmVkT2JqPXt9O289Xy5jbG9uZShvKSxzdGF0ZS5yZXNldCgpLG8mJm8uc2NvcGU/SlNISU5ULnNjb3BlPW8uc2NvcGU6KEpTSElOVC5lcnJvcnM9W10sSlNISU5ULnVuZGVmcz1bXSxKU0hJTlQuaW50ZXJuYWxzPVtdLEpTSElOVC5ibGFja2xpc3Q9e30sSlNISU5ULnNjb3BlPSIobWFpbikiKSxwcmVkZWZpbmVkPU9iamVjdC5jcmVhdGUobnVsbCksY29tYmluZShwcmVkZWZpbmVkLHZhcnMuZWNtYUlkZW50aWZpZXJzWzNdKSxjb21iaW5lKHByZWRlZmluZWQsdmFycy5yZXNlcnZlZFZhcnMpLGNvbWJpbmUocHJlZGVmaW5lZCxnfHx7fSksZGVjbGFyZWQ9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgZXhwb3J0ZWQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihvKWZvcihlYWNoKG8ucHJlZGVmfHxudWxsLGZ1bmN0aW9uKGl0ZW0pe3ZhciBzbGljZSxwcm9wOyItIj09PWl0ZW1bMF0/KHNsaWNlPWl0ZW0uc2xpY2UoMSksSlNISU5ULmJsYWNrbGlzdFtzbGljZV09c2xpY2UsZGVsZXRlIHByZWRlZmluZWRbc2xpY2VdKToocHJvcD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8ucHJlZGVmLGl0ZW0pLHByZWRlZmluZWRbaXRlbV09cHJvcD9wcm9wLnZhbHVlOiExKX0pLGVhY2goby5leHBvcnRlZHx8bnVsbCxmdW5jdGlvbihpdGVtKXtleHBvcnRlZFtpdGVtXT0hMH0pLGRlbGV0ZSBvLnByZWRlZixkZWxldGUgby5leHBvcnRlZCxvcHRpb25LZXlzPU9iamVjdC5rZXlzKG8pLHg9MDtvcHRpb25LZXlzLmxlbmd0aD54O3grKylpZigvXi1XXFxkezN9JC9nLnRlc3Qob3B0aW9uS2V5c1t4XSkpbmV3SWdub3JlZE9ialtvcHRpb25LZXlzW3hdLnNsaWNlKDEpXT0hMDtlbHNle3ZhciBvcHRpb25LZXk9b3B0aW9uS2V5c1t4XTtuZXdPcHRpb25PYmpbb3B0aW9uS2V5XT1vW29wdGlvbktleV0sKCJlc3ZlcnNpb24iPT09b3B0aW9uS2V5JiY1PT09b1tvcHRpb25LZXldfHwiZXM1Ij09PW9wdGlvbktleSYmb1tvcHRpb25LZXldKSYmd2FybmluZygiSTAwMyIpLCJuZXdjYXAiPT09b3B0aW9uS2V5c1t4XSYmb1tvcHRpb25LZXldPT09ITEmJihuZXdPcHRpb25PYmpbIihleHBsaWNpdE5ld2NhcCkiXT0hMCl9c3RhdGUub3B0aW9uPW5ld09wdGlvbk9iaixzdGF0ZS5pZ25vcmVkPW5ld0lnbm9yZWRPYmosc3RhdGUub3B0aW9uLmluZGVudD1zdGF0ZS5vcHRpb24uaW5kZW50fHw0LHN0YXRlLm9wdGlvbi5tYXhlcnI9c3RhdGUub3B0aW9uLm1heGVycnx8NTAsaW5kZW50PTE7dmFyIHNjb3BlTWFuYWdlckluc3Q9c2NvcGVNYW5hZ2VyKHN0YXRlLHByZWRlZmluZWQsZXhwb3J0ZWQsZGVjbGFyZWQpO2lmKHNjb3BlTWFuYWdlckluc3Qub24oIndhcm5pbmciLGZ1bmN0aW9uKGV2KXt3YXJuaW5nLmFwcGx5KG51bGwsW2V2LmNvZGUsZXYudG9rZW5dLmNvbmNhdChldi5kYXRhKSl9KSxzY29wZU1hbmFnZXJJbnN0Lm9uKCJlcnJvciIsZnVuY3Rpb24oZXYpe2Vycm9yLmFwcGx5KG51bGwsW2V2LmNvZGUsZXYudG9rZW5dLmNvbmNhdChldi5kYXRhKSl9KSxzdGF0ZS5mdW5jdD1mdW5jdG9yKCIoZ2xvYmFsKSIsbnVsbCx7IihnbG9iYWwpIjohMCwiKHNjb3BlKSI6c2NvcGVNYW5hZ2VySW5zdCwiKGNvbXBhcnJheSkiOmFycmF5Q29tcHJlaGVuc2lvbigpLCIobWV0cmljcykiOmNyZWF0ZU1ldHJpY3Moc3RhdGUudG9rZW5zLm5leHQpfSksZnVuY3Rpb25zPVtzdGF0ZS5mdW5jdF0sdXJscz1bXSxzdGFjaz1udWxsLG1lbWJlcj17fSxtZW1iZXJzT25seT1udWxsLGluYmxvY2s9ITEsbG9va2FoZWFkPVtdLCFpc1N0cmluZyhzKSYmIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIGVycm9yQXQoIkUwMDQiLDApLCExO2FwaT17Z2V0IGlzSlNPTigpe3JldHVybiBzdGF0ZS5qc29uTW9kZX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKG5hbWUpe3JldHVybiBzdGF0ZS5vcHRpb25bbmFtZV18fG51bGx9LGdldENhY2hlOmZ1bmN0aW9uKG5hbWUpe3JldHVybiBzdGF0ZS5jYWNoZVtuYW1lXX0sc2V0Q2FjaGU6ZnVuY3Rpb24obmFtZSx2YWx1ZSl7c3RhdGUuY2FjaGVbbmFtZV09dmFsdWV9LHdhcm46ZnVuY3Rpb24oY29kZSxkYXRhKXt3YXJuaW5nQXQuYXBwbHkobnVsbCxbY29kZSxkYXRhLmxpbmUsZGF0YS5jaGFyXS5jb25jYXQoZGF0YS5kYXRhKSl9LG9uOmZ1bmN0aW9uKG5hbWVzLGxpc3RlbmVyKXtuYW1lcy5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24obmFtZSl7ZW1pdHRlci5vbihuYW1lLGxpc3RlbmVyKX0uYmluZCh0aGlzKSl9fSxlbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycygpLChleHRyYU1vZHVsZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGZ1bmMpe2Z1bmMoYXBpKX0pLHN0YXRlLnRva2Vucy5wcmV2PXN0YXRlLnRva2Vucy5jdXJyPXN0YXRlLnRva2Vucy5uZXh0PXN0YXRlLnN5bnRheFsiKGJlZ2luKSJdLG8mJm8uaWdub3JlRGVsaW1pdGVycyYmKEFycmF5LmlzQXJyYXkoby5pZ25vcmVEZWxpbWl0ZXJzKXx8KG8uaWdub3JlRGVsaW1pdGVycz1bby5pZ25vcmVEZWxpbWl0ZXJzXSksby5pZ25vcmVEZWxpbWl0ZXJzLmZvckVhY2goZnVuY3Rpb24oZGVsaW1pdGVyUGFpcil7ZGVsaW1pdGVyUGFpci5zdGFydCYmZGVsaW1pdGVyUGFpci5lbmQmJihyZUlnbm9yZVN0cj1lc2NhcGVSZWdleChkZWxpbWl0ZXJQYWlyLnN0YXJ0KSsiW1xcXFxzXFxcXFNdKj8iK2VzY2FwZVJlZ2V4KGRlbGltaXRlclBhaXIuZW5kKSxyZUlnbm9yZT1SZWdFeHAocmVJZ25vcmVTdHIsImlnIikscz1zLnJlcGxhY2UocmVJZ25vcmUsZnVuY3Rpb24obWF0Y2gpe3JldHVybiBtYXRjaC5yZXBsYWNlKC8uL2csIiAiKX0pKX0pKSxsZXg9bmV3IExleGVyKHMpLGxleC5vbigid2FybmluZyIsZnVuY3Rpb24oZXYpe3dhcm5pbmdBdC5hcHBseShudWxsLFtldi5jb2RlLGV2LmxpbmUsZXYuY2hhcmFjdGVyXS5jb25jYXQoZXYuZGF0YSkpfSksbGV4Lm9uKCJlcnJvciIsZnVuY3Rpb24oZXYpe2Vycm9yQXQuYXBwbHkobnVsbCxbZXYuY29kZSxldi5saW5lLGV2LmNoYXJhY3Rlcl0uY29uY2F0KGV2LmRhdGEpKX0pLGxleC5vbigiZmF0YWwiLGZ1bmN0aW9uKGV2KXtxdWl0KCJFMDQxIixldi5saW5lLGV2LmZyb20pfSksbGV4Lm9uKCJJZGVudGlmaWVyIixmdW5jdGlvbihldil7ZW1pdHRlci5lbWl0KCJJZGVudGlmaWVyIixldil9KSxsZXgub24oIlN0cmluZyIsZnVuY3Rpb24oZXYpe2VtaXR0ZXIuZW1pdCgiU3RyaW5nIixldil9KSxsZXgub24oIk51bWJlciIsZnVuY3Rpb24oZXYpe2VtaXR0ZXIuZW1pdCgiTnVtYmVyIixldil9KSxsZXguc3RhcnQoKTtmb3IodmFyIG5hbWUgaW4gbylfLmhhcyhvLG5hbWUpJiZjaGVja09wdGlvbihuYW1lLHN0YXRlLnRva2Vucy5jdXJyKTthc3N1bWUoKSxjb21iaW5lKHByZWRlZmluZWQsZ3x8e30pLGNvbW1hLmZpcnN0PSEwO3RyeXtzd2l0Y2goYWR2YW5jZSgpLHN0YXRlLnRva2Vucy5uZXh0LmlkKXtjYXNlInsiOmNhc2UiWyI6ZGVzdHJ1Y3R1cmluZ0Fzc2lnbk9ySnNvblZhbHVlKCk7YnJlYWs7ZGVmYXVsdDpkaXJlY3RpdmVzKCksc3RhdGUuZGlyZWN0aXZlWyJ1c2Ugc3RyaWN0Il0mJiJnbG9iYWwiIT09c3RhdGUub3B0aW9uLnN0cmljdCYmd2FybmluZygiVzA5NyIsc3RhdGUudG9rZW5zLnByZXYpLHN0YXRlbWVudHMoKX0iKGVuZCkiIT09c3RhdGUudG9rZW5zLm5leHQuaWQmJnF1aXQoIkUwNDEiLHN0YXRlLnRva2Vucy5jdXJyLmxpbmUpLHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0udW5zdGFjaygpfWNhdGNoKGVycil7aWYoIWVycnx8IkpTSGludEVycm9yIiE9PWVyci5uYW1lKXRocm93IGVycjt2YXIgbnQ9c3RhdGUudG9rZW5zLm5leHR8fHt9O0pTSElOVC5lcnJvcnMucHVzaCh7c2NvcGU6IihtYWluKSIscmF3OmVyci5yYXcsY29kZTplcnIuY29kZSxyZWFzb246ZXJyLm1lc3NhZ2UsbGluZTplcnIubGluZXx8bnQubGluZSxjaGFyYWN0ZXI6ZXJyLmNoYXJhY3Rlcnx8bnQuZnJvbX0sbnVsbCl9aWYoIihtYWluKSI9PT1KU0hJTlQuc2NvcGUpZm9yKG89b3x8e30saT0wO0pTSElOVC5pbnRlcm5hbHMubGVuZ3RoPmk7aSs9MSlrPUpTSElOVC5pbnRlcm5hbHNbaV0sby5zY29wZT1rLmVsZW0saXRzZWxmKGsudmFsdWUsbyxnKTtyZXR1cm4gMD09PUpTSElOVC5lcnJvcnMubGVuZ3RofTtyZXR1cm4gaXRzZWxmLmFkZE1vZHVsZT1mdW5jdGlvbihmdW5jKXtleHRyYU1vZHVsZXMucHVzaChmdW5jKX0saXRzZWxmLmFkZE1vZHVsZShzdHlsZS5yZWdpc3RlciksaXRzZWxmLmRhdGE9ZnVuY3Rpb24oKXt2YXIgZnUsZixpLGosbixnbG9iYWxzLGRhdGE9e2Z1bmN0aW9uczpbXSxvcHRpb25zOnN0YXRlLm9wdGlvbn07aXRzZWxmLmVycm9ycy5sZW5ndGgmJihkYXRhLmVycm9ycz1pdHNlbGYuZXJyb3JzKSxzdGF0ZS5qc29uTW9kZSYmKGRhdGEuanNvbj0hMCk7dmFyIGltcGxpZWRHbG9iYWxzPXN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uZ2V0SW1wbGllZEdsb2JhbHMoKTtmb3IoaW1wbGllZEdsb2JhbHMubGVuZ3RoPjAmJihkYXRhLmltcGxpZWRzPWltcGxpZWRHbG9iYWxzKSx1cmxzLmxlbmd0aD4wJiYoZGF0YS51cmxzPXVybHMpLGdsb2JhbHM9c3RhdGUuZnVuY3RbIihzY29wZSkiXS5nZXRVc2VkT3JEZWZpbmVkR2xvYmFscygpLGdsb2JhbHMubGVuZ3RoPjAmJihkYXRhLmdsb2JhbHM9Z2xvYmFscyksaT0xO2Z1bmN0aW9ucy5sZW5ndGg+aTtpKz0xKXtmb3IoZj1mdW5jdGlvbnNbaV0sZnU9e30saj0wO2Z1bmN0aW9uaWNpdHkubGVuZ3RoPmo7ais9MSlmdVtmdW5jdGlvbmljaXR5W2pdXT1bXTtmb3Ioaj0wO2Z1bmN0aW9uaWNpdHkubGVuZ3RoPmo7ais9MSkwPT09ZnVbZnVuY3Rpb25pY2l0eVtqXV0ubGVuZ3RoJiZkZWxldGUgZnVbZnVuY3Rpb25pY2l0eVtqXV07ZnUubmFtZT1mWyIobmFtZSkiXSxmdS5wYXJhbT1mWyIocGFyYW1zKSJdLGZ1LmxpbmU9ZlsiKGxpbmUpIl0sZnUuY2hhcmFjdGVyPWZbIihjaGFyYWN0ZXIpIl0sZnUubGFzdD1mWyIobGFzdCkiXSxmdS5sYXN0Y2hhcmFjdGVyPWZbIihsYXN0Y2hhcmFjdGVyKSJdLGZ1Lm1ldHJpY3M9e2NvbXBsZXhpdHk6ZlsiKG1ldHJpY3MpIl0uQ29tcGxleGl0eUNvdW50LHBhcmFtZXRlcnM6ZlsiKG1ldHJpY3MpIl0uYXJpdHksc3RhdGVtZW50czpmWyIobWV0cmljcykiXS5zdGF0ZW1lbnRDb3VudH0sZGF0YS5mdW5jdGlvbnMucHVzaChmdSl9dmFyIHVudXNlZHM9c3RhdGUuZnVuY3RbIihzY29wZSkiXS5nZXRVbnVzZWRzKCk7dW51c2Vkcy5sZW5ndGg+MCYmKGRhdGEudW51c2VkPXVudXNlZHMpO2ZvcihuIGluIG1lbWJlcilpZigibnVtYmVyIj09dHlwZW9mIG1lbWJlcltuXSl7ZGF0YS5tZW1iZXI9bWVtYmVyO2JyZWFrfXJldHVybiBkYXRhfSxpdHNlbGYuanNoaW50PWl0c2VsZixpdHNlbGZ9KCk7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYoZXhwb3J0cy5KU0hJTlQ9SlNISU5UKX0seyIuLi9sb2Rhc2giOiIvbm9kZV9tb2R1bGVzL2pzaGludC9sb2Rhc2guanMiLCIuL2xleC5qcyI6Ii9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9sZXguanMiLCIuL21lc3NhZ2VzLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL21lc3NhZ2VzLmpzIiwiLi9vcHRpb25zLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL29wdGlvbnMuanMiLCIuL3JlZy5qcyI6Ii9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9yZWcuanMiLCIuL3Njb3BlLW1hbmFnZXIuanMiOiIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvc2NvcGUtbWFuYWdlci5qcyIsIi4vc3RhdGUuanMiOiIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvc3RhdGUuanMiLCIuL3N0eWxlLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL3N0eWxlLmpzIiwiLi92YXJzLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL3ZhcnMuanMiLGV2ZW50czoiL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIn1dLCIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvbGV4LmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGFzeW5jVHJpZ2dlcigpe3ZhciBfY2hlY2tzPVtdO3JldHVybntwdXNoOmZ1bmN0aW9uKGZuKXtfY2hlY2tzLnB1c2goZm4pfSxjaGVjazpmdW5jdGlvbigpe2Zvcih2YXIgY2hlY2s9MDtfY2hlY2tzLmxlbmd0aD5jaGVjazsrK2NoZWNrKV9jaGVja3NbY2hlY2tdKCk7X2NoZWNrcy5zcGxpY2UoMCxfY2hlY2tzLmxlbmd0aCl9fX1mdW5jdGlvbiBMZXhlcihzb3VyY2Upe3ZhciBsaW5lcz1zb3VyY2U7InN0cmluZyI9PXR5cGVvZiBsaW5lcyYmKGxpbmVzPWxpbmVzLnJlcGxhY2UoL1xcclxcbi9nLCJcXG4iKS5yZXBsYWNlKC9cXHIvZywiXFxuIikuc3BsaXQoIlxcbiIpKSxsaW5lc1swXSYmIiMhIj09PWxpbmVzWzBdLnN1YnN0cigwLDIpJiYoLTEhPT1saW5lc1swXS5pbmRleE9mKCJub2RlIikmJihzdGF0ZS5vcHRpb24ubm9kZT0hMCksbGluZXNbMF09IiIpLHRoaXMuZW1pdHRlcj1uZXcgZXZlbnRzLkV2ZW50RW1pdHRlcix0aGlzLnNvdXJjZT1zb3VyY2UsdGhpcy5zZXRMaW5lcyhsaW5lcyksdGhpcy5wcmVyZWc9ITAsdGhpcy5saW5lPTAsdGhpcy5jaGFyPTEsdGhpcy5mcm9tPTEsdGhpcy5pbnB1dD0iIix0aGlzLmluQ29tbWVudD0hMSx0aGlzLmNvbnRleHQ9W10sdGhpcy50ZW1wbGF0ZVN0YXJ0cz1bXTtmb3IodmFyIGk9MDtzdGF0ZS5vcHRpb24uaW5kZW50Pmk7aSs9MSlzdGF0ZS50YWIrPSIgIjt0aGlzLmlnbm9yZUxpbnRlckVycm9ycz0hMX12YXIgXz1fZGVyZXFfKCIuLi9sb2Rhc2giKSxldmVudHM9X2RlcmVxXygiZXZlbnRzIikscmVnPV9kZXJlcV8oIi4vcmVnLmpzIiksc3RhdGU9X2RlcmVxXygiLi9zdGF0ZS5qcyIpLnN0YXRlLHVuaWNvZGVEYXRhPV9kZXJlcV8oIi4uL2RhdGEvYXNjaWktaWRlbnRpZmllci1kYXRhLmpzIiksYXNjaWlJZGVudGlmaWVyU3RhcnRUYWJsZT11bmljb2RlRGF0YS5hc2NpaUlkZW50aWZpZXJTdGFydFRhYmxlLGFzY2lpSWRlbnRpZmllclBhcnRUYWJsZT11bmljb2RlRGF0YS5hc2NpaUlkZW50aWZpZXJQYXJ0VGFibGUsVG9rZW49e0lkZW50aWZpZXI6MSxQdW5jdHVhdG9yOjIsTnVtZXJpY0xpdGVyYWw6MyxTdHJpbmdMaXRlcmFsOjQsQ29tbWVudDo1LEtleXdvcmQ6NixOdWxsTGl0ZXJhbDo3LEJvb2xlYW5MaXRlcmFsOjgsUmVnRXhwOjksVGVtcGxhdGVIZWFkOjEwLFRlbXBsYXRlTWlkZGxlOjExLFRlbXBsYXRlVGFpbDoxMixOb1N1YnN0VGVtcGxhdGU6MTN9LENvbnRleHQ9e0Jsb2NrOjEsVGVtcGxhdGU6Mn07TGV4ZXIucHJvdG90eXBlPXtfbGluZXM6W10saW5Db250ZXh0OmZ1bmN0aW9uKGN0eFR5cGUpe3JldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoPjAmJnRoaXMuY29udGV4dFt0aGlzLmNvbnRleHQubGVuZ3RoLTFdLnR5cGU9PT1jdHhUeXBlfSxwdXNoQ29udGV4dDpmdW5jdGlvbihjdHhUeXBlKXt0aGlzLmNvbnRleHQucHVzaCh7dHlwZTpjdHhUeXBlfSl9LHBvcENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0LnBvcCgpfSxpc0NvbnRleHQ6ZnVuY3Rpb24oY29udGV4dCl7cmV0dXJuIHRoaXMuY29udGV4dC5sZW5ndGg+MCYmdGhpcy5jb250ZXh0W3RoaXMuY29udGV4dC5sZW5ndGgtMV09PT1jb250ZXh0fSxjdXJyZW50Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoPjAmJnRoaXMuY29udGV4dFt0aGlzLmNvbnRleHQubGVuZ3RoLTFdfSxnZXRMaW5lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saW5lcz1zdGF0ZS5saW5lcyx0aGlzLl9saW5lc30sc2V0TGluZXM6ZnVuY3Rpb24odmFsKXt0aGlzLl9saW5lcz12YWwsc3RhdGUubGluZXM9dGhpcy5fbGluZXN9LHBlZWs6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuaW5wdXQuY2hhckF0KGl8fDApfSxza2lwOmZ1bmN0aW9uKGkpe2k9aXx8MSx0aGlzLmNoYXIrPWksdGhpcy5pbnB1dD10aGlzLmlucHV0LnNsaWNlKGkpfSxvbjpmdW5jdGlvbihuYW1lcyxsaXN0ZW5lcil7bmFtZXMuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpe3RoaXMuZW1pdHRlci5vbihuYW1lLGxpc3RlbmVyKX0uYmluZCh0aGlzKSl9LHRyaWdnZXI6ZnVuY3Rpb24oKXt0aGlzLmVtaXR0ZXIuZW1pdC5hcHBseSh0aGlzLmVtaXR0ZXIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9LHRyaWdnZXJBc3luYzpmdW5jdGlvbih0eXBlLGFyZ3MsY2hlY2tzLGZuKXtjaGVja3MucHVzaChmdW5jdGlvbigpe2ZuKCkmJnRoaXMudHJpZ2dlcih0eXBlLGFyZ3MpfS5iaW5kKHRoaXMpKX0sc2NhblB1bmN0dWF0b3I6ZnVuY3Rpb24oKXt2YXIgY2gyLGNoMyxjaDQsY2gxPXRoaXMucGVlaygpO3N3aXRjaChjaDEpe2Nhc2UiLiI6aWYoL15bMC05XSQvLnRlc3QodGhpcy5wZWVrKDEpKSlyZXR1cm4gbnVsbDtpZigiLiI9PT10aGlzLnBlZWsoMSkmJiIuIj09PXRoaXMucGVlaygyKSlyZXR1cm57dHlwZTpUb2tlbi5QdW5jdHVhdG9yLHZhbHVlOiIuLi4ifTtjYXNlIigiOmNhc2UiKSI6Y2FzZSI7IjpjYXNlIiwiOmNhc2UiWyI6Y2FzZSJdIjpjYXNlIjoiOmNhc2UifiI6Y2FzZSI/IjpyZXR1cm57dHlwZTpUb2tlbi5QdW5jdHVhdG9yLHZhbHVlOmNoMX07Y2FzZSJ7IjpyZXR1cm4gdGhpcy5wdXNoQ29udGV4dChDb250ZXh0LkJsb2NrKSx7dHlwZTpUb2tlbi5QdW5jdHVhdG9yLHZhbHVlOmNoMX07Y2FzZSJ9IjpyZXR1cm4gdGhpcy5pbkNvbnRleHQoQ29udGV4dC5CbG9jaykmJnRoaXMucG9wQ29udGV4dCgpLHt0eXBlOlRva2VuLlB1bmN0dWF0b3IsdmFsdWU6Y2gxfTtjYXNlIiMiOnJldHVybnt0eXBlOlRva2VuLlB1bmN0dWF0b3IsdmFsdWU6Y2gxfTtjYXNlIiI6cmV0dXJuIG51bGx9cmV0dXJuIGNoMj10aGlzLnBlZWsoMSksY2gzPXRoaXMucGVlaygyKSxjaDQ9dGhpcy5wZWVrKDMpLCI+Ij09PWNoMSYmIj4iPT09Y2gyJiYiPiI9PT1jaDMmJiI9Ij09PWNoND97dHlwZTpUb2tlbi5QdW5jdHVhdG9yLHZhbHVlOiI+Pj49In06Ij0iPT09Y2gxJiYiPSI9PT1jaDImJiI9Ij09PWNoMz97dHlwZTpUb2tlbi5QdW5jdHVhdG9yLHZhbHVlOiI9PT0ifToiISI9PT1jaDEmJiI9Ij09PWNoMiYmIj0iPT09Y2gzP3t0eXBlOlRva2VuLlB1bmN0dWF0b3IsdmFsdWU6IiE9PSJ9OiI+Ij09PWNoMSYmIj4iPT09Y2gyJiYiPiI9PT1jaDM/e3R5cGU6VG9rZW4uUHVuY3R1YXRvcix2YWx1ZToiPj4+In06IjwiPT09Y2gxJiYiPCI9PT1jaDImJiI9Ij09PWNoMz97dHlwZTpUb2tlbi5QdW5jdHVhdG9yLHZhbHVlOiI8PD0ifToiPiI9PT1jaDEmJiI+Ij09PWNoMiYmIj0iPT09Y2gzP3t0eXBlOlRva2VuLlB1bmN0dWF0b3IsdmFsdWU6Ij4+PSJ9OiI9Ij09PWNoMSYmIj4iPT09Y2gyP3t0eXBlOlRva2VuLlB1bmN0dWF0b3IsdmFsdWU6Y2gxK2NoMn06Y2gxPT09Y2gyJiYiKy08PiZ8Ii5pbmRleE9mKGNoMSk+PTA/e3R5cGU6VG9rZW4uUHVuY3R1YXRvcix2YWx1ZTpjaDErY2gyfToiPD49ISstKiUmfF4iLmluZGV4T2YoY2gxKT49MD8iPSI9PT1jaDI/e3R5cGU6VG9rZW4uUHVuY3R1YXRvcix2YWx1ZTpjaDErY2gyfTp7dHlwZTpUb2tlbi5QdW5jdHVhdG9yLHZhbHVlOmNoMX06Ii8iPT09Y2gxPyI9Ij09PWNoMj97dHlwZTpUb2tlbi5QdW5jdHVhdG9yLHZhbHVlOiIvPSJ9Ont0eXBlOlRva2VuLlB1bmN0dWF0b3IsdmFsdWU6Ii8ifTpudWxsfSxzY2FuQ29tbWVudHM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBjb21tZW50VG9rZW4obGFiZWwsYm9keSxvcHQpe3ZhciBzcGVjaWFsPVsianNoaW50IiwianNsaW50IiwibWVtYmVycyIsIm1lbWJlciIsImdsb2JhbHMiLCJnbG9iYWwiLCJleHBvcnRlZCJdLGlzU3BlY2lhbD0hMSx2YWx1ZT1sYWJlbCtib2R5LGNvbW1lbnRUeXBlPSJwbGFpbiI7cmV0dXJuIG9wdD1vcHR8fHt9LG9wdC5pc011bHRpbGluZSYmKHZhbHVlKz0iKi8iKSxib2R5PWJvZHkucmVwbGFjZSgvXFxuL2csIiAiKSwiLyoiPT09bGFiZWwmJnJlZy5mYWxsc1Rocm91Z2gudGVzdChib2R5KSYmKGlzU3BlY2lhbD0hMCxjb21tZW50VHlwZT0iZmFsbHMgdGhyb3VnaCIpLHNwZWNpYWwuZm9yRWFjaChmdW5jdGlvbihzdHIpe2lmKCFpc1NwZWNpYWwmJigiLy8iIT09bGFiZWx8fCJqc2hpbnQiPT09c3RyKSYmKCIgIj09PWJvZHkuY2hhckF0KHN0ci5sZW5ndGgpJiZib2R5LnN1YnN0cigwLHN0ci5sZW5ndGgpPT09c3RyJiYoaXNTcGVjaWFsPSEwLGxhYmVsKz1zdHIsYm9keT1ib2R5LnN1YnN0cihzdHIubGVuZ3RoKSksaXNTcGVjaWFsfHwiICIhPT1ib2R5LmNoYXJBdCgwKXx8IiAiIT09Ym9keS5jaGFyQXQoc3RyLmxlbmd0aCsxKXx8Ym9keS5zdWJzdHIoMSxzdHIubGVuZ3RoKSE9PXN0cnx8KGlzU3BlY2lhbD0hMCxsYWJlbD1sYWJlbCsiICIrc3RyLGJvZHk9Ym9keS5zdWJzdHIoc3RyLmxlbmd0aCsxKSksaXNTcGVjaWFsKSlzd2l0Y2goc3RyKXtjYXNlIm1lbWJlciI6Y29tbWVudFR5cGU9Im1lbWJlcnMiO2JyZWFrO2Nhc2UiZ2xvYmFsIjpjb21tZW50VHlwZT0iZ2xvYmFscyI7YnJlYWs7ZGVmYXVsdDp2YXIgb3B0aW9ucz1ib2R5LnNwbGl0KCI6IikubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnJlcGxhY2UoL15cXHMrLywiIikucmVwbGFjZSgvXFxzKyQvLCIiKX0pO2lmKDI9PT1vcHRpb25zLmxlbmd0aClzd2l0Y2gob3B0aW9uc1swXSl7Y2FzZSJpZ25vcmUiOnN3aXRjaChvcHRpb25zWzFdKXtjYXNlInN0YXJ0IjpzZWxmLmlnbm9yaW5nTGludGVyRXJyb3JzPSEwLGlzU3BlY2lhbD0hMTticmVhaztjYXNlImVuZCI6c2VsZi5pZ25vcmluZ0xpbnRlckVycm9ycz0hMSxpc1NwZWNpYWw9ITF9fWNvbW1lbnRUeXBlPXN0cn19KSx7dHlwZTpUb2tlbi5Db21tZW50LGNvbW1lbnRUeXBlOmNvbW1lbnRUeXBlLHZhbHVlOnZhbHVlLGJvZHk6Ym9keSxpc1NwZWNpYWw6aXNTcGVjaWFsLGlzTXVsdGlsaW5lOm9wdC5pc011bHRpbGluZXx8ITEsaXNNYWxmb3JtZWQ6b3B0LmlzTWFsZm9ybWVkfHwhMX19dmFyIGNoMT10aGlzLnBlZWsoKSxjaDI9dGhpcy5wZWVrKDEpLHJlc3Q9dGhpcy5pbnB1dC5zdWJzdHIoMiksc3RhcnRMaW5lPXRoaXMubGluZSxzdGFydENoYXI9dGhpcy5jaGFyLHNlbGY9dGhpcztpZigiKiI9PT1jaDEmJiIvIj09PWNoMilyZXR1cm4gdGhpcy50cmlnZ2VyKCJlcnJvciIse2NvZGU6IkUwMTgiLGxpbmU6c3RhcnRMaW5lLGNoYXJhY3RlcjpzdGFydENoYXJ9KSx0aGlzLnNraXAoMiksbnVsbDtpZigiLyIhPT1jaDF8fCIqIiE9PWNoMiYmIi8iIT09Y2gyKXJldHVybiBudWxsO2lmKCIvIj09PWNoMilyZXR1cm4gdGhpcy5za2lwKHRoaXMuaW5wdXQubGVuZ3RoKSxjb21tZW50VG9rZW4oIi8vIixyZXN0KTt2YXIgYm9keT0iIjtpZigiKiI9PT1jaDIpe2Zvcih0aGlzLmluQ29tbWVudD0hMCx0aGlzLnNraXAoMik7IioiIT09dGhpcy5wZWVrKCl8fCIvIiE9PXRoaXMucGVlaygxKTspaWYoIiI9PT10aGlzLnBlZWsoKSl7aWYoYm9keSs9IlxcbiIsIXRoaXMubmV4dExpbmUoKSlyZXR1cm4gdGhpcy50cmlnZ2VyKCJlcnJvciIse2NvZGU6IkUwMTciLGxpbmU6c3RhcnRMaW5lLGNoYXJhY3RlcjpzdGFydENoYXJ9KSx0aGlzLmluQ29tbWVudD0hMSxjb21tZW50VG9rZW4oIi8qIixib2R5LHtpc011bHRpbGluZTohMCxpc01hbGZvcm1lZDohMH0pfWVsc2UgYm9keSs9dGhpcy5wZWVrKCksdGhpcy5za2lwKCk7cmV0dXJuIHRoaXMuc2tpcCgyKSx0aGlzLmluQ29tbWVudD0hMSxjb21tZW50VG9rZW4oIi8qIixib2R5LHtpc011bHRpbGluZTohMH0pfX0sc2NhbktleXdvcmQ6ZnVuY3Rpb24oKXt2YXIgcmVzdWx0PS9eW2EtekEtWl8kXVthLXpBLVowLTlfJF0qLy5leGVjKHRoaXMuaW5wdXQpLGtleXdvcmRzPVsiaWYiLCJpbiIsImRvIiwidmFyIiwiZm9yIiwibmV3IiwidHJ5IiwibGV0IiwidGhpcyIsImVsc2UiLCJjYXNlIiwidm9pZCIsIndpdGgiLCJlbnVtIiwid2hpbGUiLCJicmVhayIsImNhdGNoIiwidGhyb3ciLCJjb25zdCIsInlpZWxkIiwiY2xhc3MiLCJzdXBlciIsInJldHVybiIsInR5cGVvZiIsImRlbGV0ZSIsInN3aXRjaCIsImV4cG9ydCIsImltcG9ydCIsImRlZmF1bHQiLCJmaW5hbGx5IiwiZXh0ZW5kcyIsImZ1bmN0aW9uIiwiY29udGludWUiLCJkZWJ1Z2dlciIsImluc3RhbmNlb2YiXTtyZXR1cm4gcmVzdWx0JiZrZXl3b3Jkcy5pbmRleE9mKHJlc3VsdFswXSk+PTA/e3R5cGU6VG9rZW4uS2V5d29yZCx2YWx1ZTpyZXN1bHRbMF19Om51bGx9LHNjYW5JZGVudGlmaWVyOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gaXNOb25Bc2NpaUlkZW50aWZpZXJTdGFydChjb2RlKXtyZXR1cm4gY29kZT4yNTZ9ZnVuY3Rpb24gaXNOb25Bc2NpaUlkZW50aWZpZXJQYXJ0KGNvZGUpe3JldHVybiBjb2RlPjI1Nn1mdW5jdGlvbiBpc0hleERpZ2l0KHN0cil7cmV0dXJuL15bMC05YS1mQS1GXSQvLnRlc3Qoc3RyKX1mdW5jdGlvbiByZW1vdmVFc2NhcGVTZXF1ZW5jZXMoaWQpe3JldHVybiBpZC5yZXBsYWNlKC9cXFxcdShbMC05YS1mQS1GXXs0fSkvZyxmdW5jdGlvbihtMCxjb2RlcG9pbnQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGNvZGVwb2ludCwxNikpfSl9dmFyIHR5cGUsY2hhcixpZD0iIixpbmRleD0wLHJlYWRVbmljb2RlRXNjYXBlU2VxdWVuY2U9ZnVuY3Rpb24oKXtpZihpbmRleCs9MSwidSIhPT10aGlzLnBlZWsoaW5kZXgpKXJldHVybiBudWxsO3ZhciBjb2RlLGNoMT10aGlzLnBlZWsoaW5kZXgrMSksY2gyPXRoaXMucGVlayhpbmRleCsyKSxjaDM9dGhpcy5wZWVrKGluZGV4KzMpLGNoND10aGlzLnBlZWsoaW5kZXgrNCk7cmV0dXJuIGlzSGV4RGlnaXQoY2gxKSYmaXNIZXhEaWdpdChjaDIpJiZpc0hleERpZ2l0KGNoMykmJmlzSGV4RGlnaXQoY2g0KT8oY29kZT1wYXJzZUludChjaDErY2gyK2NoMytjaDQsMTYpLGFzY2lpSWRlbnRpZmllclBhcnRUYWJsZVtjb2RlXXx8aXNOb25Bc2NpaUlkZW50aWZpZXJQYXJ0KGNvZGUpPyhpbmRleCs9NSwiXFxcXHUiK2NoMStjaDIrY2gzK2NoNCk6bnVsbCk6bnVsbH0uYmluZCh0aGlzKSxnZXRJZGVudGlmaWVyU3RhcnQ9ZnVuY3Rpb24oKXt2YXIgY2hyPXRoaXMucGVlayhpbmRleCksY29kZT1jaHIuY2hhckNvZGVBdCgwKTtyZXR1cm4gOTI9PT1jb2RlP3JlYWRVbmljb2RlRXNjYXBlU2VxdWVuY2UoKToxMjg+Y29kZT9hc2NpaUlkZW50aWZpZXJTdGFydFRhYmxlW2NvZGVdPyhpbmRleCs9MSxjaHIpOm51bGw6aXNOb25Bc2NpaUlkZW50aWZpZXJTdGFydChjb2RlKT8oaW5kZXgrPTEsY2hyKTpudWxsfS5iaW5kKHRoaXMpLGdldElkZW50aWZpZXJQYXJ0PWZ1bmN0aW9uKCl7dmFyIGNocj10aGlzLnBlZWsoaW5kZXgpLGNvZGU9Y2hyLmNoYXJDb2RlQXQoMCk7cmV0dXJuIDkyPT09Y29kZT9yZWFkVW5pY29kZUVzY2FwZVNlcXVlbmNlKCk6MTI4PmNvZGU/YXNjaWlJZGVudGlmaWVyUGFydFRhYmxlW2NvZGVdPyhpbmRleCs9MSxjaHIpOm51bGw6aXNOb25Bc2NpaUlkZW50aWZpZXJQYXJ0KGNvZGUpPyhpbmRleCs9MSxjaHIpOm51bGx9LmJpbmQodGhpcyk7aWYoY2hhcj1nZXRJZGVudGlmaWVyU3RhcnQoKSxudWxsPT09Y2hhcilyZXR1cm4gbnVsbDtmb3IoaWQ9Y2hhcjtjaGFyPWdldElkZW50aWZpZXJQYXJ0KCksbnVsbCE9PWNoYXI7KWlkKz1jaGFyO3N3aXRjaChpZCl7Y2FzZSJ0cnVlIjpjYXNlImZhbHNlIjp0eXBlPVRva2VuLkJvb2xlYW5MaXRlcmFsO2JyZWFrO2Nhc2UibnVsbCI6dHlwZT1Ub2tlbi5OdWxsTGl0ZXJhbDticmVhaztkZWZhdWx0OnR5cGU9VG9rZW4uSWRlbnRpZmllcn1yZXR1cm57dHlwZTp0eXBlLHZhbHVlOnJlbW92ZUVzY2FwZVNlcXVlbmNlcyhpZCksdGV4dDppZCx0b2tlbkxlbmd0aDppZC5sZW5ndGh9fSxzY2FuTnVtZXJpY0xpdGVyYWw6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChzdHIpe3JldHVybi9eWzAtOV0kLy50ZXN0KHN0cil9ZnVuY3Rpb24gaXNPY3RhbERpZ2l0KHN0cil7cmV0dXJuL15bMC03XSQvLnRlc3Qoc3RyKX1mdW5jdGlvbiBpc0JpbmFyeURpZ2l0KHN0cil7cmV0dXJuL15bMDFdJC8udGVzdChzdHIpfWZ1bmN0aW9uIGlzSGV4RGlnaXQoc3RyKXtyZXR1cm4vXlswLTlhLWZBLUZdJC8udGVzdChzdHIpfWZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoKXtyZXR1cm4iJCI9PT1jaHx8Il8iPT09Y2h8fCJcXFxcIj09PWNofHxjaD49ImEiJiYieiI+PWNofHxjaD49IkEiJiYiWiI+PWNofXZhciBiYWQsaW5kZXg9MCx2YWx1ZT0iIixsZW5ndGg9dGhpcy5pbnB1dC5sZW5ndGgsY2hhcj10aGlzLnBlZWsoaW5kZXgpLGlzQWxsb3dlZERpZ2l0PWlzRGVjaW1hbERpZ2l0LGJhc2U9MTAsaXNMZWdhY3k9ITE7aWYoIi4iIT09Y2hhciYmIWlzRGVjaW1hbERpZ2l0KGNoYXIpKXJldHVybiBudWxsO2lmKCIuIiE9PWNoYXIpe2Zvcih2YWx1ZT10aGlzLnBlZWsoaW5kZXgpLGluZGV4Kz0xLGNoYXI9dGhpcy5wZWVrKGluZGV4KSwiMCI9PT12YWx1ZSYmKCgieCI9PT1jaGFyfHwiWCI9PT1jaGFyKSYmKGlzQWxsb3dlZERpZ2l0PWlzSGV4RGlnaXQsYmFzZT0xNixpbmRleCs9MSx2YWx1ZSs9Y2hhciksKCJvIj09PWNoYXJ8fCJPIj09PWNoYXIpJiYoaXNBbGxvd2VkRGlnaXQ9aXNPY3RhbERpZ2l0LGJhc2U9OCxzdGF0ZS5pbkVTNighMCl8fHRoaXMudHJpZ2dlcigid2FybmluZyIse2NvZGU6IlcxMTkiLGxpbmU6dGhpcy5saW5lLGNoYXJhY3Rlcjp0aGlzLmNoYXIsZGF0YTpbIk9jdGFsIGludGVnZXIgbGl0ZXJhbCIsIjYiXX0pLGluZGV4Kz0xLHZhbHVlKz1jaGFyKSwoImIiPT09Y2hhcnx8IkIiPT09Y2hhcikmJihpc0FsbG93ZWREaWdpdD1pc0JpbmFyeURpZ2l0LGJhc2U9MixzdGF0ZS5pbkVTNighMCl8fHRoaXMudHJpZ2dlcigid2FybmluZyIse2NvZGU6IlcxMTkiLGxpbmU6dGhpcy5saW5lLGNoYXJhY3Rlcjp0aGlzLmNoYXIsZGF0YTpbIkJpbmFyeSBpbnRlZ2VyIGxpdGVyYWwiLCI2Il19KSxpbmRleCs9MSx2YWx1ZSs9Y2hhciksaXNPY3RhbERpZ2l0KGNoYXIpJiYoaXNBbGxvd2VkRGlnaXQ9aXNPY3RhbERpZ2l0LGJhc2U9OCxpc0xlZ2FjeT0hMCxiYWQ9ITEsaW5kZXgrPTEsdmFsdWUrPWNoYXIpLCFpc09jdGFsRGlnaXQoY2hhcikmJmlzRGVjaW1hbERpZ2l0KGNoYXIpJiYoaW5kZXgrPTEsdmFsdWUrPWNoYXIpKTtsZW5ndGg+aW5kZXg7KXtpZihjaGFyPXRoaXMucGVlayhpbmRleCksaXNMZWdhY3kmJmlzRGVjaW1hbERpZ2l0KGNoYXIpKWJhZD0hMDtlbHNlIGlmKCFpc0FsbG93ZWREaWdpdChjaGFyKSlicmVhazt2YWx1ZSs9Y2hhcixpbmRleCs9MX1pZihpc0FsbG93ZWREaWdpdCE9PWlzRGVjaW1hbERpZ2l0KXJldHVybiFpc0xlZ2FjeSYmMj49dmFsdWUubGVuZ3RoP3t0eXBlOlRva2VuLk51bWVyaWNMaXRlcmFsLHZhbHVlOnZhbHVlLGlzTWFsZm9ybWVkOiEwfTpsZW5ndGg+aW5kZXgmJihjaGFyPXRoaXMucGVlayhpbmRleCksaXNJZGVudGlmaWVyU3RhcnQoY2hhcikpP251bGw6e3R5cGU6VG9rZW4uTnVtZXJpY0xpdGVyYWwsdmFsdWU6dmFsdWUsYmFzZTpiYXNlLGlzTGVnYWN5OmlzTGVnYWN5LGlzTWFsZm9ybWVkOiExfX1pZigiLiI9PT1jaGFyKWZvcih2YWx1ZSs9Y2hhcixpbmRleCs9MTtsZW5ndGg+aW5kZXgmJihjaGFyPXRoaXMucGVlayhpbmRleCksaXNEZWNpbWFsRGlnaXQoY2hhcikpOyl2YWx1ZSs9Y2hhcixpbmRleCs9MTtpZigiZSI9PT1jaGFyfHwiRSI9PT1jaGFyKXtpZih2YWx1ZSs9Y2hhcixpbmRleCs9MSxjaGFyPXRoaXMucGVlayhpbmRleCksKCIrIj09PWNoYXJ8fCItIj09PWNoYXIpJiYodmFsdWUrPXRoaXMucGVlayhpbmRleCksaW5kZXgrPTEpLGNoYXI9dGhpcy5wZWVrKGluZGV4KSwhaXNEZWNpbWFsRGlnaXQoY2hhcikpcmV0dXJuIG51bGw7Zm9yKHZhbHVlKz1jaGFyLGluZGV4Kz0xO2xlbmd0aD5pbmRleCYmKGNoYXI9dGhpcy5wZWVrKGluZGV4KSxpc0RlY2ltYWxEaWdpdChjaGFyKSk7KXZhbHVlKz1jaGFyLGluZGV4Kz0xfXJldHVybiBsZW5ndGg+aW5kZXgmJihjaGFyPXRoaXMucGVlayhpbmRleCksaXNJZGVudGlmaWVyU3RhcnQoY2hhcikpP251bGw6e3R5cGU6VG9rZW4uTnVtZXJpY0xpdGVyYWwsdmFsdWU6dmFsdWUsYmFzZTpiYXNlLGlzTWFsZm9ybWVkOiFpc0Zpbml0ZSh2YWx1ZSl9fSxzY2FuRXNjYXBlU2VxdWVuY2U6ZnVuY3Rpb24oY2hlY2tzKXt2YXIgYWxsb3dOZXdMaW5lPSExLGp1bXA9MTt0aGlzLnNraXAoKTt2YXIgY2hhcj10aGlzLnBlZWsoKTtzd2l0Y2goY2hhcil7Y2FzZSJcJyI6dGhpcy50cmlnZ2VyQXN5bmMoIndhcm5pbmciLHtjb2RlOiJXMTE0IixsaW5lOnRoaXMubGluZSxjaGFyYWN0ZXI6dGhpcy5jaGFyLGRhdGE6WyJcXFxcXCciXX0sY2hlY2tzLGZ1bmN0aW9uKCl7cmV0dXJuIHN0YXRlLmpzb25Nb2RlfSk7YnJlYWs7Y2FzZSJiIjpjaGFyPSJcXFxcYiI7YnJlYWs7Y2FzZSJmIjpjaGFyPSJcXFxcZiI7YnJlYWs7Y2FzZSJuIjpjaGFyPSJcXFxcbiI7YnJlYWs7Y2FzZSJyIjpjaGFyPSJcXFxcciI7YnJlYWs7Y2FzZSJ0IjpjaGFyPSJcXFxcdCI7YnJlYWs7Y2FzZSIwIjpjaGFyPSJcXFxcMCI7dmFyIG49cGFyc2VJbnQodGhpcy5wZWVrKDEpLDEwKTt0aGlzLnRyaWdnZXJBc3luYygid2FybmluZyIse2NvZGU6IlcxMTUiLGxpbmU6dGhpcy5saW5lLGNoYXJhY3Rlcjp0aGlzLmNoYXJ9LGNoZWNrcyxmdW5jdGlvbigpe3JldHVybiBuPj0wJiY3Pj1uJiZzdGF0ZS5pc1N0cmljdCgpfSk7YnJlYWs7Y2FzZSJ1Ijp2YXIgaGV4Q29kZT10aGlzLmlucHV0LnN1YnN0cigxLDQpLGNvZGU9cGFyc2VJbnQoaGV4Q29kZSwxNik7aXNOYU4oY29kZSkmJnRoaXMudHJpZ2dlcigid2FybmluZyIse2NvZGU6IlcwNTIiLGxpbmU6dGhpcy5saW5lLGNoYXJhY3Rlcjp0aGlzLmNoYXIsZGF0YTpbInUiK2hleENvZGVdfSksY2hhcj1TdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLGp1bXA9NTticmVhaztjYXNlInYiOnRoaXMudHJpZ2dlckFzeW5jKCJ3YXJuaW5nIix7Y29kZToiVzExNCIsbGluZTp0aGlzLmxpbmUsY2hhcmFjdGVyOnRoaXMuY2hhcixkYXRhOlsiXFxcXHYiXX0sY2hlY2tzLGZ1bmN0aW9uKCl7cmV0dXJuIHN0YXRlLmpzb25Nb2RlfSksY2hhcj0iXHYiO2JyZWFrO2Nhc2UieCI6dmFyIHg9cGFyc2VJbnQodGhpcy5pbnB1dC5zdWJzdHIoMSwyKSwxNik7dGhpcy50cmlnZ2VyQXN5bmMoIndhcm5pbmciLHtjb2RlOiJXMTE0IixsaW5lOnRoaXMubGluZSxjaGFyYWN0ZXI6dGhpcy5jaGFyLGRhdGE6WyJcXFxceC0iXX0sY2hlY2tzLGZ1bmN0aW9uKCl7cmV0dXJuIHN0YXRlLmpzb25Nb2RlfSksY2hhcj1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpLGp1bXA9MzticmVhaztjYXNlIlxcXFwiOmNoYXI9IlxcXFxcXFxcIjticmVhaztjYXNlXCciXCc6Y2hhcj1cJ1xcXFwiXCc7YnJlYWs7Y2FzZSIvIjpicmVhaztjYXNlIiI6YWxsb3dOZXdMaW5lPSEwLGNoYXI9IiJ9cmV0dXJueyJjaGFyIjpjaGFyLGp1bXA6anVtcCxhbGxvd05ld0xpbmU6YWxsb3dOZXdMaW5lfX0sc2NhblRlbXBsYXRlTGl0ZXJhbDpmdW5jdGlvbihjaGVja3Mpe3ZhciB0b2tlblR5cGUsY2gsdmFsdWU9IiIsc3RhcnRMaW5lPXRoaXMubGluZSxzdGFydENoYXI9dGhpcy5jaGFyLGRlcHRoPXRoaXMudGVtcGxhdGVTdGFydHMubGVuZ3RoO2lmKCFzdGF0ZS5pbkVTNighMCkpcmV0dXJuIG51bGw7aWYoImAiPT09dGhpcy5wZWVrKCkpdG9rZW5UeXBlPVRva2VuLlRlbXBsYXRlSGVhZCx0aGlzLnRlbXBsYXRlU3RhcnRzLnB1c2goe2xpbmU6dGhpcy5saW5lLCJjaGFyIjp0aGlzLmNoYXJ9KSxkZXB0aD10aGlzLnRlbXBsYXRlU3RhcnRzLmxlbmd0aCx0aGlzLnNraXAoMSksdGhpcy5wdXNoQ29udGV4dChDb250ZXh0LlRlbXBsYXRlKTtlbHNle2lmKCF0aGlzLmluQ29udGV4dChDb250ZXh0LlRlbXBsYXRlKXx8In0iIT09dGhpcy5wZWVrKCkpcmV0dXJuIG51bGw7dG9rZW5UeXBlPVRva2VuLlRlbXBsYXRlTWlkZGxlfWZvcig7ImAiIT09dGhpcy5wZWVrKCk7KXtmb3IoOyIiPT09KGNoPXRoaXMucGVlaygpKTspaWYodmFsdWUrPSJcXG4iLCF0aGlzLm5leHRMaW5lKCkpe3ZhciBzdGFydFBvcz10aGlzLnRlbXBsYXRlU3RhcnRzLnBvcCgpO3JldHVybiB0aGlzLnRyaWdnZXIoImVycm9yIix7Y29kZToiRTA1MiIsbGluZTpzdGFydFBvcy5saW5lLGNoYXJhY3RlcjpzdGFydFBvcy5jaGFyfSkse3R5cGU6dG9rZW5UeXBlLHZhbHVlOnZhbHVlLHN0YXJ0TGluZTpzdGFydExpbmUsc3RhcnRDaGFyOnN0YXJ0Q2hhcixpc1VuY2xvc2VkOiEwLGRlcHRoOmRlcHRoLGNvbnRleHQ6dGhpcy5wb3BDb250ZXh0KCl9fWlmKCIkIj09PWNoJiYieyI9PT10aGlzLnBlZWsoMSkpcmV0dXJuIHZhbHVlKz0iJHsiLHRoaXMuc2tpcCgyKSx7dHlwZTp0b2tlblR5cGUsdmFsdWU6dmFsdWUsc3RhcnRMaW5lOnN0YXJ0TGluZSxzdGFydENoYXI6c3RhcnRDaGFyLGlzVW5jbG9zZWQ6ITEsZGVwdGg6ZGVwdGgsY29udGV4dDp0aGlzLmN1cnJlbnRDb250ZXh0KCl9O1xuaWYoIlxcXFwiPT09Y2gpe3ZhciBlc2NhcGU9dGhpcy5zY2FuRXNjYXBlU2VxdWVuY2UoY2hlY2tzKTt2YWx1ZSs9ZXNjYXBlLmNoYXIsdGhpcy5za2lwKGVzY2FwZS5qdW1wKX1lbHNlImAiIT09Y2gmJih2YWx1ZSs9Y2gsdGhpcy5za2lwKDEpKX1yZXR1cm4gdG9rZW5UeXBlPXRva2VuVHlwZT09PVRva2VuLlRlbXBsYXRlSGVhZD9Ub2tlbi5Ob1N1YnN0VGVtcGxhdGU6VG9rZW4uVGVtcGxhdGVUYWlsLHRoaXMuc2tpcCgxKSx0aGlzLnRlbXBsYXRlU3RhcnRzLnBvcCgpLHt0eXBlOnRva2VuVHlwZSx2YWx1ZTp2YWx1ZSxzdGFydExpbmU6c3RhcnRMaW5lLHN0YXJ0Q2hhcjpzdGFydENoYXIsaXNVbmNsb3NlZDohMSxkZXB0aDpkZXB0aCxjb250ZXh0OnRoaXMucG9wQ29udGV4dCgpfX0sc2NhblN0cmluZ0xpdGVyYWw6ZnVuY3Rpb24oY2hlY2tzKXt2YXIgcXVvdGU9dGhpcy5wZWVrKCk7aWYoXCciXCchPT1xdW90ZSYmIlwnIiE9PXF1b3RlKXJldHVybiBudWxsO3RoaXMudHJpZ2dlckFzeW5jKCJ3YXJuaW5nIix7Y29kZToiVzEwOCIsbGluZTp0aGlzLmxpbmUsY2hhcmFjdGVyOnRoaXMuY2hhcn0sY2hlY2tzLGZ1bmN0aW9uKCl7cmV0dXJuIHN0YXRlLmpzb25Nb2RlJiZcJyJcJyE9PXF1b3RlfSk7dmFyIHZhbHVlPSIiLHN0YXJ0TGluZT10aGlzLmxpbmUsc3RhcnRDaGFyPXRoaXMuY2hhcixhbGxvd05ld0xpbmU9ITE7Zm9yKHRoaXMuc2tpcCgpO3RoaXMucGVlaygpIT09cXVvdGU7KWlmKCIiPT09dGhpcy5wZWVrKCkpe2lmKGFsbG93TmV3TGluZT8oYWxsb3dOZXdMaW5lPSExLHRoaXMudHJpZ2dlckFzeW5jKCJ3YXJuaW5nIix7Y29kZToiVzA0MyIsbGluZTp0aGlzLmxpbmUsY2hhcmFjdGVyOnRoaXMuY2hhcn0sY2hlY2tzLGZ1bmN0aW9uKCl7cmV0dXJuIXN0YXRlLm9wdGlvbi5tdWx0aXN0cn0pLHRoaXMudHJpZ2dlckFzeW5jKCJ3YXJuaW5nIix7Y29kZToiVzA0MiIsbGluZTp0aGlzLmxpbmUsY2hhcmFjdGVyOnRoaXMuY2hhcn0sY2hlY2tzLGZ1bmN0aW9uKCl7cmV0dXJuIHN0YXRlLmpzb25Nb2RlJiZzdGF0ZS5vcHRpb24ubXVsdGlzdHJ9KSk6dGhpcy50cmlnZ2VyKCJ3YXJuaW5nIix7Y29kZToiVzExMiIsbGluZTp0aGlzLmxpbmUsY2hhcmFjdGVyOnRoaXMuY2hhcn0pLCF0aGlzLm5leHRMaW5lKCkpcmV0dXJuIHRoaXMudHJpZ2dlcigiZXJyb3IiLHtjb2RlOiJFMDI5IixsaW5lOnN0YXJ0TGluZSxjaGFyYWN0ZXI6c3RhcnRDaGFyfSkse3R5cGU6VG9rZW4uU3RyaW5nTGl0ZXJhbCx2YWx1ZTp2YWx1ZSxzdGFydExpbmU6c3RhcnRMaW5lLHN0YXJ0Q2hhcjpzdGFydENoYXIsaXNVbmNsb3NlZDohMCxxdW90ZTpxdW90ZX19ZWxzZXthbGxvd05ld0xpbmU9ITE7dmFyIGNoYXI9dGhpcy5wZWVrKCksanVtcD0xO2lmKCIgIj5jaGFyJiZ0aGlzLnRyaWdnZXIoIndhcm5pbmciLHtjb2RlOiJXMTEzIixsaW5lOnRoaXMubGluZSxjaGFyYWN0ZXI6dGhpcy5jaGFyLGRhdGE6WyI8bm9uLXByaW50YWJsZT4iXX0pLCJcXFxcIj09PWNoYXIpe3ZhciBwYXJzZWQ9dGhpcy5zY2FuRXNjYXBlU2VxdWVuY2UoY2hlY2tzKTtjaGFyPXBhcnNlZC5jaGFyLGp1bXA9cGFyc2VkLmp1bXAsYWxsb3dOZXdMaW5lPXBhcnNlZC5hbGxvd05ld0xpbmV9dmFsdWUrPWNoYXIsdGhpcy5za2lwKGp1bXApfXJldHVybiB0aGlzLnNraXAoKSx7dHlwZTpUb2tlbi5TdHJpbmdMaXRlcmFsLHZhbHVlOnZhbHVlLHN0YXJ0TGluZTpzdGFydExpbmUsc3RhcnRDaGFyOnN0YXJ0Q2hhcixpc1VuY2xvc2VkOiExLHF1b3RlOnF1b3RlfX0sc2NhblJlZ0V4cDpmdW5jdGlvbigpe3ZhciB0ZXJtaW5hdGVkLGluZGV4PTAsbGVuZ3RoPXRoaXMuaW5wdXQubGVuZ3RoLGNoYXI9dGhpcy5wZWVrKCksdmFsdWU9Y2hhcixib2R5PSIiLGZsYWdzPVtdLG1hbGZvcm1lZD0hMSxpc0NoYXJTZXQ9ITEsc2NhblVuZXhwZWN0ZWRDaGFycz1mdW5jdGlvbigpeyIgIj5jaGFyJiYobWFsZm9ybWVkPSEwLHRoaXMudHJpZ2dlcigid2FybmluZyIse2NvZGU6IlcwNDgiLGxpbmU6dGhpcy5saW5lLGNoYXJhY3Rlcjp0aGlzLmNoYXJ9KSksIjwiPT09Y2hhciYmKG1hbGZvcm1lZD0hMCx0aGlzLnRyaWdnZXIoIndhcm5pbmciLHtjb2RlOiJXMDQ5IixsaW5lOnRoaXMubGluZSxjaGFyYWN0ZXI6dGhpcy5jaGFyLGRhdGE6W2NoYXJdfSkpfS5iaW5kKHRoaXMpO2lmKCF0aGlzLnByZXJlZ3x8Ii8iIT09Y2hhcilyZXR1cm4gbnVsbDtmb3IoaW5kZXgrPTEsdGVybWluYXRlZD0hMTtsZW5ndGg+aW5kZXg7KWlmKGNoYXI9dGhpcy5wZWVrKGluZGV4KSx2YWx1ZSs9Y2hhcixib2R5Kz1jaGFyLGlzQ2hhclNldCkiXSI9PT1jaGFyJiYoIlxcXFwiIT09dGhpcy5wZWVrKGluZGV4LTEpfHwiXFxcXCI9PT10aGlzLnBlZWsoaW5kZXgtMikpJiYoaXNDaGFyU2V0PSExKSwiXFxcXCI9PT1jaGFyJiYoaW5kZXgrPTEsY2hhcj10aGlzLnBlZWsoaW5kZXgpLGJvZHkrPWNoYXIsdmFsdWUrPWNoYXIsc2NhblVuZXhwZWN0ZWRDaGFycygpKSxpbmRleCs9MTtlbHNle2lmKCJcXFxcIj09PWNoYXIpe2lmKGluZGV4Kz0xLGNoYXI9dGhpcy5wZWVrKGluZGV4KSxib2R5Kz1jaGFyLHZhbHVlKz1jaGFyLHNjYW5VbmV4cGVjdGVkQ2hhcnMoKSwiLyI9PT1jaGFyKXtpbmRleCs9MTtjb250aW51ZX1pZigiWyI9PT1jaGFyKXtpbmRleCs9MTtjb250aW51ZX19aWYoIlsiIT09Y2hhcil7aWYoIi8iPT09Y2hhcil7Ym9keT1ib2R5LnN1YnN0cigwLGJvZHkubGVuZ3RoLTEpLHRlcm1pbmF0ZWQ9ITAsaW5kZXgrPTE7YnJlYWt9aW5kZXgrPTF9ZWxzZSBpc0NoYXJTZXQ9ITAsaW5kZXgrPTF9aWYoIXRlcm1pbmF0ZWQpcmV0dXJuIHRoaXMudHJpZ2dlcigiZXJyb3IiLHtjb2RlOiJFMDE1IixsaW5lOnRoaXMubGluZSxjaGFyYWN0ZXI6dGhpcy5mcm9tfSksdm9pZCB0aGlzLnRyaWdnZXIoImZhdGFsIix7bGluZTp0aGlzLmxpbmUsZnJvbTp0aGlzLmZyb219KTtmb3IoO2xlbmd0aD5pbmRleCYmKGNoYXI9dGhpcy5wZWVrKGluZGV4KSwvW2dpbV0vLnRlc3QoY2hhcikpOylmbGFncy5wdXNoKGNoYXIpLHZhbHVlKz1jaGFyLGluZGV4Kz0xO3RyeXtSZWdFeHAoYm9keSxmbGFncy5qb2luKCIiKSl9Y2F0Y2goZXJyKXttYWxmb3JtZWQ9ITAsdGhpcy50cmlnZ2VyKCJlcnJvciIse2NvZGU6IkUwMTYiLGxpbmU6dGhpcy5saW5lLGNoYXJhY3Rlcjp0aGlzLmNoYXIsZGF0YTpbZXJyLm1lc3NhZ2VdfSl9cmV0dXJue3R5cGU6VG9rZW4uUmVnRXhwLHZhbHVlOnZhbHVlLGZsYWdzOmZsYWdzLGlzTWFsZm9ybWVkOm1hbGZvcm1lZH19LHNjYW5Ob25CcmVha2luZ1NwYWNlczpmdW5jdGlvbigpe3JldHVybiBzdGF0ZS5vcHRpb24ubm9uYnNwP3RoaXMuaW5wdXQuc2VhcmNoKC8oXFx1MDBBMCkvKTotMX0sc2NhblVuc2FmZUNoYXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXQuc2VhcmNoKHJlZy51bnNhZmVDaGFycyl9LG5leHQ6ZnVuY3Rpb24oY2hlY2tzKXt0aGlzLmZyb209dGhpcy5jaGFyO3ZhciBzdGFydDtpZigvXFxzLy50ZXN0KHRoaXMucGVlaygpKSlmb3Ioc3RhcnQ9dGhpcy5jaGFyOy9cXHMvLnRlc3QodGhpcy5wZWVrKCkpOyl0aGlzLmZyb20rPTEsdGhpcy5za2lwKCk7dmFyIG1hdGNoPXRoaXMuc2NhbkNvbW1lbnRzKCl8fHRoaXMuc2NhblN0cmluZ0xpdGVyYWwoY2hlY2tzKXx8dGhpcy5zY2FuVGVtcGxhdGVMaXRlcmFsKGNoZWNrcyk7cmV0dXJuIG1hdGNoP21hdGNoOihtYXRjaD10aGlzLnNjYW5SZWdFeHAoKXx8dGhpcy5zY2FuUHVuY3R1YXRvcigpfHx0aGlzLnNjYW5LZXl3b3JkKCl8fHRoaXMuc2NhbklkZW50aWZpZXIoKXx8dGhpcy5zY2FuTnVtZXJpY0xpdGVyYWwoKSxtYXRjaD8odGhpcy5za2lwKG1hdGNoLnRva2VuTGVuZ3RofHxtYXRjaC52YWx1ZS5sZW5ndGgpLG1hdGNoKTpudWxsKX0sbmV4dExpbmU6ZnVuY3Rpb24oKXt2YXIgY2hhcjtpZih0aGlzLmxpbmU+PXRoaXMuZ2V0TGluZXMoKS5sZW5ndGgpcmV0dXJuITE7dGhpcy5pbnB1dD10aGlzLmdldExpbmVzKClbdGhpcy5saW5lXSx0aGlzLmxpbmUrPTEsdGhpcy5jaGFyPTEsdGhpcy5mcm9tPTE7dmFyIGlucHV0VHJpbW1lZD10aGlzLmlucHV0LnRyaW0oKSxzdGFydHNXaXRoPWZ1bmN0aW9uKCl7cmV0dXJuIF8uc29tZShhcmd1bWVudHMsZnVuY3Rpb24ocHJlZml4KXtyZXR1cm4gMD09PWlucHV0VHJpbW1lZC5pbmRleE9mKHByZWZpeCl9KX0sZW5kc1dpdGg9ZnVuY3Rpb24oKXtyZXR1cm4gXy5zb21lKGFyZ3VtZW50cyxmdW5jdGlvbihzdWZmaXgpe3JldHVybi0xIT09aW5wdXRUcmltbWVkLmluZGV4T2Yoc3VmZml4LGlucHV0VHJpbW1lZC5sZW5ndGgtc3VmZml4Lmxlbmd0aCl9KX07aWYodGhpcy5pZ25vcmluZ0xpbnRlckVycm9ycz09PSEwJiYoc3RhcnRzV2l0aCgiLyoiLCIvLyIpfHx0aGlzLmluQ29tbWVudCYmZW5kc1dpdGgoIiovIil8fCh0aGlzLmlucHV0PSIiKSksY2hhcj10aGlzLnNjYW5Ob25CcmVha2luZ1NwYWNlcygpLGNoYXI+PTAmJnRoaXMudHJpZ2dlcigid2FybmluZyIse2NvZGU6IlcxMjUiLGxpbmU6dGhpcy5saW5lLGNoYXJhY3RlcjpjaGFyKzF9KSx0aGlzLmlucHV0PXRoaXMuaW5wdXQucmVwbGFjZSgvXFx0L2csc3RhdGUudGFiKSxjaGFyPXRoaXMuc2NhblVuc2FmZUNoYXJzKCksY2hhcj49MCYmdGhpcy50cmlnZ2VyKCJ3YXJuaW5nIix7Y29kZToiVzEwMCIsbGluZTp0aGlzLmxpbmUsY2hhcmFjdGVyOmNoYXJ9KSwhdGhpcy5pZ25vcmluZ0xpbnRlckVycm9ycyYmc3RhdGUub3B0aW9uLm1heGxlbiYmc3RhdGUub3B0aW9uLm1heGxlbjx0aGlzLmlucHV0Lmxlbmd0aCl7dmFyIGluQ29tbWVudD10aGlzLmluQ29tbWVudHx8c3RhcnRzV2l0aC5jYWxsKGlucHV0VHJpbW1lZCwiLy8iKXx8c3RhcnRzV2l0aC5jYWxsKGlucHV0VHJpbW1lZCwiLyoiKSxzaG91bGRUcmlnZ2VyRXJyb3I9IWluQ29tbWVudHx8IXJlZy5tYXhsZW5FeGNlcHRpb24udGVzdChpbnB1dFRyaW1tZWQpO3Nob3VsZFRyaWdnZXJFcnJvciYmdGhpcy50cmlnZ2VyKCJ3YXJuaW5nIix7Y29kZToiVzEwMSIsbGluZTp0aGlzLmxpbmUsY2hhcmFjdGVyOnRoaXMuaW5wdXQubGVuZ3RofSl9cmV0dXJuITB9LHN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5uZXh0TGluZSgpfSx0b2tlbjpmdW5jdGlvbigpe2Z1bmN0aW9uIGlzUmVzZXJ2ZWQodG9rZW4saXNQcm9wZXJ0eSl7aWYoIXRva2VuLnJlc2VydmVkKXJldHVybiExO3ZhciBtZXRhPXRva2VuLm1ldGE7aWYobWV0YSYmbWV0YS5pc0Z1dHVyZVJlc2VydmVkV29yZCYmc3RhdGUuaW5FUzUoKSl7aWYoIW1ldGEuZXM1KXJldHVybiExO2lmKG1ldGEuc3RyaWN0T25seSYmIXN0YXRlLm9wdGlvbi5zdHJpY3QmJiFzdGF0ZS5pc1N0cmljdCgpKXJldHVybiExO2lmKGlzUHJvcGVydHkpcmV0dXJuITF9cmV0dXJuITB9Zm9yKHZhciB0b2tlbixjaGVja3M9YXN5bmNUcmlnZ2VyKCksY3JlYXRlPWZ1bmN0aW9uKHR5cGUsdmFsdWUsaXNQcm9wZXJ0eSx0b2tlbil7dmFyIG9iajtpZigiKGVuZGxpbmUpIiE9PXR5cGUmJiIoZW5kKSIhPT10eXBlJiYodGhpcy5wcmVyZWc9ITEpLCIocHVuY3R1YXRvcikiPT09dHlwZSl7c3dpdGNoKHZhbHVlKXtjYXNlIi4iOmNhc2UiKSI6Y2FzZSJ+IjpjYXNlIiMiOmNhc2UiXSI6Y2FzZSIrKyI6Y2FzZSItLSI6dGhpcy5wcmVyZWc9ITE7YnJlYWs7ZGVmYXVsdDp0aGlzLnByZXJlZz0hMH1vYmo9T2JqZWN0LmNyZWF0ZShzdGF0ZS5zeW50YXhbdmFsdWVdfHxzdGF0ZS5zeW50YXhbIihlcnJvcikiXSl9cmV0dXJuIihpZGVudGlmaWVyKSI9PT10eXBlJiYoKCJyZXR1cm4iPT09dmFsdWV8fCJjYXNlIj09PXZhbHVlfHwidHlwZW9mIj09PXZhbHVlKSYmKHRoaXMucHJlcmVnPSEwKSxfLmhhcyhzdGF0ZS5zeW50YXgsdmFsdWUpJiYob2JqPU9iamVjdC5jcmVhdGUoc3RhdGUuc3ludGF4W3ZhbHVlXXx8c3RhdGUuc3ludGF4WyIoZXJyb3IpIl0pLGlzUmVzZXJ2ZWQob2JqLGlzUHJvcGVydHkmJiIoaWRlbnRpZmllcikiPT09dHlwZSl8fChvYmo9bnVsbCkpKSxvYmp8fChvYmo9T2JqZWN0LmNyZWF0ZShzdGF0ZS5zeW50YXhbdHlwZV0pKSxvYmouaWRlbnRpZmllcj0iKGlkZW50aWZpZXIpIj09PXR5cGUsb2JqLnR5cGU9b2JqLnR5cGV8fHR5cGUsb2JqLnZhbHVlPXZhbHVlLG9iai5saW5lPXRoaXMubGluZSxvYmouY2hhcmFjdGVyPXRoaXMuY2hhcixvYmouZnJvbT10aGlzLmZyb20sb2JqLmlkZW50aWZpZXImJnRva2VuJiYob2JqLnJhd190ZXh0PXRva2VuLnRleHR8fHRva2VuLnZhbHVlKSx0b2tlbiYmdG9rZW4uc3RhcnRMaW5lJiZ0b2tlbi5zdGFydExpbmUhPT10aGlzLmxpbmUmJihvYmouc3RhcnRMaW5lPXRva2VuLnN0YXJ0TGluZSksdG9rZW4mJnRva2VuLmNvbnRleHQmJihvYmouY29udGV4dD10b2tlbi5jb250ZXh0KSx0b2tlbiYmdG9rZW4uZGVwdGgmJihvYmouZGVwdGg9dG9rZW4uZGVwdGgpLHRva2VuJiZ0b2tlbi5pc1VuY2xvc2VkJiYob2JqLmlzVW5jbG9zZWQ9dG9rZW4uaXNVbmNsb3NlZCksaXNQcm9wZXJ0eSYmb2JqLmlkZW50aWZpZXImJihvYmouaXNQcm9wZXJ0eT1pc1Byb3BlcnR5KSxvYmouY2hlY2s9Y2hlY2tzLmNoZWNrLG9ian0uYmluZCh0aGlzKTs7KXtpZighdGhpcy5pbnB1dC5sZW5ndGgpcmV0dXJuIHRoaXMubmV4dExpbmUoKT9jcmVhdGUoIihlbmRsaW5lKSIsIiIpOnRoaXMuZXhoYXVzdGVkP251bGw6KHRoaXMuZXhoYXVzdGVkPSEwLGNyZWF0ZSgiKGVuZCkiLCIiKSk7aWYodG9rZW49dGhpcy5uZXh0KGNoZWNrcykpc3dpdGNoKHRva2VuLnR5cGUpe2Nhc2UgVG9rZW4uU3RyaW5nTGl0ZXJhbDpyZXR1cm4gdGhpcy50cmlnZ2VyQXN5bmMoIlN0cmluZyIse2xpbmU6dGhpcy5saW5lLCJjaGFyIjp0aGlzLmNoYXIsZnJvbTp0aGlzLmZyb20sc3RhcnRMaW5lOnRva2VuLnN0YXJ0TGluZSxzdGFydENoYXI6dG9rZW4uc3RhcnRDaGFyLHZhbHVlOnRva2VuLnZhbHVlLHF1b3RlOnRva2VuLnF1b3RlfSxjaGVja3MsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLGNyZWF0ZSgiKHN0cmluZykiLHRva2VuLnZhbHVlLG51bGwsdG9rZW4pO2Nhc2UgVG9rZW4uVGVtcGxhdGVIZWFkOnJldHVybiB0aGlzLnRyaWdnZXIoIlRlbXBsYXRlSGVhZCIse2xpbmU6dGhpcy5saW5lLCJjaGFyIjp0aGlzLmNoYXIsZnJvbTp0aGlzLmZyb20sc3RhcnRMaW5lOnRva2VuLnN0YXJ0TGluZSxzdGFydENoYXI6dG9rZW4uc3RhcnRDaGFyLHZhbHVlOnRva2VuLnZhbHVlfSksY3JlYXRlKCIodGVtcGxhdGUpIix0b2tlbi52YWx1ZSxudWxsLHRva2VuKTtjYXNlIFRva2VuLlRlbXBsYXRlTWlkZGxlOnJldHVybiB0aGlzLnRyaWdnZXIoIlRlbXBsYXRlTWlkZGxlIix7bGluZTp0aGlzLmxpbmUsImNoYXIiOnRoaXMuY2hhcixmcm9tOnRoaXMuZnJvbSxzdGFydExpbmU6dG9rZW4uc3RhcnRMaW5lLHN0YXJ0Q2hhcjp0b2tlbi5zdGFydENoYXIsdmFsdWU6dG9rZW4udmFsdWV9KSxjcmVhdGUoIih0ZW1wbGF0ZSBtaWRkbGUpIix0b2tlbi52YWx1ZSxudWxsLHRva2VuKTtjYXNlIFRva2VuLlRlbXBsYXRlVGFpbDpyZXR1cm4gdGhpcy50cmlnZ2VyKCJUZW1wbGF0ZVRhaWwiLHtsaW5lOnRoaXMubGluZSwiY2hhciI6dGhpcy5jaGFyLGZyb206dGhpcy5mcm9tLHN0YXJ0TGluZTp0b2tlbi5zdGFydExpbmUsc3RhcnRDaGFyOnRva2VuLnN0YXJ0Q2hhcix2YWx1ZTp0b2tlbi52YWx1ZX0pLGNyZWF0ZSgiKHRlbXBsYXRlIHRhaWwpIix0b2tlbi52YWx1ZSxudWxsLHRva2VuKTtjYXNlIFRva2VuLk5vU3Vic3RUZW1wbGF0ZTpyZXR1cm4gdGhpcy50cmlnZ2VyKCJOb1N1YnN0VGVtcGxhdGUiLHtsaW5lOnRoaXMubGluZSwiY2hhciI6dGhpcy5jaGFyLGZyb206dGhpcy5mcm9tLHN0YXJ0TGluZTp0b2tlbi5zdGFydExpbmUsc3RhcnRDaGFyOnRva2VuLnN0YXJ0Q2hhcix2YWx1ZTp0b2tlbi52YWx1ZX0pLGNyZWF0ZSgiKG5vIHN1YnN0IHRlbXBsYXRlKSIsdG9rZW4udmFsdWUsbnVsbCx0b2tlbik7Y2FzZSBUb2tlbi5JZGVudGlmaWVyOnRoaXMudHJpZ2dlckFzeW5jKCJJZGVudGlmaWVyIix7bGluZTp0aGlzLmxpbmUsImNoYXIiOnRoaXMuY2hhcixmcm9tOnRoaXMuZm9ybSxuYW1lOnRva2VuLnZhbHVlLHJhd19uYW1lOnRva2VuLnRleHQsaXNQcm9wZXJ0eToiLiI9PT1zdGF0ZS50b2tlbnMuY3Vyci5pZH0sY2hlY2tzLGZ1bmN0aW9uKCl7cmV0dXJuITB9KTtjYXNlIFRva2VuLktleXdvcmQ6Y2FzZSBUb2tlbi5OdWxsTGl0ZXJhbDpjYXNlIFRva2VuLkJvb2xlYW5MaXRlcmFsOnJldHVybiBjcmVhdGUoIihpZGVudGlmaWVyKSIsdG9rZW4udmFsdWUsIi4iPT09c3RhdGUudG9rZW5zLmN1cnIuaWQsdG9rZW4pO2Nhc2UgVG9rZW4uTnVtZXJpY0xpdGVyYWw6cmV0dXJuIHRva2VuLmlzTWFsZm9ybWVkJiZ0aGlzLnRyaWdnZXIoIndhcm5pbmciLHtjb2RlOiJXMDQ1IixsaW5lOnRoaXMubGluZSxjaGFyYWN0ZXI6dGhpcy5jaGFyLGRhdGE6W3Rva2VuLnZhbHVlXX0pLHRoaXMudHJpZ2dlckFzeW5jKCJ3YXJuaW5nIix7Y29kZToiVzExNCIsbGluZTp0aGlzLmxpbmUsY2hhcmFjdGVyOnRoaXMuY2hhcixkYXRhOlsiMHgtIl19LGNoZWNrcyxmdW5jdGlvbigpe3JldHVybiAxNj09PXRva2VuLmJhc2UmJnN0YXRlLmpzb25Nb2RlfSksdGhpcy50cmlnZ2VyQXN5bmMoIndhcm5pbmciLHtjb2RlOiJXMTE1IixsaW5lOnRoaXMubGluZSxjaGFyYWN0ZXI6dGhpcy5jaGFyfSxjaGVja3MsZnVuY3Rpb24oKXtyZXR1cm4gc3RhdGUuaXNTdHJpY3QoKSYmOD09PXRva2VuLmJhc2UmJnRva2VuLmlzTGVnYWN5fSksdGhpcy50cmlnZ2VyKCJOdW1iZXIiLHtsaW5lOnRoaXMubGluZSwiY2hhciI6dGhpcy5jaGFyLGZyb206dGhpcy5mcm9tLHZhbHVlOnRva2VuLnZhbHVlLGJhc2U6dG9rZW4uYmFzZSxpc01hbGZvcm1lZDp0b2tlbi5tYWxmb3JtZWR9KSxjcmVhdGUoIihudW1iZXIpIix0b2tlbi52YWx1ZSk7Y2FzZSBUb2tlbi5SZWdFeHA6cmV0dXJuIGNyZWF0ZSgiKHJlZ2V4cCkiLHRva2VuLnZhbHVlKTtjYXNlIFRva2VuLkNvbW1lbnQ6aWYoc3RhdGUudG9rZW5zLmN1cnIuY29tbWVudD0hMCx0b2tlbi5pc1NwZWNpYWwpcmV0dXJue2lkOiIoY29tbWVudCkiLHZhbHVlOnRva2VuLnZhbHVlLGJvZHk6dG9rZW4uYm9keSx0eXBlOnRva2VuLmNvbW1lbnRUeXBlLGlzU3BlY2lhbDp0b2tlbi5pc1NwZWNpYWwsbGluZTp0aGlzLmxpbmUsY2hhcmFjdGVyOnRoaXMuY2hhcixmcm9tOnRoaXMuZnJvbX07YnJlYWs7Y2FzZSIiOmJyZWFrO2RlZmF1bHQ6cmV0dXJuIGNyZWF0ZSgiKHB1bmN0dWF0b3IpIix0b2tlbi52YWx1ZSl9ZWxzZSB0aGlzLmlucHV0Lmxlbmd0aCYmKHRoaXMudHJpZ2dlcigiZXJyb3IiLHtjb2RlOiJFMDI0IixsaW5lOnRoaXMubGluZSxjaGFyYWN0ZXI6dGhpcy5jaGFyLGRhdGE6W3RoaXMucGVlaygpXX0pLHRoaXMuaW5wdXQ9IiIpfX19LGV4cG9ydHMuTGV4ZXI9TGV4ZXIsZXhwb3J0cy5Db250ZXh0PUNvbnRleHR9LHsiLi4vZGF0YS9hc2NpaS1pZGVudGlmaWVyLWRhdGEuanMiOiIvbm9kZV9tb2R1bGVzL2pzaGludC9kYXRhL2FzY2lpLWlkZW50aWZpZXItZGF0YS5qcyIsIi4uL2xvZGFzaCI6Ii9ub2RlX21vZHVsZXMvanNoaW50L2xvZGFzaC5qcyIsIi4vcmVnLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL3JlZy5qcyIsIi4vc3RhdGUuanMiOiIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvc3RhdGUuanMiLGV2ZW50czoiL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIn1dLCIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvbWVzc2FnZXMuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIF89X2RlcmVxXygiLi4vbG9kYXNoIiksZXJyb3JzPXtFMDAxOiJCYWQgb3B0aW9uOiBcJ3thfVwnLiIsRTAwMjoiQmFkIG9wdGlvbiB2YWx1ZS4iLEUwMDM6IkV4cGVjdGVkIGEgSlNPTiB2YWx1ZS4iLEUwMDQ6IklucHV0IGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGFuIGFycmF5IG9mIHN0cmluZ3MuIixFMDA1OiJJbnB1dCBpcyBlbXB0eS4iLEUwMDY6IlVuZXhwZWN0ZWQgZWFybHkgZW5kIG9mIHByb2dyYW0uIixFMDA3OlwnTWlzc2luZyAidXNlIHN0cmljdCIgc3RhdGVtZW50LlwnLEUwMDg6IlN0cmljdCB2aW9sYXRpb24uIixFMDA5OiJPcHRpb24gXCd2YWxpZHRoaXNcJyBjYW5cJ3QgYmUgdXNlZCBpbiBhIGdsb2JhbCBzY29wZS4iLEUwMTA6Ilwnd2l0aFwnIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLiIsRTAxMToiXCd7YX1cJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkLiIsRTAxMjoiY29uc3QgXCd7YX1cJyBpcyBpbml0aWFsaXplZCB0byBcJ3VuZGVmaW5lZFwnLiIsRTAxMzoiQXR0ZW1wdGluZyB0byBvdmVycmlkZSBcJ3thfVwnIHdoaWNoIGlzIGEgY29uc3RhbnQuIixFMDE0OiJBIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIGNhbiBiZSBjb25mdXNlZCB3aXRoIFwnLz1cJy4iLEUwMTU6IlVuY2xvc2VkIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLEUwMTY6IkludmFsaWQgcmVndWxhciBleHByZXNzaW9uLiIsRTAxNzoiVW5jbG9zZWQgY29tbWVudC4iLEUwMTg6IlVuYmVndW4gY29tbWVudC4iLEUwMTk6IlVubWF0Y2hlZCBcJ3thfVwnLiIsRTAyMDoiRXhwZWN0ZWQgXCd7YX1cJyB0byBtYXRjaCBcJ3tifVwnIGZyb20gbGluZSB7Y30gYW5kIGluc3RlYWQgc2F3IFwne2R9XCcuIixFMDIxOiJFeHBlY3RlZCBcJ3thfVwnIGFuZCBpbnN0ZWFkIHNhdyBcJ3tifVwnLiIsRTAyMjoiTGluZSBicmVha2luZyBlcnJvciBcJ3thfVwnLiIsRTAyMzoiTWlzc2luZyBcJ3thfVwnLiIsRTAyNDoiVW5leHBlY3RlZCBcJ3thfVwnLiIsRTAyNToiTWlzc2luZyBcJzpcJyBvbiBhIGNhc2UgY2xhdXNlLiIsRTAyNjoiTWlzc2luZyBcJ31cJyB0byBtYXRjaCBcJ3tcJyBmcm9tIGxpbmUge2F9LiIsRTAyNzoiTWlzc2luZyBcJ11cJyB0byBtYXRjaCBcJ1tcJyBmcm9tIGxpbmUge2F9LiIsRTAyODoiSWxsZWdhbCBjb21tYS4iLEUwMjk6IlVuY2xvc2VkIHN0cmluZy4iLEUwMzA6IkV4cGVjdGVkIGFuIGlkZW50aWZpZXIgYW5kIGluc3RlYWQgc2F3IFwne2F9XCcuIixFMDMxOiJCYWQgYXNzaWdubWVudC4iLEUwMzI6IkV4cGVjdGVkIGEgc21hbGwgaW50ZWdlciBvciBcJ2ZhbHNlXCcgYW5kIGluc3RlYWQgc2F3IFwne2F9XCcuIixFMDMzOiJFeHBlY3RlZCBhbiBvcGVyYXRvciBhbmQgaW5zdGVhZCBzYXcgXCd7YX1cJy4iLEUwMzQ6ImdldC9zZXQgYXJlIEVTNSBmZWF0dXJlcy4iLEUwMzU6Ik1pc3NpbmcgcHJvcGVydHkgbmFtZS4iLEUwMzY6IkV4cGVjdGVkIHRvIHNlZSBhIHN0YXRlbWVudCBhbmQgaW5zdGVhZCBzYXcgYSBibG9jay4iLEUwMzc6bnVsbCxFMDM4Om51bGwsRTAzOToiRnVuY3Rpb24gZGVjbGFyYXRpb25zIGFyZSBub3QgaW52b2NhYmxlLiBXcmFwIHRoZSB3aG9sZSBmdW5jdGlvbiBpbnZvY2F0aW9uIGluIHBhcmVucy4iLEUwNDA6IkVhY2ggdmFsdWUgc2hvdWxkIGhhdmUgaXRzIG93biBjYXNlIGxhYmVsLiIsRTA0MToiVW5yZWNvdmVyYWJsZSBzeW50YXggZXJyb3IuIixFMDQyOiJTdG9wcGluZy4iLEUwNDM6IlRvbyBtYW55IGVycm9ycy4iLEUwNDQ6bnVsbCxFMDQ1OiJJbnZhbGlkIGZvciBlYWNoIGxvb3AuIixFMDQ2OiJBIHlpZWxkIHN0YXRlbWVudCBzaGFsbCBiZSB3aXRoaW4gYSBnZW5lcmF0b3IgZnVuY3Rpb24gKHdpdGggc3ludGF4OiBgZnVuY3Rpb24qYCkiLEUwNDc6bnVsbCxFMDQ4OiJ7YX0gZGVjbGFyYXRpb24gbm90IGRpcmVjdGx5IHdpdGhpbiBibG9jay4iLEUwNDk6IkEge2F9IGNhbm5vdCBiZSBuYW1lZCBcJ3tifVwnLiIsRTA1MDoiTW96aWxsYSBhY2VxdWlyZXMgdGhlIHlpZWxkIGV4cHJlc3Npb24gdG8gYmUgcGFyZW50aGVzaXplZCBoZXJlLiIsRTA1MTpudWxsLEUwNTI6IlVuY2xvc2VkIHRlbXBsYXRlIGxpdGVyYWwuIixFMDUzOiJFeHBvcnQgZGVjbGFyYXRpb24gbXVzdCBiZSBpbiBnbG9iYWwgc2NvcGUuIixFMDU0OiJDbGFzcyBwcm9wZXJ0aWVzIG11c3QgYmUgbWV0aG9kcy4gRXhwZWN0ZWQgXCcoXCcgYnV0IGluc3RlYWQgc2F3IFwne2F9XCcuIixFMDU1OiJUaGUgXCd7YX1cJyBvcHRpb24gY2Fubm90IGJlIHNldCBhZnRlciBhbnkgZXhlY3V0YWJsZSBjb2RlLiIsRTA1NjoiXCd7YX1cJyB3YXMgdXNlZCBiZWZvcmUgaXQgd2FzIGRlY2xhcmVkLCB3aGljaCBpcyBpbGxlZ2FsIGZvciBcJ3tifVwnIHZhcmlhYmxlcy4iLEUwNTc6IkludmFsaWQgbWV0YSBwcm9wZXJ0eTogXCd7YX0ue2J9XCcuIixFMDU4OiJNaXNzaW5nIHNlbWljb2xvbi4ifSx3YXJuaW5ncz17VzAwMToiXCdoYXNPd25Qcm9wZXJ0eVwnIGlzIGEgcmVhbGx5IGJhZCBuYW1lLiIsVzAwMjoiVmFsdWUgb2YgXCd7YX1cJyBtYXkgYmUgb3ZlcndyaXR0ZW4gaW4gSUUgOCBhbmQgZWFybGllci4iLFcwMDM6Ilwne2F9XCcgd2FzIHVzZWQgYmVmb3JlIGl0IHdhcyBkZWZpbmVkLiIsVzAwNDoiXCd7YX1cJyBpcyBhbHJlYWR5IGRlZmluZWQuIixXMDA1OiJBIGRvdCBmb2xsb3dpbmcgYSBudW1iZXIgY2FuIGJlIGNvbmZ1c2VkIHdpdGggYSBkZWNpbWFsIHBvaW50LiIsVzAwNjoiQ29uZnVzaW5nIG1pbnVzZXMuIixXMDA3OiJDb25mdXNpbmcgcGx1c3Nlcy4iLFcwMDg6IkEgbGVhZGluZyBkZWNpbWFsIHBvaW50IGNhbiBiZSBjb25mdXNlZCB3aXRoIGEgZG90OiBcJ3thfVwnLiIsVzAwOToiVGhlIGFycmF5IGxpdGVyYWwgbm90YXRpb24gW10gaXMgcHJlZmVyYWJsZS4iLFcwMTA6IlRoZSBvYmplY3QgbGl0ZXJhbCBub3RhdGlvbiB7fSBpcyBwcmVmZXJhYmxlLiIsVzAxMTpudWxsLFcwMTI6bnVsbCxXMDEzOm51bGwsVzAxNDoiQmFkIGxpbmUgYnJlYWtpbmcgYmVmb3JlIFwne2F9XCcuIixXMDE1Om51bGwsVzAxNjoiVW5leHBlY3RlZCB1c2Ugb2YgXCd7YX1cJy4iLFcwMTc6IkJhZCBvcGVyYW5kLiIsVzAxODoiQ29uZnVzaW5nIHVzZSBvZiBcJ3thfVwnLiIsVzAxOToiVXNlIHRoZSBpc05hTiBmdW5jdGlvbiB0byBjb21wYXJlIHdpdGggTmFOLiIsVzAyMDoiUmVhZCBvbmx5LiIsVzAyMToiUmVhc3NpZ25tZW50IG9mIFwne2F9XCcsIHdoaWNoIGlzIGlzIGEge2J9LiBVc2UgXCd2YXJcJyBvciBcJ2xldFwnIHRvIGRlY2xhcmUgYmluZGluZ3MgdGhhdCBtYXkgY2hhbmdlLiIsVzAyMjoiRG8gbm90IGFzc2lnbiB0byB0aGUgZXhjZXB0aW9uIHBhcmFtZXRlci4iLFcwMjM6IkV4cGVjdGVkIGFuIGlkZW50aWZpZXIgaW4gYW4gYXNzaWdubWVudCBhbmQgaW5zdGVhZCBzYXcgYSBmdW5jdGlvbiBpbnZvY2F0aW9uLiIsVzAyNDoiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciBhbmQgaW5zdGVhZCBzYXcgXCd7YX1cJyAoYSByZXNlcnZlZCB3b3JkKS4iLFcwMjU6Ik1pc3NpbmcgbmFtZSBpbiBmdW5jdGlvbiBkZWNsYXJhdGlvbi4iLFcwMjY6IklubmVyIGZ1bmN0aW9ucyBzaG91bGQgYmUgbGlzdGVkIGF0IHRoZSB0b3Agb2YgdGhlIG91dGVyIGZ1bmN0aW9uLiIsVzAyNzoiVW5yZWFjaGFibGUgXCd7YX1cJyBhZnRlciBcJ3tifVwnLiIsVzAyODoiTGFiZWwgXCd7YX1cJyBvbiB7Yn0gc3RhdGVtZW50LiIsVzAzMDoiRXhwZWN0ZWQgYW4gYXNzaWdubWVudCBvciBmdW5jdGlvbiBjYWxsIGFuZCBpbnN0ZWFkIHNhdyBhbiBleHByZXNzaW9uLiIsVzAzMToiRG8gbm90IHVzZSBcJ25ld1wnIGZvciBzaWRlIGVmZmVjdHMuIixXMDMyOiJVbm5lY2Vzc2FyeSBzZW1pY29sb24uIixXMDMzOiJNaXNzaW5nIHNlbWljb2xvbi4iLFcwMzQ6XCdVbm5lY2Vzc2FyeSBkaXJlY3RpdmUgInthfSIuXCcsVzAzNToiRW1wdHkgYmxvY2suIixXMDM2OiJVbmV4cGVjdGVkIC8qbWVtYmVyIFwne2F9XCcuIixXMDM3OiJcJ3thfVwnIGlzIGEgc3RhdGVtZW50IGxhYmVsLiIsVzAzODoiXCd7YX1cJyB1c2VkIG91dCBvZiBzY29wZS4iLFcwMzk6Ilwne2F9XCcgaXMgbm90IGFsbG93ZWQuIixXMDQwOiJQb3NzaWJsZSBzdHJpY3QgdmlvbGF0aW9uLiIsVzA0MToiVXNlIFwne2F9XCcgdG8gY29tcGFyZSB3aXRoIFwne2J9XCcuIixXMDQyOiJBdm9pZCBFT0wgZXNjYXBpbmcuIixXMDQzOiJCYWQgZXNjYXBpbmcgb2YgRU9MLiBVc2Ugb3B0aW9uIG11bHRpc3RyIGlmIG5lZWRlZC4iLFcwNDQ6IkJhZCBvciB1bm5lY2Vzc2FyeSBlc2NhcGluZy4iLFcwNDU6IkJhZCBudW1iZXIgXCd7YX1cJy4iLFcwNDY6IkRvblwndCB1c2UgZXh0cmEgbGVhZGluZyB6ZXJvcyBcJ3thfVwnLiIsVzA0NzoiQSB0cmFpbGluZyBkZWNpbWFsIHBvaW50IGNhbiBiZSBjb25mdXNlZCB3aXRoIGEgZG90OiBcJ3thfVwnLiIsVzA0ODoiVW5leHBlY3RlZCBjb250cm9sIGNoYXJhY3RlciBpbiByZWd1bGFyIGV4cHJlc3Npb24uIixXMDQ5OiJVbmV4cGVjdGVkIGVzY2FwZWQgY2hhcmFjdGVyIFwne2F9XCcgaW4gcmVndWxhciBleHByZXNzaW9uLiIsVzA1MDoiSmF2YVNjcmlwdCBVUkwuIixXMDUxOiJWYXJpYWJsZXMgc2hvdWxkIG5vdCBiZSBkZWxldGVkLiIsVzA1MjoiVW5leHBlY3RlZCBcJ3thfVwnLiIsVzA1MzoiRG8gbm90IHVzZSB7YX0gYXMgYSBjb25zdHJ1Y3Rvci4iLFcwNTQ6IlRoZSBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyBhIGZvcm0gb2YgZXZhbC4iLFcwNTU6IkEgY29uc3RydWN0b3IgbmFtZSBzaG91bGQgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyLiIsVzA1NjoiQmFkIGNvbnN0cnVjdG9yLiIsVzA1NzoiV2VpcmQgY29uc3RydWN0aW9uLiBJcyBcJ25ld1wnIG5lY2Vzc2FyeT8iLFcwNTg6Ik1pc3NpbmcgXCcoKVwnIGludm9raW5nIGEgY29uc3RydWN0b3IuIixXMDU5OiJBdm9pZCBhcmd1bWVudHMue2F9LiIsVzA2MDoiZG9jdW1lbnQud3JpdGUgY2FuIGJlIGEgZm9ybSBvZiBldmFsLiIsVzA2MToiZXZhbCBjYW4gYmUgaGFybWZ1bC4iLFcwNjI6IldyYXAgYW4gaW1tZWRpYXRlIGZ1bmN0aW9uIGludm9jYXRpb24gaW4gcGFyZW5zIHRvIGFzc2lzdCB0aGUgcmVhZGVyIGluIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24sIGFuZCBub3QgdGhlIGZ1bmN0aW9uIGl0c2VsZi4iLFcwNjM6Ik1hdGggaXMgbm90IGEgZnVuY3Rpb24uIixXMDY0OiJNaXNzaW5nIFwnbmV3XCcgcHJlZml4IHdoZW4gaW52b2tpbmcgYSBjb25zdHJ1Y3Rvci4iLFcwNjU6Ik1pc3NpbmcgcmFkaXggcGFyYW1ldGVyLiIsVzA2NjoiSW1wbGllZCBldmFsLiBDb25zaWRlciBwYXNzaW5nIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHN0cmluZy4iLFcwNjc6IkJhZCBpbnZvY2F0aW9uLiIsVzA2ODoiV3JhcHBpbmcgbm9uLUlJRkUgZnVuY3Rpb24gbGl0ZXJhbHMgaW4gcGFyZW5zIGlzIHVubmVjZXNzYXJ5LiIsVzA2OToiW1wne2F9XCddIGlzIGJldHRlciB3cml0dGVuIGluIGRvdCBub3RhdGlvbi4iLFcwNzA6IkV4dHJhIGNvbW1hLiAoaXQgYnJlYWtzIG9sZGVyIHZlcnNpb25zIG9mIElFKSIsVzA3MToiVGhpcyBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgc3RhdGVtZW50cy4gKHthfSkiLFcwNzI6IlRoaXMgZnVuY3Rpb24gaGFzIHRvbyBtYW55IHBhcmFtZXRlcnMuICh7YX0pIixXMDczOiJCbG9ja3MgYXJlIG5lc3RlZCB0b28gZGVlcGx5LiAoe2F9KSIsVzA3NDoiVGhpcyBmdW5jdGlvblwncyBjeWNsb21hdGljIGNvbXBsZXhpdHkgaXMgdG9vIGhpZ2guICh7YX0pIixXMDc1OiJEdXBsaWNhdGUge2F9IFwne2J9XCcuIixXMDc2OiJVbmV4cGVjdGVkIHBhcmFtZXRlciBcJ3thfVwnIGluIGdldCB7Yn0gZnVuY3Rpb24uIixXMDc3OiJFeHBlY3RlZCBhIHNpbmdsZSBwYXJhbWV0ZXIgaW4gc2V0IHthfSBmdW5jdGlvbi4iLFcwNzg6IlNldHRlciBpcyBkZWZpbmVkIHdpdGhvdXQgZ2V0dGVyLiIsVzA3OToiUmVkZWZpbml0aW9uIG9mIFwne2F9XCcuIixXMDgwOiJJdFwncyBub3QgbmVjZXNzYXJ5IHRvIGluaXRpYWxpemUgXCd7YX1cJyB0byBcJ3VuZGVmaW5lZFwnLiIsVzA4MTpudWxsLFcwODI6IkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBzaG91bGQgbm90IGJlIHBsYWNlZCBpbiBibG9ja3MuIFVzZSBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3IgbW92ZSB0aGUgc3RhdGVtZW50IHRvIHRoZSB0b3Agb2YgdGhlIG91dGVyIGZ1bmN0aW9uLiIsVzA4MzoiRG9uXCd0IG1ha2UgZnVuY3Rpb25zIHdpdGhpbiBhIGxvb3AuIixXMDg0OiJBc3NpZ25tZW50IGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24iLFcwODU6IkRvblwndCB1c2UgXCd3aXRoXCcuIixXMDg2OiJFeHBlY3RlZCBhIFwnYnJlYWtcJyBzdGF0ZW1lbnQgYmVmb3JlIFwne2F9XCcuIixXMDg3OiJGb3Jnb3R0ZW4gXCdkZWJ1Z2dlclwnIHN0YXRlbWVudD8iLFcwODg6IkNyZWF0aW5nIGdsb2JhbCBcJ2ZvclwnIHZhcmlhYmxlLiBTaG91bGQgYmUgXCdmb3IgKHZhciB7YX0gLi4uXCcuIixXMDg5OiJUaGUgYm9keSBvZiBhIGZvciBpbiBzaG91bGQgYmUgd3JhcHBlZCBpbiBhbiBpZiBzdGF0ZW1lbnQgdG8gZmlsdGVyIHVud2FudGVkIHByb3BlcnRpZXMgZnJvbSB0aGUgcHJvdG90eXBlLiIsVzA5MDoiXCd7YX1cJyBpcyBub3QgYSBzdGF0ZW1lbnQgbGFiZWwuIixXMDkxOm51bGwsVzA5MzoiRGlkIHlvdSBtZWFuIHRvIHJldHVybiBhIGNvbmRpdGlvbmFsIGluc3RlYWQgb2YgYW4gYXNzaWdubWVudD8iLFcwOTQ6IlVuZXhwZWN0ZWQgY29tbWEuIixXMDk1OiJFeHBlY3RlZCBhIHN0cmluZyBhbmQgaW5zdGVhZCBzYXcge2F9LiIsVzA5NjoiVGhlIFwne2F9XCcga2V5IG1heSBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy4iLFcwOTc6XCdVc2UgdGhlIGZ1bmN0aW9uIGZvcm0gb2YgInVzZSBzdHJpY3QiLlwnLFcwOTg6Ilwne2F9XCcgaXMgZGVmaW5lZCBidXQgbmV2ZXIgdXNlZC4iLFcwOTk6bnVsbCxXMTAwOiJUaGlzIGNoYXJhY3RlciBtYXkgZ2V0IHNpbGVudGx5IGRlbGV0ZWQgYnkgb25lIG9yIG1vcmUgYnJvd3NlcnMuIixXMTAxOiJMaW5lIGlzIHRvbyBsb25nLiIsVzEwMjpudWxsLFcxMDM6IlRoZSBcJ3thfVwnIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIixXMTA0OiJcJ3thfVwnIGlzIGF2YWlsYWJsZSBpbiBFU3tifSAodXNlIFwnZXN2ZXJzaW9uOiB7Yn1cJykgb3IgTW96aWxsYSBKUyBleHRlbnNpb25zICh1c2UgbW96KS4iLFcxMDU6IlVuZXhwZWN0ZWQge2F9IGluIFwne2J9XCcuIixXMTA2OiJJZGVudGlmaWVyIFwne2F9XCcgaXMgbm90IGluIGNhbWVsIGNhc2UuIixXMTA3OiJTY3JpcHQgVVJMLiIsVzEwODoiU3RyaW5ncyBtdXN0IHVzZSBkb3VibGVxdW90ZS4iLFcxMDk6IlN0cmluZ3MgbXVzdCB1c2Ugc2luZ2xlcXVvdGUuIixXMTEwOiJNaXhlZCBkb3VibGUgYW5kIHNpbmdsZSBxdW90ZXMuIixXMTEyOiJVbmNsb3NlZCBzdHJpbmcuIixXMTEzOiJDb250cm9sIGNoYXJhY3RlciBpbiBzdHJpbmc6IHthfS4iLFcxMTQ6IkF2b2lkIHthfS4iLFcxMTU6Ik9jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4iLFcxMTY6IkV4cGVjdGVkIFwne2F9XCcgYW5kIGluc3RlYWQgc2F3IFwne2J9XCcuIixXMTE3OiJcJ3thfVwnIGlzIG5vdCBkZWZpbmVkLiIsVzExODoiXCd7YX1cJyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBNb3ppbGxhIEphdmFTY3JpcHQgZXh0ZW5zaW9ucyAodXNlIG1veiBvcHRpb24pLiIsVzExOToiXCd7YX1cJyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBFU3tifSAodXNlIFwnZXN2ZXJzaW9uOiB7Yn1cJykuIixXMTIwOiJZb3UgbWlnaHQgYmUgbGVha2luZyBhIHZhcmlhYmxlICh7YX0pIGhlcmUuIixXMTIxOiJFeHRlbmRpbmcgcHJvdG90eXBlIG9mIG5hdGl2ZSBvYmplY3Q6IFwne2F9XCcuIixXMTIyOiJJbnZhbGlkIHR5cGVvZiB2YWx1ZSBcJ3thfVwnIixXMTIzOiJcJ3thfVwnIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBvdXRlciBzY29wZS4iLFcxMjQ6IkEgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNoYWxsIGNvbnRhaW4gYSB5aWVsZCBzdGF0ZW1lbnQuIixXMTI1OiJUaGlzIGxpbmUgY29udGFpbnMgbm9uLWJyZWFraW5nIHNwYWNlczogaHR0cDovL2pzaGludC5jb20vZG9jL29wdGlvbnMvI25vbmJzcCIsVzEyNjoiVW5uZWNlc3NhcnkgZ3JvdXBpbmcgb3BlcmF0b3IuIixXMTI3OiJVbmV4cGVjdGVkIHVzZSBvZiBhIGNvbW1hIG9wZXJhdG9yLiIsVzEyODoiRW1wdHkgYXJyYXkgZWxlbWVudHMgYWNlcXVpcmUgZWxpc2lvbj10cnVlLiIsVzEyOToiXCd7YX1cJyBpcyBkZWZpbmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgSmF2YVNjcmlwdC4gVXNlIGEgZGlmZmVyZW50IHZhcmlhYmxlIG5hbWUgdG8gYXZvaWQgbWlncmF0aW9uIGlzc3Vlcy4iLFcxMzA6IkludmFsaWQgZWxlbWVudCBhZnRlciByZXN0IGVsZW1lbnQuIixXMTMxOiJJbnZhbGlkIHBhcmFtZXRlciBhZnRlciByZXN0IHBhcmFtZXRlci4iLFcxMzI6ImB2YXJgIGRlY2xhcmF0aW9ucyBhcmUgZm9yYmlkZGVuLiBVc2UgYGxldGAgb3IgYGNvbnN0YCBpbnN0ZWFkLiIsVzEzMzoiSW52YWxpZCBmb3Ite2F9IGxvb3AgbGVmdC1oYW5kLXNpZGU6IHtifS4iLFcxMzQ6IlRoZSBcJ3thfVwnIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIGxpbnRpbmcgRUNNQVNjcmlwdCB7Yn0gY29kZS4iLFcxMzU6InthfSBtYXkgbm90IGJlIHN1cHBvcnRlZCBieSBub24tYnJvd3NlciBlbnZpcm9ubWVudHMuIixXMTM2OiJcJ3thfVwnIG11c3QgYmUgaW4gZnVuY3Rpb24gc2NvcGUuIixXMTM3OiJFbXB0eSBkZXN0cnVjdHVyaW5nLiIsVzEzODoiUmVndWxhciBwYXJhbWV0ZXJzIHNob3VsZCBub3QgY29tZSBhZnRlciBkZWZhdWx0IHBhcmFtZXRlcnMuIn0saW5mbz17STAwMToiQ29tbWEgd2FybmluZ3MgY2FuIGJlIHR1cm5lZCBvZmYgd2l0aCBcJ2xheGNvbW1hXCcuIixJMDAyOm51bGwsSTAwMzoiRVM1IG9wdGlvbiBpcyBub3cgc2V0IHBlciBkZWZhdWx0In07ZXhwb3J0cy5lcnJvcnM9e30sZXhwb3J0cy53YXJuaW5ncz17fSxleHBvcnRzLmluZm89e30sXy5lYWNoKGVycm9ycyxmdW5jdGlvbihkZXNjLGNvZGUpe2V4cG9ydHMuZXJyb3JzW2NvZGVdPXtjb2RlOmNvZGUsZGVzYzpkZXNjfX0pLF8uZWFjaCh3YXJuaW5ncyxmdW5jdGlvbihkZXNjLGNvZGUpe2V4cG9ydHMud2FybmluZ3NbY29kZV09e2NvZGU6Y29kZSxkZXNjOmRlc2N9fSksXy5lYWNoKGluZm8sZnVuY3Rpb24oZGVzYyxjb2RlKXtleHBvcnRzLmluZm9bY29kZV09e2NvZGU6Y29kZSxkZXNjOmRlc2N9fSl9LHsiLi4vbG9kYXNoIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvbG9kYXNoLmpzIn1dLCIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvbmFtZS1zdGFjay5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTmFtZVN0YWNrKCl7dGhpcy5fc3RhY2s9W119T2JqZWN0LmRlZmluZVByb3BlcnR5KE5hbWVTdGFjay5wcm90b3R5cGUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFjay5sZW5ndGh9fSksTmFtZVN0YWNrLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKCl7dGhpcy5fc3RhY2sucHVzaChudWxsKX0sTmFtZVN0YWNrLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt0aGlzLl9zdGFjay5wb3AoKX0sTmFtZVN0YWNrLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odG9rZW4pe3RoaXMuX3N0YWNrW3RoaXMubGVuZ3RoLTFdPXRva2VufSxOYW1lU3RhY2sucHJvdG90eXBlLmluZmVyPWZ1bmN0aW9uKCl7dmFyIHR5cGUsbmFtZVRva2VuPXRoaXMuX3N0YWNrW3RoaXMubGVuZ3RoLTFdLHByZWZpeD0iIjtyZXR1cm4gbmFtZVRva2VuJiYiY2xhc3MiIT09bmFtZVRva2VuLnR5cGV8fChuYW1lVG9rZW49dGhpcy5fc3RhY2tbdGhpcy5sZW5ndGgtMl0pLG5hbWVUb2tlbj8odHlwZT1uYW1lVG9rZW4udHlwZSwiKHN0cmluZykiIT09dHlwZSYmIihudW1iZXIpIiE9PXR5cGUmJiIoaWRlbnRpZmllcikiIT09dHlwZSYmImRlZmF1bHQiIT09dHlwZT8iKGV4cHJlc3Npb24pIjoobmFtZVRva2VuLmFjY2Vzc29yVHlwZSYmKHByZWZpeD1uYW1lVG9rZW4uYWNjZXNzb3JUeXBlKyIgIikscHJlZml4K25hbWVUb2tlbi52YWx1ZSkpOiIoZW1wdHkpIn0sbW9kdWxlLmV4cG9ydHM9TmFtZVN0YWNrfSx7fV0sIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9vcHRpb25zLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2V4cG9ydHMuYm9vbD17ZW5mb3JjaW5nOntiaXR3aXNlOiEwLGZyZWV6ZTohMCxjYW1lbGNhc2U6ITAsY3VybHk6ITAsZXFlcWVxOiEwLGZ1dHVyZWhvc3RpbGU6ITAsbm90eXBlb2Y6ITAsZXMzOiEwLGVzNTohMCxmb3JpbjohMCxmdW5jc2NvcGU6ITAsaW1tZWQ6ITAsaXRlcmF0b3I6ITAsbmV3Y2FwOiEwLG5vYXJnOiEwLG5vY29tbWE6ITAsbm9lbXB0eTohMCxub25ic3A6ITAsbm9uZXc6ITAsdW5kZWY6ITAsc2luZ2xlR3JvdXBzOiExLHZhcnN0bXQ6ITEsZW5mb3JjZWFsbDohMX0scmVsYXhpbmc6e2FzaTohMCxtdWx0aXN0cjohMCxkZWJ1ZzohMCxib3NzOiEwLGV2aWw6ITAsZ2xvYmFsc3RyaWN0OiEwLHBsdXNwbHVzOiEwLHByb3RvOiEwLHNjcmlwdHVybDohMCxzdWI6ITAsc3VwZXJuZXc6ITAsbGF4YnJlYWs6ITAsbGF4Y29tbWE6ITAsdmFsaWR0aGlzOiEwLHdpdGhzdG10OiEwLG1vejohMCxub3lpZWxkOiEwLGVxbnVsbDohMCxsYXN0c2VtaWM6ITAsbG9vcGZ1bmM6ITAsZXhwcjohMCxlc25leHQ6ITAsZWxpc2lvbjohMH0sZW52aXJvbm1lbnRzOnttb290b29sczohMCxjb3VjaDohMCxqYXNtaW5lOiEwLGpxdWVyeTohMCxub2RlOiEwLHF1bml0OiEwLHJoaW5vOiEwLHNoZWxsanM6ITAscHJvdG90eXBlanM6ITAseXVpOiEwLG1vY2hhOiEwLG1vZHVsZTohMCx3c2g6ITAsd29ya2VyOiEwLG5vbnN0YW5kYXJkOiEwLGJyb3dzZXI6ITAsYnJvd3NlcmlmeTohMCxkZXZlbDohMCxkb2pvOiEwLHR5cGVkOiEwLHBoYW50b206ITB9LG9ic29sZXRlOntvbmVjYXNlOiEwLHJlZ2V4cDohMCxyZWdleGRhc2g6ITB9fSxleHBvcnRzLnZhbD17bWF4bGVuOiExLGluZGVudDohMSxtYXhlcnI6ITEscHJlZGVmOiExLGdsb2JhbHM6ITEscXVvdG1hcms6ITEsc2NvcGU6ITEsbWF4c3RhdGVtZW50czohMSxtYXhkZXB0aDohMSxtYXhwYXJhbXM6ITEsbWF4Y29tcGxleGl0eTohMSxzaGFkb3c6ITEsc3RyaWN0OiEwLHVudXNlZDohMCxsYXRlZGVmOiExLGlnbm9yZTohMSxpZ25vcmVEZWxpbWl0ZXJzOiExLGVzdmVyc2lvbjo1fSxleHBvcnRzLmludmVydGVkPXtiaXR3aXNlOiEwLGZvcmluOiEwLG5ld2NhcDohMCxwbHVzcGx1czohMCxyZWdleHA6ITAsdW5kZWY6ITAsZXFlcWVxOiEwLHN0cmljdDohMH0sZXhwb3J0cy52YWxpZE5hbWVzPU9iamVjdC5rZXlzKGV4cG9ydHMudmFsKS5jb25jYXQoT2JqZWN0LmtleXMoZXhwb3J0cy5ib29sLnJlbGF4aW5nKSkuY29uY2F0KE9iamVjdC5rZXlzKGV4cG9ydHMuYm9vbC5lbmZvcmNpbmcpKS5jb25jYXQoT2JqZWN0LmtleXMoZXhwb3J0cy5ib29sLm9ic29sZXRlKSkuY29uY2F0KE9iamVjdC5rZXlzKGV4cG9ydHMuYm9vbC5lbnZpcm9ubWVudHMpKSxleHBvcnRzLnJlbmFtZWQ9e2VxZXE6ImVxZXFlcSIsd2luZG93czoid3NoIixzbG9wcHk6InN0cmljdCJ9LGV4cG9ydHMucmVtb3ZlZD17bm9tZW46ITAsb25ldmFyOiEwLHBhc3NmYWlsOiEwLHdoaXRlOiEwLGdjbDohMCxzbWFydHRhYnM6ITAsdHJhaWxpbmc6ITB9LGV4cG9ydHMubm9lbmZvcmNlYWxsPXt2YXJzdG10OiEwLHN0cmljdDohMH19LHt9XSwiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL3JlZy5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtleHBvcnRzLnVuc2FmZVN0cmluZz0vQGNjfDxcXC8/fHNjcmlwdHxcXF1cXHMqXFxdfDxcXHMqIXwmbHQvaSxleHBvcnRzLnVuc2FmZUNoYXJzPS9bXFx1MDAwMC1cXHUwMDFmXFx1MDA3Zi1cXHUwMDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdLyxleHBvcnRzLm5lZWRFc2M9L1tcXHUwMDAwLVxcdTAwMWYmPCJcXC9cXFxcXFx1MDA3Zi1cXHUwMDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdLyxleHBvcnRzLm5lZWRFc2NHbG9iYWw9L1tcXHUwMDAwLVxcdTAwMWYmPCJcXC9cXFxcXFx1MDA3Zi1cXHUwMDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csZXhwb3J0cy5zdGFyU2xhc2g9L1xcKlxcLy8sZXhwb3J0cy5pZGVudGlmaWVyPS9eKFthLXpBLVpfJF1bYS16QS1aMC05XyRdKikkLyxleHBvcnRzLmphdmFzY3JpcHRVUkw9L14oPzpqYXZhc2NyaXB0fGpzY3JpcHR8ZWNtYXNjcmlwdHx2YnNjcmlwdHxsaXZlc2NyaXB0KVxccyo6L2ksZXhwb3J0cy5mYWxsc1Rocm91Z2g9L15cXHMqZmFsbHM/XFxzdGhyb3VnaFxccyokLyxleHBvcnRzLm1heGxlbkV4Y2VwdGlvbj0vXig/Oig/OlxcL1xcL3xcXC9cXCp8XFwqKSA/KT9bXiBdKyQvfSx7fV0sIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9zY29wZS1tYW5hZ2VyLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz1fZGVyZXFfKCIuLi9sb2Rhc2giKSxldmVudHM9X2RlcmVxXygiZXZlbnRzIiksbWFya2VyPXt9LHNjb3BlTWFuYWdlcj1mdW5jdGlvbihzdGF0ZSxwcmVkZWZpbmVkLGV4cG9ydGVkLGRlY2xhcmVkKXtmdW5jdGlvbiBfbmV3U2NvcGUodHlwZSl7X2N1cnJlbnQ9eyIobGFiZWxzKSI6T2JqZWN0LmNyZWF0ZShudWxsKSwiKHVzYWdlcykiOk9iamVjdC5jcmVhdGUobnVsbCksIihicmVha0xhYmVscykiOk9iamVjdC5jcmVhdGUobnVsbCksIihwYXJlbnQpIjpfY3VycmVudCwiKHR5cGUpIjp0eXBlLCIocGFyYW1zKSI6ImZ1bmN0aW9ucGFyYW1zIj09PXR5cGV8fCJjYXRjaHBhcmFtcyI9PT10eXBlP1tdOm51bGx9LF9zY29wZVN0YWNrLnB1c2goX2N1cnJlbnQpfWZ1bmN0aW9uIHdhcm5pbmcoY29kZSx0b2tlbil7ZW1pdHRlci5lbWl0KCJ3YXJuaW5nIix7Y29kZTpjb2RlLHRva2VuOnRva2VuLGRhdGE6Xy5zbGljZShhcmd1bWVudHMsMil9KX1mdW5jdGlvbiBlcnJvcihjb2RlLHRva2VuKXtlbWl0dGVyLmVtaXQoIndhcm5pbmciLHtjb2RlOmNvZGUsdG9rZW46dG9rZW4sZGF0YTpfLnNsaWNlKGFyZ3VtZW50cywyKX0pfWZ1bmN0aW9uIF9zZXR1cFVzYWdlcyhsYWJlbE5hbWUpe19jdXJyZW50WyIodXNhZ2VzKSJdW2xhYmVsTmFtZV18fChfY3VycmVudFsiKHVzYWdlcykiXVtsYWJlbE5hbWVdPXsiKG1vZGlmaWVkKSI6W10sIihyZWFzc2lnbmVkKSI6W10sIih0b2tlbnMpIjpbXX0pfWZ1bmN0aW9uIF9jaGVja0ZvclVudXNlZCgpe2lmKCJmdW5jdGlvbnBhcmFtcyI9PT1fY3VycmVudFsiKHR5cGUpIl0pcmV0dXJuIF9jaGVja1BhcmFtcygpLHZvaWQgMDt2YXIgY3VyZW50TGFiZWxzPV9jdXJyZW50WyIobGFiZWxzKSJdO2Zvcih2YXIgbGFiZWxOYW1lIGluIGN1cmVudExhYmVscyljdXJlbnRMYWJlbHNbbGFiZWxOYW1lXSYmImV4Y2VwdGlvbiIhPT1jdXJlbnRMYWJlbHNbbGFiZWxOYW1lXVsiKHR5cGUpIl0mJmN1cmVudExhYmVsc1tsYWJlbE5hbWVdWyIodW51c2VkKSJdJiZfd2FyblVudXNlZChsYWJlbE5hbWUsY3VyZW50TGFiZWxzW2xhYmVsTmFtZV1bIih0b2tlbikiXSwidmFyIil9ZnVuY3Rpb24gX2NoZWNrUGFyYW1zKCl7dmFyIHBhcmFtcz1fY3VycmVudFsiKHBhcmFtcykiXTtpZihwYXJhbXMpZm9yKHZhciB1bnVzZWRfb3B0LHBhcmFtPXBhcmFtcy5wb3AoKTtwYXJhbTspe3ZhciBsYWJlbD1fY3VycmVudFsiKGxhYmVscykiXVtwYXJhbV07aWYodW51c2VkX29wdD1fZ2V0VW51c2VkT3B0aW9uKHN0YXRlLmZ1bmN0WyIodW51c2VkT3B0aW9uKSJdKSwidW5kZWZpbmVkIj09PXBhcmFtKXJldHVybjtpZihsYWJlbFsiKHVudXNlZCkiXSlfd2FyblVudXNlZChwYXJhbSxsYWJlbFsiKHRva2VuKSJdLCJwYXJhbSIsc3RhdGUuZnVuY3RbIih1bnVzZWRPcHRpb24pIl0pO2Vsc2UgaWYoImxhc3QtcGFyYW0iPT09dW51c2VkX29wdClyZXR1cm47cGFyYW09cGFyYW1zLnBvcCgpfX1mdW5jdGlvbiBfZ2V0TGFiZWwobGFiZWxOYW1lKXtmb3IodmFyIGk9X3Njb3BlU3RhY2subGVuZ3RoLTE7aT49MDstLWkpe3ZhciBzY29wZUxhYmVscz1fc2NvcGVTdGFja1tpXVsiKGxhYmVscykiXTtpZihzY29wZUxhYmVsc1tsYWJlbE5hbWVdKXJldHVybiBzY29wZUxhYmVsc319ZnVuY3Rpb24gdXNlZFNvRmFySW5DdXJyZW50RnVuY3Rpb24obGFiZWxOYW1lKXtmb3IodmFyIGk9X3Njb3BlU3RhY2subGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBjdXJyZW50PV9zY29wZVN0YWNrW2ldO2lmKGN1cnJlbnRbIih1c2FnZXMpIl1bbGFiZWxOYW1lXSlyZXR1cm4gY3VycmVudFsiKHVzYWdlcykiXVtsYWJlbE5hbWVdO2lmKGN1cnJlbnQ9PT1fY3VycmVudEZ1bmN0Qm9keSlicmVha31yZXR1cm4hMX1mdW5jdGlvbiBfY2hlY2tPdXRlclNoYWRvdyhsYWJlbE5hbWUsdG9rZW4pe2lmKCJvdXRlciI9PT1zdGF0ZS5vcHRpb24uc2hhZG93KWZvcih2YXIgaXNHbG9iYWw9Imdsb2JhbCI9PT1fY3VycmVudEZ1bmN0Qm9keVsiKHR5cGUpIl0saXNOZXdGdW5jdGlvbj0iZnVuY3Rpb25wYXJhbXMiPT09X2N1cnJlbnRbIih0eXBlKSJdLG91dHNpZGVDdXJyZW50RnVuY3Rpb249IWlzR2xvYmFsLGk9MDtfc2NvcGVTdGFjay5sZW5ndGg+aTtpKyspe3ZhciBzdGFja0l0ZW09X3Njb3BlU3RhY2tbaV07aXNOZXdGdW5jdGlvbnx8X3Njb3BlU3RhY2tbaSsxXSE9PV9jdXJyZW50RnVuY3RCb2R5fHwob3V0c2lkZUN1cnJlbnRGdW5jdGlvbj0hMSksb3V0c2lkZUN1cnJlbnRGdW5jdGlvbiYmc3RhY2tJdGVtWyIobGFiZWxzKSJdW2xhYmVsTmFtZV0mJndhcm5pbmcoIlcxMjMiLHRva2VuLGxhYmVsTmFtZSksc3RhY2tJdGVtWyIoYnJlYWtMYWJlbHMpIl1bbGFiZWxOYW1lXSYmd2FybmluZygiVzEyMyIsdG9rZW4sbGFiZWxOYW1lKX19ZnVuY3Rpb24gX2xhdGVkZWZXYXJuaW5nKHR5cGUsbGFiZWxOYW1lLHRva2VuKXtzdGF0ZS5vcHRpb24ubGF0ZWRlZiYmKHN0YXRlLm9wdGlvbi5sYXRlZGVmPT09ITAmJiJmdW5jdGlvbiI9PT10eXBlfHwiZnVuY3Rpb24iIT09dHlwZSkmJndhcm5pbmcoIlcwMDMiLHRva2VuLGxhYmVsTmFtZSl9dmFyIF9jdXJyZW50LF9zY29wZVN0YWNrPVtdO19uZXdTY29wZSgiZ2xvYmFsIiksX2N1cnJlbnRbIihwcmVkZWZpbmVkKSJdPXByZWRlZmluZWQ7dmFyIF9jdXJyZW50RnVuY3RCb2R5PV9jdXJyZW50LHVzZWRQcmVkZWZpbmVkQW5kR2xvYmFscz1PYmplY3QuY3JlYXRlKG51bGwpLGltcGxpZWRHbG9iYWxzPU9iamVjdC5jcmVhdGUobnVsbCksdW51c2Vkcz1bXSxlbWl0dGVyPW5ldyBldmVudHMuRXZlbnRFbWl0dGVyLF9nZXRVbnVzZWRPcHRpb249ZnVuY3Rpb24odW51c2VkX29wdCl7cmV0dXJuIHZvaWQgMD09PXVudXNlZF9vcHQmJih1bnVzZWRfb3B0PXN0YXRlLm9wdGlvbi51bnVzZWQpLHVudXNlZF9vcHQ9PT0hMCYmKHVudXNlZF9vcHQ9Imxhc3QtcGFyYW0iKSx1bnVzZWRfb3B0fSxfd2FyblVudXNlZD1mdW5jdGlvbihuYW1lLHRrbix0eXBlLHVudXNlZF9vcHQpe3ZhciBsaW5lPXRrbi5saW5lLGNocj10a24uZnJvbSxyYXdfbmFtZT10a24ucmF3X3RleHR8fG5hbWU7dW51c2VkX29wdD1fZ2V0VW51c2VkT3B0aW9uKHVudXNlZF9vcHQpO3ZhciB3YXJuYWJsZV90eXBlcz17dmFyczpbInZhciJdLCJsYXN0LXBhcmFtIjpbInZhciIsInBhcmFtIl0sc3RyaWN0OlsidmFyIiwicGFyYW0iLCJsYXN0LXBhcmFtIl19O3VudXNlZF9vcHQmJndhcm5hYmxlX3R5cGVzW3VudXNlZF9vcHRdJiYtMSE9PXdhcm5hYmxlX3R5cGVzW3VudXNlZF9vcHRdLmluZGV4T2YodHlwZSkmJndhcm5pbmcoIlcwOTgiLHtsaW5lOmxpbmUsZnJvbTpjaHJ9LHJhd19uYW1lKSwodW51c2VkX29wdHx8InZhciI9PT10eXBlKSYmdW51c2Vkcy5wdXNoKHtuYW1lOm5hbWUsbGluZTpsaW5lLGNoYXJhY3RlcjpjaHJ9KX0sc2NvcGVNYW5hZ2VySW5zdD17b246ZnVuY3Rpb24obmFtZXMsbGlzdGVuZXIpe25hbWVzLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihuYW1lKXtlbWl0dGVyLm9uKG5hbWUsbGlzdGVuZXIpfSl9LGlzUHJlZGVmaW5lZDpmdW5jdGlvbihsYWJlbE5hbWUpe3JldHVybiF0aGlzLmhhcyhsYWJlbE5hbWUpJiZfLmhhcyhfc2NvcGVTdGFja1swXVsiKHByZWRlZmluZWQpIl0sbGFiZWxOYW1lKX0sc3RhY2s6ZnVuY3Rpb24odHlwZSl7dmFyIHByZXZpb3VzU2NvcGU9X2N1cnJlbnQ7X25ld1Njb3BlKHR5cGUpLHR5cGV8fCJmdW5jdGlvbnBhcmFtcyIhPT1wcmV2aW91c1Njb3BlWyIodHlwZSkiXXx8KF9jdXJyZW50WyIoaXNGdW5jQm9keSkiXT0hMCxfY3VycmVudFsiKGNvbnRleHQpIl09X2N1cnJlbnRGdW5jdEJvZHksX2N1cnJlbnRGdW5jdEJvZHk9X2N1cnJlbnQpfSx1bnN0YWNrOmZ1bmN0aW9uKCl7dmFyIGksaixzdWJTY29wZT1fc2NvcGVTdGFjay5sZW5ndGg+MT9fc2NvcGVTdGFja1tfc2NvcGVTdGFjay5sZW5ndGgtMl06bnVsbCxpc1Vuc3RhY2tpbmdGdW5jdGlvbkJvZHk9X2N1cnJlbnQ9PT1fY3VycmVudEZ1bmN0Qm9keSxpc1Vuc3RhY2tpbmdGdW5jdGlvblBhcmFtcz0iZnVuY3Rpb25wYXJhbXMiPT09X2N1cnJlbnRbIih0eXBlKSJdLGlzVW5zdGFja2luZ0Z1bmN0aW9uT3V0ZXI9ImZ1bmN0aW9ub3V0ZXIiPT09X2N1cnJlbnRbIih0eXBlKSJdLGN1cnJlbnRVc2FnZXM9X2N1cnJlbnRbIih1c2FnZXMpIl0sY3VycmVudExhYmVscz1fY3VycmVudFsiKGxhYmVscykiXSx1c2VkTGFiZWxOYW1lTGlzdD1PYmplY3Qua2V5cyhjdXJyZW50VXNhZ2VzKTtmb3IoY3VycmVudFVzYWdlcy5fX3Byb3RvX18mJi0xPT09dXNlZExhYmVsTmFtZUxpc3QuaW5kZXhPZigiX19wcm90b19fIikmJnVzZWRMYWJlbE5hbWVMaXN0LnB1c2goIl9fcHJvdG9fXyIpLGk9MDt1c2VkTGFiZWxOYW1lTGlzdC5sZW5ndGg+aTtpKyspe3ZhciB1c2VkTGFiZWxOYW1lPXVzZWRMYWJlbE5hbWVMaXN0W2ldLHVzYWdlPWN1cnJlbnRVc2FnZXNbdXNlZExhYmVsTmFtZV0sdXNlZExhYmVsPWN1cnJlbnRMYWJlbHNbdXNlZExhYmVsTmFtZV07aWYodXNlZExhYmVsKXt2YXIgdXNlZExhYmVsVHlwZT11c2VkTGFiZWxbIih0eXBlKSJdO2lmKHVzZWRMYWJlbFsiKHVzZU91dHNpZGVPZlNjb3BlKSJdJiYhc3RhdGUub3B0aW9uLmZ1bmNzY29wZSl7dmFyIHVzZWRUb2tlbnM9dXNhZ2VbIih0b2tlbnMpIl07aWYodXNlZFRva2Vucylmb3Ioaj0wO3VzZWRUb2tlbnMubGVuZ3RoPmo7aisrKXVzZWRMYWJlbFsiKGZ1bmN0aW9uKSJdPT09dXNlZFRva2Vuc1tqXVsiKGZ1bmN0aW9uKSJdJiZlcnJvcigiVzAzOCIsdXNlZFRva2Vuc1tqXSx1c2VkTGFiZWxOYW1lKX1pZihfY3VycmVudFsiKGxhYmVscykiXVt1c2VkTGFiZWxOYW1lXVsiKHVudXNlZCkiXT0hMSwiY29uc3QiPT09dXNlZExhYmVsVHlwZSYmdXNhZ2VbIihtb2RpZmllZCkiXSlmb3Ioaj0wO3VzYWdlWyIobW9kaWZpZWQpIl0ubGVuZ3RoPmo7aisrKWVycm9yKCJFMDEzIix1c2FnZVsiKG1vZGlmaWVkKSJdW2pdLHVzZWRMYWJlbE5hbWUpO2lmKCgiZnVuY3Rpb24iPT09dXNlZExhYmVsVHlwZXx8ImNsYXNzIj09PXVzZWRMYWJlbFR5cGUpJiZ1c2FnZVsiKHJlYXNzaWduZWQpIl0pZm9yKGo9MDt1c2FnZVsiKHJlYXNzaWduZWQpIl0ubGVuZ3RoPmo7aisrKWVycm9yKCJXMDIxIix1c2FnZVsiKHJlYXNzaWduZWQpIl1bal0sdXNlZExhYmVsTmFtZSx1c2VkTGFiZWxUeXBlKX1lbHNlIGlmKGlzVW5zdGFja2luZ0Z1bmN0aW9uT3V0ZXImJihzdGF0ZS5mdW5jdFsiKGlzQ2FwdHVyaW5nKSJdPSEwKSxzdWJTY29wZSlpZihzdWJTY29wZVsiKHVzYWdlcykiXVt1c2VkTGFiZWxOYW1lXSl7dmFyIHN1YlNjb3BlVXNhZ2U9c3ViU2NvcGVbIih1c2FnZXMpIl1bdXNlZExhYmVsTmFtZV07c3ViU2NvcGVVc2FnZVsiKG1vZGlmaWVkKSJdPXN1YlNjb3BlVXNhZ2VbIihtb2RpZmllZCkiXS5jb25jYXQodXNhZ2VbIihtb2RpZmllZCkiXSksc3ViU2NvcGVVc2FnZVsiKHRva2VucykiXT1zdWJTY29wZVVzYWdlWyIodG9rZW5zKSJdLmNvbmNhdCh1c2FnZVsiKHRva2VucykiXSksc3ViU2NvcGVVc2FnZVsiKHJlYXNzaWduZWQpIl09c3ViU2NvcGVVc2FnZVsiKHJlYXNzaWduZWQpIl0uY29uY2F0KHVzYWdlWyIocmVhc3NpZ25lZCkiXSksc3ViU2NvcGVVc2FnZVsiKG9ubHlVc2VkU3ViRnVuY3Rpb24pIl09ITF9ZWxzZSBzdWJTY29wZVsiKHVzYWdlcykiXVt1c2VkTGFiZWxOYW1lXT11c2FnZSxpc1Vuc3RhY2tpbmdGdW5jdGlvbkJvZHkmJihzdWJTY29wZVsiKHVzYWdlcykiXVt1c2VkTGFiZWxOYW1lXVsiKG9ubHlVc2VkU3ViRnVuY3Rpb24pIl09ITApO2Vsc2UgaWYoImJvb2xlYW4iPT10eXBlb2YgX2N1cnJlbnRbIihwcmVkZWZpbmVkKSJdW3VzZWRMYWJlbE5hbWVdKXtpZihkZWxldGUgZGVjbGFyZWRbdXNlZExhYmVsTmFtZV0sdXNlZFByZWRlZmluZWRBbmRHbG9iYWxzW3VzZWRMYWJlbE5hbWVdPW1hcmtlcixfY3VycmVudFsiKHByZWRlZmluZWQpIl1bdXNlZExhYmVsTmFtZV09PT0hMSYmdXNhZ2VbIihyZWFzc2lnbmVkKSJdKWZvcihqPTA7dXNhZ2VbIihyZWFzc2lnbmVkKSJdLmxlbmd0aD5qO2orKyl3YXJuaW5nKCJXMDIwIix1c2FnZVsiKHJlYXNzaWduZWQpIl1bal0pfWVsc2UgaWYodXNhZ2VbIih0b2tlbnMpIl0pZm9yKGo9MDt1c2FnZVsiKHRva2VucykiXS5sZW5ndGg+ajtqKyspe3ZhciB1bmRlZmluZWRUb2tlbj11c2FnZVsiKHRva2VucykiXVtqXTt1bmRlZmluZWRUb2tlbi5mb3JnaXZlVW5kZWZ8fChzdGF0ZS5vcHRpb24udW5kZWYmJiF1bmRlZmluZWRUb2tlbi5pZ25vcmVVbmRlZiYmd2FybmluZygiVzExNyIsdW5kZWZpbmVkVG9rZW4sdXNlZExhYmVsTmFtZSksaW1wbGllZEdsb2JhbHNbdXNlZExhYmVsTmFtZV0/aW1wbGllZEdsb2JhbHNbdXNlZExhYmVsTmFtZV0ubGluZS5wdXNoKHVuZGVmaW5lZFRva2VuLmxpbmUpOmltcGxpZWRHbG9iYWxzW3VzZWRMYWJlbE5hbWVdPXtuYW1lOnVzZWRMYWJlbE5hbWUsbGluZTpbdW5kZWZpbmVkVG9rZW4ubGluZV19KX19aWYoc3ViU2NvcGV8fE9iamVjdC5rZXlzKGRlY2xhcmVkKS5mb3JFYWNoKGZ1bmN0aW9uKGxhYmVsTm90VXNlZCl7X3dhcm5VbnVzZWQobGFiZWxOb3RVc2VkLGRlY2xhcmVkW2xhYmVsTm90VXNlZF0sInZhciIpfSksc3ViU2NvcGUmJiFpc1Vuc3RhY2tpbmdGdW5jdGlvbkJvZHkmJiFpc1Vuc3RhY2tpbmdGdW5jdGlvblBhcmFtcyYmIWlzVW5zdGFja2luZ0Z1bmN0aW9uT3V0ZXIpe3ZhciBsYWJlbE5hbWVzPU9iamVjdC5rZXlzKGN1cnJlbnRMYWJlbHMpO2ZvcihpPTA7bGFiZWxOYW1lcy5sZW5ndGg+aTtpKyspe3ZhciBkZWZMYWJlbE5hbWU9bGFiZWxOYW1lc1tpXTtjdXJyZW50TGFiZWxzW2RlZkxhYmVsTmFtZV1bIihibG9ja3Njb3BlZCkiXXx8ImV4Y2VwdGlvbiI9PT1jdXJyZW50TGFiZWxzW2RlZkxhYmVsTmFtZV1bIih0eXBlKSJdfHx0aGlzLmZ1bmN0LmhhcyhkZWZMYWJlbE5hbWUse2V4Y2x1ZGVDdXJyZW50OiEwfSl8fChzdWJTY29wZVsiKGxhYmVscykiXVtkZWZMYWJlbE5hbWVdPWN1cnJlbnRMYWJlbHNbZGVmTGFiZWxOYW1lXSwiZ2xvYmFsIiE9PV9jdXJyZW50RnVuY3RCb2R5WyIodHlwZSkiXSYmKHN1YlNjb3BlWyIobGFiZWxzKSJdW2RlZkxhYmVsTmFtZV1bIih1c2VPdXRzaWRlT2ZTY29wZSkiXT0hMCksZGVsZXRlIGN1cnJlbnRMYWJlbHNbZGVmTGFiZWxOYW1lXSl9fV9jaGVja0ZvclVudXNlZCgpLF9zY29wZVN0YWNrLnBvcCgpLGlzVW5zdGFja2luZ0Z1bmN0aW9uQm9keSYmKF9jdXJyZW50RnVuY3RCb2R5PV9zY29wZVN0YWNrW18uZmluZExhc3RJbmRleChfc2NvcGVTdGFjayxmdW5jdGlvbihzY29wZSl7cmV0dXJuIHNjb3BlWyIoaXNGdW5jQm9keSkiXXx8Imdsb2JhbCI9PT1zY29wZVsiKHR5cGUpIl19KV0pLF9jdXJyZW50PXN1YlNjb3BlfSxhZGRQYXJhbTpmdW5jdGlvbihsYWJlbE5hbWUsdG9rZW4sdHlwZSl7aWYodHlwZT10eXBlfHwicGFyYW0iLCJleGNlcHRpb24iPT09dHlwZSl7dmFyIHByZXZpb3VzbHlEZWZpbmVkTGFiZWxUeXBlPXRoaXMuZnVuY3QubGFiZWx0eXBlKGxhYmVsTmFtZSk7cHJldmlvdXNseURlZmluZWRMYWJlbFR5cGUmJiJleGNlcHRpb24iIT09cHJldmlvdXNseURlZmluZWRMYWJlbFR5cGUmJihzdGF0ZS5vcHRpb24ubm9kZXx8d2FybmluZygiVzAwMiIsc3RhdGUudG9rZW5zLm5leHQsbGFiZWxOYW1lKSl9aWYoXy5oYXMoX2N1cnJlbnRbIihsYWJlbHMpIl0sbGFiZWxOYW1lKT9fY3VycmVudFsiKGxhYmVscykiXVtsYWJlbE5hbWVdLmR1cGxpY2F0ZWQ9ITA6KF9jaGVja091dGVyU2hhZG93KGxhYmVsTmFtZSx0b2tlbix0eXBlKSxfY3VycmVudFsiKGxhYmVscykiXVtsYWJlbE5hbWVdPXsiKHR5cGUpIjp0eXBlLCIodG9rZW4pIjp0b2tlbiwiKHVudXNlZCkiOiEwfSxfY3VycmVudFsiKHBhcmFtcykiXS5wdXNoKGxhYmVsTmFtZSkpLF8uaGFzKF9jdXJyZW50WyIodXNhZ2VzKSJdLGxhYmVsTmFtZSkpe3ZhciB1c2FnZT1fY3VycmVudFsiKHVzYWdlcykiXVtsYWJlbE5hbWVdO3VzYWdlWyIob25seVVzZWRTdWJGdW5jdGlvbikiXT9fbGF0ZWRlZldhcm5pbmcodHlwZSxsYWJlbE5hbWUsdG9rZW4pOndhcm5pbmcoIkUwNTYiLHRva2VuLGxhYmVsTmFtZSx0eXBlKX19LHZhbGlkYXRlUGFyYW1zOmZ1bmN0aW9uKCl7aWYoImdsb2JhbCIhPT1fY3VycmVudEZ1bmN0Qm9keVsiKHR5cGUpIl0pe3ZhciBpc1N0cmljdD1zdGF0ZS5pc1N0cmljdCgpLGN1cnJlbnRGdW5jdFBhcmFtU2NvcGU9X2N1cnJlbnRGdW5jdEJvZHlbIihwYXJlbnQpIl07Y3VycmVudEZ1bmN0UGFyYW1TY29wZVsiKHBhcmFtcykiXSYmY3VycmVudEZ1bmN0UGFyYW1TY29wZVsiKHBhcmFtcykiXS5mb3JFYWNoKGZ1bmN0aW9uKGxhYmVsTmFtZSl7dmFyIGxhYmVsPWN1cnJlbnRGdW5jdFBhcmFtU2NvcGVbIihsYWJlbHMpIl1bbGFiZWxOYW1lXTtsYWJlbCYmbGFiZWwuZHVwbGljYXRlZCYmKGlzU3RyaWN0P3dhcm5pbmcoIkUwMTEiLGxhYmVsWyIodG9rZW4pIl0sbGFiZWxOYW1lKTpzdGF0ZS5vcHRpb24uc2hhZG93IT09ITAmJndhcm5pbmcoIlcwMDQiLGxhYmVsWyIodG9rZW4pIl0sbGFiZWxOYW1lKSl9KX19LGdldFVzZWRPckRlZmluZWRHbG9iYWxzOmZ1bmN0aW9uKCl7dmFyIGxpc3Q9T2JqZWN0LmtleXModXNlZFByZWRlZmluZWRBbmRHbG9iYWxzKTtyZXR1cm4gdXNlZFByZWRlZmluZWRBbmRHbG9iYWxzLl9fcHJvdG9fXz09PW1hcmtlciYmLTE9PT1saXN0LmluZGV4T2YoIl9fcHJvdG9fXyIpJiZsaXN0LnB1c2goIl9fcHJvdG9fXyIpLGxpc3R9LGdldEltcGxpZWRHbG9iYWxzOmZ1bmN0aW9uKCl7dmFyIHZhbHVlcz1fLnZhbHVlcyhpbXBsaWVkR2xvYmFscyksaGFzUHJvdG89ITE7cmV0dXJuIGltcGxpZWRHbG9iYWxzLl9fcHJvdG9fXyYmKGhhc1Byb3RvPXZhbHVlcy5zb21lKGZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4iX19wcm90b19fIj09PXZhbHVlLm5hbWV9KSxoYXNQcm90b3x8dmFsdWVzLnB1c2goaW1wbGllZEdsb2JhbHMuX19wcm90b19fKSksdmFsdWVzfSxnZXRVbnVzZWRzOmZ1bmN0aW9uKCl7cmV0dXJuIHVudXNlZHN9LGhhczpmdW5jdGlvbihsYWJlbE5hbWUpe3JldHVybiBCb29sZWFuKF9nZXRMYWJlbChsYWJlbE5hbWUpKX0sbGFiZWx0eXBlOmZ1bmN0aW9uKGxhYmVsTmFtZSl7dmFyIHNjb3BlTGFiZWxzPV9nZXRMYWJlbChsYWJlbE5hbWUpO3JldHVybiBzY29wZUxhYmVscz9zY29wZUxhYmVsc1tsYWJlbE5hbWVdWyIodHlwZSkiXTpudWxsfSxhZGRFeHBvcnRlZDpmdW5jdGlvbihsYWJlbE5hbWUpe3ZhciBnbG9iYWxMYWJlbHM9X3Njb3BlU3RhY2tbMF1bIihsYWJlbHMpIl07aWYoXy5oYXMoZGVjbGFyZWQsbGFiZWxOYW1lKSlkZWxldGUgZGVjbGFyZWRbbGFiZWxOYW1lXTtlbHNlIGlmKF8uaGFzKGdsb2JhbExhYmVscyxsYWJlbE5hbWUpKWdsb2JhbExhYmVsc1tsYWJlbE5hbWVdWyIodW51c2VkKSJdPSExO2Vsc2V7Zm9yKHZhciBpPTE7X3Njb3BlU3RhY2subGVuZ3RoPmk7aSsrKXt2YXIgc2NvcGU9X3Njb3BlU3RhY2tbaV07aWYoc2NvcGVbIih0eXBlKSJdKWJyZWFrO2lmKF8uaGFzKHNjb3BlWyIobGFiZWxzKSJdLGxhYmVsTmFtZSkmJiFzY29wZVsiKGxhYmVscykiXVtsYWJlbE5hbWVdWyIoYmxvY2tzY29wZWQpIl0pcmV0dXJuIHNjb3BlWyIobGFiZWxzKSJdW2xhYmVsTmFtZV1bIih1bnVzZWQpIl09ITEsdm9pZCAwfWV4cG9ydGVkW2xhYmVsTmFtZV09ITB9fSxzZXRFeHBvcnRlZDpmdW5jdGlvbihsYWJlbE5hbWUsdG9rZW4pe3RoaXMuYmxvY2sudXNlKGxhYmVsTmFtZSx0b2tlbilcbn0sYWRkbGFiZWw6ZnVuY3Rpb24obGFiZWxOYW1lLG9wdHMpe3ZhciB0eXBlPW9wdHMudHlwZSx0b2tlbj1vcHRzLnRva2VuLGlzYmxvY2tzY29wZWQ9ImxldCI9PT10eXBlfHwiY29uc3QiPT09dHlwZXx8ImNsYXNzIj09PXR5cGUsaXNleHBvcnRlZD0iZ2xvYmFsIj09PShpc2Jsb2Nrc2NvcGVkP19jdXJyZW50Ol9jdXJyZW50RnVuY3RCb2R5KVsiKHR5cGUpIl0mJl8uaGFzKGV4cG9ydGVkLGxhYmVsTmFtZSk7aWYoX2NoZWNrT3V0ZXJTaGFkb3cobGFiZWxOYW1lLHRva2VuLHR5cGUpLGlzYmxvY2tzY29wZWQpe3ZhciBkZWNsYXJlZEluQ3VycmVudFNjb3BlPV9jdXJyZW50WyIobGFiZWxzKSJdW2xhYmVsTmFtZV07aWYoZGVjbGFyZWRJbkN1cnJlbnRTY29wZXx8X2N1cnJlbnQhPT1fY3VycmVudEZ1bmN0Qm9keXx8Imdsb2JhbCI9PT1fY3VycmVudFsiKHR5cGUpIl18fChkZWNsYXJlZEluQ3VycmVudFNjb3BlPSEhX2N1cnJlbnRGdW5jdEJvZHlbIihwYXJlbnQpIl1bIihsYWJlbHMpIl1bbGFiZWxOYW1lXSksIWRlY2xhcmVkSW5DdXJyZW50U2NvcGUmJl9jdXJyZW50WyIodXNhZ2VzKSJdW2xhYmVsTmFtZV0pe3ZhciB1c2FnZT1fY3VycmVudFsiKHVzYWdlcykiXVtsYWJlbE5hbWVdO3VzYWdlWyIob25seVVzZWRTdWJGdW5jdGlvbikiXT9fbGF0ZWRlZldhcm5pbmcodHlwZSxsYWJlbE5hbWUsdG9rZW4pOndhcm5pbmcoIkUwNTYiLHRva2VuLGxhYmVsTmFtZSx0eXBlKX1kZWNsYXJlZEluQ3VycmVudFNjb3BlP3dhcm5pbmcoIkUwMTEiLHRva2VuLGxhYmVsTmFtZSk6Im91dGVyIj09PXN0YXRlLm9wdGlvbi5zaGFkb3cmJnNjb3BlTWFuYWdlckluc3QuZnVuY3QuaGFzKGxhYmVsTmFtZSkmJndhcm5pbmcoIlcwMDQiLHRva2VuLGxhYmVsTmFtZSksc2NvcGVNYW5hZ2VySW5zdC5ibG9jay5hZGQobGFiZWxOYW1lLHR5cGUsdG9rZW4sIWlzZXhwb3J0ZWQpfWVsc2V7dmFyIGRlY2xhcmVkSW5DdXJyZW50RnVuY3Rpb25TY29wZT1zY29wZU1hbmFnZXJJbnN0LmZ1bmN0LmhhcyhsYWJlbE5hbWUpOyFkZWNsYXJlZEluQ3VycmVudEZ1bmN0aW9uU2NvcGUmJnVzZWRTb0ZhckluQ3VycmVudEZ1bmN0aW9uKGxhYmVsTmFtZSkmJl9sYXRlZGVmV2FybmluZyh0eXBlLGxhYmVsTmFtZSx0b2tlbiksc2NvcGVNYW5hZ2VySW5zdC5mdW5jdC5oYXMobGFiZWxOYW1lLHtvbmx5QmxvY2tzY29wZWQ6ITB9KT93YXJuaW5nKCJFMDExIix0b2tlbixsYWJlbE5hbWUpOnN0YXRlLm9wdGlvbi5zaGFkb3chPT0hMCYmZGVjbGFyZWRJbkN1cnJlbnRGdW5jdGlvblNjb3BlJiYiX19wcm90b19fIiE9PWxhYmVsTmFtZSYmImdsb2JhbCIhPT1fY3VycmVudEZ1bmN0Qm9keVsiKHR5cGUpIl0mJndhcm5pbmcoIlcwMDQiLHRva2VuLGxhYmVsTmFtZSksc2NvcGVNYW5hZ2VySW5zdC5mdW5jdC5hZGQobGFiZWxOYW1lLHR5cGUsdG9rZW4sIWlzZXhwb3J0ZWQpLCJnbG9iYWwiPT09X2N1cnJlbnRGdW5jdEJvZHlbIih0eXBlKSJdJiYodXNlZFByZWRlZmluZWRBbmRHbG9iYWxzW2xhYmVsTmFtZV09bWFya2VyKX19LGZ1bmN0OntsYWJlbHR5cGU6ZnVuY3Rpb24obGFiZWxOYW1lLG9wdGlvbnMpe2Zvcih2YXIgb25seUJsb2Nrc2NvcGVkPW9wdGlvbnMmJm9wdGlvbnMub25seUJsb2Nrc2NvcGVkLGV4Y2x1ZGVQYXJhbXM9b3B0aW9ucyYmb3B0aW9ucy5leGNsdWRlUGFyYW1zLGN1cnJlbnRTY29wZUluZGV4PV9zY29wZVN0YWNrLmxlbmd0aC0ob3B0aW9ucyYmb3B0aW9ucy5leGNsdWRlQ3VycmVudD8yOjEpLGk9Y3VycmVudFNjb3BlSW5kZXg7aT49MDtpLS0pe3ZhciBjdXJyZW50PV9zY29wZVN0YWNrW2ldO2lmKGN1cnJlbnRbIihsYWJlbHMpIl1bbGFiZWxOYW1lXSYmKCFvbmx5QmxvY2tzY29wZWR8fGN1cnJlbnRbIihsYWJlbHMpIl1bbGFiZWxOYW1lXVsiKGJsb2Nrc2NvcGVkKSJdKSlyZXR1cm4gY3VycmVudFsiKGxhYmVscykiXVtsYWJlbE5hbWVdWyIodHlwZSkiXTt2YXIgc2NvcGVDaGVjaz1leGNsdWRlUGFyYW1zP19zY29wZVN0YWNrW2ktMV06Y3VycmVudDtpZihzY29wZUNoZWNrJiYiZnVuY3Rpb25wYXJhbXMiPT09c2NvcGVDaGVja1siKHR5cGUpIl0pcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9LGhhc0JyZWFrTGFiZWw6ZnVuY3Rpb24obGFiZWxOYW1lKXtmb3IodmFyIGk9X3Njb3BlU3RhY2subGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBjdXJyZW50PV9zY29wZVN0YWNrW2ldO2lmKGN1cnJlbnRbIihicmVha0xhYmVscykiXVtsYWJlbE5hbWVdKXJldHVybiEwO2lmKCJmdW5jdGlvbnBhcmFtcyI9PT1jdXJyZW50WyIodHlwZSkiXSlyZXR1cm4hMX1yZXR1cm4hMX0saGFzOmZ1bmN0aW9uKGxhYmVsTmFtZSxvcHRpb25zKXtyZXR1cm4gQm9vbGVhbih0aGlzLmxhYmVsdHlwZShsYWJlbE5hbWUsb3B0aW9ucykpfSxhZGQ6ZnVuY3Rpb24obGFiZWxOYW1lLHR5cGUsdG9rLHVudXNlZCl7X2N1cnJlbnRbIihsYWJlbHMpIl1bbGFiZWxOYW1lXT17Iih0eXBlKSI6dHlwZSwiKHRva2VuKSI6dG9rLCIoYmxvY2tzY29wZWQpIjohMSwiKGZ1bmN0aW9uKSI6X2N1cnJlbnRGdW5jdEJvZHksIih1bnVzZWQpIjp1bnVzZWR9fX0sYmxvY2s6e2lzR2xvYmFsOmZ1bmN0aW9uKCl7cmV0dXJuImdsb2JhbCI9PT1fY3VycmVudFsiKHR5cGUpIl19LHVzZTpmdW5jdGlvbihsYWJlbE5hbWUsdG9rZW4pe3ZhciBwYXJhbVNjb3BlPV9jdXJyZW50RnVuY3RCb2R5WyIocGFyZW50KSJdO3BhcmFtU2NvcGUmJnBhcmFtU2NvcGVbIihsYWJlbHMpIl1bbGFiZWxOYW1lXSYmInBhcmFtIj09PXBhcmFtU2NvcGVbIihsYWJlbHMpIl1bbGFiZWxOYW1lXVsiKHR5cGUpIl0mJihzY29wZU1hbmFnZXJJbnN0LmZ1bmN0LmhhcyhsYWJlbE5hbWUse2V4Y2x1ZGVQYXJhbXM6ITAsb25seUJsb2Nrc2NvcGVkOiEwfSl8fChwYXJhbVNjb3BlWyIobGFiZWxzKSJdW2xhYmVsTmFtZV1bIih1bnVzZWQpIl09ITEpKSx0b2tlbiYmKHN0YXRlLmlnbm9yZWQuVzExN3x8c3RhdGUub3B0aW9uLnVuZGVmPT09ITEpJiYodG9rZW4uaWdub3JlVW5kZWY9ITApLF9zZXR1cFVzYWdlcyhsYWJlbE5hbWUpLHRva2VuJiYodG9rZW5bIihmdW5jdGlvbikiXT1fY3VycmVudEZ1bmN0Qm9keSxfY3VycmVudFsiKHVzYWdlcykiXVtsYWJlbE5hbWVdWyIodG9rZW5zKSJdLnB1c2godG9rZW4pKX0scmVhc3NpZ246ZnVuY3Rpb24obGFiZWxOYW1lLHRva2VuKXt0aGlzLm1vZGlmeShsYWJlbE5hbWUsdG9rZW4pLF9jdXJyZW50WyIodXNhZ2VzKSJdW2xhYmVsTmFtZV1bIihyZWFzc2lnbmVkKSJdLnB1c2godG9rZW4pfSxtb2RpZnk6ZnVuY3Rpb24obGFiZWxOYW1lLHRva2VuKXtfc2V0dXBVc2FnZXMobGFiZWxOYW1lKSxfY3VycmVudFsiKHVzYWdlcykiXVtsYWJlbE5hbWVdWyIobW9kaWZpZWQpIl0ucHVzaCh0b2tlbil9LGFkZDpmdW5jdGlvbihsYWJlbE5hbWUsdHlwZSx0b2ssdW51c2VkKXtfY3VycmVudFsiKGxhYmVscykiXVtsYWJlbE5hbWVdPXsiKHR5cGUpIjp0eXBlLCIodG9rZW4pIjp0b2ssIihibG9ja3Njb3BlZCkiOiEwLCIodW51c2VkKSI6dW51c2VkfX0sYWRkQnJlYWtMYWJlbDpmdW5jdGlvbihsYWJlbE5hbWUsb3B0cyl7dmFyIHRva2VuPW9wdHMudG9rZW47c2NvcGVNYW5hZ2VySW5zdC5mdW5jdC5oYXNCcmVha0xhYmVsKGxhYmVsTmFtZSk/d2FybmluZygiRTAxMSIsdG9rZW4sbGFiZWxOYW1lKToib3V0ZXIiPT09c3RhdGUub3B0aW9uLnNoYWRvdyYmKHNjb3BlTWFuYWdlckluc3QuZnVuY3QuaGFzKGxhYmVsTmFtZSk/d2FybmluZygiVzAwNCIsdG9rZW4sbGFiZWxOYW1lKTpfY2hlY2tPdXRlclNoYWRvdyhsYWJlbE5hbWUsdG9rZW4pKSxfY3VycmVudFsiKGJyZWFrTGFiZWxzKSJdW2xhYmVsTmFtZV09dG9rZW59fX07cmV0dXJuIHNjb3BlTWFuYWdlckluc3R9O21vZHVsZS5leHBvcnRzPXNjb3BlTWFuYWdlcn0seyIuLi9sb2Rhc2giOiIvbm9kZV9tb2R1bGVzL2pzaGludC9sb2Rhc2guanMiLGV2ZW50czoiL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIn1dLCIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvc3RhdGUuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIE5hbWVTdGFjaz1fZGVyZXFfKCIuL25hbWUtc3RhY2suanMiKSxzdGF0ZT17c3ludGF4Ont9LGlzU3RyaWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlyZWN0aXZlWyJ1c2Ugc3RyaWN0Il18fHRoaXMuaW5DbGFzc0JvZHl8fHRoaXMub3B0aW9uLm1vZHVsZXx8ImltcGxpZWQiPT09dGhpcy5vcHRpb24uc3RyaWN0fSxpbk1vejpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbi5tb3p9LGluRVM2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9uLm1venx8dGhpcy5vcHRpb24uZXN2ZXJzaW9uPj02fSxpbkVTNTpmdW5jdGlvbihzdHJpY3Qpe3JldHVybiBzdHJpY3Q/ISh0aGlzLm9wdGlvbi5lc3ZlcnNpb24mJjUhPT10aGlzLm9wdGlvbi5lc3ZlcnNpb258fHRoaXMub3B0aW9uLm1veik6IXRoaXMub3B0aW9uLmVzdmVyc2lvbnx8dGhpcy5vcHRpb24uZXN2ZXJzaW9uPj01fHx0aGlzLm9wdGlvbi5tb3p9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy50b2tlbnM9e3ByZXY6bnVsbCxuZXh0Om51bGwsY3VycjpudWxsfSx0aGlzLm9wdGlvbj17fSx0aGlzLmZ1bmN0PW51bGwsdGhpcy5pZ25vcmVkPXt9LHRoaXMuZGlyZWN0aXZlPXt9LHRoaXMuanNvbk1vZGU9ITEsdGhpcy5qc29uV2FybmluZ3M9W10sdGhpcy5saW5lcz1bXSx0aGlzLnRhYj0iIix0aGlzLmNhY2hlPXt9LHRoaXMuaWdub3JlZExpbmVzPXt9LHRoaXMuZm9yaW5pZmNoZWNrbmVlZGVkPSExLHRoaXMubmFtZVN0YWNrPW5ldyBOYW1lU3RhY2ssdGhpcy5pbkNsYXNzQm9keT0hMX19O2V4cG9ydHMuc3RhdGU9c3RhdGV9LHsiLi9uYW1lLXN0YWNrLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL25hbWUtc3RhY2suanMifV0sIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9zdHlsZS5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtleHBvcnRzLnJlZ2lzdGVyPWZ1bmN0aW9uKGxpbnRlcil7bGludGVyLm9uKCJJZGVudGlmaWVyIixmdW5jdGlvbihkYXRhKXtsaW50ZXIuZ2V0T3B0aW9uKCJwcm90byIpfHwiX19wcm90b19fIj09PWRhdGEubmFtZSYmbGludGVyLndhcm4oIlcxMDMiLHtsaW5lOmRhdGEubGluZSwiY2hhciI6ZGF0YS5jaGFyLGRhdGE6W2RhdGEubmFtZSwiNiJdfSl9KSxsaW50ZXIub24oIklkZW50aWZpZXIiLGZ1bmN0aW9uKGRhdGEpe2xpbnRlci5nZXRPcHRpb24oIml0ZXJhdG9yIil8fCJfX2l0ZXJhdG9yX18iPT09ZGF0YS5uYW1lJiZsaW50ZXIud2FybigiVzEwMyIse2xpbmU6ZGF0YS5saW5lLCJjaGFyIjpkYXRhLmNoYXIsZGF0YTpbZGF0YS5uYW1lXX0pfSksbGludGVyLm9uKCJJZGVudGlmaWVyIixmdW5jdGlvbihkYXRhKXtsaW50ZXIuZ2V0T3B0aW9uKCJjYW1lbGNhc2UiKSYmZGF0YS5uYW1lLnJlcGxhY2UoL15fK3xfKyQvZywiIikuaW5kZXhPZigiXyIpPi0xJiYhZGF0YS5uYW1lLm1hdGNoKC9eW0EtWjAtOV9dKiQvKSYmbGludGVyLndhcm4oIlcxMDYiLHtsaW5lOmRhdGEubGluZSwiY2hhciI6ZGF0YS5mcm9tLGRhdGE6W2RhdGEubmFtZV19KX0pLGxpbnRlci5vbigiU3RyaW5nIixmdW5jdGlvbihkYXRhKXt2YXIgY29kZSxxdW90bWFyaz1saW50ZXIuZ2V0T3B0aW9uKCJxdW90bWFyayIpO3F1b3RtYXJrJiYoInNpbmdsZSI9PT1xdW90bWFyayYmIlwnIiE9PWRhdGEucXVvdGUmJihjb2RlPSJXMTA5IiksImRvdWJsZSI9PT1xdW90bWFyayYmXCciXCchPT1kYXRhLnF1b3RlJiYoY29kZT0iVzEwOCIpLHF1b3RtYXJrPT09ITAmJihsaW50ZXIuZ2V0Q2FjaGUoInF1b3RtYXJrIil8fGxpbnRlci5zZXRDYWNoZSgicXVvdG1hcmsiLGRhdGEucXVvdGUpLGxpbnRlci5nZXRDYWNoZSgicXVvdG1hcmsiKSE9PWRhdGEucXVvdGUmJihjb2RlPSJXMTEwIikpLGNvZGUmJmxpbnRlci53YXJuKGNvZGUse2xpbmU6ZGF0YS5saW5lLCJjaGFyIjpkYXRhLmNoYXJ9KSl9KSxsaW50ZXIub24oIk51bWJlciIsZnVuY3Rpb24oZGF0YSl7Ii4iPT09ZGF0YS52YWx1ZS5jaGFyQXQoMCkmJmxpbnRlci53YXJuKCJXMDA4Iix7bGluZTpkYXRhLmxpbmUsImNoYXIiOmRhdGEuY2hhcixkYXRhOltkYXRhLnZhbHVlXX0pLCIuIj09PWRhdGEudmFsdWUuc3Vic3RyKGRhdGEudmFsdWUubGVuZ3RoLTEpJiZsaW50ZXIud2FybigiVzA0NyIse2xpbmU6ZGF0YS5saW5lLCJjaGFyIjpkYXRhLmNoYXIsZGF0YTpbZGF0YS52YWx1ZV19KSwvXjAwKy8udGVzdChkYXRhLnZhbHVlKSYmbGludGVyLndhcm4oIlcwNDYiLHtsaW5lOmRhdGEubGluZSwiY2hhciI6ZGF0YS5jaGFyLGRhdGE6W2RhdGEudmFsdWVdfSl9KSxsaW50ZXIub24oIlN0cmluZyIsZnVuY3Rpb24oZGF0YSl7dmFyIHJlPS9eKD86amF2YXNjcmlwdHxqc2NyaXB0fGVjbWFzY3JpcHR8dmJzY3JpcHR8bGl2ZXNjcmlwdClcXHMqOi9pO2xpbnRlci5nZXRPcHRpb24oInNjcmlwdHVybCIpfHxyZS50ZXN0KGRhdGEudmFsdWUpJiZsaW50ZXIud2FybigiVzEwNyIse2xpbmU6ZGF0YS5saW5lLCJjaGFyIjpkYXRhLmNoYXJ9KX0pfX0se31dLCIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvdmFycy5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtleHBvcnRzLnJlc2VydmVkVmFycz17YXJndW1lbnRzOiExLE5hTjohMX0sZXhwb3J0cy5lY21hSWRlbnRpZmllcnM9ezM6e0FycmF5OiExLEJvb2xlYW46ITEsRGF0ZTohMSxkZWNvZGVVUkk6ITEsZGVjb2RlVVJJQ29tcG9uZW50OiExLGVuY29kZVVSSTohMSxlbmNvZGVVUklDb21wb25lbnQ6ITEsRXJyb3I6ITEsZXZhbDohMSxFdmFsRXJyb3I6ITEsRnVuY3Rpb246ITEsaGFzT3duUHJvcGVydHk6ITEsaXNGaW5pdGU6ITEsaXNOYU46ITEsTWF0aDohMSxOdW1iZXI6ITEsT2JqZWN0OiExLHBhcnNlSW50OiExLHBhcnNlRmxvYXQ6ITEsUmFuZ2VFcnJvcjohMSxSZWZlcmVuY2VFcnJvcjohMSxSZWdFeHA6ITEsU3RyaW5nOiExLFN5bnRheEVycm9yOiExLFR5cGVFcnJvcjohMSxVUklFcnJvcjohMX0sNTp7SlNPTjohMX0sNjp7TWFwOiExLFByb21pc2U6ITEsUHJveHk6ITEsUmVmbGVjdDohMSxTZXQ6ITEsU3ltYm9sOiExLFdlYWtNYXA6ITEsV2Vha1NldDohMX19LGV4cG9ydHMuYnJvd3Nlcj17QXVkaW86ITEsQmxvYjohMSxhZGRFdmVudExpc3RlbmVyOiExLGFwcGxpY2F0aW9uQ2FjaGU6ITEsYXRvYjohMSxibHVyOiExLGJ0b2E6ITEsY2FuY2VsQW5pbWF0aW9uRnJhbWU6ITEsQ2FudmFzR3JhZGllbnQ6ITEsQ2FudmFzUGF0dGVybjohMSxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6ITEsQ1NTOiExLGNsZWFySW50ZXJ2YWw6ITEsY2xlYXJUaW1lb3V0OiExLGNsb3NlOiExLGNsb3NlZDohMSxDb21tZW50OiExLEN1c3RvbUV2ZW50OiExLERPTVBhcnNlcjohMSxkZWZhdWx0U3RhdHVzOiExLERvY3VtZW50OiExLGRvY3VtZW50OiExLERvY3VtZW50RnJhZ21lbnQ6ITEsRWxlbWVudDohMSxFbGVtZW50VGltZUNvbnRyb2w6ITEsRXZlbnQ6ITEsZXZlbnQ6ITEsZmV0Y2g6ITEsRmlsZVJlYWRlcjohMSxGb3JtRGF0YTohMSxmb2N1czohMSxmcmFtZXM6ITEsZ2V0Q29tcHV0ZWRTdHlsZTohMSxIVE1MRWxlbWVudDohMSxIVE1MQW5jaG9yRWxlbWVudDohMSxIVE1MQmFzZUVsZW1lbnQ6ITEsSFRNTEJsb2NrcXVvdGVFbGVtZW50OiExLEhUTUxCb2R5RWxlbWVudDohMSxIVE1MQlJFbGVtZW50OiExLEhUTUxCdXR0b25FbGVtZW50OiExLEhUTUxDYW52YXNFbGVtZW50OiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxEaXJlY3RvcnlFbGVtZW50OiExLEhUTUxEaXZFbGVtZW50OiExLEhUTUxETGlzdEVsZW1lbnQ6ITEsSFRNTEZpZWxkU2V0RWxlbWVudDohMSxIVE1MRm9udEVsZW1lbnQ6ITEsSFRNTEZvcm1FbGVtZW50OiExLEhUTUxGcmFtZUVsZW1lbnQ6ITEsSFRNTEZyYW1lU2V0RWxlbWVudDohMSxIVE1MSGVhZEVsZW1lbnQ6ITEsSFRNTEhlYWRpbmdFbGVtZW50OiExLEhUTUxIUkVsZW1lbnQ6ITEsSFRNTEh0bWxFbGVtZW50OiExLEhUTUxJRnJhbWVFbGVtZW50OiExLEhUTUxJbWFnZUVsZW1lbnQ6ITEsSFRNTElucHV0RWxlbWVudDohMSxIVE1MSXNJbmRleEVsZW1lbnQ6ITEsSFRNTExhYmVsRWxlbWVudDohMSxIVE1MTGF5ZXJFbGVtZW50OiExLEhUTUxMZWdlbmRFbGVtZW50OiExLEhUTUxMSUVsZW1lbnQ6ITEsSFRNTExpbmtFbGVtZW50OiExLEhUTUxNYXBFbGVtZW50OiExLEhUTUxNZW51RWxlbWVudDohMSxIVE1MTWV0YUVsZW1lbnQ6ITEsSFRNTE1vZEVsZW1lbnQ6ITEsSFRNTE9iamVjdEVsZW1lbnQ6ITEsSFRNTE9MaXN0RWxlbWVudDohMSxIVE1MT3B0R3JvdXBFbGVtZW50OiExLEhUTUxPcHRpb25FbGVtZW50OiExLEhUTUxQYXJhZ3JhcGhFbGVtZW50OiExLEhUTUxQYXJhbUVsZW1lbnQ6ITEsSFRNTFByZUVsZW1lbnQ6ITEsSFRNTFF1b3RlRWxlbWVudDohMSxIVE1MU2NyaXB0RWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxIVE1MU3R5bGVFbGVtZW50OiExLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OiExLEhUTUxUYWJsZUNlbGxFbGVtZW50OiExLEhUTUxUYWJsZUNvbEVsZW1lbnQ6ITEsSFRNTFRhYmxlRWxlbWVudDohMSxIVE1MVGFibGVSb3dFbGVtZW50OiExLEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OiExLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6ITEsSFRNTFRleHRBcmVhRWxlbWVudDohMSxIVE1MVGl0bGVFbGVtZW50OiExLEhUTUxVTGlzdEVsZW1lbnQ6ITEsSFRNTFZpZGVvRWxlbWVudDohMSxoaXN0b3J5OiExLEltYWdlOiExLEludGw6ITEsbGVuZ3RoOiExLGxvY2FsU3RvcmFnZTohMSxsb2NhdGlvbjohMSxtYXRjaE1lZGlhOiExLE1lc3NhZ2VDaGFubmVsOiExLE1lc3NhZ2VFdmVudDohMSxNZXNzYWdlUG9ydDohMSxNb3VzZUV2ZW50OiExLG1vdmVCeTohMSxtb3ZlVG86ITEsTXV0YXRpb25PYnNlcnZlcjohMSxuYW1lOiExLE5vZGU6ITEsTm9kZUZpbHRlcjohMSxOb2RlTGlzdDohMSxOb3RpZmljYXRpb246ITEsbmF2aWdhdG9yOiExLG9uYmVmb3JldW5sb2FkOiEwLG9uYmx1cjohMCxvbmVycm9yOiEwLG9uZm9jdXM6ITAsb25sb2FkOiEwLG9ucmVzaXplOiEwLG9udW5sb2FkOiEwLG9wZW46ITEsb3BlbkRhdGFiYXNlOiExLG9wZW5lcjohMSxPcHRpb246ITEscGFyZW50OiExLHBlcmZvcm1hbmNlOiExLHByaW50OiExLFJhbmdlOiExLHJlcXVlc3RBbmltYXRpb25GcmFtZTohMSxyZW1vdmVFdmVudExpc3RlbmVyOiExLHJlc2l6ZUJ5OiExLHJlc2l6ZVRvOiExLHNjcmVlbjohMSxzY3JvbGw6ITEsc2Nyb2xsQnk6ITEsc2Nyb2xsVG86ITEsc2Vzc2lvblN0b3JhZ2U6ITEsc2V0SW50ZXJ2YWw6ITEsc2V0VGltZW91dDohMSxTaGFyZWRXb3JrZXI6ITEsc3RhdHVzOiExLFNWR0FFbGVtZW50OiExLFNWR0FsdEdseXBoRGVmRWxlbWVudDohMSxTVkdBbHRHbHlwaEVsZW1lbnQ6ITEsU1ZHQWx0R2x5cGhJdGVtRWxlbWVudDohMSxTVkdBbmdsZTohMSxTVkdBbmltYXRlQ29sb3JFbGVtZW50OiExLFNWR0FuaW1hdGVFbGVtZW50OiExLFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OiExLFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OiExLFNWR0FuaW1hdGVkQW5nbGU6ITEsU1ZHQW5pbWF0ZWRCb29sZWFuOiExLFNWR0FuaW1hdGVkRW51bWVyYXRpb246ITEsU1ZHQW5pbWF0ZWRJbnRlZ2VyOiExLFNWR0FuaW1hdGVkTGVuZ3RoOiExLFNWR0FuaW1hdGVkTGVuZ3RoTGlzdDohMSxTVkdBbmltYXRlZE51bWJlcjohMSxTVkdBbmltYXRlZE51bWJlckxpc3Q6ITEsU1ZHQW5pbWF0ZWRQYXRoRGF0YTohMSxTVkdBbmltYXRlZFBvaW50czohMSxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86ITEsU1ZHQW5pbWF0ZWRSZWN0OiExLFNWR0FuaW1hdGVkU3RyaW5nOiExLFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDohMSxTVkdBbmltYXRpb25FbGVtZW50OiExLFNWR0NTU1J1bGU6ITEsU1ZHQ2lyY2xlRWxlbWVudDohMSxTVkdDbGlwUGF0aEVsZW1lbnQ6ITEsU1ZHQ29sb3I6ITEsU1ZHQ29sb3JQcm9maWxlRWxlbWVudDohMSxTVkdDb2xvclByb2ZpbGVSdWxlOiExLFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OiExLFNWR0N1cnNvckVsZW1lbnQ6ITEsU1ZHRGVmc0VsZW1lbnQ6ITEsU1ZHRGVzY0VsZW1lbnQ6ITEsU1ZHRG9jdW1lbnQ6ITEsU1ZHRWxlbWVudDohMSxTVkdFbGVtZW50SW5zdGFuY2U6ITEsU1ZHRWxlbWVudEluc3RhbmNlTGlzdDohMSxTVkdFbGxpcHNlRWxlbWVudDohMSxTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOiExLFNWR0ZFQmxlbmRFbGVtZW50OiExLFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OiExLFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OiExLFNWR0ZFQ29tcG9zaXRlRWxlbWVudDohMSxTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDohMSxTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6ITEsU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OiExLFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDohMSxTVkdGRUZsb29kRWxlbWVudDohMSxTVkdGRUZ1bmNBRWxlbWVudDohMSxTVkdGRUZ1bmNCRWxlbWVudDohMSxTVkdGRUZ1bmNHRWxlbWVudDohMSxTVkdGRUZ1bmNSRWxlbWVudDohMSxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6ITEsU1ZHRkVJbWFnZUVsZW1lbnQ6ITEsU1ZHRkVNZXJnZUVsZW1lbnQ6ITEsU1ZHRkVNZXJnZU5vZGVFbGVtZW50OiExLFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6ITEsU1ZHRkVPZmZzZXRFbGVtZW50OiExLFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6ITEsU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDohMSxTVkdGRVNwb3RMaWdodEVsZW1lbnQ6ITEsU1ZHRkVUaWxlRWxlbWVudDohMSxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OiExLFNWR0ZpbHRlckVsZW1lbnQ6ITEsU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOiExLFNWR0ZpdFRvVmlld0JveDohMSxTVkdGb250RWxlbWVudDohMSxTVkdGb250RmFjZUVsZW1lbnQ6ITEsU1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50OiExLFNWR0ZvbnRGYWNlTmFtZUVsZW1lbnQ6ITEsU1ZHRm9udEZhY2VTcmNFbGVtZW50OiExLFNWR0ZvbnRGYWNlVXJpRWxlbWVudDohMSxTVkdGb3JlaWduT2JqZWN0RWxlbWVudDohMSxTVkdHRWxlbWVudDohMSxTVkdHbHlwaEVsZW1lbnQ6ITEsU1ZHR2x5cGhSZWZFbGVtZW50OiExLFNWR0dyYWRpZW50RWxlbWVudDohMSxTVkdIS2VybkVsZW1lbnQ6ITEsU1ZHSUNDQ29sb3I6ITEsU1ZHSW1hZ2VFbGVtZW50OiExLFNWR0xhbmdTcGFjZTohMSxTVkdMZW5ndGg6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdMaW5lRWxlbWVudDohMSxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6ITEsU1ZHTG9jYXRhYmxlOiExLFNWR01QYXRoRWxlbWVudDohMSxTVkdNYXJrZXJFbGVtZW50OiExLFNWR01hc2tFbGVtZW50OiExLFNWR01hdHJpeDohMSxTVkdNZXRhZGF0YUVsZW1lbnQ6ITEsU1ZHTWlzc2luZ0dseXBoRWxlbWVudDohMSxTVkdOdW1iZXI6ITEsU1ZHTnVtYmVyTGlzdDohMSxTVkdQYWludDohMSxTVkdQYXRoRWxlbWVudDohMSxTVkdQYXRoU2VnOiExLFNWR1BhdGhTZWdBcmNBYnM6ITEsU1ZHUGF0aFNlZ0FyY1JlbDohMSxTVkdQYXRoU2VnQ2xvc2VQYXRoOiExLFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6ITEsU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDohMSxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOiExLFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6ITEsU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6ITEsU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6ITEsU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6ITEsU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6ITEsU1ZHUGF0aFNlZ0xpbmV0b0FiczohMSxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczohMSxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDohMSxTVkdQYXRoU2VnTGluZXRvUmVsOiExLFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczohMSxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6ITEsU1ZHUGF0aFNlZ0xpc3Q6ITEsU1ZHUGF0aFNlZ01vdmV0b0FiczohMSxTVkdQYXRoU2VnTW92ZXRvUmVsOiExLFNWR1BhdHRlcm5FbGVtZW50OiExLFNWR1BvaW50OiExLFNWR1BvaW50TGlzdDohMSxTVkdQb2x5Z29uRWxlbWVudDohMSxTVkdQb2x5bGluZUVsZW1lbnQ6ITEsU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzohMSxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6ITEsU1ZHUmVjdDohMSxTVkdSZWN0RWxlbWVudDohMSxTVkdSZW5kZXJpbmdJbnRlbnQ6ITEsU1ZHU1ZHRWxlbWVudDohMSxTVkdTY3JpcHRFbGVtZW50OiExLFNWR1NldEVsZW1lbnQ6ITEsU1ZHU3RvcEVsZW1lbnQ6ITEsU1ZHU3RyaW5nTGlzdDohMSxTVkdTdHlsYWJsZTohMSxTVkdTdHlsZUVsZW1lbnQ6ITEsU1ZHU3dpdGNoRWxlbWVudDohMSxTVkdTeW1ib2xFbGVtZW50OiExLFNWR1RSZWZFbGVtZW50OiExLFNWR1RTcGFuRWxlbWVudDohMSxTVkdUZXN0czohMSxTVkdUZXh0Q29udGVudEVsZW1lbnQ6ITEsU1ZHVGV4dEVsZW1lbnQ6ITEsU1ZHVGV4dFBhdGhFbGVtZW50OiExLFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6ITEsU1ZHVGl0bGVFbGVtZW50OiExLFNWR1RyYW5zZm9ybTohMSxTVkdUcmFuc2Zvcm1MaXN0OiExLFNWR1RyYW5zZm9ybWFibGU6ITEsU1ZHVVJJUmVmZXJlbmNlOiExLFNWR1VuaXRUeXBlczohMSxTVkdVc2VFbGVtZW50OiExLFNWR1ZLZXJuRWxlbWVudDohMSxTVkdWaWV3RWxlbWVudDohMSxTVkdWaWV3U3BlYzohMSxTVkdab29tQW5kUGFuOiExLFRleHQ6ITEsVGV4dERlY29kZXI6ITEsVGV4dEVuY29kZXI6ITEsVGltZUV2ZW50OiExLHRvcDohMSxVUkw6ITEsV2ViR0xBY3RpdmVJbmZvOiExLFdlYkdMQnVmZmVyOiExLFdlYkdMQ29udGV4dEV2ZW50OiExLFdlYkdMRnJhbWVidWZmZXI6ITEsV2ViR0xQcm9ncmFtOiExLFdlYkdMUmVuZGVyYnVmZmVyOiExLFdlYkdMUmVuZGVyaW5nQ29udGV4dDohMSxXZWJHTFNoYWRlcjohMSxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDohMSxXZWJHTFRleHR1cmU6ITEsV2ViR0xVbmlmb3JtTG9jYXRpb246ITEsV2ViU29ja2V0OiExLHdpbmRvdzohMSxXaW5kb3c6ITEsV29ya2VyOiExLFhEb21haW5SZXF1ZXN0OiExLFhNTEh0dHBSZXF1ZXN0OiExLFhNTFNlcmlhbGl6ZXI6ITEsWFBhdGhFdmFsdWF0b3I6ITEsWFBhdGhFeGNlcHRpb246ITEsWFBhdGhFeHByZXNzaW9uOiExLFhQYXRoTmFtZXNwYWNlOiExLFhQYXRoTlNSZXNvbHZlcjohMSxYUGF0aFJlc3VsdDohMX0sZXhwb3J0cy5kZXZlbD17YWxlcnQ6ITEsY29uZmlybTohMSxjb25zb2xlOiExLERlYnVnOiExLG9wZXJhOiExLHByb21wdDohMX0sZXhwb3J0cy53b3JrZXI9e2ltcG9ydFNjcmlwdHM6ITAscG9zdE1lc3NhZ2U6ITAsc2VsZjohMCxGaWxlUmVhZGVyU3luYzohMH0sZXhwb3J0cy5ub25zdGFuZGFyZD17ZXNjYXBlOiExLHVuZXNjYXBlOiExfSxleHBvcnRzLmNvdWNoPXtyZXF1aXJlOiExLHJlc3BvbmQ6ITEsZ2V0Um93OiExLGVtaXQ6ITEsc2VuZDohMSxzdGFydDohMSxzdW06ITEsbG9nOiExLGV4cG9ydHM6ITEsbW9kdWxlOiExLHByb3ZpZGVzOiExfSxleHBvcnRzLm5vZGU9e19fZmlsZW5hbWU6ITEsX19kaXJuYW1lOiExLEdMT0JBTDohMSxnbG9iYWw6ITEsbW9kdWxlOiExLGFjZXF1aXJlOiExLEJ1ZmZlcjohMCxjb25zb2xlOiEwLGV4cG9ydHM6ITAscHJvY2VzczohMCxzZXRUaW1lb3V0OiEwLGNsZWFyVGltZW91dDohMCxzZXRJbnRlcnZhbDohMCxjbGVhckludGVydmFsOiEwLHNldEltbWVkaWF0ZTohMCxjbGVhckltbWVkaWF0ZTohMH0sZXhwb3J0cy5icm93c2VyaWZ5PXtfX2ZpbGVuYW1lOiExLF9fZGlybmFtZTohMSxnbG9iYWw6ITEsbW9kdWxlOiExLGFjZXF1aXJlOiExLEJ1ZmZlcjohMCxleHBvcnRzOiEwLHByb2Nlc3M6ITB9LGV4cG9ydHMucGhhbnRvbT17cGhhbnRvbTohMCxhY2VxdWlyZTohMCxXZWJQYWdlOiEwLGNvbnNvbGU6ITAsZXhwb3J0czohMH0sZXhwb3J0cy5xdW5pdD17YXN5bmNUZXN0OiExLGRlZXBFcXVhbDohMSxlcXVhbDohMSxleHBlY3Q6ITEsbW9kdWxlOiExLG5vdERlZXBFcXVhbDohMSxub3RFcXVhbDohMSxub3RQcm9wRXF1YWw6ITEsbm90U3RyaWN0RXF1YWw6ITEsb2s6ITEscHJvcEVxdWFsOiExLFFVbml0OiExLHJhaXNlczohMSxzdGFydDohMSxzdG9wOiExLHN0cmljdEVxdWFsOiExLHRlc3Q6ITEsInRocm93cyI6ITF9LGV4cG9ydHMucmhpbm89e2RlZmluZUNsYXNzOiExLGRlc2VyaWFsaXplOiExLGdjOiExLGhlbHA6ITEsaW1wb3J0Q2xhc3M6ITEsaW1wb3J0UGFja2FnZTohMSxqYXZhOiExLGxvYWQ6ITEsbG9hZENsYXNzOiExLFBhY2thZ2VzOiExLHByaW50OiExLHF1aXQ6ITEscmVhZEZpbGU6ITEscmVhZFVybDohMSxydW5Db21tYW5kOiExLHNlYWw6ITEsc2VyaWFsaXplOiExLHNwYXduOiExLHN5bmM6ITEsdG9pbnQzMjohMSx2ZXJzaW9uOiExfSxleHBvcnRzLnNoZWxsanM9e3RhcmdldDohMSxlY2hvOiExLGV4aXQ6ITEsY2Q6ITEscHdkOiExLGxzOiExLGZpbmQ6ITEsY3A6ITEscm06ITEsbXY6ITEsbWtkaXI6ITEsdGVzdDohMSxjYXQ6ITEsc2VkOiExLGdyZXA6ITEsd2hpY2g6ITEsZGlyczohMSxwdXNoZDohMSxwb3BkOiExLGVudjohMSxleGVjOiExLGNobW9kOiExLGNvbmZpZzohMSxlcnJvcjohMSx0ZW1wZGlyOiExfSxleHBvcnRzLnR5cGVkPXtBcnJheUJ1ZmZlcjohMSxBcnJheUJ1ZmZlclZpZXc6ITEsRGF0YVZpZXc6ITEsRmxvYXQzMkFycmF5OiExLEZsb2F0NjRBcnJheTohMSxJbnQxNkFycmF5OiExLEludDMyQXJyYXk6ITEsSW50OEFycmF5OiExLFVpbnQxNkFycmF5OiExLFVpbnQzMkFycmF5OiExLFVpbnQ4QXJyYXk6ITEsVWludDhDbGFtcGVkQXJyYXk6ITF9LGV4cG9ydHMud3NoPXtBY3RpdmVYT2JqZWN0OiEwLEVudW1lcmF0b3I6ITAsR2V0T2JqZWN0OiEwLFNjcmlwdEVuZ2luZTohMCxTY3JpcHRFbmdpbmVCdWlsZFZlcnNpb246ITAsU2NyaXB0RW5naW5lTWFqb3JWZXJzaW9uOiEwLFNjcmlwdEVuZ2luZU1pbm9yVmVyc2lvbjohMCxWQkFycmF5OiEwLFdTSDohMCxXU2NyaXB0OiEwLFhEb21haW5SZXF1ZXN0OiEwfSxleHBvcnRzLmRvam89e2Rvam86ITEsZGlqaXQ6ITEsZG9qb3g6ITEsZGVmaW5lOiExLHJlcXVpcmU6ITF9LGV4cG9ydHMuanF1ZXJ5PXskOiExLGpRdWVyeTohMX0sZXhwb3J0cy5tb290b29scz17JDohMSwkJDohMSxBc3NldDohMSxCcm93c2VyOiExLENoYWluOiExLENsYXNzOiExLENvbG9yOiExLENvb2tpZTohMSxDb3JlOiExLERvY3VtZW50OiExLERvbVJlYWR5OiExLERPTUV2ZW50OiExLERPTVJlYWR5OiExLERyYWc6ITEsRWxlbWVudDohMSxFbGVtZW50czohMSxFdmVudDohMSxFdmVudHM6ITEsRng6ITEsR3JvdXA6ITEsSGFzaDohMSxIdG1sVGFibGU6ITEsSUZyYW1lOiExLElmcmFtZVNoaW06ITEsSW5wdXRWYWxpZGF0b3I6ITEsaW5zdGFuY2VPZjohMSxLZXlib2FyZDohMSxMb2NhbGU6ITEsTWFzazohMSxNb29Ub29sczohMSxOYXRpdmU6ITEsT3B0aW9uczohMSxPdmVyVGV4dDohMSxSZXF1ZXN0OiExLFNjcm9sbGVyOiExLFNsaWNrOiExLFNsaWRlcjohMSxTb3J0YWJsZXM6ITEsU3Bpbm5lcjohMSxTd2lmZjohMSxUaXBzOiExLFR5cGU6ITEsdHlwZU9mOiExLFVSSTohMSxXaW5kb3c6ITF9LGV4cG9ydHMucHJvdG90eXBlanM9eyQ6ITEsJCQ6ITEsJEE6ITEsJEY6ITEsJEg6ITEsJFI6ITEsJGJyZWFrOiExLCRjb250aW51ZTohMSwkdzohMSxBYnN0cmFjdDohMSxBamF4OiExLENsYXNzOiExLEVudW1lcmFibGU6ITEsRWxlbWVudDohMSxFdmVudDohMSxGaWVsZDohMSxGb3JtOiExLEhhc2g6ITEsSW5zZXJ0aW9uOiExLE9iamVjdFJhbmdlOiExLFBlcmlvZGljYWxFeGVjdXRlcjohMSxQb3NpdGlvbjohMSxQcm90b3R5cGU6ITEsU2VsZWN0b3I6ITEsVGVtcGxhdGU6ITEsVG9nZ2xlOiExLFRyeTohMSxBdXRvY29tcGxldGVyOiExLEJ1aWxkZXI6ITEsQ29udHJvbDohMSxEcmFnZ2FibGU6ITEsRHJhZ2dhYmxlczohMSxEcm9wcGFibGVzOiExLEVmZmVjdDohMSxTb3J0YWJsZTohMSxTb3J0YWJsZU9ic2VydmVyOiExLFNvdW5kOiExLFNjcmlwdGFjdWxvdXM6ITF9LGV4cG9ydHMueXVpPXtZVUk6ITEsWTohMSxZVUlfY29uZmlnOiExfSxleHBvcnRzLm1vY2hhPXttb2NoYTohMSxkZXNjcmliZTohMSx4ZGVzY3JpYmU6ITEsaXQ6ITEseGl0OiExLGNvbnRleHQ6ITEseGNvbnRleHQ6ITEsYmVmb3JlOiExLGFmdGVyOiExLGJlZm9yZUVhY2g6ITEsYWZ0ZXJFYWNoOiExLHN1aXRlOiExLHRlc3Q6ITEsc2V0dXA6ITEsdGVhcmRvd246ITEsc3VpdGVTZXR1cDohMSxzdWl0ZVRlYXJkb3duOiExfSxleHBvcnRzLmphc21pbmU9e2phc21pbmU6ITEsZGVzY3JpYmU6ITEseGRlc2NyaWJlOiExLGl0OiExLHhpdDohMSxiZWZvcmVFYWNoOiExLGFmdGVyRWFjaDohMSxzZXRGaXh0dXJlczohMSxsb2FkRml4dHVyZXM6ITEsc3B5T246ITEsZXhwZWN0OiExLHJ1bnM6ITEsd2FpdHNGb3I6ITEsd2FpdHM6ITEsYmVmb3JlQWxsOiExLGFmdGVyQWxsOiExLGZhaWw6ITEsZmRlc2NyaWJlOiExLGZpdDohMSxwZW5kaW5nOiExfX0se31dfSx7fSxbIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9qc2hpbnQuanMiXSl9KSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X3dvcmtlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3dvcmtlci9taXJyb3IiLCJhY2UvbW9kZS9qYXZhc2NyaXB0L2pzaGludCJdLGZ1bmN0aW9uKGFjZXF1aXJlLGV4cG9ydHMsbW9kdWxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gc3RhcnRSZWdleChhcnIpe3JldHVybiBSZWdFeHAoIl4oIithcnIuam9pbigifCIpKyIpIil9dmFyIG9vcD1hY2VxdWlyZSgiLi4vbGliL29vcCIpLE1pcnJvcj1hY2VxdWlyZSgiLi4vd29ya2VyL21pcnJvciIpLk1pcnJvcixsaW50PWFjZXF1aXJlKCIuL2phdmFzY3JpcHQvanNoaW50IikuSlNISU5ULGRpc2FibGVkV2FybmluZ3NSZT1zdGFydFJlZ2V4KFsiQmFkIGZvciBpbiB2YXJpYWJsZSBcJyguKylcJy4iLFwnTWlzc2luZyAidXNlIHN0cmljdCJcJ10pLGVycm9yc1JlPXN0YXJ0UmVnZXgoWyJVbmV4cGVjdGVkIiwiRXhwZWN0ZWQgIiwiQ29uZnVzaW5nIChwbHVzfG1pbnVzKSIsIlxcXFx7YVxcXFx9IHVudGVybWluYXRlZCByZWd1bGFyIGV4cHJlc3Npb24iLCJVbmNsb3NlZCAiLCJVbm1hdGNoZWQgIiwiVW5iZWd1biBjb21tZW50IiwiQmFkIGludm9jYXRpb24iLCJNaXNzaW5nIHNwYWNlIGFmdGVyIiwiTWlzc2luZyBvcGVyYXRvciBhdCJdKSxpbmZvUmU9c3RhcnRSZWdleChbIkV4cGVjdGVkIGFuIGFzc2lnbm1lbnQiLCJCYWQgZXNjYXBlbWVudCBvZiBFT0wiLCJVbmV4cGVjdGVkIGNvbW1hIiwiVW5leHBlY3RlZCBzcGFjZSIsIk1pc3NpbmcgcmFkaXggcGFyYW1ldGVyLiIsIkEgbGVhZGluZyBkZWNpbWFsIHBvaW50IGNhbiIsIlxcXFxbXCd7YX1cJ1xcXFxdIGlzIGJldHRlciB3cml0dGVuIGluIGRvdCBub3RhdGlvbi4iLCJcJ3thfVwnIHVzZWQgb3V0IG9mIHNjb3BlIl0pLEphdmFTY3JpcHRXb3JrZXI9ZXhwb3J0cy5KYXZhU2NyaXB0V29ya2VyPWZ1bmN0aW9uKHNlbmRlcil7TWlycm9yLmNhbGwodGhpcyxzZW5kZXIpLHRoaXMuc2V0VGltZW91dCg1MDApLHRoaXMuc2V0T3B0aW9ucygpfTtvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdFdvcmtlcixNaXJyb3IpLGZ1bmN0aW9uKCl7dGhpcy5zZXRPcHRpb25zPWZ1bmN0aW9uKG9wdGlvbnMpe3RoaXMub3B0aW9ucz1vcHRpb25zfHx7ZXNuZXh0OiEwLG1vejohMCxkZXZlbDohMCxicm93c2VyOiEwLG5vZGU6ITAsbGF4Y29tbWE6ITAsbGF4YnJlYWs6ITAsbGFzdHNlbWljOiEwLG9uZXZhcjohMSxwYXNzZmFpbDohMSxtYXhlcnI6MTAwLGV4cHI6ITAsbXVsdGlzdHI6ITAsZ2xvYmFsc3RyaWN0OiEwfSx0aGlzLmRvYy5nZXRWYWx1ZSgpJiZ0aGlzLmRlZmVycmVkVXBkYXRlLnNjaGVkdWxlKDEwMCl9LHRoaXMuY2hhbmdlT3B0aW9ucz1mdW5jdGlvbihuZXdPcHRpb25zKXtvb3AubWl4aW4odGhpcy5vcHRpb25zLG5ld09wdGlvbnMpLHRoaXMuZG9jLmdldFZhbHVlKCkmJnRoaXMuZGVmZXJyZWRVcGRhdGUuc2NoZWR1bGUoMTAwKX0sdGhpcy5pc1ZhbGlkSlM9ZnVuY3Rpb24oc3RyKXt0cnl7ZXZhbCgidGhyb3cgMDsiK3N0cil9Y2F0Y2goZSl7aWYoMD09PWUpcmV0dXJuITB9cmV0dXJuITF9LHRoaXMub25VcGRhdGU9ZnVuY3Rpb24oKXt2YXIgdmFsdWU9dGhpcy5kb2MuZ2V0VmFsdWUoKTtpZih2YWx1ZT12YWx1ZS5yZXBsYWNlKC9eIyEuKlxcbi8sIlxcbiIpLCF2YWx1ZSlyZXR1cm4gdGhpcy5zZW5kZXIuZW1pdCgiYW5ub3RhdGUiLFtdKTt2YXIgZXJyb3JzPVtdLG1heEVycm9yTGV2ZWw9dGhpcy5pc1ZhbGlkSlModmFsdWUpPyJ3YXJuaW5nIjoiZXJyb3IiO2xpbnQodmFsdWUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9ucy5nbG9iYWxzKTtmb3IodmFyIHJlc3VsdHM9bGludC5lcnJvcnMsZXJyb3JBZGRlZD0hMSxpPTA7cmVzdWx0cy5sZW5ndGg+aTtpKyspe3ZhciBlcnJvcj1yZXN1bHRzW2ldO2lmKGVycm9yKXt2YXIgcmF3PWVycm9yLnJhdyx0eXBlPSJ3YXJuaW5nIjtpZigiTWlzc2luZyBzZW1pY29sb24uIj09cmF3KXt2YXIgc3RyPWVycm9yLmV2aWRlbmNlLnN1YnN0cihlcnJvci5jaGFyYWN0ZXIpO3N0cj1zdHIuY2hhckF0KHN0ci5zZWFyY2goL1xcUy8pKSwiZXJyb3IiPT1tYXhFcnJvckxldmVsJiZzdHImJi9bXFx3XFxkeyhbXCciXS8udGVzdChzdHIpPyhlcnJvci5yZWFzb249XCdNaXNzaW5nICI7IiBiZWZvcmUgc3RhdGVtZW50XCcsdHlwZT0iZXJyb3IiKTp0eXBlPSJpbmZvIn1lbHNle2lmKGRpc2FibGVkV2FybmluZ3NSZS50ZXN0KHJhdykpY29udGludWU7aW5mb1JlLnRlc3QocmF3KT90eXBlPSJpbmZvIjplcnJvcnNSZS50ZXN0KHJhdyk/KGVycm9yQWRkZWQ9ITAsdHlwZT1tYXhFcnJvckxldmVsKToiXCd7YX1cJyBpcyBub3QgZGVmaW5lZC4iPT1yYXc/dHlwZT0id2FybmluZyI6Ilwne2F9XCcgaXMgZGVmaW5lZCBidXQgbmV2ZXIgdXNlZC4iPT1yYXcmJih0eXBlPSJpbmZvIil9ZXJyb3JzLnB1c2goe3JvdzplcnJvci5saW5lLTEsY29sdW1uOmVycm9yLmNoYXJhY3Rlci0xLHRleHQ6ZXJyb3IucmVhc29uLHR5cGU6dHlwZSxyYXc6cmF3fSl9fXRoaXMuc2VuZGVyLmVtaXQoImFubm90YXRlIixlcnJvcnMpfX0uY2FsbChKYXZhU2NyaXB0V29ya2VyLnByb3RvdHlwZSl9KSxhY2UuZGVmaW5lKCJhY2UvbGliL2VzNS1zaGltIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oKXtmdW5jdGlvbiBFbXB0eSgpe31mdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCJzZW50aW5lbCIse30pLCJzZW50aW5lbCJpbiBvYmplY3R9Y2F0Y2goZXhjZXB0aW9uKXt9fWZ1bmN0aW9uIHRvSW50ZWdlcihuKXtyZXR1cm4gbj0rbixuIT09bj9uPTA6MCE9PW4mJm4hPT0xLzAmJm4hPT0tKDEvMCkmJihuPShuPjB8fC0xKSpNYXRoLmZsb29yKE1hdGguYWJzKG4pKSksbn1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHRoYXQpe3ZhciB0YXJnZXQ9dGhpcztpZigiZnVuY3Rpb24iIT10eXBlb2YgdGFyZ2V0KXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIit0YXJnZXQpO3ZhciBhcmdzPXNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGJvdW5kPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIGJvdW5kKXt2YXIgcmVzdWx0PXRhcmdldC5hcHBseSh0aGlzLGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBPYmplY3QocmVzdWx0KT09PXJlc3VsdD9yZXN1bHQ6dGhpc31yZXR1cm4gdGFyZ2V0LmFwcGx5KHRoYXQsYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSl9O3JldHVybiB0YXJnZXQucHJvdG90eXBlJiYoRW1wdHkucHJvdG90eXBlPXRhcmdldC5wcm90b3R5cGUsYm91bmQucHJvdG90eXBlPW5ldyBFbXB0eSxFbXB0eS5wcm90b3R5cGU9bnVsbCksYm91bmR9KTt2YXIgZGVmaW5lR2V0dGVyLGRlZmluZVNldHRlcixsb29rdXBHZXR0ZXIsbG9va3VwU2V0dGVyLHN1cHBvcnRzQWNjZXNzb3JzLGNhbGw9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwscHJvdG90eXBlT2ZBcnJheT1BcnJheS5wcm90b3R5cGUscHJvdG90eXBlT2ZPYmplY3Q9T2JqZWN0LnByb3RvdHlwZSxzbGljZT1wcm90b3R5cGVPZkFycmF5LnNsaWNlLF90b1N0cmluZz1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QudG9TdHJpbmcpLG93bnM9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTtpZigoc3VwcG9ydHNBY2Nlc3NvcnM9b3ducyhwcm90b3R5cGVPZk9iamVjdCwiX19kZWZpbmVHZXR0ZXJfXyIpKSYmKGRlZmluZUdldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyksZGVmaW5lU2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKSxsb29rdXBHZXR0ZXI9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pLGxvb2t1cFNldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBTZXR0ZXJfXykpLDIhPVsxLDJdLnNwbGljZSgwKS5sZW5ndGgpaWYoZnVuY3Rpb24oKXtmdW5jdGlvbiBtYWtlQXJyYXkobCl7dmFyIGE9QXJyYXkobCsyKTtyZXR1cm4gYVswXT1hWzFdPTAsYX12YXIgbGVuZ3RoQmVmb3JlLGFycmF5PVtdO3JldHVybiBhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXksbWFrZUFycmF5KDIwKSksYXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LG1ha2VBcnJheSgyNikpLGxlbmd0aEJlZm9yZT1hcnJheS5sZW5ndGgsYXJyYXkuc3BsaWNlKDUsMCwiWFhYIiksbGVuZ3RoQmVmb3JlKzE9PWFycmF5Lmxlbmd0aCxsZW5ndGhCZWZvcmUrMT09YXJyYXkubGVuZ3RoPyEwOnZvaWQgMH0oKSl7dmFyIGFycmF5X3NwbGljZT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO0FycmF5LnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24oc3RhcnQsZGVsZXRlQ291bnQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2FycmF5X3NwbGljZS5hcHBseSh0aGlzLFt2b2lkIDA9PT1zdGFydD8wOnN0YXJ0LHZvaWQgMD09PWRlbGV0ZUNvdW50P3RoaXMubGVuZ3RoLXN0YXJ0OmRlbGV0ZUNvdW50XS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsMikpKTpbXX19ZWxzZSBBcnJheS5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKHBvcyxyZW1vdmVDb3VudCl7dmFyIGxlbmd0aD10aGlzLmxlbmd0aDtwb3M+MD9wb3M+bGVuZ3RoJiYocG9zPWxlbmd0aCk6dm9pZCAwPT1wb3M/cG9zPTA6MD5wb3MmJihwb3M9TWF0aC5tYXgobGVuZ3RoK3BvcywwKSksbGVuZ3RoPnBvcytyZW1vdmVDb3VudHx8KHJlbW92ZUNvdW50PWxlbmd0aC1wb3MpO3ZhciByZW1vdmVkPXRoaXMuc2xpY2UocG9zLHBvcytyZW1vdmVDb3VudCksaW5zZXJ0PXNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLGFkZD1pbnNlcnQubGVuZ3RoO2lmKHBvcz09PWxlbmd0aClhZGQmJnRoaXMucHVzaC5hcHBseSh0aGlzLGluc2VydCk7ZWxzZXt2YXIgcmVtb3ZlPU1hdGgubWluKHJlbW92ZUNvdW50LGxlbmd0aC1wb3MpLHRhaWxPbGRQb3M9cG9zK3JlbW92ZSx0YWlsTmV3UG9zPXRhaWxPbGRQb3MrYWRkLXJlbW92ZSx0YWlsQ291bnQ9bGVuZ3RoLXRhaWxPbGRQb3MsbGVuZ3RoQWZ0ZXJSZW1vdmU9bGVuZ3RoLXJlbW92ZTtpZih0YWlsT2xkUG9zPnRhaWxOZXdQb3MpZm9yKHZhciBpPTA7dGFpbENvdW50Pmk7KytpKXRoaXNbdGFpbE5ld1BvcytpXT10aGlzW3RhaWxPbGRQb3MraV07ZWxzZSBpZih0YWlsTmV3UG9zPnRhaWxPbGRQb3MpZm9yKGk9dGFpbENvdW50O2ktLTspdGhpc1t0YWlsTmV3UG9zK2ldPXRoaXNbdGFpbE9sZFBvcytpXTtpZihhZGQmJnBvcz09PWxlbmd0aEFmdGVyUmVtb3ZlKXRoaXMubGVuZ3RoPWxlbmd0aEFmdGVyUmVtb3ZlLHRoaXMucHVzaC5hcHBseSh0aGlzLGluc2VydCk7ZWxzZSBmb3IodGhpcy5sZW5ndGg9bGVuZ3RoQWZ0ZXJSZW1vdmUrYWRkLGk9MDthZGQ+aTsrK2kpdGhpc1twb3MraV09aW5zZXJ0W2ldfXJldHVybiByZW1vdmVkfTtBcnJheS5pc0FycmF5fHwoQXJyYXkuaXNBcnJheT1mdW5jdGlvbihvYmope3JldHVybiJbb2JqZWN0IEFycmF5XSI9PV90b1N0cmluZyhvYmopfSk7dmFyIGJveGVkU3RyaW5nPU9iamVjdCgiYSIpLHNwbGl0U3RyaW5nPSJhIiE9Ym94ZWRTdHJpbmdbMF18fCEoMCBpbiBib3hlZFN0cmluZyk7aWYoQXJyYXkucHJvdG90eXBlLmZvckVhY2h8fChBcnJheS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTpvYmplY3QsdGhpc3A9YXJndW1lbnRzWzFdLGk9LTEsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yO2Zvcig7bGVuZ3RoPisraTspaSBpbiBzZWxmJiZmdW4uY2FsbCh0aGlzcCxzZWxmW2ldLGksb2JqZWN0KX0pLEFycmF5LnByb3RvdHlwZS5tYXB8fChBcnJheS5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wLHJlc3VsdD1BcnJheShsZW5ndGgpLHRoaXNwPWFyZ3VtZW50c1sxXTtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBpPTA7bGVuZ3RoPmk7aSsrKWkgaW4gc2VsZiYmKHJlc3VsdFtpXT1mdW4uY2FsbCh0aGlzcCxzZWxmW2ldLGksb2JqZWN0KSk7cmV0dXJuIHJlc3VsdH0pLEFycmF5LnByb3RvdHlwZS5maWx0ZXJ8fChBcnJheS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uKGZ1bil7dmFyIHZhbHVlLG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wLHJlc3VsdD1bXSx0aGlzcD1hcmd1bWVudHNbMV07aWYoIltvYmplY3QgRnVuY3Rpb25dIiE9X3RvU3RyaW5nKGZ1bikpdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4rIiBpcyBub3QgYSBmdW5jdGlvbiIpO2Zvcih2YXIgaT0wO2xlbmd0aD5pO2krKylpIGluIHNlbGYmJih2YWx1ZT1zZWxmW2ldLGZ1bi5jYWxsKHRoaXNwLHZhbHVlLGksb2JqZWN0KSYmcmVzdWx0LnB1c2godmFsdWUpKTtyZXR1cm4gcmVzdWx0fSksQXJyYXkucHJvdG90eXBlLmV2ZXJ5fHwoQXJyYXkucHJvdG90eXBlLmV2ZXJ5PWZ1bmN0aW9uKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiYiW29iamVjdCBTdHJpbmddIj09X3RvU3RyaW5nKHRoaXMpP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wLHRoaXNwPWFyZ3VtZW50c1sxXTtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBpPTA7bGVuZ3RoPmk7aSsrKWlmKGkgaW4gc2VsZiYmIWZ1bi5jYWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3QpKXJldHVybiExO3JldHVybiEwfSksQXJyYXkucHJvdG90eXBlLnNvbWV8fChBcnJheS5wcm90b3R5cGUuc29tZT1mdW5jdGlvbihmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTpvYmplY3QsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MCx0aGlzcD1hcmd1bWVudHNbMV07aWYoIltvYmplY3QgRnVuY3Rpb25dIiE9X3RvU3RyaW5nKGZ1bikpdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4rIiBpcyBub3QgYSBmdW5jdGlvbiIpO2Zvcih2YXIgaT0wO2xlbmd0aD5pO2krKylpZihpIGluIHNlbGYmJmZ1bi5jYWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3QpKXJldHVybiEwO3JldHVybiExfSksQXJyYXkucHJvdG90eXBlLnJlZHVjZXx8KEFycmF5LnByb3RvdHlwZS5yZWR1Y2U9ZnVuY3Rpb24oZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJiJbb2JqZWN0IFN0cmluZ10iPT1fdG9TdHJpbmcodGhpcyk/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0aD4+PjA7aWYoIltvYmplY3QgRnVuY3Rpb25dIiE9X3RvU3RyaW5nKGZ1bikpdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4rIiBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFsZW5ndGgmJjE9PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3ZhciByZXN1bHQsaT0wO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpcmVzdWx0PWFyZ3VtZW50c1sxXTtlbHNlIGZvcig7Oyl7aWYoaSBpbiBzZWxmKXtyZXN1bHQ9c2VsZltpKytdO2JyZWFrfWlmKCsraT49bGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO2xlbmd0aD5pO2krKylpIGluIHNlbGYmJihyZXN1bHQ9ZnVuLmNhbGwodm9pZCAwLHJlc3VsdCxzZWxmW2ldLGksb2JqZWN0KSk7cmV0dXJuIHJlc3VsdH0pLEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodHx8KEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodD1mdW5jdGlvbihmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTpvYmplY3QsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZigiW29iamVjdCBGdW5jdGlvbl0iIT1fdG9TdHJpbmcoZnVuKSl0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIWxlbmd0aCYmMT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTt2YXIgcmVzdWx0LGk9bGVuZ3RoLTE7aWYoYXJndW1lbnRzLmxlbmd0aD49MilyZXN1bHQ9YXJndW1lbnRzWzFdO2Vsc2UgZm9yKDs7KXtpZihpIGluIHNlbGYpe3Jlc3VsdD1zZWxmW2ktLV07YnJlYWt9aWYoMD4tLWkpdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9ZG8gaSBpbiB0aGlzJiYocmVzdWx0PWZ1bi5jYWxsKHZvaWQgMCxyZXN1bHQsc2VsZltpXSxpLG9iamVjdCkpO3doaWxlKGktLSk7cmV0dXJuIHJlc3VsdH0pLEFycmF5LnByb3RvdHlwZS5pbmRleE9mJiYtMT09WzAsMV0uaW5kZXhPZigxLDIpfHwoQXJyYXkucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oc291Z2h0KXt2YXIgc2VsZj1zcGxpdFN0cmluZyYmIltvYmplY3QgU3RyaW5nXSI9PV90b1N0cmluZyh0aGlzKT90aGlzLnNwbGl0KCIiKTp0b09iamVjdCh0aGlzKSxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wO2lmKCFsZW5ndGgpcmV0dXJuLTE7dmFyIGk9MDtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYoaT10b0ludGVnZXIoYXJndW1lbnRzWzFdKSksaT1pPj0wP2k6TWF0aC5tYXgoMCxsZW5ndGgraSk7bGVuZ3RoPmk7aSsrKWlmKGkgaW4gc2VsZiYmc2VsZltpXT09PXNvdWdodClyZXR1cm4gaTtyZXR1cm4tMX0pLEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiYmLTE9PVswLDFdLmxhc3RJbmRleE9mKDAsLTMpfHwoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHNvdWdodCl7dmFyIHNlbGY9c3BsaXRTdHJpbmcmJiJbb2JqZWN0IFN0cmluZ10iPT1fdG9TdHJpbmcodGhpcyk/dGhpcy5zcGxpdCgiIik6dG9PYmplY3QodGhpcyksbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZighbGVuZ3RoKXJldHVybi0xO3ZhciBpPWxlbmd0aC0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihpPU1hdGgubWluKGksdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpKSxpPWk+PTA/aTpsZW5ndGgtTWF0aC5hYnMoaSk7aT49MDtpLS0paWYoaSBpbiBzZWxmJiZzb3VnaHQ9PT1zZWxmW2ldKXJldHVybiBpO3JldHVybi0xfSksT2JqZWN0LmdldFByb3RvdHlwZU9mfHwoT2JqZWN0LmdldFByb3RvdHlwZU9mPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdC5fX3Byb3RvX198fChvYmplY3QuY29uc3RydWN0b3I/b2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTpwcm90b3R5cGVPZk9iamVjdCl9KSwhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIEVSUl9OT05fT0JKRUNUPSJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Q6ICI7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbihvYmplY3QscHJvcGVydHkpe2lmKCJvYmplY3QiIT10eXBlb2Ygb2JqZWN0JiYiZnVuY3Rpb24iIT10eXBlb2Ygb2JqZWN0fHxudWxsPT09b2JqZWN0KXRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1Qrb2JqZWN0KTtpZihvd25zKG9iamVjdCxwcm9wZXJ0eSkpe3ZhciBkZXNjcmlwdG9yLGdldHRlcixzZXR0ZXI7aWYoZGVzY3JpcHRvcj17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHN1cHBvcnRzQWNjZXNzb3JzKXt2YXIgcHJvdG90eXBlPW9iamVjdC5fX3Byb3RvX187b2JqZWN0Ll9fcHJvdG9fXz1wcm90b3R5cGVPZk9iamVjdDt2YXIgZ2V0dGVyPWxvb2t1cEdldHRlcihvYmplY3QscHJvcGVydHkpLHNldHRlcj1sb29rdXBTZXR0ZXIob2JqZWN0LHByb3BlcnR5KTtpZihvYmplY3QuX19wcm90b19fPXByb3RvdHlwZSxnZXR0ZXJ8fHNldHRlcilyZXR1cm4gZ2V0dGVyJiYoZGVzY3JpcHRvci5nZXQ9Z2V0dGVyKSxzZXR0ZXImJihkZXNjcmlwdG9yLnNldD1zZXR0ZXIpLGRlc2NyaXB0b3J9cmV0dXJuIGRlc2NyaXB0b3IudmFsdWU9b2JqZWN0W3Byb3BlcnR5XSxkZXNjcmlwdG9yfX19aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz1mdW5jdGlvbihvYmplY3Qpe3JldHVybiBPYmplY3Qua2V5cyhvYmplY3QpfSksIU9iamVjdC5jcmVhdGUpe3ZhciBjcmVhdGVFbXB0eTtjcmVhdGVFbXB0eT1udWxsPT09T2JqZWN0LnByb3RvdHlwZS5fX3Byb3RvX18/ZnVuY3Rpb24oKXtyZXR1cm57X19wcm90b19fOm51bGx9fTpmdW5jdGlvbigpe3ZhciBlbXB0eT17fTtmb3IodmFyIGkgaW4gZW1wdHkpZW1wdHlbaV09bnVsbDtyZXR1cm4gZW1wdHkuY29uc3RydWN0b3I9ZW1wdHkuaGFzT3duUHJvcGVydHk9ZW1wdHkucHJvcGVydHlJc0VudW1lcmFibGU9ZW1wdHkuaXNQcm90b3R5cGVPZj1lbXB0eS50b0xvY2FsZVN0cmluZz1lbXB0eS50b1N0cmluZz1lbXB0eS52YWx1ZU9mPWVtcHR5Ll9fcHJvdG9fXz1udWxsLGVtcHR5fSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKHByb3RvdHlwZSxwcm9wZXJ0aWVzKXt2YXIgb2JqZWN0O2lmKG51bGw9PT1wcm90b3R5cGUpb2JqZWN0PWNyZWF0ZUVtcHR5KCk7ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIHByb3RvdHlwZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrdHlwZW9mIHByb3RvdHlwZSsiXSAhPSBcJ29iamVjdFwnIik7dmFyIFR5cGU9ZnVuY3Rpb24oKXt9O1R5cGUucHJvdG90eXBlPXByb3RvdHlwZSxvYmplY3Q9bmV3IFR5cGUsb2JqZWN0Ll9fcHJvdG9fXz1wcm90b3R5cGV9cmV0dXJuIHZvaWQgMCE9PXByb3BlcnRpZXMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCxwcm9wZXJ0aWVzKSxvYmplY3R9fWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl7dmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdD1kb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KSxkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb209InVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudHx8ZG9lc0RlZmluZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7aWYoIWRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdHx8IWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSl2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjaz1PYmplY3QuZGVmaW5lUHJvcGVydHl9aWYoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZGVmaW5lUHJvcGVydHlGYWxsYmFjayl7dmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1I9IlByb3BlcnR5IGRlc2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiLEVSUl9OT05fT0JKRUNUX1RBUkdFVD0iT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiLEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRD0iZ2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkIG9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiO09iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbihvYmplY3QscHJvcGVydHksZGVzY3JpcHRvcil7aWYoIm9iamVjdCIhPXR5cGVvZiBvYmplY3QmJiJmdW5jdGlvbiIhPXR5cGVvZiBvYmplY3R8fG51bGw9PT1vYmplY3QpdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJHRVQrb2JqZWN0KTtpZigib2JqZWN0IiE9dHlwZW9mIGRlc2NyaXB0b3ImJiJmdW5jdGlvbiIhPXR5cGVvZiBkZXNjcmlwdG9yfHxudWxsPT09ZGVzY3JpcHRvcil0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IrZGVzY3JpcHRvcik7aWYoZGVmaW5lUHJvcGVydHlGYWxsYmFjayl0cnl7cmV0dXJuIGRlZmluZVByb3BlcnR5RmFsbGJhY2suY2FsbChPYmplY3Qsb2JqZWN0LHByb3BlcnR5LGRlc2NyaXB0b3IpfWNhdGNoKGV4Y2VwdGlvbil7fWlmKG93bnMoZGVzY3JpcHRvciwidmFsdWUiKSlpZihzdXBwb3J0c0FjY2Vzc29ycyYmKGxvb2t1cEdldHRlcihvYmplY3QscHJvcGVydHkpfHxsb29rdXBTZXR0ZXIob2JqZWN0LHByb3BlcnR5KSkpe3ZhciBwcm90b3R5cGU9b2JqZWN0Ll9fcHJvdG9fXztvYmplY3QuX19wcm90b19fPXByb3RvdHlwZU9mT2JqZWN0LGRlbGV0ZSBvYmplY3RbcHJvcGVydHldLG9iamVjdFtwcm9wZXJ0eV09ZGVzY3JpcHRvci52YWx1ZSxvYmplY3QuX19wcm90b19fPXByb3RvdHlwZX1lbHNlIG9iamVjdFtwcm9wZXJ0eV09ZGVzY3JpcHRvci52YWx1ZTtlbHNle2lmKCFzdXBwb3J0c0FjY2Vzc29ycyl0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7b3ducyhkZXNjcmlwdG9yLCJnZXQiKSYmZGVmaW5lR2V0dGVyKG9iamVjdCxwcm9wZXJ0eSxkZXNjcmlwdG9yLmdldCksb3ducyhkZXNjcmlwdG9yLCJzZXQiKSYmZGVmaW5lU2V0dGVyKG9iamVjdCxwcm9wZXJ0eSxkZXNjcmlwdG9yLnNldCl9cmV0dXJuIG9iamVjdH19T2JqZWN0LmRlZmluZVByb3BlcnRpZXN8fChPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihvYmplY3QscHJvcGVydGllcyl7Zm9yKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKW93bnMocHJvcGVydGllcyxwcm9wZXJ0eSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QscHJvcGVydHkscHJvcGVydGllc1twcm9wZXJ0eV0pO3JldHVybiBvYmplY3R9KSxPYmplY3Quc2VhbHx8KE9iamVjdC5zZWFsPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdH0pLE9iamVjdC5mcmVlemV8fChPYmplY3QuZnJlZXplPWZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuIG9iamVjdH0pO3RyeXtPYmplY3QuZnJlZXplKGZ1bmN0aW9uKCl7fSl9Y2F0Y2goZXhjZXB0aW9uKXtPYmplY3QuZnJlZXplPWZ1bmN0aW9uKGZyZWV6ZU9iamVjdCl7cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG9iamVjdD9vYmplY3Q6ZnJlZXplT2JqZWN0KG9iamVjdCl9fShPYmplY3QuZnJlZXplKX1pZihPYmplY3QucHJldmVudEV4dGVuc2lvbnN8fChPYmplY3QucHJldmVudEV4dGVuc2lvbnM9ZnVuY3Rpb24ob2JqZWN0KXtyZXR1cm4gb2JqZWN0fSksT2JqZWN0LmlzU2VhbGVkfHwoT2JqZWN0LmlzU2VhbGVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9KSxPYmplY3QuaXNGcm96ZW58fChPYmplY3QuaXNGcm96ZW49ZnVuY3Rpb24oKXtyZXR1cm4hMX0pLE9iamVjdC5pc0V4dGVuc2libGV8fChPYmplY3QuaXNFeHRlbnNpYmxlPWZ1bmN0aW9uKG9iamVjdCl7aWYoT2JqZWN0KG9iamVjdCk9PT1vYmplY3QpdGhyb3cgbmV3IFR5cGVFcnJvcjtmb3IodmFyIG5hbWU9IiI7b3ducyhvYmplY3QsbmFtZSk7KW5hbWUrPSI/IjtvYmplY3RbbmFtZV09ITA7dmFyIHJldHVyblZhbHVlPW93bnMob2JqZWN0LG5hbWUpO3JldHVybiBkZWxldGUgb2JqZWN0W25hbWVdLHJldHVyblZhbHVlfSksIU9iamVjdC5rZXlzKXt2YXIgaGFzRG9udEVudW1CdWc9ITAsZG9udEVudW1zPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sZG9udEVudW1zTGVuZ3RoPWRvbnRFbnVtcy5sZW5ndGg7Zm9yKHZhciBrZXkgaW57dG9TdHJpbmc6bnVsbH0paGFzRG9udEVudW1CdWc9ITE7T2JqZWN0LmtleXM9ZnVuY3Rpb24ob2JqZWN0KXtpZigib2JqZWN0IiE9dHlwZW9mIG9iamVjdCYmImZ1bmN0aW9uIiE9dHlwZW9mIG9iamVjdHx8bnVsbD09PW9iamVjdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7dmFyIGtleXM9W107Zm9yKHZhciBuYW1lIGluIG9iamVjdClvd25zKG9iamVjdCxuYW1lKSYma2V5cy5wdXNoKG5hbWUpO2lmKGhhc0RvbnRFbnVtQnVnKWZvcih2YXIgaT0wLGlpPWRvbnRFbnVtc0xlbmd0aDtpaT5pO2krKyl7dmFyIGRvbnRFbnVtPWRvbnRFbnVtc1tpXTtvd25zKG9iamVjdCxkb250RW51bSkmJmtleXMucHVzaChkb250RW51bSl9cmV0dXJuIGtleXN9fURhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0pO3ZhciB3cz0iXHRcXG5cdlxcZlxcciDCoOGagOGgjuKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFxcdTIwMjhcXHUyMDI5XHVmZWZmIjtpZighU3RyaW5nLnByb3RvdHlwZS50cmltfHx3cy50cmltKCkpe3dzPSJbIit3cysiXSI7dmFyIHRyaW1CZWdpblJlZ2V4cD1SZWdFeHAoIl4iK3dzK3dzKyIqIiksdHJpbUVuZFJlZ2V4cD1SZWdFeHAod3Mrd3MrIiokIik7U3RyaW5nLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMrIiIpLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCIiKS5yZXBsYWNlKHRyaW1FbmRSZWdleHAsIiIpfX12YXIgdG9PYmplY3Q9ZnVuY3Rpb24obyl7aWYobnVsbD09byl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW5cJ3QgY29udmVydCAiK28rIiB0byBvYmplY3QiKTtyZXR1cm4gT2JqZWN0KG8pfX0pOyd9LGJiMzY6ZnVuY3Rpb24oZSx0LG4pe2FjZS5kZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwoZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvb29wIiksYT1lKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLHM9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudC5kb2MudGFnIixyZWdleDoiQFtcXHdcXGRfXSsifSxzLmdldFRhZ1J1bGUoKSx7ZGVmYXVsdFRva2VuOiJjb21tZW50LmRvYyIsY2FzZUluc2Vuc2l0aXZlOiEwfV19fTtyLmluaGVyaXRzKHMsYSkscy5nZXRUYWdSdWxlPWZ1bmN0aW9uKGUpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MudGFnLnN0b3JhZ2UudHlwZSIscmVnZXg6IlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIn19LHMuZ2V0U3RhcnRSdWxlPWZ1bmN0aW9uKGUpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLHJlZ2V4OiJcXC9cXCooPz1cXCopIixuZXh0OmV9fSxzLmdldEVuZFJ1bGU9ZnVuY3Rpb24oZSl7cmV0dXJue3Rva2VuOiJjb21tZW50LmRvYyIscmVnZXg6IlxcKlxcLyIsbmV4dDplfX0sdC5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM9c30pKSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwoZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvb29wIiksYT1lKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyxzPWUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsaT0iW2EtekEtWlxcJF/CoS3vv79dW2EtekEtWlxcZFxcJF/CoS3vv79dKiIsbz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoeyJ2YXJpYWJsZS5sYW5ndWFnZSI6IkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8TmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fEFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fEVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnxTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8ZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8aXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHxKU09OfE1hdGh8dGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIsa2V5d29yZDoiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8YnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGlmfGlufG9mfGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8ZGVidWdnZXJ8X19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffGNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwic3RvcmFnZS50eXBlIjoiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsImNvbnN0YW50Lmxhbmd1YWdlIjoibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIiwic3VwcG9ydC5mdW5jdGlvbiI6ImFsZXJ0IiwiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6InRydWV8ZmFsc2UifSwiaWRlbnRpZmllciIpLG49IlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18dVswLTlhLWZBLUZdezR9fHV7WzAtOWEtZkEtRl17MSw2fX18WzAtMl1bMC03XXswLDJ9fDNbMC03XVswLTddP3xbNC03XVswLTddP3wuKSI7dGhpcy4kcnVsZXM9e25vX3JlZ2V4OlthLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksbCgibm9fcmVnZXgiKSx7dG9rZW46InN0cmluZyIscmVnZXg6IicoPz0uKSIsbmV4dDoicXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDonIig/PS4pJyxuZXh0OiJxcXN0cmluZyJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6LzAoPzpbeFhdWzAtOWEtZkEtRl0rfFtvT11bMC03XSt8W2JCXVswMV0rKVxiL30se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDovKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vfSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsInN1cHBvcnQuZnVuY3Rpb24iLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiXSxyZWdleDoiKCIraSsiKShcXC4pKHByb3RvdHlwZSkoXFwuKSgiK2krIikoXFxzKikoPSkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbInN0b3JhZ2UudHlwZSIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIsInRleHQiLCJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6IigiK2krIikoXFwuKSgiK2krIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitpKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIixuZXh0OiJmdW5jdGlvbl9hcmd1bWVudHMifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitpKyIpKFxcLikoIitpKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIixuZXh0OiJmdW5jdGlvbl9hcmd1bWVudHMifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitpKyIpKFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwidGV4dCIsInN0b3JhZ2UudHlwZSIsInRleHQiLCJwYXJlbi5scGFyZW4iXSxyZWdleDoiKCIraSsiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsbmV4dDoiZnVuY3Rpb25fYXJndW1lbnRzIn0se3Rva2VuOlsidGV4dCIsInRleHQiLCJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6Iig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsbmV4dDoiZnVuY3Rpb25fYXJndW1lbnRzIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiZnJvbSg/PVxccyooJ3xcIikpIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiKD86Y2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkKVxcYiIsbmV4dDoic3RhcnQifSx7dG9rZW46WyJzdXBwb3J0LmNvbnN0YW50Il0scmVnZXg6L3RoYXRcYi99LHt0b2tlbjpbInN0b3JhZ2UudHlwZSIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0scmVnZXg6Lyhjb25zb2xlKShcLikod2FybnxpbmZvfGxvZ3xlcnJvcnx0aW1lfHRyYWNlfHRpbWVFbmR8YXNzZXJ0KVxiL30se3Rva2VuOnQscmVnZXg6aX0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6L1suXSg/IVsuXSkvLG5leHQ6InByb3BlcnR5In0se3Rva2VuOiJzdG9yYWdlLnR5cGUiLHJlZ2V4Oi89Pi99LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6Ly0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6L1s/Oiw7Ll0vLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4Oi9bXFsoe10vLG5leHQ6InN0YXJ0In0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4Oi9bXF0pfV0vfSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4Oi9eIyEuKiQvfV0scHJvcGVydHk6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxccysifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitpKyIpKFxcLikoIitpKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKSg/OihcXHMrKShcXHcrKSk/KFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4Oi9bLl0oPyFbLl0pL30se3Rva2VuOiJzdXBwb3J0LmZ1bmN0aW9uIixyZWdleDovKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS99LHt0b2tlbjoic3VwcG9ydC5mdW5jdGlvbi5kb20iLHJlZ2V4Oi8ocyg/OnViKD86c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVtfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFtZWRJdGVtfGMoPzpsKD86aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFUQVNlY3Rpb258YXB0aW9uKXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8UHJvY2Vzc2luZ0luc3RydWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0ZSkpfHRhYkluZGV4fGkoPzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58ZGVsZXRlKD86Um93fEMoPzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3cml0ZSg/OmxuKT98YSg/OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86Q2hpbGR8RGF0YSl8bW92ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8Z2V0KD86TmFtZWRJdGVtfEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWV8Q2xhc3NOYW1lKXxCeUlkKXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGJsdXIpXGIoPz1cKCkvfSx7dG9rZW46InN1cHBvcnQuY29uc3RhbnQiLHJlZ2V4Oi8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvfSx7dG9rZW46ImlkZW50aWZpZXIiLHJlZ2V4Oml9LHtyZWdleDoiIix0b2tlbjoiZW1wdHkiLG5leHQ6Im5vX3JlZ2V4In1dLHN0YXJ0OlthLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksbCgic3RhcnQiKSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJcXC8iLG5leHQ6InJlZ2V4In0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzK3xeJCIsbmV4dDoic3RhcnQifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJub19yZWdleCJ9XSxyZWdleDpbe3Rva2VuOiJyZWdleHAua2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIn0se3Rva2VuOiJzdHJpbmcucmVnZXhwIixyZWdleDoiL1tzeG5naW15XSoiLG5leHQ6Im5vX3JlZ2V4In0se3Rva2VuOiJpbnZhbGlkIixyZWdleDovXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9L30se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Oi9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vfSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIscmVnZXg6L1x8L30se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Oi9cW1xePy8sbmV4dDoicmVnZXhfY2hhcmFjdGVyX2NsYXNzIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiQiLG5leHQ6Im5vX3JlZ2V4In0se2RlZmF1bHRUb2tlbjoic3RyaW5nLnJlZ2V4cCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmNoYXJjbGFzcy5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikifSx7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIscmVnZXg6Il0iLG5leHQ6InJlZ2V4In0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4OiItIn0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiQiLG5leHQ6Im5vX3JlZ2V4In0se2RlZmF1bHRUb2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MifV0sZnVuY3Rpb25fYXJndW1lbnRzOlt7dG9rZW46InZhcmlhYmxlLnBhcmFtZXRlciIscmVnZXg6aX0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IlssIF0rIn0se3Rva2VuOiJwdW5jdHVhdGlvbi5vcGVyYXRvciIscmVnZXg6IiQifSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJub19yZWdleCJ9XSxxcXN0cmluZzpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Om59LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFxcXCQiLGNvbnN1bWVMaW5lRW5kOiEwfSx7dG9rZW46InN0cmluZyIscmVnZXg6JyJ8JCcsbmV4dDoibm9fcmVnZXgifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcifV0scXN0cmluZzpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Om59LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFxcXCQiLGNvbnN1bWVMaW5lRW5kOiEwfSx7dG9rZW46InN0cmluZyIscmVnZXg6Iid8JCIsbmV4dDoibm9fcmVnZXgifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcifV19LGUmJmUubm9FUzZ8fCh0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHtyZWdleDoiW3t9XSIsb25NYXRjaDpmdW5jdGlvbihlLHQsbil7aWYodGhpcy5uZXh0PSJ7Ij09ZT90aGlzLm5leHRTdGF0ZToiIiwieyI9PWUmJm4ubGVuZ3RoKW4udW5zaGlmdCgic3RhcnQiLHQpO2Vsc2UgaWYoIn0iPT1lJiZuLmxlbmd0aCYmKG4uc2hpZnQoKSx0aGlzLm5leHQ9bi5zaGlmdCgpLC0xIT10aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIil8fC0xIT10aGlzLm5leHQuaW5kZXhPZigianN4IikpKXJldHVybiJwYXJlbi5xdWFzaS5lbmQiO3JldHVybiJ7Ij09ZT8icGFyZW4ubHBhcmVuIjoicGFyZW4ucnBhcmVuIn0sbmV4dFN0YXRlOiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nLnF1YXNpLnN0YXJ0IixyZWdleDovYC8scHVzaDpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Om59LHt0b2tlbjoicGFyZW4ucXVhc2kuc3RhcnQiLHJlZ2V4Oi9cJHsvLHB1c2g6InN0YXJ0In0se3Rva2VuOiJzdHJpbmcucXVhc2kuZW5kIixyZWdleDovYC8sbmV4dDoicG9wIn0se2RlZmF1bHRUb2tlbjoic3RyaW5nLnF1YXNpIn1dfSksZSYmMD09ZS5qc3h8fGMuY2FsbCh0aGlzKSksdGhpcy5lbWJlZFJ1bGVzKGEsImRvYy0iLFthLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IildKSx0aGlzLm5vcm1hbGl6ZVJ1bGVzKCl9O2Z1bmN0aW9uIGMoKXt2YXIgZT1pLnJlcGxhY2UoIlxcZCIsIlxcZFxcLSIpLHQ9e29uTWF0Y2g6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIvIj09ZS5jaGFyQXQoMSk/MjoxO3JldHVybiAxPT1yPyh0IT10aGlzLm5leHRTdGF0ZT9uLnVuc2hpZnQodGhpcy5uZXh0LHRoaXMubmV4dFN0YXRlLDApOm4udW5zaGlmdCh0aGlzLm5leHQpLG5bMl0rKyk6Mj09ciYmdD09dGhpcy5uZXh0U3RhdGUmJihuWzFdLS0sKCFuWzFdfHxuWzFdPDApJiYobi5zaGlmdCgpLG4uc2hpZnQoKSkpLFt7dHlwZToibWV0YS50YWcucHVuY3R1YXRpb24uIisoMT09cj8iIjoiZW5kLSIpKyJ0YWctb3Blbi54bWwiLHZhbHVlOmUuc2xpY2UoMCxyKX0se3R5cGU6Im1ldGEudGFnLnRhZy1uYW1lLnhtbCIsdmFsdWU6ZS5zdWJzdHIocil9XX0scmVnZXg6IjwvPyIrZSxuZXh0OiJqc3hBdHRyaWJ1dGVzIixuZXh0U3RhdGU6ImpzeCJ9O3RoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQodCk7dmFyIG49e3JlZ2V4OiJ7Iix0b2tlbjoicGFyZW4ucXVhc2kuc3RhcnQiLHB1c2g6InN0YXJ0In07dGhpcy4kcnVsZXMuanN4PVtuLHQse2luY2x1ZGU6InJlZmVyZW5jZSJ9LHtkZWZhdWx0VG9rZW46InN0cmluZyJ9XSx0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzPVt7dG9rZW46Im1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLHJlZ2V4OiIvPz4iLG9uTWF0Y2g6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PT1uWzBdJiZuLnNoaWZ0KCksMj09ZS5sZW5ndGgmJihuWzBdPT10aGlzLm5leHRTdGF0ZSYmblsxXS0tLCghblsxXXx8blsxXTwwKSYmbi5zcGxpY2UoMCwyKSksdGhpcy5uZXh0PW5bMF18fCJzdGFydCIsW3t0eXBlOnRoaXMudG9rZW4sdmFsdWU6ZX1dfSxuZXh0U3RhdGU6ImpzeCJ9LG4sbCgianN4QXR0cmlidXRlcyIpLHt0b2tlbjoiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIscmVnZXg6ZX0se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIixyZWdleDoiPSJ9LHt0b2tlbjoidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6IiciLHN0YXRlTmFtZToianN4X2F0dHJfcSIscHVzaDpbe3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6IiciLG5leHQ6InBvcCJ9LHtpbmNsdWRlOiJyZWZlcmVuY2UifSx7ZGVmYXVsdFRva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9XX0se3Rva2VuOiJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIscmVnZXg6JyInLHN0YXRlTmFtZToianN4X2F0dHJfcXEiLHB1c2g6W3t0b2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLHJlZ2V4OiciJyxuZXh0OiJwb3AifSx7aW5jbHVkZToicmVmZXJlbmNlIn0se2RlZmF1bHRUb2tlbjoic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifV19LHRdLHRoaXMuJHJ1bGVzLnJlZmVyZW5jZT1be3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIscmVnZXg6Iig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIn1dfWZ1bmN0aW9uIGwoZSl7cmV0dXJuW3t0b2tlbjoiY29tbWVudCIscmVnZXg6L1wvXCovLG5leHQ6W2EuZ2V0VGFnUnVsZSgpLHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcKlxcLyIsbmV4dDplfHwicG9wIn0se2RlZmF1bHRUb2tlbjoiY29tbWVudCIsY2FzZUluc2Vuc2l0aXZlOiEwfV19LHt0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLyIsbmV4dDpbYS5nZXRUYWdSdWxlKCkse3Rva2VuOiJjb21tZW50IixyZWdleDoiJHxeIixuZXh0OmV8fCJwb3AifSx7ZGVmYXVsdFRva2VuOiJjb21tZW50IixjYXNlSW5zZW5zaXRpdmU6ITB9XX1dfXIuaW5oZXJpdHMobyxzKSx0LkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcz1vfSkpLGFjZS5kZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwoZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9yYW5nZSIpLlJhbmdlLGE9ZnVuY3Rpb24oKXt9OyhmdW5jdGlvbigpe3RoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuISEvXlxzKyQvLnRlc3QoZSkmJi9eXHMqXH0vLnRlc3QodCl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldExpbmUodCkubWF0Y2goL14oXHMqXH0pLyk7aWYoIW4pcmV0dXJuIDA7dmFyIGE9blsxXS5sZW5ndGgscz1lLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzp0LGNvbHVtbjphfSk7aWYoIXN8fHMucm93PT10KXJldHVybiAwO3ZhciBpPXRoaXMuJGdldEluZGVudChlLmdldExpbmUocy5yb3cpKTtlLnJlcGxhY2UobmV3IHIodCwwLHQsYS0xKSxpKX0sdGhpcy4kZ2V0SW5kZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKC9eXHMqLylbMF19fSkuY2FsbChhLnByb3RvdHlwZSksdC5NYXRjaGluZ0JyYWNlT3V0ZGVudD1hfSkpLGFjZS5kZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLChmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uLy4uL2xpYi9vb3AiKSxhPWUoIi4uLy4uL3JhbmdlIikuUmFuZ2Uscz1lKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGk9dC5Gb2xkTW9kZT1mdW5jdGlvbihlKXtlJiYodGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bmV3IFJlZ0V4cCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywifCIrZS5zdGFydCkpLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bmV3IFJlZ0V4cCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCJ8IitlLmVuZCkpKX07ci5pbmhlcml0cyhpLHMpLGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9LyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvLHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPS9eXHMqKFwvXCopLipcKlwvXHMqJC8sdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmU9L15ccyooXC9cKlwqXCopLipcKlwvXHMqJC8sdGhpcy5zdGFydFJlZ2lvblJlPS9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLyx0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZT10aGlzLmdldEZvbGRXaWRnZXQsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmdldExpbmUobik7aWYodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChyKSYmIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KHIpJiYhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChyKSlyZXR1cm4iIjt2YXIgYT10aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShlLHQsbik7cmV0dXJuIWEmJnRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KHIpPyJzdGFydCI6YX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGE9ZS5nZXRMaW5lKG4pO2lmKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGEpKXJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhlLGEsbik7dmFyIHM9YS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYocyl7dmFyIGk9cy5pbmRleDtpZihzWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soZSxzWzFdLG4saSk7dmFyIG89ZS5nZXRDb21tZW50Rm9sZFJhbmdlKG4saStzWzBdLmxlbmd0aCwxKTtyZXR1cm4gbyYmIW8uaXNNdWx0aUxpbmUoKSYmKHI/bz10aGlzLmdldFNlY3Rpb25SYW5nZShlLG4pOiJhbGwiIT10JiYobz1udWxsKSksb31yZXR1cm4ibWFya2JlZ2luIiE9PXQmJihzPWEubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcikpPyhpPXMuaW5kZXgrc1swXS5sZW5ndGgsc1sxXT90aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soZSxzWzFdLG4saSk6ZS5nZXRDb21tZW50Rm9sZFJhbmdlKG4saSwtMSkpOnZvaWQgMH0sdGhpcy5nZXRTZWN0aW9uUmFuZ2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5nZXRMaW5lKHQpLHI9bi5zZWFyY2goL1xTLykscz10LGk9bi5sZW5ndGgsbz10Kz0xLGM9ZS5nZXRMZW5ndGgoKTsrK3Q8Yzspe3ZhciBsPShuPWUuZ2V0TGluZSh0KSkuc2VhcmNoKC9cUy8pO2lmKC0xIT09bCl7aWYocj5sKWJyZWFrO3ZhciB1PXRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKGUsImFsbCIsdCk7aWYodSl7aWYodS5zdGFydC5yb3c8PXMpYnJlYWs7aWYodS5pc011bHRpTGluZSgpKXQ9dS5lbmQucm93O2Vsc2UgaWYocj09bClicmVha31vPXR9fXJldHVybiBuZXcgYShzLGksbyxlLmdldExpbmUobykubGVuZ3RoKX0sdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2s9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj10LnNlYXJjaCgvXHMqJC8pLHM9ZS5nZXRMZW5ndGgoKSxpPW4sbz0vXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLyxjPTE7KytuPHM7KXt0PWUuZ2V0TGluZShuKTt2YXIgbD1vLmV4ZWModCk7aWYobCYmKGxbMV0/Yy0tOmMrKywhYykpYnJlYWt9aWYobj5pKXJldHVybiBuZXcgYShpLHIsbix0Lmxlbmd0aCl9fS5jYWxsKGkucHJvdG90eXBlKX0pKSxhY2UuZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sKGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIGE9ZSgiLi4vbGliL29vcCIpLHM9ZSgiLi90ZXh0IikuTW9kZSxpPWUoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsbz1lKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudCxjPWUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50LGw9ZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLHU9ZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLGQ9ZnVuY3Rpb24oKXt0aGlzLkhpZ2hsaWdodFJ1bGVzPWksdGhpcy4kb3V0ZGVudD1uZXcgbyx0aGlzLiRiZWhhdmlvdXI9bmV3IGwsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IHV9O2EuaW5oZXJpdHMoZCxzKSxmdW5jdGlvbigpe3RoaXMubGluZUNvbW1lbnRTdGFydD0iLy8iLHRoaXMuYmxvY2tDb21tZW50PXtzdGFydDoiLyoiLGVuZDoiKi8ifSx0aGlzLiRxdW90ZXM9eyciJzonIicsIiciOiInIiwiYCI6ImAifSx0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLiRnZXRJbmRlbnQodCksYT10aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnModCxlKSxzPWEudG9rZW5zLGk9YS5zdGF0ZTtpZihzLmxlbmd0aCYmImNvbW1lbnQiPT1zW3MubGVuZ3RoLTFdLnR5cGUpcmV0dXJuIHI7aWYoInN0YXJ0Ij09ZXx8Im5vX3JlZ2V4Ij09ZSl7dmFyIG89dC5tYXRjaCgvXi4qKD86XGJjYXNlXGIuKjp8W1x7XChcW10pXHMqJC8pO28mJihyKz1uKX1lbHNlIGlmKCJkb2Mtc3RhcnQiPT1lKXtpZigic3RhcnQiPT1pfHwibm9fcmVnZXgiPT1pKXJldHVybiIiOyhvPXQubWF0Y2goL15ccyooXC8/KVwqLykpJiYob1sxXSYmKHIrPSIgIikscis9IiogIil9cmV0dXJuIHJ9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQodCxuKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihlLHQsbil7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudCh0LG4pfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgYyhbImFjZSJdLG4oIjZkNjgiKSwiSmF2YVNjcmlwdFdvcmtlciIpO3JldHVybiB0LmF0dGFjaFRvRG9jdW1lbnQoZS5nZXREb2N1bWVudCgpKSx0Lm9uKCJhbm5vdGF0ZSIsKGZ1bmN0aW9uKHQpe2Uuc2V0QW5ub3RhdGlvbnModC5kYXRhKX0pKSx0Lm9uKCJ0ZXJtaW5hdGUiLChmdW5jdGlvbigpe2UuY2xlYXJBbm5vdGF0aW9ucygpfSkpLHR9LHRoaXMuJGlkPSJhY2UvbW9kZS9qYXZhc2NyaXB0In0uY2FsbChkLnByb3RvdHlwZSksdC5Nb2RlPWR9KSl9fV0pOw==")))
if err != nil {
panic(err)
}
err = f.Close()
if err != nil {
panic(err)
}
}