WyI8IS0tIEZhY2Vib29rIFBpeGVsIENvZGUgLS0+XG4gICAgPHNjcmlwdD5cbiAgICAgICAgZnVuY3Rpb24gZ2V0RkJDb29raWUoY25hbWUpIHtcbiAgICAgICAgICAgIGxldCBuYW1lID0gY25hbWUgKyBcIj1cIjtcbiAgICAgICAgICAgIGxldCBkZWNvZGVkQ29va2llID0gZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZSk7XG4gICAgICAgICAgICBsZXQgY2EgPSBkZWNvZGVkQ29va2llLnNwbGl0KCc7Jyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGMgPSBjYVtpXTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoYy5jaGFyQXQoMCkgPT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBjLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0VXJsUGFyYW1ldGVyKHBhcmFtKSB7XG4gICAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICAgICAgcmV0dXJuIHVybFBhcmFtcy5nZXQocGFyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNpdGlvbmFsIGNsZWFudXAgdW50aWwgY29va2llcyBhcmUgZXhwaXJleC4gU2FmZSB0byBkZWxldGUgdGhpcyB3aG9sZSBibG9jayBhZnRlciAyMDI2LTA3LTIzLlxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JykuZm9yRWFjaChmdW5jdGlvbiAoY29va2llKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvb2tpZU5hbWUgPSBjb29raWUuc3BsaXQoJz0nKVswXS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvb2tpZU5hbWUuaW5kZXhPZignZmJfZXZlbnRfJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llTmFtZSArICc9O2V4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQ7cGF0aD0vJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICFmdW5jdGlvbiAoZiwgYiwgZSwgdiwgbiwgdCwgcykge1xuICAgICAgICAgICAgaWYgKGYuZmJxKSByZXR1cm47XG4gICAgICAgICAgICBuID0gZi5mYnEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbi5jYWxsTWV0aG9kID9cbiAgICAgICAgICAgICAgICAgICAgbi5jYWxsTWV0aG9kLmFwcGx5KG4sIGFyZ3VtZW50cykgOiBuLnF1ZXVlLnB1c2goYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIWYuX2ZicSkgZi5fZmJxID0gbjtcbiAgICAgICAgICAgIG4ucHVzaCA9IG47XG4gICAgICAgICAgICBuLmxvYWRlZCA9ICEwO1xuICAgICAgICAgICAgbi52ZXJzaW9uID0gXCIyLjBcIjtcbiAgICAgICAgICAgIG4ucXVldWUgPSBbXTtcbiAgICAgICAgICAgIHQgPSBiLmNyZWF0ZUVsZW1lbnQoZSk7XG4gICAgICAgICAgICB0LmFzeW5jID0gITA7XG4gICAgICAgICAgICB0LnNyYyA9IHY7XG4gICAgICAgICAgICBzID0gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShlKVswXTtcbiAgICAgICAgICAgIHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCwgcyk7XG4gICAgICAgIH0od2luZG93LCBkb2N1bWVudCwgXCJzY3JpcHRcIixcbiAgICAgICAgICAgIFwiaHR0cHM6Ly9jb25uZWN0LmZhY2Vib29rLm5ldC9lbl9VUy9mYmV2ZW50cy5qc1wiKTtcblxuICAgICAgICBmYnEoXCJpbml0XCIsICcxNTE5MTk2NzYzMDQ5NDQyJyk7XG4gICAgICAgICAgICAgICAgbGV0IGV2ZW50VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIGxldCBmYnAgPSBnZXRGQkNvb2tpZSgnX2ZicCcpO1xuICAgICAgICBsZXQgZmJjID0gZ2V0RkJDb29raWUoJ19mYmMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR4SWQgPSBnZXRVcmxQYXJhbWV0ZXIoJ2Zvcm1fc3VibWlzc2lvbl9pZCcpID8/IGV2ZW50VGltZTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZXZlbnQgPSBnZXRVcmxQYXJhbWV0ZXIoJ2Zvcm1fc3VibWlzc2lvbl9pZCcpID8gJ0xlYWQnIDogJ1BhZ2VWaWV3JztcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50SUQgPSBgcGFnZS4ke2V2ZW50fS50eF8ke3R4SWR9YDtcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zdCA9IHtcbiAgICAgICAgICAgICAgZG9tYWluOiAnYmFtaWZpdC5ubCcsXG4gICAgICAgICAgICAgIGNvbnZlcnNpb25fdHlwZTogJ1BhZ2VWaWV3JyxcbiAgICAgICAgICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgICAgICAgZXZlbnRfaWQ6IGV2ZW50SUQsXG4gICAgICAgICAgICAgIGV2ZW50X3RpbWU6IGV2ZW50VGltZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChnZXRVcmxQYXJhbWV0ZXIoXCJwYWdlc2VcIikpIHtcbiAgICAgICAgICAgICAgcG9zdC5lbWFpbCA9IGdldFVybFBhcmFtZXRlcihcInBhZ2VzZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdldFVybFBhcmFtZXRlcihcInBhZ2VzZlwiKSkge1xuICAgICAgICAgICAgICBwb3N0LmZpcnN0X25hbWUgPSBnZXRVcmxQYXJhbWV0ZXIoXCJwYWdlc2ZcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChnZXRVcmxQYXJhbWV0ZXIoXCJwYWdlc2xcIikpIHtcbiAgICAgICAgICAgICAgcG9zdC5sYXN0X25hbWUgPSBnZXRVcmxQYXJhbWV0ZXIoXCJwYWdlc2xcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmYnAgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgcG9zdC5mYnAgPSBmYnA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmYmMgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgcG9zdC5mYmMgPSBmYmM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL2JhbWlmaXQubmwvY2xpZW50L2ZhY2Vib29rLWNvbnZlcnNpb24vZXZlbnRzJztcbiAgICAgICAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCB1cmwsIHRydWUpO1xuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LXR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04XCIpO1xuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLVJlcXVlc3RlZC1XaXRoXCIsIFwiWE1MSHR0cFJlcXVlc3RcIik7XG4gICAgICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShwb3N0KSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGxldCBldmVudFN0b3JhZ2VLZXkgPSAnZmJfZXZlbnRfJyArIGV2ZW50SUQ7XG4gICAgICAgICAgICBsZXQgZXZlbnRUcmFja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV2ZW50VHJhY2tlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGV2ZW50U3RvcmFnZUtleSkgIT09IG51bGw7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWxTdG9yYWdlIG1heSBiZSB1bmF2YWlsYWJsZSAocHJpdmF0ZSBtb2RlIC8gZGlzYWJsZWQgc3RvcmFnZSk7IGZpcmUgYW55d2F5LlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHJhY2tlZCkge1xuICAgICAgICAgICAgICAgIGxldCBmYkRhdGEgPSB7fTtcblxuICAgICAgICAgICAgICAgIGlmIChmYnAgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmJEYXRhLmZicCA9IGZicDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZmJjICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZiRGF0YS5mYmMgPSBmYmM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZmJxKFwidHJhY2tcIiwgJ1BhZ2VWaWV3JywgZmJEYXRhLCB7IGV2ZW50SUQ6IGV2ZW50SUQgfSk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShldmVudFN0b3JhZ2VLZXksIGV2ZW50VGltZS50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBldmVudElEIGlzIHVuaXF1ZSBwZXIgcGFnZSBsb2FkIGZvciBub24gYFB1cmNoYXNlYCBldmVudHMgKFBhZ2VWaWV3LEFkZFRvQ2FydCBldGMpLCBzbyB3ZSBjYXBcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFtb3VudCBvZiBrZXlzIGJlY2F1c2UgZnJlcXVlbnQgdGVzdGluZyB0aGUgc2FtZSBwYWdlIHdvdWxkIGJyZWFrIHRoZSBsb2NhbFN0b3JhZ2UgcXVvdGFcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmJFdmVudEtleXMgPSBPYmplY3Qua2V5cyhsb2NhbFN0b3JhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBrZXkuaW5kZXhPZignZmJfZXZlbnRfJykgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGtleSA9PiAoeyBrZXk6IGtleSwgdGltZXN0YW1wOiBwYXJzZUludChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpLCAxMCkgfHwgMCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLnRpbWVzdGFtcCAtIGEudGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgZmJFdmVudEtleXMuc2xpY2UoNTApLmZvckVhY2goZW50cnkgPT4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZW50cnkua2V5KSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgc3RvcmFnZSBmYWlsdXJlcyAocXVvdGEgLyBwcml2YXRlIG1vZGUpLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgPC9zY3JpcHQ+XG4gICAgPCEtLSBFbmQgRmFjZWJvb2sgUGl4ZWwgQ29kZSAtLT5cbiIseyJuYW1lIjoiZmIiLCJsb2NhdGlvbiI6ImhlYWQiLCJjb25zZW50VHlwZSI6InN0YXRpc3RpY2FsIiwiY29udGVudCI6IjwhLS0gRmFjZWJvb2sgUGl4ZWwgQ29kZSAtLT5cbiAgICA8c2NyaXB0PlxuICAgICAgICBmdW5jdGlvbiBnZXRGQkNvb2tpZShjbmFtZSkge1xuICAgICAgICAgICAgbGV0IG5hbWUgPSBjbmFtZSArIFwiPVwiO1xuICAgICAgICAgICAgbGV0IGRlY29kZWRDb29raWUgPSBkZWNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuY29va2llKTtcbiAgICAgICAgICAgIGxldCBjYSA9IGRlY29kZWRDb29raWUuc3BsaXQoJzsnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGNhW2ldO1xuICAgICAgICAgICAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IGMuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYy5pbmRleE9mKG5hbWUpID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWUubGVuZ3RoLCBjLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRVcmxQYXJhbWV0ZXIocGFyYW0pIHtcbiAgICAgICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gdXJsUGFyYW1zLmdldChwYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc2l0aW9uYWwgY2xlYW51cCB1bnRpbCBjb29raWVzIGFyZSBleHBpcmV4LiBTYWZlIHRvIGRlbGV0ZSB0aGlzIHdob2xlIGJsb2NrIGFmdGVyIDIwMjYtMDctMjMuXG4gICAgICAgICAgICBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKS5mb3JFYWNoKGZ1bmN0aW9uIChjb29raWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29va2llTmFtZSA9IGNvb2tpZS5zcGxpdCgnPScpWzBdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoY29va2llTmFtZS5pbmRleE9mKCdmYl9ldmVudF8nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWVOYW1lICsgJz07ZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVDtwYXRoPS8nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgIWZ1bmN0aW9uIChmLCBiLCBlLCB2LCBuLCB0LCBzKSB7XG4gICAgICAgICAgICBpZiAoZi5mYnEpIHJldHVybjtcbiAgICAgICAgICAgIG4gPSBmLmZicSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBuLmNhbGxNZXRob2QgP1xuICAgICAgICAgICAgICAgICAgICBuLmNhbGxNZXRob2QuYXBwbHkobiwgYXJndW1lbnRzKSA6IG4ucXVldWUucHVzaChhcmd1bWVudHMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghZi5fZmJxKSBmLl9mYnEgPSBuO1xuICAgICAgICAgICAgbi5wdXNoID0gbjtcbiAgICAgICAgICAgIG4ubG9hZGVkID0gITA7XG4gICAgICAgICAgICBuLnZlcnNpb24gPSBcIjIuMFwiO1xuICAgICAgICAgICAgbi5xdWV1ZSA9IFtdO1xuICAgICAgICAgICAgdCA9IGIuY3JlYXRlRWxlbWVudChlKTtcbiAgICAgICAgICAgIHQuYXN5bmMgPSAhMDtcbiAgICAgICAgICAgIHQuc3JjID0gdjtcbiAgICAgICAgICAgIHMgPSBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpWzBdO1xuICAgICAgICAgICAgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LCBzKTtcbiAgICAgICAgfSh3aW5kb3csIGRvY3VtZW50LCBcInNjcmlwdFwiLFxuICAgICAgICAgICAgXCJodHRwczovL2Nvbm5lY3QuZmFjZWJvb2submV0L2VuX1VTL2ZiZXZlbnRzLmpzXCIpO1xuXG4gICAgICAgIGZicShcImluaXRcIiwgJzE1MTkxOTY3NjMwNDk0NDInKTtcbiAgICAgICAgICAgICAgICBsZXQgZXZlbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IGZicCA9IGdldEZCQ29va2llKCdfZmJwJyk7XG4gICAgICAgIGxldCBmYmMgPSBnZXRGQkNvb2tpZSgnX2ZiYycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHhJZCA9IGdldFVybFBhcmFtZXRlcignZm9ybV9zdWJtaXNzaW9uX2lkJykgPz8gZXZlbnRUaW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBldmVudCA9IGdldFVybFBhcmFtZXRlcignZm9ybV9zdWJtaXNzaW9uX2lkJykgPyAnTGVhZCcgOiAnUGFnZVZpZXcnO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRJRCA9IGBwYWdlLiR7ZXZlbnR9LnR4XyR7dHhJZH1gO1xuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwb3N0ID0ge1xuICAgICAgICAgICAgICBkb21haW46ICdiYW1pZml0Lm5sJyxcbiAgICAgICAgICAgICAgY29udmVyc2lvbl90eXBlOiAnUGFnZVZpZXcnLFxuICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgICAgICAgICBldmVudF9pZDogZXZlbnRJRCxcbiAgICAgICAgICAgICAgZXZlbnRfdGltZTogZXZlbnRUaW1lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGdldFVybFBhcmFtZXRlcihcInBhZ2VzZVwiKSkge1xuICAgICAgICAgICAgICBwb3N0LmVtYWlsID0gZ2V0VXJsUGFyYW1ldGVyKFwicGFnZXNlXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZ2V0VXJsUGFyYW1ldGVyKFwicGFnZXNmXCIpKSB7XG4gICAgICAgICAgICAgIHBvc3QuZmlyc3RfbmFtZSA9IGdldFVybFBhcmFtZXRlcihcInBhZ2VzZlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdldFVybFBhcmFtZXRlcihcInBhZ2VzbFwiKSkge1xuICAgICAgICAgICAgICBwb3N0Lmxhc3RfbmFtZSA9IGdldFVybFBhcmFtZXRlcihcInBhZ2VzbFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZicCAhPT0gXCJcIikge1xuICAgICAgICAgICAgICBwb3N0LmZicCA9IGZicDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZiYyAhPT0gXCJcIikge1xuICAgICAgICAgICAgICBwb3N0LmZiYyA9IGZiYztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vYmFtaWZpdC5ubC9jbGllbnQvZmFjZWJvb2stY29udmVyc2lvbi9ldmVudHMnO1xuICAgICAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIHVybCwgdHJ1ZSk7XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLThcIik7XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlgtUmVxdWVzdGVkLVdpdGhcIiwgXCJYTUxIdHRwUmVxdWVzdFwiKTtcbiAgICAgICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KHBvc3QpKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgbGV0IGV2ZW50U3RvcmFnZUtleSA9ICdmYl9ldmVudF8nICsgZXZlbnRJRDtcbiAgICAgICAgICAgIGxldCBldmVudFRyYWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXZlbnRUcmFja2VkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oZXZlbnRTdG9yYWdlS2V5KSAhPT0gbnVsbDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2UgbWF5IGJlIHVuYXZhaWxhYmxlIChwcml2YXRlIG1vZGUgLyBkaXNhYmxlZCBzdG9yYWdlKTsgZmlyZSBhbnl3YXkuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZXZlbnRUcmFja2VkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZiRGF0YSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGZicCAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBmYkRhdGEuZmJwID0gZmJwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChmYmMgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmJEYXRhLmZiYyA9IGZiYztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBmYnEoXCJ0cmFja1wiLCAnUGFnZVZpZXcnLCBmYkRhdGEsIHsgZXZlbnRJRDogZXZlbnRJRCB9KTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGV2ZW50U3RvcmFnZUtleSwgZXZlbnRUaW1lLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50SUQgaXMgdW5pcXVlIHBlciBwYWdlIGxvYWQgZm9yIG5vbiBgUHVyY2hhc2VgIGV2ZW50cyAoUGFnZVZpZXcsQWRkVG9DYXJ0IGV0YyksIHNvIHdlIGNhcFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYW1vdW50IG9mIGtleXMgYmVjYXVzZSBmcmVxdWVudCB0ZXN0aW5nIHRoZSBzYW1lIHBhZ2Ugd291bGQgYnJlYWsgdGhlIGxvY2FsU3RvcmFnZSBxdW90YVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmYkV2ZW50S2V5cyA9IE9iamVjdC5rZXlzKGxvY2FsU3RvcmFnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5pbmRleE9mKCdmYl9ldmVudF8nKSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoa2V5ID0+ICh7IGtleToga2V5LCB0aW1lc3RhbXA6IHBhcnNlSW50KGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSksIDEwKSB8fCAwIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIudGltZXN0YW1wIC0gYS50aW1lc3RhbXApO1xuICAgICAgICAgICAgICAgICAgICBmYkV2ZW50S2V5cy5zbGljZSg1MCkuZm9yRWFjaChlbnRyeSA9PiBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShlbnRyeS5rZXkpKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBzdG9yYWdlIGZhaWx1cmVzIChxdW90YSAvIHByaXZhdGUgbW9kZSkuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICA8L3NjcmlwdD5cbiAgICA8IS0tIEVuZCBGYWNlYm9vayBQaXhlbCBDb2RlIC0tPlxuIiwiYXR0cmlidXRlcyI6bnVsbH0seyJuYW1lIjoiTWFpbGJsdWUgdHJhY2tpbmciLCJsb2NhdGlvbiI6ImhlYWQiLCJjb25zZW50VHlwZSI6Im1hcmtldGluZyIsImNvbnRlbnQiOiI8c2NyaXB0PlxuICAgIChmdW5jdGlvbihlLHQsbyxuLHAscixpKXtlLnZpc2l0b3JHbG9iYWxPYmplY3RBbGlhcz1uO2VbZS52aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXNdPWVbZS52aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXNdfHxmdW5jdGlvbigpeyhlW2UudmlzaXRvckdsb2JhbE9iamVjdEFsaWFzXS5xPWVbZS52aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXNdLnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9O2VbZS52aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXNdLmw9KG5ldyBEYXRlKS5nZXRUaW1lKCk7cj10LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7ci5zcmM9bztyLmFzeW5jPXRydWU7aT10LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdO2kucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixpKX0pKHdpbmRvdyxkb2N1bWVudCxcImh0dHBzOi8vZGlmZnVzZXItY2RuLmFwcC11czEuY29tL2RpZmZ1c2VyL2RpZmZ1c2VyLmpzXCIsXCJ2Z29cIik7XG4gICAgdmdvKCdzZXRBY2NvdW50JywgJzY5NDkzMTQyJyk7XG4gICAgdmdvKCdzZXRUcmFja0J5RGVmYXVsdCcsIHRydWUpO1xuXG4gICAgdmdvKCdwcm9jZXNzJyk7XG48L3NjcmlwdD5cbiIsImF0dHJpYnV0ZXMiOltdfV0=
Ga naar hoofdinhoud
Community
Kookboek
E-books
Over mij
Gratis
Community
Kookboek
E-books
Over mij
Gratis
Contact
Heb je een vraag of kom je ergens niet uit?
Of ben je benieuwd naar de mogelijkheden voor een samenwerking?
Neem dan contact met mij op via
[email protected]
.
Ik probeer je vraag zo snel mogelijk te beantwoorden.
© Bamifit — kvk: 83824057
Algemene voorwaarden
Privacybeleid
W10=
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,